{"version":3,"file":"index.cjs","sources":["../../file-preview-core/lib/index.mjs","../src/i18n/LocaleContext.tsx","../src/ThemeContext.tsx","../src/RequestContext.tsx","../src/renderers/Unsupported/index.tsx","../src/hooks/useKeyboardNavigation.ts","../src/hooks/useThemeMode.ts","../src/components/preview/ToolbarButton.tsx","../src/toolbar/renderItems.tsx","../src/components/preview/FilePreviewToolbar.tsx","../src/components/preview/RendererError.tsx","../src/components/preview/RendererErrorBoundary.tsx","../src/renderers/RendererLoading.tsx","../src/components/preview/FilePreviewRenderer.tsx","../src/components/preview/NavArrows.tsx","../src/renderers/lazy.tsx","../src/renderers/registry.tsx","../src/FilePreviewContent.tsx","../src/FilePreviewModal.tsx","../src/FilePreviewEmbed.tsx","../src/utils/pdfConfig.ts","../src/index.ts","../../file-preview-core/lib/heicLoader-CH_raQNn.js","../../file-preview-core/lib/avifLoader-BP3fgcMm.js","../../file-preview-core/lib/tiffLoader-CmUAD1vO.js","../../file-preview-core/lib/rawLoader-0mLvxCNp.js","../../file-preview-core/lib/psdLoader-D5CkupyY.js","../../file-preview-core/lib/jp2Loader-Bn-qPMbD.js","../src/renderers/RendererError.tsx","../src/renderers/Image/index.tsx","../src/renderers/Pdf/index.tsx","../src/renderers/Docx/index.tsx","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/element.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/alphabet.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/cell_range.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/selector.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/scroll.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/history.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/clipboard.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/auto_filter.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/merge.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/helper.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/row.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/col.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/locale/en.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/locale/locale.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/validator.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/validation.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/data_proxy.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/event.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/config.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/resizer.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/scrollbar.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/selector.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/suggest.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/icon.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/calendar.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/datepicker.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/editor.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/button.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/canvas/draw.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/font.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/cell.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/formula.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/format.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/table.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/print.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/contextmenu.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/tooltip.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/item.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/dropdown_item.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/dropdown.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/dropdown_align.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/align.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/valign.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/toggle_item.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/autofilter.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/bold.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/italic.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/strike.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/underline.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/color_palette.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/dropdown_color.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/dropdown_linetype.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/border_palette.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/dropdown_border.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/border.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/icon_item.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/clearformat.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/paintformat.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/text_color.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/fill_color.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/dropdown_fontsize.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/font_size.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/dropdown_font.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/font.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/dropdown_format.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/format.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/dropdown_formula.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/formula.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/freeze.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/merge.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/redo.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/undo.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/print.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/textwrap.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/more.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/index.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/modal.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/form_input.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/form_select.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/form_field.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/modal_validation.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/sort_filter.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/message.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/sheet.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/bottombar.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/index.js","../src/renderers/Xlsx/index.tsx","../src/renderers/Pptx/index.tsx","../src/renderers/Msg/index.tsx","../src/renderers/Epub/index.tsx","../src/renderers/Mobi/index.tsx","../src/renderers/Video/index.tsx","../src/hooks/useAudioPlayer.ts","../src/renderers/Audio/index.tsx","../src/hooks/useShikiHighlight.ts","../src/renderers/Markdown/index.tsx","../../../node_modules/.pnpm/jsonc-parser@3.3.1/node_modules/jsonc-parser/lib/esm/impl/scanner.js","../../../node_modules/.pnpm/jsonc-parser@3.3.1/node_modules/jsonc-parser/lib/esm/impl/string-intern.js","../../../node_modules/.pnpm/jsonc-parser@3.3.1/node_modules/jsonc-parser/lib/esm/impl/parser.js","../../../node_modules/.pnpm/jsonc-parser@3.3.1/node_modules/jsonc-parser/lib/esm/main.js","../src/renderers/Json/index.tsx","../src/renderers/Csv/index.tsx","../src/renderers/Xml/index.tsx","../src/renderers/Subtitle/index.tsx","../src/components/ResizableSplit.tsx","../src/renderers/Zip/index.tsx","../src/renderers/Text/index.tsx","../src/renderers/Font/index.tsx","../src/renderers/Cad/toolbar.tsx","../src/renderers/Cad/index.tsx"],"sourcesContent":["import n from \"jszip\";\nconst LM = [\n  \"image\",\n  \"pdf\",\n  \"docx\",\n  \"xlsx\",\n  \"pptx\",\n  \"msg\",\n  \"epub\",\n  \"mobi\",\n  \"video\",\n  \"audio\",\n  \"markdown\",\n  \"json\",\n  \"csv\",\n  \"xml\",\n  \"subtitle\",\n  \"zip\",\n  \"text\",\n  \"font\",\n  \"cad\"\n];\nfunction u(I) {\n  try {\n    const P = new URL(I).pathname.split(\"/\").pop() || \"file\";\n    return decodeURIComponent(P);\n  } catch {\n    const M = I.split(\"/\").pop() || \"file\";\n    return decodeURIComponent(M);\n  }\n}\nfunction J(I) {\n  var P;\n  const M = ((P = I.split(\".\").pop()) == null ? void 0 : P.toLowerCase()) || \"\";\n  return {\n    // 图片\n    jpg: \"image/jpeg\",\n    jpeg: \"image/jpeg\",\n    png: \"image/png\",\n    gif: \"image/gif\",\n    webp: \"image/webp\",\n    svg: \"image/svg+xml\",\n    bmp: \"image/bmp\",\n    ico: \"image/x-icon\",\n    // 视频\n    mp4: \"video/mp4\",\n    webm: \"video/webm\",\n    ogg: \"video/ogg\",\n    ogv: \"video/ogg\",\n    mov: \"video/quicktime\",\n    avi: \"video/x-msvideo\",\n    mkv: \"video/x-matroska\",\n    m4v: \"video/x-m4v\",\n    \"3gp\": \"video/3gpp\",\n    flv: \"video/x-flv\",\n    // 音频\n    mp3: \"audio/mpeg\",\n    wav: \"audio/wav\",\n    m4a: \"audio/mp4\",\n    aac: \"audio/aac\",\n    flac: \"audio/flac\",\n    // 文档\n    pdf: \"application/pdf\",\n    docx: \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n    xlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n    pptx: \"application/vnd.openxmlformats-officedocument.presentationml.presentation\",\n    ppt: \"application/vnd.ms-powerpoint\",\n    msg: \"application/vnd.ms-outlook\",\n    mobi: \"application/x-mobipocket-ebook\",\n    azw: \"application/vnd.amazon.ebook\",\n    azw3: \"application/vnd.amazon.ebook\",\n    kf8: \"application/vnd.amazon.ebook\",\n    // 文本\n    txt: \"text/plain\",\n    md: \"text/markdown\",\n    markdown: \"text/markdown\",\n    json: \"application/json\",\n    xml: \"application/xml\",\n    html: \"text/html\",\n    css: \"text/css\",\n    js: \"text/javascript\",\n    ts: \"text/typescript\",\n    jsx: \"text/javascript\",\n    tsx: \"text/typescript\",\n    py: \"text/x-python\",\n    java: \"text/x-java\",\n    cpp: \"text/x-c++src\",\n    c: \"text/x-csrc\",\n    cs: \"text/x-csharp\",\n    php: \"text/x-php\",\n    rb: \"text/x-ruby\",\n    go: \"text/x-go\",\n    rs: \"text/x-rust\",\n    yaml: \"text/yaml\",\n    yml: \"text/yaml\",\n    toml: \"text/toml\",\n    ini: \"text/plain\",\n    env: \"text/plain\",\n    diff: \"text/x-diff\",\n    patch: \"text/x-diff\",\n    log: \"text/plain\",\n    csv: \"text/csv\",\n    tsv: \"text/tab-separated-values\",\n    srt: \"application/x-subrip\",\n    vtt: \"text/vtt\",\n    zip: \"application/zip\"\n  }[M] || \"application/octet-stream\";\n}\nfunction r(I, M = 0) {\n  if (I instanceof File)\n    return {\n      id: `file-${Date.now()}-${M}`,\n      name: I.name,\n      url: URL.createObjectURL(I),\n      type: I.type || J(I.name),\n      size: I.size,\n      file: I\n      // 保留原始 File 对象\n    };\n  if (typeof I == \"string\") {\n    const K = u(I);\n    return {\n      id: `url-${Date.now()}-${M}`,\n      name: K,\n      url: I,\n      type: J(K)\n    };\n  }\n  return {\n    id: I.id || `link-${Date.now()}-${M}`,\n    name: I.name,\n    url: I.url,\n    type: I.type || J(I.name),\n    size: I.size\n  };\n}\nfunction QM(I) {\n  return I.map((M, K) => r(M, K));\n}\nfunction EM(I, M) {\n  return M !== void 0 ? M : I === \"modal\";\n}\nfunction UM(I) {\n  var w;\n  const M = ((w = I.name.split(\".\").pop()) == null ? void 0 : w.toLowerCase()) || \"\", K = I.type.toLowerCase();\n  if (K.startsWith(\"image/\") || [\n    \"jpg\",\n    \"jpeg\",\n    \"png\",\n    \"gif\",\n    \"webp\",\n    \"svg\",\n    \"bmp\",\n    \"ico\",\n    // 高级图片格式\n    \"heic\",\n    \"heif\",\n    \"avif\",\n    \"tif\",\n    \"tiff\",\n    // RAW 格式\n    \"cr2\",\n    \"nef\",\n    \"arw\",\n    \"dng\",\n    \"raf\",\n    \"orf\",\n    // 其他专业格式\n    \"psd\",\n    \"jp2\",\n    \"jpx\",\n    \"j2k\"\n  ].includes(M))\n    return \"image\";\n  if (K.includes(\"pdf\") || M === \"pdf\")\n    return \"pdf\";\n  if (K.includes(\"wordprocessingml\") || M === \"docx\")\n    return \"docx\";\n  if (K.includes(\"spreadsheetml\") || M === \"xlsx\")\n    return \"xlsx\";\n  if (K.includes(\"presentationml\") || M === \"pptx\" || M === \"ppt\")\n    return \"pptx\";\n  if (K.includes(\"ms-outlook\") || M === \"msg\")\n    return \"msg\";\n  if (K.includes(\"epub\") || M === \"epub\")\n    return \"epub\";\n  if ([\"mobi\", \"azw\", \"azw3\", \"kf8\"].includes(M) || K === \"application/x-mobipocket-ebook\" || K === \"application/vnd.amazon.ebook\")\n    return \"mobi\";\n  if ([\"csv\", \"tsv\"].includes(M) || K === \"text/csv\" || K === \"text/tab-separated-values\")\n    return \"csv\";\n  if (M === \"xml\" || K === \"application/xml\" || K === \"text/xml\")\n    return \"xml\";\n  if ([\"srt\", \"vtt\", \"lrc\", \"elrc\", \"ass\", \"ssa\", \"ttml\", \"dfxp\"].includes(M) || K === \"text/vtt\" || K === \"application/x-subrip\" || K === \"application/ttml+xml\")\n    return \"subtitle\";\n  if (M === \"zip\" || K === \"application/zip\" || K === \"application/x-zip-compressed\")\n    return \"zip\";\n  if ([\"ttf\", \"otf\", \"woff\", \"woff2\"].includes(M) || K.startsWith(\"font/\") || K === \"application/font-woff\" || K === \"application/font-woff2\" || K === \"application/x-font-ttf\" || K === \"application/x-font-otf\" || K === \"application/font-sfnt\")\n    return \"font\";\n  if ([\"dxf\", \"stl\", \"obj\", \"gltf\", \"glb\"].includes(M) || K === \"application/dxf\" || K === \"application/vnd.ms-pki.stl\" || K === \"model/stl\" || K === \"model/obj\" || K === \"model/gltf+json\" || K === \"model/gltf-binary\")\n    return \"cad\";\n  if (K.startsWith(\"video/\") || [\"mp4\", \"webm\", \"ogg\", \"ogv\", \"mov\", \"avi\", \"mkv\", \"m4v\", \"3gp\", \"flv\"].includes(M))\n    return \"video\";\n  if (K.startsWith(\"audio/\") || [\"mp3\", \"wav\", \"ogg\", \"m4a\", \"flac\", \"aac\"].includes(M))\n    return \"audio\";\n  if (M === \"md\" || M === \"markdown\")\n    return \"markdown\";\n  if (K === \"application/json\" || M === \"json\" || M === \"jsonc\")\n    return \"json\";\n  const P = [\n    \"txt\",\n    \"log\",\n    \"lock\",\n    \"js\",\n    \"jsx\",\n    \"ts\",\n    \"tsx\",\n    \"cjs\",\n    \"mjs\",\n    \"cts\",\n    \"mts\",\n    \"py\",\n    \"java\",\n    \"cpp\",\n    \"c\",\n    \"h\",\n    \"cs\",\n    \"php\",\n    \"rb\",\n    \"go\",\n    \"mod\",\n    \"rs\",\n    \"swift\",\n    \"kt\",\n    \"lua\",\n    \"vim\",\n    \"html\",\n    \"css\",\n    \"scss\",\n    \"sass\",\n    \"less\",\n    \"yaml\",\n    \"yml\",\n    \"toml\",\n    \"ini\",\n    \"conf\",\n    \"env\",\n    \"diff\",\n    \"patch\",\n    \"sh\",\n    \"bash\",\n    \"zsh\",\n    \"sql\"\n  ];\n  return K.startsWith(\"text/\") || P.includes(M) || I.name.startsWith(\".\") && !I.name.includes(\"/\") ? \"text\" : \"unsupported\";\n}\nfunction zM(I) {\n  var P;\n  const M = ((P = I.split(\".\").pop()) == null ? void 0 : P.toLowerCase()) || \"\", K = {\n    js: \"javascript\",\n    jsx: \"jsx\",\n    ts: \"typescript\",\n    tsx: \"tsx\",\n    cjs: \"javascript\",\n    mjs: \"javascript\",\n    cts: \"typescript\",\n    mts: \"typescript\",\n    py: \"python\",\n    java: \"java\",\n    cpp: \"cpp\",\n    c: \"c\",\n    cs: \"csharp\",\n    php: \"php\",\n    rb: \"ruby\",\n    go: \"go\",\n    mod: \"go\",\n    rs: \"rust\",\n    swift: \"swift\",\n    kt: \"kotlin\",\n    lua: \"lua\",\n    vim: \"vim\",\n    scala: \"scala\",\n    sh: \"bash\",\n    bash: \"bash\",\n    zsh: \"bash\",\n    json: \"json\",\n    jsonc: \"json\",\n    xml: \"xml\",\n    html: \"html\",\n    css: \"css\",\n    scss: \"scss\",\n    sass: \"sass\",\n    less: \"less\",\n    sql: \"sql\",\n    yaml: \"yaml\",\n    yml: \"yaml\",\n    toml: \"toml\",\n    ini: \"ini\",\n    env: \"bash\",\n    conf: \"nginx\",\n    diff: \"diff\",\n    patch: \"diff\",\n    log: \"log\",\n    md: \"markdown\",\n    txt: \"text\"\n  };\n  if (K[M])\n    return K[M];\n  if (I.startsWith(\".\")) {\n    const w = I.toLowerCase(), g = {\n      // Git 相关\n      \".gitignore\": \"ini\",\n      \".gitattributes\": \"ini\",\n      \".gitmodules\": \"ini\",\n      \".gitkeep\": \"text\",\n      // 编辑器配置\n      \".editorconfig\": \"ini\",\n      \".prettierrc\": \"json\",\n      \".prettierignore\": \"ini\",\n      \".eslintrc\": \"json\",\n      \".eslintignore\": \"ini\",\n      \".stylelintrc\": \"json\",\n      // Shell 配置\n      \".bashrc\": \"bash\",\n      \".zshrc\": \"bash\",\n      \".bash_profile\": \"bash\",\n      \".zprofile\": \"bash\",\n      \".profile\": \"bash\",\n      \".vimrc\": \"vim\",\n      // 环境变量\n      \".env\": \"bash\",\n      \".env.local\": \"bash\",\n      \".env.development\": \"bash\",\n      \".env.production\": \"bash\",\n      \".env.test\": \"bash\",\n      // 其他配置\n      \".npmrc\": \"ini\",\n      \".yarnrc\": \"ini\",\n      \".nvmrc\": \"text\",\n      \".dockerignore\": \"ini\"\n    };\n    if (g[w])\n      return g[w];\n    if (w.startsWith(\".env\"))\n      return \"bash\";\n    if (w.endsWith(\"rc\"))\n      return \"json\";\n    if (w.endsWith(\"ignore\"))\n      return \"ini\";\n  }\n  return \"text\";\n}\nfunction NM(I) {\n  var P;\n  const M = ((P = I.split(\".\").pop()) == null ? void 0 : P.toLowerCase().split(\"?\")[0]) || \"\";\n  return {\n    mp4: \"video/mp4\",\n    webm: \"video/webm\",\n    ogg: \"video/ogg\",\n    ogv: \"video/ogg\",\n    mov: \"video/quicktime\",\n    avi: \"video/x-msvideo\",\n    mkv: \"video/x-matroska\",\n    m4v: \"video/mp4\",\n    \"3gp\": \"video/3gpp\",\n    flv: \"video/x-flv\"\n  }[M] || \"video/mp4\";\n}\nfunction tM(I) {\n  return I < 1024 ? `${I} B` : I < 1024 * 1024 ? `${(I / 1024).toFixed(1)} KB` : `${(I / (1024 * 1024)).toFixed(1)} MB`;\n}\nfunction fM(I) {\n  if (!isFinite(I) || isNaN(I) || I < 0) return \"0:00\";\n  const M = Math.floor(I / 60), K = Math.floor(I % 60);\n  return `${M}:${K.toString().padStart(2, \"0\")}`;\n}\nfunction VM(I) {\n  var K;\n  return (((K = I.split(\".\").pop()) == null ? void 0 : K.toLowerCase()) || \"\") === \"tsv\" ? \"\t\" : \",\";\n}\nfunction aM(I, M = {}) {\n  const K = M.delimiter ?? \",\", P = M.firstRowAsHeader ?? !0, w = [];\n  let g = [], C = \"\", y = !1, l = 0;\n  const s = I.length;\n  for (; l < s; ) {\n    const j = I[l];\n    if (y) {\n      if (j === '\"') {\n        if (I[l + 1] === '\"') {\n          C += '\"', l += 2;\n          continue;\n        }\n        y = !1, l += 1;\n        continue;\n      }\n      C += j, l += 1;\n      continue;\n    }\n    if (j === '\"') {\n      y = !0, l += 1;\n      continue;\n    }\n    if (j === K) {\n      g.push(C), C = \"\", l += 1;\n      continue;\n    }\n    if (j === \"\\r\") {\n      I[l + 1] === `\n` && (l += 1), g.push(C), w.push(g), g = [], C = \"\", l += 1;\n      continue;\n    }\n    if (j === `\n`) {\n      g.push(C), w.push(g), g = [], C = \"\", l += 1;\n      continue;\n    }\n    C += j, l += 1;\n  }\n  for ((C.length > 0 || g.length > 0) && (g.push(C), w.push(g)); w.length > 0; ) {\n    const j = w[w.length - 1];\n    if (j.length === 1 && j[0] === \"\")\n      w.pop();\n    else\n      break;\n  }\n  let T = [], X = w;\n  P && w.length > 0 && (T = w[0], X = w.slice(1));\n  const S = Math.max(\n    T.length,\n    ...X.map((j) => j.length),\n    0\n  );\n  for (const j of X)\n    for (; j.length < S; ) j.push(\"\");\n  return {\n    header: T,\n    rows: X,\n    columnCount: S,\n    delimiter: K\n  };\n}\nfunction a(I) {\n  const M = I instanceof Uint8Array ? I : new Uint8Array(I);\n  if (M.length >= 3 && M[0] === 239 && M[1] === 187 && M[2] === 191)\n    return new TextDecoder(\"utf-8\").decode(M);\n  if (M.length >= 2 && M[0] === 255 && M[1] === 254)\n    return new TextDecoder(\"utf-16le\").decode(M);\n  if (M.length >= 2 && M[0] === 254 && M[1] === 255)\n    return new TextDecoder(\"utf-16be\").decode(M);\n  try {\n    return new TextDecoder(\"utf-8\", { fatal: !0 }).decode(M);\n  } catch {\n  }\n  try {\n    return new TextDecoder(\"gbk\").decode(M);\n  } catch {\n  }\n  return new TextDecoder(\"utf-8\", { fatal: !1 }).decode(M);\n}\nconst v = a;\nasync function RM(I, M) {\n  const K = !!M && (\"fetcher\" in M || \"init\" in M || \"signal\" in M), P = K ? M.fetcher ?? fetch : fetch, w = K ? M.signal : void 0, g = K ? M.init : M, C = w ? { ...g, signal: w } : g, y = await P(I, C);\n  if (!y.ok) throw new Error(`请求失败: ${y.status}`);\n  const l = await y.arrayBuffer();\n  return a(l);\n}\nasync function e(I, M) {\n  if (I)\n    return typeof I == \"function\" ? await I(M) : I;\n}\nfunction q(I, M) {\n  if (!I && !M) return;\n  if (!I) return M;\n  if (!M) return I;\n  const K = new Headers(I.headers || {});\n  return M.headers && new Headers(M.headers).forEach((P, w) => {\n    K.set(w, P);\n  }), {\n    ...I,\n    ...M,\n    headers: K\n  };\n}\nfunction OM(I) {\n  const M = (I == null ? void 0 : I.requestHandler) ?? ((P, w) => fetch(P, w)), K = I == null ? void 0 : I.requestInit;\n  return async (P, w) => {\n    const g = await e(K, P), C = q(g, w);\n    return M(P, C);\n  };\n}\nasync function nM(I, M = fetch, K) {\n  const P = await M(I, K);\n  if (!P.ok) throw new Error(`请求失败: ${P.status}`);\n  const w = await P.blob();\n  return URL.createObjectURL(w);\n}\nasync function uM(I, M, K = fetch, P) {\n  const w = await K(I, P);\n  if (!w.ok) throw new Error(`请求失败: ${w.status}`);\n  const g = await w.blob(), C = URL.createObjectURL(g);\n  try {\n    const y = document.createElement(\"a\");\n    y.href = C, y.download = M, y.style.display = \"none\", document.body.appendChild(y), y.click(), document.body.removeChild(y);\n  } finally {\n    setTimeout(() => URL.revokeObjectURL(C), 1e3);\n  }\n}\nfunction F(I) {\n  const M = I.trim().replace(\",\", \".\"), K = M.split(\":\").map((P) => P.trim());\n  if (K.length === 3) {\n    const [P, w, g] = K;\n    return Number(P) * 3600 + Number(w) * 60 + Number(g);\n  }\n  if (K.length === 2) {\n    const [P, w] = K;\n    return Number(P) * 60 + Number(w);\n  }\n  return Number(M) || 0;\n}\nfunction rM(I) {\n  if (!isFinite(I) || I < 0) return \"00:00:00.000\";\n  const M = Math.floor(I * 1e3), K = M % 1e3, P = Math.floor(M / 1e3) % 60, w = Math.floor(M / 6e4) % 60, g = Math.floor(M / 36e5), C = (y, l = 2) => y.toString().padStart(l, \"0\");\n  return `${C(g)}:${C(w)}:${C(P)}.${C(K, 3)}`;\n}\nconst L = /(\\d{1,2}:)?\\d{1,2}:\\d{1,2}[.,]\\d{1,3}\\s*-->\\s*(\\d{1,2}:)?\\d{1,2}:\\d{1,2}[.,]\\d{1,3}/, _ = /^\\s*\\[\\d{1,2}:\\d{1,2}(?:[.:]\\d{1,3})?\\]/;\nfunction $(I) {\n  const M = I.replace(/^\\uFEFF/, \"\").trimStart();\n  return /^WEBVTT/.test(M) ? \"vtt\" : /^<\\?xml/i.test(M) || /<tt\\b[^>]*>/i.test(M) ? \"ttml\" : /^\\[Script Info\\]/im.test(M) || /^Dialogue:/m.test(M) ? /ScriptType:\\s*v4\\.00\\s*$/im.test(M) ? \"ssa\" : \"ass\" : _.test(M) || /^\\[(ti|ar|al|au|by|length|offset|re|ve):/im.test(M) ? /<\\d{1,2}:\\d{1,2}(?:[.:]\\d{1,3})?>/.test(M) ? \"elrc\" : \"lrc\" : \"srt\";\n}\nfunction Q(I, M) {\n  const P = I.replace(/\\r\\n?/g, `\n`).replace(/^\\uFEFF/, \"\").split(`\n`), w = [];\n  let g, C = 0;\n  if (M === \"vtt\") {\n    const y = [];\n    for (; C < P.length && P[C].trim() !== \"\"; )\n      y.push(P[C]), C++;\n    for (g = y.join(`\n`); C < P.length && P[C].trim() === \"\"; ) C++;\n  }\n  for (; C < P.length; ) {\n    for (; C < P.length && P[C].trim() === \"\"; ) C++;\n    if (C >= P.length) break;\n    let y, l = null;\n    if (L.test(P[C]))\n      l = P[C], C++;\n    else if (y = P[C].trim() || void 0, C++, C < P.length && L.test(P[C]))\n      l = P[C], C++;\n    else\n      continue;\n    if (!l) continue;\n    const s = l.match(/([\\d:.,]+)\\s*-->\\s*([\\d:.,]+)/);\n    if (!s) continue;\n    const T = F(s[1]), X = F(s[2]), S = [];\n    for (; C < P.length && P[C].trim() !== \"\"; )\n      S.push(P[C]), C++;\n    w.push({ id: y, start: T, end: X, text: S.join(`\n`) });\n  }\n  return { format: M, cues: w, header: g };\n}\nfunction o(I, M, K) {\n  const P = Number(I), w = Number(M);\n  let g = 0;\n  if (K) {\n    const C = (K + \"000\").slice(0, 3);\n    g = Number(C);\n  }\n  return P * 60 + w + g / 1e3;\n}\nfunction R(I, M) {\n  const K = /^\\[(ti|ar|al|au|by|length|offset|re|ve):(.*)\\]$/i.exec(I.trim());\n  if (!K) return !1;\n  const P = K[1].toLowerCase(), w = K[2].trim();\n  if (M.metadata[P] = w, P === \"offset\") {\n    const g = Number(w);\n    isNaN(g) || (M.offsetMs = g);\n  }\n  return !0;\n}\nfunction MM(I) {\n  const K = I.replace(/\\r\\n?/g, `\n`).replace(/^\\uFEFF/, \"\").split(`\n`), P = { metadata: {}, offsetMs: 0 }, w = /\\[(\\d{1,2}):(\\d{1,2})(?:[.:](\\d{1,3}))?\\]/g, g = [];\n  for (const l of K) {\n    const s = l.trim();\n    if (!s || R(s, P)) continue;\n    const T = [];\n    let X = 0;\n    w.lastIndex = 0;\n    let S;\n    for (; (S = w.exec(s)) !== null && S.index === X; )\n      T.push(o(S[1], S[2], S[3])), X = S.index + S[0].length;\n    if (T.length === 0) continue;\n    const j = s.slice(X).trim();\n    for (const B of T)\n      g.push({ start: B, text: j });\n  }\n  g.sort((l, s) => l.start - s.start);\n  const C = P.offsetMs / 1e3;\n  return { format: \"lrc\", cues: g.map((l, s) => {\n    const T = Math.max(0, l.start - C), X = g[s + 1], S = X ? Math.max(T, X.start - C) : T + 5;\n    return { start: T, end: S, text: l.text };\n  }), metadata: P.metadata };\n}\nfunction IM(I) {\n  const K = I.replace(/\\r\\n?/g, `\n`).replace(/^\\uFEFF/, \"\").split(`\n`), P = { metadata: {}, offsetMs: 0 }, w = /\\[(\\d{1,2}):(\\d{1,2})(?:[.:](\\d{1,3}))?\\]/g, g = /<(\\d{1,2}):(\\d{1,2})(?:[.:](\\d{1,3}))?>/g, C = [];\n  for (const s of K) {\n    const T = s.trim();\n    if (!T || R(T, P)) continue;\n    const X = [];\n    let S = 0;\n    w.lastIndex = 0;\n    let j;\n    for (; (j = w.exec(T)) !== null && j.index === S; )\n      X.push(o(j[1], j[2], j[3])), S = j.index + j[0].length;\n    if (X.length === 0) continue;\n    const B = T.slice(S);\n    for (const D of X)\n      C.push({ start: D, raw: B });\n  }\n  C.sort((s, T) => s.start - T.start);\n  const y = P.offsetMs / 1e3;\n  return { format: \"elrc\", cues: C.map((s, T) => {\n    const X = [];\n    let S = \"\", j = 0, B = null;\n    g.lastIndex = 0;\n    let D;\n    for (; (D = g.exec(s.raw)) !== null; ) {\n      const x = s.raw.slice(j, D.index);\n      B !== null && x && X.push({ start: Math.max(0, B - y), text: x }), S += x, B = o(D[1], D[2], D[3]), j = D.index + D[0].length;\n    }\n    const Y = s.raw.slice(j);\n    B !== null && Y && X.push({ start: Math.max(0, B - y), text: Y }), S += Y;\n    const A = Math.max(0, s.start - y), G = C[T + 1], Z = G ? Math.max(A, G.start - y) : A + 5;\n    return {\n      start: A,\n      end: Z,\n      text: S.trim(),\n      words: X.length ? X : void 0\n    };\n  }), metadata: P.metadata };\n}\nfunction E(I) {\n  const M = I.trim().split(\":\");\n  return M.length !== 3 ? 0 : Number(M[0]) * 3600 + Number(M[1]) * 60 + Number(M[2].replace(\",\", \".\"));\n}\nfunction U(I, M) {\n  const P = I.replace(/\\r\\n?/g, `\n`).replace(/^\\uFEFF/, \"\").split(`\n`);\n  let w = \"\", g = [];\n  const C = [], y = [];\n  for (const l of P) {\n    const s = l.replace(/\\s+$/, \"\"), T = s.trim(), X = /^\\[([^\\]]+)\\]\\s*$/.exec(T);\n    if (X) {\n      w = X[1].toLowerCase(), y.push(s);\n      continue;\n    }\n    if (w !== \"events\") {\n      y.push(s);\n      continue;\n    }\n    const S = /^Format:\\s*(.+)$/i.exec(T);\n    if (S) {\n      g = S[1].split(\",\").map((d) => d.trim());\n      continue;\n    }\n    const j = /^(Dialogue|Comment):\\s*(.+)$/i.exec(T);\n    if (!j || j[1].toLowerCase() === \"comment\" || g.length === 0) continue;\n    const B = g.length, D = j[2].split(\",\"), Y = D.slice(0, B - 1), A = D.slice(B - 1).join(\",\"), G = {};\n    g.forEach((d, W) => {\n      G[d] = W === B - 1 ? A : Y[W] ?? \"\";\n    });\n    const Z = E(G.Start || \"\"), x = E(G.End || \"\"), c = (G.Text || \"\").replace(/\\\\N/g, `\n`).replace(/\\\\n/g, `\n`).replace(/\\\\h/g, \" \").replace(/\\{[^}]*\\}/g, \"\");\n    C.push({ start: Z, end: x, text: c, style: G.Style });\n  }\n  return C.sort((l, s) => l.start - s.start), {\n    format: M,\n    cues: C,\n    header: y.join(`\n`).trim() || void 0\n  };\n}\nfunction b(I) {\n  const M = I.trim();\n  if (!M) return 0;\n  const K = /^(\\d+(?:\\.\\d+)?)(h|m|s|ms|f|t)$/i.exec(M);\n  if (K) {\n    const w = Number(K[1]), g = K[2].toLowerCase();\n    return g === \"h\" ? w * 3600 : g === \"m\" ? w * 60 : g === \"ms\" ? w / 1e3 : w;\n  }\n  const P = M.split(\":\");\n  return P.length === 3 ? Number(P[0]) * 3600 + Number(P[1]) * 60 + Number(P[2]) : P.length === 2 ? Number(P[0]) * 60 + Number(P[1]) : Number(M) || 0;\n}\nfunction KM(I) {\n  return I.replace(/&#x([0-9a-fA-F]+);/g, (M, K) => String.fromCharCode(parseInt(K, 16))).replace(/&#(\\d+);/g, (M, K) => String.fromCharCode(Number(K))).replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&apos;/g, \"'\").replace(/&nbsp;/g, \" \").replace(/&amp;/g, \"&\");\n}\nfunction PM(I) {\n  var w, g, C;\n  const M = [], K = /<(?:[\\w-]+:)?p\\b([^>]*)>([\\s\\S]*?)<\\/(?:[\\w-]+:)?p\\s*>/gi;\n  let P;\n  for (; (P = K.exec(I)) !== null; ) {\n    const y = P[1], l = P[2], s = ((w = /\\bbegin\\s*=\\s*[\"']([^\"']+)[\"']/i.exec(y)) == null ? void 0 : w[1]) || \"\", T = ((g = /\\bend\\s*=\\s*[\"']([^\"']+)[\"']/i.exec(y)) == null ? void 0 : g[1]) || \"\", X = ((C = /\\bdur\\s*=\\s*[\"']([^\"']+)[\"']/i.exec(y)) == null ? void 0 : C[1]) || \"\", S = b(s);\n    let j;\n    T ? j = b(T) : X ? j = S + b(X) : j = S + 5;\n    const B = KM(\n      l.replace(/<(?:[\\w-]+:)?br\\s*\\/?>/gi, `\n`).replace(/<[^>]+>/g, \"\")\n    ).replace(/[ \\t]+/g, \" \").replace(/\\n /g, `\n`).trim();\n    (B || S || j) && M.push({ start: S, end: j, text: B });\n  }\n  return M.sort((y, l) => y.start - l.start), { format: \"ttml\", cues: M };\n}\nfunction wM(I) {\n  const M = I.replace(/^\\uFEFF/, \"\");\n  if (typeof DOMParser < \"u\") {\n    const K = new DOMParser().parseFromString(M, \"application/xml\");\n    if (K.getElementsByTagName(\"parsererror\").length === 0) {\n      const w = K.getElementsByTagNameNS ? K.getElementsByTagNameNS(\"*\", \"p\") : K.getElementsByTagName(\"p\");\n      if (w.length > 0) {\n        const g = [];\n        for (let C = 0; C < w.length; C++) {\n          const y = w[C], l = y.getAttribute(\"begin\") || \"\", s = y.getAttribute(\"end\") || \"\", T = y.getAttribute(\"dur\") || \"\", X = b(l);\n          let S;\n          s ? S = b(s) : T ? S = X + b(T) : S = X + 5;\n          let j = \"\";\n          y.childNodes.forEach((D) => {\n            if (D.nodeType === 3)\n              j += D.nodeValue || \"\";\n            else if (D.nodeType === 1) {\n              const Y = D;\n              (Y.localName || Y.tagName).toLowerCase() === \"br\" ? j += `\n` : j += Y.textContent || \"\";\n            }\n          });\n          const B = j.replace(/[ \\t]+/g, \" \").replace(/\\n /g, `\n`).trim();\n          (B || X || S) && g.push({ start: X, end: S, text: B });\n        }\n        return g.sort((C, y) => C.start - y.start), { format: \"ttml\", cues: g };\n      }\n    }\n  }\n  return PM(M);\n}\nfunction vM(I, M) {\n  switch (M ?? $(I)) {\n    case \"lrc\":\n      return MM(I);\n    case \"elrc\":\n      return IM(I);\n    case \"ass\":\n      return U(I, \"ass\");\n    case \"ssa\":\n      return U(I, \"ssa\");\n    case \"ttml\":\n      return wM(I);\n    case \"vtt\":\n      return Q(I, \"vtt\");\n    case \"srt\":\n    default:\n      return Q(I, \"srt\");\n  }\n}\nasync function eM(I) {\n  return n.loadAsync(I);\n}\nfunction qM(I) {\n  const M = [];\n  return I.forEach((K, P) => {\n    var X;\n    const w = P.dir, g = w && !K.endsWith(\"/\") ? K + \"/\" : K, C = w ? g.replace(/\\/$/, \"\") : g, y = C.lastIndexOf(\"/\"), l = y >= 0 ? C.slice(y + 1) : C, s = y >= 0 ? C.slice(0, y) : \"\", T = w ? 0 : ((X = P._data) == null ? void 0 : X.uncompressedSize) ?? 0;\n    M.push({\n      path: g,\n      name: l,\n      dir: s,\n      isDir: w,\n      size: T,\n      date: P.date\n    });\n  }), M;\n}\nfunction _M(I) {\n  const M = { name: \"\", path: \"\", isDir: !0, children: [], size: 0 }, K = /* @__PURE__ */ new Map();\n  K.set(\"\", M);\n  const P = (g) => {\n    if (K.has(g)) return K.get(g);\n    const C = g.split(\"/\").filter(Boolean);\n    let y = M, l = \"\";\n    for (const s of C) {\n      l = l ? `${l}/${s}` : s;\n      let T = K.get(l);\n      T || (T = { name: s, path: l + \"/\", isDir: !0, children: [], size: 0 }, y.children.push(T), K.set(l, T)), y = T;\n    }\n    return y;\n  };\n  for (const g of I) {\n    if (g.isDir) {\n      P(g.path.replace(/\\/$/, \"\"));\n      continue;\n    }\n    P(g.dir).children.push({\n      name: g.name,\n      path: g.path,\n      isDir: !1,\n      size: g.size\n    });\n  }\n  const w = (g) => {\n    if (g.children) {\n      g.children.sort((C, y) => C.isDir !== y.isDir ? C.isDir ? -1 : 1 : C.name.localeCompare(y.name));\n      for (const C of g.children) w(C);\n    }\n  };\n  return w(M), M;\n}\nasync function $M(I, M) {\n  const K = I.file(M);\n  if (!K) throw new Error(`ZIP entry not found: ${M}`);\n  const P = await K.async(\"arraybuffer\");\n  return v(P);\n}\nasync function MI(I, M, K) {\n  const P = I.file(M);\n  if (!P) throw new Error(`ZIP entry not found: ${M}`);\n  const w = await P.async(\"arraybuffer\");\n  return new Blob([w], K ? { type: K } : void 0);\n}\nfunction CM(I) {\n  return I ? I.startsWith(\"#\") ? I : I.length === 8 ? \"#\" + I.substring(2) : I.length === 6 ? \"#\" + I : \"#000000\" : \"#000000\";\n}\nconst gM = [\n  \"FFFFFF\",\n  \"000000\",\n  \"E7E6E6\",\n  \"44546A\",\n  \"4472C4\",\n  \"ED7D31\",\n  \"A5A5A5\",\n  \"FFC000\",\n  \"5B9BD5\",\n  \"70AD47\"\n], yM = [\n  \"000000\",\n  \"FFFFFF\",\n  \"FF0000\",\n  \"00FF00\",\n  \"0000FF\",\n  \"FFFF00\",\n  \"FF00FF\",\n  \"00FFFF\",\n  \"000000\",\n  \"FFFFFF\",\n  \"FF0000\",\n  \"00FF00\",\n  \"0000FF\",\n  \"FFFF00\",\n  \"FF00FF\",\n  \"00FFFF\",\n  \"800000\",\n  \"008000\",\n  \"000080\",\n  \"808000\",\n  \"800080\",\n  \"008080\",\n  \"C0C0C0\",\n  \"808080\",\n  \"9999FF\",\n  \"993366\",\n  \"FFFFCC\",\n  \"CCFFFF\",\n  \"660066\",\n  \"FF8080\",\n  \"0066CC\",\n  \"CCCCFF\",\n  \"000080\",\n  \"FF00FF\",\n  \"FFFF00\",\n  \"00FFFF\",\n  \"800080\",\n  \"800000\",\n  \"008080\",\n  \"0000FF\",\n  \"00CCFF\",\n  \"CCFFFF\",\n  \"CCFFCC\",\n  \"FFFF99\",\n  \"99CCFF\",\n  \"FF99CC\",\n  \"CC99FF\",\n  \"FFCC99\",\n  \"3366FF\",\n  \"33CCCC\",\n  \"99CC00\",\n  \"FFCC00\",\n  \"FF9900\",\n  \"FF6600\",\n  \"666699\",\n  \"969696\",\n  \"003366\",\n  \"339966\",\n  \"003300\",\n  \"333300\",\n  \"993300\",\n  \"993366\",\n  \"333399\",\n  \"333333\"\n];\nfunction lM(I, M) {\n  const K = parseInt(I.substring(0, 2), 16), P = parseInt(I.substring(2, 4), 16), w = parseInt(I.substring(4, 6), 16), g = (s) => M < 0 ? Math.round(s * (1 + M)) : Math.round(s + (255 - s) * M), C = Math.min(255, Math.max(0, g(K))), y = Math.min(255, Math.max(0, g(P))), l = Math.min(255, Math.max(0, g(w)));\n  return C.toString(16).padStart(2, \"0\") + y.toString(16).padStart(2, \"0\") + l.toString(16).padStart(2, \"0\");\n}\nfunction sM(I) {\n  if (I && I.type === \"pattern\" && I.pattern === \"solid\") {\n    const M = I.fgColor;\n    if (M)\n      return m(M);\n  }\n}\nfunction m(I) {\n  if (I) {\n    if (\"argb\" in I && typeof I.argb == \"string\" && I.argb)\n      return CM(I.argb);\n    if (\"theme\" in I && typeof I.theme == \"number\") {\n      const M = gM[I.theme] || \"000000\", K = \"tint\" in I && typeof I.tint == \"number\" ? I.tint : 0;\n      return \"#\" + (K !== 0 ? lM(M, K) : M);\n    }\n    if (\"indexed\" in I && typeof I.indexed == \"number\") {\n      const M = yM[I.indexed];\n      if (M) return \"#\" + M;\n    }\n  }\n}\nfunction TM(I) {\n  if (!I || !I.style) return;\n  const M = m(I.color) || \"#000000\";\n  return [I.style, M];\n}\nfunction SM(I) {\n  const M = {};\n  let K = !1;\n  if (I.font) {\n    const w = I.font;\n    if ((w.name || w.size || w.bold || w.italic) && (K = !0, M.font = {}, w.name && (M.font.name = w.name), w.size && (M.font.size = w.size), w.bold && (M.font.bold = !0), w.italic && (M.font.italic = !0)), w.color) {\n      const g = m(w.color);\n      g && (K = !0, M.color = g);\n    }\n    w.underline && (K = !0, M.underline = !0), w.strike && (K = !0, M.strike = !0);\n  }\n  const P = sM(I.fill);\n  if (P && (K = !0, M.bgcolor = P), I.alignment) {\n    const w = I.alignment;\n    w.horizontal && (K = !0, M.align = w.horizontal), w.vertical && (K = !0, M.valign = w.vertical), w.wrapText && (K = !0, M.textwrap = !0);\n  }\n  if (I.border) {\n    const w = {};\n    let g = !1;\n    const C = [\"top\", \"bottom\", \"left\", \"right\"];\n    for (const y of C) {\n      const l = TM(I.border[y]);\n      l && (w[y] = l, g = !0);\n    }\n    g && (K = !0, M.border = w);\n  }\n  return K ? M : null;\n}\nfunction jM(I) {\n  return JSON.stringify(I);\n}\nfunction XM(I, M, K) {\n  const P = SM(I);\n  if (!P) return -1;\n  const w = jM(P), g = K.get(w);\n  if (g !== void 0) return g;\n  const C = M.length;\n  return M.push(P), K.set(w, C), C;\n}\nfunction BM(I) {\n  const M = I.value;\n  if (M == null) return \"\";\n  if (typeof M == \"string\") return M;\n  if (typeof M == \"number\") return String(M);\n  if (typeof M == \"boolean\") return M ? \"TRUE\" : \"FALSE\";\n  if (M instanceof Date)\n    return M.toLocaleDateString();\n  if (typeof M == \"object\" && \"formula\" in M) {\n    const K = M.result;\n    return K != null ? String(K) : \"\";\n  }\n  return typeof M == \"object\" && \"richText\" in M ? M.richText.map((P) => P.text).join(\"\") : typeof M == \"object\" && \"hyperlink\" in M ? M.text || \"\" : typeof M == \"object\" && \"error\" in M ? String(M.error) : String(M);\n}\nfunction DM(I) {\n  const M = I.split(\":\"), K = z(M[0]), P = M[1] ? z(M[1]) : K;\n  return {\n    top: K.row,\n    left: K.col,\n    bottom: P.row,\n    right: P.col\n  };\n}\nfunction z(I) {\n  const M = I.match(/^([A-Z]+)(\\d+)$/);\n  if (!M) return { row: 1, col: 1 };\n  const K = M[1], P = parseInt(M[2], 10);\n  let w = 0;\n  for (let g = 0; g < K.length; g++)\n    w = w * 26 + (K.charCodeAt(g) - 64);\n  return { row: P, col: w };\n}\nfunction II(I) {\n  const M = [];\n  return I.eachSheet((K) => {\n    const P = [], w = /* @__PURE__ */ new Map(), g = [], C = {}, y = {}, l = K.columnCount;\n    for (let S = 1; S <= l; S++) {\n      const j = K.getColumn(S);\n      j.width && (y[String(S - 1)] = { width: Math.round(j.width * 7.5) });\n    }\n    y.len = Math.max(l, 26);\n    const s = /* @__PURE__ */ new Map(), T = K.model, X = (T == null ? void 0 : T.merges) || [];\n    for (const S of X) {\n      g.push(S);\n      const { top: j, left: B, bottom: D, right: Y } = DM(S), A = D - j, G = Y - B;\n      s.set(`${j - 1},${B - 1}`, [A, G]);\n    }\n    K.eachRow({ includeEmpty: !0 }, (S, j) => {\n      const B = j - 1, D = {};\n      S.eachCell({ includeEmpty: !1 }, (A, G) => {\n        const Z = G - 1;\n        if (A.isMerged && A.master !== A) return;\n        const x = BM(A), c = XM(A, P, w), d = { text: x };\n        c !== -1 && (d.style = c);\n        const W = `${B},${Z}`;\n        s.has(W) && (d.merge = s.get(W)), D[String(Z)] = d;\n      });\n      const Y = { cells: D };\n      S.height && (Y.height = Math.round(S.height * 1.333)), C[String(B)] = Y;\n    }), M.push({\n      name: K.name,\n      styles: P,\n      merges: g,\n      rows: C,\n      cols: y\n    });\n  }), M;\n}\nfunction KI(I, M, K = \"Sheet1\") {\n  const P = I.length > 0, g = P ? [{ font: { bold: !0 } }] : [], C = {};\n  if (P) {\n    const l = {};\n    I.forEach((s, T) => {\n      l[String(T)] = { text: s, style: 0 };\n    }), C[0] = { cells: l };\n  }\n  const y = P ? 1 : 0;\n  return M.forEach((l, s) => {\n    const T = {};\n    l.forEach((X, S) => {\n      X !== void 0 && X !== \"\" && (T[String(S)] = { text: X });\n    }), C[String(s + y)] = { cells: T };\n  }), [{ name: K, styles: g, rows: C }];\n}\nconst N = \"0123456789abcdef\", YM = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\", AM = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\";\nfunction GM(I) {\n  let M = \"\";\n  for (let K = 0; K < I.length; K++) {\n    const P = I[K];\n    M += N[P >> 4] + N[P & 15];\n  }\n  return M;\n}\nfunction t(I) {\n  if (I.length % 2 !== 0)\n    throw new SyntaxError(\"Uint8Array.fromHex: string length must be even\");\n  const M = I.length / 2, K = new Uint8Array(M);\n  for (let P = 0; P < M; P++) {\n    const w = parseInt(I.substr(P * 2, 2), 16);\n    if (Number.isNaN(w))\n      throw new SyntaxError(\"Uint8Array.fromHex: invalid hex string\");\n    K[P] = w;\n  }\n  return K;\n}\nfunction xM(I, M) {\n  let K = \"\", P = 0;\n  const w = I.length;\n  for (; P + 2 < w; P += 3) {\n    const C = I[P] << 16 | I[P + 1] << 8 | I[P + 2];\n    K += M[C >> 18 & 63] + M[C >> 12 & 63] + M[C >> 6 & 63] + M[C & 63];\n  }\n  const g = w - P;\n  if (g === 1) {\n    const C = I[P] << 16;\n    K += M[C >> 18 & 63] + M[C >> 12 & 63] + \"==\";\n  } else if (g === 2) {\n    const C = I[P] << 16 | I[P + 1] << 8;\n    K += M[C >> 18 & 63] + M[C >> 12 & 63] + M[C >> 6 & 63] + \"=\";\n  }\n  return K;\n}\nfunction f(I, M) {\n  const K = {};\n  for (let s = 0; s < M.length; s++) K[M[s]] = s;\n  const P = I.replace(/[\\s=]/g, \"\"), w = Math.floor(P.length * 6 / 8), g = new Uint8Array(w);\n  let C = 0, y = 0, l = 0;\n  for (let s = 0; s < P.length; s++) {\n    const T = K[P[s]];\n    if (T === void 0)\n      throw new SyntaxError(\"Uint8Array.fromBase64: invalid base64 character\");\n    C = C << 6 | T, y += 6, y >= 8 && (y -= 8, g[l++] = C >> y & 255);\n  }\n  return g;\n}\nfunction i(I) {\n  return (I == null ? void 0 : I.alphabet) === \"base64url\" ? AM : YM;\n}\nfunction dM() {\n  if (typeof Uint8Array > \"u\") return;\n  const I = Uint8Array.prototype, M = Uint8Array, K = (P, w, g) => {\n    typeof P[w] != \"function\" && Object.defineProperty(P, w, {\n      value: g,\n      writable: !0,\n      enumerable: !1,\n      configurable: !0\n    });\n  };\n  K(I, \"toHex\", function() {\n    return GM(this);\n  }), K(I, \"toBase64\", function(w) {\n    return xM(this, i(w));\n  }), K(I, \"setFromHex\", function(w) {\n    const g = t(w), C = Math.min(g.length, this.length);\n    return this.set(g.subarray(0, C)), { read: C * 2, written: C };\n  }), K(I, \"setFromBase64\", function(w, g) {\n    const C = f(w, i(g)), y = Math.min(C.length, this.length);\n    return this.set(C.subarray(0, y)), { read: w.length, written: y };\n  }), K(M, \"fromHex\", function(w) {\n    return t(w);\n  }), K(M, \"fromBase64\", function(w, g) {\n    return f(w, i(g));\n  });\n}\nlet H = null;\nfunction PI(I, M) {\n  var y;\n  if (typeof window > \"u\") return;\n  dM();\n  const K = (I == null ? void 0 : I.version) || ((y = I == null ? void 0 : I.GlobalWorkerOptions) == null ? void 0 : y.version) || \"\", {\n    workerSrc: P = `https://unpkg.com/pdfjs-dist@${K}/legacy/build/pdf.worker.min.mjs`,\n    cMapUrl: w = `https://unpkg.com/pdfjs-dist@${K}/cmaps/`,\n    cMapPacked: g = !0,\n    standardFontDataUrl: C = `https://unpkg.com/pdfjs-dist@${K}/standard_fonts/`\n  } = M || {};\n  I.GlobalWorkerOptions && (I.GlobalWorkerOptions.workerSrc = P), H = { cMapUrl: w, cMapPacked: g, standardFontDataUrl: C };\n}\nfunction wI() {\n  return H ? { ...H } : null;\n}\nconst ZM = {\n  // ─────── common ───────\n  \"common.download\": \"下载\",\n  \"common.close\": \"关闭\",\n  \"common.loading\": \"加载中\",\n  \"common.unknown_error\": \"未知错误\",\n  \"common.unsupported_preview\": \"不支持预览此文件类型 ({type})\",\n  \"common.retry\": \"重试\",\n  // ─────── accessibility ───────\n  \"accessibility.previousFile\": \"上一个文件\",\n  \"accessibility.nextFile\": \"下一个文件\",\n  \"accessibility.closePreview\": \"关闭预览\",\n  \"accessibility.downloadFile\": \"下载文件\",\n  // ─────── toolbar ───────\n  \"toolbar.zoom_in\": \"放大\",\n  \"toolbar.zoom_out\": \"缩小\",\n  \"toolbar.rotate_left\": \"向左旋转\",\n  \"toolbar.rotate_right\": \"向右旋转\",\n  \"toolbar.reset\": \"复原\",\n  \"toolbar.fit_to_window\": \"适应窗口\",\n  \"toolbar.original_size\": \"原始尺寸\",\n  \"toolbar.toc\": \"目录\",\n  \"toolbar.outline\": \"大纲\",\n  \"toolbar.prev_page\": \"上一页\",\n  \"toolbar.next_page\": \"下一页\",\n  \"toolbar.full_width\": \"全屏宽度\",\n  \"toolbar.normal_width\": \"正常宽度\",\n  \"toolbar.wrap_on\": \"自动换行\",\n  \"toolbar.wrap_off\": \"不换行\",\n  \"toolbar.source\": \"源码\",\n  \"toolbar.preview\": \"预览\",\n  // ─────── image ───────\n  \"image.load_failed\": \"图片加载失败\",\n  \"image.decode_failed\": \"图片解码失败\",\n  // ─────── pdf ───────\n  \"pdf.load_failed\": \"PDF 文件加载失败\",\n  // ─────── docx ───────\n  \"docx.parse_failed\": \"Word 文档解析失败\",\n  // ─────── xlsx ───────\n  \"xlsx.loading\": \"加载 Excel 中...\",\n  \"xlsx.load_failed\": \"Excel 加载失败\",\n  \"xlsx.parse_failed\": \"Excel 文件解析失败\",\n  \"xlsx.not_found\": \"Excel 文件不存在\",\n  // ─────── pptx ───────\n  \"pptx.loading\": \"加载 PPT 中...\",\n  \"pptx.load_failed\": \"PPT 加载失败\",\n  \"pptx.parse_failed\": \"PPT 文件解析失败\",\n  \"pptx.not_found\": \"PPT 文件不存在\",\n  \"pptx.invalid_format\": \"PPT 文件格式错误或已损坏\",\n  \"pptx.no_pages\": \"PPT 文件无有效页面\",\n  \"pptx.timeout\": \"加载超时，请检查网络或稍后重试\",\n  // ─────── msg ───────\n  \"msg.parse_failed\": \"Outlook 邮件解析失败\",\n  \"msg.parse_failed_short\": \"邮件解析失败\",\n  \"msg.empty_body\": \"（无邮件正文）\",\n  // ─────── epub ───────\n  \"epub.load_failed\": \"EPUB 文件加载失败\",\n  // ─────── mobi ───────\n  \"mobi.load_failed\": \"电子书加载失败，文件可能已损坏或带有 DRM 保护\",\n  // ─────── video ───────\n  \"video.loading\": \"加载视频中...\",\n  \"video.load_failed\": \"视频加载失败\",\n  \"video.load_failed_with_error\": \"视频加载失败: {error}\",\n  \"video.format_not_supported\": \"浏览器不支持 {format} 格式，建议转换为 MP4/WebM 格式\",\n  \"video.unsupported_title\": \"该视频格式无法在浏览器中直接播放\",\n  \"video.unsupported_detail\": \"{format} 是浏览器原生不支持的容器/编码（常见于 AVI / WMV / FLV 及部分 MKV）。请下载到本地播放器观看，或转换为 MP4（H.264 + AAC）。\",\n  \"video.codec_not_supported_detail\": \"视频或音频编码 {codecs} 浏览器无法解码。请转换为 MP4（H.264 + AAC）后再预览。\",\n  // ─────── audio (aria-label) ───────\n  \"audio.aria.play\": \"播放\",\n  \"audio.aria.pause\": \"暂停\",\n  \"audio.aria.forward_10\": \"前进 10 秒\",\n  \"audio.aria.backward_10\": \"后退 10 秒\",\n  \"audio.aria.mute\": \"静音\",\n  \"audio.aria.unmute\": \"取消静音\",\n  \"audio.aria.loop_on\": \"开启循环\",\n  \"audio.aria.loop_off\": \"关闭循环\",\n  \"audio.aria.progress\": \"播放进度\",\n  \"audio.aria.volume\": \"音量\",\n  // ─────── markdown ───────\n  \"markdown.load_failed\": \"Markdown 文件加载失败\",\n  \"markdown.copy_code\": \"复制代码\",\n  \"markdown.copied\": \"已复制\",\n  // ─────── json ───────\n  \"json.load_failed\": \"JSON 文件加载失败\",\n  \"json.items\": \"items\",\n  \"json.keys\": \"keys\",\n  // ─────── csv ───────\n  \"csv.loading\": \"加载 CSV 中...\",\n  \"csv.load_failed\": \"CSV 文件加载失败\",\n  \"csv.parse_failed\": \"CSV 解析失败\",\n  // ─────── xml ───────\n  \"xml.load_failed\": \"XML 文件加载失败\",\n  // ─────── subtitle / lyric ───────\n  \"subtitle.load_failed\": \"字幕文件加载失败\",\n  \"subtitle.parse_failed\": \"字幕解析失败\",\n  \"subtitle.lines\": \"lines\",\n  \"subtitle.cues\": \"cues\",\n  \"subtitle.meta.title\": \"标题\",\n  \"subtitle.meta.artist\": \"艺术家\",\n  \"subtitle.meta.album\": \"专辑\",\n  \"subtitle.meta.author\": \"作者\",\n  \"subtitle.meta.by\": \"制作\",\n  \"subtitle.meta.length\": \"时长\",\n  \"subtitle.meta.offset\": \"偏移\",\n  \"subtitle.meta.editor\": \"编辑器\",\n  \"subtitle.meta.version\": \"版本\",\n  // ─────── zip ───────\n  \"zip.load_failed\": \"ZIP 文件加载失败\",\n  \"zip.parse_failed\": \"ZIP 解析失败\",\n  // ─────── text ───────\n  \"text.load_failed\": \"文本文件加载失败\",\n  // ─────── font ───────\n  \"font.loading\": \"加载字体中...\",\n  \"font.load_failed\": \"字体文件加载失败\",\n  \"font.parse_failed\": \"字体解析失败\",\n  \"font.metadata_loading\": \"解析元数据中...\",\n  \"font.metadata_unavailable\": \"元数据不可用\",\n  \"font.meta.family\": \"字体家族\",\n  \"font.meta.subfamily\": \"子系列\",\n  \"font.meta.version\": \"版本\",\n  \"font.meta.designer\": \"设计师\",\n  \"font.meta.glyphs\": \"字形数量\",\n  \"font.meta.format\": \"格式\",\n  \"font.sample_text_placeholder\": \"输入自定义文本...\",\n  // ─────── cad ───────\n  \"cad.loading\": \"加载 CAD 文件中...\",\n  \"cad.load_failed\": \"CAD 文件加载失败\",\n  \"cad.parse_failed\": \"CAD 文件解析失败\",\n  \"cad.wireframe\": \"线框\",\n  \"cad.solid\": \"实体\",\n  \"cad.grid\": \"网格\",\n  \"cad.axes\": \"坐标轴\"\n}, bM = {\n  // ─────── common ───────\n  \"common.download\": \"Download\",\n  \"common.close\": \"Close\",\n  \"common.loading\": \"Loading\",\n  \"common.unknown_error\": \"Unknown error\",\n  \"common.unsupported_preview\": \"Preview not supported for this file type ({type})\",\n  \"common.retry\": \"Retry\",\n  // ─────── accessibility ───────\n  \"accessibility.previousFile\": \"Previous file\",\n  \"accessibility.nextFile\": \"Next file\",\n  \"accessibility.closePreview\": \"Close preview\",\n  \"accessibility.downloadFile\": \"Download file\",\n  // ─────── toolbar ───────\n  \"toolbar.zoom_in\": \"Zoom in\",\n  \"toolbar.zoom_out\": \"Zoom out\",\n  \"toolbar.rotate_left\": \"Rotate left\",\n  \"toolbar.rotate_right\": \"Rotate right\",\n  \"toolbar.reset\": \"Reset\",\n  \"toolbar.fit_to_window\": \"Fit to window\",\n  \"toolbar.original_size\": \"Original size\",\n  \"toolbar.toc\": \"Table of contents\",\n  \"toolbar.outline\": \"Outline\",\n  \"toolbar.prev_page\": \"Previous page\",\n  \"toolbar.next_page\": \"Next page\",\n  \"toolbar.full_width\": \"Full width\",\n  \"toolbar.normal_width\": \"Normal width\",\n  \"toolbar.wrap_on\": \"Word wrap\",\n  \"toolbar.wrap_off\": \"No wrap\",\n  \"toolbar.source\": \"Source\",\n  \"toolbar.preview\": \"Preview\",\n  // ─────── image ───────\n  \"image.load_failed\": \"Failed to load image\",\n  \"image.decode_failed\": \"Failed to decode image\",\n  // ─────── pdf ───────\n  \"pdf.load_failed\": \"Failed to load PDF\",\n  // ─────── docx ───────\n  \"docx.parse_failed\": \"Failed to parse Word document\",\n  // ─────── xlsx ───────\n  \"xlsx.loading\": \"Loading Excel...\",\n  \"xlsx.load_failed\": \"Failed to load Excel\",\n  \"xlsx.parse_failed\": \"Failed to parse Excel file\",\n  \"xlsx.not_found\": \"Excel file not found\",\n  // ─────── pptx ───────\n  \"pptx.loading\": \"Loading PPT...\",\n  \"pptx.load_failed\": \"Failed to load PPT\",\n  \"pptx.parse_failed\": \"Failed to parse PPT file\",\n  \"pptx.not_found\": \"PPT file not found\",\n  \"pptx.invalid_format\": \"PPT file format is invalid or corrupted\",\n  \"pptx.no_pages\": \"PPT file has no valid pages\",\n  \"pptx.timeout\": \"Loading timed out, please check your network and retry\",\n  // ─────── msg ───────\n  \"msg.parse_failed\": \"Failed to parse Outlook message\",\n  \"msg.parse_failed_short\": \"Failed to parse message\",\n  \"msg.empty_body\": \"(No message body)\",\n  // ─────── epub ───────\n  \"epub.load_failed\": \"Failed to load EPUB\",\n  // ─────── mobi ───────\n  \"mobi.load_failed\": \"Failed to load ebook — file may be corrupted or DRM-protected\",\n  // ─────── video ───────\n  \"video.loading\": \"Loading video...\",\n  \"video.load_failed\": \"Failed to load video\",\n  \"video.load_failed_with_error\": \"Failed to load video: {error}\",\n  \"video.format_not_supported\": \"Browser does not support {format} format. Please convert to MP4/WebM\",\n  \"video.unsupported_title\": \"This video format cannot be played in the browser\",\n  \"video.unsupported_detail\": \"{format} is a container/codec that browsers do not natively support (typical for AVI / WMV / FLV and some MKV files). Please download and play it in a local player, or convert to MP4 (H.264 + AAC).\",\n  \"video.codec_not_supported_detail\": \"The video or audio codec ({codecs}) cannot be decoded by the browser. Please convert to MP4 (H.264 + AAC) before previewing.\",\n  // ─────── audio (aria-label) ───────\n  \"audio.aria.play\": \"Play\",\n  \"audio.aria.pause\": \"Pause\",\n  \"audio.aria.forward_10\": \"Forward 10 seconds\",\n  \"audio.aria.backward_10\": \"Back 10 seconds\",\n  \"audio.aria.mute\": \"Mute\",\n  \"audio.aria.unmute\": \"Unmute\",\n  \"audio.aria.loop_on\": \"Enable loop\",\n  \"audio.aria.loop_off\": \"Disable loop\",\n  \"audio.aria.progress\": \"Playback progress\",\n  \"audio.aria.volume\": \"Volume\",\n  // ─────── markdown ───────\n  \"markdown.load_failed\": \"Failed to load Markdown\",\n  \"markdown.copy_code\": \"Copy code\",\n  \"markdown.copied\": \"Copied\",\n  // ─────── json ───────\n  \"json.load_failed\": \"Failed to load JSON\",\n  \"json.items\": \"items\",\n  \"json.keys\": \"keys\",\n  // ─────── csv ───────\n  \"csv.loading\": \"Loading CSV...\",\n  \"csv.load_failed\": \"Failed to load CSV\",\n  \"csv.parse_failed\": \"Failed to parse CSV\",\n  // ─────── xml ───────\n  \"xml.load_failed\": \"Failed to load XML\",\n  // ─────── subtitle / lyric ───────\n  \"subtitle.load_failed\": \"Failed to load subtitle\",\n  \"subtitle.parse_failed\": \"Failed to parse subtitle\",\n  \"subtitle.lines\": \"lines\",\n  \"subtitle.cues\": \"cues\",\n  \"subtitle.meta.title\": \"Title\",\n  \"subtitle.meta.artist\": \"Artist\",\n  \"subtitle.meta.album\": \"Album\",\n  \"subtitle.meta.author\": \"Author\",\n  \"subtitle.meta.by\": \"By\",\n  \"subtitle.meta.length\": \"Length\",\n  \"subtitle.meta.offset\": \"Offset\",\n  \"subtitle.meta.editor\": \"Editor\",\n  \"subtitle.meta.version\": \"Version\",\n  // ─────── zip ───────\n  \"zip.load_failed\": \"Failed to load ZIP\",\n  \"zip.parse_failed\": \"Failed to parse ZIP\",\n  // ─────── text ───────\n  \"text.load_failed\": \"Failed to load text file\",\n  // ─────── font ───────\n  \"font.loading\": \"Loading font...\",\n  \"font.load_failed\": \"Failed to load font\",\n  \"font.parse_failed\": \"Failed to parse font\",\n  \"font.metadata_loading\": \"Parsing metadata...\",\n  \"font.metadata_unavailable\": \"Metadata unavailable\",\n  \"font.meta.family\": \"Family\",\n  \"font.meta.subfamily\": \"Subfamily\",\n  \"font.meta.version\": \"Version\",\n  \"font.meta.designer\": \"Designer\",\n  \"font.meta.glyphs\": \"Glyphs\",\n  \"font.meta.format\": \"Format\",\n  \"font.sample_text_placeholder\": \"Type custom text...\",\n  // ─────── cad ───────\n  \"cad.loading\": \"Loading CAD file...\",\n  \"cad.load_failed\": \"Failed to load CAD file\",\n  \"cad.parse_failed\": \"Failed to parse CAD file\",\n  \"cad.wireframe\": \"Wireframe\",\n  \"cad.solid\": \"Solid\",\n  \"cad.grid\": \"Grid\",\n  \"cad.axes\": \"Axes\"\n}, p = {\n  \"zh-CN\": ZM,\n  \"en-US\": bM\n}, WM = /\\{(\\w+)\\}/g;\nfunction cM(I, M) {\n  return M ? I.replace(WM, (K, P) => {\n    const w = M[P];\n    return w === void 0 ? `{${P}}` : String(w);\n  }) : I;\n}\nfunction CI(I) {\n  var C;\n  const M = I.fallbackLocale ?? \"zh-CN\", K = p[I.locale] ?? p[M] ?? p[\"zh-CN\"], P = (C = I.messages) == null ? void 0 : C[I.locale], w = P ? { ...K, ...P } : K, g = p[\"zh-CN\"];\n  return (y, l) => {\n    const s = w[y] ?? g[y] ?? y;\n    return cM(s, l);\n  };\n}\nconst pM = {\n  // 标准图片格式\n  jpg: \"image/jpeg\",\n  jpeg: \"image/jpeg\",\n  png: \"image/png\",\n  gif: \"image/gif\",\n  webp: \"image/webp\",\n  svg: \"image/svg+xml\",\n  bmp: \"image/bmp\",\n  ico: \"image/x-icon\",\n  // 高级图片格式\n  heic: \"image/heic\",\n  heif: \"image/heif\",\n  avif: \"image/avif\",\n  tif: \"image/tiff\",\n  tiff: \"image/tiff\",\n  // RAW 格式\n  cr2: \"image/x-canon-cr2\",\n  nef: \"image/x-nikon-nef\",\n  arw: \"image/x-sony-arw\",\n  dng: \"image/x-adobe-dng\",\n  raf: \"image/x-fuji-raf\",\n  orf: \"image/x-olympus-orf\",\n  // 其他专业格式\n  psd: \"image/vnd.adobe.photoshop\",\n  jp2: \"image/jp2\",\n  jpx: \"image/jpx\",\n  j2k: \"image/jp2\",\n  // 文档格式\n  pdf: \"application/pdf\",\n  docx: \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n  xlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n  pptx: \"application/vnd.openxmlformats-officedocument.presentationml.presentation\",\n  ppt: \"application/vnd.ms-powerpoint\",\n  // 其他\n  msg: \"application/vnd.ms-outlook\",\n  epub: \"application/epub+zip\",\n  mobi: \"application/x-mobipocket-ebook\",\n  azw: \"application/vnd.amazon.ebook\",\n  azw3: \"application/vnd.amazon.ebook\",\n  kf8: \"application/vnd.amazon.ebook\",\n  csv: \"text/csv\",\n  tsv: \"text/tab-separated-values\",\n  xml: \"application/xml\",\n  json: \"application/json\",\n  md: \"text/markdown\",\n  markdown: \"text/markdown\",\n  txt: \"text/plain\",\n  zip: \"application/zip\",\n  // 字体\n  ttf: \"font/ttf\",\n  otf: \"font/otf\",\n  woff: \"font/woff\",\n  woff2: \"font/woff2\",\n  // 视频\n  mp4: \"video/mp4\",\n  webm: \"video/webm\",\n  ogg: \"video/ogg\",\n  ogv: \"video/ogg\",\n  mov: \"video/quicktime\",\n  avi: \"video/x-msvideo\",\n  mkv: \"video/x-matroska\",\n  m4v: \"video/mp4\",\n  \"3gp\": \"video/3gpp\",\n  flv: \"video/x-flv\",\n  // 音频\n  mp3: \"audio/mpeg\",\n  wav: \"audio/wav\",\n  m4a: \"audio/mp4\",\n  flac: \"audio/flac\",\n  aac: \"audio/aac\",\n  // 字幕\n  srt: \"application/x-subrip\",\n  vtt: \"text/vtt\",\n  lrc: \"application/x-lrc\",\n  elrc: \"application/x-lrc\",\n  ass: \"text/x-ssa\",\n  ssa: \"text/x-ssa\",\n  ttml: \"application/ttml+xml\",\n  dfxp: \"application/ttml+xml\",\n  // CAD / 3D\n  dxf: \"application/dxf\",\n  stl: \"model/stl\",\n  obj: \"model/obj\",\n  gltf: \"model/gltf+json\",\n  glb: \"model/gltf-binary\"\n};\nfunction JM(I) {\n  const M = I.toLowerCase();\n  return pM[M] || \"application/octet-stream\";\n}\nfunction iM(I) {\n  var K;\n  const M = ((K = I.split(\".\").pop()) == null ? void 0 : K.toLowerCase()) || \"\";\n  return JM(M);\n}\nfunction hM(I) {\n  return [\n    \"image/heic\",\n    \"image/heif\",\n    \"image/avif\",\n    \"image/tiff\",\n    \"image/x-canon-cr2\",\n    \"image/x-nikon-nef\",\n    \"image/x-sony-arw\",\n    \"image/x-adobe-dng\",\n    \"image/x-fuji-raf\",\n    \"image/x-olympus-orf\",\n    \"image/vnd.adobe.photoshop\",\n    \"image/jp2\",\n    \"image/jpx\"\n  ].includes(I);\n}\nfunction gI(I) {\n  return I.startsWith(\"image/x-\") && [\"cr2\", \"nef\", \"arw\", \"dng\", \"raf\", \"orf\"].some((M) => I.includes(M));\n}\nconst k = /* @__PURE__ */ new Map(), h = /* @__PURE__ */ new Map();\nfunction yI(I, M) {\n  k.set(I, M);\n}\nfunction lI(I) {\n  return k.get(I) || null;\n}\nfunction sI(I) {\n  return k.has(I);\n}\nasync function TI(I) {\n  if (h.has(I))\n    return h.get(I);\n  if (!hM(I))\n    return null;\n  try {\n    let M = null;\n    return I === \"image/heic\" || I === \"image/heif\" ? M = (await import(\"./heicLoader-CH_raQNn.js\")).default : I === \"image/avif\" ? M = (await import(\"./avifLoader-BP3fgcMm.js\")).default : I === \"image/tiff\" ? M = (await import(\"./tiffLoader-CmUAD1vO.js\")).default : I === \"image/x-canon-cr2\" || I === \"image/x-nikon-nef\" || I === \"image/x-sony-arw\" || I === \"image/x-adobe-dng\" || I === \"image/x-fuji-raf\" || I === \"image/x-olympus-orf\" ? M = (await import(\"./rawLoader-0mLvxCNp.js\")).default : I === \"image/vnd.adobe.photoshop\" ? M = (await import(\"./psdLoader-D5CkupyY.js\")).default : (I === \"image/jp2\" || I === \"image/jpx\") && (M = (await import(\"./jp2Loader-Bn-qPMbD.js\")).default), M && h.set(I, M), M;\n  } catch (M) {\n    return console.warn(`Failed to load image decoder for ${I}:`, M), null;\n  }\n}\nasync function SI(I) {\n  if (I.type && I.type !== \"application/octet-stream\")\n    return I.type;\n  const M = iM(I.name);\n  if (M !== \"application/octet-stream\")\n    return M;\n  if (I instanceof Blob || I instanceof File) {\n    const K = await oM(I);\n    if (K !== \"application/octet-stream\")\n      return K;\n  }\n  return \"application/octet-stream\";\n}\nasync function oM(I) {\n  try {\n    const M = new Uint8Array(await I.slice(0, 12).arrayBuffer());\n    if (M[4] === 102 && M[5] === 116 && M[6] === 121 && M[7] === 112) {\n      const K = String.fromCharCode(...M.slice(8, 12));\n      if (K === \"heic\" || K === \"heix\" || K === \"mif1\")\n        return \"image/heic\";\n    }\n    if (M[0] === 73 && M[1] === 73 && M[2] === 42 && M[3] === 0 || M[0] === 77 && M[1] === 77 && M[2] === 0 && M[3] === 42)\n      return \"image/tiff\";\n    if (M[4] === 102 && M[5] === 116 && M[6] === 121 && M[7] === 112 && String.fromCharCode(...M.slice(8, 12)) === \"avif\")\n      return \"image/avif\";\n    if (M[0] === 56 && M[1] === 66 && M[2] === 80 && M[3] === 83)\n      return \"image/vnd.adobe.photoshop\";\n    if (M[0] === 255 && M[1] === 79 && M[2] === 255 && M[3] === 81)\n      return \"image/jp2\";\n  } catch (M) {\n    console.warn(\"Failed to detect image format by magic number:\", M);\n  }\n  return \"application/octet-stream\";\n}\nconst O = \"ZnVuY3Rpb24gZGYociwgZSkgewogIHJldHVybiBlLmZvckVhY2goZnVuY3Rpb24oYSkgewogICAgYSAmJiB0eXBlb2YgYSAhPSAic3RyaW5nIiAmJiAhQXJyYXkuaXNBcnJheShhKSAmJiBPYmplY3Qua2V5cyhhKS5mb3JFYWNoKGZ1bmN0aW9uKEEpIHsKICAgICAgaWYgKEEgIT09ICJkZWZhdWx0IiAmJiAhKEEgaW4gcikpIHsKICAgICAgICB2YXIgdCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYSwgQSk7CiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIEEsIHQuZ2V0ID8gdCA6IHsKICAgICAgICAgIGVudW1lcmFibGU6ICEwLAogICAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgcmV0dXJuIGFbQV07CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0pOwogIH0pLCBPYmplY3QuZnJlZXplKHIpOwp9CmFzeW5jIGZ1bmN0aW9uIGhmKHIpIHsKICByZXR1cm4gciA9PT0gImltYWdlL2hlaWMiIHx8IHIgPT09ICJpbWFnZS9oZWlmIiA/IChhd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIGdmOwogIH0pKS5kZWZhdWx0IDogciA9PT0gImltYWdlL3gtY2Fub24tY3IyIiB8fCByID09PSAiaW1hZ2UveC1uaWtvbi1uZWYiIHx8IHIgPT09ICJpbWFnZS94LXNvbnktYXJ3IiB8fCByID09PSAiaW1hZ2UveC1hZG9iZS1kbmciIHx8IHIgPT09ICJpbWFnZS94LWZ1amktcmFmIiB8fCByID09PSAiaW1hZ2UveC1vbHltcHVzLW9yZiIgPyAoYXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpIHsKICAgIHJldHVybiB5ZjsKICB9KSkuZGVmYXVsdCA6IHIgPT09ICJpbWFnZS92bmQuYWRvYmUucGhvdG9zaG9wIiA/IChhd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIElmOwogIH0pKS5kZWZhdWx0IDogbnVsbDsKfQpzZWxmLm9ubWVzc2FnZSA9IGFzeW5jIChyKSA9PiB7CiAgY29uc3QgeyBpZDogZSwgbWltZVR5cGU6IGEsIGJ1ZmZlcjogQSwgb3B0aW9uczogdCB9ID0gci5kYXRhOwogIHRyeSB7CiAgICBjb25zdCBpID0gYXdhaXQgaGYoYSk7CiAgICBpZiAoIWkpIHsKICAgICAgY29uc3QgbCA9IHsKICAgICAgICBpZDogZSwKICAgICAgICBzdWNjZXNzOiAhMSwKICAgICAgICBlcnJvcjogYOS4jeaUr+aMgeeahCBNSU1FIOexu+WeizogJHthfWAKICAgICAgfTsKICAgICAgc2VsZi5wb3N0TWVzc2FnZShsKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgbiA9IGF3YWl0IGkuZGVjb2RlKEEsIHQpLCBmID0gbiBpbnN0YW5jZW9mIEJsb2IgPyBuIDogbmV3IEJsb2IoW25dLCB7IHR5cGU6ICJpbWFnZS9wbmciIH0pLCB1ID0gYXdhaXQgZi5hcnJheUJ1ZmZlcigpLCBvID0gewogICAgICBpZDogZSwKICAgICAgc3VjY2VzczogITAsCiAgICAgIGRhdGE6IHUsCiAgICAgIG1pbWVUeXBlOiBmLnR5cGUgfHwgImltYWdlL3BuZyIKICAgIH07CiAgICBzZWxmLnBvc3RNZXNzYWdlKG8sIFt1XSk7CiAgfSBjYXRjaCAoaSkgewogICAgY29uc3QgbiA9IHsKICAgICAgaWQ6IGUsCiAgICAgIHN1Y2Nlc3M6ICExLAogICAgICBlcnJvcjogKGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkubWVzc2FnZSkgfHwgIuino+eggeWksei0pSIKICAgIH07CiAgICBzZWxmLnBvc3RNZXNzYWdlKG4pOwogIH0KfTsKY2xhc3MgdmYgewogIC8qKgogICAqIEhFSUMg5qC85byP5rWP6KeI5Zmo5Z2H5LiN5Y6f55Sf5pSv5oyB77yM5aeL57uI6ZyA6KaB6Kej56CBCiAgICovCiAgYXN5bmMgbmVlZHNEZWNvZGUoZSkgewogICAgcmV0dXJuIGUgPT09ICJpbWFnZS9oZWljIiB8fCBlID09PSAiaW1hZ2UvaGVpZiI7CiAgfQogIC8qKgogICAqIOino+eggSBIRUlDIOaWh+S7tuS4uiBKUEVHIEJsb2IKICAgKi8KICBhc3luYyBkZWNvZGUoZSwgYSkgewogICAgdmFyIEEsIHQ7CiAgICB0cnkgewogICAgICBjb25zdCBpID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gX2Y7CiAgICAgIH0pLCBuID0gZSBpbnN0YW5jZW9mIEJsb2IgPyBlIDogbmV3IEJsb2IoW2VdLCB7IHR5cGU6ICJpbWFnZS9oZWljIiB9KSwgZiA9IGF3YWl0IGkuZGVmYXVsdCh7CiAgICAgICAgYmxvYjogbiwKICAgICAgICB0b1R5cGU6IChhID09IG51bGwgPyB2b2lkIDAgOiBhLm91dHB1dEZvcm1hdCkgfHwgImltYWdlL2pwZWciLAogICAgICAgIHF1YWxpdHk6IDAuOQogICAgICB9KTsKICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZikgPyBmWzBdIDogZjsKICAgIH0gY2F0Y2ggKGkpIHsKICAgICAgdGhyb3cgKEEgPSBpID09IG51bGwgPyB2b2lkIDAgOiBpLm1lc3NhZ2UpICE9IG51bGwgJiYgQS5pbmNsdWRlcygiRFJNIikgfHwgKHQgPSBpID09IG51bGwgPyB2b2lkIDAgOiBpLm1lc3NhZ2UpICE9IG51bGwgJiYgdC5pbmNsdWRlcygicHJvdGVjdGVkIikgPyBuZXcgRXJyb3IoIkhFSUMg6Kej56CB5aSx6LSl77yM5paH5Lu25Y+XIERSTSDkv53miqQiKSA6IG5ldyBFcnJvcihgSEVJQyDop6PnoIHlpLHotKXvvIzmlofku7blj6/og73mjZ/lnY86ICR7KGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkubWVzc2FnZSkgfHwgIuacquefpemUmeivryJ9YCk7CiAgICB9CiAgfQogIC8qKgogICAqIOiOt+WPliBIRUlDIOWFg+aVsOaNru+8iOW9k+WJjeeJiOacrOaaguS4jeWunueOsO+8jOi/lOWbnuepuuWvueixoe+8iQogICAqLwogIGFzeW5jIGdldE1ldGFkYXRhKGUpIHsKICAgIHJldHVybiB7CiAgICAgIGZvcm1hdDogImhlaWMiCiAgICB9OwogIH0KfQp2YXIga2YgPSBuZXcgdmYoKSwgZ2YgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmZyZWV6ZSh7CiAgX19wcm90b19fOiBudWxsLAogIGRlZmF1bHQ6IGtmCn0pOwpjb25zdCBtZiA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KFsKICAiaW1hZ2UveC1jYW5vbi1jcjIiLAogICJpbWFnZS94LW5pa29uLW5lZiIsCiAgImltYWdlL3gtc29ueS1hcnciLAogICJpbWFnZS94LWFkb2JlLWRuZyIsCiAgImltYWdlL3gtZnVqaS1yYWYiLAogICJpbWFnZS94LW9seW1wdXMtb3JmIgpdKTsKYXN5bmMgZnVuY3Rpb24gcUEocikgewogIGNvbnN0IGUgPSBuZXcgVWludDhBcnJheShyKTsKICBpZiAoZS5sZW5ndGggPCA4KSByZXR1cm4gbnVsbDsKICBsZXQgYTsKICBpZiAoZVswXSA9PT0gNzMgJiYgZVsxXSA9PT0gNzMpCiAgICBhID0gITA7CiAgZWxzZSBpZiAoZVswXSA9PT0gNzcgJiYgZVsxXSA9PT0gNzcpCiAgICBhID0gITE7CiAgZWxzZQogICAgcmV0dXJuIHhlKGUpOwogIGNvbnN0IEEgPSBuZXcgRGF0YVZpZXcociksIHQgPSAobykgPT4gQS5nZXRVaW50MTYobywgYSksIGkgPSAobykgPT4gQS5nZXRVaW50MzIobywgYSk7CiAgaWYgKHQoMikgIT09IDQyKQogICAgcmV0dXJuIHhlKGUpOwogIGxldCBuID0gaSg0KSwgZiA9IDAsIHUgPSAwOwogIGZvciAobGV0IG8gPSAwOyBvIDwgMTAgJiYgbiAhPT0gMCAmJiBuICsgMiA8IGUubGVuZ3RoOyBvKyspIHsKICAgIGNvbnN0IGwgPSB0KG4pOwogICAgbGV0IHMgPSAwLCBjID0gMDsKICAgIGZvciAobGV0IHYgPSAwOyB2IDwgbDsgdisrKSB7CiAgICAgIGNvbnN0IGsgPSBuICsgMiArIHYgKiAxMjsKICAgICAgaWYgKGsgKyAxMiA+IGUubGVuZ3RoKSBicmVhazsKICAgICAgY29uc3QgRSA9IHQoayksIGcgPSBrICsgODsKICAgICAgRSA9PT0gNTEzID8gcyA9IGkoZykgOiBFID09PSA1MTQgJiYgKGMgPSBpKGcpKTsKICAgIH0KICAgIHMgPiAwICYmIGMgPiB1ICYmIHMgKyBjIDw9IGUubGVuZ3RoICYmIChmID0gcywgdSA9IGMpOwogICAgY29uc3QgZCA9IG4gKyAyICsgbCAqIDEyOwogICAgaWYgKGQgKyA0ID4gZS5sZW5ndGgpIGJyZWFrOwogICAgbiA9IGkoZCk7CiAgfQogIHJldHVybiBmID4gMCAmJiB1ID4gMCA/IG5ldyBCbG9iKFtlLnNsaWNlKGYsIGYgKyB1KV0sIHsKICAgIHR5cGU6ICJpbWFnZS9qcGVnIgogIH0pIDogeGUoZSk7Cn0KZnVuY3Rpb24geGUocikgewogIGxldCBlID0gLTEsIGEgPSAtMSwgQSA9IDA7CiAgZm9yIChsZXQgdCA9IDA7IHQgPCByLmxlbmd0aCAtIDQ7IHQrKykKICAgIGlmIChyW3RdID09PSAyNTUgJiYgclt0ICsgMV0gPT09IDIxNiAmJiByW3QgKyAyXSA9PT0gMjU1KSB7CiAgICAgIGNvbnN0IGkgPSB0OwogICAgICBmb3IgKGxldCBuID0gdCArIDI7IG4gPCByLmxlbmd0aCAtIDE7IG4rKykKICAgICAgICBpZiAocltuXSA9PT0gMjU1ICYmIHJbbiArIDFdID09PSAyMTcpIHsKICAgICAgICAgIGNvbnN0IGYgPSBuICsgMiAtIGk7CiAgICAgICAgICBmID4gQSAmJiAoZSA9IGksIGEgPSBuICsgMiwgQSA9IGYpLCB0ID0gbiArIDI7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CiAgcmV0dXJuIGUgPj0gMCAmJiBhID4gZSA/IG5ldyBCbG9iKFtyLnNsaWNlKGUsIGEpXSwgeyB0eXBlOiAiaW1hZ2UvanBlZyIgfSkgOiBudWxsOwp9CmNsYXNzIHBmIHsKICBhc3luYyBuZWVkc0RlY29kZShlKSB7CiAgICByZXR1cm4gbWYuaGFzKGUpOwogIH0KICBhc3luYyBkZWNvZGUoZSwgYSkgewogICAgY29uc3QgQSA9IGUgaW5zdGFuY2VvZiBCbG9iID8gYXdhaXQgZS5hcnJheUJ1ZmZlcigpIDogZTsKICAgIGlmICghKGEgIT0gbnVsbCAmJiBhLmZ1bGxRdWFsaXR5KSkgewogICAgICBjb25zdCBpID0gYXdhaXQgcUEoQSk7CiAgICAgIGlmIChpKQogICAgICAgIHJldHVybiBpOwogICAgICB0aHJvdyBuZXcgRXJyb3IoIuacquWcqCBSQVcg5paH5Lu25Lit5om+5Yiw5bWM5YWl55qE6aKE6KeI5Zu+5YOP77yI6K+l5paH5Lu25Y+v6IO95bey6KKr5Yml56a7IEpQRUcg6aKE6KeI77yJ44CCIik7CiAgICB9CiAgICBjb25zdCB0ID0gYXdhaXQgcUEoQSk7CiAgICBpZiAodCkKICAgICAgcmV0dXJuIHQ7CiAgICB0aHJvdyBuZXcgRXJyb3IoIuWujOaVtCBSQVcg6Kej56CB5pqC5pyq5a6e546w77yM5LiU5peg5rOV5o+Q5Y+W5bWM5YWl6aKE6KeI5Zu+44CCIik7CiAgfQogIGFzeW5jIGdldE1ldGFkYXRhKGUpIHsKICAgIHJldHVybiB7CiAgICAgIGZvcm1hdDogInJhdyIKICAgIH07CiAgfQp9CnZhciB3ZiA9IG5ldyBwZigpLCB5ZiA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuZnJlZXplKHsKICBfX3Byb3RvX186IG51bGwsCiAgZGVmYXVsdDogd2YKfSk7CmNsYXNzIEVmIHsKICBhc3luYyBuZWVkc0RlY29kZShlKSB7CiAgICByZXR1cm4gZSA9PT0gImltYWdlL3ZuZC5hZG9iZS5waG90b3Nob3AiOwogIH0KICBhc3luYyBkZWNvZGUoZSwgYSkgewogICAgdmFyIEE7CiAgICB0cnkgewogICAgICBjb25zdCB0ID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gSmk7CiAgICAgIH0pLCBpID0gdC5yZWFkUHNkIHx8ICgoQSA9IHQuZGVmYXVsdCkgPT0gbnVsbCA/IHZvaWQgMCA6IEEucmVhZFBzZCk7CiAgICAgIGlmICh0eXBlb2YgaSAhPSAiZnVuY3Rpb24iKQogICAgICAgIHRocm93IG5ldyBFcnJvcigiYWctcHNkIOW6kyBBUEkg5LiN56ym5ZCI6aKE5pyfIik7CiAgICAgIGNvbnN0IG4gPSBlIGluc3RhbmNlb2YgQmxvYiA/IGF3YWl0IGUuYXJyYXlCdWZmZXIoKSA6IGUsIGYgPSBpKG4sIHsKICAgICAgICBza2lwTGF5ZXJJbWFnZURhdGE6ICEwLAogICAgICAgIC8vIOS4jemcgOimgeWNleeLrOWbvuWxguaVsOaNrgogICAgICAgIHNraXBDb21wb3NpdGVJbWFnZURhdGE6ICExLAogICAgICAgIC8vIOmcgOimgeWQiOW5tumihOiniAogICAgICAgIHNraXBUaHVtYm5haWw6ICEwLAogICAgICAgIC8vIOS/neeVmeWDj+e0oOaVsOaNru+8jOmBv+WFjSBXb3JrZXIg546v5aKD5L6d6LWWIGRvY3VtZW50L0hUTUxDYW52YXNFbGVtZW50CiAgICAgICAgdXNlSW1hZ2VEYXRhOiAhMAogICAgICB9KTsKICAgICAgaWYgKGYuaW1hZ2VEYXRhICYmIGYud2lkdGggJiYgZi5oZWlnaHQpIHsKICAgICAgICBjb25zdCB1ID0gbmV3IEltYWdlRGF0YSgKICAgICAgICAgIG5ldyBVaW50OENsYW1wZWRBcnJheShmLmltYWdlRGF0YS5kYXRhIHx8IGYuaW1hZ2VEYXRhKSwKICAgICAgICAgIGYud2lkdGgsCiAgICAgICAgICBmLmhlaWdodAogICAgICAgICk7CiAgICAgICAgcmV0dXJuIGF3YWl0IFpmKHUsIChhID09IG51bGwgPyB2b2lkIDAgOiBhLm91dHB1dEZvcm1hdCkgfHwgImltYWdlL3BuZyIpOwogICAgICB9CiAgICAgIHRocm93IG5ldyBFcnJvcigiUFNEIOaWh+S7tuS4jeWMheWQq+WQiOW5tueahOmihOiniOWbvuWDj++8iOWPr+iDveS7heWQq+WbvuWxguaVsOaNru+8iSIpOwogICAgfSBjYXRjaCAodCkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoYFBTRCDop6PnoIHlpLHotKU6ICR7KHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQubWVzc2FnZSkgfHwgIuacquefpemUmeivryJ9YCk7CiAgICB9CiAgfQogIGFzeW5jIGdldE1ldGFkYXRhKGUpIHsKICAgIHZhciBhOwogICAgdHJ5IHsKICAgICAgY29uc3QgQSA9IGF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIEppOwogICAgICB9KSwgdCA9IEEucmVhZFBzZCB8fCAoKGEgPSBBLmRlZmF1bHQpID09IG51bGwgPyB2b2lkIDAgOiBhLnJlYWRQc2QpOwogICAgICBpZiAodHlwZW9mIHQgIT0gImZ1bmN0aW9uIikKICAgICAgICByZXR1cm4geyBmb3JtYXQ6ICJwc2QiIH07CiAgICAgIGNvbnN0IGkgPSBlIGluc3RhbmNlb2YgQmxvYiA/IGF3YWl0IGUuYXJyYXlCdWZmZXIoKSA6IGUsIG4gPSB0KGksIHsKICAgICAgICBza2lwTGF5ZXJJbWFnZURhdGE6ICEwLAogICAgICAgIHNraXBDb21wb3NpdGVJbWFnZURhdGE6ICEwLAogICAgICAgIHNraXBUaHVtYm5haWw6ICEwCiAgICAgIH0pOwogICAgICByZXR1cm4gewogICAgICAgIGZvcm1hdDogInBzZCIsCiAgICAgICAgd2lkdGg6IG4ud2lkdGgsCiAgICAgICAgaGVpZ2h0OiBuLmhlaWdodAogICAgICB9OwogICAgfSBjYXRjaCB7CiAgICAgIHJldHVybiB7IGZvcm1hdDogInBzZCIgfTsKICAgIH0KICB9Cn0KYXN5bmMgZnVuY3Rpb24gWmYociwgZSkgewogIGlmICh0eXBlb2YgT2Zmc2NyZWVuQ2FudmFzIDwgInUiKSB7CiAgICBjb25zdCB0ID0gbmV3IE9mZnNjcmVlbkNhbnZhcyhyLndpZHRoLCByLmhlaWdodCksIGkgPSB0LmdldENvbnRleHQoIjJkIik7CiAgICBpZiAoIWkpIHRocm93IG5ldyBFcnJvcigi5peg5rOV5Yib5bu6IE9mZnNjcmVlbkNhbnZhcyAyRCDkuIrkuIvmlociKTsKICAgIHJldHVybiBpLnB1dEltYWdlRGF0YShyLCAwLCAwKSwgdC5jb252ZXJ0VG9CbG9iKHsgdHlwZTogZSB9KTsKICB9CiAgaWYgKHR5cGVvZiBkb2N1bWVudCA+ICJ1IikKICAgIHRocm93IG5ldyBFcnJvcigi5b2T5YmNIFdvcmtlciDnjq/looPkuI3mlK/mjIEgT2Zmc2NyZWVuQ2FudmFzIik7CiAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwogIGEud2lkdGggPSByLndpZHRoLCBhLmhlaWdodCA9IHIuaGVpZ2h0OwogIGNvbnN0IEEgPSBhLmdldENvbnRleHQoIjJkIik7CiAgaWYgKCFBKSB0aHJvdyBuZXcgRXJyb3IoIuaXoOazleWIm+W7uiBDYW52YXMgMkQg5LiK5LiL5paHIik7CiAgcmV0dXJuIEEucHV0SW1hZ2VEYXRhKHIsIDAsIDApLCBuZXcgUHJvbWlzZSgodCwgaSkgPT4gewogICAgYS50b0Jsb2IoCiAgICAgIChuKSA9PiB7CiAgICAgICAgbiA/IHQobikgOiBpKG5ldyBFcnJvcigiUFNEIENhbnZhcyDovazmjaLkuLogQmxvYiDlpLHotKUiKSk7CiAgICAgIH0sCiAgICAgIGUKICAgICk7CiAgfSk7Cn0KdmFyIEJmID0gbmV3IEVmKCksIElmID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5mcmVlemUoewogIF9fcHJvdG9fXzogbnVsbCwKICBkZWZhdWx0OiBCZgp9KSwgRmYgPSB0eXBlb2YgZ2xvYmFsVGhpcyA8ICJ1IiA/IGdsb2JhbFRoaXMgOiB0eXBlb2Ygd2luZG93IDwgInUiID8gd2luZG93IDogdHlwZW9mIGdsb2JhbCA8ICJ1IiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmIDwgInUiID8gc2VsZiA6IHt9OwpmdW5jdGlvbiBDZihyKSB7CiAgcmV0dXJuIHIgJiYgci5fX2VzTW9kdWxlICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLCAiZGVmYXVsdCIpID8gci5kZWZhdWx0IDogcjsKfQp2YXIgSGkgPSB7IGV4cG9ydHM6IHt9IH07CihmdW5jdGlvbihyLCBlKSB7CiAgKGZ1bmN0aW9uKGEsIEEsIHQsIGkpIHsKICAgIGZ1bmN0aW9uIG4oKSB7CiAgICAgIHJldHVybiBDLmlzVmFsaWQoKTsKICAgIH0KICAgIGZ1bmN0aW9uIGYoKSB7CiAgICAgIHJldHVybiBDLmlzVmFsaWQoKTsKICAgIH0KICAgIGZ1bmN0aW9uIHUoKSB7CiAgICAgIHZhciBiID0geyBnZXRVc2VyTWVkaWE6ICEwIH07CiAgICAgIHJldHVybiBDLmlzVmFsaWQoYik7CiAgICB9CiAgICBmdW5jdGlvbiBvKGIpIHsKICAgICAgdmFyIFogPSAhMTsKICAgICAgaWYgKHAuaXNBcnJheShiKSAmJiBiLmxlbmd0aCkgewogICAgICAgIGlmIChwLmVhY2goYiwgZnVuY3Rpb24oeSwgRikgewogICAgICAgICAgcC5pc1N1cHBvcnRlZC52aWRlb0NvZGVjc1tGXSAmJiAoWiA9ICEwKTsKICAgICAgICB9KSwgIVopCiAgICAgICAgICByZXR1cm4gITE7CiAgICAgIH0gZWxzZSBpZiAocC5pc1N0cmluZyhiKSAmJiBiLmxlbmd0aCAmJiAhcC5pc1N1cHBvcnRlZC52aWRlb0NvZGVjc1tiXSkKICAgICAgICByZXR1cm4gITE7CiAgICAgIHJldHVybiBDLmlzVmFsaWQoeyBnZXRVc2VyTWVkaWE6ICEwIH0pOwogICAgfQogICAgZnVuY3Rpb24gbCgpIHsKICAgICAgZnVuY3Rpb24gYihoMCwgZDAsIFYwKSB7CiAgICAgICAgdmFyIHMwLCBrMDsKICAgICAgICBmb3IgKGIwID0gaDAsIGUwID0gZDAsIHEgPSBWMCwgbzAgPSBuZXcgQXJyYXkoYzApLCBzMCA9IDA7IGMwID4gczA7IHMwKyspCiAgICAgICAgICBvMFtzMF0gPSBuZXcgQXJyYXkoNCksIGswID0gbzBbczBdLCBrMFswXSA9IGswWzFdID0gazBbMl0gPSAoczAgPDwgTjAgKyA4KSAvIGMwIHwgMCwgbmFbczBdID0gUDAgLyBjMCB8IDAsIGlhW3MwXSA9IDA7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gWigpIHsKICAgICAgICBmb3IgKHZhciBoMCA9IFtdLCBkMCA9IG5ldyBBcnJheShjMCksIFYwID0gMDsgYzAgPiBWMDsgVjArKykKICAgICAgICAgIGQwW28wW1YwXVszXV0gPSBWMDsKICAgICAgICBmb3IgKHZhciBzMCA9IDAsIGswID0gMDsgYzAgPiBrMDsgazArKykgewogICAgICAgICAgdmFyICQgPSBkMFtrMF07CiAgICAgICAgICBoMFtzMCsrXSA9IG8wWyRdWzBdLCBoMFtzMCsrXSA9IG8wWyRdWzFdLCBoMFtzMCsrXSA9IG8wWyRdWzJdOwogICAgICAgIH0KICAgICAgICByZXR1cm4gaDA7CiAgICAgIH0KICAgICAgZnVuY3Rpb24geSgpIHsKICAgICAgICB2YXIgaDAsIGQwLCBWMCwgczAsIGswLCAkLCBpMCwgXzA7CiAgICAgICAgZm9yIChpMCA9IDAsIF8wID0gMCwgaDAgPSAwOyBjMCA+IGgwOyBoMCsrKSB7CiAgICAgICAgICBmb3IgKGswID0gbzBbaDBdLCBWMCA9IGgwLCBzMCA9IGswWzFdLCBkMCA9IGgwICsgMTsgYzAgPiBkMDsgZDArKykKICAgICAgICAgICAgJCA9IG8wW2QwXSwgJFsxXSA8IHMwICYmIChWMCA9IGQwLCBzMCA9ICRbMV0pOwogICAgICAgICAgaWYgKCQgPSBvMFtWMF0sIGgwICE9IFYwICYmIChkMCA9ICRbMF0sICRbMF0gPSBrMFswXSwgazBbMF0gPSBkMCwgZDAgPSAkWzFdLCAkWzFdID0gazBbMV0sIGswWzFdID0gZDAsIGQwID0gJFsyXSwgJFsyXSA9IGswWzJdLCBrMFsyXSA9IGQwLCBkMCA9ICRbM10sICRbM10gPSBrMFszXSwgazBbM10gPSBkMCksIHMwICE9IGkwKSB7CiAgICAgICAgICAgIGZvciAoSHJbaTBdID0gXzAgKyBoMCA+PiAxLCBkMCA9IGkwICsgMTsgczAgPiBkMDsgZDArKykKICAgICAgICAgICAgICBIcltkMF0gPSBoMDsKICAgICAgICAgICAgaTAgPSBzMCwgXzAgPSBoMDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZm9yIChIcltpMF0gPSBfMCArIFcwID4+IDEsIGQwID0gaTAgKyAxOyAyNTYgPiBkMDsgZDArKykKICAgICAgICAgIEhyW2QwXSA9IFcwOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIEYoKSB7CiAgICAgICAgdmFyIGgwLCBkMCwgVjAsIHMwLCBrMCwgJCwgaTAsIF8wLCB4MCwgajAsIF9yLCBUMCwgdXIsIEtBOwogICAgICAgIGZvciAoTzAgPiBlMCAmJiAocSA9IDEpLCBhMCA9IDMwICsgKHEgLSAxKSAvIDMsIFQwID0gYjAsIHVyID0gMCwgS0EgPSBlMCwgX3IgPSBlMCAvICgzICogcSksIGowID0gX3IgLyBRMCB8IDAsIF8wID0gTjIsICQgPSBzciwgaTAgPSAkID4+IFdyLCAxID49IGkwICYmIChpMCA9IDApLCBoMCA9IDA7IGkwID4gaDA7IGgwKyspCiAgICAgICAgICB0MltoMF0gPSBfMCAqICgoaTAgKiBpMCAtIGgwICogaDApICogVDIgLyAoaTAgKiBpMCkpOwogICAgICAgIGZvciAoeDAgPSBPMCA+IGUwID8gMyA6IGUwICUgUzAgIT09IDAgPyAzICogUzAgOiBlMCAlIHYwICE9PSAwID8gMyAqIHYwIDogZTAgJSBJMCAhPT0gMCA/IDMgKiBJMCA6IDMgKiBDMCwgaDAgPSAwOyBfciA+IGgwOyApCiAgICAgICAgICBpZiAoVjAgPSAoMjU1ICYgVDBbdXIgKyAwXSkgPDwgTjAsIHMwID0gKDI1NSAmIFQwW3VyICsgMV0pIDw8IE4wLCBrMCA9ICgyNTUgJiBUMFt1ciArIDJdKSA8PCBOMCwgZDAgPSBqKFYwLCBzMCwgazApLCB6KF8wLCBkMCwgVjAsIHMwLCBrMCksIGkwICE9PSAwICYmIFYoaTAsIGQwLCBWMCwgczAsIGswKSwgdXIgKz0geDAsIHVyID49IEtBICYmICh1ciAtPSBlMCksIGgwKyssIGowID09PSAwICYmIChqMCA9IDEpLCBoMCAlIGowID09PSAwKQogICAgICAgICAgICBmb3IgKF8wIC09IF8wIC8gYTAsICQgLT0gJCAvIGdhLCBpMCA9ICQgPj4gV3IsIDEgPj0gaTAgJiYgKGkwID0gMCksIGQwID0gMDsgaTAgPiBkMDsgZDArKykKICAgICAgICAgICAgICB0MltkMF0gPSBfMCAqICgoaTAgKiBpMCAtIGQwICogZDApICogVDIgLyAoaTAgKiBpMCkpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIFIoaDAsIGQwLCBWMCkgewogICAgICAgIHZhciBzMCwgazAsICQsIGkwLCBfMCwgeDAsIGowOwogICAgICAgIGZvciAoXzAgPSAxZTMsIGowID0gLTEsIHMwID0gSHJbZDBdLCBrMCA9IHMwIC0gMTsgYzAgPiBzMCB8fCBrMCA+PSAwOyApCiAgICAgICAgICBjMCA+IHMwICYmICh4MCA9IG8wW3MwXSwgJCA9IHgwWzFdIC0gZDAsICQgPj0gXzAgPyBzMCA9IGMwIDogKHMwKyssIDAgPiAkICYmICgkID0gLSQpLCBpMCA9IHgwWzBdIC0gaDAsIDAgPiBpMCAmJiAoaTAgPSAtaTApLCAkICs9IGkwLCBfMCA+ICQgJiYgKGkwID0geDBbMl0gLSBWMCwgMCA+IGkwICYmIChpMCA9IC1pMCksICQgKz0gaTAsIF8wID4gJCAmJiAoXzAgPSAkLCBqMCA9IHgwWzNdKSkpKSwgazAgPj0gMCAmJiAoeDAgPSBvMFtrMF0sICQgPSBkMCAtIHgwWzFdLCAkID49IF8wID8gazAgPSAtMSA6IChrMC0tLCAwID4gJCAmJiAoJCA9IC0kKSwgaTAgPSB4MFswXSAtIGgwLCAwID4gaTAgJiYgKGkwID0gLWkwKSwgJCArPSBpMCwgXzAgPiAkICYmIChpMCA9IHgwWzJdIC0gVjAsIDAgPiBpMCAmJiAoaTAgPSAtaTApLCAkICs9IGkwLCBfMCA+ICQgJiYgKF8wID0gJCwgajAgPSB4MFszXSkpKSk7CiAgICAgICAgcmV0dXJuIGowOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIE0oKSB7CiAgICAgICAgcmV0dXJuIEYoKSwgSSgpLCB5KCksIFooKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBJKCkgewogICAgICAgIHZhciBoMDsKICAgICAgICBmb3IgKGgwID0gMDsgYzAgPiBoMDsgaDArKykKICAgICAgICAgIG8wW2gwXVswXSA+Pj0gTjAsIG8wW2gwXVsxXSA+Pj0gTjAsIG8wW2gwXVsyXSA+Pj0gTjAsIG8wW2gwXVszXSA9IGgwOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIFYoaDAsIGQwLCBWMCwgczAsIGswKSB7CiAgICAgICAgdmFyICQsIGkwLCBfMCwgeDAsIGowLCBfciwgVDA7CiAgICAgICAgZm9yIChfMCA9IGQwIC0gaDAsIC0xID4gXzAgJiYgKF8wID0gLTEpLCB4MCA9IGQwICsgaDAsIHgwID4gYzAgJiYgKHgwID0gYzApLCAkID0gZDAgKyAxLCBpMCA9IGQwIC0gMSwgX3IgPSAxOyB4MCA+ICQgfHwgaTAgPiBfMDsgKSB7CiAgICAgICAgICBpZiAoajAgPSB0MltfcisrXSwgeDAgPiAkKSB7CiAgICAgICAgICAgIFQwID0gbzBbJCsrXTsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICBUMFswXSAtPSBqMCAqIChUMFswXSAtIFYwKSAvIFRyIHwgMCwgVDBbMV0gLT0gajAgKiAoVDBbMV0gLSBzMCkgLyBUciB8IDAsIFQwWzJdIC09IGowICogKFQwWzJdIC0gazApIC8gVHIgfCAwOwogICAgICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKGkwID4gXzApIHsKICAgICAgICAgICAgVDAgPSBvMFtpMC0tXTsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICBUMFswXSAtPSBqMCAqIChUMFswXSAtIFYwKSAvIFRyIHwgMCwgVDBbMV0gLT0gajAgKiAoVDBbMV0gLSBzMCkgLyBUciB8IDAsIFQwWzJdIC09IGowICogKFQwWzJdIC0gazApIC8gVHIgfCAwOwogICAgICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBmdW5jdGlvbiB6KGgwLCBkMCwgVjAsIHMwLCBrMCkgewogICAgICAgIHZhciAkID0gbzBbZDBdLCBpMCA9IGgwIC8gTjI7CiAgICAgICAgJFswXSAtPSBpMCAqICgkWzBdIC0gVjApIHwgMCwgJFsxXSAtPSBpMCAqICgkWzFdIC0gczApIHwgMCwgJFsyXSAtPSBpMCAqICgkWzJdIC0gazApIHwgMDsKICAgICAgfQogICAgICBmdW5jdGlvbiBqKGgwLCBkMCwgVjApIHsKICAgICAgICB2YXIgczAsIGswLCAkLCBpMCwgXzAsIHgwLCBqMCwgX3IsIFQwLCB1cjsKICAgICAgICBmb3IgKF9yID0gMjE0NzQ4MzY0NywgVDAgPSBfciwgeDAgPSAtMSwgajAgPSB4MCwgczAgPSAwOyBjMCA+IHMwOyBzMCsrKQogICAgICAgICAgdXIgPSBvMFtzMF0sIGswID0gdXJbMF0gLSBoMCwgMCA+IGswICYmIChrMCA9IC1rMCksICQgPSB1clsxXSAtIGQwLCAwID4gJCAmJiAoJCA9IC0kKSwgazAgKz0gJCwgJCA9IHVyWzJdIC0gVjAsIDAgPiAkICYmICgkID0gLSQpLCBrMCArPSAkLCBfciA+IGswICYmIChfciA9IGswLCB4MCA9IHMwKSwgaTAgPSBrMCAtIChpYVtzMF0gPj4gVTAgLSBOMCksIFQwID4gaTAgJiYgKFQwID0gaTAsIGowID0gczApLCBfMCA9IG5hW3MwXSA+PiBBciwgbmFbczBdIC09IF8wLCBpYVtzMF0gKz0gXzAgPDwgSjA7CiAgICAgICAgcmV0dXJuIG5hW3gwXSArPSBMMCwgaWFbeDBdIC09IGNyLCBqMDsKICAgICAgfQogICAgICB2YXIgYTAsIGIwLCBlMCwgcSwgbzAsIGMwID0gMjU2LCBTMCA9IDQ5OSwgdjAgPSA0OTEsIEkwID0gNDg3LCBDMCA9IDUwMywgTzAgPSAzICogQzAsIFcwID0gYzAgLSAxLCBOMCA9IDQsIFEwID0gMTAwLCBVMCA9IDE2LCBQMCA9IDEgPDwgVTAsIEowID0gMTAsIEFyID0gMTAsIEwwID0gUDAgPj4gQXIsIGNyID0gUDAgPDwgSjAgLSBBciwgeXIgPSBjMCA+PiAzLCBXciA9IDYsIE1yID0gMSA8PCBXciwgc3IgPSB5ciAqIE1yLCBnYSA9IDMwLCBBMiA9IDEwLCBOMiA9IDEgPDwgQTIsIE0yID0gOCwgVDIgPSAxIDw8IE0yLCBEZSA9IEEyICsgTTIsIFRyID0gMSA8PCBEZSwgSHIgPSBbXSwgaWEgPSBbXSwgbmEgPSBbXSwgdDIgPSBbXTsKICAgICAgYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgICB2YXIgbWEgPSB7fTsKICAgICAgcmV0dXJuIG1hLm1hcCA9IFIsIG1hLnByb2Nlc3MgPSBNLCBtYTsKICAgIH0KICAgIGZ1bmN0aW9uIHMoKSB7CiAgICAgIHZhciBiID0gdGhpczsKICAgICAgdHJ5IHsKICAgICAgICBiLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKHkpIHsKICAgICAgICAgIHZhciBGLCBSID0geS5kYXRhIHx8IHt9OwogICAgICAgICAgUi5naWZzaG90ICYmIChGID0gWi5ydW4oUiksIHBvc3RNZXNzYWdlKEYpKTsKICAgICAgICB9OwogICAgICB9IGNhdGNoIHsKICAgICAgfQogICAgICB2YXIgWiA9IHsgZGF0YVRvUkdCOiBmdW5jdGlvbih5LCBGLCBSKSB7CiAgICAgICAgZm9yICh2YXIgTSA9IEYgKiBSICogNCwgSSA9IDAsIFYgPSBbXTsgTSA+IEk7ICkKICAgICAgICAgIFYucHVzaCh5W0krK10pLCBWLnB1c2goeVtJKytdKSwgVi5wdXNoKHlbSSsrXSksIEkrKzsKICAgICAgICByZXR1cm4gVjsKICAgICAgfSwgY29tcG9uZW50aXplZFBhbGV0dGVUb0FycmF5OiBmdW5jdGlvbih5KSB7CiAgICAgICAgeSA9IHkgfHwgW107CiAgICAgICAgZm9yICh2YXIgRiA9IFtdLCBSID0gMDsgUiA8IHkubGVuZ3RoOyBSICs9IDMpIHsKICAgICAgICAgIHZhciBNID0geVtSXSwgSSA9IHlbUiArIDFdLCBWID0geVtSICsgMl07CiAgICAgICAgICBGLnB1c2goTSA8PCAxNiB8IEkgPDwgOCB8IFYpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gRjsKICAgICAgfSwgcHJvY2Vzc0ZyYW1lV2l0aFF1YW50aXplcjogZnVuY3Rpb24oeSwgRiwgUiwgTSkgewogICAgICAgIGZvciAodmFyIEkgPSB0aGlzLmRhdGFUb1JHQih5LCBGLCBSKSwgViA9IG5ldyBsKEksIEkubGVuZ3RoLCBNKSwgeiA9IFYucHJvY2VzcygpLCBqID0gbmV3IFVpbnQzMkFycmF5KHRoaXMuY29tcG9uZW50aXplZFBhbGV0dGVUb0FycmF5KHopKSwgYTAgPSBGICogUiwgYjAgPSBuZXcgVWludDhBcnJheShhMCksIGUwID0gMCwgcSA9IDA7IGEwID4gcTsgcSsrKSB7CiAgICAgICAgICB2YXIgbzAgPSBJW2UwKytdLCBjMCA9IElbZTArK10sIFMwID0gSVtlMCsrXTsKICAgICAgICAgIGIwW3FdID0gVi5tYXAobzAsIGMwLCBTMCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB7IHBpeGVsczogYjAsIHBhbGV0dGU6IGogfTsKICAgICAgfSwgcnVuOiBmdW5jdGlvbih5KSB7CiAgICAgICAgeSA9IHkgfHwge307CiAgICAgICAgdmFyIEYgPSB5LCBSID0gRi5oZWlnaHQsIE0gPSAoRi5wYWxldHRlLCBGLnNhbXBsZUludGVydmFsKSwgSSA9IEYud2lkdGgsIFYgPSB5LmRhdGE7CiAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0ZyYW1lV2l0aFF1YW50aXplcihWLCBJLCBSLCBNKTsKICAgICAgfSB9OwogICAgICByZXR1cm4gWjsKICAgIH0KICAgIGZ1bmN0aW9uIGMoYiwgWiwgeSwgRikgewogICAgICBmdW5jdGlvbiBSKGUwKSB7CiAgICAgICAgdmFyIHEgPSBlMC5sZW5ndGg7CiAgICAgICAgaWYgKDIgPiBxIHx8IHEgPiAyNTYgfHwgcSAmIHEgLSAxKQogICAgICAgICAgdGhyb3cgIkludmFsaWQgY29kZS9jb2xvciBsZW5ndGgsIG11c3QgYmUgcG93ZXIgb2YgMiBhbmQgMiAuLiAyNTYuIjsKICAgICAgICByZXR1cm4gcTsKICAgICAgfQogICAgICBmdW5jdGlvbiBNKGUwLCBxLCBvMCwgYzApIHsKICAgICAgICBmdW5jdGlvbiBTMChzcikgewogICAgICAgICAgZm9yICg7IFUwID49IHNyOyApCiAgICAgICAgICAgIGUwW3ErK10gPSAyNTUgJiBQMCwgUDAgPj49IDgsIFUwIC09IDgsIHEgPT09IEkwICsgMjU2ICYmIChlMFtJMF0gPSAyNTUsIEkwID0gcSsrKTsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gdjAoc3IpIHsKICAgICAgICAgIFAwIHw9IHNyIDw8IFUwLCBVMCArPSBRMCwgUzAoOCk7CiAgICAgICAgfQogICAgICAgIGUwW3ErK10gPSBvMDsKICAgICAgICB2YXIgSTAgPSBxKyssIEMwID0gMSA8PCBvMCwgTzAgPSBDMCAtIDEsIFcwID0gQzAgKyAxLCBOMCA9IFcwICsgMSwgUTAgPSBvMCArIDEsIFUwID0gMCwgUDAgPSAwLCBKMCA9IGMwWzBdICYgTzAsIEFyID0ge307CiAgICAgICAgdjAoQzApOwogICAgICAgIGZvciAodmFyIEwwID0gMSwgY3IgPSBjMC5sZW5ndGg7IGNyID4gTDA7ICsrTDApIHsKICAgICAgICAgIHZhciB5ciA9IGMwW0wwXSAmIE8wLCBXciA9IEowIDw8IDggfCB5ciwgTXIgPSBBcltXcl07CiAgICAgICAgICBpZiAoTXIgPT09IGkpIHsKICAgICAgICAgICAgZm9yIChQMCB8PSBKMCA8PCBVMCwgVTAgKz0gUTA7IFUwID49IDg7ICkKICAgICAgICAgICAgICBlMFtxKytdID0gMjU1ICYgUDAsIFAwID4+PSA4LCBVMCAtPSA4LCBxID09PSBJMCArIDI1NiAmJiAoZTBbSTBdID0gMjU1LCBJMCA9IHErKyk7CiAgICAgICAgICAgIE4wID09PSA0MDk2ID8gKHYwKEMwKSwgTjAgPSBXMCArIDEsIFEwID0gbzAgKyAxLCBBciA9IHt9KSA6IChOMCA+PSAxIDw8IFEwICYmICsrUTAsIEFyW1dyXSA9IE4wKyspLCBKMCA9IHlyOwogICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgIEowID0gTXI7CiAgICAgICAgfQogICAgICAgIHJldHVybiB2MChKMCksIHYwKFcwKSwgUzAoMSksIEkwICsgMSA9PT0gcSA/IGUwW0kwXSA9IDAgOiAoZTBbSTBdID0gcSAtIEkwIC0gMSwgZTBbcSsrXSA9IDApLCBxOwogICAgICB9CiAgICAgIHZhciBJID0gMDsKICAgICAgRiA9IEYgPT09IGkgPyB7fSA6IEY7CiAgICAgIHZhciBWID0gRi5sb29wID09PSBpID8gbnVsbCA6IEYubG9vcCwgeiA9IEYucGFsZXR0ZSA9PT0gaSA/IG51bGwgOiBGLnBhbGV0dGU7CiAgICAgIGlmICgwID49IFogfHwgMCA+PSB5IHx8IFogPiA2NTUzNSB8fCB5ID4gNjU1MzUpCiAgICAgICAgdGhyb3cgIldpZHRoL0hlaWdodCBpbnZhbGlkLiI7CiAgICAgIGJbSSsrXSA9IDcxLCBiW0krK10gPSA3MywgYltJKytdID0gNzAsIGJbSSsrXSA9IDU2LCBiW0krK10gPSA1NywgYltJKytdID0gOTc7CiAgICAgIHZhciBqID0gMCwgYTAgPSAwOwogICAgICBpZiAoYltJKytdID0gMjU1ICYgWiwgYltJKytdID0gWiA+PiA4ICYgMjU1LCBiW0krK10gPSAyNTUgJiB5LCBiW0krK10gPSB5ID4+IDggJiAyNTUsIGJbSSsrXSA9ICh6ICE9PSBudWxsID8gMTI4IDogMCkgfCBqLCBiW0krK10gPSBhMCwgYltJKytdID0gMCwgViAhPT0gbnVsbCkgewogICAgICAgIGlmICgwID4gViB8fCBWID4gNjU1MzUpCiAgICAgICAgICB0aHJvdyAiTG9vcCBjb3VudCBpbnZhbGlkLiI7CiAgICAgICAgYltJKytdID0gMzMsIGJbSSsrXSA9IDI1NSwgYltJKytdID0gMTEsIGJbSSsrXSA9IDc4LCBiW0krK10gPSA2OSwgYltJKytdID0gODQsIGJbSSsrXSA9IDgzLCBiW0krK10gPSA2NywgYltJKytdID0gNjUsIGJbSSsrXSA9IDgwLCBiW0krK10gPSA2OSwgYltJKytdID0gNTAsIGJbSSsrXSA9IDQ2LCBiW0krK10gPSA0OCwgYltJKytdID0gMywgYltJKytdID0gMSwgYltJKytdID0gMjU1ICYgViwgYltJKytdID0gViA+PiA4ICYgMjU1LCBiW0krK10gPSAwOwogICAgICB9CiAgICAgIHZhciBiMCA9ICExOwogICAgICB0aGlzLmFkZEZyYW1lID0gZnVuY3Rpb24oZTAsIHEsIG8wLCBjMCwgUzAsIHYwKSB7CiAgICAgICAgaWYgKGIwID09PSAhMCAmJiAoLS1JLCBiMCA9ICExKSwgdjAgPSB2MCA9PT0gaSA/IHt9IDogdjAsIDAgPiBlMCB8fCAwID4gcSB8fCBlMCA+IDY1NTM1IHx8IHEgPiA2NTUzNSkKICAgICAgICAgIHRocm93ICJ4L3kgaW52YWxpZC4iOwogICAgICAgIGlmICgwID49IG8wIHx8IDAgPj0gYzAgfHwgbzAgPiA2NTUzNSB8fCBjMCA+IDY1NTM1KQogICAgICAgICAgdGhyb3cgIldpZHRoL0hlaWdodCBpbnZhbGlkLiI7CiAgICAgICAgaWYgKFMwLmxlbmd0aCA8IG8wICogYzApCiAgICAgICAgICB0aHJvdyAiTm90IGVub3VnaCBwaXhlbHMgZm9yIHRoZSBmcmFtZSBzaXplLiI7CiAgICAgICAgdmFyIEkwID0gITAsIEMwID0gdjAucGFsZXR0ZTsKICAgICAgICBpZiAoKEMwID09PSBpIHx8IEMwID09PSBudWxsKSAmJiAoSTAgPSAhMSwgQzAgPSB6KSwgQzAgPT09IGkgfHwgQzAgPT09IG51bGwpCiAgICAgICAgICB0aHJvdyAiTXVzdCBzdXBwbHkgZWl0aGVyIGEgbG9jYWwgb3IgZ2xvYmFsIHBhbGV0dGUuIjsKICAgICAgICBmb3IgKHZhciBPMCA9IFIoQzApLCBXMCA9IDA7IE8wID4+PSAxOyApCiAgICAgICAgICArK1cwOwogICAgICAgIE8wID0gMSA8PCBXMDsKICAgICAgICB2YXIgTjAgPSB2MC5kZWxheSA9PT0gaSA/IDAgOiB2MC5kZWxheSwgUTAgPSB2MC5kaXNwb3NhbCA9PT0gaSA/IDAgOiB2MC5kaXNwb3NhbDsKICAgICAgICBpZiAoMCA+IFEwIHx8IFEwID4gMykKICAgICAgICAgIHRocm93ICJEaXNwb3NhbCBvdXQgb2YgcmFuZ2UuIjsKICAgICAgICB2YXIgVTAgPSAhMSwgUDAgPSAwOwogICAgICAgIGlmICh2MC50cmFuc3BhcmVudCAhPT0gaSAmJiB2MC50cmFuc3BhcmVudCAhPT0gbnVsbCAmJiAoVTAgPSAhMCwgUDAgPSB2MC50cmFuc3BhcmVudCwgMCA+IFAwIHx8IFAwID49IE8wKSkKICAgICAgICAgIHRocm93ICJUcmFuc3BhcmVudCBjb2xvciBpbmRleC4iOwogICAgICAgIGlmICgoUTAgIT09IDAgfHwgVTAgfHwgTjAgIT09IDApICYmIChiW0krK10gPSAzMywgYltJKytdID0gMjQ5LCBiW0krK10gPSA0LCBiW0krK10gPSBRMCA8PCAyIHwgKFUwID09PSAhMCA/IDEgOiAwKSwgYltJKytdID0gMjU1ICYgTjAsIGJbSSsrXSA9IE4wID4+IDggJiAyNTUsIGJbSSsrXSA9IFAwLCBiW0krK10gPSAwKSwgYltJKytdID0gNDQsIGJbSSsrXSA9IDI1NSAmIGUwLCBiW0krK10gPSBlMCA+PiA4ICYgMjU1LCBiW0krK10gPSAyNTUgJiBxLCBiW0krK10gPSBxID4+IDggJiAyNTUsIGJbSSsrXSA9IDI1NSAmIG8wLCBiW0krK10gPSBvMCA+PiA4ICYgMjU1LCBiW0krK10gPSAyNTUgJiBjMCwgYltJKytdID0gYzAgPj4gOCAmIDI1NSwgYltJKytdID0gSTAgPT09ICEwID8gMTI4IHwgVzAgLSAxIDogMCwgSTAgPT09ICEwKQogICAgICAgICAgZm9yICh2YXIgSjAgPSAwLCBBciA9IEMwLmxlbmd0aDsgQXIgPiBKMDsgKytKMCkgewogICAgICAgICAgICB2YXIgTDAgPSBDMFtKMF07CiAgICAgICAgICAgIGJbSSsrXSA9IEwwID4+IDE2ICYgMjU1LCBiW0krK10gPSBMMCA+PiA4ICYgMjU1LCBiW0krK10gPSAyNTUgJiBMMDsKICAgICAgICAgIH0KICAgICAgICBJID0gTShiLCBJLCAyID4gVzAgPyAyIDogVzAsIFMwKTsKICAgICAgfSwgdGhpcy5lbmQgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gYjAgPT09ICExICYmIChiW0krK10gPSA1OSwgYjAgPSAhMCksIEk7CiAgICAgIH07CiAgICB9CiAgICBmdW5jdGlvbiBkKGIsIFopIHsKICAgICAgYi5nZXRCYXNlNjRHSUYoZnVuY3Rpb24oeSkgewogICAgICAgIFooeyBlcnJvcjogITEsIGVycm9yQ29kZTogIiIsIGVycm9yTXNnOiAiIiwgaW1hZ2U6IHkgfSk7CiAgICAgIH0pOwogICAgfQogICAgZnVuY3Rpb24gdigpIHsKICAgICAgZnVuY3Rpb24gYigpIHsKICAgICAgICBwLmVhY2goeiwgZnVuY3Rpb24oZTAsIHEpIHsKICAgICAgICAgIHEgJiYgKHEudGV4dCA/IGIwLmFkZEZyYW1lKHEuaW1nLCBSLCBxLnRleHQpIDogYjAuYWRkRnJhbWUocSwgUikpOwogICAgICAgIH0pLCBkKGIwLCB5KTsKICAgICAgfQogICAgICB2YXIgWiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gaSA/IGFyZ3VtZW50c1swXSA6IHt9LCB5ID0gWi5jYWxsYmFjaywgRiA9IFouaW1hZ2VzLCBSID0gWi5vcHRpb25zLCBNID0gWi5pbWFnZXNMZW5ndGgsIEkgPSB7IGdldFVzZXJNZWRpYTogITAsICJ3aW5kb3cuVVJMIjogITAgfSwgViA9IEMudmFsaWRhdGUoSSksIHogPSBbXSwgaiA9IDAsIGEwID0gdm9pZCAwLCBiMCA9IHZvaWQgMDsKICAgICAgcmV0dXJuIFYuZXJyb3IgPyB5KFYpIDogKGIwID0gbmV3IEcoUiksIHAuZWFjaChGLCBmdW5jdGlvbihlMCwgcSkgewogICAgICAgIHZhciBvMCA9IHE7CiAgICAgICAgcS5zcmMgJiYgKG8wID0gbzAuc3JjKSwgcC5pc0VsZW1lbnQobzApID8gKFIuY3Jvc3NPcmlnaW4gJiYgKG8wLmNyb3NzT3JpZ2luID0gUi5jcm9zc09yaWdpbiksIHpbZTBdID0gbzAsIGogKz0gMSwgaiA9PT0gTSAmJiBiKCkpIDogcC5pc1N0cmluZyhvMCkgJiYgKGEwID0gbmV3IEltYWdlKCksIFIuY3Jvc3NPcmlnaW4gJiYgKGEwLmNyb3NzT3JpZ2luID0gUi5jcm9zc09yaWdpbiksIGZ1bmN0aW9uKGMwKSB7CiAgICAgICAgICBxLnRleHQgJiYgKGMwLnRleHQgPSBxLnRleHQpLCBjMC5vbmVycm9yID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBTMCA9IHZvaWQgMDsKICAgICAgICAgICAgcmV0dXJuIC0tTSwgTSA9PT0gMCA/IChTMCA9IHt9LCBTMC5lcnJvciA9ICJOb25lIG9mIHRoZSByZXF1ZXN0ZWQgaW1hZ2VzIHdhcyBjYXBhYmxlIG9mIGJlaW5nIHJldHJpZXZlZCIsIHkoUzApKSA6IHZvaWQgMDsKICAgICAgICAgIH0sIGMwLm9ubG9hZCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB6W2UwXSA9IHEudGV4dCA/IHsgaW1nOiBjMCwgdGV4dDogYzAudGV4dCB9IDogYzAsIGogKz0gMSwgaiA9PT0gTSAmJiBiKCksIHAucmVtb3ZlRWxlbWVudChjMCk7CiAgICAgICAgICB9LCBjMC5zcmMgPSBvMDsKICAgICAgICB9KGEwKSwgcC5zZXRDU1NBdHRyKGEwLCB7IHBvc2l0aW9uOiAiZml4ZWQiLCBvcGFjaXR5OiAiMCIgfSksIEEuYm9keS5hcHBlbmRDaGlsZChhMCkpOwogICAgICB9KSwgdm9pZCAwKTsKICAgIH0KICAgIGZ1bmN0aW9uIGsoYikgewogICAgICBiID0gcC5pc09iamVjdChiKSA/IGIgOiB7fSwgWC5zdG9wVmlkZW9TdHJlYW1pbmcoYik7CiAgICB9CiAgICBmdW5jdGlvbiBFKGIsIFopIHsKICAgICAgdmFyIHkgPSBiLm9wdGlvbnMgfHwge30sIEYgPSB5LmltYWdlcywgUiA9IHkudmlkZW8sIE0gPSBOdW1iZXIoeS5naWZXaWR0aCksIEkgPSBOdW1iZXIoeS5naWZIZWlnaHQpLCBWID0gKE51bWJlcih5Lm51bUZyYW1lcyksIGIuY2FtZXJhU3RyZWFtKSwgeiA9IGIudmlkZW9FbGVtZW50LCBqID0gYi52aWRlb1dpZHRoLCBhMCA9IGIudmlkZW9IZWlnaHQsIGIwID0gSy5nZXRDcm9wRGltZW5zaW9ucyh7IHZpZGVvV2lkdGg6IGosIHZpZGVvSGVpZ2h0OiBhMCwgZ2lmSGVpZ2h0OiBJLCBnaWZXaWR0aDogTSB9KSwgZTAgPSBaOwogICAgICB5LmNyb3AgPSBiMCwgeS52aWRlb0VsZW1lbnQgPSB6LCB5LnZpZGVvV2lkdGggPSBqLCB5LnZpZGVvSGVpZ2h0ID0gYTAsIHkuY2FtZXJhU3RyZWFtID0gViwgcC5pc0VsZW1lbnQoeikgJiYgKHoud2lkdGggPSBNICsgYjAud2lkdGgsIHouaGVpZ2h0ID0gSSArIGIwLmhlaWdodCwgeS53ZWJjYW1WaWRlb0VsZW1lbnQgfHwgKHAuc2V0Q1NTQXR0cih6LCB7IHBvc2l0aW9uOiAiZml4ZWQiLCBvcGFjaXR5OiAiMCIgfSksIEEuYm9keS5hcHBlbmRDaGlsZCh6KSksIHoucGxheSgpLCBLLmdldEdJRih5LCBmdW5jdGlvbihxKSB7CiAgICAgICAgRiAmJiBGLmxlbmd0aCB8fCBSICYmIFIubGVuZ3RoIHx8IGsocSksIGUwKHEpOwogICAgICB9KSk7CiAgICB9CiAgICBmdW5jdGlvbiBnKCkgewogICAgICB2YXIgYiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gaSA/IGFyZ3VtZW50c1swXSA6IHt9LCBaID0gYi5jYWxsYmFjaywgeSA9IGIuZXhpc3RpbmdWaWRlbywgRiA9IGIub3B0aW9ucywgUiA9IHsgZ2V0VXNlck1lZGlhOiAhMCwgIndpbmRvdy5VUkwiOiAhMCB9LCBNID0gQy52YWxpZGF0ZShSKSwgSSA9IHZvaWQgMCwgViA9IHZvaWQgMDsKICAgICAgaWYgKE0uZXJyb3IpCiAgICAgICAgcmV0dXJuIFooTSk7CiAgICAgIGlmIChwLmlzRWxlbWVudCh5KSAmJiB5LnNyYykgewogICAgICAgIGlmIChWID0geS5zcmMsIEkgPSBwLmdldEV4dGVuc2lvbihWKSwgIXAuaXNTdXBwb3J0ZWQudmlkZW9Db2RlY3NbSV0pCiAgICAgICAgICByZXR1cm4gWihDLm1lc3NhZ2VzLnZpZGVvQ29kZWNzKTsKICAgICAgfSBlbHNlCiAgICAgICAgcC5pc0FycmF5KHkpICYmIHAuZWFjaCh5LCBmdW5jdGlvbih6LCBqKSB7CiAgICAgICAgICByZXR1cm4gSSA9IGogaW5zdGFuY2VvZiBCbG9iID8gai50eXBlLnN1YnN0cihqLnR5cGUubGFzdEluZGV4T2YoIi8iKSArIDEsIGoubGVuZ3RoKSA6IGouc3Vic3RyKGoubGFzdEluZGV4T2YoIi4iKSArIDEsIGoubGVuZ3RoKSwgcC5pc1N1cHBvcnRlZC52aWRlb0NvZGVjc1tJXSA/ICh5ID0gaiwgITEpIDogdm9pZCAwOwogICAgICAgIH0pOwogICAgICBYLnN0YXJ0U3RyZWFtaW5nKHsgY29tcGxldGVkOiBmdW5jdGlvbih6KSB7CiAgICAgICAgei5vcHRpb25zID0gRiB8fCB7fSwgRSh6LCBaKTsKICAgICAgfSwgZXhpc3RpbmdWaWRlbzogeSwgY3Jvc3NPcmlnaW46IEYuY3Jvc3NPcmlnaW4sIG9wdGlvbnM6IEYgfSk7CiAgICB9CiAgICBmdW5jdGlvbiB3KCkgewogICAgICB2YXIgYiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gaSA/IGFyZ3VtZW50c1swXSA6IHt9LCBaID0gYi5jYWxsYmFjaywgeSA9IGIubGFzdENhbWVyYVN0cmVhbSwgRiA9IGIub3B0aW9ucywgUiA9IGIud2ViY2FtVmlkZW9FbGVtZW50OwogICAgICByZXR1cm4gZigpID8gRi5zYXZlZFJlbmRlcmluZ0NvbnRleHRzLmxlbmd0aCA/IChLLmdldEdJRihGLCBmdW5jdGlvbihNKSB7CiAgICAgICAgWihNKTsKICAgICAgfSksIHZvaWQgMCkgOiAoWC5zdGFydFZpZGVvU3RyZWFtaW5nKGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBNID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSBpID8gYXJndW1lbnRzWzBdIDoge307CiAgICAgICAgTS5vcHRpb25zID0gRiB8fCB7fSwgRShNLCBaKTsKICAgICAgfSwgeyBsYXN0Q2FtZXJhU3RyZWFtOiB5LCBjYWxsYmFjazogWiwgd2ViY2FtVmlkZW9FbGVtZW50OiBSLCBjcm9zc09yaWdpbjogRi5jcm9zc09yaWdpbiB9KSwgdm9pZCAwKSA6IFooQy52YWxpZGF0ZSgpKTsKICAgIH0KICAgIGZ1bmN0aW9uIEIoYiwgWikgewogICAgICBpZiAoWiA9IHAuaXNGdW5jdGlvbihiKSA/IGIgOiBaLCBiID0gcC5pc09iamVjdChiKSA/IGIgOiB7fSwgcC5pc0Z1bmN0aW9uKFopKSB7CiAgICAgICAgdmFyIHkgPSBwLm1lcmdlT3B0aW9ucyhELCBiKSB8fCB7fSwgRiA9IGIuY2FtZXJhU3RyZWFtLCBSID0geS5pbWFnZXMsIE0gPSBSID8gUi5sZW5ndGggOiAwLCBJID0geS52aWRlbywgViA9IHkud2ViY2FtVmlkZW9FbGVtZW50OwogICAgICAgIHkgPSBwLm1lcmdlT3B0aW9ucyh5LCB7IGdpZldpZHRoOiBNYXRoLmZsb29yKHkuZ2lmV2lkdGgpLCBnaWZIZWlnaHQ6IE1hdGguZmxvb3IoeS5naWZIZWlnaHQpIH0pLCBNID8gdih7IGltYWdlczogUiwgaW1hZ2VzTGVuZ3RoOiBNLCBjYWxsYmFjazogWiwgb3B0aW9uczogeSB9KSA6IEkgPyBnKHsgZXhpc3RpbmdWaWRlbzogSSwgY2FsbGJhY2s6IFosIG9wdGlvbnM6IHkgfSkgOiB3KHsgbGFzdENhbWVyYVN0cmVhbTogRiwgY2FsbGJhY2s6IFosIHdlYmNhbVZpZGVvRWxlbWVudDogViwgb3B0aW9uczogeSB9KTsKICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gbShiLCBaKSB7CiAgICAgIGlmIChaID0gcC5pc0Z1bmN0aW9uKGIpID8gYiA6IFosIGIgPSBwLmlzT2JqZWN0KGIpID8gYiA6IHt9LCBwLmlzRnVuY3Rpb24oWikpIHsKICAgICAgICB2YXIgeSA9IHAubWVyZ2VPcHRpb25zKEQsIGIpLCBGID0gcC5tZXJnZU9wdGlvbnMoeSwgeyBpbnRlcnZhbDogMC4xLCBudW1GcmFtZXM6IDEsIGdpZldpZHRoOiBNYXRoLmZsb29yKHkuZ2lmV2lkdGgpLCBnaWZIZWlnaHQ6IE1hdGguZmxvb3IoeS5naWZIZWlnaHQpIH0pOwogICAgICAgIEIoRiwgWik7CiAgICAgIH0KICAgIH0KICAgIHZhciBwID0geyBVUkw6IGEuVVJMIHx8IGEud2Via2l0VVJMIHx8IGEubW96VVJMIHx8IGEubXNVUkwsIGdldFVzZXJNZWRpYTogZnVuY3Rpb24oKSB7CiAgICAgIHZhciBiID0gdC5nZXRVc2VyTWVkaWEgfHwgdC53ZWJraXRHZXRVc2VyTWVkaWEgfHwgdC5tb3pHZXRVc2VyTWVkaWEgfHwgdC5tc0dldFVzZXJNZWRpYTsKICAgICAgcmV0dXJuIGIgJiYgYi5iaW5kKHQpOwogICAgfSgpLCByZXF1ZXN0QW5pbUZyYW1lOiBhLnJlcXVlc3RBbmltYXRpb25GcmFtZSB8fCBhLndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSB8fCBhLm1velJlcXVlc3RBbmltYXRpb25GcmFtZSB8fCBhLm9SZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwgYS5tc1JlcXVlc3RBbmltYXRpb25GcmFtZSwgcmVxdWVzdFRpbWVvdXQ6IGZ1bmN0aW9uKGIsIFopIHsKICAgICAgaWYgKGIgPSBiIHx8IHAubm9vcCwgWiA9IFogfHwgMCwgIXAucmVxdWVzdEFuaW1GcmFtZSkKICAgICAgICByZXR1cm4gc2V0VGltZW91dChiLCBaKTsKICAgICAgdmFyIHkgPSAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLmdldFRpbWUoKSwgRiA9IG5ldyBPYmplY3QoKSwgUiA9IHAucmVxdWVzdEFuaW1GcmFtZSwgTSA9IGZ1bmN0aW9uIEkoKSB7CiAgICAgICAgdmFyIFYgPSAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLmdldFRpbWUoKSwgeiA9IFYgLSB5OwogICAgICAgIHogPj0gWiA/IGIuY2FsbCgpIDogRi52YWx1ZSA9IFIoSSk7CiAgICAgIH07CiAgICAgIHJldHVybiBGLnZhbHVlID0gUihNKSwgRjsKICAgIH0sIEJsb2I6IGEuQmxvYiB8fCBhLkJsb2JCdWlsZGVyIHx8IGEuV2ViS2l0QmxvYkJ1aWxkZXIgfHwgYS5Nb3pCbG9iQnVpbGRlciB8fCBhLk1TQmxvYkJ1aWxkZXIsIGJ0b2E6IGZ1bmN0aW9uKCkgewogICAgICB2YXIgYiA9IGEuYnRvYSB8fCBmdW5jdGlvbihaKSB7CiAgICAgICAgZm9yICh2YXIgeSA9ICIiLCBGID0gMCwgUiA9IFoubGVuZ3RoLCBNID0gIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89IiwgSSA9IHZvaWQgMCwgViA9IHZvaWQgMCwgeiA9IHZvaWQgMCwgaiA9IHZvaWQgMCwgYTAgPSB2b2lkIDAsIGIwID0gdm9pZCAwLCBlMCA9IHZvaWQgMDsgUiA+IEY7ICkKICAgICAgICAgIEkgPSBaLmNoYXJDb2RlQXQoRisrKSwgViA9IFouY2hhckNvZGVBdChGKyspLCB6ID0gWi5jaGFyQ29kZUF0KEYrKyksIGogPSBJID4+IDIsIGEwID0gKDMgJiBJKSA8PCA0IHwgViA+PiA0LCBiMCA9ICgxNSAmIFYpIDw8IDIgfCB6ID4+IDYsIGUwID0gNjMgJiB6LCBpc05hTihWKSA/IGIwID0gZTAgPSA2NCA6IGlzTmFOKHopICYmIChlMCA9IDY0KSwgeSA9IHkgKyBNLmNoYXJBdChqKSArIE0uY2hhckF0KGEwKSArIE0uY2hhckF0KGIwKSArIE0uY2hhckF0KGUwKTsKICAgICAgICByZXR1cm4geTsKICAgICAgfTsKICAgICAgcmV0dXJuIGIgPyBiLmJpbmQoYSkgOiBwLm5vb3A7CiAgICB9KCksIGlzT2JqZWN0OiBmdW5jdGlvbihiKSB7CiAgICAgIHJldHVybiBiICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChiKSA9PT0gIltvYmplY3QgT2JqZWN0XSI7CiAgICB9LCBpc0VtcHR5T2JqZWN0OiBmdW5jdGlvbihiKSB7CiAgICAgIHJldHVybiBwLmlzT2JqZWN0KGIpICYmICFPYmplY3Qua2V5cyhiKS5sZW5ndGg7CiAgICB9LCBpc0FycmF5OiBmdW5jdGlvbihiKSB7CiAgICAgIHJldHVybiBiICYmIEFycmF5LmlzQXJyYXkoYik7CiAgICB9LCBpc0Z1bmN0aW9uOiBmdW5jdGlvbihiKSB7CiAgICAgIHJldHVybiBiICYmIHR5cGVvZiBiID09ICJmdW5jdGlvbiI7CiAgICB9LCBpc0VsZW1lbnQ6IGZ1bmN0aW9uKGIpIHsKICAgICAgcmV0dXJuIGIgJiYgYi5ub2RlVHlwZSA9PT0gMTsKICAgIH0sIGlzU3RyaW5nOiBmdW5jdGlvbihiKSB7CiAgICAgIHJldHVybiB0eXBlb2YgYiA9PSAic3RyaW5nIiB8fCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYikgPT09ICJbb2JqZWN0IFN0cmluZ10iOwogICAgfSwgaXNTdXBwb3J0ZWQ6IHsgY2FudmFzOiBmdW5jdGlvbigpIHsKICAgICAgdmFyIGIgPSBBLmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwogICAgICByZXR1cm4gYiAmJiBiLmdldENvbnRleHQgJiYgYi5nZXRDb250ZXh0KCIyZCIpOwogICAgfSwgd2Vid29ya2VyczogZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBhLldvcmtlcjsKICAgIH0sIGJsb2I6IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gcC5CbG9iOwogICAgfSwgVWludDhBcnJheTogZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBhLlVpbnQ4QXJyYXk7CiAgICB9LCBVaW50MzJBcnJheTogZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBhLlVpbnQzMkFycmF5OwogICAgfSwgdmlkZW9Db2RlY3M6IGZ1bmN0aW9uKCkgewogICAgICB2YXIgYiA9IEEuY3JlYXRlRWxlbWVudCgidmlkZW8iKSwgWiA9IHsgbXA0OiAhMSwgaDI2NDogITEsIG9ndjogITEsIG9nZzogITEsIHdlYm06ICExIH07CiAgICAgIHRyeSB7CiAgICAgICAgYiAmJiBiLmNhblBsYXlUeXBlICYmIChaLm1wNCA9IGIuY2FuUGxheVR5cGUoJ3ZpZGVvL21wNDsgY29kZWNzPSJtcDR2LjIwLjgiJykgIT09ICIiLCBaLmgyNjQgPSAoYi5jYW5QbGF5VHlwZSgndmlkZW8vbXA0OyBjb2RlY3M9ImF2YzEuNDJFMDFFIicpIHx8IGIuY2FuUGxheVR5cGUoJ3ZpZGVvL21wNDsgY29kZWNzPSJhdmMxLjQyRTAxRSwgbXA0YS40MC4yIicpKSAhPT0gIiIsIFoub2d2ID0gYi5jYW5QbGF5VHlwZSgndmlkZW8vb2dnOyBjb2RlY3M9InRoZW9yYSInKSAhPT0gIiIsIFoub2dnID0gYi5jYW5QbGF5VHlwZSgndmlkZW8vb2dnOyBjb2RlY3M9InRoZW9yYSInKSAhPT0gIiIsIFoud2VibSA9IGIuY2FuUGxheVR5cGUoJ3ZpZGVvL3dlYm07IGNvZGVjcz0idnA4LCB2b3JiaXMiJykgIT09IC0xKTsKICAgICAgfSBjYXRjaCB7CiAgICAgIH0KICAgICAgcmV0dXJuIFo7CiAgICB9KCkgfSwgbm9vcDogZnVuY3Rpb24oKSB7CiAgICB9LCBlYWNoOiBmdW5jdGlvbihiLCBaKSB7CiAgICAgIHZhciB5ID0gdm9pZCAwLCBGID0gdm9pZCAwOwogICAgICBpZiAocC5pc0FycmF5KGIpKQogICAgICAgIGZvciAoeSA9IC0xLCBGID0gYi5sZW5ndGg7ICsreSA8IEYgJiYgWih5LCBiW3ldKSAhPT0gITE7ICkKICAgICAgICAgIDsKICAgICAgZWxzZSBpZiAocC5pc09iamVjdChiKSkgewogICAgICAgIGZvciAoeSBpbiBiKQogICAgICAgICAgaWYgKGIuaGFzT3duUHJvcGVydHkoeSkgJiYgWih5LCBiW3ldKSA9PT0gITEpCiAgICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9LCBtZXJnZU9wdGlvbnM6IGZ1bmN0aW9uKGIsIFopIHsKICAgICAgaWYgKHAuaXNPYmplY3QoYikgJiYgcC5pc09iamVjdChaKSAmJiBPYmplY3Qua2V5cykgewogICAgICAgIHZhciB5ID0ge307CiAgICAgICAgcmV0dXJuIHAuZWFjaChiLCBmdW5jdGlvbihGKSB7CiAgICAgICAgICB5W0ZdID0gYltGXTsKICAgICAgICB9KSwgcC5lYWNoKFosIGZ1bmN0aW9uKEYpIHsKICAgICAgICAgIHZhciBSID0gWltGXTsKICAgICAgICAgIHlbRl0gPSBwLmlzT2JqZWN0KFIpICYmIGJbRl0gPyBwLm1lcmdlT3B0aW9ucyhiW0ZdLCBSKSA6IFI7CiAgICAgICAgfSksIHk7CiAgICAgIH0KICAgIH0sIHNldENTU0F0dHI6IGZ1bmN0aW9uKGIsIFosIHkpIHsKICAgICAgcC5pc0VsZW1lbnQoYikgJiYgKHAuaXNTdHJpbmcoWikgJiYgcC5pc1N0cmluZyh5KSA/IGIuc3R5bGVbWl0gPSB5IDogcC5pc09iamVjdChaKSAmJiBwLmVhY2goWiwgZnVuY3Rpb24oRiwgUikgewogICAgICAgIGIuc3R5bGVbRl0gPSBSOwogICAgICB9KSk7CiAgICB9LCByZW1vdmVFbGVtZW50OiBmdW5jdGlvbihiKSB7CiAgICAgIHAuaXNFbGVtZW50KGIpICYmIGIucGFyZW50Tm9kZSAmJiBiLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYik7CiAgICB9LCBjcmVhdGVXZWJXb3JrZXI6IGZ1bmN0aW9uKGIpIHsKICAgICAgaWYgKCFwLmlzU3RyaW5nKGIpKQogICAgICAgIHJldHVybiB7fTsKICAgICAgdHJ5IHsKICAgICAgICB2YXIgWiA9IG5ldyBwLkJsb2IoW2JdLCB7IHR5cGU6ICJ0ZXh0L2phdmFzY3JpcHQiIH0pLCB5ID0gcC5VUkwuY3JlYXRlT2JqZWN0VVJMKFopLCBGID0gbmV3IFdvcmtlcih5KTsKICAgICAgICByZXR1cm4geyBvYmplY3RVcmw6IHksIHdvcmtlcjogRiB9OwogICAgICB9IGNhdGNoIChSKSB7CiAgICAgICAgcmV0dXJuICIiICsgUjsKICAgICAgfQogICAgfSwgZ2V0RXh0ZW5zaW9uOiBmdW5jdGlvbihiKSB7CiAgICAgIHJldHVybiBiLnN1YnN0cihiLmxhc3RJbmRleE9mKCIuIikgKyAxLCBiLmxlbmd0aCk7CiAgICB9LCBnZXRGb250U2l6ZTogZnVuY3Rpb24oKSB7CiAgICAgIHZhciBiID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSBpID8gYXJndW1lbnRzWzBdIDoge307CiAgICAgIGlmICghQS5ib2R5IHx8IGIucmVzaXplRm9udCA9PT0gITEpCiAgICAgICAgcmV0dXJuIGIuZm9udFNpemU7CiAgICAgIHZhciBaID0gYi50ZXh0LCB5ID0gYi5naWZXaWR0aCwgRiA9IHBhcnNlSW50KGIuZm9udFNpemUsIDEwKSwgUiA9IHBhcnNlSW50KGIubWluRm9udFNpemUsIDEwKSwgTSA9IEEuY3JlYXRlRWxlbWVudCgiZGl2IiksIEkgPSBBLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKICAgICAgZm9yIChNLnNldEF0dHJpYnV0ZSgid2lkdGgiLCB5KSwgTS5hcHBlbmRDaGlsZChJKSwgSS5pbm5lckhUTUwgPSBaLCBJLnN0eWxlLmZvbnRTaXplID0gRiArICJweCIsIEkuc3R5bGUudGV4dEluZGVudCA9ICItOTk5OXB4IiwgSS5zdHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiIsIEEuYm9keS5hcHBlbmRDaGlsZChJKTsgSS5vZmZzZXRXaWR0aCA+IHkgJiYgRiA+PSBSOyApCiAgICAgICAgSS5zdHlsZS5mb250U2l6ZSA9IC0tRiArICJweCI7CiAgICAgIHJldHVybiBBLmJvZHkucmVtb3ZlQ2hpbGQoSSksIEYgKyAicHgiOwogICAgfSwgd2ViV29ya2VyRXJyb3I6ICExIH0sIFcgPSBPYmplY3QuZnJlZXplKHsgZGVmYXVsdDogcCB9KSwgQyA9IHsgdmFsaWRhdGU6IGZ1bmN0aW9uKGIpIHsKICAgICAgYiA9IHAuaXNPYmplY3QoYikgPyBiIDoge307CiAgICAgIHZhciBaID0ge307CiAgICAgIHJldHVybiBwLmVhY2goQy52YWxpZGF0b3JzLCBmdW5jdGlvbih5LCBGKSB7CiAgICAgICAgdmFyIFIgPSBGLmVycm9yQ29kZTsKICAgICAgICByZXR1cm4gYltSXSB8fCBGLmNvbmRpdGlvbiA/IHZvaWQgMCA6IChaID0gRiwgWi5lcnJvciA9ICEwLCAhMSk7CiAgICAgIH0pLCBkZWxldGUgWi5jb25kaXRpb24sIFo7CiAgICB9LCBpc1ZhbGlkOiBmdW5jdGlvbihaKSB7CiAgICAgIHZhciB5ID0gQy52YWxpZGF0ZShaKSwgRiA9IHkuZXJyb3IgIT09ICEwOwogICAgICByZXR1cm4gRjsKICAgIH0sIHZhbGlkYXRvcnM6IFt7IGNvbmRpdGlvbjogcC5pc0Z1bmN0aW9uKHAuZ2V0VXNlck1lZGlhKSwgZXJyb3JDb2RlOiAiZ2V0VXNlck1lZGlhIiwgZXJyb3JNc2c6ICJUaGUgZ2V0VXNlck1lZGlhIEFQSSBpcyBub3Qgc3VwcG9ydGVkIGluIHlvdXIgYnJvd3NlciIgfSwgeyBjb25kaXRpb246IHAuaXNTdXBwb3J0ZWQuY2FudmFzKCksIGVycm9yQ29kZTogImNhbnZhcyIsIGVycm9yTXNnOiAiQ2FudmFzIGVsZW1lbnRzIGFyZSBub3Qgc3VwcG9ydGVkIGluIHlvdXIgYnJvd3NlciIgfSwgeyBjb25kaXRpb246IHAuaXNTdXBwb3J0ZWQud2Vid29ya2VycygpLCBlcnJvckNvZGU6ICJ3ZWJ3b3JrZXJzIiwgZXJyb3JNc2c6ICJUaGUgV2ViIFdvcmtlcnMgQVBJIGlzIG5vdCBzdXBwb3J0ZWQgaW4geW91ciBicm93c2VyIiB9LCB7IGNvbmRpdGlvbjogcC5pc0Z1bmN0aW9uKHAuVVJMKSwgZXJyb3JDb2RlOiAid2luZG93LlVSTCIsIGVycm9yTXNnOiAiVGhlIHdpbmRvdy5VUkwgQVBJIGlzIG5vdCBzdXBwb3J0ZWQgaW4geW91ciBicm93c2VyIiB9LCB7IGNvbmRpdGlvbjogcC5pc1N1cHBvcnRlZC5ibG9iKCksIGVycm9yQ29kZTogIndpbmRvdy5CbG9iIiwgZXJyb3JNc2c6ICJUaGUgd2luZG93LkJsb2IgRmlsZSBBUEkgaXMgbm90IHN1cHBvcnRlZCBpbiB5b3VyIGJyb3dzZXIiIH0sIHsgY29uZGl0aW9uOiBwLmlzU3VwcG9ydGVkLlVpbnQ4QXJyYXkoKSwgZXJyb3JDb2RlOiAid2luZG93LlVpbnQ4QXJyYXkiLCBlcnJvck1zZzogIlRoZSB3aW5kb3cuVWludDhBcnJheSBmdW5jdGlvbiBjb25zdHJ1Y3RvciBpcyBub3Qgc3VwcG9ydGVkIGluIHlvdXIgYnJvd3NlciIgfSwgeyBjb25kaXRpb246IHAuaXNTdXBwb3J0ZWQuVWludDMyQXJyYXkoKSwgZXJyb3JDb2RlOiAid2luZG93LlVpbnQzMkFycmF5IiwgZXJyb3JNc2c6ICJUaGUgd2luZG93LlVpbnQzMkFycmF5IGZ1bmN0aW9uIGNvbnN0cnVjdG9yIGlzIG5vdCBzdXBwb3J0ZWQgaW4geW91ciBicm93c2VyIiB9XSwgbWVzc2FnZXM6IHsgdmlkZW9Db2RlY3M6IHsgZXJyb3JDb2RlOiAidmlkZW9jb2RlYyIsIGVycm9yTXNnOiAiVGhlIHZpZGVvIGNvZGVjIHlvdSBhcmUgdHJ5aW5nIHRvIHVzZSBpcyBub3Qgc3VwcG9ydGVkIGluIHlvdXIgYnJvd3NlciIgfSB9IH0sIF8gPSBPYmplY3QuZnJlZXplKHsgZGVmYXVsdDogQyB9KSwgTiA9IGZ1bmN0aW9uKCkgewogICAgfSwgRCA9IHsgc2FtcGxlSW50ZXJ2YWw6IDEwLCBudW1Xb3JrZXJzOiAyLCBmaWx0ZXI6ICIiLCBnaWZXaWR0aDogMjAwLCBnaWZIZWlnaHQ6IDIwMCwgaW50ZXJ2YWw6IDAuMSwgbnVtRnJhbWVzOiAxMCwgZnJhbWVEdXJhdGlvbjogMSwga2VlcENhbWVyYU9uOiAhMSwgaW1hZ2VzOiBbXSwgdmlkZW86IG51bGwsIHdlYmNhbVZpZGVvRWxlbWVudDogbnVsbCwgY2FtZXJhU3RyZWFtOiBudWxsLCB0ZXh0OiAiIiwgZm9udFdlaWdodDogIm5vcm1hbCIsIGZvbnRTaXplOiAiMTZweCIsIG1pbkZvbnRTaXplOiAiMTBweCIsIHJlc2l6ZUZvbnQ6ICExLCBmb250RmFtaWx5OiAic2Fucy1zZXJpZiIsIGZvbnRDb2xvcjogIiNmZmZmZmYiLCB0ZXh0QWxpZ246ICJjZW50ZXIiLCB0ZXh0QmFzZWxpbmU6ICJib3R0b20iLCB0ZXh0WENvb3JkaW5hdGU6IG51bGwsIHRleHRZQ29vcmRpbmF0ZTogbnVsbCwgcHJvZ3Jlc3NDYWxsYmFjazogTiwgY29tcGxldGVDYWxsYmFjazogTiwgc2F2ZVJlbmRlcmluZ0NvbnRleHRzOiAhMSwgc2F2ZWRSZW5kZXJpbmdDb250ZXh0czogW10sIHNob3dGcmFtZVRleHQ6ICEwLCBjcm9zc09yaWdpbjogIkFub255bW91cyIsIHdhdGVyTWFyazogbnVsbCwgd2F0ZXJNYXJrSGVpZ2h0OiBudWxsLCB3YXRlck1hcmtXaWR0aDogbnVsbCwgd2F0ZXJNYXJrWENvb3JkaW5hdGU6IDEsIHdhdGVyTWFya1lDb29yZGluYXRlOiAxIH0sIFkgPSBPYmplY3QuZnJlZXplKHsgZGVmYXVsdDogRCB9KSwgZjAgPSBmdW5jdGlvbigpIHsKICAgIH0sIEcgPSBmdW5jdGlvbihiKSB7CiAgICAgIHRoaXMuY2FudmFzID0gbnVsbCwgdGhpcy5jdHggPSBudWxsLCB0aGlzLnJlcGVhdCA9IDAsIHRoaXMuZnJhbWVzID0gW10sIHRoaXMubnVtUmVuZGVyZWRGcmFtZXMgPSAwLCB0aGlzLm9uUmVuZGVyQ29tcGxldGVDYWxsYmFjayA9IGYwLCB0aGlzLm9uUmVuZGVyUHJvZ3Jlc3NDYWxsYmFjayA9IGYwLCB0aGlzLndvcmtlcnMgPSBbXSwgdGhpcy5hdmFpbGFibGVXb3JrZXJzID0gW10sIHRoaXMuZ2VuZXJhdGluZ0dJRiA9ICExLCB0aGlzLm9wdGlvbnMgPSBiLCB0aGlzLmluaXRpYWxpemVXZWJXb3JrZXJzKGIpOwogICAgfTsKICAgIEcucHJvdG90eXBlID0geyB3b3JrZXJNZXRob2RzOiBzKCksIGluaXRpYWxpemVXZWJXb3JrZXJzOiBmdW5jdGlvbihiKSB7CiAgICAgIHZhciBaID0gdGhpcywgeSA9IGwudG9TdHJpbmcoKSArICIoIiArIHMudG9TdHJpbmcoKSArICIoKSk7IiwgRiA9IHZvaWQgMCwgUiA9IHZvaWQgMCwgTSA9IHZvaWQgMCwgSSA9IHZvaWQgMCwgViA9IC0xLCB6ID0gIiI7CiAgICAgIGZvciAoSSA9IGIubnVtV29ya2VyczsgKytWIDwgSTsgKQogICAgICAgIEYgPSBwLmNyZWF0ZVdlYldvcmtlcih5KSwgcC5pc09iamVjdChGKSA/IChSID0gRi5vYmplY3RVcmwsIE0gPSBGLndvcmtlciwgWi53b3JrZXJzLnB1c2goeyB3b3JrZXI6IE0sIG9iamVjdFVybDogUiB9KSwgWi5hdmFpbGFibGVXb3JrZXJzLnB1c2goTSkpIDogKHogPSBGLCBwLndlYldvcmtlckVycm9yID0gISFGKTsKICAgICAgdGhpcy53b3JrZXJFcnJvciA9IHosIHRoaXMuY2FudmFzID0gQS5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSwgdGhpcy5jYW52YXMud2lkdGggPSBiLmdpZldpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQgPSBiLmdpZkhlaWdodCwgdGhpcy5jdHggPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCIyZCIpLCB0aGlzLmZyYW1lcyA9IFtdOwogICAgfSwgZ2V0V29ya2VyOiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuYXZhaWxhYmxlV29ya2Vycy5wb3AoKTsKICAgIH0sIGZyZWVXb3JrZXI6IGZ1bmN0aW9uKGIpIHsKICAgICAgdGhpcy5hdmFpbGFibGVXb3JrZXJzLnB1c2goYik7CiAgICB9LCBieXRlTWFwOiBmdW5jdGlvbigpIHsKICAgICAgZm9yICh2YXIgYiA9IFtdLCBaID0gMDsgMjU2ID4gWjsgWisrKQogICAgICAgIGJbWl0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKFopOwogICAgICByZXR1cm4gYjsKICAgIH0oKSwgYnVmZmVyVG9TdHJpbmc6IGZ1bmN0aW9uKGIpIHsKICAgICAgZm9yICh2YXIgWiA9IGIubGVuZ3RoLCB5ID0gIiIsIEYgPSAtMTsgKytGIDwgWjsgKQogICAgICAgIHkgKz0gdGhpcy5ieXRlTWFwW2JbRl1dOwogICAgICByZXR1cm4geTsKICAgIH0sIG9uRnJhbWVGaW5pc2hlZDogZnVuY3Rpb24oYikgewogICAgICB2YXIgWiA9IHRoaXMsIHkgPSBaLmZyYW1lcywgRiA9IFoub3B0aW9ucywgUiA9ICEhKEYuaW1hZ2VzIHx8IFtdKS5sZW5ndGgsIE0gPSB5LmV2ZXJ5KGZ1bmN0aW9uKEkpIHsKICAgICAgICByZXR1cm4gIUkuYmVpbmdQcm9jZXNzZWQgJiYgSS5kb25lOwogICAgICB9KTsKICAgICAgWi5udW1SZW5kZXJlZEZyYW1lcysrLCBSICYmIGIoWi5udW1SZW5kZXJlZEZyYW1lcyAvIHkubGVuZ3RoKSwgWi5vblJlbmRlclByb2dyZXNzQ2FsbGJhY2soMC43NSAqIFoubnVtUmVuZGVyZWRGcmFtZXMgLyB5Lmxlbmd0aCksIE0gPyBaLmdlbmVyYXRpbmdHSUYgfHwgWi5nZW5lcmF0ZUdJRih5LCBaLm9uUmVuZGVyQ29tcGxldGVDYWxsYmFjaykgOiBwLnJlcXVlc3RUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgIFoucHJvY2Vzc05leHRGcmFtZSgpOwogICAgICB9LCAxKTsKICAgIH0sIHByb2Nlc3NGcmFtZTogZnVuY3Rpb24oYikgewogICAgICB2YXIgWiA9IHRoaXMsIHkgPSAodGhpcy5vcHRpb25zLCB0aGlzLm9wdGlvbnMpLCBGID0geS5wcm9ncmVzc0NhbGxiYWNrLCBSID0geS5zYW1wbGVJbnRlcnZhbCwgTSA9IHRoaXMuZnJhbWVzLCBJID0gdm9pZCAwLCBWID0gdm9pZCAwLCB6ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGogPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IGkgPyBhcmd1bWVudHNbMF0gOiB7fSwgYTAgPSBqLmRhdGE7CiAgICAgICAgZGVsZXRlIEkuZGF0YSwgSS5waXhlbHMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhMC5waXhlbHMpLCBJLnBhbGV0dGUgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhMC5wYWxldHRlKSwgSS5kb25lID0gITAsIEkuYmVpbmdQcm9jZXNzZWQgPSAhMSwgWi5mcmVlV29ya2VyKFYpLCBaLm9uRnJhbWVGaW5pc2hlZChGKTsKICAgICAgfTsKICAgICAgcmV0dXJuIEkgPSBNW2JdLCBJLmJlaW5nUHJvY2Vzc2VkIHx8IEkuZG9uZSA/ICh0aGlzLm9uRnJhbWVGaW5pc2hlZCgpLCB2b2lkIDApIDogKEkuc2FtcGxlSW50ZXJ2YWwgPSBSLCBJLmJlaW5nUHJvY2Vzc2VkID0gITAsIEkuZ2lmc2hvdCA9ICEwLCBWID0gdGhpcy5nZXRXb3JrZXIoKSwgViA/IChWLm9ubWVzc2FnZSA9IHosIFYucG9zdE1lc3NhZ2UoSSkpIDogeih7IGRhdGE6IFoud29ya2VyTWV0aG9kcy5ydW4oSSkgfSksIHZvaWQgMCk7CiAgICB9LCBzdGFydFJlbmRlcmluZzogZnVuY3Rpb24oYikgewogICAgICB0aGlzLm9uUmVuZGVyQ29tcGxldGVDYWxsYmFjayA9IGI7CiAgICAgIGZvciAodmFyIFogPSAwOyBaIDwgdGhpcy5vcHRpb25zLm51bVdvcmtlcnMgJiYgWiA8IHRoaXMuZnJhbWVzLmxlbmd0aDsgWisrKQogICAgICAgIHRoaXMucHJvY2Vzc0ZyYW1lKFopOwogICAgfSwgcHJvY2Vzc05leHRGcmFtZTogZnVuY3Rpb24oKSB7CiAgICAgIGZvciAodmFyIGIgPSAtMSwgWiA9IDA7IFogPCB0aGlzLmZyYW1lcy5sZW5ndGg7IForKykgewogICAgICAgIHZhciB5ID0gdGhpcy5mcmFtZXNbWl07CiAgICAgICAgaWYgKCF5LmRvbmUgJiYgIXkuYmVpbmdQcm9jZXNzZWQpIHsKICAgICAgICAgIGIgPSBaOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIGIgPj0gMCAmJiB0aGlzLnByb2Nlc3NGcmFtZShiKTsKICAgIH0sIGdlbmVyYXRlR0lGOiBmdW5jdGlvbihiLCBaKSB7CiAgICAgIHZhciB5ID0gW10sIEYgPSB7IGxvb3A6IHRoaXMucmVwZWF0IH0sIFIgPSB0aGlzLm9wdGlvbnMsIE0gPSBSLmludGVydmFsLCBJID0gUi5mcmFtZUR1cmF0aW9uLCBWID0gUi5pbWFnZXMsIHogPSAhIVYubGVuZ3RoLCBqID0gUi5naWZIZWlnaHQsIGEwID0gUi5naWZXaWR0aCwgYjAgPSBuZXcgYyh5LCBhMCwgaiwgRiksIGUwID0gdGhpcy5vblJlbmRlclByb2dyZXNzQ2FsbGJhY2ssIHEgPSB6ID8gMTAwICogTSA6IDAsIG8wID0gdm9pZCAwLCBjMCA9IHZvaWQgMDsKICAgICAgdGhpcy5nZW5lcmF0aW5nR0lGID0gITAsIHAuZWFjaChiLCBmdW5jdGlvbihTMCwgdjApIHsKICAgICAgICB2YXIgSTAgPSB2MC5wYWxldHRlOwogICAgICAgIGUwKDAuNzUgKyAwLjI1ICogdjAucG9zaXRpb24gKiAxIC8gYi5sZW5ndGgpOwogICAgICAgIGZvciAodmFyIEMwID0gMDsgSSA+IEMwOyBDMCsrKQogICAgICAgICAgYjAuYWRkRnJhbWUoMCwgMCwgYTAsIGosIHYwLnBpeGVscywgeyBwYWxldHRlOiBJMCwgZGVsYXk6IHEgfSk7CiAgICAgIH0pLCBiMC5lbmQoKSwgZTAoMSksIHRoaXMuZnJhbWVzID0gW10sIHRoaXMuZ2VuZXJhdGluZ0dJRiA9ICExLCBwLmlzRnVuY3Rpb24oWikgJiYgKG8wID0gdGhpcy5idWZmZXJUb1N0cmluZyh5KSwgYzAgPSAiZGF0YTppbWFnZS9naWY7YmFzZTY0LCIgKyBwLmJ0b2EobzApLCBaKGMwKSk7CiAgICB9LCBzZXRSZXBlYXQ6IGZ1bmN0aW9uKGIpIHsKICAgICAgdGhpcy5yZXBlYXQgPSBiOwogICAgfSwgYWRkRnJhbWU6IGZ1bmN0aW9uKGIsIFosIHkpIHsKICAgICAgWiA9IHAuaXNPYmplY3QoWikgPyBaIDoge307CiAgICAgIHZhciBGID0gdGhpcywgUiA9IEYuY3R4LCBNID0gRi5vcHRpb25zLCBJID0gTS5naWZXaWR0aCwgViA9IE0uZ2lmSGVpZ2h0LCB6ID0gcC5nZXRGb250U2l6ZShaKSwgaiA9IFosIGEwID0gai5maWx0ZXIsIGIwID0gai5mb250Q29sb3IsIGUwID0gai5mb250RmFtaWx5LCBxID0gai5mb250V2VpZ2h0LCBvMCA9IChqLmdpZkhlaWdodCwgai5naWZXaWR0aCwgai50ZXh0KSwgYzAgPSBqLnRleHRBbGlnbiwgUzAgPSBqLnRleHRCYXNlbGluZSwgdjAgPSBqLndhdGVyTWFyaywgSTAgPSBqLndhdGVyTWFya0hlaWdodCwgQzAgPSBqLndhdGVyTWFya1dpZHRoLCBPMCA9IGoud2F0ZXJNYXJrWENvb3JkaW5hdGUsIFcwID0gai53YXRlck1hcmtZQ29vcmRpbmF0ZSwgTjAgPSBaLnRleHRYQ29vcmRpbmF0ZSA/IFoudGV4dFhDb29yZGluYXRlIDogYzAgPT09ICJsZWZ0IiA/IDEgOiBjMCA9PT0gInJpZ2h0IiA/IEkgOiBJIC8gMiwgUTAgPSBaLnRleHRZQ29vcmRpbmF0ZSA/IFoudGV4dFlDb29yZGluYXRlIDogUzAgPT09ICJ0b3AiID8gMSA6IFMwID09PSAiY2VudGVyIiA/IFYgLyAyIDogViwgVTAgPSBxICsgIiAiICsgeiArICIgIiArIGUwLCBQMCA9IHkgJiYgWi5zaG93RnJhbWVUZXh0ID8geSA6IG8wLCBKMCA9IHZvaWQgMDsKICAgICAgdHJ5IHsKICAgICAgICBSLmZpbHRlciA9IGEwLCBSLmRyYXdJbWFnZShiLCAwLCAwLCBJLCBWKSwgUDAgJiYgKFIuZm9udCA9IFUwLCBSLmZpbGxTdHlsZSA9IGIwLCBSLnRleHRBbGlnbiA9IGMwLCBSLnRleHRCYXNlbGluZSA9IFMwLCBSLmZpbGxUZXh0KFAwLCBOMCwgUTApKSwgdjAgJiYgUi5kcmF3SW1hZ2UodjAsIE8wLCBXMCwgQzAsIEkwKSwgSjAgPSBSLmdldEltYWdlRGF0YSgwLCAwLCBJLCBWKSwgRi5hZGRGcmFtZUltYWdlRGF0YShKMCk7CiAgICAgIH0gY2F0Y2ggKEFyKSB7CiAgICAgICAgcmV0dXJuICIiICsgQXI7CiAgICAgIH0KICAgIH0sIGFkZEZyYW1lSW1hZ2VEYXRhOiBmdW5jdGlvbigpIHsKICAgICAgdmFyIGIgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IGkgPyBhcmd1bWVudHNbMF0gOiB7fSwgWiA9IHRoaXMuZnJhbWVzLCB5ID0gYi5kYXRhOwogICAgICB0aGlzLmZyYW1lcy5wdXNoKHsgZGF0YTogeSwgd2lkdGg6IGIud2lkdGgsIGhlaWdodDogYi5oZWlnaHQsIHBhbGV0dGU6IG51bGwsIGRpdGhlcmluZzogbnVsbCwgZG9uZTogITEsIGJlaW5nUHJvY2Vzc2VkOiAhMSwgcG9zaXRpb246IFoubGVuZ3RoIH0pOwogICAgfSwgb25SZW5kZXJQcm9ncmVzczogZnVuY3Rpb24oYikgewogICAgICB0aGlzLm9uUmVuZGVyUHJvZ3Jlc3NDYWxsYmFjayA9IGI7CiAgICB9LCBpc1JlbmRlcmluZzogZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiB0aGlzLmdlbmVyYXRpbmdHSUY7CiAgICB9LCBnZXRCYXNlNjRHSUY6IGZ1bmN0aW9uKGIpIHsKICAgICAgdmFyIFogPSB0aGlzLCB5ID0gZnVuY3Rpb24oRikgewogICAgICAgIFouZGVzdHJveVdvcmtlcnMoKSwgcC5yZXF1ZXN0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICAgIGIoRik7CiAgICAgICAgfSwgMCk7CiAgICAgIH07CiAgICAgIFouc3RhcnRSZW5kZXJpbmcoeSk7CiAgICB9LCBkZXN0cm95V29ya2VyczogZnVuY3Rpb24oKSB7CiAgICAgIGlmICghdGhpcy53b3JrZXJFcnJvcikgewogICAgICAgIHZhciBiID0gdGhpcy53b3JrZXJzOwogICAgICAgIHAuZWFjaChiLCBmdW5jdGlvbihaLCB5KSB7CiAgICAgICAgICB2YXIgRiA9IHkud29ya2VyLCBSID0geS5vYmplY3RVcmw7CiAgICAgICAgICBGLnRlcm1pbmF0ZSgpLCBwLlVSTC5yZXZva2VPYmplY3RVUkwoUik7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0gfTsKICAgIHZhciBKID0gZnVuY3Rpb24oKSB7CiAgICB9LCBLID0geyBnZXRHSUY6IGZ1bmN0aW9uKCkgewogICAgICB2YXIgYiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gaSA/IGFyZ3VtZW50c1swXSA6IHt9LCBaID0gYXJndW1lbnRzWzFdOwogICAgICBaID0gcC5pc0Z1bmN0aW9uKFopID8gWiA6IEo7CiAgICAgIHZhciB5ID0gQS5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSwgRiA9IHZvaWQgMCwgUiA9IGIuaW1hZ2VzLCBNID0gISFSLmxlbmd0aCwgSSA9IGIuY2FtZXJhU3RyZWFtLCBWID0gYi5jcm9wLCB6ID0gYi5maWx0ZXIsIGogPSBiLmZvbnRDb2xvciwgYTAgPSBiLmZvbnRGYW1pbHksIGIwID0gYi5mb250V2VpZ2h0LCBlMCA9IGIua2VlcENhbWVyYU9uLCBxID0gKGIubnVtV29ya2VycywgYi5wcm9ncmVzc0NhbGxiYWNrKSwgbzAgPSBiLnNhdmVSZW5kZXJpbmdDb250ZXh0cywgYzAgPSBiLnNhdmVkUmVuZGVyaW5nQ29udGV4dHMsIFMwID0gYi50ZXh0LCB2MCA9IGIudGV4dEFsaWduLCBJMCA9IGIudGV4dEJhc2VsaW5lLCBDMCA9IGIudmlkZW9FbGVtZW50LCBPMCA9IGIudmlkZW9IZWlnaHQsIFcwID0gYi52aWRlb1dpZHRoLCBOMCA9IGIud2ViY2FtVmlkZW9FbGVtZW50LCBRMCA9IGIud2F0ZXJNYXJrLCBVMCA9IGIud2F0ZXJNYXJrSGVpZ2h0LCBQMCA9IGIud2F0ZXJNYXJrV2lkdGgsIEowID0gYi53YXRlck1hcmtYQ29vcmRpbmF0ZSwgQXIgPSBiLndhdGVyTWFya1lDb29yZGluYXRlLCBMMCA9IE51bWJlcihiLmdpZldpZHRoKSwgY3IgPSBOdW1iZXIoYi5naWZIZWlnaHQpLCB5ciA9IE51bWJlcihiLmludGVydmFsKSwgV3IgPSAoTnVtYmVyKGIuc2FtcGxlSW50ZXJ2YWwpLCBNID8gMCA6IDFlMyAqIHlyKSwgTXIgPSBbXSwgc3IgPSBjMC5sZW5ndGggPyBjMC5sZW5ndGggOiBiLm51bUZyYW1lcywgZ2EgPSBzciwgQTIgPSBuZXcgRyhiKSwgTjIgPSBwLmdldEZvbnRTaXplKGIpLCBNMiA9IGIudGV4dFhDb29yZGluYXRlID8gYi50ZXh0WENvb3JkaW5hdGUgOiB2MCA9PT0gImxlZnQiID8gMSA6IHYwID09PSAicmlnaHQiID8gTDAgOiBMMCAvIDIsIFQyID0gYi50ZXh0WUNvb3JkaW5hdGUgPyBiLnRleHRZQ29vcmRpbmF0ZSA6IEkwID09PSAidG9wIiA/IDEgOiBJMCA9PT0gImNlbnRlciIgPyBjciAvIDIgOiBjciwgRGUgPSBiMCArICIgIiArIE4yICsgIiAiICsgYTAsIFRyID0gViA/IE1hdGguZmxvb3IoVi5zY2FsZWRXaWR0aCAvIDIpIDogMCwgSHIgPSBWID8gVzAgLSBWLnNjYWxlZFdpZHRoIDogMCwgaWEgPSBWID8gTWF0aC5mbG9vcihWLnNjYWxlZEhlaWdodCAvIDIpIDogMCwgbmEgPSBWID8gTzAgLSBWLnNjYWxlZEhlaWdodCA6IDAsIHQyID0gZnVuY3Rpb24gbWEoKSB7CiAgICAgICAgZnVuY3Rpb24gaDAoKSB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBIciA+IFcwICYmIChIciA9IFcwKSwgbmEgPiBPMCAmJiAobmEgPSBPMCksIDAgPiBUciAmJiAoVHIgPSAwKSwgMCA+IGlhICYmIChpYSA9IDApLCBGLmZpbHRlciA9IHosIEYuZHJhd0ltYWdlKEMwLCBUciwgaWEsIEhyLCBuYSwgMCwgMCwgTDAsIGNyKSwgZDAoKTsKICAgICAgICAgIH0gY2F0Y2ggKHMwKSB7CiAgICAgICAgICAgIGlmIChzMC5uYW1lICE9PSAiTlNfRVJST1JfTk9UX0FWQUlMQUJMRSIpCiAgICAgICAgICAgICAgdGhyb3cgczA7CiAgICAgICAgICAgIHAucmVxdWVzdFRpbWVvdXQoaDAsIDEwMCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIGQwKCkgewogICAgICAgICAgdmFyIHMwID0gdm9pZCAwOwogICAgICAgICAgbzAgJiYgTXIucHVzaChGLmdldEltYWdlRGF0YSgwLCAwLCBMMCwgY3IpKSwgUTAgJiYgRi5kcmF3SW1hZ2UoUTAsIEowLCBBciwgUDAsIFUwKSwgUzAgJiYgKEYuZm9udCA9IERlLCBGLmZpbGxTdHlsZSA9IGosIEYudGV4dEFsaWduID0gdjAsIEYudGV4dEJhc2VsaW5lID0gSTAsIEYuZmlsbFRleHQoUzAsIE0yLCBUMikpLCBzMCA9IEYuZ2V0SW1hZ2VEYXRhKDAsIDAsIEwwLCBjciksIEEyLmFkZEZyYW1lSW1hZ2VEYXRhKHMwKSwgZ2EgPSBWMCwgcSgoc3IgLSBnYSkgLyBzciksIFYwID4gMCAmJiBwLnJlcXVlc3RUaW1lb3V0KG1hLCBXciksIGdhIHx8IEEyLmdldEJhc2U2NEdJRihmdW5jdGlvbihrMCkgewogICAgICAgICAgICBaKHsgZXJyb3I6ICExLCBlcnJvckNvZGU6ICIiLCBlcnJvck1zZzogIiIsIGltYWdlOiBrMCwgY2FtZXJhU3RyZWFtOiBJLCB2aWRlb0VsZW1lbnQ6IEMwLCB3ZWJjYW1WaWRlb0VsZW1lbnQ6IE4wLCBzYXZlZFJlbmRlcmluZ0NvbnRleHRzOiBNciwga2VlcENhbWVyYU9uOiBlMCB9KTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICB2YXIgVjAgPSBnYSAtIDE7CiAgICAgICAgYzAubGVuZ3RoID8gKEYucHV0SW1hZ2VEYXRhKGMwW3NyIC0gZ2FdLCAwLCAwKSwgZDAoKSkgOiBoMCgpOwogICAgICB9OwogICAgICBzciA9IHNyICE9PSBpID8gc3IgOiAxMCwgeXIgPSB5ciAhPT0gaSA/IHlyIDogMC4xLCB5LndpZHRoID0gTDAsIHkuaGVpZ2h0ID0gY3IsIEYgPSB5LmdldENvbnRleHQoIjJkIiksIGZ1bmN0aW9uIG1hKCkgewogICAgICAgIHJldHVybiBjMC5sZW5ndGggfHwgQzAuY3VycmVudFRpbWUgIT09IDAgPyAodDIoKSwgdm9pZCAwKSA6IChwLnJlcXVlc3RUaW1lb3V0KG1hLCAxMDApLCB2b2lkIDApOwogICAgICB9KCk7CiAgICB9LCBnZXRDcm9wRGltZW5zaW9uczogZnVuY3Rpb24oKSB7CiAgICAgIHZhciBiID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSBpID8gYXJndW1lbnRzWzBdIDoge30sIFogPSBiLnZpZGVvV2lkdGgsIHkgPSBiLnZpZGVvSGVpZ2h0LCBGID0gYi5naWZXaWR0aCwgUiA9IGIuZ2lmSGVpZ2h0LCBNID0geyB3aWR0aDogMCwgaGVpZ2h0OiAwLCBzY2FsZWRXaWR0aDogMCwgc2NhbGVkSGVpZ2h0OiAwIH07CiAgICAgIHJldHVybiBaID4geSA/IChNLndpZHRoID0gTWF0aC5yb3VuZChaICogKFIgLyB5KSkgLSBGLCBNLnNjYWxlZFdpZHRoID0gTWF0aC5yb3VuZChNLndpZHRoICogKHkgLyBSKSkpIDogKE0uaGVpZ2h0ID0gTWF0aC5yb3VuZCh5ICogKEYgLyBaKSkgLSBSLCBNLnNjYWxlZEhlaWdodCA9IE1hdGgucm91bmQoTS5oZWlnaHQgKiAoWiAvIEYpKSksIE07CiAgICB9IH0sIFggPSB7IGxvYWRlZERhdGE6ICExLCBkZWZhdWx0VmlkZW9EaW1lbnNpb25zOiB7IHdpZHRoOiA2NDAsIGhlaWdodDogNDgwIH0sIGZpbmRWaWRlb1NpemU6IGZ1bmN0aW9uIGIoWikgewogICAgICBiLmF0dGVtcHRzID0gYi5hdHRlbXB0cyB8fCAwOwogICAgICB2YXIgeSA9IFouY2FtZXJhU3RyZWFtLCBGID0gWi5jb21wbGV0ZWRDYWxsYmFjaywgUiA9IFoudmlkZW9FbGVtZW50OwogICAgICBSICYmIChSLnZpZGVvV2lkdGggPiAwICYmIFIudmlkZW9IZWlnaHQgPiAwID8gKFIucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZGVkZGF0YSIsIFguZmluZFZpZGVvU2l6ZSksIEYoeyB2aWRlb0VsZW1lbnQ6IFIsIGNhbWVyYVN0cmVhbTogeSwgdmlkZW9XaWR0aDogUi52aWRlb1dpZHRoLCB2aWRlb0hlaWdodDogUi52aWRlb0hlaWdodCB9KSkgOiBiLmF0dGVtcHRzIDwgMTAgPyAoYi5hdHRlbXB0cyArPSAxLCBwLnJlcXVlc3RUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgIFguZmluZFZpZGVvU2l6ZShaKTsKICAgICAgfSwgNDAwKSkgOiBGKHsgdmlkZW9FbGVtZW50OiBSLCBjYW1lcmFTdHJlYW06IHksIHZpZGVvV2lkdGg6IFguZGVmYXVsdFZpZGVvRGltZW5zaW9ucy53aWR0aCwgdmlkZW9IZWlnaHQ6IFguZGVmYXVsdFZpZGVvRGltZW5zaW9ucy5oZWlnaHQgfSkpOwogICAgfSwgb25TdHJlYW1pbmdUaW1lb3V0OiBmdW5jdGlvbihiKSB7CiAgICAgIHAuaXNGdW5jdGlvbihiKSAmJiBiKHsgZXJyb3I6ICEwLCBlcnJvckNvZGU6ICJnZXRVc2VyTWVkaWEiLCBlcnJvck1zZzogIlRoZXJlIHdhcyBhbiBpc3N1ZSB3aXRoIHRoZSBnZXRVc2VyTWVkaWEgQVBJIC0gVGltZWQgb3V0IHdoaWxlIHRyeWluZyB0byBzdGFydCBzdHJlYW1pbmciLCBpbWFnZTogbnVsbCwgY2FtZXJhU3RyZWFtOiB7fSB9KTsKICAgIH0sIHN0cmVhbTogZnVuY3Rpb24oYikgewogICAgICB2YXIgWiA9IHAuaXNBcnJheShiLmV4aXN0aW5nVmlkZW8pID8gYi5leGlzdGluZ1ZpZGVvWzBdIDogYi5leGlzdGluZ1ZpZGVvLCB5ID0gYi5jYW1lcmFTdHJlYW0sIEYgPSBiLmNvbXBsZXRlZENhbGxiYWNrLCBSID0gYi5zdHJlYW1lZENhbGxiYWNrLCBNID0gYi52aWRlb0VsZW1lbnQ7CiAgICAgIGlmIChwLmlzRnVuY3Rpb24oUikgJiYgUigpLCBaKSB7CiAgICAgICAgaWYgKHAuaXNTdHJpbmcoWikpCiAgICAgICAgICBNLnNyYyA9IFosIE0uaW5uZXJIVE1MID0gJzxzb3VyY2Ugc3JjPSInICsgWiArICciIHR5cGU9InZpZGVvLycgKyBwLmdldEV4dGVuc2lvbihaKSArICciIC8+JzsKICAgICAgICBlbHNlIGlmIChaIGluc3RhbmNlb2YgQmxvYikgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgTS5zcmMgPSBwLlVSTC5jcmVhdGVPYmplY3RVUkwoWik7CiAgICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgIH0KICAgICAgICAgIE0uaW5uZXJIVE1MID0gJzxzb3VyY2Ugc3JjPSInICsgWiArICciIHR5cGU9IicgKyBaLnR5cGUgKyAnIiAvPic7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKE0ubW96U3JjT2JqZWN0KQogICAgICAgIE0ubW96U3JjT2JqZWN0ID0geTsKICAgICAgZWxzZSBpZiAocC5VUkwpCiAgICAgICAgdHJ5IHsKICAgICAgICAgIE0uc3JjT2JqZWN0ID0geSwgTS5zcmMgPSBwLlVSTC5jcmVhdGVPYmplY3RVUkwoeSk7CiAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICBNLnNyY09iamVjdCA9IHk7CiAgICAgICAgfQogICAgICBNLnBsYXkoKSwgcC5yZXF1ZXN0VGltZW91dChmdW5jdGlvbiBJKCkgewogICAgICAgIEkuY291bnQgPSBJLmNvdW50IHx8IDAsIFgubG9hZGVkRGF0YSA9PT0gITAgPyAoWC5maW5kVmlkZW9TaXplKHsgdmlkZW9FbGVtZW50OiBNLCBjYW1lcmFTdHJlYW06IHksIGNvbXBsZXRlZENhbGxiYWNrOiBGIH0pLCBYLmxvYWRlZERhdGEgPSAhMSkgOiAoSS5jb3VudCArPSAxLCBJLmNvdW50ID4gMTAgPyBYLmZpbmRWaWRlb1NpemUoeyB2aWRlb0VsZW1lbnQ6IE0sIGNhbWVyYVN0cmVhbTogeSwgY29tcGxldGVkQ2FsbGJhY2s6IEYgfSkgOiBJKCkpOwogICAgICB9LCAwKTsKICAgIH0sIHN0YXJ0U3RyZWFtaW5nOiBmdW5jdGlvbihiKSB7CiAgICAgIHZhciBaID0gcC5pc0Z1bmN0aW9uKGIuZXJyb3IpID8gYi5lcnJvciA6IHAubm9vcCwgeSA9IHAuaXNGdW5jdGlvbihiLnN0cmVhbWVkKSA/IGIuc3RyZWFtZWQgOiBwLm5vb3AsIEYgPSBwLmlzRnVuY3Rpb24oYi5jb21wbGV0ZWQpID8gYi5jb21wbGV0ZWQgOiBwLm5vb3AsIFIgPSBiLmNyb3NzT3JpZ2luLCBNID0gYi5leGlzdGluZ1ZpZGVvLCBJID0gYi5sYXN0Q2FtZXJhU3RyZWFtLCBWID0gYi5vcHRpb25zLCB6ID0gYi53ZWJjYW1WaWRlb0VsZW1lbnQsIGogPSBwLmlzRWxlbWVudChNKSA/IE0gOiB6IHx8IEEuY3JlYXRlRWxlbWVudCgidmlkZW8iKTsKICAgICAgUiAmJiAoai5jcm9zc09yaWdpbiA9IFYuY3Jvc3NPcmlnaW4pLCBqLmF1dG9wbGF5ID0gITAsIGoubG9vcCA9ICEwLCBqLm11dGVkID0gITAsIGouYWRkRXZlbnRMaXN0ZW5lcigibG9hZGVkZGF0YSIsIGZ1bmN0aW9uKCkgewogICAgICAgIFgubG9hZGVkRGF0YSA9ICEwLCBWLm9mZnNldCAmJiAoai5jdXJyZW50VGltZSA9IFYub2Zmc2V0KTsKICAgICAgfSksIE0gPyBYLnN0cmVhbSh7IHZpZGVvRWxlbWVudDogaiwgZXhpc3RpbmdWaWRlbzogTSwgY29tcGxldGVkQ2FsbGJhY2s6IEYgfSkgOiBJID8gWC5zdHJlYW0oeyB2aWRlb0VsZW1lbnQ6IGosIGNhbWVyYVN0cmVhbTogSSwgc3RyZWFtZWRDYWxsYmFjazogeSwgY29tcGxldGVkQ2FsbGJhY2s6IEYgfSkgOiBwLmdldFVzZXJNZWRpYSh7IHZpZGVvOiAhMCB9LCBmdW5jdGlvbihhMCkgewogICAgICAgIFguc3RyZWFtKHsgdmlkZW9FbGVtZW50OiBqLCBjYW1lcmFTdHJlYW06IGEwLCBzdHJlYW1lZENhbGxiYWNrOiB5LCBjb21wbGV0ZWRDYWxsYmFjazogRiB9KTsKICAgICAgfSwgWik7CiAgICB9LCBzdGFydFZpZGVvU3RyZWFtaW5nOiBmdW5jdGlvbihiKSB7CiAgICAgIHZhciBaID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSBpID8gYXJndW1lbnRzWzFdIDoge30sIHkgPSBaLnRpbWVvdXQgIT09IGkgPyBaLnRpbWVvdXQgOiAwLCBGID0gWi5jYWxsYmFjaywgUiA9IFoud2ViY2FtVmlkZW9FbGVtZW50LCBNID0gdm9pZCAwOwogICAgICB5ID4gMCAmJiAoTSA9IHAucmVxdWVzdFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgWC5vblN0cmVhbWluZ1RpbWVvdXQoRik7CiAgICAgIH0sIDFlNCkpLCBYLnN0YXJ0U3RyZWFtaW5nKHsgZXJyb3I6IGZ1bmN0aW9uKCkgewogICAgICAgIEYoeyBlcnJvcjogITAsIGVycm9yQ29kZTogImdldFVzZXJNZWRpYSIsIGVycm9yTXNnOiAiVGhlcmUgd2FzIGFuIGlzc3VlIHdpdGggdGhlIGdldFVzZXJNZWRpYSBBUEkgLSB0aGUgdXNlciBwcm9iYWJseSBkZW5pZWQgcGVybWlzc2lvbiIsIGltYWdlOiBudWxsLCBjYW1lcmFTdHJlYW06IHt9IH0pOwogICAgICB9LCBzdHJlYW1lZDogZnVuY3Rpb24oKSB7CiAgICAgICAgY2xlYXJUaW1lb3V0KE0pOwogICAgICB9LCBjb21wbGV0ZWQ6IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBJID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSBpID8gYXJndW1lbnRzWzBdIDoge30sIFYgPSBJLmNhbWVyYVN0cmVhbSwgeiA9IEkudmlkZW9FbGVtZW50LCBqID0gSS52aWRlb0hlaWdodCwgYTAgPSBJLnZpZGVvV2lkdGg7CiAgICAgICAgYih7IGNhbWVyYVN0cmVhbTogViwgdmlkZW9FbGVtZW50OiB6LCB2aWRlb0hlaWdodDogaiwgdmlkZW9XaWR0aDogYTAgfSk7CiAgICAgIH0sIGxhc3RDYW1lcmFTdHJlYW06IFoubGFzdENhbWVyYVN0cmVhbSwgd2ViY2FtVmlkZW9FbGVtZW50OiBSLCBjcm9zc09yaWdpbjogWi5jcm9zc09yaWdpbiwgb3B0aW9uczogWiB9KTsKICAgIH0sIHN0b3BWaWRlb1N0cmVhbWluZzogZnVuY3Rpb24oYikgewogICAgICBiID0gcC5pc09iamVjdChiKSA/IGIgOiB7fTsKICAgICAgdmFyIFogPSBiLCB5ID0gWi5rZWVwQ2FtZXJhT24sIEYgPSBaLnZpZGVvRWxlbWVudCwgUiA9IFoud2ViY2FtVmlkZW9FbGVtZW50LCBNID0gYi5jYW1lcmFTdHJlYW0gfHwge30sIEkgPSBNLmdldFRyYWNrcyA/IE0uZ2V0VHJhY2tzKCkgfHwgW10gOiBbXSwgViA9ICEhSS5sZW5ndGgsIHogPSBJWzBdOwogICAgICAheSAmJiBWICYmIHAuaXNGdW5jdGlvbih6LnN0b3ApICYmIHouc3RvcCgpLCBwLmlzRWxlbWVudChGKSAmJiAhUiAmJiAoRi5wYXVzZSgpLCBwLmlzRnVuY3Rpb24ocC5VUkwucmV2b2tlT2JqZWN0VVJMKSAmJiAhcC53ZWJXb3JrZXJFcnJvciAmJiBGLnNyYyAmJiBwLlVSTC5yZXZva2VPYmplY3RVUkwoRi5zcmMpLCBwLnJlbW92ZUVsZW1lbnQoRikpOwogICAgfSB9LCBsMCA9IHsgdXRpbHM6IFcsIGVycm9yOiBfLCBkZWZhdWx0T3B0aW9uczogWSwgY3JlYXRlR0lGOiBCLCB0YWtlU25hcFNob3Q6IG0sIHN0b3BWaWRlb1N0cmVhbWluZzogaywgaXNTdXBwb3J0ZWQ6IG4sIGlzV2ViQ2FtR0lGU3VwcG9ydGVkOiBmLCBpc0V4aXN0aW5nVmlkZW9HSUZTdXBwb3J0ZWQ6IG8sIGlzRXhpc3RpbmdJbWFnZXNHSUZTdXBwb3J0ZWQ6IHUsIFZFUlNJT046ICIwLjQuNSIgfTsKICAgIHIuZXhwb3J0cyA9IGwwOwogIH0pKHR5cGVvZiB3aW5kb3cgPCAidSIgPyB3aW5kb3cgOiB7fSwgdHlwZW9mIGRvY3VtZW50IDwgInUiID8gZG9jdW1lbnQgOiB7IGNyZWF0ZUVsZW1lbnQ6IGZ1bmN0aW9uKCkgewogIH0gfSwgdHlwZW9mIHdpbmRvdyA8ICJ1IiA/IHdpbmRvdy5uYXZpZ2F0b3IgOiB7fSksIGZ1bmN0aW9uKGEsIEEpIHsKICAgIHIuZXhwb3J0cyA9IEEoKSwgci5leHBvcnRzLmRlZmF1bHQgPSBBKCk7CiAgfShGZiwgZnVuY3Rpb24oKSB7CiAgICB2YXIgYSA9IGAKdmFyIE1vZHVsZT12b2lkIDAhPT1Nb2R1bGU/TW9kdWxlOnt9OyhmdW5jdGlvbigpe3ZhciBkPXtwcmludDpmdW5jdGlvbihBKXtBPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykuam9pbigiICIpLGNvbnNvbGUubG9nKEEpfSxwcmludEVycjpmdW5jdGlvbihBKXtBPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykuam9pbigiICIpLGNvbnNvbGUuZXJyb3IoQSl9LGNhbnZhczp7fSxub0luaXRpYWxSdW46ITB9LEE9e307Zm9yKFNyIGluIGQpZC5oYXNPd25Qcm9wZXJ0eShTcikmJihBW1NyXT1kW1NyXSk7dmFyIGksZixlPSExLGw9ITEsbz0hMSxyPSExO2lmKGQuRU5WSVJPTk1FTlQpaWYoIldFQiI9PT1kLkVOVklST05NRU5UKWU9ITA7ZWxzZSBpZigiV09SS0VSIj09PWQuRU5WSVJPTk1FTlQpbD0hMDtlbHNlIGlmKCJOT0RFIj09PWQuRU5WSVJPTk1FTlQpbz0hMDtlbHNle2lmKCJTSEVMTCIhPT1kLkVOVklST05NRU5UKXRocm93IG5ldyBFcnJvcigiVGhlIHByb3ZpZGVkIE1vZHVsZVsnRU5WSVJPTk1FTlQnXSB2YWx1ZSBpcyBub3QgdmFsaWQuIEl0IG11c3QgYmUgb25lIG9mOiBXRUJ8V09SS0VSfE5PREV8U0hFTEwuIik7cj0hMH1lbHNlIGU9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3csbD0iZnVuY3Rpb24iPT10eXBlb2YgaW1wb3J0U2NyaXB0cyxvPSJvYmplY3QiPT10eXBlb2YgcHJvY2VzcyYmImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVpcmUmJiFlJiYhbCxyPSFlJiYhbyYmIWw7aWYobylkLnByaW50fHwoZC5wcmludD1jb25zb2xlLmxvZyksZC5wcmludEVycnx8KGQucHJpbnRFcnI9Y29uc29sZS53YXJuKSxkLnJlYWQ9ZnVuY3Rpb24oQSxlKXt2YXIgcjtyZXR1cm4ocj12cihBKSl8fChpPWl8fHJlcXVpcmUoImZzIiksQT0oZj1mfHxyZXF1aXJlKCJwYXRoIikpLm5vcm1hbGl6ZShBKSxyPWkucmVhZEZpbGVTeW5jKEEpKSxlP3I6ci50b1N0cmluZygpfSxkLnJlYWRCaW5hcnk9ZnVuY3Rpb24oQSl7dmFyIGU9ZC5yZWFkKEEsITApO3JldHVybiBlLmJ1ZmZlcnx8KGU9bmV3IFVpbnQ4QXJyYXkoZSkpLGgoZS5idWZmZXIpLGV9LGQudGhpc1Byb2dyYW18fCgxPHByb2Nlc3MuYXJndi5sZW5ndGg/ZC50aGlzUHJvZ3JhbT1wcm9jZXNzLmFyZ3ZbMV0ucmVwbGFjZSgvXFxcXC9nLCIvIik6ZC50aGlzUHJvZ3JhbT0idW5rbm93bi1wcm9ncmFtIiksZC5hcmd1bWVudHM9cHJvY2Vzcy5hcmd2LnNsaWNlKDIpLCJ1bmRlZmluZWQiIT10eXBlb2YgbW9kdWxlJiYobW9kdWxlLmV4cG9ydHM9ZCkscHJvY2Vzcy5vbigidW5jYXVnaHRFeGNlcHRpb24iLGZ1bmN0aW9uKEEpe2lmKCEoQSBpbnN0YW5jZW9mIFlyKSl0aHJvdyBBfSkscHJvY2Vzcy5vbigidW5oYW5kbGVkUmVqZWN0aW9uIixmdW5jdGlvbihBLGUpe3Byb2Nlc3MuZXhpdCgxKX0pLGQuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiJbRW1zY3JpcHRlbiBNb2R1bGUgb2JqZWN0XSJ9O2Vsc2UgaWYocilkLnByaW50fHwoZC5wcmludD1wcmludCksInVuZGVmaW5lZCIhPXR5cGVvZiBwcmludEVyciYmKGQucHJpbnRFcnI9cHJpbnRFcnIpLCJ1bmRlZmluZWQiIT10eXBlb2YgcmVhZD9kLnJlYWQ9ZnVuY3Rpb24oQSl7dmFyIGU9dnIoQSk7cmV0dXJuIGU/a3IoZSk6cmVhZChBKX06ZC5yZWFkPWZ1bmN0aW9uKCl7dGhyb3cibm8gcmVhZCgpIGF2YWlsYWJsZSJ9LGQucmVhZEJpbmFyeT1mdW5jdGlvbihBKXt2YXIgZTtyZXR1cm4oZT12cihBKSk/ZToiZnVuY3Rpb24iPT10eXBlb2YgcmVhZGJ1ZmZlcj9uZXcgVWludDhBcnJheShyZWFkYnVmZmVyKEEpKTooaCgib2JqZWN0Ij09dHlwZW9mKGU9cmVhZChBLCJiaW5hcnkiKSkpLGUpfSwidW5kZWZpbmVkIiE9dHlwZW9mIHNjcmlwdEFyZ3M/ZC5hcmd1bWVudHM9c2NyaXB0QXJnczp2b2lkIDAhPT1hcmd1bWVudHMmJihkLmFyZ3VtZW50cz1hcmd1bWVudHMpLCJmdW5jdGlvbiI9PXR5cGVvZiBxdWl0JiYoZC5xdWl0PWZ1bmN0aW9uKEEsZSl7cXVpdChBKX0pO2Vsc2V7aWYoIWUmJiFsKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBydW50aW1lIGVudmlyb25tZW50LiBXaGVyZSBhcmUgd2U/Iik7aWYoZC5yZWFkPWZ1bmN0aW9uKGUpe3RyeXt2YXIgQT1uZXcgWE1MSHR0cFJlcXVlc3Q7cmV0dXJuIEEub3BlbigiR0VUIixlLCExKSxBLnNlbmQobnVsbCksQS5yZXNwb25zZVRleHR9Y2F0Y2goQSl7dmFyIHI9dnIoZSk7aWYocilyZXR1cm4ga3Iocik7dGhyb3cgQX19LGwmJihkLnJlYWRCaW5hcnk9ZnVuY3Rpb24oZSl7dHJ5e3ZhciBBPW5ldyBYTUxIdHRwUmVxdWVzdDtyZXR1cm4gQS5vcGVuKCJHRVQiLGUsITEpLEEucmVzcG9uc2VUeXBlPSJhcnJheWJ1ZmZlciIsQS5zZW5kKG51bGwpLG5ldyBVaW50OEFycmF5KEEucmVzcG9uc2UpfWNhdGNoKEEpe3ZhciByPXZyKGUpO2lmKHIpcmV0dXJuIHI7dGhyb3cgQX19KSxkLnJlYWRBc3luYz1mdW5jdGlvbihlLHIsaSl7dmFyIGY9bmV3IFhNTEh0dHBSZXF1ZXN0O2Yub3BlbigiR0VUIixlLCEwKSxmLnJlc3BvbnNlVHlwZT0iYXJyYXlidWZmZXIiLGYub25sb2FkPWZ1bmN0aW9uKCl7aWYoMjAwPT1mLnN0YXR1c3x8MD09Zi5zdGF0dXMmJmYucmVzcG9uc2UpcihmLnJlc3BvbnNlKTtlbHNle3ZhciBBPXZyKGUpO0E/cihBLmJ1ZmZlcik6aSgpfX0sZi5vbmVycm9yPWksZi5zZW5kKG51bGwpfSx2b2lkIDAhPT1hcmd1bWVudHMmJihkLmFyZ3VtZW50cz1hcmd1bWVudHMpLCJ1bmRlZmluZWQiIT10eXBlb2YgY29uc29sZSlkLnByaW50fHwoZC5wcmludD1mdW5jdGlvbihBKXtjb25zb2xlLmxvZyhBKX0pLGQucHJpbnRFcnJ8fChkLnByaW50RXJyPWZ1bmN0aW9uKEEpe2NvbnNvbGUud2FybihBKX0pO2Vsc2V7ZC5wcmludHx8KGQucHJpbnQ9ZnVuY3Rpb24oQSl7fSl9dm9pZCAwPT09ZC5zZXRXaW5kb3dUaXRsZSYmKGQuc2V0V2luZG93VGl0bGU9ZnVuY3Rpb24oQSl7ZG9jdW1lbnQudGl0bGU9QX0pfWZvcihTciBpbiBkLnByaW50fHwoZC5wcmludD1mdW5jdGlvbigpe30pLGQucHJpbnRFcnJ8fChkLnByaW50RXJyPWQucHJpbnQpLGQuYXJndW1lbnRzfHwoZC5hcmd1bWVudHM9W10pLGQudGhpc1Byb2dyYW18fChkLnRoaXNQcm9ncmFtPSIuL3RoaXMucHJvZ3JhbSIpLGQucXVpdHx8KGQucXVpdD1mdW5jdGlvbihBLGUpe3Rocm93IGV9KSxkLnByaW50PWQucHJpbnQsZC5wcmludEVycj1kLnByaW50RXJyLGQucHJlUnVuPVtdLGQucG9zdFJ1bj1bXSxBKUEuaGFzT3duUHJvcGVydHkoU3IpJiYoZFtTcl09QVtTcl0pO0E9dm9pZCAwO3ZhciBrPXtzZXRUZW1wUmV0MDpmdW5jdGlvbihBKXtyZXR1cm4gdGVtcFJldDA9QX0sZ2V0VGVtcFJldDA6ZnVuY3Rpb24oKXtyZXR1cm4gdGVtcFJldDB9LHN0YWNrU2F2ZTpmdW5jdGlvbigpe3JldHVybiBffSxzdGFja1Jlc3RvcmU6ZnVuY3Rpb24oQSl7Xz1BfSxnZXROYXRpdmVUeXBlU2l6ZTpmdW5jdGlvbihBKXtzd2l0Y2goQSl7Y2FzZSJpMSI6Y2FzZSJpOCI6cmV0dXJuIDE7Y2FzZSJpMTYiOnJldHVybiAyO2Nhc2UiaTMyIjpyZXR1cm4gNDtjYXNlImk2NCI6cmV0dXJuIDg7Y2FzZSJmbG9hdCI6cmV0dXJuIDQ7Y2FzZSJkb3VibGUiOnJldHVybiA4O2RlZmF1bHQ6aWYoIioiPT09QVtBLmxlbmd0aC0xXSlyZXR1cm4gay5RVUFOVFVNX1NJWkU7aWYoImkiIT09QVswXSlyZXR1cm4gMDt2YXIgZT1wYXJzZUludChBLnN1YnN0cigxKSk7cmV0dXJuIGgoZSU4PT0wKSxlLzh9fSxnZXROYXRpdmVGaWVsZFNpemU6ZnVuY3Rpb24oQSl7cmV0dXJuIE1hdGgubWF4KGsuZ2V0TmF0aXZlVHlwZVNpemUoQSksay5RVUFOVFVNX1NJWkUpfSxTVEFDS19BTElHTjoxNixwcmVwVmFyYXJnOmZ1bmN0aW9uKEEsZSl7cmV0dXJuImRvdWJsZSI9PT1lfHwiaTY0Ij09PWU/NyZBJiYoaCg0PT0oNyZBKSksQSs9NCk6aCgwPT0oMyZBKSksQX0sZ2V0QWxpZ25TaXplOmZ1bmN0aW9uKEEsZSxyKXtyZXR1cm4gcnx8Imk2NCIhPUEmJiJkb3VibGUiIT1BP0E/TWF0aC5taW4oZXx8KEE/ay5nZXROYXRpdmVGaWVsZFNpemUoQSk6MCksay5RVUFOVFVNX1NJWkUpOk1hdGgubWluKGUsOCk6OH0sZHluQ2FsbDpmdW5jdGlvbihBLGUscil7cmV0dXJuIHImJnIubGVuZ3RoP2RbImR5bkNhbGxfIitBXS5hcHBseShudWxsLFtlXS5jb25jYXQocikpOmRbImR5bkNhbGxfIitBXS5jYWxsKG51bGwsZSl9LGZ1bmN0aW9uUG9pbnRlcnM6W10sYWRkRnVuY3Rpb246ZnVuY3Rpb24oQSl7Zm9yKHZhciBlPTA7ZTxrLmZ1bmN0aW9uUG9pbnRlcnMubGVuZ3RoO2UrKylpZighay5mdW5jdGlvblBvaW50ZXJzW2VdKXJldHVybiBrLmZ1bmN0aW9uUG9pbnRlcnNbZV09QSwyKigxK2UpO3Rocm93IkZpbmlzaGVkIHVwIGFsbCByZXNlcnZlZCBmdW5jdGlvbiBwb2ludGVycy4gVXNlIGEgaGlnaGVyIHZhbHVlIGZvciBSRVNFUlZFRF9GVU5DVElPTl9QT0lOVEVSUy4ifSxyZW1vdmVGdW5jdGlvbjpmdW5jdGlvbihBKXtrLmZ1bmN0aW9uUG9pbnRlcnNbKEEtMikvMl09bnVsbH0sd2Fybk9uY2U6ZnVuY3Rpb24oQSl7ay53YXJuT25jZS5zaG93bnx8KGsud2Fybk9uY2Uuc2hvd249e30pLGsud2Fybk9uY2Uuc2hvd25bQV18fChrLndhcm5PbmNlLnNob3duW0FdPTEsZC5wcmludEVycihBKSl9LGZ1bmNXcmFwcGVyczp7fSxnZXRGdW5jV3JhcHBlcjpmdW5jdGlvbihlLHIpe2lmKGUpe2gociksay5mdW5jV3JhcHBlcnNbcl18fChrLmZ1bmNXcmFwcGVyc1tyXT17fSk7dmFyIEE9ay5mdW5jV3JhcHBlcnNbcl07cmV0dXJuIEFbZV18fCgxPT09ci5sZW5ndGg/QVtlXT1mdW5jdGlvbigpe3JldHVybiBrLmR5bkNhbGwocixlKX06Mj09PXIubGVuZ3RoP0FbZV09ZnVuY3Rpb24oQSl7cmV0dXJuIGsuZHluQ2FsbChyLGUsW0FdKX06QVtlXT1mdW5jdGlvbigpe3JldHVybiBrLmR5bkNhbGwocixlLEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpfSksQVtlXX19LGdldENvbXBpbGVyU2V0dGluZzpmdW5jdGlvbihBKXt0aHJvdyJZb3UgbXVzdCBidWlsZCB3aXRoIC1zIFJFVEFJTl9DT01QSUxFUl9TRVRUSU5HUz0xIGZvciBSdW50aW1lLmdldENvbXBpbGVyU2V0dGluZyBvciBlbXNjcmlwdGVuX2dldF9jb21waWxlcl9zZXR0aW5nIHRvIHdvcmsifSxzdGFja0FsbG9jOmZ1bmN0aW9uKEEpe3ZhciBlPV87cmV0dXJuIF89KF89XytBfDApKzE1Ji0xNixlfSxzdGF0aWNBbGxvYzpmdW5jdGlvbihBKXt2YXIgZT1SO3JldHVybiBSPShSPVIrQXwwKSsxNSYtMTYsZX0sZHluYW1pY0FsbG9jOmZ1bmN0aW9uKEEpe3ZhciBlPUlbRD4+Ml0scj0tMTYmKGUrQSsxNXwwKTtpZigoSVtEPj4yXT1yLEg8PXIpJiYheigpKXJldHVybiBJW0Q+PjJdPWUsMDtyZXR1cm4gZX0sYWxpZ25NZW1vcnk6ZnVuY3Rpb24oQSxlKXtyZXR1cm4gQT1NYXRoLmNlaWwoQS8oZXx8MTYpKSooZXx8MTYpfSxtYWtlQmlnSW50OmZ1bmN0aW9uKEEsZSxyKXtyZXR1cm4gcj8rKEE+Pj4wKSs0Mjk0OTY3Mjk2KihlPj4+MCk6KyhBPj4+MCkrNDI5NDk2NzI5NiooMHxlKX0sR0xPQkFMX0JBU0U6OCxRVUFOVFVNX1NJWkU6NCxfX2R1bW15X186MH07ZC5SdW50aW1lPWs7dmFyIG49MDtmdW5jdGlvbiBoKEEsZSl7QXx8TXIoIkFzc2VydGlvbiBmYWlsZWQ6ICIrZSl9ZnVuY3Rpb24gdyhBLGUscil7c3dpdGNoKCIqIj09PShyPXJ8fCJpOCIpLmNoYXJBdChyLmxlbmd0aC0xKSYmKHI9ImkzMiIpLHIpe2Nhc2UiaTEiOmNhc2UiaTgiOkJbQT4+MF09ZTticmVhaztjYXNlImkxNiI6WFtBPj4xXT1lO2JyZWFrO2Nhc2UiaTMyIjpJW0E+PjJdPWU7YnJlYWs7Y2FzZSJpNjQiOnRlbXBJNjQ9W2U+Pj4wLCh0ZW1wRG91YmxlPWUsMTw9K2lBKHRlbXBEb3VibGUpPzA8dGVtcERvdWJsZT8oMHx0QSgrbkEodGVtcERvdWJsZS80Mjk0OTY3Mjk2KSw0Mjk0OTY3Mjk1KSk+Pj4wOn5+K2ZBKCh0ZW1wRG91YmxlLSh+fnRlbXBEb3VibGU+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxJW0E+PjJdPXRlbXBJNjRbMF0sSVtBKzQ+PjJdPXRlbXBJNjRbMV07YnJlYWs7Y2FzZSJmbG9hdCI6R1tBPj4yXT1lO2JyZWFrO2Nhc2UiZG91YmxlIjpWW0E+PjNdPWU7YnJlYWs7ZGVmYXVsdDpNcigiaW52YWxpZCB0eXBlIGZvciBzZXRWYWx1ZTogIityKX19dmFyIHQ9MCx2PTIsbT00O2Z1bmN0aW9uIGEoQSxlLHIsaSl7dmFyIGYsbjtuPSJudW1iZXIiPT10eXBlb2YgQT8oZj0hMCxBKTooZj0hMSxBLmxlbmd0aCk7dmFyIHQsbz0ic3RyaW5nIj09dHlwZW9mIGU/ZTpudWxsO2lmKHQ9cj09bT9pOlsiZnVuY3Rpb24iPT10eXBlb2YgR3I/R3I6ay5zdGF0aWNBbGxvYyxrLnN0YWNrQWxsb2Msay5zdGF0aWNBbGxvYyxrLmR5bmFtaWNBbGxvY11bdm9pZCAwPT09cj92OnJdKE1hdGgubWF4KG4sbz8xOmUubGVuZ3RoKSksZil7dmFyIGE7Zm9yKGgoMD09KDMmKGk9dCkpKSxhPXQrKC00Jm4pO2k8YTtpKz00KUlbaT4+Ml09MDtmb3IoYT10K247aTxhOylCW2krKz4+MF09MDtyZXR1cm4gdH1pZigiaTgiPT09bylyZXR1cm4gQS5zdWJhcnJheXx8QS5zbGljZT9FLnNldChBLHQpOkUuc2V0KG5ldyBVaW50OEFycmF5KEEpLHQpLHQ7Zm9yKHZhciBjLGwsdSxiPTA7YjxuOyl7dmFyIHM9QVtiXTsiZnVuY3Rpb24iPT10eXBlb2YgcyYmKHM9ay5nZXRGdW5jdGlvbkluZGV4KHMpKSwwIT09KGM9b3x8ZVtiXSk/KCJpNjQiPT1jJiYoYz0iaTMyIiksdyh0K2IscyxjKSx1IT09YyYmKGw9ay5nZXROYXRpdmVUeXBlU2l6ZShjKSx1PWMpLGIrPWwpOmIrK31yZXR1cm4gdH1mdW5jdGlvbiBnKEEsZSl7aWYoMD09PWV8fCFBKXJldHVybiIiO2Zvcih2YXIgcixpPTAsZj0wO2l8PXI9RVtBK2Y+PjBdLCgwIT1yfHxlKSYmKGYrKywhZXx8ZiE9ZSk7KTtlPWV8fGY7dmFyIG49IiI7aWYoaTwxMjgpe2Zvcih2YXIgdDswPGU7KXQ9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsRS5zdWJhcnJheShBLEErTWF0aC5taW4oZSwxMDI0KSkpLG49bj9uK3Q6dCxBKz0xMDI0LGUtPTEwMjQ7cmV0dXJuIG59cmV0dXJuIGMoRSxBKX1kLkFMTE9DX05PUk1BTD10LGQuQUxMT0NfU1RBQ0s9MSxkLkFMTE9DX1NUQVRJQz12LGQuQUxMT0NfRFlOQU1JQz0zLGQuQUxMT0NfTk9ORT1tLGQuZ2V0TWVtb3J5PWZ1bmN0aW9uKEEpe3JldHVybiBOP0FBP0dyKEEpOmsuZHluYW1pY0FsbG9jKEEpOmsuc3RhdGljQWxsb2MoQSl9O3ZhciB1PSJ1bmRlZmluZWQiIT10eXBlb2YgVGV4dERlY29kZXI/bmV3IFRleHREZWNvZGVyKCJ1dGY4Iik6dm9pZCAwO2Z1bmN0aW9uIGMoQSxlKXtmb3IodmFyIHI9ZTtBW3JdOykrK3I7aWYoMTY8ci1lJiZBLnN1YmFycmF5JiZ1KXJldHVybiB1LmRlY29kZShBLnN1YmFycmF5KGUscikpO2Zvcih2YXIgaSxmLG4sdCxvLGE9IiI7Oyl7aWYoIShpPUFbZSsrXSkpcmV0dXJuIGE7aWYoMTI4JmkpaWYoZj02MyZBW2UrK10sMTkyIT0oMjI0JmkpKWlmKG49NjMmQVtlKytdLChpPTIyND09KDI0MCZpKT8oMTUmaSk8PDEyfGY8PDZ8bjoodD02MyZBW2UrK10sMjQwPT0oMjQ4JmkpPyg3JmkpPDwxOHxmPDwxMnxuPDw2fHQ6KG89NjMmQVtlKytdLDI0OD09KDI1MiZpKT8oMyZpKTw8MjR8Zjw8MTh8bjw8MTJ8dDw8NnxvOigxJmkpPDwzMHxmPDwyNHxuPDwxOHx0PDwxMnxvPDw2fDYzJkFbZSsrXSkpKTw2NTUzNilhKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGkpO2Vsc2V7dmFyIGM9aS02NTUzNjthKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2fGM+PjEwLDU2MzIwfDEwMjMmYyl9ZWxzZSBhKz1TdHJpbmcuZnJvbUNoYXJDb2RlKCgzMSZpKTw8NnxmKTtlbHNlIGErPVN0cmluZy5mcm9tQ2hhckNvZGUoaSl9fWZ1bmN0aW9uIGIoQSxlLHIsaSl7aWYoISgwPGkpKXJldHVybiAwO2Zvcih2YXIgZj1yLG49citpLTEsdD0wO3Q8QS5sZW5ndGg7Kyt0KXt2YXIgbz1BLmNoYXJDb2RlQXQodCk7aWYoNTUyOTY8PW8mJm88PTU3MzQzJiYobz02NTUzNisoKDEwMjMmbyk8PDEwKXwxMDIzJkEuY2hhckNvZGVBdCgrK3QpKSxvPD0xMjcpe2lmKG48PXIpYnJlYWs7ZVtyKytdPW99ZWxzZSBpZihvPD0yMDQ3KXtpZihuPD1yKzEpYnJlYWs7ZVtyKytdPTE5MnxvPj42LGVbcisrXT0xMjh8NjMmb31lbHNlIGlmKG88PTY1NTM1KXtpZihuPD1yKzIpYnJlYWs7ZVtyKytdPTIyNHxvPj4xMixlW3IrK109MTI4fG8+PjYmNjMsZVtyKytdPTEyOHw2MyZvfWVsc2UgaWYobzw9MjA5NzE1MSl7aWYobjw9ciszKWJyZWFrO2VbcisrXT0yNDB8bz4+MTgsZVtyKytdPTEyOHxvPj4xMiY2MyxlW3IrK109MTI4fG8+PjYmNjMsZVtyKytdPTEyOHw2MyZvfWVsc2UgaWYobzw9NjcxMDg4NjMpe2lmKG48PXIrNClicmVhaztlW3IrK109MjQ4fG8+PjI0LGVbcisrXT0xMjh8bz4+MTgmNjMsZVtyKytdPTEyOHxvPj4xMiY2MyxlW3IrK109MTI4fG8+PjYmNjMsZVtyKytdPTEyOHw2MyZvfWVsc2V7aWYobjw9cis1KWJyZWFrO2VbcisrXT0yNTJ8bz4+MzAsZVtyKytdPTEyOHxvPj4yNCY2MyxlW3IrK109MTI4fG8+PjE4JjYzLGVbcisrXT0xMjh8bz4+MTImNjMsZVtyKytdPTEyOHxvPj42JjYzLGVbcisrXT0xMjh8NjMmb319cmV0dXJuIGVbcl09MCxyLWZ9ZnVuY3Rpb24gcyhBLGUscil7cmV0dXJuIGIoQSxFLGUscil9ZnVuY3Rpb24gWihBKXtmb3IodmFyIGU9MCxyPTA7cjxBLmxlbmd0aDsrK3Ipe3ZhciBpPUEuY2hhckNvZGVBdChyKTs1NTI5Njw9aSYmaTw9NTczNDMmJihpPTY1NTM2KygoMTAyMyZpKTw8MTApfDEwMjMmQS5jaGFyQ29kZUF0KCsrcikpLGk8PTEyNz8rK2U6ZSs9aTw9MjA0Nz8yOmk8PTY1NTM1PzM6aTw9MjA5NzE1MT80Omk8PTY3MTA4ODYzPzU6Nn1yZXR1cm4gZX0idW5kZWZpbmVkIiE9dHlwZW9mIFRleHREZWNvZGVyJiZuZXcgVGV4dERlY29kZXIoInV0Zi0xNmxlIik7ZnVuY3Rpb24gcCgpe3ZhciBBPWZ1bmN0aW9uKCl7dmFyIGU9bmV3IEVycm9yO2lmKCFlLnN0YWNrKXt0cnl7dGhyb3cgbmV3IEVycm9yKDApfWNhdGNoKEEpe2U9QX1pZighZS5zdGFjaylyZXR1cm4iKG5vIHN0YWNrIHRyYWNlIGF2YWlsYWJsZSkifXJldHVybiBlLnN0YWNrLnRvU3RyaW5nKCl9KCk7cmV0dXJuIGQuZXh0cmFTdGFja1RyYWNlJiYoQSs9IlxcbiIrZC5leHRyYVN0YWNrVHJhY2UoKSksQS5yZXBsYWNlKC9fX1pbXFx3XFxkX10rL2csZnVuY3Rpb24oQSl7dmFyIGU9QTtyZXR1cm4gQT09PWU/QTpBKyIgWyIrZSsiXSJ9KX12YXIgeSxCLEUsWCxXLEksQyxHLFYsRixSLE4sXyxZLFEsRCxKLE09NjU1MzYsVD0xNjc3NzIxNixVPTE2Nzc3MjE2O2Z1bmN0aW9uIFMoQSxlKXtyZXR1cm4gMDxBJWUmJihBKz1lLUElZSksQX1mdW5jdGlvbiBPKCl7ZC5IRUFQOD1CPW5ldyBJbnQ4QXJyYXkoeSksZC5IRUFQMTY9WD1uZXcgSW50MTZBcnJheSh5KSxkLkhFQVAzMj1JPW5ldyBJbnQzMkFycmF5KHkpLGQuSEVBUFU4PUU9bmV3IFVpbnQ4QXJyYXkoeSksZC5IRUFQVTE2PVc9bmV3IFVpbnQxNkFycmF5KHkpLGQuSEVBUFUzMj1DPW5ldyBVaW50MzJBcnJheSh5KSxkLkhFQVBGMzI9Rz1uZXcgRmxvYXQzMkFycmF5KHkpLGQuSEVBUEY2ND1WPW5ldyBGbG9hdDY0QXJyYXkoeSl9ZnVuY3Rpb24geigpe3ZhciBBPWQudXNpbmdXYXNtP006VCxlPTIxNDc0ODM2NDgtQTtpZihJW0Q+PjJdPmUpcmV0dXJuITE7dmFyIHI9SDtmb3IoSD1NYXRoLm1heChILFUpO0g8SVtEPj4yXTspSD1IPD01MzY4NzA5MTI/UygyKkgsQSk6TWF0aC5taW4oUygoMypIKzIxNDc0ODM2NDgpLzQsQSksZSk7dmFyIGksZj1kLnJlYWxsb2NCdWZmZXIoSCk7cmV0dXJuIGYmJmYuYnl0ZUxlbmd0aD09SD8oaT1mLGQuYnVmZmVyPXk9aSxPKCksITApOihIPXIsITEpfVI9Xz1EPTAsTj0hMSxkLnJlYWxsb2NCdWZmZXJ8fChkLnJlYWxsb2NCdWZmZXI9ZnVuY3Rpb24oQSl7dmFyIGU7dHJ5e2lmKEFycmF5QnVmZmVyLnRyYW5zZmVyKWU9QXJyYXlCdWZmZXIudHJhbnNmZXIoeSxBKTtlbHNle3ZhciByPUI7ZT1uZXcgQXJyYXlCdWZmZXIoQSksbmV3IEludDhBcnJheShlKS5zZXQocil9fWNhdGNoKEEpe3JldHVybiExfXJldHVybiEhSXIoZSkmJmV9KTt0cnl7KEo9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGwuYmluZChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEFycmF5QnVmZmVyLnByb3RvdHlwZSwiYnl0ZUxlbmd0aCIpLmdldCkpKG5ldyBBcnJheUJ1ZmZlcig0KSl9Y2F0Y2goT3Ipe0o9ZnVuY3Rpb24oQSl7cmV0dXJuIEEuYnl0ZUxlbmd0aH19dmFyIGo9ZC5UT1RBTF9TVEFDS3x8NTI0Mjg4MCxIPWQuVE9UQUxfTUVNT1JZfHwxNjc3NzIxNjtpZihIPGomJmQucHJpbnRFcnIoIlRPVEFMX01FTU9SWSBzaG91bGQgYmUgbGFyZ2VyIHRoYW4gVE9UQUxfU1RBQ0ssIHdhcyAiK0grIiEgKFRPVEFMX1NUQUNLPSIraisiKSIpLHk9ZC5idWZmZXI/ZC5idWZmZXI6bmV3IEFycmF5QnVmZmVyKEgpLE8oKSxJWzBdPTE2Njg1MDkwMjksWFsxXT0yNTQ1OSwxMTUhPT1FWzJdfHw5OSE9PUVbM10pdGhyb3ciUnVudGltZSBlcnJvcjogZXhwZWN0ZWQgdGhlIHN5c3RlbSB0byBiZSBsaXR0bGUtZW5kaWFuISI7ZnVuY3Rpb24geChBKXtmb3IoOzA8QS5sZW5ndGg7KXt2YXIgZT1BLnNoaWZ0KCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpe3ZhciByPWUuZnVuYzsibnVtYmVyIj09dHlwZW9mIHI/dm9pZCAwPT09ZS5hcmc/ZC5keW5DYWxsX3Yocik6ZC5keW5DYWxsX3ZpKHIsZS5hcmcpOnIodm9pZCAwPT09ZS5hcmc/bnVsbDplLmFyZyl9ZWxzZSBlKCl9fWQuSEVBUD12b2lkIDAsZC5idWZmZXI9eSxkLkhFQVA4PUIsZC5IRUFQMTY9WCxkLkhFQVAzMj1JLGQuSEVBUFU4PUUsZC5IRUFQVTE2PVcsZC5IRUFQVTMyPUMsZC5IRUFQRjMyPUcsZC5IRUFQRjY0PVY7dmFyIFA9W10sTD1bXSxLPVtdLHE9W10sJD1bXSxBQT0hMTtmdW5jdGlvbiBlQShBLGUpe0Iuc2V0KEEsZSl9ZnVuY3Rpb24gckEoQSxlLHIpe2Zvcih2YXIgaT0wO2k8QS5sZW5ndGg7KytpKUJbZSsrPj4wXT1BLmNoYXJDb2RlQXQoaSk7cnx8KEJbZT4+MF09MCl9TWF0aC5pbXVsJiYtNT09PU1hdGguaW11bCg0Mjk0OTY3Mjk1LDUpfHwoTWF0aC5pbXVsPWZ1bmN0aW9uKEEsZSl7dmFyIHI9NjU1MzUmQSxpPTY1NTM1JmU7cmV0dXJuIHIqaSsoKEE+Pj4xNikqaStyKihlPj4+MTYpPDwxNil8MH0pLE1hdGguaW11bD1NYXRoLmltdWwsTWF0aC5jbHozMnx8KE1hdGguY2x6MzI9ZnVuY3Rpb24oQSl7QT4+Pj0wO2Zvcih2YXIgZT0wO2U8MzI7ZSsrKWlmKEEmMTw8MzEtZSlyZXR1cm4gZTtyZXR1cm4gMzJ9KSxNYXRoLmNsejMyPU1hdGguY2x6MzIsTWF0aC50cnVuY3x8KE1hdGgudHJ1bmM9ZnVuY3Rpb24oQSl7cmV0dXJuIEE8MD9NYXRoLmNlaWwoQSk6TWF0aC5mbG9vcihBKX0pLE1hdGgudHJ1bmM9TWF0aC50cnVuYzt2YXIgaUE9TWF0aC5hYnMsZkE9KE1hdGguY29zLE1hdGguc2luLE1hdGgudGFuLE1hdGguYWNvcyxNYXRoLmFzaW4sTWF0aC5hdGFuLE1hdGguYXRhbjIsTWF0aC5leHAsTWF0aC5sb2csTWF0aC5zcXJ0LE1hdGguY2VpbCksbkE9TWF0aC5mbG9vcix0QT0oTWF0aC5wb3csTWF0aC5pbXVsLE1hdGguZnJvdW5kLE1hdGgucm91bmQsTWF0aC5taW4pLG9BPShNYXRoLmNsejMyLE1hdGgudHJ1bmMsMCksYUE9bnVsbCxjQT1udWxsO2Z1bmN0aW9uIGxBKEEpe29BKyssZC5tb25pdG9yUnVuRGVwZW5kZW5jaWVzJiZkLm1vbml0b3JSdW5EZXBlbmRlbmNpZXMob0EpfWZ1bmN0aW9uIHVBKEEpe2lmKG9BLS0sZC5tb25pdG9yUnVuRGVwZW5kZW5jaWVzJiZkLm1vbml0b3JSdW5EZXBlbmRlbmNpZXMob0EpLDA9PW9BJiYobnVsbCE9PWFBJiYoY2xlYXJJbnRlcnZhbChhQSksYUE9bnVsbCksY0EpKXt2YXIgZT1jQTtjQT1udWxsLGUoKX19ZC5hZGRSdW5EZXBlbmRlbmN5PWxBLGQucmVtb3ZlUnVuRGVwZW5kZW5jeT11QSxkLnByZWxvYWRlZEltYWdlcz17fSxkLnByZWxvYWRlZEF1ZGlvcz17fTt2YXIgYkE9bnVsbDtGPWsuR0xPQkFMX0JBU0UsUj1GKzc5NjY0LEwucHVzaCh7ZnVuYzpmdW5jdGlvbigpe1pyKCl9fSx7ZnVuYzpmdW5jdGlvbigpe3lyKCl9fSx7ZnVuYzpmdW5jdGlvbigpe0JyKCl9fSx7ZnVuYzpmdW5jdGlvbigpe0VyKCl9fSx7ZnVuYzpmdW5jdGlvbigpe3ByKCl9fSx7ZnVuYzpmdW5jdGlvbigpe1hyKCl9fSk7dmFyIHNBPVI7ZnVuY3Rpb24gZEEoKXtyZXR1cm4hIWRBLnVuY2F1Z2h0X2V4Y2VwdGlvbn1SKz0xNjt2YXIga0E9e2xhc3Q6MCxjYXVnaHQ6W10saW5mb3M6e30sZGVBZGp1c3Q6ZnVuY3Rpb24oQSl7aWYoIUF8fGtBLmluZm9zW0FdKXJldHVybiBBO2Zvcih2YXIgZSBpbiBrQS5pbmZvcyl7aWYoa0EuaW5mb3NbZV0uYWRqdXN0ZWQ9PT1BKXJldHVybiBlfXJldHVybiBBfSxhZGRSZWY6ZnVuY3Rpb24oQSl7QSYma0EuaW5mb3NbQV0ucmVmY291bnQrK30sZGVjUmVmOmZ1bmN0aW9uKEEpe2lmKEEpe3ZhciBlPWtBLmluZm9zW0FdO2goMDxlLnJlZmNvdW50KSxlLnJlZmNvdW50LS0sMCE9PWUucmVmY291bnR8fGUucmV0aHJvd258fChlLmRlc3RydWN0b3ImJmQuZHluQ2FsbF92aShlLmRlc3RydWN0b3IsQSksZGVsZXRlIGtBLmluZm9zW0FdLF9fX2N4YV9mcmVlX2V4Y2VwdGlvbihBKSl9fSxjbGVhclJlZjpmdW5jdGlvbihBKXtBJiYoa0EuaW5mb3NbQV0ucmVmY291bnQ9MCl9fTt2YXIgaEE9e0VQRVJNOjEsRU5PRU5UOjIsRVNSQ0g6MyxFSU5UUjo0LEVJTzo1LEVOWElPOjYsRTJCSUc6NyxFTk9FWEVDOjgsRUJBREY6OSxFQ0hJTEQ6MTAsRUFHQUlOOjExLEVXT1VMREJMT0NLOjExLEVOT01FTToxMixFQUNDRVM6MTMsRUZBVUxUOjE0LEVOT1RCTEs6MTUsRUJVU1k6MTYsRUVYSVNUOjE3LEVYREVWOjE4LEVOT0RFVjoxOSxFTk9URElSOjIwLEVJU0RJUjoyMSxFSU5WQUw6MjIsRU5GSUxFOjIzLEVNRklMRToyNCxFTk9UVFk6MjUsRVRYVEJTWToyNixFRkJJRzoyNyxFTk9TUEM6MjgsRVNQSVBFOjI5LEVST0ZTOjMwLEVNTElOSzozMSxFUElQRTozMixFRE9NOjMzLEVSQU5HRTozNCxFTk9NU0c6NDIsRUlEUk06NDMsRUNIUk5HOjQ0LEVMMk5TWU5DOjQ1LEVMM0hMVDo0NixFTDNSU1Q6NDcsRUxOUk5HOjQ4LEVVTkFUQ0g6NDksRU5PQ1NJOjUwLEVMMkhMVDo1MSxFREVBRExLOjM1LEVOT0xDSzozNyxFQkFERTo1MixFQkFEUjo1MyxFWEZVTEw6NTQsRU5PQU5POjU1LEVCQURSUUM6NTYsRUJBRFNMVDo1NyxFREVBRExPQ0s6MzUsRUJGT05UOjU5LEVOT1NUUjo2MCxFTk9EQVRBOjYxLEVUSU1FOjYyLEVOT1NSOjYzLEVOT05FVDo2NCxFTk9QS0c6NjUsRVJFTU9URTo2NixFTk9MSU5LOjY3LEVBRFY6NjgsRVNSTU5UOjY5LEVDT01NOjcwLEVQUk9UTzo3MSxFTVVMVElIT1A6NzIsRURPVERPVDo3MyxFQkFETVNHOjc0LEVOT1RVTklROjc2LEVCQURGRDo3NyxFUkVNQ0hHOjc4LEVMSUJBQ0M6NzksRUxJQkJBRDo4MCxFTElCU0NOOjgxLEVMSUJNQVg6ODIsRUxJQkVYRUM6ODMsRU5PU1lTOjM4LEVOT1RFTVBUWTozOSxFTkFNRVRPT0xPTkc6MzYsRUxPT1A6NDAsRU9QTk9UU1VQUDo5NSxFUEZOT1NVUFBPUlQ6OTYsRUNPTk5SRVNFVDoxMDQsRU5PQlVGUzoxMDUsRUFGTk9TVVBQT1JUOjk3LEVQUk9UT1RZUEU6OTEsRU5PVFNPQ0s6ODgsRU5PUFJPVE9PUFQ6OTIsRVNIVVRET1dOOjEwOCxFQ09OTlJFRlVTRUQ6MTExLEVBRERSSU5VU0U6OTgsRUNPTk5BQk9SVEVEOjEwMyxFTkVUVU5SRUFDSDoxMDEsRU5FVERPV046MTAwLEVUSU1FRE9VVDoxMTAsRUhPU1RET1dOOjExMixFSE9TVFVOUkVBQ0g6MTEzLEVJTlBST0dSRVNTOjExNSxFQUxSRUFEWToxMTQsRURFU1RBRERSUkVROjg5LEVNU0dTSVpFOjkwLEVQUk9UT05PU1VQUE9SVDo5MyxFU09DS1ROT1NVUFBPUlQ6OTQsRUFERFJOT1RBVkFJTDo5OSxFTkVUUkVTRVQ6MTAyLEVJU0NPTk46MTA2LEVOT1RDT05OOjEwNyxFVE9PTUFOWVJFRlM6MTA5LEVVU0VSUzo4NyxFRFFVT1Q6MTIyLEVTVEFMRToxMTYsRU5PVFNVUDo5NSxFTk9NRURJVU06MTIzLEVJTFNFUTo4NCxFT1ZFUkZMT1c6NzUsRUNBTkNFTEVEOjEyNSxFTk9UUkVDT1ZFUkFCTEU6MTMxLEVPV05FUkRFQUQ6MTMwLEVTVFJQSVBFOjg2fTtmdW5jdGlvbiB3QShBKXtyZXR1cm4gZC5fX19lcnJub19sb2NhdGlvbiYmKElbZC5fX19lcnJub19sb2NhdGlvbigpPj4yXT1BKSxBfXZhciB2QT17MDoiU3VjY2VzcyIsMToiTm90IHN1cGVyLXVzZXIiLDI6Ik5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkiLDM6Ik5vIHN1Y2ggcHJvY2VzcyIsNDoiSW50ZXJydXB0ZWQgc3lzdGVtIGNhbGwiLDU6IkkvTyBlcnJvciIsNjoiTm8gc3VjaCBkZXZpY2Ugb3IgYWRkcmVzcyIsNzoiQXJnIGxpc3QgdG9vIGxvbmciLDg6IkV4ZWMgZm9ybWF0IGVycm9yIiw5OiJCYWQgZmlsZSBudW1iZXIiLDEwOiJObyBjaGlsZHJlbiIsMTE6Ik5vIG1vcmUgcHJvY2Vzc2VzIiwxMjoiTm90IGVub3VnaCBjb3JlIiwxMzoiUGVybWlzc2lvbiBkZW5pZWQiLDE0OiJCYWQgYWRkcmVzcyIsMTU6IkJsb2NrIGRldmljZSByZXF1aXJlZCIsMTY6Ik1vdW50IGRldmljZSBidXN5IiwxNzoiRmlsZSBleGlzdHMiLDE4OiJDcm9zcy1kZXZpY2UgbGluayIsMTk6Ik5vIHN1Y2ggZGV2aWNlIiwyMDoiTm90IGEgZGlyZWN0b3J5IiwyMToiSXMgYSBkaXJlY3RvcnkiLDIyOiJJbnZhbGlkIGFyZ3VtZW50IiwyMzoiVG9vIG1hbnkgb3BlbiBmaWxlcyBpbiBzeXN0ZW0iLDI0OiJUb28gbWFueSBvcGVuIGZpbGVzIiwyNToiTm90IGEgdHlwZXdyaXRlciIsMjY6IlRleHQgZmlsZSBidXN5IiwyNzoiRmlsZSB0b28gbGFyZ2UiLDI4OiJObyBzcGFjZSBsZWZ0IG9uIGRldmljZSIsMjk6IklsbGVnYWwgc2VlayIsMzA6IlJlYWQgb25seSBmaWxlIHN5c3RlbSIsMzE6IlRvbyBtYW55IGxpbmtzIiwzMjoiQnJva2VuIHBpcGUiLDMzOiJNYXRoIGFyZyBvdXQgb2YgZG9tYWluIG9mIGZ1bmMiLDM0OiJNYXRoIHJlc3VsdCBub3QgcmVwcmVzZW50YWJsZSIsMzU6IkZpbGUgbG9ja2luZyBkZWFkbG9jayBlcnJvciIsMzY6IkZpbGUgb3IgcGF0aCBuYW1lIHRvbyBsb25nIiwzNzoiTm8gcmVjb3JkIGxvY2tzIGF2YWlsYWJsZSIsMzg6IkZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZCIsMzk6IkRpcmVjdG9yeSBub3QgZW1wdHkiLDQwOiJUb28gbWFueSBzeW1ib2xpYyBsaW5rcyIsNDI6Ik5vIG1lc3NhZ2Ugb2YgZGVzaXJlZCB0eXBlIiw0MzoiSWRlbnRpZmllciByZW1vdmVkIiw0NDoiQ2hhbm5lbCBudW1iZXIgb3V0IG9mIHJhbmdlIiw0NToiTGV2ZWwgMiBub3Qgc3luY2hyb25pemVkIiw0NjoiTGV2ZWwgMyBoYWx0ZWQiLDQ3OiJMZXZlbCAzIHJlc2V0Iiw0ODoiTGluayBudW1iZXIgb3V0IG9mIHJhbmdlIiw0OToiUHJvdG9jb2wgZHJpdmVyIG5vdCBhdHRhY2hlZCIsNTA6Ik5vIENTSSBzdHJ1Y3R1cmUgYXZhaWxhYmxlIiw1MToiTGV2ZWwgMiBoYWx0ZWQiLDUyOiJJbnZhbGlkIGV4Y2hhbmdlIiw1MzoiSW52YWxpZCByZXF1ZXN0IGRlc2NyaXB0b3IiLDU0OiJFeGNoYW5nZSBmdWxsIiw1NToiTm8gYW5vZGUiLDU2OiJJbnZhbGlkIHJlcXVlc3QgY29kZSIsNTc6IkludmFsaWQgc2xvdCIsNTk6IkJhZCBmb250IGZpbGUgZm10Iiw2MDoiRGV2aWNlIG5vdCBhIHN0cmVhbSIsNjE6Ik5vIGRhdGEgKGZvciBubyBkZWxheSBpbykiLDYyOiJUaW1lciBleHBpcmVkIiw2MzoiT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzIiw2NDoiTWFjaGluZSBpcyBub3Qgb24gdGhlIG5ldHdvcmsiLDY1OiJQYWNrYWdlIG5vdCBpbnN0YWxsZWQiLDY2OiJUaGUgb2JqZWN0IGlzIHJlbW90ZSIsNjc6IlRoZSBsaW5rIGhhcyBiZWVuIHNldmVyZWQiLDY4OiJBZHZlcnRpc2UgZXJyb3IiLDY5OiJTcm1vdW50IGVycm9yIiw3MDoiQ29tbXVuaWNhdGlvbiBlcnJvciBvbiBzZW5kIiw3MToiUHJvdG9jb2wgZXJyb3IiLDcyOiJNdWx0aWhvcCBhdHRlbXB0ZWQiLDczOiJDcm9zcyBtb3VudCBwb2ludCAobm90IHJlYWxseSBlcnJvcikiLDc0OiJUcnlpbmcgdG8gcmVhZCB1bnJlYWRhYmxlIG1lc3NhZ2UiLDc1OiJWYWx1ZSB0b28gbGFyZ2UgZm9yIGRlZmluZWQgZGF0YSB0eXBlIiw3NjoiR2l2ZW4gbG9nLiBuYW1lIG5vdCB1bmlxdWUiLDc3OiJmLmQuIGludmFsaWQgZm9yIHRoaXMgb3BlcmF0aW9uIiw3ODoiUmVtb3RlIGFkZHJlc3MgY2hhbmdlZCIsNzk6IkNhbiAgIGFjY2VzcyBhIG5lZWRlZCBzaGFyZWQgbGliIiw4MDoiQWNjZXNzaW5nIGEgY29ycnVwdGVkIHNoYXJlZCBsaWIiLDgxOiIubGliIHNlY3Rpb24gaW4gYS5vdXQgY29ycnVwdGVkIiw4MjoiQXR0ZW1wdGluZyB0byBsaW5rIGluIHRvbyBtYW55IGxpYnMiLDgzOiJBdHRlbXB0aW5nIHRvIGV4ZWMgYSBzaGFyZWQgbGlicmFyeSIsODQ6IklsbGVnYWwgYnl0ZSBzZXF1ZW5jZSIsODY6IlN0cmVhbXMgcGlwZSBlcnJvciIsODc6IlRvbyBtYW55IHVzZXJzIiw4ODoiU29ja2V0IG9wZXJhdGlvbiBvbiBub24tc29ja2V0Iiw4OToiRGVzdGluYXRpb24gYWRkcmVzcyByZXF1aXJlZCIsOTA6Ik1lc3NhZ2UgdG9vIGxvbmciLDkxOiJQcm90b2NvbCB3cm9uZyB0eXBlIGZvciBzb2NrZXQiLDkyOiJQcm90b2NvbCBub3QgYXZhaWxhYmxlIiw5MzoiVW5rbm93biBwcm90b2NvbCIsOTQ6IlNvY2tldCB0eXBlIG5vdCBzdXBwb3J0ZWQiLDk1OiJOb3Qgc3VwcG9ydGVkIiw5NjoiUHJvdG9jb2wgZmFtaWx5IG5vdCBzdXBwb3J0ZWQiLDk3OiJBZGRyZXNzIGZhbWlseSBub3Qgc3VwcG9ydGVkIGJ5IHByb3RvY29sIGZhbWlseSIsOTg6IkFkZHJlc3MgYWxyZWFkeSBpbiB1c2UiLDk5OiJBZGRyZXNzIG5vdCBhdmFpbGFibGUiLDEwMDoiTmV0d29yayBpbnRlcmZhY2UgaXMgbm90IGNvbmZpZ3VyZWQiLDEwMToiTmV0d29yayBpcyB1bnJlYWNoYWJsZSIsMTAyOiJDb25uZWN0aW9uIHJlc2V0IGJ5IG5ldHdvcmsiLDEwMzoiQ29ubmVjdGlvbiBhYm9ydGVkIiwxMDQ6IkNvbm5lY3Rpb24gcmVzZXQgYnkgcGVlciIsMTA1OiJObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlIiwxMDY6IlNvY2tldCBpcyBhbHJlYWR5IGNvbm5lY3RlZCIsMTA3OiJTb2NrZXQgaXMgbm90IGNvbm5lY3RlZCIsMTA4OiJDYW4ndCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93biIsMTA5OiJUb28gbWFueSByZWZlcmVuY2VzIiwxMTA6IkNvbm5lY3Rpb24gdGltZWQgb3V0IiwxMTE6IkNvbm5lY3Rpb24gcmVmdXNlZCIsMTEyOiJIb3N0IGlzIGRvd24iLDExMzoiSG9zdCBpcyB1bnJlYWNoYWJsZSIsMTE0OiJTb2NrZXQgYWxyZWFkeSBjb25uZWN0ZWQiLDExNToiQ29ubmVjdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzIiwxMTY6IlN0YWxlIGZpbGUgaGFuZGxlIiwxMjI6IlF1b3RhIGV4Y2VlZGVkIiwxMjM6Ik5vIG1lZGl1bSAoaW4gdGFwZSBkcml2ZSkiLDEyNToiT3BlcmF0aW9uIGNhbmNlbGVkIiwxMzA6IlByZXZpb3VzIG93bmVyIGRpZWQiLDEzMToiU3RhdGUgbm90IHJlY292ZXJhYmxlIn0sbUE9e3NwbGl0UGF0aDpmdW5jdGlvbihBKXtyZXR1cm4vXihcXC8/fCkoW1xcc1xcU10qPykoKD86XFwuezEsMn18W15cXC9dKz98KShcXC5bXi5cXC9dKnwpKSg/OltcXC9dKikkLy5leGVjKEEpLnNsaWNlKDEpfSxub3JtYWxpemVBcnJheTpmdW5jdGlvbihBLGUpe2Zvcih2YXIgcj0wLGk9QS5sZW5ndGgtMTswPD1pO2ktLSl7dmFyIGY9QVtpXTsiLiI9PT1mP0Euc3BsaWNlKGksMSk6Ii4uIj09PWY/KEEuc3BsaWNlKGksMSkscisrKTpyJiYoQS5zcGxpY2UoaSwxKSxyLS0pfWlmKGUpZm9yKDtyO3ItLSlBLnVuc2hpZnQoIi4uIik7cmV0dXJuIEF9LG5vcm1hbGl6ZTpmdW5jdGlvbihBKXt2YXIgZT0iLyI9PT1BLmNoYXJBdCgwKSxyPSIvIj09PUEuc3Vic3RyKC0xKTtyZXR1cm4oQT1tQS5ub3JtYWxpemVBcnJheShBLnNwbGl0KCIvIikuZmlsdGVyKGZ1bmN0aW9uKEEpe3JldHVybiEhQX0pLCFlKS5qb2luKCIvIikpfHxlfHwoQT0iLiIpLEEmJnImJihBKz0iLyIpLChlPyIvIjoiIikrQX0sZGlybmFtZTpmdW5jdGlvbihBKXt2YXIgZT1tQS5zcGxpdFBhdGgoQSkscj1lWzBdLGk9ZVsxXTtyZXR1cm4gcnx8aT9yKyhpPWkmJmkuc3Vic3RyKDAsaS5sZW5ndGgtMSkpOiIuIn0sYmFzZW5hbWU6ZnVuY3Rpb24oQSl7aWYoIi8iPT09QSlyZXR1cm4iLyI7dmFyIGU9QS5sYXN0SW5kZXhPZigiLyIpO3JldHVybi0xPT09ZT9BOkEuc3Vic3RyKGUrMSl9LGV4dG5hbWU6ZnVuY3Rpb24oQSl7cmV0dXJuIG1BLnNwbGl0UGF0aChBKVszXX0sam9pbjpmdW5jdGlvbigpe3ZhciBBPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKTtyZXR1cm4gbUEubm9ybWFsaXplKEEuam9pbigiLyIpKX0sam9pbjI6ZnVuY3Rpb24oQSxlKXtyZXR1cm4gbUEubm9ybWFsaXplKEErIi8iK2UpfSxyZXNvbHZlOmZ1bmN0aW9uKCl7Zm9yKHZhciBBPSIiLGU9ITEscj1hcmd1bWVudHMubGVuZ3RoLTE7LTE8PXImJiFlO3ItLSl7dmFyIGk9MDw9cj9hcmd1bWVudHNbcl06RUEuY3dkKCk7aWYoInN0cmluZyIhPXR5cGVvZiBpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzIik7aWYoIWkpcmV0dXJuIiI7QT1pKyIvIitBLGU9Ii8iPT09aS5jaGFyQXQoMCl9cmV0dXJuKGU/Ii8iOiIiKSsoQT1tQS5ub3JtYWxpemVBcnJheShBLnNwbGl0KCIvIikuZmlsdGVyKGZ1bmN0aW9uKEEpe3JldHVybiEhQX0pLCFlKS5qb2luKCIvIikpfHwiLiJ9LHJlbGF0aXZlOmZ1bmN0aW9uKEEsZSl7ZnVuY3Rpb24gcihBKXtmb3IodmFyIGU9MDtlPEEubGVuZ3RoJiYiIj09PUFbZV07ZSsrKTtmb3IodmFyIHI9QS5sZW5ndGgtMTswPD1yJiYiIj09PUFbcl07ci0tKTtyZXR1cm4gcjxlP1tdOkEuc2xpY2UoZSxyLWUrMSl9QT1tQS5yZXNvbHZlKEEpLnN1YnN0cigxKSxlPW1BLnJlc29sdmUoZSkuc3Vic3RyKDEpO2Zvcih2YXIgaT1yKEEuc3BsaXQoIi8iKSksZj1yKGUuc3BsaXQoIi8iKSksbj1NYXRoLm1pbihpLmxlbmd0aCxmLmxlbmd0aCksdD1uLG89MDtvPG47bysrKWlmKGlbb10hPT1mW29dKXt0PW87YnJlYWt9dmFyIGE9W107Zm9yKG89dDtvPGkubGVuZ3RoO28rKylhLnB1c2goIi4uIik7cmV0dXJuKGE9YS5jb25jYXQoZi5zbGljZSh0KSkpLmpvaW4oIi8iKX19LGdBPXt0dHlzOltdLGluaXQ6ZnVuY3Rpb24oKXt9LHNodXRkb3duOmZ1bmN0aW9uKCl7fSxyZWdpc3RlcjpmdW5jdGlvbihBLGUpe2dBLnR0eXNbQV09e2lucHV0OltdLG91dHB1dDpbXSxvcHM6ZX0sRUEucmVnaXN0ZXJEZXZpY2UoQSxnQS5zdHJlYW1fb3BzKX0sc3RyZWFtX29wczp7b3BlbjpmdW5jdGlvbihBKXt2YXIgZT1nQS50dHlzW0Eubm9kZS5yZGV2XTtpZighZSl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FTk9ERVYpO0EudHR5PWUsQS5zZWVrYWJsZT0hMX0sY2xvc2U6ZnVuY3Rpb24oQSl7QS50dHkub3BzLmZsdXNoKEEudHR5KX0sZmx1c2g6ZnVuY3Rpb24oQSl7QS50dHkub3BzLmZsdXNoKEEudHR5KX0scmVhZDpmdW5jdGlvbihBLGUscixpLGYpe2lmKCFBLnR0eXx8IUEudHR5Lm9wcy5nZXRfY2hhcil0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FTlhJTyk7Zm9yKHZhciBuPTAsdD0wO3Q8aTt0Kyspe3ZhciBvO3RyeXtvPUEudHR5Lm9wcy5nZXRfY2hhcihBLnR0eSl9Y2F0Y2goQSl7dGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRUlPKX1pZih2b2lkIDA9PT1vJiYwPT09bil0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FQUdBSU4pO2lmKG51bGw9PW8pYnJlYWs7bisrLGVbcit0XT1vfXJldHVybiBuJiYoQS5ub2RlLnRpbWVzdGFtcD1EYXRlLm5vdygpKSxufSx3cml0ZTpmdW5jdGlvbihBLGUscixpLGYpe2lmKCFBLnR0eXx8IUEudHR5Lm9wcy5wdXRfY2hhcil0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FTlhJTyk7Zm9yKHZhciBuPTA7bjxpO24rKyl0cnl7QS50dHkub3BzLnB1dF9jaGFyKEEudHR5LGVbcituXSl9Y2F0Y2goQSl7dGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRUlPKX1yZXR1cm4gaSYmKEEubm9kZS50aW1lc3RhbXA9RGF0ZS5ub3coKSksbn19LGRlZmF1bHRfdHR5X29wczp7Z2V0X2NoYXI6ZnVuY3Rpb24oQSl7aWYoIUEuaW5wdXQubGVuZ3RoKXt2YXIgZT1udWxsO2lmKG8pe3ZhciByPW5ldyBCdWZmZXIoMjU2KSxpPTAsZj0id2luMzIiIT1wcm9jZXNzLnBsYXRmb3JtLG49cHJvY2Vzcy5zdGRpbi5mZDtpZihmKXt2YXIgdD0hMTt0cnl7bj11ci5vcGVuU3luYygiL2Rldi9zdGRpbiIsInIiKSx0PSEwfWNhdGNoKEEpe319dHJ5e2k9dXIucmVhZFN5bmMobixyLDAsMjU2LG51bGwpfWNhdGNoKEEpe2lmKC0xPT1BLnRvU3RyaW5nKCkuaW5kZXhPZigiRU9GIikpdGhyb3cgQTtpPTB9dCYmdXIuY2xvc2VTeW5jKG4pLGU9MDxpP3Iuc2xpY2UoMCxpKS50b1N0cmluZygidXRmLTgiKTpudWxsfWVsc2UidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmImZ1bmN0aW9uIj09dHlwZW9mIHdpbmRvdy5wcm9tcHQ/bnVsbCE9PShlPXdpbmRvdy5wcm9tcHQoIklucHV0OiAiKSkmJihlKz0iXFxuIik6ImZ1bmN0aW9uIj09dHlwZW9mIHJlYWRsaW5lJiZudWxsIT09KGU9cmVhZGxpbmUoKSkmJihlKz0iXFxuIik7aWYoIWUpcmV0dXJuIG51bGw7QS5pbnB1dD1kcihlLCEwKX1yZXR1cm4gQS5pbnB1dC5zaGlmdCgpfSxwdXRfY2hhcjpmdW5jdGlvbihBLGUpe251bGw9PT1lfHwxMD09PWU/KGQucHJpbnQoYyhBLm91dHB1dCwwKSksQS5vdXRwdXQ9W10pOjAhPWUmJkEub3V0cHV0LnB1c2goZSl9LGZsdXNoOmZ1bmN0aW9uKEEpe0Eub3V0cHV0JiYwPEEub3V0cHV0Lmxlbmd0aCYmKGQucHJpbnQoYyhBLm91dHB1dCwwKSksQS5vdXRwdXQ9W10pfX0sZGVmYXVsdF90dHkxX29wczp7cHV0X2NoYXI6ZnVuY3Rpb24oQSxlKXtudWxsPT09ZXx8MTA9PT1lPyhkLnByaW50RXJyKGMoQS5vdXRwdXQsMCkpLEEub3V0cHV0PVtdKTowIT1lJiZBLm91dHB1dC5wdXNoKGUpfSxmbHVzaDpmdW5jdGlvbihBKXtBLm91dHB1dCYmMDxBLm91dHB1dC5sZW5ndGgmJihkLnByaW50RXJyKGMoQS5vdXRwdXQsMCkpLEEub3V0cHV0PVtdKX19fSxaQT17b3BzX3RhYmxlOm51bGwsbW91bnQ6ZnVuY3Rpb24oQSl7cmV0dXJuIFpBLmNyZWF0ZU5vZGUobnVsbCwiLyIsMTY4OTUsMCl9LGNyZWF0ZU5vZGU6ZnVuY3Rpb24oQSxlLHIsaSl7aWYoRUEuaXNCbGtkZXYocil8fEVBLmlzRklGTyhyKSl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FUEVSTSk7WkEub3BzX3RhYmxlfHwoWkEub3BzX3RhYmxlPXtkaXI6e25vZGU6e2dldGF0dHI6WkEubm9kZV9vcHMuZ2V0YXR0cixzZXRhdHRyOlpBLm5vZGVfb3BzLnNldGF0dHIsbG9va3VwOlpBLm5vZGVfb3BzLmxvb2t1cCxta25vZDpaQS5ub2RlX29wcy5ta25vZCxyZW5hbWU6WkEubm9kZV9vcHMucmVuYW1lLHVubGluazpaQS5ub2RlX29wcy51bmxpbmsscm1kaXI6WkEubm9kZV9vcHMucm1kaXIscmVhZGRpcjpaQS5ub2RlX29wcy5yZWFkZGlyLHN5bWxpbms6WkEubm9kZV9vcHMuc3ltbGlua30sc3RyZWFtOntsbHNlZWs6WkEuc3RyZWFtX29wcy5sbHNlZWt9fSxmaWxlOntub2RlOntnZXRhdHRyOlpBLm5vZGVfb3BzLmdldGF0dHIsc2V0YXR0cjpaQS5ub2RlX29wcy5zZXRhdHRyfSxzdHJlYW06e2xsc2VlazpaQS5zdHJlYW1fb3BzLmxsc2VlayxyZWFkOlpBLnN0cmVhbV9vcHMucmVhZCx3cml0ZTpaQS5zdHJlYW1fb3BzLndyaXRlLGFsbG9jYXRlOlpBLnN0cmVhbV9vcHMuYWxsb2NhdGUsbW1hcDpaQS5zdHJlYW1fb3BzLm1tYXAsbXN5bmM6WkEuc3RyZWFtX29wcy5tc3luY319LGxpbms6e25vZGU6e2dldGF0dHI6WkEubm9kZV9vcHMuZ2V0YXR0cixzZXRhdHRyOlpBLm5vZGVfb3BzLnNldGF0dHIscmVhZGxpbms6WkEubm9kZV9vcHMucmVhZGxpbmt9LHN0cmVhbTp7fX0sY2hyZGV2Ontub2RlOntnZXRhdHRyOlpBLm5vZGVfb3BzLmdldGF0dHIsc2V0YXR0cjpaQS5ub2RlX29wcy5zZXRhdHRyfSxzdHJlYW06RUEuY2hyZGV2X3N0cmVhbV9vcHN9fSk7dmFyIGY9RUEuY3JlYXRlTm9kZShBLGUscixpKTtyZXR1cm4gRUEuaXNEaXIoZi5tb2RlKT8oZi5ub2RlX29wcz1aQS5vcHNfdGFibGUuZGlyLm5vZGUsZi5zdHJlYW1fb3BzPVpBLm9wc190YWJsZS5kaXIuc3RyZWFtLGYuY29udGVudHM9e30pOkVBLmlzRmlsZShmLm1vZGUpPyhmLm5vZGVfb3BzPVpBLm9wc190YWJsZS5maWxlLm5vZGUsZi5zdHJlYW1fb3BzPVpBLm9wc190YWJsZS5maWxlLnN0cmVhbSxmLnVzZWRCeXRlcz0wLGYuY29udGVudHM9bnVsbCk6RUEuaXNMaW5rKGYubW9kZSk/KGYubm9kZV9vcHM9WkEub3BzX3RhYmxlLmxpbmsubm9kZSxmLnN0cmVhbV9vcHM9WkEub3BzX3RhYmxlLmxpbmsuc3RyZWFtKTpFQS5pc0NocmRldihmLm1vZGUpJiYoZi5ub2RlX29wcz1aQS5vcHNfdGFibGUuY2hyZGV2Lm5vZGUsZi5zdHJlYW1fb3BzPVpBLm9wc190YWJsZS5jaHJkZXYuc3RyZWFtKSxmLnRpbWVzdGFtcD1EYXRlLm5vdygpLEEmJihBLmNvbnRlbnRzW2VdPWYpLGZ9LGdldEZpbGVEYXRhQXNSZWd1bGFyQXJyYXk6ZnVuY3Rpb24oQSl7aWYoQS5jb250ZW50cyYmQS5jb250ZW50cy5zdWJhcnJheSl7Zm9yKHZhciBlPVtdLHI9MDtyPEEudXNlZEJ5dGVzOysrcillLnB1c2goQS5jb250ZW50c1tyXSk7cmV0dXJuIGV9cmV0dXJuIEEuY29udGVudHN9LGdldEZpbGVEYXRhQXNUeXBlZEFycmF5OmZ1bmN0aW9uKEEpe3JldHVybiBBLmNvbnRlbnRzP0EuY29udGVudHMuc3ViYXJyYXk/QS5jb250ZW50cy5zdWJhcnJheSgwLEEudXNlZEJ5dGVzKTpuZXcgVWludDhBcnJheShBLmNvbnRlbnRzKTpuZXcgVWludDhBcnJheX0sZXhwYW5kRmlsZVN0b3JhZ2U6ZnVuY3Rpb24oQSxlKXtpZihBLmNvbnRlbnRzJiZBLmNvbnRlbnRzLnN1YmFycmF5JiZlPkEuY29udGVudHMubGVuZ3RoJiYoQS5jb250ZW50cz1aQS5nZXRGaWxlRGF0YUFzUmVndWxhckFycmF5KEEpLEEudXNlZEJ5dGVzPUEuY29udGVudHMubGVuZ3RoKSwhQS5jb250ZW50c3x8QS5jb250ZW50cy5zdWJhcnJheSl7dmFyIHI9QS5jb250ZW50cz9BLmNvbnRlbnRzLmxlbmd0aDowO2lmKGU8PXIpcmV0dXJuO2U9TWF0aC5tYXgoZSxyKihyPDEwNDg1NzY/MjoxLjEyNSl8MCksMCE9ciYmKGU9TWF0aC5tYXgoZSwyNTYpKTt2YXIgaT1BLmNvbnRlbnRzO3JldHVybiBBLmNvbnRlbnRzPW5ldyBVaW50OEFycmF5KGUpLHZvaWQoMDxBLnVzZWRCeXRlcyYmQS5jb250ZW50cy5zZXQoaS5zdWJhcnJheSgwLEEudXNlZEJ5dGVzKSwwKSl9Zm9yKCFBLmNvbnRlbnRzJiYwPGUmJihBLmNvbnRlbnRzPVtdKTtBLmNvbnRlbnRzLmxlbmd0aDxlOylBLmNvbnRlbnRzLnB1c2goMCl9LHJlc2l6ZUZpbGVTdG9yYWdlOmZ1bmN0aW9uKEEsZSl7aWYoQS51c2VkQnl0ZXMhPWUpe2lmKDA9PWUpcmV0dXJuIEEuY29udGVudHM9bnVsbCx2b2lkKEEudXNlZEJ5dGVzPTApO2lmKCFBLmNvbnRlbnRzfHxBLmNvbnRlbnRzLnN1YmFycmF5KXt2YXIgcj1BLmNvbnRlbnRzO3JldHVybiBBLmNvbnRlbnRzPW5ldyBVaW50OEFycmF5KG5ldyBBcnJheUJ1ZmZlcihlKSksciYmQS5jb250ZW50cy5zZXQoci5zdWJhcnJheSgwLE1hdGgubWluKGUsQS51c2VkQnl0ZXMpKSksdm9pZChBLnVzZWRCeXRlcz1lKX1pZihBLmNvbnRlbnRzfHwoQS5jb250ZW50cz1bXSksQS5jb250ZW50cy5sZW5ndGg+ZSlBLmNvbnRlbnRzLmxlbmd0aD1lO2Vsc2UgZm9yKDtBLmNvbnRlbnRzLmxlbmd0aDxlOylBLmNvbnRlbnRzLnB1c2goMCk7QS51c2VkQnl0ZXM9ZX19LG5vZGVfb3BzOntnZXRhdHRyOmZ1bmN0aW9uKEEpe3ZhciBlPXt9O3JldHVybiBlLmRldj1FQS5pc0NocmRldihBLm1vZGUpP0EuaWQ6MSxlLmlubz1BLmlkLGUubW9kZT1BLm1vZGUsZS5ubGluaz0xLGUudWlkPTAsZS5naWQ9MCxlLnJkZXY9QS5yZGV2LEVBLmlzRGlyKEEubW9kZSk/ZS5zaXplPTQwOTY6RUEuaXNGaWxlKEEubW9kZSk/ZS5zaXplPUEudXNlZEJ5dGVzOkVBLmlzTGluayhBLm1vZGUpP2Uuc2l6ZT1BLmxpbmsubGVuZ3RoOmUuc2l6ZT0wLGUuYXRpbWU9bmV3IERhdGUoQS50aW1lc3RhbXApLGUubXRpbWU9bmV3IERhdGUoQS50aW1lc3RhbXApLGUuY3RpbWU9bmV3IERhdGUoQS50aW1lc3RhbXApLGUuYmxrc2l6ZT00MDk2LGUuYmxvY2tzPU1hdGguY2VpbChlLnNpemUvZS5ibGtzaXplKSxlfSxzZXRhdHRyOmZ1bmN0aW9uKEEsZSl7dm9pZCAwIT09ZS5tb2RlJiYoQS5tb2RlPWUubW9kZSksdm9pZCAwIT09ZS50aW1lc3RhbXAmJihBLnRpbWVzdGFtcD1lLnRpbWVzdGFtcCksdm9pZCAwIT09ZS5zaXplJiZaQS5yZXNpemVGaWxlU3RvcmFnZShBLGUuc2l6ZSl9LGxvb2t1cDpmdW5jdGlvbihBLGUpe3Rocm93IEVBLmdlbmVyaWNFcnJvcnNbaEEuRU5PRU5UXX0sbWtub2Q6ZnVuY3Rpb24oQSxlLHIsaSl7cmV0dXJuIFpBLmNyZWF0ZU5vZGUoQSxlLHIsaSl9LHJlbmFtZTpmdW5jdGlvbihBLGUscil7aWYoRUEuaXNEaXIoQS5tb2RlKSl7dmFyIGk7dHJ5e2k9RUEubG9va3VwTm9kZShlLHIpfWNhdGNoKEEpe31pZihpKWZvcih2YXIgZiBpbiBpLmNvbnRlbnRzKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVOT1RFTVBUWSl9ZGVsZXRlIEEucGFyZW50LmNvbnRlbnRzW0EubmFtZV0sQS5uYW1lPXIsKGUuY29udGVudHNbcl09QSkucGFyZW50PWV9LHVubGluazpmdW5jdGlvbihBLGUpe2RlbGV0ZSBBLmNvbnRlbnRzW2VdfSxybWRpcjpmdW5jdGlvbihBLGUpe3ZhciByPUVBLmxvb2t1cE5vZGUoQSxlKTtmb3IodmFyIGkgaW4gci5jb250ZW50cyl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FTk9URU1QVFkpO2RlbGV0ZSBBLmNvbnRlbnRzW2VdfSxyZWFkZGlyOmZ1bmN0aW9uKEEpe3ZhciBlPVsiLiIsIi4uIl07Zm9yKHZhciByIGluIEEuY29udGVudHMpQS5jb250ZW50cy5oYXNPd25Qcm9wZXJ0eShyKSYmZS5wdXNoKHIpO3JldHVybiBlfSxzeW1saW5rOmZ1bmN0aW9uKEEsZSxyKXt2YXIgaT1aQS5jcmVhdGVOb2RlKEEsZSw0MTQ3MSwwKTtyZXR1cm4gaS5saW5rPXIsaX0scmVhZGxpbms6ZnVuY3Rpb24oQSl7aWYoIUVBLmlzTGluayhBLm1vZGUpKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVJTlZBTCk7cmV0dXJuIEEubGlua319LHN0cmVhbV9vcHM6e3JlYWQ6ZnVuY3Rpb24oQSxlLHIsaSxmKXt2YXIgbj1BLm5vZGUuY29udGVudHM7aWYoZj49QS5ub2RlLnVzZWRCeXRlcylyZXR1cm4gMDt2YXIgdD1NYXRoLm1pbihBLm5vZGUudXNlZEJ5dGVzLWYsaSk7aWYoaCgwPD10KSw4PHQmJm4uc3ViYXJyYXkpZS5zZXQobi5zdWJhcnJheShmLGYrdCkscik7ZWxzZSBmb3IodmFyIG89MDtvPHQ7bysrKWVbcitvXT1uW2Yrb107cmV0dXJuIHR9LHdyaXRlOmZ1bmN0aW9uKEEsZSxyLGksZixuKXtpZighaSlyZXR1cm4gMDt2YXIgdD1BLm5vZGU7aWYodC50aW1lc3RhbXA9RGF0ZS5ub3coKSxlLnN1YmFycmF5JiYoIXQuY29udGVudHN8fHQuY29udGVudHMuc3ViYXJyYXkpKXtpZihuKXJldHVybiB0LmNvbnRlbnRzPWUuc3ViYXJyYXkocixyK2kpLHQudXNlZEJ5dGVzPWk7aWYoMD09PXQudXNlZEJ5dGVzJiYwPT09ZilyZXR1cm4gdC5jb250ZW50cz1uZXcgVWludDhBcnJheShlLnN1YmFycmF5KHIscitpKSksdC51c2VkQnl0ZXM9aTtpZihmK2k8PXQudXNlZEJ5dGVzKXJldHVybiB0LmNvbnRlbnRzLnNldChlLnN1YmFycmF5KHIscitpKSxmKSxpfWlmKFpBLmV4cGFuZEZpbGVTdG9yYWdlKHQsZitpKSx0LmNvbnRlbnRzLnN1YmFycmF5JiZlLnN1YmFycmF5KXQuY29udGVudHMuc2V0KGUuc3ViYXJyYXkocixyK2kpLGYpO2Vsc2UgZm9yKHZhciBvPTA7bzxpO28rKyl0LmNvbnRlbnRzW2Yrb109ZVtyK29dO3JldHVybiB0LnVzZWRCeXRlcz1NYXRoLm1heCh0LnVzZWRCeXRlcyxmK2kpLGl9LGxsc2VlazpmdW5jdGlvbihBLGUscil7dmFyIGk9ZTtpZigxPT09cj9pKz1BLnBvc2l0aW9uOjI9PT1yJiZFQS5pc0ZpbGUoQS5ub2RlLm1vZGUpJiYoaSs9QS5ub2RlLnVzZWRCeXRlcyksaTwwKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVJTlZBTCk7cmV0dXJuIGl9LGFsbG9jYXRlOmZ1bmN0aW9uKEEsZSxyKXtaQS5leHBhbmRGaWxlU3RvcmFnZShBLm5vZGUsZStyKSxBLm5vZGUudXNlZEJ5dGVzPU1hdGgubWF4KEEubm9kZS51c2VkQnl0ZXMsZStyKX0sbW1hcDpmdW5jdGlvbihBLGUscixpLGYsbix0KXtpZighRUEuaXNGaWxlKEEubm9kZS5tb2RlKSl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FTk9ERVYpO3ZhciBvLGEsYz1BLm5vZGUuY29udGVudHM7aWYoMiZ0fHxjLmJ1ZmZlciE9PWUmJmMuYnVmZmVyIT09ZS5idWZmZXIpe2lmKCgwPGZ8fGYraTxBLm5vZGUudXNlZEJ5dGVzKSYmKGM9Yy5zdWJhcnJheT9jLnN1YmFycmF5KGYsZitpKTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChjLGYsZitpKSksYT0hMCwhKG89R3IoaSkpKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVOT01FTSk7ZS5zZXQoYyxvKX1lbHNlIGE9ITEsbz1jLmJ5dGVPZmZzZXQ7cmV0dXJue3B0cjpvLGFsbG9jYXRlZDphfX0sbXN5bmM6ZnVuY3Rpb24oQSxlLHIsaSxmKXtpZighRUEuaXNGaWxlKEEubm9kZS5tb2RlKSl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FTk9ERVYpO2lmKDImZilyZXR1cm4gMDtaQS5zdHJlYW1fb3BzLndyaXRlKEEsZSwwLGksciwhMSk7cmV0dXJuIDB9fX0scEE9e2Riczp7fSxpbmRleGVkREI6ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIGluZGV4ZWREQilyZXR1cm4gaW5kZXhlZERCO3ZhciBBPW51bGw7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJihBPXdpbmRvdy5pbmRleGVkREJ8fHdpbmRvdy5tb3pJbmRleGVkREJ8fHdpbmRvdy53ZWJraXRJbmRleGVkREJ8fHdpbmRvdy5tc0luZGV4ZWREQiksaChBLCJJREJGUyB1c2VkLCBidXQgaW5kZXhlZERCIG5vdCBzdXBwb3J0ZWQiKSxBfSxEQl9WRVJTSU9OOjIxLERCX1NUT1JFX05BTUU6IkZJTEVfREFUQSIsbW91bnQ6ZnVuY3Rpb24oQSl7cmV0dXJuIFpBLm1vdW50LmFwcGx5KG51bGwsYXJndW1lbnRzKX0sc3luY2ZzOmZ1bmN0aW9uKGUsbix0KXtwQS5nZXRMb2NhbFNldChlLGZ1bmN0aW9uKEEsZil7aWYoQSlyZXR1cm4gdChBKTtwQS5nZXRSZW1vdGVTZXQoZSxmdW5jdGlvbihBLGUpe2lmKEEpcmV0dXJuIHQoQSk7dmFyIHI9bj9lOmYsaT1uP2Y6ZTtwQS5yZWNvbmNpbGUocixpLHQpfSl9KX0sZ2V0REI6ZnVuY3Rpb24oQSxlKXt2YXIgcixpPXBBLmRic1tBXTtpZihpKXJldHVybiBlKG51bGwsaSk7dHJ5e3I9cEEuaW5kZXhlZERCKCkub3BlbihBLHBBLkRCX1ZFUlNJT04pfWNhdGNoKEEpe3JldHVybiBlKEEpfWlmKCFyKXJldHVybiBlKCJVbmFibGUgdG8gY29ubmVjdCB0byBJbmRleGVkREIiKTtyLm9udXBncmFkZW5lZWRlZD1mdW5jdGlvbihBKXt2YXIgZSxyPUEudGFyZ2V0LnJlc3VsdCxpPUEudGFyZ2V0LnRyYW5zYWN0aW9uOyhlPXIub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucyhwQS5EQl9TVE9SRV9OQU1FKT9pLm9iamVjdFN0b3JlKHBBLkRCX1NUT1JFX05BTUUpOnIuY3JlYXRlT2JqZWN0U3RvcmUocEEuREJfU1RPUkVfTkFNRSkpLmluZGV4TmFtZXMuY29udGFpbnMoInRpbWVzdGFtcCIpfHxlLmNyZWF0ZUluZGV4KCJ0aW1lc3RhbXAiLCJ0aW1lc3RhbXAiLHt1bmlxdWU6ITF9KX0sci5vbnN1Y2Nlc3M9ZnVuY3Rpb24oKXtpPXIucmVzdWx0LHBBLmRic1tBXT1pLGUobnVsbCxpKX0sci5vbmVycm9yPWZ1bmN0aW9uKEEpe2UodGhpcy5lcnJvciksQS5wcmV2ZW50RGVmYXVsdCgpfX0sZ2V0TG9jYWxTZXQ6ZnVuY3Rpb24oQSxlKXt2YXIgcj17fTtmdW5jdGlvbiBpKEEpe3JldHVybiIuIiE9PUEmJiIuLiIhPT1BfWZ1bmN0aW9uIGYoZSl7cmV0dXJuIGZ1bmN0aW9uKEEpe3JldHVybiBtQS5qb2luMihlLEEpfX1mb3IodmFyIG49RUEucmVhZGRpcihBLm1vdW50cG9pbnQpLmZpbHRlcihpKS5tYXAoZihBLm1vdW50cG9pbnQpKTtuLmxlbmd0aDspe3ZhciB0LG89bi5wb3AoKTt0cnl7dD1FQS5zdGF0KG8pfWNhdGNoKEEpe3JldHVybiBlKEEpfUVBLmlzRGlyKHQubW9kZSkmJm4ucHVzaC5hcHBseShuLEVBLnJlYWRkaXIobykuZmlsdGVyKGkpLm1hcChmKG8pKSkscltvXT17dGltZXN0YW1wOnQubXRpbWV9fXJldHVybiBlKG51bGwse3R5cGU6ImxvY2FsIixlbnRyaWVzOnJ9KX0sZ2V0UmVtb3RlU2V0OmZ1bmN0aW9uKEEsaSl7dmFyIGY9e307cEEuZ2V0REIoQS5tb3VudHBvaW50LGZ1bmN0aW9uKEEscil7aWYoQSlyZXR1cm4gaShBKTt0cnl7dmFyIGU9ci50cmFuc2FjdGlvbihbcEEuREJfU1RPUkVfTkFNRV0sInJlYWRvbmx5Iik7ZS5vbmVycm9yPWZ1bmN0aW9uKEEpe2kodGhpcy5lcnJvciksQS5wcmV2ZW50RGVmYXVsdCgpfSxlLm9iamVjdFN0b3JlKHBBLkRCX1NUT1JFX05BTUUpLmluZGV4KCJ0aW1lc3RhbXAiKS5vcGVuS2V5Q3Vyc29yKCkub25zdWNjZXNzPWZ1bmN0aW9uKEEpe3ZhciBlPUEudGFyZ2V0LnJlc3VsdDtpZighZSlyZXR1cm4gaShudWxsLHt0eXBlOiJyZW1vdGUiLGRiOnIsZW50cmllczpmfSk7ZltlLnByaW1hcnlLZXldPXt0aW1lc3RhbXA6ZS5rZXl9LGUuY29udGludWUoKX19Y2F0Y2goQSl7cmV0dXJuIGkoQSl9fSl9LGxvYWRMb2NhbEVudHJ5OmZ1bmN0aW9uKEEsZSl7dmFyIHIsaTt0cnl7aT1FQS5sb29rdXBQYXRoKEEpLm5vZGUscj1FQS5zdGF0KEEpfWNhdGNoKEEpe3JldHVybiBlKEEpfXJldHVybiBFQS5pc0RpcihyLm1vZGUpP2UobnVsbCx7dGltZXN0YW1wOnIubXRpbWUsbW9kZTpyLm1vZGV9KTpFQS5pc0ZpbGUoci5tb2RlKT8oaS5jb250ZW50cz1aQS5nZXRGaWxlRGF0YUFzVHlwZWRBcnJheShpKSxlKG51bGwse3RpbWVzdGFtcDpyLm10aW1lLG1vZGU6ci5tb2RlLGNvbnRlbnRzOmkuY29udGVudHN9KSk6ZShuZXcgRXJyb3IoIm5vZGUgdHlwZSBub3Qgc3VwcG9ydGVkIikpfSxzdG9yZUxvY2FsRW50cnk6ZnVuY3Rpb24oQSxlLHIpe3RyeXtpZihFQS5pc0RpcihlLm1vZGUpKUVBLm1rZGlyKEEsZS5tb2RlKTtlbHNle2lmKCFFQS5pc0ZpbGUoZS5tb2RlKSlyZXR1cm4gcihuZXcgRXJyb3IoIm5vZGUgdHlwZSBub3Qgc3VwcG9ydGVkIikpO0VBLndyaXRlRmlsZShBLGUuY29udGVudHMse2VuY29kaW5nOiJiaW5hcnkiLGNhbk93bjohMH0pfUVBLmNobW9kKEEsZS5tb2RlKSxFQS51dGltZShBLGUudGltZXN0YW1wLGUudGltZXN0YW1wKX1jYXRjaChBKXtyZXR1cm4gcihBKX1yKG51bGwpfSxyZW1vdmVMb2NhbEVudHJ5OmZ1bmN0aW9uKEEsZSl7dHJ5e0VBLmxvb2t1cFBhdGgoQSk7dmFyIHI9RUEuc3RhdChBKTtFQS5pc0RpcihyLm1vZGUpP0VBLnJtZGlyKEEpOkVBLmlzRmlsZShyLm1vZGUpJiZFQS51bmxpbmsoQSl9Y2F0Y2goQSl7cmV0dXJuIGUoQSl9ZShudWxsKX0sbG9hZFJlbW90ZUVudHJ5OmZ1bmN0aW9uKEEsZSxyKXt2YXIgaT1BLmdldChlKTtpLm9uc3VjY2Vzcz1mdW5jdGlvbihBKXtyKG51bGwsQS50YXJnZXQucmVzdWx0KX0saS5vbmVycm9yPWZ1bmN0aW9uKEEpe3IodGhpcy5lcnJvciksQS5wcmV2ZW50RGVmYXVsdCgpfX0sc3RvcmVSZW1vdGVFbnRyeTpmdW5jdGlvbihBLGUscixpKXt2YXIgZj1BLnB1dChyLGUpO2Yub25zdWNjZXNzPWZ1bmN0aW9uKCl7aShudWxsKX0sZi5vbmVycm9yPWZ1bmN0aW9uKEEpe2kodGhpcy5lcnJvciksQS5wcmV2ZW50RGVmYXVsdCgpfX0scmVtb3ZlUmVtb3RlRW50cnk6ZnVuY3Rpb24oQSxlLHIpe3ZhciBpPUEuZGVsZXRlKGUpO2kub25zdWNjZXNzPWZ1bmN0aW9uKCl7cihudWxsKX0saS5vbmVycm9yPWZ1bmN0aW9uKEEpe3IodGhpcy5lcnJvciksQS5wcmV2ZW50RGVmYXVsdCgpfX0scmVjb25jaWxlOmZ1bmN0aW9uKGksZixlKXt2YXIgbj0wLHQ9W107T2JqZWN0LmtleXMoaS5lbnRyaWVzKS5mb3JFYWNoKGZ1bmN0aW9uKEEpe3ZhciBlPWkuZW50cmllc1tBXSxyPWYuZW50cmllc1tBXTsoIXJ8fGUudGltZXN0YW1wPnIudGltZXN0YW1wKSYmKHQucHVzaChBKSxuKyspfSk7dmFyIHI9W107aWYoT2JqZWN0LmtleXMoZi5lbnRyaWVzKS5mb3JFYWNoKGZ1bmN0aW9uKEEpe2YuZW50cmllc1tBXTtpLmVudHJpZXNbQV18fChyLnB1c2goQSksbisrKX0pLCFuKXJldHVybiBlKG51bGwpO3ZhciBvPTAsQT0oInJlbW90ZSI9PT1pLnR5cGU/aS5kYjpmLmRiKS50cmFuc2FjdGlvbihbcEEuREJfU1RPUkVfTkFNRV0sInJlYWR3cml0ZSIpLGE9QS5vYmplY3RTdG9yZShwQS5EQl9TVE9SRV9OQU1FKTtmdW5jdGlvbiBjKEEpe3JldHVybiBBP2MuZXJyb3JlZD92b2lkIDA6KGMuZXJyb3JlZD0hMCxlKEEpKTorK28+PW4/ZShudWxsKTp2b2lkIDB9QS5vbmVycm9yPWZ1bmN0aW9uKEEpe2ModGhpcy5lcnJvciksQS5wcmV2ZW50RGVmYXVsdCgpfSx0LnNvcnQoKS5mb3JFYWNoKGZ1bmN0aW9uKHIpeyJsb2NhbCI9PT1mLnR5cGU/cEEubG9hZFJlbW90ZUVudHJ5KGEscixmdW5jdGlvbihBLGUpe2lmKEEpcmV0dXJuIGMoQSk7cEEuc3RvcmVMb2NhbEVudHJ5KHIsZSxjKX0pOnBBLmxvYWRMb2NhbEVudHJ5KHIsZnVuY3Rpb24oQSxlKXtpZihBKXJldHVybiBjKEEpO3BBLnN0b3JlUmVtb3RlRW50cnkoYSxyLGUsYyl9KX0pLHIuc29ydCgpLnJldmVyc2UoKS5mb3JFYWNoKGZ1bmN0aW9uKEEpeyJsb2NhbCI9PT1mLnR5cGU/cEEucmVtb3ZlTG9jYWxFbnRyeShBLGMpOnBBLnJlbW92ZVJlbW90ZUVudHJ5KGEsQSxjKX0pfX0seUE9e2lzV2luZG93czohKGJBPSJkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtiYXNlNjQsQUFBQUFBQUFBQUFFQUFBQUFBQUFBQmdLQUFBaEFBQUFJZ0FBQVB6Ly8vLzgvLy8vR0FvQUFDTUFBQUFrQUFBQUFBQUFBQUFBQUFDWVJBQUF6RWdBQU1CRUFBRGlTQUFBUUFBQUFBQUFBQUNZUkFBQWRVb0FBTUJFQUFEdFNRQUEyQWtBQUFBQUFBREFSQUFBTDBvQUFCZ0tBQUFBQUFBQXdFUUFBTk5LQUFCWUFBQUFBQUFBQU1CRUFBQTRTd0FBZ0FBQUFBQUFBQURBUkFBQXBsc0FBSUFBQUFBQUFBQUFRQUFBQUFBQUFBRG9DUUFBRndBQUFCZ0FBQURBLy8vL3dQLy8vK2dKQUFBWkFBQUFHZ0FBQUVBQUFBQUFBQUFBU0FvQUFCc0FBQUFjQUFBQU9BQUFBUGovLy85SUNnQUFIUUFBQUI0QUFBREEvLy8vd1AvLy8wZ0tBQUFmQUFBQUlBQUFBQUFBQUFBNEFBQUFBQUFBQUJnS0FBQWhBQUFBSWdBQUFNai8vLy9JLy8vL0dBb0FBQ01BQUFBa0FBQUF3RVFBQUhOTEFBQklDZ0FBQUFBQUFNQkVBQUFzVEFBQU9BOEFBQUFBQUFEQVJBQUFoa3dBQUlBQUFBQUFBQUFBd0VRQUFKZE1BQUE0RHdBQUFBQUFBTUJFQUFCYlRnQUFnQUFBQUFBQUFBREFSQUFBNmt3QUFLQUJBQUFBQUFBQW1FUUFBQVZOQUFEQVJBQUFIRTBBQURnUEFBQUFBQUFBd0VRQUFNQk5BQUNnQVFBQUFBQUFBTUJFQUFEY1RRQUFPQThBQUFBQUFBREFSQUFBYkU0QUFEZ1BBQUFBQUFBQXdFUUFBTHRPQUFDQUFBQUFBQUFBQU1CRUFBRExUZ0FBT0E4QUFBQUFBQURBUkFBQURrOEFBSUFBQUFBQUFBQUF3RVFBQUI5UEFBQTREd0FBQUFBQUFNQkVBQUJqVHdBQWdBQUFBQUFBQUFEQVJBQUFkRThBQURnUEFBQUFBQUFBd0VRQUFPTlBBQUNBQUFBQUFBQUFBTUJFQUFEMFR3QUFPQThBQUFBQUFBREFSQUFBVDFBQUFJQUFBQUFBQUFBQXdFUUFBR0JRQUFBNER3QUFBQUFBQU1CRUFBQmZVUUFBZ0FBQUFBQUFBQURBUkFBQWNGRUFBRGdQQUFBQUFBQUF3RVFBQUdGVEFBQ0FBQUFBQUFBQUFNQkVBQUJ5VXdBQU9BOEFBQUFBQUFEQVJBQUE0MU1BQUlBQUFBQUFBQUFBd0VRQUFQUlRBQUE0RHdBQUFBQUFBTUJFQUFCY1ZBQUFnQUFBQUFBQUFBREFSQUFBYlZRQUFEZ1BBQUFBQUFBQXdFUUFBTlZVQUFDQUFBQUFBQUFBQU1CRUFBRG1WQUFBT0E4QUFBQUFBQURBUkFBQVJWVUFBSUFBQUFBQUFBQUF3RVFBQUZaVkFBQTREd0FBQUFBQUFNQkVBQUMwVlFBQWdBQUFBQUFBQUFEQVJBQUF4VlVBQURnUEFBQUFBQUFBd0VRQUFDWldBQUNBQUFBQUFBQUFBTUJFQUFBM1ZnQUFPQThBQUFBQUFBREFSQUFBdFZZQUFJQUFBQUFBQUFBQXdFUUFBTVpXQUFBNER3QUFBQUFBQU1CRUFBQUtWd0FBZ0FBQUFBQUFBQURBUkFBQUcxY0FBRGdQQUFBQUFBQUF3RVFBQUY5WEFBQ0FBQUFBQUFBQUFNQkVBQUJ3VndBQU9BOEFBQUFBQUFEQVJBQUFPRmdBQUlBQUFBQUFBQUFBd0VRQUFFbFlBQUE0RHdBQUFBQUFBTUJFQUFDTldBQUFnQUFBQUFBQUFBREFSQUFBbmxnQUFEZ1BBQUFBQUFBQXdFUUFBTVJaQUFDQUFBQUFBQUFBQU1CRUFBRFZXUUFBT0E4QUFBQUFBQURBUkFBQUxWb0FBSUFBQUFBQUFBQUF3RVFBQUQ1YUFBQTREd0FBQUFBQUFNQkVBQUNtV2dBQWdBQUFBQUFBQUFEQVJBQUF0MW9BQURnUEFBQUFBQUFBd0VRQUFQdGFBQUE0RHdBQUFBQUFBTUJFQUFBL1d3QUFPQThBQUFBQUFBREFSQUFBWUdNQUFEZ1BBQUFBQUFBQXdFUUFBTjlrQUFBNER3QUFBQUFBQUVoRkFBQ2Zjd0FBU0VVQUFJcHpBQUJJUlFBQWNITUFBRWhGQUFCaWN3QUFTRVVBQUZCekFBQklSUUFBUVhNQUFKaEVBQUF5Y3dBQUxFVUFBQ0p6QUFBQUFBQUErQVFBQUN4RkFBQVJjd0FBQVFBQUFQZ0VBQUNZUkFBQS9YSUFBQ3hGQUFEb2NnQUFBQUFBQUNBRkFBQXNSUUFBMG5JQUFBRUFBQUFnQlFBQW1FUUFBTVZ5QUFBc1JRQUF0M0lBQUFBQUFBQklCUUFBTEVVQUFLaHlBQUFCQUFBQVNBVUFBSmhFQUFDYmNnQUFtRVFBQUxGekFBQmtSUUFBbFhRQUFBQUFBQUFCQUFBQW1BVUFBQUFBQUFDWVJBQUExSFFBQU1CRUFBRDZkQUFBT0E4QUFBQUFBQURBUkFBQUZuWUFBRGdQQUFBQUFBQUFtRVFBQUJoNkFBQmtSUUFBeVhrQUFBQUFBQUFDQUFBQXdBVUFBQUlBQUFENEJRQUFBZ2dBQU1CRUFBQi9lUUFBT0E4QUFBQUFBQUNZUkFBQTkza0FBTUJFQUFBc2VnQUFPQThBQUFBQUFBREFSQUFBZG4wQUFEZ1BBQUFBQUFBQXdFUUFBQ04rQUFBd0JnQUFBQUFBQUpoRUFBQTRmZ0FBd0VRQUFGcCtBQUF3QmdBQUFBQUFBTUJFQUFCeGZnQUFNQVlBQUFBQUFBREFSQUFBaUg0QUFEQUdBQUFBQUFBQXdFUUFBS1IrQUFBd0JnQUFBQUFBQU1CRUFBQzhmZ0FBTUFZQUFBQUFBQURBUkFBQTJINEFBREFHQUFBQUFBQUF3RVFBQVBaK0FBQXdCZ0FBQUFBQUFNQkVBQUFNZndBQU1BWUFBQUFBQUFEQVJBQUFJbjhBQURBR0FBQUFBQUFBd0VRQUFJMS9BQUF3QmdBQUFBQUFBTUJFQUFDcmZ3QUFNQVlBQUFBQUFBREFSQUFBd1g4QUFEQUdBQUFBQUFBQXdFUUFBTlIvQUFBd0JnQUFBQUFBQU1CRUFBRG5md0FBTUFZQUFBQUFBQURBUkFBQUJZQUFBREFHQUFBQUFBQUF3RVFBQUIrQUFBQTREd0FBQUFBQUFNQkVBQUJ3Z0FBQU9BOEFBQUFBQUFEQVJBQUF0b0FBQURnUEFBQUFBQUFBd0VRQUFQeUFBQUE0RHdBQUFBQUFBTUJFQUFCRmdRQUFNQVlBQUFBQUFBREFSQUFBV29FQUFEZ1BBQUFBQUFBQXdFUUFBS0tCQUFBd0JnQUFBQUFBQU1CRUFBQzNnUUFBT0E4QUFBQUFBQURBUkFBQS80RUFBRGdQQUFBQUFBQUF3RVFBQUZDQ0FBQTREd0FBQUFBQUFNQkVBQUNhZ2dBQU9BOEFBQUFBQUFEQVJBQUE2WUlBQURnUEFBQUFBQUFBd0VRQUFEcURBQUE0RHdBQUFBQUFBTUJFQUFDRGd3QUFPQThBQUFBQUFBREFSQUFBeklNQUFEZ1BBQUFBQUFBQXdFUUFBQmVFQUFBNER3QUFBQUFBQU1CRUFBQm1oQUFBT0E4QUFBQUFBQURBUkFBQXM0UUFBRGdQQUFBQUFBQUF3RVFBQVAyRUFBQTREd0FBQUFBQUFNQkVBQUJIaFFBQU1BWUFBQUFBQUFEQVJBQUFYSVVBQURnUEFBQUFBQUFBd0VRQUFLU0ZBQUF3QmdBQUFBQUFBTUJFQUFDNWhRQUFPQThBQUFBQUFBREFSQUFBQVlZQUFEZ1BBQUFBQUFBQXdFUUFBRWVIQUFDNENBQUFBQUFBQUdSRkFBQlpod0FBQUFBQUFBRUFBQURRQ0FBQUFnUUFBSmhFQUFCb2h3QUF3RVFBQUl5WUFBRG9DQUFBQUFBQUFKaEVBQUNlbUFBQXdFUUFBTldhQUFEb0NBQUFBQUFBQU1CRUFBRDhtZ0FBNkFnQUFBQUFBQURBUkFBQWhMd0FBT2dJQUFBQUFBQUFaRVVBQU52REFBQUFBQUFBQVFBQUFKZ0ZBQUFBQUFBQVpFVUFBSnpEQUFBQUFBQUFBUUFBQUpnRkFBQUFBQUFBbUVRQUFIM0RBQUNZUkFBQVhzTUFBSmhFQUFBL3d3QUFtRVFBQUNEREFBQ1lSQUFBQWNNQUFKaEVBQURpd2dBQW1FUUFBTVBDQUFDWVJBQUFwTUlBQUpoRUFBQ0Z3Z0FBbUVRQUFHYkNBQUNZUkFBQVI4SUFBSmhFQUFBb3dnQUF3RVFBQUNqUEFBREFDUUFBQUFBQUFKaEVBQUFXendBQXdFUUFBRkxQQUFEQUNRQUFBQUFBQUpoRUFBQjh6d0FBbUVRQUFLM1BBQUJrUlFBQTNzOEFBQUFBQUFBQkFBQUFzQWtBQUFQMC8vOWtSUUFBRGRBQUFBQUFBQUFCQUFBQXlBa0FBQVAwLy85a1JRQUFQTkFBQUFBQUFBQUJBQUFBc0FrQUFBUDAvLzlrUlFBQWE5QUFBQUFBQUFBQkFBQUF5QWtBQUFQMC8vOWtSUUFBbXRBQUFBTUFBQUFDQUFBQTZBa0FBQUlBQUFBWUNnQUFBZ2dBQUF3QUFBQUFBQUFBNkFrQUFCY0FBQUFZQUFBQTlQLy8vL1QvLy8vb0NRQUFHUUFBQUJvQUFBREFSQUFBeXRBQUFPQUpBQUFBQUFBQXdFUUFBT1BRQUFEWUNRQUFBQUFBQU1CRUFBQWkwUUFBNEFrQUFBQUFBQURBUkFBQU90RUFBTmdKQUFBQUFBQUF3RVFBQUZMUkFBRGdDZ0FBQUFBQUFNQkVBQUJtMFFBQU1BOEFBQUFBQUFEQVJBQUFmTkVBQU9BS0FBQUFBQUFBWkVVQUFMYlJBQUFBQUFBQUFnQUFBT0FLQUFBQ0FBQUFJQXNBQUFBQUFBQmtSUUFBK3RFQUFBQUFBQUFCQUFBQU9Bc0FBQUFBQUFDWVJBQUFFTklBQUdSRkFBQXAwZ0FBQUFBQUFBSUFBQURnQ2dBQUFnQUFBR0FMQUFBQUFBQUFaRVVBQUczU0FBQUFBQUFBQVFBQUFEZ0xBQUFBQUFBQVpFVUFBSmJTQUFBQUFBQUFBZ0FBQU9BS0FBQUNBQUFBbUFzQUFBQUFBQUJrUlFBQTJ0SUFBQUFBQUFBQkFBQUFzQXNBQUFBQUFBQ1lSQUFBOE5JQUFHUkZBQUFKMHdBQUFBQUFBQUlBQUFEZ0NnQUFBZ0FBQU5nTEFBQUFBQUFBWkVVQUFFM1RBQUFBQUFBQUFRQUFBTEFMQUFBQUFBQUFaRVVBQUtQVUFBQUFBQUFBQXdBQUFPQUtBQUFDQUFBQUdBd0FBQUlBQUFBZ0RBQUFBQWdBQUpoRUFBQUsxUUFBbUVRQUFPalVBQUJrUlFBQUhkVUFBQUFBQUFBREFBQUE0QW9BQUFJQUFBQVlEQUFBQWdBQUFGQU1BQUFBQ0FBQW1FUUFBR0xWQUFCa1JRQUFoTlVBQUFBQUFBQUNBQUFBNEFvQUFBSUFBQUI0REFBQUFBZ0FBSmhFQUFESjFRQUFaRVVBQU43VkFBQUFBQUFBQWdBQUFPQUtBQUFDQUFBQWVBd0FBQUFJQUFCa1JRQUFJOVlBQUFBQUFBQUNBQUFBNEFvQUFBSUFBQURBREFBQUFnQUFBSmhFQUFBLzFnQUFaRVVBQUZUV0FBQUFBQUFBQWdBQUFPQUtBQUFDQUFBQXdBd0FBQUlBQUFCa1JRQUFjTllBQUFBQUFBQUNBQUFBNEFvQUFBSUFBQURBREFBQUFnQUFBR1JGQUFDTTFnQUFBQUFBQUFJQUFBRGdDZ0FBQWdBQUFNQU1BQUFDQUFBQVpFVUFBTGZXQUFBQUFBQUFBZ0FBQU9BS0FBQUNBQUFBU0EwQUFBQUFBQUNZUkFBQS9kWUFBR1JGQUFBaDF3QUFBQUFBQUFJQUFBRGdDZ0FBQWdBQUFIQU5BQUFBQUFBQW1FUUFBR2ZYQUFCa1JRQUFodGNBQUFBQUFBQUNBQUFBNEFvQUFBSUFBQUNZRFFBQUFBQUFBSmhFQUFETTF3QUFaRVVBQU9YWEFBQUFBQUFBQWdBQUFPQUtBQUFDQUFBQXdBMEFBQUFBQUFDWVJBQUFLOWdBQUdSRkFBQkUyQUFBQUFBQUFBSUFBQURnQ2dBQUFnQUFBT2dOQUFBQ0FBQUFtRVFBQUZuWUFBQmtSUUFBOE5nQUFBQUFBQUFDQUFBQTRBb0FBQUlBQUFEb0RRQUFBZ0FBQU1CRUFBQngyQUFBSUE0QUFBQUFBQUJrUlFBQWxOZ0FBQUFBQUFBQ0FBQUE0QW9BQUFJQUFBQkFEZ0FBQWdBQUFKaEVBQUMzMkFBQXdFUUFBTTdZQUFBZ0RnQUFBQUFBQUdSRkFBQUYyUUFBQUFBQUFBSUFBQURnQ2dBQUFnQUFBRUFPQUFBQ0FBQUFaRVVBQUNmWkFBQUFBQUFBQWdBQUFPQUtBQUFDQUFBQVFBNEFBQUlBQUFCa1JRQUFTZGtBQUFBQUFBQUNBQUFBNEFvQUFBSUFBQUJBRGdBQUFnQUFBTUJFQUFCczJRQUE0QW9BQUFBQUFBQmtSUUFBZ3RrQUFBQUFBQUFDQUFBQTRBb0FBQUlBQUFEb0RnQUFBZ0FBQUpoRUFBQ1UyUUFBWkVVQUFLblpBQUFBQUFBQUFnQUFBT0FLQUFBQ0FBQUE2QTRBQUFJQUFBREFSQUFBeHRrQUFPQUtBQUFBQUFBQXdFUUFBTnZaQUFEZ0NnQUFBQUFBQUpoRUFBRHcyUUFBWkVVQUFBbmFBQUFBQUFBQUFRQUFBREFQQUFBQUFBQUF3RVFBQURUYUFBQmdEd0FBQUFBQUFKaEVBQURjMmdBQXdFUUFBRHpiQUFCNER3QUFBQUFBQU1CRUFBRHAyZ0FBaUE4QUFBQUFBQUNZUkFBQUN0c0FBTUJFQUFBWDJ3QUFhQThBQUFBQUFBREFSQUFBSHR3QUFHQVBBQUFBQUFBQXdFUUFBQzdjQUFDZ0R3QUFBQUFBQU1CRUFBQmozQUFBZUE4QUFBQUFBQURBUkFBQVA5d0FBTUFQQUFBQUFBQUF3RVFBQUlYY0FBQjREd0FBQUFBQUFCQkZBQUN0M0FBQUVFVUFBSy9jQUFBUVJRQUFzdHdBQUJCRkFBQzAzQUFBRUVVQUFMYmNBQUFRUlFBQXVOd0FBQkJGQUFDNjNBQUFFRVVBQUx6Y0FBQVFSUUFBdnR3QUFCQkZBQURBM0FBQUVFVUFBSlRTQUFBUVJRQUF3dHdBQUJCRkFBREUzQUFBRUVVQUFNYmNBQURBUkFBQXlOd0FBSGdQQUFBQUFBQUF3RVFBQU9uY0FBQm9Ed0FBQUFBQUFBQUFBQUJJQUFBQUFRQUFBQUlBQUFBQkFBQUFBUUFBQUFJQUFBQURBQUFBQUFBQUFGZ0FBQUFEQUFBQUJBQUFBQUVBQUFEUUVBQUFKQUVBQURnQkFBRGtFQUFBT0FBQUFBQUFBQUJ3QUFBQUJRQUFBQVlBQUFESS8vLy95UC8vLzNBQUFBQUhBQUFBQ0FBQUFBQUFBQUJnQUFBQUNRQUFBQW9BQUFBQkFBQUFCQUFBQUFFQUFBQUJBQUFBQWdBQUFBTUFBQUFGQUFBQUJBQUFBQVVBQUFBQkFBQUFCZ0FBQUFJQUFBQUFBQUFBZ0FBQUFBc0FBQUFNQUFBQUFnQUFBQU1BQUFBTkFBQUFCQUFBQUFBQUFBQ1FBQUFBRGdBQUFBOEFBQUFGQUFBQUJnQUFBQTBBQUFBSEFBQUFBQUFBQUtBQUFBQUxBQUFBRUFBQUFBZ0FBQUFEQUFBQURRQUFBQWtBQUFCQUFBQUFBQUFBQUVBQkFBQVJBQUFBRWdBQUFEZ0FBQUQ0Ly8vL1FBRUFBQk1BQUFBVUFBQUF3UC8vLzhELy8vOUFBUUFBRlFBQUFCWUFBQUNZRVFBQTVBQUFBTHdBQUFEUUFBQUFKQUVBQURnQkFBQU1BUUFBK0FBQUFNQVJBQUNzRVFBQUFBQUFBSmdFQUFBbEFBQUFKZ0FBQUNjQUFBQURBQUFBS0FBQUFBQUFBQUNJQkFBQUtRQUFBQ29BQUFBckFBQUFBd0FBQUN3QUFBQUFBQUFBZUFRQUFDMEFBQUF1QUFBQUx3QUFBQU1BQUFBd0FBQUFBQUFBQUdnRUFBQXhBQUFBTWdBQUFBb0FBQUFMQUFBQURRQUFBQXdBQUFBQUFBQUFXQVFBQURNQUFBQTBBQUFBTlFBQUFBTUFBQUEyQUFBQUFBQUFBRWdFQUFBTEFBQUFOd0FBQUEwQUFBQU9BQUFBT0FBQUFBOEFBQUFBQUFBQU9BUUFBRGtBQUFBNkFBQUFPd0FBQUFNQUFBQThBQUFBQUFBQUFDZ0VBQUE5QUFBQVBnQUFBQkFBQUFBUkFBQUFQd0FBQUJJQUFBQUFBQUFBR0FRQUFFQUFBQUJCQUFBQVFnQUFBQU1BQUFCREFBQUFBQUFBQUFnRUFBQUxBQUFBUkFBQUFCTUFBQUFVQUFBQVJRQUFBQlVBQUFBQUFBQUErQU1BQUVZQUFBQkhBQUFBU0FBQUFBTUFBQUJKQUFBQUFBQUFBT2dEQUFCS0FBQUFTd0FBQUJZQUFBQVhBQUFBVEFBQUFCZ0FBQUFBQUFBQTJBTUFBRTBBQUFCT0FBQUFUd0FBQUFNQUFBQlFBQUFBQUFBQUFNZ0RBQUFMQUFBQVVRQUFBQmtBQUFBREFBQUFEUUFBQUJvQUFBQUFBQUFBdUFNQUFGSUFBQUJUQUFBQVZBQUFBQU1BQUFCVkFBQUFBQUFBQUtnREFBQUxBQUFBVmdBQUFCc0FBQUFEQUFBQURRQUFBQndBQUFBQUFBQUFtQU1BQUZjQUFBQllBQUFBV1FBQUFBTUFBQUJhQUFBQUFBQUFBSWdEQUFCYkFBQUFYQUFBQUIwQUFBQWVBQUFBWFFBQUFCOEFBQUFBQUFBQWVBTUFBRjRBQUFCZkFBQUFZQUFBQUFNQUFBQmhBQUFBQUFBQUFHZ0RBQUFMQUFBQVlnQUFBQ0FBQUFBaEFBQUFEUUFBQUNJQUFBQUFBQUFBV0FNQUFHTUFBQUJrQUFBQVpRQUFBQU1BQUFCbUFBQUFBQUFBQUVnREFBQm5BQUFBYUFBQUFDTUFBQUFrQUFBQURRQUFBQ1VBQUFBQUFBQUFPQU1BQUdrQUFBQnFBQUFBYXdBQUFBTUFBQUJzQUFBQUFBQUFBQ2dEQUFBTEFBQUFiUUFBQUNZQUFBQURBQUFBRFFBQUFDY0FBQUFBQUFBQUdBTUFBRzRBQUFCdkFBQUFjQUFBQUFNQUFBQnhBQUFBQUFBQUFBZ0RBQUFMQUFBQWNnQUFBQ2dBQUFBREFBQUFEUUFBQUNrQUFBQUFBQUFBK0FJQUFITUFBQUIwQUFBQWRRQUFBQU1BQUFCMkFBQUFBQUFBQU9nQ0FBQUxBQUFBZHdBQUFDb0FBQUFyQUFBQURRQUFBQ3dBQUFBQUFBQUEyQUlBQUhnQUFBQjVBQUFBZWdBQUFBTUFBQUI3QUFBQUFBQUFBTWdDQUFCOEFBQUFmUUFBQUMwQUFBQXVBQUFBZmdBQUFDOEFBQUFBQUFBQXVBSUFBSDhBQUFDQUFBQUFnUUFBQUFNQUFBQ0NBQUFBQUFBQUFLZ0NBQUNEQUFBQWhBQUFBREFBQUFBeEFBQUFEUUFBQURJQUFBQUFBQUFBbUFJQUFJVUFBQUNHQUFBQWh3QUFBQU1BQUFDSUFBQUFBQUFBQUlnQ0FBQ0pBQUFBaWdBQUFETUFBQUEwQUFBQURRQUFBRFVBQUFBQUFBQUFlQUlBQUlzQUFBQ01BQUFBalFBQUFBTUFBQUNPQUFBQUFBQUFBR2dDQUFDUEFBQUFrQUFBQURZQUFBQTNBQUFBRFFBQUFEZ0FBQUFBQUFBQVdBSUFBSkVBQUFDU0FBQUFrd0FBQUFNQUFBQ1VBQUFBQUFBQUFFZ0NBQUNWQUFBQWxnQUFBRGtBQUFBREFBQUFEUUFBQURvQUFBQUFBQUFBT0FJQUFKY0FBQUNZQUFBQW1RQUFBQU1BQUFDYUFBQUFBQUFBQUNnQ0FBQUxBQUFBbXdBQUFEc0FBQUFEQUFBQURRQUFBRHdBQUFBQUFBQUFHQUlBQUp3QUFBQ2RBQUFBbmdBQUFBTUFBQUNmQUFBQUFBQUFBQWdDQUFBTEFBQUFvQUFBQUQwQUFBQURBQUFBRFFBQUFENEFBQUFBQUFBQStBRUFBS0VBQUFDaUFBQUFvd0FBQUFNQUFBQ2tBQUFBQUFBQUFPZ0JBQUNsQUFBQXBnQUFBRDhBQUFBREFBQUFEUUFBQUVBQUFBQUFBQUFBMkFFQUFLY0FBQUNvQUFBQXFRQUFBQU1BQUFDcUFBQUFBQUFBQUlBQkFBQ3JBQUFBckFBQUFFRUFBQUJDQUFBQURRQUFBRU1BQUFBQUFBQUFjQUVBQUswQUFBQ3VBQUFBcndBQUFBTUFBQUN3QUFBQUFBQUFBR0FCQUFDeEFBQUFzZ0FBQUVRQUFBQkZBQUFBRFFBQUFFWUFBQUFBQUFBQVVBRUFBTE1BQUFDMEFBQUF0UUFBQUFNQUFBQzJBQUFBQUFBQUFNZ0JBQUMzQUFBQXVBQUFBTGtBQUFBREFBQUF1Z0FBQUFBQUFBQzRBUUFBdXdBQUFMd0FBQUFHQUFBQVJ3QUFBRWdBQUFBQUFBQUFxQUVBQUwwQUFBQytBQUFBdndBQUFBTUFBQURBQUFBQUFBQUFBSkFCQUFEQkFBQUF3Z0FBQUFjQUFBQkpBQUFBU2dBQUFLTmRBQUFBQUFBQXFBUUFBTU1BQUFERUFBQUF4UUFBQUFNQUFBREdBQUFBQUFBQUFMZ0VBQURIQUFBQXlBQUFBTWtBQUFBREFBQUF5Z0FBQUFNQUFBQUVBQUFBQlFBQUFBWUFBQUNBQlFBQU9CQUFBQUFGQUFEd0R3QUFBQVVBQUhBRkFBQUFCUUFBZ0FVQUFEQVFBQUFBQlFBQWVBVUFBQUFGQUFCNEJRQUFBQVVBQURnUUFBQjRCUUFBS0FVQUFPZ0VBQURnQkFBQThBOEFBRGdGQUFBQUFBQUFvQVVBQU1zQUFBRE1BQUFBelFBQUFBTUFBQURPQUFBQUFBQUFBTEFGQUFEUEFBQUEwQUFBQU5FQUFBQURBQUFBMGdBQUFBQUFBQUFBQmdBQTB3QUFBTlFBQUFEVkFBQUFBd0FBQU5ZQUFBQUFBQUFBNkFVQUFOY0FBQURZQUFBQTJRQUFBQU1BQUFEYUFBQUFBQUFBQUJBR0FBRGJBQUFBM0FBQUFOMEFBQUFEQUFBQTNnQUFBQUFBQUFESUJRQUEzd0FBQU9BQUFBQUFBQUFBSUFZQUFPRUFBQURpQUFBQUFRQUFBQUlBQUFBQUFBQUFPQVlBQU9FQUFBRGpBQUFBQXdBQUFBUUFBQUFBQUFBQVNBWUFBT0VBQUFEa0FBQUFCUUFBQUFZQUFBQUFBQUFBV0FZQUFPRUFBQURsQUFBQUJ3QUFBQWdBQUFBQUFBQUFhQVlBQU9FQUFBRG1BQUFBQ1FBQUFBb0FBQUFBQUFBQWVBWUFBT0VBQUFEbkFBQUFDd0FBQUF3QUFBQUFBQUFBaUFZQUFPRUFBQURvQUFBQURRQUFBQTRBQUFBQUFBQUFtQVlBQU9FQUFBRHBBQUFBRHdBQUFCQUFBQUFBQUFBQXFBWUFBT0VBQUFEcUFBQUFFUUFBQUJJQUFBQUFBQUFBdUFZQUFPRUFBQURyQUFBQUV3QUFBQlFBQUFBQUFBQUF5QVlBQU9FQUFBRHNBQUFBRlFBQUFCWUFBQUFBQUFBQTJBWUFBT0VBQUFEdEFBQUFGd0FBQUJnQUFBQUFBQUFBNkFZQUFPRUFBQUR1QUFBQUdRQUFBQm9BQUFBQUFBQUFBUUFBQUFJQUFBQURBQUFBQkFBQUFBVUFBQUFHQUFBQUFBQUFBUGdHQUFEaEFBQUE3d0FBQUJzQUFBQWNBQUFBQUFBQUFBRUFBQUFDQUFBQUF3QUFBQVFBQUFBRkFBQUFCZ0FBQUFBQUFBQUlCd0FBNFFBQUFQQUFBQUFkQUFBQUhnQUFBQUFBQUFBWUJ3QUE0UUFBQVBFQUFBQWZBQUFBSUFBQUFBQUFBQUNZQ0FBQThnQUFBUE1BQUFEMEFBQUFBd0FBQVBVQUFBQUFBQUFBaUFnQUFQWUFBQUQzQUFBQStBQUFBQU1BQUFENUFBQUFBQUFBQUhnSUFBRGhBQUFBK2dBQUFDRUFBQUFpQUFBQUFBQUFBR2dJQUFEN0FBQUEvQUFBQVAwQUFBQURBQUFBL2dBQUFBQUFBQUJZQ0FBQTRRQUFBUDhBQUFBakFBQUFKQUFBQUFBQUFBQklDQUFBQUFFQUFBRUJBQUFDQVFBQUF3QUFBQU1CQUFBQUFBQUFPQWdBQUFRQkFBQUZBUUFBQmdFQUFBTUFBQUFIQVFBQUFBQUFBQ2dJQUFBSUFRQUFDUUVBQUFvQkFBQURBQUFBQ3dFQUFBQUFBQUFZQ0FBQURBRUFBQTBCQUFBT0FRQUFBd0FBQUE4QkFBQUFBQUFBQ0FnQUFCQUJBQUFSQVFBQUVnRUFBQU1BQUFBVEFRQUFBQUFBQVBnSEFBQVVBUUFBRlFFQUFCWUJBQUFEQUFBQUZ3RUFBQUFBQUFEb0J3QUFHQUVBQUJrQkFBQWFBUUFBQXdBQUFCc0JBQUFBQUFBQTJBY0FBQndCQUFBZEFRQUFIZ0VBQUFNQUFBQWZBUUFBQUFBQUFNZ0hBQUFnQVFBQUlRRUFBQ0lCQUFBREFBQUFJd0VBQUFBQUFBQzRCd0FBSkFFQUFDVUJBQUFtQVFBQUF3QUFBQ2NCQUFBQUFBQUFxQWNBQUNnQkFBQXBBUUFBS2dFQUFBTUFBQUFyQVFBQUFBQUFBSmdIQUFBc0FRQUFMUUVBQUM0QkFBQURBQUFBTHdFQUFBQUFBQUNJQndBQTRRQUFBREFCQUFBbEFBQUFKZ0FBQUFBQUFBQjRCd0FBTVFFQUFESUJBQUF6QVFBQUF3QUFBRFFCQUFBQUFBQUFhQWNBQU9FQUFBQTFBUUFBSndBQUFDZ0FBQUFBQUFBQVdBY0FBRFlCQUFBM0FRQUFPQUVBQUFNQUFBQTVBUUFBQUFBQUFFZ0hBQUE2QVFBQU93RUFBRHdCQUFBREFBQUFQUUVBQUFBQUFBQTRCd0FBUGdFQUFEOEJBQUJBQVFBQUF3QUFBRUVCQUFBQUFBQUFLQWNBQUVJQkFBQkRBUUFBUkFFQUFBTUFBQUJGQVFBQUFRQUFBQUVBQUFBQkFBQUFBZ0FBQUFnQUFBQUNBQUFBUmdFQUFBSUFBQUJMQUFBQUFBQUFBQUFBQUFCYmhnQUFBQUFBQUFFQUFBQUNBQUFBQkFBQUFMc0xBQUNLaGdBQUJ3QUFBSUVBQUFBck53RUFCZ0FBQUFBQUFBQmpoZ0FBQndBQUFHUUFBQUFyTndFQUFBQUFBS2dJQUFCSEFRQUFTQUVBQUFRQUFBQUZBQUFBQUFBQUFMZ0lBQUJKQVFBQVNnRUFBQU1BQUFBREFBQUFBUUFBQUV3QUFBQUFBQUFBMkFnQUFFc0JBQUJNQVFBQVRRRUFBQU1BQUFBNTd3QUFpd1FCQUpNRUFRQ3pCQUVBTXdVQkFETUhBUUFBQUFBQU9lOEFBT1A1QUFEcitRQUFDL29BQUl2NkFBQ0wvQUFBQUFBQUFEbnZBQUE3N3dBQVErOEFBR1B2QUFEajd3QUE0L0VBQUFBQUFBQUFBQUFBQUFBQUFETVBBUUJURHdFQTB3OEJBTk1SQVFBQUFBQUFBQUFBQU5NWkFRRHpHUUVBY3hvQkFITWNBUUFBQUFBQUFBQUFBSE1rQVFDVEpBRUFFeVVCQUJNbkFRQUFBQUFBOEFnQUFFc0JBQUJPQVFBQVR3RUFBQVFBQUFBQUFBQUFHZ0FBQUFvQUFBQUJBQUFBQUFBQUFBQUpBQUJMQVFBQVVBRUFBRkVCQUFBRkFBQUEvLy8vL3dJQUFBQUNBQUFBQVFBQUFQLy8vLzhDQUFBQUFRQUFBQUVBQUFBZEFBQUFIZ0FBQUI4QUFBQWdBQUFBSVFBQUFDRUFBQUFpQUFBQUlnQUFBQ01BQUFBakFBQUFKQUFBQUNRQUFBQWxBQUFBS0FBQUFDMEFBQUF6QUFBQU9RQUFBRUFBQUFCSUFBQUF4UUFBQUxrQUFBREpBQUFBeFFBQUFMa0FBQURKQUFBQWJnQUFBSm9BQUFCNkFBQUFpUUFBQUlzQUFBQ05BQUFBblFBQUFHc0FBQUNMQUFBQWZnQUFBR3NBQUFDTEFBQUFmZ0FBQUQ4QUFBQ1lBQUFBbUFBQUFHOEFBQUNOQUFBQW1RQUFBRzhBQUFCYkFBQUFxd0FBQUlZQUFBQ05BQUFBZVFBQUFJd0FBQUE5QUFBQW1nQUFBSGtBQUFDTUFBQUFQUUFBQUpvQUFBQnZBQUFBYndBQUFIMEFBQUJ1QUFBQWJnQUFBRjRBQUFCOEFBQUFiQUFBQUh3QUFBQnJBQUFBZlFBQUFJMEFBQUN6QUFBQW1RQUFBSDBBQUFCckFBQUFmUUFBQUkwQUFBQ3pBQUFBbVFBQUFIMEFBQUJyQUFBQWZRQUFBSTBBQUFDekFBQUFtUUFBQUgwQUFBQ01BQUFBaXdBQUFMWUFBQUMyQUFBQW1BQUFBSWdBQUFDWUFBQUFpQUFBQUprQUFBQ0lBQUFBaXdBQUFHOEFBQUNJQUFBQWl3QUFBRzhBQUFDYkFBQUFtZ0FBQUlzQUFBQ1pBQUFBaXdBQUFIc0FBQUI3QUFBQVB3QUFBSmtBQUFDbUFBQUF0d0FBQUl3QUFBQ0lBQUFBbVFBQUFKb0FBQUNtQUFBQXR3QUFBSXdBQUFDSUFBQUFtUUFBQUpvQUFBQ21BQUFBdHdBQUFJd0FBQUNJQUFBQW1RQUFBSm9BQUFDcUFBQUFtUUFBQUhzQUFBQjdBQUFBYXdBQUFIa0FBQUJyQUFBQWVRQUFBS2NBQUFDWEFBQUF0d0FBQUl3QUFBQ1hBQUFBdHdBQUFJd0FBQUNxQUFBQW1nQUFBSXNBQUFDWkFBQUFpd0FBQUhzQUFBQjdBQUFBUHdBQUFId0FBQUNtQUFBQXR3QUFBSXdBQUFDSUFBQUFtUUFBQUpvQUFBQ21BQUFBdHdBQUFJd0FBQUNJQUFBQW1RQUFBSm9BQUFDbUFBQUF0d0FBQUl3QUFBQ0lBQUFBbVFBQUFKb0FBQUNxQUFBQW1RQUFBSW9BQUFDS0FBQUFlZ0FBQUhrQUFBQjZBQUFBZVFBQUFLY0FBQUNYQUFBQXR3QUFBSXdBQUFDWEFBQUF0d0FBQUl3QUFBQ05BQUFBYndBQUFJd0FBQUNNQUFBQWpBQUFBSXdBQUFDS0FBQUFtUUFBQUlnQUFBQ25BQUFBbUFBQUFKZ0FBQUJyQUFBQXB3QUFBRnNBQUFCNkFBQUFhd0FBQUtjQUFBQnJBQUFBcHdBQUFGc0FBQUJyQUFBQWF3QUFBS2NBQUFDWkFBQUFtUUFBQUprQUFBRElBQUFBdVFBQUFLQUFBQUNhQUFBQW1nQUFBSm9BQUFDTUFBQUFYQUFBQUlrQUFBQ0tBQUFBakFBQUFKZ0FBQUNLQUFBQWl3QUFBSmtBQUFCS0FBQUFsUUFBQUZ3QUFBQ0xBQUFBYXdBQUFIb0FBQUNZQUFBQWpBQUFBTE1BQUFDbUFBQUF0Z0FBQUl3QUFBRGpBQUFBZWdBQUFNVUFBQUNhQUFBQXhBQUFBTVFBQUFDbkFBQUFtZ0FBQUpnQUFBQ25BQUFBdGdBQUFMWUFBQUNHQUFBQWxRQUFBSWdBQUFDWkFBQUFlUUFBQUlnQUFBQ0pBQUFBcVFBQUFNSUFBQUNtQUFBQXB3QUFBSm9BQUFDbkFBQUFpUUFBQUxZQUFBQ2FBQUFBeEFBQUFLY0FBQUNuQUFBQW1nQUFBSmdBQUFDbkFBQUF0Z0FBQUxZQUFBQ0dBQUFBbFFBQUFJZ0FBQUNaQUFBQWVRQUFBSWdBQUFCNkFBQUFxUUFBQU5BQUFBQ21BQUFBcHdBQUFKb0FBQUNZQUFBQXB3QUFBTFlBQUFCdUFBQUFiZ0FBQUh3QUFBQjlBQUFBakFBQUFKa0FBQUI5QUFBQWZ3QUFBSXdBQUFCdEFBQUFid0FBQUk4QUFBQi9BQUFBYndBQUFFOEFBQUJzQUFBQWV3QUFBRDhBQUFCOUFBQUFiZ0FBQUY0QUFBQnVBQUFBWHdBQUFFOEFBQUI5QUFBQWJ3QUFBRzRBQUFCT0FBQUFiZ0FBQUc4QUFBQnZBQUFBWHdBQUFGNEFBQUJzQUFBQWV3QUFBR3dBQUFCOUFBQUFiZ0FBQUh3QUFBQnVBQUFBWHdBQUFGNEFBQUI5QUFBQWJ3QUFBRzhBQUFCUEFBQUFmUUFBQUg0QUFBQnZBQUFBYndBQUFFOEFBQUJzQUFBQWV3QUFBRjBBQUFDWkFBQUFpZ0FBQUlvQUFBQjhBQUFBaWdBQUFGNEFBQURnQUFBQXB3QUFBSG9BQUFCZUFBQUFpZ0FBQUxZQUFBQ2FBQUFBbFFBQUFHc0FBQUNuQUFBQW1nQUFBSlVBQUFCY0FBQUFwd0FBQUpvQUFBQzRBQUFBbWdBQUFMY0FBQUM0QUFBQW1nQUFBSXNBQUFDYUFBQUFtZ0FBQUpvQUFBQ0xBQUFBbWdBQUFKb0FBQUNNQUFBQXhnQUFBS2tBQUFER0FBQUFsUUFBQUlZQUFBQUFBQUFBRUFrQUFFc0JBQUJTQVFBQVV3RUFBQVlBQUFBQUFBQUFBQUFBQUNBQUFBQWFBQUFBRlFBQUFCRUFBQUFOQUFBQUNRQUFBQVVBQUFBQ0FBQUFBQUFBQVA3Ly8vLzcvLy8vOS8vLy8vUC8vLy92Ly8vLzYvLy8vK2IvLy8vZy8vLy81di8vLyt2Ly8vL3YvLy8vOC8vLy8vZi8vLy83Ly8vLy92Ly8vd0FBQUFBQ0FBQUFCUUFBQUFrQUFBQU5BQUFBRVFBQUFCVUFBQUFhQUFBQUlBQUFBQUR3Ly8rYStmLy9jdnovLzRyOS8vOGUvdi8vZXY3Ly84WCsvLzhBLy8vL3hmNy8vM3IrLy84ZS92Ly9pdjMvLzNMOC8vK2ErZi8vQVBELy93QUFBQUFEQUFBQUF3QUFBQUlBQUFBQUFBQUFBd0FBQUFRQUFBQUVBQUFBQUFBQUFBRUFBQUFBQUFBQUFnQUFBQUVBQUFBQ0FBQUFBQUFBQUFNQUFBQUJBQUFBQXdBQUFBSUFBQUFEQUFBQUFRQUFBQUFBQUFBQ0FBQUFBQUFBQUFJQUFBQUJBQUFBQXdBQUFBQUFBQUFEQUFBQUFRQUFBQU1BQUFBQ0FBQUFBZ0FBd0FNQUFNQUVBQURBQlFBQXdBWUFBTUFIQUFEQUNBQUF3QWtBQU1BS0FBREFDd0FBd0F3QUFNQU5BQURBRGdBQXdBOEFBTUFRQUFEQUVRQUF3QklBQU1BVEFBREFGQUFBd0JVQUFNQVdBQURBRndBQXdCZ0FBTUFaQUFEQUdnQUF3QnNBQU1BY0FBREFIUUFBd0I0QUFNQWZBQURBQUFBQXN3RUFBTU1DQUFEREF3QUF3d1FBQU1NRkFBRERCZ0FBd3djQUFNTUlBQUREQ1FBQXd3b0FBTU1MQUFERERBQUF3dzBBQU5NT0FBREREd0FBd3dBQURMc0JBQXpEQWdBTXd3TUFETU1FQUF6VGtDY0FBQlFBQUFCRExsVlVSaTA0QUFBQUFBQUFBQUFBQUFBQUFONFNCSlVBQUFBQS8vLy8vLy8vLy8vLy8vLy9kQ2NBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQXdDY0FBQVVBQUFBQUFBQUFBQUFBQUFrQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWNBQUFBSUFBQUFHeThCQUFBRUFBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFyLy8vLy9BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFQamlBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUF3Q2NBQURncEFBQUpBQUFBQUFBQUFBQUFBQUFKQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFrQUFBQUFBQUFBQ0FBQUFDTXpBUUFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBLy8vLy93QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQXVDa0FBQVVBQUFBQUFBQUFBQUFBQUFrQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQW9BQUFBSUFBQUFLemNCQUFBQUFBQUFBQUFBQUFBQUFBSUFBQUFBQUFBQUFBQUFBQUFBQVAvLy8vLy9BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUxBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUQvLy8vLy93QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQXpFWUFBTGdzQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBQUFBQWdBQUFBTUFBQUFFQUFBQUJRQUFBQVlBQUFBSEFBQUFDQUFBQUFrQUFBQUtBQUFBQ3dBQUFBd0FBQUFOQUFBQURnQUFBQThBQUFBUUFBQUFFUUFBQUJJQUFBQVRBQUFBRkFBQUFCVUFBQUFXQUFBQUZ3QUFBQmdBQUFBWkFBQUFHZ0FBQUJzQUFBQWNBQUFBSFFBQUFCNEFBQUFmQUFBQUlBQUFBQ0VBQUFBaUFBQUFJd0FBQUNRQUFBQWxBQUFBSmdBQUFDY0FBQUFvQUFBQUtRQUFBQ29BQUFBckFBQUFMQUFBQUMwQUFBQXVBQUFBTHdBQUFEQUFBQUF4QUFBQU1nQUFBRE1BQUFBMEFBQUFOUUFBQURZQUFBQTNBQUFBT0FBQUFEa0FBQUE2QUFBQU93QUFBRHdBQUFBOUFBQUFQZ0FBQUQ4QUFBQkFBQUFBUVFBQUFFSUFBQUJEQUFBQVJBQUFBRVVBQUFCR0FBQUFSd0FBQUVnQUFBQkpBQUFBU2dBQUFFc0FBQUJNQUFBQVRRQUFBRTRBQUFCUEFBQUFVQUFBQUZFQUFBQlNBQUFBVXdBQUFGUUFBQUJWQUFBQVZnQUFBRmNBQUFCWUFBQUFXUUFBQUZvQUFBQmJBQUFBWEFBQUFGMEFBQUJlQUFBQVh3QUFBR0FBQUFCQkFBQUFRZ0FBQUVNQUFBQkVBQUFBUlFBQUFFWUFBQUJIQUFBQVNBQUFBRWtBQUFCS0FBQUFTd0FBQUV3QUFBQk5BQUFBVGdBQUFFOEFBQUJRQUFBQVVRQUFBRklBQUFCVEFBQUFWQUFBQUZVQUFBQldBQUFBVndBQUFGZ0FBQUJaQUFBQVdnQUFBSHNBQUFCOEFBQUFmUUFBQUg0QUFBQi9BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUM4TWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUFBQUFJQUFBQURBQUFBQkFBQUFBVUFBQUFHQUFBQUJ3QUFBQWdBQUFBSkFBQUFDZ0FBQUFzQUFBQU1BQUFBRFFBQUFBNEFBQUFQQUFBQUVBQUFBQkVBQUFBU0FBQUFFd0FBQUJRQUFBQVZBQUFBRmdBQUFCY0FBQUFZQUFBQUdRQUFBQm9BQUFBYkFBQUFIQUFBQUIwQUFBQWVBQUFBSHdBQUFDQUFBQUFoQUFBQUlnQUFBQ01BQUFBa0FBQUFKUUFBQUNZQUFBQW5BQUFBS0FBQUFDa0FBQUFxQUFBQUt3QUFBQ3dBQUFBdEFBQUFMZ0FBQUM4QUFBQXdBQUFBTVFBQUFESUFBQUF6QUFBQU5BQUFBRFVBQUFBMkFBQUFOd0FBQURnQUFBQTVBQUFBT2dBQUFEc0FBQUE4QUFBQVBRQUFBRDRBQUFBL0FBQUFRQUFBQUdFQUFBQmlBQUFBWXdBQUFHUUFBQUJsQUFBQVpnQUFBR2NBQUFCb0FBQUFhUUFBQUdvQUFBQnJBQUFBYkFBQUFHMEFBQUJ1QUFBQWJ3QUFBSEFBQUFCeEFBQUFjZ0FBQUhNQUFBQjBBQUFBZFFBQUFIWUFBQUIzQUFBQWVBQUFBSGtBQUFCNkFBQUFXd0FBQUZ3QUFBQmRBQUFBWGdBQUFGOEFBQUJnQUFBQVlRQUFBR0lBQUFCakFBQUFaQUFBQUdVQUFBQm1BQUFBWndBQUFHZ0FBQUJwQUFBQWFnQUFBR3NBQUFCc0FBQUFiUUFBQUc0QUFBQnZBQUFBY0FBQUFIRUFBQUJ5QUFBQWN3QUFBSFFBQUFCMUFBQUFkZ0FBQUhjQUFBQjRBQUFBZVFBQUFIb0FBQUI3QUFBQWZBQUFBSDBBQUFCK0FBQUFmd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ2dBQUFHUUFBQURvQXdBQUVDY0FBS0NHQVFCQVFnOEFnSmFZQUFEaDlRVmZjSWtBL3drdkR3QUFBQURBQ1FBQVZBRUFBRlVCQUFBQUFBQUEyQWtBQUZZQkFBQlhBUUFBQVFBQUFBUUFBQUFDQUFBQUF3QUFBQUlBQUFBREFBQUFCUUFBQUFvQUFBQUZBQUFBQmdBQUFBWUFBQUFIQUFBQUFBQUFBT0FKQUFCWUFRQUFXUUVBQUFjQUFBQU1BQUFBQXdBQUFBUUFBQUFMQUFBQURBQUFBQTBBQUFBTkFBQUFEZ0FBQUFnQUFBQU9BQUFBQ1FBQUFBZ0FBQUFBQUFBQTZBa0FBQmNBQUFBWUFBQUErUC8vLy9qLy8vL29DUUFBR1FBQUFCb0FBQUNBTndBQWxEY0FBQWdBQUFBQUFBQUFBQW9BQUZvQkFBQmJBUUFBK1AvLy8vai8vLzhBQ2dBQVhBRUFBRjBCQUFDd053QUF4RGNBQUJ3QUFBQXdBQUFBQkFBQUFBQUFBQUF3Q2dBQVhnRUFBRjhCQUFEOC8vLy8vUC8vL3pBS0FBQmdBUUFBWVFFQUFPZzNBQUQ4TndBQURBQUFBQUFBQUFCSUNnQUFHd0FBQUJ3QUFBQUVBQUFBK1AvLy8wZ0tBQUFkQUFBQUhnQUFBUFQvLy8vMC8vLy9TQW9BQUI4QUFBQWdBQUFBR0RnQUFIUUtBQUNJQ2dBQUhBQUFBREFBQUFCQU9BQUFMRGdBQUFBQUFBQ1FDZ0FBWWdFQUFHTUJBQUFJQUFBQURBQUFBQU1BQUFBRUFBQUFEd0FBQUF3QUFBQU5BQUFBRFFBQUFBNEFBQUFJQUFBQUR3QUFBQW9BQUFBQUFBQUFvQW9BQUdRQkFBQmxBUUFBQ1FBQUFBUUFBQUFDQUFBQUF3QUFBQkFBQUFBREFBQUFCUUFBQUFvQUFBQUZBQUFBQmdBQUFCQUFBQUFMQUFBQUFBQUFBTEFLQUFCbUFRQUFad0VBQUFvQUFBQU1BQUFBQXdBQUFBUUFBQUFMQUFBQURBQUFBQTBBQUFBUkFBQUFFZ0FBQUF3QUFBQU9BQUFBQ1FBQUFBQUFBQURBQ2dBQWFBRUFBR2tCQUFBTEFBQUFCQUFBQUFJQUFBQURBQUFBQWdBQUFBTUFBQUFGQUFBQUV3QUFBQlFBQUFBTkFBQUFCZ0FBQUFjQUFBQUFBQUFBMEFvQUFHb0JBQUJyQVFBQWJBRUFBQUVBQUFBRkFBQUFFUUFBQUFBQUFBRHdDZ0FBYlFFQUFHNEJBQUJzQVFBQUFnQUFBQVlBQUFBU0FBQUFBQUFBQUFBTEFBQnZBUUFBY0FFQUFHd0JBQUFCQUFBQUFnQUFBQU1BQUFBRUFBQUFCUUFBQUFZQUFBQUhBQUFBQ0FBQUFBa0FBQUFLQUFBQUN3QUFBQUFBQUFCQUN3QUFjUUVBQUhJQkFBQnNBUUFBREFBQUFBMEFBQUFPQUFBQUR3QUFBQkFBQUFBUkFBQUFFZ0FBQUJNQUFBQVVBQUFBRlFBQUFCWUFBQUFBQUFBQWVBc0FBSE1CQUFCMEFRQUFiQUVBQUFNQUFBQUVBQUFBRndBQUFBVUFBQUFZQUFBQUFRQUFBQUlBQUFBR0FBQUFBQUFBQUxnTEFBQjFBUUFBZGdFQUFHd0JBQUFIQUFBQUNBQUFBQmtBQUFBSkFBQUFHZ0FBQUFNQUFBQUVBQUFBQ2dBQUFBQUFBQUR3Q3dBQWR3RUFBSGdCQUFCc0FRQUFGUUFBQUJzQUFBQWNBQUFBSFFBQUFCNEFBQUFmQUFBQUFRQUFBUGovLy8vd0N3QUFGZ0FBQUJjQUFBQVlBQUFBR1FBQUFCb0FBQUFiQUFBQUhBQUFBQUFBQUFBb0RBQUFlUUVBQUhvQkFBQnNBUUFBSFFBQUFDQUFBQUFoQUFBQUlnQUFBQ01BQUFBa0FBQUFBZ0FBQVBqLy8vOG9EQUFBSGdBQUFCOEFBQUFnQUFBQUlRQUFBQ0lBQUFBakFBQUFKQUFBQUNVQUFBQklBQUFBT2dBQUFDVUFBQUJOQUFBQU9nQUFBQ1VBQUFCVEFBQUFBQUFBQUNVQUFBQnRBQUFBTHdBQUFDVUFBQUJrQUFBQUx3QUFBQ1VBQUFCNUFBQUFBQUFBQUNVQUFBQkpBQUFBT2dBQUFDVUFBQUJOQUFBQU9nQUFBQ1VBQUFCVEFBQUFJQUFBQUNVQUFBQndBQUFBQUFBQUFDVUFBQUJoQUFBQUlBQUFBQ1VBQUFCaUFBQUFJQUFBQUNVQUFBQmtBQUFBSUFBQUFDVUFBQUJJQUFBQU9nQUFBQ1VBQUFCTkFBQUFPZ0FBQUNVQUFBQlRBQUFBSUFBQUFDVUFBQUJaQUFBQUFBQUFBRUVBQUFCTkFBQUFBQUFBQUZBQUFBQk5BQUFBQUFBQUFFb0FBQUJoQUFBQWJnQUFBSFVBQUFCaEFBQUFjZ0FBQUhrQUFBQUFBQUFBUmdBQUFHVUFBQUJpQUFBQWNnQUFBSFVBQUFCaEFBQUFjZ0FBQUhrQUFBQUFBQUFBVFFBQUFHRUFBQUJ5QUFBQVl3QUFBR2dBQUFBQUFBQUFRUUFBQUhBQUFBQnlBQUFBYVFBQUFHd0FBQUFBQUFBQVRRQUFBR0VBQUFCNUFBQUFBQUFBQUVvQUFBQjFBQUFBYmdBQUFHVUFBQUFBQUFBQVNnQUFBSFVBQUFCc0FBQUFlUUFBQUFBQUFBQkJBQUFBZFFBQUFHY0FBQUIxQUFBQWN3QUFBSFFBQUFBQUFBQUFVd0FBQUdVQUFBQndBQUFBZEFBQUFHVUFBQUJ0QUFBQVlnQUFBR1VBQUFCeUFBQUFBQUFBQUU4QUFBQmpBQUFBZEFBQUFHOEFBQUJpQUFBQVpRQUFBSElBQUFBQUFBQUFUZ0FBQUc4QUFBQjJBQUFBWlFBQUFHMEFBQUJpQUFBQVpRQUFBSElBQUFBQUFBQUFSQUFBQUdVQUFBQmpBQUFBWlFBQUFHMEFBQUJpQUFBQVpRQUFBSElBQUFBQUFBQUFTZ0FBQUdFQUFBQnVBQUFBQUFBQUFFWUFBQUJsQUFBQVlnQUFBQUFBQUFCTkFBQUFZUUFBQUhJQUFBQUFBQUFBUVFBQUFIQUFBQUJ5QUFBQUFBQUFBRW9BQUFCMUFBQUFiZ0FBQUFBQUFBQktBQUFBZFFBQUFHd0FBQUFBQUFBQVFRQUFBSFVBQUFCbkFBQUFBQUFBQUZNQUFBQmxBQUFBY0FBQUFBQUFBQUJQQUFBQVl3QUFBSFFBQUFBQUFBQUFUZ0FBQUc4QUFBQjJBQUFBQUFBQUFFUUFBQUJsQUFBQVl3QUFBQUFBQUFCVEFBQUFkUUFBQUc0QUFBQmtBQUFBWVFBQUFIa0FBQUFBQUFBQVRRQUFBRzhBQUFCdUFBQUFaQUFBQUdFQUFBQjVBQUFBQUFBQUFGUUFBQUIxQUFBQVpRQUFBSE1BQUFCa0FBQUFZUUFBQUhrQUFBQUFBQUFBVndBQUFHVUFBQUJrQUFBQWJnQUFBR1VBQUFCekFBQUFaQUFBQUdFQUFBQjVBQUFBQUFBQUFGUUFBQUJvQUFBQWRRQUFBSElBQUFCekFBQUFaQUFBQUdFQUFBQjVBQUFBQUFBQUFFWUFBQUJ5QUFBQWFRQUFBR1FBQUFCaEFBQUFlUUFBQUFBQUFBQlRBQUFBWVFBQUFIUUFBQUIxQUFBQWNnQUFBR1FBQUFCaEFBQUFlUUFBQUFBQUFBQlRBQUFBZFFBQUFHNEFBQUFBQUFBQVRRQUFBRzhBQUFCdUFBQUFBQUFBQUZRQUFBQjFBQUFBWlFBQUFBQUFBQUJYQUFBQVpRQUFBR1FBQUFBQUFBQUFWQUFBQUdnQUFBQjFBQUFBQUFBQUFFWUFBQUJ5QUFBQWFRQUFBQUFBQUFCVEFBQUFZUUFBQUhRQUFBQUFBQUFBSlFBQUFHMEFBQUF2QUFBQUpRQUFBR1FBQUFBdkFBQUFKUUFBQUhrQUFBQWxBQUFBV1FBQUFDMEFBQUFsQUFBQWJRQUFBQzBBQUFBbEFBQUFaQUFBQUNVQUFBQkpBQUFBT2dBQUFDVUFBQUJOQUFBQU9nQUFBQ1VBQUFCVEFBQUFJQUFBQUNVQUFBQndBQUFBSlFBQUFFZ0FBQUE2QUFBQUpRQUFBRTBBQUFBbEFBQUFTQUFBQURvQUFBQWxBQUFBVFFBQUFEb0FBQUFsQUFBQVV3QUFBQ1VBQUFCSUFBQUFPZ0FBQUNVQUFBQk5BQUFBT2dBQUFDVUFBQUJUQUFBQUFBQUFBRmdNQUFCN0FRQUFmQUVBQUd3QkFBQUJBQUFBQUFBQUFJQU1BQUI5QVFBQWZnRUFBR3dCQUFBQ0FBQUFBQUFBQUtBTUFBQi9BUUFBZ0FFQUFHd0JBQUFsQUFBQUpnQUFBQXdBQUFBTkFBQUFEZ0FBQUE4QUFBQW5BQUFBRUFBQUFCRUFBQUFBQUFBQXlBd0FBSUVCQUFDQ0FRQUFiQUVBQUNnQUFBQXBBQUFBRWdBQUFCTUFBQUFVQUFBQUZRQUFBQ29BQUFBV0FBQUFGd0FBQUFBQUFBRG9EQUFBZ3dFQUFJUUJBQUJzQVFBQUt3QUFBQ3dBQUFBWUFBQUFHUUFBQUJvQUFBQWJBQUFBTFFBQUFCd0FBQUFkQUFBQUFBQUFBQWdOQUFDRkFRQUFoZ0VBQUd3QkFBQXVBQUFBTHdBQUFCNEFBQUFmQUFBQUlBQUFBQ0VBQUFBd0FBQUFJZ0FBQUNNQUFBQUFBQUFBS0EwQUFJY0JBQUNJQVFBQWJBRUFBQU1BQUFBRUFBQUFBQUFBQUZBTkFBQ0pBUUFBaWdFQUFHd0JBQUFGQUFBQUJnQUFBQUFBQUFCNERRQUFpd0VBQUl3QkFBQnNBUUFBQVFBQUFDVUFBQUFBQUFBQW9BMEFBSTBCQUFDT0FRQUFiQUVBQUFJQUFBQW1BQUFBQUFBQUFNZ05BQUNQQVFBQWtBRUFBR3dCQUFBVEFBQUFCQUFBQUNRQUFBQUFBQUFBOEEwQUFKRUJBQUNTQVFBQWJBRUFBQlFBQUFBRkFBQUFKUUFBQUFBQUFBQklEZ0FBa3dFQUFKUUJBQUJzQVFBQUF3QUFBQVFBQUFBTEFBQUFNUUFBQURJQUFBQU1BQUFBTXdBQUFBQUFBQUFRRGdBQWt3RUFBSlVCQUFCc0FRQUFBd0FBQUFRQUFBQUxBQUFBTVFBQUFESUFBQUFNQUFBQU13QUFBQUFBQUFCNERnQUFsZ0VBQUpjQkFBQnNBUUFBQlFBQUFBWUFBQUFOQUFBQU5BQUFBRFVBQUFBT0FBQUFOZ0FBQUFBQUFBQzREZ0FBbUFFQUFKa0JBQUJzQVFBQUFBQUFBTWdPQUFDYUFRQUFtd0VBQUd3QkFBQU9BQUFBRlFBQUFBOEFBQUFXQUFBQUVBQUFBQUlBQUFBWEFBQUFEd0FBQUFBQUFBQVFEd0FBbkFFQUFKMEJBQUJzQVFBQU53QUFBRGdBQUFBbUFBQUFKd0FBQUNnQUFBQUFBQUFBSUE4QUFKNEJBQUNmQVFBQWJBRUFBRGtBQUFBNkFBQUFLUUFBQUNvQUFBQXJBQUFBWmdBQUFHRUFBQUJzQUFBQWN3QUFBR1VBQUFBQUFBQUFkQUFBQUhJQUFBQjFBQUFBWlFBQUFBQUFBQUFBQUFBQTRBb0FBSk1CQUFDZ0FRQUFiQUVBQUFBQUFBRHdEZ0FBa3dFQUFLRUJBQUJzQVFBQUdBQUFBQU1BQUFBRUFBQUFCUUFBQUJFQUFBQVpBQUFBRWdBQUFCb0FBQUFUQUFBQUJnQUFBQnNBQUFBUUFBQUFBQUFBQUZnT0FBQ1RBUUFBb2dFQUFHd0JBQUFIQUFBQUNBQUFBQkVBQUFBN0FBQUFQQUFBQUJJQUFBQTlBQUFBQUFBQUFKZ09BQUNUQVFBQW93RUFBR3dCQUFBSkFBQUFDZ0FBQUJNQUFBQStBQUFBUHdBQUFCUUFBQUJBQUFBQUFBQUFBQ0FPQUFDVEFRQUFwQUVBQUd3QkFBQURBQUFBQkFBQUFBc0FBQUF4QUFBQU1nQUFBQXdBQUFBekFBQUFBQUFBQUNBTUFBQVdBQUFBRndBQUFCZ0FBQUFaQUFBQUdnQUFBQnNBQUFBY0FBQUFBQUFBQUZBTUFBQWVBQUFBSHdBQUFDQUFBQUFoQUFBQUlnQUFBQ01BQUFBa0FBQUFBQUFBQUZBUEFBQ2xBUUFBcGdFQUFFRUFBQUFFQUFBQUFBQUFBR2dQQUFDbkFRQUFxQUVBQUtrQkFBQ3FBUUFBSEFBQUFBWUFBQUFwQUFBQUJ3QUFBQUFBQUFDUUR3QUFwd0VBQUtzQkFBQ3BBUUFBcWdFQUFCd0FBQUFIQUFBQUtnQUFBQWdBQUFBQUFBQUFvQThBQUt3QkFBQ3RBUUFBUWdBQUFBQUFBQUN3RHdBQXJBRUFBSzRCQUFCQ0FBQUFBQUFBQU9BUEFBQ25BUUFBcndFQUFLa0JBQUNxQVFBQUhRQUFBQUFBQUFEUUR3QUFwd0VBQUxBQkFBQ3BBUUFBcWdFQUFCNEFBQUFBQUFBQVlCQUFBS2NCQUFDeEFRQUFxUUVBQUtvQkFBQWZBQUFBQUFBQUFIQVFBQUNuQVFBQXNnRUFBS2tCQUFDcUFRQUFIQUFBQUFnQUFBQXJBQUFBQ1FBQUFBQUFBQUFCQUFFQURBQUxBQW9BQ3dBUUFBc0FLQUFoQUJnQUN3QVVBQXNBSUFBTEFGQUFJUUFTQUFzQUR3QUxBRUFBSVFDZ0FHTUFCQUFEQUFNQUFnQUNBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FESUFJZ0FpQUNJQUlnQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQVdBRXdBVEFCTUFFd0FUQUJNQUV3QVRBQk1BRXdBVEFCTUFFd0FUQUJNQUkyQWpZQ05nSTJBallDTmdJMkFqWUNOZ0kyQVRBQk1BRXdBVEFCTUFFd0FUQUNOVUkxUWpWQ05VSTFRalZDTVVJeFFqRkNNVUl4UWpGQ01VSXhRakZDTVVJeFFqRkNNVUl4UWpGQ01VSXhRakZDTVVJeFFUQUJNQUV3QVRBQk1BRXdBaldDTllJMWdqV0NOWUkxZ2pHQ01ZSXhnakdDTVlJeGdqR0NNWUl4Z2pHQ01ZSXhnakdDTVlJeGdqR0NNWUl4Z2pHQ01ZRXdBVEFCTUFFd0FJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRTQwYUdWcFpqRXlVM1J5WldGdFVtVmhaR1Z5UlFCT05HaGxhV1l4T1ZOMGNtVmhiVkpsWVdSbGNsOXRaVzF2Y25sRkFIQnlaWEJoY21WZmNtVmhaQUJ1SUR3OUlHMWZjbVZ0WVdsdWFXNW5BSE5yYVhCZmQybDBhRzkxZEY5aFpIWmhibU5wYm1kZlptbHNaVjl3YjNNQUtuWmhiSFZsSUQ0Z01BQjJZV3gxWlNBOFBTQXdlRVpHQUhaaGJIVmxJRHc5SURCNFJrWkdSZ0IyWVd4MVpTQThQU0F3ZUVaR1JrWkdSa1pHQUcxZmNHOXphWFJwYjI0Z1BUMGdiVjlrWVhSaExuTnBlbVVvS1FCemEybHdBRzVDZVhSbGN5QStQU0F3QUdsdWMyVnlkQUI4SUFCQ2IzZzZJQUFnTFMwdExTMEtBSE5wZW1VNklBQWdJQ0FvYUdWaFpHVnlJSE5wZW1VNklBQXBDZ0IyWlhKemFXOXVPaUFBWm14aFozTTZJQUJPVTNRelgxOHlNVFZpWVhOcFkxOXpkSEpwYm1kaWRXWkpZMDVUWHpFeFkyaGhjbDkwY21GcGRITkpZMFZGVGxOZk9XRnNiRzlqWVhSdmNrbGpSVVZGUlFCT1UzUXpYMTh5TVRsaVlYTnBZMTl2YzNSeWFXNW5jM1J5WldGdFNXTk9VMTh4TVdOb1lYSmZkSEpoYVhSelNXTkZSVTVUWHpsaGJHeHZZMkYwYjNKSlkwVkZSVVVBVGpSb1pXbG1PVUp2ZUVobFlXUmxja1VBYlY5MWRXbGtYM1I1Y0dVdWMybDZaU2dwSUQwOUlERTJBR0p2ZUM1all3QndjbVZ3Wlc1a1gyaGxZV1JsY2dBb2JWOW1iR0ZuY3lBbUlINHdlREF3UmtaR1JrWkdLU0E5UFNBd0FFNDBhR1ZwWmpOQ2IzaEZBR1owZVhBZ1ltOTRJSFJ2YnlCemJXRnNiQ0FvYkdWemN5QjBhR0Z1SURnZ1lubDBaWE1wQUcxaGFtOXlJR0p5WVc1a09pQUFiV2x1YjNJZ2RtVnljMmx2YmpvZ0FHTnZiWEJoZEdsaWJHVWdZbkpoYm1Sek9pQUFUalJvWldsbU9FSnZlRjltZEhsd1JRQk5ZWGhwYlhWdElHNTFiV0psY2lCdlppQmphR2xzWkNCaWIzaGxjeUFBSUdWNFkyVmxaR1ZrTGdCT1UzUXpYMTh5TVRoaVlYTnBZMTl6ZEhKcGJtZHpkSEpsWVcxSlkwNVRYekV4WTJoaGNsOTBjbUZwZEhOSlkwVkZUbE5mT1dGc2JHOWpZWFJ2Y2tsalJVVkZSUUJDYjNnZ2MybDZaU0FvQUNCaWVYUmxjeWtnYzIxaGJHeGxjaUIwYUdGdUlHaGxZV1JsY2lCemFYcGxJQ2dBSUdKNWRHVnpLUUJUWldOMWNtbDBlU0JzYVcxcGRDQm1iM0lnYldGNGFXMTFiU0J1WlhOMGFXNW5JRzltSUdKdmVHVnpJR2hoY3lCaVpXVnVJR1Y0WTJWbFpHVmtBRTVUZEROZlh6SXlNRjlmYzJoaGNtVmtYM0IwY2w5bGJYQnNZV05sU1U0MGFHVnBaak5DYjNoRlRsTmZPV0ZzYkc5allYUnZja2xUTWw5RlJVVkZBSGR5YVhSbEFHSnBkSE5mY0dWeVgyTm9ZVzV1Wld3NklBQXNBRTQwYUdWcFpqaENiM2hmY0dsNGFVVUFUbE4wTTE5Zk1qSXdYMTl6YUdGeVpXUmZjSFJ5WDJWdGNHeGhZMlZKVGpSb1pXbG1PRUp2ZUY5d2FYaHBSVTVUWHpsaGJHeHZZMkYwYjNKSlV6SmZSVVZGUlFCd2NtOW1hV3hsSUhOcGVtVTZJQUJPTkdobGFXWXhOMk52Ykc5eVgzQnliMlpwYkdWZmNtRjNSUUJPTkdobGFXWXhNMk52Ykc5eVgzQnliMlpwYkdWRkFFNVRkRE5mWHpJeU1GOWZjMmhoY21Wa1gzQjBjbDlsYlhCc1lXTmxTVTQwYUdWcFpqRTNZMjlzYjNKZmNISnZabWxzWlY5eVlYZEZUbE5mT1dGc2JHOWpZWFJ2Y2tsVE1sOUZSVVZGQUdOdmJHOTFjbDl3Y21sdFlYSnBaWE02SUFCMGNtRnVjMlpsY2w5amFHRnlZV04wWlhKcGMzUnBZM002SUFCdFlYUnlhWGhmWTI5bFptWnBZMmxsYm5Sek9pQUFablZzYkY5eVlXNW5aVjltYkdGbk9pQUFUalJvWldsbU1UaGpiMnh2Y2w5d2NtOW1hV3hsWDI1amJIaEZBRTVUZEROZlh6SXlNRjlmYzJoaGNtVmtYM0IwY2w5bGJYQnNZV05sU1U0MGFHVnBaakU0WTI5c2IzSmZjSEp2Wm1sc1pWOXVZMng0UlU1VFh6bGhiR3h2WTJGMGIzSkpVekpmUlVWRlJRQnRYMk52Ykc5eVgzQnliMlpwYkdVQVkyOXNiM1Z5WDNSNWNHVTZJQUJ1YnlCamIyeHZjaUJ3Y205bWFXeGxDZ0JPTkdobGFXWTRRbTk0WDJOdmJISkZBRTVUZEROZlh6SXlNRjlmYzJoaGNtVmtYM0IwY2w5bGJYQnNZV05sU1U0MGFHVnBaamhDYjNoZlkyOXNja1ZPVTE4NVlXeHNiMk5oZEc5eVNWTXlYMFZGUlVVQWJHOWpZWFJwYjI0NklBQk9OR2hsYVdZM1FtOTRYM1Z5YkVVQVRsTjBNMTlmTWpJd1gxOXphR0Z5WldSZmNIUnlYMlZ0Y0d4aFkyVkpUalJvWldsbU4wSnZlRjkxY214RlRsTmZPV0ZzYkc5allYUnZja2xUTWw5RlJVVkZBRTQwYUdWcFpqaENiM2hmWkhKbFprVUFUbE4wTTE5Zk1qSXdYMTl6YUdGeVpXUmZjSFJ5WDJWdGNHeGhZMlZKVGpSb1pXbG1PRUp2ZUY5a2NtVm1SVTVUWHpsaGJHeHZZMkYwYjNKSlV6SmZSVVZGUlFCT05HaGxhV1k0UW05NFgyUnBibVpGQUU1VGRETmZYekl5TUY5ZmMyaGhjbVZrWDNCMGNsOWxiWEJzWVdObFNVNDBhR1ZwWmpoQ2IzaGZaR2x1WmtWT1UxODVZV3hzYjJOaGRHOXlTVk15WDBWRlJVVUFaM0p2ZFhBZ2RIbHdaVG9nQUh3Z1ozSnZkWEFnYVdRNklBQjhJR1Z1ZEdsMGVTQkpSSE02SUFBZ0FFNDBhR1ZwWmpoQ2IzaGZaM0p3YkVVQVRsTjBNMTlmTWpJd1gxOXphR0Z5WldSZmNIUnlYMlZ0Y0d4aFkyVkpUalJvWldsbU9FSnZlRjluY25Cc1JVNVRYemxoYkd4dlkyRjBiM0pKVXpKZlJVVkZSUUJ1ZFcxaVpYSWdiMllnWkdGMFlTQmllWFJsY3pvZ0FFNDBhR1ZwWmpoQ2IzaGZhV1JoZEVVQVRsTjBNMTlmTWpJd1gxOXphR0Z5WldSZmNIUnlYMlZ0Y0d4aFkyVkpUalJvWldsbU9FSnZlRjlwWkdGMFJVNVRYemxoYkd4dlkyRjBiM0pKVXpKZlJVVkZSUUJ6WlhGZmNISnZabWxzWlRvZ0FITmxjVjlzWlhabGJGOXBaSGhmTURvZ0FHaHBaMmhmWW1sMFpHVndkR2c2SUFCMGQyVnNkbVZmWW1sME9pQUFZMmh5YjIxaFgzTjFZbk5oYlhCc2FXNW5YM2c2SUFCamFISnZiV0ZmYzNWaWMyRnRjR3hwYm1kZmVUb2dBR05vY205dFlWOXpZVzF3YkdWZmNHOXphWFJwYjI0NklBQnBibWwwYVdGc1gzQnlaWE5sYm5SaGRHbHZibDlrWld4aGVUb2dBRzV2ZENCd2NtVnpaVzUwQ2dCamIyNW1hV2NnVDBKVmN6b0FUalJvWldsbU9FSnZlRjloZGpGRFJRQk9VM1F6WDE4eU1qQmZYM05vWVhKbFpGOXdkSEpmWlcxd2JHRmpaVWxPTkdobGFXWTRRbTk0WDJGMk1VTkZUbE5mT1dGc2JHOWpZWFJ2Y2tsVE1sOUZSVVZGQUdOdmJtWnBaM1Z5WVhScGIyNWZkbVZ5YzJsdmJqb2dBR2RsYm1WeVlXeGZjSEp2Wm1sc1pWOXpjR0ZqWlRvZ0FHZGxibVZ5WVd4ZmRHbGxjbDltYkdGbk9pQUFaMlZ1WlhKaGJGOXdjbTltYVd4bFgybGtZem9nQUdkbGJtVnlZV3hmY0hKdlptbHNaVjlqYjIxd1lYUnBZbWxzYVhSNVgyWnNZV2R6T2lBQVoyVnVaWEpoYkY5amIyNXpkSEpoYVc1MFgybHVaR2xqWVhSdmNsOW1iR0ZuY3pvZ0FHZGxibVZ5WVd4ZmJHVjJaV3hmYVdSak9pQUFiV2x1WDNOd1lYUnBZV3hmYzJWbmJXVnVkR0YwYVc5dVgybGtZem9nQUhCaGNtRnNiR1ZzYVhOdFgzUjVjR1U2SUFCamFISnZiV0ZmWm05eWJXRjBPaUFBWW1sMFgyUmxjSFJvWDJ4MWJXRTZJQUJpYVhSZlpHVndkR2hmWTJoeWIyMWhPaUFBWVhablgyWnlZVzFsWDNKaGRHVTZJQUJqYjI1emRHRnVkRjltY21GdFpWOXlZWFJsT2lBQWJuVnRYM1JsYlhCdmNtRnNYMnhoZVdWeWN6b2dBSFJsYlhCdmNtRnNYMmxrWDI1bGMzUmxaRG9nQUd4bGJtZDBhRjl6YVhwbE9pQUFQR0Z5Y21GNVBnb0FZWEp5WVhsZlkyOXRjR3hsZEdWdVpYTnpPaUFBVGtGTVgzVnVhWFJmZEhsd1pUb2dBRTQwYUdWcFpqaENiM2hmYUhaalEwVUFUbE4wTTE5Zk1qSXdYMTl6YUdGeVpXUmZjSFJ5WDJWdGNHeGhZMlZKVGpSb1pXbG1PRUp2ZUY5b2RtTkRSVTVUWHpsaGJHeHZZMkYwYjNKSlV6SmZSVVZGUlFCeVpXWmxjbVZ1WTJVZ2QybDBhQ0IwZVhCbElDY0FKd0FnWm5KdmJTQkpSRG9nQUNCMGJ5QkpSSE02SUFCT05HaGxhV1k0UW05NFgybHlaV1pGQUU1VGRETmZYekl5TUY5ZmMyaGhjbVZrWDNCMGNsOWxiWEJzWVdObFNVNDBhR1ZwWmpoQ2IzaGZhWEpsWmtWT1UxODVZV3hzYjJOaGRHOXlTVk15WDBWRlJVVUFZMnhsWVc1ZllYQmxjblIxY21VNklBQXZBQ0I0SUFCdlptWnpaWFE2SUFBZ095QUFUalJvWldsbU9FSnZlRjlqYkdGd1JRQk9VM1F6WDE4eU1qQmZYM05vWVhKbFpGOXdkSEpmWlcxd2JHRmpaVWxPTkdobGFXWTRRbTk0WDJOc1lYQkZUbE5mT1dGc2JHOWpZWFJ2Y2tsVE1sOUZSVVZGQUcxcGNuSnZjaUJoZUdsek9pQUFkbVZ5ZEdsallXd0tBR2h2Y21sNmIyNTBZV3dLQUU0MGFHVnBaamhDYjNoZmFXMXBja1VBVGxOME0xOWZNakl3WDE5emFHRnlaV1JmY0hSeVgyVnRjR3hoWTJWSlRqUm9aV2xtT0VKdmVGOXBiV2x5UlU1VFh6bGhiR3h2WTJGMGIzSkpVekpmUlVWRlJRQnliM1JoZEdsdmJqb2dBQ0JrWldkeVpXVnpJQ2hEUTFjcENnQk9OR2hsYVdZNFFtOTRYMmx5YjNSRkFFNVRkRE5mWHpJeU1GOWZjMmhoY21Wa1gzQjBjbDlsYlhCc1lXTmxTVTQwYUdWcFpqaENiM2hmYVhKdmRFVk9VMTg1WVd4c2IyTmhkRzl5U1ZNeVgwVkZSVVVBWVhWNElIUjVjR1U2SUFCaGRYZ2djM1ZpZEhsd1pYTTZJQUJPTkdobGFXWTRRbTk0WDJGMWVFTkZBRTVUZEROZlh6SXlNRjlmYzJoaGNtVmtYM0IwY2w5bGJYQnNZV05sU1U0MGFHVnBaamhDYjNoZllYVjRRMFZPVTE4NVlXeHNiMk5oZEc5eVNWTXlYMFZGUlVVQWFXMWhaMlVnZDJsa2RHZzZJQUJwYldGblpTQm9aV2xuYUhRNklBQk9OR2hsYVdZNFFtOTRYMmx6Y0dWRkFFNVRkRE5mWHpJeU1GOWZjMmhoY21Wa1gzQjBjbDlsYlhCc1lXTmxTVTQwYUdWcFpqaENiM2hmYVhOd1pVVk9VMTg1WVd4c2IyTmhkRzl5U1ZNeVgwVkZSVVVBWVhOemIyTnBZWFJwYjI1eklHWnZjaUJwZEdWdElFbEVPaUFBY0hKdmNHVnlkSGtnYVc1a1pYZzZJQUFnS0dWemMyVnVkR2xoYkRvZ0FFNDBhR1ZwWmpoQ2IzaGZhWEJ0WVVVQVRsTjBNMTlmTWpJd1gxOXphR0Z5WldSZmNIUnlYMlZ0Y0d4aFkyVkpUalJvWldsbU9FSnZlRjlwY0cxaFJVNVRYemxoYkd4dlkyRjBiM0pKVXpKZlJVVkZSUUJPTkdobGFXWTRRbTk0WDJsd1kyOUZBRTVUZEROZlh6SXlNRjlmYzJoaGNtVmtYM0IwY2w5bGJYQnNZV05sU1U0MGFHVnBaamhDYjNoZmFYQmpiMFZPVTE4NVlXeHNiMk5oZEc5eVNWTXlYMFZGUlVVQVRqUm9aV2xtT0VKdmVGOXBjSEp3UlFCT1UzUXpYMTh5TWpCZlgzTm9ZWEpsWkY5d2RISmZaVzF3YkdGalpVbE9OR2hsYVdZNFFtOTRYMmx3Y25CRlRsTmZPV0ZzYkc5allYUnZja2xUTWw5RlJVVkZBRzFwYldVQWRYSnBJQUJwZEdWdFgwbEVPaUFBYVhSbGJWOXdjbTkwWldOMGFXOXVYMmx1WkdWNE9pQUFhWFJsYlY5MGVYQmxPaUFBYVhSbGJWOXVZVzFsT2lBQVkyOXVkR1Z1ZEY5MGVYQmxPaUFBWTI5dWRHVnVkRjlsYm1OdlpHbHVaem9nQUdsMFpXMGdkWEpwSUhSNWNHVTZJQUJvYVdSa1pXNGdhWFJsYlRvZ0FFNDBhR1ZwWmpoQ2IzaGZhVzVtWlVVQVRsTjBNMTlmTWpJd1gxOXphR0Z5WldSZmNIUnlYMlZ0Y0d4aFkyVkpUalJvWldsbU9FSnZlRjlwYm1abFJVNVRYemxoYkd4dlkyRjBiM0pKVXpKZlJVVkZSUUJPTkdobGFXWTRRbTk0WDJscGJtWkZBRTVUZEROZlh6SXlNRjlmYzJoaGNtVmtYM0IwY2w5bGJYQnNZV05sU1U0MGFHVnBaamhDYjNoZmFXbHVaa1ZPVTE4NVlXeHNiMk5oZEc5eVNWTXlYMFZGUlVVQWFXeHZZeUJpYjNnZ1kyOXVkR0ZwYm5NZ0FDQnBkR1Z0Y3l3Z2QyaHBZMmdnWlhoalpXVmtjeUIwYUdVZ2MyVmpkWEpwZEhrZ2JHbHRhWFFnYjJZZ0FDQnBkR1Z0Y3k0QVRuVnRZbVZ5SUc5bUlHVjRkR1Z1ZEhNZ2FXNGdhV3h2WXlCaWIzZ2dLQUFwSUdWNFkyVmxaSE1nYzJWamRYSnBkSGtnYkdsdGFYUWdLQUJwZEdWdElFbEVPaUFBSUNCamIyNXpkSEoxWTNScGIyNGdiV1YwYUc5a09pQUFJQ0JrWVhSaFgzSmxabVZ5Wlc1alpWOXBibVJsZURvZ0FDQWdZbUZ6WlY5dlptWnpaWFE2SUFBZ0lHVjRkR1Z1ZEhNNklBQTdhVzVrWlhnOUFFNDBhR1ZwWmpoQ2IzaGZhV3h2WTBVQVRsTjBNMTlmTWpJd1gxOXphR0Z5WldSZmNIUnlYMlZ0Y0d4aFkyVkpUalJvWldsbU9FSnZlRjlwYkc5alJVNVRYemxoYkd4dlkyRjBiM0pKVXpKZlJVVkZSUUJ0WDJsMFpXMWZTVVFnUEQwZ01IaEdSa1pHQUU0MGFHVnBaamhDYjNoZmNHbDBiVVVBVGxOME0xOWZNakl3WDE5emFHRnlaV1JmY0hSeVgyVnRjR3hoWTJWSlRqUm9aV2xtT0VKdmVGOXdhWFJ0UlU1VFh6bGhiR3h2WTJGMGIzSkpVekpmUlVWRlJRQndjbVZmWkdWbWFXNWxaRG9nQUdoaGJtUnNaWEpmZEhsd1pUb2dBRzVoYldVNklBQk9OR2hsYVdZNFFtOTRYMmhrYkhKRkFFNVRkRE5mWHpJeU1GOWZjMmhoY21Wa1gzQjBjbDlsYlhCc1lXTmxTVTQwYUdWcFpqaENiM2hmYUdSc2NrVk9VMTg1WVd4c2IyTmhkRzl5U1ZNeVgwVkZSVVVBVGxOME0xOWZNakl3WDE5emFHRnlaV1JmY0hSeVgyVnRjR3hoWTJWSlRqUm9aV2xtT0VKdmVGOXRaWFJoUlU1VFh6bGhiR3h2WTJGMGIzSkpVekpmUlVWRlJRQk9VM1F6WDE4eU1qQmZYM05vWVhKbFpGOXdkSEpmWlcxd2JHRmpaVWxPTkdobGFXWTRRbTk0WDJaMGVYQkZUbE5mT1dGc2JHOWpZWFJ2Y2tsVE1sOUZSVVZGQUVKdmVDQnphWHBsSUFBZ1pYaGpaV1ZrY3lCelpXTjFjbWwwZVNCc2FXMXBkQzRBVGpSb1pXbG1PRUp2ZUY5dFpYUmhSUUJwYkc5aklHSnZlQ0JqYjI1MFlXbHVaV1FnQUNCaWVYUmxjeXdnZEc5MFlXd2diV1Z0YjNKNUlITnBlbVVnZDI5MWJHUWdZbVVnQUNCaWVYUmxjeXdnWlhoalpXVmthVzVuSUhSb1pTQnpaV04xY21sMGVTQnNhVzFwZENCdlppQUFJR0o1ZEdWekFHbHNiMk1nWkdGMFlTQndiMmx1ZEdWeWN5QnZkWFFnYjJZZ1lXeHNiM2RsWkNCeVlXNW5aUUJGZUhSbGJuUWdhVzRnYVd4dll5QmliM2dnY21WbVpYSmxibU5sY3lCa1lYUmhJRzkxZEhOcFpHVWdiMllnWm1sc1pTQmliM1Z1WkhNZ0FDaHdiMmx1ZEhNZ2RHOGdabWxzWlNCd2IzTnBkR2x2YmlBQWMzVmpZMlZ6Y3dCeVpXRmtYMlJoZEdFQWFXUmhkQ0JpYjNnZ2NtVm1aWEpsYm1ObFpDQnBiaUJwY21WbUlHSnZlQ0JwY3lCdWIzUWdjSEpsYzJWdWRDQnBiaUJtYVd4bEFFbDBaVzBnWTI5dWMzUnlkV04wYVc5dUlHMWxkR2h2WkNBQUlHNXZkQ0JwYlhCc1pXMWxiblJsWkFCcFpHRjBJR0p2ZUNCamIyNTBZV2x1WldRZ0FFbDBaVzBnS0VsRVBRQXBJR2hoY3lCdWJ5QndjbTl3WlhKMGFXVnpJR0Z6YzJsbmJtVmtJSFJ2SUdsMElHbHVJR2x3YldFZ1ltOTRBRTV2Ym1WNGFYTjBhVzVuSUhCeWIzQmxjblI1SUNocGJtUmxlRDBBS1NCbWIzSWdhWFJsYlNBQUlFbEVQUUFnY21WbVpYSmxibU5sWkNCcGJpQnBjRzFoSUdKdmVBQlZibXR1YjNkdUlHVnljbTl5QUdWeWNtOXlMbU5qQUdkbGRGOWxjbkp2Y2w5emRISnBibWNBUTI5c2IzSWdjSEp2Wm1sc1pTQmtiMlZ6SUc1dmRDQmxlR2x6ZEFCRmNuSnZjaUJrZFhKcGJtY2daVzVqYjJScGJtY2diM0lnZDNKcGRHbHVaeUJ2ZFhSd2RYUWdabWxzWlFCRmJtTnZaR1Z5SUhCc2RXZHBiaUJuWlc1bGNtRjBaV1FnWVc0Z1pYSnliM0lBUkdWamIyUmxjaUJ3YkhWbmFXNGdaMlZ1WlhKaGRHVmtJR0Z1SUdWeWNtOXlBRTFsYlc5eWVTQmhiR3h2WTJGMGFXOXVJR1Z5Y205eUFGVnpZV2RsSUdWeWNtOXlBRlZ1YzNWd2NHOXlkR1ZrSUdabFlYUjFjbVVBVlc1emRYQndiM0owWldRZ1ptbHNaUzEwZVhCbEFFbHVkbUZzYVdRZ2FXNXdkWFFBU1c1d2RYUWdabWxzWlNCa2IyVnpJRzV2ZENCbGVHbHpkQUJEWVc1dWIzUWdkM0pwZEdVZ2IzVjBjSFYwSUdSaGRHRUFWVzV6ZFhCd2IzSjBaV1FnWW1sMElHUmxjSFJvQUZWdWMzVndjRzl5ZEdWa0lHbDBaVzBnWTI5dWMzUnlkV04wYVc5dUlHMWxkR2h2WkFCVmJuTjFjSEJ2Y25SbFpDQmpiMnh2Y2lCamIyNTJaWEp6YVc5dUFGVnVjM1Z3Y0c5eWRHVmtJR1JoZEdFZ2RtVnljMmx2YmdCVmJuTjFjSEJ2Y25SbFpDQnBiV0ZuWlNCMGVYQmxBRlZ1YzNWd2NHOXlkR1ZrSUdOdlpHVmpBRWx1ZG1Gc2FXUWdjR0Z5WVcxbGRHVnlJSFpoYkhWbEFGVnVjM1Z3Y0c5eWRHVmtJSEJoY21GdFpYUmxjZ0JVYUdVZ2RtVnljMmx2YmlCdlppQjBhR1VnY0dGemMyVmtJSGR5YVhSbGNpQnBjeUJ1YjNRZ2MzVndjRzl5ZEdWa0FGUm9aU0IyWlhKemFXOXVJRzltSUhSb1pTQndZWE56WldRZ2NHeDFaMmx1SUdseklHNXZkQ0J6ZFhCd2IzSjBaV1FBVG05dUxXVjRhWE4wYVc1bklHbHRZV2RsSUdOb1lXNXVaV3dnY21WbVpYSmxibU5sWkFCT1ZVeE1JR0Z5WjNWdFpXNTBJSEpsWTJWcGRtVmtBRTV2YmkxbGVHbHpkR2x1WnlCcGRHVnRJRWxFSUhKbFptVnlaVzVqWldRQVUyVmpkWEpwZEhrZ2JHbHRhWFFnWlhoalpXVmtaV1FBU1c1MllXeHBaQ0J3YVhocElHSnZlQUJKYm5aaGJHbGtJR2x0WVdkbElITnBlbVVBU1c1MllXeHBaQ0JtY21GamRHbHZibUZzSUc1MWJXSmxjZ0JYY205dVp5QjBhV3hsSUdsdFlXZGxJR05vY205dFlTQm1iM0p0WVhRQVZXNXJibTkzYmlCamIyeHZjaUJ3Y205bWFXeGxJSFI1Y0dVQVRtOGdiM0lnYVc1MllXeHBaQ0J3Y21sdFlYSjVJR2wwWlcwQVZIbHdaU0J2WmlCaGRYaHBiR2xoY25rZ2FXMWhaMlVnZFc1emNHVmphV1pwWldRQVQzWmxjbXhoZVNCcGJXRm5aU0J2ZFhSemFXUmxJRzltSUdOaGJuWmhjeUJoY21WaEFFbHVkbUZzYVdRZ2IzWmxjbXhoZVNCa1lYUmhBRWx1ZG1Gc2FXUWdZMnhsWVc0dFlYQmxjblIxY21VZ2MzQmxZMmxtYVdOaGRHbHZiZ0JKZEdWdElHaGhjeUJ1YnlCa1lYUmhBRTV2SUhCeWIzQmxjblJwWlhNZ1lYTnphV2R1WldRZ2RHOGdhWFJsYlFBbmFYQnRZU2NnWW05NElISmxabVZ5Wlc1alpYTWdZU0J1YjI0dFpYaHBjM1JwYm1jZ2NISnZjR1Z5ZEhrQVRtOTBJR0VnSjNCcFkzUW5JR2hoYm1Sc1pYSUFUbThnSjJsdVptVW5JR0p2ZUFCT2J5QW5hWEpsWmljZ1ltOTRBRTV2SUNkcGNISndKeUJpYjNnQVRtOGdKMmxwYm1ZbklHSnZlQUJPYnlBbmFXeHZZeWNnWW05NEFFNXZJQ2RwY0cxaEp5QmliM2dBVG04Z0oybHdZMjhuSUdKdmVBQk9ieUFuY0dsMGJTY2dZbTk0QUU1dklDZGhkakZESnlCaWIzZ0FUbThnSjJoMlkwTW5JR0p2ZUFCT2J5QW5hR1JzY2ljZ1ltOTRBRTV2SUNkdFpYUmhKeUJpYjNnQVRtOGdKMmxrWVhRbklHSnZlQUJPYnlBblpuUjVjQ2NnWW05NEFFMXBjM05wYm1jZ1ozSnBaQ0JwYldGblpYTUFTVzUyWVd4cFpDQm5jbWxrSUdSaGRHRUFTVzUyWVd4cFpDQmliM2dnYzJsNlpRQlZibVY0Y0dWamRHVmtJR1Z1WkNCdlppQm1hV3hsQUZWdWMzQmxZMmxtYVdWa0FEb2dBRVpwYkdVZ1pHOWxjeUJ1YjNRZ2FXNWpiSFZrWlNCaGJua2djM1Z3Y0c5eWRHVmtJR0p5WVc1a2N5NEtBRTVUZEROZlh6SXlNRjlmYzJoaGNtVmtYM0IwY2w5bGJYQnNZV05sU1U0MGFHVnBaakU1VTNSeVpXRnRVbVZoWkdWeVgyMWxiVzl5ZVVWT1UxODVZV3hzYjJOaGRHOXlTVk15WDBWRlJVVUFhR1ZwWmw5bWFXeGxMbU5qQUVsMFpXMGdkMmwwYUNCSlJDQUFJR2hoY3lCdWJ5QmpiMjF3Y21WemMyVmtJR1JoZEdFQVoyVjBYMk52YlhCeVpYTnpaV1JmYVcxaFoyVmZaR0YwWVFCb1pXbG1YMmx0WVdkbExtTmpBR05vY205dFlWOW9YM04xWW5OaGJYQnNhVzVuQUdOb2NtOXRZVjkyWDNOMVluTmhiWEJzYVc1bkFHNTFiVjlwYm5SbGNteGxZWFpsWkY5d2FYaGxiSE5mY0dWeVgzQnNZVzVsQUhkcFpIUm9JRDQ5SURBQVlXeHNiMk1BYUdWcFoyaDBJRDQ5SURBQVltbDBYMlJsY0hSb0lENDlJREVBWW1sMFgyUmxjSFJvSUR3OUlETXlBRzFmWW1sMFgyUmxjSFJvSUR3OUlERTJBR0p3Y0NBOFBTQXlOVFVBWjJWMFgzTjBiM0poWjJWZlltbDBjMTl3WlhKZmNHbDRaV3dBYVhOZlkyaHliMjFoWDNkcGRHaGZZV3h3YUdFQVRsTjBNMTlmTWpJd1gxOXphR0Z5WldSZmNIUnlYMlZ0Y0d4aFkyVkpUalJvWldsbU1UUklaV2xtVUdsNFpXeEpiV0ZuWlVWT1UxODVZV3hzYjJOaGRHOXlTVk15WDBWRlJVVUFRMkZ1SUdOMWNuSmxiblJzZVNCdmJteDVJRzFwY25KdmNpQnBiV0ZuWlhNZ2QybDBhQ0E0SUdKcGRITWdjR1Z5SUhCcGVHVnNBRU5oYmlCamRYSnlaVzUwYkhrZ2IyNXNlU0JtYVd4c0lHbHRZV2RsY3lCM2FYUm9JRGdnWW1sMGN5QndaWElnY0dsNFpXd0FabWxzYkY5U1IwSmZNVFppYVhRQWFXNWZkeUErUFNBd0FHOTJaWEpzWVhrQWFXNWZhQ0ErUFNBd0FHOTFkRjkzSUQ0OUlEQUFiM1YwWDJnZ1BqMGdNQUJQZG1WeWJHRjVJR2x0WVdkbElHOTFkSE5wWkdVZ2IyWWdjbWxuYUhRZ2IzSWdZbTkwZEc5dElHTmhiblpoY3lCaWIzSmtaWElBVDNabGNteGhlU0JwYldGblpTQnZkWFJ6YVdSbElHOW1JR3hsWm5RZ2IzSWdkRzl3SUdOaGJuWmhjeUJpYjNKa1pYSUFhR1ZwWmw5blpYUmZkbVZ5YzJsdmJnQnBhUUJvWldsbVgyZGxkRjkyWlhKemFXOXVYMjUxYldKbGNnQm9aV2xtWDJOdmJuUmxlSFJmWVd4c2IyTUFhR1ZwWmw5amIyNTBaWGgwWDJaeVpXVUFkbWxwQUdobGFXWmZZMjl1ZEdWNGRGOXlaV0ZrWDJaeWIyMWZiV1Z0YjNKNUFHbHBhV2tBYUdWcFpsOWpiMjUwWlhoMFgyZGxkRjl1ZFcxaVpYSmZiMlpmZEc5d1gyeGxkbVZzWDJsdFlXZGxjd0JwYVdrQWFHVnBabDlxYzE5amIyNTBaWGgwWDJkbGRGOXNhWE4wWDI5bVgzUnZjRjlzWlhabGJGOXBiV0ZuWlY5SlJITUFhR1ZwWmw5cWMxOWpiMjUwWlhoMFgyZGxkRjlwYldGblpWOW9ZVzVrYkdVQWFHVnBabDlxYzE5a1pXTnZaR1ZmYVcxaFoyVUFhV2xwYVdrQWFHVnBabDlwYldGblpWOW9ZVzVrYkdWZmNtVnNaV0Z6WlFCb1pXbG1YMlZ5Y205eVgyTnZaR1VBYUdWcFpsOWxjbkp2Y2w5UGF3Qm9aV2xtWDJWeWNtOXlYMGx1Y0hWMFgyUnZaWE5mYm05MFgyVjRhWE4wQUdobGFXWmZaWEp5YjNKZlNXNTJZV3hwWkY5cGJuQjFkQUJvWldsbVgyVnljbTl5WDFWdWMzVndjRzl5ZEdWa1gyWnBiR1YwZVhCbEFHaGxhV1pmWlhKeWIzSmZWVzV6ZFhCd2IzSjBaV1JmWm1WaGRIVnlaUUJvWldsbVgyVnljbTl5WDFWellXZGxYMlZ5Y205eUFHaGxhV1pmWlhKeWIzSmZUV1Z0YjNKNVgyRnNiRzlqWVhScGIyNWZaWEp5YjNJQWFHVnBabDlsY25KdmNsOUVaV052WkdWeVgzQnNkV2RwYmw5bGNuSnZjZ0JvWldsbVgyVnljbTl5WDBWdVkyOWtaWEpmY0d4MVoybHVYMlZ5Y205eUFHaGxhV1pmWlhKeWIzSmZSVzVqYjJScGJtZGZaWEp5YjNJQWFHVnBabDlsY25KdmNsOURiMnh2Y2w5d2NtOW1hV3hsWDJSdlpYTmZibTkwWDJWNGFYTjBBR2hsYVdaZmMzVmlaWEp5YjNKZlkyOWtaUUJvWldsbVgzTjFZbVZ5Y205eVgxVnVjM0JsWTJsbWFXVmtBR2hsYVdaZmMzVmlaWEp5YjNKZlEyRnVibTkwWDNkeWFYUmxYMjkxZEhCMWRGOWtZWFJoQUdobGFXWmZjM1ZpWlhKeWIzSmZSVzVrWDI5bVgyUmhkR0VBYUdWcFpsOXpkV0psY25KdmNsOUpiblpoYkdsa1gySnZlRjl6YVhwbEFHaGxhV1pmYzNWaVpYSnliM0pmVG05ZlpuUjVjRjlpYjNnQWFHVnBabDl6ZFdKbGNuSnZjbDlPYjE5cFpHRjBYMkp2ZUFCb1pXbG1YM04xWW1WeWNtOXlYMDV2WDIxbGRHRmZZbTk0QUdobGFXWmZjM1ZpWlhKeWIzSmZUbTlmYUdSc2NsOWliM2dBYUdWcFpsOXpkV0psY25KdmNsOU9iMTlvZG1ORFgySnZlQUJvWldsbVgzTjFZbVZ5Y205eVgwNXZYM0JwZEcxZlltOTRBR2hsYVdaZmMzVmlaWEp5YjNKZlRtOWZhWEJqYjE5aWIzZ0FhR1ZwWmw5emRXSmxjbkp2Y2w5T2IxOXBjRzFoWDJKdmVBQm9aV2xtWDNOMVltVnljbTl5WDA1dlgybHNiMk5mWW05NEFHaGxhV1pmYzNWaVpYSnliM0pmVG05ZmFXbHVabDlpYjNnQWFHVnBabDl6ZFdKbGNuSnZjbDlPYjE5cGNISndYMkp2ZUFCb1pXbG1YM04xWW1WeWNtOXlYMDV2WDJseVpXWmZZbTk0QUdobGFXWmZjM1ZpWlhKeWIzSmZUbTlmY0dsamRGOW9ZVzVrYkdWeUFHaGxhV1pmYzNWaVpYSnliM0pmU1hCdFlWOWliM2hmY21WbVpYSmxibU5sYzE5dWIyNWxlR2x6ZEdsdVoxOXdjbTl3WlhKMGVRQm9aV2xtWDNOMVltVnljbTl5WDA1dlgzQnliM0JsY25ScFpYTmZZWE56YVdkdVpXUmZkRzlmYVhSbGJRQm9aV2xtWDNOMVltVnljbTl5WDA1dlgybDBaVzFmWkdGMFlRQm9aV2xtWDNOMVltVnljbTl5WDBsdWRtRnNhV1JmWjNKcFpGOWtZWFJoQUdobGFXWmZjM1ZpWlhKeWIzSmZUV2x6YzJsdVoxOW5jbWxrWDJsdFlXZGxjd0JvWldsbVgzTjFZbVZ5Y205eVgwNXZYMkYyTVVOZlltOTRBR2hsYVdaZmMzVmlaWEp5YjNKZlNXNTJZV3hwWkY5amJHVmhibDloY0dWeWRIVnlaUUJvWldsbVgzTjFZbVZ5Y205eVgwbHVkbUZzYVdSZmIzWmxjbXhoZVY5a1lYUmhBR2hsYVdaZmMzVmlaWEp5YjNKZlQzWmxjbXhoZVY5cGJXRm5aVjl2ZFhSemFXUmxYMjltWDJOaGJuWmhjd0JvWldsbVgzTjFZbVZ5Y205eVgwRjFlR2xzYVdGeWVWOXBiV0ZuWlY5MGVYQmxYM1Z1YzNCbFkybG1hV1ZrQUdobGFXWmZjM1ZpWlhKeWIzSmZUbTlmYjNKZmFXNTJZV3hwWkY5d2NtbHRZWEo1WDJsMFpXMEFhR1ZwWmw5emRXSmxjbkp2Y2w5T2IxOXBibVpsWDJKdmVBQm9aV2xtWDNOMVltVnljbTl5WDFObFkzVnlhWFI1WDJ4cGJXbDBYMlY0WTJWbFpHVmtBR2hsYVdaZmMzVmlaWEp5YjNKZlZXNXJibTkzYmw5amIyeHZjbDl3Y205bWFXeGxYM1I1Y0dVQWFHVnBabDl6ZFdKbGNuSnZjbDlYY205dVoxOTBhV3hsWDJsdFlXZGxYMk5vY205dFlWOW1iM0p0WVhRQWFHVnBabDl6ZFdKbGNuSnZjbDlKYm5aaGJHbGtYMlp5WVdOMGFXOXVZV3hmYm5WdFltVnlBR2hsYVdaZmMzVmlaWEp5YjNKZlNXNTJZV3hwWkY5cGJXRm5aVjl6YVhwbEFHaGxhV1pmYzNWaVpYSnliM0pmVG05dVpYaHBjM1JwYm1kZmFYUmxiVjl5WldabGNtVnVZMlZrQUdobGFXWmZjM1ZpWlhKeWIzSmZUblZzYkY5d2IybHVkR1Z5WDJGeVozVnRaVzUwQUdobGFXWmZjM1ZpWlhKeWIzSmZUbTl1WlhocGMzUnBibWRmYVcxaFoyVmZZMmhoYm01bGJGOXlaV1psY21WdVkyVmtBR2hsYVdaZmMzVmlaWEp5YjNKZlZXNXpkWEJ3YjNKMFpXUmZjR3gxWjJsdVgzWmxjbk5wYjI0QWFHVnBabDl6ZFdKbGNuSnZjbDlWYm5OMWNIQnZjblJsWkY5M2NtbDBaWEpmZG1WeWMybHZiZ0JvWldsbVgzTjFZbVZ5Y205eVgxVnVjM1Z3Y0c5eWRHVmtYM0JoY21GdFpYUmxjZ0JvWldsbVgzTjFZbVZ5Y205eVgwbHVkbUZzYVdSZmNHRnlZVzFsZEdWeVgzWmhiSFZsQUdobGFXWmZjM1ZpWlhKeWIzSmZTVzUyWVd4cFpGOXdhWGhwWDJKdmVBQm9aV2xtWDNOMVltVnljbTl5WDFWdWMzVndjRzl5ZEdWa1gyTnZaR1ZqQUdobGFXWmZjM1ZpWlhKeWIzSmZWVzV6ZFhCd2IzSjBaV1JmYVcxaFoyVmZkSGx3WlFCb1pXbG1YM04xWW1WeWNtOXlYMVZ1YzNWd2NHOXlkR1ZrWDJSaGRHRmZkbVZ5YzJsdmJnQm9aV2xtWDNOMVltVnljbTl5WDFWdWMzVndjRzl5ZEdWa1gyTnZiRzl5WDJOdmJuWmxjbk5wYjI0QWFHVnBabDl6ZFdKbGNuSnZjbDlWYm5OMWNIQnZjblJsWkY5cGRHVnRYMk52Ym5OMGNuVmpkR2x2Ymw5dFpYUm9iMlFBYUdWcFpsOXpkV0psY25KdmNsOVZibk4xY0hCdmNuUmxaRjlpYVhSZlpHVndkR2dBYUdWcFpsOWpiMjF3Y21WemMybHZibDltYjNKdFlYUUFhR1ZwWmw5amIyMXdjbVZ6YzJsdmJsOTFibVJsWm1sdVpXUUFhR1ZwWmw5amIyMXdjbVZ6YzJsdmJsOUlSVlpEQUdobGFXWmZZMjl0Y0hKbGMzTnBiMjVmUVZaREFHaGxhV1pmWTI5dGNISmxjM05wYjI1ZlNsQkZSd0JvWldsbVgyTnZiWEJ5WlhOemFXOXVYMEZXTVFCb1pXbG1YMk5vY205dFlRQm9aV2xtWDJOb2NtOXRZVjkxYm1SbFptbHVaV1FBYUdWcFpsOWphSEp2YldGZmJXOXViMk5vY205dFpRQm9aV2xtWDJOb2NtOXRZVjgwTWpBQWFHVnBabDlqYUhKdmJXRmZOREl5QUdobGFXWmZZMmh5YjIxaFh6UTBOQUJvWldsbVgyTm9jbTl0WVY5cGJuUmxjbXhsWVhabFpGOVNSMElBYUdWcFpsOWphSEp2YldGZmFXNTBaWEpzWldGMlpXUmZVa2RDUVFCb1pXbG1YMk5vY205dFlWOXBiblJsY214bFlYWmxaRjlTVWtkSFFrSmZRa1VBYUdWcFpsOWphSEp2YldGZmFXNTBaWEpzWldGMlpXUmZVbEpIUjBKQ1FVRmZRa1VBYUdWcFpsOWphSEp2YldGZmFXNTBaWEpzWldGMlpXUmZVbEpIUjBKQ1gweEZBR2hsYVdaZlkyaHliMjFoWDJsdWRHVnliR1ZoZG1Wa1gxSlNSMGRDUWtGQlgweEZBR2hsYVdaZlkyaHliMjFoWDJsdWRHVnliR1ZoZG1Wa1h6STBZbWwwQUdobGFXWmZZMmh5YjIxaFgybHVkR1Z5YkdWaGRtVmtYek15WW1sMEFHaGxhV1pmWTI5c2IzSnpjR0ZqWlFCb1pXbG1YMk52Ykc5eWMzQmhZMlZmZFc1a1pXWnBibVZrQUdobGFXWmZZMjlzYjNKemNHRmpaVjlaUTJKRGNnQm9aV2xtWDJOdmJHOXljM0JoWTJWZlVrZENBR2hsYVdaZlkyOXNiM0p6Y0dGalpWOXRiMjV2WTJoeWIyMWxBR2hsYVdaZlkyaGhibTVsYkFCb1pXbG1YMk5vWVc1dVpXeGZXUUJvWldsbVgyTm9ZVzV1Wld4ZlEzSUFhR1ZwWmw5amFHRnVibVZzWDBOaUFHaGxhV1pmWTJoaGJtNWxiRjlTQUdobGFXWmZZMmhoYm01bGJGOUhBR2hsYVdaZlkyaGhibTVsYkY5Q0FHaGxhV1pmWTJoaGJtNWxiRjlCYkhCb1lRQm9aV2xtWDJOb1lXNXVaV3hmYVc1MFpYSnNaV0YyWldRQWFHVnBabDlqYjI1MFpYaDBBSFlBZG1rQWFHVnBabDlwYldGblpWOW9ZVzVrYkdVQWFHVnBabDlwYldGblpRQm9aV2xtWDJWeWNtOXlBR2tBWTI5a1pRQjJhV2xwQUhOMVltTnZaR1VBTVRCb1pXbG1YMlZ5Y205eUFGQkxNVEJvWldsbVgybHRZV2RsQUZBeE1HaGxhV1pmYVcxaFoyVUFNVEJvWldsbVgybHRZV2RsQUZCTE1UZG9aV2xtWDJsdFlXZGxYMmhoYm1Sc1pRQlFNVGRvWldsbVgybHRZV2RsWDJoaGJtUnNaUUF4TjJobGFXWmZhVzFoWjJWZmFHRnVaR3hsQUZCTE1USm9aV2xtWDJOdmJuUmxlSFFBVURFeWFHVnBabDlqYjI1MFpYaDBBREV5YUdWcFpsOWpiMjUwWlhoMEFERXlhR1ZwWmw5amFHRnVibVZzQURFMWFHVnBabDlqYjJ4dmNuTndZV05sQURFeGFHVnBabDlqYUhKdmJXRUFNak5vWldsbVgyTnZiWEJ5WlhOemFXOXVYMlp2Y20xaGRBQXhPR2hsYVdaZmMzVmlaWEp5YjNKZlkyOWtaUUF4TldobGFXWmZaWEp5YjNKZlkyOWtaUUJPTVRCbGJYTmpjbWx3ZEdWdU0zWmhiRVVBYVhOZmNISnBiV0Z5ZVFCMGFIVnRZbTVoYVd4ekFIZHBaSFJvQUdobGFXZG9kQUJqYUhKdmJXRUFZMjlzYjNKemNHRmpaUUJvWldsbVgybHRZV2RsWDJkbGRGOWphSEp2YldGZlptOXliV0YwS0dsdFlXZGxLU0E5UFNCb1pXbG1YMk5vY205dFlWOXBiblJsY214bFlYWmxaRjh5TkdKcGRBQXVMMmhsYVdaZlpXMXpZM0pwY0hSbGJpNW9BR2hsYVdaZmFXMWhaMlZmWjJWMFgyTm9jbTl0WVY5bWIzSnRZWFFvYVcxaFoyVXBJRDA5SUdobGFXWmZZMmh5YjIxaFgyMXZibTlqYUhKdmJXVUFaR0YwWVFCT1UzUXpYMTh5TVRKaVlYTnBZMTl6ZEhKcGJtZEpZMDVUWHpFeFkyaGhjbDkwY21GcGRITkpZMFZGVGxOZk9XRnNiRzlqWVhSdmNrbGpSVVZGUlFCT1UzUXpYMTh5TWpGZlgySmhjMmxqWDNOMGNtbHVaMTlqYjIxdGIyNUpUR0l4UlVWRkFFNVRkRE5mWHpJeU1GOWZjMmhoY21Wa1gzQjBjbDlsYlhCc1lXTmxTVTQwYUdWcFpqRXhTR1ZwWmtOdmJuUmxlSFJGVGxOZk9XRnNiRzlqWVhSdmNrbFRNbDlGUlVWRkFERXVNVEF1TUFCVGRXTmpaWE56QUV4bGMzTWdkR2hoYmlBNElHSjVkR1Z6SUc5bUlHUmhkR0VBUjNKcFpDQnBiV0ZuWlNCa1lYUmhJR2x1WTI5dGNHeGxkR1VBQ2dCUGRtVnliR0Y1SUdsdFlXZGxJR1JoZEdFZ2FXNWpiMjF3YkdWMFpRQlBkbVZ5YkdGNUlHbHRZV2RsSUdSaGRHRWdkbVZ5YzJsdmJpQUFJR2x6SUc1dmRDQnBiWEJzWlcxbGJuUmxaQ0I1WlhRQWVBQnBiV0ZuWlY5cGJtUmxlQ0E4SUcxZmIyWm1jMlYwY3k1emFYcGxLQ2tBYUdWcFpsOWpiMjUwWlhoMExtTmpBR2RsZEY5dlptWnpaWFFBVGxOME0xOWZNakl3WDE5emFHRnlaV1JmY0hSeVgyVnRjR3hoWTJWSlRqUm9aV2xtT0VobGFXWkdhV3hsUlU1VFh6bGhiR3h2WTJGMGIzSkpVekpmUlVWRlJRQm9kbU14QUdkeWFXUUFhV1JsYmdCcGIzWnNBR0YyTURFQUozQnBkRzBuSUdKdmVDQnlaV1psY21WdVkyVnpJR0VnYm05dUxXVjRhWE4wYVc1bklHbHRZV2RsQUVsdFlXZGxJSE5wZW1VZ0FDQmxlR05sWldSeklIUm9aU0J0WVhocGJYVnRJR2x0WVdkbElITnBlbVVnQUZSdmJ5QnRZVzU1SUhSb2RXMWlibUZwYkNCeVpXWmxjbVZ1WTJWekFGUm9kVzFpYm1GcGJDQnlaV1psY21WdVkyVnpJR0VnYm05dUxXVjRhWE4wYVc1bklHbHRZV2RsQUZSb2RXMWlibUZwYkNCeVpXWmxjbVZ1WTJWeklHRnViM1JvWlhJZ2RHaDFiV0p1WVdsc0FGSmxZM1Z5YzJsMlpTQjBhSFZ0WW01aGFXd2dhVzFoWjJVZ1pHVjBaV04wWldRQVRtOGdZWFY0UXlCd2NtOXdaWEowZVNCbWIzSWdhVzFoWjJVZ0FGUnZieUJ0WVc1NUlHRjFlR2xzYVdGeWVTQnBiV0ZuWlNCeVpXWmxjbVZ1WTJWekFIVnlianB0Y0dWbk9tRjJZem95TURFMU9tRjFlR2xrT2pFQWRYSnVPbTF3WldjNmFHVjJZem95TURFMU9tRjFlR2xrT2pFQWRYSnVPbTF3WldjNmJYQmxaMEk2WTJsamNEcHplWE4wWlcxek9tRjFlR2xzYVdGeWVUcGhiSEJvWVFCT2IyNHRaWGhwYzNScGJtY2dZV3h3YUdFZ2FXMWhaMlVnY21WbVpYSmxibU5sWkFCU1pXTjFjbk5wZG1VZ1lXeHdhR0VnYVcxaFoyVWdaR1YwWldOMFpXUUFkWEp1T20xd1pXYzZhR1YyWXpveU1ERTFPbUYxZUdsa09qSUFkWEp1T20xd1pXYzZiWEJsWjBJNlkybGpjRHB6ZVhOMFpXMXpPbUYxZUdsc2FXRnllVHBrWlhCMGFBQk9iMjR0WlhocGMzUnBibWNnWkdWd2RHZ2dhVzFoWjJVZ2NtVm1aWEpsYm1ObFpBQlNaV04xY25OcGRtVWdaR1Z3ZEdnZ2FXMWhaMlVnWkdWMFpXTjBaV1FBVG05dUxXVjRhWE4wYVc1bklHRjFlQ0JwYldGblpTQnlaV1psY21WdVkyVmtBRkpsWTNWeWMybDJaU0JoZFhnZ2FXMWhaMlVnWkdWMFpXTjBaV1FBVG04Z2FIWmpReUJ3Y205d1pYSjBlU0JwYmlCb2RtTXhJSFI1Y0dVZ2FXMWhaMlVBVFdWMFlXUmhkR0VnYm05MElHTnZjbkpsWTNSc2VTQmhjM05wWjI1bFpDQjBieUJwYldGblpRQk5aWFJoWkdGMFlTQmhjM05wWjI1bFpDQjBieUJ1YjI0dFpYaHBjM1JwYm1jZ2FXMWhaMlVBVGxOME0xOWZNakl3WDE5emFHRnlaV1JmY0hSeVgyVnRjR3hoWTJWSlRqUm9aV2xtTVROSmJXRm5aVTFsZEdGa1lYUmhSVTVUWHpsaGJHeHZZMkYwYjNKSlV6SmZSVVZGUlFCT05HaGxhV1l6TmxORlNVMWxjM05oWjJWZlpHVndkR2hmY21Wd2NtVnpaVzUwWVhScGIyNWZhVzVtYjBVQU16Qm9aV2xtWDJSbGNIUm9YM0psY0hKbGMyVnVkR0YwYVc5dVgybHVabThBVGpSb1pXbG1NVEJUUlVsTlpYTnpZV2RsUlFCT1UzUXpYMTh5TWpCZlgzTm9ZWEpsWkY5d2RISmZaVzF3YkdGalpVbE9OR2hsYVdZeE1VaGxhV1pEYjI1MFpYaDBOVWx0WVdkbFJVNVRYemxoYkd4dlkyRjBiM0pKVXpOZlJVVkZSUUJwYldkcGJtWnZBR1JsWTI5a1pWOXBiV0ZuWlY5d2JHRnVZWElBYVcxblgzZHBaSFJvSUQ0OUlEQUFhVzFuWDJobGFXZG9kQ0ErUFNBd0FFNXZJR2x5WldZZ1ltOTRJR0YyWVdsc1lXSnNaU3dnWW5WMElHNWxaV1JsWkNCbWIzSWdhVzkyYkNCcGJXRm5aUUJPZFcxaVpYSWdiMllnYVcxaFoyVWdiMlptYzJWMGN5QmtiMlZ6SUc1dmRDQnRZWFJqYUNCMGFHVWdiblZ0WW1WeUlHOW1JR2x0WVdkbElISmxabVZ5Wlc1alpYTUFUbThnYVhKbFppQmliM2dnWVhaaGFXeGhZbXhsTENCaWRYUWdibVZsWkdWa0lHWnZjaUJwWkdWdUlHbHRZV2RsQUNkcFpHVnVKeUJwYldGblpTQjNhWFJvSUcxdmNtVWdkR2hoYmlCdmJtVWdjbVZtWlhKbGJtTmxJR2x0WVdkbEFFNXZJR2x5WldZZ1ltOTRJR0YyWVdsc1lXSnNaU3dnWW5WMElHNWxaV1JsWkNCbWIzSWdaM0pwWkNCcGJXRm5aUUJ0WDNKdmQzTWdQRDBnTWpVMkFHZGxkRjl5YjNkekFHMWZZMjlzZFcxdWN5QThQU0F5TlRZQVoyVjBYMk52YkhWdGJuTUFWR2xzWldRZ2FXMWhaMlVnZDJsMGFDQUFQUUFnZEdsc1pYTXNJR0oxZENCdmJteDVJQUFnZEdsc1pTQnBiV0ZuWlhNZ2FXNGdabWxzWlFCVWFXeGxJR2x0WVdkbElFbEVQUUFnYVhNZ2JtOTBJR0VnY0hKdmNHVnlJR2x0WVdkbExnQWhhVzFoWjJWZmNtVm1aWEpsYm1ObGN5NWxiWEIwZVNncEFHUmxZMjlrWlY5bWRXeHNYMmR5YVdSZmFXMWhaMlVBVG04Z2NHbDRhU0JwYm1admNtMWhkR2x2YmlCbWIzSWdiSFZ0WVNCamFHRnVibVZzTGdCRWFXWm1aWEpsYm5RZ2JuVnRZbVZ5SUc5bUlHSnBkSE1nY0dWeUlIQnBlR1ZzSUdsdUlHVmhZMmdnWTJoaGJtNWxiQzRBVlc1bGVHbHpkR2x1WnlCbmNtbGtJR2x0WVdkbElISmxabVZ5Wlc1alpXUUFjM0pqWDNkcFpIUm9JRDQ5SURBQVpHVmpiMlJsWDJGdVpGOXdZWE4wWlY5MGFXeGxYMmx0WVdkbEFITnlZMTlvWldsbmFIUWdQajBnTUFCSmJXRm5aU0IwYVd4bElHaGhjeUJrYVdabVpYSmxiblFnWTJoeWIyMWhJR1p2Y20xaGRDQjBhR0Z1SUdOdmJXSnBibVZrSUdsdFlXZGxBRTVUZEROZlh6SXlNRjlmYzJoaGNtVmtYM0IwY2w5bGJYQnNZV05sU1U0MGFHVnBaak0yVTBWSlRXVnpjMkZuWlY5a1pYQjBhRjl5WlhCeVpYTmxiblJoZEdsdmJsOXBibVp2UlU1VFh6bGhiR3h2WTJGMGIzSkpVekpmUlVWRlJRQlRkV05qWlhOekFIZGhiblJmWVd4d2FHRWdKaVlnSVdoaGMxOWhiSEJvWVFCb1pXbG1YMk52Ykc5eVkyOXVkbVZ5YzJsdmJpNWpZd0JqYjI1MlpYSjBYMk52Ykc5eWMzQmhZMlVBTVRoUGNGOVNSMEpmZEc5ZlVrZENNalJmTXpJQVRqUm9aV2xtTWpSRGIyeHZja052Ym5abGNuTnBiMjVQY0dWeVlYUnBiMjVGQURJd1QzQmZXVU5pUTNJME1qQmZkRzlmVWtkQ01qUUFNakJQY0Y5WlEySkRjalF5TUY5MGIxOVNSMEl6TWdBeU5VOXdYMUpIUWw5SVJGSmZkRzlmVWxKSFIwSkNZV0ZmUWtVQU1qRlBjRjlTUjBKZmRHOWZVbEpIUjBKQ1lXRmZRa1VBTWpWUGNGOVNVa2RIUWtKaFlWOUNSVjkwYjE5U1IwSmZTRVJTQURJM1QzQmZVbEpIUjBKQ1lXRmZjM2RoY0Y5bGJtUnBZVzV1WlhOekFERTVUM0JmYlc5dWIxOTBiMTlaUTJKRGNqUXlNQUF4T1U5d1gyMXZibTlmZEc5ZlVrZENNalJmTXpJQU1qQlBjRjlTUjBJeU5GOHpNbDkwYjE5WlEySkRjZ0IwWVhKblpYUmZjM1JoZEdVdWJtTnNlRjl3Y205bWFXeGxBSFJoY21kbGRGOXpkR0YwWlM1dVkyeDRYM0J5YjJacGJHVXRQbWRsZEY5dFlYUnlhWGhmWTI5bFptWnBZMmxsYm5SektDa2dQVDBnTUFBeU4wOXdYMUpIUWpJMFh6TXlYM1J2WDFsRFlrTnlORFEwWDBkQ1VnQXhPVTl3WDJSeWIzQmZZV3h3YUdGZmNHeGhibVVBTVRaUGNGOTBiMTlvWkhKZmNHeGhibVZ6QURFMlQzQmZkRzlmYzJSeVgzQnNZVzVsY3dBeU4wOXdYMUpTUjBkQ1FuaDRYMGhFVWw5MGIxOVpRMkpEY2pReU1BQXlNMDl3WDFsRFlrTnlOREl3WDNSdlgxSlNSMGRDUW1GaEFFNVRkRE5mWHpJeU1GOWZjMmhoY21Wa1gzQjBjbDlsYlhCc1lXTmxTVEkzVDNCZlVsSkhSMEpDZUhoZlNFUlNYM1J2WDFsRFlrTnlOREl3VGxOZk9XRnNiRzlqWVhSdmNrbFRNVjlGUlVWRkFFNVRkRE5mWHpJeU1GOWZjMmhoY21Wa1gzQjBjbDlsYlhCc1lXTmxTVEUyVDNCZmRHOWZjMlJ5WDNCc1lXNWxjMDVUWHpsaGJHeHZZMkYwYjNKSlV6RmZSVVZGUlFCT1UzUXpYMTh5TWpCZlgzTm9ZWEpsWkY5d2RISmZaVzF3YkdGalpVa3hOazl3WDNSdlgyaGtjbDl3YkdGdVpYTk9VMTg1WVd4c2IyTmhkRzl5U1ZNeFgwVkZSVVVBVGxOME0xOWZNakl3WDE5emFHRnlaV1JmY0hSeVgyVnRjR3hoWTJWSk1UbFBjRjlrY205d1gyRnNjR2hoWDNCc1lXNWxUbE5mT1dGc2JHOWpZWFJ2Y2tsVE1WOUZSVVZGQURFMVQzQmZVa2RDWDNSdlgxbERZa055U1hSRkFFNVRkRE5mWHpJeU1GOWZjMmhoY21Wa1gzQjBjbDlsYlhCc1lXTmxTVEUxVDNCZlVrZENYM1J2WDFsRFlrTnlTWFJGVGxOZk9XRnNiRzlqWVhSdmNrbFRNbDlGUlVWRkFERTFUM0JmVWtkQ1gzUnZYMWxEWWtOeVNXaEZBRTVUZEROZlh6SXlNRjlmYzJoaGNtVmtYM0IwY2w5bGJYQnNZV05sU1RFMVQzQmZVa2RDWDNSdlgxbERZa055U1doRlRsTmZPV0ZzYkc5allYUnZja2xUTWw5RlJVVkZBRTVUZEROZlh6SXlNRjlmYzJoaGNtVmtYM0IwY2w5bGJYQnNZV05sU1RJM1QzQmZVa2RDTWpSZk16SmZkRzlmV1VOaVEzSTBORFJmUjBKU1RsTmZPV0ZzYkc5allYUnZja2xUTVY5RlJVVkZBRTVUZEROZlh6SXlNRjlmYzJoaGNtVmtYM0IwY2w5bGJYQnNZV05sU1RJd1QzQmZVa2RDTWpSZk16SmZkRzlmV1VOaVEzSk9VMTg1WVd4c2IyTmhkRzl5U1ZNeFgwVkZSVVVBVGxOME0xOWZNakl3WDE5emFHRnlaV1JmY0hSeVgyVnRjR3hoWTJWSk1qVlBjRjlTVWtkSFFrSmhZVjlDUlY5MGIxOVNSMEpmU0VSU1RsTmZPV0ZzYkc5allYUnZja2xUTVY5RlJVVkZBRTVUZEROZlh6SXlNRjlmYzJoaGNtVmtYM0IwY2w5bGJYQnNZV05sU1RJM1QzQmZVbEpIUjBKQ1lXRmZjM2RoY0Y5bGJtUnBZVzV1WlhOelRsTmZPV0ZzYkc5allYUnZja2xUTVY5RlJVVkZBRTVUZEROZlh6SXlNRjlmYzJoaGNtVmtYM0IwY2w5bGJYQnNZV05sU1RFNVQzQmZiVzl1YjE5MGIxOVNSMEl5TkY4ek1rNVRYemxoYkd4dlkyRjBiM0pKVXpGZlJVVkZSUUJPVTNRelgxOHlNakJmWDNOb1lYSmxaRjl3ZEhKZlpXMXdiR0ZqWlVreE9VOXdYMjF2Ym05ZmRHOWZXVU5pUTNJME1qQk9VMTg1WVd4c2IyTmhkRzl5U1ZNeFgwVkZSVVVBVGxOME0xOWZNakl3WDE5emFHRnlaV1JmY0hSeVgyVnRjR3hoWTJWSk1qRlBjRjlTUjBKZmRHOWZVbEpIUjBKQ1lXRmZRa1ZPVTE4NVlXeHNiMk5oZEc5eVNWTXhYMFZGUlVVQVRsTjBNMTlmTWpJd1gxOXphR0Z5WldSZmNIUnlYMlZ0Y0d4aFkyVkpNalZQY0Y5U1IwSmZTRVJTWDNSdlgxSlNSMGRDUW1GaFgwSkZUbE5mT1dGc2JHOWpZWFJ2Y2tsVE1WOUZSVVZGQUU1VGRETmZYekl5TUY5ZmMyaGhjbVZrWDNCMGNsOWxiWEJzWVdObFNUSXpUM0JmV1VOaVEzSTBNakJmZEc5ZlVsSkhSMEpDWVdGT1UxODVZV3hzYjJOaGRHOXlTVk14WDBWRlJVVUFUbE4wTTE5Zk1qSXdYMTl6YUdGeVpXUmZjSFJ5WDJWdGNHeGhZMlZKTWpCUGNGOVpRMkpEY2pReU1GOTBiMTlTUjBJek1rNVRYemxoYkd4dlkyRjBiM0pKVXpGZlJVVkZSUUJPVTNRelgxOHlNakJmWDNOb1lYSmxaRjl3ZEhKZlpXMXdiR0ZqWlVreU1FOXdYMWxEWWtOeU5ESXdYM1J2WDFKSFFqSTBUbE5mT1dGc2JHOWpZWFJ2Y2tsVE1WOUZSVVZGQURFMVQzQmZXVU5pUTNKZmRHOWZVa2RDU1doRkFFNVRkRE5mWHpJeU1GOWZjMmhoY21Wa1gzQjBjbDlsYlhCc1lXTmxTVEUxVDNCZldVTmlRM0pmZEc5ZlVrZENTV2hGVGxOZk9XRnNiRzlqWVhSdmNrbFRNbDlGUlVWRkFERTFUM0JmV1VOaVEzSmZkRzlmVWtkQ1NYUkZBRTVUZEROZlh6SXlNRjlmYzJoaGNtVmtYM0IwY2w5bGJYQnNZV05sU1RFMVQzQmZXVU5pUTNKZmRHOWZVa2RDU1hSRlRsTmZPV0ZzYkc5allYUnZja2xUTWw5RlJVVkZBRTVUZEROZlh6SXlNRjlmYzJoaGNtVmtYM0IwY2w5bGJYQnNZV05sU1RFNFQzQmZVa2RDWDNSdlgxSkhRakkwWHpNeVRsTmZPV0ZzYkc5allYUnZja2xUTVY5RlJVVkZBQ0ZqYUdGdWJtVnNjeTVsYlhCMGVTZ3BBRk4xWTJObGMzTUFRMkZ1Ym05MElHRnNiRzlqWVhSbElHMWxiVzl5ZVNCbWIzSWdhVzFoWjJVZ2NHeGhibVVBUTJoaGJtNWxiSE1nZDJsMGFDQmthV1ptWlhKbGJuUWdiblZ0WW1WeUlHOW1JR0pwZEhNZ2NHVnlJSEJwZUdWc0lHRnlaU0J1YjNRZ2MzVndjRzl5ZEdWa0FHeHBZbVJsTWpZMUlFaEZWa01nWkdWamIyUmxjZ0FzSUhabGNuTnBiMjRnQURFdU1DNHlBR1JsTWpZMUxtTmpBR1JsTWpZMVgzTmxkRjl3WVhKaGJXVjBaWEpmWW05dmJBQmphR0Z1Ym1Wc1BqMHdJQ1ltSUdOb1lXNXVaV3dnUEQwZ01nQmtaVEkyTlY5blpYUmZhVzFoWjJWZmNHeGhibVVBTVRWa1pXTnZaR1Z5WDJOdmJuUmxlSFFBTVRKaVlYTmxYMk52Ym5SbGVIUUFNVEZsY25KdmNsOXhkV1YxWlFCMGFISmxZV1JmWTI5dWRHVjRkSE05UFU1VlRFd0FaR1ZqWTNSNExtTmpBR0ZzYkc5allYUmxYM1JvY21WaFpGOWpiMjUwWlhoMGN3QmtaV052WkdWZmMyeHBZMlZmZFc1cGRGOXdZWEpoYkd4bGJBQnBiV2N0UG01MWJWOTBhSEpsWVdSelgyRmpkR2wyWlNncElEMDlJREFBWkdWamIyUmxYM05zYVdObFgzVnVhWFJmZEdsc1pYTUFiaUE4SUc1VWFISmxZV1JEYjI1MFpYaDBjd0F1TDJSbFkyTjBlQzVvQUdkbGRGOTBhSEpsWVdSZlkyOXVkR1Y0ZEFCa1pXTnZaR1ZmYzJ4cFkyVmZkVzVwZEY5WFVGQUFVRkJUSUNWa0lHaGhjeUJ1YjNRZ1ltVmxiaUJ5WldGa0NnQndjbTlqWlhOelgzTnNhV05sWDNObFoyMWxiblJmYUdWaFpHVnlBR2hrY2kwK2JuVnRYM0psWmw5cFpIaGZiREJmWVdOMGFYWmxJRHc5SURFMkFHTnZibk4wY25WamRGOXlaV1psY21WdVkyVmZjR2xqZEhWeVpWOXNhWE4wY3dCb1pISXRQbTUxYlY5eVpXWmZhV1I0WDJ3eFgyRmpkR2wyWlNBOFBTQXhOZ0JqZEhndFBtUndZaTVvWVhOZlpuSmxaVjlrY0dKZmNHbGpkSFZ5WlNoMGNuVmxLUUJuWlc1bGNtRjBaVjkxYm1GMllXbHNZV0pzWlY5eVpXWmxjbVZ1WTJWZmNHbGpkSFZ5WlFCcFpIZytQVEFBYm1Gc0FHUmxZMjlrWlFCbVlXeHNZbUZqYXkxa1kzUXVZMk1BZEhKaGJuTm1iM0p0WDNOcmFYQmZPRjltWVd4c1ltRmphd0IwY21GdWMyWnZjbTFmYzJ0cGNGOHhObDltWVd4c1ltRmphd0JBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFGcGFXRlZTVGtsRFBUWXVKaDhXRFFUODgrcmgydExLdzcyM3NxNnJxS2FtV2xkUVJqa3JHUW4zNTlYSHVyQ3BwcWFwc0xySDFlZjNDUmtyT1VaUVYxcGFVa011RnZ6aHlyZXJwcWl5dzlyekRTWTlUbGhhVlVrMkh3VHEwcjJ1cGxsTE1oTHV6clducDdYTzdoSXlTMWxaU3pJUzdzNjFwNmUxenU0U01rdFpXRU1mODhxdXByTFMvQ1pKV2xVOUZ1ckRxNmEzMmdRdVRscFNOZzNodmFoWE9RblZzS2E2NXhsR1dsQXI5OGVwcWNmM0sxQmFSaG5udXFhdzFRazVWMVV1ODcybXQrb21VbGcyL01PbXN1RWZUbG85Qk1xb3J0b1dTVnBERGRLclV5VGNyYTNjSkZOVEpOeXRyZHdrVTFNazNLMnQzQ1JUVXlUY3JhM2NKRk5TRnNxbXd3MU9WUi9TcHIwRVNWZ20ycWkzL0VOYUx1R3Jzdk05V2picXJsQUp1cW5uT1ZvcjFhYkhHVmRHOTdDdzkwWlhHY2VtMVN0YU9lZXB1Z2xRVHZ5dXR3MVZRK3Fvd3g5YU50cW0waTVhSnNxbTRUMVlGcjJyODBsU0JMSkw3cWZPTWxrU3RiVVNXVExPcCs1TFMrNm56akpaRXJXMUVsa3l6cWZ1UzBuaHB1cE9ROXFtODFJOTBxajhWVGJLcXdSWUxzT3VEVm9tdmJJV1doKzNSdFdwQ1ZvWnNNYzVVT2VtOTFjcnVyb3JWL2VtNTFBNXg3QVpXZ21wMVVaRHlySW1WZXFtQkZvTnFPRlNMcmZEUFVuU3JoOVk4NmI4V2hhcjJrNDJ2VURBd0VCQXdNQkFRTURBUUVEQXdFQkF3TUJBUU1EQVFFREF3RUJBd01CQVBiZlNVaCtvODFyOHBoWlYyckkyUTczS1RpYXI2bG9FcGcxWTRhNHVTY001c09kYTk2a3JScnJWVndtbUdWREh4MUFacGdsWDFicEdLNm4zV3Vld09UYXIvRmpTdzFJTnBpWkRzdXBhNGJkSkg2WVdUcjNhV3ZPdVBTNm9CRlhLTXFjU1M3WHVXYzdPV2U2MVN4S25NaktuRWt1MTdsbk96bG51dFVzU3B6SXVwaVkycGg4OXFCWkRxdzFKcmdST3N2eFN0L05WdmVwWXcrRmF5dHBhMGl1bU9SbXBSZ213VVBlNlYrZkhXdFhWV3NmblY3cjNVTEFKUnFrWk9hWXJKcWhKL0wxYTB1RlZzZzA5cGpZV3JsTHF5bHJEODA2ckh5Nm1Rd1MzV05va3JWUGMzRk90SkNTdFU5emNVNjBrSksxVDNOeFRyU1FrclZQYzNGT3RKQit5V3NNRU5xaFMydXBKcGtQejBsV3JMZzI5V3JjV0pxNVl5dnc5cGs3aEdicGFzQ3NKeDFlcE9mZlZVS1pHNStkR3BsRFY5em1wVjhjSks3QmF1aGtXdzFXbVNkcjhMckphcmpiejRVT29XTDBmRGNwU3BrN1NCQ2EzV3FzOTZoTE9TNmRadFRMdTdqSzFXYWRMemhJU3prdW5XYlV5N3U0eXRWbW5TODRTRGRvOXNsaW1WYmMyNFFRVzBrT3VXcVpTdlM3cS9CL0tTYXRhcUU3REp2TUo1eXZIUnJCWHBscXBVTG81MVJuMzl4blZPYnBRcVZxbVY3Qkd4eXZuQ1FUekZ1RW0wamJEUTdkT3JsV29XcVphcGxpclVySkp2VDNLTHRvZjZnMzhLSGRwWkhSb0pqRXBQVDB3QUdaaGJHeGlZV05yTFcxdmRHbHZiaTVqWXdCd2RYUmZkVzUzWldsbmFIUmxaRjl3Y21Wa1h6aGZabUZzYkdKaFkyc0FiRzluTWxkRVBqMHhBSEIxZEY5M1pXbG5hSFJsWkY5d2NtVmtYemhmWm1Gc2JHSmhZMnNBY0hWMFgzZGxhV2RvZEdWa1gySnBjSEpsWkY4NFgyWmhiR3hpWVdOckFIQjFkRjkzWldsbmFIUmxaRjl3Y21Wa1gyRjJaMTg0WDJaaGJHeGlZV05yQUhCMWRGOTFibmRsYVdkb2RHVmtYM0J5WldSZk1UWmZabUZzYkdKaFkyc0FjSFYwWDNkbGFXZG9kR1ZrWDNCeVpXUmZNVFpmWm1Gc2JHSmhZMnNBY0hWMFgzZGxhV2RvZEdWa1gySnBjSEpsWkY4eE5sOW1ZV3hzWW1GamF3QndkWFJmZDJWcFoyaDBaV1JmY0hKbFpGOWhkbWRmTVRaZlptRnNiR0poWTJzQUlYSmxiM0prWlhKZmIzVjBjSFYwWDNGMVpYVmxMbVZ0Y0hSNUtDa0FaSEJpTG1OakFHOTFkSEIxZEY5dVpYaDBYM0JwWTNSMWNtVmZhVzVmY21WdmNtUmxjbDlpZFdabVpYSUFibVYzWDJsdFlXZGxBR2x0WnkwK2MzQnpMa0pwZEVSbGNIUm9YMWtnUGowZ09DQW1KaUJwYldjdFBuTndjeTVDYVhSRVpYQjBhRjlaSUR3OUlERTJBR2x0WVdkbExtTmpBR1JsTWpZMVgybHRZV2RsWDJkbGRGOWlkV1ptWlhJQWFXMW5MVDV6Y0hNdVFtbDBSR1Z3ZEdoZlF5QStQU0E0SUNZbUlHbHRaeTArYzNCekxrSnBkRVJsY0hSb1gwTWdQRDBnTVRZQWMzQnpBR0ZzYkc5algybHRZV2RsQUdacGNuTjBJQ1VnTWlBOVBTQXdBR052Y0hsZmJHbHVaWE5mWm5KdmJRQmxibVFnSlNBeUlEMDlJREFBYmxSb2NtVmhaSE5TZFc1dWFXNW5JRDQ5SURBQWRHaHlaV0ZrWDJacGJtbHphR1Z6QUM0dmFXMWhaMlV1YUFCd1pXNWthVzVuWDJsdWNIVjBYMDVCVENBOVBTQk9WVXhNQUc1aGJDMXdZWEp6WlhJdVkyTUFjSFZ6YUY5T1FVd0FMUzB0TFMwdExTMHRMU0JRVUZNZ2NtRnVaMlV0WlhoMFpXNXphVzl1SUMwdExTMHRMUzB0TFMwS0FHeHZaekpmYldGNFgzUnlZVzV6Wm05eWJWOXphMmx3WDJKc2IyTnJYM05wZW1VZ0lDQWdJQ0E2SUNWa0NnQmpjbTl6YzE5amIyMXdiMjVsYm5SZmNISmxaR2xqZEdsdmJsOWxibUZpYkdWa1gyWnNZV2NnT2lBbFpBb0FZMmh5YjIxaFgzRndYMjltWm5ObGRGOXNhWE4wWDJWdVlXSnNaV1JmWm14aFp5QWdJQ0FnSURvZ0pXUUtBR1JwWm1aZlkzVmZZMmh5YjIxaFgzRndYMjltWm5ObGRGOWtaWEIwYUNBZ0lDQWdJQ0FnSUNBNklDVmtDZ0JqYUhKdmJXRmZjWEJmYjJabWMyVjBYMnhwYzNSZmJHVnVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ09pQWxaQW9BWTJKZmNYQmZiMlptYzJWMFgyeHBjM1JiSldSZElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQTZJQ1ZrQ2dCamNsOXhjRjl2Wm1aelpYUmZiR2x6ZEZzbFpGMGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRG9nSldRS0FHeHZaekpmYzJGdlgyOW1abk5sZEY5elkyRnNaVjlzZFcxaElDQWdJQ0FnSUNBZ0lDQWdJQ0E2SUNWa0NnQnNiMmN5WDNOaGIxOXZabVp6WlhSZmMyTmhiR1ZmWTJoeWIyMWhJQ0FnSUNBZ0lDQWdJQ0FnT2lBbFpBb0FkR2xzWlZnK1BUQWdKaVlnZEdsc1pWaytQVEFBY0hCekxtTmpBSE5sZEY5a1pYSnBkbVZrWDNaaGJIVmxjd0F0TFMwdExTMHRMUzB0TFMwdExTMHRMU0JRVUZNZ0xTMHRMUzB0TFMwdExTMHRMUzB0TFMwS0FIQnBZMTl3WVhKaGJXVjBaWEpmYzJWMFgybGtJQ0FnSUNBZ0lEb2dKV1FLQUhObGNWOXdZWEpoYldWMFpYSmZjMlYwWDJsa0lDQWdJQ0FnSURvZ0pXUUtBR1JsY0dWdVpHVnVkRjl6YkdsalpWOXpaV2R0Wlc1MGMxOWxibUZpYkdWa1gyWnNZV2NnT2lBbFpBb0FjMmxuYmw5a1lYUmhYMmhwWkdsdVoxOW1iR0ZuSUNBZ0lDQWdPaUFsWkFvQVkyRmlZV05mYVc1cGRGOXdjbVZ6Wlc1MFgyWnNZV2NnSUNBZ09pQWxaQW9BYm5WdFgzSmxabDlwWkhoZmJEQmZaR1ZtWVhWc2RGOWhZM1JwZG1VZ09pQWxaQW9BYm5WdFgzSmxabDlwWkhoZmJERmZaR1ZtWVhWc2RGOWhZM1JwZG1VZ09pQWxaQW9BY0dsalgybHVhWFJmY1hBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnT2lBbFpBb0FZMjl1YzNSeVlXbHVaV1JmYVc1MGNtRmZjSEpsWkY5bWJHRm5PaUFsWkFvQWRISmhibk5tYjNKdFgzTnJhWEJmWlc1aFlteGxaRjltYkdGbk9pQWxaQW9BWTNWZmNYQmZaR1ZzZEdGZlpXNWhZbXhsWkY5bWJHRm5JQ0FnT2lBbFpBb0FaR2xtWmw5amRWOXhjRjlrWld4MFlWOWtaWEIwYUNBZ0lDQWdPaUFsWkFvQWNHbGpYMk5pWDNGd1gyOW1abk5sZENBZ0lDQWdJQ0FnSUNBZ0lDQTZJQ1ZrQ2dCd2FXTmZZM0pmY1hCZmIyWm1jMlYwSUNBZ0lDQWdJQ0FnSUNBZ0lEb2dKV1FLQUhCd2MxOXpiR2xqWlY5amFISnZiV0ZmY1hCZmIyWm1jMlYwYzE5d2NtVnpaVzUwWDJac1lXY2dPaUFsWkFvQWQyVnBaMmgwWldSZmNISmxaRjltYkdGbklDQWdJQ0FnSUNBZ0lDQTZJQ1ZrQ2dCM1pXbG5hSFJsWkY5aWFYQnlaV1JmWm14aFp5QWdJQ0FnSUNBZ0lEb2dKV1FLQUc5MWRIQjFkRjltYkdGblgzQnlaWE5sYm5SZlpteGhaeUFnSUNBZ09pQWxaQW9BZEhKaGJuTnhkV0Z1ZEY5aWVYQmhjM05mWlc1aFlteGxYMlpzWVdjNklDVmtDZ0IwYVd4bGMxOWxibUZpYkdWa1gyWnNZV2NnSUNBZ0lDQWdJQ0FnSURvZ0pXUUtBR1Z1ZEhKdmNIbGZZMjlrYVc1blgzTjVibU5mWlc1aFlteGxaRjltYkdGbk9pQWxaQW9BYm5WdFgzUnBiR1ZmWTI5c2RXMXVjeUFnSUNBNklDVmtDZ0J1ZFcxZmRHbHNaVjl5YjNkeklDQWdJQ0FnSURvZ0pXUUtBSFZ1YVdadmNtMWZjM0JoWTJsdVoxOW1iR0ZuT2lBbFpBb0FkR2xzWlNCamIyeDFiVzRnWW05MWJtUmhjbWxsY3pvZ0FIUnBiR1VnY205M0lHSnZkVzVrWVhKcFpYTTZJQUFxSldRZ0FHeHZiM0JmWm1sc2RHVnlYMkZqY205emMxOTBhV3hsYzE5bGJtRmliR1ZrWDJac1lXY2dPaUFsWkFvQWNIQnpYMnh2YjNCZlptbHNkR1Z5WDJGamNtOXpjMTl6YkdsalpYTmZaVzVoWW14bFpGOW1iR0ZuT2lBbFpBb0FaR1ZpYkc5amEybHVaMTltYVd4MFpYSmZZMjl1ZEhKdmJGOXdjbVZ6Wlc1MFgyWnNZV2M2SUNWa0NnQmtaV0pzYjJOcmFXNW5YMlpwYkhSbGNsOXZkbVZ5Y21sa1pWOWxibUZpYkdWa1gyWnNZV2M2SUNWa0NnQndhV05mWkdsellXSnNaVjlrWldKc2IyTnJhVzVuWDJacGJIUmxjbDltYkdGbk9pQWxaQW9BWW1WMFlWOXZabVp6WlhRNklDQWxaQW9BZEdOZmIyWm1jMlYwT2lBZ0lDQWxaQW9BY0dsalgzTmpZV3hwYm1kZmJHbHpkRjlrWVhSaFgzQnlaWE5sYm5SZlpteGhaem9nSldRS0FHeHBjM1J6WDIxdlpHbG1hV05oZEdsdmJsOXdjbVZ6Wlc1MFgyWnNZV2M2SUNWa0NnQnNiMmN5WDNCaGNtRnNiR1ZzWDIxbGNtZGxYMnhsZG1Wc0lDQWdJQ0FnT2lBbFpBb0FiblZ0WDJWNGRISmhYM05zYVdObFgyaGxZV1JsY2w5aWFYUnpJQ0FnSURvZ0pXUUtBSE5zYVdObFgzTmxaMjFsYm5SZmFHVmhaR1Z5WDJWNGRHVnVjMmx2Ymw5d2NtVnpaVzUwWDJac1lXY2dPaUFsWkFvQWNIQnpYMlY0ZEdWdWMybHZibDltYkdGbklDQWdJQ0FnSUNBZ0lDQWdPaUFsWkFvQWNIQnpYM0poYm1kbFgyVjRkR1Z1YzJsdmJsOW1iR0ZuSUNBZ0lDQWdPaUFsWkFvQWNIQnpYMjExYkhScGJHRjVaWEpmWlhoMFpXNXphVzl1WDJac1lXY2dPaUFsWkFvQWNIQnpYMlY0ZEdWdWMybHZibDgyWW1sMGN5QWdJQ0FnSUNBZ0lDQWdPaUFsWkFvQVRHOW5NazFwYmtOMVVYQkVaV3gwWVZOcGVtVWdJQ0FnSUNBZ0lDQWdPaUFsWkFvQVRHOW5NazFwYmtOMVEyaHliMjFoVVhCUFptWnpaWFJUYVhwbElDaFNSWGgwS1NBNklDVmtDZ0JNYjJjeVRXRjRWSEpoYm5ObWIzSnRVMnRwY0ZOcGVtVWdJQ0FnS0ZKRmVIUXBJRG9nSldRS0FITmhieTBsWkFBeE5YUm9jbVZoWkY5MFlYTnJYM05oYndBeE1YUm9jbVZoWkY5MFlYTnJBRk5GU1NCa1pXTnZaR1ZrSUhCcFkzUjFjbVVnVFVRMUlHMXBjMjFoZEdOb0lDaFFUME05SldRcENnQlRSVWtnWkdWamIyUmxaQ0J3YVdOMGRYSmxJR2hoYzJnNklDVXdOSGdzSUdSbFkyOWtaV1FnY0dsamRIVnlaVG9nSlRBMGVDQW9VRTlEUFNWa0tRb0FjMnhwWTJVdGMyVm5iV1Z1ZEMwbFpEc2xaQUJwYm1sMFZIbHdaU0ErUFNBd0lDWW1JR2x1YVhSVWVYQmxJRHc5SURJQWMyeHBZMlV1WTJNQWFXNXBkR2xoYkdsNlpWOURRVUpCUTE5dGIyUmxiSE1BWkdWamIyUmxYM0JoY25SZmJXOWtaUUFBQVFJQ0FnSURCUWNJQ2d3TkR4RVNFeFFWRmhjWEdCZ1pHUm9iR3h3Y0hSMGVIM0psWVdSZlkyOWthVzVuWDNWdWFYUUFVSEpsWkUxdlpHVWdQVDBnWTNWUWNtVmtUVzlrWlFCeVpXRmtYM1J5WVc1elptOXliVjkwY21WbEFHTnZiblJsZUhRZ1BqMGdNQ0FtSmlCamIyNTBaWGgwSUR3OUlESUFaR1ZqYjJSbFgzTndiR2wwWDNSeVlXNXpabTl5YlY5bWJHRm5BQ0VvZEhKaFptOUVaWEIwYUQwOU1DQW1KaUJzYjJjeVZISmhabTlUYVhwbFBUMHlLUUJqWW1aZlkySWdJVDBnTFRFQWNtVmhaRjkwY21GdWMyWnZjbTFmZFc1cGRBQmpZbVpmWTNJZ0lUMGdMVEVBWTJKbVgyeDFiV0VnSVQwZ0xURUFlRHh6Y0hNdVVHbGpWMmxrZEdoSmJrMXBibEJWY3dCelpYUmZTVzUwY21GUWNtVmtUVzlrWlVNQWVUeHpjSE11VUdsalNHVnBaMmgwU1c1TmFXNVFWWE1BYVdSNFBHbHVkSEpoVUhKbFpFMXZaR1ZETG1SaGRHRmZjMmw2WlFBeU5YUm9jbVZoWkY5MFlYTnJYM05zYVdObFgzTmxaMjFsYm5RQVkzUmlMWEp2ZHkwbFpBQXhPWFJvY21WaFpGOTBZWE5yWDJOMFlsOXliM2NBY0hCekxUNXdjSE5mY21WaFpBQmtkVzF3WDNOc2FXTmxYM05sWjIxbGJuUmZhR1ZoWkdWeUFITndjeTArYzNCelgzSmxZV1FBTFMwdExTMHRMUzB0TFMwdExTMHRMUzBnVTB4SlEwVWdMUzB0TFMwdExTMHRMUzB0TFMwdExTMEtBR1pwY25OMFgzTnNhV05sWDNObFoyMWxiblJmYVc1ZmNHbGpYMlpzWVdjZ0lDQWdJQ0E2SUNWa0NnQnViMTl2ZFhSd2RYUmZiMlpmY0hKcGIzSmZjR2xqYzE5bWJHRm5JQ0FnSUNBZ0lDQWdPaUFsWkFvQWMyeHBZMlZmY0dsalgzQmhjbUZ0WlhSbGNsOXpaWFJmYVdRZ0lDQWdJQ0FnSUNBZ0lEb2dKV1FLQUdSbGNHVnVaR1Z1ZEY5emJHbGpaVjl6WldkdFpXNTBYMlpzWVdjZ0lDQWdJQ0FnSUNBNklDVmtDZ0J6YkdsalpWOXpaV2R0Wlc1MFgyRmtaSEpsYzNNZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnT2lBbFpBb0FjMnhwWTJWZmRIbHdaU0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRG9nSldNS0FIQnBZMTl2ZFhSd2RYUmZabXhoWnlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQTZJQ1ZrQ2dCamIyeHZkWEpmY0d4aGJtVmZhV1FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ09pQWxaQW9BYzJ4cFkyVmZjR2xqWDI5eVpHVnlYMk51ZEY5c2MySWdJQ0FnSUNBZ0lDQWdJQ0FnSURvZ0pXUUtBSE5vYjNKMFgzUmxjbTFmY21WbVgzQnBZMTl6WlhSZmMzQnpYMlpzWVdjZ0lDQWdJQ0E2SUNWa0NnQnphRzl5ZEY5MFpYSnRYM0psWmw5d2FXTmZjMlYwWDJsa2VDQWdJQ0FnSUNBZ0lDQWdPaUFsWkFvQWJuVnRYMnh2Ym1kZmRHVnliVjl6Y0hNZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E2SUNWa0NnQnVkVzFmYkc5dVoxOTBaWEp0WDNCcFkzTWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSURvZ0pXUUtBSE5zYVdObFgzUmxiWEJ2Y21Gc1gyMTJjRjlsYm1GaWJHVmtYMlpzWVdjZ09pQWxaQW9BYzJ4cFkyVmZjMkZ2WDJ4MWJXRmZabXhoWnlBZ0lDQWdJQ0FnSUNBZ0lDQTZJQ1ZrQ2dCemJHbGpaVjl6WVc5ZlkyaHliMjFoWDJac1lXY2dJQ0FnSUNBZ0lDQWdJRG9nSldRS0FHNTFiVjl5WldaZmFXUjRYMkZqZEdsMlpWOXZkbVZ5Y21sa1pWOW1iR0ZuSURvZ0pXUUtBQ2htY205dElGQlFVeWtBYm5WdFgzSmxabDlwWkhoZmJEQmZZV04wYVhabElDQWdJQ0FnSUNBZ0lEb2dKV1FnSlhNS0FHNTFiVjl5WldaZmFXUjRYMnd4WDJGamRHbDJaU0FnSUNBZ0lDQWdJQ0E2SUNWa0lDVnpDZ0J5WldaZmNHbGpYMnhwYzNSZmJXOWthV1pwWTJGMGFXOXVYMlpzWVdkZmJEQWdPaUFsWkFvQUlDQWxaRG9nSldRS0FISmxabDl3YVdOZmJHbHpkRjl0YjJScFptbGpZWFJwYjI1ZlpteGhaMTlzTVNBNklDVmtDZ0J0ZG1SZmJERmZlbVZ5YjE5bWJHRm5JQ0FnSUNBZ0lDQWdJQ0FnSUNBZ09pQWxaQW9BWTJGaVlXTmZhVzVwZEY5bWJHRm5JQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lEb2dKV1FLQUdOdmJHeHZZMkYwWldSZlpuSnZiVjlzTUY5bWJHRm5JQ0FnSUNBZ0lDQTZJQ1ZrQ2dCamIyeHNiMk5oZEdWa1gzSmxabDlwWkhnZ0lDQWdJQ0FnSUNBZ0lDQWdPaUFsWkFvQWJIVnRZVjlzYjJjeVgzZGxhV2RvZEY5a1pXNXZiU0FnSUNBZ0lDQWdJRG9nSldRS0FFTm9jbTl0WVV4dlp6SlhaV2xuYUhSRVpXNXZiU0FnSUNBZ0lDQWdJQ0E2SUNWa0NnQk1kVzFoVjJWcFoyaDBYMHdsWkZzbFpGMGdJQ0FnSUNBZ0lDQWdJQ0FnT2lBbFpBb0FiSFZ0WVY5dlptWnpaWFJmYkNWa1d5VmtYU0FnSUNBZ0lDQWdJQ0FnSURvZ0pXUUtBRU5vY205dFlWZGxhV2RvZEY5TUpXUmJKV1JkV3lWa1hTQWdJQ0FnSUNBZ09pQWxaQW9BUTJoeWIyMWhUMlptYzJWMFgwd2xaRnNsWkYxYkpXUmRJQ0FnSUNBZ0lDQTZJQ1ZrQ2dCbWFYWmxYMjFwYm5WelgyMWhlRjl1ZFcxZmJXVnlaMlZmWTJGdVpDQWdPaUFsWkFvQWMyeHBZMlZmY1hCZlpHVnNkR0VnSUNBZ0lDQWdJQ0E2SUNWa0NnQnpiR2xqWlY5allsOXhjRjl2Wm1aelpYUWdJQ0FnSURvZ0pXUUtBSE5zYVdObFgyTnlYM0Z3WDI5bVpuTmxkQ0FnSUNBZ09pQWxaQW9BWkdWaWJHOWphMmx1WjE5bWFXeDBaWEpmYjNabGNuSnBaR1ZmWm14aFp5QTZJQ1ZrQ2dBb2IzWmxjbkpwWkdVcEFDaG1jbTl0SUhCd2N5a0FjMnhwWTJWZlpHVmliRzlqYTJsdVoxOW1hV3gwWlhKZlpHbHpZV0pzWldSZlpteGhaeUE2SUNWa0lDVnpDZ0J6YkdsalpWOWlaWFJoWDI5bVpuTmxkQ0FnT2lBbFpBb0FjMnhwWTJWZmRHTmZiMlptYzJWMElDQWdJRG9nSldRS0FITnNhV05sWDJ4dmIzQmZabWxzZEdWeVgyRmpjbTl6YzE5emJHbGpaWE5mWlc1aFlteGxaRjltYkdGbklEb2dKV1FLQUc1MWJWOWxiblJ5ZVY5d2IybHVkRjl2Wm1aelpYUnpJQ0FnSURvZ0pXUUtBRzltWm5ObGRGOXNaVzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRG9nSldRS0FHVnVkSEo1SUhCdmFXNTBJRnNsYVYwZ09pQWxaQW9BQUFFRUJRSURCQVVHQmdnSUJ3Y0lZMk4wZUVsa2VFeHZiMnQxY0Z0c2IyY3lkeTB5WFZ0alNXUjRYVnR6WTJGdVNXUjRYVnR3Y21WMlEzTmlabDFiZUVNcktIbERQRHhzYjJjeWR5bGRJRDA5SUdOMGVFbGtlRWx1WXdCaGJHeHZZMTloYm1SZmFXNXBkRjl6YVdkdWFXWnBZMkZ1ZEY5amIyVm1abDlqZEhoSlpIaGZiRzl2YTNWd1ZHRmliR1VBY21WbVBEY0FjM0J6TG1OakFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVSQVJFQkVTRVJJU0VSSVZFeFFWRkJNVkdCWVdHQmdXRmhnWkdSc2VHeGtaSFI4akl4OGRKQ2tzS1NRdk5qWXZRVVpCV0ZoekVCQVFFQkFRRUJBUUVCRVJFUkVSRWhJU0VoSVNGQlFVRkJRVUZCZ1lHQmdZR0JnWUdSa1pHUmtaR1J3Y0hCd2NIQ0VoSVNFaEtTa3BLVFkyTmtkSFcyWnBiR3hmYzJOaGJHbHVaMTltWVdOMGIzSUFjMk5oYkdsdVoxOXNhWE4wWDNCeVpXUmZiV0YwY21sNFgybGtYMlJsYkhSaFBUMHhBSEpsWVdSZmMyTmhiR2x1WjE5c2FYTjBBQzB0TFMwdExTMHRMUzB0TFMwdExTMHRJRk5RVXlBdExTMHRMUzB0TFMwdExTMHRMUzB0TFFvQWRtbGtaVzlmY0dGeVlXMWxkR1Z5WDNObGRGOXBaQ0FnT2lBbFpBb0FjM0J6WDIxaGVGOXpkV0pmYkdGNVpYSnpJQ0FnSUNBZ09pQWxaQW9BYzNCelgzUmxiWEJ2Y21Gc1gybGtYMjVsYzNScGJtZGZabXhoWnlBNklDVmtDZ0J6WlhGZmNHRnlZVzFsZEdWeVgzTmxkRjlwWkNBZ0lDQTZJQ1ZrQ2dBME9qUTZOQUIxYm10dWIzZHVBRzF2Ym05amFISnZiV1VBTkRveU9qQUFORG95T2pJQVkyaHliMjFoWDJadmNtMWhkRjlwWkdNZ0lDQWdJQ0FnT2lBbFpDQW9KWE1wQ2dCelpYQmhjbUYwWlY5amIyeHZkWEpmY0d4aGJtVmZabXhoWnlBNklDVmtDZ0J3YVdOZmQybGtkR2hmYVc1ZmJIVnRZVjl6WVcxd2JHVnpJQ0E2SUNWa0NnQndhV05mYUdWcFoyaDBYMmx1WDJ4MWJXRmZjMkZ0Y0d4bGN5QTZJQ1ZrQ2dCamIyNW1iM0p0WVc1alpWOTNhVzVrYjNkZlpteGhaeUFnSUNBNklDVmtDZ0JqYjI1bVgzZHBibDlzWldaMFgyOW1abk5sZENBZ09pQWxaQW9BWTI5dVpsOTNhVzVmY21sbmFIUmZiMlptYzJWMElEb2dKV1FLQUdOdmJtWmZkMmx1WDNSdmNGOXZabVp6WlhRZ0lDQTZJQ1ZrQ2dCamIyNW1YM2RwYmw5aWIzUjBiMjFmYjJabWMyVjBPaUFsWkFvQVltbDBYMlJsY0hSb1gyeDFiV0VnSUNBNklDVmtDZ0JpYVhSZlpHVndkR2hmWTJoeWIyMWhJRG9nSldRS0FHeHZaekpmYldGNFgzQnBZMTl2Y21SbGNsOWpiblJmYkhOaUlEb2dKV1FLQUhOd2MxOXpkV0pmYkdGNVpYSmZiM0prWlhKcGJtZGZhVzVtYjE5d2NtVnpaVzUwWDJac1lXY2dPaUFsWkFvQWJHOW5NbDl0YVc1ZmJIVnRZVjlqYjJScGJtZGZZbXh2WTJ0ZmMybDZaU0E2SUNWa0NnQnNiMmN5WDJScFptWmZiV0Y0WDIxcGJsOXNkVzFoWDJOdlpHbHVaMTlpYkc5amExOXphWHBsSURvZ0pXUUtBR3h2WnpKZmJXbHVYM1J5WVc1elptOXliVjlpYkc5amExOXphWHBsSUNBZ09pQWxaQW9BYkc5bk1sOWthV1ptWDIxaGVGOXRhVzVmZEhKaGJuTm1iM0p0WDJKc2IyTnJYM05wZW1VZ09pQWxaQW9BYldGNFgzUnlZVzV6Wm05eWJWOW9hV1Z5WVhKamFIbGZaR1Z3ZEdoZmFXNTBaWElnT2lBbFpBb0FiV0Y0WDNSeVlXNXpabTl5YlY5b2FXVnlZWEpqYUhsZlpHVndkR2hmYVc1MGNtRWdPaUFsWkFvQWMyTmhiR2x1WjE5c2FYTjBYMlZ1WVdKc1pWOW1iR0ZuSURvZ0pXUUtBRXhoZVdWeUlDVmtDZ0FnSUhOd2MxOXRZWGhmWkdWalgzQnBZMTlpZFdabVpYSnBibWNnSUNBZ0lDQTZJQ1ZrQ2dBZ0lITndjMTl0WVhoZmJuVnRYM0psYjNKa1pYSmZjR2xqY3lBZ0lDQWdJQ0E2SUNWa0NnQWdJSE53YzE5dFlYaGZiR0YwWlc1amVWOXBibU55WldGelpWOXdiSFZ6TVNBNklDVmtDZ0J6Y0hOZmMyTmhiR2x1WjE5c2FYTjBYMlJoZEdGZmNISmxjMlZ1ZEY5bWJHRm5JRG9nSldRS0FITmpZV3hwYm1jZ2JHbHpkQ0JzYjJkbmFXNW5JRzkxZEhCMWRDQnViM1FnYVcxd2JHVnRaVzUwWldRQVlXMXdYMlZ1WVdKc1pXUmZabXhoWnlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ09pQWxaQW9BYzJGdGNHeGxYMkZrWVhCMGFYWmxYMjltWm5ObGRGOWxibUZpYkdWa1gyWnNZV2NnT2lBbFpBb0FjR050WDJWdVlXSnNaV1JmWm14aFp5QWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdPaUFsWkFvQWNHTnRYM05oYlhCc1pWOWlhWFJmWkdWd2RHaGZiSFZ0WVNBZ0lDQWdPaUFsWkFvQWNHTnRYM05oYlhCc1pWOWlhWFJmWkdWd2RHaGZZMmh5YjIxaElDQWdPaUFsWkFvQWJHOW5NbDl0YVc1ZmNHTnRYMngxYldGZlkyOWthVzVuWDJKc2IyTnJYM05wZW1VZ09pQWxaQW9BYkc5bk1sOWthV1ptWDIxaGVGOXRhVzVmY0dOdFgyeDFiV0ZmWTI5a2FXNW5YMkpzYjJOclgzTnBlbVVnT2lBbFpBb0FjR050WDJ4dmIzQmZabWxzZEdWeVgyUnBjMkZpYkdWZlpteGhaeUFnT2lBbFpBb0FiblZ0WDNOb2IzSjBYM1JsY20xZmNtVm1YM0JwWTE5elpYUnpJRG9nSldRS0FHeHZibWRmZEdWeWJWOXlaV1pmY0dsamMxOXdjbVZ6Wlc1MFgyWnNZV2NnT2lBbFpBb0FjbVZtWDNCcFkxOXpaWFJiSUNVeVpDQmRPaUFBYm5WdFgyeHZibWRmZEdWeWJWOXlaV1pmY0dsamMxOXpjSE1nT2lBbFpBb0FiSFJmY21WbVgzQnBZMTl3YjJOZmJITmlYM053YzFzbFpGMGdPaUFsWkNBZ0lDaDFjMlZrWDJKNVgyTjFjbkpmY0dsalgyeDBYM053YzE5bWJHRm5QU1ZrS1FvQWMzQnpYM1JsYlhCdmNtRnNYMjEyY0Y5bGJtRmliR1ZrWDJac1lXY2dJQ0FnSUNBNklDVmtDZ0J6ZEhKdmJtZGZhVzUwY21GZmMyMXZiM1JvYVc1blgyVnVZV0pzWlY5bWJHRm5JRG9nSldRS0FIWjFhVjl3WVhKaGJXVjBaWEp6WDNCeVpYTmxiblJmWm14aFp5QWdJQ0FnSUNBZ09pQWxaQW9BYzNCelgyVjRkR1Z1YzJsdmJsOXdjbVZ6Wlc1MFgyWnNZV2NnSUNBZ09pQWxaQW9BYzNCelgzSmhibWRsWDJWNGRHVnVjMmx2Ymw5bWJHRm5JQ0FnSUNBZ09pQWxaQW9BYzNCelgyMTFiSFJwYkdGNVpYSmZaWGgwWlc1emFXOXVYMlpzWVdjZ09pQWxaQW9BYzNCelgyVjRkR1Z1YzJsdmJsODJZbWwwY3lBZ0lDQWdJQ0FnSUNBZ09pQWxaQW9BUTNSaVUybDZaVmtnSUNBZ0lEb2dKV1FLQUUxcGJrTmlVMmw2WlZrZ0lDQTZJQ1ZrQ2dCTllYaERZbE5wZW1WWklDQWdPaUFsWkFvQVRXbHVWRUpUYVhwbFdTQWdJRG9nSldRS0FFMWhlRlJDVTJsNlpWa2dJQ0E2SUNWa0NnQlFhV05YYVdSMGFFbHVRM1JpYzFrZ0lDQWdJQ0FnSUNBNklDVmtDZ0JRYVdOSVpXbG5hSFJKYmtOMFluTlpJQ0FnSUNBZ0lDQTZJQ1ZrQ2dCVGRXSlhhV1IwYUVNZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E2SUNWa0NnQlRkV0pJWldsbmFIUkRJQ0FnSUNBZ0lDQWdJQ0FnSUNBNklDVmtDZ0F0TFMwdExTMHRMUzB0TFMwdExTMHRMU0JUVUZNdGNtRnVaMlV0WlhoMFpXNXphVzl1SUMwdExTMHRMUzB0TFMwdExTMHRMUzB0Q2dCMGNtRnVjMlp2Y20xZmMydHBjRjl5YjNSaGRHbHZibDlsYm1GaWJHVmtYMlpzWVdjZ0lDQWdPaUFsWkFvQWRISmhibk5tYjNKdFgzTnJhWEJmWTI5dWRHVjRkRjlsYm1GaWJHVmtYMlpzWVdjZ0lDQWdJRG9nSldRS0FHbHRjR3hwWTJsMFgzSmtjR050WDJWdVlXSnNaV1JmWm14aFp5QWdJQ0FnSUNBZ0lDQWdJQ0E2SUNWa0NnQmxlSEJzYVdOcGRGOXlaSEJqYlY5bGJtRmliR1ZrWDJac1lXY2dJQ0FnSUNBZ0lDQWdJQ0FnT2lBbFpBb0FaWGgwWlc1a1pXUmZjSEpsWTJsemFXOXVYM0J5YjJObGMzTnBibWRmWm14aFp5QWdJQ0FnSURvZ0pXUUtBR2x1ZEhKaFgzTnRiMjkwYUdsdVoxOWthWE5oWW14bFpGOW1iR0ZuSUNBZ0lDQWdJQ0FnSUNBNklDVmtDZ0JvYVdkb1gzQnlaV05wYzJsdmJsOXZabVp6WlhSelgyVnVZV0pzWldSZlpteGhaeUFnSUNBZ09pQWxaQW9BY0dWeWMybHpkR1Z1ZEY5eWFXTmxYMkZrWVhCMFlYUnBiMjVmWlc1aFlteGxaRjltYkdGbklEb2dKV1FLQUdOaFltRmpYMko1Y0dGemMxOWhiR2xuYm0xbGJuUmZaVzVoWW14bFpGOW1iR0ZuSUNBZ0lDQTZJQ1ZrQ2dCMGNtRnVjMlp2Y20wdVkyTUFNQUJ6WTJGc1pWOWpiMlZtWm1samFXVnVkSE5mYVc1MFpYSnVZV3dBY21Sd1kyMU5iMlJsUFQwd0FFVlNVam9nQUVsT1JrODZJQUIyY0hNdVkyTUFZV3hzYjJOaGRHOXlQRlErT2pwaGJHeHZZMkYwWlNoemFYcGxYM1FnYmlrZ0oyNG5JR1Y0WTJWbFpITWdiV0Y0YVcxMWJTQnpkWEJ3YjNKMFpXUWdjMmw2WlFCbWFYSnpkRXhoZVdWeVVtVmhaQ0E4SUUxQldGOVVSVTFRVDFKQlRGOVRWVUpNUVZsRlVsTUFjbVZoWkFBdExTMHRMUzB0TFMwdExTMHRMUzB0TFNCV1VGTWdMUzB0TFMwdExTMHRMUzB0TFMwdExTMEtBSFpwWkdWdlgzQmhjbUZ0WlhSbGNsOXpaWFJmYVdRZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnT2lBbFpBb0FkbkJ6WDIxaGVGOXNZWGxsY25NZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E2SUNWa0NnQjJjSE5mYldGNFgzTjFZbDlzWVhsbGNuTWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRG9nSldRS0FIWndjMTkwWlcxd2IzSmhiRjlwWkY5dVpYTjBhVzVuWDJac1lXY2dJQ0FnSUNBZ0lDQWdPaUFsWkFvQUlDQlFjbTltYVd4bEwxUnBaWEl2VEdWMlpXd2dXMHhoZVdWeUlDVmtYUW9BZG5CelgzTjFZbDlzWVhsbGNsOXZjbVJsY21sdVoxOXBibVp2WDNCeVpYTmxiblJmWm14aFp5QTZJQ1ZrQ2dCc1lYbGxjaUFsWkRvZ2RuQnpYMjFoZUY5a1pXTmZjR2xqWDJKMVptWmxjbWx1WnlBOUlDVmtDZ0FnSUNBZ0lDQWdJQ0IyY0hOZmJXRjRYMjUxYlY5eVpXOXlaR1Z5WDNCcFkzTWdJRDBnSldRS0FDQWdJQ0FnSUNBZ0lIWndjMTl0WVhoZmJHRjBaVzVqZVY5cGJtTnlaV0Z6WlNBZ1BTQWxaQW9BYkdGNVpYSWdLR0ZzYkNrNklIWndjMTl0WVhoZlpHVmpYM0JwWTE5aWRXWm1aWEpwYm1jZ1BTQWxaQW9BSUNBZ0lDQWdJQ0FnSUNBZ0lIWndjMTl0WVhoZmJuVnRYM0psYjNKa1pYSmZjR2xqY3lBZ1BTQWxaQW9BSUNBZ0lDQWdJQ0FnSUNBZ0lIWndjMTl0WVhoZmJHRjBaVzVqZVY5cGJtTnlaV0Z6WlNBZ1BTQWxaQW9BZG5CelgyMWhlRjlzWVhsbGNsOXBaQ0FnSUQwZ0pXUUtBSFp3YzE5dWRXMWZiR0Y1WlhKZmMyVjBjeUE5SUNWa0NnQjJjSE5mZEdsdGFXNW5YMmx1Wm05ZmNISmxjMlZ1ZEY5bWJHRm5JRDBnSldRS0FHeGhlV1Z5WDJsa1gybHVZMngxWkdWa1gyWnNZV2RiSldSZFd5VmtYU0E5SUNWa0NnQjJjSE5mYm5WdFgzVnVhWFJ6WDJsdVgzUnBZMnNnUFNBbFpBb0FkbkJ6WDNScGJXVmZjMk5oYkdVZ0lDQWdJQ0FnSUQwZ0pXUUtBSFp3YzE5d2IyTmZjSEp2Y0c5eWRHbHZibUZzWDNSdlgzUnBiV2x1WjE5bWJHRm5JRDBnSldRS0FIWndjMTl1ZFcxZmRHbGphM05mY0c5algyUnBabVpmYjI1bElEMGdKV1FLQUhad2MxOXVkVzFmYUhKa1gzQmhjbUZ0WlhSbGNuTWdJQ0FnSUQwZ0pXUUtBR2h5WkY5c1lYbGxjbDl6WlhSZmFXUjRXeVZrWFNBOUlDVmtDZ0IyY0hOZlpYaDBaVzV6YVc5dVgyWnNZV2NnUFNBbFpBb0FaMlZ1WlhKaGJBQnpkV0pmYkdGNVpYSUFJQ0FsYzE5d2NtOW1hV3hsWDNOd1lXTmxJQ0FnSUNBNklDVmtDZ0FnSUNWelgzUnBaWEpmWm14aFp5QWdJQ0FnSUNBZ0lEb2dKV1FLQUNoMWJtdHViM2R1S1FCR2IzSnRZWFJTWVc1blpVVjRkR1Z1YzJsdmJuTUFUV0ZwYmxOMGFXeHNVR2xqZEhWeVpRQk5ZV2x1TVRBQVRXRnBiZ0FnSUNWelgzQnliMlpwYkdWZmFXUmpJQ0FnSUNBZ0lEb2dKWE1LQUNBZ0pYTmZjSEp2Wm1sc1pWOWpiMjF3WVhScFltbHNhWFI1WDJac1lXZHpPaUFBS2dvQUlDQWdJQ1Z6WDNCeWIyZHlaWE56YVhabFgzTnZkWEpqWlY5bWJHRm5JRG9nSldRS0FDQWdJQ0FsYzE5cGJuUmxjbXhoWTJWa1gzTnZkWEpqWlY5bWJHRm5JRG9nSldRS0FDQWdJQ0FsYzE5dWIyNWZjR0ZqYTJWa1gyTnZibk4wY21GcGJuUmZabXhoWnlBNklDVmtDZ0FnSUNBZ0pYTmZabkpoYldWZmIyNXNlVjlqYjI1emRISmhhVzUwWDJac1lXY2dPaUFsWkFvQUtpd0FLaVZrQUNBZ0pYTmZiR1YyWld4ZmFXUmpJQ0FnSUNBZ0lDQWdPaUFsWkNBb0pUUXVNbVlwQ2dCMWJuTndaV05wWm1sbFpBQk5RVU1BVTBWRFFVMEFUbFJUUXdCUVFVd0FZMjl0Y0c5dVpXNTBBQzB0TFMwdExTMHRMUzB0TFMwdExTMHRJRlpWU1NBdExTMHRMUzB0TFMwdExTMHRMUzB0TFFvQWMyRnRjR3hsSUdGemNHVmpkQ0J5WVhScGJ5QWdJQ0FnSUNBZ09pQWxaRG9sWkFvQWIzWmxjbk5qWVc1ZmFXNW1iMTl3Y21WelpXNTBYMlpzWVdjZ09pQWxaQW9BYjNabGNuTmpZVzVmWVhCd2NtOXdjbWxoZEdWZlpteGhaeUFnT2lBbFpBb0FkbWxrWlc5ZmMybG5ibUZzWDNSNWNHVmZjSEpsYzJWdWRGOW1iR0ZuT2lBbFpBb0FJQ0IyYVdSbGIxOW1iM0p0WVhRZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnT2lBbGN3b0FJQ0IyYVdSbGIxOW1kV3hzWDNKaGJtZGxYMlpzWVdjZ0lDQWdJQ0FnT2lBbFpBb0FJQ0JqYjJ4dmRYSmZaR1Z6WTNKcGNIUnBiMjVmY0hKbGMyVnVkRjltYkdGbklEb2dKV1FLQUNBZ1kyOXNiM1Z5WDNCeWFXMWhjbWxsY3lBZ0lDQWdJQ0FnSUNBZ0lEb2dKV1FLQUNBZ2RISmhibk5tWlhKZlkyaGhjbUZqZEdWeWFYTjBhV056SUNBZ0lEb2dKV1FLQUNBZ2JXRjBjbWw0WDJOdlpXWm1jeUFnSUNBZ0lDQWdJQ0FnSUNBZ0lEb2dKV1FLQUdOb2NtOXRZVjlzYjJOZmFXNW1iMTl3Y21WelpXNTBYMlpzWVdjNklDVmtDZ0FnSUdOb2NtOXRZVjl6WVcxd2JHVmZiRzlqWDNSNWNHVmZkRzl3WDJacFpXeGtJQ0FnT2lBbFpBb0FJQ0JqYUhKdmJXRmZjMkZ0Y0d4bFgyeHZZMTkwZVhCbFgySnZkSFJ2YlY5bWFXVnNaRG9nSldRS0FHNWxkWFJ5WVd4ZlkyaHliMjFoWDJsdVpHbGpZWFJwYjI1ZlpteGhaem9nSldRS0FHWnBaV3hrWDNObGNWOW1iR0ZuSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRG9nSldRS0FHWnlZVzFsWDJacFpXeGtYMmx1Wm05ZmNISmxjMlZ1ZEY5bWJHRm5JRG9nSldRS0FHUmxabUYxYkhSZlpHbHpjR3hoZVY5M2FXNWtiM2RmWm14aFp5QWdJRG9nSldRS0FDQWdaR1ZtWDJScGMzQmZkMmx1WDJ4bFpuUmZiMlptYzJWMElDQWdJRG9nSldRS0FDQWdaR1ZtWDJScGMzQmZkMmx1WDNKcFoyaDBYMjltWm5ObGRDQWdJRG9nSldRS0FDQWdaR1ZtWDJScGMzQmZkMmx1WDNSdmNGOXZabVp6WlhRZ0lDQWdJRG9nSldRS0FDQWdaR1ZtWDJScGMzQmZkMmx1WDJKdmRIUnZiVjl2Wm1aelpYUWdJRG9nSldRS0FIWjFhVjkwYVcxcGJtZGZhVzVtYjE5d2NtVnpaVzUwWDJac1lXY2dJRG9nSldRS0FDQWdkblZwWDI1MWJWOTFibWwwYzE5cGJsOTBhV05ySUNBZ0lDQWdJRG9nSldRS0FDQWdkblZwWDNScGJXVmZjMk5oYkdVZ0lDQWdJQ0FnSUNBZ0lDQWdJRG9nSldRS0FIWjFhVjl3YjJOZmNISnZjRzl5ZEdsdmJtRnNYM1J2WDNScGJXbHVaMTltYkdGbklEb2dKV1FLQUhaMWFWOXVkVzFmZEdsamEzTmZjRzlqWDJScFptWmZiMjVsSUNBZ0lDQWdJQ0FnSURvZ0pXUUtBSFoxYVY5b2NtUmZjR0Z5WVcxbGRHVnljMTl3Y21WelpXNTBYMlpzWVdjZ09pQWxaQW9BWW1sMGMzUnlaV0Z0WDNKbGMzUnlhV04wYVc5dVgyWnNZV2NnSUNBZ0lDQWdJQ0E2SUNWa0NnQWdJSFJwYkdWelgyWnBlR1ZrWDNOMGNuVmpkSFZ5WlY5bWJHRm5JQ0FnSUNBZ0lEb2dKV1FLQUNBZ2JXOTBhVzl1WDNabFkzUnZjbk5mYjNabGNsOXdhV05mWW05MWJtUmhjbWxsYzE5bWJHRm5JRG9nSldRS0FDQWdjbVZ6ZEhKcFkzUmxaRjl5WldaZmNHbGpYMnhwYzNSelgyWnNZV2NnSUNBZ09pQWxaQW9BSUNCdGFXNWZjM0JoZEdsaGJGOXpaV2R0Wlc1MFlYUnBiMjVmYVdSaklDQWdJQ0E2SUNWa0NnQWdJRzFoZUY5aWVYUmxjMTl3WlhKZmNHbGpYMlJsYm05dElDQWdJQ0FnSUNBZ0lEb2dKV1FLQUNBZ2JXRjRYMkpwZEhOZmNHVnlYMjFwYmw5amRWOWtaVzV2YlNBZ0lDQWdJQ0FnT2lBbFpBb0FJQ0JzYjJjeVgyMWhlRjl0ZGw5c1pXNW5kR2hmYUc5eWFYcHZiblJoYkNBZ0lDQTZJQ1ZrQ2dBZ0lHeHZaekpmYldGNFgyMTJYMnhsYm1kMGFGOTJaWEowYVdOaGJDQWdJQ0FnSURvZ0pXUUtBR0pwZEhOMGNtVmhiUzVqWXdCMllXeDFaVDR3QUdkbGRGOTFkbXhqQUlDdzBQQ0FwOFhqZ0o2NzJIdVdzczEwanFuRGI0ZWd1V21BbUs5a2VwQ21YM1NKbmxwdWdwWlZhSHVPVVdOMWgwMWViNEJKV1dsNlJWVmtkRUpRWDI0K1RGcG9PMGhXWXpoRlVWNDFRVTFaTXo1SlZUQTdSVkF1T0VKTUt6VS9TQ2t5TzBVbk1EaEJKUzAyUGlNck16c2hLVEE0SUNjdU5SNGxLeklkSXlrd0d5RW5MUm9mSlNzWUhpTXBGeHdoSnhZYklDVVZHaDRqRkJnZElSTVhHeDhTRmhvZUVSVVpIQkFVRnhzUEV4WVpEaElWR0E0UkZCY05FQk1XREE4U0ZRd09FUlFMRGhBVEN3MFBFZ29NRHhFS0RBNFFDUXNORHdrTERBNElDZ3dPQ0FrTERRY0pDd3dIQ1FvTUJ3Z0tDd1lJQ1FzR0J3a0tCZ2NJQ1FJQ0FnSUdCUVFFQXdNREF3SUNBZ0lDQWdJQ0FRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQUFRSUNCQVFGQmdjSUNRa0xDd3dORFE4UEVCQVNFaE1URlJVV0ZoY1lHQmthR2hzYkhCMGRIaDRlSHlBZ0lTRWhJaUlqSXlNa0pDUWxKU1VtSmo4QkFnTUVCUVlIQ0FrS0N3d05EZzhRRVJJVEZCVVdGeGdaR2hzY0hSNGZJQ0VpSXlRbEppY29LU29yTEMwdUx6QXhNak0wTlRZM09EazZPenc5UGo0L1kyRmlZV011WTJNQWJHVnVaM1JvSUQ0OUlEQUFhVzVwZEY5RFFVSkJRMTlrWldOdlpHVnlBQ1Z3SUdNbmRHOXlJRDBnSlhBS0FDVndJR1JsYzNSeWRXTjBiM0lLQUcxbWNtVmxJQ1Z3Q2dBbGNDQnBibWwwQ2dBcWNtVm1ZMjUwUGpFQVkyOXVkR1Y0ZEcxdlpHVnNMbU5qQUdSbFkyOTFjR3hsWDI5eVgyRnNiRzlqWDNkcGRHaGZaVzF3ZEhsZlpHRjBZUUFsY0NBb1lXeHNiMk1wQ2dCdGIyUmxiRnRwWFM1emRHRjBaU0E4UFNBMk1nQnpaWFJmYVc1cGRGWmhiSFZsQUNWd0lISmxiR1ZoYzJVZ0pYQUtBQ1Z3SUdSbFkyOTFjR3hsSUNnbGNDa0tBSEpsWm1OdWRBQmtaV052ZFhCc1pRQWxjQ0JoYzNOcFoyNGdQU0FsY0FvQVpHVmliRzlqYXkwbFpBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBUUVCQVFFQkFRRUNBZ0lDQXdNREF3UUVCQVVGQmdZSENBa0tDdzBPRUJJVUZoZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUJnY0lDUW9MREEwT0R4QVJFaFFXR0JvY0hpQWlKQ1lvS2l3dU1ESTBOamc2UEQ1QWNtVm1VR2xqVVRBOVBYSmxabEJwWTFFeEFHUmxZbXh2WTJzdVkyTUFaR1Z5YVhabFgySnZkVzVrWVhKNVUzUnlaVzVuZEdnQU1qWjBhSEpsWVdSZmRHRnphMTlrWldKc2IyTnJYME5VUWxKdmR3QnBiblJ5WVhCeVpXUXVZMk1BYVc1MGNtRlFjbVZrVFc5a1pUd3pOUUJwYm5SeVlWOXdjbVZrYVdOMGFXOXVYMkZ1WjNWc1lYSUFhVzUwY21GUWNtVmtUVzlrWlQ0OU1nQnBiblJ5WVY5d2NtVmthV04wYVc5dVgzTmhiWEJzWlY5bWFXeDBaWEpwYm1jQWMyaGtjaTArYzJ4cFkyVmZkSGx3WlNBOVBTQlRURWxEUlY5VVdWQkZYMElBYlc5MGFXOXVMbU5qQUdkbGJtVnlZWFJsWDJsdWRHVnlYM0J5WldScFkzUnBiMjVmYzJGdGNHeGxjd0J0WTE5amFISnZiV0VBZFc1cGRGZ2dQajBnTUNBbUppQjFibWwwV0NBOElIZHBaSFJvWDJsdVgzVnVhWFJ6QUM0dUwyeHBZbVJsTWpZMUwybHRZV2RsTG1nQVoyVjBBSFZ1YVhSWklENDlJREFnSmlZZ2RXNXBkRmtnUENCb1pXbG5hSFJmYVc1ZmRXNXBkSE1BWTNSNExUNW9ZWE5mYVcxaFoyVW9ZMjlzVUdsaktRQmtaWEpwZG1WZlkyOXNiRzlqWVhSbFpGOXRiM1JwYjI1ZmRtVmpkRzl5Y3dCa1pYSnBkbVZmWTI5dFltbHVaV1JmWW1sd2NtVmthV04wYVhabFgyMWxjbWRwYm1kZlkyRnVaR2xrWVhSbGN3QnlaV1pRYVdOTWFYTjBQajB3QUdSbGNtbDJaVjl6Y0dGMGFXRnNYMngxYldGZmRtVmpkRzl5WDNCeVpXUnBZM1JwYjI0QWJuVnRUVlpRUTJGdVpFeFlQVDB5QUdacGJHeGZiSFZ0WVY5dGIzUnBiMjVmZG1WamRHOXlYM0J5WldScFkzUnZjbk1BVWtsa2VENDlNQUJ5Wldad2FXTXVZMk1BY21WaFpGOXphRzl5ZEY5MFpYSnRYM0psWmw5d2FXTmZjMlYwQUZKSlpIZ2dQajBnTUNBbUppQlNTV1I0SUR3Z2MyVjBjeTV6YVhwbEtDa0FhajQ5TUNBbUppQnFJRHdnVFVGWVgwNVZUVjlTUlVaZlVFbERVd0FxSldRbFl5QUFLaVZ6Q2dCMmIybGtBR0p2YjJ3QVkyaGhjZ0J6YVdkdVpXUWdZMmhoY2dCMWJuTnBaMjVsWkNCamFHRnlBSE5vYjNKMEFIVnVjMmxuYm1Wa0lITm9iM0owQUdsdWRBQjFibk5wWjI1bFpDQnBiblFBYkc5dVp3QjFibk5wWjI1bFpDQnNiMjVuQUdac2IyRjBBR1J2ZFdKc1pRQnpkR1E2T25OMGNtbHVad0J6ZEdRNk9tSmhjMmxqWDNOMGNtbHVaengxYm5OcFoyNWxaQ0JqYUdGeVBnQnpkR1E2T25kemRISnBibWNBWlcxelkzSnBjSFJsYmpvNmRtRnNBR1Z0YzJOeWFYQjBaVzQ2T20xbGJXOXllVjkyYVdWM1BHTm9ZWEkrQUdWdGMyTnlhWEIwWlc0Nk9tMWxiVzl5ZVY5MmFXVjNQSE5wWjI1bFpDQmphR0Z5UGdCbGJYTmpjbWx3ZEdWdU9qcHRaVzF2Y25sZmRtbGxkengxYm5OcFoyNWxaQ0JqYUdGeVBnQmxiWE5qY21sd2RHVnVPanB0WlcxdmNubGZkbWxsZHp4emFHOXlkRDRBWlcxelkzSnBjSFJsYmpvNmJXVnRiM0o1WDNacFpYYzhkVzV6YVdkdVpXUWdjMmh2Y25RK0FHVnRjMk55YVhCMFpXNDZPbTFsYlc5eWVWOTJhV1YzUEdsdWRENEFaVzF6WTNKcGNIUmxiam82YldWdGIzSjVYM1pwWlhjOGRXNXphV2R1WldRZ2FXNTBQZ0JsYlhOamNtbHdkR1Z1T2pwdFpXMXZjbmxmZG1sbGR6eHNiMjVuUGdCbGJYTmpjbWx3ZEdWdU9qcHRaVzF2Y25sZmRtbGxkengxYm5OcFoyNWxaQ0JzYjI1blBnQmxiWE5qY21sd2RHVnVPanB0WlcxdmNubGZkbWxsZHp4cGJuUTRYM1ErQUdWdGMyTnlhWEIwWlc0Nk9tMWxiVzl5ZVY5MmFXVjNQSFZwYm5RNFgzUStBR1Z0YzJOeWFYQjBaVzQ2T20xbGJXOXllVjkyYVdWM1BHbHVkREUyWDNRK0FHVnRjMk55YVhCMFpXNDZPbTFsYlc5eWVWOTJhV1YzUEhWcGJuUXhObDkwUGdCbGJYTmpjbWx3ZEdWdU9qcHRaVzF2Y25sZmRtbGxkenhwYm5Rek1sOTBQZ0JsYlhOamNtbHdkR1Z1T2pwdFpXMXZjbmxmZG1sbGR6eDFhVzUwTXpKZmRENEFaVzF6WTNKcGNIUmxiam82YldWdGIzSjVYM1pwWlhjOFpteHZZWFErQUdWdGMyTnlhWEIwWlc0Nk9tMWxiVzl5ZVY5MmFXVjNQR1J2ZFdKc1pUNEFaVzF6WTNKcGNIUmxiam82YldWdGIzSjVYM1pwWlhjOGJHOXVaeUJrYjNWaWJHVStBRTR4TUdWdGMyTnlhWEIwWlc0eE1XMWxiVzl5ZVY5MmFXVjNTV1ZGUlFCT01UQmxiWE5qY21sd2RHVnVNVEZ0WlcxdmNubGZkbWxsZDBsa1JVVUFUakV3WlcxelkzSnBjSFJsYmpFeGJXVnRiM0o1WDNacFpYZEpaa1ZGQUU0eE1HVnRjMk55YVhCMFpXNHhNVzFsYlc5eWVWOTJhV1YzU1cxRlJRQk9NVEJsYlhOamNtbHdkR1Z1TVRGdFpXMXZjbmxmZG1sbGQwbHNSVVVBVGpFd1pXMXpZM0pwY0hSbGJqRXhiV1Z0YjNKNVgzWnBaWGRKYWtWRkFFNHhNR1Z0YzJOeWFYQjBaVzR4TVcxbGJXOXllVjkyYVdWM1NXbEZSUUJPTVRCbGJYTmpjbWx3ZEdWdU1URnRaVzF2Y25sZmRtbGxkMGwwUlVVQVRqRXdaVzF6WTNKcGNIUmxiakV4YldWdGIzSjVYM1pwWlhkSmMwVkZBRTR4TUdWdGMyTnlhWEIwWlc0eE1XMWxiVzl5ZVY5MmFXVjNTV2hGUlFCT01UQmxiWE5qY21sd2RHVnVNVEZ0WlcxdmNubGZkbWxsZDBsaFJVVUFUakV3WlcxelkzSnBjSFJsYmpFeGJXVnRiM0o1WDNacFpYZEpZMFZGQUU1VGRETmZYekl4TW1KaGMybGpYM04wY21sdVowbDNUbE5mTVRGamFHRnlYM1J5WVdsMGMwbDNSVVZPVTE4NVlXeHNiMk5oZEc5eVNYZEZSVVZGQUU1VGRETmZYekl4TW1KaGMybGpYM04wY21sdVowbG9UbE5mTVRGamFHRnlYM1J5WVdsMGMwbG9SVVZPVTE4NVlXeHNiMk5oZEc5eVNXaEZSVVZGQUJFQUNnQVJFUkVBQUFBQUJRQUFBQUFBQUFrQUFBQUFDd0FBQUFBQUFBQUFFUUFQQ2hFUkVRTUtCd0FCRXdrTEN3QUFDUVlMQUFBTEFBWVJBQUFBRVJFUkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFzQUFBQUFBQUFBQUJFQUNnb1JFUkVBQ2dBQUFnQUpDd0FBQUFrQUN3QUFDd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1BQUFBQUFBQUFBQUFBQUFNQUFBQUFBd0FBQUFBQ1F3QUFBQUFBQXdBQUF3QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRGdBQUFBQUFBQUFBQUFBQURRQUFBQVFOQUFBQUFBa09BQUFBQUFBT0FBQU9BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQUFBQUFBQThBQUFBQUR3QUFBQUFKRUFBQUFBQUFFQUFBRUFBQUVnQUFBQklTRWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFTQUFBQUVoSVNBQUFBQUFBQUNRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUN3QUFBQUFBQUFBQUFBQUFDZ0FBQUFBS0FBQUFBQWtMQUFBQUFBQUxBQUFMQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQXdBQUFBQUFBQUFBQUFBQUF3QUFBQUFEQUFBQUFBSkRBQUFBQUFBREFBQURBQUFMU3NnSUNBd1dEQjRBQ2h1ZFd4c0tRQXRNRmdyTUZnZ01GZ3RNSGdyTUhnZ01IZ0FhVzVtQUVsT1JnQk9RVTRBTURFeU16UTFOamM0T1VGQ1EwUkZSaTRBVkNFaUdRMEJBZ01SU3h3TUVBUUxIUkllSjJodWIzQnhZaUFGQmc4VEZCVWFDQllIS0NRWEdBa0tEaHNmSlNPRGduMG1LaXM4UFQ0L1EwZEtUVmhaV2x0Y1hWNWZZR0ZqWkdWbVoybHFhMnh5YzNSNWVudDhBRWxzYkdWbllXd2dZbmwwWlNCelpYRjFaVzVqWlFCRWIyMWhhVzRnWlhKeWIzSUFVbVZ6ZFd4MElHNXZkQ0J5WlhCeVpYTmxiblJoWW14bEFFNXZkQ0JoSUhSMGVRQlFaWEp0YVhOemFXOXVJR1JsYm1sbFpBQlBjR1Z5WVhScGIyNGdibTkwSUhCbGNtMXBkSFJsWkFCT2J5QnpkV05vSUdacGJHVWdiM0lnWkdseVpXTjBiM0o1QUU1dklITjFZMmdnY0hKdlkyVnpjd0JHYVd4bElHVjRhWE4wY3dCV1lXeDFaU0IwYjI4Z2JHRnlaMlVnWm05eUlHUmhkR0VnZEhsd1pRQk9ieUJ6Y0dGalpTQnNaV1owSUc5dUlHUmxkbWxqWlFCUGRYUWdiMllnYldWdGIzSjVBRkpsYzI5MWNtTmxJR0oxYzNrQVNXNTBaWEp5ZFhCMFpXUWdjM2x6ZEdWdElHTmhiR3dBVW1WemIzVnlZMlVnZEdWdGNHOXlZWEpwYkhrZ2RXNWhkbUZwYkdGaWJHVUFTVzUyWVd4cFpDQnpaV1ZyQUVOeWIzTnpMV1JsZG1salpTQnNhVzVyQUZKbFlXUXRiMjVzZVNCbWFXeGxJSE41YzNSbGJRQkVhWEpsWTNSdmNua2dibTkwSUdWdGNIUjVBRU52Ym01bFkzUnBiMjRnY21WelpYUWdZbmtnY0dWbGNnQlBjR1Z5WVhScGIyNGdkR2x0WldRZ2IzVjBBRU52Ym01bFkzUnBiMjRnY21WbWRYTmxaQUJJYjNOMElHbHpJR1J2ZDI0QVNHOXpkQ0JwY3lCMWJuSmxZV05vWVdKc1pRQkJaR1J5WlhOeklHbHVJSFZ6WlFCQ2NtOXJaVzRnY0dsd1pRQkpMMDhnWlhKeWIzSUFUbThnYzNWamFDQmtaWFpwWTJVZ2IzSWdZV1JrY21WemN3QkNiRzlqYXlCa1pYWnBZMlVnY21WeGRXbHlaV1FBVG04Z2MzVmphQ0JrWlhacFkyVUFUbTkwSUdFZ1pHbHlaV04wYjNKNUFFbHpJR0VnWkdseVpXTjBiM0o1QUZSbGVIUWdabWxzWlNCaWRYTjVBRVY0WldNZ1ptOXliV0YwSUdWeWNtOXlBRWx1ZG1Gc2FXUWdZWEpuZFcxbGJuUUFRWEpuZFcxbGJuUWdiR2x6ZENCMGIyOGdiRzl1WndCVGVXMWliMnhwWXlCc2FXNXJJR3h2YjNBQVJtbHNaVzVoYldVZ2RHOXZJR3h2Ym1jQVZHOXZJRzFoYm5rZ2IzQmxiaUJtYVd4bGN5QnBiaUJ6ZVhOMFpXMEFUbThnWm1sc1pTQmtaWE5qY21sd2RHOXljeUJoZG1GcGJHRmliR1VBUW1Ga0lHWnBiR1VnWkdWelkzSnBjSFJ2Y2dCT2J5QmphR2xzWkNCd2NtOWpaWE56QUVKaFpDQmhaR1J5WlhOekFFWnBiR1VnZEc5dklHeGhjbWRsQUZSdmJ5QnRZVzU1SUd4cGJtdHpBRTV2SUd4dlkydHpJR0YyWVdsc1lXSnNaUUJTWlhOdmRYSmpaU0JrWldGa2JHOWpheUIzYjNWc1pDQnZZMk4xY2dCVGRHRjBaU0J1YjNRZ2NtVmpiM1psY21GaWJHVUFVSEpsZG1sdmRYTWdiM2R1WlhJZ1pHbGxaQUJQY0dWeVlYUnBiMjRnWTJGdVkyVnNaV1FBUm5WdVkzUnBiMjRnYm05MElHbHRjR3hsYldWdWRHVmtBRTV2SUcxbGMzTmhaMlVnYjJZZ1pHVnphWEpsWkNCMGVYQmxBRWxrWlc1MGFXWnBaWElnY21WdGIzWmxaQUJFWlhacFkyVWdibTkwSUdFZ2MzUnlaV0Z0QUU1dklHUmhkR0VnWVhaaGFXeGhZbXhsQUVSbGRtbGpaU0IwYVcxbGIzVjBBRTkxZENCdlppQnpkSEpsWVcxeklISmxjMjkxY21ObGN3Qk1hVzVySUdoaGN5QmlaV1Z1SUhObGRtVnlaV1FBVUhKdmRHOWpiMndnWlhKeWIzSUFRbUZrSUcxbGMzTmhaMlVBUm1sc1pTQmtaWE5qY21sd2RHOXlJR2x1SUdKaFpDQnpkR0YwWlFCT2IzUWdZU0J6YjJOclpYUUFSR1Z6ZEdsdVlYUnBiMjRnWVdSa2NtVnpjeUJ5WlhGMWFYSmxaQUJOWlhOellXZGxJSFJ2YnlCc1lYSm5aUUJRY205MGIyTnZiQ0IzY205dVp5QjBlWEJsSUdadmNpQnpiMk5yWlhRQVVISnZkRzlqYjJ3Z2JtOTBJR0YyWVdsc1lXSnNaUUJRY205MGIyTnZiQ0J1YjNRZ2MzVndjRzl5ZEdWa0FGTnZZMnRsZENCMGVYQmxJRzV2ZENCemRYQndiM0owWldRQVRtOTBJSE4xY0hCdmNuUmxaQUJRY205MGIyTnZiQ0JtWVcxcGJIa2dibTkwSUhOMWNIQnZjblJsWkFCQlpHUnlaWE56SUdaaGJXbHNlU0J1YjNRZ2MzVndjRzl5ZEdWa0lHSjVJSEJ5YjNSdlkyOXNBRUZrWkhKbGMzTWdibTkwSUdGMllXbHNZV0pzWlFCT1pYUjNiM0pySUdseklHUnZkMjRBVG1WMGQyOXlheUIxYm5KbFlXTm9ZV0pzWlFCRGIyNXVaV04wYVc5dUlISmxjMlYwSUdKNUlHNWxkSGR2Y21zQVEyOXVibVZqZEdsdmJpQmhZbTl5ZEdWa0FFNXZJR0oxWm1abGNpQnpjR0ZqWlNCaGRtRnBiR0ZpYkdVQVUyOWphMlYwSUdseklHTnZibTVsWTNSbFpBQlRiMk5yWlhRZ2JtOTBJR052Ym01bFkzUmxaQUJEWVc1dWIzUWdjMlZ1WkNCaFpuUmxjaUJ6YjJOclpYUWdjMmgxZEdSdmQyNEFUM0JsY21GMGFXOXVJR0ZzY21WaFpIa2dhVzRnY0hKdlozSmxjM01BVDNCbGNtRjBhVzl1SUdsdUlIQnliMmR5WlhOekFGTjBZV3hsSUdacGJHVWdhR0Z1Wkd4bEFGSmxiVzkwWlNCSkwwOGdaWEp5YjNJQVVYVnZkR0VnWlhoalpXVmtaV1FBVG04Z2JXVmthWFZ0SUdadmRXNWtBRmR5YjI1bklHMWxaR2wxYlNCMGVYQmxBRTV2SUdWeWNtOXlJR2x1Wm05eWJXRjBhVzl1QUFELy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9BQUVDQXdRRkJnY0lDZi8vLy8vLy8vOEtDd3dORGc4UUVSSVRGQlVXRnhnWkdoc2NIUjRmSUNFaUkvLy8vLy8vL3dvTERBME9EeEFSRWhNVUZSWVhHQmthR3h3ZEhoOGdJU0lqLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vd0FCQWdRSEF3WUZBR2x1Wm1sdWFYUjVBRzVoYmdCTVExOUJURXdBVEVOZlExUlpVRVVBQUFBQVRFTmZUbFZOUlZKSlF3QUFURU5mVkVsTlJRQUFBQUFBVEVOZlEwOU1URUZVUlFBQVRFTmZUVTlPUlZSQlVsa0FURU5mVFVWVFUwRkhSVk1BVEVGT1J3QkRMbFZVUmkwNEFGQlBVMGxZQUUxVlUweGZURTlEVUVGVVNBQk9VM1F6WDE4eU9HbHZjMTlpWVhObFJRQk9VM1F6WDE4eU9XSmhjMmxqWDJsdmMwbGpUbE5mTVRGamFHRnlYM1J5WVdsMGMwbGpSVVZGUlFCT1UzUXpYMTh5T1dKaGMybGpYMmx2YzBsM1RsTmZNVEZqYUdGeVgzUnlZV2wwYzBsM1JVVkZSUUJPVTNRelgxOHlNVFZpWVhOcFkxOXpkSEpsWVcxaWRXWkpZMDVUWHpFeFkyaGhjbDkwY21GcGRITkpZMFZGUlVVQVRsTjBNMTlmTWpFMVltRnphV05mYzNSeVpXRnRZblZtU1hkT1UxOHhNV05vWVhKZmRISmhhWFJ6U1hkRlJVVkZBRTVUZEROZlh6SXhNMkpoYzJsalgybHpkSEpsWVcxSlkwNVRYekV4WTJoaGNsOTBjbUZwZEhOSlkwVkZSVVVBVGxOME0xOWZNakV6WW1GemFXTmZhWE4wY21WaGJVbDNUbE5mTVRGamFHRnlYM1J5WVdsMGMwbDNSVVZGUlFCT1UzUXpYMTh5TVROaVlYTnBZMTl2YzNSeVpXRnRTV05PVTE4eE1XTm9ZWEpmZEhKaGFYUnpTV05GUlVWRkFFNVRkRE5mWHpJeE0ySmhjMmxqWDI5emRISmxZVzFKZDA1VFh6RXhZMmhoY2w5MGNtRnBkSE5KZDBWRlJVVUFUbE4wTTE5Zk1qRTBZbUZ6YVdOZmFXOXpkSEpsWVcxSlkwNVRYekV4WTJoaGNsOTBjbUZwZEhOSlkwVkZSVVVBVGxOME0xOWZNakV4WDE5emRHUnZkWFJpZFdaSmQwVkZBRTVUZEROZlh6SXhNVjlmYzNSa2IzVjBZblZtU1dORlJRQjFibk4xY0hCdmNuUmxaQ0JzYjJOaGJHVWdabTl5SUhOMFlXNWtZWEprSUdsdWNIVjBBRTVUZEROZlh6SXhNRjlmYzNSa2FXNWlkV1pKZDBWRkFFNVRkRE5mWHpJeE1GOWZjM1JrYVc1aWRXWkpZMFZGQUU1VGRETmZYekkzWTI5c2JHRjBaVWxqUlVVQVRsTjBNMTlmTWpac2IyTmhiR1UxWm1GalpYUkZBRTVUZEROZlh6STNZMjlzYkdGMFpVbDNSVVVBTURFeU16UTFOamM0T1dGaVkyUmxaa0ZDUTBSRlJuaFlLeTF3VUdsSmJrNEFKWEFBUXdCT1UzUXpYMTh5TjI1MWJWOW5aWFJKWTA1VFh6RTVhWE4wY21WaGJXSjFabDlwZEdWeVlYUnZja2xqVGxOZk1URmphR0Z5WDNSeVlXbDBjMGxqUlVWRlJVVkZBRTVUZEROZlh6STVYMTl1ZFcxZloyVjBTV05GUlFCT1UzUXpYMTh5TVRSZlgyNTFiVjluWlhSZlltRnpaVVVBVGxOME0xOWZNamR1ZFcxZloyVjBTWGRPVTE4eE9XbHpkSEpsWVcxaWRXWmZhWFJsY21GMGIzSkpkMDVUWHpFeFkyaGhjbDkwY21GcGRITkpkMFZGUlVWRlJRQk9VM1F6WDE4eU9WOWZiblZ0WDJkbGRFbDNSVVVBSlhBQUFBQUFUQUJzYkFBbEFBQUFBQUJzQUU1VGRETmZYekkzYm5WdFgzQjFkRWxqVGxOZk1UbHZjM1J5WldGdFluVm1YMmwwWlhKaGRHOXlTV05PVTE4eE1XTm9ZWEpmZEhKaGFYUnpTV05GUlVWRlJVVUFUbE4wTTE5Zk1qbGZYMjUxYlY5d2RYUkpZMFZGQUU1VGRETmZYekl4TkY5ZmJuVnRYM0IxZEY5aVlYTmxSUUJPVTNRelgxOHlOMjUxYlY5d2RYUkpkMDVUWHpFNWIzTjBjbVZoYldKMVpsOXBkR1Z5WVhSdmNrbDNUbE5mTVRGamFHRnlYM1J5WVdsMGMwbDNSVVZGUlVWRkFFNVRkRE5mWHpJNVgxOXVkVzFmY0hWMFNYZEZSUUFsU0RvbFRUb2xVd0FsYlM4bFpDOGxlUUFsU1RvbFRUb2xVeUFsY0FBbFlTQWxZaUFsWkNBbFNEb2xUVG9sVXlBbFdRQkJUUUJRVFFCS1lXNTFZWEo1QUVabFluSjFZWEo1QUUxaGNtTm9BRUZ3Y21sc0FFMWhlUUJLZFc1bEFFcDFiSGtBUVhWbmRYTjBBRk5sY0hSbGJXSmxjZ0JQWTNSdlltVnlBRTV2ZG1WdFltVnlBRVJsWTJWdFltVnlBRXBoYmdCR1pXSUFUV0Z5QUVGd2NnQktkVzRBU25Wc0FFRjFad0JUWlhBQVQyTjBBRTV2ZGdCRVpXTUFVM1Z1WkdGNUFFMXZibVJoZVFCVWRXVnpaR0Y1QUZkbFpHNWxjMlJoZVFCVWFIVnljMlJoZVFCR2NtbGtZWGtBVTJGMGRYSmtZWGtBVTNWdUFFMXZiZ0JVZFdVQVYyVmtBRlJvZFFCR2Nta0FVMkYwQUNWdEx5VmtMeVY1SlZrdEpXMHRKV1FsU1RvbFRUb2xVeUFsY0NWSU9pVk5KVWc2SlUwNkpWTWxTRG9sVFRvbFUwNVRkRE5mWHpJNGRHbHRaVjluWlhSSlkwNVRYekU1YVhOMGNtVmhiV0oxWmw5cGRHVnlZWFJ2Y2tsalRsTmZNVEZqYUdGeVgzUnlZV2wwYzBsalJVVkZSVVZGQUU1VGRETmZYekl5TUY5ZmRHbHRaVjluWlhSZlkxOXpkRzl5WVdkbFNXTkZSUUJPVTNRelgxOHlPWFJwYldWZlltRnpaVVVBVGxOME0xOWZNamgwYVcxbFgyZGxkRWwzVGxOZk1UbHBjM1J5WldGdFluVm1YMmwwWlhKaGRHOXlTWGRPVTE4eE1XTm9ZWEpmZEhKaGFYUnpTWGRGUlVWRlJVVUFUbE4wTTE5Zk1qSXdYMTkwYVcxbFgyZGxkRjlqWDNOMGIzSmhaMlZKZDBWRkFFNVRkRE5mWHpJNGRHbHRaVjl3ZFhSSlkwNVRYekU1YjNOMGNtVmhiV0oxWmw5cGRHVnlZWFJ2Y2tsalRsTmZNVEZqYUdGeVgzUnlZV2wwYzBsalJVVkZSVVZGQUU1VGRETmZYekl4TUY5ZmRHbHRaVjl3ZFhSRkFFNVRkRE5mWHpJNGRHbHRaVjl3ZFhSSmQwNVRYekU1YjNOMGNtVmhiV0oxWmw5cGRHVnlZWFJ2Y2tsM1RsTmZNVEZqYUdGeVgzUnlZV2wwYzBsM1JVVkZSVVZGQUU1VGRETmZYekl4TUcxdmJtVjVjSFZ1WTNSSlkweGlNRVZGUlFCT1UzUXpYMTh5TVRCdGIyNWxlVjlpWVhObFJRQk9VM1F6WDE4eU1UQnRiMjVsZVhCMWJtTjBTV05NWWpGRlJVVUFUbE4wTTE5Zk1qRXdiVzl1Wlhsd2RXNWpkRWwzVEdJd1JVVkZBRTVUZEROZlh6SXhNRzF2Ym1WNWNIVnVZM1JKZDB4aU1VVkZSUUF3TVRJek5EVTJOemc1QUNWTVpnQk9VM1F6WDE4eU9XMXZibVY1WDJkbGRFbGpUbE5mTVRscGMzUnlaV0Z0WW5WbVgybDBaWEpoZEc5eVNXTk9VMTh4TVdOb1lYSmZkSEpoYVhSelNXTkZSVVZGUlVVQVRsTjBNMTlmTWpFeFgxOXRiMjVsZVY5blpYUkpZMFZGQURBeE1qTTBOVFkzT0RrQVRsTjBNMTlmTWpsdGIyNWxlVjluWlhSSmQwNVRYekU1YVhOMGNtVmhiV0oxWmw5cGRHVnlZWFJ2Y2tsM1RsTmZNVEZqYUdGeVgzUnlZV2wwYzBsM1JVVkZSVVZGQUU1VGRETmZYekl4TVY5ZmJXOXVaWGxmWjJWMFNYZEZSUUFsTGpCTVpnQk9VM1F6WDE4eU9XMXZibVY1WDNCMWRFbGpUbE5mTVRsdmMzUnlaV0Z0WW5WbVgybDBaWEpoZEc5eVNXTk9VMTh4TVdOb1lYSmZkSEpoYVhSelNXTkZSVVZGUlVVQVRsTjBNMTlmTWpFeFgxOXRiMjVsZVY5d2RYUkpZMFZGQUU1VGRETmZYekk1Ylc5dVpYbGZjSFYwU1hkT1UxOHhPVzl6ZEhKbFlXMWlkV1pmYVhSbGNtRjBiM0pKZDA1VFh6RXhZMmhoY2w5MGNtRnBkSE5KZDBWRlJVVkZSUUJPVTNRelgxOHlNVEZmWDIxdmJtVjVYM0IxZEVsM1JVVUFUbE4wTTE5Zk1qaHRaWE56WVdkbGMwbGpSVVVBVGxOME0xOWZNakV6YldWemMyRm5aWE5mWW1GelpVVUFUbE4wTTE5Zk1qRTNYMTkzYVdSbGJsOW1jbTl0WDNWMFpqaEpUR296TWtWRlJRQk9VM1F6WDE4eU4yTnZaR1ZqZG5SSlJHbGpNVEZmWDIxaWMzUmhkR1ZmZEVWRkFFNVRkRE5mWHpJeE1tTnZaR1ZqZG5SZlltRnpaVVVBVGxOME0xOWZNakUyWDE5dVlYSnliM2RmZEc5ZmRYUm1PRWxNYWpNeVJVVkZBRTVUZEROZlh6STRiV1Z6YzJGblpYTkpkMFZGQUU1VGRETmZYekkzWTI5a1pXTjJkRWxqWXpFeFgxOXRZbk4wWVhSbFgzUkZSUUJPVTNRelgxOHlOMk52WkdWamRuUkpkMk14TVY5ZmJXSnpkR0YwWlY5MFJVVUFUbE4wTTE5Zk1qZGpiMlJsWTNaMFNVUnpZekV4WDE5dFluTjBZWFJsWDNSRlJRQk9VM1F6WDE4eU5teHZZMkZzWlRWZlgybHRjRVVBVGxOME0xOWZNalZqZEhsd1pVbGpSVVVBVGxOME0xOWZNakV3WTNSNWNHVmZZbUZ6WlVVQVRsTjBNMTlmTWpWamRIbHdaVWwzUlVVQVptRnNjMlVBZEhKMVpRQk9VM1F6WDE4eU9HNTFiWEIxYm1OMFNXTkZSUUJPVTNRelgxOHlPRzUxYlhCMWJtTjBTWGRGUlFCT1UzUXpYMTh5TVRSZlgzTm9ZWEpsWkY5amIzVnVkRVVBVGxOME0xOWZNakU1WDE5emFHRnlaV1JmZDJWaGExOWpiM1Z1ZEVVQVltRmtYM2RsWVd0ZmNIUnlBRTVUZEROZlh6SXhNbUpoWkY5M1pXRnJYM0IwY2tVQWRHVnliV2x1WVhScGJtY2dkMmwwYUNBbGN5QmxlR05sY0hScGIyNGdiMllnZEhsd1pTQWxjem9nSlhNQWRHVnliV2x1WVhScGJtY2dkMmwwYUNBbGN5QmxlR05sY0hScGIyNGdiMllnZEhsd1pTQWxjd0IwWlhKdGFXNWhkR2x1WnlCM2FYUm9JQ1Z6SUdadmNtVnBaMjRnWlhoalpYQjBhVzl1QUhSbGNtMXBibUYwYVc1bkFIVnVZMkYxWjJoMEFGTjBPV1Y0WTJWd2RHbHZiZ0JPTVRCZlgyTjRlR0ZpYVhZeE1UWmZYM05vYVcxZmRIbHdaVjlwYm1adlJRQlRkRGwwZVhCbFgybHVabThBVGpFd1gxOWplSGhoWW1sMk1USXdYMTl6YVY5amJHRnpjMTkwZVhCbFgybHVabTlGQUU0eE1GOWZZM2g0WVdKcGRqRXhOMTlmWTJ4aGMzTmZkSGx3WlY5cGJtWnZSUUJ3ZEdoeVpXRmtYMjl1WTJVZ1ptRnBiSFZ5WlNCcGJpQmZYMk40WVY5blpYUmZaMnh2WW1Gc2MxOW1ZWE4wS0NrQVkyRnVibTkwSUdOeVpXRjBaU0J3ZEdoeVpXRmtJR3RsZVNCbWIzSWdYMTlqZUdGZloyVjBYMmRzYjJKaGJITW9LUUJqWVc1dWIzUWdlbVZ5YnlCdmRYUWdkR2h5WldGa0lIWmhiSFZsSUdadmNpQmZYMk40WVY5blpYUmZaMnh2WW1Gc2N5Z3BBSFJsY20xcGJtRjBaVjlvWVc1a2JHVnlJSFZ1Wlhod1pXTjBaV1JzZVNCeVpYUjFjbTVsWkFCVGRERXhiRzluYVdOZlpYSnliM0lBVTNReE1teGxibWQwYUY5bGNuSnZjZ0JPTVRCZlgyTjRlR0ZpYVhZeE1UbGZYM0J2YVc1MFpYSmZkSGx3WlY5cGJtWnZSUUJPTVRCZlgyTjRlR0ZpYVhZeE1UZGZYM0JpWVhObFgzUjVjR1ZmYVc1bWIwVUFUakV3WDE5amVIaGhZbWwyTVRJelgxOW1kVzVrWVcxbGJuUmhiRjkwZVhCbFgybHVabTlGQUhZQVJHNEFZZ0JqQUdnQVlRQnpBSFFBYVFCcUFHMEFaZ0JrQUU0eE1GOWZZM2g0WVdKcGRqRXhObDlmWlc1MWJWOTBlWEJsWDJsdVptOUZBRTR4TUY5ZlkzaDRZV0pwZGpFeU1WOWZkbTFwWDJOc1lYTnpYM1I1Y0dWZmFXNW1iMFU9Iiksc3RhdGljSW5pdDpmdW5jdGlvbigpe3lBLmlzV2luZG93cz0hIXByb2Nlc3MucGxhdGZvcm0ubWF0Y2goL153aW4vKX0sbW91bnQ6ZnVuY3Rpb24oQSl7cmV0dXJuIGgobykseUEuY3JlYXRlTm9kZShudWxsLCIvIix5QS5nZXRNb2RlKEEub3B0cy5yb290KSwwKX0sY3JlYXRlTm9kZTpmdW5jdGlvbihBLGUscixpKXtpZighRUEuaXNEaXIocikmJiFFQS5pc0ZpbGUocikmJiFFQS5pc0xpbmsocikpdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRUlOVkFMKTt2YXIgZj1FQS5jcmVhdGVOb2RlKEEsZSxyKTtyZXR1cm4gZi5ub2RlX29wcz15QS5ub2RlX29wcyxmLnN0cmVhbV9vcHM9eUEuc3RyZWFtX29wcyxmfSxnZXRNb2RlOmZ1bmN0aW9uKEEpe3ZhciBlO3RyeXtlPXVyLmxzdGF0U3luYyhBKSx5QS5pc1dpbmRvd3MmJihlLm1vZGU9ZS5tb2RlfCgxNDYmZS5tb2RlKT4+MSl9Y2F0Y2goQSl7aWYoIUEuY29kZSl0aHJvdyBBO3Rocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBW0EuY29kZV0pfXJldHVybiBlLm1vZGV9LHJlYWxQYXRoOmZ1bmN0aW9uKEEpe2Zvcih2YXIgZT1bXTtBLnBhcmVudCE9PUE7KWUucHVzaChBLm5hbWUpLEE9QS5wYXJlbnQ7cmV0dXJuIGUucHVzaChBLm1vdW50Lm9wdHMucm9vdCksZS5yZXZlcnNlKCksbUEuam9pbi5hcHBseShudWxsLGUpfSxmbGFnc1RvUGVybWlzc2lvblN0cmluZ01hcDp7MDoiciIsMToicisiLDI6InIrIiw2NDoiciIsNjU6InIrIiw2NjoicisiLDEyOToicngrIiwxOTM6InJ4KyIsNTE0OiJ3KyIsNTc3OiJ3Iiw1Nzg6IncrIiw3MDU6Ind4Iiw3MDY6Ind4KyIsMTAyNDoiYSIsMTAyNToiYSIsMTAyNjoiYSsiLDEwODk6ImEiLDEwOTA6ImErIiwxMTUzOiJheCIsMTE1NDoiYXgrIiwxMjE3OiJheCIsMTIxODoiYXgrIiw0MDk2OiJycyIsNDA5ODoicnMrIn0sZmxhZ3NUb1Blcm1pc3Npb25TdHJpbmc6ZnVuY3Rpb24oQSl7aWYoQSY9LTIwOTcxNTMsQSY9LTIwNDksQSY9LTMyNzY5LChBJj0tNTI0Mjg5KWluIHlBLmZsYWdzVG9QZXJtaXNzaW9uU3RyaW5nTWFwKXJldHVybiB5QS5mbGFnc1RvUGVybWlzc2lvblN0cmluZ01hcFtBXTt0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FSU5WQUwpfSxub2RlX29wczp7Z2V0YXR0cjpmdW5jdGlvbihBKXt2YXIgZSxyPXlBLnJlYWxQYXRoKEEpO3RyeXtlPXVyLmxzdGF0U3luYyhyKX1jYXRjaChBKXtpZighQS5jb2RlKXRocm93IEE7dGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEFbQS5jb2RlXSl9cmV0dXJuIHlBLmlzV2luZG93cyYmIWUuYmxrc2l6ZSYmKGUuYmxrc2l6ZT00MDk2KSx5QS5pc1dpbmRvd3MmJiFlLmJsb2NrcyYmKGUuYmxvY2tzPShlLnNpemUrZS5ibGtzaXplLTEpL2UuYmxrc2l6ZXwwKSx7ZGV2OmUuZGV2LGlubzplLmlubyxtb2RlOmUubW9kZSxubGluazplLm5saW5rLHVpZDplLnVpZCxnaWQ6ZS5naWQscmRldjplLnJkZXYsc2l6ZTplLnNpemUsYXRpbWU6ZS5hdGltZSxtdGltZTplLm10aW1lLGN0aW1lOmUuY3RpbWUsYmxrc2l6ZTplLmJsa3NpemUsYmxvY2tzOmUuYmxvY2tzfX0sc2V0YXR0cjpmdW5jdGlvbihBLGUpe3ZhciByPXlBLnJlYWxQYXRoKEEpO3RyeXtpZih2b2lkIDAhPT1lLm1vZGUmJih1ci5jaG1vZFN5bmMocixlLm1vZGUpLEEubW9kZT1lLm1vZGUpLHZvaWQgMCE9PWUudGltZXN0YW1wKXt2YXIgaT1uZXcgRGF0ZShlLnRpbWVzdGFtcCk7dXIudXRpbWVzU3luYyhyLGksaSl9dm9pZCAwIT09ZS5zaXplJiZ1ci50cnVuY2F0ZVN5bmMocixlLnNpemUpfWNhdGNoKEEpe2lmKCFBLmNvZGUpdGhyb3cgQTt0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQVtBLmNvZGVdKX19LGxvb2t1cDpmdW5jdGlvbihBLGUpe3ZhciByPW1BLmpvaW4yKHlBLnJlYWxQYXRoKEEpLGUpLGk9eUEuZ2V0TW9kZShyKTtyZXR1cm4geUEuY3JlYXRlTm9kZShBLGUsaSl9LG1rbm9kOmZ1bmN0aW9uKEEsZSxyLGkpe3ZhciBmPXlBLmNyZWF0ZU5vZGUoQSxlLHIsaSksbj15QS5yZWFsUGF0aChmKTt0cnl7RUEuaXNEaXIoZi5tb2RlKT91ci5ta2RpclN5bmMobixmLm1vZGUpOnVyLndyaXRlRmlsZVN5bmMobiwiIix7bW9kZTpmLm1vZGV9KX1jYXRjaChBKXtpZighQS5jb2RlKXRocm93IEE7dGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEFbQS5jb2RlXSl9cmV0dXJuIGZ9LHJlbmFtZTpmdW5jdGlvbihBLGUscil7dmFyIGk9eUEucmVhbFBhdGgoQSksZj1tQS5qb2luMih5QS5yZWFsUGF0aChlKSxyKTt0cnl7dXIucmVuYW1lU3luYyhpLGYpfWNhdGNoKEEpe2lmKCFBLmNvZGUpdGhyb3cgQTt0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQVtBLmNvZGVdKX19LHVubGluazpmdW5jdGlvbihBLGUpe3ZhciByPW1BLmpvaW4yKHlBLnJlYWxQYXRoKEEpLGUpO3RyeXt1ci51bmxpbmtTeW5jKHIpfWNhdGNoKEEpe2lmKCFBLmNvZGUpdGhyb3cgQTt0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQVtBLmNvZGVdKX19LHJtZGlyOmZ1bmN0aW9uKEEsZSl7dmFyIHI9bUEuam9pbjIoeUEucmVhbFBhdGgoQSksZSk7dHJ5e3VyLnJtZGlyU3luYyhyKX1jYXRjaChBKXtpZighQS5jb2RlKXRocm93IEE7dGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEFbQS5jb2RlXSl9fSxyZWFkZGlyOmZ1bmN0aW9uKEEpe3ZhciBlPXlBLnJlYWxQYXRoKEEpO3RyeXtyZXR1cm4gdXIucmVhZGRpclN5bmMoZSl9Y2F0Y2goQSl7aWYoIUEuY29kZSl0aHJvdyBBO3Rocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBW0EuY29kZV0pfX0sc3ltbGluazpmdW5jdGlvbihBLGUscil7dmFyIGk9bUEuam9pbjIoeUEucmVhbFBhdGgoQSksZSk7dHJ5e3VyLnN5bWxpbmtTeW5jKHIsaSl9Y2F0Y2goQSl7aWYoIUEuY29kZSl0aHJvdyBBO3Rocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBW0EuY29kZV0pfX0scmVhZGxpbms6ZnVuY3Rpb24oQSl7dmFyIGU9eUEucmVhbFBhdGgoQSk7dHJ5e3JldHVybiBlPXVyLnJlYWRsaW5rU3luYyhlKSxlPWJyLnJlbGF0aXZlKGJyLnJlc29sdmUoQS5tb3VudC5vcHRzLnJvb3QpLGUpfWNhdGNoKEEpe2lmKCFBLmNvZGUpdGhyb3cgQTt0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQVtBLmNvZGVdKX19fSxzdHJlYW1fb3BzOntvcGVuOmZ1bmN0aW9uKEEpe3ZhciBlPXlBLnJlYWxQYXRoKEEubm9kZSk7dHJ5e0VBLmlzRmlsZShBLm5vZGUubW9kZSkmJihBLm5mZD11ci5vcGVuU3luYyhlLHlBLmZsYWdzVG9QZXJtaXNzaW9uU3RyaW5nKEEuZmxhZ3MpKSl9Y2F0Y2goQSl7aWYoIUEuY29kZSl0aHJvdyBBO3Rocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBW0EuY29kZV0pfX0sY2xvc2U6ZnVuY3Rpb24oQSl7dHJ5e0VBLmlzRmlsZShBLm5vZGUubW9kZSkmJkEubmZkJiZ1ci5jbG9zZVN5bmMoQS5uZmQpfWNhdGNoKEEpe2lmKCFBLmNvZGUpdGhyb3cgQTt0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQVtBLmNvZGVdKX19LHJlYWQ6ZnVuY3Rpb24oQSxlLHIsaSxmKXtpZigwPT09aSlyZXR1cm4gMDt2YXIgbix0PW5ldyBCdWZmZXIoaSk7dHJ5e249dXIucmVhZFN5bmMoQS5uZmQsdCwwLGksZil9Y2F0Y2goQSl7dGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEFbQS5jb2RlXSl9aWYoMDxuKWZvcih2YXIgbz0wO288bjtvKyspZVtyK29dPXRbb107cmV0dXJuIG59LHdyaXRlOmZ1bmN0aW9uKEEsZSxyLGksZil7dmFyIG4sdD1uZXcgQnVmZmVyKGUuc3ViYXJyYXkocixyK2kpKTt0cnl7bj11ci53cml0ZVN5bmMoQS5uZmQsdCwwLGksZil9Y2F0Y2goQSl7dGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEFbQS5jb2RlXSl9cmV0dXJuIG59LGxsc2VlazpmdW5jdGlvbihBLGUscil7dmFyIGk9ZTtpZigxPT09cilpKz1BLnBvc2l0aW9uO2Vsc2UgaWYoMj09PXImJkVBLmlzRmlsZShBLm5vZGUubW9kZSkpdHJ5e2krPXVyLmZzdGF0U3luYyhBLm5mZCkuc2l6ZX1jYXRjaChBKXt0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQVtBLmNvZGVdKX1pZihpPDApdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRUlOVkFMKTtyZXR1cm4gaX19fSxCQT17RElSX01PREU6MTY4OTUsRklMRV9NT0RFOjMzMjc5LHJlYWRlcjpudWxsLG1vdW50OmZ1bmN0aW9uKEEpe2gobCksQkEucmVhZGVyfHwoQkEucmVhZGVyPW5ldyBGaWxlUmVhZGVyU3luYyk7dmFyIG49QkEuY3JlYXRlTm9kZShudWxsLCIvIixCQS5ESVJfTU9ERSwwKSx0PXt9O2Z1bmN0aW9uIGkoQSl7Zm9yKHZhciBlPUEuc3BsaXQoIi8iKSxyPW4saT0wO2k8ZS5sZW5ndGgtMTtpKyspe3ZhciBmPWUuc2xpY2UoMCxpKzEpLmpvaW4oIi8iKTt0W2ZdfHwodFtmXT1CQS5jcmVhdGVOb2RlKHIsZVtpXSxCQS5ESVJfTU9ERSwwKSkscj10W2ZdfXJldHVybiByfWZ1bmN0aW9uIGYoQSl7dmFyIGU9QS5zcGxpdCgiLyIpO3JldHVybiBlW2UubGVuZ3RoLTFdfXJldHVybiBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKEEub3B0cy5maWxlc3x8W10sZnVuY3Rpb24oQSl7QkEuY3JlYXRlTm9kZShpKEEubmFtZSksZihBLm5hbWUpLEJBLkZJTEVfTU9ERSwwLEEsQS5sYXN0TW9kaWZpZWREYXRlKX0pLChBLm9wdHMuYmxvYnN8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKEEpe0JBLmNyZWF0ZU5vZGUoaShBLm5hbWUpLGYoQS5uYW1lKSxCQS5GSUxFX01PREUsMCxBLmRhdGEpfSksKEEub3B0cy5wYWNrYWdlc3x8W10pLmZvckVhY2goZnVuY3Rpb24ocil7ci5tZXRhZGF0YS5maWxlcy5mb3JFYWNoKGZ1bmN0aW9uKEEpe3ZhciBlPUEuZmlsZW5hbWUuc3Vic3RyKDEpO0JBLmNyZWF0ZU5vZGUoaShlKSxmKGUpLEJBLkZJTEVfTU9ERSwwLHIuYmxvYi5zbGljZShBLnN0YXJ0LEEuZW5kKSl9KX0pLG59LGNyZWF0ZU5vZGU6ZnVuY3Rpb24oQSxlLHIsaSxmLG4pe3ZhciB0PUVBLmNyZWF0ZU5vZGUoQSxlLHIpO3JldHVybiB0Lm1vZGU9cix0Lm5vZGVfb3BzPUJBLm5vZGVfb3BzLHQuc3RyZWFtX29wcz1CQS5zdHJlYW1fb3BzLHQudGltZXN0YW1wPShufHxuZXcgRGF0ZSkuZ2V0VGltZSgpLGgoQkEuRklMRV9NT0RFIT09QkEuRElSX01PREUpLHI9PT1CQS5GSUxFX01PREU/KHQuc2l6ZT1mLnNpemUsdC5jb250ZW50cz1mKToodC5zaXplPTQwOTYsdC5jb250ZW50cz17fSksQSYmKEEuY29udGVudHNbZV09dCksdH0sbm9kZV9vcHM6e2dldGF0dHI6ZnVuY3Rpb24oQSl7cmV0dXJue2RldjoxLGlubzp2b2lkIDAsbW9kZTpBLm1vZGUsbmxpbms6MSx1aWQ6MCxnaWQ6MCxyZGV2OnZvaWQgMCxzaXplOkEuc2l6ZSxhdGltZTpuZXcgRGF0ZShBLnRpbWVzdGFtcCksbXRpbWU6bmV3IERhdGUoQS50aW1lc3RhbXApLGN0aW1lOm5ldyBEYXRlKEEudGltZXN0YW1wKSxibGtzaXplOjQwOTYsYmxvY2tzOk1hdGguY2VpbChBLnNpemUvNDA5Nil9fSxzZXRhdHRyOmZ1bmN0aW9uKEEsZSl7dm9pZCAwIT09ZS5tb2RlJiYoQS5tb2RlPWUubW9kZSksdm9pZCAwIT09ZS50aW1lc3RhbXAmJihBLnRpbWVzdGFtcD1lLnRpbWVzdGFtcCl9LGxvb2t1cDpmdW5jdGlvbihBLGUpe3Rocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVOT0VOVCl9LG1rbm9kOmZ1bmN0aW9uKEEsZSxyLGkpe3Rocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVQRVJNKX0scmVuYW1lOmZ1bmN0aW9uKEEsZSxyKXt0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FUEVSTSl9LHVubGluazpmdW5jdGlvbihBLGUpe3Rocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVQRVJNKX0scm1kaXI6ZnVuY3Rpb24oQSxlKXt0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FUEVSTSl9LHJlYWRkaXI6ZnVuY3Rpb24oQSl7dmFyIGU9WyIuIiwiLi4iXTtmb3IodmFyIHIgaW4gQS5jb250ZW50cylBLmNvbnRlbnRzLmhhc093blByb3BlcnR5KHIpJiZlLnB1c2gocik7cmV0dXJuIGV9LHN5bWxpbms6ZnVuY3Rpb24oQSxlLHIpe3Rocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVQRVJNKX0scmVhZGxpbms6ZnVuY3Rpb24oQSl7dGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRVBFUk0pfX0sc3RyZWFtX29wczp7cmVhZDpmdW5jdGlvbihBLGUscixpLGYpe2lmKGY+PUEubm9kZS5zaXplKXJldHVybiAwO3ZhciBuPUEubm9kZS5jb250ZW50cy5zbGljZShmLGYraSksdD1CQS5yZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIobik7cmV0dXJuIGUuc2V0KG5ldyBVaW50OEFycmF5KHQpLHIpLG4uc2l6ZX0sd3JpdGU6ZnVuY3Rpb24oQSxlLHIsaSxmKXt0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FSU8pfSxsbHNlZWs6ZnVuY3Rpb24oQSxlLHIpe3ZhciBpPWU7aWYoMT09PXI/aSs9QS5wb3NpdGlvbjoyPT09ciYmRUEuaXNGaWxlKEEubm9kZS5tb2RlKSYmKGkrPUEubm9kZS5zaXplKSxpPDApdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRUlOVkFMKTtyZXR1cm4gaX19fTtSKz0xNixSKz0xNixSKz0xNjt2YXIgRUE9e3Jvb3Q6bnVsbCxtb3VudHM6W10sZGV2aWNlczpbbnVsbF0sc3RyZWFtczpbXSxuZXh0SW5vZGU6MSxuYW1lVGFibGU6bnVsbCxjdXJyZW50UGF0aDoiLyIsaW5pdGlhbGl6ZWQ6ITEsaWdub3JlUGVybWlzc2lvbnM6ITAsdHJhY2tpbmdEZWxlZ2F0ZTp7fSx0cmFja2luZzp7b3BlbkZsYWdzOntSRUFEOjEsV1JJVEU6Mn19LEVycm5vRXJyb3I6bnVsbCxnZW5lcmljRXJyb3JzOnt9LGZpbGVzeXN0ZW1zOm51bGwsc3luY0ZTUmVxdWVzdHM6MCxoYW5kbGVGU0Vycm9yOmZ1bmN0aW9uKEEpe2lmKCEoQSBpbnN0YW5jZW9mIEVBLkVycm5vRXJyb3IpKXRocm93IEErIiA6ICIrcCgpO3JldHVybiB3QShBLmVycm5vKX0sbG9va3VwUGF0aDpmdW5jdGlvbihBLGUpe2lmKGU9ZXx8e30sIShBPW1BLnJlc29sdmUoRUEuY3dkKCksQSkpKXJldHVybntwYXRoOiIiLG5vZGU6bnVsbH07dmFyIHI9e2ZvbGxvd19tb3VudDohMCxyZWN1cnNlX2NvdW50OjB9O2Zvcih2YXIgaSBpbiByKXZvaWQgMD09PWVbaV0mJihlW2ldPXJbaV0pO2lmKDg8ZS5yZWN1cnNlX2NvdW50KXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVMT09QKTtmb3IodmFyIGY9bUEubm9ybWFsaXplQXJyYXkoQS5zcGxpdCgiLyIpLmZpbHRlcihmdW5jdGlvbihBKXtyZXR1cm4hIUF9KSwhMSksbj1FQS5yb290LHQ9Ii8iLG89MDtvPGYubGVuZ3RoO28rKyl7dmFyIGE9bz09PWYubGVuZ3RoLTE7aWYoYSYmZS5wYXJlbnQpYnJlYWs7aWYobj1FQS5sb29rdXBOb2RlKG4sZltvXSksdD1tQS5qb2luMih0LGZbb10pLEVBLmlzTW91bnRwb2ludChuKSYmKCFhfHxhJiZlLmZvbGxvd19tb3VudCkmJihuPW4ubW91bnRlZC5yb290KSwhYXx8ZS5mb2xsb3cpZm9yKHZhciBjPTA7RUEuaXNMaW5rKG4ubW9kZSk7KXt2YXIgbD1FQS5yZWFkbGluayh0KTtpZih0PW1BLnJlc29sdmUobUEuZGlybmFtZSh0KSxsKSxuPUVBLmxvb2t1cFBhdGgodCx7cmVjdXJzZV9jb3VudDplLnJlY3Vyc2VfY291bnR9KS5ub2RlLDQwPGMrKyl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FTE9PUCl9fXJldHVybntwYXRoOnQsbm9kZTpufX0sZ2V0UGF0aDpmdW5jdGlvbihBKXtmb3IodmFyIGU7Oyl7aWYoRUEuaXNSb290KEEpKXt2YXIgcj1BLm1vdW50Lm1vdW50cG9pbnQ7cmV0dXJuIGU/Ii8iIT09cltyLmxlbmd0aC0xXT9yKyIvIitlOnIrZTpyfWU9ZT9BLm5hbWUrIi8iK2U6QS5uYW1lLEE9QS5wYXJlbnR9fSxoYXNoTmFtZTpmdW5jdGlvbihBLGUpe2Zvcih2YXIgcj0wLGk9MDtpPGUubGVuZ3RoO2krKylyPShyPDw1KS1yK2UuY2hhckNvZGVBdChpKXwwO3JldHVybihBK3I+Pj4wKSVFQS5uYW1lVGFibGUubGVuZ3RofSxoYXNoQWRkTm9kZTpmdW5jdGlvbihBKXt2YXIgZT1FQS5oYXNoTmFtZShBLnBhcmVudC5pZCxBLm5hbWUpO0EubmFtZV9uZXh0PUVBLm5hbWVUYWJsZVtlXSxFQS5uYW1lVGFibGVbZV09QX0saGFzaFJlbW92ZU5vZGU6ZnVuY3Rpb24oQSl7dmFyIGU9RUEuaGFzaE5hbWUoQS5wYXJlbnQuaWQsQS5uYW1lKTtpZihFQS5uYW1lVGFibGVbZV09PT1BKUVBLm5hbWVUYWJsZVtlXT1BLm5hbWVfbmV4dDtlbHNlIGZvcih2YXIgcj1FQS5uYW1lVGFibGVbZV07cjspe2lmKHIubmFtZV9uZXh0PT09QSl7ci5uYW1lX25leHQ9QS5uYW1lX25leHQ7YnJlYWt9cj1yLm5hbWVfbmV4dH19LGxvb2t1cE5vZGU6ZnVuY3Rpb24oQSxlKXt2YXIgcj1FQS5tYXlMb29rdXAoQSk7aWYocil0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihyLEEpO2Zvcih2YXIgaT1FQS5oYXNoTmFtZShBLmlkLGUpLGY9RUEubmFtZVRhYmxlW2ldO2Y7Zj1mLm5hbWVfbmV4dCl7dmFyIG49Zi5uYW1lO2lmKGYucGFyZW50LmlkPT09QS5pZCYmbj09PWUpcmV0dXJuIGZ9cmV0dXJuIEVBLmxvb2t1cChBLGUpfSxjcmVhdGVOb2RlOmZ1bmN0aW9uKEEsZSxyLGkpe2lmKCFFQS5GU05vZGUpe0VBLkZTTm9kZT1mdW5jdGlvbihBLGUscixpKXtBPUF8fHRoaXMsdGhpcy5wYXJlbnQ9QSx0aGlzLm1vdW50PUEubW91bnQsdGhpcy5tb3VudGVkPW51bGwsdGhpcy5pZD1FQS5uZXh0SW5vZGUrKyx0aGlzLm5hbWU9ZSx0aGlzLm1vZGU9cix0aGlzLm5vZGVfb3BzPXt9LHRoaXMuc3RyZWFtX29wcz17fSx0aGlzLnJkZXY9aX0sRUEuRlNOb2RlLnByb3RvdHlwZT17fTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhFQS5GU05vZGUucHJvdG90eXBlLHtyZWFkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMzY1PT0oMzY1JnRoaXMubW9kZSl9LHNldDpmdW5jdGlvbihBKXtBP3RoaXMubW9kZXw9MzY1OnRoaXMubW9kZSY9LTM2Nn19LHdyaXRlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMTQ2PT0oMTQ2JnRoaXMubW9kZSl9LHNldDpmdW5jdGlvbihBKXtBP3RoaXMubW9kZXw9MTQ2OnRoaXMubW9kZSY9LTE0N319LGlzRm9sZGVyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRUEuaXNEaXIodGhpcy5tb2RlKX19LGlzRGV2aWNlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRUEuaXNDaHJkZXYodGhpcy5tb2RlKX19fSl9dmFyIGY9bmV3IEVBLkZTTm9kZShBLGUscixpKTtyZXR1cm4gRUEuaGFzaEFkZE5vZGUoZiksZn0sZGVzdHJveU5vZGU6ZnVuY3Rpb24oQSl7RUEuaGFzaFJlbW92ZU5vZGUoQSl9LGlzUm9vdDpmdW5jdGlvbihBKXtyZXR1cm4gQT09PUEucGFyZW50fSxpc01vdW50cG9pbnQ6ZnVuY3Rpb24oQSl7cmV0dXJuISFBLm1vdW50ZWR9LGlzRmlsZTpmdW5jdGlvbihBKXtyZXR1cm4gMzI3Njg9PSg2MTQ0MCZBKX0saXNEaXI6ZnVuY3Rpb24oQSl7cmV0dXJuIDE2Mzg0PT0oNjE0NDAmQSl9LGlzTGluazpmdW5jdGlvbihBKXtyZXR1cm4gNDA5NjA9PSg2MTQ0MCZBKX0saXNDaHJkZXY6ZnVuY3Rpb24oQSl7cmV0dXJuIDgxOTI9PSg2MTQ0MCZBKX0saXNCbGtkZXY6ZnVuY3Rpb24oQSl7cmV0dXJuIDI0NTc2PT0oNjE0NDAmQSl9LGlzRklGTzpmdW5jdGlvbihBKXtyZXR1cm4gNDA5Nj09KDYxNDQwJkEpfSxpc1NvY2tldDpmdW5jdGlvbihBKXtyZXR1cm4gNDkxNTI9PSg0OTE1MiZBKX0sZmxhZ01vZGVzOntyOjAscnM6MTA1MjY3MiwicisiOjIsdzo1Nzcsd3g6NzA1LHh3OjcwNSwidysiOjU3OCwid3grIjo3MDYsInh3KyI6NzA2LGE6MTA4OSxheDoxMjE3LHhhOjEyMTcsImErIjoxMDkwLCJheCsiOjEyMTgsInhhKyI6MTIxOH0sbW9kZVN0cmluZ1RvRmxhZ3M6ZnVuY3Rpb24oQSl7dmFyIGU9RUEuZmxhZ01vZGVzW0FdO2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGZpbGUgb3BlbiBtb2RlOiAiK0EpO3JldHVybiBlfSxmbGFnc1RvUGVybWlzc2lvblN0cmluZzpmdW5jdGlvbihBKXt2YXIgZT1bInIiLCJ3IiwicnciXVszJkFdO3JldHVybiA1MTImQSYmKGUrPSJ3IiksZX0sbm9kZVBlcm1pc3Npb25zOmZ1bmN0aW9uKEEsZSl7cmV0dXJuIEVBLmlnbm9yZVBlcm1pc3Npb25zfHwoLTE9PT1lLmluZGV4T2YoInIiKXx8MjkyJkEubW9kZSkmJigtMT09PWUuaW5kZXhPZigidyIpfHwxNDYmQS5tb2RlKSYmKC0xPT09ZS5pbmRleE9mKCJ4Iil8fDczJkEubW9kZSk/MDpoQS5FQUNDRVN9LG1heUxvb2t1cDpmdW5jdGlvbihBKXt2YXIgZT1FQS5ub2RlUGVybWlzc2lvbnMoQSwieCIpO3JldHVybiBlfHwoQS5ub2RlX29wcy5sb29rdXA/MDpoQS5FQUNDRVMpfSxtYXlDcmVhdGU6ZnVuY3Rpb24oQSxlKXt0cnl7RUEubG9va3VwTm9kZShBLGUpO3JldHVybiBoQS5FRVhJU1R9Y2F0Y2goQSl7fXJldHVybiBFQS5ub2RlUGVybWlzc2lvbnMoQSwid3giKX0sbWF5RGVsZXRlOmZ1bmN0aW9uKEEsZSxyKXt2YXIgaTt0cnl7aT1FQS5sb29rdXBOb2RlKEEsZSl9Y2F0Y2goQSl7cmV0dXJuIEEuZXJybm99dmFyIGY9RUEubm9kZVBlcm1pc3Npb25zKEEsInd4Iik7aWYoZilyZXR1cm4gZjtpZihyKXtpZighRUEuaXNEaXIoaS5tb2RlKSlyZXR1cm4gaEEuRU5PVERJUjtpZihFQS5pc1Jvb3QoaSl8fEVBLmdldFBhdGgoaSk9PT1FQS5jd2QoKSlyZXR1cm4gaEEuRUJVU1l9ZWxzZSBpZihFQS5pc0RpcihpLm1vZGUpKXJldHVybiBoQS5FSVNESVI7cmV0dXJuIDB9LG1heU9wZW46ZnVuY3Rpb24oQSxlKXtyZXR1cm4gQT9FQS5pc0xpbmsoQS5tb2RlKT9oQS5FTE9PUDpFQS5pc0RpcihBLm1vZGUpJiYoInIiIT09RUEuZmxhZ3NUb1Blcm1pc3Npb25TdHJpbmcoZSl8fDUxMiZlKT9oQS5FSVNESVI6RUEubm9kZVBlcm1pc3Npb25zKEEsRUEuZmxhZ3NUb1Blcm1pc3Npb25TdHJpbmcoZSkpOmhBLkVOT0VOVH0sTUFYX09QRU5fRkRTOjQwOTYsbmV4dGZkOmZ1bmN0aW9uKEEsZSl7QT1BfHwwLGU9ZXx8RUEuTUFYX09QRU5fRkRTO2Zvcih2YXIgcj1BO3I8PWU7cisrKWlmKCFFQS5zdHJlYW1zW3JdKXJldHVybiByO3Rocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVNRklMRSl9LGdldFN0cmVhbTpmdW5jdGlvbihBKXtyZXR1cm4gRUEuc3RyZWFtc1tBXX0sY3JlYXRlU3RyZWFtOmZ1bmN0aW9uKEEsZSxyKXtFQS5GU1N0cmVhbXx8KEVBLkZTU3RyZWFtPWZ1bmN0aW9uKCl7fSxFQS5GU1N0cmVhbS5wcm90b3R5cGU9e30sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRUEuRlNTdHJlYW0ucHJvdG90eXBlLHtvYmplY3Q6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGV9LHNldDpmdW5jdGlvbihBKXt0aGlzLm5vZGU9QX19LGlzUmVhZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDEhPSgyMDk3MTU1JnRoaXMuZmxhZ3MpfX0saXNXcml0ZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDAhPSgyMDk3MTU1JnRoaXMuZmxhZ3MpfX0saXNBcHBlbmQ6e2dldDpmdW5jdGlvbigpe3JldHVybiAxMDI0JnRoaXMuZmxhZ3N9fX0pKTt2YXIgaT1uZXcgRUEuRlNTdHJlYW07Zm9yKHZhciBmIGluIEEpaVtmXT1BW2ZdO0E9aTt2YXIgbj1FQS5uZXh0ZmQoZSxyKTtyZXR1cm4gQS5mZD1uLEVBLnN0cmVhbXNbbl09QX0sY2xvc2VTdHJlYW06ZnVuY3Rpb24oQSl7RUEuc3RyZWFtc1tBXT1udWxsfSxjaHJkZXZfc3RyZWFtX29wczp7b3BlbjpmdW5jdGlvbihBKXt2YXIgZT1FQS5nZXREZXZpY2UoQS5ub2RlLnJkZXYpO0Euc3RyZWFtX29wcz1lLnN0cmVhbV9vcHMsQS5zdHJlYW1fb3BzLm9wZW4mJkEuc3RyZWFtX29wcy5vcGVuKEEpfSxsbHNlZWs6ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FU1BJUEUpfX0sbWFqb3I6ZnVuY3Rpb24oQSl7cmV0dXJuIEE+Pjh9LG1pbm9yOmZ1bmN0aW9uKEEpe3JldHVybiAyNTUmQX0sbWFrZWRldjpmdW5jdGlvbihBLGUpe3JldHVybiBBPDw4fGV9LHJlZ2lzdGVyRGV2aWNlOmZ1bmN0aW9uKEEsZSl7RUEuZGV2aWNlc1tBXT17c3RyZWFtX29wczplfX0sZ2V0RGV2aWNlOmZ1bmN0aW9uKEEpe3JldHVybiBFQS5kZXZpY2VzW0FdfSxnZXRNb3VudHM6ZnVuY3Rpb24oQSl7Zm9yKHZhciBlPVtdLHI9W0FdO3IubGVuZ3RoOyl7dmFyIGk9ci5wb3AoKTtlLnB1c2goaSksci5wdXNoLmFwcGx5KHIsaS5tb3VudHMpfXJldHVybiBlfSxzeW5jZnM6ZnVuY3Rpb24oZSxyKXsiZnVuY3Rpb24iPT10eXBlb2YgZSYmKHI9ZSxlPSExKSxFQS5zeW5jRlNSZXF1ZXN0cysrLDE8RUEuc3luY0ZTUmVxdWVzdHMmJmNvbnNvbGUubG9nKCJ3YXJuaW5nOiAiK0VBLnN5bmNGU1JlcXVlc3RzKyIgRlMuc3luY2ZzIG9wZXJhdGlvbnMgaW4gZmxpZ2h0IGF0IG9uY2UsIHByb2JhYmx5IGp1c3QgZG9pbmcgZXh0cmEgd29yayIpO3ZhciBpPUVBLmdldE1vdW50cyhFQS5yb290Lm1vdW50KSxmPTA7ZnVuY3Rpb24gbihBKXtyZXR1cm4gaCgwPEVBLnN5bmNGU1JlcXVlc3RzKSxFQS5zeW5jRlNSZXF1ZXN0cy0tLHIoQSl9ZnVuY3Rpb24gdChBKXtpZihBKXJldHVybiB0LmVycm9yZWQ/dm9pZCAwOih0LmVycm9yZWQ9ITAsbihBKSk7KytmPj1pLmxlbmd0aCYmbihudWxsKX1pLmZvckVhY2goZnVuY3Rpb24oQSl7aWYoIUEudHlwZS5zeW5jZnMpcmV0dXJuIHQobnVsbCk7QS50eXBlLnN5bmNmcyhBLGUsdCl9KX0sbW91bnQ6ZnVuY3Rpb24oQSxlLHIpe3ZhciBpLGY9Ii8iPT09cixuPSFyO2lmKGYmJkVBLnJvb3QpdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRUJVU1kpO2lmKCFmJiYhbil7dmFyIHQ9RUEubG9va3VwUGF0aChyLHtmb2xsb3dfbW91bnQ6ITF9KTtpZihyPXQucGF0aCxpPXQubm9kZSxFQS5pc01vdW50cG9pbnQoaSkpdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRUJVU1kpO2lmKCFFQS5pc0RpcihpLm1vZGUpKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVOT1RESVIpfXZhciBvPXt0eXBlOkEsb3B0czplLG1vdW50cG9pbnQ6cixtb3VudHM6W119LGE9QS5tb3VudChvKTtyZXR1cm4oYS5tb3VudD1vKS5yb290PWEsZj9FQS5yb290PWE6aSYmKGkubW91bnRlZD1vLGkubW91bnQmJmkubW91bnQubW91bnRzLnB1c2gobykpLGF9LHVubW91bnQ6ZnVuY3Rpb24oQSl7dmFyIGU9RUEubG9va3VwUGF0aChBLHtmb2xsb3dfbW91bnQ6ITF9KTtpZighRUEuaXNNb3VudHBvaW50KGUubm9kZSkpdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRUlOVkFMKTt2YXIgcj1lLm5vZGUsaT1yLm1vdW50ZWQsZj1FQS5nZXRNb3VudHMoaSk7T2JqZWN0LmtleXMoRUEubmFtZVRhYmxlKS5mb3JFYWNoKGZ1bmN0aW9uKEEpe2Zvcih2YXIgZT1FQS5uYW1lVGFibGVbQV07ZTspe3ZhciByPWUubmFtZV9uZXh0Oy0xIT09Zi5pbmRleE9mKGUubW91bnQpJiZFQS5kZXN0cm95Tm9kZShlKSxlPXJ9fSksci5tb3VudGVkPW51bGw7dmFyIG49ci5tb3VudC5tb3VudHMuaW5kZXhPZihpKTtoKC0xIT09biksci5tb3VudC5tb3VudHMuc3BsaWNlKG4sMSl9LGxvb2t1cDpmdW5jdGlvbihBLGUpe3JldHVybiBBLm5vZGVfb3BzLmxvb2t1cChBLGUpfSxta25vZDpmdW5jdGlvbihBLGUscil7dmFyIGk9RUEubG9va3VwUGF0aChBLHtwYXJlbnQ6ITB9KS5ub2RlLGY9bUEuYmFzZW5hbWUoQSk7aWYoIWZ8fCIuIj09PWZ8fCIuLiI9PT1mKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVJTlZBTCk7dmFyIG49RUEubWF5Q3JlYXRlKGksZik7aWYobil0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihuKTtpZighaS5ub2RlX29wcy5ta25vZCl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FUEVSTSk7cmV0dXJuIGkubm9kZV9vcHMubWtub2QoaSxmLGUscil9LGNyZWF0ZTpmdW5jdGlvbihBLGUpe3JldHVybiBlPXZvaWQgMCE9PWU/ZTo0MzgsZSY9NDA5NSxlfD0zMjc2OCxFQS5ta25vZChBLGUsMCl9LG1rZGlyOmZ1bmN0aW9uKEEsZSl7cmV0dXJuIGU9dm9pZCAwIT09ZT9lOjUxMSxlJj0xMDIzLGV8PTE2Mzg0LEVBLm1rbm9kKEEsZSwwKX0sbWtkaXJUcmVlOmZ1bmN0aW9uKEEsZSl7Zm9yKHZhciByPUEuc3BsaXQoIi8iKSxpPSIiLGY9MDtmPHIubGVuZ3RoOysrZilpZihyW2ZdKXtpKz0iLyIrcltmXTt0cnl7RUEubWtkaXIoaSxlKX1jYXRjaChBKXtpZihBLmVycm5vIT1oQS5FRVhJU1QpdGhyb3cgQX19fSxta2RldjpmdW5jdGlvbihBLGUscil7cmV0dXJuIHZvaWQgMD09PXImJihyPWUsZT00MzgpLGV8PTgxOTIsRUEubWtub2QoQSxlLHIpfSxzeW1saW5rOmZ1bmN0aW9uKEEsZSl7aWYoIW1BLnJlc29sdmUoQSkpdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRU5PRU5UKTt2YXIgcj1FQS5sb29rdXBQYXRoKGUse3BhcmVudDohMH0pLm5vZGU7aWYoIXIpdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRU5PRU5UKTt2YXIgaT1tQS5iYXNlbmFtZShlKSxmPUVBLm1heUNyZWF0ZShyLGkpO2lmKGYpdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoZik7aWYoIXIubm9kZV9vcHMuc3ltbGluayl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FUEVSTSk7cmV0dXJuIHIubm9kZV9vcHMuc3ltbGluayhyLGksQSl9LHJlbmFtZTpmdW5jdGlvbihlLHIpe3ZhciBBLGksZj1tQS5kaXJuYW1lKGUpLG49bUEuZGlybmFtZShyKSx0PW1BLmJhc2VuYW1lKGUpLG89bUEuYmFzZW5hbWUocik7dHJ5e0E9RUEubG9va3VwUGF0aChlLHtwYXJlbnQ6ITB9KS5ub2RlLGk9RUEubG9va3VwUGF0aChyLHtwYXJlbnQ6ITB9KS5ub2RlfWNhdGNoKEEpe3Rocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVCVVNZKX1pZighQXx8IWkpdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRU5PRU5UKTtpZihBLm1vdW50IT09aS5tb3VudCl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FWERFVik7dmFyIGEsYz1FQS5sb29rdXBOb2RlKEEsdCksbD1tQS5yZWxhdGl2ZShlLG4pO2lmKCIuIiE9PWwuY2hhckF0KDApKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVJTlZBTCk7aWYoIi4iIT09KGw9bUEucmVsYXRpdmUocixmKSkuY2hhckF0KDApKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVOT1RFTVBUWSk7dHJ5e2E9RUEubG9va3VwTm9kZShpLG8pfWNhdGNoKEEpe31pZihjIT09YSl7dmFyIHU9RUEuaXNEaXIoYy5tb2RlKSxiPUVBLm1heURlbGV0ZShBLHQsdSk7aWYoYil0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihiKTtpZihiPWE/RUEubWF5RGVsZXRlKGksbyx1KTpFQS5tYXlDcmVhdGUoaSxvKSl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihiKTtpZighQS5ub2RlX29wcy5yZW5hbWUpdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRVBFUk0pO2lmKEVBLmlzTW91bnRwb2ludChjKXx8YSYmRUEuaXNNb3VudHBvaW50KGEpKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVCVVNZKTtpZihpIT09QSYmKGI9RUEubm9kZVBlcm1pc3Npb25zKEEsInciKSkpdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoYik7dHJ5e0VBLnRyYWNraW5nRGVsZWdhdGUud2lsbE1vdmVQYXRoJiZFQS50cmFja2luZ0RlbGVnYXRlLndpbGxNb3ZlUGF0aChlLHIpfWNhdGNoKEEpe2NvbnNvbGUubG9nKCJGUy50cmFja2luZ0RlbGVnYXRlWyd3aWxsTW92ZVBhdGgnXSgnIitlKyInLCAnIityKyInKSB0aHJldyBhbiBleGNlcHRpb246ICIrQS5tZXNzYWdlKX1FQS5oYXNoUmVtb3ZlTm9kZShjKTt0cnl7QS5ub2RlX29wcy5yZW5hbWUoYyxpLG8pfWNhdGNoKEEpe3Rocm93IEF9ZmluYWxseXtFQS5oYXNoQWRkTm9kZShjKX10cnl7RUEudHJhY2tpbmdEZWxlZ2F0ZS5vbk1vdmVQYXRoJiZFQS50cmFja2luZ0RlbGVnYXRlLm9uTW92ZVBhdGgoZSxyKX1jYXRjaChBKXtjb25zb2xlLmxvZygiRlMudHJhY2tpbmdEZWxlZ2F0ZVsnb25Nb3ZlUGF0aCddKCciK2UrIicsICciK3IrIicpIHRocmV3IGFuIGV4Y2VwdGlvbjogIitBLm1lc3NhZ2UpfX19LHJtZGlyOmZ1bmN0aW9uKGUpe3ZhciBBPUVBLmxvb2t1cFBhdGgoZSx7cGFyZW50OiEwfSkubm9kZSxyPW1BLmJhc2VuYW1lKGUpLGk9RUEubG9va3VwTm9kZShBLHIpLGY9RUEubWF5RGVsZXRlKEEsciwhMCk7aWYoZil0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihmKTtpZighQS5ub2RlX29wcy5ybWRpcil0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FUEVSTSk7aWYoRUEuaXNNb3VudHBvaW50KGkpKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVCVVNZKTt0cnl7RUEudHJhY2tpbmdEZWxlZ2F0ZS53aWxsRGVsZXRlUGF0aCYmRUEudHJhY2tpbmdEZWxlZ2F0ZS53aWxsRGVsZXRlUGF0aChlKX1jYXRjaChBKXtjb25zb2xlLmxvZygiRlMudHJhY2tpbmdEZWxlZ2F0ZVsnd2lsbERlbGV0ZVBhdGgnXSgnIitlKyInKSB0aHJldyBhbiBleGNlcHRpb246ICIrQS5tZXNzYWdlKX1BLm5vZGVfb3BzLnJtZGlyKEEsciksRUEuZGVzdHJveU5vZGUoaSk7dHJ5e0VBLnRyYWNraW5nRGVsZWdhdGUub25EZWxldGVQYXRoJiZFQS50cmFja2luZ0RlbGVnYXRlLm9uRGVsZXRlUGF0aChlKX1jYXRjaChBKXtjb25zb2xlLmxvZygiRlMudHJhY2tpbmdEZWxlZ2F0ZVsnb25EZWxldGVQYXRoJ10oJyIrZSsiJykgdGhyZXcgYW4gZXhjZXB0aW9uOiAiK0EubWVzc2FnZSl9fSxyZWFkZGlyOmZ1bmN0aW9uKEEpe3ZhciBlPUVBLmxvb2t1cFBhdGgoQSx7Zm9sbG93OiEwfSkubm9kZTtpZighZS5ub2RlX29wcy5yZWFkZGlyKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVOT1RESVIpO3JldHVybiBlLm5vZGVfb3BzLnJlYWRkaXIoZSl9LHVubGluazpmdW5jdGlvbihlKXt2YXIgQT1FQS5sb29rdXBQYXRoKGUse3BhcmVudDohMH0pLm5vZGUscj1tQS5iYXNlbmFtZShlKSxpPUVBLmxvb2t1cE5vZGUoQSxyKSxmPUVBLm1heURlbGV0ZShBLHIsITEpO2lmKGYpdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoZik7aWYoIUEubm9kZV9vcHMudW5saW5rKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVQRVJNKTtpZihFQS5pc01vdW50cG9pbnQoaSkpdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRUJVU1kpO3RyeXtFQS50cmFja2luZ0RlbGVnYXRlLndpbGxEZWxldGVQYXRoJiZFQS50cmFja2luZ0RlbGVnYXRlLndpbGxEZWxldGVQYXRoKGUpfWNhdGNoKEEpe2NvbnNvbGUubG9nKCJGUy50cmFja2luZ0RlbGVnYXRlWyd3aWxsRGVsZXRlUGF0aCddKCciK2UrIicpIHRocmV3IGFuIGV4Y2VwdGlvbjogIitBLm1lc3NhZ2UpfUEubm9kZV9vcHMudW5saW5rKEEsciksRUEuZGVzdHJveU5vZGUoaSk7dHJ5e0VBLnRyYWNraW5nRGVsZWdhdGUub25EZWxldGVQYXRoJiZFQS50cmFja2luZ0RlbGVnYXRlLm9uRGVsZXRlUGF0aChlKX1jYXRjaChBKXtjb25zb2xlLmxvZygiRlMudHJhY2tpbmdEZWxlZ2F0ZVsnb25EZWxldGVQYXRoJ10oJyIrZSsiJykgdGhyZXcgYW4gZXhjZXB0aW9uOiAiK0EubWVzc2FnZSl9fSxyZWFkbGluazpmdW5jdGlvbihBKXt2YXIgZT1FQS5sb29rdXBQYXRoKEEpLm5vZGU7aWYoIWUpdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRU5PRU5UKTtpZighZS5ub2RlX29wcy5yZWFkbGluayl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FSU5WQUwpO3JldHVybiBtQS5yZXNvbHZlKEVBLmdldFBhdGgoZS5wYXJlbnQpLGUubm9kZV9vcHMucmVhZGxpbmsoZSkpfSxzdGF0OmZ1bmN0aW9uKEEsZSl7dmFyIHI9RUEubG9va3VwUGF0aChBLHtmb2xsb3c6IWV9KS5ub2RlO2lmKCFyKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVOT0VOVCk7aWYoIXIubm9kZV9vcHMuZ2V0YXR0cil0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FUEVSTSk7cmV0dXJuIHIubm9kZV9vcHMuZ2V0YXR0cihyKX0sbHN0YXQ6ZnVuY3Rpb24oQSl7cmV0dXJuIEVBLnN0YXQoQSwhMCl9LGNobW9kOmZ1bmN0aW9uKEEsZSxyKXt2YXIgaTsic3RyaW5nIj09dHlwZW9mIEE/aT1FQS5sb29rdXBQYXRoKEEse2ZvbGxvdzohcn0pLm5vZGU6aT1BO2lmKCFpLm5vZGVfb3BzLnNldGF0dHIpdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRVBFUk0pO2kubm9kZV9vcHMuc2V0YXR0cihpLHttb2RlOjQwOTUmZXwtNDA5NiZpLm1vZGUsdGltZXN0YW1wOkRhdGUubm93KCl9KX0sbGNobW9kOmZ1bmN0aW9uKEEsZSl7RUEuY2htb2QoQSxlLCEwKX0sZmNobW9kOmZ1bmN0aW9uKEEsZSl7dmFyIHI9RUEuZ2V0U3RyZWFtKEEpO2lmKCFyKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVCQURGKTtFQS5jaG1vZChyLm5vZGUsZSl9LGNob3duOmZ1bmN0aW9uKEEsZSxyLGkpe3ZhciBmOyJzdHJpbmciPT10eXBlb2YgQT9mPUVBLmxvb2t1cFBhdGgoQSx7Zm9sbG93OiFpfSkubm9kZTpmPUE7aWYoIWYubm9kZV9vcHMuc2V0YXR0cil0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FUEVSTSk7Zi5ub2RlX29wcy5zZXRhdHRyKGYse3RpbWVzdGFtcDpEYXRlLm5vdygpfSl9LGxjaG93bjpmdW5jdGlvbihBLGUscil7RUEuY2hvd24oQSxlLHIsITApfSxmY2hvd246ZnVuY3Rpb24oQSxlLHIpe3ZhciBpPUVBLmdldFN0cmVhbShBKTtpZighaSl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FQkFERik7RUEuY2hvd24oaS5ub2RlLGUscil9LHRydW5jYXRlOmZ1bmN0aW9uKEEsZSl7aWYoZTwwKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVJTlZBTCk7dmFyIHI7InN0cmluZyI9PXR5cGVvZiBBP3I9RUEubG9va3VwUGF0aChBLHtmb2xsb3c6ITB9KS5ub2RlOnI9QTtpZighci5ub2RlX29wcy5zZXRhdHRyKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVQRVJNKTtpZihFQS5pc0RpcihyLm1vZGUpKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVJU0RJUik7aWYoIUVBLmlzRmlsZShyLm1vZGUpKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVJTlZBTCk7dmFyIGk9RUEubm9kZVBlcm1pc3Npb25zKHIsInciKTtpZihpKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGkpO3Iubm9kZV9vcHMuc2V0YXR0cihyLHtzaXplOmUsdGltZXN0YW1wOkRhdGUubm93KCl9KX0sZnRydW5jYXRlOmZ1bmN0aW9uKEEsZSl7dmFyIHI9RUEuZ2V0U3RyZWFtKEEpO2lmKCFyKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVCQURGKTtpZigwPT0oMjA5NzE1NSZyLmZsYWdzKSl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FSU5WQUwpO0VBLnRydW5jYXRlKHIubm9kZSxlKX0sdXRpbWU6ZnVuY3Rpb24oQSxlLHIpe3ZhciBpPUVBLmxvb2t1cFBhdGgoQSx7Zm9sbG93OiEwfSkubm9kZTtpLm5vZGVfb3BzLnNldGF0dHIoaSx7dGltZXN0YW1wOk1hdGgubWF4KGUscil9KX0sb3BlbjpmdW5jdGlvbihlLEEscixpLGYpe2lmKCIiPT09ZSl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FTk9FTlQpO3ZhciBuO2lmKHI9dm9pZCAwPT09cj80Mzg6cixyPTY0JihBPSJzdHJpbmciPT10eXBlb2YgQT9FQS5tb2RlU3RyaW5nVG9GbGFncyhBKTpBKT80MDk1JnJ8MzI3Njg6MCwib2JqZWN0Ij09dHlwZW9mIGUpbj1lO2Vsc2V7ZT1tQS5ub3JtYWxpemUoZSk7dHJ5e249RUEubG9va3VwUGF0aChlLHtmb2xsb3c6ISgxMzEwNzImQSl9KS5ub2RlfWNhdGNoKEEpe319dmFyIHQ9ITE7aWYoNjQmQSlpZihuKXtpZigxMjgmQSl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FRVhJU1QpfWVsc2Ugbj1FQS5ta25vZChlLHIsMCksdD0hMDtpZighbil0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FTk9FTlQpO2lmKEVBLmlzQ2hyZGV2KG4ubW9kZSkmJihBJj0tNTEzKSw2NTUzNiZBJiYhRUEuaXNEaXIobi5tb2RlKSl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FTk9URElSKTtpZighdCl7dmFyIG89RUEubWF5T3BlbihuLEEpO2lmKG8pdGhyb3cgbmV3IEVBLkVycm5vRXJyb3Iobyl9NTEyJkEmJkVBLnRydW5jYXRlKG4sMCksQSY9LTY0MTt2YXIgYT1FQS5jcmVhdGVTdHJlYW0oe25vZGU6bixwYXRoOkVBLmdldFBhdGgobiksZmxhZ3M6QSxzZWVrYWJsZTohMCxwb3NpdGlvbjowLHN0cmVhbV9vcHM6bi5zdHJlYW1fb3BzLHVuZ290dGVuOltdLGVycm9yOiExfSxpLGYpO2Euc3RyZWFtX29wcy5vcGVuJiZhLnN0cmVhbV9vcHMub3BlbihhKSwhZC5sb2dSZWFkRmlsZXN8fDEmQXx8KEVBLnJlYWRGaWxlc3x8KEVBLnJlYWRGaWxlcz17fSksZSBpbiBFQS5yZWFkRmlsZXN8fChFQS5yZWFkRmlsZXNbZV09MSxkLnByaW50RXJyKCJyZWFkIGZpbGU6ICIrZSkpKTt0cnl7aWYoRUEudHJhY2tpbmdEZWxlZ2F0ZS5vbk9wZW5GaWxlKXt2YXIgYz0wOzEhPSgyMDk3MTU1JkEpJiYoY3w9RUEudHJhY2tpbmcub3BlbkZsYWdzLlJFQUQpLDAhPSgyMDk3MTU1JkEpJiYoY3w9RUEudHJhY2tpbmcub3BlbkZsYWdzLldSSVRFKSxFQS50cmFja2luZ0RlbGVnYXRlLm9uT3BlbkZpbGUoZSxjKX19Y2F0Y2goQSl7Y29uc29sZS5sb2coIkZTLnRyYWNraW5nRGVsZWdhdGVbJ29uT3BlbkZpbGUnXSgnIitlKyInLCBmbGFncykgdGhyZXcgYW4gZXhjZXB0aW9uOiAiK0EubWVzc2FnZSl9cmV0dXJuIGF9LGNsb3NlOmZ1bmN0aW9uKEEpe0EuZ2V0ZGVudHMmJihBLmdldGRlbnRzPW51bGwpO3RyeXtBLnN0cmVhbV9vcHMuY2xvc2UmJkEuc3RyZWFtX29wcy5jbG9zZShBKX1jYXRjaChBKXt0aHJvdyBBfWZpbmFsbHl7RUEuY2xvc2VTdHJlYW0oQS5mZCl9fSxsbHNlZWs6ZnVuY3Rpb24oQSxlLHIpe2lmKCFBLnNlZWthYmxlfHwhQS5zdHJlYW1fb3BzLmxsc2Vlayl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FU1BJUEUpO3JldHVybiBBLnBvc2l0aW9uPUEuc3RyZWFtX29wcy5sbHNlZWsoQSxlLHIpLEEudW5nb3R0ZW49W10sQS5wb3NpdGlvbn0scmVhZDpmdW5jdGlvbihBLGUscixpLGYpe2lmKGk8MHx8ZjwwKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVJTlZBTCk7aWYoMT09KDIwOTcxNTUmQS5mbGFncykpdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRUJBREYpO2lmKEVBLmlzRGlyKEEubm9kZS5tb2RlKSl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FSVNESVIpO2lmKCFBLnN0cmVhbV9vcHMucmVhZCl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FSU5WQUwpO3ZhciBuPSEwO2lmKHZvaWQgMD09PWYpZj1BLnBvc2l0aW9uLG49ITE7ZWxzZSBpZighQS5zZWVrYWJsZSl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FU1BJUEUpO3ZhciB0PUEuc3RyZWFtX29wcy5yZWFkKEEsZSxyLGksZik7cmV0dXJuIG58fChBLnBvc2l0aW9uKz10KSx0fSx3cml0ZTpmdW5jdGlvbihBLGUscixpLGYsbil7aWYoaTwwfHxmPDApdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRUlOVkFMKTtpZigwPT0oMjA5NzE1NSZBLmZsYWdzKSl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FQkFERik7aWYoRUEuaXNEaXIoQS5ub2RlLm1vZGUpKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVJU0RJUik7aWYoIUEuc3RyZWFtX29wcy53cml0ZSl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FSU5WQUwpOzEwMjQmQS5mbGFncyYmRUEubGxzZWVrKEEsMCwyKTt2YXIgdD0hMDtpZih2b2lkIDA9PT1mKWY9QS5wb3NpdGlvbix0PSExO2Vsc2UgaWYoIUEuc2Vla2FibGUpdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRVNQSVBFKTt2YXIgbz1BLnN0cmVhbV9vcHMud3JpdGUoQSxlLHIsaSxmLG4pO3R8fChBLnBvc2l0aW9uKz1vKTt0cnl7QS5wYXRoJiZFQS50cmFja2luZ0RlbGVnYXRlLm9uV3JpdGVUb0ZpbGUmJkVBLnRyYWNraW5nRGVsZWdhdGUub25Xcml0ZVRvRmlsZShBLnBhdGgpfWNhdGNoKEEpe2NvbnNvbGUubG9nKCJGUy50cmFja2luZ0RlbGVnYXRlWydvbldyaXRlVG9GaWxlJ10oJyIrcGF0aCsiJykgdGhyZXcgYW4gZXhjZXB0aW9uOiAiK0EubWVzc2FnZSl9cmV0dXJuIG99LGFsbG9jYXRlOmZ1bmN0aW9uKEEsZSxyKXtpZihlPDB8fHI8PTApdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRUlOVkFMKTtpZigwPT0oMjA5NzE1NSZBLmZsYWdzKSl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FQkFERik7aWYoIUVBLmlzRmlsZShBLm5vZGUubW9kZSkmJiFFQS5pc0RpcihBLm5vZGUubW9kZSkpdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRU5PREVWKTtpZighQS5zdHJlYW1fb3BzLmFsbG9jYXRlKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVPUE5PVFNVUFApO0Euc3RyZWFtX29wcy5hbGxvY2F0ZShBLGUscil9LG1tYXA6ZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCl7aWYoMT09KDIwOTcxNTUmQS5mbGFncykpdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRUFDQ0VTKTtpZighQS5zdHJlYW1fb3BzLm1tYXApdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRU5PREVWKTtyZXR1cm4gQS5zdHJlYW1fb3BzLm1tYXAoQSxlLHIsaSxmLG4sdCl9LG1zeW5jOmZ1bmN0aW9uKEEsZSxyLGksZil7cmV0dXJuIEEmJkEuc3RyZWFtX29wcy5tc3luYz9BLnN0cmVhbV9vcHMubXN5bmMoQSxlLHIsaSxmKTowfSxtdW5tYXA6ZnVuY3Rpb24oQSl7cmV0dXJuIDB9LGlvY3RsOmZ1bmN0aW9uKEEsZSxyKXtpZighQS5zdHJlYW1fb3BzLmlvY3RsKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVOT1RUWSk7cmV0dXJuIEEuc3RyZWFtX29wcy5pb2N0bChBLGUscil9LHJlYWRGaWxlOmZ1bmN0aW9uKEEsZSl7aWYoKGU9ZXx8e30pLmZsYWdzPWUuZmxhZ3N8fCJyIixlLmVuY29kaW5nPWUuZW5jb2Rpbmd8fCJiaW5hcnkiLCJ1dGY4IiE9PWUuZW5jb2RpbmcmJiJiaW5hcnkiIT09ZS5lbmNvZGluZyl0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZW5jb2RpbmcgdHlwZSAiJytlLmVuY29kaW5nKyciJyk7dmFyIHIsaT1FQS5vcGVuKEEsZS5mbGFncyksZj1FQS5zdGF0KEEpLnNpemUsbj1uZXcgVWludDhBcnJheShmKTtyZXR1cm4gRUEucmVhZChpLG4sMCxmLDApLCJ1dGY4Ij09PWUuZW5jb2Rpbmc/cj1jKG4sMCk6ImJpbmFyeSI9PT1lLmVuY29kaW5nJiYocj1uKSxFQS5jbG9zZShpKSxyfSx3cml0ZUZpbGU6ZnVuY3Rpb24oQSxlLHIpe2lmKChyPXJ8fHt9KS5mbGFncz1yLmZsYWdzfHwidyIsci5lbmNvZGluZz1yLmVuY29kaW5nfHwidXRmOCIsInV0ZjgiIT09ci5lbmNvZGluZyYmImJpbmFyeSIhPT1yLmVuY29kaW5nKXRocm93IG5ldyBFcnJvcignSW52YWxpZCBlbmNvZGluZyB0eXBlICInK3IuZW5jb2RpbmcrJyInKTt2YXIgaT1FQS5vcGVuKEEsci5mbGFncyxyLm1vZGUpO2lmKCJ1dGY4Ij09PXIuZW5jb2Rpbmcpe3ZhciBmPW5ldyBVaW50OEFycmF5KFooZSkrMSksbj1iKGUsZiwwLGYubGVuZ3RoKTtFQS53cml0ZShpLGYsMCxuLDAsci5jYW5Pd24pfWVsc2UiYmluYXJ5Ij09PXIuZW5jb2RpbmcmJkVBLndyaXRlKGksZSwwLGUubGVuZ3RoLDAsci5jYW5Pd24pO0VBLmNsb3NlKGkpfSxjd2Q6ZnVuY3Rpb24oKXtyZXR1cm4gRUEuY3VycmVudFBhdGh9LGNoZGlyOmZ1bmN0aW9uKEEpe3ZhciBlPUVBLmxvb2t1cFBhdGgoQSx7Zm9sbG93OiEwfSk7aWYobnVsbD09PWUubm9kZSl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FTk9FTlQpO2lmKCFFQS5pc0RpcihlLm5vZGUubW9kZSkpdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRU5PVERJUik7dmFyIHI9RUEubm9kZVBlcm1pc3Npb25zKGUubm9kZSwieCIpO2lmKHIpdGhyb3cgbmV3IEVBLkVycm5vRXJyb3Iocik7RUEuY3VycmVudFBhdGg9ZS5wYXRofSxjcmVhdGVEZWZhdWx0RGlyZWN0b3JpZXM6ZnVuY3Rpb24oKXtFQS5ta2RpcigiL3RtcCIpLEVBLm1rZGlyKCIvaG9tZSIpLEVBLm1rZGlyKCIvaG9tZS93ZWJfdXNlciIpfSxjcmVhdGVEZWZhdWx0RGV2aWNlczpmdW5jdGlvbigpe3ZhciBBO2lmKEVBLm1rZGlyKCIvZGV2IiksRUEucmVnaXN0ZXJEZXZpY2UoRUEubWFrZWRldigxLDMpLHtyZWFkOmZ1bmN0aW9uKCl7cmV0dXJuIDB9LHdyaXRlOmZ1bmN0aW9uKEEsZSxyLGksZil7cmV0dXJuIGl9fSksRUEubWtkZXYoIi9kZXYvbnVsbCIsRUEubWFrZWRldigxLDMpKSxnQS5yZWdpc3RlcihFQS5tYWtlZGV2KDUsMCksZ0EuZGVmYXVsdF90dHlfb3BzKSxnQS5yZWdpc3RlcihFQS5tYWtlZGV2KDYsMCksZ0EuZGVmYXVsdF90dHkxX29wcyksRUEubWtkZXYoIi9kZXYvdHR5IixFQS5tYWtlZGV2KDUsMCkpLEVBLm1rZGV2KCIvZGV2L3R0eTEiLEVBLm1ha2VkZXYoNiwwKSksInVuZGVmaW5lZCIhPXR5cGVvZiBjcnlwdG8pe3ZhciBlPW5ldyBVaW50OEFycmF5KDEpO0E9ZnVuY3Rpb24oKXtyZXR1cm4gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhlKSxlWzBdfX1lbHNlIEE9bz9mdW5jdGlvbigpe3JldHVybiByZXF1aXJlKCJjcnlwdG8iKS5yYW5kb21CeXRlcygxKVswXX06ZnVuY3Rpb24oKXtyZXR1cm4gMjU2Kk1hdGgucmFuZG9tKCl8MH07RUEuY3JlYXRlRGV2aWNlKCIvZGV2IiwicmFuZG9tIixBKSxFQS5jcmVhdGVEZXZpY2UoIi9kZXYiLCJ1cmFuZG9tIixBKSxFQS5ta2RpcigiL2Rldi9zaG0iKSxFQS5ta2RpcigiL2Rldi9zaG0vdG1wIil9LGNyZWF0ZVNwZWNpYWxEaXJlY3RvcmllczpmdW5jdGlvbigpe0VBLm1rZGlyKCIvcHJvYyIpLEVBLm1rZGlyKCIvcHJvYy9zZWxmIiksRUEubWtkaXIoIi9wcm9jL3NlbGYvZmQiKSxFQS5tb3VudCh7bW91bnQ6ZnVuY3Rpb24oKXt2YXIgQT1FQS5jcmVhdGVOb2RlKCIvcHJvYy9zZWxmIiwiZmQiLDE2ODk1LDczKTtyZXR1cm4gQS5ub2RlX29wcz17bG9va3VwOmZ1bmN0aW9uKEEsZSl7dmFyIHI9K2UsaT1FQS5nZXRTdHJlYW0ocik7aWYoIWkpdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRUJBREYpO3ZhciBmPXtwYXJlbnQ6bnVsbCxtb3VudDp7bW91bnRwb2ludDoiZmFrZSJ9LG5vZGVfb3BzOntyZWFkbGluazpmdW5jdGlvbigpe3JldHVybiBpLnBhdGh9fX07cmV0dXJuIGYucGFyZW50PWZ9fSxBfX0se30sIi9wcm9jL3NlbGYvZmQiKX0sY3JlYXRlU3RhbmRhcmRTdHJlYW1zOmZ1bmN0aW9uKCl7ZC5zdGRpbj9FQS5jcmVhdGVEZXZpY2UoIi9kZXYiLCJzdGRpbiIsZC5zdGRpbik6RUEuc3ltbGluaygiL2Rldi90dHkiLCIvZGV2L3N0ZGluIiksZC5zdGRvdXQ/RUEuY3JlYXRlRGV2aWNlKCIvZGV2Iiwic3Rkb3V0IixudWxsLGQuc3Rkb3V0KTpFQS5zeW1saW5rKCIvZGV2L3R0eSIsIi9kZXYvc3Rkb3V0IiksZC5zdGRlcnI/RUEuY3JlYXRlRGV2aWNlKCIvZGV2Iiwic3RkZXJyIixudWxsLGQuc3RkZXJyKTpFQS5zeW1saW5rKCIvZGV2L3R0eTEiLCIvZGV2L3N0ZGVyciIpO3ZhciBBPUVBLm9wZW4oIi9kZXYvc3RkaW4iLCJyIik7aCgwPT09QS5mZCwiaW52YWxpZCBoYW5kbGUgZm9yIHN0ZGluICgiK0EuZmQrIikiKTt2YXIgZT1FQS5vcGVuKCIvZGV2L3N0ZG91dCIsInciKTtoKDE9PT1lLmZkLCJpbnZhbGlkIGhhbmRsZSBmb3Igc3Rkb3V0ICgiK2UuZmQrIikiKTt2YXIgcj1FQS5vcGVuKCIvZGV2L3N0ZGVyciIsInciKTtoKDI9PT1yLmZkLCJpbnZhbGlkIGhhbmRsZSBmb3Igc3RkZXJyICgiK3IuZmQrIikiKX0sZW5zdXJlRXJybm9FcnJvcjpmdW5jdGlvbigpe0VBLkVycm5vRXJyb3J8fChFQS5FcnJub0Vycm9yPWZ1bmN0aW9uKEEsZSl7dGhpcy5ub2RlPWUsdGhpcy5zZXRFcnJubz1mdW5jdGlvbihBKXtmb3IodmFyIGUgaW4gdGhpcy5lcnJubz1BLGhBKWlmKGhBW2VdPT09QSl7dGhpcy5jb2RlPWU7YnJlYWt9fSx0aGlzLnNldEVycm5vKEEpLHRoaXMubWVzc2FnZT12QVtBXSx0aGlzLnN0YWNrJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywic3RhY2siLHt2YWx1ZToobmV3IEVycm9yKS5zdGFja30pfSxFQS5FcnJub0Vycm9yLnByb3RvdHlwZT1uZXcgRXJyb3IsRUEuRXJybm9FcnJvci5wcm90b3R5cGUuY29uc3RydWN0b3I9RUEuRXJybm9FcnJvcixbaEEuRU5PRU5UXS5mb3JFYWNoKGZ1bmN0aW9uKEEpe0VBLmdlbmVyaWNFcnJvcnNbQV09bmV3IEVBLkVycm5vRXJyb3IoQSksRUEuZ2VuZXJpY0Vycm9yc1tBXS5zdGFjaz0iPGdlbmVyaWMgZXJyb3IsIG5vIHN0YWNrPiJ9KSl9LHN0YXRpY0luaXQ6ZnVuY3Rpb24oKXtFQS5lbnN1cmVFcnJub0Vycm9yKCksRUEubmFtZVRhYmxlPW5ldyBBcnJheSg0MDk2KSxFQS5tb3VudChaQSx7fSwiLyIpLEVBLmNyZWF0ZURlZmF1bHREaXJlY3RvcmllcygpLEVBLmNyZWF0ZURlZmF1bHREZXZpY2VzKCksRUEuY3JlYXRlU3BlY2lhbERpcmVjdG9yaWVzKCksRUEuZmlsZXN5c3RlbXM9e01FTUZTOlpBLElEQkZTOnBBLE5PREVGUzp5QSxXT1JLRVJGUzpCQX19LGluaXQ6ZnVuY3Rpb24oQSxlLHIpe2goIUVBLmluaXQuaW5pdGlhbGl6ZWQsIkZTLmluaXQgd2FzIHByZXZpb3VzbHkgY2FsbGVkLiBJZiB5b3Ugd2FudCB0byBpbml0aWFsaXplIGxhdGVyIHdpdGggY3VzdG9tIHBhcmFtZXRlcnMsIHJlbW92ZSBhbnkgZWFybGllciBjYWxscyAobm90ZSB0aGF0IG9uZSBpcyBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvIHRoZSBnZW5lcmF0ZWQgY29kZSkiKSxFQS5pbml0LmluaXRpYWxpemVkPSEwLEVBLmVuc3VyZUVycm5vRXJyb3IoKSxkLnN0ZGluPUF8fGQuc3RkaW4sZC5zdGRvdXQ9ZXx8ZC5zdGRvdXQsZC5zdGRlcnI9cnx8ZC5zdGRlcnIsRUEuY3JlYXRlU3RhbmRhcmRTdHJlYW1zKCl9LHF1aXQ6ZnVuY3Rpb24oKXtFQS5pbml0LmluaXRpYWxpemVkPSExO3ZhciBBPWQuX2ZmbHVzaDtBJiZBKDApO2Zvcih2YXIgZT0wO2U8RUEuc3RyZWFtcy5sZW5ndGg7ZSsrKXt2YXIgcj1FQS5zdHJlYW1zW2VdO3ImJkVBLmNsb3NlKHIpfX0sZ2V0TW9kZTpmdW5jdGlvbihBLGUpe3ZhciByPTA7cmV0dXJuIEEmJihyfD0zNjUpLGUmJihyfD0xNDYpLHJ9LGpvaW5QYXRoOmZ1bmN0aW9uKEEsZSl7dmFyIHI9bUEuam9pbi5hcHBseShudWxsLEEpO3JldHVybiBlJiYiLyI9PXJbMF0mJihyPXIuc3Vic3RyKDEpKSxyfSxhYnNvbHV0ZVBhdGg6ZnVuY3Rpb24oQSxlKXtyZXR1cm4gbUEucmVzb2x2ZShlLEEpfSxzdGFuZGFyZGl6ZVBhdGg6ZnVuY3Rpb24oQSl7cmV0dXJuIG1BLm5vcm1hbGl6ZShBKX0sZmluZE9iamVjdDpmdW5jdGlvbihBLGUpe3ZhciByPUVBLmFuYWx5emVQYXRoKEEsZSk7cmV0dXJuIHIuZXhpc3RzP3Iub2JqZWN0Oih3QShyLmVycm9yKSxudWxsKX0sYW5hbHl6ZVBhdGg6ZnVuY3Rpb24oQSxlKXt0cnl7QT0oaT1FQS5sb29rdXBQYXRoKEEse2ZvbGxvdzohZX0pKS5wYXRofWNhdGNoKEEpe312YXIgcj17aXNSb290OiExLGV4aXN0czohMSxlcnJvcjowLG5hbWU6bnVsbCxwYXRoOm51bGwsb2JqZWN0Om51bGwscGFyZW50RXhpc3RzOiExLHBhcmVudFBhdGg6bnVsbCxwYXJlbnRPYmplY3Q6bnVsbH07dHJ5e3ZhciBpPUVBLmxvb2t1cFBhdGgoQSx7cGFyZW50OiEwfSk7ci5wYXJlbnRFeGlzdHM9ITAsci5wYXJlbnRQYXRoPWkucGF0aCxyLnBhcmVudE9iamVjdD1pLm5vZGUsci5uYW1lPW1BLmJhc2VuYW1lKEEpLGk9RUEubG9va3VwUGF0aChBLHtmb2xsb3c6IWV9KSxyLmV4aXN0cz0hMCxyLnBhdGg9aS5wYXRoLHIub2JqZWN0PWkubm9kZSxyLm5hbWU9aS5ub2RlLm5hbWUsci5pc1Jvb3Q9Ii8iPT09aS5wYXRofWNhdGNoKEEpe3IuZXJyb3I9QS5lcnJub31yZXR1cm4gcn0sY3JlYXRlRm9sZGVyOmZ1bmN0aW9uKEEsZSxyLGkpe3ZhciBmPW1BLmpvaW4yKCJzdHJpbmciPT10eXBlb2YgQT9BOkVBLmdldFBhdGgoQSksZSksbj1FQS5nZXRNb2RlKHIsaSk7cmV0dXJuIEVBLm1rZGlyKGYsbil9LGNyZWF0ZVBhdGg6ZnVuY3Rpb24oQSxlLHIsaSl7QT0ic3RyaW5nIj09dHlwZW9mIEE/QTpFQS5nZXRQYXRoKEEpO2Zvcih2YXIgZj1lLnNwbGl0KCIvIikucmV2ZXJzZSgpO2YubGVuZ3RoOyl7dmFyIG49Zi5wb3AoKTtpZihuKXt2YXIgdD1tQS5qb2luMihBLG4pO3RyeXtFQS5ta2Rpcih0KX1jYXRjaChBKXt9QT10fX1yZXR1cm4gdH0sY3JlYXRlRmlsZTpmdW5jdGlvbihBLGUscixpLGYpe3ZhciBuPW1BLmpvaW4yKCJzdHJpbmciPT10eXBlb2YgQT9BOkVBLmdldFBhdGgoQSksZSksdD1FQS5nZXRNb2RlKGksZik7cmV0dXJuIEVBLmNyZWF0ZShuLHQpfSxjcmVhdGVEYXRhRmlsZTpmdW5jdGlvbihBLGUscixpLGYsbil7dmFyIHQ9ZT9tQS5qb2luMigic3RyaW5nIj09dHlwZW9mIEE/QTpFQS5nZXRQYXRoKEEpLGUpOkEsbz1FQS5nZXRNb2RlKGksZiksYT1FQS5jcmVhdGUodCxvKTtpZihyKXtpZigic3RyaW5nIj09dHlwZW9mIHIpe2Zvcih2YXIgYz1uZXcgQXJyYXkoci5sZW5ndGgpLGw9MCx1PXIubGVuZ3RoO2w8dTsrK2wpY1tsXT1yLmNoYXJDb2RlQXQobCk7cj1jfUVBLmNobW9kKGEsMTQ2fG8pO3ZhciBiPUVBLm9wZW4oYSwidyIpO0VBLndyaXRlKGIsciwwLHIubGVuZ3RoLDAsbiksRUEuY2xvc2UoYiksRUEuY2htb2QoYSxvKX1yZXR1cm4gYX0sY3JlYXRlRGV2aWNlOmZ1bmN0aW9uKEEsZSxhLHQpe3ZhciByPW1BLmpvaW4yKCJzdHJpbmciPT10eXBlb2YgQT9BOkVBLmdldFBhdGgoQSksZSksaT1FQS5nZXRNb2RlKCEhYSwhIXQpO0VBLmNyZWF0ZURldmljZS5tYWpvcnx8KEVBLmNyZWF0ZURldmljZS5tYWpvcj02NCk7dmFyIGY9RUEubWFrZWRldihFQS5jcmVhdGVEZXZpY2UubWFqb3IrKywwKTtyZXR1cm4gRUEucmVnaXN0ZXJEZXZpY2UoZix7b3BlbjpmdW5jdGlvbihBKXtBLnNlZWthYmxlPSExfSxjbG9zZTpmdW5jdGlvbihBKXt0JiZ0LmJ1ZmZlciYmdC5idWZmZXIubGVuZ3RoJiZ0KDEwKX0scmVhZDpmdW5jdGlvbihBLGUscixpLGYpe2Zvcih2YXIgbj0wLHQ9MDt0PGk7dCsrKXt2YXIgbzt0cnl7bz1hKCl9Y2F0Y2goQSl7dGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRUlPKX1pZih2b2lkIDA9PT1vJiYwPT09bil0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FQUdBSU4pO2lmKG51bGw9PW8pYnJlYWs7bisrLGVbcit0XT1vfXJldHVybiBuJiYoQS5ub2RlLnRpbWVzdGFtcD1EYXRlLm5vdygpKSxufSx3cml0ZTpmdW5jdGlvbihBLGUscixpLGYpe2Zvcih2YXIgbj0wO248aTtuKyspdHJ5e3QoZVtyK25dKX1jYXRjaChBKXt0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FSU8pfXJldHVybiBpJiYoQS5ub2RlLnRpbWVzdGFtcD1EYXRlLm5vdygpKSxufX0pLEVBLm1rZGV2KHIsaSxmKX0sY3JlYXRlTGluazpmdW5jdGlvbihBLGUscixpLGYpe3ZhciBuPW1BLmpvaW4yKCJzdHJpbmciPT10eXBlb2YgQT9BOkVBLmdldFBhdGgoQSksZSk7cmV0dXJuIEVBLnN5bWxpbmsocixuKX0sZm9yY2VMb2FkRmlsZTpmdW5jdGlvbihBKXtpZihBLmlzRGV2aWNlfHxBLmlzRm9sZGVyfHxBLmxpbmt8fEEuY29udGVudHMpcmV0dXJuITA7dmFyIGU9ITA7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBYTUxIdHRwUmVxdWVzdCl0aHJvdyBuZXcgRXJyb3IoIkxhenkgbG9hZGluZyBzaG91bGQgaGF2ZSBiZWVuIHBlcmZvcm1lZCAoY29udGVudHMgc2V0KSBpbiBjcmVhdGVMYXp5RmlsZSwgYnV0IGl0IHdhcyBub3QuIExhenkgbG9hZGluZyBvbmx5IHdvcmtzIGluIHdlYiB3b3JrZXJzLiBVc2UgLS1lbWJlZC1maWxlIG9yIC0tcHJlbG9hZC1maWxlIGluIGVtY2Mgb24gdGhlIG1haW4gdGhyZWFkLiIpO2lmKCFkLnJlYWQpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgbG9hZCB3aXRob3V0IHJlYWQoKSBvciBYTUxIdHRwUmVxdWVzdC4iKTt0cnl7QS5jb250ZW50cz1kcihkLnJlYWQoQS51cmwpLCEwKSxBLnVzZWRCeXRlcz1BLmNvbnRlbnRzLmxlbmd0aH1jYXRjaChBKXtlPSExfXJldHVybiBlfHx3QShoQS5FSU8pLGV9LGNyZWF0ZUxhenlGaWxlOmZ1bmN0aW9uKEEsZSxvLHIsaSl7ZnVuY3Rpb24gZigpe3RoaXMubGVuZ3RoS25vd249ITEsdGhpcy5jaHVua3M9W119aWYoZi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKEEpe2lmKCEoQT50aGlzLmxlbmd0aC0xfHxBPDApKXt2YXIgZT1BJXRoaXMuY2h1bmtTaXplLHI9QS90aGlzLmNodW5rU2l6ZXwwO3JldHVybiB0aGlzLmdldHRlcihyKVtlXX19LGYucHJvdG90eXBlLnNldERhdGFHZXR0ZXI9ZnVuY3Rpb24oQSl7dGhpcy5nZXR0ZXI9QX0sZi5wcm90b3R5cGUuY2FjaGVMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgQT1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYoQS5vcGVuKCJIRUFEIixvLCExKSxBLnNlbmQobnVsbCksISgyMDA8PUEuc3RhdHVzJiZBLnN0YXR1czwzMDB8fDMwND09PUEuc3RhdHVzKSl0aHJvdyBuZXcgRXJyb3IoIkNvdWxkbid0IGxvYWQgIitvKyIuIFN0YXR1czogIitBLnN0YXR1cyk7dmFyIGUsaT1OdW1iZXIoQS5nZXRSZXNwb25zZUhlYWRlcigiQ29udGVudC1sZW5ndGgiKSkscj0oZT1BLmdldFJlc3BvbnNlSGVhZGVyKCJBY2NlcHQtUmFuZ2VzIikpJiYiYnl0ZXMiPT09ZSxmPShlPUEuZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtRW5jb2RpbmciKSkmJiJnemlwIj09PWUsbj0xMDQ4NTc2O3J8fChuPWkpO3ZhciB0PXRoaXM7dC5zZXREYXRhR2V0dGVyKGZ1bmN0aW9uKEEpe3ZhciBlPUEqbixyPShBKzEpKm4tMTtpZihyPU1hdGgubWluKHIsaS0xKSx2b2lkIDA9PT10LmNodW5rc1tBXSYmKHQuY2h1bmtzW0FdPWZ1bmN0aW9uKEEsZSl7aWYoZTxBKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCByYW5nZSAoIitBKyIsICIrZSsiKSBvciBubyBieXRlcyByZXF1ZXN0ZWQhIik7aWYoaS0xPGUpdGhyb3cgbmV3IEVycm9yKCJvbmx5ICIraSsiIGJ5dGVzIGF2YWlsYWJsZSEgcHJvZ3JhbW1lciBlcnJvciEiKTt2YXIgcj1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYoci5vcGVuKCJHRVQiLG8sITEpLGkhPT1uJiZyLnNldFJlcXVlc3RIZWFkZXIoIlJhbmdlIiwiYnl0ZXM9IitBKyItIitlKSwidW5kZWZpbmVkIiE9dHlwZW9mIFVpbnQ4QXJyYXkmJihyLnJlc3BvbnNlVHlwZT0iYXJyYXlidWZmZXIiKSxyLm92ZXJyaWRlTWltZVR5cGUmJnIub3ZlcnJpZGVNaW1lVHlwZSgidGV4dC9wbGFpbjsgY2hhcnNldD14LXVzZXItZGVmaW5lZCIpLHIuc2VuZChudWxsKSwhKDIwMDw9ci5zdGF0dXMmJnIuc3RhdHVzPDMwMHx8MzA0PT09ci5zdGF0dXMpKXRocm93IG5ldyBFcnJvcigiQ291bGRuJ3QgbG9hZCAiK28rIi4gU3RhdHVzOiAiK3Iuc3RhdHVzKTtyZXR1cm4gdm9pZCAwIT09ci5yZXNwb25zZT9uZXcgVWludDhBcnJheShyLnJlc3BvbnNlfHxbXSk6ZHIoci5yZXNwb25zZVRleHR8fCIiLCEwKX0oZSxyKSksdm9pZCAwPT09dC5jaHVua3NbQV0pdGhyb3cgbmV3IEVycm9yKCJkb1hIUiBmYWlsZWQhIik7cmV0dXJuIHQuY2h1bmtzW0FdfSksIWYmJml8fChuPWk9MSxpPXRoaXMuZ2V0dGVyKDApLmxlbmd0aCxuPWksY29uc29sZS5sb2coIkxhenlGaWxlcyBvbiBnemlwIGZvcmNlcyBkb3dubG9hZCBvZiB0aGUgd2hvbGUgZmlsZSB3aGVuIGxlbmd0aCBpcyBhY2Nlc3NlZCIpKSx0aGlzLl9sZW5ndGg9aSx0aGlzLl9jaHVua1NpemU9bix0aGlzLmxlbmd0aEtub3duPSEwfSwidW5kZWZpbmVkIiE9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0KXtpZighbCl0aHJvdyJDYW5ub3QgZG8gc3luY2hyb25vdXMgYmluYXJ5IFhIUnMgb3V0c2lkZSB3ZWJ3b3JrZXJzIGluIG1vZGVybiBicm93c2Vycy4gVXNlIC0tZW1iZWQtZmlsZSBvciAtLXByZWxvYWQtZmlsZSBpbiBlbWNjIjt2YXIgbj1uZXcgZjtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhuLHtsZW5ndGg6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aEtub3dufHx0aGlzLmNhY2hlTGVuZ3RoKCksdGhpcy5fbGVuZ3RofX0sY2h1bmtTaXplOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGhLbm93bnx8dGhpcy5jYWNoZUxlbmd0aCgpLHRoaXMuX2NodW5rU2l6ZX19fSk7dmFyIHQ9e2lzRGV2aWNlOiExLGNvbnRlbnRzOm59fWVsc2UgdD17aXNEZXZpY2U6ITEsdXJsOm99O3ZhciBhPUVBLmNyZWF0ZUZpbGUoQSxlLHQscixpKTt0LmNvbnRlbnRzP2EuY29udGVudHM9dC5jb250ZW50czp0LnVybCYmKGEuY29udGVudHM9bnVsbCxhLnVybD10LnVybCksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoYSx7dXNlZEJ5dGVzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250ZW50cy5sZW5ndGh9fX0pO3ZhciBjPXt9O3JldHVybiBPYmplY3Qua2V5cyhhLnN0cmVhbV9vcHMpLmZvckVhY2goZnVuY3Rpb24oQSl7dmFyIGU9YS5zdHJlYW1fb3BzW0FdO2NbQV09ZnVuY3Rpb24oKXtpZighRUEuZm9yY2VMb2FkRmlsZShhKSl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FSU8pO3JldHVybiBlLmFwcGx5KG51bGwsYXJndW1lbnRzKX19KSxjLnJlYWQ9ZnVuY3Rpb24oQSxlLHIsaSxmKXtpZighRUEuZm9yY2VMb2FkRmlsZShhKSl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FSU8pO3ZhciBuPUEubm9kZS5jb250ZW50cztpZihmPj1uLmxlbmd0aClyZXR1cm4gMDt2YXIgdD1NYXRoLm1pbihuLmxlbmd0aC1mLGkpO2lmKGgoMDw9dCksbi5zbGljZSlmb3IodmFyIG89MDtvPHQ7bysrKWVbcitvXT1uW2Yrb107ZWxzZSBmb3Iobz0wO288dDtvKyspZVtyK29dPW4uZ2V0KGYrbyk7cmV0dXJuIHR9LGEuc3RyZWFtX29wcz1jLGF9LGNyZWF0ZVByZWxvYWRlZEZpbGU6ZnVuY3Rpb24oZixuLEEsdCxvLGEsYyxsLHUsYil7QnJvd3Nlci5pbml0KCk7dmFyIHM9bj9tQS5yZXNvbHZlKG1BLmpvaW4yKGYsbikpOmY7ZnVuY3Rpb24gZShlKXtmdW5jdGlvbiByKEEpe2ImJmIoKSxsfHxFQS5jcmVhdGVEYXRhRmlsZShmLG4sQSx0LG8sdSksYSYmYSgpLHVBKCl9dmFyIGk9ITE7ZC5wcmVsb2FkUGx1Z2lucy5mb3JFYWNoKGZ1bmN0aW9uKEEpe2l8fEEuY2FuSGFuZGxlKHMpJiYoQS5oYW5kbGUoZSxzLHIsZnVuY3Rpb24oKXtjJiZjKCksdUEoKX0pLGk9ITApfSksaXx8cihlKX1sQSgpLCJzdHJpbmciPT10eXBlb2YgQT9Ccm93c2VyLmFzeW5jTG9hZChBLGZ1bmN0aW9uKEEpe2UoQSl9LGMpOmUoQSl9LGluZGV4ZWREQjpmdW5jdGlvbigpe3JldHVybiB3aW5kb3cuaW5kZXhlZERCfHx3aW5kb3cubW96SW5kZXhlZERCfHx3aW5kb3cud2Via2l0SW5kZXhlZERCfHx3aW5kb3cubXNJbmRleGVkREJ9LERCX05BTUU6ZnVuY3Rpb24oKXtyZXR1cm4iRU1fRlNfIit3aW5kb3cubG9jYXRpb24ucGF0aG5hbWV9LERCX1ZFUlNJT046MjAsREJfU1RPUkVfTkFNRToiRklMRV9EQVRBIixzYXZlRmlsZXNUb0RCOmZ1bmN0aW9uKGUsbyxhKXtvPW98fGZ1bmN0aW9uKCl7fSxhPWF8fGZ1bmN0aW9uKCl7fTt2YXIgQT1FQS5pbmRleGVkREIoKTt0cnl7dmFyIGM9QS5vcGVuKEVBLkRCX05BTUUoKSxFQS5EQl9WRVJTSU9OKX1jYXRjaChBKXtyZXR1cm4gYShBKX1jLm9udXBncmFkZW5lZWRlZD1mdW5jdGlvbigpe2NvbnNvbGUubG9nKCJjcmVhdGluZyBkYiIpLGMucmVzdWx0LmNyZWF0ZU9iamVjdFN0b3JlKEVBLkRCX1NUT1JFX05BTUUpfSxjLm9uc3VjY2Vzcz1mdW5jdGlvbigpe3ZhciBBPWMucmVzdWx0LnRyYW5zYWN0aW9uKFtFQS5EQl9TVE9SRV9OQU1FXSwicmVhZHdyaXRlIikscj1BLm9iamVjdFN0b3JlKEVBLkRCX1NUT1JFX05BTUUpLGk9MCxmPTAsbj1lLmxlbmd0aDtmdW5jdGlvbiB0KCl7KDA9PWY/bzphKSgpfWUuZm9yRWFjaChmdW5jdGlvbihBKXt2YXIgZT1yLnB1dChFQS5hbmFseXplUGF0aChBKS5vYmplY3QuY29udGVudHMsQSk7ZS5vbnN1Y2Nlc3M9ZnVuY3Rpb24oKXsrK2krZj09biYmdCgpfSxlLm9uZXJyb3I9ZnVuY3Rpb24oKXtpKyArK2Y9PW4mJnQoKX19KSxBLm9uZXJyb3I9YX0sYy5vbmVycm9yPWF9LGxvYWRGaWxlc0Zyb21EQjpmdW5jdGlvbihvLGEsYyl7YT1hfHxmdW5jdGlvbigpe30sYz1jfHxmdW5jdGlvbigpe307dmFyIEE9RUEuaW5kZXhlZERCKCk7dHJ5e3ZhciBsPUEub3BlbihFQS5EQl9OQU1FKCksRUEuREJfVkVSU0lPTil9Y2F0Y2goQSl7cmV0dXJuIGMoQSl9bC5vbnVwZ3JhZGVuZWVkZWQ9YyxsLm9uc3VjY2Vzcz1mdW5jdGlvbigpe3ZhciBBPWwucmVzdWx0O3RyeXt2YXIgZT1BLnRyYW5zYWN0aW9uKFtFQS5EQl9TVE9SRV9OQU1FXSwicmVhZG9ubHkiKX1jYXRjaChBKXtyZXR1cm4gdm9pZCBjKEEpfXZhciByPWUub2JqZWN0U3RvcmUoRUEuREJfU1RPUkVfTkFNRSksaT0wLGY9MCxuPW8ubGVuZ3RoO2Z1bmN0aW9uIHQoKXsoMD09Zj9hOmMpKCl9by5mb3JFYWNoKGZ1bmN0aW9uKEEpe3ZhciBlPXIuZ2V0KEEpO2Uub25zdWNjZXNzPWZ1bmN0aW9uKCl7RUEuYW5hbHl6ZVBhdGgoQSkuZXhpc3RzJiZFQS51bmxpbmsoQSksRUEuY3JlYXRlRGF0YUZpbGUobUEuZGlybmFtZShBKSxtQS5iYXNlbmFtZShBKSxlLnJlc3VsdCwhMCwhMCwhMCksKytpK2Y9PW4mJnQoKX0sZS5vbmVycm9yPWZ1bmN0aW9uKCl7aSsgKytmPT1uJiZ0KCl9fSksZS5vbmVycm9yPWN9LGwub25lcnJvcj1jfX0sWEE9e0RFRkFVTFRfUE9MTE1BU0s6NSxtYXBwaW5nczp7fSx1bWFzazo1MTEsY2FsY3VsYXRlQXQ6ZnVuY3Rpb24oQSxlKXtpZigiLyIhPT1lWzBdKXt2YXIgcjtpZigtMTAwPT09QSlyPUVBLmN3ZCgpO2Vsc2V7dmFyIGk9RUEuZ2V0U3RyZWFtKEEpO2lmKCFpKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVCQURGKTtyPWkucGF0aH1lPW1BLmpvaW4yKHIsZSl9cmV0dXJuIGV9LGRvU3RhdDpmdW5jdGlvbihBLGUscil7dHJ5e3ZhciBpPUEoZSl9Y2F0Y2goQSl7aWYoQSYmQS5ub2RlJiZtQS5ub3JtYWxpemUoZSkhPT1tQS5ub3JtYWxpemUoRUEuZ2V0UGF0aChBLm5vZGUpKSlyZXR1cm4taEEuRU5PVERJUjt0aHJvdyBBfXJldHVybiBJW3I+PjJdPWkuZGV2LElbcis0Pj4yXT0wLElbcis4Pj4yXT1pLmlubyxJW3IrMTI+PjJdPWkubW9kZSxJW3IrMTY+PjJdPWkubmxpbmssSVtyKzIwPj4yXT1pLnVpZCxJW3IrMjQ+PjJdPWkuZ2lkLElbcisyOD4+Ml09aS5yZGV2LElbciszMj4+Ml09MCxJW3IrMzY+PjJdPWkuc2l6ZSxJW3IrNDA+PjJdPTQwOTYsSVtyKzQ0Pj4yXT1pLmJsb2NrcyxJW3IrNDg+PjJdPWkuYXRpbWUuZ2V0VGltZSgpLzFlM3wwLElbcis1Mj4+Ml09MCxJW3IrNTY+PjJdPWkubXRpbWUuZ2V0VGltZSgpLzFlM3wwLElbcis2MD4+Ml09MCxJW3IrNjQ+PjJdPWkuY3RpbWUuZ2V0VGltZSgpLzFlM3wwLElbcis2OD4+Ml09MCxJW3IrNzI+PjJdPWkuaW5vLDB9LGRvTXN5bmM6ZnVuY3Rpb24oQSxlLHIsaSl7dmFyIGY9bmV3IFVpbnQ4QXJyYXkoRS5zdWJhcnJheShBLEErcikpO0VBLm1zeW5jKGUsZiwwLHIsaSl9LGRvTWtkaXI6ZnVuY3Rpb24oQSxlKXtyZXR1cm4iLyI9PT0oQT1tQS5ub3JtYWxpemUoQSkpW0EubGVuZ3RoLTFdJiYoQT1BLnN1YnN0cigwLEEubGVuZ3RoLTEpKSxFQS5ta2RpcihBLGUsMCksMH0sZG9Na25vZDpmdW5jdGlvbihBLGUscil7c3dpdGNoKDYxNDQwJmUpe2Nhc2UgMzI3Njg6Y2FzZSA4MTkyOmNhc2UgMjQ1NzY6Y2FzZSA0MDk2OmNhc2UgNDkxNTI6YnJlYWs7ZGVmYXVsdDpyZXR1cm4taEEuRUlOVkFMfXJldHVybiBFQS5ta25vZChBLGUsciksMH0sZG9SZWFkbGluazpmdW5jdGlvbihBLGUscil7aWYocjw9MClyZXR1cm4taEEuRUlOVkFMO3ZhciBpPUVBLnJlYWRsaW5rKEEpLGY9TWF0aC5taW4ocixaKGkpKSxuPUJbZStmXTtyZXR1cm4gcyhpLGUscisxKSxCW2UrZl09bixmfSxkb0FjY2VzczpmdW5jdGlvbihBLGUpe2lmKC04JmUpcmV0dXJuLWhBLkVJTlZBTDt2YXIgcjtyPUVBLmxvb2t1cFBhdGgoQSx7Zm9sbG93OiEwfSkubm9kZTt2YXIgaT0iIjtyZXR1cm4gNCZlJiYoaSs9InIiKSwyJmUmJihpKz0idyIpLDEmZSYmKGkrPSJ4IiksaSYmRUEubm9kZVBlcm1pc3Npb25zKHIsaSk/LWhBLkVBQ0NFUzowfSxkb0R1cDpmdW5jdGlvbihBLGUscil7dmFyIGk9RUEuZ2V0U3RyZWFtKHIpO3JldHVybiBpJiZFQS5jbG9zZShpKSxFQS5vcGVuKEEsZSwwLHIscikuZmR9LGRvUmVhZHY6ZnVuY3Rpb24oQSxlLHIsaSl7Zm9yKHZhciBmPTAsbj0wO248cjtuKyspe3ZhciB0PUlbZSs4Km4+PjJdLG89SVtlKyg4Km4rNCk+PjJdLGE9RUEucmVhZChBLEIsdCxvLGkpO2lmKGE8MClyZXR1cm4tMTtpZihmKz1hLGE8bylicmVha31yZXR1cm4gZn0sZG9Xcml0ZXY6ZnVuY3Rpb24oQSxlLHIsaSl7Zm9yKHZhciBmPTAsbj0wO248cjtuKyspe3ZhciB0PUlbZSs4Km4+PjJdLG89SVtlKyg4Km4rNCk+PjJdLGE9RUEud3JpdGUoQSxCLHQsbyxpKTtpZihhPDApcmV0dXJuLTE7Zis9YX1yZXR1cm4gZn0sdmFyYXJnczowLGdldDpmdW5jdGlvbihBKXtyZXR1cm4gWEEudmFyYXJncys9NCxJW1hBLnZhcmFyZ3MtND4+Ml19LGdldFN0cjpmdW5jdGlvbigpe3JldHVybiBnKFhBLmdldCgpKX0sZ2V0U3RyZWFtRnJvbUZEOmZ1bmN0aW9uKCl7dmFyIEE9RUEuZ2V0U3RyZWFtKFhBLmdldCgpKTtpZighQSl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FQkFERik7cmV0dXJuIEF9LGdldFNvY2tldEZyb21GRDpmdW5jdGlvbigpe3ZhciBBPVNPQ0tGUy5nZXRTb2NrZXQoWEEuZ2V0KCkpO2lmKCFBKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVCQURGKTtyZXR1cm4gQX0sZ2V0U29ja2V0QWRkcmVzczpmdW5jdGlvbihBKXt2YXIgZT1YQS5nZXQoKSxyPVhBLmdldCgpO2lmKEEmJjA9PT1lKXJldHVybiBudWxsO3ZhciBpPV9fcmVhZF9zb2NrYWRkcihlLHIpO2lmKGkuZXJybm8pdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaS5lcnJubyk7cmV0dXJuIGkuYWRkcj1ETlMubG9va3VwX2FkZHIoaS5hZGRyKXx8aS5hZGRyLGl9LGdldDY0OmZ1bmN0aW9uKCl7dmFyIEE9WEEuZ2V0KCksZT1YQS5nZXQoKTtyZXR1cm4gaCgwPD1BPzA9PT1lOi0xPT09ZSksQX0sZ2V0WmVybzpmdW5jdGlvbigpe2goMD09PVhBLmdldCgpKX19O3ZhciBXQT1hKFs4LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNSwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDYsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNCwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw1LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNywwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDUsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNCwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw2LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNSwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwXSwiaTgiLHYpO3ZhciBJQT17fTtmdW5jdGlvbiBDQShBKXtmb3IoO0EubGVuZ3RoOyl7dmFyIGU9QS5wb3AoKTtBLnBvcCgpKGUpfX1mdW5jdGlvbiBHQShBKXtyZXR1cm4gdGhpcy5mcm9tV2lyZVR5cGUoQ1tBPj4yXSl9dmFyIFZBPXt9LEZBPXt9LFJBPXt9LE5BPTQ4LF9BPTU3O2Z1bmN0aW9uIFlBKEEpe2lmKHZvaWQgMD09PUEpcmV0dXJuIl91bmtub3duIjt2YXIgZT0oQT1BLnJlcGxhY2UoL1teYS16QS1aMC05X10vZywiJCIpKS5jaGFyQ29kZUF0KDApO3JldHVybiBOQTw9ZSYmZTw9X0E/Il8iK0E6QX1mdW5jdGlvbiBRQShBLGUpe3JldHVybiBBPVlBKEEpLG5ldyBGdW5jdGlvbigiYm9keSIsInJldHVybiBmdW5jdGlvbiAiK0ErJygpIHtcXG4gICAgInVzZSBzdHJpY3QiOyAgICByZXR1cm4gYm9keS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xcbn07XFxuJykoZSl9ZnVuY3Rpb24gREEoQSxyKXt2YXIgZT1RQShyLGZ1bmN0aW9uKEEpe3RoaXMubmFtZT1yLHRoaXMubWVzc2FnZT1BO3ZhciBlPW5ldyBFcnJvcihBKS5zdGFjazt2b2lkIDAhPT1lJiYodGhpcy5zdGFjaz10aGlzLnRvU3RyaW5nKCkrIlxcbiIrZS5yZXBsYWNlKC9eRXJyb3IoOlteXFxuXSopP1xcbi8sIiIpKX0pO3JldHVybiBlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEEucHJvdG90eXBlKSwoZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSkucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PXRoaXMubWVzc2FnZT90aGlzLm5hbWU6dGhpcy5uYW1lKyI6ICIrdGhpcy5tZXNzYWdlfSxlfXZhciBKQT12b2lkIDA7ZnVuY3Rpb24gTUEoQSl7dGhyb3cgbmV3IEpBKEEpfWZ1bmN0aW9uIFRBKGksZSxmKXtmdW5jdGlvbiByKEEpe3ZhciBlPWYoQSk7ZS5sZW5ndGghPT1pLmxlbmd0aCYmTUEoIk1pc21hdGNoZWQgdHlwZSBjb252ZXJ0ZXIgY291bnQiKTtmb3IodmFyIHI9MDtyPGkubGVuZ3RoOysrcil4QShpW3JdLGVbcl0pfWkuZm9yRWFjaChmdW5jdGlvbihBKXtSQVtBXT1lfSk7dmFyIG49bmV3IEFycmF5KGUubGVuZ3RoKSx0PVtdLG89MDtlLmZvckVhY2goZnVuY3Rpb24oQSxlKXtGQS5oYXNPd25Qcm9wZXJ0eShBKT9uW2VdPUZBW0FdOih0LnB1c2goQSksVkEuaGFzT3duUHJvcGVydHkoQSl8fChWQVtBXT1bXSksVkFbQV0ucHVzaChmdW5jdGlvbigpe25bZV09RkFbQV0sKytvPT09dC5sZW5ndGgmJnIobil9KSl9KSwwPT09dC5sZW5ndGgmJnIobil9ZnVuY3Rpb24gVUEoQSl7c3dpdGNoKEEpe2Nhc2UgMTpyZXR1cm4gMDtjYXNlIDI6cmV0dXJuIDE7Y2FzZSA0OnJldHVybiAyO2Nhc2UgODpyZXR1cm4gMztkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gdHlwZSBzaXplOiAiK0EpfX1mdW5jdGlvbiBTQSgpe2Zvcih2YXIgQT1uZXcgQXJyYXkoMjU2KSxlPTA7ZTwyNTY7KytlKUFbZV09U3RyaW5nLmZyb21DaGFyQ29kZShlKTtPQT1BfXZhciBPQT12b2lkIDA7ZnVuY3Rpb24gekEoQSl7Zm9yKHZhciBlPSIiLHI9QTtFW3JdOyllKz1PQVtFW3IrK11dO3JldHVybiBlfXZhciBqQT12b2lkIDA7ZnVuY3Rpb24gSEEoQSl7dGhyb3cgbmV3IGpBKEEpfWZ1bmN0aW9uIHhBKEEsZSxyKXtpZihyPXJ8fHt9LCEoImFyZ1BhY2tBZHZhbmNlImluIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoInJlZ2lzdGVyVHlwZSByZWdpc3RlcmVkSW5zdGFuY2UgcmVxdWlyZXMgYXJnUGFja0FkdmFuY2UiKTt2YXIgaT1lLm5hbWU7aWYoQXx8SEEoJ3R5cGUgIicraSsnIiBtdXN0IGhhdmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIHR5cGVpZCBwb2ludGVyJyksRkEuaGFzT3duUHJvcGVydHkoQSkpe2lmKHIuaWdub3JlRHVwbGljYXRlUmVnaXN0cmF0aW9ucylyZXR1cm47SEEoIkNhbm5vdCByZWdpc3RlciB0eXBlICciK2krIicgdHdpY2UiKX1pZihGQVtBXT1lLGRlbGV0ZSBSQVtBXSxWQS5oYXNPd25Qcm9wZXJ0eShBKSl7dmFyIGY9VkFbQV07ZGVsZXRlIFZBW0FdLGYuZm9yRWFjaChmdW5jdGlvbihBKXtBKCl9KX19ZnVuY3Rpb24gUEEoQSl7aWYoISh0aGlzIGluc3RhbmNlb2Ygb2UpKXJldHVybiExO2lmKCEoQSBpbnN0YW5jZW9mIG9lKSlyZXR1cm4hMTtmb3IodmFyIGU9dGhpcy4kJC5wdHJUeXBlLnJlZ2lzdGVyZWRDbGFzcyxyPXRoaXMuJCQucHRyLGk9QS4kJC5wdHJUeXBlLnJlZ2lzdGVyZWRDbGFzcyxmPUEuJCQucHRyO2UuYmFzZUNsYXNzOylyPWUudXBjYXN0KHIpLGU9ZS5iYXNlQ2xhc3M7Zm9yKDtpLmJhc2VDbGFzczspZj1pLnVwY2FzdChmKSxpPWkuYmFzZUNsYXNzO3JldHVybiBlPT09aSYmcj09PWZ9ZnVuY3Rpb24gTEEoQSl7cmV0dXJue2NvdW50OkEuY291bnQsZGVsZXRlU2NoZWR1bGVkOkEuZGVsZXRlU2NoZWR1bGVkLHByZXNlcnZlUG9pbnRlck9uRGVsZXRlOkEucHJlc2VydmVQb2ludGVyT25EZWxldGUscHRyOkEucHRyLHB0clR5cGU6QS5wdHJUeXBlLHNtYXJ0UHRyOkEuc21hcnRQdHIsc21hcnRQdHJUeXBlOkEuc21hcnRQdHJUeXBlfX1mdW5jdGlvbiBLQShBKXtIQShBLiQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzLm5hbWUrIiBpbnN0YW5jZSBhbHJlYWR5IGRlbGV0ZWQiKX1mdW5jdGlvbiBxQSgpe2lmKHRoaXMuJCQucHRyfHxLQSh0aGlzKSx0aGlzLiQkLnByZXNlcnZlUG9pbnRlck9uRGVsZXRlKXJldHVybiB0aGlzLiQkLmNvdW50LnZhbHVlKz0xLHRoaXM7dmFyIEE9T2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykseyQkOnt2YWx1ZTpMQSh0aGlzLiQkKX19KTtyZXR1cm4gQS4kJC5jb3VudC52YWx1ZSs9MSxBLiQkLmRlbGV0ZVNjaGVkdWxlZD0hMSxBfWZ1bmN0aW9uICRBKEEpe3ZhciBlPUEuJCQ7ZS5zbWFydFB0cj9lLnNtYXJ0UHRyVHlwZS5yYXdEZXN0cnVjdG9yKGUuc21hcnRQdHIpOmUucHRyVHlwZS5yZWdpc3RlcmVkQ2xhc3MucmF3RGVzdHJ1Y3RvcihlLnB0cil9ZnVuY3Rpb24gQWUoKXt0aGlzLiQkLnB0cnx8S0EodGhpcyksdGhpcy4kJC5kZWxldGVTY2hlZHVsZWQmJiF0aGlzLiQkLnByZXNlcnZlUG9pbnRlck9uRGVsZXRlJiZIQSgiT2JqZWN0IGFscmVhZHkgc2NoZWR1bGVkIGZvciBkZWxldGlvbiIpLC0tdGhpcy4kJC5jb3VudC52YWx1ZSwwPT09dGhpcy4kJC5jb3VudC52YWx1ZSYmJEEodGhpcyksdGhpcy4kJC5wcmVzZXJ2ZVBvaW50ZXJPbkRlbGV0ZXx8KHRoaXMuJCQuc21hcnRQdHI9dm9pZCAwLHRoaXMuJCQucHRyPXZvaWQgMCl9ZnVuY3Rpb24gZWUoKXtyZXR1cm4hdGhpcy4kJC5wdHJ9dmFyIHJlPXZvaWQgMCxpZT1bXTtmdW5jdGlvbiBmZSgpe2Zvcig7aWUubGVuZ3RoOyl7dmFyIEE9aWUucG9wKCk7QS4kJC5kZWxldGVTY2hlZHVsZWQ9ITEsQS5kZWxldGUoKX19ZnVuY3Rpb24gbmUoKXtyZXR1cm4gdGhpcy4kJC5wdHJ8fEtBKHRoaXMpLHRoaXMuJCQuZGVsZXRlU2NoZWR1bGVkJiYhdGhpcy4kJC5wcmVzZXJ2ZVBvaW50ZXJPbkRlbGV0ZSYmSEEoIk9iamVjdCBhbHJlYWR5IHNjaGVkdWxlZCBmb3IgZGVsZXRpb24iKSxpZS5wdXNoKHRoaXMpLDE9PT1pZS5sZW5ndGgmJnJlJiZyZShmZSksdGhpcy4kJC5kZWxldGVTY2hlZHVsZWQ9ITAsdGhpc31mdW5jdGlvbiB0ZSgpe29lLnByb3RvdHlwZS5pc0FsaWFzT2Y9UEEsb2UucHJvdG90eXBlLmNsb25lPXFBLG9lLnByb3RvdHlwZS5kZWxldGU9QWUsb2UucHJvdG90eXBlLmlzRGVsZXRlZD1lZSxvZS5wcm90b3R5cGUuZGVsZXRlTGF0ZXI9bmV9ZnVuY3Rpb24gb2UoKXt9dmFyIGFlPXt9O2Z1bmN0aW9uIGNlKEEsZSxyKXtpZih2b2lkIDA9PT1BW2VdLm92ZXJsb2FkVGFibGUpe3ZhciBpPUFbZV07QVtlXT1mdW5jdGlvbigpe3JldHVybiBBW2VdLm92ZXJsb2FkVGFibGUuaGFzT3duUHJvcGVydHkoYXJndW1lbnRzLmxlbmd0aCl8fEhBKCJGdW5jdGlvbiAnIityKyInIGNhbGxlZCB3aXRoIGFuIGludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyAoIithcmd1bWVudHMubGVuZ3RoKyIpIC0gZXhwZWN0cyBvbmUgb2YgKCIrQVtlXS5vdmVybG9hZFRhYmxlKyIpISIpLEFbZV0ub3ZlcmxvYWRUYWJsZVthcmd1bWVudHMubGVuZ3RoXS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LEFbZV0ub3ZlcmxvYWRUYWJsZT1bXSxBW2VdLm92ZXJsb2FkVGFibGVbaS5hcmdDb3VudF09aX19ZnVuY3Rpb24gbGUoQSxlLHIpe2QuaGFzT3duUHJvcGVydHkoQSk/KCh2b2lkIDA9PT1yfHx2b2lkIDAhPT1kW0FdLm92ZXJsb2FkVGFibGUmJnZvaWQgMCE9PWRbQV0ub3ZlcmxvYWRUYWJsZVtyXSkmJkhBKCJDYW5ub3QgcmVnaXN0ZXIgcHVibGljIG5hbWUgJyIrQSsiJyB0d2ljZSIpLGNlKGQsQSxBKSxkLmhhc093blByb3BlcnR5KHIpJiZIQSgiQ2Fubm90IHJlZ2lzdGVyIG11bHRpcGxlIG92ZXJsb2FkcyBvZiBhIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgbnVtYmVyIG9mIGFyZ3VtZW50cyAoIityKyIpISIpLGRbQV0ub3ZlcmxvYWRUYWJsZVtyXT1lKTooZFtBXT1lLHZvaWQgMCE9PXImJihkW0FdLm51bUFyZ3VtZW50cz1yKSl9ZnVuY3Rpb24gdWUoQSxlLHIsaSxmLG4sdCxvKXt0aGlzLm5hbWU9QSx0aGlzLmNvbnN0cnVjdG9yPWUsdGhpcy5pbnN0YW5jZVByb3RvdHlwZT1yLHRoaXMucmF3RGVzdHJ1Y3Rvcj1pLHRoaXMuYmFzZUNsYXNzPWYsdGhpcy5nZXRBY3R1YWxUeXBlPW4sdGhpcy51cGNhc3Q9dCx0aGlzLmRvd25jYXN0PW8sdGhpcy5wdXJlVmlydHVhbEZ1bmN0aW9ucz1bXX1mdW5jdGlvbiBiZShBLGUscil7Zm9yKDtlIT09cjspZS51cGNhc3R8fEhBKCJFeHBlY3RlZCBudWxsIG9yIGluc3RhbmNlIG9mICIrci5uYW1lKyIsIGdvdCBhbiBpbnN0YW5jZSBvZiAiK2UubmFtZSksQT1lLnVwY2FzdChBKSxlPWUuYmFzZUNsYXNzO3JldHVybiBBfWZ1bmN0aW9uIHNlKEEsZSl7aWYobnVsbD09PWUpcmV0dXJuIHRoaXMuaXNSZWZlcmVuY2UmJkhBKCJudWxsIGlzIG5vdCBhIHZhbGlkICIrdGhpcy5uYW1lKSwwO2UuJCR8fEhBKCdDYW5ub3QgcGFzcyAiJyt6ZShlKSsnIiBhcyBhICcrdGhpcy5uYW1lKSxlLiQkLnB0cnx8SEEoIkNhbm5vdCBwYXNzIGRlbGV0ZWQgb2JqZWN0IGFzIGEgcG9pbnRlciBvZiB0eXBlICIrdGhpcy5uYW1lKTt2YXIgcj1lLiQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzO3JldHVybiBiZShlLiQkLnB0cixyLHRoaXMucmVnaXN0ZXJlZENsYXNzKX1mdW5jdGlvbiBkZShBLGUpe3ZhciByO2lmKG51bGw9PT1lKXJldHVybiB0aGlzLmlzUmVmZXJlbmNlJiZIQSgibnVsbCBpcyBub3QgYSB2YWxpZCAiK3RoaXMubmFtZSksdGhpcy5pc1NtYXJ0UG9pbnRlcj8ocj10aGlzLnJhd0NvbnN0cnVjdG9yKCksbnVsbCE9PUEmJkEucHVzaCh0aGlzLnJhd0Rlc3RydWN0b3Iscikscik6MDtlLiQkfHxIQSgnQ2Fubm90IHBhc3MgIicremUoZSkrJyIgYXMgYSAnK3RoaXMubmFtZSksZS4kJC5wdHJ8fEhBKCJDYW5ub3QgcGFzcyBkZWxldGVkIG9iamVjdCBhcyBhIHBvaW50ZXIgb2YgdHlwZSAiK3RoaXMubmFtZSksIXRoaXMuaXNDb25zdCYmZS4kJC5wdHJUeXBlLmlzQ29uc3QmJkhBKCJDYW5ub3QgY29udmVydCBhcmd1bWVudCBvZiB0eXBlICIrKGUuJCQuc21hcnRQdHJUeXBlP2UuJCQuc21hcnRQdHJUeXBlLm5hbWU6ZS4kJC5wdHJUeXBlLm5hbWUpKyIgdG8gcGFyYW1ldGVyIHR5cGUgIit0aGlzLm5hbWUpO3ZhciBpPWUuJCQucHRyVHlwZS5yZWdpc3RlcmVkQ2xhc3M7aWYocj1iZShlLiQkLnB0cixpLHRoaXMucmVnaXN0ZXJlZENsYXNzKSx0aGlzLmlzU21hcnRQb2ludGVyKXN3aXRjaCh2b2lkIDA9PT1lLiQkLnNtYXJ0UHRyJiZIQSgiUGFzc2luZyByYXcgcG9pbnRlciB0byBzbWFydCBwb2ludGVyIGlzIGlsbGVnYWwiKSx0aGlzLnNoYXJpbmdQb2xpY3kpe2Nhc2UgMDplLiQkLnNtYXJ0UHRyVHlwZT09PXRoaXM/cj1lLiQkLnNtYXJ0UHRyOkhBKCJDYW5ub3QgY29udmVydCBhcmd1bWVudCBvZiB0eXBlICIrKGUuJCQuc21hcnRQdHJUeXBlP2UuJCQuc21hcnRQdHJUeXBlLm5hbWU6ZS4kJC5wdHJUeXBlLm5hbWUpKyIgdG8gcGFyYW1ldGVyIHR5cGUgIit0aGlzLm5hbWUpO2JyZWFrO2Nhc2UgMTpyPWUuJCQuc21hcnRQdHI7YnJlYWs7Y2FzZSAyOmlmKGUuJCQuc21hcnRQdHJUeXBlPT09dGhpcylyPWUuJCQuc21hcnRQdHI7ZWxzZXt2YXIgZj1lLmNsb25lKCk7cj10aGlzLnJhd1NoYXJlKHIsVWUoZnVuY3Rpb24oKXtmLmRlbGV0ZSgpfSkpLG51bGwhPT1BJiZBLnB1c2godGhpcy5yYXdEZXN0cnVjdG9yLHIpfWJyZWFrO2RlZmF1bHQ6SEEoIlVuc3VwcG9ydGluZyBzaGFyaW5nIHBvbGljeSIpfXJldHVybiByfWZ1bmN0aW9uIGtlKEEsZSl7aWYobnVsbD09PWUpcmV0dXJuIHRoaXMuaXNSZWZlcmVuY2UmJkhBKCJudWxsIGlzIG5vdCBhIHZhbGlkICIrdGhpcy5uYW1lKSwwO2UuJCR8fEhBKCdDYW5ub3QgcGFzcyAiJyt6ZShlKSsnIiBhcyBhICcrdGhpcy5uYW1lKSxlLiQkLnB0cnx8SEEoIkNhbm5vdCBwYXNzIGRlbGV0ZWQgb2JqZWN0IGFzIGEgcG9pbnRlciBvZiB0eXBlICIrdGhpcy5uYW1lKSxlLiQkLnB0clR5cGUuaXNDb25zdCYmSEEoIkNhbm5vdCBjb252ZXJ0IGFyZ3VtZW50IG9mIHR5cGUgIitlLiQkLnB0clR5cGUubmFtZSsiIHRvIHBhcmFtZXRlciB0eXBlICIrdGhpcy5uYW1lKTt2YXIgcj1lLiQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzO3JldHVybiBiZShlLiQkLnB0cixyLHRoaXMucmVnaXN0ZXJlZENsYXNzKX1mdW5jdGlvbiBoZShBKXtyZXR1cm4gdGhpcy5yYXdHZXRQb2ludGVlJiYoQT10aGlzLnJhd0dldFBvaW50ZWUoQSkpLEF9ZnVuY3Rpb24gd2UoQSl7dGhpcy5yYXdEZXN0cnVjdG9yJiZ0aGlzLnJhd0Rlc3RydWN0b3IoQSl9ZnVuY3Rpb24gdmUoQSl7bnVsbCE9PUEmJkEuZGVsZXRlKCl9ZnVuY3Rpb24gbWUoQSxlLHIpe2lmKGU9PT1yKXJldHVybiBBO2lmKHZvaWQgMD09PXIuYmFzZUNsYXNzKXJldHVybiBudWxsO3ZhciBpPW1lKEEsZSxyLmJhc2VDbGFzcyk7cmV0dXJuIG51bGw9PT1pP251bGw6ci5kb3duY2FzdChpKX1mdW5jdGlvbiBnZSgpe3JldHVybiBPYmplY3Qua2V5cyhCZSkubGVuZ3RofWZ1bmN0aW9uIFplKCl7dmFyIEE9W107Zm9yKHZhciBlIGluIEJlKUJlLmhhc093blByb3BlcnR5KGUpJiZBLnB1c2goQmVbZV0pO3JldHVybiBBfWZ1bmN0aW9uIHBlKEEpe3JlPUEsaWUubGVuZ3RoJiZyZSYmcmUoZmUpfWZ1bmN0aW9uIHllKCl7ZC5nZXRJbmhlcml0ZWRJbnN0YW5jZUNvdW50PWdlLGQuZ2V0TGl2ZUluaGVyaXRlZEluc3RhbmNlcz1aZSxkLmZsdXNoUGVuZGluZ0RlbGV0ZXM9ZmUsZC5zZXREZWxheUZ1bmN0aW9uPXBlfXZhciBCZT17fTtmdW5jdGlvbiBFZShBLGUpe2Zvcih2b2lkIDA9PT1lJiZIQSgicHRyIHNob3VsZCBub3QgYmUgdW5kZWZpbmVkIik7QS5iYXNlQ2xhc3M7KWU9QS51cGNhc3QoZSksQT1BLmJhc2VDbGFzcztyZXR1cm4gZX1mdW5jdGlvbiBYZShBLGUpe3JldHVybiBlPUVlKEEsZSksQmVbZV19ZnVuY3Rpb24gV2UoQSxlKXtyZXR1cm4gZS5wdHJUeXBlJiZlLnB0cnx8TUEoIm1ha2VDbGFzc0hhbmRsZSByZXF1aXJlcyBwdHIgYW5kIHB0clR5cGUiKSwhIWUuc21hcnRQdHJUeXBlIT0hIWUuc21hcnRQdHImJk1BKCJCb3RoIHNtYXJ0UHRyVHlwZSBhbmQgc21hcnRQdHIgbXVzdCBiZSBzcGVjaWZpZWQiKSxlLmNvdW50PXt2YWx1ZToxfSxPYmplY3QuY3JlYXRlKEEseyQkOnt2YWx1ZTplfX0pfWZ1bmN0aW9uIEllKEEpe3ZhciBlPXRoaXMuZ2V0UG9pbnRlZShBKTtpZighZSlyZXR1cm4gdGhpcy5kZXN0cnVjdG9yKEEpLG51bGw7dmFyIHI9WGUodGhpcy5yZWdpc3RlcmVkQ2xhc3MsZSk7aWYodm9pZCAwIT09cil7aWYoMD09PXIuJCQuY291bnQudmFsdWUpcmV0dXJuIHIuJCQucHRyPWUsci4kJC5zbWFydFB0cj1BLHIuY2xvbmUoKTt2YXIgaT1yLmNsb25lKCk7cmV0dXJuIHRoaXMuZGVzdHJ1Y3RvcihBKSxpfWZ1bmN0aW9uIGYoKXtyZXR1cm4gdGhpcy5pc1NtYXJ0UG9pbnRlcj9XZSh0aGlzLnJlZ2lzdGVyZWRDbGFzcy5pbnN0YW5jZVByb3RvdHlwZSx7cHRyVHlwZTp0aGlzLnBvaW50ZWVUeXBlLHB0cjplLHNtYXJ0UHRyVHlwZTp0aGlzLHNtYXJ0UHRyOkF9KTpXZSh0aGlzLnJlZ2lzdGVyZWRDbGFzcy5pbnN0YW5jZVByb3RvdHlwZSx7cHRyVHlwZTp0aGlzLHB0cjpBfSl9dmFyIG4sdD10aGlzLnJlZ2lzdGVyZWRDbGFzcy5nZXRBY3R1YWxUeXBlKGUpLG89YWVbdF07aWYoIW8pcmV0dXJuIGYuY2FsbCh0aGlzKTtuPXRoaXMuaXNDb25zdD9vLmNvbnN0UG9pbnRlclR5cGU6by5wb2ludGVyVHlwZTt2YXIgYT1tZShlLHRoaXMucmVnaXN0ZXJlZENsYXNzLG4ucmVnaXN0ZXJlZENsYXNzKTtyZXR1cm4gbnVsbD09PWE/Zi5jYWxsKHRoaXMpOnRoaXMuaXNTbWFydFBvaW50ZXI/V2Uobi5yZWdpc3RlcmVkQ2xhc3MuaW5zdGFuY2VQcm90b3R5cGUse3B0clR5cGU6bixwdHI6YSxzbWFydFB0clR5cGU6dGhpcyxzbWFydFB0cjpBfSk6V2Uobi5yZWdpc3RlcmVkQ2xhc3MuaW5zdGFuY2VQcm90b3R5cGUse3B0clR5cGU6bixwdHI6YX0pfWZ1bmN0aW9uIENlKCl7R2UucHJvdG90eXBlLmdldFBvaW50ZWU9aGUsR2UucHJvdG90eXBlLmRlc3RydWN0b3I9d2UsR2UucHJvdG90eXBlLmFyZ1BhY2tBZHZhbmNlPTgsR2UucHJvdG90eXBlLnJlYWRWYWx1ZUZyb21Qb2ludGVyPUdBLEdlLnByb3RvdHlwZS5kZWxldGVPYmplY3Q9dmUsR2UucHJvdG90eXBlLmZyb21XaXJlVHlwZT1JZX1mdW5jdGlvbiBHZShBLGUscixpLGYsbix0LG8sYSxjLGwpe3RoaXMubmFtZT1BLHRoaXMucmVnaXN0ZXJlZENsYXNzPWUsdGhpcy5pc1JlZmVyZW5jZT1yLHRoaXMuaXNDb25zdD1pLHRoaXMuaXNTbWFydFBvaW50ZXI9Zix0aGlzLnBvaW50ZWVUeXBlPW4sdGhpcy5zaGFyaW5nUG9saWN5PXQsdGhpcy5yYXdHZXRQb2ludGVlPW8sdGhpcy5yYXdDb25zdHJ1Y3Rvcj1hLHRoaXMucmF3U2hhcmU9Yyx0aGlzLnJhd0Rlc3RydWN0b3I9bCxmfHx2b2lkIDAhPT1lLmJhc2VDbGFzcz90aGlzLnRvV2lyZVR5cGU9ZGU6KHRoaXMudG9XaXJlVHlwZT1pP3NlOmtlLHRoaXMuZGVzdHJ1Y3RvckZ1bmN0aW9uPW51bGwpfWZ1bmN0aW9uIFZlKEEsZSxyKXtkLmhhc093blByb3BlcnR5KEEpfHxNQSgiUmVwbGFjaW5nIG5vbmV4aXN0YW50IHB1YmxpYyBzeW1ib2wiKSx2b2lkIDAhPT1kW0FdLm92ZXJsb2FkVGFibGUmJnZvaWQgMCE9PXI/ZFtBXS5vdmVybG9hZFRhYmxlW3JdPWU6KGRbQV09ZSxkW0FdLmFyZ0NvdW50PXIpfWZ1bmN0aW9uIEZlKGYsbil7dmFyIEE7aWYoZj16QShmKSx2b2lkIDAhPT1kWyJGVU5DVElPTl9UQUJMRV8iK2ZdKUE9ZFsiRlVOQ1RJT05fVEFCTEVfIitmXVtuXTtlbHNlIGlmKCJ1bmRlZmluZWQiIT10eXBlb2YgRlVOQ1RJT05fVEFCTEUpQT1GVU5DVElPTl9UQUJMRVtuXTtlbHNle3ZhciBlPWQuYXNtWyJkeW5DYWxsXyIrZl07dm9pZCAwPT09ZSYmdm9pZCAwPT09KGU9ZC5hc21bImR5bkNhbGxfIitmLnJlcGxhY2UoL2YvZywiZCIpXSkmJkhBKCJObyBkeW5DYWxsIGludm9rZXIgZm9yIHNpZ25hdHVyZTogIitmKSxBPWZ1bmN0aW9uKEEpe2Zvcih2YXIgZT1bXSxyPTE7cjxmLmxlbmd0aDsrK3IpZS5wdXNoKCJhIityKTt2YXIgaT0icmV0dXJuIGZ1bmN0aW9uICIrKCJkeW5DYWxsXyIrZisiXyIrbikrIigiK2Uuam9pbigiLCAiKSsiKSB7XFxuIjtyZXR1cm4gaSs9IiAgICByZXR1cm4gZHluQ2FsbChyYXdGdW5jdGlvbiIrKGUubGVuZ3RoPyIsICI6IiIpK2Uuam9pbigiLCAiKSsiKTtcXG4iLGkrPSJ9O1xcbiIsbmV3IEZ1bmN0aW9uKCJkeW5DYWxsIiwicmF3RnVuY3Rpb24iLGkpKEEsbil9KGUpfXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiBBJiZIQSgidW5rbm93biBmdW5jdGlvbiBwb2ludGVyIHdpdGggc2lnbmF0dXJlICIrZisiOiAiK24pLEF9dmFyIFJlPXZvaWQgMDtmdW5jdGlvbiBOZShBKXt2YXIgZT1XcihBKSxyPXpBKGUpO3JldHVybiBDcihlKSxyfWZ1bmN0aW9uIF9lKEEsZSl7dmFyIHI9W10saT17fTt0aHJvdyBlLmZvckVhY2goZnVuY3Rpb24gQShlKXtpW2VdfHxGQVtlXXx8KFJBW2VdP1JBW2VdLmZvckVhY2goQSk6KHIucHVzaChlKSxpW2VdPSEwKSl9KSxuZXcgUmUoQSsiOiAiK3IubWFwKE5lKS5qb2luKFsiLCAiXSkpfXZhciBZZT1bXSxRZT1be30se3ZhbHVlOnZvaWQgMH0se3ZhbHVlOm51bGx9LHt2YWx1ZTohMH0se3ZhbHVlOiExfV07ZnVuY3Rpb24gRGUoQSl7NDxBJiYwPT0tLVFlW0FdLnJlZmNvdW50JiYoUWVbQV09dm9pZCAwLFllLnB1c2goQSkpfWZ1bmN0aW9uIEplKCl7Zm9yKHZhciBBPTAsZT01O2U8UWUubGVuZ3RoOysrZSl2b2lkIDAhPT1RZVtlXSYmKytBO3JldHVybiBBfWZ1bmN0aW9uIE1lKCl7Zm9yKHZhciBBPTU7QTxRZS5sZW5ndGg7KytBKWlmKHZvaWQgMCE9PVFlW0FdKXJldHVybiBRZVtBXTtyZXR1cm4gbnVsbH1mdW5jdGlvbiBUZSgpe2QuY291bnRfZW12YWxfaGFuZGxlcz1KZSxkLmdldF9maXJzdF9lbXZhbD1NZX1mdW5jdGlvbiBVZShBKXtzd2l0Y2goQSl7Y2FzZSB2b2lkIDA6cmV0dXJuIDE7Y2FzZSBudWxsOnJldHVybiAyO2Nhc2UhMDpyZXR1cm4gMztjYXNlITE6cmV0dXJuIDQ7ZGVmYXVsdDp2YXIgZT1ZZS5sZW5ndGg/WWUucG9wKCk6UWUubGVuZ3RoO3JldHVybiBRZVtlXT17cmVmY291bnQ6MSx2YWx1ZTpBfSxlfX1mdW5jdGlvbiBTZShBLGUscil7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4gZnVuY3Rpb24oQSl7dmFyIGU9cj9COkU7cmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKGVbQV0pfTtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKEEpe3ZhciBlPXI/WDpXO3JldHVybiB0aGlzLmZyb21XaXJlVHlwZShlW0E+PjFdKX07Y2FzZSAyOnJldHVybiBmdW5jdGlvbihBKXt2YXIgZT1yP0k6QztyZXR1cm4gdGhpcy5mcm9tV2lyZVR5cGUoZVtBPj4yXSl9O2RlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBpbnRlZ2VyIHR5cGU6ICIrQSl9fWZ1bmN0aW9uIE9lKEEsZSl7dmFyIHI9RkFbQV07cmV0dXJuIHZvaWQgMD09PXImJkhBKGUrIiBoYXMgdW5rbm93biB0eXBlICIrTmUoQSkpLHJ9ZnVuY3Rpb24gemUoQSl7aWYobnVsbD09PUEpcmV0dXJuIm51bGwiO3ZhciBlPXR5cGVvZiBBO3JldHVybiJvYmplY3QiPT1lfHwiYXJyYXkiPT1lfHwiZnVuY3Rpb24iPT1lP0EudG9TdHJpbmcoKToiIitBfWZ1bmN0aW9uIGplKEEsZSl7c3dpdGNoKGUpe2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24oQSl7cmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKEdbQT4+Ml0pfTtjYXNlIDM6cmV0dXJuIGZ1bmN0aW9uKEEpe3JldHVybiB0aGlzLmZyb21XaXJlVHlwZShWW0E+PjNdKX07ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGZsb2F0IHR5cGU6ICIrQSl9fWZ1bmN0aW9uIEhlKEEsZSl7aWYoIShBIGluc3RhbmNlb2YgRnVuY3Rpb24pKXRocm93IG5ldyBUeXBlRXJyb3IoIm5ld18gY2FsbGVkIHdpdGggY29uc3RydWN0b3IgdHlwZSAiK3R5cGVvZiBBKyIgd2hpY2ggaXMgbm90IGEgZnVuY3Rpb24iKTt2YXIgcj1RQShBLm5hbWV8fCJ1bmtub3duRnVuY3Rpb25OYW1lIixmdW5jdGlvbigpe30pO3IucHJvdG90eXBlPUEucHJvdG90eXBlO3ZhciBpPW5ldyByLGY9QS5hcHBseShpLGUpO3JldHVybiBmIGluc3RhbmNlb2YgT2JqZWN0P2Y6aX1mdW5jdGlvbiB4ZShBLGUscixpLGYpe3ZhciBuPWUubGVuZ3RoO248MiYmSEEoImFyZ1R5cGVzIGFycmF5IHNpemUgbWlzbWF0Y2ghIE11c3QgYXQgbGVhc3QgZ2V0IHJldHVybiB2YWx1ZSBhbmQgJ3RoaXMnIHR5cGVzISIpO2Zvcih2YXIgdD1udWxsIT09ZVsxXSYmbnVsbCE9PXIsbz0hMSxhPTE7YTxlLmxlbmd0aDsrK2EpaWYobnVsbCE9PWVbYV0mJnZvaWQgMD09PWVbYV0uZGVzdHJ1Y3RvckZ1bmN0aW9uKXtvPSEwO2JyZWFrfXZhciBjPSJ2b2lkIiE9PWVbMF0ubmFtZSxsPSIiLHU9IiI7Zm9yKGE9MDthPG4tMjsrK2EpbCs9KDAhPT1hPyIsICI6IiIpKyJhcmciK2EsdSs9KDAhPT1hPyIsICI6IiIpKyJhcmciK2ErIldpcmVkIjt2YXIgYj0icmV0dXJuIGZ1bmN0aW9uICIrWUEoQSkrIigiK2wrIikge1xcbmlmIChhcmd1bWVudHMubGVuZ3RoICE9PSAiKyhuLTIpKyIpIHtcXG50aHJvd0JpbmRpbmdFcnJvcignZnVuY3Rpb24gIitBKyIgY2FsbGVkIHdpdGggJyArIGFyZ3VtZW50cy5sZW5ndGggKyAnIGFyZ3VtZW50cywgZXhwZWN0ZWQgIisobi0yKSsiIGFyZ3MhJyk7XFxufVxcbiI7byYmKGIrPSJ2YXIgZGVzdHJ1Y3RvcnMgPSBbXTtcXG4iKTt2YXIgcz1vPyJkZXN0cnVjdG9ycyI6Im51bGwiLGQ9WyJ0aHJvd0JpbmRpbmdFcnJvciIsImludm9rZXIiLCJmbiIsInJ1bkRlc3RydWN0b3JzIiwicmV0VHlwZSIsImNsYXNzUGFyYW0iXSxrPVtIQSxpLGYsQ0EsZVswXSxlWzFdXTt0JiYoYis9InZhciB0aGlzV2lyZWQgPSBjbGFzc1BhcmFtLnRvV2lyZVR5cGUoIitzKyIsIHRoaXMpO1xcbiIpO2ZvcihhPTA7YTxuLTI7KythKWIrPSJ2YXIgYXJnIithKyJXaXJlZCA9IGFyZ1R5cGUiK2ErIi50b1dpcmVUeXBlKCIrcysiLCBhcmciK2ErIik7IC8vICIrZVthKzJdLm5hbWUrIlxcbiIsZC5wdXNoKCJhcmdUeXBlIithKSxrLnB1c2goZVthKzJdKTtpZih0JiYodT0idGhpc1dpcmVkIisoMDx1Lmxlbmd0aD8iLCAiOiIiKSt1KSxiKz0oYz8idmFyIHJ2ID0gIjoiIikrImludm9rZXIoZm4iKygwPHUubGVuZ3RoPyIsICI6IiIpK3UrIik7XFxuIixvKWIrPSJydW5EZXN0cnVjdG9ycyhkZXN0cnVjdG9ycyk7XFxuIjtlbHNlIGZvcihhPXQ/MToyO2E8ZS5sZW5ndGg7KythKXt2YXIgaD0xPT09YT8idGhpc1dpcmVkIjoiYXJnIisoYS0yKSsiV2lyZWQiO251bGwhPT1lW2FdLmRlc3RydWN0b3JGdW5jdGlvbiYmKGIrPWgrIl9kdG9yKCIraCsiKTsgLy8gIitlW2FdLm5hbWUrIlxcbiIsZC5wdXNoKGgrIl9kdG9yIiksay5wdXNoKGVbYV0uZGVzdHJ1Y3RvckZ1bmN0aW9uKSl9cmV0dXJuIGMmJihiKz0idmFyIHJldCA9IHJldFR5cGUuZnJvbVdpcmVUeXBlKHJ2KTtcXG5yZXR1cm4gcmV0O1xcbiIpLGIrPSJ9XFxuIixkLnB1c2goYiksSGUoRnVuY3Rpb24sZCkuYXBwbHkobnVsbCxrKX1mdW5jdGlvbiBQZShBLGUpe2Zvcih2YXIgcj1bXSxpPTA7aTxBO2krKylyLnB1c2goSVsoZT4+MikraV0pO3JldHVybiByfWZ1bmN0aW9uIExlKEEsZSxyKXtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiByP2Z1bmN0aW9uKEEpe3JldHVybiBCW0FdfTpmdW5jdGlvbihBKXtyZXR1cm4gRVtBXX07Y2FzZSAxOnJldHVybiByP2Z1bmN0aW9uKEEpe3JldHVybiBYW0E+PjFdfTpmdW5jdGlvbihBKXtyZXR1cm4gV1tBPj4xXX07Y2FzZSAyOnJldHVybiByP2Z1bmN0aW9uKEEpe3JldHVybiBJW0E+PjJdfTpmdW5jdGlvbihBKXtyZXR1cm4gQ1tBPj4yXX07ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGludGVnZXIgdHlwZTogIitBKX19dmFyIEtlPXt9O2Z1bmN0aW9uIHFlKEEpe3ZhciBlPUtlW0FdO3JldHVybiB2b2lkIDA9PT1lP3pBKEEpOmV9ZnVuY3Rpb24gJGUoQSl7cmV0dXJuIEF8fEhBKCJDYW5ub3QgdXNlIGRlbGV0ZWQgdmFsLiBoYW5kbGUgPSAiK0EpLFFlW0FdLnZhbHVlfXZhciBBcj1SO2Z1bmN0aW9uIGVyKEEpe3ZhciBlLHI7ZXIuY2FsbGVkPyhyPUlbQXI+PjJdLGU9SVtyPj4yXSk6KGVyLmNhbGxlZD0hMCxyci5VU0VSPXJyLkxPR05BTUU9IndlYl91c2VyIixyci5QQVRIPSIvIixyci5QV0Q9Ii8iLHJyLkhPTUU9Ii9ob21lL3dlYl91c2VyIixyci5MQU5HPSJDLlVURi04Iixyci5fPWQudGhpc1Byb2dyYW0sZT1hKDEwMjQsImk4Iix2KSxyPWEoMjU2LCJpOCoiLHYpLElbcj4+Ml09ZSxJW0FyPj4yXT1yKTt2YXIgaT1bXSxmPTA7Zm9yKHZhciBuIGluIEEpaWYoInN0cmluZyI9PXR5cGVvZiBBW25dKXt2YXIgdD1uKyI9IitBW25dO2kucHVzaCh0KSxmKz10Lmxlbmd0aH1pZigxMDI0PGYpdGhyb3cgbmV3IEVycm9yKCJFbnZpcm9ubWVudCBzaXplIGV4Y2VlZGVkIFRPVEFMX0VOVl9TSVpFISIpO2Zvcih2YXIgbz0wO288aS5sZW5ndGg7bysrKXtyQSh0PWlbb10sZSksSVtyKzQqbz4+Ml09ZSxlKz10Lmxlbmd0aCsxfUlbcis0KmkubGVuZ3RoPj4yXT0wfVIrPTE2O3ZhciBycj17fTt2YXIgaXI9e307dmFyIGZyPTE7ZnVuY3Rpb24gbnIoQSl7cmV0dXJuIEElND09MCYmKEElMTAwIT0wfHxBJTQwMD09MCl9ZnVuY3Rpb24gdHIoQSxlKXtmb3IodmFyIHI9MCxpPTA7aTw9ZTtyKz1BW2krK10pO3JldHVybiByfXZhciBvcj1bMzEsMjksMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdLGFyPVszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV07ZnVuY3Rpb24gY3IoQSxlKXtmb3IodmFyIHI9bmV3IERhdGUoQS5nZXRUaW1lKCkpOzA8ZTspe3ZhciBpPW5yKHIuZ2V0RnVsbFllYXIoKSksZj1yLmdldE1vbnRoKCksbj0oaT9vcjphcilbZl07aWYoIShlPm4tci5nZXREYXRlKCkpKXJldHVybiByLnNldERhdGUoci5nZXREYXRlKCkrZSkscjtlLT1uLXIuZ2V0RGF0ZSgpKzEsci5zZXREYXRlKDEpLGY8MTE/ci5zZXRNb250aChmKzEpOihyLnNldE1vbnRoKDApLHIuc2V0RnVsbFllYXIoci5nZXRGdWxsWWVhcigpKzEpKX1yZXR1cm4gcn1mdW5jdGlvbiBscihBLGUscixpKXt2YXIgZj1JW2krNDA+PjJdLG49e3RtX3NlYzpJW2k+PjJdLHRtX21pbjpJW2krND4+Ml0sdG1faG91cjpJW2krOD4+Ml0sdG1fbWRheTpJW2krMTI+PjJdLHRtX21vbjpJW2krMTY+PjJdLHRtX3llYXI6SVtpKzIwPj4yXSx0bV93ZGF5OklbaSsyND4+Ml0sdG1feWRheTpJW2krMjg+PjJdLHRtX2lzZHN0OklbaSszMj4+Ml0sdG1fZ210b2ZmOklbaSszNj4+Ml0sdG1fem9uZTpmP2coZik6IiJ9LHQ9ZyhyKSxvPXsiJWMiOiIlYSAlYiAlZCAlSDolTTolUyAlWSIsIiVEIjoiJW0vJWQvJXkiLCIlRiI6IiVZLSVtLSVkIiwiJWgiOiIlYiIsIiVyIjoiJUk6JU06JVMgJXAiLCIlUiI6IiVIOiVNIiwiJVQiOiIlSDolTTolUyIsIiV4IjoiJW0vJWQvJXkiLCIlWCI6IiVIOiVNOiVTIn07Zm9yKHZhciBhIGluIG8pdD10LnJlcGxhY2UobmV3IFJlZ0V4cChhLCJnIiksb1thXSk7dmFyIGM9WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLGw9WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdO2Z1bmN0aW9uIHUoQSxlLHIpe2Zvcih2YXIgaT0ibnVtYmVyIj09dHlwZW9mIEE/QS50b1N0cmluZygpOkF8fCIiO2kubGVuZ3RoPGU7KWk9clswXStpO3JldHVybiBpfWZ1bmN0aW9uIGIoQSxlKXtyZXR1cm4gdShBLGUsIjAiKX1mdW5jdGlvbiBzKEEsZSl7ZnVuY3Rpb24gcihBKXtyZXR1cm4gQTwwPy0xOjA8QT8xOjB9dmFyIGk7cmV0dXJuIDA9PT0oaT1yKEEuZ2V0RnVsbFllYXIoKS1lLmdldEZ1bGxZZWFyKCkpKSYmMD09PShpPXIoQS5nZXRNb250aCgpLWUuZ2V0TW9udGgoKSkpJiYoaT1yKEEuZ2V0RGF0ZSgpLWUuZ2V0RGF0ZSgpKSksaX1mdW5jdGlvbiBkKEEpe3N3aXRjaChBLmdldERheSgpKXtjYXNlIDA6cmV0dXJuIG5ldyBEYXRlKEEuZ2V0RnVsbFllYXIoKS0xLDExLDI5KTtjYXNlIDE6cmV0dXJuIEE7Y2FzZSAyOnJldHVybiBuZXcgRGF0ZShBLmdldEZ1bGxZZWFyKCksMCwzKTtjYXNlIDM6cmV0dXJuIG5ldyBEYXRlKEEuZ2V0RnVsbFllYXIoKSwwLDIpO2Nhc2UgNDpyZXR1cm4gbmV3IERhdGUoQS5nZXRGdWxsWWVhcigpLDAsMSk7Y2FzZSA1OnJldHVybiBuZXcgRGF0ZShBLmdldEZ1bGxZZWFyKCktMSwxMSwzMSk7Y2FzZSA2OnJldHVybiBuZXcgRGF0ZShBLmdldEZ1bGxZZWFyKCktMSwxMSwzMCl9fWZ1bmN0aW9uIGsoQSl7dmFyIGU9Y3IobmV3IERhdGUoQS50bV95ZWFyKzE5MDAsMCwxKSxBLnRtX3lkYXkpLHI9bmV3IERhdGUoZS5nZXRGdWxsWWVhcigpLDAsNCksaT1uZXcgRGF0ZShlLmdldEZ1bGxZZWFyKCkrMSwwLDQpLGY9ZChyKSxuPWQoaSk7cmV0dXJuIHMoZixlKTw9MD9zKG4sZSk8PTA/ZS5nZXRGdWxsWWVhcigpKzE6ZS5nZXRGdWxsWWVhcigpOmUuZ2V0RnVsbFllYXIoKS0xfXZhciBoPXsiJWEiOmZ1bmN0aW9uKEEpe3JldHVybiBjW0EudG1fd2RheV0uc3Vic3RyaW5nKDAsMyl9LCIlQSI6ZnVuY3Rpb24oQSl7cmV0dXJuIGNbQS50bV93ZGF5XX0sIiViIjpmdW5jdGlvbihBKXtyZXR1cm4gbFtBLnRtX21vbl0uc3Vic3RyaW5nKDAsMyl9LCIlQiI6ZnVuY3Rpb24oQSl7cmV0dXJuIGxbQS50bV9tb25dfSwiJUMiOmZ1bmN0aW9uKEEpe3JldHVybiBiKChBLnRtX3llYXIrMTkwMCkvMTAwfDAsMil9LCIlZCI6ZnVuY3Rpb24oQSl7cmV0dXJuIGIoQS50bV9tZGF5LDIpfSwiJWUiOmZ1bmN0aW9uKEEpe3JldHVybiB1KEEudG1fbWRheSwyLCIgIil9LCIlZyI6ZnVuY3Rpb24oQSl7cmV0dXJuIGsoQSkudG9TdHJpbmcoKS5zdWJzdHJpbmcoMil9LCIlRyI6ZnVuY3Rpb24oQSl7cmV0dXJuIGsoQSl9LCIlSCI6ZnVuY3Rpb24oQSl7cmV0dXJuIGIoQS50bV9ob3VyLDIpfSwiJUkiOmZ1bmN0aW9uKEEpe3ZhciBlPUEudG1faG91cjtyZXR1cm4gMD09ZT9lPTEyOjEyPGUmJihlLT0xMiksYihlLDIpfSwiJWoiOmZ1bmN0aW9uKEEpe3JldHVybiBiKEEudG1fbWRheSt0cihucihBLnRtX3llYXIrMTkwMCk/b3I6YXIsQS50bV9tb24tMSksMyl9LCIlbSI6ZnVuY3Rpb24oQSl7cmV0dXJuIGIoQS50bV9tb24rMSwyKX0sIiVNIjpmdW5jdGlvbihBKXtyZXR1cm4gYihBLnRtX21pbiwyKX0sIiVuIjpmdW5jdGlvbigpe3JldHVybiJcXG4ifSwiJXAiOmZ1bmN0aW9uKEEpe3JldHVybiAwPD1BLnRtX2hvdXImJkEudG1faG91cjwxMj8iQU0iOiJQTSJ9LCIlUyI6ZnVuY3Rpb24oQSl7cmV0dXJuIGIoQS50bV9zZWMsMil9LCIldCI6ZnVuY3Rpb24oKXtyZXR1cm4iXFx0In0sIiV1IjpmdW5jdGlvbihBKXtyZXR1cm4gbmV3IERhdGUoQS50bV95ZWFyKzE5MDAsQS50bV9tb24rMSxBLnRtX21kYXksMCwwLDAsMCkuZ2V0RGF5KCl8fDd9LCIlVSI6ZnVuY3Rpb24oQSl7dmFyIGU9bmV3IERhdGUoQS50bV95ZWFyKzE5MDAsMCwxKSxyPTA9PT1lLmdldERheSgpP2U6Y3IoZSw3LWUuZ2V0RGF5KCkpLGk9bmV3IERhdGUoQS50bV95ZWFyKzE5MDAsQS50bV9tb24sQS50bV9tZGF5KTtpZihzKHIsaSk8MCl7dmFyIGY9dHIobnIoaS5nZXRGdWxsWWVhcigpKT9vcjphcixpLmdldE1vbnRoKCktMSktMzEsbj0zMS1yLmdldERhdGUoKStmK2kuZ2V0RGF0ZSgpO3JldHVybiBiKE1hdGguY2VpbChuLzcpLDIpfXJldHVybiAwPT09cyhyLGUpPyIwMSI6IjAwIn0sIiVWIjpmdW5jdGlvbihBKXt2YXIgZSxyPW5ldyBEYXRlKEEudG1feWVhcisxOTAwLDAsNCksaT1uZXcgRGF0ZShBLnRtX3llYXIrMTkwMSwwLDQpLGY9ZChyKSxuPWQoaSksdD1jcihuZXcgRGF0ZShBLnRtX3llYXIrMTkwMCwwLDEpLEEudG1feWRheSk7cmV0dXJuIHModCxmKTwwPyI1MyI6cyhuLHQpPD0wPyIwMSI6KGU9Zi5nZXRGdWxsWWVhcigpPEEudG1feWVhcisxOTAwP0EudG1feWRheSszMi1mLmdldERhdGUoKTpBLnRtX3lkYXkrMS1mLmdldERhdGUoKSxiKE1hdGguY2VpbChlLzcpLDIpKX0sIiV3IjpmdW5jdGlvbihBKXtyZXR1cm4gbmV3IERhdGUoQS50bV95ZWFyKzE5MDAsQS50bV9tb24rMSxBLnRtX21kYXksMCwwLDAsMCkuZ2V0RGF5KCl9LCIlVyI6ZnVuY3Rpb24oQSl7dmFyIGU9bmV3IERhdGUoQS50bV95ZWFyLDAsMSkscj0xPT09ZS5nZXREYXkoKT9lOmNyKGUsMD09PWUuZ2V0RGF5KCk/MTo3LWUuZ2V0RGF5KCkrMSksaT1uZXcgRGF0ZShBLnRtX3llYXIrMTkwMCxBLnRtX21vbixBLnRtX21kYXkpO2lmKHMocixpKTwwKXt2YXIgZj10cihucihpLmdldEZ1bGxZZWFyKCkpP29yOmFyLGkuZ2V0TW9udGgoKS0xKS0zMSxuPTMxLXIuZ2V0RGF0ZSgpK2YraS5nZXREYXRlKCk7cmV0dXJuIGIoTWF0aC5jZWlsKG4vNyksMil9cmV0dXJuIDA9PT1zKHIsZSk/IjAxIjoiMDAifSwiJXkiOmZ1bmN0aW9uKEEpe3JldHVybihBLnRtX3llYXIrMTkwMCkudG9TdHJpbmcoKS5zdWJzdHJpbmcoMil9LCIlWSI6ZnVuY3Rpb24oQSl7cmV0dXJuIEEudG1feWVhcisxOTAwfSwiJXoiOmZ1bmN0aW9uKEEpe3ZhciBlPUEudG1fZ210b2ZmLHI9MDw9ZTtyZXR1cm4gZT0oZT1NYXRoLmFicyhlKS82MCkvNjAqMTAwK2UlNjAsKHI/IisiOiItIikrU3RyaW5nKCIwMDAwIitlKS5zbGljZSgtNCl9LCIlWiI6ZnVuY3Rpb24oQSl7cmV0dXJuIEEudG1fem9uZX0sIiUlIjpmdW5jdGlvbigpe3JldHVybiIlIn19O2Zvcih2YXIgYSBpbiBoKTA8PXQuaW5kZXhPZihhKSYmKHQ9dC5yZXBsYWNlKG5ldyBSZWdFeHAoYSwiZyIpLGhbYV0obikpKTt2YXIgdz1kcih0LCExKTtyZXR1cm4gdy5sZW5ndGg+ZT8wOihlQSh3LEEpLHcubGVuZ3RoLTEpfWlmKEVBLnN0YXRpY0luaXQoKSxMLnVuc2hpZnQoZnVuY3Rpb24oKXtkLm5vRlNJbml0fHxFQS5pbml0LmluaXRpYWxpemVkfHxFQS5pbml0KCl9KSxLLnB1c2goZnVuY3Rpb24oKXtFQS5pZ25vcmVQZXJtaXNzaW9ucz0hMX0pLHEucHVzaChmdW5jdGlvbigpe0VBLnF1aXQoKX0pLGQuRlNfY3JlYXRlRm9sZGVyPUVBLmNyZWF0ZUZvbGRlcixkLkZTX2NyZWF0ZVBhdGg9RUEuY3JlYXRlUGF0aCxkLkZTX2NyZWF0ZURhdGFGaWxlPUVBLmNyZWF0ZURhdGFGaWxlLGQuRlNfY3JlYXRlUHJlbG9hZGVkRmlsZT1FQS5jcmVhdGVQcmVsb2FkZWRGaWxlLGQuRlNfY3JlYXRlTGF6eUZpbGU9RUEuY3JlYXRlTGF6eUZpbGUsZC5GU19jcmVhdGVMaW5rPUVBLmNyZWF0ZUxpbmssZC5GU19jcmVhdGVEZXZpY2U9RUEuY3JlYXRlRGV2aWNlLGQuRlNfdW5saW5rPUVBLnVubGluayxMLnVuc2hpZnQoZnVuY3Rpb24oKXtnQS5pbml0KCl9KSxxLnB1c2goZnVuY3Rpb24oKXtnQS5zaHV0ZG93bigpfSksbyl7dmFyIHVyPXJlcXVpcmUoImZzIiksYnI9cmVxdWlyZSgicGF0aCIpO3lBLnN0YXRpY0luaXQoKX1KQT1kLkludGVybmFsRXJyb3I9REEoRXJyb3IsIkludGVybmFsRXJyb3IiKSxTQSgpLGpBPWQuQmluZGluZ0Vycm9yPURBKEVycm9yLCJCaW5kaW5nRXJyb3IiKSx0ZSgpLENlKCkseWUoKSxSZT1kLlVuYm91bmRUeXBlRXJyb3I9REEoRXJyb3IsIlVuYm91bmRUeXBlRXJyb3IiKSxUZSgpLGVyKHJyKSxEPWsuc3RhdGljQWxsb2MoNCksWT0oXz1rLmFsaWduTWVtb3J5KFIpKStqLFE9ay5hbGlnbk1lbW9yeShZKSxJW0Q+PjJdPVE7dmFyIHNyPSEoTj0hMCk7ZnVuY3Rpb24gZHIoQSxlLHIpe3ZhciBpPTA8cj9yOlooQSkrMSxmPW5ldyBBcnJheShpKSxuPWIoQSxmLDAsZi5sZW5ndGgpO3JldHVybiBlJiYoZi5sZW5ndGg9biksZn1mdW5jdGlvbiBrcihBKXtmb3IodmFyIGU9W10scj0wO3I8QS5sZW5ndGg7cisrKXt2YXIgaT1BW3JdOzI1NTxpJiYoc3ImJmgoITEsIkNoYXJhY3RlciBjb2RlICIraSsiICgiK1N0cmluZy5mcm9tQ2hhckNvZGUoaSkrIikgIGF0IG9mZnNldCAiK3IrIiBub3QgaW4gMHgwMC0weEZGLiIpLGkmPTI1NSksZS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoaSkpfXJldHVybiBlLmpvaW4oIiIpfXZhciBocj0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iLHdyPSJmdW5jdGlvbiI9PXR5cGVvZiBhdG9iP2F0b2I6ZnVuY3Rpb24oQSl7dmFyIGUscixpLGYsbix0LG89IiIsYT0wO2ZvcihBPUEucmVwbGFjZSgvW15BLVphLXowLTlcXCtcXC9cXD1dL2csIiIpO2U9aHIuaW5kZXhPZihBLmNoYXJBdChhKyspKTw8MnwoZj1oci5pbmRleE9mKEEuY2hhckF0KGErKykpKT4+NCxyPSgxNSZmKTw8NHwobj1oci5pbmRleE9mKEEuY2hhckF0KGErKykpKT4+MixpPSgzJm4pPDw2fCh0PWhyLmluZGV4T2YoQS5jaGFyQXQoYSsrKSkpLG8rPVN0cmluZy5mcm9tQ2hhckNvZGUoZSksNjQhPT1uJiYobys9U3RyaW5nLmZyb21DaGFyQ29kZShyKSksNjQhPT10JiYobys9U3RyaW5nLmZyb21DaGFyQ29kZShpKSksYTxBLmxlbmd0aDspO3JldHVybiBvfTtmdW5jdGlvbiB2cihBKXt2YXIgZT0iZGF0YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07YmFzZTY0LCI7aWYoU3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRoP0Euc3RhcnRzV2l0aChlKTowPT09QS5pbmRleE9mKGUpKXJldHVybiBmdW5jdGlvbihlKXtpZigiYm9vbGVhbiI9PXR5cGVvZiBvJiZvKXt2YXIgcjt0cnl7cj1CdWZmZXIuZnJvbShlLCJiYXNlNjQiKX1jYXRjaChBKXtyPW5ldyBCdWZmZXIoZSwiYmFzZTY0Iil9cmV0dXJuIG5ldyBVaW50OEFycmF5KHIuYnVmZmVyLHIuYnl0ZU9mZnNldCxyLmJ5dGVMZW5ndGgpfXRyeXtmb3IodmFyIEE9d3IoZSksaT1uZXcgVWludDhBcnJheShBLmxlbmd0aCksZj0wO2Y8QS5sZW5ndGg7KytmKWlbZl09QS5jaGFyQ29kZUF0KGYpO3JldHVybiBpfWNhdGNoKEEpe3Rocm93IG5ldyBFcnJvcigiQ29udmVydGluZyBiYXNlNjQgc3RyaW5nIHRvIGJ5dGVzIGZhaWxlZC4iKX19KEEuc2xpY2UoZS5sZW5ndGgpKX1kLmFzbUdsb2JhbEFyZz17TWF0aDpNYXRoLEludDhBcnJheTpJbnQ4QXJyYXksSW50MTZBcnJheTpJbnQxNkFycmF5LEludDMyQXJyYXk6SW50MzJBcnJheSxVaW50OEFycmF5OlVpbnQ4QXJyYXksVWludDE2QXJyYXk6VWludDE2QXJyYXksVWludDMyQXJyYXk6VWludDMyQXJyYXksRmxvYXQzMkFycmF5OkZsb2F0MzJBcnJheSxGbG9hdDY0QXJyYXk6RmxvYXQ2NEFycmF5LE5hTjpOYU4sSW5maW5pdHk6MS8wLGJ5dGVMZW5ndGg6Sn0sZC5hc21MaWJyYXJ5QXJnPXthYm9ydDpNcixhc3NlcnQ6aCxlbmxhcmdlTWVtb3J5OnosZ2V0VG90YWxNZW1vcnk6ZnVuY3Rpb24oKXtyZXR1cm4gSH0sYWJvcnRPbkNhbm5vdEdyb3dNZW1vcnk6ZnVuY3Rpb24oKXtNcigiQ2Fubm90IGVubGFyZ2UgbWVtb3J5IGFycmF5cy4gRWl0aGVyICgxKSBjb21waWxlIHdpdGggIC1zIFRPVEFMX01FTU9SWT1YICB3aXRoIFggaGlnaGVyIHRoYW4gdGhlIGN1cnJlbnQgdmFsdWUgIitIKyIsICgyKSBjb21waWxlIHdpdGggIC1zIEFMTE9XX01FTU9SWV9HUk9XVEg9MSAgd2hpY2ggYWxsb3dzIGluY3JlYXNpbmcgdGhlIHNpemUgYXQgcnVudGltZSBidXQgcHJldmVudHMgc29tZSBvcHRpbWl6YXRpb25zLCAoMykgc2V0IE1vZHVsZS5UT1RBTF9NRU1PUlkgdG8gYSBoaWdoZXIgdmFsdWUgYmVmb3JlIHRoZSBwcm9ncmFtIHJ1bnMsIG9yICg0KSBpZiB5b3Ugd2FudCBtYWxsb2MgdG8gcmV0dXJuIE5VTEwgKDApIGluc3RlYWQgb2YgdGhpcyBhYm9ydCwgY29tcGlsZSB3aXRoICAtcyBBQk9SVElOR19NQUxMT0M9MCAiKX0saW52b2tlX2k6ZnVuY3Rpb24oQSl7dHJ5e3JldHVybiBkLmR5bkNhbGxfaShBKX1jYXRjaChBKXtpZigibnVtYmVyIiE9dHlwZW9mIEEmJiJsb25nam1wIiE9PUEpdGhyb3cgQTtkLnNldFRocmV3KDEsMCl9fSxpbnZva2VfaWk6ZnVuY3Rpb24oQSxlKXt0cnl7cmV0dXJuIGQuZHluQ2FsbF9paShBLGUpfWNhdGNoKEEpe2lmKCJudW1iZXIiIT10eXBlb2YgQSYmImxvbmdqbXAiIT09QSl0aHJvdyBBO2Quc2V0VGhyZXcoMSwwKX19LGludm9rZV9paWk6ZnVuY3Rpb24oQSxlLHIpe3RyeXtyZXR1cm4gZC5keW5DYWxsX2lpaShBLGUscil9Y2F0Y2goQSl7aWYoIm51bWJlciIhPXR5cGVvZiBBJiYibG9uZ2ptcCIhPT1BKXRocm93IEE7ZC5zZXRUaHJldygxLDApfX0saW52b2tlX2lpaWk6ZnVuY3Rpb24oQSxlLHIsaSl7dHJ5e3JldHVybiBkLmR5bkNhbGxfaWlpaShBLGUscixpKX1jYXRjaChBKXtpZigibnVtYmVyIiE9dHlwZW9mIEEmJiJsb25nam1wIiE9PUEpdGhyb3cgQTtkLnNldFRocmV3KDEsMCl9fSxpbnZva2VfaWlpaWk6ZnVuY3Rpb24oQSxlLHIsaSxmKXt0cnl7cmV0dXJuIGQuZHluQ2FsbF9paWlpaShBLGUscixpLGYpfWNhdGNoKEEpe2lmKCJudW1iZXIiIT10eXBlb2YgQSYmImxvbmdqbXAiIT09QSl0aHJvdyBBO2Quc2V0VGhyZXcoMSwwKX19LGludm9rZV9paWlpaWQ6ZnVuY3Rpb24oQSxlLHIsaSxmLG4pe3RyeXtyZXR1cm4gZC5keW5DYWxsX2lpaWlpZChBLGUscixpLGYsbil9Y2F0Y2goQSl7aWYoIm51bWJlciIhPXR5cGVvZiBBJiYibG9uZ2ptcCIhPT1BKXRocm93IEE7ZC5zZXRUaHJldygxLDApfX0saW52b2tlX2lpaWlpaTpmdW5jdGlvbihBLGUscixpLGYsbil7dHJ5e3JldHVybiBkLmR5bkNhbGxfaWlpaWlpKEEsZSxyLGksZixuKX1jYXRjaChBKXtpZigibnVtYmVyIiE9dHlwZW9mIEEmJiJsb25nam1wIiE9PUEpdGhyb3cgQTtkLnNldFRocmV3KDEsMCl9fSxpbnZva2VfaWlpaWlpZDpmdW5jdGlvbihBLGUscixpLGYsbix0KXt0cnl7cmV0dXJuIGQuZHluQ2FsbF9paWlpaWlkKEEsZSxyLGksZixuLHQpfWNhdGNoKEEpe2lmKCJudW1iZXIiIT10eXBlb2YgQSYmImxvbmdqbXAiIT09QSl0aHJvdyBBO2Quc2V0VGhyZXcoMSwwKX19LGludm9rZV9paWlpaWlpOmZ1bmN0aW9uKEEsZSxyLGksZixuLHQpe3RyeXtyZXR1cm4gZC5keW5DYWxsX2lpaWlpaWkoQSxlLHIsaSxmLG4sdCl9Y2F0Y2goQSl7aWYoIm51bWJlciIhPXR5cGVvZiBBJiYibG9uZ2ptcCIhPT1BKXRocm93IEE7ZC5zZXRUaHJldygxLDApfX0saW52b2tlX2lpaWlpaWlpOmZ1bmN0aW9uKEEsZSxyLGksZixuLHQsbyl7dHJ5e3JldHVybiBkLmR5bkNhbGxfaWlpaWlpaWkoQSxlLHIsaSxmLG4sdCxvKX1jYXRjaChBKXtpZigibnVtYmVyIiE9dHlwZW9mIEEmJiJsb25nam1wIiE9PUEpdGhyb3cgQTtkLnNldFRocmV3KDEsMCl9fSxpbnZva2VfaWlpaWlpaWlpOmZ1bmN0aW9uKEEsZSxyLGksZixuLHQsbyxhKXt0cnl7cmV0dXJuIGQuZHluQ2FsbF9paWlpaWlpaWkoQSxlLHIsaSxmLG4sdCxvLGEpfWNhdGNoKEEpe2lmKCJudW1iZXIiIT10eXBlb2YgQSYmImxvbmdqbXAiIT09QSl0aHJvdyBBO2Quc2V0VGhyZXcoMSwwKX19LGludm9rZV92OmZ1bmN0aW9uKEEpe3RyeXtkLmR5bkNhbGxfdihBKX1jYXRjaChBKXtpZigibnVtYmVyIiE9dHlwZW9mIEEmJiJsb25nam1wIiE9PUEpdGhyb3cgQTtkLnNldFRocmV3KDEsMCl9fSxpbnZva2Vfdmk6ZnVuY3Rpb24oQSxlKXt0cnl7ZC5keW5DYWxsX3ZpKEEsZSl9Y2F0Y2goQSl7aWYoIm51bWJlciIhPXR5cGVvZiBBJiYibG9uZ2ptcCIhPT1BKXRocm93IEE7ZC5zZXRUaHJldygxLDApfX0saW52b2tlX3ZpaTpmdW5jdGlvbihBLGUscil7dHJ5e2QuZHluQ2FsbF92aWkoQSxlLHIpfWNhdGNoKEEpe2lmKCJudW1iZXIiIT10eXBlb2YgQSYmImxvbmdqbXAiIT09QSl0aHJvdyBBO2Quc2V0VGhyZXcoMSwwKX19LGludm9rZV92aWlpOmZ1bmN0aW9uKEEsZSxyLGkpe3RyeXtkLmR5bkNhbGxfdmlpaShBLGUscixpKX1jYXRjaChBKXtpZigibnVtYmVyIiE9dHlwZW9mIEEmJiJsb25nam1wIiE9PUEpdGhyb3cgQTtkLnNldFRocmV3KDEsMCl9fSxpbnZva2VfdmlpaWk6ZnVuY3Rpb24oQSxlLHIsaSxmKXt0cnl7ZC5keW5DYWxsX3ZpaWlpKEEsZSxyLGksZil9Y2F0Y2goQSl7aWYoIm51bWJlciIhPXR5cGVvZiBBJiYibG9uZ2ptcCIhPT1BKXRocm93IEE7ZC5zZXRUaHJldygxLDApfX0saW52b2tlX3ZpaWlpaTpmdW5jdGlvbihBLGUscixpLGYsbil7dHJ5e2QuZHluQ2FsbF92aWlpaWkoQSxlLHIsaSxmLG4pfWNhdGNoKEEpe2lmKCJudW1iZXIiIT10eXBlb2YgQSYmImxvbmdqbXAiIT09QSl0aHJvdyBBO2Quc2V0VGhyZXcoMSwwKX19LGludm9rZV92aWlpaWlpOmZ1bmN0aW9uKEEsZSxyLGksZixuLHQpe3RyeXtkLmR5bkNhbGxfdmlpaWlpaShBLGUscixpLGYsbix0KX1jYXRjaChBKXtpZigibnVtYmVyIiE9dHlwZW9mIEEmJiJsb25nam1wIiE9PUEpdGhyb3cgQTtkLnNldFRocmV3KDEsMCl9fSxpbnZva2VfdmlpaWlpaWk6ZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCxvKXt0cnl7ZC5keW5DYWxsX3ZpaWlpaWlpKEEsZSxyLGksZixuLHQsbyl9Y2F0Y2goQSl7aWYoIm51bWJlciIhPXR5cGVvZiBBJiYibG9uZ2ptcCIhPT1BKXRocm93IEE7ZC5zZXRUaHJldygxLDApfX0saW52b2tlX3ZpaWlpaWlpaTpmdW5jdGlvbihBLGUscixpLGYsbix0LG8sYSl7dHJ5e2QuZHluQ2FsbF92aWlpaWlpaWkoQSxlLHIsaSxmLG4sdCxvLGEpfWNhdGNoKEEpe2lmKCJudW1iZXIiIT10eXBlb2YgQSYmImxvbmdqbXAiIT09QSl0aHJvdyBBO2Quc2V0VGhyZXcoMSwwKX19LGludm9rZV92aWlpaWlpaWlpOmZ1bmN0aW9uKEEsZSxyLGksZixuLHQsbyxhLGMpe3RyeXtkLmR5bkNhbGxfdmlpaWlpaWlpaShBLGUscixpLGYsbix0LG8sYSxjKX1jYXRjaChBKXtpZigibnVtYmVyIiE9dHlwZW9mIEEmJiJsb25nam1wIiE9PUEpdGhyb3cgQTtkLnNldFRocmV3KDEsMCl9fSxpbnZva2VfdmlpaWlpaWlpaWk6ZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCxvLGEsYyxsKXt0cnl7ZC5keW5DYWxsX3ZpaWlpaWlpaWlpKEEsZSxyLGksZixuLHQsbyxhLGMsbCl9Y2F0Y2goQSl7aWYoIm51bWJlciIhPXR5cGVvZiBBJiYibG9uZ2ptcCIhPT1BKXRocm93IEE7ZC5zZXRUaHJldygxLDApfX0saW52b2tlX3ZpaWlpaWlpaWlpaWk6ZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCxvLGEsYyxsLHUsYil7dHJ5e2QuZHluQ2FsbF92aWlpaWlpaWlpaWlpKEEsZSxyLGksZixuLHQsbyxhLGMsbCx1LGIpfWNhdGNoKEEpe2lmKCJudW1iZXIiIT10eXBlb2YgQSYmImxvbmdqbXAiIT09QSl0aHJvdyBBO2Quc2V0VGhyZXcoMSwwKX19LGludm9rZV92aWlpaWlpaWlpaWlpaTpmdW5jdGlvbihBLGUscixpLGYsbix0LG8sYSxjLGwsdSxiLHMpe3RyeXtkLmR5bkNhbGxfdmlpaWlpaWlpaWlpaWkoQSxlLHIsaSxmLG4sdCxvLGEsYyxsLHUsYixzKX1jYXRjaChBKXtpZigibnVtYmVyIiE9dHlwZW9mIEEmJiJsb25nam1wIiE9PUEpdGhyb3cgQTtkLnNldFRocmV3KDEsMCl9fSxDbGFzc0hhbmRsZTpvZSxDbGFzc0hhbmRsZV9jbG9uZTpxQSxDbGFzc0hhbmRsZV9kZWxldGU6QWUsQ2xhc3NIYW5kbGVfZGVsZXRlTGF0ZXI6bmUsQ2xhc3NIYW5kbGVfaXNBbGlhc09mOlBBLENsYXNzSGFuZGxlX2lzRGVsZXRlZDplZSxSZWdpc3RlcmVkQ2xhc3M6dWUsUmVnaXN0ZXJlZFBvaW50ZXI6R2UsUmVnaXN0ZXJlZFBvaW50ZXJfZGVsZXRlT2JqZWN0OnZlLFJlZ2lzdGVyZWRQb2ludGVyX2Rlc3RydWN0b3I6d2UsUmVnaXN0ZXJlZFBvaW50ZXJfZnJvbVdpcmVUeXBlOkllLFJlZ2lzdGVyZWRQb2ludGVyX2dldFBvaW50ZWU6aGUsX19aU3QxOHVuY2F1Z2h0X2V4Y2VwdGlvbnY6ZEEsX19fYXNzZXJ0X2ZhaWw6ZnVuY3Rpb24oQSxlLHIsaSl7dGhyb3cgbj0hMCwiQXNzZXJ0aW9uIGZhaWxlZDogIitnKEEpKyIsIGF0OiAiK1tlP2coZSk6InVua25vd24gZmlsZW5hbWUiLHIsaT9nKGkpOiJ1bmtub3duIGZ1bmN0aW9uIl0rIiBhdCAiK3AoKX0sX19fYnVpbGRFbnZpcm9ubWVudDplcixfX19jeGFfYWxsb2NhdGVfZXhjZXB0aW9uOmZ1bmN0aW9uKEEpe3JldHVybiBHcihBKX0sX19fY3hhX2JlZ2luX2NhdGNoOmZ1bmN0aW9uKEEpe3ZhciBlPWtBLmluZm9zW0FdO3JldHVybiBlJiYhZS5jYXVnaHQmJihlLmNhdWdodD0hMCxkQS51bmNhdWdodF9leGNlcHRpb24tLSksZSYmKGUucmV0aHJvd249ITEpLGtBLmNhdWdodC5wdXNoKEEpLGtBLmFkZFJlZihrQS5kZUFkanVzdChBKSksQX0sX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2g6ZnVuY3Rpb24gQSgpe3ZhciBlPWtBLmxhc3Q7aWYoIWUpcmV0dXJuIDB8KGsuc2V0VGVtcFJldDAoMCksMCk7dmFyIHI9a0EuaW5mb3NbZV0saT1yLnR5cGU7aWYoIWkpcmV0dXJuIDB8KGsuc2V0VGVtcFJldDAoMCksZSk7dmFyIGY9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtkLl9fX2N4YV9pc19wb2ludGVyX3R5cGUoaSk7QS5idWZmZXJ8fChBLmJ1ZmZlcj1Hcig0KSksSVtBLmJ1ZmZlcj4+Ml09ZSxlPUEuYnVmZmVyO2Zvcih2YXIgbj0wO248Zi5sZW5ndGg7bisrKWlmKGZbbl0mJmQuX19fY3hhX2Nhbl9jYXRjaChmW25dLGksZSkpcmV0dXJuIGU9SVtlPj4yXSxyLmFkanVzdGVkPWUsMHwoay5zZXRUZW1wUmV0MChmW25dKSxlKTtyZXR1cm4gZT1JW2U+PjJdLDB8KGsuc2V0VGVtcFJldDAoaSksZSl9LF9fX2N4YV9wdXJlX3ZpcnR1YWw6ZnVuY3Rpb24oKXt0aHJvdyBuPSEwLCJQdXJlIHZpcnR1YWwgZnVuY3Rpb24gY2FsbGVkISJ9LF9fX2N4YV90aHJvdzpmdW5jdGlvbihBLGUscil7dGhyb3cga0EuaW5mb3NbQV09e3B0cjpBLGFkanVzdGVkOkEsdHlwZTplLGRlc3RydWN0b3I6cixyZWZjb3VudDowLGNhdWdodDohMSxyZXRocm93bjohMX0sa0EubGFzdD1BLCJ1bmNhdWdodF9leGNlcHRpb24iaW4gZEE/ZEEudW5jYXVnaHRfZXhjZXB0aW9uKys6ZEEudW5jYXVnaHRfZXhjZXB0aW9uPTEsQSsiIC0gRXhjZXB0aW9uIGNhdGNoaW5nIGlzIGRpc2FibGVkLCB0aGlzIGV4Y2VwdGlvbiBjYW5ub3QgYmUgY2F1Z2h0LiBDb21waWxlIHdpdGggLXMgRElTQUJMRV9FWENFUFRJT05fQ0FUQ0hJTkc9MCBvciBESVNBQkxFX0VYQ0VQVElPTl9DQVRDSElORz0yIHRvIGNhdGNoLiJ9LF9fX2d4eF9wZXJzb25hbGl0eV92MDpmdW5jdGlvbigpe30sX19fbG9jazpmdW5jdGlvbigpe30sX19fbWFwX2ZpbGU6ZnVuY3Rpb24oQSxlKXtyZXR1cm4gd0EoaEEuRVBFUk0pLC0xfSxfX19yZXN1bWVFeGNlcHRpb246ZnVuY3Rpb24oQSl7dGhyb3cga0EubGFzdHx8KGtBLmxhc3Q9QSksQSsiIC0gRXhjZXB0aW9uIGNhdGNoaW5nIGlzIGRpc2FibGVkLCB0aGlzIGV4Y2VwdGlvbiBjYW5ub3QgYmUgY2F1Z2h0LiBDb21waWxlIHdpdGggLXMgRElTQUJMRV9FWENFUFRJT05fQ0FUQ0hJTkc9MCBvciBESVNBQkxFX0VYQ0VQVElPTl9DQVRDSElORz0yIHRvIGNhdGNoLiJ9LF9fX3NldEVyck5vOndBLF9fX3N5c2NhbGwxNDA6ZnVuY3Rpb24oQSxlKXtYQS52YXJhcmdzPWU7dHJ5e3ZhciByPVhBLmdldFN0cmVhbUZyb21GRCgpLGk9KFhBLmdldCgpLFhBLmdldCgpKSxmPVhBLmdldCgpLG49WEEuZ2V0KCksdD1pO3JldHVybiBFQS5sbHNlZWsocix0LG4pLElbZj4+Ml09ci5wb3NpdGlvbixyLmdldGRlbnRzJiYwPT09dCYmMD09PW4mJihyLmdldGRlbnRzPW51bGwpLDB9Y2F0Y2goQSl7cmV0dXJuIHZvaWQgMCE9PUVBJiZBIGluc3RhbmNlb2YgRUEuRXJybm9FcnJvcnx8TXIoQSksLUEuZXJybm99fSxfX19zeXNjYWxsMTQ1OmZ1bmN0aW9uKEEsZSl7WEEudmFyYXJncz1lO3RyeXt2YXIgcj1YQS5nZXRTdHJlYW1Gcm9tRkQoKSxpPVhBLmdldCgpLGY9WEEuZ2V0KCk7cmV0dXJuIFhBLmRvUmVhZHYocixpLGYpfWNhdGNoKEEpe3JldHVybiB2b2lkIDAhPT1FQSYmQSBpbnN0YW5jZW9mIEVBLkVycm5vRXJyb3J8fE1yKEEpLC1BLmVycm5vfX0sX19fc3lzY2FsbDE0NjpmdW5jdGlvbihBLGUpe1hBLnZhcmFyZ3M9ZTt0cnl7dmFyIHI9WEEuZ2V0U3RyZWFtRnJvbUZEKCksaT1YQS5nZXQoKSxmPVhBLmdldCgpO3JldHVybiBYQS5kb1dyaXRldihyLGksZil9Y2F0Y2goQSl7cmV0dXJuIHZvaWQgMCE9PUVBJiZBIGluc3RhbmNlb2YgRUEuRXJybm9FcnJvcnx8TXIoQSksLUEuZXJybm99fSxfX19zeXNjYWxsNTQ6ZnVuY3Rpb24oQSxlKXtYQS52YXJhcmdzPWU7dHJ5e3ZhciByPVhBLmdldFN0cmVhbUZyb21GRCgpLGk9WEEuZ2V0KCk7c3dpdGNoKGkpe2Nhc2UgMjE1MDU6Y2FzZSAyMTUwNjpyZXR1cm4gci50dHk/MDotaEEuRU5PVFRZO2Nhc2UgMjE1MTk6aWYoIXIudHR5KXJldHVybi1oQS5FTk9UVFk7dmFyIGY9WEEuZ2V0KCk7cmV0dXJuIElbZj4+Ml09MDtjYXNlIDIxNTIwOnJldHVybiByLnR0eT8taEEuRUlOVkFMOi1oQS5FTk9UVFk7Y2FzZSAyMTUzMTpmPVhBLmdldCgpO3JldHVybiBFQS5pb2N0bChyLGksZik7Y2FzZSAyMTUyMzpyZXR1cm4gci50dHk/MDotaEEuRU5PVFRZO2RlZmF1bHQ6TXIoImJhZCBpb2N0bCBzeXNjYWxsICIraSl9fWNhdGNoKEEpe3JldHVybiB2b2lkIDAhPT1FQSYmQSBpbnN0YW5jZW9mIEVBLkVycm5vRXJyb3J8fE1yKEEpLC1BLmVycm5vfX0sX19fc3lzY2FsbDY6ZnVuY3Rpb24oQSxlKXtYQS52YXJhcmdzPWU7dHJ5e3ZhciByPVhBLmdldFN0cmVhbUZyb21GRCgpO3JldHVybiBFQS5jbG9zZShyKSwwfWNhdGNoKEEpe3JldHVybiB2b2lkIDAhPT1FQSYmQSBpbnN0YW5jZW9mIEVBLkVycm5vRXJyb3J8fE1yKEEpLC1BLmVycm5vfX0sX19fc3lzY2FsbDkxOmZ1bmN0aW9uKEEsZSl7WEEudmFyYXJncz1lO3RyeXt2YXIgcj1YQS5nZXQoKSxpPVhBLmdldCgpLGY9WEEubWFwcGluZ3Nbcl07aWYoIWYpcmV0dXJuIDA7aWYoaT09PWYubGVuKXt2YXIgbj1FQS5nZXRTdHJlYW0oZi5mZCk7WEEuZG9Nc3luYyhyLG4saSxmLmZsYWdzKSxFQS5tdW5tYXAobiksWEEubWFwcGluZ3Nbcl09bnVsbCxmLmFsbG9jYXRlZCYmQ3IoZi5tYWxsb2MpfXJldHVybiAwfWNhdGNoKEEpe3JldHVybiB2b2lkIDAhPT1FQSYmQSBpbnN0YW5jZW9mIEVBLkVycm5vRXJyb3J8fE1yKEEpLC1BLmVycm5vfX0sX19fdW5sb2NrOmZ1bmN0aW9uKCl7fSxfX2FkZERheXM6Y3IsX19hcnJheVN1bTp0cixfX2VtYmluZF9maW5hbGl6ZV92YWx1ZV9vYmplY3Q6ZnVuY3Rpb24oQSl7dmFyIGU9SUFbQV07ZGVsZXRlIElBW0FdO3ZhciBmPWUucmF3Q29uc3RydWN0b3Isbj1lLnJhd0Rlc3RydWN0b3IsdT1lLmZpZWxkcztUQShbQV0sdS5tYXAoZnVuY3Rpb24oQSl7cmV0dXJuIEEuZ2V0dGVyUmV0dXJuVHlwZX0pLmNvbmNhdCh1Lm1hcChmdW5jdGlvbihBKXtyZXR1cm4gQS5zZXR0ZXJBcmd1bWVudFR5cGV9KSksZnVuY3Rpb24oYyl7dmFyIGw9e307cmV0dXJuIHUuZm9yRWFjaChmdW5jdGlvbihBLGUpe3ZhciByPUEuZmllbGROYW1lLGk9Y1tlXSxmPUEuZ2V0dGVyLG49QS5nZXR0ZXJDb250ZXh0LHQ9Y1tlK3UubGVuZ3RoXSxvPUEuc2V0dGVyLGE9QS5zZXR0ZXJDb250ZXh0O2xbcl09e3JlYWQ6ZnVuY3Rpb24oQSl7cmV0dXJuIGkuZnJvbVdpcmVUeXBlKGYobixBKSl9LHdyaXRlOmZ1bmN0aW9uKEEsZSl7dmFyIHI9W107byhhLEEsdC50b1dpcmVUeXBlKHIsZSkpLENBKHIpfX19KSxbe25hbWU6ZS5uYW1lLGZyb21XaXJlVHlwZTpmdW5jdGlvbihBKXt2YXIgZT17fTtmb3IodmFyIHIgaW4gbCllW3JdPWxbcl0ucmVhZChBKTtyZXR1cm4gbihBKSxlfSx0b1dpcmVUeXBlOmZ1bmN0aW9uKEEsZSl7Zm9yKHZhciByIGluIGwpaWYoIShyIGluIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIk1pc3NpbmcgZmllbGQiKTt2YXIgaT1mKCk7Zm9yKHIgaW4gbClsW3JdLndyaXRlKGksZVtyXSk7cmV0dXJuIG51bGwhPT1BJiZBLnB1c2gobixpKSxpfSxhcmdQYWNrQWR2YW5jZTo4LHJlYWRWYWx1ZUZyb21Qb2ludGVyOkdBLGRlc3RydWN0b3JGdW5jdGlvbjpufV19KX0sX19lbWJpbmRfcmVnaXN0ZXJfYm9vbDpmdW5jdGlvbihBLHIsaSxmLG4pe3ZhciB0PVVBKGkpO3hBKEEse25hbWU6cj16QShyKSxmcm9tV2lyZVR5cGU6ZnVuY3Rpb24oQSl7cmV0dXJuISFBfSx0b1dpcmVUeXBlOmZ1bmN0aW9uKEEsZSl7cmV0dXJuIGU/ZjpufSxhcmdQYWNrQWR2YW5jZTo4LHJlYWRWYWx1ZUZyb21Qb2ludGVyOmZ1bmN0aW9uKEEpe3ZhciBlO2lmKDE9PT1pKWU9QjtlbHNlIGlmKDI9PT1pKWU9WDtlbHNle2lmKDQhPT1pKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gYm9vbGVhbiB0eXBlIHNpemU6ICIrcik7ZT1JfXJldHVybiB0aGlzLmZyb21XaXJlVHlwZShlW0E+PnRdKX0sZGVzdHJ1Y3RvckZ1bmN0aW9uOm51bGx9KX0sX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3M6ZnVuY3Rpb24oYyxBLGUsbCxyLHUsaSxiLGYscyxkLG4sayl7ZD16QShkKSx1PUZlKHIsdSksYj1iJiZGZShpLGIpLHM9cyYmRmUoZixzKSxrPUZlKG4sayk7dmFyIGg9WUEoZCk7bGUoaCxmdW5jdGlvbigpe19lKCJDYW5ub3QgY29uc3RydWN0ICIrZCsiIGR1ZSB0byB1bmJvdW5kIHR5cGVzIixbbF0pfSksVEEoW2MsQSxlXSxsP1tsXTpbXSxmdW5jdGlvbihBKXt2YXIgZSxyO0E9QVswXSxyPWw/KGU9QS5yZWdpc3RlcmVkQ2xhc3MpLmluc3RhbmNlUHJvdG90eXBlOm9lLnByb3RvdHlwZTt2YXIgaT1RQShoLGZ1bmN0aW9uKCl7aWYoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpIT09Zil0aHJvdyBuZXcgakEoIlVzZSAnbmV3JyB0byBjb25zdHJ1Y3QgIitkKTtpZih2b2lkIDA9PT1uLmNvbnN0cnVjdG9yX2JvZHkpdGhyb3cgbmV3IGpBKGQrIiBoYXMgbm8gYWNjZXNzaWJsZSBjb25zdHJ1Y3RvciIpO3ZhciBBPW4uY29uc3RydWN0b3JfYm9keVthcmd1bWVudHMubGVuZ3RoXTtpZih2b2lkIDA9PT1BKXRocm93IG5ldyBqQSgiVHJpZWQgdG8gaW52b2tlIGN0b3Igb2YgIitkKyIgd2l0aCBpbnZhbGlkIG51bWJlciBvZiBwYXJhbWV0ZXJzICgiK2FyZ3VtZW50cy5sZW5ndGgrIikgLSBleHBlY3RlZCAoIitPYmplY3Qua2V5cyhuLmNvbnN0cnVjdG9yX2JvZHkpLnRvU3RyaW5nKCkrIikgcGFyYW1ldGVycyBpbnN0ZWFkISIpO3JldHVybiBBLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGY9T2JqZWN0LmNyZWF0ZShyLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6aX19KTtpLnByb3RvdHlwZT1mO3ZhciBuPW5ldyB1ZShkLGksZixrLGUsdSxiLHMpLHQ9bmV3IEdlKGQsbiwhMCwhMSwhMSksbz1uZXcgR2UoZCsiKiIsbiwhMSwhMSwhMSksYT1uZXcgR2UoZCsiIGNvbnN0KiIsbiwhMSwhMCwhMSk7cmV0dXJuIGFlW2NdPXtwb2ludGVyVHlwZTpvLGNvbnN0UG9pbnRlclR5cGU6YX0sVmUoaCxpKSxbdCxvLGFdfSl9LF9fZW1iaW5kX3JlZ2lzdGVyX2VtdmFsOmZ1bmN0aW9uKEEsZSl7eEEoQSx7bmFtZTplPXpBKGUpLGZyb21XaXJlVHlwZTpmdW5jdGlvbihBKXt2YXIgZT1RZVtBXS52YWx1ZTtyZXR1cm4gRGUoQSksZX0sdG9XaXJlVHlwZTpmdW5jdGlvbihBLGUpe3JldHVybiBVZShlKX0sYXJnUGFja0FkdmFuY2U6OCxyZWFkVmFsdWVGcm9tUG9pbnRlcjpHQSxkZXN0cnVjdG9yRnVuY3Rpb246bnVsbH0pfSxfX2VtYmluZF9yZWdpc3Rlcl9lbnVtOmZ1bmN0aW9uKEEsZSxyLGkpe3ZhciBmPVVBKHIpO2Z1bmN0aW9uIG4oKXt9ZT16QShlKSxuLnZhbHVlcz17fSx4QShBLHtuYW1lOmUsY29uc3RydWN0b3I6bixmcm9tV2lyZVR5cGU6ZnVuY3Rpb24oQSl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IudmFsdWVzW0FdfSx0b1dpcmVUeXBlOmZ1bmN0aW9uKEEsZSl7cmV0dXJuIGUudmFsdWV9LGFyZ1BhY2tBZHZhbmNlOjgscmVhZFZhbHVlRnJvbVBvaW50ZXI6U2UoZSxmLGkpLGRlc3RydWN0b3JGdW5jdGlvbjpudWxsfSksbGUoZSxuKX0sX19lbWJpbmRfcmVnaXN0ZXJfZW51bV92YWx1ZTpmdW5jdGlvbihBLGUscil7dmFyIGk9T2UoQSwiZW51bSIpO2U9ekEoZSk7dmFyIGY9aS5jb25zdHJ1Y3RvcixuPU9iamVjdC5jcmVhdGUoaS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUse3ZhbHVlOnt2YWx1ZTpyfSxjb25zdHJ1Y3Rvcjp7dmFsdWU6UUEoaS5uYW1lKyJfIitlLGZ1bmN0aW9uKCl7fSl9fSk7Zi52YWx1ZXNbcl09bixmW2VdPW59LF9fZW1iaW5kX3JlZ2lzdGVyX2Zsb2F0OmZ1bmN0aW9uKEEsZSxyKXt2YXIgaT1VQShyKTt4QShBLHtuYW1lOmU9ekEoZSksZnJvbVdpcmVUeXBlOmZ1bmN0aW9uKEEpe3JldHVybiBBfSx0b1dpcmVUeXBlOmZ1bmN0aW9uKEEsZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlJiYiYm9vbGVhbiIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0ICInK3plKGUpKyciIHRvICcrdGhpcy5uYW1lKTtyZXR1cm4gZX0sYXJnUGFja0FkdmFuY2U6OCxyZWFkVmFsdWVGcm9tUG9pbnRlcjpqZShlLGkpLGRlc3RydWN0b3JGdW5jdGlvbjpudWxsfSl9LF9fZW1iaW5kX3JlZ2lzdGVyX2Z1bmN0aW9uOmZ1bmN0aW9uKHIsaSxBLGUsZixuKXt2YXIgdD1QZShpLEEpO3I9ekEociksZj1GZShlLGYpLGxlKHIsZnVuY3Rpb24oKXtfZSgiQ2Fubm90IGNhbGwgIityKyIgZHVlIHRvIHVuYm91bmQgdHlwZXMiLHQpfSxpLTEpLFRBKFtdLHQsZnVuY3Rpb24oQSl7dmFyIGU9W0FbMF0sbnVsbF0uY29uY2F0KEEuc2xpY2UoMSkpO3JldHVybiBWZShyLHhlKHIsZSxudWxsLGYsbiksaS0xKSxbXX0pfSxfX2VtYmluZF9yZWdpc3Rlcl9pbnRlZ2VyOmZ1bmN0aW9uKEEscixlLGksZil7cj16QShyKSwtMT09PWYmJihmPTQyOTQ5NjcyOTUpO3ZhciBuPVVBKGUpLHQ9ZnVuY3Rpb24oQSl7cmV0dXJuIEF9O2lmKDA9PT1pKXt2YXIgbz0zMi04KmU7dD1mdW5jdGlvbihBKXtyZXR1cm4gQTw8bz4+Pm99fXZhciBhPS0xIT1yLmluZGV4T2YoInVuc2lnbmVkIik7eEEoQSx7bmFtZTpyLGZyb21XaXJlVHlwZTp0LHRvV2lyZVR5cGU6ZnVuY3Rpb24oQSxlKXtpZigibnVtYmVyIiE9dHlwZW9mIGUmJiJib29sZWFuIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgIicremUoZSkrJyIgdG8gJyt0aGlzLm5hbWUpO2lmKGU8aXx8ZjxlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1Bhc3NpbmcgYSBudW1iZXIgIicremUoZSkrJyIgZnJvbSBKUyBzaWRlIHRvIEMvQysrIHNpZGUgdG8gYW4gYXJndW1lbnQgb2YgdHlwZSAiJytyKyciLCB3aGljaCBpcyBvdXRzaWRlIHRoZSB2YWxpZCByYW5nZSBbJytpKyIsICIrZisiXSEiKTtyZXR1cm4gYT9lPj4+MDowfGV9LGFyZ1BhY2tBZHZhbmNlOjgscmVhZFZhbHVlRnJvbVBvaW50ZXI6TGUocixuLDAhPT1pKSxkZXN0cnVjdG9yRnVuY3Rpb246bnVsbH0pfSxfX2VtYmluZF9yZWdpc3Rlcl9tZW1vcnlfdmlldzpmdW5jdGlvbihBLGUscil7dmFyIGk9W0ludDhBcnJheSxVaW50OEFycmF5LEludDE2QXJyYXksVWludDE2QXJyYXksSW50MzJBcnJheSxVaW50MzJBcnJheSxGbG9hdDMyQXJyYXksRmxvYXQ2NEFycmF5XVtlXTtmdW5jdGlvbiBmKEEpe3ZhciBlPUNbQT4+PTJdLHI9Q1tBKzFdO3JldHVybiBuZXcgaShDLmJ1ZmZlcixyLGUpfXhBKEEse25hbWU6cj16QShyKSxmcm9tV2lyZVR5cGU6ZixhcmdQYWNrQWR2YW5jZTo4LHJlYWRWYWx1ZUZyb21Qb2ludGVyOmZ9LHtpZ25vcmVEdXBsaWNhdGVSZWdpc3RyYXRpb25zOiEwfSl9LF9fZW1iaW5kX3JlZ2lzdGVyX3N0ZF9zdHJpbmc6ZnVuY3Rpb24oQSxlKXt4QShBLHtuYW1lOmU9ekEoZSksZnJvbVdpcmVUeXBlOmZ1bmN0aW9uKEEpe2Zvcih2YXIgZT1DW0E+PjJdLHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7KytpKXJbaV09U3RyaW5nLmZyb21DaGFyQ29kZShFW0ErNCtpXSk7cmV0dXJuIENyKEEpLHIuam9pbigiIil9LHRvV2lyZVR5cGU6ZnVuY3Rpb24oQSxlKXtmdW5jdGlvbiByKEEsZSl7cmV0dXJuIEFbZV19dmFyIGk7ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyJiYoZT1uZXcgVWludDhBcnJheShlKSksZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fGUgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheXx8ZSBpbnN0YW5jZW9mIEludDhBcnJheT9pPXI6InN0cmluZyI9PXR5cGVvZiBlP2k9ZnVuY3Rpb24oQSxlKXtyZXR1cm4gQS5jaGFyQ29kZUF0KGUpfTpIQSgiQ2Fubm90IHBhc3Mgbm9uLXN0cmluZyB0byBzdGQ6OnN0cmluZyIpO3ZhciBmPWUubGVuZ3RoLG49R3IoNCtmKTtDW24+PjJdPWY7Zm9yKHZhciB0PTA7dDxmOysrdCl7dmFyIG89aShlLHQpOzI1NTxvJiYoQ3IobiksSEEoIlN0cmluZyBoYXMgVVRGLTE2IGNvZGUgdW5pdHMgdGhhdCBkbyBub3QgZml0IGluIDggYml0cyIpKSxFW24rNCt0XT1vfXJldHVybiBudWxsIT09QSYmQS5wdXNoKENyLG4pLG59LGFyZ1BhY2tBZHZhbmNlOjgscmVhZFZhbHVlRnJvbVBvaW50ZXI6R0EsZGVzdHJ1Y3RvckZ1bmN0aW9uOmZ1bmN0aW9uKEEpe0NyKEEpfX0pfSxfX2VtYmluZF9yZWdpc3Rlcl9zdGRfd3N0cmluZzpmdW5jdGlvbihBLG8sZSl7dmFyIGEsYztlPXpBKGUpLDI9PT1vPyhhPWZ1bmN0aW9uKCl7cmV0dXJuIFd9LGM9MSk6ND09PW8mJihhPWZ1bmN0aW9uKCl7cmV0dXJuIEN9LGM9MikseEEoQSx7bmFtZTplLGZyb21XaXJlVHlwZTpmdW5jdGlvbihBKXtmb3IodmFyIGU9YSgpLHI9Q1tBPj4yXSxpPW5ldyBBcnJheShyKSxmPUErND4+YyxuPTA7bjxyOysrbilpW25dPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtmK25dKTtyZXR1cm4gQ3IoQSksaS5qb2luKCIiKX0sdG9XaXJlVHlwZTpmdW5jdGlvbihBLGUpe3ZhciByPWEoKSxpPWUubGVuZ3RoLGY9R3IoNCtpKm8pO0NbZj4+Ml09aTtmb3IodmFyIG49Zis0Pj5jLHQ9MDt0PGk7Kyt0KXJbbit0XT1lLmNoYXJDb2RlQXQodCk7cmV0dXJuIG51bGwhPT1BJiZBLnB1c2goQ3IsZiksZn0sYXJnUGFja0FkdmFuY2U6OCxyZWFkVmFsdWVGcm9tUG9pbnRlcjpHQSxkZXN0cnVjdG9yRnVuY3Rpb246ZnVuY3Rpb24oQSl7Q3IoQSl9fSl9LF9fZW1iaW5kX3JlZ2lzdGVyX3ZhbHVlX29iamVjdDpmdW5jdGlvbihBLGUscixpLGYsbil7SUFbQV09e25hbWU6ekEoZSkscmF3Q29uc3RydWN0b3I6RmUocixpKSxyYXdEZXN0cnVjdG9yOkZlKGYsbiksZmllbGRzOltdfX0sX19lbWJpbmRfcmVnaXN0ZXJfdmFsdWVfb2JqZWN0X2ZpZWxkOmZ1bmN0aW9uKEEsZSxyLGksZixuLHQsbyxhLGMpe0lBW0FdLmZpZWxkcy5wdXNoKHtmaWVsZE5hbWU6ekEoZSksZ2V0dGVyUmV0dXJuVHlwZTpyLGdldHRlcjpGZShpLGYpLGdldHRlckNvbnRleHQ6bixzZXR0ZXJBcmd1bWVudFR5cGU6dCxzZXR0ZXI6RmUobyxhKSxzZXR0ZXJDb250ZXh0OmN9KX0sX19lbWJpbmRfcmVnaXN0ZXJfdm9pZDpmdW5jdGlvbihBLGUpe3hBKEEse2lzVm9pZDohMCxuYW1lOmU9ekEoZSksYXJnUGFja0FkdmFuY2U6MCxmcm9tV2lyZVR5cGU6ZnVuY3Rpb24oKXt9LHRvV2lyZVR5cGU6ZnVuY3Rpb24oQSxlKXt9fSl9LF9fZW12YWxfZGVjcmVmOkRlLF9fZW12YWxfaW5jcmVmOmZ1bmN0aW9uKEEpezQ8QSYmKFFlW0FdLnJlZmNvdW50Kz0xKX0sX19lbXZhbF9uZXdfYXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gVWUoW10pfSxfX2VtdmFsX25ld19jc3RyaW5nOmZ1bmN0aW9uKEEpe3JldHVybiBVZShxZShBKSl9LF9fZW12YWxfbmV3X29iamVjdDpmdW5jdGlvbigpe3JldHVybiBVZSh7fSl9LF9fZW12YWxfcmVnaXN0ZXI6VWUsX19lbXZhbF9zZXRfcHJvcGVydHk6ZnVuY3Rpb24oQSxlLHIpe0E9JGUoQSksZT0kZShlKSxyPSRlKHIpLEFbZV09cn0sX19lbXZhbF90YWtlX3ZhbHVlOmZ1bmN0aW9uKEEsZSl7cmV0dXJuIFVlKChBPU9lKEEsIl9lbXZhbF90YWtlX3ZhbHVlIikpLnJlYWRWYWx1ZUZyb21Qb2ludGVyKGUpKX0sX19pc0xlYXBZZWFyOm5yLF9hYm9ydDpmdW5jdGlvbigpe2QuYWJvcnQoKX0sX2VtYmluZF9yZXByOnplLF9lbXNjcmlwdGVuX21lbWNweV9iaWc6ZnVuY3Rpb24oQSxlLHIpe3JldHVybiBFLnNldChFLnN1YmFycmF5KGUsZStyKSxBKSxBfSxfZ2V0ZW52OmZ1bmN0aW9uIEEoZSl7cmV0dXJuIDA9PT1lPzA6KGU9ZyhlKSxyci5oYXNPd25Qcm9wZXJ0eShlKT8oQS5yZXQmJkNyKEEucmV0KSxBLnJldD1hKGRyKHJyW2VdKSwiaTgiLHQpKTowKX0sX3B0aHJlYWRfY29uZF9kZXN0cm95OmZ1bmN0aW9uKCl7cmV0dXJuIDB9LF9wdGhyZWFkX2NvbmRfaW5pdDpmdW5jdGlvbigpe3JldHVybiAwfSxfcHRocmVhZF9jb25kX3NpZ25hbDpmdW5jdGlvbigpe3JldHVybiAwfSxfcHRocmVhZF9jb25kX3dhaXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMH0sX3B0aHJlYWRfZ2V0c3BlY2lmaWM6ZnVuY3Rpb24oQSl7cmV0dXJuIGlyW0FdfHwwfSxfcHRocmVhZF9qb2luOmZ1bmN0aW9uKCl7fSxfcHRocmVhZF9rZXlfY3JlYXRlOmZ1bmN0aW9uKEEsZSl7cmV0dXJuIDA9PUE/aEEuRUlOVkFMOihJW0E+PjJdPWZyLGlyW2ZyXT0wLGZyKyssMCl9LF9wdGhyZWFkX211dGV4X2Rlc3Ryb3k6ZnVuY3Rpb24oKXt9LF9wdGhyZWFkX211dGV4X2luaXQ6ZnVuY3Rpb24oKXt9LF9wdGhyZWFkX29uY2U6ZnVuY3Rpb24gQShlLHIpe0Euc2Vlbnx8KEEuc2Vlbj17fSksZSBpbiBBLnNlZW58fChkLmR5bkNhbGxfdihyKSxBLnNlZW5bZV09MSl9LF9wdGhyZWFkX3NldHNwZWNpZmljOmZ1bmN0aW9uKEEsZSl7cmV0dXJuIEEgaW4gaXI/KGlyW0FdPWUsMCk6aEEuRUlOVkFMfSxfc3RyZnRpbWU6bHIsX3N0cmZ0aW1lX2w6ZnVuY3Rpb24oQSxlLHIsaSl7cmV0dXJuIGxyKEEsZSxyLGkpfSxjb25zdE5vU21hcnRQdHJSYXdQb2ludGVyVG9XaXJlVHlwZTpzZSxjb3VudF9lbXZhbF9oYW5kbGVzOkplLGNyYWZ0SW52b2tlckZ1bmN0aW9uOnhlLGNyZWF0ZU5hbWVkRnVuY3Rpb246UUEsZG93bmNhc3RQb2ludGVyOm1lLGVtYmluZF9pbml0X2NoYXJDb2RlczpTQSxlbnN1cmVPdmVybG9hZFRhYmxlOmNlLGVudW1SZWFkVmFsdWVGcm9tUG9pbnRlcjpTZSxleHBvc2VQdWJsaWNTeW1ib2w6bGUsZXh0ZW5kRXJyb3I6REEsZmxvYXRSZWFkVmFsdWVGcm9tUG9pbnRlcjpqZSxmbHVzaFBlbmRpbmdEZWxldGVzOmZlLGdlbmVyaWNQb2ludGVyVG9XaXJlVHlwZTpkZSxnZXRCYXNlc3RQb2ludGVyOkVlLGdldEluaGVyaXRlZEluc3RhbmNlOlhlLGdldEluaGVyaXRlZEluc3RhbmNlQ291bnQ6Z2UsZ2V0TGl2ZUluaGVyaXRlZEluc3RhbmNlczpaZSxnZXRTaGlmdEZyb21TaXplOlVBLGdldFN0cmluZ09yU3ltYm9sOnFlLGdldFR5cGVOYW1lOk5lLGdldF9maXJzdF9lbXZhbDpNZSxoZWFwMzJWZWN0b3JUb0FycmF5OlBlLGluaXRfQ2xhc3NIYW5kbGU6dGUsaW5pdF9SZWdpc3RlcmVkUG9pbnRlcjpDZSxpbml0X2VtYmluZDp5ZSxpbml0X2VtdmFsOlRlLGludGVnZXJSZWFkVmFsdWVGcm9tUG9pbnRlcjpMZSxtYWtlQ2xhc3NIYW5kbGU6V2UsbWFrZUxlZ2FsRnVuY3Rpb25OYW1lOllBLG5ld186SGUsbm9uQ29uc3ROb1NtYXJ0UHRyUmF3UG9pbnRlclRvV2lyZVR5cGU6a2UscmVhZExhdGluMVN0cmluZzp6QSxyZWdpc3RlclR5cGU6eEEscmVwbGFjZVB1YmxpY1N5bWJvbDpWZSxyZXF1aXJlRnVuY3Rpb246RmUscmVxdWlyZUhhbmRsZTokZSxyZXF1aXJlUmVnaXN0ZXJlZFR5cGU6T2UscnVuRGVzdHJ1Y3RvcjokQSxydW5EZXN0cnVjdG9yczpDQSxzZXREZWxheUZ1bmN0aW9uOnBlLHNoYWxsb3dDb3B5SW50ZXJuYWxQb2ludGVyOkxBLHNpbXBsZVJlYWRWYWx1ZUZyb21Qb2ludGVyOkdBLHRocm93QmluZGluZ0Vycm9yOkhBLHRocm93SW5zdGFuY2VBbHJlYWR5RGVsZXRlZDpLQSx0aHJvd0ludGVybmFsRXJyb3I6TUEsdGhyb3dVbmJvdW5kVHlwZUVycm9yOl9lLHVwY2FzdFBvaW50ZXI6YmUsd2hlbkRlcGVuZGVudFR5cGVzQXJlUmVzb2x2ZWQ6VEEsRFlOQU1JQ1RPUF9QVFI6RCx0ZW1wRG91YmxlUHRyOnNBLEFCT1JUOm4sU1RBQ0tUT1A6XyxTVEFDS19NQVg6WSxjdHR6X2k4OldBfTt2YXIgbXIsZ3I9ZnVuY3Rpb24oQSxlLHIpe3ZhciBpPUEuSW50OEFycmF5LHRyPW5ldyBpKHIpLGY9QS5JbnQxNkFycmF5LG9yPW5ldyBmKHIpLG49QS5JbnQzMkFycmF5LGFyPW5ldyBuKHIpLHQ9QS5VaW50OEFycmF5LGNyPW5ldyB0KHIpLG89QS5VaW50MTZBcnJheSxscj1uZXcgbyhyKSxhPUEuVWludDMyQXJyYXksYz0obmV3IGEociksQS5GbG9hdDMyQXJyYXkpLGdBPW5ldyBjKHIpLGw9QS5GbG9hdDY0QXJyYXksUT1uZXcgbChyKSx1PUEuYnl0ZUxlbmd0aCxiPTB8ZS5EWU5BTUlDVE9QX1BUUixkPTB8ZS50ZW1wRG91YmxlUHRyLHVyPShlLkFCT1JULDB8ZS5TVEFDS1RPUCkscz0oZS5TVEFDS19NQVgsMHxlLmN0dHpfaTgpLGs9MCxoPUEuTmFOLHc9QS5JbmZpbml0eSxEPTAsdj1BLk1hdGguZmxvb3IsVj1BLk1hdGguYWJzLG09KEEuTWF0aC5zcXJ0LEEuTWF0aC5wb3csQS5NYXRoLmNvcyxBLk1hdGguc2luLEEuTWF0aC50YW4sQS5NYXRoLmFjb3MsQS5NYXRoLmFzaW4sQS5NYXRoLmF0YW4sQS5NYXRoLmF0YW4yLEEuTWF0aC5leHAsQS5NYXRoLmxvZyxBLk1hdGguY2VpbCksYnI9QS5NYXRoLmltdWwsZz0oQS5NYXRoLm1pbixBLk1hdGgubWF4LEEuTWF0aC5jbHozMiksWj1lLmFib3J0LHA9KGUuYXNzZXJ0LGUuZW5sYXJnZU1lbW9yeSkseT1lLmdldFRvdGFsTWVtb3J5LEI9ZS5hYm9ydE9uQ2Fubm90R3Jvd01lbW9yeSxFPShlLmludm9rZV9pLGUuaW52b2tlX2lpLGUuaW52b2tlX2lpaSxlLmludm9rZV9paWlpLGUuaW52b2tlX2lpaWlpLGUuaW52b2tlX2lpaWlpZCxlLmludm9rZV9paWlpaWksZS5pbnZva2VfaWlpaWlpZCxlLmludm9rZV9paWlpaWlpLGUuaW52b2tlX2lpaWlpaWlpLGUuaW52b2tlX2lpaWlpaWlpaSxlLmludm9rZV92LGUuaW52b2tlX3ZpLGUuaW52b2tlX3ZpaSxlLmludm9rZV92aWlpLGUuaW52b2tlX3ZpaWlpLGUuaW52b2tlX3ZpaWlpaSxlLmludm9rZV92aWlpaWlpLGUuaW52b2tlX3ZpaWlpaWlpLGUuaW52b2tlX3ZpaWlpaWlpaSxlLmludm9rZV92aWlpaWlpaWlpLGUuaW52b2tlX3ZpaWlpaWlpaWlpLGUuaW52b2tlX3ZpaWlpaWlpaWlpaWksZS5pbnZva2VfdmlpaWlpaWlpaWlpaWksZS5DbGFzc0hhbmRsZSxlLkNsYXNzSGFuZGxlX2Nsb25lLGUuQ2xhc3NIYW5kbGVfZGVsZXRlLGUuQ2xhc3NIYW5kbGVfZGVsZXRlTGF0ZXIsZS5DbGFzc0hhbmRsZV9pc0FsaWFzT2YsZS5DbGFzc0hhbmRsZV9pc0RlbGV0ZWQsZS5SZWdpc3RlcmVkQ2xhc3MsZS5SZWdpc3RlcmVkUG9pbnRlcixlLlJlZ2lzdGVyZWRQb2ludGVyX2RlbGV0ZU9iamVjdCxlLlJlZ2lzdGVyZWRQb2ludGVyX2Rlc3RydWN0b3IsZS5SZWdpc3RlcmVkUG9pbnRlcl9mcm9tV2lyZVR5cGUsZS5SZWdpc3RlcmVkUG9pbnRlcl9nZXRQb2ludGVlLGUuX19aU3QxOHVuY2F1Z2h0X2V4Y2VwdGlvbnYpLHNyPWUuX19fYXNzZXJ0X2ZhaWwsWD0oZS5fX19idWlsZEVudmlyb25tZW50LGUuX19fY3hhX2FsbG9jYXRlX2V4Y2VwdGlvbiksVz0oZS5fX19jeGFfYmVnaW5fY2F0Y2gsZS5fX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCxlLl9fX2N4YV9wdXJlX3ZpcnR1YWwpLEk9ZS5fX19jeGFfdGhyb3csQz0oZS5fX19neHhfcGVyc29uYWxpdHlfdjAsZS5fX19sb2NrKSxHPWUuX19fbWFwX2ZpbGUsRj0oZS5fX19yZXN1bWVFeGNlcHRpb24sZS5fX19zZXRFcnJObyksUj1lLl9fX3N5c2NhbGwxNDAsTj1lLl9fX3N5c2NhbGwxNDUsXz1lLl9fX3N5c2NhbGwxNDYsWT1lLl9fX3N5c2NhbGw1NCxKPWUuX19fc3lzY2FsbDYsTT1lLl9fX3N5c2NhbGw5MSxUPWUuX19fdW5sb2NrLFU9KGUuX19hZGREYXlzLGUuX19hcnJheVN1bSxlLl9fZW1iaW5kX2ZpbmFsaXplX3ZhbHVlX29iamVjdCksUz1lLl9fZW1iaW5kX3JlZ2lzdGVyX2Jvb2wsTz1lLl9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzLHo9ZS5fX2VtYmluZF9yZWdpc3Rlcl9lbXZhbCxqPWUuX19lbWJpbmRfcmVnaXN0ZXJfZW51bSxIPWUuX19lbWJpbmRfcmVnaXN0ZXJfZW51bV92YWx1ZSx4PWUuX19lbWJpbmRfcmVnaXN0ZXJfZmxvYXQsUD1lLl9fZW1iaW5kX3JlZ2lzdGVyX2Z1bmN0aW9uLEw9ZS5fX2VtYmluZF9yZWdpc3Rlcl9pbnRlZ2VyLEs9ZS5fX2VtYmluZF9yZWdpc3Rlcl9tZW1vcnlfdmlldyxxPWUuX19lbWJpbmRfcmVnaXN0ZXJfc3RkX3N0cmluZywkPWUuX19lbWJpbmRfcmVnaXN0ZXJfc3RkX3dzdHJpbmcsQUE9ZS5fX2VtYmluZF9yZWdpc3Rlcl92YWx1ZV9vYmplY3QsZUE9ZS5fX2VtYmluZF9yZWdpc3Rlcl92YWx1ZV9vYmplY3RfZmllbGQsckE9ZS5fX2VtYmluZF9yZWdpc3Rlcl92b2lkLGlBPWUuX19lbXZhbF9kZWNyZWYsZkE9ZS5fX2VtdmFsX2luY3JlZixuQT1lLl9fZW12YWxfbmV3X2FycmF5LHRBPWUuX19lbXZhbF9uZXdfY3N0cmluZyxvQT1lLl9fZW12YWxfbmV3X29iamVjdCxhQT0oZS5fX2VtdmFsX3JlZ2lzdGVyLGUuX19lbXZhbF9zZXRfcHJvcGVydHkpLGNBPWUuX19lbXZhbF90YWtlX3ZhbHVlLGxBPShlLl9faXNMZWFwWWVhcixlLl9hYm9ydCksdUE9KGUuX2VtYmluZF9yZXByLGUuX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZyksYkE9ZS5fZ2V0ZW52LHNBPWUuX3B0aHJlYWRfY29uZF9kZXN0cm95LGRBPWUuX3B0aHJlYWRfY29uZF9pbml0LGtBPWUuX3B0aHJlYWRfY29uZF9zaWduYWwsaEE9ZS5fcHRocmVhZF9jb25kX3dhaXQsd0E9ZS5fcHRocmVhZF9nZXRzcGVjaWZpYyx2QT1lLl9wdGhyZWFkX2pvaW4sbUE9ZS5fcHRocmVhZF9rZXlfY3JlYXRlLFpBPWUuX3B0aHJlYWRfbXV0ZXhfZGVzdHJveSxwQT1lLl9wdGhyZWFkX211dGV4X2luaXQseUE9ZS5fcHRocmVhZF9vbmNlLEJBPWUuX3B0aHJlYWRfc2V0c3BlY2lmaWMsRUE9KGUuX3N0cmZ0aW1lLGUuX3N0cmZ0aW1lX2wpO2UuY29uc3ROb1NtYXJ0UHRyUmF3UG9pbnRlclRvV2lyZVR5cGUsZS5jb3VudF9lbXZhbF9oYW5kbGVzLGUuY3JhZnRJbnZva2VyRnVuY3Rpb24sZS5jcmVhdGVOYW1lZEZ1bmN0aW9uLGUuZG93bmNhc3RQb2ludGVyLGUuZW1iaW5kX2luaXRfY2hhckNvZGVzLGUuZW5zdXJlT3ZlcmxvYWRUYWJsZSxlLmVudW1SZWFkVmFsdWVGcm9tUG9pbnRlcixlLmV4cG9zZVB1YmxpY1N5bWJvbCxlLmV4dGVuZEVycm9yLGUuZmxvYXRSZWFkVmFsdWVGcm9tUG9pbnRlcixlLmZsdXNoUGVuZGluZ0RlbGV0ZXMsZS5nZW5lcmljUG9pbnRlclRvV2lyZVR5cGUsZS5nZXRCYXNlc3RQb2ludGVyLGUuZ2V0SW5oZXJpdGVkSW5zdGFuY2UsZS5nZXRJbmhlcml0ZWRJbnN0YW5jZUNvdW50LGUuZ2V0TGl2ZUluaGVyaXRlZEluc3RhbmNlcyxlLmdldFNoaWZ0RnJvbVNpemUsZS5nZXRTdHJpbmdPclN5bWJvbCxlLmdldFR5cGVOYW1lLGUuZ2V0X2ZpcnN0X2VtdmFsLGUuaGVhcDMyVmVjdG9yVG9BcnJheSxlLmluaXRfQ2xhc3NIYW5kbGUsZS5pbml0X1JlZ2lzdGVyZWRQb2ludGVyLGUuaW5pdF9lbWJpbmQsZS5pbml0X2VtdmFsLGUuaW50ZWdlclJlYWRWYWx1ZUZyb21Qb2ludGVyLGUubWFrZUNsYXNzSGFuZGxlLGUubWFrZUxlZ2FsRnVuY3Rpb25OYW1lLGUubmV3XyxlLm5vbkNvbnN0Tm9TbWFydFB0clJhd1BvaW50ZXJUb1dpcmVUeXBlLGUucmVhZExhdGluMVN0cmluZyxlLnJlZ2lzdGVyVHlwZSxlLnJlcGxhY2VQdWJsaWNTeW1ib2wsZS5yZXF1aXJlRnVuY3Rpb24sZS5yZXF1aXJlSGFuZGxlLGUucmVxdWlyZVJlZ2lzdGVyZWRUeXBlLGUucnVuRGVzdHJ1Y3RvcixlLnJ1bkRlc3RydWN0b3JzLGUuc2V0RGVsYXlGdW5jdGlvbixlLnNoYWxsb3dDb3B5SW50ZXJuYWxQb2ludGVyLGUuc2ltcGxlUmVhZFZhbHVlRnJvbVBvaW50ZXIsZS50aHJvd0JpbmRpbmdFcnJvcixlLnRocm93SW5zdGFuY2VBbHJlYWR5RGVsZXRlZCxlLnRocm93SW50ZXJuYWxFcnJvcixlLnRocm93VW5ib3VuZFR5cGVFcnJvcixlLnVwY2FzdFBvaW50ZXIsZS53aGVuRGVwZW5kZW50VHlwZXNBcmVSZXNvbHZlZDtmdW5jdGlvbiBYQShBKXthclsoQXw9MCk+PjJdPTQyMzIsKEE9MHxhcltBKzI0Pj4yXSkmJm11KEEpfWZ1bmN0aW9uIFdBKEEsZSxyLGksZil7ZXw9MCxyfD0wLGl8PTAsZnw9MDt2YXIgbix0LG8sYT0wO249KEF8PTApKzR8MCx0PUErOHwwLG89QSsxMnwwLHRyW0ErMjQ+PjBdPTAsYXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsYXJbQSs4Pj4yXT0wLGFyW0ErMTI+PjJdPTAsYXJbKGE9QSsxNnwwKT4+Ml09cixhclthKzQ+PjJdPWksYT0wfGFyW2U+PjJdLChpPXI9MHxhcltlKzQ+PjJdKT8oYnUocikscj0wfGFyW24+PjJdLGFyW0E+PjJdPWEsYXJbbj4+Ml09aSwwfHImJmR1KHIpKTooYXJbQT4+Ml09YSxhcltuPj4yXT1pKSwoYXJbdD4+Ml09ZikmJihhcltvPj4yXT0xKygwfGFyW2YrMTI+PjJdKSl9ZnVuY3Rpb24gSUEoQSl7dmFyIGUscixpLGYsbj0wO3JldHVybiB1cj0oZj11cikrMTZ8MCxlPWYsMHxDQShBfD0wLDEsMCk/KHI9MHxhcltBPj4yXSwobj0wPT0oMHwoaT0wfGFyW0ErND4+Ml0pKSl8fGJ1KGkpLEE9MHx4Yls2MyZhclsxNisoMHxhcltyPj4yXSk+PjJdXShyLGUsMSk/MHx0cltlPj4wXTooR0EoQSksMCksbnx8ZHUoaSksdXI9ZiwwfChuPUEpKToodXI9Ziwobj0wKXxuKX1mdW5jdGlvbiBDQShBLGUscil7QXw9MCxlfD0wO3ZhciBpPTAsZj0wLG49MCx0PTAsbz0wLGE9MCxjPTA7aWYoKDB8KHJ8PTApKTwwJiZzcig1NTczOSw0NzM4MiwyOTAsMTg2ODcpLGE9MHxhclsoaT1jPUErMTZ8MCk+PjJdLCEoKDB8KGk9MHxhcltpKzQ+PjJdKSk8KDB8cil8KDB8aSk9PSgwfHIpJmE+Pj4wPGU+Pj4wKSl7Zj0wfGFyW0ErOD4+Ml07ZG97aWYoZil7aWYoMHxDQShmLGUscikpe2Y9MHxhclsoaT1jKT4+Ml0saT0wfGFyW2krND4+Ml07YnJlYWt9cmV0dXJuKGM9MCl8Y31mPWF9d2hpbGUoMCk7cmV0dXJuIGE9MHxvYigwfGYsMHxpLDB8ZSwwfHIpLGFyW2M+PjJdPWEsYXJbYys0Pj4yXT1ELDB8KGM9MSl9aWYoMDwoMHxpKXwwPT0oMHxpKSYwPGE+Pj4wKXtmPTB8YXJbQSs4Pj4yXTtkb3tpZihmKXtmb3IoOzspe2lmKHI9MHxhclsobj1lPWYrMTZ8MCk+PjJdLCgwfChuPTB8YXJbbis0Pj4yXSkpPCgwfGkpfCgwfG4pPT0oMHxpKSZyPj4+MDxhPj4+MCl7aT03O2JyZWFrfWlmKHI9MHxvYigwfHIsMHxuLDB8YSwwfGkpLGFyWyhuPWUpPj4yXT1yLGFyW24rND4+Ml09RCwhKGY9MHxhcltmKzg+PjJdKSl7aT05O2JyZWFrfX1pZig3PT0oMHxpKSlzcigxODcwMCw0NzM4MiwzMjcsMTg3MTcpO2Vsc2UgaWYoOT09KDB8aSkpe3Q9MHxhclsobz1jKT4+Ml0sbz0wfGFyW28rND4+Ml07YnJlYWt9fWVsc2UgdD1hLG89aX13aGlsZSgwKTtuPTB8YXJbQT4+Ml0sYT0wfGFyW24+PjJdLHI9MHxhclthKzIwPj4yXSxhPTB8dGIoMHwoYT0wfGpiWzEyNyZhclthKzg+PjJdXShuKSksMHxELDB8dCwwfG8pLHhiWzYzJnJdKG4sYSxEKSxhcltjPj4yXT0wLGFyW2MrND4+Ml09MH1yZXR1cm4gdHJbQSsyND4+MF09MSwoYz0wKXxjfWZ1bmN0aW9uIEdBKEEpe3ZhciBlPTA7YXJbKGU9KEF8PTApKzE2fDApPj4yXT0wLChlPShhcltlKzQ+PjJdPTApfGFyW0ErOD4+Ml0pJiZHQShlKSx0clsoZT1BKzI0fDApPj4wXT0xfWZ1bmN0aW9uIFZBKEEpe3ZhciBlLHIsaSxmLG49MDtyZXR1cm4gdXI9KGY9dXIpKzE2fDAsZT1mLDB8Q0EoQXw9MCwyLDApPyhyPTB8YXJbQT4+Ml0sKG49MD09KDB8KGk9MHxhcltBKzQ+PjJdKSkpfHxidShpKSxBPTB8eGJbNjMmYXJbMTYrKDB8YXJbcj4+Ml0pPj4yXV0ocixlLDIpPzY1NTM1JigoMHxjcltlPj4wXSk8PDh8MHxjcltlKzE+PjBdKTooR0EoQSksMCksbnx8ZHUoaSksdXI9ZiwwfChuPUEpKToodXI9Ziwobj0wKXxuKX1mdW5jdGlvbiBGQShBKXt2YXIgZSxyLGksZixuPTA7cmV0dXJuIHVyPShmPXVyKSsxNnwwLGU9ZiwwfENBKEF8PTAsNCwwKT8ocj0wfGFyW0E+PjJdLChuPTA9PSgwfChpPTB8YXJbQSs0Pj4yXSkpKXx8YnUoaSksQT0wfHhiWzYzJmFyWzE2KygwfGFyW3I+PjJdKT4+Ml1dKHIsZSw0KT8oMHxjcltlKzE+PjBdKTw8MTZ8KDB8Y3JbZT4+MF0pPDwyNHwoMHxjcltlKzI+PjBdKTw8OHwwfGNyW2UrMz4+MF06KEdBKEEpLDApLG58fGR1KGkpLHVyPWYsMHwobj1BKSk6KHVyPWYsKG49MCl8bil9ZnVuY3Rpb24gUkEoQSxlKXtBfD0wLGV8PTA7dmFyIHIsaSxmLG49MCx0PTAsbz0wLGE9MDt1cj0oZj11cikrMTZ8MCxyPShpPWYpKzEyfDAsYXJbaT4+Ml09MCxhcltpKzQ+PjJdPTAsYT1lKzE2fChhcltpKzg+PjJdPTApO0E6ZG97aWYoMD09KDB8YXJbYT4+Ml0pJjA9PSgwfGFyW2ErND4+Ml0pKWFyW0E+PjJdPTAsYXJbQSs0Pj4yXT0wLGFyW0ErOD4+Ml09MDtlbHNle3Q9ZSs0fDA7ZTpmb3IoOzspe2lmKCEoMHxDQShlLDEsMCkpKXtuPTU7YnJlYWt9c3dpdGNoKG49MHxhcltlPj4yXSwoYT0wPT0oMHwobz0wfGFyW3Q+PjJdKSkpfHxidShvKSxuPTB8eGJbNjMmYXJbMTYrKDB8YXJbbj4+Ml0pPj4yXV0obixyLDEpPyhuPTB8dHJbcj4+MF0pPDwyND4+MjQ/KF91KGksbiksMCk6MjooR0EoZSksYXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsYXJbQSs4Pj4yXT0wLDEpLGF8fGR1KG8pLDMmbil7Y2FzZSAwOmJyZWFrO2Nhc2UgMjpuPTE1O2JyZWFrIGU7ZGVmYXVsdDpicmVhayBBfX1pZig1PT0oMHxuKSl7YXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsYXJbQSs4Pj4yXT0wO2JyZWFrfWlmKDE1PT0oMHxuKSl7YXJbQT4+Ml09YXJbaT4+Ml0sYXJbQSs0Pj4yXT1hcltpKzQ+PjJdLGFyW0ErOD4+Ml09YXJbaSs4Pj4yXSxhcltpPj4yXT0wLGFyW2krND4+Ml09MCxhcltpKzg+PjJdPTA7YnJlYWt9fX13aGlsZSgwKTt1cj0oMDw9KDB8dHJbaSsxMT4+MF0pfHx2dSgwfGFyW2k+PjJdKSxmKX1mdW5jdGlvbiBOQShBLGUscil7ZXw9MCxyfD0wO3ZhciBpPTA7cmV0dXJuIGk9MHxhclsoQXw9MCk+PjJdLHI9MHx0YigwfChpPTB8amJbMTI3JmFyWzgrKDB8YXJbaT4+Ml0pPj4yXV0oaSkpLDB8RCwwfGUsMHxyKSxlPTB8YXJbQT4+Ml0sMHx4Yls2MyZhclsxMisoMHxhcltlPj4yXSk+PjJdXShlLHIsRCl9ZnVuY3Rpb24gX0EoQSxlLHIpe0F8PTAsZXw9MCxyfD0wO2Zvcih2YXIgaT0wLGY9MCxuPTA7Oyl7aWYoZj0wfGFyWyhuPWk9QSsxNnwwKT4+Ml0sKDB8KG49MHxhcltuKzQ+PjJdKSk8KDB8cil8KDB8bik9PSgwfHIpJmY+Pj4wPGU+Pj4wKXtBPTM7YnJlYWt9aWYoZj0wfG9iKDB8ZiwwfG4sMHxlLDB8ciksYXJbKG49aSk+PjJdPWYsYXJbbis0Pj4yXT1ELCEoQT0wfGFyW0ErOD4+Ml0pKXtBPTU7YnJlYWt9fWlmKDM9PSgwfEEpKXNyKDE4NzAwLDQ3MzgyLDMyNywxODcxNyk7ZWxzZSBpZig1PT0oMHxBKSlyZXR1cm59ZnVuY3Rpb24gWUEoQSxlLHIpe2V8PTAscnw9MDt2YXIgaSxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTA7cmV0dXJuIGFyWyhBfD0wKT4+Ml09ZSxhcltBKzQ+PjJdPXIsYXJbKGk9QSs4fDApPj4yXT1yLGFyWyhhPWM9QSsxNnwwKT4+Ml09MCxhclthKzQ+PjJdPTAsYXJbKGE9QSsyNHwwKT4+Ml09MCxyPyhmPWUrMXwwLGFyW0E+PjJdPWYsbj0wfGNyW2U+PjBdLG89cistMXwwLGFyW2k+PjJdPW8sbj0wfGRiKDB8biwwLDU2KSx0PUQsYXJbKGw9Yyk+PjJdPW4sYXJbbCs0Pj4yXT10LG8/KG89ZSsyfDAsYXJbQT4+Ml09byxmPTB8Y3JbZj4+MF0sbD1yKy0yfDAsYXJbaT4+Ml09bCxmPTB8ZGIoMHxmLDAsNDgpLGZ8PW4sbj10fEQsYXJbKHQ9Yyk+PjJdPWYsYXJbdCs0Pj4yXT1uLGw/KHQ9ZSszfDAsYXJbQT4+Ml09dCxvPTB8Y3Jbbz4+MF0sbD1yKy0zfDAsYXJbaT4+Ml09bCxvPTB8ZGIoMHxvLDAsNDApLG98PWYsZj1ufEQsYXJbKG49Yyk+PjJdPW8sYXJbbis0Pj4yXT1mLGw/KG49ZSs0fDAsYXJbQT4+Ml09bix0PTB8Y3JbdD4+MF0sbD1yKy00fDAsYXJbaT4+Ml09bCxmfD10LGFyWyh0PWMpPj4yXT1vLGFyW3QrND4+Ml09ZixsPyh0PWUrNXwwLGFyW0E+PjJdPXQsbj0wfGNyW24+PjBdLGw9cistNXwwLGFyW2k+PjJdPWwsbj0wfGRiKDB8biwwLDI0KSxufD1vLGZ8PUQsYXJbKG89Yyk+PjJdPW4sYXJbbys0Pj4yXT1mLGw/KG89ZSs2fDAsYXJbQT4+Ml09byx0PTB8Y3JbdD4+MF0sbD1yKy02fDAsYXJbaT4+Ml09bCxufD10PTB8ZGIoMHx0LDAsMTYpLGZ8PUQsYXJbKHQ9Yyk+PjJdPW4sYXJbdCs0Pj4yXT1mLGw/KHQ9ZSs3fDAsYXJbQT4+Ml09dCxvPTB8Y3Jbbz4+MF0sbD1yKy03fDAsYXJbaT4+Ml09bCxufD1vPTB8ZGIoMHxvLDAsOCksZnw9RCxhclsobz1jKT4+Ml09bixhcltvKzQ+PjJdPWYsbD1sPyhhcltBPj4yXT1lKzgsZT0wfGNyW3Q+PjBdLGFyW2k+PjJdPXIrLTgsYXJbKGw9Yyk+PjJdPW58ZSxhcltsKzQ+PjJdPWYsNjQtKGw9MCl8MCk6NjQtKGw9OCl8MCx2b2lkKGFyW2E+PjJdPWwpKToobD02NC0obD0xNil8MCx2b2lkKGFyW2E+PjJdPWwpKSk6KGw9NjQtKGw9MjQpfDAsdm9pZChhclthPj4yXT1sKSkpOihsPTY0LShsPTMyKXwwLHZvaWQoYXJbYT4+Ml09bCkpKToobD02NC0obD00MCl8MCx2b2lkKGFyW2E+PjJdPWwpKSk6KGw9NjQtKGw9NDgpfDAsdm9pZChhclthPj4yXT1sKSkpOihsPTY0LShsPTU2KXwwLHZvaWQoYXJbYT4+Ml09bCkpKTooYz0oYz02NCktY3wwLHZvaWQoYXJbYT4+Ml09YykpfWZ1bmN0aW9uIFFBKEEsZSl7ZXw9MDt2YXIgcixpPTAsZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wO2lmKCgwfChpPTB8YXJbKHI9KEF8PTApKzI0fDApPj4yXSkpPCgwfGUpKXtpPTY0LWl8MCxuPUErOHwwO0E6ZG97aWYoNzwoMHxpKSl7dD1BKzE2fDAsZj0wfGFyW24+PjJdO2Rve2lmKCFmKWJyZWFrIEE7Yz0wfGFyW0E+PjJdLGFyW0E+PjJdPWMrMSxjPTB8Y3JbYz4+MF0sZj1mKy0xfDAsYXJbbj4+Ml09ZixjPTB8ZGIoMHxjLDAsMHwoaT1pKy04fDApKSxhPWFyWyhsPXQpKzQ+PjJdfEQsYXJbKG89dCk+PjJdPWFyW2w+PjJdfGMsYXJbbys0Pj4yXT1hfXdoaWxlKDc8KDB8aSkpfX13aGlsZSgwKTtpPTY0LWl8MCxhcltyPj4yXT1pfXJldHVybiBsPTB8c2IoMHwobz0wfGFyWyhhPWM9QSsxNnwwKT4+Ml0pLDB8KGE9MHxhclthKzQ+PjJdKSw2NC1lfDApLGE9MHxkYigwfG8sMHxhLDB8ZSksYXJbYz4+Ml09YSxhcltjKzQ+PjJdPUQsYXJbcj4+Ml09aS1lLDB8bH1mdW5jdGlvbiBEQShBLGUpe2V8PTA7dmFyIHIsaSxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MDtmb3IoYz0oQXw9MCkrOHwwLGk9QSsxNnwwLGY9KGw9MCl8YXJbKHI9QSsyNHwwKT4+Ml07Oyl7aWYoKDB8Zik8MSl7Zj02NC1mfDA7QTpkb3tpZig3PCgwfGYpKXtuPTB8YXJbYz4+Ml07ZG97aWYoIW4pYnJlYWsgQTt1PTB8YXJbQT4+Ml0sYXJbQT4+Ml09dSsxLHU9MHxjclt1Pj4wXSxuPW4rLTF8MCxhcltjPj4yXT1uLHU9MHxkYigwfHUsMCwwfChmPWYrLTh8MCkpLHQ9YXJbKGI9aSkrND4+Ml18RCxhclsobz1pKT4+Ml09YXJbYj4+Ml18dSxhcltvKzQ+PjJdPXR9d2hpbGUoNzwoMHxmKSl9fXdoaWxlKDApO289NjQtZnwwLGFyW3I+PjJdPW99ZWxzZSBvPWY7aWYodD0wfGRiKDB8KGI9MHxhclsodT1pKT4+Ml0pLDB8KHU9MHxhclt1KzQ+PjJdKSwxKSxuPUQsYXJbKGY9aSk+PjJdPXQsYXJbZis0Pj4yXT1uLGY9bystMXwwLGFyW3I+PjJdPWYsISgtMTwoMHx1KXwtMT09KDB8dSkmNDI5NDk2NzI5NTxiPj4+MCkpYnJlYWs7aWYoMTk8KDB8bCkpe2Y9MCxhPTIwO2JyZWFrfWw9bCsxfDB9aWYoMjA9PSgwfGEpKXJldHVybiAwfGY7aWYoIWwpcmV0dXJuKGFyW2U+PjJdPTApfChiPTEpO2lmKCgwfG8pPD0oMHxsKSl7Zj02NS1vfDA7QTpkb3tpZig3PCgwfGYpKXtvPTB8YXJbYz4+Ml07ZG97aWYoIW8pYnJlYWsgQTtiPTB8YXJbQT4+Ml0sYXJbQT4+Ml09YisxLGI9MHxjcltiPj4wXSxvPW8rLTF8MCxhcltjPj4yXT1vLHR8PWI9MHxkYigwfGIsMCwwfChmPWYrLTh8MCkpLG58PUQsYXJbKGI9aSk+PjJdPXQsYXJbYis0Pj4yXT1ufXdoaWxlKDc8KDB8ZikpfX13aGlsZSgwKTtmPTY0LWZ8MCxhcltyPj4yXT1mfXJldHVybiBiPTB8c2IoMHx0LDB8biw2NC1sfDApLGM9MHxkYigwfHQsMHxuLDB8bCksYXJbKHU9aSk+PjJdPWMsYXJbdSs0Pj4yXT1ELGFyW3I+PjJdPWYtbCxiPWIrKDE8PGwpfDAsYXJbZT4+Ml09YistMSwxPCgwfGIpPzB8KGI9MSk6KHNyKDE4NzQ5LDQ3MzgyLDQyNyw0NzQwMyksMCl9ZnVuY3Rpb24gSkEoQSxlKXtlfD0wO3ZhciByLGksZixuLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wO2lmKCgwfCh0PTB8YXJbKHI9KEF8PTApKzEyfDApPj4yXSkpIT0oKG89dT0wfGFyWyhpPUErNHwwKT4+Ml0pLShuPWY9MHxhcltBPj4yXSl8MCkpcmV0dXJuIGFyW3I+PjJdPXQrMSx2b2lkKHRyW24rdD4+MF09ZSk7KDB8byk9PSgwfCh0PTB8YXJbKHU9QSs4fDApPj4yXSkpPygoMHwodD0obD10LWZ8MCkrMXwwKSk8MCYmemwoKSxvPWw8PDEsYz0obz1sPj4+MDwxMDczNzQxODIzP28+Pj4wPHQ+Pj4wP3Q6bzoyMTQ3NDgzNjQ3KT8wfGh1KG8pOjAsdHJbKGE9YytsfDApPj4wXT1lLHQ9YSsoMC1sKXwwLDA8KDB8bCkmJmhiKDB8dCwwfG4sMHxsKSxhcltBPj4yXT10LGFyW2k+PjJdPWErMSxhclt1Pj4yXT1jK28sMHxmJiZ2dShuKSk6KHRyW28+PjBdPWUsYXJbaT4+Ml09MSsoMHxhcltpPj4yXSkpLGFyW3I+PjJdPTErKDB8YXJbcj4+Ml0pfWZ1bmN0aW9uIE1BKEEsZSl7ZXw9MDt2YXIgcixpLGY9MCxuPTAsdD0wO3Q9KG49MHxhclsoaT0oQXw9MCkrMTJ8MCk+PjJdKSsyfDAsZj0wfGFyW0E+PjJdLChyPSgwfGFyW0ErND4+Ml0pLWZ8MCk+Pj4wPHQ+Pj4wPyhUQShBLHQtcnwwKSx0PUEsbj0wfGFyW2k+PjJdLGY9MHxhcltBPj4yXSk6dD1BLGFyW2k+PjJdPW4rMSx0cltmK24+PjBdPSg2NTUzNSZlKT4+PjgsQT0wfGFyW2k+PjJdLGFyW2k+PjJdPUErMSx0clsoMHxhclt0Pj4yXSkrQT4+MF09ZX1mdW5jdGlvbiBUQShBLGUpe3ZhciByLGksZj0wLG49MCx0PTAsbz0wLGE9MDtpZigoZXw9MCk+Pj4wPD0oKHQ9MHxhclsocj0oQXw9MCkrOHwwKT4+Ml0pLShmPTB8YXJbKGk9QSs0fDApPj4yXSl8MCk+Pj4wKWZvcig7Zj0xKygodHJbZj4+MF09MCl8YXJbaT4+Ml0pfDAsYXJbaT4+Ml09ZiwwIT0oMHwoZT1lKy0xfDApKTspO2Vsc2V7Zm9yKCgwfChmPShvPWYtKG49MHxhcltBPj4yXSl8MCkrZXwwKSk8MCYmemwoKSxhPSh0PXQtbnwwKTw8MSxhPShuPShmPXQ+Pj4wPDEwNzM3NDE4MjM/YT4+PjA8Zj4+PjA/ZjphOjIxNDc0ODM2NDcpPzB8aHUoZik6MCkrb3wwLG89bitmfDAsZj10PWE7dD1mPXQrMXwodHJbZj4+MF09MCksMCE9KDB8KGU9ZSstMXwwKSk7KTtlPTB8YXJbQT4+Ml0sZj1hKygwLShuPSgwfGFyW2k+PjJdKS1lfDApKXwwLDA8KDB8bikmJmhiKDB8ZiwwfGUsMHxuKSxhcltBPj4yXT1mLGFyW2k+PjJdPXQsYXJbcj4+Ml09byxlJiZ2dShlKX19ZnVuY3Rpb24gVUEoQSxlKXtlfD0wO3ZhciByLGksZj0wLG49MCx0PTA7dD0obj0wfGFyWyhpPShBfD0wKSsxMnwwKT4+Ml0pKzR8MCxmPTB8YXJbQT4+Ml0sKHI9KDB8YXJbQSs0Pj4yXSktZnwwKT4+PjA8dD4+PjA/KFRBKEEsdC1yfDApLHQ9QSxuPTB8YXJbaT4+Ml0sZj0wfGFyW0E+PjJdKTp0PUEsYXJbaT4+Ml09bisxLHRyW2Yrbj4+MF09ZT4+PjI0LEE9MHxhcltpPj4yXSxhcltpPj4yXT1BKzEsdHJbKDB8YXJbdD4+Ml0pK0E+PjBdPWU+Pj4xNixBPTB8YXJbaT4+Ml0sYXJbaT4+Ml09QSsxLHRyWygwfGFyW3Q+PjJdKStBPj4wXT1lPj4+OCxBPTB8YXJbaT4+Ml0sYXJbaT4+Ml09QSsxLHRyWygwfGFyW3Q+PjJdKStBPj4wXT1lfWZ1bmN0aW9uIFNBKEEsZSxyLGkpe0F8PTAscnw9MCxpfD0wO3ZhciBmPTAsbj0wLHQ9MDtzd2l0Y2goMHwoZXw9MCkpe2Nhc2UgMTpyZXR1cm4gaT4+PjA8MHwwPT0oMHxpKSZyPj4+MDwyNTZ8fHNyKDE4NzYwLDQ3MzgyLDU0MywxOTU2Myksdm9pZCBKQShBLDI1NSZyKTtjYXNlIDI6cmV0dXJuIGk+Pj4wPDB8MD09KDB8aSkmcj4+PjA8NjU1MzZ8fHNyKDE4Nzc0LDQ3MzgyLDU0NywxOTU2MyksaT0obj0wfGFyWyh0PUErMTJ8MCk+PjJdKSsyfDAsZT0wfGFyW0E+PjJdLChmPSgwfGFyW0ErND4+Ml0pLWV8MCk+Pj4wPGk+Pj4wPyhUQShBLGktZnwwKSxmPUEsaT0wfGFyW3Q+PjJdLGU9MHxhcltBPj4yXSk6KGY9QSxpPW4pLGFyW3Q+PjJdPWkrMSx0cltlK2k+PjBdPSg2NTUzNSZyKT4+PjgsQT0wfGFyW3Q+PjJdLGFyW3Q+PjJdPUErMSx2b2lkKHRyWygwfGFyW2Y+PjJdKStBPj4wXT1yKTtjYXNlIDQ6cmV0dXJuIGk+Pj4wPDF8MT09KDB8aSkmcj4+PjA8MHx8c3IoMTg3OTAsNDczODIsNTUxLDE5NTYzKSxpPShuPTB8YXJbKHQ9QSsxMnwwKT4+Ml0pKzR8MCxlPTB8YXJbQT4+Ml0sKGY9KDB8YXJbQSs0Pj4yXSktZXwwKT4+PjA8aT4+PjA/KFRBKEEsaS1mfDApLGY9QSxpPTB8YXJbdD4+Ml0sZT0wfGFyW0E+PjJdKTooZj1BLGk9biksYXJbdD4+Ml09aSsxLHRyW2UraT4+MF09cj4+PjI0LEE9MHxhclt0Pj4yXSxhclt0Pj4yXT1BKzEsdHJbKDB8YXJbZj4+Ml0pK0E+PjBdPXI+Pj4xNixBPTB8YXJbdD4+Ml0sYXJbdD4+Ml09QSsxLHRyWygwfGFyW2Y+PjJdKStBPj4wXT1yPj4+OCxBPTB8YXJbdD4+Ml0sYXJbdD4+Ml09QSsxLHZvaWQodHJbKDB8YXJbZj4+Ml0pK0E+PjBdPXIpO2Nhc2UgODpyZXR1cm4gdm9pZCBmdW5jdGlvbihBLGUscil7ZXw9MCxyfD0wO3ZhciBpLGY9MCxuPTAsdD0wLG89MDt0PShuPTB8YXJbKGk9KEF8PTApKzEyfDApPj4yXSkrOHwwLGY9MHxhcltBPj4yXSwobz0oMHxhcltBKzQ+PjJdKS1mfDApPj4+MDx0Pj4+MD8oVEEoQSx0LW98MCksdD1BLG49MHxhcltpPj4yXSxmPTB8YXJbQT4+Ml0pOnQ9QSxBPTB8c2IoMHxlLDB8ciw1NiksYXJbaT4+Ml09bisxLHRyW2Yrbj4+MF09QSxBPTB8c2IoMHxlLDB8ciw0OCksbz0wfGFyW2k+PjJdLGFyW2k+PjJdPW8rMSx0clsoMHxhclt0Pj4yXSkrbz4+MF09QSxvPTB8c2IoMHxlLDB8ciw0MCksQT0wfGFyW2k+PjJdLGFyW2k+PjJdPUErMSx0clsoMHxhclt0Pj4yXSkrQT4+MF09byxBPTB8YXJbaT4+Ml0sYXJbaT4+Ml09QSsxLEE9MHxzYigwfGUsMHwodHJbKDB8YXJbdD4+Ml0pK0E+PjBdPXIpLDI0KSxvPTB8YXJbaT4+Ml0sYXJbaT4+Ml09bysxLHRyWygwfGFyW3Q+PjJdKStvPj4wXT1BLG89MHxzYigwfGUsMHxyLDE2KSxBPTB8YXJbaT4+Ml0sYXJbaT4+Ml09QSsxLHRyWygwfGFyW3Q+PjJdKStBPj4wXT1vLEE9MHxzYigwfGUsMHxyLDgpLHI9MHxhcltpPj4yXSxhcltpPj4yXT1yKzEsdHJbKDB8YXJbdD4+Ml0pK3I+PjBdPUEscj0wfGFyW2k+PjJdLGFyW2k+PjJdPXIrMSx0clsoMHxhclt0Pj4yXSkrcj4+MF09ZX0oQSxyLGkpO2RlZmF1bHQ6c3IoNTU3MzksNDczODIsNTU4LDE5NTYzKX19ZnVuY3Rpb24gT0EoQSxlKXt2YXIgcj0wLGk9MCxmPTAsbj0wLHQ9MCxvPTAsYT0wO2lmKGE9KEF8PTApKzEyfDAsbj0wfHRyWyh0PShlfD0wKSsxMXwwKT4+MF0scj0wfGFyWyhvPWUrNHwwKT4+Ml0saT0xKygwfGFyW2E+PjJdKSsobjw8MjQ+PjI0PDA/cjoyNTUmbil8MCwoZj0oMHxhcltBKzQ+PjJdKS0oMHxhcltBPj4yXSl8MCk+Pj4wPGk+Pj4wPyhUQShBLGktZnwwKSxmPTB8dHJbdD4+MF0scj0wfGFyW28+PjJdKTpmPW4sISgwfChmPDwyND4+MjQ8MD9yOjI1NSZmKSkpcmV0dXJuIHQ9QSxlPShvPTB8YXJbYT4+Ml0pKzF8MCxhclthPj4yXT1lLGE9MHxhclt0Pj4yXSx2b2lkKHRyWyhhPWErb3wwKT4+MF09MCk7Zm9yKGk9MCxyPWY7Zj0wfHRyWyhyPDwyND4+MjQ8MD8wfGFyW2U+PjJdOmUpK2k+PjBdLG49MHxhclthPj4yXSxhclthPj4yXT1uKzEsdHJbKDB8YXJbQT4+Ml0pK24+PjBdPWYsKGk9aSsxfDApPj4+MDwoKHI9MHx0clt0Pj4wXSk8PDI0Pj4yNDwwPzB8YXJbbz4+Ml06MjU1JnIpPj4+MDspO3Q9KG89MHxhclthPj4yXSkrMXwwLGFyW2E+PjJdPXQsYT0wfGFyW0E+PjJdLHRyWyhhPWErb3wwKT4+MF09MH1mdW5jdGlvbiB6QShBLGUpe2V8PTA7dmFyIHIsaSxmLG4sdD0wLG89MCxhPTAsYz0wO2E9MHxhclsoZj0oQXw9MCkrMTJ8MCk+PjJdLGk9KHQ9MHxhclsobj1lKzR8MCk+PjJdKS0obz0wfGFyW2U+PjJdKSthfDAsYz0wfGFyW0E+PjJdLChyPSgwfGFyW0ErND4+Ml0pLWN8MCk+Pj4wPGk+Pj4wJiYoVEEoQSxpLXJ8MCksYz0wfGFyW0E+PjJdLGE9MHxhcltmPj4yXSxvPTB8YXJbZT4+Ml0sdD0wfGFyW24+PjJdKSxoYihjK2F8MCwwfG8sdC1vfDApLGFyW2Y+PjJdPSgwfGFyW24+PjJdKS0oMHxhcltlPj4yXSkrKDB8YXJbZj4+Ml0pfWZ1bmN0aW9uIGpBKEEsZSl7ZXw9MDt2YXIgcixpLGYsbix0LG89MCxhPTA7KDB8KG89MHxhclsodD0oQXw9MCkrMTJ8MCk+PjJdKSkhPSgocj0wfGFyWyhmPUErNHwwKT4+Ml0pLShpPTB8YXJbQT4+Ml0pfDApJiZzcigxODgxMCw0NzM4Miw2MTAsMTg4MzgpLChuPW8rZXwwKT4+PjA8PW8+Pj4wP24+Pj4wPG8+Pj4wJiYoMHxyKSE9KDB8KGE9aStufDApKSYmKGFyW2Y+PjJdPWEpOihUQShBLGUpLG89MHxhclt0Pj4yXSksYXJbdD4+Ml09bytlfWZ1bmN0aW9uIEhBKEEsZSxyKXtBfD0wLGV8PTAscnw9MDt2YXIgaSxmLG4sdCxvLGEsYz0wLGw9MCx1PTAsYj0wO2lmKHVyPShvPXVyKSsxNjB8MCxsPW8rMTM2fDAsbj0oZj1vKSs1NnwwLHQ9Zis0fDAsYXJbZj4+Ml09MjkyLGFyW24+PjJdPTMxMixKZihmKzU2fDAsdCksYXJbZisxMjg+PjJdPTAsYXJbZisxMzI+PjJdPS0xLGFyW2Y+PjJdPTQzMDQsYXJbbj4+Ml09NDMyNCxTZih0KSxhclt0Pj4yXT00MzQwLGFyWyhpPWYrMzZ8MCk+PjJdPTAsYXJbNCtpPj4yXT0wLGFyWzgraT4+Ml09MCxhclsxMitpPj4yXT0wLGFyW2YrNTI+PjJdPTE2LGFyW2w+PjJdPTAsYXJbbCs0Pj4yXT0wLGFyW2wrOD4+Ml09MCxYZSh0LGwpLCgwfHRyW2wrMTE+PjBdKTwwJiZ2dSgwfGFyW2w+PjJdKSwwPCgwfGFyW3I+PjJdKSlmb3IoYz0wO1dlKGYsMTg4NjIsMiksKDB8KGM9YysxfDApKTwoMHxhcltyPj4yXSk7KTtpZihiPTB8V2UoZiwxODg2NSw1KSx4QShsLGUpLFdlKDB8V2UoYiwodT0oYT0wfHRyWyhjPWwrMTF8MCk+PjBdKTw8MjQ+PjI0PDApPzB8YXJbbD4+Ml06bCx1PzB8YXJbbCs0Pj4yXToyNTUmYSksMTg4NzEsNyksKDB8dHJbYz4+MF0pPDAmJnZ1KDB8YXJbbD4+Ml0pLDA8KDB8YXJbcj4+Ml0pKWZvcihjPTA7V2UoZiwxODg2MiwyKSwoMHwoYz1jKzF8MCkpPCgwfGFyW3I+PjJdKTspO2lmKHU9MHxXZShmLDE4ODc5LDYpLGI9MHxXZSgwfEtmKHUsMHxhclsoYj1lKzh8MCk+PjJdLDB8YXJbYis0Pj4yXSksMTg4ODYsMTcpLFdlKDB8TGYoYiwwfGFyW2UrMTY+PjJdKSwxODkwNCwyKSwwfHRyW2UrMzY+PjBdKXtpZigwPCgwfGFyW3I+PjJdKSlmb3IoYz0wO1dlKGYsMTg4NjIsMiksKDB8KGM9YysxfDApKTwoMHxhcltyPj4yXSk7KTtpZihsPTB8V2UoZiwxODkwNyw5KSxsPTB8V2UoMHxQZihsLDB8Y3JbZSszNz4+MF0pLDMwMDg2LDEpLDA8KDB8YXJbcj4+Ml0pKWZvcihjPTA7V2UobCwxODg2MiwyKSwoMHwoYz1jKzF8MCkpPCgwfGFyW3I+PjJdKTspO3U9KGI9MHxXZShsLDE4OTE3LDcpKSsoMHxhclsoMHxhcltiPj4yXSktMTI+PjJdKSs0fDAsYXJbdT4+Ml09LTc1JmFyW3U+PjJdfDgsV2UoMHxMZihiLDB8YXJbZSs0MD4+Ml0pLDMwMDg2LDEpfWlmKEllKEEsdCksYXJbZj4+Ml09NDMwNCxhcltuPj4yXT00MzI0LGFyW3Q+PjJdPTQzNDAsMDw9KDB8dHJbMTEraT4+MF0pKXJldHVybiBrZih0KSxHZigpLGJmKG4pLHZvaWQodXI9byk7dnUoMHxhcltpPj4yXSksa2YodCksR2YoKSxiZihuKSx1cj1vfWZ1bmN0aW9uIFhlKEEsZSl7dmFyIHIsaSxmPTAsbj0wLHQ9MCxvPTA7RXUocj0oQXw9MCkrMzJ8MCxlfD0wKSw4Jih0PShhclsobz1BKzQ0fDApPj4yXT0wKXxhclsoaT1BKzQ4fDApPj4yXSl8MCYmKGU9KGU9MHx0clsxMStyPj4wXSk8PDI0Pj4yNDwwPyhuPWY9ZT0wfGFyW3I+PjJdKSsoMHxhcltBKzM2Pj4yXSl8MDoobj1mPXIpKygyNTUmZSl8MCxhcltvPj4yXT1lLGFyW0ErOD4+Ml09ZixhcltBKzEyPj4yXT1uLGFyW0ErMTY+PjJdPWUpLDE2JnQmJihvPShlPShlPTB8dHJbKGY9MTErcnwwKT4+MF0pPDwyND4+MjQ8MD8odD0wfGFyW0ErMzY+PjJdLGFyW28+PjJdPSgwfGFyW3I+PjJdKSt0LCgyMTQ3NDgzNjQ3JmFyW0ErNDA+PjJdKS0xfDApOih0PTI1NSZlLGFyW28+PjJdPXIrdCwxMCksdCksVnUocixlLDApLChlPTB8dHJbZj4+MF0pPDwyND4+MjQ8MD8odD1mPTB8YXJbcj4+Ml0sbj0wfGFyW0ErMzY+PjJdKToobj0yNTUmZSxmPXQ9ciksYXJbKGU9QSsyNHwwKT4+Ml09ZixhcltBKzIwPj4yXT1mLGFyW0ErMjg+PjJdPXQrbiwzJmFyW2k+PjJdJiYoYXJbZT4+Ml09ZitvKSl9ZnVuY3Rpb24gV2UoQSxlLHIpe2V8PTAscnw9MDt2YXIgaSxmLG4sdCxvLGEsYz0wLGw9MDtyZXR1cm4gdXI9KGE9dXIpKzE2fDAsbj1hKzEyfDAsbD0obz1hKSs4fDAsemYobyxBfD0wKSwwfHRyW28+PjBdPyhjPSgwfGFyW0E+PjJdKS0xMnwwLGFyW2w+PjJdPWFyW0ErKDB8YXJbYz4+Ml0pKzI0Pj4yXSxjPUErKDB8YXJbYz4+Ml0pfDAsdD0wfGFyW2MrND4+Ml0sZj1lK3J8MCwtMT09KDB8KHI9MHxhclsoaT1jKzc2fDApPj4yXSkpJiYoVGYobixjKSxyPTB8dW4obiw1OTIzMikscj0wfEhiWzMxJmFyWzI4KygwfGFyW3I+PjJdKT4+Ml1dKHIsMzIpLGJuKG4pLHI9cjw8MjQ+PjI0LGFyW2k+PjJdPXIpLGFyW24+PjJdPWFyW2w+PjJdLHVyPSgwfFBBKG4sZSwzMj09KDE3NiZ0fDApP2Y6ZSxmLGMsMjU1JnIpfHxEZihsPUErKDB8YXJbKDB8YXJbQT4+Ml0pLTEyPj4yXSl8MCw1fGFyW2wrMTY+PjJdKSxqZihvKSxhKSwwfEEpOihqZihvKSx1cj1hLDB8QSl9ZnVuY3Rpb24geEEoQSxlKXtBfD0wO3ZhciByLGksZixuLHQsbyxhPTA7aWYodXI9KG89dXIpKzE2MHwwLG49bysxMzZ8MCx0PW8sMTk3MDYyODk2NCE9KDB8KGE9MHxhclsoZXw9MCkrMjA+PjJdKSkpcmV0dXJuIGFyW0E+PjJdPTAsYXJbQSs0Pj4yXT0wLGFyW0ErOD4+Ml09MCx0cltBKzExPj4wXT00LHRyW0ErND4+MF09MCx0cltBPj4wXT1hPj4+MjQsdHJbQSsxPj4wXT1hPj4+MTYsdHJbQSsyPj4wXT1hPj4+OCx0cltBKzM+PjBdPWEsdm9pZCh1cj1vKTtpPXQrNTZ8MCxmPXQrNHwwLGFyW3Q+PjJdPTI5MixhcltpPj4yXT0zMTIsSmYodCs1NnwwLGYpLGFyW3QrMTI4Pj4yXT0wLGFyW3QrMTMyPj4yXT0tMSxhclt0Pj4yXT00MzA0LGFyW2k+PjJdPTQzMjQsU2YoZiksYXJbZj4+Ml09NDM0MCxhclsocj10KzM2fDApPj4yXT0wLGFyWzQrcj4+Ml09MCxhcls4K3I+PjJdPTAsYXJbMTIrcj4+Ml09MCxhclt0KzUyPj4yXT0xNixhcltuPj4yXT0wLGFyWzQrbj4+Ml09MCxhcls4K24+PjJdPTAsWGUoZixuKSwoMHx0clsxMStuPj4wXSk8MCYmdnUoMHxhcltuPj4yXSksYT10KygwfGFyWygwfGFyW3Q+PjJdKS0xMj4+Ml0pKzR8MCxhclthPj4yXT0tNzUmYXJbYT4+Ml18OCxhclt0KygwfGFyWygwfGFyW3Q+PjJdKS0xMj4+Ml0pKzc2Pj4yXT00OCxhclt0KygwfGFyWygwfGFyW3Q+PjJdKS0xMj4+Ml0pKzEyPj4yXT0yLGU9ZSsyNHwwLGE9MDtkb3tzd2l0Y2goMHxhKXtjYXNlIDQ6Y2FzZSA2OmNhc2UgODpjYXNlIDEwOnRyW24+PjBdPTQ1LFdlKHQsbiwxKX1QZih0LDB8Y3JbKDB8YXJbZT4+Ml0pK2E+PjBdKSxhPWErMXwwfXdoaWxlKCgwfGEpPDE2KTtJZShBLGYpLGFyW3Q+PjJdPTQzMDQsYXJbaT4+Ml09NDMyNCxhcltmPj4yXT00MzQwLCgwfHRyWzExK3I+PjBdKTwwJiZ2dSgwfGFyW3I+PjJdKSxrZihmKSxHZigpLGJmKGkpLHVyPW99ZnVuY3Rpb24gSWUoQSxlKXtBfD0wO3ZhciByPTAsaT0wLGY9MCxuPTA7aWYoMTYmKHI9MHxhclsoZXw9MCkrNDg+PjJdKXwwKXtpZigoaT0wfGFyWyhyPWUrNDR8MCk+PjJdKT4+PjA8KGY9MHxhcltlKzI0Pj4yXSk+Pj4wJiYoaT1hcltyPj4yXT1mKSxyPTB8YXJbZSsyMD4+Ml0sYXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsNDI5NDk2NzI3OTwoZT1pLXJ8KGFyW0ErOD4+Ml09MCkpPj4+MCYmcHUoKSxlPj4+MDwxMT90cltBKzExPj4wXT1lOihmPTB8aHUobj1lKzE2Ji0xNiksYXJbQT4+Ml09ZixhcltBKzg+PjJdPS0yMTQ3NDgzNjQ4fG4sYXJbQSs0Pj4yXT1lLEE9ZiksKDB8cikhPSgwfGkpKXtmb3IoZj1BO3RyW2Y+PjBdPTB8dHJbcj4+MF0sKDB8KHI9cisxfDApKSE9KDB8aSk7KWY9ZisxfDA7QT1BK2V8MH10cltBPj4wXT0wfWVsc2V7aWYoISg4JnIpKXJldHVybiBhcltBPj4yXT0wLGFyW0ErND4+Ml09MCx2b2lkKGFyW0ErOD4+Ml09MCk7aWYocj0wfGFyW2UrOD4+Ml0sZj0wfGFyW2UrMTY+PjJdLGFyW0E+PjJdPTAsYXJbQSs0Pj4yXT0wLDQyOTQ5NjcyNzk8KGU9Zi1yfChhcltBKzg+PjJdPTApKT4+PjAmJnB1KCksZT4+PjA8MTE/dHJbQSsxMT4+MF09ZToobj0wfGh1KGk9ZSsxNiYtMTYpLGFyW0E+PjJdPW4sYXJbQSs4Pj4yXT0tMjE0NzQ4MzY0OHxpLGFyW0ErND4+Ml09ZSxBPW4pLCgwfHIpIT0oMHxmKSl7Zm9yKGk9QTt0cltpPj4wXT0wfHRyW3I+PjBdLCgwfChyPXIrMXwwKSkhPSgwfGYpOylpPWkrMXwwO0E9QStlfDB9dHJbQT4+MF09MH19ZnVuY3Rpb24gUEEoQSxlLHIsaSxmLG4pe2V8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MDt2YXIgdCxvLGEsYz0wLGw9MCx1PTAsYj0wO2lmKHVyPShhPXVyKSsxNnwwLG89YSwhKGI9MHxhclsoQXw9MCk+PjJdKSlyZXR1cm4gdXI9YSwoYj0wKXxiO2lmKGw9KDB8KGw9aS0oYz1lKXwwKSk8KDB8KHU9MHxhclsodD1mKzEyfDApPj4yXSkpP3UtbHwwOjAsMDwoMHwoZj0odT1yKS1jfDApKSYmKDB8eGJbNjMmYXJbNDgrKDB8YXJbYj4+Ml0pPj4yXV0oYixlLGYpKSE9KDB8ZikpcmV0dXJuIGFyW0E+PjJdPTAsdXI9YSwoYj0wKXxiO2Rve2lmKDA8KDB8bCkpe2lmKGFyW28+PjJdPTAsYXJbbys0Pj4yXT0wLGM9bD4+PihhcltvKzg+PjJdPTApPDExPyh0clsoZT1vKzExfDApPj4wXT1sLGY9byk6KGY9MHxodShlPWwrMTYmLTE2KSxhcltvPj4yXT1mLGFyW28rOD4+Ml09LTIxNDc0ODM2NDh8ZSxhcltvKzQ+PjJdPWwsZT1vKzExfDAsbyksdmIoMHxmLDB8biwwfGwpLCgodHJbZitsPj4wXT0wKXx4Yls2MyZhcls0OCsoMHxhcltiPj4yXSk+PjJdXShiLCgwfHRyW2U+PjBdKTwwPzB8YXJbYz4+Ml06byxsKSkhPSgwfGwpKXJldHVybigoYXJbQT4+Ml09MCl8dHJbZT4+MF0pPDAmJnZ1KDB8YXJbYz4+Ml0pLHVyPWEsKGI9MCl8YjsoMHx0cltlPj4wXSk8MCYmdnUoMHxhcltjPj4yXSk7YnJlYWt9fXdoaWxlKDApO3JldHVybiAwPCgwfChpPWktdXwwKSkmJigwfHhiWzYzJmFyWzQ4KygwfGFyW2I+PjJdKT4+Ml1dKGIscixpKSkhPSgwfGkpPyhhcltBPj4yXT0wLHVyPWEsKGI9MCl8Yik6KGFyW3Q+PjJdPTAsdXI9YSwwfGIpfWZ1bmN0aW9uIExBKEEsZSxyKXtBfD0wLGV8PTAscnw9MDt2YXIgaSxmLG4sdCxvLGEsYztpZih1cj0oYT11cikrMTYwfDAsZj1hKzEzNnwwLHQ9KG49YSkrNTZ8MCxvPW4rNHwwLGFyW24+PjJdPTI5Mixhclt0Pj4yXT0zMTIsSmYobis1NnwwLG8pLGFyW24rMTI4Pj4yXT0wLGFyW24rMTMyPj4yXT0tMSxhcltuPj4yXT00MzA0LGFyW3Q+PjJdPTQzMjQsU2YobyksYXJbbz4+Ml09NDM0MCxhclsoaT1uKzM2fDApPj4yXT0wLGFyWzQraT4+Ml09MCxhcls4K2k+PjJdPTAsYXJbMTIraT4+Ml09MCxhcltuKzUyPj4yXT0xNixhcltmPj4yXT0wLGFyWzQrZj4+Ml09MCxhcls4K2Y+PjJdPTAsWGUobyxmKSwoMHx0clsxMStmPj4wXSk8MCYmdnUoMHxhcltmPj4yXSksSEEoZixlLHIpLFdlKG4sKGM9KGU9MHx0clsocj0xMStmfDApPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW2Y+PjJdOmYsYz8wfGFyWzQrZj4+Ml06MjU1JmUpLCgwfHRyW3I+PjBdKTwwJiZ2dSgwfGFyW2Y+PjJdKSxJZShBLG8pLGFyW24+PjJdPTQzMDQsYXJbdD4+Ml09NDMyNCxhcltvPj4yXT00MzQwLDA8PSgwfHRyWzExK2k+PjBdKSlyZXR1cm4ga2YobyksR2YoKSxiZih0KSx2b2lkKHVyPWEpO3Z1KDB8YXJbaT4+Ml0pLGtmKG8pLEdmKCksYmYodCksdXI9YX1mdW5jdGlvbiBLQShBLGUscixpKXtBfD0wLHJ8PTAsaXw9MDt2YXIgZixuLHQsbyxhPTAsYz0wLGw9MDtjPTB8dHJbKGY9KGV8PTApKzM2fDApPj4wXT8xMjo4LGw9MTk3MDYyODk2ND09KDB8YXJbKG89ZSsyMHwwKT4+Ml0pPzE2fGM6YyxhPSgwfGFyWyhuPXIrNHwwKT4+Ml0pLWktYy0oMHxhcltyPj4yXSkrbHwwLGFyWyh0PXIrMTJ8MCk+PjJdPWksZnVuY3Rpb24oQSxlKXtBfD0wO3ZhciByLGksZixuLHQ9MCxvPTAsYT0wLGM9MDsoMHwoZXw9MCkpPD0tMSYmc3IoMTg4NDMsNDczODIsNjE4LDE4ODU1KSxlJiYobj0wfGFyWyhmPUErNHwwKT4+Ml0sYT1jPTB8YXJbQT4+Ml0sKGk9KHI9KG89biktY3wwKStlfDApPj4+MDw9cj4+PjA/aT4+PjA8cj4+PjAmJigwfG8pIT0oMHwodD1hK2l8MCkpP2FyW2Y+PjJdPXQ6dD1uOihUQShBLGUpLGM9YT0wfGFyW0E+PjJdLHQ9MHxhcltmPj4yXSksKHQ9dC1jLWV8MCk+Pj4wPD0obz0wfGFyW0ErMTI+PjJdKT4+PjB8fHdiKChBPWErb3wwKStlfDAsMHxBLHQtb3wwKSl9KHIsbC1jfDApLFVBKHIsYSksVUEociwwfGFyW28+PjJdKTtkb3tpZigxOTcwNjI4OTY0PT0oMHxhcltvPj4yXSkpe2lmKGk9ZSsyNHwwLDE2PT0oKDB8YXJbZSsyOD4+Ml0pLSgwfGFyW2k+PjJdKXwwKSl7ekEocixpKTticmVha31zcigxOTA3OSwxOTEwNCwzMDksMTkxMTEpfX13aGlsZSgwKTtkb3tpZigwfHRyW2Y+PjBdKXtpZigoaT0wfGFyW2UrNDA+PjJdKT4+PjA8MTY3NzcyMTYpe1VBKHIsY3JbZSszNz4+MF08PDI0fGkpO2JyZWFrfXNyKDE5MTI2LDE5MTA0LDMxNCwxOTExMSl9fXdoaWxlKDApO2FyW3Q+PjJdPSgwfGFyW24+PjJdKS0oMHxhcltyPj4yXSksYz0wfGFyWyhhPTU2NTkyKSs0Pj4yXSxhclsobD1BKT4+Ml09YXJbYT4+Ml0sYXJbbCs0Pj4yXT1jLHl1KEErOHwwLDU2NjAwKX1mdW5jdGlvbiBDZShBLGUpe2V8PTA7dmFyIHIsaSxmLG4sdCxvPTAsYT0wLGM9MCxsPTA7Zj0oQXw9MCkrNHwwLG49MHxhcltBPj4yXSwxMDczNzQxODIzPChvPTErKGk9KHQ9KDB8YXJbZj4+Ml0pLW58MCk+PjIpfDApPj4+MCYmemwoKSxhPShjPSgwfGFyWyhsPUErOHwwKT4+Ml0pLW58MCk+PjEsYT1jPj4yPj4+MDw1MzY4NzA5MTE/YT4+PjA8bz4+PjA/bzphOjEwNzM3NDE4MjM7ZG97aWYoYSl7aWYoISgxMDczNzQxODIzPGE+Pj4wKSl7Yz0wfGh1KGE8PDIpO2JyZWFrfVp1KGw9MHxYKDgpLDQ0NTE5KSxhcltsPj4yXT0xNzY2MCxJKDB8bCw0MDE2LDQyOCl9ZWxzZSBjPTB9d2hpbGUoMCk7YXJbKHI9YysoaTw8Mil8MCk+PjJdPWFyW2U+PjJdLG89cisoMC1pPDwyKXwwLDA8KDB8dCkmJmhiKDB8bywwfG4sMHx0KSxhcltBPj4yXT1vLGFyW2Y+PjJdPTQrcixhcltsPj4yXT1jKyhhPDwyKSxuJiZ2dShuKX1mdW5jdGlvbiBxQShBLGUscil7QXw9MCxlfD0wO3ZhciBpLGY9MCxuPTA7aWYodXI9KGk9dXIpKzE2fDAsZj1pLG49MHxGQShyfD0wKSx0cltlKzM3Pj4wXT1uPj4+MjQsYXJbZSs0MD4+Ml09MTY3NzcyMTUmbix0cltlKzM2Pj4wXT0xLGFyWyhlPWUrMTZ8MCk+PjJdPTQrKDB8YXJbZT4+Ml0pLCEoMHx0cltyKzI0Pj4wXSkpcmV0dXJuIGY9MHxhclsocj01NjU5MikrND4+Ml0sYXJbKG49QSk+PjJdPWFyW3I+PjJdLGFyW24rND4+Ml09Zix5dShBKzh8MCw1NjYwMCksdm9pZCh1cj1pKTthcltmPj4yXT0wLGFyW2YrND4+Ml09MCxhcltmKzg+PjJdPTAsb28oQSwyLDEwMCxmKSx1cj0oMDw9KDB8dHJbZisxMT4+MF0pfHx2dSgwfGFyW2Y+PjJdKSxpKX1mdW5jdGlvbiAkQShBLGUscixpKXt2YXIgZixuLHQsbyxhLGMsbCx1LGIscyxkLGssaCx3LHYsbSxnLFoscCx5LEIsRSxYLFcsSSxDLEcsVixGPTAsUj0wLE49MCxfPTAsWT0wO3VyPShWPXVyKSsyMDh8MCxOPShyfD0wKSsxNnwwLGM9cisyNHwwLGw9NCsoVz1WKzE4NHwwKXwwLHU9KGV8PTApKzQ0fDAsYj1lKzQ4fDAsaz0xMisoQz0oST1WKSsyNHwwKXwwLGg9NCtDfDAsdz1zPTY0K0N8MCx2PTEzNitDfDAsbT0xNDArQ3wwLFo9NjArQ3wwLHA9MTErKFg9VisxOTJ8MCl8MCx5PWQ9OCtDfDAsQj0xMSsoRz1WKzE2OHwwKXwwLEU9MTErKGc9NDQrQ3wwKXwwLGY9ZSs1MnwwLG49LTEhPSgwfChpfD0wKSksbz0xMSsodD1JKzh8MCl8MCxhPShBfD0wKSs4fDAsZT0wO0E6Zm9yKDshKDA9PSgwfGFyWyhSPU4pPj4yXSkmMD09KDB8YXJbUis0Pj4yXSl8fDB8dHJbYz4+MF0pOyl7YXJbVz4+Ml09MCxhcltsPj4yXT0wLEFlKEkscixXKTtkb3tpZigoMHxhcltJPj4yXSk9PSgwfGFyWzE0MTQ4XSkpe2lmKChSPUY9MHxhcltiPj4yXSktKDB8YXJbdT4+Ml0pPj4zPj4+MDw9MmU0KXtSPj4+MDwoMHxhcltmPj4yXSk+Pj4wPyhhcltGPj4yXT1hcltXPj4yXSxhcltSKzQ+PjJdPWFyW2w+PjJdLGFyW1c+PjJdPTAsYXJbbD4+Ml09MCxhcltiPj4yXT1SKzgpOmVlKHUsVyksUj0obiYoMHwoZT1lKzF8MCkpPT0oMHxpKSk8PDMxPj4zMTticmVha31hcltkPj4yXT00NTI0LGFyW0M+PjJdPTE4OCxhcltzPj4yXT0yMDgsYXJbaD4+Ml09MCxKZih3LGspLGFyW3Y+PjJdPTAsYXJbbT4+Ml09LTEsYXJbQz4+Ml09NDUwNCxhcltzPj4yXT00NTQ0LGFyW2Q+PjJdPTQ1MjQsU2YoayksYXJbaz4+Ml09NDM0MCxhcltnPj4yXT0wLGFyWzQrZz4+Ml09MCxhcls4K2c+PjJdPTAsYXJbMTIrZz4+Ml09MCxhcltaPj4yXT0yNCxhcltYPj4yXT0wLGFyWzQrWD4+Ml09MCxhcls4K1g+PjJdPTAsWGUoayxYKSwoMHx0cltwPj4wXSk8MCYmdnUoMHxhcltYPj4yXSksV2UoMHxMZigwfFdlKHksMTkyNzMsMzApLDJlNCksMTkzMDQsMTApLEllKEcsayksb28oQSw2LDFlMyxHKSwoMHx0cltCPj4wXSk8MCYmdnUoMHxhcltHPj4yXSksYXJbQz4+Ml09NDUwNCxhcltzPj4yXT00NTQ0LGFyW3k+PjJdPTQ1MjQsYXJbaz4+Ml09NDM0MCwoMHx0cltFPj4wXSk8MCYmdnUoMHxhcltnPj4yXSksa2YoayksX2YoKSxiZihzKSxSPTF9ZWxzZSBGPTB8YXJbKFk9SSkrND4+Ml0sYXJbKFI9QSk+PjJdPWFyW1k+PjJdLGFyW1IrND4+Ml09RixhclthPj4yXT1hclt0Pj4yXSxhcls0K2E+PjJdPWFyWzQrdD4+Ml0sYXJbOCthPj4yXT1hcls4K3Q+PjJdLGFyW3Q+PjJdPTAsYXJbNCt0Pj4yXT0wLGFyWzgrdD4+Ml09MCxSPTF9d2hpbGUoMCk7c3dpdGNoKCgwfHRyW28+PjBdKTwwJiZ2dSgwfGFyW3Q+PjJdKSwwfChGPTB8YXJbbD4+Ml0pJiZkdShGKSwzJlIpe2Nhc2UgMDpicmVhaztjYXNlIDM6YnJlYWsgQTtkZWZhdWx0Ol89Mjg7YnJlYWsgQX19dXI9KDI4IT0oMHxfKSYmKDB8dHJbYz4+MF0/KGFyW1g+PjJdPTAsYXJbNCtYPj4yXT0wLGFyWzgrWD4+Ml09MCxvbyhBLDIsMTAwLFgpLCgwfHRyWzExK1g+PjBdKTwwJiZ2dSgwfGFyW1g+PjJdKSk6KF89MHxhclsoTj01NjU5MikrND4+Ml0sYXJbKFk9QSk+PjJdPWFyW04+PjJdLGFyW1krND4+Ml09Xyx5dShhLDU2NjAwKSkpLFYpfWZ1bmN0aW9uIEFlKEEsZSxyKXtBfD0wLGV8PTAscnw9MDt2YXIgaSxmLG4sdCxvLGEsYyxsLHUsYixzPTAsZD0wLGs9MCxoPTAsdz0wLHY9MCxtPTAsZz0wLFo9MCxwPTAseT0wLEI9MDt1cj0oYj11cikrMzIwfDAscD1iKzIxNnwwLGw9YisxNDR8MCxhPShaPWIpKzMwNHwwLG49YisyOTJ8MCxpPWIrMjgwfDAsZj1iKzI2OHwwLHQ9YisyNTZ8MCxjPWIrMjQ4fDAsYXJbKHU9YisxNjh8MCk+PjJdPTQyNjQsbz04K3V8MCxhcls0MCt1Pj4yXT0wLGFyW28+PjJdPTAsYXJbNCtvPj4yXT0wLGFyWzgrbz4+Ml09MCxhclsxMitvPj4yXT0wLGFyWzE2K28+PjJdPTAsYXJbMjArbz4+Ml09MCxhclsyNCtvPj4yXT0wLG9yWzI4K28+PjFdPTAscmUobCx1LGUpO0E6ZG97aWYoMHxhcltsPj4yXSlCPTB8YXJbKHA9bCkrND4+Ml0sYXJbKHk9QSk+PjJdPWFyW3A+PjJdLGFyW3krND4+Ml09QixCPTgrbHwwLGFyWyh5PUErOHwwKT4+Ml09YXJbQj4+Ml0sYXJbeSs0Pj4yXT1hcltCKzQ+PjJdLGFyW3krOD4+Ml09YXJbQis4Pj4yXSxhcltCPj4yXT0wLGFyW0IrND4+Ml09MCxhcltCKzg+PjJdPTA7ZWxzZXtpZigwfHRyW2UrMjQ+PjBdKXthcltwPj4yXT0wLGFyW3ArND4+Ml09MCxhcltwKzg+PjJdPTAsb28oQSwyLDEwMCxwKSwoMHx0cltwKzExPj4wXSk8MCYmdnUoMHxhcltwPj4yXSk7YnJlYWt9cz0wfGFyWzIwK3U+PjJdO2U6ZG97aWYoKDB8cyk8MTc2ODcxNDA4Myl7aWYoKDB8cyk8MTcxODkwOTI5Nil7aWYoKDB8cyk8MTY2ODI0NjY0Mil7aWYoKDB8cyk8MTYzNTEzNTgxMSl7c3dpdGNoKDB8cyl7Y2FzZSAxNjM1MDg4NDUxOmJyZWFrO2RlZmF1bHQ6Zz0xMzM7YnJlYWsgZX1zPTB8aHUoOTYpLGFyW3MrND4+Ml09MCxhcltzKzg+PjJdPTAsYXJbcz4+Ml09NTE5NixhclsobT1zKzE2fDApPj4yXT00MjY0LGFyWyhkPXMrMjR8MCk+PjJdPWFyW28+PjJdLGFyW2QrND4+Ml09YXJbNCtvPj4yXSxhcltkKzg+PjJdPWFyWzgrbz4+Ml0sYXJbZCsxMj4+Ml09YXJbMTIrbz4+Ml0sYXJbKGQ9cys0MHwwKT4+Ml09MCxhclsoaz1zKzQ0fDApPj4yXT0wLHY9KGFyWyhoPXMrNDh8MCk+PjJdPTApfGFyWzI0K3U+PjJdLHc9KDB8YXJbMjgrdT4+Ml0pLXZ8MDtkb3tpZigwfHcpe2lmKCEoKDB8dyk8MCkpe3k9MHxodSh3KSxhcltrPj4yXT15LGQ9KGFyW2Q+PjJdPXkpK3d8MCxhcltoPj4yXT1kLGhiKDB8eSwwfHYsMHx3KSxhcltrPj4yXT1kO2JyZWFrfXpsKCl9fXdoaWxlKDApO3Y9MHxhclsodz0zNit1fDApKzQ+PjJdLGFyWyh5PXMrNTJ8MCk+PjJdPWFyW3c+PjJdLGFyW3krND4+Ml09dixhcltzKzYwPj4yXT0wLGFyW3MrNjQ+PjJdPTAsYXJbcys2OD4+Ml09MCxhclttPj4yXT01MjI0LGFyWyh5PXMrNzJ8MCk+PjJdPTAsYXJbeSs0Pj4yXT0wLGFyW3krOD4+Ml09MCxhclt5KzEyPj4yXT0wLGFyW3krMTY+PjJdPTAsYXJbeSsyMD4+Ml09MDticmVha31pZigoMHxzKTwxNjY4MDQ3MjE2KXtzd2l0Y2goMHxzKXtjYXNlIDE2MzUxMzU4MTE6YnJlYWs7ZGVmYXVsdDpnPTEzMzticmVhayBlfXM9MHxodSg5NiksYXJbcys0Pj4yXT0wLGFyW3MrOD4+Ml09MCxhcltzPj4yXT01NTU2LGFyWyhtPXMrMTZ8MCk+PjJdPTQyNjQsYXJbKGQ9cysyNHwwKT4+Ml09YXJbbz4+Ml0sYXJbZCs0Pj4yXT1hcls0K28+PjJdLGFyW2QrOD4+Ml09YXJbOCtvPj4yXSxhcltkKzEyPj4yXT1hclsxMitvPj4yXSxhclsoZD1zKzQwfDApPj4yXT0wLGFyWyhrPXMrNDR8MCk+PjJdPTAsdj0oYXJbKGg9cys0OHwwKT4+Ml09MCl8YXJbMjQrdT4+Ml0sdz0oMHxhclsyOCt1Pj4yXSktdnwwO2Rve2lmKDB8dyl7aWYoISgoMHx3KTwwKSl7Qj0wfGh1KHcpLGFyW2s+PjJdPUIseT0oYXJbZD4+Ml09Qikrd3wwLGFyW2g+PjJdPXksaGIoMHxCLDB8diwwfHcpLGFyW2s+PjJdPXk7YnJlYWt9emwoKX19d2hpbGUoMCk7Zm9yKHc9MHxhclsoQj0zNit1fDApKzQ+PjJdLGFyWyhoPXMrNTJ8MCk+PjJdPWFyW0I+PjJdLGFyW2grND4+Ml09dyxhcltzKzYwPj4yXT0wLGFyW3MrNjQ+PjJdPTAsYXJbcys2OD4+Ml09MCxhclttPj4yXT01NTg0LHRyW3MrNzI+PjBdPTEsdz0oaD1zKzczfDApKzIzfDA7KDB8KGg9aCsxfCh0cltoPj4wXT0wKSkpPCgwfHcpOyk7YnJlYWt9c3dpdGNoKDB8cyl7Y2FzZSAxNjY4MDQ3MjE2OmJyZWFrO2RlZmF1bHQ6Zz0xMzM7YnJlYWsgZX1zPTB8aHUoMTA0KSxhcltzKzQ+PjJdPTAsYXJbcys4Pj4yXT0wLGFyW3M+PjJdPTUzNzYsYXJbKG09cysxNnwwKT4+Ml09NDI2NCxhclsoZD1zKzI0fDApPj4yXT1hcltvPj4yXSxhcltkKzQ+PjJdPWFyWzQrbz4+Ml0sYXJbZCs4Pj4yXT1hcls4K28+PjJdLGFyW2QrMTI+PjJdPWFyWzEyK28+PjJdLGFyWyhkPXMrNDB8MCk+PjJdPTAsYXJbKGs9cys0NHwwKT4+Ml09MCx2PShhclsoaD1zKzQ4fDApPj4yXT0wKXxhclsyNCt1Pj4yXSx3PSgwfGFyWzI4K3U+PjJdKS12fDA7ZG97aWYoMHx3KXtpZighKCgwfHcpPDApKXt5PTB8aHUodyksYXJbaz4+Ml09eSxCPShhcltkPj4yXT15KSt3fDAsYXJbaD4+Ml09QixoYigwfHksMHx2LDB8dyksYXJbaz4+Ml09QjticmVha316bCgpfX13aGlsZSgwKTt5PTB8YXJbKHY9MzYrdXwwKSs0Pj4yXSxhclsoQj1zKzUyfDApPj4yXT1hclt2Pj4yXSxhcltCKzQ+PjJdPXksYXJbcys2MD4+Ml09MCxhcltzKzY0Pj4yXT0wLGFyW3MrNjg+PjJdPTAsYXJbbT4+Ml09NTQwNCxhcltzKzcyPj4yXT0wLGFyW3MrNzY+PjJdPTEsYXJbcys4MD4+Ml09MCxhcltzKzg0Pj4yXT0xLGFyW3MrODg+PjJdPTAsYXJbcys5Mj4+Ml09MSxhcltzKzk2Pj4yXT0wLGFyW3MrMTAwPj4yXT0xO2JyZWFrfWlmKCgwfHMpPDE2ODQ2MzExNDIpe3N3aXRjaCgwfHMpe2Nhc2UgMTY2ODI0NjY0MjpicmVhaztkZWZhdWx0Omc9MTMzO2JyZWFrIGV9cz0wfGh1KDgwKSxhcltzKzQ+PjJdPTAsYXJbcys4Pj4yXT0wLGFyW3M+PjJdPTU5MTYsYXJbKG09cysxNnwwKT4+Ml09NDI2NCxhclsoZD1zKzI0fDApPj4yXT1hcltvPj4yXSxhcltkKzQ+PjJdPWFyWzQrbz4+Ml0sYXJbZCs4Pj4yXT1hcls4K28+PjJdLGFyW2QrMTI+PjJdPWFyWzEyK28+PjJdLGFyWyhkPXMrNDB8MCk+PjJdPTAsYXJbKGs9cys0NHwwKT4+Ml09MCx2PShhclsoaD1zKzQ4fDApPj4yXT0wKXxhclsyNCt1Pj4yXSx3PSgwfGFyWzI4K3U+PjJdKS12fDA7ZG97aWYoMHx3KXtpZighKCgwfHcpPDApKXt5PTB8aHUodyksYXJbaz4+Ml09eSxCPShhcltkPj4yXT15KSt3fDAsYXJbaD4+Ml09QixoYigwfHksMHx2LDB8dyksYXJbaz4+Ml09QjticmVha316bCgpfX13aGlsZSgwKTt5PTB8YXJbKHY9MzYrdXwwKSs0Pj4yXSxhclsoQj1zKzUyfDApPj4yXT1hclt2Pj4yXSxhcltCKzQ+PjJdPXksYXJbcys2MD4+Ml09MCxhcltzKzY0Pj4yXT0wLGFyW3MrNjg+PjJdPTAsYXJbbT4+Ml09NTk0NCxhcltzKzcyPj4yXT0wLGFyW3MrNzY+PjJdPTA7YnJlYWt9aWYoKDB8cyk8MTY4NTIxODY2Mil7c3dpdGNoKDB8cyl7Y2FzZSAxNjg0NjMxMTQyOmJyZWFrO2RlZmF1bHQ6Zz0xMzM7YnJlYWsgZX1zPTB8aHUoNzIpLGFyW3MrND4+Ml09MCxhcltzKzg+PjJdPTAsYXJbcz4+Ml09NTczNixhclsobT1zKzE2fDApPj4yXT00MjY0LGFyWyhkPXMrMjR8MCk+PjJdPWFyW28+PjJdLGFyW2QrND4+Ml09YXJbNCtvPj4yXSxhcltkKzg+PjJdPWFyWzgrbz4+Ml0sYXJbZCsxMj4+Ml09YXJbMTIrbz4+Ml0sYXJbKGQ9cys0MHwwKT4+Ml09MCxhclsoaz1zKzQ0fDApPj4yXT0wLHY9KGFyWyhoPXMrNDh8MCk+PjJdPTApfGFyWzI0K3U+PjJdLHc9KDB8YXJbMjgrdT4+Ml0pLXZ8MDtkb3tpZigwfHcpe2lmKCEoKDB8dyk8MCkpe3k9MHxodSh3KSxhcltrPj4yXT15LEI9KGFyW2Q+PjJdPXkpK3d8MCxhcltoPj4yXT1CLGhiKDB8eSwwfHYsMHx3KSxhcltrPj4yXT1CO2JyZWFrfXpsKCl9fXdoaWxlKDApO3k9MHxhclsodj0zNit1fDApKzQ+PjJdLGFyWyhCPXMrNTJ8MCk+PjJdPWFyW3Y+PjJdLGFyW0IrND4+Ml09eSxhcltzKzYwPj4yXT0wLGFyW3MrNjQ+PjJdPTAsYXJbcys2OD4+Ml09MCxhclttPj4yXT01NzY0O2JyZWFrfXN3aXRjaCgwfHMpe2Nhc2UgMTY4NTIxODY2MjpicmVhaztkZWZhdWx0Omc9MTMzO2JyZWFrIGV9cz0wfGh1KDcyKSxhcltzKzQ+PjJdPTAsYXJbcys4Pj4yXT0wLGFyW3M+PjJdPTU3OTYsYXJbKG09cysxNnwwKT4+Ml09NDI2NCxhclsoZD1zKzI0fDApPj4yXT1hcltvPj4yXSxhcltkKzQ+PjJdPWFyWzQrbz4+Ml0sYXJbZCs4Pj4yXT1hcls4K28+PjJdLGFyW2QrMTI+PjJdPWFyWzEyK28+PjJdLGFyWyhkPXMrNDB8MCk+PjJdPTAsYXJbKGs9cys0NHwwKT4+Ml09MCx2PShhclsoaD1zKzQ4fDApPj4yXT0wKXxhclsyNCt1Pj4yXSx3PSgwfGFyWzI4K3U+PjJdKS12fDA7ZG97aWYoMHx3KXtpZighKCgwfHcpPDApKXt5PTB8aHUodyksYXJbaz4+Ml09eSxCPShhcltkPj4yXT15KSt3fDAsYXJbaD4+Ml09QixoYigwfHksMHx2LDB8dyksYXJbaz4+Ml09QjticmVha316bCgpfX13aGlsZSgwKTt5PTB8YXJbKHY9MzYrdXwwKSs0Pj4yXSxhclsoQj1zKzUyfDApPj4yXT1hclt2Pj4yXSxhcltCKzQ+PjJdPXksYXJbcys2MD4+Ml09MCxhcltzKzY0Pj4yXT0wLGFyW3MrNjg+PjJdPTAsYXJbbT4+Ml09NTgyNDticmVha31pZigoMHxzKTwxNzUyNTg5MTIzKXtpZigoMHxzKTwxNzM1NTUzMTMyKXtzd2l0Y2goMHxzKXtjYXNlIDE3MTg5MDkyOTY6YnJlYWs7ZGVmYXVsdDpnPTEzMzticmVhayBlfXM9MHxodSg5NiksYXJbcys0Pj4yXT0wLGFyW3MrOD4+Ml09MCxhcltzPj4yXT00NjAwLGFyWyhtPXMrMTZ8MCk+PjJdPTQyNjQsYXJbKGQ9cysyNHwwKT4+Ml09YXJbbz4+Ml0sYXJbZCs0Pj4yXT1hcls0K28+PjJdLGFyW2QrOD4+Ml09YXJbOCtvPj4yXSxhcltkKzEyPj4yXT1hclsxMitvPj4yXSxhclsoZD1zKzQwfDApPj4yXT0wLGFyWyhrPXMrNDR8MCk+PjJdPTAsdj0oYXJbKGg9cys0OHwwKT4+Ml09MCl8YXJbMjQrdT4+Ml0sdz0oMHxhclsyOCt1Pj4yXSktdnwwO2Rve2lmKDB8dyl7aWYoISgoMHx3KTwwKSl7eT0wfGh1KHcpLGFyW2s+PjJdPXksQj0oYXJbZD4+Ml09eSkrd3wwLGFyW2g+PjJdPUIsaGIoMHx5LDB8diwwfHcpLGFyW2s+PjJdPUI7YnJlYWt9emwoKX19d2hpbGUoMCk7eT0wfGFyWyh2PTM2K3V8MCkrND4+Ml0sYXJbKEI9cys1MnwwKT4+Ml09YXJbdj4+Ml0sYXJbQis0Pj4yXT15LGFyW3MrNjA+PjJdPTAsYXJbcys2ND4+Ml09MCxhcltzKzY4Pj4yXT0wLGFyW20+PjJdPTQ0MzYsYXJbKEI9cys3MnwwKT4+Ml09MCxhcltCKzQ+PjJdPTAsYXJbQis4Pj4yXT0wLGFyW0IrMTI+PjJdPTAsYXJbQisxNj4+Ml09MDticmVha31pZigoMHxzKTwxNzUxNDExODI2KXtzd2l0Y2goMHxzKXtjYXNlIDE3MzU1NTMxMzI6YnJlYWs7ZGVmYXVsdDpnPTEzMzticmVhayBlfXM9MHxodSg4OCksYXJbcys0Pj4yXT0wLGFyW3MrOD4+Ml09MCxhcltzPj4yXT01Njc2LGFyWyhtPXMrMTZ8MCk+PjJdPTQyNjQsYXJbKGQ9cysyNHwwKT4+Ml09YXJbbz4+Ml0sYXJbZCs0Pj4yXT1hcls0K28+PjJdLGFyW2QrOD4+Ml09YXJbOCtvPj4yXSxhcltkKzEyPj4yXT1hclsxMitvPj4yXSxhclsoZD1zKzQwfDApPj4yXT0wLGFyWyhrPXMrNDR8MCk+PjJdPTAsdj0oYXJbKGg9cys0OHwwKT4+Ml09MCl8YXJbMjQrdT4+Ml0sdz0oMHxhclsyOCt1Pj4yXSktdnwwO2Rve2lmKDB8dyl7aWYoISgoMHx3KTwwKSl7eT0wfGh1KHcpLGFyW2s+PjJdPXksQj0oYXJbZD4+Ml09eSkrd3wwLGFyW2g+PjJdPUIsaGIoMHx5LDB8diwwfHcpLGFyW2s+PjJdPUI7YnJlYWt9emwoKX19d2hpbGUoMCk7eT0wfGFyWyh2PTM2K3V8MCkrND4+Ml0sYXJbKEI9cys1MnwwKT4+Ml09YXJbdj4+Ml0sYXJbQis0Pj4yXT15LGFyW3MrNjA+PjJdPTAsYXJbcys2ND4+Ml09MCxhcltzKzY4Pj4yXT0wLGFyW20+PjJdPTU3MDQsYXJbcys3Mj4+Ml09MCxhcltzKzc2Pj4yXT0wLGFyW3MrODA+PjJdPTA7YnJlYWt9c3dpdGNoKDB8cyl7Y2FzZSAxNzUxNDExODI2OmJyZWFrO2RlZmF1bHQ6Zz0xMzM7YnJlYWsgZX1zPTB8aHUoMTA0KSxhcltzKzQ+PjJdPTAsYXJbcys4Pj4yXT0wLGFyW3M+PjJdPTQ2NTYsYXJbKG09cysxNnwwKT4+Ml09NDI2NCxhclsoZD1zKzI0fDApPj4yXT1hcltvPj4yXSxhcltkKzQ+PjJdPWFyWzQrbz4+Ml0sYXJbZCs4Pj4yXT1hcls4K28+PjJdLGFyW2QrMTI+PjJdPWFyWzEyK28+PjJdLGFyWyhkPXMrNDB8MCk+PjJdPTAsYXJbKGs9cys0NHwwKT4+Ml09MCx2PShhclsoaD1zKzQ4fDApPj4yXT0wKXxhclsyNCt1Pj4yXSx3PSgwfGFyWzI4K3U+PjJdKS12fDA7ZG97aWYoMHx3KXtpZighKCgwfHcpPDApKXt5PTB8aHUodyksYXJbaz4+Ml09eSxCPShhcltkPj4yXT15KSt3fDAsYXJbaD4+Ml09QixoYigwfHksMHx2LDB8dyksYXJbaz4+Ml09QjticmVha316bCgpfX13aGlsZSgwKTt5PTB8YXJbKHY9MzYrdXwwKSs0Pj4yXSxhclsoQj1zKzUyfDApPj4yXT1hclt2Pj4yXSxhcltCKzQ+PjJdPXksYXJbcys2MD4+Ml09MCxhcltzKzY0Pj4yXT0wLGFyW3MrNjg+PjJdPTAsYXJbbT4+Ml09NDY4NCxhcltzKzcyPj4yXT0wLGFyW3MrNzY+PjJdPTE4ODU5NTQ5MzIsYXJbKEI9cys4MHwwKT4+Ml09MCxhcltCKzQ+PjJdPTAsYXJbQis4Pj4yXT0wLGFyW0IrMTI+PjJdPTAsYXJbQisxNj4+Ml09MCxhcltCKzIwPj4yXT0wO2JyZWFrfWlmKCgwfHMpPDE3NjgxODYyMjgpe3N3aXRjaCgwfHMpe2Nhc2UgMTc1MjU4OTEyMzpicmVhaztkZWZhdWx0Omc9MTMzO2JyZWFrIGV9cz0wfGh1KDEyMCksYXJbcys0Pj4yXT0wLGFyW3MrOD4+Ml09MCxhcltzPj4yXT01NDk2LGFyWyhtPXMrMTZ8MCk+PjJdPTQyNjQsYXJbKGQ9cysyNHwwKT4+Ml09YXJbbz4+Ml0sYXJbZCs0Pj4yXT1hcls0K28+PjJdLGFyW2QrOD4+Ml09YXJbOCtvPj4yXSxhcltkKzEyPj4yXT1hclsxMitvPj4yXSxhclsoZD1zKzQwfDApPj4yXT0wLGFyWyhrPXMrNDR8MCk+PjJdPTAsdj0oYXJbKGg9cys0OHwwKT4+Ml09MCl8YXJbMjQrdT4+Ml0sdz0oMHxhclsyOCt1Pj4yXSktdnwwO2Rve2lmKDB8dyl7aWYoISgoMHx3KTwwKSl7eT0wfGh1KHcpLGFyW2s+PjJdPXksQj0oYXJbZD4+Ml09eSkrd3wwLGFyW2g+PjJdPUIsaGIoMHx5LDB8diwwfHcpLGFyW2s+PjJdPUI7YnJlYWt9emwoKX19d2hpbGUoMCk7eT0wfGFyWyh2PTM2K3V8MCkrND4+Ml0sYXJbKEI9cys1MnwwKT4+Ml09YXJbdj4+Ml0sYXJbQis0Pj4yXT15LGFyW3MrNjA+PjJdPTAsYXJbcys2ND4+Ml09MCxhcltzKzY4Pj4yXT0wLGFyW20+PjJdPTU1MjQsYXJbcys4MD4+Ml09MCxhcltzKzg0Pj4yXT0wLHRyW3MrMTA0Pj4wXT00LGFyW3MrMTA4Pj4yXT0wLGFyW3MrMTEyPj4yXT0wLGFyW3MrMTE2Pj4yXT0wO2JyZWFrfWlmKCgwfHMpPDE3Njg1MTcyMjIpe3N3aXRjaCgwfHMpe2Nhc2UgMTc2ODE4NjIyODpicmVhaztkZWZhdWx0Omc9MTMzO2JyZWFrIGV9cz0wfGh1KDEwNCksYXJbcys0Pj4yXT0wLGFyW3MrOD4+Ml09MCxhcltzPj4yXT01NjE2LGFyWyhtPXMrMTZ8MCk+PjJdPTQyNjQsYXJbKGQ9cysyNHwwKT4+Ml09YXJbbz4+Ml0sYXJbZCs0Pj4yXT1hcls0K28+PjJdLGFyW2QrOD4+Ml09YXJbOCtvPj4yXSxhcltkKzEyPj4yXT1hclsxMitvPj4yXSxhclsoZD1zKzQwfDApPj4yXT0wLGFyWyhrPXMrNDR8MCk+PjJdPTAsdj0oYXJbKGg9cys0OHwwKT4+Ml09MCl8YXJbMjQrdT4+Ml0sdz0oMHxhclsyOCt1Pj4yXSktdnwwO2Rve2lmKDB8dyl7aWYoISgoMHx3KTwwKSl7eT0wfGh1KHcpLGFyW2s+PjJdPXksQj0oYXJbZD4+Ml09eSkrd3wwLGFyW2g+PjJdPUIsaGIoMHx5LDB8diwwfHcpLGFyW2s+PjJdPUI7YnJlYWt9emwoKX19d2hpbGUoMCk7eT0wfGFyWyh2PTM2K3V8MCkrND4+Ml0sYXJbKEI9cys1MnwwKT4+Ml09YXJbdj4+Ml0sYXJbQis0Pj4yXT15LGFyW3MrNjA+PjJdPTAsYXJbcys2ND4+Ml09MCxhcltzKzY4Pj4yXT0wLGFyW20+PjJdPTU2NDQsYXJbKEI9cys3MnwwKT4+Ml09MCxhcltCKzQ+PjJdPTAsYXJbQis4Pj4yXT0wLGFyW0IrMTI+PjJdPTAsYXJbQisxNj4+Ml09MCxhcltCKzIwPj4yXT0wLGFyW0IrMjQ+PjJdPTA7YnJlYWt9c3dpdGNoKDB8cyl7Y2FzZSAxNzY4NTE3MjIyOmJyZWFrO2RlZmF1bHQ6Zz0xMzM7YnJlYWsgZX1zPTB8aHUoNzIpLGFyW3MrND4+Ml09MCxhcltzKzg+PjJdPTAsYXJbcz4+Ml09NDgzNixhclsobT1zKzE2fDApPj4yXT00MjY0LGFyWyhkPXMrMjR8MCk+PjJdPWFyW28+PjJdLGFyW2QrND4+Ml09YXJbNCtvPj4yXSxhcltkKzg+PjJdPWFyWzgrbz4+Ml0sYXJbZCsxMj4+Ml09YXJbMTIrbz4+Ml0sYXJbKGQ9cys0MHwwKT4+Ml09MCxhclsoaz1zKzQ0fDApPj4yXT0wLHY9KGFyWyhoPXMrNDh8MCk+PjJdPTApfGFyWzI0K3U+PjJdLHc9KDB8YXJbMjgrdT4+Ml0pLXZ8MDtkb3tpZigwfHcpe2lmKCEoKDB8dyk8MCkpe3k9MHxodSh3KSxhcltrPj4yXT15LEI9KGFyW2Q+PjJdPXkpK3d8MCxhcltoPj4yXT1CLGhiKDB8eSwwfHYsMHx3KSxhcltrPj4yXT1CO2JyZWFrfXpsKCl9fXdoaWxlKDApO3k9MHxhclsodj0zNit1fDApKzQ+PjJdLGFyWyhCPXMrNTJ8MCk+PjJdPWFyW3Y+PjJdLGFyW0IrND4+Ml09eSxhcltzKzYwPj4yXT0wLGFyW3MrNjQ+PjJdPTAsYXJbcys2OD4+Ml09MCxhclttPj4yXT00ODY0O2JyZWFrfWlmKCgwfHMpPDE3NjkxMDQ3NDIpe2lmKDE3Njg5NzMxNjc8PSgwfHMpKXtpZigoMHxzKTwxNzY4OTc1NzEzKXtzd2l0Y2goMHxzKXtjYXNlIDE3Njg5NzMxNjc6YnJlYWs7ZGVmYXVsdDpnPTEzMzticmVhayBlfXM9MHxodSg3MiksYXJbcys0Pj4yXT0wLGFyW3MrOD4+Ml09MCxhcltzPj4yXT01MDE2LGFyWyhtPXMrMTZ8MCk+PjJdPTQyNjQsYXJbKGQ9cysyNHwwKT4+Ml09YXJbbz4+Ml0sYXJbZCs0Pj4yXT1hcls0K28+PjJdLGFyW2QrOD4+Ml09YXJbOCtvPj4yXSxhcltkKzEyPj4yXT1hclsxMitvPj4yXSxhclsoZD1zKzQwfDApPj4yXT0wLGFyWyhrPXMrNDR8MCk+PjJdPTAsdj0oYXJbKGg9cys0OHwwKT4+Ml09MCl8YXJbMjQrdT4+Ml0sdz0oMHxhclsyOCt1Pj4yXSktdnwwO2Rve2lmKDB8dyl7aWYoISgoMHx3KTwwKSl7eT0wfGh1KHcpLGFyW2s+PjJdPXksQj0oYXJbZD4+Ml09eSkrd3wwLGFyW2g+PjJdPUIsaGIoMHx5LDB8diwwfHcpLGFyW2s+PjJdPUI7YnJlYWt9emwoKX19d2hpbGUoMCk7eT0wfGFyWyh2PTM2K3V8MCkrND4+Ml0sYXJbKEI9cys1MnwwKT4+Ml09YXJbdj4+Ml0sYXJbQis0Pj4yXT15LGFyW3MrNjA+PjJdPTAsYXJbcys2ND4+Ml09MCxhcltzKzY4Pj4yXT0wLGFyW20+PjJdPTUwNDQ7YnJlYWt9c3dpdGNoKDB8cyl7Y2FzZSAxNzY4OTc3MDA4OnM9MHxodSg3MiksYXJbcys0Pj4yXT0wLGFyW3MrOD4+Ml09MCxhcltzPj4yXT00OTU2LGFyWyhtPXMrMTZ8MCk+PjJdPTQyNjQsYXJbKGQ9cysyNHwwKT4+Ml09YXJbbz4+Ml0sYXJbZCs0Pj4yXT1hcls0K28+PjJdLGFyW2QrOD4+Ml09YXJbOCtvPj4yXSxhcltkKzEyPj4yXT1hclsxMitvPj4yXSxhclsoZD1zKzQwfDApPj4yXT0wLGFyWyhrPXMrNDR8MCk+PjJdPTAsdj0oYXJbKGg9cys0OHwwKT4+Ml09MCl8YXJbMjQrdT4+Ml0sdz0oMHxhclsyOCt1Pj4yXSktdnwwO2Rve2lmKDB8dyl7aWYoISgoMHx3KTwwKSl7eT0wfGh1KHcpLGFyW2s+PjJdPXksQj0oYXJbZD4+Ml09eSkrd3wwLGFyW2g+PjJdPUIsaGIoMHx5LDB8diwwfHcpLGFyW2s+PjJdPUI7YnJlYWt9emwoKX19d2hpbGUoMCk7eT0wfGFyWyh2PTM2K3V8MCkrND4+Ml0sYXJbKEI9cys1MnwwKT4+Ml09YXJbdj4+Ml0sYXJbQis0Pj4yXT15LGFyW3MrNjA+PjJdPTAsYXJbcys2ND4+Ml09MCxhcltzKzY4Pj4yXT0wLGFyW20+PjJdPTQ5ODQ7YnJlYWsgZTtjYXNlIDE3Njg5NzU3MTM6cz0wfGh1KDg4KSxhcltzKzQ+PjJdPTAsYXJbcys4Pj4yXT0wLGFyW3M+PjJdPTUwNzYsYXJbKG09cysxNnwwKT4+Ml09NDI2NCxhclsoZD1zKzI0fDApPj4yXT1hcltvPj4yXSxhcltkKzQ+PjJdPWFyWzQrbz4+Ml0sYXJbZCs4Pj4yXT1hcls4K28+PjJdLGFyW2QrMTI+PjJdPWFyWzEyK28+PjJdLGFyWyhkPXMrNDB8MCk+PjJdPTAsYXJbKGs9cys0NHwwKT4+Ml09MCx2PShhclsoaD1zKzQ4fDApPj4yXT0wKXxhclsyNCt1Pj4yXSx3PSgwfGFyWzI4K3U+PjJdKS12fDA7ZG97aWYoMHx3KXtpZighKCgwfHcpPDApKXt5PTB8aHUodyksYXJbaz4+Ml09eSxCPShhcltkPj4yXT15KSt3fDAsYXJbaD4+Ml09QixoYigwfHksMHx2LDB8dyksYXJbaz4+Ml09QjticmVha316bCgpfX13aGlsZSgwKTt5PTB8YXJbKHY9MzYrdXwwKSs0Pj4yXSxhclsoQj1zKzUyfDApPj4yXT1hclt2Pj4yXSxhcltCKzQ+PjJdPXksYXJbcys2MD4+Ml09MCxhcltzKzY0Pj4yXT0wLGFyW3MrNjg+PjJdPTAsYXJbbT4+Ml09NTEwNCxhcltzKzcyPj4yXT0wLGFyW3MrNzY+PjJdPTAsYXJbcys4MD4+Ml09MDticmVhayBlO2RlZmF1bHQ6Zz0xMzM7YnJlYWsgZX19aWYoKDB8cyk8MTc2ODc3ODA5OCl7c3dpdGNoKDB8cyl7Y2FzZSAxNzY4NzE0MDgzOmJyZWFrO2RlZmF1bHQ6Zz0xMzM7YnJlYWsgZX1zPTB8aHUoMTA0KSxhcltzKzQ+PjJdPTAsYXJbcys4Pj4yXT0wLGFyW3M+PjJdPTQ3NzYsYXJbKG09cysxNnwwKT4+Ml09NDI2NCxhclsoZD1zKzI0fDApPj4yXT1hcltvPj4yXSxhcltkKzQ+PjJdPWFyWzQrbz4+Ml0sYXJbZCs4Pj4yXT1hcls4K28+PjJdLGFyW2QrMTI+PjJdPWFyWzEyK28+PjJdLGFyWyhkPXMrNDB8MCk+PjJdPTAsYXJbKGs9cys0NHwwKT4+Ml09MCx2PShhclsoaD1zKzQ4fDApPj4yXT0wKXxhclsyNCt1Pj4yXSx3PSgwfGFyWzI4K3U+PjJdKS12fDA7ZG97aWYoMHx3KXtpZighKCgwfHcpPDApKXt5PTB8aHUodyksYXJbaz4+Ml09eSxCPShhcltkPj4yXT15KSt3fDAsYXJbaD4+Ml09QixoYigwfHksMHx2LDB8dyksYXJbaz4+Ml09QjticmVha316bCgpfX13aGlsZSgwKTt5PTB8YXJbKHY9MzYrdXwwKSs0Pj4yXSxhclsoQj1zKzUyfDApPj4yXT1hclt2Pj4yXSxhcltCKzQ+PjJdPXksYXJbcys2MD4+Ml09MCxhcltzKzY0Pj4yXT0wLGFyW3MrNjg+PjJdPTAsYXJbbT4+Ml09NDgwNCxCPXMrNzJ8MCxhcltzKzk2Pj4yXT0wLGFyW0I+PjJdPTAsYXJbQis0Pj4yXT0wLGFyW0IrOD4+Ml09MCxhcltCKzEyPj4yXT0wLGFyW0IrMTY+PjJdPTAsdHJbQisyMD4+MF09MDticmVha31pZigoMHxzKTwxNzY4ODQyODUzKXtzd2l0Y2goMHxzKXtjYXNlIDE3Njg3NzgwOTg6YnJlYWs7ZGVmYXVsdDpnPTEzMzticmVhayBlfXM9MHxodSg4MCksYXJbcys0Pj4yXT0wLGFyW3MrOD4+Ml09MCxhcltzPj4yXT01MzE2LGFyWyhtPXMrMTZ8MCk+PjJdPTQyNjQsYXJbKGQ9cysyNHwwKT4+Ml09YXJbbz4+Ml0sYXJbZCs0Pj4yXT1hcls0K28+PjJdLGFyW2QrOD4+Ml09YXJbOCtvPj4yXSxhcltkKzEyPj4yXT1hclsxMitvPj4yXSxhclsoZD1zKzQwfDApPj4yXT0wLGFyWyhrPXMrNDR8MCk+PjJdPTAsdj0oYXJbKGg9cys0OHwwKT4+Ml09MCl8YXJbMjQrdT4+Ml0sdz0oMHxhclsyOCt1Pj4yXSktdnwwO2Rve2lmKDB8dyl7aWYoISgoMHx3KTwwKSl7eT0wfGh1KHcpLGFyW2s+PjJdPXksQj0oYXJbZD4+Ml09eSkrd3wwLGFyW2g+PjJdPUIsaGIoMHx5LDB8diwwfHcpLGFyW2s+PjJdPUI7YnJlYWt9emwoKX19d2hpbGUoMCk7eT0wfGFyWyh2PTM2K3V8MCkrND4+Ml0sYXJbKEI9cys1MnwwKT4+Ml09YXJbdj4+Ml0sYXJbQis0Pj4yXT15LGFyW3MrNjA+PjJdPTAsYXJbcys2ND4+Ml09MCxhcltzKzY4Pj4yXT0wLGFyW20+PjJdPTUzNDQsdHJbcys3Mj4+MF09MDticmVha31zd2l0Y2goMHxzKXtjYXNlIDE3Njg4NDI4NTM6YnJlYWs7ZGVmYXVsdDpnPTEzMzticmVhayBlfXM9MHxodSgxNDQpLGFyW3MrND4+Ml09MCxhcltzKzg+PjJdPTAsYXJbcz4+Ml09NDg5NixhclsobT1zKzE2fDApPj4yXT00MjY0LGFyWyhkPXMrMjR8MCk+PjJdPWFyW28+PjJdLGFyW2QrND4+Ml09YXJbNCtvPj4yXSxhcltkKzg+PjJdPWFyWzgrbz4+Ml0sYXJbZCsxMj4+Ml09YXJbMTIrbz4+Ml0sYXJbKGQ9cys0MHwwKT4+Ml09MCxhclsoaz1zKzQ0fDApPj4yXT0wLHY9KGFyWyhoPXMrNDh8MCk+PjJdPTApfGFyWzI0K3U+PjJdLHc9KDB8YXJbMjgrdT4+Ml0pLXZ8MDtkb3tpZigwfHcpe2lmKCEoKDB8dyk8MCkpe3k9MHxodSh3KSxhcltrPj4yXT15LEI9KGFyW2Q+PjJdPXkpK3d8MCxhcltoPj4yXT1CLGhiKDB8eSwwfHYsMHx3KSxhcltrPj4yXT1CO2JyZWFrfXpsKCl9fXdoaWxlKDApO2ZvcihoPTB8YXJbKHc9MzYrdXwwKSs0Pj4yXSxhclsoZD1zKzUyfDApPj4yXT1hclt3Pj4yXSxhcltkKzQ+PjJdPWgsYXJbcys2MD4+Ml09MCxhcltzKzY0Pj4yXT0wLGFyW3MrNjg+PjJdPTAsYXJbbT4+Ml09NDkyNCxhcltzKzcyPj4yXT0wLHc9KGg9ZD1zKzgwfChvcltzKzc2Pj4xXT0wKSkrNjB8MDsoMHwoaD1oKzR8KGFyW2g+PjJdPTApKSk8KDB8dyk7KTt0cltkKzYwPj4wXT0wO2JyZWFrfWlmKCgwfHMpPDE4MzUzNjU0NzMpe2lmKCgwfHMpPDE3NjkxMDczMTYpe3N3aXRjaCgwfHMpe2Nhc2UgMTc2OTEwNDc0MjpicmVhaztkZWZhdWx0Omc9MTMzO2JyZWFrIGV9cz0wfGh1KDg4KSxhcltzKzQ+PjJdPTAsYXJbcys4Pj4yXT0wLGFyW3M+PjJdPTU0MzYsYXJbKG09cysxNnwwKT4+Ml09NDI2NCxhclsoZD1zKzI0fDApPj4yXT1hcltvPj4yXSxhcltkKzQ+PjJdPWFyWzQrbz4+Ml0sYXJbZCs4Pj4yXT1hcls4K28+PjJdLGFyW2QrMTI+PjJdPWFyWzEyK28+PjJdLGFyWyhkPXMrNDB8MCk+PjJdPTAsYXJbKGs9cys0NHwwKT4+Ml09MCx2PShhclsoaD1zKzQ4fDApPj4yXT0wKXxhclsyNCt1Pj4yXSx3PSgwfGFyWzI4K3U+PjJdKS12fDA7ZG97aWYoMHx3KXtpZighKCgwfHcpPDApKXt5PTB8aHUodyksYXJbaz4+Ml09eSxCPShhcltkPj4yXT15KSt3fDAsYXJbaD4+Ml09QixoYigwfHksMHx2LDB8dyksYXJbaz4+Ml09QjticmVha316bCgpfX13aGlsZSgwKTt5PTB8YXJbKHY9MzYrdXwwKSs0Pj4yXSxhclsoQj1zKzUyfDApPj4yXT1hclt2Pj4yXSxhcltCKzQ+PjJdPXksYXJbcys2MD4+Ml09MCxhcltzKzY0Pj4yXT0wLGFyW3MrNjg+PjJdPTAsYXJbbT4+Ml09NTQ2NCxhcltzKzcyPj4yXT0wLGFyW3MrNzY+PjJdPTAsYXJbcys4MD4+Ml09MDticmVha31pZigoMHxzKTwxNzY5MTczMDkzKXtzd2l0Y2goMHxzKXtjYXNlIDE3NjkxMDczMTY6YnJlYWs7ZGVmYXVsdDpnPTEzMzticmVhayBlfXM9MHxodSg4MCksYXJbcys0Pj4yXT0wLGFyW3MrOD4+Ml09MCxhcltzPj4yXT01MjU2LGFyWyhtPXMrMTZ8MCk+PjJdPTQyNjQsYXJbKGQ9cysyNHwwKT4+Ml09YXJbbz4+Ml0sYXJbZCs0Pj4yXT1hcls0K28+PjJdLGFyW2QrOD4+Ml09YXJbOCtvPj4yXSxhcltkKzEyPj4yXT1hclsxMitvPj4yXSxhclsoZD1zKzQwfDApPj4yXT0wLGFyWyhrPXMrNDR8MCk+PjJdPTAsdj0oYXJbKGg9cys0OHwwKT4+Ml09MCl8YXJbMjQrdT4+Ml0sdz0oMHxhclsyOCt1Pj4yXSktdnwwO2Rve2lmKDB8dyl7aWYoISgoMHx3KTwwKSl7eT0wfGh1KHcpLGFyW2s+PjJdPXksQj0oYXJbZD4+Ml09eSkrd3wwLGFyW2g+PjJdPUIsaGIoMHx5LDB8diwwfHcpLGFyW2s+PjJdPUI7YnJlYWt9emwoKX19d2hpbGUoMCk7eT0wfGFyWyh2PTM2K3V8MCkrND4+Ml0sYXJbKEI9cys1MnwwKT4+Ml09YXJbdj4+Ml0sYXJbQis0Pj4yXT15LGFyW3MrNjA+PjJdPTAsYXJbcys2ND4+Ml09MCxhcltzKzY4Pj4yXT0wLGFyW20+PjJdPTUyODQsYXJbcys3Mj4+Ml09MDticmVha31zd2l0Y2goMHxzKXtjYXNlIDE3NjkxNzMwOTM6YnJlYWs7ZGVmYXVsdDpnPTEzMzticmVhayBlfXM9MHxodSg4MCksYXJbcys0Pj4yXT0wLGFyW3MrOD4+Ml09MCxhcltzPj4yXT01MTM2LGFyWyhtPXMrMTZ8MCk+PjJdPTQyNjQsYXJbKGQ9cysyNHwwKT4+Ml09YXJbbz4+Ml0sYXJbZCs0Pj4yXT1hcls0K28+PjJdLGFyW2QrOD4+Ml09YXJbOCtvPj4yXSxhcltkKzEyPj4yXT1hclsxMitvPj4yXSxhclsoZD1zKzQwfDApPj4yXT0wLGFyWyhrPXMrNDR8MCk+PjJdPTAsdj0oYXJbKGg9cys0OHwwKT4+Ml09MCl8YXJbMjQrdT4+Ml0sdz0oMHxhclsyOCt1Pj4yXSktdnwwO2Rve2lmKDB8dyl7aWYoISgoMHx3KTwwKSl7eT0wfGh1KHcpLGFyW2s+PjJdPXksQj0oYXJbZD4+Ml09eSkrd3wwLGFyW2g+PjJdPUIsaGIoMHx5LDB8diwwfHcpLGFyW2s+PjJdPUI7YnJlYWt9emwoKX19d2hpbGUoMCk7eT0wfGFyWyh2PTM2K3V8MCkrND4+Ml0sYXJbKEI9cys1MnwwKT4+Ml09YXJbdj4+Ml0sYXJbQis0Pj4yXT15LGFyW3MrNjA+PjJdPTAsYXJbcys2ND4+Ml09MCxhcltzKzY4Pj4yXT0wLGFyW20+PjJdPTUxNjQsYXJbcys3Mj4+Ml09MCxhcltzKzc2Pj4yXT0wO2JyZWFrfWlmKCgwfHMpPDE4ODU5NjAyOTcpe2lmKCgwfHMpPDE4ODU5NTkyNzcpe3N3aXRjaCgwfHMpe2Nhc2UgMTgzNTM2NTQ3MzpicmVhaztkZWZhdWx0Omc9MTMzO2JyZWFrIGV9cz0wfGh1KDcyKSxhcltzKzQ+PjJdPTAsYXJbcys4Pj4yXT0wLGFyW3M+PjJdPTQ2MjgsYXJbKG09cysxNnwwKT4+Ml09NDI2NCxhclsoZD1zKzI0fDApPj4yXT1hcltvPj4yXSxhcltkKzQ+PjJdPWFyWzQrbz4+Ml0sYXJbZCs4Pj4yXT1hcls4K28+PjJdLGFyW2QrMTI+PjJdPWFyWzEyK28+PjJdLGFyWyhkPXMrNDB8MCk+PjJdPTAsYXJbKGs9cys0NHwwKT4+Ml09MCx2PShhclsoaD1zKzQ4fDApPj4yXT0wKXxhclsyNCt1Pj4yXSx3PSgwfGFyWzI4K3U+PjJdKS12fDA7ZG97aWYoMHx3KXtpZighKCgwfHcpPDApKXt5PTB8aHUodyksYXJbaz4+Ml09eSxCPShhcltkPj4yXT15KSt3fDAsYXJbaD4+Ml09QixoYigwfHksMHx2LDB8dyksYXJbaz4+Ml09QjticmVha316bCgpfX13aGlsZSgwKTt5PTB8YXJbKHY9MzYrdXwwKSs0Pj4yXSxhclsoQj1zKzUyfDApPj4yXT1hclt2Pj4yXSxhcltCKzQ+PjJdPXksYXJbcys2MD4+Ml09MCxhcltzKzY0Pj4yXT0wLGFyW3MrNjg+PjJdPTAsYXJbbT4+Ml09NDQ2ODticmVha31zd2l0Y2goMHxzKXtjYXNlIDE4ODU5NTkyNzc6YnJlYWs7ZGVmYXVsdDpnPTEzMzticmVhayBlfXM9MHxodSg4MCksYXJbcys0Pj4yXT0wLGFyW3MrOD4+Ml09MCxhcltzPj4yXT00NzE2LGFyWyhtPXMrMTZ8MCk+PjJdPTQyNjQsYXJbKGQ9cysyNHwwKT4+Ml09YXJbbz4+Ml0sYXJbZCs0Pj4yXT1hcls0K28+PjJdLGFyW2QrOD4+Ml09YXJbOCtvPj4yXSxhcltkKzEyPj4yXT1hclsxMitvPj4yXSxhclsoZD1zKzQwfDApPj4yXT0wLGFyWyhrPXMrNDR8MCk+PjJdPTAsdj0oYXJbKGg9cys0OHwwKT4+Ml09MCl8YXJbMjQrdT4+Ml0sdz0oMHxhclsyOCt1Pj4yXSktdnwwO2Rve2lmKDB8dyl7aWYoISgoMHx3KTwwKSl7eT0wfGh1KHcpLGFyW2s+PjJdPXksQj0oYXJbZD4+Ml09eSkrd3wwLGFyW2g+PjJdPUIsaGIoMHx5LDB8diwwfHcpLGFyW2s+PjJdPUI7YnJlYWt9emwoKX19d2hpbGUoMCk7eT0wfGFyWyh2PTM2K3V8MCkrND4+Ml0sYXJbKEI9cys1MnwwKT4+Ml09YXJbdj4+Ml0sYXJbQis0Pj4yXT15LGFyW3MrNjA+PjJdPTAsYXJbcys2ND4+Ml09MCxhcltzKzY4Pj4yXT0wLGFyW20+PjJdPTQ3NDQsYXJbcys3Mj4+Ml09MDticmVha31pZigoMHxzKTwxOTcwNDMzMDU2KXtzd2l0Y2goMHxzKXtjYXNlIDE4ODU5NjAyOTc6YnJlYWs7ZGVmYXVsdDpnPTEzMzticmVhayBlfXM9MHxodSg4OCksYXJbcys0Pj4yXT0wLGFyW3MrOD4+Ml09MCxhcltzPj4yXT01OTc2LGFyWyhtPXMrMTZ8MCk+PjJdPTQyNjQsYXJbKGQ9cysyNHwwKT4+Ml09YXJbbz4+Ml0sYXJbZCs0Pj4yXT1hcls0K28+PjJdLGFyW2QrOD4+Ml09YXJbOCtvPj4yXSxhcltkKzEyPj4yXT1hclsxMitvPj4yXSxhclsoZD1zKzQwfDApPj4yXT0wLGFyWyhrPXMrNDR8MCk+PjJdPTAsdj0oYXJbKGg9cys0OHwwKT4+Ml09MCl8YXJbMjQrdT4+Ml0sdz0oMHxhclsyOCt1Pj4yXSktdnwwO2Rve2lmKDB8dyl7aWYoISgoMHx3KTwwKSl7eT0wfGh1KHcpLGFyW2s+PjJdPXksQj0oYXJbZD4+Ml09eSkrd3wwLGFyW2g+PjJdPUIsaGIoMHx5LDB8diwwfHcpLGFyW2s+PjJdPUI7YnJlYWt9emwoKX19d2hpbGUoMCk7eT0wfGFyWyh2PTM2K3V8MCkrND4+Ml0sYXJbKEI9cys1MnwwKT4+Ml09YXJbdj4+Ml0sYXJbQis0Pj4yXT15LGFyW3MrNjA+PjJdPTAsYXJbcys2ND4+Ml09MCxhcltzKzY4Pj4yXT0wLGFyW20+PjJdPTYwMDQsYXJbcys3Mj4+Ml09MCxhcltzKzc2Pj4yXT0wLGFyW3MrODA+PjJdPTA7YnJlYWt9c3dpdGNoKDB8cyl7Y2FzZSAxOTcwNDMzMDU2OmJyZWFrO2RlZmF1bHQ6Zz0xMzM7YnJlYWsgZX1zPTB8aHUoODgpLGFyW3MrND4+Ml09MCxhcltzKzg+PjJdPTAsYXJbcz4+Ml09NTg1NixhclsobT1zKzE2fDApPj4yXT00MjY0LGFyWyhkPXMrMjR8MCk+PjJdPWFyW28+PjJdLGFyW2QrND4+Ml09YXJbNCtvPj4yXSxhcltkKzg+PjJdPWFyWzgrbz4+Ml0sYXJbZCsxMj4+Ml09YXJbMTIrbz4+Ml0sYXJbKGQ9cys0MHwwKT4+Ml09MCxhclsoaz1zKzQ0fDApPj4yXT0wLHY9KGFyWyhoPXMrNDh8MCk+PjJdPTApfGFyWzI0K3U+PjJdLHc9KDB8YXJbMjgrdT4+Ml0pLXZ8MDtkb3tpZigwfHcpe2lmKCEoKDB8dyk8MCkpe3k9MHxodSh3KSxhcltrPj4yXT15LEI9KGFyW2Q+PjJdPXkpK3d8MCxhcltoPj4yXT1CLGhiKDB8eSwwfHYsMHx3KSxhcltrPj4yXT1CO2JyZWFrfXpsKCl9fXdoaWxlKDApO3k9MHxhclsodj0zNit1fDApKzQ+PjJdLGFyWyhCPXMrNTJ8MCk+PjJdPWFyW3Y+PjJdLGFyW0IrND4+Ml09eSxhcltzKzYwPj4yXT0wLGFyW3MrNjQ+PjJdPTAsYXJbcys2OD4+Ml09MCxhclttPj4yXT01ODg0LGFyWyhCPXMrNzJ8MCk+PjJdPTAsYXJbQis0Pj4yXT0wLGFyW0IrOD4+Ml09MDticmVha313aGlsZSgwKTtpZigxMzM9PSgwfGcpKXtzPTB8aHUoNzIpLGFyW3MrND4+Ml09MCxhcltzKzg+PjJdPTAsYXJbcz4+Ml09NjAzNixhclsobT1zKzE2fDApPj4yXT00MjY0LGFyWyhkPXMrMjR8MCk+PjJdPWFyW28+PjJdLGFyW2QrND4+Ml09YXJbNCtvPj4yXSxhcltkKzg+PjJdPWFyWzgrbz4+Ml0sYXJbZCsxMj4+Ml09YXJbMTIrbz4+Ml0sYXJbKGQ9cys0MHwwKT4+Ml09MCxhclsoaz1zKzQ0fDApPj4yXT0wLHY9KGFyWyhoPXMrNDh8MCk+PjJdPTApfGFyWzI0K3U+PjJdLHc9KDB8YXJbMjgrdT4+Ml0pLXZ8MDtkb3tpZigwfHcpe2lmKCEoKDB8dyk8MCkpe3k9MHxodSh3KSxhcltrPj4yXT15LEI9KGFyW2Q+PjJdPXkpK3d8MCxhcltoPj4yXT1CLGhiKDB8eSwwfHYsMHx3KSxhcltrPj4yXT1CO2JyZWFrfXpsKCl9fXdoaWxlKDApO3k9MHxhclsoZz0zNit1fDApKzQ+PjJdLGFyWyhCPXMrNTJ8MCk+PjJdPWFyW2c+PjJdLGFyW0IrND4+Ml09eSxhclttPj4yXT00NDA0LGFyW3MrNjA+PjJdPTAsYXJbcys2ND4+Ml09MCxhcltzKzY4Pj4yXT0wfWc9bSxkPTB8YXJbKGs9byk+PjJdLGs9MHxhcltrKzQ+PjJdLGg9MHxhclsodj0xNit1fDApPj4yXTtkb3tpZihrPj4+MDwwfDA9PSgwfGspJmQ+Pj4wPGg+Pj4wKWs9Wis2NHwwLGFyWyh3PVorOHwwKT4+Ml09NDUyNCxoPVorMTJ8MCxhcltaPj4yXT0xODgsYXJbaz4+Ml09MjA4LEpmKForNjR8KGFyW1orND4+Ml09MCksaCksYXJbWisxMzY+PjJdPTAsYXJbWisxNDA+PjJdPS0xLGFyW1o+PjJdPTQ1MDQsYXJbaz4+Ml09NDU0NCxhclt3Pj4yXT00NTI0LFNmKGgpLGFyW2g+PjJdPTQzNDAsYXJbKHc9Wis0NHwwKT4+Ml09MCxhclt3KzQ+PjJdPTAsYXJbdys4Pj4yXT0wLGFyW3crMTI+PjJdPTAsYXJbWis2MD4+Ml09MjQsYXJbcD4+Ml09MCxhcltwKzQ+PjJdPTAsYXJbcCs4Pj4yXT0wLFhlKGgscCksKDB8dHJbcCsxMT4+MF0pPDAmJnZ1KDB8YXJbcD4+Ml0pLHk9MHxXZShkPVorOHwwLDE5Mzg0LDEwKSxCPTB8V2UoMHxLZih5LDB8YXJbKEI9byk+PjJdLDB8YXJbQis0Pj4yXSksMTkzOTUsMzQpLFdlKDB8TGYoQiwwfGFyW3Y+PjJdKSwxOTQzMCw3KSxJZShhLGgpLG9vKEEsMiwxMDEsYSksKDB8dHJbMTErYT4+MF0pPDAmJnZ1KDB8YXJbYT4+Ml0pLGFyW1o+PjJdPTQ1MDQsYXJbaz4+Ml09NDU0NCxhcltkPj4yXT00NTI0LGFyW2g+PjJdPTQzNDAsKDB8dHJbdysxMT4+MF0pPDAmJnZ1KDB8YXJbdz4+Ml0pLGtmKGgpLF9mKCksYmYoayk7ZWxzZXtpZigyMDwoMHxhcltlKzEyPj4yXSkpe2ZvcihhcltuPj4yXT0wLGFyWzQrbj4+Ml09MCxkPShhcls4K24+PjJdPTApfGh1KDY0KSxhcltuPj4yXT1kLGFyWzgrbj4+Ml09LTIxNDc0ODM1ODQsaz0xOTQzOCx3PShoPWQpKyhhcls0K24+PjJdPTYxKXwwO3RyW2g+PjBdPTB8dHJbaz4+MF0saz1rKzF8MCwoMHwoaD1oKzF8MCkpPCgwfHcpOyk7aWYodHJbZCs2MT4+MF09MCxvbyhBLDYsMWUzLG4pLDA8PSgwfHRyWzExK24+PjBdKSlicmVhazt2dSgwfGFyW24+PjJdKTticmVha31pZigwfE5BKGUsQj0wfG9iKDB8ZCwwfGssMHxoLDApLEQpKXtpZihhcltpPj4yXT0wLGFyWzQraT4+Ml09MCxhcls4K2k+PjJdPTAsb28oQSwyLDEwMCxpKSwwPD0oMHx0clsxMStpPj4wXSkpYnJlYWs7dnUoMHxhcltpPj4yXSk7YnJlYWt9aWYoZD0wfGFyWyhrPW8pPj4yXSwoMHwoaz0wfGFyW2srND4+Ml0pKTwwKXtpZihhcltmPj4yXT0wLGFyWzQrZj4+Ml09MCxhcls4K2Y+PjJdPTAsb28oQSwyLDEwMSxmKSwwPD0oMHx0clsxMStmPj4wXSkpYnJlYWs7dnUoMHxhcltmPj4yXSk7YnJlYWt9aWYoaD0wfG9iKDB8ZCwwfGssMHxhclt2Pj4yXSwwKSx3PUQsKDB8KHk9MHxhclsoQj1lKzE2fDApKzQ+PjJdKSk8KDB8dyl8KCgwfHkpPT0oMHx3KT8oMHxhcltCPj4yXSk+Pj4wPGg+Pj4wOjApKXtpZihhclt0Pj4yXT0wLGFyWzQrdD4+Ml09MCxhcls4K3Q+PjJdPTAsb28oQSwyLDEwMSx0KSwwPD0oMHx0clsxMSt0Pj4wXSkpYnJlYWs7dnUoMHxhclt0Pj4yXSk7YnJlYWt9aWYoYXJbYz4+Ml09YXJbZT4+Ml0sZD00K2N8MCxrPTB8YXJbZSs0Pj4yXSwwfChhcltkPj4yXT1rKSYmYnUoayksV0EocCxjLGgsdyxlKSwwfChkPTB8YXJbZD4+Ml0pJiZkdShkKSxuc1sxMjcmYXJbMjArKDB8YXJbbT4+Ml0pPj4yXV0oWixtLHApLGQ9MHxhclsoaz1aKSs0Pj4yXSxhclsodj1sKT4+Ml09YXJbaz4+Ml0sYXJbdis0Pj4yXT1kLGQ9Wis4fDAsKDB8dHJbKGs9KHY9OCtsfDApKzExfDApPj4wXSk8MD8odHJbYXJbdj4+Ml0+PjBdPTAsYXJbMTIrbD4+Ml09MCk6KHRyW3Y+PjBdPTAsdHJbaz4+MF09MCksQ3UodiwwKSxhclt2Pj4yXT1hcltkPj4yXSxhclt2KzQ+PjJdPWFyW2QrND4+Ml0sYXJbdis4Pj4yXT1hcltkKzg+PjJdLCgwfGFyW2w+PjJdKT09KDB8YXJbMTQxNDhdKSYmKGFyW3I+PjJdPWcsZD0wfGFyWyhCPXIrNHwwKT4+Ml0sYXJbQj4+Ml09cyxzPShkJiZkdShkKSwwKSksaz0wfGFyWyhkPXc9cCsxNnwwKT4+Ml0sMDwoMHwoZD0wfGFyW2QrND4+Ml0pKXwwPT0oMHxkKSYwPGs+Pj4wJiYoKGg9MHxhcltwKzg+PjJdKSYmKF9BKGgsayxkKSxrPTB8YXJbKGQ9dyk+PjJdLGQ9MHxhcltkKzQ+PjJdKSx5PTB8YXJbcD4+Ml0sQj0wfGFyW3k+PjJdLFo9MHxhcltCKzIwPj4yXSxCPTB8dGIoMHwoQj0wfGpiWzEyNyZhcltCKzg+PjJdXSh5KSksMHxELDB8aywwfGQpLHhiWzYzJlpdKHksQixEKSxhclsoQj13KT4+Ml09MCxhcltCKzQ+PjJdPTApLEI9MHxhclsoeT1sKSs0Pj4yXSxhclsoZD1BKT4+Ml09YXJbeT4+Ml0sYXJbZCs0Pj4yXT1CLGFyWyhkPUErOHwwKT4+Ml09YXJbdj4+Ml0sYXJbZCs0Pj4yXT1hclt2KzQ+PjJdLGFyW2QrOD4+Ml09YXJbdis4Pj4yXSxhclt2Pj4yXT0wLGFyW3YrND4+Ml09MCwoYXJbdis4Pj4yXT0wKXwoZD0wfGFyW3ArND4+Ml0pJiZkdShkKSwhcylicmVhayBBfX13aGlsZSgwKTtkdShzKX19d2hpbGUoMCk7KDB8dHJbKHM9OCtsfDApKzExPj4wXSk8MCYmdnUoMHxhcltzPj4yXSksYXJbdT4+Ml09NDI2NCx1cj0oKGQ9MHxhclsyNCt1Pj4yXSkmJigoMHxhclsocz0yOCt1fDApPj4yXSkhPSgwfGQpJiYoYXJbcz4+Ml09ZCksdnUoZCkpLGIpfWZ1bmN0aW9uIGVlKEEsZSl7ZXw9MDt2YXIgcixpLGY9MCxuPTAsdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wO3Q9MHxhclsoYj0oQXw9MCkrNHwwKT4+Ml0scj1vPTB8YXJbQT4+Ml0sNTM2ODcwOTExPChmPShsPXQtbz4+MykrMXwwKT4+PjAmJnpsKCksYT0odT0oMHxhclsoaT1BKzh8MCk+PjJdKS1vfDApPj4yLGE9dT4+Mz4+PjA8MjY4NDM1NDU1P2E+Pj4wPGY+Pj4wP2Y6YTo1MzY4NzA5MTE7ZG97aWYoYSl7aWYoISg1MzY4NzA5MTE8YT4+PjApKXtjPTB8aHUoYTw8Myk7YnJlYWt9WnUoYj0wfFgoOCksNDQ1MTkpLGFyW2I+PjJdPTE3NjYwLEkoMHxiLDQwMTYsNDI4KX1lbHNlIGM9MH13aGlsZSgwKTtpZih1PWMrKGE8PDMpfDAsYXJbKGY9bj1jKyhsPDwzKXwwKT4+Ml09YXJbZT4+Ml0sYT1lKzR8MCxhcltjKyhsPDwzKSs0Pj4yXT1hclthPj4yXSxhcltlPj4yXT0wLGE9bis4fChhclthPj4yXT0wKSwoMHx0KSE9KDB8cikpe2Zvcig7dD0obD10KSstOHwwLGFyW24rLTg+PjJdPWFyW3Q+PjJdLGw9bCstNHwwLGFyW24rLTQ+PjJdPWFyW2w+PjJdLGFyW3Q+PjJdPTAsZj1uPWYrLTh8KGFyW2w+PjJdPTApLCgwfHQpIT0oMHxyKTspO289MHxhcltBPj4yXX1pZihhcltBPj4yXT1mLGY9MHxhcltiPj4yXSxhcltiPj4yXT1hLGFyW2k+PjJdPXUsKDB8ZikhPSgwfCh0PW8pKSlmb3IoO249MHxhcltmKy00Pj4yXSxmPWYrLTh8MCwwfG4mJmR1KG4pLCgwfGYpIT0oMHx0KTspO28mJnZ1KG8pfWZ1bmN0aW9uIHJlKEEsZSxyKXtBfD0wLGV8PTA7dmFyIGksZixuLHQsbyxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTA7aWYodXI9KG89dXIpKzIwOHwwLGs9bysxOTZ8MCxhPW8rMTg0fDAsYz1vKzI0fDAsaT1vKzQwfDAsZj1vKzEyfDAsbj1vLDB8TkEocnw9MCw4LDApKXJldHVybiBhclthPj4yXT0wLGFyW2ErND4+Ml09MCxhclthKzg+PjJdPTAsb28oQSwyLDEwMCxhKSwwPD0oMHx0clthKzExPj4wXSl8fHZ1KDB8YXJbYT4+Ml0pLHZvaWQodXI9byk7cz0wfEZBKHIpLGFyWyhhPWI9ZSs4fDApPj4yXT1zLGE9KGFyW2ErND4+Ml09MCl8RkEociksYXJbKHM9ZSsyMHwwKT4+Ml09YSxhclsodD1lKzE2fDApPj4yXT04LHU9Yjtkb3tpZigxPT0oMHxhclt1Pj4yXSkmMD09KDB8YXJbdSs0Pj4yXSkpe2lmKDB8TkEociw4LDApKXJldHVybiBhcltjPj4yXT0wLGFyW2MrND4+Ml09MCxhcltjKzg+PjJdPTAsb28oQSwyLDEwMCxjKSwwPD0oMHx0cltjKzExPj4wXSl8fHZ1KDB8YXJbYz4+Ml0pLHZvaWQodXI9byk7aWYobD0wfEZBKHIpLGM9MHxGQShyKSxhclsoYT1iKT4+Ml09YyxhclthKzQ+PjJdPWwsYXJbdD4+Ml09OCsoMHxhclt0Pj4yXSksYT02NCtpfDAsYXJbKGw9OCtpfDApPj4yXT00NTI0LGM9MTIraXwwLGFyW2k+PjJdPTE4OCxhclthPj4yXT0yMDgsSmYoNjQraXwoYXJbNCtpPj4yXT0wKSxjKSxhclsxMzYraT4+Ml09MCxhclsxNDAraT4+Ml09LTEsYXJbaT4+Ml09NDUwNCxhclthPj4yXT00NTQ0LGFyW2w+PjJdPTQ1MjQsU2YoYyksYXJbYz4+Ml09NDM0MCxhclsobD00NCtpfDApPj4yXT0wLGFyW2wrND4+Ml09MCxhcltsKzg+PjJdPTAsYXJbbCsxMj4+Ml09MCxhcls2MCtpPj4yXT0yNCxhcltrPj4yXT0wLGFyW2srND4+Ml09MCxhcltrKzg+PjJdPTAsWGUoYyxrKSwoMHx0cltrKzExPj4wXSk8MCYmdnUoMHxhcltrPj4yXSksdz0wfFdlKHU9OCtpfDAsMjM0MjcsOSksV2UoMHxLZih3LDB8YXJbKGg9Yik+PjJdLDB8YXJbaCs0Pj4yXSksMjM0MzcsMjQpLDI2ODQzNTQ1NTwoaD0wfGFyW2IrND4+Ml0pPj4+MHwyNjg0MzU0NTU9PSgwfGgpJjQyOTQ5NjcyOTU8KDB8YXJbYj4+Ml0pPj4+MClyZXR1cm4gSWUoZixjKSxvbyhBLDYsMWUzLGYpLCgwfHRyWzExK2Y+PjBdKTwwJiZ2dSgwfGFyW2Y+PjJdKSxhcltpPj4yXT00NTA0LGFyW2E+PjJdPTQ1NDQsYXJbdT4+Ml09NDUyNCxhcltjPj4yXT00MzQwLCgwfHRyW2wrMTE+PjBdKTwwJiZ2dSgwfGFyW2w+PjJdKSxrZihjKSxfZigpLGJmKGEpLHZvaWQodXI9byk7YXJbaT4+Ml09NDUwNCxhclthPj4yXT00NTQ0LGFyW3U+PjJdPTQ1MjQsYXJbYz4+Ml09NDM0MCwoMHx0cltsKzExPj4wXSk8MCYmdnUoMHxhcltsPj4yXSksa2YoYyksX2YoKSxiZihhKSxhPTB8YXJbcz4+Ml07YnJlYWt9fXdoaWxlKDApO2lmKDE5NzA2Mjg5NjQ9PSgwfGEpKXtpZigwfE5BKHIsMTYsMCkpcmV0dXJuIGFyW24+PjJdPTAsYXJbbis0Pj4yXT0wLGFyW24rOD4+Ml09MCxvbyhBLDIsMTAwLG4pLDA8PSgwfHRyW24rMTE+PjBdKXx8dnUoMHxhcltuPj4yXSksdm9pZCh1cj1vKTtkb3tpZigwfENBKHIsMTYsMCkpe2lmKGI9ZSsyNHwwLDE2PD0oYz0odT0wfGFyWyhhPWUrMjh8MCk+PjJdKS0obD0wfGFyW2I+PjJdKXwwKT4+PjA/MTYhPSgwfGMpJiYoMHx1KSE9KDB8KGQ9bCsxNnwwKSkmJihhclthPj4yXT1kKTpUQShiLDE2LWN8MCksYT0wfGFyW3I+PjJdLGM9MHxhcltyKzQ+PjJdKXtidShjKSx4Yls2MyZhclsxNisoMHxhclthPj4yXSk+PjJdXShhLDB8YXJbYj4+Ml0sMTYpLGR1KGMpO2JyZWFrfXhiWzYzJmFyWzE2KygwfGFyW2E+PjJdKT4+Ml1dKGEsMHxhcltiPj4yXSwxNik7YnJlYWt9fXdoaWxlKDApO2FyW3Q+PjJdPTE2KygwfGFyW3Q+PjJdKX0wfHRyW3IrMjQ+PjBdPyhhcltrPj4yXT0wLGFyW2srND4+Ml09MCxhcltrKzg+PjJdPTAsb28oQSwyLDEwMCxrKSwoMHx0cltrKzExPj4wXSk8MCYmdnUoMHxhcltrPj4yXSkpOihoPTB8YXJbKGs9NTY1OTIpKzQ+PjJdLGFyWyh3PUEpPj4yXT1hcltrPj4yXSxhclt3KzQ+PjJdPWgseXUoQSs4fDAsNTY2MDApKSx1cj1vfWZ1bmN0aW9uIGllKEEsZSxyKXtBfD0wLGV8PTA7dmFyIGksZj0wO2lmKHVyPShpPXVyKSsxNnwwLGY9aSwhKDB8TkEocnw9MCw3LDApKSlyZXR1cm4gZj0wfFZBKHIpLG9yW2UrND4+MV09ZixmPTB8VkEociksb3JbZSs2Pj4xXT1mLGY9MHxWQShyKSxvcltlKzg+PjFdPWYscj0oMjU1JigwfElBKHIpKSk+Pj43LHRyW2UrMTA+PjBdPXIscj0wfGFyWyhlPTU2NTkyKSs0Pj4yXSxhclsoZj1BKT4+Ml09YXJbZT4+Ml0sYXJbZis0Pj4yXT1yLHl1KEErOHwwLDU2NjAwKSx2b2lkKHVyPWkpO2FyW2Y+PjJdPTAsYXJbZis0Pj4yXT0wLGFyW2YrOD4+Ml09MCxvbyhBLDIsMTAwLGYpLHVyPSgwPD0oMHx0cltmKzExPj4wXSl8fHZ1KDB8YXJbZj4+Ml0pLGkpfWZ1bmN0aW9uIGZlKEEsZSxyKXtBfD0wLGV8PTAscnw9MDt2YXIgaSxmLG4sdCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTA7dXI9KHQ9dXIpKzE2fDAsbz10LG49MHxodSgzMiksYXJbNCtuPj4yXT0wLGFyWzgrbj4+Ml09MCxhcltuPj4yXT02MTIwLGE9MHxhcltlPj4yXSxhcltvPj4yXT0wLGFyWyhmPW8rNHwwKT4+Ml09MCxjPShhcltvKzg+PjJdPTApfGFyW3I+PjJdLGU9KDB8YXJbcis0Pj4yXSktY3wwLHI9Yztkb3tpZihlKXtpZighKCgwfGUpPDApKXtiPTB8aHUoZSkscz0oYXJbbz4+Ml09YikrZXwwLGFyW28rOD4+Ml09cyxoYigwfGIsMHxyLDB8ZSksbD1iLHU9YXJbZj4+Ml09czticmVha316bCgpfWVsc2Ugcz1iPXU9bD0wfXdoaWxlKDApO2lmKGFyWyhjPTEyK258MCk+PjJdPTYxNDgsYXJbMTYrbj4+Ml09YSxhclsocj0yMCtufDApPj4yXT0wLGFyWyhpPTI0K258MCk+PjJdPTAsKGFyWyhvPTI4K258MCk+PjJdPTApfChlPXUtbHwwKSYmKCgwfGUpPDAmJnpsKCksYT0wfGh1KGUpLGFyW2k+PjJdPWEsYXJbcj4+Ml09YSxhcltvPj4yXT1hK2UsMDwoMHwoZT11LWJ8MCkpJiYoaGIoMHxhLDB8YiwwfGUpLGFyW2k+PjJdPWErZSkpLCFiKXJldHVybiBzPUErNHwwLGFyW0E+PjJdPWMsYXJbcz4+Ml09bix2b2lkKHVyPXQpOygwfHMpIT0oMHxiKSYmKGFyW2Y+PjJdPWIpLHZ1KGIpLHM9QSs0fDAsYXJbQT4+Ml09YyxhcltzPj4yXT1uLHVyPXR9ZnVuY3Rpb24gbmUoQSxlLHIpe0F8PTAsZXw9MCxyfD0wO3ZhciBpLGYsbix0LG8sYSxjLGw9MCx1PTAsYj0wLHM9MDtpZih1cj0oYz11cikrMTYwfDAsZj1jKzEzNnwwLG89KHQ9YykrNTZ8MCxhPXQrNHwwLGFyW3Q+PjJdPTI5MixhcltvPj4yXT0zMTIsSmYodCs1NnwwLGEpLGFyW3QrMTI4Pj4yXT0wLGFyW3QrMTMyPj4yXT0tMSxhclt0Pj4yXT00MzA0LGFyW28+PjJdPTQzMjQsU2YoYSksYXJbYT4+Ml09NDM0MCxhclsobj10KzM2fDApPj4yXT0wLGFyWzQrbj4+Ml09MCxhcls4K24+PjJdPTAsYXJbMTIrbj4+Ml09MCxhclt0KzUyPj4yXT0xNixhcltmPj4yXT0wLGFyWzQrZj4+Ml09MCxhcls4K2Y+PjJdPTAsWGUoYSxmKSwoMHx0clsxMStmPj4wXSk8MCYmdnUoMHxhcltmPj4yXSksbD0xKygwfGFyW3I+PjJdKXwwLGFyW3I+PjJdPWwsKDB8KHU9MHxhcltlKzQ0Pj4yXSkpIT0oMHwoaT0wfGFyW2UrNDg+PjJdKSkpe2ZvcihiPTExK2Z8MCxzPTQrZnwwLGw9MSxlPXU7Oyl7aWYoIWwpe2lmKDA8KDB8YXJbcj4+Ml0pKWZvcihsPTA7V2UodCwxODg2MiwyKSwoMHwobD1sKzF8MCkpPCgwfGFyW3I+PjJdKTspO1dlKHQsMzAwODYsMSl9aWYodT0wfGFyW2U+PjJdLG5zWzEyNyZhcls4KygwfGFyW3U+PjJdKT4+Ml1dKGYsdSxyKSxXZSh0LChsPSh1PTB8dHJbYj4+MF0pPDwyND4+MjQ8MCk/MHxhcltmPj4yXTpmLGw/MHxhcltzPj4yXToyNTUmdSksKDB8dHJbYj4+MF0pPDAmJnZ1KDB8YXJbZj4+Ml0pLCgwfChlPWUrOHwwKSk9PSgwfGkpKWJyZWFrO2w9MH1sPTB8YXJbcj4+Ml19aWYoYXJbcj4+Ml09KDB8bCk8MT8wOmwrLTF8MCxJZShBLGEpLGFyW3Q+PjJdPTQzMDQsYXJbbz4+Ml09NDMyNCxhclthPj4yXT00MzQwLDA8PSgwfHRyWzExK24+PjBdKSlyZXR1cm4ga2YoYSksR2YoKSxiZihvKSx2b2lkKHVyPWMpO3Z1KDB8YXJbbj4+Ml0pLGtmKGEpLEdmKCksYmYobyksdXI9Y31mdW5jdGlvbiB0ZShBKXt2YXIgZSxyPTAsaT0wLGY9MCxuPTAsdD0wLG89MCxhPTA7aWYoYXJbKEF8PTApPj4yXT01NzA0LDB8KHI9MHxhclsoZT1BKzU2fDApPj4yXSkpe2lmKCgwfChpPTB8YXJbKGE9QSs2MHwwKT4+Ml0pKSE9KDB8cikpe2Zvcig7bz1pKy02NHwwLGFyW2E+PjJdPW8sMHwoZj0wfGFyW2krLTEyPj4yXSkmJigoMHwodD0wfGFyWyhuPWkrLTh8MCk+PjJdKSkhPSgwfGYpJiYoYXJbbj4+Ml09dCsofigodCstNC1mfDApPj4+Mik8PDIpKSx2dShmKSksYXJbbz4+Ml09NDI2NCwwfChmPTB8YXJbaSstNDA+PjJdKSYmKCgwfGFyWyhpPWkrLTM2fDApPj4yXSkhPSgwfGYpJiYoYXJbaT4+Ml09ZiksdnUoZikpLCgwfChpPTB8YXJbYT4+Ml0pKSE9KDB8cik7KTtyPTB8YXJbZT4+Ml19dnUocil9aWYoYXJbQT4+Ml09NDQwNCwwfChyPTB8YXJbKG49QSs0NHwwKT4+Ml0pKXtpZigoMHwoaT0wfGFyWyh0PUErNDh8MCk+PjJdKSkhPSgwfHIpKXtmb3IoO2Y9aSstOHwwLGFyW3Q+PjJdPWYsKDB8KGk9KGk9MHxhcltpKy00Pj4yXSk/KGR1KGkpLDB8YXJbdD4+Ml0pOmYpKSE9KDB8cik7KTtyPTB8YXJbbj4+Ml19dnUocil9YXJbQT4+Ml09NDI2NCwoaT0wfGFyW0ErMjQ+PjJdKSYmKCgwfGFyWyhyPUErMjh8MCk+PjJdKSE9KDB8aSkmJihhcltyPj4yXT1pKSx2dShpKSl9ZnVuY3Rpb24gb2UoQSxlKXtlfD0wO3ZhciByPTAsaT0wLGY9MCxuPTAsdD0wLG89MDthclsoQXw9MCk+PjJdPTQyNjQsZj1lKzh8MCxhclsoaT1BKzh8MCk+PjJdPWFyW2Y+PjJdLGFyW2krND4+Ml09YXJbZis0Pj4yXSxhcltpKzg+PjJdPWFyW2YrOD4+Ml0sYXJbaSsxMj4+Ml09YXJbZisxMj4+Ml0sZj1lKzI0fDAsYXJbKGk9QSsyNHwwKT4+Ml09MCxhclsobz1BKzI4fDApPj4yXT0wLChhcltBKzMyPj4yXT0wKXwocj0oMHxhclsobj1lKzI4fDApPj4yXSktKDB8YXJbZj4+Ml0pfDApJiYoKDB8cik8MCYmemwoKSx0PTB8aHUociksYXJbbz4+Ml09dCxhcltpPj4yXT10LGFyW0ErMzI+PjJdPXQrcixpPTB8YXJbZj4+Ml0sMDwoMHwocj0oMHxhcltuPj4yXSktaXwwKSkmJihoYigwfHQsMHxpLDB8ciksYXJbbz4+Ml09dCtyKSksdD0wfGFyWyhuPWUrMzZ8MCkrND4+Ml0sYXJbKG89QSszNnwwKT4+Ml09YXJbbj4+Ml0sYXJbbys0Pj4yXT10LGFyW0ErNDg+PjJdPWFyW2UrNDg+PjJdLEdlKEErNTJ8MCxlKzUyfDApfWZ1bmN0aW9uIGFlKEEsZSl7ZXw9MDt2YXIgcixpLGY9MCxuPTAsdD0wLG89MCxhPTAsYz0wLGw9MDtpPShBfD0wKSs0fDAsZj0wfGFyW0E+PjJdLDY3MTA4ODYzPChuPSh0PSgwfGFyW2k+PjJdKS1mPj42KSsxfDApPj4+MCYmemwoKSxmPShjPSgwfGFyWyhsPUErOHwwKT4+Ml0pLWZ8MCk+PjUsZj1jPj42Pj4+MDwzMzU1NDQzMT9mPj4+MDxuPj4+MD9uOmY6NjcxMDg4NjM7ZG97aWYoZil7aWYoISg2NzEwODg2MzxmPj4+MCkpe249MHxodShmPDw2KTticmVha31adShsPTB8WCg4KSw0NDUxOSksYXJbbD4+Ml09MTc2NjAsSSgwfGwsNDAxNiw0MjgpfWVsc2Ugbj0wfXdoaWxlKDApO2lmKHI9bisoZjw8Nil8MCxvZSh0PW89bisodDw8Nil8MCxlKSxhPW8rNjR8MCxlPTB8YXJbQT4+Ml0sKDB8KGY9MHxhcltpPj4yXSkpPT0oMHxlKSlmPXQsbj1jPWU7ZWxzZXtmb3Iobj1vO29lKG4rLTY0fDAsZj1mKy02NHwwKSx0PW49dCstNjR8MCwoMHxmKSE9KDB8ZSk7KTtmPXQsYz0wfGFyW0E+PjJdLG49MHxhcltpPj4yXX1pZihhcltBPj4yXT1mLGFyW2k+PjJdPWEsYXJbbD4+Ml09ciwoMHxuKSE9KDB8KGE9YykpKWZvcihvPW47bz0oZT1vKSstNjR8MCwwfChmPTB8YXJbZSstMTI+PjJdKSYmKCgwfCh0PTB8YXJbKG49ZSstOHwwKT4+Ml0pKSE9KDB8ZikmJihhcltuPj4yXT10Kyh+KCh0Ky00LWZ8MCk+Pj4yKTw8MikpLHZ1KGYpKSxhcltvPj4yXT00MjY0LDB8KG49MHxhcltlKy00MD4+Ml0pJiYoKDB8YXJbKGY9ZSstMzZ8MCk+PjJdKSE9KDB8bikmJihhcltmPj4yXT1uKSx2dShuKSksKDB8bykhPSgwfGEpOyk7YyYmdnUoYyl9ZnVuY3Rpb24gR2UoQSxlKXtlfD0wO3ZhciByLGksZixuLHQ9MDthclsoQXw9MCk+PjJdPTAsYXJbKG49QSs0fDApPj4yXT0wLChyPSh0PSgoYXJbQSs4Pj4yXT0wKXxhclsoZj1lKzR8MCk+PjJdKS0oMHxhcltlPj4yXSl8MCk+PjIpJiYoMTA3Mzc0MTgyMzxyPj4+MCYmemwoKSxpPTB8aHUodCksYXJbbj4+Ml09aSxhcltBPj4yXT1pLGFyW0ErOD4+Ml09aSsocjw8MiksQT0wfGFyW2U+PjJdLCgwfCh0PSgwfGFyW2Y+PjJdKS1BfDApKTw9MHx8KGhiKDB8aSwwfEEsMHx0KSxhcltuPj4yXT1pKyh0Pj4+Mjw8MikpKX1mdW5jdGlvbiBjZShBKXt2YXIgZSxyPTAsaT0wLGY9MCxuPTAsdD0wLG89MCxhPTAsYz0wO2lmKGFyWyhBfD0wKT4+Ml09NTUyNCwwfChyPTB8YXJbKGU9QSs5MnwwKT4+Ml0pKXtpZigoMHwoaT0wfGFyWyhjPUErOTZ8MCk+PjJdKSkhPSgwfHIpKXtmb3IoZj1pOzspe2lmKGk9ZistMTZ8MCxhcltjPj4yXT1pLG89MHxhclsoYT1mKy0xMnwwKT4+Ml0pe2lmKCgwfChpPTB8YXJbKHQ9ZistOHwwKT4+Ml0pKT09KDB8bykpaT1vO2Vsc2V7Zm9yKDtmPWkrLTEyfDAsYXJbdD4+Ml09ZiwoMHwoaT0obj0wfGFyW2Y+PjJdKT8oKDB8YXJbKGk9aSstOHwwKT4+Ml0pIT0oMHxuKSYmKGFyW2k+PjJdPW4pLHZ1KG4pLDB8YXJbdD4+Ml0pOmYpKSE9KDB8byk7KTtpPTB8YXJbYT4+Ml19dnUoaSksaT0wfGFyW2M+PjJdfWlmKCgwfGkpPT0oMHxyKSlicmVhaztmPWl9cj0wfGFyW2U+PjJdfXZ1KHIpfWlmKGFyW0E+PjJdPTQ0MDQsMHwocj0wfGFyWyhuPUErNDR8MCk+PjJdKSl7aWYoKDB8KGk9MHxhclsodD1BKzQ4fDApPj4yXSkpIT0oMHxyKSl7Zm9yKDtmPWkrLTh8MCxhclt0Pj4yXT1mLCgwfChpPShpPTB8YXJbaSstND4+Ml0pPyhkdShpKSwwfGFyW3Q+PjJdKTpmKSkhPSgwfHIpOyk7cj0wfGFyW24+PjJdfXZ1KHIpfWFyW0E+PjJdPTQyNjQsKGk9MHxhcltBKzI0Pj4yXSkmJigoMHxhclsocj1BKzI4fDApPj4yXSkhPSgwfGkpJiYoYXJbcj4+Ml09aSksdnUoaSkpfWZ1bmN0aW9uIGxlKEEsZSl7ZXw9MDt2YXIgcixpPTAsZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTA7cj0oQXw9MCkrNHwwLGk9MHxhcltBPj4yXSwyNjg0MzU0NTU8KGY9KG89KDB8YXJbcj4+Ml0pLWk+PjQpKzF8MCk+Pj4wJiZ6bCgpLGk9KGM9KDB8YXJbKGw9QSs4fDApPj4yXSktaXwwKT4+MyxpPWM+PjQ+Pj4wPDEzNDIxNzcyNz9pPj4+MDxmPj4+MD9mOmk6MjY4NDM1NDU1O2Rve2lmKGkpe2lmKCEoMjY4NDM1NDU1PGk+Pj4wKSl7dD0wfGh1KGk8PDQpO2JyZWFrfVp1KGw9MHxYKDgpLDQ0NTE5KSxhcltsPj4yXT0xNzY2MCxJKDB8bCw0MDE2LDQyOCl9ZWxzZSB0PTB9d2hpbGUoMCk7aWYoYT10KyhpPDw0KXwwLG9yWyhuPWY9dCsobzw8NCl8MCk+PjFdPTB8b3JbZT4+MV0saT1lKzR8MCxhclt0KyhvPDw0KSsxMj4+Ml09MCxhclt0KyhvPDw0KSs0Pj4yXT1hcltpPj4yXSxjPWUrOHwwLGFyW3QrKG88PDQpKzg+PjJdPWFyW2M+PjJdLGU9ZSsxMnwwLGFyW3QrKG88PDQpKzEyPj4yXT1hcltlPj4yXSxhcltlPj4yXT0wLGFyW2M+PjJdPTAsZT1mKzE2fChhcltpPj4yXT0wKSx0PTB8YXJbQT4+Ml0sKDB8KGk9MHxhcltyPj4yXSkpPT0oMHx0KSlpPW4sZj1jPXQ7ZWxzZXtmb3IoO2k9KHU9aSkrLTE2fDAsb3JbZistMTY+PjFdPTB8b3JbaT4+MV0sYz11Ky0xMnwwLGFyWyhvPWYrLTEyfDApPj4yXT0wLGFyWyhiPWYrLTh8MCk+PjJdPTAsYXJbZistND4+Ml09MCxhcltvPj4yXT1hcltjPj4yXSxvPXUrLTh8MCxhcltiPj4yXT1hcltvPj4yXSx1PXUrLTR8MCxhcltmKy00Pj4yXT1hclt1Pj4yXSxhclt1Pj4yXT0wLGFyW28+PjJdPTAsbj1mPW4rLTE2fChhcltjPj4yXT0wKSwoMHxpKSE9KDB8dCk7KTtpPW4sYz0wfGFyW0E+PjJdLGY9MHxhcltyPj4yXX1pZihhcltBPj4yXT1pLGFyW3I+PjJdPWUsYXJbbD4+Ml09YSwoMHxmKSE9KDB8KEE9YykpKXthPWY7ZG97aWYoMHwoaT0wfGFyWyhlPWErLTEyfDApPj4yXSkpe2lmKCgwfChmPTB8YXJbKG89YSstOHwwKT4+Ml0pKSE9KDB8aSkpe2Zvcig7bj1mKy0xMnwwLGFyW28+PjJdPW4sKDB8KGY9KHQ9MHxhcltuPj4yXSk/KCgwfGFyWyhmPWYrLTh8MCk+PjJdKSE9KDB8dCkmJihhcltmPj4yXT10KSx2dSh0KSwwfGFyW28+PjJdKTpuKSkhPSgwfGkpOyk7aT0wfGFyW2U+PjJdfXZ1KGkpfWE9YSstMTZ8MH13aGlsZSgoMHxhKSE9KDB8QSkpfWMmJnZ1KEEpfWZ1bmN0aW9uIHVlKEEsZSl7ZXw9MDt2YXIgcixpPTAsZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MDtyPShBfD0wKSs0fDAsaT0wfGFyW0E+PjJdLDM1NzkxMzk0MTwoZj0obz0oKDB8YXJbcj4+Ml0pLWl8MCkvMTJ8MCkrMXwwKT4+PjAmJnpsKCksaT0oYT0oKDB8YXJbKGM9QSs4fDApPj4yXSktaXwwKS8xMnwwKTw8MSxpPWE+Pj4wPDE3ODk1Njk3MD9pPj4+MDxmPj4+MD9mOmk6MzU3OTEzOTQxO2Rve2lmKGkpe2lmKCEoMzU3OTEzOTQxPGk+Pj4wKSl7dD0wfGh1KDEyKml8MCk7YnJlYWt9WnUoYz0wfFgoOCksNDQ1MTkpLGFyW2M+PjJdPTE3NjYwLEkoMHxjLDQwMTYsNDI4KX1lbHNlIHQ9MH13aGlsZSgwKTtpZihuPWY9dCsoMTIqb3wwKXwwLGE9dCsoMTIqaXwwKXwwLGFyW3QrKDEyKm98MCkrOD4+Ml09MCxhcltmPj4yXT1hcltlPj4yXSxpPWUrNHwwLGFyW3QrKDEyKm98MCkrND4+Ml09YXJbaT4+Ml0sbD1lKzh8MCxhclt0KygxMipvfDApKzg+PjJdPWFyW2w+PjJdLGFyW2w+PjJdPTAsYXJbaT4+Ml09MCxvPWYrMTJ8KGFyW2U+PjJdPTApLHQ9MHxhcltBPj4yXSwoMHwoaT0wfGFyW3I+PjJdKSk9PSgwfHQpKWk9bixmPWU9dDtlbHNle2Zvcig7aT0oZT1pKSstMTJ8MCxhclsobD1mKy0xMnwwKT4+Ml09MCxhclsodT1mKy04fDApPj4yXT0wLGFyW2YrLTQ+PjJdPTAsYXJbbD4+Ml09YXJbaT4+Ml0sbD1lKy04fDAsYXJbdT4+Ml09YXJbbD4+Ml0sZT1lKy00fDAsYXJbZistND4+Ml09YXJbZT4+Ml0sYXJbZT4+Ml09MCxhcltsPj4yXT0wLG49Zj1uKy0xMnwoYXJbaT4+Ml09MCksKDB8aSkhPSgwfHQpOyk7aT1uLGU9MHxhcltBPj4yXSxmPTB8YXJbcj4+Ml19aWYoYXJbQT4+Ml09aSxhcltyPj4yXT1vLGFyW2M+PjJdPWEsKDB8ZikhPSgwfCh0PWUpKSlmb3IoOzB8KG49MHxhclsoZj0oaT1mKSstMTJ8MCk+PjJdKSYmKCgwfGFyWyhpPWkrLTh8MCk+PjJdKSE9KDB8bikmJihhcltpPj4yXT1uKSx2dShuKSksKDB8ZikhPSgwfHQpOyk7ZSYmdnUoZSl9ZnVuY3Rpb24gYmUoQSl7dmFyIGUscj0wLGk9MCxmPTAsbj0wLHQ9MCxvPTAsYT0wO2lmKGFyWyhBfD0wKT4+Ml09NTQ2NCwwfChyPTB8YXJbKGU9QSs1NnwwKT4+Ml0pKXtpZigoMHwoaT0wfGFyWyhhPUErNjB8MCk+PjJdKSkhPSgwfHIpKXtmb3IoO289aSstNjR8MCxhclthPj4yXT1vLDB8KGY9MHxhcltpKy0xMj4+Ml0pJiYoKDB8KHQ9MHxhclsobj1pKy04fDApPj4yXSkpIT0oMHxmKSYmKGFyW24+PjJdPXQrKH4oKHQrLTQtZnwwKT4+PjIpPDwyKSksdnUoZikpLGFyW28+PjJdPTQyNjQsMHwoZj0wfGFyW2krLTQwPj4yXSkmJigoMHxhclsoaT1pKy0zNnwwKT4+Ml0pIT0oMHxmKSYmKGFyW2k+PjJdPWYpLHZ1KGYpKSwoMHwoaT0wfGFyW2E+PjJdKSkhPSgwfHIpOyk7cj0wfGFyW2U+PjJdfXZ1KHIpfWlmKGFyW0E+PjJdPTQ0MDQsMHwocj0wfGFyWyhuPUErNDR8MCk+PjJdKSl7aWYoKDB8KGk9MHxhclsodD1BKzQ4fDApPj4yXSkpIT0oMHxyKSl7Zm9yKDtmPWkrLTh8MCxhclt0Pj4yXT1mLCgwfChpPShpPTB8YXJbaSstND4+Ml0pPyhkdShpKSwwfGFyW3Q+PjJdKTpmKSkhPSgwfHIpOyk7cj0wfGFyW24+PjJdfXZ1KHIpfWFyW0E+PjJdPTQyNjQsKGk9MHxhcltBKzI0Pj4yXSkmJigoMHxhclsocj1BKzI4fDApPj4yXSkhPSgwfGkpJiYoYXJbcj4+Ml09aSksdnUoaSkpfWZ1bmN0aW9uIHNlKEEsZSl7ZXw9MDt2YXIgcj0wLGk9MCxmPTAsbj0wLHQ9MCxvPTA7YXJbKEF8PTApPj4yXT00MjY0LGY9ZSs4fDAsYXJbKGk9QSs4fDApPj4yXT1hcltmPj4yXSxhcltpKzQ+PjJdPWFyW2YrND4+Ml0sYXJbaSs4Pj4yXT1hcltmKzg+PjJdLGFyW2krMTI+PjJdPWFyW2YrMTI+PjJdLGY9ZSsyNHwwLGFyWyhpPUErMjR8MCk+PjJdPTAsYXJbKG89QSsyOHwwKT4+Ml09MCwoYXJbQSszMj4+Ml09MCl8KHI9KDB8YXJbKG49ZSsyOHwwKT4+Ml0pLSgwfGFyW2Y+PjJdKXwwKSYmKCgwfHIpPDAmJnpsKCksdD0wfGh1KHIpLGFyW28+PjJdPXQsYXJbaT4+Ml09dCxhcltBKzMyPj4yXT10K3IsaT0wfGFyW2Y+PjJdLDA8KDB8KHI9KDB8YXJbbj4+Ml0pLWl8MCkpJiYoaGIoMHx0LDB8aSwwfHIpLGFyW28+PjJdPXQrcikpLHQ9MHxhclsobj1lKzM2fDApKzQ+PjJdLGFyWyhvPUErMzZ8MCk+PjJdPWFyW24+PjJdLGFyW28rND4+Ml09dCxhcltBKzQ4Pj4yXT1hcltlKzQ4Pj4yXSxHZShBKzUyfDAsZSs1MnwwKX1mdW5jdGlvbiBkZShBLGUpe2V8PTA7dmFyIHIsaSxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTA7aT0oQXw9MCkrNHwwLGY9MHxhcltBPj4yXSw2NzEwODg2Mzwobj0odD0oMHxhcltpPj4yXSktZj4+NikrMXwwKT4+PjAmJnpsKCksZj0oYz0oMHxhclsobD1BKzh8MCk+PjJdKS1mfDApPj41LGY9Yz4+Nj4+PjA8MzM1NTQ0MzE/Zj4+PjA8bj4+PjA/bjpmOjY3MTA4ODYzO2Rve2lmKGYpe2lmKCEoNjcxMDg4NjM8Zj4+PjApKXtuPTB8aHUoZjw8Nik7YnJlYWt9WnUobD0wfFgoOCksNDQ1MTkpLGFyW2w+PjJdPTE3NjYwLEkoMHxsLDQwMTYsNDI4KX1lbHNlIG49MH13aGlsZSgwKTtpZihyPW4rKGY8PDYpfDAsc2UodD1vPW4rKHQ8PDYpfDAsZSksYT1vKzY0fDAsZT0wfGFyW0E+PjJdLCgwfChmPTB8YXJbaT4+Ml0pKT09KDB8ZSkpZj10LG49Yz1lO2Vsc2V7Zm9yKG49bztzZShuKy02NHwwLGY9ZistNjR8MCksdD1uPXQrLTY0fDAsKDB8ZikhPSgwfGUpOyk7Zj10LGM9MHxhcltBPj4yXSxuPTB8YXJbaT4+Ml19aWYoYXJbQT4+Ml09ZixhcltpPj4yXT1hLGFyW2w+PjJdPXIsKDB8bikhPSgwfChhPWMpKSlmb3Iobz1uO289KGU9bykrLTY0fDAsMHwoZj0wfGFyW2UrLTEyPj4yXSkmJigoMHwodD0wfGFyWyhuPWUrLTh8MCk+PjJdKSkhPSgwfGYpJiYoYXJbbj4+Ml09dCsofigodCstNC1mfDApPj4+Mik8PDIpKSx2dShmKSksYXJbbz4+Ml09NDI2NCwwfChuPTB8YXJbZSstNDA+PjJdKSYmKCgwfGFyWyhmPWUrLTM2fDApPj4yXSkhPSgwfG4pJiYoYXJbZj4+Ml09biksdnUobikpLCgwfG8pIT0oMHxhKTspO2MmJnZ1KGMpfWZ1bmN0aW9uIGtlKEEsZSl7ZXw9MDt2YXIgcixpLGY9MCxuPTAsdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wO3Q9MHxhclsoYj0oQXw9MCkrNHwwKT4+Ml0scj1vPTB8YXJbQT4+Ml0sNTM2ODcwOTExPChmPShsPXQtbz4+MykrMXwwKT4+PjAmJnpsKCksYT0odT0oMHxhclsoaT1BKzh8MCk+PjJdKS1vfDApPj4yLGE9dT4+Mz4+PjA8MjY4NDM1NDU1P2E+Pj4wPGY+Pj4wP2Y6YTo1MzY4NzA5MTE7ZG97aWYoYSl7aWYoISg1MzY4NzA5MTE8YT4+PjApKXtjPTB8aHUoYTw8Myk7YnJlYWt9WnUoYj0wfFgoOCksNDQ1MTkpLGFyW2I+PjJdPTE3NjYwLEkoMHxiLDQwMTYsNDI4KX1lbHNlIGM9MH13aGlsZSgwKTtpZih1PWMrKGE8PDMpfDAsYXJbKGY9bj1jKyhsPDwzKXwwKT4+Ml09YXJbZT4+Ml0sYT1lKzR8MCxhcltjKyhsPDwzKSs0Pj4yXT1hclthPj4yXSxhcltlPj4yXT0wLGE9bis4fChhclthPj4yXT0wKSwoMHx0KSE9KDB8cikpe2Zvcig7dD0obD10KSstOHwwLGFyW24rLTg+PjJdPWFyW3Q+PjJdLGw9bCstNHwwLGFyW24rLTQ+PjJdPWFyW2w+PjJdLGFyW3Q+PjJdPTAsZj1uPWYrLTh8KGFyW2w+PjJdPTApLCgwfHQpIT0oMHxyKTspO289MHxhcltBPj4yXX1pZihhcltBPj4yXT1mLGY9MHxhcltiPj4yXSxhcltiPj4yXT1hLGFyW2k+PjJdPXUsKDB8ZikhPSgwfCh0PW8pKSlmb3IoO249MHxhcltmKy00Pj4yXSxmPWYrLTh8MCwwfG4mJmR1KG4pLCgwfGYpIT0oMHx0KTspO28mJnZ1KG8pfWZ1bmN0aW9uIGhlKEEsZSl7ZXw9MDt2YXIgcixpLGY9MCxuPTAsdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MDtsPTB8YXJbKGI9KEF8PTApKzR8MCk+PjJdLHI9Zj0wfGFyW0E+PjJdLDg5NDc4NDg1PChuPShjPSgodD1sKS1mfDApLzQ4fDApKzF8MCk+Pj4wJiZ6bCgpLG89KHU9KCgwfGFyWyhpPUErOHwwKT4+Ml0pLWZ8MCkvNDh8MCk8PDEsbz11Pj4+MDw0NDczOTI0Mj9vPj4+MDxuPj4+MD9uOm86ODk0Nzg0ODU7ZG97aWYobyl7aWYoISg4OTQ3ODQ4NTxvPj4+MCkpe2E9MHxodSg0OCpvfDApO2JyZWFrfVp1KGI9MHxYKDgpLDQ0NTE5KSxhcltiPj4yXT0xNzY2MCxJKDB8Yiw0MDE2LDQyOCl9ZWxzZSBhPTB9d2hpbGUoMCk7aWYodT1hKyg0OCpvfDApfDAsYXJbKGY9bj1hKyg0OCpjfDApfDApPj4yXT1hcltlPj4yXSxvPWUrNHwwLGFyW2ErKDQ4KmN8MCkrND4+Ml09YXJbbz4+Ml0scz1lKzh8MCxhclthKyg0OCpjfDApKzg+PjJdPWFyW3M+PjJdLGFyW28+PjJdPTAsbz1lKzEyfChhcltzPj4yXT0wKSxhclsocz1hKyg0OCpjfDApKzEyfDApPj4yXT1hcltvPj4yXSxhcltzKzQ+PjJdPWFyW28rND4+Ml0sYXJbcys4Pj4yXT1hcltvKzg+PjJdLGFyW3MrMTI+PjJdPWFyW28rMTI+PjJdLHM9ZSsyOHwwLGFyW2ErKDQ4KmN8MCkrMjg+PjJdPWFyW3M+PjJdLG89ZSszMnwwLGFyW2ErKDQ4KmN8MCkrMzI+PjJdPWFyW28+PjJdLGFyW3M+PjJdPTAsYT1hKyg0OCpjfChhcltvPj4yXT0wKSkrMzZ8MCxjPWUrMzZ8MCxhclthPj4yXT1hcltjPj4yXSxhclthKzQ+PjJdPWFyW2MrND4+Ml0sYXJbYSs4Pj4yXT1hcltjKzg+PjJdLGE9bis0OHwwLCgwfHQpPT0oMHxyKSlvPWw7ZWxzZXtmb3IoO3Q9KGw9dCkrLTQ4fDAsYXJbbistNDg+PjJdPWFyW3Q+PjJdLHM9bCstNDR8MCxhcltuKy00ND4+Ml09YXJbcz4+Ml0sYz1sKy00MHwwLGFyW24rLTQwPj4yXT1hcltjPj4yXSxhcltzPj4yXT0wLHM9bCstMzZ8KGFyW2M+PjJdPTApLGFyWyhjPW4rLTM2fDApPj4yXT1hcltzPj4yXSxhcltjKzQ+PjJdPWFyW3MrND4+Ml0sYXJbYys4Pj4yXT1hcltzKzg+PjJdLGFyW2MrMTI+PjJdPWFyW3MrMTI+PjJdLGM9bCstMjB8MCxhcltuKy0yMD4+Ml09YXJbYz4+Ml0scz1sKy0xNnwwLGFyW24rLTE2Pj4yXT1hcltzPj4yXSxhcltjPj4yXT0wLGw9bCstMTJ8KGFyW3M+PjJdPTApLGFyWyhzPW4rLTEyfDApPj4yXT1hcltsPj4yXSxhcltzKzQ+PjJdPWFyW2wrND4+Ml0sYXJbcys4Pj4yXT1hcltsKzg+PjJdLGY9bj1mKy00OHwwLCgwfHQpIT0oMHxyKTspO289MHxhcltBPj4yXX1pZihhcltBPj4yXT1mLG49MHxhcltiPj4yXSxhcltiPj4yXT1hLGFyW2k+PjJdPXUsKDB8bikhPSgwfCh0PW8pKSlmb3IoOzB8KGY9MHxhcltuKy0xNj4+Ml0pJiZkdShmKSxmPTB8YXJbbistNDA+PjJdLG49bistNDh8MCwwfGYmJmR1KGYpLCgwfG4pIT0oMHx0KTspO28mJnZ1KG8pfWZ1bmN0aW9uIHdlKEEsZSl7ZXw9MDt2YXIgcixpPTAsZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MDtyPShBfD0wKSs0fDAsaT0wfGFyW0E+PjJdLDg5NDc4NDg1PChmPShvPSgoMHxhcltyPj4yXSktaXwwKS80OHwwKSsxfDApPj4+MCYmemwoKSxpPShhPSgoMHxhclsoYz1BKzh8MCk+PjJdKS1pfDApLzQ4fDApPDwxLGk9YT4+PjA8NDQ3MzkyNDI/aT4+PjA8Zj4+PjA/ZjppOjg5NDc4NDg1O2Rve2lmKGkpe2lmKCEoODk0Nzg0ODU8aT4+PjApKXt0PTB8aHUoNDgqaXwwKTticmVha31adShjPTB8WCg4KSw0NDUxOSksYXJbYz4+Ml09MTc2NjAsSSgwfGMsNDAxNiw0MjgpfWVsc2UgdD0wfXdoaWxlKDApO2lmKGE9dCsoNDgqaXwwKXwwLGFyWyhuPWY9dCsoNDgqb3wwKXwwKT4+Ml09YXJbZT4+Ml0sYXJbdCsoNDgqb3wwKSs0Pj4yXT1hcltlKzQ+PjJdLGk9MHxhcltlKzg+PjJdLDB8KGFyW3QrKDQ4Km98MCkrOD4+Ml09aSkmJmJ1KGkpLGw9ZSsxMnwwLGFyWyhpPXQrKDQ4Km98MCkrMTJ8MCk+PjJdPWFyW2w+PjJdLGFyW2krND4+Ml09YXJbbCs0Pj4yXSxhcltpKzg+PjJdPWFyW2wrOD4+Ml0sYXJbaSsxMj4+Ml09YXJbbCsxMj4+Ml0sYXJbdCsoNDgqb3wwKSsyOD4+Ml09YXJbZSsyOD4+Ml0saT0wfGFyW2UrMzI+PjJdLDB8KGFyW3QrKDQ4Km98MCkrMzI+PjJdPWkpJiZidShpKSxlPWUrMzZ8MCxhclsobz10Kyg0OCpvfDApKzM2fDApPj4yXT1hcltlPj4yXSxhcltvKzQ+PjJdPWFyW2UrND4+Ml0sYXJbbys4Pj4yXT1hcltlKzg+PjJdLG89Zis0OHwwLGU9MHxhcltBPj4yXSwoMHwoaT0wfGFyW3I+PjJdKSk9PSgwfGUpKWk9bixmPXQ9ZTtlbHNle2Zvcig7aT0odD1pKSstNDh8MCxhcltmKy00OD4+Ml09YXJbaT4+Ml0sbD10Ky00NHwwLGFyW2YrLTQ0Pj4yXT1hcltsPj4yXSx1PXQrLTQwfDAsYXJbZistNDA+PjJdPWFyW3U+PjJdLGFyW2w+PjJdPTAsbD10Ky0zNnwoYXJbdT4+Ml09MCksYXJbKHU9ZistMzZ8MCk+PjJdPWFyW2w+PjJdLGFyW3UrND4+Ml09YXJbbCs0Pj4yXSxhclt1Kzg+PjJdPWFyW2wrOD4+Ml0sYXJbdSsxMj4+Ml09YXJbbCsxMj4+Ml0sdT10Ky0yMHwwLGFyW2YrLTIwPj4yXT1hclt1Pj4yXSxsPXQrLTE2fDAsYXJbZistMTY+PjJdPWFyW2w+PjJdLGFyW3U+PjJdPTAsdD10Ky0xMnwoYXJbbD4+Ml09MCksYXJbKGw9ZistMTJ8MCk+PjJdPWFyW3Q+PjJdLGFyW2wrND4+Ml09YXJbdCs0Pj4yXSxhcltsKzg+PjJdPWFyW3QrOD4+Ml0sbj1mPW4rLTQ4fDAsKDB8aSkhPSgwfGUpOyk7aT1uLHQ9MHxhcltBPj4yXSxmPTB8YXJbcj4+Ml19aWYoYXJbQT4+Ml09aSxhcltyPj4yXT1vLGFyW2M+PjJdPWEsKDB8ZikhPSgwfChuPXQpKSlmb3IoOzB8KGk9MHxhcltmKy0xNj4+Ml0pJiZkdShpKSxpPTB8YXJbZistNDA+PjJdLGY9ZistNDh8MCwwfGkmJmR1KGkpLCgwfGYpIT0oMHxuKTspO3QmJnZ1KHQpfWZ1bmN0aW9uIHZlKEEsZSl7dmFyIHIsaSxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wO2lmKChlfD0wKT4+PjA8PSh0PTB8YXJbKGk9KEF8PTApKzh8MCk+PjJdKS0oZj1uPTB8YXJbKHU9QSs0fDApPj4yXSk+PjM+Pj4wKXJldHVybiB2YigwfG4sMCxlPDwzfDApLHZvaWQoYXJbdT4+Ml09ZisoZTw8MykpO3I9bD0wfGFyW0E+PjJdLDUzNjg3MDkxMTwobj0oYT1uLWw+PjMpK2V8MCk+Pj4wJiZ6bCgpLG89KGM9dC1sfDApPj4yLG89Yz4+Mz4+PjA8MjY4NDM1NDU1P28+Pj4wPG4+Pj4wP246bzo1MzY4NzA5MTE7ZG97aWYobyl7aWYoISg1MzY4NzA5MTE8bz4+PjApKXtjPTB8aHUobzw8Myk7YnJlYWt9WnUodT0wfFgoOCksNDQ1MTkpLGFyW3U+PjJdPTE3NjYwLEkoMHx1LDQwMTYsNDI4KX1lbHNlIGM9MH13aGlsZSgwKTtpZihuPWMrKGE8PDMpfDAsYz1jKyhvPDwzKXwwLHZiKDB8KHQ9biksMCxlPDwzfDApLGE9bisoZTw8Myl8MCwoMHxmKT09KDB8cikpbz1sO2Vsc2V7Zm9yKDtmPShsPWYpKy04fDAsYXJbbistOD4+Ml09YXJbZj4+Ml0sbD1sKy00fDAsYXJbbistND4+Ml09YXJbbD4+Ml0sYXJbZj4+Ml09MCx0PW49dCstOHwoYXJbbD4+Ml09MCksKDB8ZikhPSgwfHIpOyk7bz0wfGFyW0E+PjJdLGY9MHxhclt1Pj4yXX1pZihhcltBPj4yXT10LGFyW3U+PjJdPWEsYXJbaT4+Ml09YywoMHxmKSE9KDB8KHQ9bykpKWZvcig7bj0wfGFyW2YrLTQ+PjJdLGY9ZistOHwwLDB8biYmZHUobiksKDB8ZikhPSgwfHQpOyk7byYmdnUobyl9ZnVuY3Rpb24gbWUoQSxlLHIsaSxmLG4pe0F8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MDt2YXIgdCxvLGEsYyxsLHUsYixzLGQsayxoLHcsdixtLGcsWixwLHk9MCxCPTAsRT0wLFg9MDt1cj0ocD11cikrMTI4fDAsdT1wKzEwOHwwLGI9cCsxMTV8MCxaPXArOTZ8MCxzPXArMTEyfDAsZz1wKzU2fDAsaz1wKzMyfDAsaD1wKzh8MCxkPXAsWD0wfGFyWyhlfD0wKT4+Ml0seT0wfGFyW1grMjQ+PjJdLEI9MHxhcltYKzI4Pj4yXTtkb3tpZigwfEVvKFgsNikpe2lmKCgwfFhvKDB8YXJbZT4+Ml0sNikpPT0oMHx5KSYmKDB8V28oMHxhcltlPj4yXSw2KSk9PSgwfEIpKWJyZWFrO3JldHVybiBhcltBPj4yXT0wLGFyW0ErND4+Ml09MCx2b2lkKHVyPXApfX13aGlsZSgwKTtpZigwPT0oMHxyKSYzPGk+Pj4wKXJldHVybiBhcltBPj4yXT0wLGFyW0ErND4+Ml09MCx2b2lkKHVyPXApO2lmKFg9MHxhcltlPj4yXSxhPTB8YXJbWCszMj4+Ml0sYz0wfGFyW1grMzY+PjJdLEU9MHxFbyhYLDYpPzE6MHx0bCgwfGFyWzM2KygwfGFyW2U+PjJdKT4+Ml0pLHk9MHxhcltlPj4yXSxsPTB8YXJbeSs0MD4+Ml0sKFg9MD09KDB8KG09MHxhclt5KzQ0Pj4yXSkpKXx8KGJ1KG0pLHk9MHxhcltlPj4yXSksSW8oWix5KSwwfGFyWzgrWj4+Ml18fHNyKDM0Mzc3LDMyMjQ4LDMwNjcsMzIyNzIpLHQ9MjU1JigwfFZvKDB8YXJbZT4+Ml0sMHxhclsxNisoMHxhcltaPj4yXSk+PjJdKSksdHJbcz4+MF09MHx0cltiPj4wXSx0clsxK3M+PjBdPTB8dHJbMStiPj4wXSx0clsyK3M+PjBdPTB8dHJbMitiPj4wXSxYfHxidShtKSxvPTB8YXJbZj4+Ml0sKHY9MD09KDB8KHc9MHxhcltmKzQ+PjJdKSkpfHxidSh3KSxYfHxkdShtKSxCPTE8KDB8ZnVuY3Rpb24oQSl7dmFyIGU9MDtzd2l0Y2goMHwoQXw9MCkpe2Nhc2UgMzpjYXNlIDI6Y2FzZSAxOmNhc2UgMDpjYXNlIDk5OmU9MTticmVhaztjYXNlIDE0OmNhc2UgMTI6Y2FzZSAxMDplPTM7YnJlYWs7Y2FzZSAxNTpjYXNlIDEzOmNhc2UgMTE6ZT00O2JyZWFrO2RlZmF1bHQ6c3IoNTU3MzksMjU1OTcsMTE4LDI1NjUzKX1yZXR1cm4gMHxlfShpKSk/MHx0bChpKTpFLHk9MTE9PSgxfGkpPzg6MD09KDB8bik/dDpuLGFyW2c+PjJdPTAsYXJbKG49NCtnfDApPj4yXT0wLGFyWzgrZz4+Ml09MCxhclsxMitnPj4yXT05OSxhclsxNitnPj4yXT05OSx0clsyMCtnPj4wXT0wLGFyWzI0K2c+PjJdPTgsYXJbMjgrZz4+Ml09MCxhclsoZj0zMitnfDApPj4yXT0wLGFyWzM2K2c+PjJdPTMsYXJbaz4+Ml09YSxhcls0K2s+PjJdPWMsdHJbOCtrPj4wXT0xJkUsdHJbKEU9OStrfDApPj4wXT0wfHRyW2I+PjBdLHRyW0UrMT4+MF09MHx0clsxK2I+PjBdLHRyW0UrMj4+MF09MHx0clsyK2I+PjBdLGFyWzEyK2s+PjJdPXQsYXJbMTYraz4+Ml09bCxhclsyMCtrPj4yXT1tLFh8fGJ1KG0pLGFyW2g+PjJdPXIsYXJbNCtoPj4yXT1pLHRyWzgraD4+MF09MSZCLHRyWyhyPTkraHwwKT4+MF09MHx0cltzPj4wXSx0cltyKzE+PjBdPTB8dHJbMStzPj4wXSx0cltyKzI+PjBdPTB8dHJbMitzPj4wXSxhclsxMitoPj4yXT0xMj09KC00Jml8MCkmKDB8eSk8OT8xMDp5LGFyWzE2K2g+PjJdPW8sYXJbMjAraD4+Ml09dyx2fHxidSh3KSxhcltkPj4yXT0zLGFyW3U+PjJdPWFyW2Q+PjJdLHk9MHxmdW5jdGlvbihBLGUscixpKXtlfD0wLHJ8PTAsaXw9MDt2YXIgZixuLHQsbyxhLGMsbCx1LGIscyxkLGssaCx3LHYsbT0wLGc9MCxaPTAscD0wLHk9MCxCPTAsRT0wLFg9MCxXPTAsST0wLEM9MCxHPTAsVj0wLEY9MCxSPTAsTj0wLF89MCxZPTAsUT0wLEQ9MCxKPTAsTT0wLFQ9MCxVPTAsUz0wLE89MCx6PTAsaj0wLEg9MCx4PTAsUD0wLEw9MCxLPTAscT0wLCQ9MCxBQT0wLGVBPTAsckE9MCxpQT0wLGZBPTAsbkE9MCx0QT0wLG9BPTAsYUE9MCxjQT0wLGxBPTAsdUE9MCxiQT0wLHNBPTAsZEE9MCxrQT0wLGhBPTAsd0E9MCx2QT0wLG1BPTA7aWYodXI9KHY9dXIpKzI1NnwwLG89dis5NnwwLG1BPXYrMjMyfDAsdz12KzE2OHwwLGg9disxNTZ8MCxSPXYrODB8MCxzPXYrMTQ0fDAsZD12KzIwOHwwLGs9disxODR8MCxiPXYrMTgwfDAsYz0obD12KSsyNDR8MCx1PXYrNjR8MCxhPXYrNDh8MCxaPTB8YXJbKEF8PTApPj4yXSwoMHwobT0wfGFyWyh3QT1BKzR8MCk+PjJdKSkhPSgwfFopKWZvcig7Zz1tKy04fDAsYXJbd0E+PjJdPWcsKDB8KG09KG09MHxhclttKy00Pj4yXSk/KGR1KG0pLDB8YXJbd0E+PjJdKTpnKSkhPSgwfFopOyk7aWYoYXJbKGtBPUErMTJ8MCk+PjJdPWFyW3I+PjJdLGFyW2tBKzQ+PjJdPWFyW3IrND4+Ml0sYXJba0ErOD4+Ml09YXJbcis4Pj4yXSxhcltrQSsxMj4+Ml09YXJbcisxMj4+Ml0sbT0wfGFyWyhrQT1yKzE2fDApPj4yXSwwfChnPTB8YXJbKHQ9cisyMHwwKT4+Ml0pJiZidShnKSxhcltBKzI4Pj4yXT1tLG09MHxhclsodkE9QSszMnwwKT4+Ml0sYXJbdkE+PjJdPWcsMHxtJiZkdShtKSxhcltBKzM2Pj4yXT1hcltpPj4yXSwoMHxhcltlPj4yXSk9PSgwfGFyW3I+PjJdKSYmKDB8YXJbZSs0Pj4yXSk9PSgwfGFyW3IrND4+Ml0pJiYoMHx0cltlKzg+PjBdKT09KDB8dHJbcis4Pj4wXSkmJigwfGFyW2UrMTI+PjJdKT09KDB8YXJbcisxMj4+Ml0pKXJldHVybiB1cj12LDB8KG1BPTEpO2FyW21BPj4yXT0wLGFyWyh2QT1tQSs0fDApPj4yXT0wLHk9KGFyW21BKzg+PjJdPTApfGh1KDE2KSxhclt5KzQ+PjJdPTAsYXJbeSs4Pj4yXT0wLGFyW3k+PjJdPTY5MzIsYXJbKG09eSsxMnwwKT4+Ml09NjQ5MixhcltvPj4yXT1tLGFyWyhtPTQrb3wwKT4+Ml09eSx5PW1BKzh8MCxrZShtQSxvKSwwfChtPTB8YXJbbT4+Ml0pJiZkdShtKSxnPTB8aHUoMTYpLGFyW2crND4+Ml09MCxhcltnKzg+PjJdPTAsYXJbZz4+Ml09Njk2MCxhclsobT1nKzEyfDApPj4yXT02OTg4LGFyW28+PjJdPW0sYXJbKFo9NCtvfDApPj4yXT1nLChwPTB8YXJbdkE+PjJdKT4+PjA+PSgwfGFyW3k+PjJdKT4+PjA/KGtlKG1BLG8pLDB8KG09MHxhcltaPj4yXSkmJmR1KG0pKTooYXJbcD4+Ml09bSxhcltwKzQ+PjJdPWcsYXJbbz4+Ml09MCxhcltaPj4yXT0wLGFyW3ZBPj4yXT1wKzgpLGc9MHxodSgxNiksYXJbZys0Pj4yXT0wLGFyW2crOD4+Ml09MCxhcltnPj4yXT03MDEyLGFyWyhtPWcrMTJ8MCk+PjJdPTcwNDAsYXJbbz4+Ml09bSxhclsoWj00K298MCk+PjJdPWcsKHA9MHxhclt2QT4+Ml0pPj4+MD49KDB8YXJbeT4+Ml0pPj4+MD8oa2UobUEsbyksMHwobT0wfGFyW1o+PjJdKSYmZHUobSkpOihhcltwPj4yXT1tLGFyW3ArND4+Ml09ZyxhcltvPj4yXT0wLGFyW1o+PjJdPTAsYXJbdkE+PjJdPXArOCksZz0wfGh1KDE2KSxhcltnKzQ+PjJdPTAsYXJbZys4Pj4yXT0wLGFyW2c+PjJdPTcwNjQsYXJbKG09ZysxMnwwKT4+Ml09NjUxNixhcltvPj4yXT1tLGFyWyhaPTQrb3wwKT4+Ml09ZywocD0wfGFyW3ZBPj4yXSk+Pj4wPj0oMHxhclt5Pj4yXSk+Pj4wPyhrZShtQSxvKSwwfChtPTB8YXJbWj4+Ml0pJiZkdShtKSk6KGFyW3A+PjJdPW0sYXJbcCs0Pj4yXT1nLGFyW28+PjJdPTAsYXJbWj4+Ml09MCxhclt2QT4+Ml09cCs4KSxnPTB8aHUoMTYpLGFyW2crND4+Ml09MCxhcltnKzg+PjJdPTAsYXJbZz4+Ml09NzA5MixhclsobT1nKzEyfDApPj4yXT02NTQwLGFyW28+PjJdPW0sYXJbKFo9NCtvfDApPj4yXT1nLChwPTB8YXJbdkE+PjJdKT4+PjA+PSgwfGFyW3k+PjJdKT4+PjA/KGtlKG1BLG8pLDB8KG09MHxhcltaPj4yXSkmJmR1KG0pKTooYXJbcD4+Ml09bSxhcltwKzQ+PjJdPWcsYXJbbz4+Ml09MCxhcltaPj4yXT0wLGFyW3ZBPj4yXT1wKzgpLGc9MHxodSgxNiksYXJbZys0Pj4yXT0wLGFyW2crOD4+Ml09MCxhcltnPj4yXT03MTIwLGFyWyhtPWcrMTJ8MCk+PjJdPTY5MDgsYXJbbz4+Ml09bSxhclsoWj00K298MCk+PjJdPWcsKHA9MHxhclt2QT4+Ml0pPj4+MD49KDB8YXJbeT4+Ml0pPj4+MD8oa2UobUEsbyksMHwobT0wfGFyW1o+PjJdKSYmZHUobSkpOihhcltwPj4yXT1tLGFyW3ArND4+Ml09ZyxhcltvPj4yXT0wLGFyW1o+PjJdPTAsYXJbdkE+PjJdPXArOCksZz0wfGh1KDE2KSxhcltnKzQ+PjJdPTAsYXJbZys4Pj4yXT0wLGFyW2c+PjJdPTcxNDgsYXJbKG09ZysxMnwwKT4+Ml09NjU2NCxhcltvPj4yXT1tLGFyWyhaPTQrb3wwKT4+Ml09ZywocD0wfGFyW3ZBPj4yXSk+Pj4wPj0oMHxhclt5Pj4yXSk+Pj4wPyhrZShtQSxvKSwwfChtPTB8YXJbWj4+Ml0pJiZkdShtKSk6KGFyW3A+PjJdPW0sYXJbcCs0Pj4yXT1nLGFyW28+PjJdPTAsYXJbWj4+Ml09MCxhclt2QT4+Ml09cCs4KSxnPTB8aHUoMTYpLGFyW2crND4+Ml09MCxhcltnKzg+PjJdPTAsYXJbZz4+Ml09NzE3NixhclsobT1nKzEyfDApPj4yXT02NTg4LGFyW28+PjJdPW0sYXJbKFo9NCtvfDApPj4yXT1nLChwPTB8YXJbdkE+PjJdKT4+PjA+PSgwfGFyW3k+PjJdKT4+PjA/KGtlKG1BLG8pLDB8KG09MHxhcltaPj4yXSkmJmR1KG0pKTooYXJbcD4+Ml09bSxhcltwKzQ+PjJdPWcsYXJbbz4+Ml09MCxhcltaPj4yXT0wLGFyW3ZBPj4yXT1wKzgpLGc9MHxodSgxNiksYXJbZys0Pj4yXT0wLGFyW2crOD4+Ml09MCxhcltnPj4yXT03MjA0LGFyWyhtPWcrMTJ8MCk+PjJdPTY2NjAsYXJbbz4+Ml09bSxhclsoWj00K298MCk+PjJdPWcsKHA9MHxhclt2QT4+Ml0pPj4+MD49KDB8YXJbeT4+Ml0pPj4+MD8oa2UobUEsbyksMHwobT0wfGFyW1o+PjJdKSYmZHUobSkpOihhcltwPj4yXT1tLGFyW3ArND4+Ml09ZyxhcltvPj4yXT0wLGFyW1o+PjJdPTAsYXJbdkE+PjJdPXArOCksZz0wfGh1KDE2KSxhcltnKzQ+PjJdPTAsYXJbZys4Pj4yXT0wLGFyW2c+PjJdPTcyMzIsYXJbKG09ZysxMnwwKT4+Ml09NjY4NCxhcltvPj4yXT1tLGFyWyhaPTQrb3wwKT4+Ml09ZywocD0wfGFyW3ZBPj4yXSk+Pj4wPj0oMHxhclt5Pj4yXSk+Pj4wPyhrZShtQSxvKSwwfChtPTB8YXJbWj4+Ml0pJiZkdShtKSk6KGFyW3A+PjJdPW0sYXJbcCs0Pj4yXT1nLGFyW28+PjJdPTAsYXJbWj4+Ml09MCxhclt2QT4+Ml09cCs4KSxnPTB8aHUoMTYpLGFyW2crND4+Ml09MCxhcltnKzg+PjJdPTAsYXJbZz4+Ml09NzI2MCxhclsobT1nKzEyfDApPj4yXT02NjM2LGFyW28+PjJdPW0sYXJbKFo9NCtvfDApPj4yXT1nLChwPTB8YXJbdkE+PjJdKT4+PjA+PSgwfGFyW3k+PjJdKT4+PjA/KGtlKG1BLG8pLDB8KG09MHxhcltaPj4yXSkmJmR1KG0pKTooYXJbcD4+Ml09bSxhcltwKzQ+PjJdPWcsYXJbbz4+Ml09MCxhcltaPj4yXT0wLGFyW3ZBPj4yXT1wKzgpLGc9MHxodSgxNiksYXJbZys0Pj4yXT0wLGFyW2crOD4+Ml09MCxhcltnPj4yXT03Mjg4LGFyWyhtPWcrMTJ8MCk+PjJdPTY2MTIsYXJbbz4+Ml09bSxhclsoWj00K298MCk+PjJdPWcsKHA9MHxhclt2QT4+Ml0pPj4+MD49KDB8YXJbeT4+Ml0pPj4+MD8oa2UobUEsbyksMHwobT0wfGFyW1o+PjJdKSYmZHUobSkpOihhcltwPj4yXT1tLGFyW3ArND4+Ml09ZyxhcltvPj4yXT0wLGFyW1o+PjJdPTAsYXJbdkE+PjJdPXArOCksZz0wfGh1KDE2KSxhcltnKzQ+PjJdPTAsYXJbZys4Pj4yXT0wLGFyW2c+PjJdPTczMTYsYXJbKG09ZysxMnwwKT4+Ml09NjcwOCxhcltvPj4yXT1tLGFyWyhaPTQrb3wwKT4+Ml09ZywocD0wfGFyW3ZBPj4yXSk+Pj4wPj0oMHxhclt5Pj4yXSk+Pj4wPyhrZShtQSxvKSwwfChtPTB8YXJbWj4+Ml0pJiZkdShtKSk6KGFyW3A+PjJdPW0sYXJbcCs0Pj4yXT1nLGFyW28+PjJdPTAsYXJbWj4+Ml09MCxhclt2QT4+Ml09cCs4KSxnPTB8aHUoMTYpLGFyW2crND4+Ml09MCxhcltnKzg+PjJdPTAsYXJbZz4+Ml09NzM0NCxhclsobT1nKzEyfDApPj4yXT02NzMyLGFyW28+PjJdPW0sYXJbKFo9NCtvfDApPj4yXT1nLChwPTB8YXJbdkE+PjJdKT4+PjA+PSgwfGFyW3k+PjJdKT4+PjA/KGtlKG1BLG8pLDB8KG09MHxhcltaPj4yXSkmJmR1KG0pKTooYXJbcD4+Ml09bSxhcltwKzQ+PjJdPWcsYXJbbz4+Ml09MCxhcltaPj4yXT0wLGFyW3ZBPj4yXT1wKzgpLGc9MHxodSgxNiksYXJbZys0Pj4yXT0wLGFyW2crOD4+Ml09MCxhcltnPj4yXT03MzcyLGFyWyhtPWcrMTJ8MCk+PjJdPTc0MDAsYXJbbz4+Ml09bSxhclsoWj00K298MCk+PjJdPWcscD0wfGFyW3ZBPj4yXTtkb3tpZihwPj4+MDwoMHxhclt5Pj4yXSk+Pj4wKWFyW3A+PjJdPW0sYXJbcCs0Pj4yXT1nLGFyW28+PjJdPTAsYXJbWj4+Ml09MCxhclt2QT4+Ml09cCs4O2Vsc2V7aWYoa2UobUEsbyksIShtPTB8YXJbWj4+Ml0pKWJyZWFrO2R1KG0pfX13aGlsZSgwKTtnPTB8aHUoMTYpLGFyW2crND4+Ml09MCxhcltnKzg+PjJdPTAsYXJbZz4+Ml09NzQyNCxhclsobT1nKzEyfDApPj4yXT03NDUyLGFyW28+PjJdPW0sYXJbKFo9NCtvfDApPj4yXT1nLHA9MHxhclt2QT4+Ml07ZG97aWYocD4+PjA8KDB8YXJbeT4+Ml0pPj4+MClhcltwPj4yXT1tLGFyW3ArND4+Ml09ZyxhcltvPj4yXT0wLGFyW1o+PjJdPTAsYXJbdkE+PjJdPXArODtlbHNle2lmKGtlKG1BLG8pLCEobT0wfGFyW1o+PjJdKSlicmVhaztkdShtKX19d2hpbGUoMCk7Zz0wfGh1KDE2KSxhcltnKzQ+PjJdPTAsYXJbZys4Pj4yXT0wLGFyW2c+PjJdPTc0NzYsYXJbKG09ZysxMnwwKT4+Ml09Njc1NixhcltvPj4yXT1tLGFyWyhaPTQrb3wwKT4+Ml09ZyxwPTB8YXJbdkE+PjJdO2Rve2lmKHA+Pj4wPCgwfGFyW3k+PjJdKT4+PjApYXJbcD4+Ml09bSxhcltwKzQ+PjJdPWcsYXJbbz4+Ml09MCxhcltaPj4yXT0wLGFyW3ZBPj4yXT1wKzg7ZWxzZXtpZihrZShtQSxvKSwhKG09MHxhcltaPj4yXSkpYnJlYWs7ZHUobSl9fXdoaWxlKDApO2c9MHxodSgxNiksYXJbZys0Pj4yXT0wLGFyW2crOD4+Ml09MCxhcltnPj4yXT03NTA0LGFyWyhtPWcrMTJ8MCk+PjJdPTY3ODAsYXJbbz4+Ml09bSxhclsoWj00K298MCk+PjJdPWcscD0wfGFyW3ZBPj4yXTtkb3tpZihwPj4+MDwoMHxhclt5Pj4yXSk+Pj4wKWFyW3A+PjJdPW0sYXJbcCs0Pj4yXT1nLGFyW28+PjJdPTAsYXJbWj4+Ml09MCxhclt2QT4+Ml09cCs4O2Vsc2V7aWYoa2UobUEsbyksIShtPTB8YXJbWj4+Ml0pKWJyZWFrO2R1KG0pfX13aGlsZSgwKTtnPTB8aHUoMTYpLGFyW2crND4+Ml09MCxhcltnKzg+PjJdPTAsYXJbZz4+Ml09NzUzMixhclsobT1nKzEyfDApPj4yXT02ODMyLGFyW28+PjJdPW0sYXJbKFo9NCtvfDApPj4yXT1nLHA9MHxhclt2QT4+Ml07ZG97aWYocD4+PjA8KDB8YXJbeT4+Ml0pPj4+MClhcltwPj4yXT1tLGFyW3ArND4+Ml09ZyxhcltvPj4yXT0wLGFyW1o+PjJdPTAsYXJbdkE+PjJdPXArODtlbHNle2lmKGtlKG1BLG8pLCEobT0wfGFyW1o+PjJdKSlicmVhaztkdShtKX19d2hpbGUoMCk7Zz0wfGh1KDE2KSxhcltnKzQ+PjJdPTAsYXJbZys4Pj4yXT0wLGFyW2c+PjJdPTc1NjAsYXJbKG09ZysxMnwwKT4+Ml09Njg4NCxhcltvPj4yXT1tLGFyWyhaPTQrb3wwKT4+Ml09ZyxwPTB8YXJbdkE+PjJdO2Rve2lmKHA+Pj4wPCgwfGFyW3k+PjJdKT4+PjApYXJbcD4+Ml09bSxhcltwKzQ+PjJdPWcsYXJbbz4+Ml09MCxhcltaPj4yXT0wLGFyW3ZBPj4yXT1wKzg7ZWxzZXtpZihrZShtQSxvKSwhKG09MHxhcltaPj4yXSkpYnJlYWs7ZHUobSl9fXdoaWxlKDApO2FyW3c+PjJdPTAsYXJbKG49NCt3fDApPj4yXT0wLGFyWzgrdz4+Ml09MCxhcltoPj4yXT0wLGFyWyhmPTQraHwwKT4+Ml09MCxhcls4K2g+PjJdPTAsYXJbUj4+Ml09YXJbZT4+Ml0sYXJbUis0Pj4yXT1hcltlKzQ+PjJdLGFyW1IrOD4+Ml09YXJbZSs4Pj4yXSxhcltSKzEyPj4yXT1hcltlKzEyPj4yXSxwPTB8YXJbZSsxNj4+Ml0sKEk9MD09KDB8KFc9MHxhcltlKzIwPj4yXSkpKXx8YnUoVyksQj00K298MCxYPTgrb3wwLEU9MTIrb3wwLGFyWyhlPTI4K298MCk+PjJdPTAsYXJbZSs0Pj4yXT0wLGFyW2UrOD4+Ml09MCxhcltlKzEyPj4yXT0wLGFyW2UrMTY+PjJdPTAsYXJbbz4+Ml09LTEsYXJbQj4+Ml09MCxhcltYPj4yXT0wLGFyW0U+PjJdPWFyW1I+PjJdLGFyW0UrND4+Ml09YXJbUis0Pj4yXSxhcltFKzg+PjJdPWFyW1IrOD4+Ml0sYXJbRSsxMj4+Ml09YXJbUisxMj4+Ml0sZT0yOCtvfDAsZz1XO2Rve2lmKEkpZEE9MzIrb3wwLGFyW2U+PjJdPXAsYXJbZEE+PjJdPWcseT1lLGc9cD1kQTtlbHNle2lmKGJ1KFcpLG09MHxhclsoWj0zMitvfDApPj4yXSxhcltlPj4yXT1wLGFyW1o+PjJdPWcsIW0pe3k9ZSxnPXA9WjticmVha31kdShtKSx5PWUsZz1wPVp9fXdoaWxlKDApO2dBWzM2K28+PjJdPTAsZ0FbNDArbz4+Ml09MCxtPShnQVs0NCtvPj4yXT0wKXxhcltmPj4yXSxkQT04K2h8MDtkb3tpZihtPj4+MDwoMHxhcltkQT4+Ml0pPj4+MClhclttPj4yXT1hcltvPj4yXSxhclttKzQ+PjJdPWFyW0I+PjJdLGFyW20rOD4+Ml09YXJbWD4+Ml0sYXJbQj4+Ml09MCxhcltYPj4yXT0wLGFyWyhzQT1tKzEyfDApPj4yXT1hcltFPj4yXSxhcltzQSs0Pj4yXT1hcltFKzQ+PjJdLGFyW3NBKzg+PjJdPWFyW0UrOD4+Ml0sYXJbc0ErMTI+PjJdPWFyW0UrMTI+PjJdLGFyW20rMjg+PjJdPWFyW3k+PjJdLGFyW20rMzI+PjJdPWFyW2c+PjJdLGFyW2U+PjJdPTAsYkE9MzYrb3woYXJbcD4+Ml09MCksYXJbKHNBPW0rMzZ8MCk+PjJdPWFyW2JBPj4yXSxhcltzQSs0Pj4yXT1hcltiQSs0Pj4yXSxhcltzQSs4Pj4yXT1hcltiQSs4Pj4yXSxhcltmPj4yXT1tKzQ4O2Vsc2V7aWYoaGUoaCxvKSwhKG09MHxhcltwPj4yXSkpYnJlYWs7ZHUobSl9fXdoaWxlKDApOzB8KG09MHxhcltYPj4yXSkmJmR1KG0pLEl8fGR1KFcpLG09MHxhcltoPj4yXSxnPTB8YXJbZj4+Ml07QTpkb3tpZigoMHxtKT09KDB8ZykpcD0wO2Vsc2V7UD04K3d8MCxMPXIrNHwwLEs9cis4fDAscT1yKzEyfDAsJD0xNitkfDAsQUE9MjArZHwwLGVBPTE2K2t8MCxyQT0yMCtrfDAsaUE9NCtzfDAsZkE9bCs0fDAsbkE9bCs4fDAsdEE9bCsxMnwwLG9BPWwrMTZ8MCxhQT1sKzIwfDAsY0E9bCsyNHwwLHVBPWxBPWwrMjh8MCxiQT1sKzMyfDAsSD1sKzQwfDAseD1sKzQ0fDAsc0E9aj1sKzM2fDAsQz0wO2U6Zm9yKDs7KXtpZigoMHxnKT09KDB8bSkpZz0tMTtlbHNlIGZvcihwPShnLW18MCkvNDh8MCxnPS0xLFo9MDtDPSh6PTA9PSgwfFopfChGPS4zMDAwMDAwMTE5MjA5Mjg5NipnQVttKyg0OCpafDApKzM2Pj4yXSsuNjAwMDAwMDIzODQxODU3OSpnQVttKyg0OCpafDApKzQwPj4yXSsuMTAwMDAwMDAxNDkwMTE2MTIqZ0FbbSsoNDgqWnwwKSs0ND4+Ml0pPEMpP0Y6QyxnPXo/WjpnLChaPVorMXwwKT4+PjA8cD4+PjA7KTtmb3IoWj1tKyg0OCpnfDApfDAsKDB8KHA9MHxhcltuPj4yXSkpPT0oMHxhcltQPj4yXSk/d2UodyxaKTooYXJbcD4+Ml09YXJbWj4+Ml0sYXJbcCs0Pj4yXT1hclttKyg0OCpnfDApKzQ+PjJdLFo9MHxhclttKyg0OCpnfDApKzg+PjJdLDB8KGFyW3ArOD4+Ml09WikmJmJ1KFopLHo9bSsoNDgqZ3wwKSsxMnwwLGFyWyhaPXArMTJ8MCk+PjJdPWFyW3o+PjJdLGFyW1orND4+Ml09YXJbeis0Pj4yXSxhcltaKzg+PjJdPWFyW3orOD4+Ml0sYXJbWisxMj4+Ml09YXJbeisxMj4+Ml0sYXJbcCsyOD4+Ml09YXJbbSsoNDgqZ3wwKSsyOD4+Ml0sWj0wfGFyW20rKDQ4Kmd8MCkrMzI+PjJdLDB8KGFyW3ArMzI+PjJdPVopJiZidShaKSxPPW0rKDQ4Kmd8MCkrMzZ8MCxhclsoej1wKzM2fDApPj4yXT1hcltPPj4yXSxhclt6KzQ+PjJdPWFyW08rND4+Ml0sYXJbeis4Pj4yXT1hcltPKzg+PjJdLGFyW24+PjJdPTQ4KygwfGFyW24+PjJdKSkscD0wfGFyW2Y+PjJdLHk9MHxhcltoPj4yXSxhclt5Kyg0OCpnfDApPj4yXT1hcltwKy00OD4+Ml0sbT0wfGFyW3ArLTQ0Pj4yXSwwfChaPTB8YXJbcCstNDA+PjJdKSYmYnUoWiksYXJbeSsoNDgqZ3wwKSs0Pj4yXT1tLG09MHxhclsoej15Kyg0OCpnfDApKzh8MCk+PjJdLGFyW3o+PjJdPVosMHxtJiZkdShtKSxaPXArLTM2fDAsYXJbKG09eSsoNDgqZ3wwKSsxMnwwKT4+Ml09YXJbWj4+Ml0sYXJbbSs0Pj4yXT1hcltaKzQ+PjJdLGFyW20rOD4+Ml09YXJbWis4Pj4yXSxhclttKzEyPj4yXT1hcltaKzEyPj4yXSxtPTB8YXJbcCstMjA+PjJdLDB8KFo9MHxhcltwKy0xNj4+Ml0pJiZidShaKSxhclt5Kyg0OCpnfDApKzI4Pj4yXT1tLG09MHxhclsoej15Kyg0OCpnfDApKzMyfDApPj4yXSxhclt6Pj4yXT1aLDB8bSYmZHUobSksbT15Kyg0OCpnfDApKzM2fDAsZz1wKy0xMnwwLGFyW20+PjJdPWFyW2c+PjJdLGFyW20rND4+Ml09YXJbZys0Pj4yXSxhclttKzg+PjJdPWFyW2crOD4+Ml0sZz0obT0wfGFyW2Y+PjJdKSstNDh8MDthcltmPj4yXT1tKy00OCwwfChaPTB8YXJbbSstMTY+PjJdKSYmZHUoWiksMHwobT0wfGFyW20rLTQwPj4yXSkmJmR1KG0pLCgwfChtPTB8YXJbZj4+Ml0pKSE9KDB8Zyk7KTtaPTB8YXJbbj4+Ml07ZG97aWYoKDB8YXJbWistMzY+PjJdKT09KDB8YXJbcj4+Ml0pKXtpZigoMHxhcltaKy0zMj4+Ml0pIT0oMHxhcltMPj4yXSkpYnJlYWs7aWYoKDB8dHJbWistMjg+PjBdKSE9KDB8dHJbSz4+MF0pKWJyZWFrO2lmKCgwfGFyW1orLTI0Pj4yXSk9PSgwfGFyW3E+PjJdKSlicmVhayBlfX13aGlsZSgwKTtpZigoMHwobT0wfGFyW21BPj4yXSkpIT0oMHwoej0wfGFyW3ZBPj4yXSkpKXtmb3IoOzspe2lmKHA9MHxhclttPj4yXSx5PTB8YXJbOCsoMHxhcltwPj4yXSk+PjJdLGc9WistMzZ8MCxhcltkPj4yXT1hcltnPj4yXSxhcls0K2Q+PjJdPWFyW2crND4+Ml0sYXJbOCtkPj4yXT1hcltnKzg+PjJdLGFyWzEyK2Q+PjJdPWFyW2crMTI+PjJdLGFyWyQ+PjJdPWFyW1orLTIwPj4yXSxnPTB8YXJbWistMTY+PjJdLDB8KGFyW0FBPj4yXT1nKSYmYnUoZyksYXJbaz4+Ml09YXJbcj4+Ml0sYXJbNCtrPj4yXT1hcltyKzQ+PjJdLGFyWzgraz4+Ml09YXJbcis4Pj4yXSxhclsxMitrPj4yXT1hcltyKzEyPj4yXSxhcltlQT4+Ml09YXJba0E+PjJdLGc9MHxhclt0Pj4yXSwwfChhcltyQT4+Ml09ZykmJmJ1KGcpLGFyW2I+PjJdPWFyW2k+PjJdLGFyW28+PjJdPWFyW2I+PjJdLG9zWzYzJnldKHMscCxkLGssbyksMHwoZz0wfGFyW3JBPj4yXSkmJmR1KGcpLDB8KGc9MHxhcltBQT4+Ml0pJiZkdShnKSwoMHwoZz0wfGFyW3M+PjJdKSkhPSgwfChTPTB8YXJbaUE+PjJdKSkpe089bSs0fDA7ZG97aWYoKDB8KHk9cD0wfGFyW3c+PjJdKSkhPSgwfChVPVc9MHxhcltuPj4yXSkpKXtlPTB8YXJbZz4+Ml0sQj1nKzR8MCxFPWcrOHwwLFg9ZysxMnwwLFo9MDtyOmRve2Rve2lmKCgwfGFyW3ArMTI+PjJdKT09KDB8ZSkpe2lmKCgwfGFyW3ArMTY+PjJdKSE9KDB8YXJbQj4+Ml0pKWJyZWFrO2lmKCgwfHRyW3ArMjA+PjBdKSE9KDB8dHJbRT4+MF0pKWJyZWFrO2lmKFp8PVQ9KDB8YXJbcCsyND4+Ml0pPT0oMHxhcltYPj4yXSksVClicmVhayByfX13aGlsZSgwKTtwPXArNDh8MH13aGlsZSgoMHxwKSE9KDB8VykpO1p8fChoQT0xODIpfWVsc2UgaEE9MTgyO3I6ZG97aWYoMTgyPT0oMHxoQSkpe1o9KGhBPTApfGFyW2g+PjJdLHA9MHxhcltmPj4yXTtpOmRve2lmKCgwfFopIT0oMHxwKSl7VD0wfGFyW2c+PjJdLGU9Zys0fDAsQj1nKzh8MCxFPWcrMTJ8MDtmOmZvcig7Oyl7Tj1aKzEyfDA7ZG97aWYoKDB8YXJbTj4+Ml0pPT0oMHxUKSl7aWYoKDB8KFk9MHxhclsoXz1aKzE2fDApPj4yXSkpIT0oMHxhcltlPj4yXSkpYnJlYWs7aWYoKEQ9MHx0clsoUT1aKzIwfDApPj4wXSk8PDI0Pj4yNCE9KDB8dHJbQj4+MF0pKWJyZWFrO2lmKCgwfChNPTB8YXJbKEo9WisyNHwwKT4+Ml0pKT09KDB8YXJbRT4+Ml0pKWJyZWFrIGZ9fXdoaWxlKDApO2lmKCgwfChaPVorNDh8MCkpPT0oMHxwKSlicmVhayBpfWlmKFY9K2dBWyhwPWcrMjR8MCk+PjJdKyArZ0FbVystMTI+PjJdLEY9K2dBW2crMjg+PjJdKyArZ0FbVystOD4+Ml0sRz0rZ0FbZyszMj4+Ml0rICtnQVtXKy00Pj4yXSxYPVorNDB8MCxXPVorNDR8MCwhKC4zMDAwMDAwMTE5MjA5Mjg5NipnQVsoRT1aKzM2fDApPj4yXSsuNjAwMDAwMDIzODQxODU3OSpnQVtYPj4yXSsuMTAwMDAwMDAxNDkwMTE2MTIqZ0FbVz4+Ml0+LjMwMDAwMDAxMTkyMDkyODk2KlYrLjYwMDAwMDAyMzg0MTg1NzkqRisuMTAwMDAwMDAxNDkwMTE2MTIqRykpYnJlYWsgcjtCPWcrOXwwLHRyW2M+PjBdPTB8dHJbQj4+MF0sdHJbMStjPj4wXT0wfHRyW0IrMT4+MF0sdHJbMitjPj4wXT0wfHRyW0IrMj4+MF0sQj0wfGFyW2crMTY+PjJdLChSPTA9PSgwfChJPTB8YXJbZysyMD4+Ml0pKSl8fGJ1KEkpLGFyW3U+PjJdPWFyW3A+PjJdLGFyWzQrdT4+Ml09YXJbcCs0Pj4yXSxhcls4K3U+PjJdPWFyW3ArOD4+Ml0sYXJbbD4+Ml09MCxhcltsKzQ+PjJdPTAscD0oYXJbbCs4Pj4yXT0wKXxhclttPj4yXSwwfChlPTB8YXJbTz4+Ml0pJiZidShlKSx0cltvPj4wXT0wfHRyW2M+PjBdLHRyWzErbz4+MF09MHx0clsxK2M+PjBdLHRyWzIrbz4+MF09MHx0clsyK2M+PjBdLFJ8fGJ1KEkpLGFyW2w+PjJdPWFyW3U+PjJdLGFyW2wrND4+Ml09YXJbNCt1Pj4yXSxhcltsKzg+PjJdPWFyWzgrdT4+Ml0sYXJbWj4+Ml09KChVLXl8MCkvNDh8MCktMSxhcltaKzQ+PjJdPXAscD0wfGFyWyhVPVorOHwwKT4+Ml0sYXJbVT4+Ml09ZSwwfHAmJmR1KHApLGFyW04+PjJdPVQsYXJbXz4+Ml09WSx0cltRPj4wXT1ELHRyWyhVPVorMjF8MCk+PjBdPTB8dHJbbz4+MF0sdHJbVSsxPj4wXT0wfHRyWzErbz4+MF0sdHJbVSsyPj4wXT0wfHRyWzIrbz4+MF0sYXJbSj4+Ml09TSxhcltaKzI4Pj4yXT1CLHA9MHxhclsoVT1aKzMyfDApPj4yXSxhcltVPj4yXT1JLDB8cCYmZHUocCksYXJbRT4+Ml09YXJbbD4+Ml0sYXJbRSs0Pj4yXT1hcltsKzQ+PjJdLGFyW0UrOD4+Ml09YXJbbCs4Pj4yXSxSfHxkdShJKSxnQVtaKzM2Pj4yXT1WLGdBW1g+PjJdPUYsZ0FbVz4+Ml09RzticmVhayByfX13aGlsZSgwKTthcltvPj4yXT1hcltnPj4yXSxhcls0K28+PjJdPWFyW2crND4+Ml0sYXJbOCtvPj4yXT1hcltnKzg+PjJdLGFyWzEyK28+PjJdPWFyW2crMTI+PjJdLGU9MHxhcltnKzE2Pj4yXSwoRT0wPT0oMHwoQj0wfGFyW2crMjA+PjJdKSkpPyhwPVcsWj1VKTooYnUoQikscD1aPTB8YXJbbj4+Ml0seT0wfGFyW3c+PjJdKSxWPStnQVtnKzI0Pj4yXSsgK2dBW3ArLTEyPj4yXSxGPStnQVtnKzI4Pj4yXSsgK2dBW3ArLTg+PjJdLEc9K2dBW2crMzI+PjJdKyArZ0FbcCstND4+Ml0sYXJbYT4+Ml09YXJbbz4+Ml0sYXJbNCthPj4yXT1hcls0K28+PjJdLGFyWzgrYT4+Ml09YXJbOCtvPj4yXSxhclsxMithPj4yXT1hclsxMitvPj4yXSxFfHxidShCKSxhcltmQT4+Ml09MCxhcltuQT4+Ml09MCxhclt0QT4+Ml09OTksYXJbb0E+PjJdPTk5LHRyW2FBPj4wXT0wLGFyW2NBPj4yXT04LGFyW2xBPj4yXT0wLGFyW2xBKzQ+PjJdPTAsYXJbbEErOD4+Ml09MCxhcltsQSsxMj4+Ml09MCxhcltsQSsxNj4+Ml09MCxhcltsPj4yXT0oKFoteXwwKS80OHwwKS0xLHA9MHxhclttPj4yXSx5PVo9MHxhcltPPj4yXTtkb3tpZihaKXtpZihidShaKSxaPTB8YXJbbkE+PjJdLGFyW2ZBPj4yXT1wLGFyW25BPj4yXT15LCFaKWJyZWFrO2R1KFopfWVsc2UgYXJbZkE+PjJdPXAsYXJbbkE+PjJdPXl9d2hpbGUoMCk7YXJbdEE+PjJdPWFyW2E+PjJdLGFyW3RBKzQ+PjJdPWFyWzQrYT4+Ml0sYXJbdEErOD4+Ml09YXJbOCthPj4yXSxhclt0QSsxMj4+Ml09YXJbMTIrYT4+Ml0sRXx8YnUoQiksYXJbdUE+PjJdPWUsWj0wfGFyW2JBPj4yXSxhcltiQT4+Ml09QiwwfFomJmR1KFopLGdBW2o+PjJdPVYsZ0FbSD4+Ml09RixnQVt4Pj4yXT1HLFo9MHxhcltmPj4yXTtkb3tpZihaPj4+MDwoMHxhcltkQT4+Ml0pPj4+MClhcltaPj4yXT1hcltsPj4yXSxhcltaKzQ+PjJdPWFyW2ZBPj4yXSxhcltaKzg+PjJdPWFyW25BPj4yXSxhcltmQT4+Ml09MCxhcltuQT4+Ml09MCxhclsoVT1aKzEyfDApPj4yXT1hclt0QT4+Ml0sYXJbVSs0Pj4yXT1hclt0QSs0Pj4yXSxhcltVKzg+PjJdPWFyW3RBKzg+PjJdLGFyW1UrMTI+PjJdPWFyW3RBKzEyPj4yXSxhcltaKzI4Pj4yXT1hclt1QT4+Ml0sYXJbWiszMj4+Ml09YXJbYkE+PjJdLGFyW3VBPj4yXT0wLGFyW2JBPj4yXT0wLGFyWyhVPVorMzZ8MCk+PjJdPWFyW3NBPj4yXSxhcltVKzQ+PjJdPWFyW3NBKzQ+PjJdLGFyW1UrOD4+Ml09YXJbc0ErOD4+Ml0sYXJbZj4+Ml09Wis0ODtlbHNle2lmKGhlKGgsbCksIShaPTB8YXJbYkE+PjJdKSlicmVhaztkdShaKX19d2hpbGUoMCk7MHwoWj0wfGFyW25BPj4yXSkmJmR1KFopLEV8fChkdShCKSxkdShCKSl9fXdoaWxlKDApO2c9ZyszNnwwfXdoaWxlKCgwfGcpIT0oMHxTKSk7Zz0wfGFyW3M+PjJdfWlmKDB8Zyl7aWYoKDB8KFo9MHxhcltpQT4+Ml0pKSE9KDB8Zykpe2Zvcig7cD1aKy0zNnwwLGFyW2lBPj4yXT1wLCgwfChaPShaPTB8YXJbWistMTY+PjJdKT8oZHUoWiksMHxhcltpQT4+Ml0pOnApKSE9KDB8Zyk7KTtnPTB8YXJbcz4+Ml19dnUoZyl9aWYoKDB8KG09bSs4fDApKT09KDB8eikpYnJlYWs7Wj0wfGFyW24+PjJdfWc9MHxhcltmPj4yXX1pZigoMHwobT0wfGFyW2g+PjJdKSk9PSgwfGcpKXtwPTA7YnJlYWsgQX19aWYobT0oKFotKGhBPTB8YXJbdz4+Ml0pfDApLzQ4fDApLTF8MCxaPWhBLG0pZm9yKGc9MDtnPWcrMXwwLDAhPSgwfChtPTB8YXJbWisoNDgqbXwwKT4+Ml0pKTspO2Vsc2UgZz0wO209KHA9MHxhclt3QT4+Ml0pLShaPTB8YXJbQT4+Ml0pPj4zO2Rve2lmKG0+Pj4wPGc+Pj4wKXZlKEEsZy1tfDApO2Vsc2V7aWYobT4+PjA8PWc+Pj4wKWJyZWFrO2lmKCgwfHApPT0oMHwoeT1aKyhnPDwzKXwwKSkpYnJlYWs7Zm9yKFo9cDttPVorLTh8MCxhclt3QT4+Ml09bSwoWj0wfGFyW1orLTQ+PjJdKSYmKGR1KFopLG09MHxhclt3QT4+Ml0pLCgwfG0pIT0oMHx5KTspWj1tfX13aGlsZSgwKTtpZihaPTB8YXJbdz4+Ml0sMHwobT0oKCgwfGFyW24+PjJdKS1afDApLzQ4fDApLTF8MCkpZm9yKEI9ZystMXwwLGU9MDtnPUItZXwwLHA9MHxhcltBPj4yXSx5PTB8YXJbWisoNDgqbXwwKSs0Pj4yXSwwfChaPTB8YXJbWisoNDgqbXwwKSs4Pj4yXSkmJmJ1KFopLGFyW3ArKGc8PDMpPj4yXT15LGc9MHxhclsod0E9cCsoZzw8MykrNHwwKT4+Ml0sYXJbd0E+PjJdPVosMHxnJiZkdShnKSxaPTB8YXJbdz4+Ml0sbT0wfGFyW1orKDQ4Km18MCk+PjJdOyllPWUrMXwwO3A9MSxtPTB8YXJbaD4+Ml19fXdoaWxlKDApO2lmKDB8bSl7aWYoKDB8KGc9MHxhcltmPj4yXSkpIT0oMHxtKSl7Zm9yKDthcltmPj4yXT1nKy00OCwwfChaPTB8YXJbZystMTY+PjJdKSYmZHUoWiksMHwoZz0wfGFyW2crLTQwPj4yXSkmJmR1KGcpLCgwfChnPTB8YXJbZj4+Ml0pKSE9KDB8bSk7KTttPTB8YXJbaD4+Ml19dnUobSl9aWYoMHwobT0wfGFyW3c+PjJdKSl7aWYoKDB8KGc9MHxhcltuPj4yXSkpIT0oMHxtKSl7Zm9yKDthcltuPj4yXT1nKy00OCwwfChaPTB8YXJbZystMTY+PjJdKSYmZHUoWiksMHwoZz0wfGFyW2crLTQwPj4yXSkmJmR1KGcpLCgwfChnPTB8YXJbbj4+Ml0pKSE9KDB8bSk7KTttPTB8YXJbdz4+Ml19dnUobSl9aWYoMHwobT0wfGFyW21BPj4yXSkpe2lmKCgwfChnPTB8YXJbdkE+PjJdKSkhPSgwfG0pKXtmb3IoO1o9ZystOHwwLGFyW3ZBPj4yXT1aLCgwfChnPShnPTB8YXJbZystND4+Ml0pPyhkdShnKSwwfGFyW3ZBPj4yXSk6WikpIT0oMHxtKTspO209MHxhclttQT4+Ml19dnUobSl9cmV0dXJuIHVyPXYsMHwobUE9cCl9KGcsayxoLHUpLHZ8fGR1KHcpLFh8fGR1KG0pLHk/ZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MDt2YXIgaSxmLG4sdCxvLGEsYyxsPTAsdT0wLGI9MCxzPTAsZD0wLGs9MCxoPTAsdz0wLHY9MCxtPTAsZz0wLFo9MCxwPTAseT0wLEI9MCxFPTAsWD0wLFc9MCxJPTA7dXI9KGM9dXIpKzY0fDAsZj1jKzQ4fDAsbj1jKzQwfDAsdD1jKzMyfDAsbz1jKzh8MCxhPWMsbD0wfGFyWyhyfD0wKT4+Ml0sMHwocj11PTB8YXJbcis0Pj4yXSkmJihidSh1KSxidSh1KSksdT0wfGFyW2U+PjJdLGk9MHxhcltlKzQ+PjJdO0E6ZG97aWYoKDB8dSkhPSgwfGkpKXtmb3IoZz00K3R8MCxaPWUrMTJ8MCxwPTE2K298MCx5PWUrMjh8MCxCPTIwK298MCxFPWUrMzJ8MCx2PWUrMzZ8MCxtPTQrbnwwLGQ9bDtsPTB8YXJbdT4+Ml0sZT0wfGFyWzEyKygwfGFyW2w+PjJdKT4+Ml0sYXJbdD4+Ml09ZCxoPXIsYXJbZz4+Ml09aCwodz0wPT0oMHxyKSl8fGJ1KGgpLGFyW28+PjJdPWFyW1o+PjJdLGFyWzQrbz4+Ml09YXJbWis0Pj4yXSxhcls4K28+PjJdPWFyW1orOD4+Ml0sYXJbMTIrbz4+Ml09YXJbWisxMj4+Ml0sYXJbcD4+Ml09YXJbeT4+Ml0sYj0wfGFyW0U+PjJdLDB8KGFyW0I+PjJdPWIpJiZidShiKSxhclthPj4yXT1hclt2Pj4yXSxhcltmPj4yXT1hclthPj4yXSxvc1s2MyZlXShuLGwsdCxvLGYpLGw9MHxhcltuPj4yXSxrPTB8YXJbbT4+Ml0sYXJbbj4+Ml09MCxhclttPj4yXT0wLCF3JiYoZHUoaCksMHwoWD0wfGFyW20+PjJdKSkmJmR1KFgpLDB8KGU9MHxhcltCPj4yXSkmJmR1KGUpLDB8KGU9MHxhcltnPj4yXSkmJmR1KGUpLHM9bDspe2lmKHI9MHxhclt5Pj4yXSwoYj0wPT0oMHwoZT0wfGFyW0U+PjJdKSkpfHwoYnUoZSksYnUoZSkpLGFyW3MrNDA+PjJdPXIscj0wfGFyWyhJPXMrNDR8MCk+PjJdLGFyW0k+PjJdPWUsMHxyJiZkdShyKSxifHxkdShlKSxyPTB8YXJbKGU9ZCkrNDg+PjJdLChiPTA9PSgwfChlPTB8YXJbZSs1Mj4+Ml0pKSl8fChidShlKSxidShlKSksYXJbcys0OD4+Ml09cixyPTB8YXJbKEk9cys1MnwwKT4+Ml0sYXJbST4+Ml09ZSwwfHImJmR1KHIpLGJ8fGR1KGUpLDB8ayYmYnUoayksd3x8ZHUoaCksKDB8KHU9dSs4fDApKT09KDB8aSkpe3I9ayxXPTM0O2JyZWFrIEF9ZD1sLHI9a31hcltBPj4yXT0wLGFyW0ErND4+Ml09MCxrJiZkdShrKX1lbHNlIFc9MzR9d2hpbGUoMCk7MzQ9PSgwfFcpJiYoYXJbQT4+Ml09bCxhcltBKzQ+PjJdPXIpLHVyPShyJiZkdShyKSxjKX0oQSxnLGUpOihhcltBPj4yXT0wLGFyW0ErND4+Ml09MCksMHwoeT0wfGFyW2Y+PjJdKSYmZHUoeSksMHwoeT0wfGFyW2c+PjJdKSl7aWYoKDB8KEI9MHxhcltuPj4yXSkpIT0oMHx5KSl7Zm9yKDtmPUIrLTh8MCxhcltuPj4yXT1mLCgwfChCPShCPTB8YXJbQistND4+Ml0pPyhkdShCKSwwfGFyW24+PjJdKTpmKSkhPSgwfHkpOyk7eT0wfGFyW2c+PjJdfXZ1KHkpfXZ8fGR1KHcpLENvKFosMHxhcls0K1o+PjJdKSxYfHxkdShtKSx1cj1wfWZ1bmN0aW9uIGdlKEEsZSxyKXtlfD0wLHJ8PTA7dmFyIGksZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wLGQ9MCxrPTAsaD0wLHc9MCx2PTA7c3dpdGNoKGdBWyhBfD0wKT4+Ml09MCxnQVsoaT1BKzR8MCk+PjJdPTAsZTw8MTY+PjE2KXtjYXNlIDEzOmNhc2UgMTI6c3dpdGNoKHI8PDE2Pj4xNil7Y2FzZSAxOmY9LjMwMDAwMDAxMTkyMDkyODk2LG49LjYwMDAwMDAyMzg0MTg1NzksdD0uMTUwMDAwMDA1OTYwNDY0NDgsbz0uMDU5OTk5OTk4NjU4ODk1NDksYT0uNjM5OTk5OTg1Njk0ODg1MyxjPS4zMzAwMDAwMTMxMTMwMjE4NSxsPS4zMTI3MDAwMDMzODU1NDM4LHU9LjMyODk5OTk5NjE4NTMwMjczO2JyZWFrO2Nhc2UgNDpmPS4yMDk5OTk5OTM0NDM0ODkwNyxuPS43MDk5OTk5Nzg1NDIzMjc5LHQ9LjE0MDAwMDAwMDU5NjA0NjQ1LG89LjA3OTk5OTk5ODIxMTg2MDY2LGE9LjY3MDAwMDAxNjY4OTMwMDUsYz0uMzMwMDAwMDEzMTEzMDIxODUsbD0uMzEwMDAwMDAyMzg0MTg1OCx1PS4zMTYwMDAwMTQ1NDM1MzMzO2JyZWFrO2Nhc2UgNTpmPS4yODk5OTk5OTE2NTUzNDk3MyxuPS42MDAwMDAwMjM4NDE4NTc5LHQ9LjE1MDAwMDAwNTk2MDQ2NDQ4LG89LjA1OTk5OTk5ODY1ODg5NTQ5LGE9LjYzOTk5OTk4NTY5NDg4NTMsYz0uMzMwMDAwMDEzMTEzMDIxODUsbD0uMzEyNzAwMDAzMzg1NTQzOCx1PS4zMjg5OTk5OTYxODUzMDI3MzticmVhaztjYXNlIDc6Y2FzZSA2OmY9LjMxMDAwMDAwMjM4NDE4NTgsbj0uNTk1MDAwMDI4NjEwMjI5NSx0PS4xNTUwMDAwMDExOTIwOTI5LG89LjA3MDAwMDAwMDI5ODAyMzIyLGE9LjYyOTk5OTk5NTIzMTYyODQsYz0uMzQwMDAwMDAzNTc2Mjc4NyxsPS4zMTI3MDAwMDMzODU1NDM4LHU9LjMyODk5OTk5NjE4NTMwMjczO2JyZWFrO2Nhc2UgODpmPS4yNDMwMDAwMDA3MTUyNTU3NCxuPS42OTE5OTk5NzE4NjY2MDc3LHQ9LjE0NDk5OTk5NTgyNzY3NDg3LG89LjA0ODk5OTk5ODcxODUwMDE0LGE9LjY4MDk5OTk5NDI3Nzk1NDEsYz0uMzE5MDAwMDA1NzIyMDQ1OSxsPS4zMTAwMDAwMDIzODQxODU4LHU9LjMxNjAwMDAxNDU0MzUzMzM7YnJlYWs7Y2FzZSA5OmY9LjE3MDAwMDAwMTc4ODEzOTM0LG49Ljc5Njk5OTk5MDk0MDA5NCx0PS4xMzA5OTk5OTcyNTgxODYzNCxvPS4wNDYwMDAwMDAwODk0MDY5NyxhPS43MDgwMDAwMDQyOTE1MzQ0LGM9LjI5MTk5OTk5NTcwODQ2NTYsbD0uMzEyNzAwMDAzMzg1NTQzOCx1PS4zMjg5OTk5OTYxODUzMDI3MzticmVhaztjYXNlIDEwOmE9bj0xLGM9bz10PWY9MCxsPS4zMzMzMzI5ODU2Mzk1NzIxNCx1PS4zMzMzMzAwMDU0MDczMzM0O2JyZWFrO2Nhc2UgMTE6Zj0uMjY0OTk5OTg1Njk0ODg1MjUsbj0uNjg5OTk5OTk3NjE1ODE0Mix0PS4xNTAwMDAwMDU5NjA0NjQ0OCxvPS4wNTk5OTk5OTg2NTg4OTU0OSxhPS42ODAwMDAwMDcxNTI1NTc0LGM9LjMxOTk5OTk5Mjg0NzQ0MjYsbD0uMzE0MDAwMDEwNDkwNDE3NSx1PS4zNTEwMDAwMTA5NjcyNTQ2NDticmVhaztjYXNlIDEyOmY9LjI2NDk5OTk4NTY5NDg4NTI1LG49LjY4OTk5OTk5NzYxNTgxNDIsdD0uMTUwMDAwMDA1OTYwNDY0NDgsbz0uMDU5OTk5OTk4NjU4ODk1NDksYT0uNjgwMDAwMDA3MTUyNTU3NCxjPS4zMTk5OTk5OTI4NDc0NDI2LGw9LjMxMjcwMDAwMzM4NTU0MzgsdT0uMzI4OTk5OTk2MTg1MzAyNzM7YnJlYWs7Y2FzZSAyMjpmPS4yOTQ5OTk5ODY4ODY5NzgxNSxuPS42MDUwMDAwMTkwNzM0ODYzLHQ9LjE1NTAwMDAwMTE5MjA5Mjksbz0uMDc2OTk5OTk5NTgyNzY3NDksYT0uNjI5OTk5OTk1MjMxNjI4NCxjPS4zNDAwMDAwMDM1NzYyNzg3LGw9LjMxMjcwMDAwMzM4NTU0MzgsdT0uMzI4OTk5OTk2MTg1MzAyNzM7YnJlYWs7ZGVmYXVsdDp1PWw9Yz1hPW89dD1uPWY9MH1oPTEtKHUrbCksYj11Kih0KihrPWMqKHM9MS0obitmKSktKGQ9MS0oYythKSkqbikrKGYqKG8qZC1jKih3PTEtKG8rdCkpKSthKih2PW4qdy1vKnMpKSksZ0FbQT4+Ml09YyooaCoobypmLXQqbikrKGwqdit1Kih0KnMtZip3KSkpL2IsZj1vKihoKihhKm4tYypmKSsobCprK3UqKGQqZi1hKnMpKSkvYjticmVhaztjYXNlIDE6Z0FbQT4+Ml09LjIxMjU5OTk5Mjc1MjA3NTIsZj0uMDcyMjAwMDAwMjg2MTAyMzticmVhaztjYXNlIDQ6Z0FbQT4+Ml09LjMwMDAwMDAxMTkyMDkyODk2LGY9LjEwOTk5OTk5OTQwMzk1MzU1O2JyZWFrO2Nhc2UgNjpjYXNlIDU6Z0FbQT4+Ml09LjI5ODk5OTk5NDk5MzIwOTg0LGY9LjExNDAwMDAwMDA1OTYwNDY0O2JyZWFrO2Nhc2UgNzpnQVtBPj4yXT0uMjExOTk5OTk3NDk2NjA0OTIsZj0uMDg2OTk5OTk3NDk2NjA0OTI7YnJlYWs7Y2FzZSAxMDpjYXNlIDk6Z0FbQT4+Ml09LjI2MjY5OTk5MTQ2NDYxNDg3LGY9LjA1OTMwMDAwMTcxMDY1MzMwNTticmVhaztkZWZhdWx0OnJldHVybn1nQVtpPj4yXT1mfWZ1bmN0aW9uIFplKEEpe3RyWyhBfD0wKT4+MF09MSxnQVtBKzQ+PjJdPTEuNDAxOTk5OTUwNDA4OTM1NSxnQVtBKzg+PjJdPS0uMzQ0MTM1OTk5Njc5NTY1NDMsZ0FbQSsxMj4+Ml09LS43MTQxMzYwMDQ0NDc5MzcsZ0FbQSsxNj4+Ml09MS43NzE5OTk5NTUxNzczMDcxfWZ1bmN0aW9uIHBlKEEsZSxyKXtlfD0wLHJ8PTA7dmFyIGksZixuLHQsbz0wLGE9MCxjPTAsbD0wLHU9MDt1cj0obj11cikrMTZ8MCx0PW4sdHJbKEF8PTApPj4wXT0wLGFyWyhpPUErNHwwKT4+Ml09MCxhcls0K2k+PjJdPTAsYXJbOCtpPj4yXT0wLGFyWzEyK2k+PjJdPTAsZ2UodCxlLHIpLGY9K2dBW3QrND4+Ml0sbz0rZ0FbdD4+Ml0sdHJbQT4+MF09MSxvPTAhPWZ8MCE9bz8oYT0xLW8sZ0FbaT4+Ml09MiphLGM9MioodT0xLWYpLGE9MipvKmEvKGw9bytmKy0xKSwyKmYqdS9sKTooZ0FbaT4+Ml09MS40MDE5OTk5NTA0MDg5MzU1LGM9MS43NzE5OTk5NTUxNzczMDcxLGE9LS43MTQxMzYwMDQ0NDc5MzcsLS4zNDQxMzU5OTk2Nzk1NjU0MyksZ0FbQSs4Pj4yXT1vLGdBW0ErMTI+PjJdPWEsZ0FbQSsxNj4+Ml09Yyx1cj1ufWZ1bmN0aW9uIHllKEEsZSxyKXtlfD0wLHJ8PTA7dmFyIGksZixuLHQsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wO2Zvcih1cj0odD11cikrMTZ8MCxmPXQsaT0oYz1uPShBfD0wKSs0fCh0cltBPj4wXT0wKSkrMzZ8MDsoMHwoYz1jKzR8KGFyW2M+PjJdPTApKSk8KDB8aSk7KTtnZShmLGUsciksbz0rZ0FbZis0Pj4yXSxhPStnQVtmPj4yXSx0cltBPj4wXT0xLDAhPW98MCE9YT8oYj0odT0xLShnQVtuPj4yXT1hKSktbyxsPS1vL3UqLjUsdT0oYj0tKGdBW0ErOD4+Ml09YikpL3UqLjUsYj1iLyhzPTEtbykqLjUsYT0tYS9zKi41KTooZ0Fbbj4+Ml09LjI5ODk5OTk5NDk5MzIwOTg0LGdBW0ErOD4+Ml09LjU4NzAwMDAxMjM5Nzc2NjEsbD0tLjA4MTMxMjAwMDc1MTQ5NTM2LHU9LS40MTg2ODc5OTkyNDg1MDQ2NCxiPS0uMzMxMjYzOTg5MjEwMTI4OCxhPS0uMTY4NzM0OTk3NTEwOTEwMDMsbz0uMTE0MDAwMDAwMDU5NjA0NjQpLGdBW0ErMTI+PjJdPW8sZ0FbQSsxNj4+Ml09YSxnQVtBKzIwPj4yXT1iLGdBW0ErMjQ+PjJdPS41LGdBW0ErMjg+PjJdPS41LGdBW0ErMzI+PjJdPXUsZ0FbQSszNj4+Ml09bCx1cj10fWZ1bmN0aW9uIEJlKEEpe3RyWyhBfD0wKT4+MF09MSxnQVtBKzQ+PjJdPS4yOTg5OTk5OTQ5OTMyMDk4NCxnQVtBKzg+PjJdPS41ODcwMDAwMTIzOTc3NjYxLGdBW0ErMTI+PjJdPS4xMTQwMDAwMDAwNTk2MDQ2NCxnQVtBKzE2Pj4yXT0tLjE2ODczNDk5NzUxMDkxMDAzLGdBW0ErMjA+PjJdPS0uMzMxMjYzOTg5MjEwMTI4OCxnQVtBKzI0Pj4yXT0uNSxnQVtBKzI4Pj4yXT0uNSxnQVtBKzMyPj4yXT0tLjQxODY4Nzk5OTI0ODUwNDY0LGdBW0ErMzY+PjJdPS0uMDgxMzEyMDAwNzUxNDk1MzZ9ZnVuY3Rpb24gRWUoQSxlKXtyZXR1cm4gMHxmdW5jdGlvbihBLGUpe2V8PTA7dmFyIHIsaSxmLG4sdCxvPTAsYT0wLGM9MDt1cj0odD11cikrMTZ8MCxuPXQsYT01NDgrKEF8PTApfDAsaT0wPT0oMHxhclsocj1BKzU4MHwwKT4+Ml0pLGY9MHx0clthPj4wXTtkb3tpZihpKXtpZihmPDwyND4+MjQ9PTAmJjA9PSgwfHRyW0ErNTQ5Pj4wXSkpe2M9ODticmVha31pZigoMHxhcltBKzM3NzIxNj4+Ml0pPT0oMHxhcltBKzM3NzIyMD4+Ml0pKXJldHVybiByYShBKzM3NjE0OHwwKSx1cj0oZSYmKGFyW2U+PjJdPWFyW0ErMzc2MjAwPj4yXSksdCksKGM9MCl8YztjPTd9ZWxzZSBjPTd9d2hpbGUoMCk7Nz09KDB8YykmJmY8PDI0Pj4yND09MCYmKGM9OCk7aWYoOD09KDB8YykmJiEoMCE9KDB8dHJbQSs1NDk+PjBdKXwxXmkpKXJldHVybiB1cj0oZSYmKGFyW2U+PjJdPTEpLHQpLDB8KGM9MTMpO2lmKCEoMHxMbyhBKzM3NjE0OHwwLDApKSlyZXR1cm4gdXI9KGUmJihhcltlPj4yXT0xKSx0KSwwfChjPTkpO3RyW24+PjBdPTA7ZG97aWYoMHxhcltyPj4yXSl7aWYoYT0wfHlhKGEpKXtvPTB8VW8oQSxhKSx0cltuPj4wXT0xLGM9MjM7YnJlYWt9c3IoMzUxMjYsMzQ3MDAsMTMxNCwzNTEzMCl9ZWxzZXtpZigwfHRyW0ErNTQ5Pj4wXSYmKDB8YXJbQSszNzcyMTY+PjJdKT09KDB8YXJbQSszNzcyMjA+PjJdKSl7aWYoIWUpe289MTM7YnJlYWt9YXJbZT4+Ml09MSxvPTEzO2JyZWFrfW89MHxZbyhBLG4pLGM9MjN9fXdoaWxlKDApOzIzPT0oMHxjKSYmZSYmKGFyW2U+PjJdPTA9PSgwfG8pJjAhPSgxJnRyW24+PjBdKSYxKTtyZXR1cm4gdXI9dCwwfChjPW8pfShBfD0wLGV8PTApfWZ1bmN0aW9uIFZlKEEsZSxyLGksZixuKXtyZXR1cm4gMHxmdW5jdGlvbihBLGUscixpLGYsbil7ZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wO3ZhciB0LG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wO3VyPSh0PXVyKSsxNnwwLGQ9dCwwfGFyWzgrKEF8PTApPj4yXSYmc3IoMzY4NTYsMzY4ODIsMzc1LDM2ODk2KTt0cltBKzE+PjBdPTAsaz0wfGZ1bmN0aW9uKEEsZSl7ZXw9MDt2YXIgcixpLGYsbix0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wO2lmKHVyPShuPXVyKSsxNnwwLGk9bixmPTQwKyhBfD0wKXwwLCgwfCh0PTB8YXJbKHM9QSs0NHwwKT4+Ml0pKT09KDB8YXJbZj4+Ml0pKXtmb3IodD0wfGh1KDQ4KSx0clt0Pj4wXT0wLHRyW3QrMT4+MF09MCx0clt0KzI+PjBdPTAsYXJbKGE9dCszMnwwKT4+Ml09MCxhclsobz10KzM2fDApPj4yXT0wLGFyWyhsPXQrNDB8MCk+PjJdPTAsYz0wfGh1KDY0KSxhclthPj4yXT1jLGE9Yys2NHwwLGFyW2w+PjJdPWEsbD1jKzY0fDA7KChhcltjPj4yXT0wKXwoYz1jKzR8MCkpPCgwfGwpOyk7YXJbbz4+Ml09YSxhclsoYj10Kzh8MCk+PjJdPTAsYXJbYis0Pj4yXT0wLGFyW2IrOD4+Ml09MCxhcltiKzEyPj4yXT0wLGFyW2IrMTY+PjJdPTAsYXJbYisyMD4+Ml09MCxiPXR9ZWxzZSBiPTB8YXJbKHU9dCstNHwwKT4+Ml0sYXJbcz4+Ml09dTt0cltiPj4wXT0wLHRyW2IrMT4+MF09MCx0cltiKzI+PjBdPTAsYXJbKGw9Yis4fDApPj4yXT0wLGFyW2wrND4+Ml09MCxhcltiKzE2Pj4yXT0wLGFyWyhsPWIrMjR8MCk+PjJdPTAsdD0wfGFyWyhyPWIrMzJ8MCk+PjJdLCgwfChvPTB8YXJbKHU9YiszNnwwKT4+Ml0pKSE9KDB8dCkmJihhclt1Pj4yXT1vKyh+KChvKy00LXR8MCk+Pj4yKTw8MikpO2lmKCgwfGFyWyhhPWIrMjh8MCk+PjJdKT49KDB8ZSkpcmV0dXJuIHVyPW4sMHwocz1iKTtpZigwfChjPTB8eWMoZSkpKXJldHVybiAwfChvPTB8YXJbKHQ9YisyMHwwKT4+Ml0pJiYoaGIoMHxjLDB8bywwfGFyW2w+PjJdKSxCYyhvKSksYXJbdD4+Ml09YyxhclthPj4yXT1lLHVyPW4sMHwocz1iKTthcltpPj4yXT1iLHQ9YixvPTB8YXJbcz4+Ml07ZG97aWYoby0oMHxhcltmPj4yXSk+PjI+Pj4wPDE2KXtpZigoMHxvKT09KDB8YXJbQSs0OD4+Ml0pKXtwYShmLGkpO2JyZWFrfWFyW28+PjJdPXQsYXJbcz4+Ml09NCsoMHxhcltzPj4yXSk7YnJlYWt9QmMoMHxhcltiKzIwPj4yXSksMHwodD0wfGFyW3I+PjJdKSYmKCgwfChvPTB8YXJbdT4+Ml0pKSE9KDB8dCkmJihhclt1Pj4yXT1vKyh+KChvKy00LXR8MCk+Pj4yKTw8MikpLHZ1KHQpKSx2dShiKX13aGlsZSgwKTtyZXR1cm4gdXI9biwocz0wKXxzfShBLHIpO0E6ZG97aWYoayl7YT1rKzI4fDA7ZG97aWYoKDB8YXJbYT4+Ml0pPCgwfHIpKXtpZigwfChvPTB8eWMocikpKXswfChsPTB8YXJbKGM9aysyMHwwKT4+Ml0pJiYoaGIoMHxvLDB8bCwwfGFyW2srMjQ+PjJdKSxCYyhsKSksYXJbYz4+Ml09byxhclthPj4yXT1yO2JyZWFrfWlmKGFyW2Q+PjJdPWssbz1rLGE9QSs0MHwwLChsPTB8YXJbKGM9QSs0NHwwKT4+Ml0pLSgwfGFyW2E+PjJdKT4+Mj4+PjA8MTYpe2lmKCgwfGwpPT0oMHxhcltBKzQ4Pj4yXSkpe3BhKGEsZCk7YnJlYWsgQX1hcltsPj4yXT1vLGFyW2M+PjJdPTQrKDB8YXJbYz4+Ml0pO2JyZWFrIEF9QmMoMHxhcltrKzIwPj4yXSksMHwobz0wfGFyW2srMzI+PjJdKSYmKCgwfChjPTB8YXJbKGE9ayszNnwwKT4+Ml0pKSE9KDB8bykmJihhclthPj4yXT1jKyh+KChjKy00LW98MCk+Pj4yKTw8MikpLHZ1KG8pKSx2dShrKTticmVhayBBfW89MHxhcltrKzIwPj4yXX13aGlsZSgwKTtoYigwfG8sMHxlLDB8ciksYXJbKHM9aysyNHwwKT4+Ml09cixhclsodT1rKzh8MCk+PjJdPWksYXJbdSs0Pj4yXT1mLGFyW2srMTY+PjJdPW47ZTpkb3tpZigyPCgwfHIpKWZvcihmPWsrMzJ8MCxuPWsrMzZ8MCx1PWsrNDB8MCxvPTB8YXJbaysyMD4+Ml0saT0wLGw9cjs7KXtzd2l0Y2goKGE9MHx0clsoZT1vKzJ8MCk+PjBdKTw8MjQ+PjI0KXtjYXNlIDA6Y2FzZSAzOjA9PSgwfHRyW28+PjBdKSYmYTw8MjQ+PjI0PT0zJjA9PSgwfHRyWyhiPW8rMXwwKT4+MF0pPyhjPTB8YXJbbj4+Ml0sYT1pKzIrKGMtKDB8YXJbZj4+Ml0pPj4yKXwwLGFyW2Q+PjJdPWEsKDB8Yyk9PSgwfGFyW3U+PjJdKT9nYShmLGQpOihhcltjPj4yXT1hLGFyW24+PjJdPWMrNCksd2IoMHxlLG8rM3wwLC0zLWkrKDB8YXJbcz4+Ml0pfDApLGE9KDB8YXJbcz4+Ml0pLTF8MCxhcltzPj4yXT1hLGM9aSsxfDAsbz1iKTooYz1pLGE9bCk7YnJlYWs7ZGVmYXVsdDpjPWkrMnwwLG89ZSxhPWx9aWYoKGErLTJ8MCk8PSgwfChpPWMrMXwwKSkpYnJlYWsgZTtvPW8rMXwwLGw9YX19d2hpbGUoMCk7cmV0dXJuIG89MHxhclsoZT1BKzE2fDApPj4yXSxkPSgwfGFyW0ErMjA+PjJdKS1vfDAsYz0wfGFyWyhhPUErMjh8MCk+PjJdLGw9MHxhclsoaT1BKzMyfDApPj4yXSwoMHwoMD09KDB8ZCk/MDooZDw8OCktMXwwKSk9PShsK2N8MCk/KEVhKEErMTJ8MCksYz0wfGFyW2E+PjJdLGE9MHxhcltpPj4yXSxvPTB8YXJbZT4+Ml0pOmE9bCxhclsoMHxhcltvKygoZD1hK2N8MCk+Pj4xMDw8Mik+PjJdKSsoKDEwMjMmZCk8PDIpPj4yXT1rLGFyW2k+PjJdPWErMSxhclsoaz1BKzM2fDApPj4yXT0oMHxhcltrPj4yXSkrKDB8YXJbcz4+Ml0pLHVyPXQsKGs9MCl8a31hcltkPj4yXT0wfXdoaWxlKDApO3JldHVybiB1cj10LDB8KGs9Nyl9KChBfD0wKSs1NDh8MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTApfWZ1bmN0aW9uIEZlKEEpe3ZhciBlPTA7cmV0dXJuKDB8YXJbKEF8PTApKzM3NjIwMD4+Ml0pPD0wPyhlPTApfGU6KGU9MHxhcltBKzM3NjE5Nj4+Ml0sKGU9MHxhclsoMHxhclsoMHxhcltBKzM3NjE4ND4+Ml0pKyhlPj4+MTA8PDIpPj4yXSkrKCgxMDIzJmUpPDwyKT4+Ml0pPyhmYShBKzM3NjE0OHwodHJbZSsxMDA+PjBdPTApKSwwfGUpOihlPTApfGUpfWZ1bmN0aW9uIFJlKEEpe3ZhciBlOzB8YXJbKEF8PTApKzM3NjIwMD4+Ml0mJihlPTB8YXJbQSszNzYxOTY+PjJdLGZhKEErMzc2MTQ4fCh0clsxMDArKDB8YXJbKDB8YXJbKDB8YXJbQSszNzYxODQ+PjJdKSsoZT4+PjEwPDwyKT4+Ml0pKygoMTAyMyZlKTw8Mik+PjJdKT4+MF09MCkpKX1mdW5jdGlvbiBOZShBLGUscil7c3dpdGNoKEF8PTAscnw9MCwwfChlfD0wKSl7Y2FzZSAwOnJldHVybiB2b2lkKHRyW0ErNTEyPj4wXT0wIT0oMHxyKSYxKTtjYXNlIDY6cmV0dXJuIHZvaWQodHJbQSs1MTQ+PjBdPTAhPSgwfHIpJjEpO2Nhc2UgNzpyZXR1cm4gdm9pZCh0cltBKzUzMj4+MF09MCE9KDB8cikmMSk7Y2FzZSA4OnJldHVybiB2b2lkKHRyW0ErNTMzPj4wXT0wIT0oMHxyKSYxKTtkZWZhdWx0OnNyKDU1NzM5LDM0NTQ4LDUwMywzNDU1Nyl9fWZ1bmN0aW9uIF9lKEEsZSl7c3dpdGNoKEF8PTAsMHwoZXw9MCkpe2Nhc2UgMDpBPUErNzJ8MDticmVhaztjYXNlIDI6Y2FzZSAxOkE9QSs4MHwwO2JyZWFrO2RlZmF1bHQ6cmV0dXJuKGU9MCl8ZX1yZXR1cm4gMHwoZT0wfGFyW0E+PjJdKX1mdW5jdGlvbiBZZShBLGUpe3N3aXRjaChBfD0wLDB8KGV8PTApKXtjYXNlIDA6QT1BKzc2fDA7YnJlYWs7Y2FzZSAyOmNhc2UgMTpBPUErODR8MDticmVhaztkZWZhdWx0OnJldHVybihlPTApfGV9cmV0dXJuIDB8KGU9MHxhcltBPj4yXSl9ZnVuY3Rpb24gUWUoQSxlKXtzd2l0Y2goQXw9MCwwfChlfD0wKSl7Y2FzZSAwOkE9QSs1NzYwfDA7YnJlYWs7Y2FzZSAyOmNhc2UgMTpBPUErNTc2OHwwO2JyZWFrO2RlZmF1bHQ6cmV0dXJuKGU9MCl8ZX1yZXR1cm4gMHwoZT0wfGFyW0E+PjJdKX1mdW5jdGlvbiBEZShBKXtyZXR1cm4gMHxhclsoQXw9MCkrMjA+PjJdfWZ1bmN0aW9uIEplKEEsZSxyKXtBfD0wLHJ8PTA7dmFyIGksZixuPTA7aWYoMzw9KGV8PTApPj4+MCYmc3IoMzQ1ODIsMzQ1NDgsNjM5LDM0NjA5KSxmPTB8YXJbQSs2MCsoZTw8Mik+PjJdLCFyKXJldHVybiAwfGY7c3dpdGNoKGk9MHxhclsoMD09KDB8ZSk/QSs0MHwwOkErNDR8MCk+PjJdLDB8ZSl7Y2FzZSAwOkE9QSs1NzYwfDAsbj03O2JyZWFrO2Nhc2UgMjpjYXNlIDE6QT1BKzU3Njh8MCxuPTc7YnJlYWs7ZGVmYXVsdDpBPTB9cmV0dXJuIDc9PSgwfG4pJiYoQT0oNysoMHxhcltBPj4yXSl8MCkvOHwwKSxuPTB8YnIoQSxpKSxhcltyPj4yXT1uLDB8Zn1mdW5jdGlvbiBNZShBKXt2YXIgZSxyPTAsaT0wLGY9MCxuPTAsdD0wLG89MDtpZihhclsoQXw9MCk+PjJdPTc2OTYsKDB8KHI9MHxhclsobj1BKzM3NzIxNnwwKT4+Ml0pKSE9KDB8KGk9MHxhclsodD1BKzM3NzIyMHwwKT4+Ml0pKSlmb3IoOyhmPTB8YXJbaSstND4+Ml0pJiYoVGUoZiksdnUoZiksaT0wfGFyW3Q+PjJdLHI9MHxhcltuPj4yXSksaT1pKy00fDAsKDB8cikhPSgwfChhclt0Pj4yXT1pKSk7KTswfHImJnZ1KHIpLGZ1bmN0aW9uKEEpe3ZhciBlLHIsaSxmLG4sdCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTA7aWYobj04KyhBfD0wKXwwLGE9MHxhclsodD1BKzEyfDApPj4yXSxvPTB8YXJbbj4+Ml0sKDB8YSkhPSgwfG8pKWZvcihsPTA7KGM9MHxhcltvKyhsPDwyKT4+Ml0pJiYoYWEoYyksdnUoYyksbz0wfGFyW24+PjJdLGE9MHxhclt0Pj4yXSksKGw9bCsxfDApPj4+MDxhLW8+PjI+Pj4wOyk7YT0wfGFyWyhpPUErMzZ8MCk+PjJdLG89MHxhclsocj1BKzQ4fDApPj4yXSxjPWErKG8+Pj4xMDw8Mil8MCxiPTB8YXJbKGY9QSs0MHwwKT4+Ml0sbz0oMHwobD1iKSk9PSgwfChlPWEpKT8oYj1BKzUyfCh1PTApLDApOih1PSgwfGFyWyhiPUErNTJ8MCk+PjJdKStvfDAsdT0oMHxhclthKyh1Pj4+MTA8PDIpPj4yXSkrKCgxMDIzJnUpPDwyKXwwLCgwfGFyW2M+PjJdKSsoKDEwMjMmbyk8PDIpfDApO0E6Zm9yKDs7KXtkb3tpZigoMHxvKT09KDB8dSkpYnJlYWsgQTtvPW8rNHwwfXdoaWxlKDQwOTYhPShvLSgwfGFyW2M+PjJdKXwwKSk7bz0wfGFyWyhjPW89Yys0fDApPj4yXX1pZihhcltiPj4yXT0wLDI8KG89bC1lPj4yKT4+PjApZm9yKDt2dSgwfGFyW2E+PjJdKSxhPTQrKDB8YXJbaT4+Ml0pfDAsYXJbaT4+Ml09YSxvPSgwfGFyW2Y+PjJdKS1hPj4yLDI8bz4+PjA7KTtzd2l0Y2goMHxvKXtjYXNlIDE6bz01MTIscz0xNDticmVhaztjYXNlIDI6bz0xMDI0LHM9MTR9MTQ9PSgwfHMpJiYoYXJbcj4+Ml09byk7aWYobz0wfGFyW2k+PjJdLGE9MHxhcltmPj4yXSwoMHxvKSE9KDB8YSkpe2Zvcig7dnUoMHxhcltvPj4yXSksKDB8KG89bys0fDApKSE9KDB8YSk7KTtvPTB8YXJbaT4+Ml0sKDB8KGE9MHxhcltmPj4yXSkpIT0oMHxvKSYmKGFyW2Y+PjJdPWErKH4oKGErLTQtb3wwKT4+PjIpPDwyKSl9MHwobz0wfGFyW0ErMzI+PjJdKSYmdnUobyk7MHwoYz0wfGFyW0ErMjA+PjJdKSYmKCgwfChhPTB8YXJbKG89QSsyNHwwKT4+Ml0pKSE9KDB8YykmJihhcltvPj4yXT1hKyh+KChhKy00LWN8MCk+Pj4yKTw8MikpLHZ1KGMpKTtpZighKG89MHxhcltuPj4yXSkpcmV0dXJuOygwfChhPTB8YXJbdD4+Ml0pKSE9KDB8bykmJihhclt0Pj4yXT1hKyh+KChhKy00LW98MCk+Pj4yKTw8MikpO3Z1KG8pfShBKzM3NjE0OHwwKSxmdW5jdGlvbihBKXt2YXIgZSxyLGksZixuLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wO289MHxhclsoZj04KyhBfD0wKXwwKT4+Ml0sdD0wfGFyWyhpPUErMjB8MCk+PjJdLGE9bysodD4+PjEwPDwyKXwwLGw9MHxhclsobj1BKzEyfDApPj4yXSx0PSgwfChlPWwpKT09KDB8KHI9bykpPyhsPUErMjR8KGM9MCksMCk6KGM9KDB8YXJbKGw9QSsyNHwwKT4+Ml0pK3R8MCxjPSgwfGFyW28rKGM+Pj4xMDw8Mik+PjJdKSsoKDEwMjMmYyk8PDIpfDAsKDB8YXJbYT4+Ml0pKygoMTAyMyZ0KTw8Mil8MCk7QTpmb3IoOzspe2Rve2lmKCgwfHQpPT0oMHxjKSlicmVhayBBO3Q9dCs0fDB9d2hpbGUoNDA5NiE9KHQtKDB8YXJbYT4+Ml0pfDApKTt0PTB8YXJbKGE9dD1hKzR8MCk+PjJdfWlmKGFyW2w+PjJdPTAsMjwodD1lLXI+PjIpPj4+MClmb3IoO3Z1KDB8YXJbbz4+Ml0pLG89NCsoMHxhcltmPj4yXSl8MCxhcltmPj4yXT1vLHQ9KDB8YXJbbj4+Ml0pLW8+PjIsMjx0Pj4+MDspO3N3aXRjaCgwfHQpe2Nhc2UgMTp0PTUxMix1PTEzO2JyZWFrO2Nhc2UgMjp0PTEwMjQsdT0xM30xMz09KDB8dSkmJihhcltpPj4yXT10KTtpZih0PTB8YXJbZj4+Ml0sbz0wfGFyW24+PjJdLCgwfHQpIT0oMHxvKSl7Zm9yKDt2dSgwfGFyW3Q+PjJdKSwoMHwodD10KzR8MCkpIT0oMHxvKTspO3Q9MHxhcltmPj4yXSwoMHwobz0wfGFyW24+PjJdKSkhPSgwfHQpJiYoYXJbbj4+Ml09bysofigobystNC10fDApPj4+Mik8PDIpKX1pZighKHQ9MHxhcltBKzQ+PjJdKSlyZXR1cm47dnUodCl9KEErMzc1Mzk2fDApLEdhKEErMzcwOTg0fDApLEdhKEErMzY2NTg0fDApLEdhKEErMzYyMTg0fDApLEdhKEErMzU3Nzg0fDApLEdhKEErMzUzMzg0fDApLEdhKEErMzQ4OTg0fDApLEdhKEErMzQ0NTg0fDApLEdhKEErMzQwMTg0fDApLEdhKEErMzM1Nzg0fDApLEdhKEErMzMxMzg0fDApLEdhKEErMzI2OTg0fDApLEdhKEErMzIyNTg0fDApLEdhKEErMzE4MTg0fDApLEdhKEErMzEzNzg0fDApLEdhKEErMzA5Mzg0fDApLEdhKEErMzA0OTg0fDApLEdhKEErMzAwNTg0fDApLEdhKEErMjk2MTg0fDApLEdhKEErMjkxNzg0fDApLEdhKEErMjg3Mzg0fDApLEdhKEErMjgyOTg0fDApLEdhKEErMjc4NTg0fDApLEdhKEErMjc0MTg0fDApLEdhKEErMjY5Nzg0fDApLEdhKEErMjY1Mzg0fDApLEdhKEErMjYwOTg0fDApLEdhKEErMjU2NTg0fDApLEdhKEErMjUyMTg0fDApLEdhKEErMjQ3Nzg0fDApLEdhKEErMjQzMzg0fDApLEdhKEErMjM4OTg0fDApLEdhKEErMjM0NTg0fDApLEdhKEErMjMwMTg0fDApLEdhKEErMjI1Nzg0fDApLEdhKEErMjIxMzg0fDApLEdhKEErMjE2OTg0fDApLEdhKEErMjEyNTg0fDApLEdhKEErMjA4MTg0fDApLEdhKEErMjAzNzg0fDApLEdhKEErMTk5Mzg0fDApLEdhKEErMTk0OTg0fDApLEdhKEErMTkwNTg0fDApLEdhKEErMTg2MTg0fDApLEdhKEErMTgxNzg0fDApLEdhKEErMTc3Mzg0fDApLEdhKEErMTcyOTg0fDApLEdhKEErMTY4NTg0fDApLEdhKEErMTY0MTg0fDApLEdhKEErMTU5Nzg0fDApLEdhKEErMTU1Mzg0fDApLEdhKEErMTUwOTg0fDApLEdhKEErMTQ2NTg0fDApLEdhKEErMTQyMTg0fDApLEdhKEErMTM3Nzg0fDApLEdhKEErMTMzMzg0fDApLEdhKEErMTI4OTg0fDApLEdhKEErMTI0NTg0fDApLEdhKEErMTIwMTg0fDApLEdhKEErMTE1Nzg0fDApLEdhKEErMTExMzg0fDApLEdhKEErMTA2OTg0fDApLEdhKEErMTAyNTg0fDApLEdhKEErOTgxODR8MCksR2EoQSs5Mzc4NHwwKSxBYyhBKzg4NjE2fDApLEFjKEErODM0NDh8MCksQWMoQSs3ODI4MHwwKSxBYyhBKzczMTEyfDApLEFjKEErNjc5NDR8MCksQWMoQSs2Mjc3NnwwKSxBYyhBKzU3NjA4fDApLEFjKEErNTI0NDB8MCksQWMoQSs0NzI3MnwwKSxBYyhBKzQyMTA0fDApLEFjKEErMzY5MzZ8MCksQWMoQSszMTc2OHwwKSxBYyhBKzI2NjAwfDApLEFjKEErMjE0MzJ8MCksQWMoQSsxNjI2NHwwKSxBYyhBKzExMDk2fDApLGU9QSs2MDB8MCxvPUErMTEwOTZ8MDtkb3tpZigwfChyPTB8YXJbbystMTY+PjJdKSYmKCgwfGFyWyhpPW8rLTEyfDApPj4yXSkhPSgwfHIpJiYoYXJbaT4+Ml09ciksdnUocikpLDB8KHI9MHxhcltvKy0yOD4+Ml0pJiYoKDB8KGY9MHxhclsoaT1vKy0yNHwwKT4+Ml0pKSE9KDB8cikmJihhcltpPj4yXT1mKyh+KChmKy0yLXJ8MCk+Pj4xKTw8MSkpLHZ1KHIpKSwwfChyPTB8YXJbKG49bystNjR8MCk+PjJdKSl7aWYoKDB8KGk9MHxhclsodD1vKy02MHwwKT4+Ml0pKSE9KDB8cikpe2Zvcig7aT1pKy0xMnwwLGFyW3Q+PjJdPWksKGY9MHxhcltpPj4yXSkmJih2dShmKSxpPTB8YXJbdD4+Ml0pLCgwfGkpIT0oMHxyKTspO3I9MHxhcltuPj4yXX12dShyKX1vPW8rLTY1NnwwfXdoaWxlKCgwfG8pIT0oMHxlKSk7IWZ1bmN0aW9uKEEpe3ZhciBlLHIsaSxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTAsZD0wO3VyPShpPXVyKSsxNnwwLGU9aSxmPTB8YXJbKHI9MzIrKEF8PTApfDApPj4yXTtBOmRve2lmKDB8Zil7Yz1BKzE2fDAsbD1BKzI4fDAsdT1BKzM2fDAsYj1BKzQwfDAscz1BKzQ0fDAsYT1BKzQ4fDA7ZG97aWYobj0wfGFyW2M+PjJdLHQ9MHxhcltsPj4yXSxvPTB8YXJbKDB8YXJbbisodD4+PjEwPDwyKT4+Ml0pKygoMTAyMyZ0KTw8Mik+PjJdLGFyW3I+PjJdPWYrLTEsdD10KzF8MCwyMDQ3PChhcltsPj4yXT10KT4+PjAmJih2dSgwfGFyW24+PjJdKSxhcltjPj4yXT00KygwfGFyW2M+PjJdKSxhcltsPj4yXT0oMHxhcltsPj4yXSktMTAyNCksYXJbdT4+Ml09KDB8YXJbdT4+Ml0pLSgwfGFyW28rMjQ+PjJdKSwhbylicmVhayBBO2FyW2U+PjJdPW8sZj1vLG49MHxhcltzPj4yXTtkb3tpZihuLSgwfGFyW2I+PjJdKT4+Mj4+PjA8MTYpe2lmKCgwfG4pPT0oMHxhclthPj4yXSkpe3BhKGIsZSk7YnJlYWt9YXJbbj4+Ml09ZixhcltzPj4yXT00KygwfGFyW3M+PjJdKTticmVha31CYygwfGFyW28rMjA+PjJdKSwwfChmPTB8YXJbbyszMj4+Ml0pJiYoKDB8KHQ9MHxhclsobj1vKzM2fDApPj4yXSkpIT0oMHxmKSYmKGFyW24+PjJdPXQrKH4oKHQrLTQtZnwwKT4+PjIpPDwyKSksdnUoZikpLHZ1KG8pfXdoaWxlKDApO2Y9MHxhcltyPj4yXX13aGlsZSgwIT0oMHxmKSl9fXdoaWxlKDApO2lmKG89MHxhcltBKzg+PjJdKXthcltlPj4yXT1vLGY9byxjPUErNDB8MCxuPTB8YXJbKGE9QSs0NHwwKT4+Ml07ZG97aWYobi0oMHxhcltjPj4yXSk+PjI+Pj4wPDE2KXtpZigoMHxuKT09KDB8YXJbQSs0OD4+Ml0pKXtwYShjLGUpO2JyZWFrfWFyW24+PjJdPWYsYXJbYT4+Ml09NCsoMHxhclthPj4yXSk7YnJlYWt9QmMoMHxhcltvKzIwPj4yXSksMHwoZj0wfGFyW28rMzI+PjJdKSYmKCgwfCh0PTB8YXJbKG49byszNnwwKT4+Ml0pKSE9KDB8ZikmJihhcltuPj4yXT10Kyh+KCh0Ky00LWZ8MCk+Pj4yKTw8MikpLHZ1KGYpKSx2dShvKX13aGlsZSgwKTt1PWI9YX1lbHNlIGI9dT1BKzQ0fDAsYz1BKzQwfDA7aWYodD0wfGFyW3U+PjJdLG89MHxhcltjPj4yXSwoMHwoZj10KSkhPSgwfChuPW8pKSlmb3IobD0wOyhhPTB8YXJbbisobDw8Mik+PjJdKSYmKEJjKDB8YXJbYSsyMD4+Ml0pLDB8KGY9MHxhclthKzMyPj4yXSkmJigoMHwodD0wfGFyWyhuPWErMzZ8MCk+PjJdKSkhPSgwfGYpJiYoYXJbbj4+Ml09dCsofigodCstNC1mfDApPj4+Mik8PDIpKSx2dShmKSksdnUoYSksZj0wfGFyW3U+PjJdLG89MHxhcltjPj4yXSx0PWYpLChsPWwrMXwwKT4+PjA8dC0obj1vKT4+Mj4+PjA7KTswfG4mJigoMHxmKSE9KDB8bikmJihhcltiPj4yXT1mKyh+KChmKy00LW58MCk+Pj4yKTw8MikpLHZ1KG4pKTtmPTB8YXJbKGI9QSsxNnwwKT4+Ml0sbj0wfGFyWyh1PUErMjh8MCk+PjJdLG89Zisobj4+PjEwPDwyKXwwLHQ9MHxhclsocz1BKzIwfDApPj4yXSxuPSgwfChhPXQpKT09KDB8KGM9ZikpP2w9MDoobD0oMHxhcltyPj4yXSkrbnwwLGw9KDB8YXJbZisobD4+PjEwPDwyKT4+Ml0pKygoMTAyMyZsKTw8Mil8MCwoMHxhcltvPj4yXSkrKCgxMDIzJm4pPDwyKXwwKTtBOmZvcig7Oyl7ZG97aWYoKDB8bik9PSgwfGwpKWJyZWFrIEE7bj1uKzR8MH13aGlsZSg0MDk2IT0obi0oMHxhcltvPj4yXSl8MCkpO249MHxhclsobz1uPW8rNHwwKT4+Ml19aWYoYXJbcj4+Ml09MCwyPChuPWEtYz4+Mik+Pj4wKWZvcig7dnUoMHxhcltmPj4yXSksZj00KygwfGFyW2I+PjJdKXwwLGFyW2I+PjJdPWYsdD0wfGFyW3M+PjJdLG49dC1mPj4yLDI8bj4+PjA7KTtzd2l0Y2goMHxuKXtjYXNlIDE6bj01MTIsZD00NTticmVhaztjYXNlIDI6bj0xMDI0LGQ9NDV9NDU9PSgwfGQpJiYoYXJbdT4+Ml09bik7aWYoKDB8ZikhPSgwfHQpKXtmb3IoO3Z1KDB8YXJbZj4+Ml0pLCgwfChmPWYrNHwwKSkhPSgwfHQpOyk7Zj0wfGFyW2I+PjJdLCgwfChuPTB8YXJbcz4+Ml0pKSE9KDB8ZikmJihhcltzPj4yXT1uKyh+KChuKy00LWZ8MCk+Pj4yKTw8MikpfShmPTB8YXJbQSsxMj4+Ml0pJiZ2dShmKSx1cj1pfShBKzU0OHwwKX1mdW5jdGlvbiBUZShBKXt2YXIgZSxyLGksZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wO2lmKGk9KEF8PTApKzEwNjMyfDAsKDB8KG49MHxhclsobD1BKzEwNjM2fDApPj4yXSkpIT0oMHwoZj0wfGFyW2k+PjJdKSkpe2E9MDtkb3tpZihvPTB8YXJbZisoYTw8Mik+PjJdKXtpZihCYSg1NDgrKDB8YXJbbysxNDQ+PjJdKXwwLDB8YXJbbz4+Ml0pLDB8KG49MHxhcltvKzEzNj4+Ml0pKXtpZigwfChmPTB8YXJbKHQ9bistMTZ8MCkrMTI+PjJdKSlmb3IoZj1uKygxODYyNCpmfDApfDA7a3QoZistNDR8MCksKDB8KGY9ZistMTg2MjR8MCkpIT0oMHxuKTspO211KHQpfUpuKG8rNDR8MCksdnUobyksZj0wfGFyW2k+PjJdLG49MHxhcltsPj4yXX1hPWErMXwwfXdoaWxlKGE+Pj4wPG4tZj4+Mj4+PjApfWlmKGU9QSsxMDY2NHwwLCgwfChmPTB8YXJbKHI9QSsxMDY2OHwwKT4+Ml0pKSE9KDB8KG49dD0wfGFyW2U+PjJdKSkpZm9yKGM9MCxhPW4sbz10Oyh0PTB8YXJbYSsoYzw8Mik+PjJdKT8oaXNbNTExJmFyWzQrKDB8YXJbdD4+Ml0pPj4yXV0odCksbj10PTB8YXJbZT4+Ml0sZj0wfGFyW3I+PjJdKTp0PW8sIShmLXQ+PjI+Pj4wPD0oYz1jKzF8MCk+Pj4wKTspbz1hPXQ7aWYoZj0wfGFyWyhvPUErMTA2NzZ8MCk+PjJdKXtpZigoMHwobj0wfGFyWyh0PUErMTA2ODB8MCk+PjJdKSkhPSgwfGYpKXtmb3IoO2M9bistOHwwLGt0KGFyW3Q+PjJdPWMpLCgwfChuPTB8YXJbdD4+Ml0pKSE9KDB8Zik7KTtmPTB8YXJbbz4+Ml19dnUoZiksZj0wfGFyW2U+PjJdfWVsc2UgZj1uOzB8ZiYmKCgwfChuPTB8YXJbcj4+Ml0pKSE9KDB8ZikmJihhcltyPj4yXT1uKyh+KChuKy00LWZ8MCk+Pj4yKTw8MikpLHZ1KGYpKSwwfChmPTB8YXJbQSsxMDY0ND4+Ml0pJiYoKDB8KHQ9MHxhclsobj1BKzEwNjQ4fDApPj4yXSkpIT0oMHxmKSYmKGFyW24+PjJdPXQrKDgwKn4oKCh0Ky04MC1mfDApPj4+MCkvODB8MCl8MCkpLHZ1KGYpKSwoZj0wfGFyW2k+PjJdKSYmKCgwfChuPTB8YXJbbD4+Ml0pKSE9KDB8ZikmJihhcltsPj4yXT1uKyh+KChuKy00LWZ8MCk+Pj4yKTw8MikpLHZ1KGYpKSxhYShsPUErOHwwKX1mdW5jdGlvbiBVZShBLGUpe2V8PTA7dmFyIHIsaSxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MDtpZigwfGFyWyhpPShBfD0wKSsxMzZ8MCk+PjJdJiZzcigzNDY3OCwzNDcwMCwxNjksMzQ3MTApLG49MHx3dSgyMzA2MTQ8ZT4+PjB8NDI5NDk2NzI3OTwobj0xODYyNCplfDApPj4+MD8tMTpuKzE2fDApLGFyW24rMTI+PjJdPWUsbj1uKzE2fDAsIWUpcmV0dXJuIGFyW2k+PjJdPW4sdm9pZChhclsobj1BKzE0MHwwKT4+Ml09ZSk7Zm9yKHI9bisoMTg2MjQqZXwwKXwwLGY9bjtzdChmKzE4NTgwfDApLG89ZisxODU5MnwwLHQ9MD09KDB8KHQ9MTUmKGM9Zis0OHwwKSkpP2M6YysoMTYtdCl8MCxhclsoYT1mKzE4NTA4fDApPj4yXT0wLGFyW2ErND4+Ml09MCxhclthKzg+PjJdPTAsYXJbYSsxMj4+Ml09MCxhclthKzE2Pj4yXT0wLGFyW28+PjJdPTAsYXJbbys0Pj4yXT0wLGFyW28rOD4+Ml09MCxhcltvKzEyPj4yXT0wLHZiKChhcltvKzE2Pj4yXT0wKXwoYXJbZisyMTEyPj4yXT10KSwwLDIwNDgpLCgwfChmPWYrMTg2MjR8MCkpIT0oMHxyKTspO2FyW2k+PjJdPW4sYXJbKGM9QSsxNDB8MCk+PjJdPWV9ZnVuY3Rpb24gU2UoQSxlKXtBfD0wO3ZhciByLGk9MCxmPTAsbj0wLHQ9MDt2YigoZXw9MCkrNDh8MCwwLDIwNjQpLGFyW2UrMTg1MzI+PjJdPS0xLGFyW2UrMTg1MzY+PjJdPS0xLHI9MHxhcltlKzE4NTk2Pj4yXSwoMHwoQT0wfGFyWzE2KygwfGFyW2UrMTg2MDA+PjJdKT4+Ml0pKTw9MHx8KEE9KDErKCgwfChuPTB8YXJbKDB8YXJbMTAyODQrcj4+Ml0pKygoMHxhclsoMHxhclsxMDI3MityPj4yXSkrKEE8PDIpPj4yXSktMTw8Mik+PjJdKSklKDB8KHQ9MHxhcls1ODIwK3I+PjJdKSl8MCk8PChmPTB8YXJbNTgwNCtyPj4yXSkpLTF8MCxmPSgxKygoMHxuKS8oMHx0KXwwKTw8ZiktMXwwLHQ9KDB8YXJbMTI0OCtyPj4yXSktMXwwLG49KDB8YXJbMTI1MityPj4yXSktMXwwLEE9KCgwfHQpPCgwfEEpP3Q6QSk+PihpPTB8YXJbMTAzNjgrcj4+Ml0pLGk9KCgwfG4pPCgwfGYpP246Zik+PmksKDB8QSk8PS0xJiZzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpLCgwfChmPTB8YXJbMTAzNzIrcj4+Ml0pKTw9KDB8QSkmJnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSksKDB8aSk8PS0xJiZzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpLCgwfGkpPj0oMHxhclsxMDM3NityPj4yXSkmJnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSksdD0oMHxhclsxMDM2MCtyPj4yXSkrKDMqKCgwfGJyKGYsaSkpK0F8MCl8MCkrMnwwLGFyW2UrMTg1Mjg+PjJdPXRyW3Q+PjBdKX1mdW5jdGlvbiBPZShBLGUpe2V8PTA7dmFyIHIsaSxmLG4sdCxvPTAsYT0wLGM9MCxsPTA7Zj0oQXw9MCkrNHwwLG49MHxhcltBPj4yXSwxMDczNzQxODIzPChvPTErKGk9KHQ9KDB8YXJbZj4+Ml0pLW58MCk+PjIpfDApPj4+MCYmemwoKSxhPShjPSgwfGFyWyhsPUErOHwwKT4+Ml0pLW58MCk+PjEsYT1jPj4yPj4+MDw1MzY4NzA5MTE/YT4+PjA8bz4+PjA/bzphOjEwNzM3NDE4MjM7ZG97aWYoYSl7aWYoISgxMDczNzQxODIzPGE+Pj4wKSl7Yz0wfGh1KGE8PDIpO2JyZWFrfVp1KGw9MHxYKDgpLDQ0NTE5KSxhcltsPj4yXT0xNzY2MCxJKDB8bCw0MDE2LDQyOCl9ZWxzZSBjPTB9d2hpbGUoMCk7YXJbKHI9YysoaTw8Mil8MCk+PjJdPWFyW2U+PjJdLG89cisoMC1pPDwyKXwwLDA8KDB8dCkmJmhiKDB8bywwfG4sMHx0KSxhcltBPj4yXT1vLGFyW2Y+PjJdPTQrcixhcltsPj4yXT1jKyhhPDwyKSxuJiZ2dShuKX1mdW5jdGlvbiB6ZShBLGUpe0F8PTAsZXw9MDt2YXIgcixpLGYsbj0wLHQ9MCxvPTA7aWYodXI9KGY9dXIpKzY1NnwwLGFyWyhuPShyPWYpKzU5MnwwKT4+Ml09MCxhclsoaT1yKzU5NnwwKT4+Ml09MCxhcltyKzYwMD4+Ml09MCxhclsodD1yKzYyOHwwKT4+Ml09MCxhclt0KzQ+PjJdPTAsYXJbdCs4Pj4yXT0wLGFyW3QrMTI+PjJdPTAsYXJbdCsxNj4+Ml09MCxvPShlPShhclt0KzIwPj4yXT0wKXxmdW5jdGlvbihBLGUscil7QXw9MCxlfD0wO3ZhciBpPTAsZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wO2lmKGw9MHxBdChyfD0wLDQpLDE1PCgwfChhcltBPj4yXT1sKSkpcmV0dXJuIDB8KHI9OCk7aWYoZXQociwyKSxsPTB8QXQociw2KSxhcltBKzQ+PjJdPWwrMSw2MjwoMHxsKSlyZXR1cm4gMHwocj04KTtpZihsPTB8QXQociwzKSxhclsodD1BKzh8MCk+PjJdPWwrMSw2PCgwfGwpKXJldHVybiAwfChyPTgpO2w9MHxBdChyLDEpLGFyW0ErMTI+PjJdPWwsZXQociwxNiksTG4oQSsxNnwwLHIsMHxhclt0Pj4yXSksbD0wfEF0KHIsMSksYXJbKG89QSs0ODR8MCk+PjJdPWwsaT0wfGFyW3Q+PjJdLGw/MDwoMHxpKSYmKGE9MCxmPTcpOihhPWkrLTF8MCxmPTcpO2Rve2lmKDc9PSgwfGYpKXtmb3IoaT1hOzspe2lmKG49MHxpdChyKSxhclsobD1BKzQ4OCsoMTIqaXwwKXwwKT4+Ml09bixuPTB8aXQociksYXJbKGY9QSs0ODgrKDEyKml8MCkrNHwwKT4+Ml09bixuPTB8aXQociksYXJbQSs0ODgrKDEyKml8MCkrOD4+Ml09biwtOTk5OTk9PSgwfGFyW2w+PjJdKSl7aT04LGY9NDg7YnJlYWt9aWYoaT1pKzF8MCwtOTk5OTk9PSgwfG4pfC05OTk5OT09KDB8YXJbZj4+Ml0pKXtpPTgsZj00ODticmVha31pZigoMHxpKT49KDB8YXJbdD4+Ml0pKXtmPTExO2JyZWFrfX1pZigxMT09KDB8Zikpe2lmKDB8YXJbbz4+Ml0pYnJlYWs7aWYoODw9KDB8YSkmJnNyKDQ0NTg3LDQ0NTEyLDE0NCw0NDYyNyksKDB8YSk8PTApYnJlYWs7Zm9yKGY9QSs0ODgrKDEyKmF8MCl8MCxuPUErNDg4KygxMiphfDApKzR8MCx0PUErNDg4KygxMiphfDApKzh8MCxpPTA7YXJbQSs0ODgrKDEyKml8MCk+PjJdPWFyW2Y+PjJdLGFyW0ErNDg4KygxMippfDApKzQ+PjJdPWFyW24+PjJdLGFyW0ErNDg4KygxMippfDApKzg+PjJdPWFyW3Q+PjJdLCgwfChpPWkrMXwwKSkhPSgwfGEpOyk7fWVsc2UgaWYoNDg9PSgwfGYpKXJldHVybiAwfGl9fXdoaWxlKDApO2lmKGE9MjU1JigwfEF0KHIsNikpLHRyWyhjPUErNTg0fDApPj4wXT1hLGE9MHxpdChyKSwtOTk5OTk9PSgwfChhclsobD1BKzU4OHwwKT4+Ml09YSkpfDEwMjM8KHQ9YSsxfDApPj4+MClyZXR1cm4gZXIoZSw4LDApLDB8KHI9OCk7aWYoYXJbbD4+Ml09dCxhPUErNTkyfDAsaT0wfGFyWyhvPUErNTk2fDApPj4yXSxuPTB8YXJbYT4+Ml0sdD4+PjA8PShmPShpLW58MCkvMTJ8MCk+Pj4wKXtpZih0Pj4+MDxmPj4+MCYmKDB8aSkhPSgwfCh1PW4rKDEyKnR8MCl8MCkpKWZvcig7aT1pKy0xMnwwLGFyW28+PjJdPWksKGY9MHxhcltpPj4yXSkmJih2dShmKSxpPTB8YXJbbz4+Ml0pLCgwfGkpIT0oMHx1KTspO31lbHNlIWZ1bmN0aW9uKEEsZSl7ZXw9MDt2YXIgcixpLGY9MCxuPTAsdD0wLG89MCxhPTAsYz0wLGw9MCx1PTA7aWYodD0wfGFyWyhpPTgrKEF8PTApfDApPj4yXSxuPTB8YXJbKHU9QSs0fDApPj4yXSwoKHQtKGY9bil8MCkvMTJ8MCk+Pj4wPj1lPj4+MClyZXR1cm4gdmIoMHxuLDAsMTIqZXwwKSxhclt1Pj4yXT1mKygxMiplfDApO2w9MHxhcltBPj4yXSwzNTc5MTM5NDE8KG49KGE9KG4tKHI9bCl8MCkvMTJ8MCkrZXwwKT4+PjAmJnpsKCk7bz0oYz0odC1sfDApLzEyfDApPDwxLG89Yz4+PjA8MTc4OTU2OTcwP28+Pj4wPG4+Pj4wP246bzozNTc5MTM5NDE7ZG97aWYobyl7aWYoISgzNTc5MTM5NDE8bz4+PjApKXtjPTB8aHUoMTIqb3wwKTticmVha31adSh1PTB8WCg4KSw0NDUxOSksYXJbdT4+Ml09MTc2NjAsSSgwfHUsNDAxNiw0MjgpfWVsc2UgYz0wfXdoaWxlKDApO2lmKG49YysoMTIqYXwwKXwwLGM9YysoMTIqb3wwKXwwLHZiKDB8KHQ9biksMCwxMiplfDApLGE9bisoMTIqZXwwKXwwLCgwfGYpPT0oMHxyKSlvPWw7ZWxzZXtmb3IoO2Y9KGw9ZikrLTEyfDAsYXJbbistMTI+PjJdPWFyW2Y+PjJdLGU9bCstOHwwLGFyW24rLTg+PjJdPWFyW2U+PjJdLGw9bCstNHwwLGFyW24rLTQ+PjJdPWFyW2w+PjJdLGFyW2Y+PjJdPTAsYXJbZT4+Ml09MCxhcltsPj4yXT0wLHQ9bj10Ky0xMnwwLCgwfGYpIT0oMHxyKTspO289MHxhcltBPj4yXSxmPTB8YXJbdT4+Ml19aWYoYXJbQT4+Ml09dCxhclt1Pj4yXT1hLGFyW2k+PjJdPWMsKDB8ZikhPSgwfCh0PW8pKSlmb3IoOzB8KG49MHxhclsoZj1mKy0xMnwwKT4+Ml0pJiZ2dShuKSwoMHxmKSE9KDB8dCk7KTtpZighbylyZXR1cm47dnUobyl9KGEsdC1mfDApO2lmKDE8KDB8YXJbbD4+Ml0pKWZvcihmPTEsbj0wfGFyW2E+PjJdLGk9MHx0cltjPj4wXTs7KXtmb3IoS24obisoMTIqZnwwKXwwLDErKDI1NSZpKXwwLDApLG49MDtvPTAhPSgwfEF0KHIsMSkpLHQ9MHxhclthPj4yXSxpPSgwfGFyW3QrKDEyKmZ8MCk+PjJdKSsobj4+PjU8PDIpfDAsdT0xPDwoMzEmbiksZT0wfGFyW2k+PjJdLGFyW2k+PjJdPW8/ZXx1OmUmfnUsaT0wfHRyW2M+PjBdLCgwfG4pPCgyNTUmaXwwKTspbj1uKzF8MDtpZighKCgwfChmPWYrMXwwKSk8KDB8YXJbbD4+Ml0pKSlicmVhaztuPXR9aWYodT0yNTUmKDB8QXQociwxKSksKHRyW0ErNjA0Pj4wXT11KTw8MjQ+PjI0JiYodT0wfEF0KHIsMzIpLGFyW0ErNjA4Pj4yXT11LHU9MHxBdChyLDMyKSxhcltBKzYxMj4+Ml09dSx1PTI1NSYoMHxBdChyLDEpKSwodHJbQSs2MTY+PjBdPXUpPDwyND4+MjQpJiYoaT0xKygwfGl0KHIpKXwwLGFyW0ErNjIwPj4yXT1pLGk9MHxpdChyKSwxMDIzPCgwfChhclsoZT1BKzYyNHwwKT4+Ml09aSkpJiZzcig1NTczOSw0NDUxMiwxODksNDQ2MjcpLGM9QSs2Mjh8MCxvPTB8YXJbKGY9QSs2MzJ8MCk+PjJdLHQ9MHxhcltjPj4yXSxpPj4+MDw9KG49by10Pj4xKT4+PjA/aT4+PjA8bj4+PjAmJigwfG8pIT0oMHwoYj10KyhpPDwxKXwwKSkmJihhcltmPj4yXT1vKyh+KChvKy0yLWJ8MCk+Pj4xKTw8MSkpOihmdW5jdGlvbihBLGUpe2V8PTA7dmFyIHIsaSxmLG4sdCxvPTAsYT0wLGM9MCxsPTA7aWYoYT0wfGFyWyh0PTgrKEF8PTApfDApPj4yXSxvPTB8YXJbKGw9QSs0fDApPj4yXSxlPj4+MDw9YS1vPj4xPj4+MClyZXR1cm4gdmIoMHxvLDAsZTw8MXwwKSxhcltsPj4yXT1vKyhlPDwxKTtuPTB8YXJbQT4+Ml0sKDB8KG89KGk9KGY9by1ufDApPj4xKStlfDApKTwwJiZ6bCgpO2E9KGE9YS1ufDApPj4xPj4+MDwxMDczNzQxODIzP2E+Pj4wPG8+Pj4wP286YToyMTQ3NDgzNjQ3O2Rve2lmKGEpe2lmKCEoKDB8YSk8MCkpe2M9MHxodShhPDwxKTticmVha31adShsPTB8WCg4KSw0NDUxOSksYXJbbD4+Ml09MTc2NjAsSSgwfGwsNDAxNiw0MjgpfWVsc2UgYz0wfXdoaWxlKDApO3ZiKDB8KHI9YysoaTw8MSl8MCksMCxlPDwxfDApLG89cisoMC1pPDwxKXwwLDA8KDB8ZikmJmhiKDB8bywwfG4sMHxmKTtpZihhcltBPj4yXT1vLGFyW2w+PjJdPXIrKGU8PDEpLGFyW3Q+PjJdPWMrKGE8PDEpLCFuKXJldHVybjt2dShuKX0oYyxpLW58MCksaT0wfGFyW2U+PjJdKSxmPUErNjQwfDAsYT0wfGFyWyhuPUErNjQ0fDApPj4yXSxvPTB8YXJbZj4+Ml0saT4+PjA8PSh0PWEtb3wwKT4+PjA/aT4+PjA8dD4+PjAmJigwfGEpIT0oMHwocz1vK2l8MCkpJiYoYXJbbj4+Ml09cyk6KGZ1bmN0aW9uKEEsZSl7ZXw9MDt2YXIgcixpLGY9MCxuPTAsdD0wLG89MCxhPTA7aWYodD0wfGFyWyhyPTgrKEF8PTApfDApPj4yXSxmPTB8YXJbKGk9QSs0fDApPj4yXSxlPj4+MDw9KHQtZnwwKT4+PjApe2Zvcig7dHJbZj4+MF09MCxmPTErKDB8YXJbaT4+Ml0pfDAsYXJbaT4+Ml09ZiwwIT0oMHwoZT1lKy0xfDApKTspO3JldHVybn1uPTB8YXJbQT4+Ml0sKDB8KGY9KG89Zi1ufDApK2V8MCkpPDAmJnpsKCk7YT0odD10LW58MCk8PDEsbj0oZj10Pj4+MDwxMDczNzQxODIzP2E+Pj4wPGY+Pj4wP2Y6YToyMTQ3NDgzNjQ3KT8wfGh1KGYpOjA7YT1uK298MCxvPW4rZnwwLGY9dD1hO2Zvcig7dHJbZj4+MF09MCx0PWY9dCsxfDAsZT1lKy0xfDAsMCE9KDB8ZSk7KTtlPTB8YXJbQT4+Ml0sbj0oMHxhcltpPj4yXSktZXwwLGY9YSsoMC1uKXwwLDA8KDB8bikmJmhiKDB8ZiwwfGUsMHxuKTtpZihhcltBPj4yXT1mLGFyW2k+PjJdPXQsYXJbcj4+Ml09bywhZSlyZXR1cm47dnUoZSl9KGYsaS10fDApLGk9MHxhcltlPj4yXSksMDwoMHxpKSkpcmV0dXJuIHI9NjU1MzUmKDB8aXQocikpLG9yW2FyW2M+PjJdPj4xXT1yLChyPTApfHI7cmV0dXJuIHI9MjU1JigwfEF0KHIsMSkpLHRyW0ErNjUyPj4wXT1yLChyPTApfHJ9KHIsQSs0fDAsZSkpfHwoLTE8KDB8KGU9MHxhcltBKzUyMD4+Ml0pKSYmZnVuY3Rpb24oQSxlKXtBfD0wO3ZhciByLGksZixuLHQsbyxhLGMsbCx1LGIscyxkLGssaCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTAsQj0wLEU9MCxYPTAsVz0wLEk9MDtzd2l0Y2godXI9KGg9dXIpKzIwOHwwLEk9aCsxOTJ8MCxrPWgrMTg0fDAsZD1oKzE3NnwwLFc9aCsxNjh8MCxzPWgrMTYwfDAsWD1oKzE1MnwwLGI9aCsxNDR8MCxFPWgrMTI4fDAsdT1oKzEyMHwwLEI9aCsxMTJ8MCxhPWgrMTA0fDAseT1oKzk2fDAsZj1oKzg4fDAsaT1oKzgwfDAsbz1oKzcyfDAsdD1oKzY0fDAsbj1oKzU2fDAscj1oKzQ4fDAscD1oKzQwfDAsWj1oKzMyfDAsZz1oKzI0fDAsbT1oKzE2fDAsdj1oKzh8MCxsPSh3PWgpKzIwMHwwLDB8KGV8PTApKXtjYXNlIDE6ZT0xMDE3MjticmVhaztjYXNlIDI6ZT0xMDY3NjticmVhaztkZWZhdWx0OnJldHVybiB1cj1ofWlmKFBuKGM9MHxhcltlPj4yXSw0NDYzMix3KSxhclt2Pj4yXT1hcltBPj4yXSxQbihjLDQ0NjczLHYpLGFyW20+PjJdPWFyW0ErND4+Ml0sUG4oYyw0NDcxNyxtKSx2PUErOHwwLGFyW2c+PjJdPWFyW3Y+PjJdLFBuKGMsNDQ3NjEsZyksYXJbWj4+Ml09YXJbQSsxMj4+Ml0sUG4oYyw0NDgwNSxaKSxaPTB8YXJbdj4+Ml0sJG4oQSsxNnwwLDEsYyksdz1aKy0xfDAsMTwoMHxaKSlmb3IoZT0wO2FyW3A+PjJdPWUsUG4oYyw0NDg0OSxwKSwkbihBKzY4Kyg1MiplfDApfDAsMCxjKSwoMHwoZT1lKzF8MCkpIT0oMHx3KTspO2lmKHA9QSs0ODR8MCxhcltyPj4yXT1hcltwPj4yXSxQbihjLDQ0ODgyLHIpLDB8YXJbcD4+Ml0pe2lmKDA8KDB8YXJbdj4+Ml0pKWZvcihlPTA7eT0wfGFyW0ErNDg4KygxMiplfDApPj4yXSxhcltuPj4yXT1lLGFyWzQrbj4+Ml09eSxQbihjLDQ0OTI5LG4pLGFyW3Q+PjJdPWFyW0ErNDg4KygxMiplfDApKzQ+PjJdLFBuKGMsNDQ5NzEsdCksYXJbbz4+Ml09YXJbQSs0ODgrKDEyKmV8MCkrOD4+Ml0sUG4oYyw0NTAxMixvKSwoMHwoZT1lKzF8MCkpPCgwfGFyW3Y+PjJdKTspO31lbHNlIGFyW2k+PjJdPWFyW0ErNDg4Pj4yXSxQbihjLDQ1MDUzLGkpLGFyW2Y+PjJdPWFyW0ErNDkyPj4yXSxQbihjLDQ1MDk4LGYpLGFyW3k+PjJdPWFyW0ErNDk2Pj4yXSxQbihjLDQ1MTQzLHkpO2lmKFo9QSs1ODR8MCxhclthPj4yXT1jcltaPj4wXSxQbihjLDQ1MTg4LGEpLGc9QSs1ODh8MCxhcltCPj4yXT1hcltnPj4yXSxQbihjLDQ1MjEzLEIpLDE8KDB8YXJbZz4+Ml0pKXt2PUErNTkyfDAsbT00K2x8MCx3PTE7ZG97Zm9yKGU9MDthcltsPj4yXT0oMHxhclsoMHxhclt2Pj4yXSkrKDEyKnd8MCk+PjJdKSsoZT4+PjU8PDIpLGFyW20+PjJdPTE8PCgzMSZlKSxhcltFPj4yXT13LGFyW0UrND4+Ml09ZSx0clsoQj1FKzh8MCk+PjBdPTB8dHJbbD4+MF0sdHJbQisxPj4wXT0wfHRyWzErbD4+MF0sdHJbQisyPj4wXT0wfHRyWzIrbD4+MF0sdHJbQiszPj4wXT0wfHRyWzMrbD4+MF0sdHJbQis0Pj4wXT0wfHRyWzQrbD4+MF0sdHJbQis1Pj4wXT0wfHRyWzUrbD4+MF0sdHJbQis2Pj4wXT0wfHRyWzYrbD4+MF0sdHJbQis3Pj4wXT0wfHRyWzcrbD4+MF0sUG4oYyw0NTI3MyxFKSwoMHxlKTwoMHxjcltaPj4wXSk7KWU9ZSsxfDA7dz13KzF8MH13aGlsZSgoMHx3KTwoMHxhcltnPj4yXSkpfWlmKEU9QSs2MDR8MCxhclt1Pj4yXT10cltFPj4wXSxQbihjLDQ1MjM4LHUpLDB8dHJbRT4+MF0mJihhcltiPj4yXT1hcltBKzYwOD4+Ml0sUG4oYyw0NTMxMCxiKSxhcltYPj4yXT1hcltBKzYxMj4+Ml0sUG4oYyw0NTMzOCxYKSxYPUErNjE2fDAsYXJbcz4+Ml09dHJbWD4+MF0sUG4oYyw0NTM2NixzKSwwfHRyW1g+PjBdKSYmKGFyW1c+PjJdPWFyW0ErNjIwPj4yXSxQbihjLDQ1NDA4LFcpLFc9QSs2MjR8MCxhcltkPj4yXT1hcltXPj4yXSxQbihjLDQ1NDQxLGQpLDA8KDB8YXJbVz4+Ml0pKSlyZXR1cm4gST0wfGxyW2FyW0ErNjI4Pj4yXT4+MV0sYXJbaz4+Ml09MCxhcls0K2s+PjJdPUksUG4oYyw0NTQ3NCxrKSx1cj1oO2FyW0k+PjJdPXRyW0ErNjUyPj4wXSxQbihjLDQ1NTAyLEkpLHVyPWh9KHIsZSksaGIoMHwobz1BKzYwMCsoNjU2KihlPTB8YXJbcj4+Ml0pfDApfDApLDB8ciw1OTIpLCgwfG8pPT0oMHxyKT8obj1yKzYwNHwwLGFyWyhvPUErNjAwKyg2NTYqZXwwKSs2MDR8MCk+PjJdPWFyW24+PjJdLGFyW28rND4+Ml09YXJbbis0Pj4yXSxhcltvKzg+PjJdPWFyW24rOD4+Ml0sYXJbbysxMj4+Ml09YXJbbisxMj4+Ml0sYXJbbysxNj4+Ml09YXJbbisxNj4+Ml0sYXJbbysyMD4+Ml09YXJbbisyMD4+Ml0pOihqZShBKzYwMCsoNjU2KmV8MCkrNTkyfDAsMHxhcltuPj4yXSwwfGFyW2k+PjJdKSxuPXIrNjA0fDAsYXJbKG89QSs2MDArKDY1NiplfDApKzYwNHwwKT4+Ml09YXJbbj4+Ml0sYXJbbys0Pj4yXT1hcltuKzQ+PjJdLGFyW28rOD4+Ml09YXJbbis4Pj4yXSxhcltvKzEyPj4yXT1hcltuKzEyPj4yXSxhcltvKzE2Pj4yXT1hcltuKzE2Pj4yXSxhcltvKzIwPj4yXT1hcltuKzIwPj4yXSxIZShBKzYwMCsoNjU2KmV8MCkrNjI4fDAsMHxhclt0Pj4yXSwwfGFyW3IrNjMyPj4yXSkseGUoQSs2MDArKDY1NiplfDApKzY0MHwwLDB8YXJbcis2NDA+PjJdLDB8YXJbcis2NDQ+PjJdKSksdHJbQSs2MDArKDY1NiplfDApKzY1Mj4+MF09MHx0cltyKzY1Mj4+MF0sMCksMHwoZT0wfGFyW3IrNjQwPj4yXSkmJigoMHxhclsoQT1yKzY0NHwwKT4+Ml0pIT0oMHxlKSYmKGFyW0E+PjJdPWUpLHZ1KGUpKSwwfChlPTB8YXJbdD4+Ml0pJiYoKDB8KG49MHxhclsoQT1yKzYzMnwwKT4+Ml0pKSE9KDB8ZSkmJihhcltBPj4yXT1uKyh+KChuKy0yLWV8MCk+Pj4xKTw8MSkpLHZ1KGUpKSwhKGU9MHxhclsodD1yKzU5MnwwKT4+Ml0pKXJldHVybiB1cj1mLDB8bztpZigoMHwoQT0wfGFyW2k+PjJdKSkhPSgwfGUpKXtmb3IoO0E9QSstMTJ8MCxhcltpPj4yXT1BLChuPTB8YXJbQT4+Ml0pJiYodnUobiksQT0wfGFyW2k+PjJdKSwoMHxBKSE9KDB8ZSk7KTtlPTB8YXJbdD4+Ml19cmV0dXJuIHZ1KGUpLHVyPWYsMHxvfWZ1bmN0aW9uIGplKEEsZSxyKXt2YXIgaSxmLG4sdCxvLGEsYyxsPTAsdT0wLGI9MCxzPTAsZD0wLGs9MCxoPTAsdz0wLHY9MCxtPTAsZz0wLFo9MDtpZih1cj0oYz11cikrMzJ8MCx0PWMrMjR8MCxuPWMrMTZ8MCxvPWMrOHwwLGE9YyxmPSgocnw9MCktKGV8PTApfDApLzEyfDAsKCgodT0wfGFyWyhkPShBfD0wKSs4fDApPj4yXSktKGw9aT0wfGFyW0E+PjJdKXwwKS8xMnwwKT4+PjA8Zj4+PjApe2lmKGkpe2lmKCgwfCh1PTB8YXJbKHM9QSs0fDApPj4yXSkpPT0oMHxsKSl1PWk7ZWxzZXtmb3IoO3U9dSstMTJ8MCxhcltzPj4yXT11LChiPTB8YXJbdT4+Ml0pJiYodnUoYiksdT0wfGFyW3M+PjJdKSwoMHx1KSE9KDB8bCk7KTt1PTB8YXJbQT4+Ml19dnUodSksYXJbZD4+Ml09MCxhcltzPj4yXT0wLHU9YXJbQT4+Ml09MH1pZigzNTc5MTM5NDE8Zj4+PjAmJnpsKCksdT0obT0oMHx1KS8xMnwwKTw8MSwzNTc5MTM5NDE8KHU9bT4+PjA8MTc4OTU2OTcwP3U+Pj4wPGY+Pj4wP2Y6dTozNTc5MTM5NDEpPj4+MCYmemwoKSxiPTB8aHUoMTIqdXwwKSxhclsobT1BKzR8MCk+PjJdPWIsYXJbQT4+Ml09YixhcltkPj4yXT1iKygxMip1fDApLCgwfGUpPT0oMHxyKSlyZXR1cm4gdm9pZCh1cj1jKTtmb3Iodz00K298MCx2PWErNHwwLGg9ZTs7KXtpZihhcltiPj4yXT0wLGFyWyh1PWIrNHwwKT4+Ml09MCwoYXJbKHM9Yis4fDApPj4yXT0wKXwoaz0wfGFyWyhkPWgrNHwwKT4+Ml0pKXtpZigoMHxrKTwwKXt1PTQyO2JyZWFrfVo9MHxodSgoaz0xKygoaystMXwwKT4+PjUpfDApPDwyKSxhcltiPj4yXT1aLGFyW3U+PjJdPTAsYXJbcz4+Ml09ayxzPTB8YXJbaD4+Ml0sYXJbbz4+Ml09cyxrPShhclt3Pj4yXT0wKXxhcltkPj4yXSxhclthPj4yXT1zKyhrPj4+NTw8MiksYXJbdj4+Ml09MzEmayxhcltuPj4yXT1hcltvPj4yXSxhcls0K24+PjJdPWFyWzQrbz4+Ml0sYXJbdD4+Ml09YXJbYT4+Ml0sYXJbNCt0Pj4yXT1hclthKzQ+PjJdLFBlKGIsbix0KX1pZihoPWgrMTJ8MCx1PTEyKygwfGFyW20+PjJdKXwwLGFyW20+PjJdPXUsKDB8aCk9PSgwfHIpKXt1PTQ1O2JyZWFrfWI9dX1pZig0Mj09KDB8dSkpemwoKTtlbHNlIGlmKDQ1PT0oMHx1KSlyZXR1cm4gdm9pZCh1cj1jKX13PShkPSgoMHxhclsodj1BKzR8MCk+PjJdKS1pfDApLzEyfDApPj4+MDxmPj4+MCxkPWUrKDEyKmR8MCl8MCxoPXc/ZDpyO0E6ZG97aWYoKDB8aCk9PSgwfGUpKWc9bDtlbHNle2Zvcig7Oyl7aWYoKDB8bCkhPSgwfGUpKXtpZih1PTB8YXJbKGs9ZSs0fDApPj4yXSl7aWYodT4+PjA+YXJbKHM9bCs4fDApPj4yXTw8NT4+PjApe2lmKChiPTB8YXJbbD4+Ml0pJiYodnUoYiksYXJbbD4+Ml09MCxhcltzPj4yXT0wLHU9KGFyW2wrND4+Ml09MCl8YXJbaz4+Ml0pLCgwfHUpPDApYnJlYWs7Yj0wfGh1KCh1PTErKCh1Ky0xfDApPj4+NSl8MCk8PDIpLGFyW2w+PjJdPWIsYXJbbCs0Pj4yXT0wLGFyW3M+PjJdPXUsdT0wfGFyW2s+PjJdfWVsc2UgYj0wfGFyW2w+PjJdO3diKDB8YiwwfGFyW2U+PjJdLDQrKCh1Ky0xfDApPj4+NTw8Mil8MCksdT0wfGFyW2s+PjJdfWVsc2UgdT0wO2FyW2wrND4+Ml09dX1pZihsPWwrMTJ8MCwoMHwoZT1lKzEyfDApKT09KDB8aCkpe2c9bDticmVhayBBfX16bCgpfX13aGlsZSgwKTtpZih3KWlmKCgwfGgpIT0oMHxyKSl7Zm9yKGs9NCtvfDAsZT1hKzR8MCxoPTB8YXJbdj4+Ml07Oyl7aWYoYXJbaD4+Ml09MCxhclsobD1oKzR8MCk+PjJdPTAsKGFyWyh1PWgrOHwwKT4+Ml09MCl8KHM9MHxhclsoYj1kKzR8MCk+PjJdKSl7aWYoKDB8cyk8MCl7dT0yMDticmVha31aPTB8aHUoKGc9MSsoKHMrLTF8MCk+Pj41KXwwKTw8MiksYXJbaD4+Ml09WixhcltsPj4yXT0wLGFyW3U+PjJdPWcsZz0wfGFyW2Q+PjJdLGFyW28+PjJdPWcsWj0oYXJbaz4+Ml09MCl8YXJbYj4+Ml0sYXJbYT4+Ml09ZysoWj4+PjU8PDIpLGFyW2U+PjJdPTMxJlosYXJbbj4+Ml09YXJbbz4+Ml0sYXJbNCtuPj4yXT1hcls0K28+PjJdLGFyW3Q+PjJdPWFyW2E+PjJdLGFyWzQrdD4+Ml09YXJbYSs0Pj4yXSxQZShoLG4sdCl9aWYoZD1kKzEyfDAsbD0xMisoMHxhclt2Pj4yXSl8MCxhclt2Pj4yXT1sLCgwfGQpPT0oMHxyKSl7dT00NTticmVha31oPWx9aWYoMjA9PSgwfHUpKXpsKCk7ZWxzZSBpZig0NT09KDB8dSkpcmV0dXJuIHZvaWQodXI9Yyl9ZWxzZSB1cj1jO2Vsc2V7aWYoKDB8KGw9MHxhclt2Pj4yXSkpPT0oMHxnKSlyZXR1cm4gdm9pZCh1cj1jKTtmb3IoO2w9bCstMTJ8MCxhclt2Pj4yXT1sLCh1PTB8YXJbbD4+Ml0pJiYodnUodSksbD0wfGFyW3Y+PjJdKSwoMHxsKSE9KDB8Zyk7KTt1cj1jfX1mdW5jdGlvbiBIZShBLGUscil7dmFyIGksZixuLHQsbz0wLGE9MCxjPTAsbD0wO2lmKChjPShsPShpPXJ8PTApLShlfD0wKXwwKT4+MSk+Pj4wPD0obz0wfGFyWyhmPShBfD0wKSs4fDApPj4yXSktKG49dD0wfGFyW0E+PjJdKT4+MT4+PjApcmV0dXJuIDB8KHI9KG89KGE9Yz0oQT0oYT0oMHxhclsobD1BKzR8MCk+PjJdKS10Pj4xKT4+PjA8Yz4+PjApP2UrKGE8PDEpfDA6ciktZXwwKT4+MSkmJndiKDB8dCwwfGUsMHxvKSxyPW4rKHI8PDEpfDAsQT8hKCgwfChvPWktYXwwKSk8PTApJiYoaGIoMHxhcltsPj4yXSwwfGMsMHxvKSx2b2lkKGFyW2w+PjJdPSgwfGFyW2w+PjJdKSsobz4+PjE8PDEpKSk6KDB8KG89MHxhcltsPj4yXSkpIT0oMHxyKSYmdm9pZChhcltsPj4yXT1vKyh+KChvKy0yLXJ8MCk+Pj4xKTw8MSkpOyhhPXQpJiYoKDB8KHI9MHxhclsobz1BKzR8MCk+PjJdKSkhPSgwfG4pJiYoYXJbbz4+Ml09cisofigocistMi10fDApPj4+MSk8PDEpKSx2dShhKSxhcltmPj4yXT0wLGFyW28+PjJdPTAsbz1hcltBPj4yXT0wKSwoMHxsKTwwJiZ6bCgpLCgwfChvPW8+PjE+Pj4wPDEwNzM3NDE4MjM/bz4+PjA8Yz4+PjA/YzpvOjIxNDc0ODM2NDcpKTwwJiZ6bCgpLHI9MHxodShvPDwxKSxhclsoYT1BKzR8MCk+PjJdPXIsYXJbQT4+Ml09cixhcltmPj4yXT1yKyhvPDwxKSwoMHxsKTw9MHx8KGhiKDB8ciwwfGUsMHxsKSxhclthPj4yXT1yKyhsPj4+MTw8MSkpfWZ1bmN0aW9uIHhlKEEsZSxyKXt2YXIgaSxmLG49MCx0PTAsbz0wLGE9MCxjPTA7cmV0dXJuIGY9KGM9cnw9MCktKGk9ZXw9MCl8MCwoKG49MHxhclsobz0oQXw9MCkrOHwwKT4+Ml0pLShhPXQ9MHxhcltBPj4yXSl8MCk+Pj4wPGY+Pj4wPyh0JiYoKDB8YXJbKG49QSs0fDApPj4yXSkhPSgwfGEpJiYoYXJbbj4+Ml09YSksdnUoYSksYXJbbz4+Ml09MCxhcltuPj4yXT0wLG49YXJbQT4+Ml09MCksKDB8Zik8MCYmemwoKSxjPW48PDEsKDB8KG49bj4+PjA8MTA3Mzc0MTgyMz9jPj4+MDxmPj4+MD9mOmM6MjE0NzQ4MzY0NykpPDAmJnpsKCksYT0wfGh1KG4pLGFyWyhjPUErNHwwKT4+Ml09YSxhcltBPj4yXT1hLGFyW28+PjJdPWErbixoYigwfGEsMHxlLDB8Ziksdm9pZChhcltjPj4yXT1hK2YpKTooMHwobj0odD1yPShBPSh0PSgwfGFyWyhvPUErNHwwKT4+Ml0pLXR8MCk+Pj4wPGY+Pj4wKT9lK3R8MDpyKS1pfDApJiZ3YigwfGEsMHxlLDB8biksbj1hK258MCxBPyEoKDB8KG49Yy10fDApKTw9MCkmJihoYigwfGFyW28+PjJdLDB8ciwwfG4pLHZvaWQoYXJbbz4+Ml09KDB8YXJbbz4+Ml0pK24pKTooMHxhcltvPj4yXSkhPSgwfG4pJiZ2b2lkKGFyW28+PjJdPW4pKX1mdW5jdGlvbiBQZShBLGUscil7ZXw9MCxyfD0wO3ZhciBpLGYsbix0LG8sYSxjLGwsdSxiPTAscz0wLGQ9MCxrPTAsaD0wO2lmKHVyPSh1PXVyKSs0OHwwLGE9dSs0MHwwLG89dSszMnwwLGY9dSs4fDAsdD0obj11KSsyNHwwLGw9dSsxNnwwLGg9MHxhclsoZD0oQXw9MCkrNHwwKT4+Ml0sYz0wfGFyWyhiPWUpPj4yXSxiPTB8YXJbYis0Pj4yXSxzPTB8YXJbKGs9cik+PjJdLGs9MHxhcltrKzQ+PjJdLGk9cy1jPDwzLGFyW2Q+PjJdPWgtYitrK2ksZT1kPSgwfGFyW0E+PjJdKSsoaD4+PjU8PDIpfDAsKDB8YikhPSgwfChyPTMxJmgpKSlyZXR1cm4gYXJbKGg9Zik+PjJdPWMsYXJbaCs0Pj4yXT1iLGFyWyhoPW4pPj4yXT1zLGFyW2grND4+Ml09ayxhclt0Pj4yXT1lLGFyWzQrdD4+Ml09cixhcltvPj4yXT1hcltmPj4yXSxhcls0K28+PjJdPWFyWzQrZj4+Ml0sYXJbYT4+Ml09YXJbbj4+Ml0sYXJbNCthPj4yXT1hcltuKzQ+PjJdLGZ1bmN0aW9uKEEsZSxyLGkpe0F8PTAscnw9MCxpfD0wO3ZhciBmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTAsZD0wLGs9MCxoPTA7aWYoZD0wfGFyWyhlfD0wKT4+Ml0sdT0wfGFyW2UrND4+Ml0sbz0oKDB8YXJbcj4+Ml0pLWQ8PDMpKygwfGFyW3IrND4+Ml0pLXV8MCxyPWQsKDB8byk8PTApcmV0dXJuIGU9aSs0fDAsaT0wfGFyW2k+PjJdLGFyW0E+PjJdPWksaT1BKzR8MCxBPTB8YXJbZT4+Ml0sYXJbaT4+Ml09QTt1Pyh0PS0xPj4+KCh0PTMyLXV8MCktKGw9KDB8byk8KDB8dCk/bzp0KXwwKSYtMTw8dSZhcltyPj4yXSxmPTB8YXJbKGI9aSs0fDApPj4yXSxuPShjPTMyLWZ8MCk+Pj4wPGw+Pj4wP2M6bCxhPTB8YXJbaT4+Ml0sZj1hclthPj4yXSZ+KC0xPj4+KGMtbnwwKSYtMTw8ZiksYXJbYT4+Ml09ZixjPTB8YXJbYj4+Ml0sYXJbYT4+Ml09KHU+Pj4wPGM+Pj4wP3Q8PGMtdTp0Pj4+KHUtY3wwKSl8ZixmPSgwfGFyW2I+PjJdKStufDAsYT1hKyhmPj4+NTw8Mil8MCxhcltpPj4yXT1hLGYmPTMxLGFyW2I+PjJdPWYsMDwoMHwoYz1sLW58MCkpJiYoYXJbYT4+Ml09dD4+Pih1K258MCl8YXJbYT4+Ml0mfigtMT4+PigzMi1jfDApKSxhcltiPj4yXT1jLGY9Yykscj1yKzR8MCxhcltlPj4yXT1yLG89by1sfDApOmY9MHxhclsoYj1mPWkrNHwwKT4+Ml07aWYoZD0zMi1mfDAsYz0tMTw8ZiwzMTwoMHxvKSl7Zm9yKGw9fmMsYT0wfGFyW2k+PjJdLHU9KHM9KGY9bystMzJ8MCk+Pj41KSsxfDAscz1mLShzPDw1KXwwLGY9cixuPTB8YXJbYT4+Ml0sdD1hO2s9MHxhcltmPj4yXSxoPW4mbCxhclt0Pj4yXT1oLGFyW3Q+PjJdPWs8PGFyW2I+PjJdfGgsbj1hclsodD10KzR8MCk+PjJdJmN8az4+PmQsYXJbdD4+Ml09biwhKCgwfChvPW8rLTMyfDApKTw9MzEpOylmPWYrNHwwO3I9cisodTw8Mil8MCxhcltlPj4yXT1yLGFyW2k+PjJdPWErKHU8PDIpLG89c31pZigoMHxvKTw9MClyZXR1cm4gaz1iLGg9MHxhcltpPj4yXSxhcltBPj4yXT1oLGg9QSs0fDAsaz0wfGFyW2s+PjJdLGFyW2g+PjJdPWs7aWYodD1hcltyPj4yXSYtMT4+PigzMi1vfDApLG49KDB8ZCk8KDB8byk/ZDpvLGY9MHxhcltpPj4yXSxyPWFyW2Y+PjJdJn4oLTE8PGFyW2I+PjJdJi0xPj4+KGQtbnwwKSksYXJbZj4+Ml09cixhcltmPj4yXT1yfHQ8PGFyW2I+PjJdLHI9KDB8YXJbYj4+Ml0pK258MCxmPWYrKHI+Pj41PDwyKXwwLGFyW2k+PjJdPWYsYXJbYj4+Ml09MzEmciwoMHwocj1vLW58MCkpPD0wKXJldHVybiBrPWIsaD0wfGFyW2k+PjJdLGFyW0E+PjJdPWgsaD1BKzR8MCxrPTB8YXJbaz4+Ml0sYXJbaD4+Ml09azthcltmPj4yXT1hcltmPj4yXSZ+KC0xPj4+KDMyLXJ8MCkpfHQ+Pj5uLGFyW2I+PjJdPXIsaz1iLGg9MHxhcltpPj4yXSxhcltBPj4yXT1oLGg9QSs0fDAsaz0wfGFyW2s+PjJdLGFyW2g+PjJdPWt9KGwsbyxhLHQpLHZvaWQodXI9dSk7cj1rLWIraXwwLGs9YywwPCgwfHIpJiYoZT1iPyhlPS0xPj4+KChlPTMyLWJ8MCktKGg9KDB8cik8KDB8ZSk/cjplKXwwKSYtMTw8YixhcltkPj4yXT1hcltkPj4yXSZ+ZXxhcltrPj4yXSZlLHI9ci1ofDAsYj0zMSYoZT1oK2J8MCksZD1kKyhlPj4+NTw8Mil8MCxrPWsrNHwwKTooYj0wLGMpLHdiKDB8ZCwwfGUsKHM9KDB8cikvMzJ8MCk8PDJ8MCksQT1yLShzPDw1KXwwLGU9cj1kKyhzPDwyKXwwLDA8KDB8QSkmJihiPS0xPj4+KDMyLUF8MCksYXJbcj4+Ml09YXJbcj4+Ml0mfmJ8YXJbaysoczw8Mik+PjJdJmIsYj1BKSksYXJbbD4+Ml09ZSxhcls0K2w+PjJdPWIsdXI9dX1mdW5jdGlvbiBMZShBLGUpe0F8PTAsZXw9MDt2YXIgcixpLGY9MDtyZXR1cm4gdXI9KGk9dXIpKzUxNjh8MCwkYShyPWkpLDB8KGU9MHxmdW5jdGlvbihBLGUscil7QXw9MCxlfD0wO3ZhciBpPTAsZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wO2lmKGM9MjU1JigwfEF0KHJ8PTAsNCkpLHRyW0ErMT4+MF09YyxjPTErKDB8QXQociwzKSl8MCwxMTc0NDA1MTI8KCh0clsobz1BKzJ8MCk+PjBdPWMpPDwyNHwwKSlyZXR1cm4gMHwoQT04KTtpZihpPTI1NSYoMHxBdChyLDEpKSx0cltBKzM+PjBdPWksTG4oQSs0fDAsciwwfHRyW28+PjBdKSwtOTk5OTk9PSgwfChpPTB8aXQocikpKSlyZXR1cm4gZXIoZSw4LDApLDB8KEE9OCk7aWYoMTU8KDB8KGFyW0ErNDcyPj4yXT1pKSkpcmV0dXJuIDB8KEE9OCk7aWYoLTk5OTk5PT0oMHwoaT0wfGl0KHIpKSkpcmV0dXJuIGVyKGUsOCwwKSwwfChBPTgpOzM9PSgwfChhclsoZj1BKzQ3NnwwKT4+Ml09aSkpPyhuPTI1NSYoMHxBdChyLDEpKSxpPTB8YXJbZj4+Ml0pOm49MDtpZih0cltBKzQ4MD4+MF09bixhcltBKzUwMTI+PjJdPW48PDI0Pj4yND09MD9pOjAsMzxpPj4+MClyZXR1cm4gZXIoZSwxMDE5LDApLDB8KEE9OCk7aWYoLTk5OTk5PT0oMHwoaT0wfGl0KHIpKSkpcmV0dXJuIGVyKGUsOCwwKSwwfChBPTgpO2lmKGFyWyhmPUErNDg0fDApPj4yXT1pLC05OTk5OT09KDB8KG49MHxpdChyKSkpKXJldHVybiBlcihlLDgsMCksMHwoQT04KTtpZihhcltBKzQ4OD4+Ml09bixpPTB8YXJbZj4+Ml0sMD09KDB8bil8MD09KDB8aSkpcmV0dXJuIDB8KEE9OCk7aWYoN2U0PCgwfG4pfDdlNDwoMHxpKSlyZXR1cm4gMHwoQT04KTtpZihjPTI1NSYoMHxBdChyLDEpKSwodHJbQSs0OTI+PjBdPWMpPDwyND4+MjQpe2lmKC05OTk5OT09KDB8KGk9MHxpdChyKSkpKXJldHVybiBlcihlLDgsMCksMHwoQT04KTtpZihhcltBKzQ5Nj4+Ml09aSwtOTk5OTk9PSgwfChpPTB8aXQocikpKSlyZXR1cm4gZXIoZSw4LDApLDB8KEE9OCk7aWYoYXJbQSs1MDA+PjJdPWksLTk5OTk5PT0oMHwoaT0wfGl0KHIpKSkpcmV0dXJuIGVyKGUsOCwwKSwwfChBPTgpO2lmKGFyW0ErNTA0Pj4yXT1pLC05OTk5OT09KDB8KGk9MHxpdChyKSkpKXJldHVybiBlcihlLDgsMCksMHwoQT04KX1lbHNlIGFyW0ErNDk2Pj4yXT0wLGFyW0ErNTAwPj4yXT0wLGFyW0ErNTA0Pj4yXT0wLGk9MDtpZihhcltBKzUwOD4+Ml09aSwtOTk5OTk9PSgwfChpPTB8aXQocikpKSlyZXR1cm4gZXIoZSw4LDApLDB8KEE9OCk7aWYoYXJbQSs1MTI+PjJdPWkrOCwtOTk5OTk9PSgwfChpPTB8aXQocikpKSlyZXR1cm4gZXIoZSw4LDApLDB8KEE9OCk7aWYoYXJbQSs1MTY+PjJdPWkrOCwtOTk5OTk9PSgwfChpPTB8aXQocikpKSlyZXR1cm4gZXIoZSw4LDApLDB8KEE9OCk7YT1pKzR8MCxhclsoYz1BKzUyMHwwKT4+Ml09YSxhcltBKzUwMzI+PjJdPTE8PGEsYT0yNTUmKDB8QXQociwxKSksKHRyWyh0PUErNTI0fDApPj4wXT1hKTw8MjQ+PjI0PyhpPTAsbD0zNSk6KG49MHx0cltvPj4wXSxpPShuPDwyND4+MjQpLTF8MCk7Zm9yKDs7KXtpZigzNT09KDB8bCkmJihuPTB8dHJbbz4+MF0pLCgwfChmPW48PDI0Pj4yNCkpPD0oMHxpKSl7bD00NDticmVha31pZigtOTk5OTk9PSgwfChmPTB8aXQocikpKXwxNTwoMHxmKSl7bD0zODticmVha31pZihhcltBKzUyOCsoaTw8Mik+PjJdPWYrMSwtOTk5OTk9PSgwfChmPTB8aXQocikpKSl7bD00MDticmVha31pZihhclsobj1BKzU1NisoaTw8Mil8MCk+PjJdPWYsLTk5OTk5PT0oMHwoZj0wfGl0KHIpKSkpe2w9NDI7YnJlYWt9YXJbQSs1ODQrKGk8PDIpPj4yXT1mLGFyW0ErNTEyOCsoaTw8Mik+PjJdPWYrLTErKDB8YXJbbj4+Ml0pLGk9aSsxfDAsbD0zNX17aWYoMzg9PSgwfGwpKXJldHVybiBlcihlLDgsMCksMHwoQT04KTtpZig0MD09KDB8bCkpcmV0dXJuIGVyKGUsOCwwKSwwfChBPTgpO2lmKDQyPT0oMHxsKSlyZXR1cm4gZXIoZSw4LDApLDB8KEE9OCk7aWYoNDQ9PSgwfGwpKXtpZigwfHRyW3Q+PjBdJiYoaT1mKy0xfDAsODw9bjw8MjQ+PjI0JiZzcig0MTYzMyw0MTYzOSwzMTcsNDQ2MjcpLDE8bjw8MjQ+PjI0KSlmb3Iobj1BKzUyOCsoaTw8Mil8MCx0PUErNTU2KyhpPDwyKXwwLGY9QSs1ODQrKGk8PDIpfDAsaT0wO2FyW0ErNTI4KyhpPDwyKT4+Ml09YXJbbj4+Ml0sYXJbQSs1NTYrKGk8PDIpPj4yXT1hclt0Pj4yXSxhcltBKzU4NCsoaTw8Mik+PjJdPWFyW2Y+PjJdLCgwfChpPWkrMXwwKSk8KCgwfHRyW28+PjBdKS0xfDApOyk7aWYoLTk5OTk5PT0oMHwoaT0wfGl0KHIpKSkpcmV0dXJuIGVyKGUsOCwwKSwwfChBPTgpO2lmKGFyWyh0PUErNjEyfDApPj4yXT1pKzMsLTk5OTk5PT0oMHwoaT0wfGl0KHIpKSkpcmV0dXJuIGVyKGUsOCwwKSwwfChBPTgpO2lmKGFyWyhvPUErNjE2fDApPj4yXT1pLC05OTk5OT09KDB8KGk9MHxpdChyKSkpKXJldHVybiBlcihlLDgsMCksMHwoQT04KTtpZihhclsoZj1BKzYyMHwwKT4+Ml09aSsyLC05OTk5OT09KDB8KGk9MHxpdChyKSkpKXJldHVybiBlcihlLDgsMCksMHwoQT04KTtpZihhclsobj1BKzYyNHwwKT4+Ml09aSwtOTk5OTk9PSgwfChpPTB8aXQocikpKSlyZXR1cm4gZXIoZSw4LDApLDB8KEE9OCk7aWYoYXJbQSs2Mjg+PjJdPWksLTk5OTk5PT0oMHwoaT0wfGl0KHIpKSkpcmV0dXJuIGVyKGUsOCwwKSwwfChBPTgpO2lmKGFyW0ErNjMyPj4yXT1pLDY8KDB8KGk9MHxhclt0Pj4yXSkpKXJldHVybiAwfChBPTgpO2lmKDY8KCgwfGFyW28+PjJdKStpfDApKXJldHVybiAwfChBPTgpO2lmKDU8KDB8KGk9MHxhcltmPj4yXSkpKXJldHVybiAwfChBPTgpO2lmKDU8KCgwfGFyW24+PjJdKStpfDApKXJldHVybiAwfChBPTgpO2E9MjU1JigwfEF0KHIsMSkpLHRyW0ErNjM2Pj4wXT1hO2Rve2lmKGE8PDI0Pj4yNCl7aWYoYT0yNTUmKDB8QXQociwxKSksdHJbQSs2Mzc+PjBdPWEsaT1BKzYzOHwwLCEoYTw8MjQ+PjI0KSl7cmMoaSk7YnJlYWt9aWYoIShpPTB8ZWMociwwLGksMCkpKWJyZWFrO3JldHVybiAwfGl9fXdoaWxlKDApO2E9MjU1JigwfEF0KHIsMSkpLHRyW0ErNDcwMj4+MF09YSxhPTI1NSYoMHxBdChyLDEpKSx0cltBKzQ3MDM+PjBdPWEsYT0yNTUmKDB8QXQociwxKSksdHJbQSs0NzA0Pj4wXT1hO2Rve2lmKGE8PDI0Pj4yNCl7aWYoaT0xKygwfEF0KHIsNCkpJjI1NSx0cltBKzQ3MDU+PjBdPWksaT0xKygwfEF0KHIsNCkpJjI1NSx0cltBKzQ3MDY+PjBdPWksLTk5OTk5PT0oMHwoaT0wfGl0KHIpKSkpcmV0dXJuIGVyKGUsOCwwKSwwfChBPTgpO2lmKGFyW0ErNDcwOD4+Ml09aSszLC05OTk5OT09KDB8KGk9MHxpdChyKSkpKXJldHVybiBlcihlLDgsMCksMHwoQT04KTthcltBKzQ3MTI+PjJdPWksaT0yNTUmKDB8QXQociwxKSk7YnJlYWt9dHJbQSs0NzA1Pj4wXT0wLHRyW0ErNDcwNj4+MF09MCxhcltBKzQ3MDg+PjJdPTAsYXJbQSs0NzEyPj4yXT0wLGk9MH13aGlsZSgwKTtpZih0cltBKzQ3MTY+PjBdPWksLTk5OTk5PT0oMHwobz0wfGl0KHIpKSkpcmV0dXJuIGVyKGUsOCwwKSwwfChBPTgpO2lmKDY0PG8+Pj4wKXJldHVybiBlcihlLDEwMTQsMCksMHwoQT04KTtpZihhPUErNDcyMHwwLHQ9MHxhclsobj1BKzQ3MjR8MCk+PjJdLGY9MHxhclthPj4yXSxvPj4+MDw9KGk9KHQtZnwwKS8xMDB8MCk+Pj4wKXtkb3tpZihvPj4+MDxpPj4+MCl7aWYoKDB8dCk9PSgwfChpPWYrKDEwMCpvfDApfDApKSlicmVhazthcltuPj4yXT10KygxMDAqfigoKHQrLTEwMC1pfDApPj4+MCkvMTAwfDApfDApfX13aGlsZSgwKTswPCgwfG8pJiYobD04Nyl9ZWxzZSFmdW5jdGlvbihBLGUpe2V8PTA7dmFyIHIsaT0wLGY9MCxuPTAsdD0wLG89MCxhPTA7aWYobj0wfGFyWyhyPTgrKEF8PTApfDApPj4yXSxpPTB8YXJbKGE9QSs0fDApPj4yXSxlPj4+MDw9KChuLWl8MCkvMTAwfDApPj4+MCl7ZG97Zm9yKGY9aSsxMDB8MDsoKG9yW2k+PjFdPTApfChpPWkrMnwwKSk8KDB8Zik7KTtpPTEwMCsoMHxhclthPj4yXSl8MCxhclthPj4yXT1pLGU9ZSstMXwwfXdoaWxlKDAhPSgwfGUpKTtyZXR1cm59Zj0wfGFyW0E+PjJdLDQyOTQ5NjcyPChpPSh0PShpLWZ8MCkvMTAwfDApK2V8MCk+Pj4wJiZ6bCgpO289KG49KG4tZnwwKS8xMDB8MCk8PDEsaT1uPj4+MDwyMTQ3NDgzNj9vPj4+MDxpPj4+MD9pOm86NDI5NDk2NzI7ZG97aWYoaSl7aWYoISg0Mjk0OTY3MjxpPj4+MCkpe2Y9MHxodSgxMDAqaXwwKTticmVha31adShhPTB8WCg4KSw0NDUxOSksYXJbYT4+Ml09MTc2NjAsSSgwfGEsNDAxNiw0MjgpfWVsc2UgZj0wfXdoaWxlKDApO289ZisoMTAwKnR8MCl8MCx0PWYrKDEwMCppfDApfDAsbj1pPW87ZG97Zm9yKGY9aSsxMDB8MDsoKG9yW2k+PjFdPTApfChpPWkrMnwwKSk8KDB8Zik7KTtuPWk9bisxMDB8MCxlPWUrLTF8MH13aGlsZSgwIT0oMHxlKSk7ZT0wfGFyW0E+PjJdLGY9KDB8YXJbYT4+Ml0pLWV8MCxpPW8rKDEwMCooKDB8ZikvLTEwMHwwKXwwKXwwLDA8KDB8ZikmJmhiKDB8aSwwfGUsMHxmKTtpZihhcltBPj4yXT1pLGFyW2E+PjJdPW4sYXJbcj4+Ml09dCwhZSlyZXR1cm47dnUoZSl9KGEsby1pfDApLGw9ODc7QTpkb3tpZig4Nz09KDB8bCkpe2ZvcihpPTA7Oyl7aWYoISgwfFpjKGUsQSxyLCgwfGFyW2E+PjJdKSsoMTAwKml8MCl8MCxpLGEsMCkpKXtpPTEwMDU7YnJlYWt9aWYoKDB8byk8PSgwfChpPWkrMXwwKSkpYnJlYWsgQX1yZXR1cm4gMHxpfX13aGlsZSgwKTtsPTI1NSYoMHxBdChyLDEpKSx0cltBKzQ3MzI+PjBdPWw7ZG97aWYobDw8MjQ+PjI0KXtpZigtOTk5OTk9PSgwfChpPTB8aXQocikpKSlyZXR1cm4gZXIoZSw4LDApLDB8KEE9OCk7aWYoMzI8KDB8KGFyWyhmPUErNDczNnwwKT4+Ml09aSkpKXJldHVybiAwfChBPTgpO2lmKCEoMDwoMHxpKSkpYnJlYWs7Zm9yKGk9MDtsPTB8QXQociwwfGFyW2M+PjJdKSxhcltBKzQ3NDArKGk8PDIpPj4yXT1sLGw9MjU1JigwfEF0KHIsMSkpLHRyW0ErNDg2OCtpPj4wXT1sLCgwfChpPWkrMXwwKSk8KDB8YXJbZj4+Ml0pOyk7fWVsc2UgYXJbQSs0NzM2Pj4yXT0wfXdoaWxlKDApO2w9MjU1JigwfEF0KHIsMSkpLHRyW0ErNDkwMD4+MF09bCxsPTI1NSYoMHxBdChyLDEpKSx0cltBKzQ5MDE+PjBdPWwsbD0yNTUmKDB8QXQociwxKSksKHRyW0ErNDkwMj4+MF09bCk8PDI0Pj4yNCYmZnVuY3Rpb24oQSxlLHIsaSl7QXw9MCxlfD0wLGl8PTA7dmFyIGYsbix0PTAsbz0wLGE9MCxjPTA7bz0wIT0oMHxBdChyfD0wLDEpKSx0cltBPj4wXT0xJm87ZG97aWYobyl7aWYoKDB8KGk9MHxBdChyLDgpKSk8MTgpe29yW0ErMj4+MV09MHxvclsxNzc5NisoaTw8Mik+PjFdLGk9MHxvclsxNzc5NisoaTw8MikrMj4+MV07YnJlYWt9aWYoMjU1PT0oMHxpKSl7aT02NTUzNSYoMHxBdChyLDE2KSksb3JbQSsyPj4xXT1pLGk9NjU1MzUmKDB8QXQociwxNikpO2JyZWFrfW9yW0ErMj4+MV09MCxpPTA7YnJlYWt9b3JbQSsyPj4xXT0wLGk9MH13aGlsZSgwKTtvcltBKzQ+PjFdPWksbz0wIT0oMHxBdChyLDEpKSx0cltBKzY+PjBdPTEmbyxvJiYobz0wIT0oMHxBdChyLDEpKSYxLHRyW0ErNz4+MF09byk7aWYoYXJbKGk9QSsxMnwwKT4+Ml09NSx0clsodD1BKzE2fDApPj4wXT0wLHRyWyhmPUErMTh8MCk+PjBdPTIsdHJbKG49QSsxOXwwKT4+MF09Mix0clsobz1BKzIwfDApPj4wXT0yLGM9MCE9KDB8QXQociwxKSksdHJbQSs4Pj4wXT0xJmMsYyYmKGM9MHxBdChyLDMpLGFyW2k+PjJdPSgwfGMpPDU/Yzo1LGM9MCE9KDB8QXQociwxKSkmMSx0clt0Pj4wXT1jLGM9MCE9KDB8QXQociwxKSksdHJbQSsxNz4+MF09MSZjLGMpKXtzd2l0Y2goaT0wfEF0KHIsOCksYz0yNTUmaSwodHJbZj4+MF09Yyk8PDI0Pj4yNCl7Y2FzZSAzOmNhc2UgMDphPTE0O2JyZWFrO2RlZmF1bHQ6MTA8KDI1NSZpKT4+PjAmJihhPTE0KX1zd2l0Y2goMTQ9PSgwfGEpJiYodHJbZj4+MF09MiksaT0wfEF0KHIsOCksYz0yNTUmaSwodHJbbj4+MF09Yyk8PDI0Pj4yNCl7Y2FzZSAzOmNhc2UgMDphPTE3O2JyZWFrO2RlZmF1bHQ6MTc8KDI1NCZpKT4+PjAmJihhPTE3KX0xNz09KDB8YSkmJih0cltuPj4wXT0yKSxjPTB8QXQociw4KSx0cltvPj4wXT05PCgoMjU1JmMpLTF8MCk+Pj4wPzI6MjU1JmN9Yz0wIT0oMHxBdChyLDEpKSx0cltBKzIxPj4wXT0xJmM7ZG97aWYoYyl7aWYoLTk5OTk5PT0oMHwoaT0wfGl0KHIpKSkpcmV0dXJuIGVyKGUsOCwwKSxjPTg7aWYodHJbQSsyMj4+MF09aSwtOTk5OTk9PSgwfChpPTB8aXQocikpKSlyZXR1cm4gZXIoZSw4LDApLGM9ODtpJj0yNTU7YnJlYWt9dHJbQSsyMj4+MF09MCxpPTB9d2hpbGUoMCk7aWYodHJbQSsyMz4+MF09aSxjPTAhPSgwfEF0KHIsMSkpJjEsdHJbQSsyND4+MF09YyxjPTAhPSgwfEF0KHIsMSkpJjEsdHJbQSsyNT4+MF09YyxjPTAhPSgwfEF0KHIsMSkpJjEsdHJbQSsyNj4+MF09YyxjPTAhPSgwfEF0KHIsMSkpLHRyW0ErMjc+PjBdPTEmYyxjKXtpZigtOTk5OTk9PSgwfChpPTB8aXQocikpKSlyZXR1cm4gZXIoZSw4LDApLGM9ODtpZihhcltBKzI4Pj4yXT1pLC05OTk5OT09KDB8KGk9MHxpdChyKSkpKXJldHVybiBlcihlLDgsMCksYz04O2lmKGFyW0ErMzI+PjJdPWksLTk5OTk5PT0oMHwoaT0wfGl0KHIpKSkpcmV0dXJuIGVyKGUsOCwwKSxjPTg7aWYoYXJbQSszNj4+Ml09aSwtOTk5OTk9PSgwfChpPTB8aXQocikpKSlyZXR1cm4gZXIoZSw4LDApLGM9OH1lbHNlIGFyW0ErMjg+PjJdPTAsYXJbQSszMj4+Ml09MCxhcltBKzM2Pj4yXT0wLGk9MDthcltBKzQwPj4yXT1pLGM9MCE9KDB8QXQociwxKSksdHJbQSs0ND4+MF09MSZjLGMmJihjPTB8QXQociwzMiksYXJbQSs0OD4+Ml09YyxjPTB8QXQociwzMiksYXJbQSs1Mj4+Ml09Yyk7aWYoaT0wIT0oMHxBdChyLDEpKSYxLHRyW0ErNTY+PjBdPWksLTk5OTk5PT0oMHwoaT0wfGl0KHIpKSkpcmV0dXJuIGVyKGUsOCwwKSxjPTg7aWYoYXJbQSs2MD4+Ml09aSsxLGM9MCE9KDB8QXQociwxKSksdHJbQSs2ND4+MF09MSZjLGMpcmV0dXJuIGM9NTAyO2M9MCE9KDB8QXQociwxKSksdHJbQSs2NT4+MF09MSZjO2Rve2lmKGMpe2lmKGk9MCE9KDB8QXQociwxKSkmMSx0cltBKzY2Pj4wXT1pLGk9MCE9KDB8QXQociwxKSkmMSx0cltBKzY3Pj4wXT1pLGk9MCE9KDB8QXQociwxKSkmMSx0cltBKzY4Pj4wXT1pLC05OTk5OT09KDB8KGk9MHxpdChyKSkpKXJldHVybiBlcihlLDgsMCksYz04O2lmKDQwOTU8KDYxNDQwJihvclsodD1BKzcwfDApPj4xXT1pKSk+Pj4wJiYoZXIoZSw4LDApLG9yW3Q+PjFdPTApLC05OTk5OT09KDB8KGk9MHxpdChyKSkpKXJldHVybiBlcihlLDgsMCksYz04O2lmKDE2PCgyNTUmKHRyWyh0PUErNzJ8MCk+PjBdPWkpKT4+PjAmJihlcihlLDgsMCksdHJbdD4+MF09MiksLTk5OTk5PT0oMHwoaT0wfGl0KHIpKSkpcmV0dXJuIGVyKGUsOCwwKSxjPTg7aWYoMTY8KDI1NSYodHJbKHQ9QSs3M3wwKT4+MF09aSkpPj4+MCYmKGVyKGUsOCwwKSx0clt0Pj4wXT0xKSwtOTk5OTk9PSgwfChpPTB8aXQocikpKSlyZXR1cm4gZXIoZSw4LDApLGM9ODtpZigxNTwoMjQwJih0clsodD1BKzc0fDApPj4wXT1pKSk+Pj4wJiYoZXIoZSw4LDApLHRyW3Q+PjBdPTE1KSwtOTk5OTk9PSgwfCh0PTB8aXQocikpKSlyZXR1cm4gZXIoZSw4LDApLGM9ODtpZigxNTwoMjQwJih0clsoaT1BKzc1fDApPj4wXT10KSk+Pj4wKXtlcihlLDgsMCk7YnJlYWt9cmV0dXJuIGM9MH10cltBKzY2Pj4wXT0wLHRyW0ErNjc+PjBdPTEsdHJbQSs2OD4+MF09MCxvcltBKzcwPj4xXT0wLHRyW0ErNzI+PjBdPTIsdHJbQSs3Mz4+MF09MSx0cltBKzc0Pj4wXT0xNSxpPUErNzV8MH13aGlsZSgwKTt0cltpPj4wXT0xNSxjPTB9KEErNDkwNHwwLGUscixBKSxlPTI1NSYoMHxBdChyLDEpKSx0cltBKzQ5ODA+PjBdPWU7ZG97aWYoZTw8MjQ+PjI0KXtpZihsPTI1NSYoMHxBdChyLDEpKSx0clsoZT1BKzQ5ODF8MCk+PjBdPWwsbD0yNTUmKDB8QXQociwxKSksdHJbQSs0OTgyPj4wXT1sLGw9MjU1JigwfEF0KHIsNikpLHRyW0ErNDk4Mz4+MF09bCwhKDB8dHJbZT4+MF0pKWJyZWFrO2ljKEErNDk4NHwwLDAscil9ZWxzZSB0cltBKzQ5ODE+PjBdPTB9d2hpbGUoMCk7cmV0dXJuIDB8KGk9MHxmdW5jdGlvbihBKXt2YXIgZSxyLGksZixuLHQsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wLGQ9MCxrPTA7cz0wfGFyWzQ3NisoQXw9MCk+PjJdLGE9MHxhcls3OTg4KyhzPDwyKT4+Ml0sYXJbQSs1MDE2Pj4yXT1hLGM9MHxhcls4MDA0KyhzPDwyKT4+Ml0sYXJbQSs1MDIwPj4yXT1jLGQ9MD09KDB8YXJbQSs1MDEyPj4yXSksYXJbQSs1MDI0Pj4yXT1kPzE6YSxhcltBKzUwMjg+PjJdPWQ/MTpjLGQ9MHxhcltBKzUxMj4+Ml0sYXJbQSs0OTk2Pj4yXT1kLGFyW0ErNWUzPj4yXT0oNipkfDApLTQ4LGU9MHxhcltBKzUxNj4+Ml0sYXJbQSs1MDA0Pj4yXT1lLGFyW0ErNTAwOD4+Ml09KDYqZXwwKS00OCxyPTB8YXJbQSs2MTI+PjJdLGFyW0ErNTAzNj4+Ml09cixpPSgwfGFyW0ErNjE2Pj4yXSkrcnwwLGFyW0ErNTA0MD4+Ml09aSxmPTE8PHIsYXJbQSs1MDQ0Pj4yXT1mLG89MTw8aSxhcltBKzUwNDg+PjJdPW8sbj0wfGFyW0ErNDg0Pj4yXSxiPShmLTErbnwwKS8oMHxmKXwwLGFyW0ErNTA1Mj4+Ml09YixsPShuLTErb3wwKS8oMHxvKXwwLGFyW0ErNTA1Nj4+Ml09bCx0PTB8YXJbQSs0ODg+PjJdLGs9KCh1PXQtMXwwKStmfDApLygwfGYpfDAsYXJbQSs1MDYwPj4yXT1rLHU9KHUrb3wwKS8oMHxvKXwwLGFyW0ErNTA2ND4+Ml09dSxiPTB8YnIoayxiKSxhcltBKzUwNjg+PjJdPWIsYj0wfGJyKHUsbCksYXJbQSs1MDcyPj4yXT1iLGI9MHxicih0LG4pLGFyW0ErNTA3Nj4+Ml09YixvPTAhPSgwfHMpJiYwPT0oMHx0cltBKzQ4MD4+MF0pPyhhcltBKzUwODA+PjJdPSgwfG8pLygwfGEpfDAsKDB8bykvKDB8Yyl8MCk6KGFyW0ErNTA4MD4+Ml09MCwwKTtpZihhcltBKzUwODQ+PjJdPW8sYj0wfGFyW0ErNjIwPj4yXSxhcltBKzUxMDA+PjJdPWIscz0oMHxhcltBKzYyND4+Ml0pK2J8MCxhcltBKzUxMDQ+PjJdPXMsbz1pLWJ8MCwoMHxhcltBKzYyOD4+Ml0pPigwfG8pKXJldHVybiAwfChrPTgpO2lmKCgwfGFyW0ErNjMyPj4yXSk+KDB8bykpcmV0dXJuIDB8KGs9OCk7az1yLTF8MCxhcltBKzUxMDg+PjJdPWssaz1pLWt8MCxhcltBKzUxMTI+PjJdPWw8PGssYXJbQSs1MTE2Pj4yXT11PDxrLGs9MHxhcltBKzQ3MDg+PjJdLGFyW0ErNTEyMD4+Ml09ayxhcltBKzUxMjQ+PjJdPSgwfGFyW0ErNDcxMj4+Ml0pK2ssaz1sPDxvLGFyW0ErNTA4OD4+Ml09ayx1PDw9byxhcltBKzUwOTI+PjJdPXUsaz0wfGJyKHUsayksYXJbQSs1MDk2Pj4yXT1rLGw9MHx0cltBKzQ5OTA+PjBdPyhhPW89MCxjPTE8PGUtMSwxPDxkKy0xKToobz0yNDgrZSYyNTUsYT1kKzI0OCYyNTUsYz0xMjgpO2lmKHRyW0ErNTE1Nj4+MF09YSx0cltBKzUxNTc+PjBdPW8sYXJbQSs1MTYwPj4yXT1sLGFyW0ErNTE2ND4+Ml09YywoMHxuKSUoMHxmKXwwKXJldHVybiAwfChrPTgpO2lmKDAhPSgoMHx0KSUoMHxmKXwwKXwoMHxyKTwoMHxiKSlyZXR1cm4gMHwoaz04KTtpZigoMHwoKDB8aSk8NT9pOjUpKTwoMHxzKXw4PChkKy04fDApPj4+MHw4PChlLTh8MCk+Pj4wKXJldHVybiAwfChrPTgpO3JldHVybiB0cltBPj4wXT0xLChrPTApfGt9KEEpKT8wfChBPWkpOih0cltBPj4wXT0xLChBPTApfEEpfX1yZXR1cm4gMH0ocixBKzR8MCxlKSk/KEE9ZSxBYyhyKSx1cj1pLDB8QSk6KC0xPCgwfChlPTB8YXJbQSs1MTY+PjJdKSkmJmZ1bmN0aW9uKEEsZSl7QXw9MDt2YXIgcixpLGYsbix0LG8sYSxjLGwsdSxiLHMsZCxrLGgsdyx2LG0sZyxaLHAseSxCLEUsWCxXLEksQyxHLFYsRixSLE4sXyxZLFEsRCxKLE0sVCxVLFMsTyx6LGosSCx4LFAsTCxLPTAscT0wLCQ9MCxBQT0wLGVBPTAsckE9MCxpQT0wLGZBPTAsbkE9MCx0QT0wLG9BPTAsYUE9MCxjQT0wLGxBPTAsdUE9MCxiQT0wO3N3aXRjaCh1cj0oTD11cikrNDk2fDAsUD1MKzQ4MHwwLHg9TCs0NzJ8MCxIPUwrNDY0fDAsaj1MKzQ1NnwwLHo9TCs0NDh8MCxPPUwrNDQwfDAsUz1MKzQzMnwwLFU9TCs0MjR8MCxUPUwrNDE2fDAsTT1MKzQwOHwwLEo9TCs0MDB8MCxEPUwrMzkyfDAsYkE9TCszODR8MCxRPUwrMzc2fDAsWT1MKzM2OHwwLF89TCszNjB8MCxOPUwrMzQ0fDAsbEE9TCszMzZ8MCxjQT1MKzMyOHwwLEY9TCszMjB8MCxWPUwrMzEyfDAseT1MKzMwNHwwLHA9TCsyOTZ8MCxaPUwrMjg4fDAsZz1MKzI4MHwwLEc9TCsyNzJ8MCxDPUwrMjY0fDAsYUE9TCsyNTZ8MCxJPUwrMjQ4fDAsVz1MKzI0MHwwLFg9TCsyMzJ8MCxoPUwrMjI0fDAsaz1MKzIxNnwwLGQ9TCsyMDh8MCxzPUwrMjAwfDAsb0E9TCsxOTJ8MCx0QT1MKzE4NHwwLEU9TCsxNzZ8MCxCPUwrMTY4fDAsbT1MKzE2MHwwLHY9TCsxNTJ8MCx3PUwrMTQ0fDAsbkE9TCsxMzZ8MCxiPUwrMTI4fDAsdT1MKzEyMHwwLGw9TCsxMTJ8MCxjPUwrMTA0fDAsYT1MKzk2fDAsbz1MKzg4fDAsdD1MKzgwfDAsbj1MKzcyfDAsZkE9TCs2NHwwLGY9TCs1NnwwLGk9TCs0OHwwLHI9TCs0MHwwLHJBPUwrMzJ8MCxlQT1MKzI0fDAsQUE9TCsxNnwwLCQ9TCs4fDAscT1MLDB8KGV8PTApKXtjYXNlIDE6Sz0xMDE3MjticmVhaztjYXNlIDI6Sz0xMDY3NjticmVhaztkZWZhdWx0OnJldHVybiB1cj1MfXN3aXRjaChQbihSPTB8YXJbSz4+Ml0sNDE4NjUscSksYXJbJD4+Ml09dHJbQSsxPj4wXSxQbihSLDQxOTA2LCQpLGlBPUErMnwwLGFyW0FBPj4yXT10cltpQT4+MF0sUG4oUiw0MTkzNixBQSksYXJbZUE+PjJdPXRyW0ErMz4+MF0sUG4oUiw0MTk2NixlQSksZnVuY3Rpb24oQSxlLHIpe2V8PTA7dmFyIGksZixuO3tpZih1cj0obj11cikrMTZ8MCxmPW4sJG4oQXw9MCwxLHJ8PTApLGk9ZSstMXwwLCEoMTwoMHxlKSkpcmV0dXJuIHVyPW47ZT0wfWZvcig7YXJbZj4+Ml09ZSxQbihyLDQ0ODQ5LGYpLCRuKEErNTIrKDUyKmV8MCl8MCwwLHIpLGU9ZSsxfDAsKDB8ZSkhPSgwfGkpOyk7dXI9bn0oQSs0fDAsMHx0cltpQT4+MF0sUiksYXJbckE+PjJdPWFyW0ErNDcyPj4yXSxQbihSLDQyMDAxLHJBKSwwfChxPTB8YXJbKEs9QSs0NzZ8MCk+PjJdKSl7Y2FzZSAwOiQ9NDIwNDU7YnJlYWs7Y2FzZSAxOiQ9NDIwNTY7YnJlYWs7Y2FzZSAyOiQ9NDIwNjI7YnJlYWs7ZGVmYXVsdDokPTM9PSgwfHEpPzQyMDMxOjQyMDM3fWFyW3I+PjJdPXEsYXJbNCtyPj4yXT0kLFBuKFIsNDIwNjgsciksMz09KDB8YXJbSz4+Ml0pJiYoYXJbaT4+Ml09dHJbQSs0ODA+PjBdLFBuKFIsNDIxMDMsaSkpO2FyW2Y+PjJdPWFyW0ErNDg0Pj4yXSxQbihSLDQyMTM2LGYpLGFyW2ZBPj4yXT1hcltBKzQ4OD4+Ml0sUG4oUiw0MjE2OSxmQSksZkE9QSs0OTJ8MCxhcltuPj4yXT10cltmQT4+MF0sUG4oUiw0MjIwMixuKSwwfHRyW2ZBPj4wXSYmKGFyW3Q+PjJdPWFyW0ErNDk2Pj4yXSxQbihSLDQyMjM1LHQpLGFyW28+PjJdPWFyW0ErNTAwPj4yXSxQbihSLDQyMjYzLG8pLGFyW2E+PjJdPWFyW0ErNTA0Pj4yXSxQbihSLDQyMjkxLGEpLGFyW2M+PjJdPWFyW0ErNTA4Pj4yXSxQbihSLDQyMzE5LGMpKTtpZihhcltsPj4yXT1hcltBKzUxMj4+Ml0sUG4oUiw0MjM0NyxsKSxhclt1Pj4yXT1hcltBKzUxNj4+Ml0sUG4oUiw0MjM3MCx1KSxhcltiPj4yXT1hcltBKzUyMD4+Ml0sUG4oUiw0MjM5MyxiKSxLPUErNTI0fDAsYXJbbkE+PjJdPXRyW0s+PjBdLFBuKFIsNDI0MjYsbkEpLG5BPTB8dHJbaUE+PjBdLCgwfChLPTA9PSgwfHRyW0s+PjBdKT8obkE8PDI0Pj4yNCktMXwwOjApKTwobkE8PDI0Pj4yNHwwKSlmb3IoO2FyW3M+PjJdPUssUG4oUiw0Mjc1NixzKSxhcltkPj4yXT1hcltBKzUyOCsoSzw8Mik+PjJdLFBuKFIsNDI3NjYsZCksYXJbaz4+Ml09YXJbQSs1NTYrKEs8PDIpPj4yXSxQbihSLDQyODA1LGspLGFyW2g+PjJdPWFyW0ErNTg0KyhLPDwyKT4+Ml0sUG4oUiw0Mjg0NCxoKSxLPUsrMXwwLCgwfEspPCgwfHRyW2lBPj4wXSk7KTtpQT1BKzYxMnwwLGFyW3c+PjJdPWFyW2lBPj4yXSxQbihSLDQyNDczLHcpLHJBPUErNjE2fDAsYXJbdj4+Ml09YXJbckE+PjJdLFBuKFIsNDI1MTEsdiksZUE9QSs2MjB8MCxhclttPj4yXT1hcltlQT4+Ml0sUG4oUiw0MjU1OCxtKSxBQT1BKzYyNHwwLGFyW0I+PjJdPWFyW0FBPj4yXSxQbihSLDQyNTk2LEIpLGFyW0U+PjJdPWFyW0ErNjI4Pj4yXSxQbihSLDQyNjQxLEUpLGFyW3RBPj4yXT1hcltBKzYzMj4+Ml0sUG4oUiw0MjY4Myx0QSksdEE9QSs2MzZ8MCxhcltvQT4+Ml09dHJbdEE+PjBdLFBuKFIsNDI3MjUsb0EpLDB8dHJbdEE+PjBdJiYob0E9QSs2Mzd8MCxhcltYPj4yXT10cltvQT4+MF0sUG4oUiw0Mjg4MyxYKSwwfHRyW29BPj4wXSkmJlBuKFIsNDI5MjQsVyk7YXJbST4+Ml09dHJbQSs0NzAyPj4wXSxQbihSLDQyOTY4LEkpLGFyW2FBPj4yXT10cltBKzQ3MDM+PjBdLFBuKFIsNDMwMTAsYUEpLGFBPUErNDcwNHwwLGFyW0M+PjJdPXRyW2FBPj4wXSxQbihSLDQzMDUyLEMpLDB8dHJbYUE+PjBdJiYoYXJbRz4+Ml09dHJbQSs0NzA1Pj4wXSxQbihSLDQzMDk0LEcpLGFyW2c+PjJdPXRyW0ErNDcwNj4+MF0sUG4oUiw0MzEzMCxnKSxhcltaPj4yXT1hcltBKzQ3MDg+PjJdLFBuKFIsNDMxNjYsWiksYXJbcD4+Ml09YXJbQSs0NzEyPj4yXSxQbihSLDQzMjA4LHApLGFyW3k+PjJdPXRyW0ErNDcxNj4+MF0sUG4oUiw0MzI1OSx5KSk7aWYocT1BKzQ3MjB8MCwkPUErNDcyNHwwLGFyW1Y+PjJdPSgoMHxhclskPj4yXSktKDB8YXJbcT4+Ml0pfDApLzEwMHwwLFBuKFIsNDMyOTUsViksKDB8YXJbJD4+Ml0pIT0oMHxhcltxPj4yXSkpZm9yKEs9MDthcltjQT4+Ml09SyxQbihSLDQzMzY3LGNBKSxwYygoMHxhcltxPj4yXSkrKDEwMCpLfDApfDAsMTYsUiksKEs9SysxfDApPj4+MDwoKCgwfGFyWyQ+PjJdKS0oMHxhcltxPj4yXSl8MCkvMTAwfDApPj4+MDspO2lmKGNBPUErNDczMnwwLGFyW0Y+PjJdPXRyW2NBPj4wXSxQbihSLDQzMzI5LEYpLDB8dHJbY0E+PjBdJiYodUE9QSs0NzM2fDAsYXJbbEE+PjJdPWFyW3VBPj4yXSxQbihSLDQzMzg4LGxBKSwwPCgwfGFyW3VBPj4yXSkpKWZvcihLPTA7Y0E9MHxhcltBKzQ3NDArKEs8PDIpPj4yXSxsQT0wfHRyW0ErNDg2OCtLPj4wXSxhcltOPj4yXT1LLGFyWzQrTj4+Ml09Y0EsYXJbOCtOPj4yXT1sQSxQbihSLDQzNDIxLE4pLCgwfChLPUsrMXwwKSk8KDB8YXJbdUE+PjJdKTspO2FyW18+PjJdPXRyW0ErNDkwMD4+MF0sUG4oUiw0MzQ5MCxfKSxhcltZPj4yXT10cltBKzQ5MDE+PjBdLFBuKFIsNDM1MzEsWSksSz1BKzQ5MDJ8MCxhcltRPj4yXT10cltLPj4wXSxQbihSLDQzNTcyLFEpLGFyW2JBPj4yXT10cltBKzQ5ODA+PjBdLFBuKFIsNDM2MTMsYkEpLGJBPUErNDk4MXwwLGFyW0Q+PjJdPXRyW2JBPj4wXSxQbihSLDQzNjQ5LEQpLGFyW0o+PjJdPXRyW0ErNDk4Mj4+MF0sUG4oUiw0MzY4NSxKKSxhcltNPj4yXT10cltBKzQ5ODM+PjBdLFBuKFIsNDM3MjEsTSksYXJbVD4+Ml09YXJbQSs1MDQ4Pj4yXSxQbihSLDQzNzU3LFQpLGFyW1U+PjJdPWFyW0ErNTA0ND4+Ml0sUG4oUiw0Mzc3NixVKSxhcltTPj4yXT0xPDwoMHxhcltyQT4+Ml0pKygwfGFyW2lBPj4yXSksUG4oUiw0Mzc5NSxTKSxhcltPPj4yXT0xPDxhcltlQT4+Ml0sUG4oUiw0MzgxNCxPKSxhclt6Pj4yXT0xPDwoMHxhcltBQT4+Ml0pKygwfGFyW2VBPj4yXSksUG4oUiw0MzgzMyx6KSxhcltqPj4yXT1hcltBKzUwNTY+PjJdLFBuKFIsNDM4NTIsaiksYXJbSD4+Ml09YXJbQSs1MDY0Pj4yXSxQbihSLDQzODgyLEgpLGFyW3g+PjJdPWFyW0ErNTAxNj4+Ml0sUG4oUiw0MzkxMix4KSxhcltQPj4yXT1hcltBKzUwMjA+PjJdLFBuKFIsNDM5NDIsUCksMHx0cltiQT4+MF0mJmZ1bmN0aW9uKEEsZSl7QXw9MDt2YXIgcixpLGYsbix0LG8sYSxjLGwsdSxiO3N3aXRjaCh1cj0oYj11cikrODB8MCxhPWIrNzJ8MCxvPWIrNjR8MCx0PWIrNTZ8MCxuPWIrNDh8MCxmPWIrNDB8MCx1PWIrMzJ8MCxsPWIrMjR8MCxjPWIrMTZ8MCxpPWIrOHwwLHI9YiwwfChlfD0wKSl7Y2FzZSAxOmU9MTAxNzI7YnJlYWs7Y2FzZSAyOmU9MTA2NzY7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gdXI9Yn1QbihlPTB8YXJbZT4+Ml0sNDM5NzIsciksYXJbaT4+Ml09Y3JbQT4+MF0sUG4oZSw0NDAyOSxpKSxhcltjPj4yXT1jcltBKzE+PjBdLFBuKGUsNDQwNzUsYyksYXJbbD4+Ml09Y3JbQSsyPj4wXSxQbihlLDQ0MTIxLGwpLGFyW3U+PjJdPWNyW0ErMz4+MF0sUG4oZSw0NDE2Nyx1KSxhcltmPj4yXT1jcltBKzQ+PjBdLFBuKGUsNDQyMTMsZiksYXJbbj4+Ml09Y3JbQSs1Pj4wXSxQbihlLDQ0MjU5LG4pLGFyW3Q+PjJdPWNyW0ErNj4+MF0sUG4oZSw0NDMwNSx0KSxhcltvPj4yXT1jcltBKzc+PjBdLFBuKGUsNDQzNTEsbyksYXJbYT4+Ml09Y3JbQSs4Pj4wXSxQbihlLDQ0Mzk3LGEpLHVyPWJ9KEErNDk4NHwwLGUpOzB8dHJbSz4+MF0mJmZ1bmN0aW9uKEEsZSl7QXw9MDt2YXIgcixpLGYsbix0LG8sYSxjLGwsdSxiLHMsZCxrLGgsdyx2LG0sZyxaLHAseSxCLEUsWCxXLEksQyxHLFYsRixSLE4sXyxZPTAsUT0wLEQ9MCxKPTAsTT0wO3N3aXRjaCh1cj0oXz11cikrMzA0fDAsYT1fKzI4OHwwLG89XysyODB8MCx0PV8rMjcyfDAsTj1fKzI2NHwwLFI9XysyNTZ8MCxGPV8rMjQ4fDAsVj1fKzI0MHwwLEc9XysyMzJ8MCxDPV8rMjI0fDAsTT1fKzIxNnwwLEk9XysyMDh8MCxXPV8rMjAwfDAsWD1fKzE5MnwwLEU9XysxODR8MCxCPV8rMTc2fDAsSj1fKzE2OHwwLHk9XysxNjB8MCxwPV8rMTUyfDAsWj1fKzE0NHwwLGc9XysxMzZ8MCxtPV8rMTI4fDAsdj1fKzEyMHwwLHc9XysxMTJ8MCxoPV8rMTA0fDAsaz1fKzk2fDAsZD1fKzg4fDAsRD1fKzgwfDAscz1fKzcyfDAsYj1fKzY0fDAsdT1fKzU2fDAsbD1fKzQ4fDAsYz1fKzQwfDAsZj1fKzMyfDAsUT1fKzI0fDAsbj1fKzE2fDAsaT1fKzh8MCxZPV8sMHwoZXw9MCkpe2Nhc2UgMTplPTEwMTcyO2JyZWFrO2Nhc2UgMjplPTEwNjc2O2JyZWFrO2RlZmF1bHQ6cmV0dXJuIHVyPV99aWYoUG4ocj0wfGFyW2U+PjJdLDQ1OTY5LFkpLFk9MHxscltBKzQ+PjFdLGFyW2k+PjJdPWxyW0ErMj4+MV0sYXJbNCtpPj4yXT1ZLFBuKHIsNDYwMTAsaSksYXJbbj4+Ml09Y3JbQSs2Pj4wXSxQbihyLDQ2MDQ2LG4pLGFyW1E+PjJdPWNyW0ErNz4+MF0sUG4ociw0NjA3OSxRKSxRPUErOHwwLGFyW2Y+PjJdPWNyW1E+PjBdLFBuKHIsNDYxMTIsZiksMHx0cltRPj4wXSl7c3dpdGNoKDB8YXJbQSsxMj4+Ml0pe2Nhc2UgMDplPTQ1OTU5O2JyZWFrO2Nhc2UgMTplPTQ1OTU1O2JyZWFrO2Nhc2UgMjplPTQ1OTUwO2JyZWFrO2Nhc2UgMzplPTQ1OTQ0O2JyZWFrO2Nhc2UgNDplPTQ1OTQwO2JyZWFrO2RlZmF1bHQ6ZT00NTkyOH1hcltjPj4yXT1lLFBuKHIsNDYxNDgsYyksYXJbbD4+Ml09Y3JbQSsxNj4+MF0sUG4ociw0NjE4NCxsKSxhclt1Pj4yXT1jcltBKzE3Pj4wXSxQbihyLDQ2MjIwLHUpLGFyW2I+PjJdPWNyW0ErMTg+PjBdLFBuKHIsNDYyNjAsYiksYXJbcz4+Ml09Y3JbQSsxOT4+MF0sUG4ociw0NjI5NixzKSxhcltEPj4yXT1jcltBKzIwPj4wXSxQbihyLDQ2MzMyLEQpfUQ9QSsyMXwwLGFyW2Q+PjJdPWNyW0Q+PjBdLFBuKHIsNDYzNjgsZCksMHx0cltEPj4wXSYmKGFyW2s+PjJdPWNyW0ErMjI+PjBdLFBuKHIsNDY0MDIsayksYXJbaD4+Ml09Y3JbQSsyMz4+MF0sUG4ociw0NjQ0NSxoKSk7YXJbdz4+Ml09Y3JbQSsyND4+MF0sUG4ociw0NjQ4OCx3KSxhclt2Pj4yXT1jcltBKzI1Pj4wXSxQbihyLDQ2NTI0LHYpLGFyW20+PjJdPWNyW0ErMjY+PjBdLFBuKHIsNDY1NjAsbSksYXJbZz4+Ml09Y3JbQSsyNz4+MF0sUG4ociw0NjU5NixnKSxhcltaPj4yXT1hcltBKzI4Pj4yXSxQbihyLDQ2NjMyLFopLGFyW3A+PjJdPWFyW0ErMzI+PjJdLFBuKHIsNDY2NjgscCksYXJbeT4+Ml09YXJbQSszNj4+Ml0sUG4ociw0NjcwNCx5KSxhcltKPj4yXT1hcltBKzQwPj4yXSxQbihyLDQ2NzQwLEopLEo9QSs0NHwwLGFyW0I+PjJdPWNyW0o+PjBdLFBuKHIsNDY3NzYsQiksMHx0cltKPj4wXSYmKGFyW0U+PjJdPWFyW0ErNDg+PjJdLFBuKHIsNDY4MTIsRSksYXJbWD4+Ml09YXJbQSs1Mj4+Ml0sUG4ociw0Njg0OCxYKSk7YXJbVz4+Ml09Y3JbQSs1Nj4+MF0sUG4ociw0Njg4NCxXKSxhcltJPj4yXT1hcltBKzYwPj4yXSxQbihyLDQ2OTI2LEkpLGFyW00+PjJdPWNyW0ErNjQ+PjBdLFBuKHIsNDY5NjgsTSksTT1BKzY1fDAsYXJbQz4+Ml09Y3JbTT4+MF0sUG4ociw0NzAwNixDKSwwfHRyW00+PjBdJiYoYXJbRz4+Ml09Y3JbQSs2Nj4+MF0sUG4ociw0NzA0NyxHKSxhcltWPj4yXT1jcltBKzY3Pj4wXSxQbihyLDQ3MDg4LFYpLGFyW0Y+PjJdPWNyW0ErNjg+PjBdLFBuKHIsNDcxMzYsRiksYXJbUj4+Ml09bHJbQSs3MD4+MV0sUG4ociw0NzE3NyxSKSxhcltOPj4yXT1jcltBKzcyPj4wXSxQbihyLDQ3MjE4LE4pLGFyW3Q+PjJdPWNyW0ErNzM+PjBdLFBuKHIsNDcyNTksdCksYXJbbz4+Ml09Y3JbQSs3ND4+MF0sUG4ociw0NzMwMCxvKSxhclthPj4yXT1jcltBKzc1Pj4wXSxQbihyLDQ3MzQxLGEpKSx1cj1ffShBKzQ5MDR8MCxlKSx1cj1MfShyLGUpLGhiKDB8KGY9QSsxMTA5NisoNTE2OCooZT0wfGFyW3IrNDcyPj4yXSl8MCl8MCksMHxyLDQ3MTcpLCgwfGYpIT0oMHxyKSYmS2UoQSsxMTA5NisoNTE2OCplfDApKzQ3MjB8MCwwfGFyW3IrNDcyMD4+Ml0sMHxhcltyKzQ3MjQ+PjJdKSxoYihBKzExMDk2Kyg1MTY4KmV8MCkrNDczMnwwLHIrNDczMnwwLDQzNiksZj0wLEFjKHIpLHVyPWksMHxmKX1mdW5jdGlvbiBLZShBLGUscil7dmFyIGksZixuLHQ9MCxvPTAsYT0wLGM9MCxsPTA7aWYoKGE9KDB8KGM9KGk9cnw9MCktKGV8PTApfDApKS8xMDB8MCk+Pj4wPD0oKCh0PTB8YXJbKGY9KEF8PTApKzh8MCk+PjJdKS0obj1sPTB8YXJbQT4+Ml0pfDApLzEwMHwwKT4+PjApcmV0dXJuIDB8KHQ9KG89YT0oQT0obz0oKDB8YXJbKGM9QSs0fDApPj4yXSktbHwwKS8xMDB8MCk+Pj4wPGE+Pj4wKT9lKygxMDAqb3wwKXwwOnIpLWV8MCkmJndiKDB8bCwwfGUsMHx0KSxyPW4rKDEwMCooKDB8dCkvMTAwfDApfDApfDAsQT8hKCgwfCh0PWktb3wwKSk8PTApJiYoaGIoMHxhcltjPj4yXSwwfGEsMHx0KSx2b2lkKGFyW2M+PjJdPSgwfGFyW2M+PjJdKSsoMTAwKigodD4+PjApLzEwMHwwKXwwKSkpOigwfCh0PTB8YXJbYz4+Ml0pKSE9KDB8cikmJnZvaWQoYXJbYz4+Ml09dCsoMTAwKn4oKCh0Ky0xMDAtcnwwKT4+PjApLzEwMHwwKXwwKSk7KG89bCkmJigoMHwocj0wfGFyWyh0PUErNHwwKT4+Ml0pKSE9KDB8bikmJihhclt0Pj4yXT1yKygxMDAqfigoKHIrLTEwMC1sfDApPj4+MCkvMTAwfDApfDApKSx2dShvKSxhcltmPj4yXT0wLGFyW3Q+PjJdPTAsdD1hcltBPj4yXT0wKSw0Mjk0OTY3MjxhPj4+MCYmemwoKSx0PShsPSgwfHQpLzEwMHwwKTw8MSw0Mjk0OTY3MjwodD1sPj4+MDwyMTQ3NDgzNj90Pj4+MDxhPj4+MD9hOnQ6NDI5NDk2NzIpPj4+MCYmemwoKSxyPTB8aHUoMTAwKnR8MCksYXJbKG89QSs0fDApPj4yXT1yLGFyW0E+PjJdPXIsYXJbZj4+Ml09cisoMTAwKnR8MCksKDB8Yyk8PTB8fChoYigwfHIsMHxlLDB8YyksYXJbbz4+Ml09cisoMTAwKigoYz4+PjApLzEwMHwwKXwwKSl9ZnVuY3Rpb24gcWUoQSxlKXtBfD0wLGV8PTA7dmFyIHIsaSxmLG49MDtyZXR1cm4gdXI9KGY9dXIpKzQ0MDB8MCxJYShpPWYpLHI9MHxmdW5jdGlvbihBLGUscil7ZXw9MCxyfD0wO3ZhciBpPTAsZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MDtpZihDYShBfD0wLDApLHU9MHxpdChlKSw2MzwoMHwodHJbQSsxPj4wXT11KSl8LTk5OTk5PT0oMHx1KSlyZXR1cm4gZXIocis0fDAsMTAwOSwwKSwocj0wKXxyO2lmKHU9MHxpdChlKSw2MzwoMHwodHJbKG49QSsyfDApPj4wXT11KSl8LTk5OTk5PT0oMHx1KSlyZXR1cm4gZXIocis0fDAsMTAxMCwwKSwocj0wKXxyO2lmKHU9MjU1JigwfEF0KGUsMSkpLHRyW0ErMz4+MF09dSx1PTI1NSYoMHxBdChlLDEpKSx0cltBKzMxPj4wXT11LHU9MjU1JigwfEF0KGUsMykpLHRyW0ErNDEzMj4+MF09dSx1PTI1NSYoMHxBdChlLDEpKSx0cltBKzQ+PjBdPXUsdT0yNTUmKDB8QXQoZSwxKSksdHJbQSs1Pj4wXT11LHU9MHxpdChlKSxpPTI1NSZ1LHRyWyhmPUErNnwwKT4+MF09aSwtOTk5OTk9PSgwfHUpKXJldHVybiBlcihyKzR8MCwxMDA2LDApLChyPTApfHI7aWYodHJbZj4+MF09aSsxPDwyND4+MjQsdT0wfGl0KGUpLGk9MjU1JnUsdHJbKGY9QSs3fDApPj4wXT1pLC05OTk5OT09KDB8dSkpcmV0dXJuIGVyKHIrNHwwLDEwMDYsMCksKHI9MCl8cjtpZih0cltmPj4wXT1pKzE8PDI0Pj4yNCxsPTB8dHJbbj4+MF0sISgwfHRyWyh1PXIrMTEwOTYrKDUxNjgqbHwwKXwwKT4+MF0pKXJldHVybiBlcihyKzR8MCwxMDEwLDApLChyPTApfHI7aWYoaT0wfGZ0KGUpLC05OTk5OT09KDB8KGFyWyhmPUErOHwwKT4+Ml09aSkpKXJldHVybiBlcihyKzR8MCwxMDA2LDApLChyPTApfHI7aWYoYXJbZj4+Ml09aSsyNixjPTI1NSYoMHxBdChlLDEpKSx0cltBKzEyPj4wXT1jLGM9MjU1JigwfEF0KGUsMSkpLHRyW0ErMTM+PjBdPWMsYz0yNTUmKDB8QXQoZSwxKSksKHRyW0ErMTQ+PjBdPWMpPDwyND4+MjQpe2lmKGM9MHxpdChlKSwtOTk5OTk9PSgwfChhcltBKzE2Pj4yXT1jKSkpcmV0dXJuIGVyKHIrNHwwLDEwMDYsMCksKHI9MCl8cn1lbHNlIGFyW0ErMTY+PjJdPTA7aWYoYz0wfGZ0KGUpLC05OTk5OT09KDB8KGFyW0ErMjA+PjJdPWMpKSlyZXR1cm4gZXIocis0fDAsMTAwNiwwKSwocj0wKXxyO2lmKGM9MHxmdChlKSwtOTk5OTk9PSgwfChhcltBKzI0Pj4yXT1jKSkpcmV0dXJuIGVyKHIrNHwwLDEwMDYsMCksKHI9MCl8cjtpZihhPTI1NSYoMHxBdChlLDEpKSx0cltBKzI4Pj4wXT1hLGE9MjU1JigwfEF0KGUsMSkpLHRyW0ErMjk+PjBdPWEsYT0yNTUmKDB8QXQoZSwxKSksdHJbQSszMD4+MF09YSxhPTI1NSYoMHxBdChlLDEpKSx0cltBKzMyPj4wXT1hLGE9MjU1JigwfEF0KGUsMSkpLHRyWyhjPUErMzR8MCk+PjBdPWEsYT0yNTUmKDB8QXQoZSwxKSksdHJbQSszMz4+MF09YSwwfHRyW2M+PjBdKXtpZihpPTB8aXQoZSksLTk5OTk5PT0oMHwoYXJbKGE9QSszNnwwKT4+Ml09aSkpfDk8KDB8aSkpcmV0dXJuIGVyKHIrNHwwLDEwMDYsMCksKHI9MCl8cjtpZihhclthPj4yXT1pKzEsaT0wfGl0KGUpLC05OTk5OT09KDB8KGFyWyhjPUErNDB8MCk+PjJdPWkpKXw5PCgwfGkpKXJldHVybiBlcihyKzR8MCwxMDA2LDApLChyPTApfHI7YXJbYz4+Ml09aSsxLG89MHxBdChlLDEpLHRyW0ErNDQ+PjBdPW87ZG97aWYoISgyNTUmbykpe249MHxhcltyKzExMDk2Kyg1MTY4Kmx8MCkrNTA1Nj4+Ml0sZj0wfGFyW3IrMTEwOTYrKDUxNjgqbHwwKSs1MDY0Pj4yXSxvPTB8YXJbYT4+Ml0saT1vKy0xfDA7QTpkb3tpZigxPCgwfG8pKXtmb3Iobz0wO2k9MHxpdChlKSwtOTk5OTkhPSgwfChhclsodD1BKzQxNzIrKG88PDIpfDApPj4yXT1pKSk7KWlmKGk9aSsxfDAsYXJbdD4+Ml09aSxuPW4taXwwLG89bysxfDAsKDB8KGk9KDB8YXJbYT4+Ml0pLTF8MCkpPD0oMHxvKSlicmVhayBBO3JldHVybiBlcihyKzR8MCwxMDA2LDApLChyPTApfHJ9fXdoaWxlKDApO2lmKCgwfG4pPDEpcmV0dXJuKHI9MCl8cjthcltBKzQxNzIrKGk8PDIpPj4yXT1uLGE9MHxhcltjPj4yXSxpPWErLTF8MDtBOmRve2lmKDE8KDB8YSkpe2Zvcih0PTA7aT0wfGl0KGUpLC05OTk5OSE9KDB8KGFyWyhuPUErNDIxMisodDw8Mil8MCk+PjJdPWkpKTspaWYoaT1pKzF8MCxhcltuPj4yXT1pLGY9Zi1pfDAsdD10KzF8MCwoMHwoaT0oMHxhcltjPj4yXSktMXwwKSk8PSgwfHQpKWJyZWFrIEE7cmV0dXJuIGVyKHIrNHwwLDEwMDYsMCksKHI9MCl8cn19d2hpbGUoMCk7aWYoKDB8Zik8MSlyZXR1cm4ocj0wKXxyO2FyW0ErNDIxMisoaTw8Mik+PjJdPWY7YnJlYWt9fXdoaWxlKDApO2k9MjU1JigwfEF0KGUsMSkpfWVsc2UgYXJbQSszNj4+Ml09MSxhcltBKzQwPj4yXT0xLHRyW0ErNDQ+PjBdPTEsaT0wO3RyW0ErNDU+PjBdPWksYXJbKGk9QSs1MnwwKT4+Ml09MCxhclsobj1BKzU2fDApPj4yXT0wLGM9MjU1JigwfEF0KGUsMSkpLHRyW0ErNDY+PjBdPWMsYz0yNTUmKDB8QXQoZSwxKSksdHJbQSs0Nz4+MF09Yztkb3tpZihjPDwyND4+MjQpe2lmKGM9MjU1JigwfEF0KGUsMSkpLHRyW0ErNDg+PjBdPWMsYz0yNTUmKDB8QXQoZSwxKSksISgodHJbQSs0OT4+MF09Yyk8PDI0Pj4yNCkpe2lmKGY9MHxmdChlKSwtOTk5OTk9PSgwfChhcltpPj4yXT1mKSkpcmV0dXJuIGVyKHIrNHwwLDEwMDYsMCksKHI9MCl8cjtpZihhcltpPj4yXT1mPDwxLGk9MHxmdChlKSwtOTk5OTk9PSgwfChhcltuPj4yXT1pKSkpcmV0dXJuIGVyKHIrNHwwLDEwMDYsMCksKHI9MCl8cjthcltuPj4yXT1pPDwxO2JyZWFrfX1lbHNlIHRyW0ErNDg+PjBdPTAsdHJbQSs0OT4+MF09MH13aGlsZSgwKTtpZihjPTB8QXQoZSwxKSxpPTI1NSZjLHRyW0ErNjA+PjBdPWksMCE9KDI1NSZjfDApJiYwPT0oMHx0cltyKzExMDk2Kyg1MTY4Kmx8MCkrNjM2Pj4wXSkpcmV0dXJuIGVyKHIrNHwwLDEwMDYsMCksKHI9MCl8cjtpZihpPDwyND4+MjQpe2lmKDB8KGk9MHxlYyhlLHUsQSs2MXwwLDEpKSlyZXR1cm4gZXIocis0fDAsaSwwKSwocj0wKXxyfWVsc2UgaGIoQSs2MXwwLHIrMTEwOTYrKDUxNjgqbHwwKSs2Mzh8MCw0MDY0KTtpZihpPTI1NSYoMHxBdChlLDEpKSx0cltBKzQxMjU+PjBdPWksaT0wfGl0KGUpLC05OTk5OT09KDB8KGFyWyhmPUErNDEyOHwwKT4+Ml09aSkpKXJldHVybiBlcihyKzR8MCwxMDA2LDApLChyPTApfHI7aWYoYXJbZj4+Ml09aSsyLCgwfGkpPigoMHxhcltyKzExMDk2Kyg1MTY4Kmx8MCkrNjEyPj4yXSktMisoMHxhcltyKzExMDk2Kyg1MTY4Kmx8MCkrNjE2Pj4yXSl8MCkpcmV0dXJuKHI9MCl8cjtyZXR1cm4gbD0yNTUmKDB8QXQoZSwxKSksdHJbQSs0MTMzPj4wXT1sLGw9MjU1JigwfEF0KGUsMSkpLCEoKHRyW0ErNDEzND4+MF09bCk8PDI0Pj4yNCYmKGM9MjU1JigwfEF0KGUsMSkpLHRyWyhsPUErNDEzNXwwKT4+MF09YyxjPTI1NSYoMHxBdChlLDEpKSx0cltBKzQxMzY+PjBdPWMsYz0yNTUmKDB8QXQoZSw2KSksdHJbQSs0MTM3Pj4wXT1jLDB8dHJbbD4+MF0pKXx8MHxmdW5jdGlvbihBLGUscixpKXtBfD0wLGV8PTAscnw9MDt2YXIgZixuPTAsdD0wLG89MDtmPTB8dHJbMisoaXw9MCk+PjBdLDB8dHJbaSsxMz4+MF0mJih0PTIrKDB8aXQoZSkpJjI1NSx0cltBPj4wXT10KTt0PTAhPSgwfEF0KGUsMSkpLHRyW0ErMT4+MF09MSZ0LDM9PSgwfGFyWyhuPXIrMTEwOTYrKDUxNjgqZnwwKSs1MDEyfDApPj4yXSl8MV50fHxlcihyKzR8MCwxMDA2LDApO289MCE9KDB8QXQoZSwxKSksaT0xJm8sdHJbKHQ9QSsyfDApPj4wXT1pLDAhPSgwfGFyW24+PjJdKXwxXm98fChlcihyKzR8MCwxMDA2LDApLGk9MHx0clt0Pj4wXSk7QTpkb3tpZihpPDwyND4+MjQpe2lmKC05OTk5OSE9KDB8KGk9MHxpdChlKSkpJiYoMHxpKTw9KDB8YXJbcisxMTA5NisoNTE2OCpmfDApKzYxNj4+Ml0pKXtpZih0cltBKzM+PjBdPWksLTk5OTk5PT0oMHwoaT0wfGl0KGUpKSl8NTwoMHxpKSlyZXR1cm4gZXIocis0fDAsMTAwNiwwKSwobz0wKXxvO2lmKG89aSsxfDAsISgyNTUmKHRyWyh0PUErNHwwKT4+MF09bykpKWJyZWFrO2ZvcihuPTA7Oyl7aWYoMjQ8KChpPTB8ZnQoZSkpKzEyfDApPj4+MCl7aT0xNTticmVha31pZih0cltBKzUrbj4+MF09aSwyNDwoKGk9MHxmdChlKSkrMTJ8MCk+Pj4wKXtpPTE3O2JyZWFrfWlmKHRyW0ErMTErbj4+MF09aSwoMHwobj1uKzF8MCkpPj0oMHxjclt0Pj4wXSkpYnJlYWsgQX1pZigxNT09KDB8aSkpcmV0dXJuIGVyKHIrNHwwLDEwMDYsMCksKG89MCl8bztpZigxNz09KDB8aSkpcmV0dXJuIGVyKHIrNHwwLDEwMDYsMCksKG89MCl8b31yZXR1cm4gZXIocis0fDAsMTAwNiwwKSwobz0wKXxvfX13aGlsZSgwKTtpZigtOTk5OTkhPSgwfChpPTB8aXQoZSkpKSYmKG89MHxhcltyKzExMDk2Kyg1MTY4KmZ8MCkrNDk5Nj4+Ml0sKDB8aSk8PSgwfCgoMHxvKTwxMD8wOm8rLTEwfDApKSkpcmV0dXJuIHRyW0ErMTc+PjBdPWksLTk5OTk5IT0oMHwoaT0wfGl0KGUpKSkmJihvPTB8YXJbcisxMTA5NisoNTE2OCpmfDApKzUwMDQ+PjJdLCgwfGkpPD0oMHwoKDB8byk8MTA/MDpvKy0xMHwwKSkpPyh0cltBKzE4Pj4wXT1pLDB8KG89MSkpOihlcihyKzR8MCwxMDA2LDApLChvPTApfG8pO3JldHVybiBlcihyKzR8MCwxMDA2LDApLChvPTApfG99KEErNDEzOHwwLGUscixBKT8oZnVuY3Rpb24oQSxlKXtBfD0wO3ZhciByLGksZixuLHQsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wLGQ9MCxrPTAsaD0wLHc9MCx2PTAsbT0wLGc9MCxaPTAscD0wLHk9MCxCPTA7aWYodD11cix5PTB8YXJbKG49NTA0MCsoZXw9MCl8MCk+PjJdLGFyW0ErNDE2MD4+Ml09eS0oMHxhcltBKzE2Pj4yXSksYXJbQSs0MTY0Pj4yXT15LSgwfGNyW0ErNDE0MT4+MF0pLGFyW0ErNDE2OD4+Ml09Y3JbQSs0MTM4Pj4wXSx5PUErMzZ8MCwwfHRyW0ErNDQ+PjBdKXtpZihhPTB8YXJbeT4+Ml0sdXI9KGw9dXIpKygxNSsoNCsoYTw8Mil8MCkmLTE2KXwwLDA8PSgwfGEpKXtmb3IoYz0wfGFyW2UrNTA1Nj4+Ml0sbz0wO0I9KDB8YnIoYyxvKSkvKDB8YSl8MCxhcltsKyhvPDwyKT4+Ml09QiwoMHxvKSE9KDB8YSk7KW89bysxfDA7aWYoMDwoMHxhKSlmb3IoYT0obz0wKXxhcltsPj4yXTtwPWEsYT0wfGFyW2wrKChvPShCPW8pKzF8MCk8PDIpPj4yXSxhcltBKzQxNzIrKEI8PDIpPj4yXT1hLXAsKDB8byk8KDB8YXJbeT4+Ml0pOyk7fWlmKGE9MHxhclsobD1BKzQwfDApPj4yXSx1cj0odT11cikrKDE1Kyg0KyhhPDwyKXwwKSYtMTYpfDAsMDw9KDB8YSkpe2ZvcihjPTB8YXJbZSs1MDY0Pj4yXSxvPTA7Qj0oMHxicihjLG8pKS8oMHxhKXwwLGFyW3UrKG88PDIpPj4yXT1CLCgwfG8pIT0oMHxhKTspbz1vKzF8MDtpZigwPCgwfGEpKWZvcihhPShvPTApfGFyW3U+PjJdO3A9YSxhPTB8YXJbdSsoKG89KEI9bykrMXwwKTw8Mik+PjJdLGFyW0ErNDIxMisoQjw8Mik+PjJdPWEtcCwoMHxvKTwoMHxhcltsPj4yXSk7KTt9fWlmKGFyW0ErNDI1Mj4+Ml09MCwwPCgwfGFyW3k+PjJdKSlmb3IoYT1vPTA7YT0oMHxhcltBKzQxNzIrKG88PDIpPj4yXSkrYXwwLGFyW0ErNDI1MisoKG89bysxfDApPDwyKT4+Ml09YSwoMHxvKTwoMHxhclt5Pj4yXSk7KTtpZihhcltBKzQyOTY+PjJdPTAsMDwoMHxhclsocD1BKzQwfDApPj4yXSkpZm9yKGE9bz0wO289KDB8YXJbQSs0MjEyKyhhPDwyKT4+Ml0pK298MCxhcltBKzQyOTYrKChhPWErMXwwKTw8Mik+PjJdPW8sKDB8YSk8KDB8YXJbcD4+Ml0pOyk7Qj1BKzQzNDB8MCxhPTB8YXJbKHY9ZSs1MDcyfDApPj4yXSx1PTB8YXJbKG89QSs0MzQ0fDApPj4yXSxsPTB8YXJbQj4+Ml0sYT4+PjA8PShjPXUtbD4+Mik+Pj4wP2E+Pj4wPGM+Pj4wJiYoMHx1KSE9KDB8KGI9bCsoYTw8Mil8MCkpJiYoYXJbbz4+Ml09dSsofigodSstNC1ifDApPj4+Mik8PDIpKTooVmEoQixhLWN8MCksYT0wfGFyW3Y+PjJdKTt3PUErNDM1MnwwLGw9MHxhclsodT1BKzQzNTZ8MCk+PjJdLGM9MHxhclt3Pj4yXSxhPj4+MDw9KG89bC1jPj4yKT4+PjA/YT4+PjA8bz4+PjAmJigwfGwpIT0oMHwocz1jKyhhPDwyKXwwKSkmJihhclt1Pj4yXT1sKyh+KChsKy00LXN8MCk+Pj4yKTw8MikpOihWYSh3LGEtb3wwKSxhPTB8YXJbdj4+Ml0pO2k9QSs0MzY0fDAsdT0wfGFyWyhvPUErNDM2OHwwKT4+Ml0sbD0wfGFyW2k+PjJdLGE+Pj4wPD0oYz11LWw+PjIpPj4+MD9hPj4+MDxjPj4+MCYmKDB8dSkhPSgwfChkPWwrKGE8PDIpfDApKSYmKGFyW28+PjJdPXUrKH4oKHUrLTQtZHwwKT4+PjIpPDwyKSk6KFZhKGksYS1jfDApLGE9MHxhclt2Pj4yXSk7cj1BKzQzNzZ8MCx1PTB8YXJbKG89QSs0MzgwfDApPj4yXSxsPTB8YXJbcj4+Ml0sYT4+PjA8PShjPXUtbD4+Mik+Pj4wP2E+Pj4wPGM+Pj4wJiYoMHx1KSE9KDB8KGs9bCsoYTw8Mil8MCkpJiYoYXJbbz4+Ml09dSsofigodSstNC1rfDApPj4+Mik8PDIpKTpWYShyLGEtY3wwKTtmPUErNDM4OHwwLG89MHxhcltlKzUwOTY+PjJdLHU9MHxhclsoYT1BKzQzOTJ8MCk+PjJdLGw9MHxhcltmPj4yXSxvPj4+MDw9KGM9dS1sPj4yKT4+PjA/bz4+PjA8Yz4+PjAmJigwfHUpIT0oMHwoaD1sKyhvPDwyKXwwKSkmJihhclthPj4yXT11Kyh+KCh1Ky00LWh8MCk+Pj4yKTw8MikpOlZhKGYsby1jfDApO0E6ZG97aWYoMDwoMHxhclt2Pj4yXSkpe2ZvcihkPWUrNTA1NnwwLHM9MDs7KXtpZihoPTB8YXJbZD4+Ml0saz0oMHxzKSUoMHxoKXwwLGg9KDB8cykvKDB8aCl8MCwwPCgwfChjPTB8YXJbeT4+Ml0pKSlmb3IoYT0wLG89LTE7bz0oMHxrKTwoMHxhcltBKzQyNTIrKGE8PDIpPj4yXSk/bzphLCgwfChhPWErMXwwKSk8KDB8Yyk7KTtlbHNlIG89LTE7aWYoMDwoMHwobD0wfGFyW3A+PjJdKSkpZm9yKGM9MCxhPS0xO2E9KDB8aCk8KDB8YXJbQSs0Mjk2KyhjPDwyKT4+Ml0pP2E6YywoMHwoYz1jKzF8MCkpPCgwfGwpOyk7ZWxzZSBhPS0xO2lmKGI9KDB8YXJbQj4+Ml0pKyhzPDwyKXwwLChhcltiPj4yXT0wKTwoMHxvKSlmb3IodT1BKzQyMTIrKGE8PDIpfDAsYz1sPTA7Yz1jKygwfGJyKDB8YXJbQSs0MTcyKyhsPDwyKT4+Ml0sMHxhclt1Pj4yXSkpfDAsYXJbYj4+Ml09YywoMHwobD1sKzF8MCkpIT0oMHxvKTspO2Vsc2UgYz0wO2lmKDA8KDB8YSkpZm9yKGw9MDtjPWMrKDB8YnIoMHxhcltBKzQyMTIrKGw8PDIpPj4yXSwwfGFyW2Q+PjJdKSl8MCxhcltiPj4yXT1jLCgwfChsPWwrMXwwKSkhPSgwfGEpOyk7aWYoKGF8b3wwKTw9LTEpYnJlYWs7aWYoWj1jKygwfGJyKGgtKDB8YXJbQSs0Mjk2KyhhPDwyKT4+Ml0pfDAsMHxhcltBKzQxNzIrKG88PDIpPj4yXSkpfDAsYXJbYj4+Ml09WixaPWstKDB8YXJbQSs0MjUyKyhvPDwyKT4+Ml0pK1p8MCxhcltiPj4yXT1aLCgwfChzPShhclsoMHxhclt3Pj4yXSkrKFo8PDIpPj4yXT1zKSsxfDApKT49KDB8YXJbdj4+Ml0pKWJyZWFrIEF9c3IoMzczNjQsMzczODUsNjE4LDM3MzkyKX19d2hpbGUoMCk7aWYoMDwoMHwobz0wfGFyW3A+PjJdKSkpe1o9ZSs1MDU2fDAsYT0oYz1sPTApfGFyW3k+PjJdO2Rve2lmKDA8KDB8YSkpe2c9QSs0Mjk2KyhjPDwyKXwwLHc9bCxvPSh2PTApfGFyWyhtPUErNDI5NisoKGM9YysxfDApPDwyKXwwKT4+Ml07ZG97aWYodT0wfGFyW2c+PjJdLHY9KGw9dikrMXwwLCgwfHUpPCgwfG8pKXtrPUErNDI1MisobDw8Mil8MCxhPTB8YXJbKGg9QSs0MjUyKyh2PDwyKXwwKT4+Ml07ZG97aWYoKDB8KGQ9MHxhcltrPj4yXSkpPCgwfGEpKXtmb3IobD0wfGFyW0I+PjJdLGI9MHxhcltpPj4yXSxzPTB8YXJbcj4+Ml0sbz1kO2E9bCsoKDB8YnIoMHxhcltaPj4yXSx1KSkrbzw8Mil8MCxhcltiKyhhclthPj4yXTw8Mik+PjJdPXcsYT1zKygoMHxicigwfGFyW1o+PjJdLHUpKStvPDwyKXwwLGFyW2E+PjJdPXcsbz1vKzF8MCxhPTB8YXJbaD4+Ml0sKDB8byk8KDB8YSk7KTtvPTB8YXJbbT4+Ml19dT11KzF8MH13aGlsZSgoMHx1KTwoMHxvKSk7YT0wfGFyW3k+PjJdfXc9dysxfDB9d2hpbGUoKDB8dik8KDB8YSkpO2w9dyxvPTB8YXJbcD4+Ml19ZWxzZSBjPWMrMXwwfXdoaWxlKCgwfGMpPCgwfG8pKX1pZigoMHwobz0wfGFyWyhrPWUrNTA5MnwwKT4+Ml0pKTw9MClyZXR1cm4gdXI9dDt3PWUrNTEwMHwwLGQ9ZSs1MDU2fDAsYT0wfGFyWyhoPWUrNTA4OHwocz0wKSk+PjJdO2Rve2lmKDA8KDB8YSkpe3U9MHxhcltCPj4yXSxiPTB8YXJbZj4+Ml0sbD0wO2Rve2lmKGU9MHxhclt3Pj4yXSxBPTB8YXJbbj4+Ml0seT11KygoMHxicigwfGFyW2Q+PjJdLHM8PGU+PkEpKSsobDw8ZT4+QSk8PDIpfDAsbz1iKygoMHxicihhLHMpKStsPDwyKXwwLGFyW28+PjJdPWFyW3k+PjJdPDwoQS1lPDwxKSxvPTB8YXJbbj4+Ml0sKDB8KGE9MHxhclt3Pj4yXSkpPCgwfG8pKWZvcihjPW8tYXwwLG89YT0wO289KDA9PSgoZT0xPDxhKSZzfDApPzA6ZTw8MTw8YSkrbysoMD09KGUmbHwwKT8wOmU8PGEpfDAsKDB8KGE9YSsxfDApKTwoMHxjKTspO2Vsc2Ugbz0wO2E9YisoKDB8YnIoMHxhcltoPj4yXSxzKSkrbDw8Mil8MCxhclthPj4yXT0oMHxhclthPj4yXSkrbyxsPWwrMXwwLGE9MHxhcltoPj4yXX13aGlsZSgoMHxsKTwoMHxhKSk7bz0wfGFyW2s+PjJdfXM9cysxfDB9d2hpbGUoKDB8cyk8KDB8bykpO3VyPXR9KEEsdSksdHJbQT4+MF09MSwwfChyPTEpKToocj0wKXxyfShpLGUsQSksLTE8KDB8KGU9MHxhcltBKzUyND4+Ml0pKSYmZnVuY3Rpb24oQSxlKXtBfD0wO3ZhciByLGksZixuLHQsbyxhLGMsbCx1LGIscyxkLGssaCx3LHYsbSxnLFoscCx5LEIsRSxYLFcsSSxDLEcsVixGLFIsTixfLFksUSxELEosTSxULFUsUyxPLHosaixILHgsUD0wLEw9MCxLPTAscT0wLCQ9MCxBQT0wO3N3aXRjaCh1cj0oeD11cikrNDAwfDAsVT14KzM5MnwwLFQ9eCszODR8MCxNPXgrMzc2fDAsSj14KzM2OHwwLEQ9eCszNjB8MCxRPXgrMzUyfDAsWT14KzM0NHwwLF89eCszMzZ8MCxOPXgrMzI4fDAsUj14KzMyMHwwLEY9eCszMTJ8MCxWPXgrMzA0fDAsRz14KzI5NnwwLEM9eCsyODh8MCxBQT14KzI4MHwwLEg9eCsyNzJ8MCxqPXgrMjY0fDAsJD14KzI1NnwwLHo9eCsyNDh8MCxPPXgrMjQwfDAsUz14KzIzMnwwLEk9eCsyMjR8MCxXPXgrMjE2fDAsWD14KzIwOHwwLEI9eCsyMDB8MCx5PXgrMTkyfDAscD14KzE4NHwwLFo9eCsxNzZ8MCxnPXgrMTY4fDAsdj14KzE2MHwwLHc9eCsxNTJ8MCxoPXgrMTQ0fDAsaz14KzEzNnwwLGQ9eCsxMjh8MCxzPXgrMTIwfDAsYj14KzExMnwwLHU9eCsxMDR8MCxsPXgrOTZ8MCxjPXgrODh8MCxvPXgrODB8MCx0PXgrNzJ8MCxuPXgrNjR8MCxmPXgrNTZ8MCxpPXgrNDh8MCxyPXgrNDB8MCxxPXgrMzJ8MCxtPXgrMjR8MCxhPXgrMTZ8MCxLPXgrOHwwLEw9eCwwfChlfD0wKSl7Y2FzZSAxOlA9MTAxNzI7YnJlYWs7Y2FzZSAyOlA9MTA2NzY7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gdXI9eH1QbihFPTB8YXJbUD4+Ml0sMzc0MTEsTCksYXJbSz4+Ml09dHJbQSsxPj4wXSxQbihFLDM3NDUyLEspLGFyW2E+PjJdPXRyW0ErMj4+MF0sUG4oRSwzNzQ4NSxhKSxhclttPj4yXT10cltBKzM+PjBdLFBuKEUsMzc1MTgsbSksYXJbcT4+Ml09dHJbQSs0Pj4wXSxQbihFLDM3NTYyLHEpLGFyW3I+PjJdPXRyW0ErNT4+MF0sUG4oRSwzNzU5NSxyKSxhcltpPj4yXT10cltBKzY+PjBdLFBuKEUsMzc2MjgsaSksYXJbZj4+Ml09dHJbQSs3Pj4wXSxQbihFLDM3NjY0LGYpLGFyW24+PjJdPWFyW0ErOD4+Ml0sUG4oRSwzNzcwMCxuKSxhclt0Pj4yXT10cltBKzEyPj4wXSxQbihFLDM3NzMzLHQpLGFyW28+PjJdPXRyW0ErMTM+PjBdLFBuKEUsMzc3NjYsbykscT1BKzE0fDAsYXJbYz4+Ml09dHJbcT4+MF0sUG4oRSwzNzc5OSxjKSwwfHRyW3E+PjBdJiYoYXJbbD4+Ml09YXJbQSsxNj4+Ml0sUG4oRSwzNzgzMixsKSk7aWYoYXJbdT4+Ml09YXJbQSsyMD4+Ml0sUG4oRSwzNzg2NSx1KSxhcltiPj4yXT1hcltBKzI0Pj4yXSxQbihFLDM3OTAwLGIpLGFyW3M+PjJdPXRyW0ErMjg+PjBdLFBuKEUsMzc5MzUscyksYXJbZD4+Ml09dHJbQSsyOT4+MF0sUG4oRSwzNzk4MixkKSxhcltrPj4yXT10cltBKzMwPj4wXSxQbihFLDM4MDE3LGspLGFyW2g+PjJdPXRyW0ErMzE+PjBdLFBuKEUsMzgwNTIsaCksYXJbdz4+Ml09dHJbQSszMj4+MF0sUG4oRSwzODA4Nyx3KSxxPUErMzR8MCxhclt2Pj4yXT10cltxPj4wXSxQbihFLDM4MTIyLHYpLGFyW2c+PjJdPXRyW0ErMzM+PjBdLFBuKEUsMzgxNTcsZyksMHx0cltxPj4wXSl7aWYoTD1BKzM2fDAsYXJbWj4+Ml09YXJbTD4+Ml0sUG4oRSwzODE5NSxaKSxLPUErNDB8MCxhcltwPj4yXT1hcltLPj4yXSxQbihFLDM4MjIxLHApLGFyW3k+PjJdPXRyW0ErNDQ+PjBdLFBuKEUsMzgyNDcseSksUG4oRSwzODI3MyxCKSwwPD0oMHxhcltMPj4yXSkpZm9yKFA9MDthcltJPj4yXT1hcltBKzQyNTIrKFA8PDIpPj4yXSxQbihFLDM4MzIwLEkpLCgwfFApPCgwfGFyW0w+PjJdKTspUD1QKzF8MDtpZihQbihFLDQ1NzI4LFgpLFBuKEUsMzgyOTgsVyksMDw9KDB8YXJbSz4+Ml0pKWZvcihQPTA7YXJbej4+Ml09YXJbQSs0Mjk2KyhQPDwyKT4+Ml0sUG4oRSwzODMyMCx6KSwoMHxQKTwoMHxhcltLPj4yXSk7KVA9UCsxfDA7UG4oRSw0NTcyOCxTKSxhcltPPj4yXT10cltBKzQ1Pj4wXSxQbihFLDM4MzI1LE8pfWFyWyQ+PjJdPXRyW0ErNDY+PjBdLFBuKEUsMzgzNjksJCksJD1BKzQ3fDAsYXJbaj4+Ml09dHJbJD4+MF0sUG4oRSwzODQxNyxqKSwwfHRyWyQ+PjBdJiYoYXJbSD4+Ml09dHJbQSs0OD4+MF0sUG4oRSwzODQ2MSxIKSxhcltBQT4+Ml09dHJbQSs0OT4+MF0sUG4oRSwzODUwNixBQSksYXJbQz4+Ml09YXJbQSs1Mj4+Ml0sUG4oRSwzODU0NixDKSxhcltHPj4yXT1hcltBKzU2Pj4yXSxQbihFLDM4NTY0LEcpKTthcltWPj4yXT10cltBKzYwPj4wXSxQbihFLDM4NTgyLFYpLGFyW0Y+PjJdPXRyW0ErNDEyNT4+MF0sUG4oRSwzODYyMixGKSxhcltSPj4yXT1hcltBKzQxMjg+PjJdLFBuKEUsMzg2NTksUiksYXJbTj4+Ml09dHJbQSs0MTMyPj4wXSxQbihFLDM4Njk2LE4pLGFyW18+PjJdPXRyW0ErNDEzMz4+MF0sUG4oRSwzODczMyxfKSxhcltZPj4yXT10cltBKzQxMzQ+PjBdLFBuKEUsMzg3ODMsWSksQUE9QSs0MTM1fDAsYXJbUT4+Ml09dHJbQUE+PjBdLFBuKEUsMzg4MTksUSksYXJbRD4+Ml09dHJbQSs0MTM2Pj4wXSxQbihFLDM4ODU1LEQpLGFyW0o+PjJdPXRyW0ErNDEzNz4+MF0sUG4oRSwzODg5MSxKKSxhcltNPj4yXT1hcltBKzQxNjA+PjJdLFBuKEUsMzg5MjcsTSksYXJbVD4+Ml09YXJbQSs0MTY0Pj4yXSxQbihFLDM4OTYzLFQpLGFyW1U+PjJdPWFyW0ErNDE2OD4+Ml0sUG4oRSwzOTAwNCxVKSwwfHRyW0FBPj4wXSYmZnVuY3Rpb24oQSxlKXtBfD0wO3ZhciByLGksZixuLHQsbyxhLGMsbCx1LGI9MCxzPTAsZD0wO3N3aXRjaCh1cj0odT11cikrODB8MCxsPXUrNzJ8MCxjPXUrNjR8MCxhPXUrNTZ8MCxvPXUrNDh8MCxuPXUrNDB8MCxzPXUrMzJ8MCx0PXUrMjR8MCxiPXUrMTZ8MCxmPXUrOHwwLGk9dSwwfChlfD0wKSl7Y2FzZSAxOmU9MTAxNzI7YnJlYWs7Y2FzZSAyOmU9MTA2NzY7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gdXI9dX1pZihQbihyPTB8YXJbZT4+Ml0sMzY5MDUsaSksYXJbZj4+Ml09Y3JbQT4+MF0sUG4ociwzNjk0OCxmKSxhcltiPj4yXT1jcltBKzE+PjBdLFBuKHIsMzY5OTQsYiksYj1BKzJ8MCxhclt0Pj4yXT1jcltiPj4wXSxQbihyLDM3MDQwLHQpLDB8dHJbYj4+MF0mJihhcltzPj4yXT1jcltBKzM+PjBdLFBuKHIsMzcwODYscyksZD1BKzR8MCxhcltuPj4yXT1jcltkPj4wXSxQbihyLDM3MTMyLG4pLDB8dHJbZD4+MF0pKWZvcihlPTA7cz0wfHRyW0ErNStlPj4wXSxhcltvPj4yXT1lLGFyWzQrbz4+Ml09cyxQbihyLDM3MTc4LG8pLHM9MHx0cltBKzExK2U+PjBdLGFyW2E+PjJdPWUsYXJbNCthPj4yXT1zLFBuKHIsMzcyMjUsYSksKDB8KGU9ZSsxfDApKTwoMHxjcltkPj4wXSk7KTthcltjPj4yXT1jcltBKzE3Pj4wXSxQbihyLDM3MjcyLGMpLGFyW2w+PjJdPWNyW0ErMTg+PjBdLFBuKHIsMzczMTgsbCksdXI9dX0oQSs0MTM4fDAsZSksdXI9eH0oaSxlKSxyPyhoYigwfChuPUErOTM3ODQrKDQ0MDAqKGU9MHx0cltpKzE+PjBdKXwwKXwwKSwwfGksNDM0MCksdXI9KG49KCgwfG4pPT0oMHxpKXx8KCRlKEErOTM3ODQrKDQ0MDAqZXwwKSs0MzQwfDAsMHxhcltpKzQzNDA+PjJdLDB8YXJbaSs0MzQ0Pj4yXSksJGUoQSs5Mzc4NCsoNDQwMCplfDApKzQzNTJ8MCwwfGFyW2krNDM1Mj4+Ml0sMHxhcltpKzQzNTY+PjJdKSwkZShBKzkzNzg0Kyg0NDAwKmV8MCkrNDM2NHwwLDB8YXJbaSs0MzY0Pj4yXSwwfGFyW2krNDM2OD4+Ml0pLCRlKEErOTM3ODQrKDQ0MDAqZXwwKSs0Mzc2fDAsMHxhcltpKzQzNzY+PjJdLDB8YXJbaSs0MzgwPj4yXSksJGUoQSs5Mzc4NCsoNDQwMCplfDApKzQzODh8MCwwfGFyW2krNDM4OD4+Ml0sMHxhcltpKzQzOTI+PjJdKSkscj8wOjEwMDYpLEdhKGkpLGYpLDB8bik6KEE9cj8wOjEwMDYsR2EoaSksdXI9ZiwwfEEpfWZ1bmN0aW9uICRlKEEsZSxyKXt2YXIgaSxmLG4sdD0wLG89MCxhPTAsYz0wLGw9MDtpZigoYT0oYz0oaT1yfD0wKS0oZXw9MCl8MCk+PjIpPj4+MDw9KHQ9MHxhclsoZj0oQXw9MCkrOHwwKT4+Ml0pLShuPWw9MHxhcltBPj4yXSk+PjI+Pj4wKXJldHVybiAwfChyPSh0PShvPWE9KEE9KG89KDB8YXJbKGM9QSs0fDApPj4yXSktbD4+Mik+Pj4wPGE+Pj4wKT9lKyhvPDwyKXwwOnIpLWV8MCk+PjIpJiZ3YigwfGwsMHxlLDB8dCkscj1uKyhyPDwyKXwwLEE/ISgoMHwodD1pLW98MCkpPD0wKSYmKGhiKDB8YXJbYz4+Ml0sMHxhLDB8dCksdm9pZChhcltjPj4yXT0oMHxhcltjPj4yXSkrKHQ+Pj4yPDwyKSkpOigwfCh0PTB8YXJbYz4+Ml0pKSE9KDB8cikmJnZvaWQoYXJbYz4+Ml09dCsofigodCstNC1yfDApPj4+Mik8PDIpKTsobz1sKSYmKCgwfChyPTB8YXJbKHQ9QSs0fDApPj4yXSkpIT0oMHxuKSYmKGFyW3Q+PjJdPXIrKH4oKHIrLTQtbHwwKT4+PjIpPDwyKSksdnUobyksYXJbZj4+Ml09MCxhclt0Pj4yXT0wLHQ9YXJbQT4+Ml09MCksMTA3Mzc0MTgyMzxhPj4+MCYmemwoKSxsPXQ+PjEsMTA3Mzc0MTgyMzwodD10Pj4yPj4+MDw1MzY4NzA5MTE/bD4+PjA8YT4+PjA/YTpsOjEwNzM3NDE4MjMpPj4+MCYmemwoKSxyPTB8aHUodDw8MiksYXJbKG89QSs0fDApPj4yXT1yLGFyW0E+PjJdPXIsYXJbZj4+Ml09cisodDw8MiksKDB8Yyk8PTB8fChoYigwfHIsMHxlLDB8YyksYXJbbz4+Ml09cisoYz4+PjI8PDIpKX1mdW5jdGlvbiBBcihBLGUpe2V8PTA7dmFyIHIsaSxmLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wO3I9KEF8PTApKzR8MCxpPTB8YXJbQT4+Ml0sNTM2ODcwOTE8KG49KG89KDB8KGY9KDB8YXJbcj4+Ml0pLWl8MCkpLzgwfDApKzF8MCk+Pj4wJiZ6bCgpLGM9KGE9KCgwfGFyWyhsPUErOHwwKT4+Ml0pLWl8MCkvODB8MCk8PDEsbj1hPj4+MDwyNjg0MzU0NT9jPj4+MDxuPj4+MD9uOmM6NTM2ODcwOTE7ZG97aWYobil7aWYoISg1MzY4NzA5MTxuPj4+MCkpe3Q9MHxodSg4MCpufDApO2JyZWFrfVp1KGw9MHxYKDgpLDQ0NTE5KSxhcltsPj4yXT0xNzY2MCxJKDB8bCw0MDE2LDQyOCl9ZWxzZSB0PTB9d2hpbGUoMCk7Zm9yKGE9dCsoODAqbnwwKXwwLG49ZSx0PShvPWM9dCsoODAqb3wwKXwwKSs4MHwwO2FyW28+PjJdPWFyW24+PjJdLG49bis0fDAsKDB8KG89bys0fDApKTwoMHx0KTspO249YysoODAqKCgwfGYpLy04MHwwKXwwKXwwLDA8KDB8ZikmJmhiKDB8biwwfGksMHxmKSxhcltBPj4yXT1uLGFyW3I+PjJdPWMrODAsYXJbbD4+Ml09YSxpJiZ2dShpKX1mdW5jdGlvbiBlcihBLGUscil7QXw9MCxlfD0wLHJ8PTA7dmFyIGk9MCxmPTA7QTpkb3tpZihyKXtmPTB8YXJbKGk9QSsxNjR8MCk+PjJdO2Rve2lmKDA8KDB8Zikpe2ZvcihyPTA7Oyl7aWYoKDB8YXJbQSs4NCsocjw8Mik+PjJdKT09KDB8ZSkpe3I9MTA7YnJlYWt9aWYoKDB8Zik8PSgwfChyPXIrMXwwKSkpe3I9NTticmVha319aWYoNT09KDB8cikpe2lmKCgwfGYpPDIwKWJyZWFrO2JyZWFrIEF9aWYoMTA9PSgwfHIpKXJldHVybn19d2hpbGUoMCk7YXJbaT4+Ml09ZisxLGFyW0ErODQrKGY8PDIpPj4yXT1lfX13aGlsZSgwKTsyMD09KDB8KHI9MHxhclsoaT1BKzgwfDApPj4yXSkpPyhlPTEwMDEscj0xOSk6YXJbaT4+Ml09cisxLGFyW0ErKHI8PDIpPj4yXT1lfWZ1bmN0aW9uIHJyKEEsZSxyLGkpe0F8PTAsZXw9MCxyfD0wLGl8PTA7dmFyIGYsbix0LG8sYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTAsZD0wLGs9MDtpZih1cj0odD11cikrMTZ8MCxmPXQrNHwwLGI9dCs4fDAsbj10LHM9MHxodSgxMzU2KSxvPXMsYXJbNzc2KyhvfD0wKT4+Ml09MCxhcltvKzc4MD4+Ml09MCxhcltvKzc4ND4+Ml09MCxzdChvKzEzMzJ8MCksYXJbbysxMzQ0Pj4yXT0wLGFyW28rMTM0OD4+Ml09MCxhcltvKzEzNTI+PjJdPTAsTGEobyksbD0wfGZ1bmN0aW9uKEEsZSxyLGkpe0F8PTAsZXw9MCxyfD0wO3ZhciBmLG4sdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wO3RyWyhpfD0wKT4+MF09MCxMYShBKSx0clsobD1BKzEyfDApPj4wXT0wLHc9MjU1JigwfEF0KGUsMSkpLHRyWyhjPUErNHwwKT4+MF09dywwfHRyW3IrMzc3MjE0Pj4wXSYmKHc9MjU1JigwfEF0KGUsMSkpLHRyW0ErNT4+MF09dyk7aWYodz0wfGl0KGUpLDY0PCgwfChhcltBKzg+PjJdPXcpKXwtOTk5OTk9PSgwfHcpKXJldHVybiBlcihyKzR8MCwxMDA5LDApLChpPTApfGk7aWYoISgwfHRyW3IrOTM3ODQrKDQ0MDAqd3wwKT4+MF0pKXJldHVybiBlcihyKzR8MCwxMDA5LDApLChpPTApfGk7aWYobj0wfHRyW3IrOTM3ODQrKDQ0MDAqd3wwKSsyPj4wXSwhKDB8dHJbKHU9cisxMTA5NisoNTE2OCpufDApfDApPj4wXSkpcmV0dXJuIGVyKHIrNHwwLDEwMTAsMCksdHJbaT4+MF09MCwoaT0wKXxpO2lmKDB8dHJbYz4+MF0pbz10PTAsaD0yMztlbHNle2Zvcih0PTB8dHJbcis5Mzc4NCsoNDQwMCp3fDApKzM+PjBdPzI1NSYoMHxBdChlLDEpKTowLHRyW2w+PjBdPXQsbz0wfGFyW3IrMTEwOTYrKDUxNjgqbnwwKSs1MDcyPj4yXSx0PTA7KDE8PHR8MCk8KDB8byk7KXQ9dCsxfDA7aWYodD0wfEF0KGUsdCksMHx0cltsPj4wXSl7aWYoIXQpcmV0dXJuIHRyW2k+PjBdPTAsZXIocis0fDAsMTAyMSwwKSwoaT0wKXxpO2lmKCEobz0wfGFyW3IrMzc2MjI4Pj4yXSkpcmV0dXJuIDB8KGk9MTYpO2hiKDB8QSwwfG8sNzc2KSwoYT0oMHxvKT09KDB8QSkpfHwkZShBKzc3NnwwLDB8YXJbbys3NzY+PjJdLDB8YXJbbys3ODA+PjJdKSxoYihBKzc4OHwwLG8rNzg4fDAsNTQ0KSxndChBKzEzMzJ8MCxvKzEzMzJ8MCksdHJbQSsxMzQwPj4wXT0wfHRyW28rMTM0MD4+MF0sYXx8JGUoQSsxMzQ0fDAsMHxhcltvKzEzNDQ+PjJdLDB8YXJbbysxMzQ4Pj4yXSksdHJbYz4+MF09MCxvPTEsaD0yM31lbHNlIG89MH0yMz09KDB8aCkmJih0cltsPj4wXT1vKTtpZigwPD0oMHwoYXJbKGY9QSsxNnwwKT4+Ml09dCkpJiYoMHx0KTwoMHxhcltyKzExMDk2Kyg1MTY4Km58MCkrNTA3Mj4+Ml0pKXtpZighKG88PDI0Pj4yNCkpe2lmKDA8KDB8dHJbKG89cis5Mzc4NCsoNDQwMCp3fDApKzQxMzJ8MCk+PjBdKSlmb3IodD0wO2V0KGUsMSksKDB8KHQ9dCsxfDApKTwoMHx0cltvPj4wXSk7KTtpZihzPTB8aXQoZSksMjwoMHwoYXJbKGQ9QSsyMHwwKT4+Ml09cykpfC05OTk5OT09KDB8cykpcmV0dXJuIGVyKHIrNHwwLDEwMDcsMCksdHJbaT4+MF09MCwoaT0wKXxpO2lmKHQ9MHx0cltyKzkzNzg0Kyg0NDAwKnd8MCkrMzE+PjBdPzI1NSYoMHxBdChlLDEpKToxLHRyW0ErMjQ+PjBdPXQsMT09KDB8dHJbcisxMTA5NisoNTE2OCpufDApKzQ4MD4+MF0pJiYocz0yNTUmKDB8QXQoZSwyKSksdHJbQSsyNT4+MF09cyksYXJbKHQ9QSsyOHwwKT4+Ml09MCwoKCh0clsobz1BKzMyfDApPj4wXT0wKXx0cltyKzM3NzIxMj4+MF0pLTE5JjI1NSk8Milhclt0Pj4yXT0wLGFyW0ErMTQwPj4yXT0wLGFyW0ErMTQ0Pj4yXT0wLHQ9MDtlbHNle2I9MHxBdChlLDB8YXJbKHM9cisxMTA5NisoNTE2OCpufDApKzUyMHwwKT4+Ml0pLGFyW3Q+PjJdPWIsYj0yNTUmKDB8QXQoZSwxKSksdHJbbz4+MF09Yjtkb3tpZihiPDwyND4+MjQpe2ZvcihhPXIrMTEwOTYrKDUxNjgqbnwwKSs0NzIwfDAsdD0wfGFyWyh1PXIrMTEwOTYrKDUxNjgqbnwwKSs0NzI0fDApPj4yXSxjPTB8YXJbYT4+Ml0sbD0odC1jfDApLzEwMHwwLG89MDsoMTw8b3wwKTwoMHxsKTspbz1vKzF8MDtpZigwPCgwfG8pPyhjPTB8QXQoZSxvKSxvPTB8YXJbYT4+Ml0sdD0wfGFyW3U+PjJdKToobz1jLGM9MCksKDB8KGFyW0ErMTM2Pj4yXT1jKSk8KCh0LW98MCkvMTAwfDApKXtmb3IoYXJbQSs4MDg+PjJdPWMsdD1vKygxMDAqY3wwKXwwLG89KGE9QSs4MTJ8MCkrMTAwfDA7b3JbYT4+MV09MHxvclt0Pj4xXSx0PXQrMnwwLCgwfChhPWErMnwwKSk8KDB8byk7KTticmVha31yZXR1cm4gZXIocis0fDAsMTAxNSwwKSwwfChpPTgpfWZvcihhPXIrMTEwOTYrKDUxNjgqbnwwKSs0NzIwfDAsWmMocis0fDAsdSxlLHQ9QSszNHwwLCgoMHxhclsobz1yKzExMDk2Kyg1MTY4Km58MCkrNDcyNHwwKT4+Ml0pLSgwfGFyW2E+PjJdKXwwKS8xMDB8MCxhLDEpLGFyW0ErODA4Pj4yXT0oKDB8YXJbbz4+Ml0pLSgwfGFyW2E+PjJdKXwwKS8xMDB8MCxvPShhPUErODEyfDApKzEwMHwwO29yW2E+PjFdPTB8b3JbdD4+MV0sdD10KzJ8MCwoMHwoYT1hKzJ8MCkpPCgwfG8pOyk7fXdoaWxlKDApO0E6ZG97aWYoMHx0cltyKzExMDk2Kyg1MTY4Km58MCkrNDczMj4+MF0pe2w9cisxMTA5NisoNTE2OCpufDApKzQ3MzZ8MDtkb3tpZigwPCgwfGFyW2w+PjJdKSl7aWYoYj0wfGl0KGUpLC05OTk5OSE9KDB8KGFyW0ErMTQwPj4yXT1iKSkpYnJlYWs7cmV0dXJuIDB8KHQ9OCl9YXJbQSsxNDA+PjJdPTB9d2hpbGUoMCk7aWYodD0wfGl0KGUpLC05OTk5OT09KDB8KGFyWyh1PUErMTQ0fDApPj4yXT10KSkpcmV0dXJuIDB8KGk9OCk7aWYobz0wfGFyWyhiPUErMTQwfDApPj4yXSwoKHQ9byt0fDApKygwfGNyW0ErOTA4Pj4wXSkrKDB8Y3JbQSs5MDk+PjBdKXwwKT4oMHxhcltyKzExMDk2Kyg1MTY4Km58MCkrNTI4KygoMHx0cltyKzExMDk2Kyg1MTY4Km58MCkrMj4+MF0pLTE8PDIpPj4yXSkpcmV0dXJuIGVyKHIrNHwwLDEwMTgsMCksdHJbaT4+MF09MCwoaT0wKXxpO2lmKCEoMDwoMHx0KSkpe3Q9MDticmVha31mb3IoYz10PTA7Oyl7aWYoKDB8Yyk8KDB8bykpe2ZvcihhPTB8YXJbbD4+Ml0sbz0wOygxPDxvfDApPCgwfGEpOylvPW8rMXwwO2lmKGE9MHxBdChlLG8pLHRyWyhvPUErMTQ4K2N8MCk+PjBdPWEsKDB8KGEmPTI1NSkpPj0oMHxhcltsPj4yXSkpYnJlYWs7YXJbciszNzYyMzIrKGM8PDIpPj4yXT1hcltyKzExMDk2Kyg1MTY4Km58MCkrNDc0MCsoYTw8Mik+PjJdLG89KDB8Y3Jbbz4+MF0pKyhyKzExMDk2Kyg1MTY4Km58MCkrNDg2OCl8MH1lbHNlIHY9MHxBdChlLDB8YXJbcz4+Ml0pLGFyWyhhPUErMTY0KyhjPDwyKXwwKT4+Ml09dix2PTI1NSYoMHxBdChlLDEpKSx0clsobz1BKzIyOCtjfDApPj4wXT12LGFyW3IrMzc2MjMyKyhjPDwyKT4+Ml09YXJbYT4+Ml07aWYodj0wfHRyW28+PjBdLGFyW3IrMzc2Mjk2KyhjPDwyKT4+Ml09djw8MjQ+PjI0LHQ9KHY8PDI0Pj4yNCE9MCYxKSt0fDAsdj0yNTUmKDB8QXQoZSwxKSksKHRyW0ErMjQ0K2M+PjBdPXYpPDwyND4+MjQpe2lmKG89MHxpdChlKSwtOTk5OTk9PSgwfChhcltBKzI2MCsoYzw8Mik+PjJdPW8pKSl7dD04LGg9MTg5O2JyZWFrfX1lbHNlIGFyW0ErMjYwKyhjPDwyKT4+Ml09MCxvPTA7ZG97aWYoYyl7aWYoKDB8Yyk9PSgwfGFyW2I+PjJdKSlicmVhaztvPSgwfGFyW3IrMzc2MzYwKyhjKy0xPDwyKT4+Ml0pK298MH19d2hpbGUoMCk7aWYoYXJbciszNzYzNjArKGM8PDIpPj4yXT1vLGM9YysxfDAsbz0wfGFyW2I+PjJdLCgwfGMpPj0oKDB8YXJbdT4+Ml0pK298MCkpYnJlYWsgQX1yZXR1cm4gMTg5PT0oMHxoKT8wfHQ6KGVyKHIrNHwwLDEwMjMsMCksdHJbaT4+MF09MCwodj0wKXx2KX1hcltBKzE0MD4+Ml09MCxhcltBKzE0ND4+Ml09MCx0PTB9d2hpbGUoMCk7bz0wfHRyW3IrMTEwOTYrKDUxNjgqbnwwKSs0OTAwPj4wXT8yNTUmKDB8QXQoZSwxKSk6MCx0cltBKzMyND4+MF09b31vPTB8dHJbcisxMTA5NisoNTE2OCpufDApKzQ3MDM+PjBdPyh2PTI1NSYoMHxBdChlLDEpKSx0cltBKzMyNT4+MF09diwwfGFyW3IrMTEwOTYrKDUxNjgqbnwwKSs1MDEyPj4yXT8yNTUmKDB8QXQoZSwxKSk6MCk6dHJbQSszMjU+PjBdPTAsdHJbKHU9QSszMjZ8MCk+PjBdPW8sYXJbKGM9QSszMjh8MCk+PjJdPTAsYXJbKGw9QSszMzJ8MCk+PjJdPTA7ZG97aWYoKDB8YXJbZD4+Ml0pPj4+MDwyKXt2PTI1NSYoMHxBdChlLDEpKSx0cltBKzMyNz4+MF09djtkb3tpZih2PDwyND4+MjQpe2lmKG89MHxpdChlKSwtOTk5OTk9PSgwfChhcltjPj4yXT1vKSkpcmV0dXJuIGVyKHIrNHwwLDEwMDcsMCksMHwodj04KTtpZihvPW8rMXwwLGFyW2M+PjJdPW8sMHxhcltkPj4yXSlicmVhaztpZihhPTB8aXQoZSksLTk5OTk5PT0oMHwoYXJbbD4+Ml09YSkpKXJldHVybiBlcihyKzR8MCwxMDA3LDApLDB8KHY9OCk7bz0wfGFyW2M+PjJdLGE9YSsxfDAsaD04NjticmVha31vPTB8dHJbcis5Mzc4NCsoNDQwMCp3fDApKzY+PjBdLGFyW2M+PjJdPW8sYT0wfHRyW3IrOTM3ODQrKDQ0MDAqd3wwKSs3Pj4wXSxoPTg2fXdoaWxlKDApO2lmKDg2PT0oMHxoKSYmKGFyW2w+PjJdPWEpLDE2PCgwfG8pKXJldHVybiAwfCh2PTgpO2lmKDE2PCgwfGFyW2w+PjJdKSlyZXR1cm4gMHwodj04KTt0PSgwfGNyW0ErOTExPj4wXSkrdHwwLGFyW0ErOTEyPj4yXT10O2Rve2lmKDE8KDB8dCkmJjAhPSgwfHRyW3IrOTM3ODQrKDQ0MDAqd3wwKSs0MTI1Pj4wXSkpe2ZvcihvPTA7KDE8PG98MCk8KDB8dCk7KW89bysxfDA7dj0yNTUmKDB8QXQoZSwxKSksdHJbQSszMzY+PjBdPXY7ZG97aWYodjw8MjQ+PjI0KXtpZighKDA8KDB8YXJbYz4+Ml0pKSlicmVhaztmb3IodD0wO3Y9MjU1JigwfEF0KGUsbykpLHRyW0ErMzM4K3Q+PjBdPXYsKDB8KHQ9dCsxfDApKTwoMHxhcltjPj4yXSk7KTt9fXdoaWxlKDApO2lmKDB8YXJbZD4+Ml0pe3RyW0ErMzM3Pj4wXT0wO2JyZWFrfWlmKHY9MjU1JigwfEF0KGUsMSkpLCEoKHRyW0ErMzM3Pj4wXT12KTw8MjQ+PjI0KSlicmVhaztpZighKDA8KDB8YXJbbD4+Ml0pKSlicmVhaztmb3IodD0wO3Y9MjU1JigwfEF0KGUsbykpLHRyW0ErMzU0K3Q+PjBdPXYsKDB8KHQ9dCsxfDApKTwoMHxhcltsPj4yXSk7KTt9ZWxzZSB0cltBKzMzNj4+MF09MCx0cltBKzMzNz4+MF09MH13aGlsZSgwKTswfGFyW2Q+PjJdfHwodj0yNTUmKDB8QXQoZSwxKSksdHJbQSszNzA+PjBdPXYpLHQ9MHx0cltyKzkzNzg0Kyg0NDAwKnd8MCkrNT4+MF0/MjU1JigwfEF0KGUsMSkpOjAsdHJbQSszNzE+PjBdPXQ7ZG97aWYoMHx0cltBKzMyND4+MF0pe2Rve2lmKDB8YXJbZD4+Ml0pdHJbKG89QSszNzJ8MCk+PjBdPTEsdD0xLGg9MTA4O2Vsc2V7aWYodD0yNTUmKDB8QXQoZSwxKSksKHRyWyhvPUErMzcyfDApPj4wXT10KTw8MjQ+PjI0KXtoPTEwODticmVha31oPTE8KDB8YXJbbD4+Ml0pPzExMDoodD0wLDExMyl9fXdoaWxlKDApOzEwOD09KDB8aCkmJihoPTE8KDB8YXJbYz4+Ml0pPzExMDoxMTMpO2Rve2lmKDExMD09KDB8aCkpe2lmKGE9MHxpdChlKSwtOTk5OTk9PSgwfChhcltBKzM3Nj4+Ml09YSkpKXJldHVybiBlcihyKzR8MCwxMDA3LDApLDB8KHY9OCk7dD0wfHRyW28+PjBdO2JyZWFrfTExMz09KDB8aCkmJihhcltBKzM3Nj4+Ml09MCxhPTApfXdoaWxlKDApO2lmKHQ8PDI0Pj4yNCl7aWYoKDB8YSk8KDB8YXJbYz4+Ml0pKWJyZWFrfWVsc2UgaWYoKDB8YSk8KDB8YXJbbD4+Ml0pKWJyZWFrO3JldHVybiBlcihyKzR8MCw4LDApLDB8KHY9OCl9fXdoaWxlKDApO2g9MCE9KDB8dHJbcis5Mzc4NCsoNDQwMCp3fDApKzI5Pj4wXSkmJjE9PSgwfGFyW2Q+PjJdKT8xMjI6MTIwO2Rve2lmKDEyMD09KDB8aCkpe2lmKCEoMHx0cltyKzkzNzg0Kyg0NDAwKnd8MCkrMzA+PjBdKSlicmVhazswfGFyW2Q+PjJdfHwoaD0xMjIpfX13aGlsZSgwKTtkb3tpZigxMjI9PSgwfGgpKXtpZigwfFBhKGUsQSxyKSlicmVhaztyZXR1cm4gZXIocis0fDAsOCwwKSwwfCh2PTgpfX13aGlsZSgwKTtpZih0PTB8aXQoZSksLTk5OTk5PT0oMHwoYXJbQSs3MzY+PjJdPXQpKSlyZXR1cm4gZXIocis0fDAsMTAwNywwKSwwfCh2PTgpO2FyW0ErODA0Pj4yXT01LXQ7YnJlYWt9fXdoaWxlKDApO2lmKHY9MHxmdChlKSwtOTk5OTk9PSgwfChhcltBKzc0MD4+Ml09dikpKXJldHVybiBlcihyKzR8MCwxMDA3LDApLDB8KHY9OCk7ZG97aWYoMHx0cltyKzkzNzg0Kyg0NDAwKnd8MCkrMjg+PjBdKXtpZih2PTB8ZnQoZSksLTk5OTk5PT0oMHwoYXJbQSs3NDQ+PjJdPXYpKSlyZXR1cm4gZXIocis0fDAsMTAwNywwKSwwfCh2PTgpO2lmKHY9MHxmdChlKSwtOTk5OTkhPSgwfChhcltBKzc0OD4+Ml09dikpKWJyZWFrO3JldHVybiBlcihyKzR8MCwxMDA3LDApLDB8KHY9OCl9YXJbQSs3NDQ+PjJdPTAsYXJbQSs3NDg+PjJdPTB9d2hpbGUoMCk7MHx0cltyKzkzNzg0Kyg0NDAwKnd8MCkrNDE0MD4+MF0mJih2PTI1NSYoMHxBdChlLDEpKSx0cltBKzc1Mj4+MF09diksdD0wfHRyW3IrOTM3ODQrKDQ0MDAqd3wwKSs0OD4+MF0/MjU1JigwfEF0KGUsMSkpOjAsdHJbQSs3NTM+PjBdPXQsYXJbKG89QSs3NTZ8MCk+PjJdPWFyW3IrOTM3ODQrKDQ0MDAqd3wwKSs1Mj4+Ml0sYXJbKGE9QSs3NjB8MCk+PjJdPWFyW3IrOTM3ODQrKDQ0MDAqd3wwKSs1Nj4+Ml07ZG97aWYodDw8MjQ+PjI0KXtpZih2PTI1NSYoMHxBdChlLDEpKSwodHJbQSs3NTQ+PjBdPXYpPDwyND4+MjQpYnJlYWs7aWYodD0wfGZ0KGUpLC05OTk5OT09KDB8KGFyW28+PjJdPXQpKSlyZXR1cm4gZXIocis0fDAsMTAwNywwKSwwfCh2PTgpO2lmKGFyW28+PjJdPXQ8PDEsdD0wfGZ0KGUpLC05OTk5OT09KDB8KGFyW2E+PjJdPXQpKSlyZXR1cm4gZXIocis0fDAsMTAwNywwKSwwfCh2PTgpO2FyW2E+PjJdPXQ8PDE7YnJlYWt9dHJbQSs3NTQ+PjBdPTB8dHJbcis5Mzc4NCsoNDQwMCp3fDApKzQ5Pj4wXX13aGlsZSgwKTt0PTB8dHJbcis5Mzc4NCsoNDQwMCp3fDApKzQ2Pj4wXTtBOmRve2lmKHQ8PDI0Pj4yNCl7ZG97aWYoISgwfHRyW0ErMzI1Pj4wXSkpe2lmKDB8dHJbdT4+MF0pYnJlYWs7aWYoMHx0cltBKzc1ND4+MF0pYnJlYWsgQX19d2hpbGUoMCk7dD0yNTUmKDB8QXQoZSwxKSl9ZWxzZSB0PTB9d2hpbGUoMCk7dHJbQSs3NjQ+PjBdPXR9MD09KDB8dHJbKG89cis5Mzc4NCsoNDQwMCp3fDApKzM0fDApPj4wXSkmJjA9PSgwfHRyW3IrOTM3ODQrKDQ0MDAqd3wwKSszMz4+MF0pP2FyW0ErNzY4Pj4yXT0wOmg9MTU1O0E6ZG97aWYoMTU1PT0oMHxoKSl7aWYodD0wfGl0KGUpLC05OTk5OT09KDB8KGFyWyhiPUErNzY4fDApPj4yXT10KSkpcmV0dXJuIGVyKHIrNHwwLDEwMDcsMCksMHwodj04KTtpZigwfHRyW3IrOTM3ODQrKDQ0MDAqd3wwKSszMz4+MF0mJigoKDB8YXJbZj4+Ml0pLygwfGFyW3IrMTEwOTYrKDUxNjgqbnwwKSs1MDU2Pj4yXSl8MCkrdHwwKT49KDB8YXJbcisxMTA5NisoNTE2OCpufDApKzUwNjQ+PjJdKSlyZXR1cm4gZXIocis0fDAsMTAwNywwKSwwfCh2PTgpO2lmKDB8dHJbbz4+MF0mJigwfHQpPigwfGJyKDB8YXJbcis5Mzc4NCsoNDQwMCp3fDApKzQwPj4yXSwwfGFyW3IrOTM3ODQrKDQ0MDAqd3wwKSszNj4+Ml0pKSlyZXR1cm4gZXIocis0fDAsMTAwNywwKSwwfCh2PTgpO2lmKHU9QSs3NzZ8MCxsPTB8YXJbKG89QSs3ODB8MCk+PjJdLGM9MHxhclt1Pj4yXSx0Pj4+MDw9KGE9bC1jPj4yKT4+PjA/dD4+PjA8YT4+PjAmJigwfGwpIT0oMHwoaz1jKyh0PDwyKXwwKSkmJihhcltvPj4yXT1sKyh+KChsKy00LWt8MCk+Pj4yKTw8MikpOihWYSh1LHQtYXwwKSx0PTB8YXJbYj4+Ml0pLDA8KDB8dCkpe2lmKHQ9MHxpdChlKSwtOTk5OTk9PSgwfChhclsobD1BKzc3MnwwKT4+Ml09dCkpKXJldHVybiBlcihyKzR8MCwxMDA3LDApLDB8KHY9OCk7aWYobz10KzF8MCxhcltsPj4yXT1vLDMxPCgwfHQpKXJldHVybiAwfCh2PTgpO2lmKDA8KDB8YXJbYj4+Ml0pKWZvcih0PTA7Oyl7aWYobz0xKygwfEF0KGUsbykpfDAsYT0wfGFyW3U+PjJdLGFyWyhjPWErKHQ8PDIpfDApPj4yXT1vLDA8KDB8dCkmJihhcltjPj4yXT1vKygwfGFyW2ErKHQrLTE8PDIpPj4yXSkpLCgwfCh0PXQrMXwwKSk+PSgwfGFyW2I+PjJdKSlicmVhayBBO289MHxhcltsPj4yXX19fX13aGlsZSgwKTtkb3tpZigwfHRyW3IrOTM3ODQrKDQ0MDAqd3wwKSs0MTMzPj4wXSl7aWYodD0wfGl0KGUpLC05OTk5OT09KDB8KGFyWyhvPUErNzg4fDApPj4yXT10KSl8MWUzPCgwfHQpKXJldHVybiBlcihyKzR8MCwxMDA3LDApLDB8KHY9OCk7aWYoISgwPCgwfHQpKSlicmVhaztmb3IodD0wO0F0KGUsOCksKDB8KHQ9dCsxfDApKTwoMHxhcltvPj4yXSk7KTt9fXdoaWxlKDApO3N3aXRjaChhcltBKzc5Mj4+Ml09KDB8YXJbQSs3NDA+PjJdKSsoMHxhcltyKzkzNzg0Kyg0NDAwKnd8MCkrOD4+Ml0pLDB8YXJbQSsyMD4+Ml0pe2Nhc2UgMjp0PTAsaD0xODc7YnJlYWs7Y2FzZSAxOnQ9MSsoMHx0cltBKzM3MT4+MF0pfDAsaD0xODc7YnJlYWs7Y2FzZSAwOnQ9Mi0oMHx0cltBKzM3MT4+MF0pfDAsaD0xODd9cmV0dXJuIDE4Nz09KDB8aCkmJihhcltBKzc5Nj4+Ml09dCksYXJbQSs4MDQ+PjJdPTUtKDB8YXJbQSs3MzY+PjJdKSx0cltpPj4wXT0xLCh2PTApfHZ9cmV0dXJuIGVyKHIrNHwwLDEwMjAsMCksMHwodj04KX0ocyxlLEEsYiksYXJbbj4+Ml09bCwhKDB8dHJbYj4+MF0pKXJldHVybiAwfChhPTB8YXJbQSszNzYyMjQ+PjJdKSYmKHRyW2ErMTA1MTY+PjBdPTIpLEJhKEErNTQ4fDAsciksMHwoYT0wfGFyW3MrMTM0ND4+Ml0pJiYoKDB8KGM9MHxhclsoaT1zKzEzNDh8MCk+PjJdKSkhPSgwfGEpJiYoYXJbaT4+Ml09YysofigoYystNC1hfDApPj4+Mik8PDIpKSx2dShhKSksa3QocysxMzMyfDApLDB8KGE9MHxhcltzKzc3Nj4+Ml0pJiYoKDB8KGM9MHxhclsoaT1zKzc4MHwwKT4+Ml0pKSE9KDB8YSkmJihhcltpPj4yXT1jKyh+KChjKy00LWF8MCk+Pj4yKTw8MikpLHZ1KGEpKSx2dShzKSx1cj10LDB8KHM9bCk7aWYoLTE8KDB8KGE9MHxhcltBKzUyOD4+Ml0pKSYmZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MDt2YXIgaSxmLG4sdCxvLGEsYyxsLHUsYixzLGQsayxoLHcsdixtLGcsWixwLHksQixFLFgsVyxJLEMsRyxWLEYsUixOLF8sWSxRLEQsSj0wLE09MCxUPTAsVT0wLFM9MCxPPTAsej0wLGo9MCxIPTAseD0wLFA9MCxMPTAsSz0wLHE9MCwkPTAsQUE9MCxlQT0wLHJBPTAsaUE9MDtzd2l0Y2godXI9KEQ9dXIpKzQ0OHwwLFE9RCs0MzJ8MCxpQT1EKzQyNHwwLFk9RCs0MTZ8MCxOPUQrNDA4fDAsUj1EKzQwMHwwLEY9RCszOTJ8MCxWPUQrMzg0fDAsckE9RCszNzZ8MCxJPUQrMzY4fDAsVz1EKzM2MHwwLFg9RCszNTJ8MCxFPUQrMzQ0fDAsQj1EKzMyOHwwLHk9RCszMTJ8MCxwPUQrMjk2fDAsWj1EKzI4MHwwLEc9RCsyNjR8MCxDPUQrMjQ4fDAsZUE9RCsyNDB8MCxtPUQrMjMyfDAsdj1EKzIyNHwwLHc9RCsyMTZ8MCxoPUQrMjA4fDAsaz1EKzIwMHwwLGQ9RCsxOTJ8MCwkPUQrMTg0fDAscT1EKzE3NnwwLEs9RCsxNjh8MCxMPUQrMTYwfDAsUD1EKzE1MnwwLHg9RCsxNDR8MCxiPUQrMTM2fDAsdT1EKzEyOHwwLGw9RCsxMjB8MCxjPUQrMTEyfDAsYT1EKzEwNHwwLG89RCs5NnwwLEg9RCs4OHwwLHQ9RCs4MHwwLGo9RCs3MnwwLG49RCs2NHwwLGY9RCs1NnwwLGk9RCs0OHwwLFU9RCs0MHwwLHo9RCszMnwwLE89RCsyNHwwLFM9RCsxNnwwLFQ9RCs4fDAsSj1ELDB8KHJ8PTApKXtjYXNlIDE6cj0xMDE3MjticmVhaztjYXNlIDI6cj0xMDY3NjticmVhaztkZWZhdWx0OnJldHVybiB1cj1EfV89MHxhcltyPj4yXSxnPTB8YXJbKE09QSs4fDApPj4yXSwwfHRyW2UrOTM3ODQrKDQ0MDAqZ3wwKT4+MF18fHNyKDM5Njk4LDM5MjQyLDEyNzgsMzk3MTIpO3M9MHx0cltlKzkzNzg0Kyg0NDAwKmd8MCkrMj4+MF0sMHx0cltlKzExMDk2Kyg1MTY4KnN8MCk+PjBdfHxzcigzOTczOCwzOTI0MiwxMjgxLDM5NzEyKTtQbihfLDM5NzUyLEopLHI9QSs0fDAsYXJbVD4+Ml09dHJbcj4+MF0sUG4oXywzOTc5NSxUKSwoLTgmdHJbKEo9ZSszNzcyMTJ8MCk+PjBdKTw8MjQ+PjI0PT0xNiYmKGFyW1M+PjJdPXRyW0ErNT4+MF0sUG4oXywzOTgzOCxTKSk7YXJbTz4+Ml09YXJbTT4+Ml0sUG4oXywzOTg4MSxPKSwwfHRyW3I+PjBdfHwoYXJbej4+Ml09dHJbQSsxMj4+MF0sUG4oXywzOTkyNCx6KSxhcltVPj4yXT1hcltBKzE2Pj4yXSxQbihfLDM5OTY3LFUpKTt6PTB8YXJbKE89QSsyMHwwKT4+Ml0sYXJbaT4+Ml09MD09KDB8eik/NjY6MT09KDB8eik/ODA6NzMsUG4oXyw0MDAxMCxpKSwwfHRyW2UrOTM3ODQrKDQ0MDAqZ3wwKSszMT4+MF0mJihhcltmPj4yXT10cltBKzI0Pj4wXSxQbihfLDQwMDUzLGYpKTsxPT0oMHx0cltlKzExMDk2Kyg1MTY4KnN8MCkrNDgwPj4wXSkmJihhcltuPj4yXT10cltBKzI1Pj4wXSxQbihfLDQwMDk2LG4pKTthcltqPj4yXT1hcltBKzI4Pj4yXSxQbihfLDQwMTM5LGopLDI8PSgoMHx0cltKPj4wXSktMTkmMjU1KSYmKGo9QSszMnwwLGFyW3Q+PjJdPXRyW2o+PjBdLFBuKF8sNDAxODIsdCkscj1lKzExMDk2Kyg1MTY4KnN8MCkrNDcyMHwwLEo9KDB8YXJbZSsxMTA5NisoNTE2OCpzfDApKzQ3MjQ+PjJdKS0oMHxhcltyPj4yXSl8MCwwfHRyW2o+PjBdPzEwMDwoMHxKKSYmKEg9QSsxMzZ8MCxhcltvPj4yXT1hcltIPj4yXSxQbihfLDQwMjI1LG8pLHBjKCgwfGFyW3I+PjJdKSsoMTAwKigwfGFyW0g+PjJdKXwwKXwwLDE2LF8pKTooYXJbSD4+Ml09KDB8SikvMTAwfDAsUG4oXyw0MzM2NyxIKSxwYyhBKzM0fDAsMTYsXykpLDB8dHJbZSsxMTA5NisoNTE2OCpzfDApKzQ3MzI+PjBdJiYoMDwoMHxhcltlKzExMDk2Kyg1MTY4KnN8MCkrNDczNj4+Ml0pJiYoYXJbYT4+Ml09YXJbQSsxNDA+PjJdLFBuKF8sNDAyNjgsYSkpLGFyW2M+PjJdPWFyW0ErMTQ0Pj4yXSxQbihfLDQwMzE1LGMpKSwwfHRyW2UrMTEwOTYrKDUxNjgqc3wwKSs0OTAwPj4wXSYmKGFyW2w+PjJdPXRyW0ErMzI0Pj4wXSxQbihfLDQwMzYyLGwpKSk7MHx0cltlKzExMDk2Kyg1MTY4KnN8MCkrNDcwMz4+MF0mJihhclt1Pj4yXT10cltBKzMyNT4+MF0sUG4oXyw0MDQwMCx1KSxhcltiPj4yXT10cltBKzMyNj4+MF0sUG4oXyw0MDQzOCxiKSk7aWYoKDB8YXJbTz4+Ml0pPj4+MDwyKXtpZihyPUErMzI3fDAsYXJbeD4+Ml09dHJbcj4+MF0sUG4oXyw0MDQ3Nix4KSxTPUErMzI4fDAseD0wfHRyW3I+PjBdPzc5NjU5OjQwNTE1LGFyW1A+PjJdPWFyW1M+PjJdLGFyW1ArND4+Ml09eCxQbihfLDQwNTI2LFApLDB8YXJbTz4+Ml18fChQPTB8dHJbcj4+MF0/Nzk2NTk6NDA1MTUsYXJbTD4+Ml09YXJbQSszMzI+PjJdLGFyW0wrND4+Ml09UCxQbihfLDQwNTY2LEwpKSwwfHRyW2UrOTM3ODQrKDQ0MDAqZ3wwKSs0MTI1Pj4wXSYmMTwoMHxhcltBKzkxMj4+Ml0pKXtpZihMPUErMzM2fDAsYXJbSz4+Ml09dHJbTD4+MF0sUG4oXyw0MDYwNixLKSwwfHRyW0w+PjBdJiYwPCgwfGFyW1M+PjJdKSlmb3Iocj0wO0s9MHxjcltBKzMzOCtyPj4wXSxhcltxPj4yXT1yLGFyW3ErND4+Ml09SyxQbihfLDQwNjQ2LHEpLCgwfChyPXIrMXwwKSk8KDB8YXJbUz4+Ml0pOyk7aWYocT1BKzMzN3wwLGFyWyQ+PjJdPXRyW3E+PjBdLFBuKF8sNDA2NTYsJCksMHx0cltxPj4wXSYmMDwoMHxhclsoQUE9QSszMzJ8MCk+PjJdKSlmb3Iocj0wOyQ9MHxjcltBKzM1NCtyPj4wXSxhcltkPj4yXT1yLGFyWzQrZD4+Ml09JCxQbihfLDQwNjQ2LGQpLCgwfChyPXIrMXwwKSk8KDB8YXJbQUE+PjJdKTspO30wfGFyW08+PjJdfHwoYXJbaz4+Ml09dHJbQSszNzA+PjBdLFBuKF8sNDA2OTYsaykpLGFyW2g+PjJdPXRyW0ErMzcxPj4wXSxQbihfLDQwNzMzLGgpLDB8dHJbQSszMjQ+PjBdJiYoYXJbdz4+Ml09dHJbQSszNzI+PjBdLFBuKF8sNDA3NzAsdyksYXJbdj4+Ml09YXJbQSszNzY+PjJdLFBuKF8sNDA4MDcsdikpLDQ1PT0oMHwoVT0wIT0oMHx0cltlKzkzNzg0Kyg0NDAwKmd8MCkrMjk+PjBdKSYmMT09KDB8YXJbTz4+Ml0pPzQ3OjQ1KSkmJjB8dHJbZSs5Mzc4NCsoNDQwMCpnfDApKzMwPj4wXSYmMD09KDB8YXJbTz4+Ml0pJiYoVT00Nyk7QTpkb3tpZig0Nz09KDB8VSkpe2FyW20+PjJdPWNyW0ErMzgwPj4wXSxQbihfLDQwODQ0LG0pLDB8YXJbZSsxMTA5NisoNTE2OCpzfDApKzQ3Nj4+Ml0mJihhcltlQT4+Ml09Y3JbQSszODE+PjBdLFBuKF8sNDA4ODEsZUEpKSxUPUErMzMyfDAsTT0wO2Rve3I9MD09KDB8TSk7ZG97aWYocilVPTUzO2Vsc2V7aWYoMSE9KDB8TSkpYnJlYWs7aWYoMHxhcltPPj4yXSlicmVhayBBO1U9NTN9fXdoaWxlKDApO2Rve2lmKDUzPT0oMHxVKSl7aWYoISgoVT0wKTwoMHwoSj0wfGFyWyhyP1M6VCk+PjJdKSkpKWJyZWFrO2ZvcihyPTA7ZUE9MHxvcltBKzQ0NisoTTw8NSkrKHI8PDEpPj4xXSxhcltDPj4yXT1NLGFyWzQrQz4+Ml09cixhcls4K0M+PjJdPWVBLFBuKF8sNDA5MTgsQyksZUE9MHx0cltBKzUxMCsoTTw8NCkrcj4+MF0sYXJbRz4+Ml09TSxhcls0K0c+PjJdPXIsYXJbOCtHPj4yXT1lQSxQbihfLDQwOTU1LEcpLGVBPTB8b3JbQSs1NDIrKE08PDYpKyhyPDwyKT4+MV0sYXJbWj4+Ml09TSxhcls0K1o+PjJdPXIsYXJbOCtaPj4yXT0wLGFyWzEyK1o+PjJdPWVBLFBuKF8sNDA5OTIsWiksZUE9MHx0cltBKzY3MCsoTTw8NSkrKHI8PDEpPj4wXSxhcltwPj4yXT1NLGFyWzQrcD4+Ml09cixhcls4K3A+PjJdPTAsYXJbMTIrcD4+Ml09ZUEsUG4oXyw0MTAzMCxwKSxlQT0wfG9yW0ErNTQyKyhNPDw2KSsocjw8MikrMj4+MV0sYXJbeT4+Ml09TSxhcls0K3k+PjJdPXIsYXJbOCt5Pj4yXT0xLGFyWzEyK3k+PjJdPWVBLFBuKF8sNDA5OTIseSksZUE9MHx0cltBKzY3MCsoTTw8NSkrKHI8PDEpKzE+PjBdLGFyW0I+PjJdPU0sYXJbNCtCPj4yXT1yLGFyWzgrQj4+Ml09MSxhclsxMitCPj4yXT1lQSxQbihfLDQxMDMwLEIpLCgwfChyPXIrMXwwKSkhPSgwfEopOyk7fX13aGlsZSgwKTtNPU0rMXwwfXdoaWxlKDIhPSgwfE0pKX19d2hpbGUoMCk7YXJbRT4+Ml09YXJbQSs3MzY+PjJdLFBuKF8sNDEwNjgsRSl9YXJbWD4+Ml09YXJbQSs3NDA+PjJdLFBuKF8sNDExMDUsWCksMHx0cltlKzkzNzg0Kyg0NDAwKmd8MCkrMjg+PjBdJiYoYXJbVz4+Ml09YXJbQSs3NDQ+PjJdLFBuKF8sNDExMzQsVyksYXJbST4+Ml09YXJbQSs3NDg+PjJdLFBuKF8sNDExNjMsSSkpO0o9QSs3NTN8MCwwfHRyW2UrOTM3ODQrKDQ0MDAqZ3wwKSs0OD4+MF0mJihhcltyQT4+Ml09dHJbSj4+MF0sUG4oXyw0MTE5MixyQSkpO3I9QSs3NTR8MCxyQT0wfHRyW0o+PjBdPzQxMjMwOjQxMjQxLGFyW1Y+PjJdPXRyW3I+PjBdLGFyWzQrVj4+Ml09ckEsUG4oXyw0MTI1MixWKSwwfHRyW0o+PjBdJiYwPT0oMHx0cltyPj4wXSkmJihhcltGPj4yXT1hcltBKzc1Nj4+Ml0sUG4oXyw0MTI5OSxGKSxhcltSPj4yXT1hcltBKzc2MD4+Ml0sUG4oXyw0MTMyNCxSKSk7ZG97aWYoMHx0cltlKzkzNzg0Kyg0NDAwKmd8MCkrNDY+PjBdKXtpZigwPT0oMHx0cltBKzMyNT4+MF0pJiYwPT0oMHx0cltBKzMyNj4+MF0pJiYwfHRyW3I+PjBdKWJyZWFrO2FyW04+PjJdPXRyW0ErNzY0Pj4wXSxQbihfLDQxMzQ5LE4pfX13aGlsZSgwKTtpZigwPT0oMHx0cltlKzkzNzg0Kyg0NDAwKmd8MCkrMzQ+PjBdKSYmMD09KDB8dHJbZSs5Mzc4NCsoNDQwMCpnfDApKzMzPj4wXSkpcmV0dXJuIHVyPUQ7aWYoTT1BKzc2OHwwLGFyW1k+PjJdPWFyW00+PjJdLFBuKF8sNDE0MDAsWSksKDB8YXJbTT4+Ml0pPD0wKXJldHVybiB1cj1EO2lmKGFyW2lBPj4yXT1hcltBKzc3Mj4+Ml0sUG4oXyw0MTQzMyxpQSksKDB8YXJbTT4+Ml0pPD0wKXJldHVybiB1cj1EO0o9QSs3NzZ8MCxyPTA7Zm9yKDtpQT0wfGFyWygwfGFyW0o+PjJdKSsocjw8Mik+PjJdLGFyW1E+PjJdPXIsYXJbNCtRPj4yXT1pQSxQbihfLDQxNDY2LFEpLHI9cisxfDAsKDB8cik8KDB8YXJbTT4+Ml0pOyk7dXI9RH0ocyxBLGEpLHU9MHxmdW5jdGlvbihBLGUscixpLGYsbix0LG8pe0F8PTAsZXw9MCxyfD0wLGZ8PTAsbnw9MCx0fD0wLG98PTA7dmFyIGEsYyxsPTAsdT0wLGI9MCxzPTAsZD0wO3VyPShjPXVyKSsxNnwwLGw9YyxhclsoaXw9MCk+PjJdPTAsdHJbQSszNzcyMjg+PjBdPTAsdT0wfGFyW3IrOD4+Ml0sMHx0clsoYj1lKzkzNzg0Kyg0NDAwKnV8MCl8MCk+PjBdfHwoYXJbbD4+Ml09dSxmdW5jdGlvbihBLGUscil7QXw9MCxlfD0wLHJ8PTA7dmFyIGksZixuO2lmKHVyPShuPXVyKSsxNnwwLGk9biwhKC05OTk5PD0oMHxhclsxNDM5MV0pJiEwKSlyZXR1cm4gdXI9bjtmPTQyPT0oMHx0cltlPj4wXSksQT0wfGFyWzI1NDNdLGZ8fFVpKDQ0NDk5LDUsMSxBKTthcltpPj4yXT1yLFFjKEEsZSsoMSZmKXwwLGkpLE9pKEEpLHVyPW59KDEsMzQ4ODksbCksc3IoNTU3MzksMzQ3MDAsMTk4NywzNDkxNSkpO2lmKGFyWyhzPWUrMzc1MzkyfDApPj4yXT1iLGQ9MHx0cltlKzkzNzg0Kyg0NDAwKnV8MCkrMj4+MF0sYXJbKGw9ZSszNzUzODh8MCk+PjJdPWUrMTEwOTYrKDUxNjgqZHwwKSxhclsoYT1lKzM3NTM4NHwwKT4+Ml09ZSs2MDArKDY1NiooMHx0cltlKzExMDk2Kyg1MTY4KmR8MCkrMT4+MF0pfDApLGZ1bmN0aW9uKEEpe3ZhciBlPTAscj0wLGk9MCxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MDtyPTB8YXJbMzc1Mzg4KyhBfD0wKT4+Ml0sZT0oaT0wPT0oMHxyKSk/KGU9MHxhcltBKzM3NTM4ND4+Ml0pPygwfGFyW2UrOD4+Ml0pLTF8MDo2OigwfHRyW3IrMj4+MF0pLTF8MDtkb3tpZigoMHx0cltBKzM3NjExNj4+MF0pIT0oMHxlKSl7aWYoaT8oZT0wfGFyW0ErMzc1Mzg0Pj4yXSk/KGU9MHxhcltlKzg+PjJdLGY9MTApOmU9NjooZT0wfHRyW3IrMj4+MF0sZj0xMCksMTA9PSgwfGYpKXtpZighKDA8KDB8ZSkpKWJyZWFrO2U9ZSstMXwwfWZvcih0PWUrMXwwLG89QSszNzU4OTZ8MDs7KXtpZigoMHwoaT0oMHwobj0xMDAqZXwwKSkvKDB8dCl8MCkpPD0oMHwobj0obisxMDB8MCkvKDB8dCl8MCkpKWZvcihmPW4taXwwLHI9aTtjPTB8YXJbbz4+Ml0sZT0oYT0oMHxjKTwoMHxlKSk/YzplLHRyW0ErMzc1OTE2KyhyPDwxKT4+MF09ZSx0cltBKzM3NTkxNisocjw8MSkrMT4+MF09YT8xMDA6MjU1JigoMTAwKihyLWl8MCl8MCkvKDB8Zil8MCksKDB8cik8KDB8bik7KXI9cisxfDA7aWYoYXJbQSszNzYxMjArKGU8PDIpPj4yXT1uLCEoMDwoMHxlKSkpYnJlYWs7ZT1lKy0xfDB9fX13aGlsZSgwKTthPTB8YXJbQSszNzU5MDA+PjJdLGM9MHx0cltBKzM3NTkxNisoYTw8MSk+PjBdLGFyW0ErMzc1OTA0Pj4yXT1jLGFyW0ErMzc1OTA4Pj4yXT10cltBKzM3NTkxNisoYTw8MSkrMT4+MF0sYXJbQSszNzU5MTI+PjJdPWN9KEEpLDB8dHJbKGQ9cis0fDApPj4wXSl7aWYoYXJbZSszNzYyMDQ+PjJdPWFyW3IrMjg+PjJdLGw9MHxhcltsPj4yXSx1PTB8dHJbbCs0NzAzPj4wXT8wIT0oMHx0cltlKzUzMz4+MF0pOjEsLTE9PSgwfCh1PTB8aWEoZSszNzYxNDh8MCxsLEEsZixuLG8sdSkpKSlyZXR1cm4gYXJbaT4+Ml09OSx1cj1jLChyPTApfHI7bD0wfGFyW2UrMzc2MTU2Pj4yXSx1PSgwfGFyW2UrMzc2MTYwPj4yXSktbD4+Mj4+PjA+dT4+PjA/MHxhcltsKyh1PDwyKT4+Ml06MCx0clsoYj11KzEwNTE4fDApPj4wXT0wfHRyW3Q+PjBdLHRyW2IrMT4+MF09MHx0clt0KzE+PjBdLHRyW2IrMj4+MF09MHx0clt0KzI+PjBdLGFyWyhiPWUrMzc2MjI0fDApPj4yXT11LGw9MHxhclthPj4yXSxoYigwfCh0PXUrMTA4fDApLDB8bCw1OTIpLCgwfHQpPT0oMHxsKT8oaT1sKzYwNHwwLGFyWyh0PXUrNzEyfDApPj4yXT1hcltpPj4yXSxhclt0KzQ+PjJdPWFyW2krND4+Ml0sYXJbdCs4Pj4yXT1hcltpKzg+PjJdLGFyW3QrMTI+PjJdPWFyW2krMTI+PjJdLGFyW3QrMTY+PjJdPWFyW2krMTY+PjJdLGFyW3QrMjA+PjJdPWFyW2krMjA+PjJdKTooamUodSs3MDB8MCwwfGFyW2wrNTkyPj4yXSwwfGFyW2wrNTk2Pj4yXSksaT1sKzYwNHwwLGFyWyh0PXUrNzEyfDApPj4yXT1hcltpPj4yXSxhclt0KzQ+PjJdPWFyW2krND4+Ml0sYXJbdCs4Pj4yXT1hcltpKzg+PjJdLGFyW3QrMTI+PjJdPWFyW2krMTI+PjJdLGFyW3QrMTY+PjJdPWFyW2krMTY+PjJdLGFyW3QrMjA+PjJdPWFyW2krMjA+PjJdLEhlKHUrNzM2fDAsMHxhcltsKzYyOD4+Ml0sMHxhcltsKzYzMj4+Ml0pLHhlKHUrNzQ4fDAsMHxhcltsKzY0MD4+Ml0sMHxhcltsKzY0ND4+Ml0pKSx0clt1Kzc2MD4+MF09MHx0cltsKzY1Mj4+MF0sbD0wfGFyW3M+PjJdLGhiKDB8KHM9dSs1OTMyfDApLDB8bCw0MzQwKSwoMHxzKSE9KDB8bCkmJigkZSh1KzEwMjcyfDAsMHxhcltsKzQzNDA+PjJdLDB8YXJbbCs0MzQ0Pj4yXSksJGUodSsxMDI4NHwwLDB8YXJbbCs0MzUyPj4yXSwwfGFyW2wrNDM1Nj4+Ml0pLCRlKHUrMTAyOTZ8MCwwfGFyW2wrNDM2ND4+Ml0sMHxhcltsKzQzNjg+PjJdKSwkZSh1KzEwMzA4fDAsMHxhcltsKzQzNzY+PjJdLDB8YXJbbCs0MzgwPj4yXSksJGUodSsxMDMyMHwwLDB8YXJbbCs0Mzg4Pj4yXSwwfGFyW2wrNDM5Mj4+Ml0pKSxhclt1KzEwMzMyPj4yXT1lLGZ1bmN0aW9uKEEpe3ZhciBlLHI9MDswfChyPTB8YXJbMTAzNjArKEF8PTApPj4yXSkmJnZiKDB8ciwwLDMqKDB8YXJbQSsxMDM2ND4+Ml0pfDApOzB8KHI9MHxhcltBKzEwMzQwPj4yXSkmJnZiKDB8ciwwLDI0KigwfGFyW0ErMTAzNDQ+PjJdKXwwKTswfChyPTB8YXJbQSsxMDQ2MD4+Ml0pJiZ2YigwfHIsMCwwfGFyW0ErMTA0NjQ+PjJdKTtpZigoMHwoZT0wfGFyW0ErMTAzNDQ+PjJdKSk8PTApcmV0dXJuO0E9MHxhcltBKzEwNTI0Pj4yXSxyPTA7Zm9yKDthcltBKyg4MCpyfDApPj4yXT0wLHI9cisxfDAsKDB8cik8KDB8ZSk7KTt9KHUpLGw9ZSszNzcyMTJ8MDtkb3tpZigwfG1hKDB8dHJbbD4+MF0pKXtpZighKDB8aGEoMHx0cltsPj4wXSl8fDB8d2EoMHx0cltsPj4wXSl8fDAhPSgwfHRyW2UrMzc2MjA4Pj4wXSkpJiYwPT0oMHx0cltlKzM3NjIxMT4+MF0pKXt0cltlKzM3NjIwOT4+MF09MCx0cltlKzM3NjIxMD4+MF09MDticmVha310cltlKzM3NjIwOT4+MF09MSx0cltlKzM3NjIxMT4+MF09MH19d2hpbGUoMCk7MHx2YSgwfHRyW2w+PjBdKSYmMCE9KDB8dHJbZSszNzYyMDk+PjBdKT90clsxMDArKDB8YXJbYj4+Ml0pPj4wXT0wOnRyWzEwMCsoMHxhcltiPj4yXSk+PjBdPTAhPSgwfHRyW3IrMjQ+PjBdKSYxLGZ1bmN0aW9uKEEsZSxyKXtBfD0wLHJ8PTA7dmFyIGksZj0wLG49MCx0PTA7MHxtYSgwfHRyWyhpPTM3NzIxMisoZXw9MCl8MCk+PjBdKSYmMCE9KDB8dHJbZSszNzYyMDk+PjBdKT8oYXJbKG49ZSszNzYyMTJ8MCk+PjJdPTAsdHJbQSszNzcyMjg+PjBdPTEsQT1yKzI4fDAsQT0ocj0wKXxhclsoZj1BKT4+Ml0pOihuPTB8YXJbNTAzMisoMHxhcltlKzM3NTM4OD4+Ml0pPj4yXSxBPTB8YXJbKHQ9cisyOHwwKT4+Ml0sZj0wfGFyW2UrMzc2MjE2Pj4yXSxyPTB8YXJbZSszNzYyMjA+PjJdLCgwfEEpPCgwfGYpJiYoKDB8bikvMnwwKTw9KGYtQXwwKT9yPXIrbnwwOigwfGYpPCgwfEEpJiYocj1yLSgoKDB8bikvMnwwKTwoQS1mfDApP246MCl8MCksYXJbKG49ZSszNzYyMTJ8MCk+PjJdPXIsZj10KTtpZih0PTB8YXJbZSszNzYyMjQ+PjJdLGFyW3QrOTI+PjJdPUErcixhclt0Kzg4Pj4yXT1BLDB8dHJbdCsxMDUyMD4+MF0pcmV0dXJuO2lmKDB8ZnVuY3Rpb24oQSl7cmV0dXJuKDI1NSYoQXw9MCkpPDE1PzA9PSgxJkEpfDA6MH0oMHx0cltpPj4wXSkpcmV0dXJuO2lmKDB8dmEoMHx0cltpPj4wXSkpcmV0dXJuO2lmKDB8ZnVuY3Rpb24oQSl7cmV0dXJuKDF8KEF8PTApKTw8MjQ+PjI0PT03fDB9KDB8dHJbaT4+MF0pKXJldHVybjthcltlKzM3NjIxNj4+Ml09YXJbZj4+Ml0sYXJbZSszNzYyMjA+PjJdPWFyW24+PjJdfShBLGUsciksbD11Kzk2fDAsMHx0cltkPj4wXSYmKGFyW2w+PjJdPTEsZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MCxyfD0wO3ZhciBpLGYsbix0LG8sYSxjLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTAsQj0wO2lmKHVyPShjPXVyKSszMnwwLHQ9Yys0fDAsYXJbKG89KGY9YykrMTZ8MCk+PjJdPTAsYXJbKGE9NCtvfDApPj4yXT0wLGFyWzgrbz4+Ml09MCxpPTB8YXJbYXJbKG49ZSszNzYyMjR8MCk+PjJdPj4yXSwwfG1hKDB8dHJbKGg9ZSszNzcyMTJ8MCk+PjBdKSYmMHx0cltlKzM3NjIwOT4+MF0mJih1PTB8YXJbbj4+Ml0sdz0wfGFyW3UrOTI+PjJdLHY9QSszNzYxNTZ8MCxiPTB8YXJbKG09QSszNzYxNjB8MCk+PjJdLGw9MHxhclt2Pj4yXSwwPChiLWx8MCkpKWZvcihnPWUrMzc2MTU2fDAsWj1lKzM3NjE2MHwwLHA9OCtvfDAsaz0wLGQ9YjtiPTB8YXJbZz4+Ml0sYj0oMHxhcltaPj4yXSktYj4+Mj4+PjA+az4+PjA/MHxhcltiKyhrPDwyKT4+Ml06MCwwIT0oMHxhcltiKzk2Pj4yXSkmJigwfGFyW2IrOTI+PjJdKTwoMHx3KSYmKDB8YXJbKHk9YisxMDR8MCk+PjJdKT4+PjA+KDB8YXJbdT4+Ml0pPj4+MD8oYj0wfGFyW2I+PjJdLGFyW3Q+PjJdPWIsKHM9MHxhclthPj4yXSk+Pj4wPCgwfGFyW3A+PjJdKT4+PjA/KGFyW3M+PjJdPWIsYXJbYT4+Ml09cys0LGI9ZCk6KE1vKG8sdCksYj0wfGFyW20+PjJdLGw9MHxhclt2Pj4yXSx1PTB8YXJbbj4+Ml0pLGFyW3k+PjJdPWFyW3U+PjJdKTpiPWQsISgoYi1sPj4yfDApPD0oMHwoaz1rKzF8MCkpKTspZD1iO2lmKDB8aGEoMHx0cltoPj4wXSkpYXJbZSszNzY1NTI+PjJdPTAsYXJbZSszNzY1NTY+PjJdPTAsYXJbZSszNzY1NjA+PjJdPTAsdT1sPTA7ZWxzZXtpZigobD0wfHRyW3IrOTA4Pj4wXSk8PDI0Pj4yNClmb3Ioaz0yNTUmbCxkPXM9Yj0wO3k9MD09KDB8dHJbcis4NzYrYj4+MF0pLGw9KDEmeSkrZHwwLHU9KDEmKDFeeSkpK3N8MCxhclsoeT9lKzM3NjcwMCsoZDw8Mil8MDplKzM3NjU3Misoczw8Mil8MCk+PjJdPSgwfG9yW3IrODEyKyhiPDwxKT4+MV0pKygwfGFyWzkyKygwfGFyW24+PjJdKT4+Ml0pLCEoKDB8ayk8PSgwfChiPWIrMXwwKSkpOylzPXUsZD1sO2Vsc2UgbD11PTA7aWYoYXJbZSszNzY1NTI+PjJdPXUsKHU9MHx0cltyKzkwOT4+MF0pPDwyND4+MjQpZm9yKGs9MjU1JnUscz1iPTA7Oyl7aWYoeT0wPT0oMHx0cltyKzg5MitiPj4wXSksZD0oMSZ5KStsfDAsdT0oMSYoMV55KSkrc3wwLGFyWyh5P2UrMzc2NzAwKyhsPDwyKXwwOmUrMzc2NjM2KyhzPDwyKXwwKT4+Ml09KDB8b3Jbcis4NDQrKGI8PDEpPj4xXSkrKDB8YXJbOTIrKDB8YXJbbj4+Ml0pPj4yXSksKDB8ayk8PSgwfChiPWIrMXwwKSkpe2w9ZDticmVha31zPXUsbD1kfWVsc2UgdT0wO2lmKGFyW2UrMzc2NTU2Pj4yXT11LGFyW2UrMzc2NTYwPj4yXT1sLGs9cisxNDB8MCwwPCgoMHxhclsoaD1yKzE0NHwwKT4+Ml0pKygwfGFyW2s+PjJdKXwwKSlmb3Iodz1yKzI4fDAsdj1lKzM3NTM4OHwwLHU9bD1kPTA7Yj0wfGFyW2UrMzc2MjMyKyhkPDwyKT4+Ml0sMHx0clsocz1yKzI0NCtkfDApPj4wXSYmKGI9KDB8YXJbOTIrKDB8YXJbbj4+Ml0pPj4yXSkrYi0oMHxhclt3Pj4yXSktKDB8YnIoMHxhcls1MDMyKygwfGFyW3Y+PjJdKT4+Ml0sMHxhcltlKzM3NjM2MCsoZDw8Mik+PjJdKSl8MCksMHxhcltlKzM3NjI5NisoZDw8Mik+PjJdPyhhcltlKzM3Njc2NCsobDw8Mik+PjJdPWIsYXJbZSszNzY0MjQrKGw8PDIpPj4yXT10cltzPj4wXSxsPWwrMXwwKTooYXJbZSszNzY4MjgrKHU8PDIpPj4yXT1iLGFyW2UrMzc2NDg4Kyh1PDwyKT4+Ml09dHJbcz4+MF0sdT11KzF8MCksKDB8KGQ9ZCsxfDApKTwoKDB8YXJbaD4+Ml0pKygwfGFyW2s+PjJdKXwwKTspO2Vsc2UgdT1sPTB9YXJbKHY9ZSszNzY1NjR8MCk+PjJdPWwsYXJbKHc9ZSszNzY1Njh8MCk+PjJdPXUsbT1BKzM3NjE1NnwwLGw9KDB8YXJbKGc9QSszNzYxNjB8MCk+PjJdKS0oMHxhclttPj4yXSl8MCx1PWw+PjIsYXJbdD4+Ml09MCxhclsoYj00K3R8MCk+PjJdPTAsYXJbKHM9OCt0fDApPj4yXT0wLDB8dSYmKCgwfGwpPDAmJnpsKCkscD0wfGh1KCh5PTErKCh1Ky0xfDApPj4+NSl8MCk8PDIpLGFyW3Q+PjJdPXAsYXJbcz4+Ml09eSxhcltiPj4yXT11LHZiKDB8cCwwLCh5PXU+Pj41KTw8MnwwKSxsPXUtKHk8PDUpfDAsdT1wKyh5PDwyKXwwLDB8bCYmKGFyW3U+PjJdPWFyW3U+PjJdJn4oLTE+Pj4oMzItbHwwKSkpKTtpZigwPCgwfChsPTB8YXJbdj4+Ml0pKSlmb3IoZD1lKzM3NjE0OHwwLGs9ZSszNzYxNTZ8MCxoPWUrMzc1Mzg4fDAscz0wO2w9MHxhclsoYj1lKzM3Njc2NCsoczw8Mil8MCk+PjJdLGw9MHxhcltlKzM3NjQyNCsoczw8Mik+PjJdPzB8S28oZCxsLGksMSk6MHxxbyhkLGwsaSwxKSwoMHwoYXJbKHU9ZSszNzcwODQrKHM8PDIpfDApPj4yXT1sKSk8PS0xJiYobD0wfFRvKEEsZSwwfGFyW2g+PjJdLDB8YXJbYj4+Ml0sMSksYXJbdT4+Ml09bCkseT0oMHxhclt0Pj4yXSkrKGw+Pj41PDwyKXwwLGFyW3k+PjJdPWFyW3k+PjJdfDE8PCgzMSZsKSwwfHRyWzEwNTE2KygwfGFyWygwfGFyW2s+PjJdKSsobDw8Mik+PjJdKT4+MF0mJih0clsxMDUxNisoMHxhcltuPj4yXSk+PjBdPTQpLHM9cysxfDAsbD0wfGFyW3Y+PjJdLCgwfHMpPCgwfGwpOyk7aWYoMDwoMHwodT0wfGFyW3c+PjJdKSkpe2ZvcihrPWUrMzc2MTQ4fDAsaD1lKzM3NTM4OHwwLGQ9MDtsPTB8YXJbKGI9ZSszNzY4MjgrKGQ8PDIpfDApPj4yXSxsPTB8YXJbZSszNzY0ODgrKGQ8PDIpPj4yXT8wfEtvKGssbCxpLDEpOjB8cW8oayxsLGksMSksKDB8KGFyWyh1PWUrMzc3MTQ4KyhkPDwyKXwwKT4+Ml09bCkpPD0tMSYmKGw9MHxUbyhBLGUsMHxhcltoPj4yXSwwfGFyW2I+PjJdLDEpLGFyW3U+PjJdPWwpLHM9KDB8YXJbdD4+Ml0pKyhsPj4+NTw8Mil8MCxhcltzPj4yXT1hcltzPj4yXXwxPDwoMzEmbCksZD1kKzF8MCxzPTB8YXJbdz4+Ml0sKDB8ZCk8KDB8cyk7KTtsPTB8YXJbdj4+Ml19ZWxzZSBzPXU7aWYoMDwoMHxsKSlmb3IoYj0wfGFyW2UrMzc2MTU2Pj4yXSx1PTA7YXJbOTYrKDB8YXJbYisoYXJbZSszNzcwODQrKHU8PDIpPj4yXTw8Mik+PjJdKT4+Ml09MiwoMHwodT11KzF8MCkpPCgwfGwpOyk7aWYoMDwoMHxzKSlmb3IodT0wfGFyW2UrMzc2MTU2Pj4yXSxsPTA7YXJbOTYrKDB8YXJbdSsoYXJbZSszNzcxNDgrKGw8PDIpPj4yXTw8Mik+PjJdKT4+Ml09MiwoMHwobD1sKzF8MCkpPCgwfHMpOyk7aWYoMDwoMHxhclsoZD1lKzM3NjU1MnwwKT4+Ml0pKWZvcihrPWUrMzc2MTQ4fDAsaD1lKzM3NjE1NnwwLHc9ZSszNzUzODh8MCxzPTA7bD0wfEtvKGssMHxhclsodT1lKzM3NjU3Misoczw8Mil8MCk+PjJdLGksMCksKDB8KGFyWyhiPWUrMzc2ODkyKyhzPDwyKXwwKT4+Ml09bCkpPD0tMSYmKGw9MHxUbyhBLGUsMHxhclt3Pj4yXSwwfGFyW3U+PjJdLDApLGFyW2I+PjJdPWwpLHk9KDB8YXJbdD4+Ml0pKyhsPj4+NTw8Mil8MCxhclt5Pj4yXT1hclt5Pj4yXXwxPDwoMzEmbCksMHx0clsxMDUxNisoMHxhclsoMHxhcltoPj4yXSkrKGw8PDIpPj4yXSk+PjBdJiYodHJbMTA1MTYrKDB8YXJbbj4+Ml0pPj4wXT00KSwoMHwocz1zKzF8MCkpPCgwfGFyW2Q+PjJdKTspO2lmKDA8KDB8YXJbKGQ9ZSszNzY1NTZ8MCk+PjJdKSlmb3Ioaz1lKzM3NjE0OHwwLGg9ZSszNzYxNTZ8MCx3PWUrMzc1Mzg4fDAscz0wO2w9MHxLbyhrLDB8YXJbKHU9ZSszNzY2MzYrKHM8PDIpfDApPj4yXSxpLDApLCgwfChhclsoYj1lKzM3Njk1Nisoczw8Mil8MCk+PjJdPWwpKTw9LTEmJihsPTB8VG8oQSxlLDB8YXJbdz4+Ml0sMHxhclt1Pj4yXSwwKSxhcltiPj4yXT1sKSx5PSgwfGFyW3Q+PjJdKSsobD4+PjU8PDIpfDAsYXJbeT4+Ml09YXJbeT4+Ml18MTw8KDMxJmwpLDB8dHJbMTA1MTYrKDB8YXJbKDB8YXJbaD4+Ml0pKyhsPDwyKT4+Ml0pPj4wXSYmKHRyWzEwNTE2KygwfGFyW24+PjJdKT4+MF09NCksKDB8KHM9cysxfDApKTwoMHxhcltkPj4yXSk7KTtpZigwPCgwfGFyWyh1PWUrMzc2NTYwfDApPj4yXSkpZm9yKGI9ZSszNzYxNDh8MCxsPTA7cz0wfEtvKGIsMHxhcltlKzM3NjcwMCsobDw8Mik+PjJdLGksMCksLTE8KDB8KGFyW2UrMzc3MDIwKyhsPDwyKT4+Ml09cykpJiYoQT0oMHxhclt0Pj4yXSkrKHM+Pj41PDwyKXwwLGFyW0E+PjJdPWFyW0E+PjJdfDE8PCgzMSZzKSksKDB8KGw9bCsxfDApKTwoMHxhclt1Pj4yXSk7KTtpZih1PTB8YXJbZz4+Ml0sbD0wfGFyW20+PjJdLDA8KHUtbHwwKSlmb3Iodj1lKzM3NjE1NnwwLGg9ZSszNzYxNjB8MCx3PTgrb3wwLGs9MCxkPXU7ISgoKHU9YXJbKDB8YXJbdD4+Ml0pKyhrPj4+NTw8Mik+PjJdJjE8PCgzMSZrKT9kOih1PTB8YXJbdj4+Ml0sYj0oMHxhcltoPj4yXSktdT4+Mj4+PjA+az4+PjA/MHxhclt1KyhrPDwyKT4+Ml06MCx1PTB8YXJbbj4+Ml0sKDB8YikhPSgwfHUpJiYoMHxhclsoQj1iKzEwNHwwKT4+Ml0pPj4+MD4oMHxhclt1Pj4yXSk+Pj4wJiYwIT0oMHxhcltiKzk2Pj4yXSk/KGI9MHxhcltiPj4yXSxhcltmPj4yXT1iLChzPTB8YXJbYT4+Ml0pPj4+MDwoMHxhclt3Pj4yXSk+Pj4wPyhhcltzPj4yXT1iLGFyW2E+PjJdPXMrNCxiPWQpOihNbyhvLGYpLGI9MHxhcltnPj4yXSxsPTB8YXJbbT4+Ml0sdT0wfGFyW24+PjJdKSxhcltCPj4yXT1hclt1Pj4yXSxiKTpkKSktbD4+MnwwKTw9KDB8KGs9aysxfDApKSk7KWQ9dTsoMHwobD1yKzEzNDR8MCkpIT0oMHxvKSYmJGUobCwwfGFyW28+PjJdLDB8YXJbYT4+Ml0pOzB8KGw9MHxhclt0Pj4yXSkmJnZ1KGwpO2lmKCEobD0wfGFyW28+PjJdKSlyZXR1cm4gdXI9YzsoMHwodT0wfGFyW2E+PjJdKSkhPSgwfGwpJiYoYXJbYT4+Ml09dSsofigodSstNC1sfDApPj4+Mik8PDIpKTt2dShsKSx1cj1jfShBLGUscikpLGFyW2w+PjJdPTEsZnVuY3Rpb24oQSl7QXw9MCxhclsxNDM5MV09QX0oMHxhcls5MisoMHxhcltiPj4yXSk+PjJdKSx0cltBKzM3NjIwOD4+MF09MH1lbHNlIGlmKCEoMHxhcltlKzM3NjIyND4+Ml0pKXJldHVybiB1cj1jLChyPTApfHI7aWYoKDB8YXJbcisyMD4+Ml0pPj4+MDwyJiYhKDB8ZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MDt2YXIgaSxmLG4sdCxvLGEsYyxsLHUsYixzPTAsZD0wLGs9MCxoPTAsdz0wLHY9MCxtPTAsZz0wLFo9MDt1cj0oYj11cikrNDgwfDAsdj1iKzE5MnwwLHU9KGw9YikrMzg0fDAsbT0wfGFyWzkxMisocnw9MCk+PjJdLGg9MHxhclsoaT1yKzMyOHwwKT4+Ml0saz0oMHxtKTwoMHxoKT9oOm0scz05NisoQT11KXwwO2Zvcig7dHJbQT4+MF09MCxBPUErMXwwLCgwfEEpPCgwfHMpOyk7Zj1lKzM3NjU1MnwwLG49ZSszNzY1NTZ8MCx0PWUrMzc2NTY0fDAsbz1lKzM3Njg5MnwwLGE9ZSszNzY5NTZ8MCxjPWUrMzc3MDg0fDAsQT0wO2Zvcig7ISgoMHxrKTw9KDB8QSkpOyl7aWYoMDwoMHwoZD0wfGFyW2Y+PjJdKSkpZm9yKGhiKHYrKEE8PDIpfDAsMHxvLDB8YnIoKHM9QS1rfDApPj4+MDwodz0wLWR8MCk+Pj4wP3c6cywtNCkpLHM9MDsoMHwoQT1BKzF8MCkpPCgwfGspJigwfChzPXMrMXwwKSk8KDB8ZCk7KTtpZihkPTB8YXJbbj4+Ml0sKDB8QSk8KDB8aykmMDwoMHxkKSlmb3IoaGIodisoQTw8Mil8MCwwfGEsMHxicigocz1BLWt8MCk+Pj4wPCh3PTAtKDE8KDB8ZCk/ZDoxKXwwKT4+PjA/dzpzLC00KSkscz0wOygwfChBPUErMXwwKSk8KDB8aykmKDB8KHM9cysxfDApKTwoMHxkKTspO2lmKGQ9MHxhclt0Pj4yXSwoMHxBKTwoMHxrKSYwPCgwfGQpKWZvcih2Yih1K0F8MCwxLDAtKHM9KHM9QS1rfDApPj4+MDwodz0wLSgxPCgwfGQpP2Q6MSl8MCk+Pj4wP3c6cyl8MCksaGIodisoQTw8Mil8MCwwfGMsMHxicihzLC00KSkscz0wOygwfChBPUErMXwwKSk8KDB8aykmKDB8KHM9cysxfDApKTwoMHxkKTspO2lmKCFBKXtaPTEzO2JyZWFrfX1pZigxMz09KDB8WikpcmV0dXJuIDIwPT0oMHwoQT0wfGFyWyhzPWUrODR8MCk+PjJdKSk/KHM9MTAwMSxBPTE5KTooYXJbcz4+Ml09QSsxLHM9MTAxNiksYXJbZSs0KyhBPDwyKT4+Ml09cyx1cj1iLChlPTApfGU7MTc8PSgwfGgpJiZzcigzNDk0NCwzNDcwMCwxNzgxLDM0OTc3KTtBOmRve2lmKDA8KDB8aCkpe2ZvcihrPXIrMzM2fDAsaD1lKzM3NjE1NnwwLHc9ZSszNzYxNjB8MCxkPTA7Oyl7aWYoQT0wfHRyW2s+PjBdPzB8Y3JbciszMzgrZD4+MF06ZCxhclsocz1yKzkxNisoZDw8Mil8MCk+PjJdPWFyW3YrKEE8PDIpPj4yXSx0cltyKzEzMDArZD4+MF09MHx0clt1K0E+PjBdLEE9MHxhcltzPj4yXSxzPTB8YXJbaD4+Ml0sKDB8YXJbdz4+Ml0pLXM+PjI+Pj4wPD1BPj4+MCl7QT0wLFo9NTQ7YnJlYWt9aWYoIShBPTB8YXJbcysoQTw8Mik+PjJdKSl7QT0wLFo9NTQ7YnJlYWt9aWYoYXJbcisxMDQ0KyhkPDwyKT4+Ml09YXJbQSs5Mj4+Ml0sYXJbcisxMTcyKyhkPDwyKT4+Ml09YXJbQSs5Nj4+Ml0sZD1kKzF8MCwoMHwoQT0wfGFyW2k+PjJdKSk8PSgwfGQpKXtnPUE7YnJlYWsgQX19aWYoNTQ9PSgwfFopKXJldHVybiB1cj1iLDB8QX1lbHNlIGc9aH13aGlsZSgwKTtpZigwfGFyW3IrMjA+PjJdKXJldHVybiB1cj1iLDB8KGU9MSk7aD0wfGFyWyh2PXIrMzMyfDApPj4yXSxrPSgwfG0pPCgwfGgpP2g6bSxBPTA7Zm9yKDshKCgwfGspPD0oMHxBKSk7KXtpZigwPCgwfChkPTB8YXJbbj4+Ml0pKSlmb3IoaGIobCsoQTw8Mil8MCwwfGEsMHxicigocz1BLWt8MCk+Pj4wPChtPTAtZHwwKT4+PjA/bTpzLC00KSkscz0wOygwfChBPUErMXwwKSk8KDB8aykmKDB8KHM9cysxfDApKTwoMHxkKTspO2lmKGQ9MHxhcltmPj4yXSwoMHxBKTwoMHxrKSYwPCgwfGQpKWZvcihoYihsKyhBPDwyKXwwLDB8bywwfGJyKChzPUEta3wwKT4+PjA8KG09MC0oMTwoMHxkKT9kOjEpfDApPj4+MD9tOnMsLTQpKSxzPTA7KDB8KEE9QSsxfDApKTwoMHxrKSYoMHwocz1zKzF8MCkpPCgwfGQpOyk7aWYoZD0wfGFyW3Q+PjJdLCgwfEEpPCgwfGspJjA8KDB8ZCkpZm9yKHZiKDQ4K3UrQXwwLDEsMC0ocz0ocz1BLWt8MCk+Pj4wPChtPTAtKDE8KDB8ZCk/ZDoxKXwwKT4+PjA/bTpzKXwwKSxoYihsKyhBPDwyKXwwLDB8YywwfGJyKHMsLTQpKSxzPTA7KDB8KEE9QSsxfDApKTwoMHxrKSYoMHwocz1zKzF8MCkpPCgwfGQpOyk7aWYoIUEpe1o9Mzg7YnJlYWt9fWlmKDM4PT0oMHxaKSlyZXR1cm4gMjA9PSgwfChBPTB8YXJbKHM9ZSs4NHwwKT4+Ml0pKT8ocz0xMDAxLEE9MTkpOihhcltzPj4yXT1BKzEscz0xMDE2KSxhcltlKzQrKEE8PDIpPj4yXT1zLHVyPWIsKGU9MCl8ZTtpZigxNjwoMHxnKSlyZXR1cm4gMjA9PSgwfChBPTB8YXJbKHM9ZSs4NHwwKT4+Ml0pKT8ocz0xMDAxLEE9MTkpOihhcltzPj4yXT1BKzEscz0xMDEyKSxhcltlKzQrKEE8PDIpPj4yXT1zLHVyPWIsKGU9MCl8ZTsxNzw9KDB8aCkmJnNyKDM1MDExLDM0NzAwLDE4MzQsMzQ5NzcpO2lmKCgwfGgpPD0wKXJldHVybiB1cj1iLDB8KGU9MSk7aD1yKzMzN3wwLHc9ZSszNzYxNTZ8MCxrPWUrMzc2MTYwfDAsZD0wO2Zvcig7Oyl7aWYoQT0wfHRyW2g+PjBdPzB8Y3JbciszNTQrZD4+MF06ZCxhclsocz1yKzk4MCsoZDw8Mil8MCk+PjJdPWFyW2wrKEE8PDIpPj4yXSx0cltyKzEzMTYrZD4+MF09MHx0cls0OCt1K0E+PjBdLEE9MHxhcltzPj4yXSxzPTB8YXJbdz4+Ml0sKDB8YXJbaz4+Ml0pLXM+PjI+Pj4wPD1BPj4+MCl7QT0wLFo9NTQ7YnJlYWt9aWYoIShBPTB8YXJbcysoQTw8Mik+PjJdKSl7QT0wLFo9NTQ7YnJlYWt9aWYoYXJbcisxMTA4KyhkPDwyKT4+Ml09YXJbQSs5Mj4+Ml0sYXJbcisxMjM2KyhkPDwyKT4+Ml09YXJbQSs5Nj4+Ml0sKDB8KGQ9ZCsxfDApKT49KDB8YXJbdj4+Ml0pKXtBPTEsWj01NDticmVha319cmV0dXJuIDU0IT0oMHxaKT8wOih1cj1iLDB8QSl9KDAsZSxyKSkpcmV0dXJuIHVyPWMsKHI9MCl8cjt1PTB8dHJbcisxMj4+MF0/ODAwKygwfGFyWyhsPXU9ZSszNzYyMjh8MCk+PjJdKXwwOihsPWUrMzc2MjI4fDAscisxNnwwKTtyZXR1cm4gYXJbcis4MDA+PjJdPWFyW3U+PjJdLGFyW2w+PjJdPXIsdXI9YywwfChyPTEpfShBLEEscyxuLDB8YXJbKHU9cis4fDApPj4yXSwwfGFyW3UrND4+Ml0saSwwfGFyW3IrMTY+PjJdKSxhPTB8YXJbKGI9QSszNzYyMjR8MCk+PjJdLCF1KXJldHVybiAwfGEmJih0clthKzEwNTE2Pj4wXT0yKSxCYShBKzU0OHwwLHIpLDB8KGE9MHxhcltzKzEzNDQ+PjJdKSYmKCgwfChjPTB8YXJbKGk9cysxMzQ4fDApPj4yXSkpIT0oMHxhKSYmKGFyW2k+PjJdPWMrKH4oKGMrLTQtYXwwKT4+PjIpPDwyKSksdnUoYSkpLGt0KHMrMTMzMnwwKSwwfChhPTB8YXJbcys3NzY+PjJdKSYmKCgwfChjPTB8YXJbKGk9cys3ODB8MCk+PjJdKSkhPSgwfGEpJiYoYXJbaT4+Ml09YysofigoYystNC1hfDApPj4+Mik8PDIpKSx2dShhKSksdnUocykscz0wfGFyW24+PjJdLHVyPXQsMHxzO2lmKGFyW2Y+PjJdPXMsaT1hKzQ4fDAsbD0wfGFyWyhjPWErNTJ8MCk+PjJdLGFyW3M+PjJdPWwtKDB8YXJbaT4+Ml0pPj4yLCgwfGwpPT0oMHxhclthKzU2Pj4yXSk/ZnVuY3Rpb24oQSxlKXtlfD0wO3ZhciByLGksZixuLHQsbz0wLGE9MCxjPTAsbD0wO2Y9NCsoQXw9MCl8MCxuPTB8YXJbQT4+Ml0sdD0oMHxhcltmPj4yXSktbnwwLDEwNzM3NDE4MjM8KG89MSsoaT10Pj4yKXwwKT4+PjAmJnpsKCk7Yz0oMHxhclsobD1BKzh8MCk+PjJdKS1ufDAsYT1jPj4xLGE9Yz4+Mj4+PjA8NTM2ODcwOTExP2E+Pj4wPG8+Pj4wP286YToxMDczNzQxODIzO2Rve2lmKGEpe2lmKCEoMTA3Mzc0MTgyMzxhPj4+MCkpe2M9MHxodShhPDwyKTticmVha31adShsPTB8WCg4KSw0NDUxOSksYXJbbD4+Ml09MTc2NjAsSSgwfGwsNDAxNiw0MjgpfWVsc2UgYz0wfXdoaWxlKDApO2FyWyhyPWMrKGk8PDIpfDApPj4yXT1hcltlPj4yXSxvPXIrKDAtaTw8Mil8MCwwPCgwfHQpJiZoYigwfG8sMHxuLDB8dCk7aWYoYXJbQT4+Ml09byxhcltmPj4yXT00K3IsYXJbbD4+Ml09YysoYTw8MiksIW4pcmV0dXJuO3Z1KG4pfShpLGYpOihhcltsPj4yXT1zLGFyW2M+PjJdPTQrKDB8YXJbYz4+Ml0pKSxldChlLDEpLHJ0KGUpLGw9KDB8YXJbZT4+Ml0pLSgwfGFyW3IrMjA+PjJdKXwwLDA8KDB8YXJbKHU9cys3Njh8MCk+PjJdKSlmb3IoYz0oYT0wKXxhclsoaT1zKzc3NnwwKT4+Ml07az0wfFphKHIsMHxhcltjKyhhPDwyKT4+Ml0sbCksYz0wfGFyW2k+PjJdLGFyWyhkPWMrKGE8PDIpfDApPj4yXT0oMHxhcltkPj4yXSktaywoMHwoYT1hKzF8MCkpPCgwfGFyW3U+PjJdKTspO2lmKDB8dHJbcys0Pj4wXSl7Zm9yKG5hKChjPTB8aHUoMTA2ODgpKSs4fDApLGk9KGE9YysxMDYzMnwwKSs1NnwwOygwfChhPWErNHwoYXJbYT4+Ml09MCkpKTwoMHxpKTspO2FyW2Y+PjJdPWMsYXJbYz4+Ml09YXJbYj4+Ml0sKDB8KGk9MHxhclsoYT1BKzM3NzIyMHwwKT4+Ml0pKT09KDB8YXJbQSszNzcyMjQ+PjJdKT9mdW5jdGlvbihBLGUpe2V8PTA7dmFyIHIsaSxmLG4sdCxvPTAsYT0wLGM9MCxsPTA7Zj00KyhBfD0wKXwwLG49MHxhcltBPj4yXSx0PSgwfGFyW2Y+PjJdKS1ufDAsMTA3Mzc0MTgyMzwobz0xKyhpPXQ+PjIpfDApPj4+MCYmemwoKTtjPSgwfGFyWyhsPUErOHwwKT4+Ml0pLW58MCxhPWM+PjEsYT1jPj4yPj4+MDw1MzY4NzA5MTE/YT4+PjA8bz4+PjA/bzphOjEwNzM3NDE4MjM7ZG97aWYoYSl7aWYoISgxMDczNzQxODIzPGE+Pj4wKSl7Yz0wfGh1KGE8PDIpO2JyZWFrfVp1KGw9MHxYKDgpLDQ0NTE5KSxhcltsPj4yXT0xNzY2MCxJKDB8bCw0MDE2LDQyOCl9ZWxzZSBjPTB9d2hpbGUoMCk7YXJbKHI9YysoaTw8Mil8MCk+PjJdPWFyW2U+PjJdLG89cisoMC1pPDwyKXwwLDA8KDB8dCkmJmhiKDB8bywwfG4sMHx0KTtpZihhcltBPj4yXT1vLGFyW2Y+PjJdPTQrcixhcltsPj4yXT1jKyhhPDwyKSwhbilyZXR1cm47dnUobil9KEErMzc3MjE2fDAsZik6KGFyW2k+PjJdPWMsYXJbYT4+Ml09NCsoMHxhclthPj4yXSkpfWVsc2UgYT1BKzM3NzIyMHwwO3JldHVybigwfGFyW0ErMzc3MjE2Pj4yXSkhPSgwfGFyW2E+PjJdKSYmKGw9MHxodSgxNTIpLGFyW2w+PjJdPTAsYXJbKGk9bCs0fDApPj4yXT0wLGFyW2wrMzI+PjJdPTAsRG4obCs0NHwodHJbbCszNj4+MF09MCkpLGFyW2wrMTI0Pj4yXT0wLGFyW2wrMTI4Pj4yXT0tMSxhcltsKzEzMj4+Ml09LTEsYXJbbCsxMzY+PjJdPTAsYXJbbCsxNDQ+PjJdPUEsYXJbbCs0MD4+Ml09MCxhcltsKzE0MD4+Ml09MCxhcltmPj4yXT1sLGFyW2w+PjJdPXIsYXJbaT4+Ml09cyxhclsoaT1sKzh8MCk+PjJdPWFyW2U+PjJdLGFyW2krND4+Ml09YXJbZSs0Pj4yXSxhcltpKzg+PjJdPWFyW2UrOD4+Ml0sYXJbaSsxMj4+Ml09YXJbZSsxMj4+Ml0sYXJbaSsxNj4+Ml09YXJbZSsxNj4+Ml0sYXJbaSsyMD4+Ml09YXJbZSsyMD4+Ml0sdHJbbCszNj4+MF09MHx0cltBKzM3NzIyOD4+MF0sYT0wfGFyWygwfGFyW2E+PjJdKS00Pj4yXSwoMHwoYz0wfGFyWyhpPWErMTA2MzZ8MCk+PjJdKSk9PSgwfGFyW2ErMTA2NDA+PjJdKT9mdW5jdGlvbihBLGUpe2V8PTA7dmFyIHIsaSxmLG4sdCxvPTAsYT0wLGM9MCxsPTA7Zj00KyhBfD0wKXwwLG49MHxhcltBPj4yXSx0PSgwfGFyW2Y+PjJdKS1ufDAsMTA3Mzc0MTgyMzwobz0xKyhpPXQ+PjIpfDApPj4+MCYmemwoKTtjPSgwfGFyWyhsPUErOHwwKT4+Ml0pLW58MCxhPWM+PjEsYT1jPj4yPj4+MDw1MzY4NzA5MTE/YT4+PjA8bz4+PjA/bzphOjEwNzM3NDE4MjM7ZG97aWYoYSl7aWYoISgxMDczNzQxODIzPGE+Pj4wKSl7Yz0wfGh1KGE8PDIpO2JyZWFrfVp1KGw9MHxYKDgpLDQ0NTE5KSxhcltsPj4yXT0xNzY2MCxJKDB8bCw0MDE2LDQyOCl9ZWxzZSBjPTB9d2hpbGUoMCk7YXJbKHI9YysoaTw8Mil8MCk+PjJdPWFyW2U+PjJdLG89cisoMC1pPDwyKXwwLDA8KDB8dCkmJmhiKDB8bywwfG4sMHx0KTtpZihhcltBPj4yXT1vLGFyW2Y+PjJdPTQrcixhcltsPj4yXT1jKyhhPDwyKSwhbilyZXR1cm47dnUobil9KGErMTA2MzJ8MCxmKTooYXJbYz4+Ml09bCxhcltpPj4yXT00KygwfGFyW2k+PjJdKSkpLGs9MHxZbyhBLGYpLGFyW24+PjJdPWssdXI9dCwoaz0wKXxrfWZ1bmN0aW9uIGlyKEEsZSxyLGksZixuLHQpe0F8PTAsZXw9MCxmfD0wLG58PTAsdHw9MDt2YXIgbyxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wLG09MCxnPTAsWj0wO2ZvcihjPXVyPShvPXVyKSszMSYtMzIsdXI9dXIrMTEyfDAsMTAwPChsPSgoaXw9MCktKHJ8PTApfDApLzEyfDApPj4+MD8oYz0wfHljKGwpKT9nPWE9YzpndSgpOihhPWMsZz0wKSxjPTAsYj1yLHM9YTsoMHxiKSE9KDB8aSk7KSh1PTB8dHJbYis4KzM+PjBdKTw8MjQ+PjI0PDA/dT0wfGFyW2IrND4+Ml06dSY9MjU1LHU/dHJbcz4+MF09MToodHJbcz4+MF09MixjPWMrMXwwLGw9bCstMXwwKSxiPWIrMTJ8MCxzPXMrMXwwO209MCx3PWM7QTpmb3IoOzspe2M9MHxhcltBPj4yXTtkb3tpZihjKXtpZigwfFVmKGM9KDB8KHU9MHxhcltjKzEyPj4yXSkpPT0oMHxhcltjKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbYz4+Ml0pPj4yXV0oYyk6MHxnZigwfGFyW3U+PjJdKSwtMSkpe2FyW0E+PjJdPTAscz0xO2JyZWFrfXM9MD09KDB8YXJbQT4+Ml0pO2JyZWFrfXM9MX13aGlsZSgwKTtpZihjPSh1PTB8YXJbZT4+Ml0pPzB8VWYoYz0oMHwoYz0wfGFyW3UrMTI+PjJdKSk9PSgwfGFyW3UrMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt1Pj4yXSk+PjJdXSh1KTowfGdmKDB8YXJbYz4+Ml0pLC0xKT8odT1hcltlPj4yXT0wLDEpOjA6KHU9MCwxKSxiPTB8YXJbQT4+Ml0sISgwIT0oMHxsKSYoc15jKSkpYnJlYWs7Zm9yKGM9KDB8KGM9MHxhcltiKzEyPj4yXSkpPT0oMHxhcltiKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbYj4+Ml0pPj4yXV0oYik6MHxnZigwfGFyW2M+PjJdKSx0fHwoYz0wfEhiWzMxJmFyWzI4KygwfGFyW2Y+PjJdKT4+Ml1dKGYsYykpLHY9bSsxfDAsaz1yLGQ9MCxoPWE7KDB8aykhPSgwfGkpOyl7ZG97aWYoMT09KDB8dHJbaD4+MF0pKXtpZih1PSgwfHRyWyhiPWsrOCszfDApPj4wXSk8MD8wfGFyW2s+PjJdOmssdT0wfGFyW3UrKG08PDIpPj4yXSx0fHwodT0wfEhiWzMxJmFyWzI4KygwfGFyW2Y+PjJdKT4+Ml1dKGYsdSkpLHM9bCstMXwwLCgwfGMpIT0oMHx1KSl7dHJbaD4+MF09MCx1PWQsYj13LGw9czticmVha30odT0wfHRyW2I+PjBdKTw8MjQ+PjI0PDA/dT0wfGFyW2srND4+Ml06dSY9MjU1LCgwfHUpPT0oMHx2KT8odHJbaD4+MF09MixiPXcrKHU9MSl8MCxsPXMpOih1PTEsYj13KX1lbHNlIHU9ZCxiPXd9d2hpbGUoMCk7az1rKzEyfDAsZD11LGg9aCsxfDAsdz1ifWlmKGQpaWYoYz0wfGFyW0E+PjJdLCgwfChiPTB8YXJbKHU9YysxMnwwKT4+Ml0pKT09KDB8YXJbYysxNj4+Ml0pP2piWzEyNyZhcls0MCsoMHxhcltjPj4yXSk+PjJdXShjKTooYXJbdT4+Ml09Yis0LGdmKDB8YXJbYj4+Ml0pKSwxPCh3K2x8MCk+Pj4wKWZvcihiPXIscz1hLGM9dzs7KXtpZigoMHxiKT09KDB8aSkpe209dix3PWM7Y29udGludWUgQX0yPT0oMHx0cltzPj4wXSkmJigodT0wfHRyW2IrOCszPj4wXSk8PDI0Pj4yNDwwP3U9MHxhcltiKzQ+PjJdOnUmPTI1NSwoMHx1KSE9KDB8dikmJihjPWMrLTF8KHRyW3M+PjBdPTApKSksYj1iKzEyfDAscz1zKzF8MH1lbHNlIG09djtlbHNlIG09dn1kb3tpZihiKXtpZigwfFVmKGM9KDB8KGM9MHxhcltiKzEyPj4yXSkpPT0oMHxhcltiKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbYj4+Ml0pPj4yXV0oYik6MHxnZigwfGFyW2M+PjJdKSwtMSkpe2FyW0E+PjJdPTAsbD0xO2JyZWFrfWw9MD09KDB8YXJbQT4+Ml0pO2JyZWFrfWw9MX13aGlsZSgwKTtkb3tpZih1KXtpZigwfFVmKGM9KDB8KGM9MHxhclt1KzEyPj4yXSkpPT0oMHxhclt1KzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbdT4+Ml0pPj4yXV0odSk6MHxnZigwfGFyW2M+PjJdKSwtMSkpe2FyW2U+PjJdPTAsWj00MTticmVha31pZihsKWJyZWFrO1o9Nzc7YnJlYWt9Wj00MX13aGlsZSgwKTtmb3IoNDE9PSgwfFopJiZsJiYoWj03NyksNzc9PSgwfFopJiYoYXJbbj4+Ml09MnxhcltuPj4yXSk7Oyl7aWYoKDB8cik9PSgwfGkpKXtaPTgxO2JyZWFrfWlmKDI9PSgwfHRyW2E+PjBdKSlicmVhaztyPXIrMTJ8MCxhPWErMXwwfXJldHVybiA4MT09KDB8WikmJihhcltuPj4yXT00fGFyW24+PjJdLHI9aSksQmMoZyksdXI9bywwfHJ9ZnVuY3Rpb24gZnIoQSxlLHIsaSxmKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTA7dmFyIG4sdDtyZXR1cm4gdD11cj0obj11cikrMzEmLTMyLHVyPXVyKzE2fDAsYXJbdD4+Ml09ZixmPTB8cmYocikscj0wfFljKEEsZSxpLHQpLDB8ZiYmcmYoZiksdXI9biwwfHJ9ZnVuY3Rpb24gbnIoQSxlLHIpe0F8PTAsZXw9MCxyfD0wO3ZhciBpPTA7QTpkb3tzd2l0Y2goKDE3NiZhcltyKzQ+PjJdKTw8MjQ+PjI0KXtjYXNlIDE2OnN3aXRjaChpPUErMXwwLChyPTB8dHJbQT4+MF0pPDwyND4+MjQpe2Nhc2UgNDM6Y2FzZSA0NTpBPWk7YnJlYWsgQX1pZigxPChlLUF8MCkmcjw8MjQ+PjI0PT00OCl7c3dpdGNoKDB8dHJbaT4+MF0pe2Nhc2UgODg6Y2FzZSAxMjA6YnJlYWs7ZGVmYXVsdDowO2JyZWFrIEF9QT1BKzJ8MH1lbHNlIDA7YnJlYWs7Y2FzZSAzMjpBPWU7YnJlYWs7ZGVmYXVsdDowfX13aGlsZSgwKTtyZXR1cm4gMHxBfWZ1bmN0aW9uIGRyKEEsZSxyKXtBfD0wLGV8PTA7dmFyIGksZixuLHQ9MDtmb3IoMjA0OCYocnw9MCkmJih0cltBPj4wXT00MyxBPUErMXwwKSwxMDI0JnImJih0cltBPj4wXT0zNSxBPUErMXwwKSxpPTAhPSgxNjM4NCZyfDApLChmPTI2MD09KDB8KG49MjYwJnIpKSk/dD0wOih0cltBPj4wXT00Nix0cltBKzE+PjBdPTQyLHQ9MSxBPUErMnwwKTsocj0wfHRyW2U+PjBdKTw8MjQ+PjI0Oyl0cltBPj4wXT1yLGU9ZSsxfDAsQT1BKzF8MDtBOmRve3N3aXRjaCg1MTEmbil7Y2FzZSA0OnI9aT83MDoxMDI7YnJlYWs7Y2FzZSAyNTY6cj1pPzY5OjEwMTticmVhaztkZWZhdWx0OmlmKGYpe3I9aT82NTo5NzticmVhayBBfXI9aT83MToxMDM7YnJlYWsgQX19d2hpbGUoMCk7cmV0dXJuIHRyW0E+PjBdPXIsMHx0fWZ1bmN0aW9uIGtyKEEsZSxyLGkpe0F8PTAsZXw9MCxyfD0wLGl8PTA7dmFyIGYsbjtyZXR1cm4gbj11cj0oZj11cikrMzEmLTMyLHVyPXVyKzE2fDAsYXJbbj4+Ml09aSxpPTB8cmYoZSksZT0wfGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTAscnw9MDt2YXIgaSxmPTAsbj0wLHQ9MDtmPXVyPShpPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxhcltmPj4yXT1hcltyPj4yXSxBPTA8PSgwfChmPTB8WWMoMCwwLGUsZikpKSYmKHQ9MHx5YyhuPWYrMXwwKSwwIT0oMHwoYXJbQT4+Ml09dCkpKT8wfFljKHQsbixlLHIpOi0xO3JldHVybiB1cj1pLDB8QX0oQSxyLG4pLDB8aSYmcmYoaSksdXI9ZiwwfGV9ZnVuY3Rpb24gaHIoQSxlLHIsaSxmLG4sdCl7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTA7dmFyIG8sYSxjLGwsdSxiLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wLG09MCxnPTAsWj0wO3N3aXRjaChsPXVyPShiPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCx1PTB8dW4odHw9MCw1OTIzMiksYz0wfHVuKHQsNTkyNDgpLGZzWzYzJmFyWzIwKygwfGFyW2M+PjJdKT4+Ml1dKGwsYyksYXJbbj4+Ml09aSwodD0wfHRyW0E+PjBdKTw8MjQ+PjI0KXtjYXNlIDQzOmNhc2UgNDU6dj0wfEhiWzMxJmFyWzI4KygwfGFyW3U+PjJdKT4+Ml1dKHUsdCkscz0wfGFyW24+PjJdLGFyW24+PjJdPXMrMSx0cltzPj4wXT12LHM9QSsxfDA7YnJlYWs7ZGVmYXVsdDpzPUF9dj1yO0E6ZG97aWYoMTwodi1zfDApJiY0OD09KDB8dHJbcz4+MF0pKXtzd2l0Y2goMHx0clsodD1zKzF8MCk+PjBdKXtjYXNlIDg4OmNhc2UgMTIwOmJyZWFrO2RlZmF1bHQ6dD1zLG09MTA7YnJlYWsgQX1mb3IoaD0wfEhiWzMxJmFyWzI4KygwfGFyW3U+PjJdKT4+Ml1dKHUsNDgpLHc9MHxhcltuPj4yXSxhcltuPj4yXT13KzEsdHJbdz4+MF09aCxzPXMrMnwwLHc9MHxIYlszMSZhclsyOCsoMHxhclt1Pj4yXSk+PjJdXSh1LDB8dHJbdD4+MF0pLHQ9MHxhcltuPj4yXSxhcltuPj4yXT10KzEsdHJbdD4+MF09dyx0PXM7Oyl7aWYocj4+PjA8PXQ+Pj4wKWJyZWFrIEE7aWYoISgwfGxmKHc9MHx0clt0Pj4wXSxkbigpKSkpYnJlYWsgQTt0PXQrMXwwfX1lbHNlIHQ9cyxtPTEwfXdoaWxlKDApO0E6ZG97aWYoMTA9PSgwfG0pKWZvcig7Oyl7aWYocj4+PihtPTApPD10Pj4+MClicmVhayBBO2lmKCEoMHxhZih3PTB8dHJbdD4+MF0sZG4oKSkpKWJyZWFrIEE7dD10KzF8MCxtPTEwfX13aGlsZSgwKTtrPTB8dHJbKG89MTErbHwwKT4+MF0sYT00K2x8MCxoPXMsdz1BO0E6ZG97aWYoMHwoazw8MjQ+PjI0PDA/MHxhclthPj4yXToyNTUmaykpe2U6ZG97aWYoKDB8cykhPSgwfHQpKWZvcihBPXQsZD1zOzspe2lmKChBPUErLTF8MCk+Pj4wPD1kPj4+MClicmVhayBlO2s9MHx0cltkPj4wXSx0cltkPj4wXT0wfHRyW0E+PjBdLHRyW0E+PjBdPWssZD1kKzF8MH19d2hpbGUoMCk7Zm9yKGs9MHxqYlsxMjcmYXJbMTYrKDB8YXJbYz4+Ml0pPj4yXV0oYyksQT1kPTA7ISh0Pj4+MDw9cz4+PjApOykwPChnPTB8dHJbKCgwfHRyW28+PjBdKTwwPzB8YXJbbD4+Ml06bCkrQT4+MF0pPDwyND4+MjQmKDB8ZCk9PShnPDwyND4+MjR8MCkmJihkPTB8YXJbbj4+Ml0sYXJbbj4+Ml09ZCsxLHRyW2Q+PjBdPWssQT0oQT4+PjA8KCgoZD0wfHRyW28+PjBdKTw8MjQ+PjI0PDA/MHxhclthPj4yXToyNTUmZCktMXwwKT4+PjAmMSkrQXwwLGQ9MCksWj0wfEhiWzMxJmFyWzI4KygwfGFyW3U+PjJdKT4+Ml1dKHUsMHx0cltzPj4wXSksZz0wfGFyW24+PjJdLGFyW24+PjJdPWcrMSx0cltnPj4wXT1aLHM9cysxfDAsZD1kKzF8MDtpZigoMHwoQT1pKyhoLXcpfDApKT09KDB8KHM9MHxhcltuPj4yXSkpKUE9dTtlbHNlIGZvcig7Oyl7aWYoKHM9cystMXwwKT4+PjA8PUE+Pj4wKXtBPXU7YnJlYWsgQX1aPTB8dHJbQT4+MF0sdHJbQT4+MF09MHx0cltzPj4wXSx0cltzPj4wXT1aLEE9QSsxfDB9fWVsc2UgUGJbNyZhclszMisoMHxhclt1Pj4yXSk+PjJdXSh1LHMsdCwwfGFyW24+PjJdKSxhcltuPj4yXT0oMHxhcltuPj4yXSkrKHQtaCksQT11fXdoaWxlKDApO2Zvcig7IShyPj4+MDw9dD4+PjApOyl7aWYocz0wfHRyW3Q+PjBdLHQ9dCsxfDAsczw8MjQ+PjI0PT00Nil7bT0yOTticmVha31nPTB8SGJbMzEmYXJbMjgrKDB8YXJbQT4+Ml0pPj4yXV0odSxzKSxaPTB8YXJbbj4+Ml0sYXJbbj4+Ml09WisxLHRyW1o+PjBdPWd9Mjk9PSgwfG0pJiYoZz0wfGpiWzEyNyZhclsxMisoMHxhcltjPj4yXSk+PjJdXShjKSxaPTB8YXJbbj4+Ml0sYXJbbj4+Ml09WisxLHRyW1o+PjBdPWcpLFBiWzcmYXJbMzIrKDB8YXJbdT4+Ml0pPj4yXV0odSx0LHIsMHxhcltuPj4yXSksWj0oMHxhcltuPj4yXSkrKHYtdCl8MCxhcltuPj4yXT1aLGFyW2Y+PjJdPSgwfGUpPT0oMHxyKT9aOmkrKGUtdyl8MCxCdShsKSx1cj1ifWZ1bmN0aW9uIHdyKEEsZSxyLGkpe0F8PTAsZXw9MCxyfD0wO3ZhciBmPTA7Zm9yKDIwNDgmKGl8PTApJiYodHJbQT4+MF09NDMsQT1BKzF8MCksZj01MTImaT8odHJbQT4+MF09MzUsQSsxfDApOkE7KEE9MHx0cltlPj4wXSk8PDI0Pj4yNDspdHJbZj4+MF09QSxlPWUrMXwwLGY9ZisxfDA7c3dpdGNoKDc0Jmkpe2Nhc2UgNjQ6QT0xMTE7YnJlYWs7Y2FzZSA4OkE9MTYzODQmaXwwPzg4OjEyMDticmVhaztkZWZhdWx0OkE9cj8xMDA6MTE3fXRyW2Y+PjBdPUF9ZnVuY3Rpb24gdnIoQSxlLHIsaSxmLG4sdCl7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTA7dmFyIG8sYSxjLGwsdSxiLHM9MCxkPTAsaz0wLGg9MCx3PTA7aWYodT11cj0oYj11cikrMzEmLTMyLHVyPXVyKzE2fDAsYz0wfHVuKHR8PTAsNTkyMzIpLGQ9MHx1bih0LDU5MjQ4KSxmc1s2MyZhclsyMCsoMHxhcltkPj4yXSk+PjJdXSh1LGQpLGE9NCt1fDAsbD1BLHM9ciwwfCgoaz0wfHRyWyhvPTExK3V8MCk+PjBdKTw8MjQ+PjI0PDA/MHxhclthPj4yXToyNTUmaykpe3N3aXRjaChhcltuPj4yXT1pLCh0PTB8dHJbQT4+MF0pPDwyND4+MjQpe2Nhc2UgNDM6Y2FzZSA0NTp0PTB8SGJbMzEmYXJbMjgrKDB8YXJbYz4+Ml0pPj4yXV0oYyx0KSxrPTB8YXJbbj4+Ml0sYXJbbj4+Ml09aysxLHRyW2s+PjBdPXQsQT1BKzF8MH1BOmRve2lmKDE8KHMtQXwwKSYmNDg9PSgwfHRyW0E+PjBdKSl7c3dpdGNoKDB8dHJbKHQ9QSsxfDApPj4wXSl7Y2FzZSA4ODpjYXNlIDEyMDpicmVhaztkZWZhdWx0OmJyZWFrIEF9az0wfEhiWzMxJmFyWzI4KygwfGFyW2M+PjJdKT4+Ml1dKGMsNDgpLHM9MHxhcltuPj4yXSxhcltuPj4yXT1zKzEsdHJbcz4+MF09ayxzPTB8SGJbMzEmYXJbMjgrKDB8YXJbYz4+Ml0pPj4yXV0oYywwfHRyW3Q+PjBdKSxrPTB8YXJbbj4+Ml0sYXJbbj4+Ml09aysxLHRyW2s+PjBdPXMsQT1BKzJ8MH19d2hpbGUoMCk7QTpkb3tpZigoMHxBKSE9KDB8cikpZm9yKHQ9cixzPUE7Oyl7aWYoKHQ9dCstMXwwKT4+PjA8PXM+Pj4wKWJyZWFrIEE7az0wfHRyW3M+PjBdLHRyW3M+PjBdPTB8dHJbdD4+MF0sdHJbdD4+MF09ayxzPXMrMXwwfX13aGlsZSgwKTtmb3Ioaz0wfGpiWzEyNyZhclsxNisoMHxhcltkPj4yXSk+PjJdXShkKSxkPUEscz10PTA7IShyPj4+MDw9ZD4+PjApOykoaD0wfHRyWygoMHx0cltvPj4wXSk8MD8wfGFyW3U+PjJdOnUpK3Q+PjBdKTw8MjQ+PjI0IT0wJigwfHMpPT0oaDw8MjQ+PjI0fDApJiYocz0wfGFyW24+PjJdLGFyW24+PjJdPXMrMSx0cltzPj4wXT1rLHQ9KHQ+Pj4wPCgoKHM9MHx0cltvPj4wXSk8PDI0Pj4yNDwwPzB8YXJbYT4+Ml06MjU1JnMpLTF8MCk+Pj4wJjEpK3R8MCxzPTApLHc9MHxIYlszMSZhclsyOCsoMHxhcltjPj4yXSk+PjJdXShjLDB8dHJbZD4+MF0pLGg9MHxhcltuPj4yXSxhcltuPj4yXT1oKzEsdHJbaD4+MF09dyxkPWQrMXwwLHM9cysxfDA7aWYoKDB8KHQ9aSsoQS1sKXwwKSkhPSgwfChBPTB8YXJbbj4+Ml0pKSl7Zm9yKDshKChBPUErLTF8MCk+Pj4wPD10Pj4+MCk7KXc9MHx0clt0Pj4wXSx0clt0Pj4wXT0wfHRyW0E+PjBdLHRyW0E+PjBdPXcsdD10KzF8MDt0PTB8YXJbbj4+Ml19fWVsc2UgUGJbNyZhclszMisoMHxhcltjPj4yXSk+PjJdXShjLEEscixpKSx0PWkrKHMtbCl8MCxhcltuPj4yXT10O2FyW2Y+PjJdPSgwfGUpPT0oMHxyKT90OmkrKGUtbCl8MCxCdSh1KSx1cj1ifWZ1bmN0aW9uIG1yKEEsZSxyLGksZixuKXtlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTA7dmFyIHQsbyxhLGM9MCxsPTAsdT0wLGI9MCxzPTAsZD0wLGs9MCxoPTA7bz11cj0oYT11cikrMzEmLTMyLHVyPXVyKzE2fDAsdD0xMitvfDAsYz0wfGFyWyhBfD0wKT4+Ml07QTpkb3tpZihjKXtpZihsPSgwfChsPWktKGg9ZSk+PjIpKTwoMHwodT0wfGFyWyhiPWYrMTJ8MCk+PjJdKSk/dS1sfDA6MCxmPShoPSh1PXIpLWh8MCk+PjIsMDwoMHxoKSYmKDB8eGJbNjMmYXJbNDgrKDB8YXJbYz4+Ml0pPj4yXV0oYyxlLGYpKSE9KDB8Zikpe2M9YXJbQT4+Ml09MDticmVha31kb3tpZigwPCgwfGwpKXthcltvPj4yXT0wLGFyWzQrbz4+Ml09MCwxMDczNzQxODA3PGw+Pj4oYXJbOCtvPj4yXT0wKSYmcHUoKTtkb3tpZigyPD1sPj4+MCl7aWYoISgxMDczNzQxODIzPChmPWwrNCYyMTQ3NDgzNjQ0KT4+PjApKXtzPTB8aHUoZjw8MiksYXJbbz4+Ml09cyxhclsoZD04K298MCk+PjJdPS0yMTQ3NDgzNjQ4fGYsYXJbNCtvPj4yXT1sLGQ9ZCszfDAsaz1vO2JyZWFrfWxBKCl9ZWxzZSB0clsoZD04K28rM3wwKT4+MF09bCxrPXM9b313aGlsZSgwKTtpZihncihzLGwsbiksbG4ocysobDw8Mil8KGFyW3Q+PjJdPTApLHQpLCgwfHhiWzYzJmFyWzQ4KygwfGFyW2M+PjJdKT4+Ml1dKGMsKDB8dHJbZD4+MF0pPDA/MHxhcltvPj4yXTprLGwpKT09KDB8bCkpe1F1KG8pO2JyZWFrfWFyW0E+PjJdPTAsUXUobyksYz0wO2JyZWFrIEF9fXdoaWxlKDApO2lmKGk9KGg9aS11fDApPj4yLDA8KDB8aCkmJigwfHhiWzYzJmFyWzQ4KygwfGFyW2M+PjJdKT4+Ml1dKGMscixpKSkhPSgwfGkpKXtjPWFyW0E+PjJdPTA7YnJlYWt9YXJbYj4+Ml09MH1lbHNlIGM9MH13aGlsZSgwKTtyZXR1cm4gdXI9YSwwfGN9ZnVuY3Rpb24gZ3IoQSxlLHIpe3JldHVybiBBfD0wLHJ8PTAsKGV8PTApJiZmdW5jdGlvbihBLGUscil7QXw9MCxlfD0wO3ZhciBpPTA7aWYoMHwocnw9MCkpZm9yKGk9QTtyPXIrLTF8MCxhcltpPj4yXT1lLHI7KWk9aSs0fDB9KEEscixlKSwwfEF9ZnVuY3Rpb24gWnIoQSxlLHIsaSxmLG4sdCl7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTA7dmFyIG8sYSxjLGwsdSxiLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MDtzd2l0Y2gobD11cj0oYj11cikrMzEmLTMyLHVyPXVyKzE2fDAsdT0wfHVuKHR8PTAsNTkyNjQpLGM9MHx1bih0LDU5MjcyKSxmc1s2MyZhclsyMCsoMHxhcltjPj4yXSk+PjJdXShsLGMpLGFyW24+PjJdPWksKHQ9MHx0cltBPj4wXSk8PDI0Pj4yNCl7Y2FzZSA0MzpjYXNlIDQ1Omc9MHxIYlszMSZhcls0NCsoMHxhclt1Pj4yXSk+PjJdXSh1LHQpLHQ9MHxhcltuPj4yXSxhcltuPj4yXT10KzQsYXJbdD4+Ml09Zyx0PUErMXwwO2JyZWFrO2RlZmF1bHQ6dD1BfWc9cjtBOmRve2lmKDE8KGctdHwwKSYmNDg9PSgwfHRyW3Q+PjBdKSl7c3dpdGNoKDB8dHJbKHM9dCsxfDApPj4wXSl7Y2FzZSA4ODpjYXNlIDEyMDpicmVhaztkZWZhdWx0OnM9dCxaPTEwO2JyZWFrIEF9Zm9yKHY9MHxIYlszMSZhcls0NCsoMHxhclt1Pj4yXSk+PjJdXSh1LDQ4KSxtPTB8YXJbbj4+Ml0sYXJbbj4+Ml09bSs0LGFyW20+PjJdPXYsdD10KzJ8MCxtPTB8SGJbMzEmYXJbNDQrKDB8YXJbdT4+Ml0pPj4yXV0odSwwfHRyW3M+PjBdKSxzPTB8YXJbbj4+Ml0sYXJbbj4+Ml09cys0LGFyW3M+PjJdPW0scz10Ozspe2lmKHI+Pj4wPD1zPj4+MClicmVhayBBO2lmKCEoMHxsZihtPTB8dHJbcz4+MF0sZG4oKSkpKWJyZWFrIEE7cz1zKzF8MH19ZWxzZSBzPXQsWj0xMH13aGlsZSgwKTtBOmRve2lmKDEwPT0oMHxaKSlmb3IoOzspe2lmKHI+Pj4oWj0wKTw9cz4+PjApYnJlYWsgQTtpZighKDB8YWYobT0wfHRyW3M+PjBdLGRuKCkpKSlicmVhayBBO3M9cysxfDAsWj0xMH19d2hpbGUoMCk7dz0wfHRyWyhvPTExK2x8MCk+PjBdLGE9NCtsfDAsdj10LG09QTtBOmRve2lmKDB8KHc8PDI0Pj4yNDwwPzB8YXJbYT4+Ml06MjU1JncpKXtlOmRve2lmKCgwfHQpIT0oMHxzKSlmb3IoQT1zLGQ9dDs7KXtpZigoQT1BKy0xfDApPj4+MDw9ZD4+PjApYnJlYWsgZTt3PTB8dHJbZD4+MF0sdHJbZD4+MF09MHx0cltBPj4wXSx0cltBPj4wXT13LGQ9ZCsxfDB9fXdoaWxlKDApO2Zvcih3PTB8amJbMTI3JmFyWzE2KygwfGFyW2M+PjJdKT4+Ml1dKGMpLGQ9QT0wOyEocz4+PjA8PXQ+Pj4wKTspaz0wfHRyW28+PjBdLDA8KHA9MHx0clsoKGg9azw8MjQ+PjI0PDApPzB8YXJbbD4+Ml06bCkrQT4+MF0pPDwyND4+MjQmKDB8ZCk9PShwPDwyND4+MjR8MCkmJihkPTB8YXJbbj4+Ml0sYXJbbj4+Ml09ZCs0LGFyW2Q+PjJdPXcsQT0oQT4+PjA8KChoPzB8YXJbYT4+Ml06MjU1JmspLTF8MCk+Pj4wJjEpK0F8MCxkPTApLGg9MHxIYlszMSZhcls0NCsoMHxhclt1Pj4yXSk+PjJdXSh1LDB8dHJbdD4+MF0pLHA9MHxhcltuPj4yXSxhcltuPj4yXT1wKzQsYXJbcD4+Ml09aCx0PXQrMXwwLGQ9ZCsxfDA7aWYoKDB8KHQ9aSsodi1tPDwyKXwwKSk9PSgwfChkPTB8YXJbbj4+Ml0pKSlBPXU7ZWxzZSBmb3IoQT1kOzspe2lmKChBPUErLTR8MCk+Pj4wPD10Pj4+MCl7QT11LHQ9ZDticmVhayBBfXA9MHxhclt0Pj4yXSxhclt0Pj4yXT1hcltBPj4yXSxhcltBPj4yXT1wLHQ9dCs0fDB9fWVsc2UgUGJbNyZhcls0OCsoMHxhclt1Pj4yXSk+PjJdXSh1LHQscywwfGFyW24+PjJdKSx0PSgwfGFyW24+PjJdKSsocy12PDwyKXwwLGFyW24+PjJdPXQsQT11fXdoaWxlKDApO2Zvcig7IShyPj4+MDw9cz4+PjApOyl7aWYodD0wfHRyW3M+PjBdLHM9cysxfDAsdDw8MjQ+PjI0PT00Nil7Wj0yOTticmVha312PTB8SGJbMzEmYXJbNDQrKDB8YXJbQT4+Ml0pPj4yXV0odSx0KSx0PShwPTB8YXJbbj4+Ml0pKzR8MCxhcltuPj4yXT10LGFyW3A+PjJdPXZ9Mjk9PSgwfFopJiYoWj0wfGpiWzEyNyZhclsxMisoMHxhcltjPj4yXSk+PjJdXShjKSx0PShwPTB8YXJbbj4+Ml0pKzR8MCxhcltuPj4yXT10LGFyW3A+PjJdPVopLFBiWzcmYXJbNDgrKDB8YXJbdT4+Ml0pPj4yXV0odSxzLHIsdCkscD0oMHxhcltuPj4yXSkrKGctczw8Mil8MCxhcltuPj4yXT1wLGFyW2Y+PjJdPSgwfGUpPT0oMHxyKT9wOmkrKGUtbTw8Mil8MCxCdShsKSx1cj1ifWZ1bmN0aW9uIHByKEEsZSxyLGksZixuLHQpe0F8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wO3ZhciBvLGEsYyxsLHUsYixzPTAsZD0wLGs9MCxoPTAsdz0wLHY9MDtpZih1PXVyPShiPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxjPTB8dW4odHw9MCw1OTI2NCksZD0wfHVuKHQsNTkyNzIpLGZzWzYzJmFyWzIwKygwfGFyW2Q+PjJdKT4+Ml1dKHUsZCksYT00K3V8MCxsPUEscz1yLDB8KCh3PTB8dHJbKG89MTErdXwwKT4+MF0pPDwyND4+MjQ8MD8wfGFyW2E+PjJdOjI1NSZ3KSl7c3dpdGNoKGFyW24+PjJdPWksKHQ9MHx0cltBPj4wXSk8PDI0Pj4yNCl7Y2FzZSA0MzpjYXNlIDQ1Omg9MHxIYlszMSZhcls0NCsoMHxhcltjPj4yXSk+PjJdXShjLHQpLHc9MHxhcltuPj4yXSxhcltuPj4yXT13KzQsYXJbdz4+Ml09aCxBPUErMXwwfUE6ZG97aWYoMTwocy1BfDApJiY0OD09KDB8dHJbQT4+MF0pKXtzd2l0Y2goMHx0clsodD1BKzF8MCk+PjBdKXtjYXNlIDg4OmNhc2UgMTIwOmJyZWFrO2RlZmF1bHQ6YnJlYWsgQX13PTB8SGJbMzEmYXJbNDQrKDB8YXJbYz4+Ml0pPj4yXV0oYyw0OCksaD0wfGFyW24+PjJdLGFyW24+PjJdPWgrNCxhcltoPj4yXT13LGg9MHxIYlszMSZhcls0NCsoMHxhcltjPj4yXSk+PjJdXShjLDB8dHJbdD4+MF0pLHc9MHxhcltuPj4yXSxhcltuPj4yXT13KzQsYXJbdz4+Ml09aCxBPUErMnwwfX13aGlsZSgwKTtBOmRve2lmKCgwfEEpIT0oMHxyKSlmb3IodD1yLHM9QTs7KXtpZigodD10Ky0xfDApPj4+MDw9cz4+PjApYnJlYWsgQTt3PTB8dHJbcz4+MF0sdHJbcz4+MF09MHx0clt0Pj4wXSx0clt0Pj4wXT13LHM9cysxfDB9fXdoaWxlKDApO2Zvcih3PTB8amJbMTI3JmFyWzE2KygwfGFyW2Q+PjJdKT4+Ml1dKGQpLGg9QSxzPXQ9MDshKHI+Pj4wPD1oPj4+MCk7KWQ9MHx0cltvPj4wXSwodj0wfHRyWygoaz1kPDwyND4+MjQ8MCk/MHxhclt1Pj4yXTp1KSt0Pj4wXSk8PDI0Pj4yNCE9MCYoMHxzKT09KHY8PDI0Pj4yNHwwKSYmKHM9MHxhcltuPj4yXSxhcltuPj4yXT1zKzQsYXJbcz4+Ml09dyx0PSh0Pj4+MDwoKGs/MHxhclthPj4yXToyNTUmZCktMXwwKT4+PjAmMSkrdHwwLHM9MCksaz0wfEhiWzMxJmFyWzQ0KygwfGFyW2M+PjJdKT4+Ml1dKGMsMHx0cltoPj4wXSksdj0wfGFyW24+PjJdLGFyW24+PjJdPXYrNCxhclt2Pj4yXT1rLGg9aCsxfDAscz1zKzF8MDtpZigoMHwodD1pKyhBLWw8PDIpfDApKSE9KDB8KEE9MHxhcltuPj4yXSkpKXtmb3IoOyEoKEE9QSstNHwwKT4+PjA8PXQ+Pj4wKTspdj0wfGFyW3Q+PjJdLGFyW3Q+PjJdPWFyW0E+PjJdLGFyW0E+PjJdPXYsdD10KzR8MDt0PTB8YXJbbj4+Ml19fWVsc2UgUGJbNyZhcls0OCsoMHxhcltjPj4yXSk+PjJdXShjLEEscixpKSx0PWkrKHMtbDw8Mil8MCxhcltuPj4yXT10O2FyW2Y+PjJdPSgwfGUpPT0oMHxyKT90OmkrKGUtbDw8Mil8MCxCdSh1KSx1cj1ifWZ1bmN0aW9uIHlyKEEsZSxyLGksZixuKXtlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTA7dmFyIHQsbyxhO2E9dXI9KHQ9dXIpKzMxJi0zMix1cj11cisxNnwwLG89NCthfDAsQT0wfGpiWzEyNyZhclthclsoQT0oQXw9MCkrOHwwKT4+Ml0+PjJdXShBKSxhclthPj4yXT1hcltpPj4yXSxhcltvPj4yXT1hclthPj4yXSwoMHwoQT0oMHxWbihyLG8sQSxBKzE2OHwwLG4sZiwwKSktQXwwKSk8MTY4JiYoYXJbZT4+Ml09KCgwfEEpLzEyfDApJTd8MCksdXI9dH1mdW5jdGlvbiBCcihBLGUscixpLGYsbil7ZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wO3ZhciB0LG8sYTthPXVyPSh0PXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxvPTQrYXwwLEE9MHxqYlsxMjcmYXJbNCsoMHxhclsoQT0oQXw9MCkrOHwwKT4+Ml0pPj4yXV0oQSksYXJbYT4+Ml09YXJbaT4+Ml0sYXJbbz4+Ml09YXJbYT4+Ml0sKDB8KEE9KDB8Vm4ocixvLEEsQSsyODh8MCxuLGYsMCkpLUF8MCkpPDI4OCYmKGFyW2U+PjJdPSgoMHxBKS8xMnwwKSUxMnwwKSx1cj10fWZ1bmN0aW9uIEVyKEEsZSxyLGksZixuLHQsbyl7QXw9MCxlfD0wLHJ8PTAsZnw9MCxufD0wLHR8PTAsb3w9MDt2YXIgYSxjLGwsdSxiLHMsZCxrPTAsaD0wLHc9MCx2PTAsbT0wLGc9MCxaPTAscD0wLHk9MDtzPXVyPShkPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxhPTgrc3wwLGI9NCtzfDAsVGYoYz0xMitzfDAsaXw9MCksbD0wfHVuKGMsNTkyMzIpLGJuKGMpLHU9OCtsfChhcltmPj4yXT0wKSxrPTA7QTpmb3IoOzspe2ZvcihaPSgwfHQpIT0oMHxvKSxoPWs7Oyl7aWYoaz0wfGFyW2U+PjJdLCEoWiYwPT0oMHxoKSkpYnJlYWsgQTtnPSh3PWspPzB8TWYoaD0oMHwoaD0wfGFyW2srMTI+PjJdKSk9PSgwfGFyW2srMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltrPj4yXSk+PjJdXShrKTowfGhmKDB8dHJbaD4+MF0pLC0xKT8obT0xLGs9YXJbZT4+Ml09MCk6KG09MCx3KTooaz0wLG09MSx3KSxoPXY9MHxhcltyPj4yXTtkb3tpZih2KXtpZigwfE1mKHc9KDB8KHc9MHxhclt2KzEyPj4yXSkpPT0oMHxhclt2KzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbdj4+Ml0pPj4yXV0odik6MHxoZigwfHRyW3c+PjBdKSwtMSkpe2g9YXJbcj4+Ml09MCx5PTE2O2JyZWFrfWlmKG0pYnJlYWs7eT02MTticmVhayBBfXk9MTZ9d2hpbGUoMCk7aWYoMTY9PSgwfHkpKXtpZih5PTAsbSl7eT02MTticmVhayBBfXY9MH1pZigoMHx4Yls2MyZhclszNisoMHxhcltsPj4yXSk+PjJdXShsLDB8dHJbdD4+MF0sMCkpPDwyND4+MjQ9PTM3KXt5PTE5O2JyZWFrfWlmKC0xPChoPTB8dHJbdD4+MF0pPDwyND4+MjQmJihwPTB8YXJbdT4+Ml0sODE5MiZvcltwKyhoPDwyND4+MjQ8PDEpPj4xXSkpe3k9Mjc7YnJlYWt9aWYoaD0oMHwoaD0wfGFyWyh3PWsrMTJ8MCk+PjJdKSk9PSgwfGFyWyh2PWsrMTZ8MCk+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltrPj4yXSk+PjJdXShrKTowfGhmKDB8dHJbaD4+MF0pLChnPTB8SGJbMzEmYXJbMTIrKDB8YXJbbD4+Ml0pPj4yXV0obCwyNTUmaCkpPDwyND4+MjQ9PSgwfEhiWzMxJmFyWzEyKygwfGFyW2w+PjJdKT4+Ml1dKGwsMHx0clt0Pj4wXSkpPDwyND4+MjQpe3k9NTc7YnJlYWt9aD1hcltmPj4yXT00fWU6ZG97aWYoMTk9PSgwfHkpKXtpZigoKHk9MCl8KG09dCsxfDApKT09KDB8bykpe3k9NjE7YnJlYWsgQX1zd2l0Y2goKHc9MHx4Yls2MyZhclszNisoMHxhcltsPj4yXSk+PjJdXShsLDB8dHJbbT4+MF0sMCkpPDwyND4+MjQpe2Nhc2UgNDg6Y2FzZSA2OTppZigoMHwodD10KzJ8MCkpPT0oMHxvKSl7eT02MTticmVhayBBfXY9dyxrPTB8eGJbNjMmYXJbMzYrKDB8YXJbbD4+Ml0pPj4yXV0obCwwfHRyW3Q+PjBdLDApLHQ9bTticmVhaztkZWZhdWx0OnY9MCxrPXd9Wj0wfGFyWzM2KygwfGFyW0E+PjJdKT4+Ml0sYXJbYj4+Ml09ZyxhcltzPj4yXT1oLGFyW2E+PjJdPWFyW2I+PjJdLGFyW2M+PjJdPWFyW3M+PjJdLFo9MHxlc1sxNSZaXShBLGEsYyxpLGYsbixrLHYpLGFyW2U+PjJdPVosdD10KzJ8MH1lbHNlIGlmKDI3PT0oMHx5KSl7Zm9yKDs7KXtpZigoKHk9MCl8KHQ9dCsxfDApKT09KDB8bykpe3Q9bzticmVha31pZigoaD0wfHRyW3Q+PjBdKTw8MjQ+PjI0PD0tMSlicmVhaztpZighKDgxOTImb3JbcCsoaDw8MjQ+PjI0PDwxKT4+MV0pKWJyZWFrO3k9Mjd9Zm9yKGg9djs7KXtrPzB8TWYodz0oMHwodz0wfGFyW2srMTI+PjJdKSk9PSgwfGFyW2srMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltrPj4yXSk+PjJdXShrKTowfGhmKDB8dHJbdz4+MF0pLC0xKT8obT0xLGs9YXJbZT4+Ml09MCk6bT0wOihtPTEsaz0wKTtkb3tpZih2KXtpZigwfE1mKHc9KDB8KHc9MHxhclt2KzEyPj4yXSkpPT0oMHxhclt2KzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbdj4+Ml0pPj4yXV0odik6MHxoZigwfHRyW3c+PjBdKSwtMSkpe2g9YXJbcj4+Ml09MCx5PTQzO2JyZWFrfWlmKG1eMD09KDB8aCkpe3Y9Zz1oO2JyZWFrfWJyZWFrIGV9eT00M313aGlsZSgwKTtpZig0Mz09KDB8eSkpe2lmKHk9MCxtKWJyZWFrIGU7Zz1oLHY9MH1pZigoMjU1JihoPSgwfChoPTB8YXJbKHc9aysxMnwwKT4+Ml0pKT09KDB8YXJbKG09aysxNnwwKT4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW2s+PjJdKT4+Ml1dKGspOjB8aGYoMHx0cltoPj4wXSkpKTw8MjQ+PjI0PD0tMSlicmVhayBlO2lmKCEoODE5MiZvclsoMHxhclt1Pj4yXSkrKGg8PDI0Pj4yNDw8MSk+PjFdKSlicmVhayBlOygwfChoPTB8YXJbdz4+Ml0pKSE9KDB8YXJbbT4+Ml0pPyhhclt3Pj4yXT1oKzEsaGYoMHx0cltoPj4wXSksaD1nKTooamJbMTI3JmFyWzQwKygwfGFyW2s+PjJdKT4+Ml1dKGspLGg9Zyl9fWVsc2UgaWYoNTc9PSgwfHkpKXtpZih0PXQrMXwoeT0wKSwoMHwoaD0wfGFyW3c+PjJdKSk9PSgwfGFyW3Y+PjJdKSl7amJbMTI3JmFyWzQwKygwfGFyW2s+PjJdKT4+Ml1dKGspO2JyZWFrfWFyW3c+PjJdPWgrMSxoZigwfHRyW2g+PjBdKTticmVha319d2hpbGUoMCk7az0wfGFyW2Y+PjJdfTYxPT0oMHx5KSYmKGFyW2Y+PjJdPTQpLHc9az8wfE1mKHQ9KDB8KHQ9MHxhcltrKzEyPj4yXSkpPT0oMHxhcltrKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbaz4+Ml0pPj4yXV0oayk6MHxoZigwfHRyW3Q+PjBdKSwtMSk/KGs9YXJbZT4+Ml09MCwxKTowOihrPTAsMSksdD0wfGFyW3I+PjJdO2Rve2lmKHQpe2lmKDB8TWYodD0oMHwoaD0wfGFyW3QrMTI+PjJdKSk9PSgwfGFyW3QrMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt0Pj4yXSk+PjJdXSh0KTowfGhmKDB8dHJbaD4+MF0pLC0xKSl7YXJbcj4+Ml09MCx5PTc0O2JyZWFrfWlmKHcpYnJlYWs7eT03NjticmVha315PTc0fXdoaWxlKDApO3JldHVybiA3ND09KDB8eSkmJncmJih5PTc2KSw3Nj09KDB8eSkmJihhcltmPj4yXT0yfGFyW2Y+PjJdKSx1cj1kLDB8a31mdW5jdGlvbiBYcihBLGUscixpLGYsbil7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTA7dmFyIHQsbztvPXVyPSh0PXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxBPTQrb3wwLGFyW28+PjJdPWFyW2k+PjJdLGFyW0E+PjJdPWFyW28+PjJdLCgoQT0wfEpyKHIsQSxmLG4sMikpKy0xfDApPj4+MDwzMSYwPT0oNCYocj0wfGFyW2Y+PjJdKXwwKT9hcltlPj4yXT1BOmFyW2Y+PjJdPTR8cix1cj10fWZ1bmN0aW9uIFdyKEEsZSxyLGksZixuKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MDt2YXIgdCxvO289dXI9KHQ9dXIpKzMxJi0zMix1cj11cisxNnwwLEE9NCtvfDAsYXJbbz4+Ml09YXJbaT4+Ml0sYXJbQT4+Ml09YXJbbz4+Ml0sKDB8KEE9MHxKcihyLEEsZixuLDIpKSk8MjQmMD09KDQmKHI9MHxhcltmPj4yXSl8MCk/YXJbZT4+Ml09QTphcltmPj4yXT00fHIsdXI9dH1mdW5jdGlvbiBJcihBLGUscixpLGYsbil7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTA7dmFyIHQsbztvPXVyPSh0PXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxBPTQrb3wwLGFyW28+PjJdPWFyW2k+PjJdLGFyW0E+PjJdPWFyW28+PjJdLCgoQT0wfEpyKHIsQSxmLG4sMikpKy0xfDApPj4+MDwxMiYwPT0oNCYocj0wfGFyW2Y+PjJdKXwwKT9hcltlPj4yXT1BOmFyW2Y+PjJdPTR8cix1cj10fWZ1bmN0aW9uIENyKEEsZSxyLGksZixuKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MDt2YXIgdCxvO289dXI9KHQ9dXIpKzMxJi0zMix1cj11cisxNnwwLEE9NCtvfDAsYXJbbz4+Ml09YXJbaT4+Ml0sYXJbQT4+Ml09YXJbbz4+Ml0sKDB8KEE9MHxKcihyLEEsZixuLDMpKSk8MzY2JjA9PSg0JihyPTB8YXJbZj4+Ml0pfDApP2FyW2U+PjJdPUE6YXJbZj4+Ml09NHxyLHVyPXR9ZnVuY3Rpb24gR3IoQSxlLHIsaSxmLG4pe0F8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wO3ZhciB0LG87bz11cj0odD11cikrMzEmLTMyLHVyPXVyKzE2fDAsQT00K298MCxhcltvPj4yXT1hcltpPj4yXSxhcltBPj4yXT1hcltvPj4yXSwoMHwoQT0wfEpyKHIsQSxmLG4sMikpKTwxMyYwPT0oNCYocj0wfGFyW2Y+PjJdKXwwKT9hcltlPj4yXT1BKy0xOmFyW2Y+PjJdPTR8cix1cj10fWZ1bmN0aW9uIFZyKEEsZSxyLGksZixuKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MDt2YXIgdCxvO289dXI9KHQ9dXIpKzMxJi0zMix1cj11cisxNnwwLEE9NCtvfDAsYXJbbz4+Ml09YXJbaT4+Ml0sYXJbQT4+Ml09YXJbbz4+Ml0sKDB8KEE9MHxKcihyLEEsZixuLDIpKSk8NjAmMD09KDQmKHI9MHxhcltmPj4yXSl8MCk/YXJbZT4+Ml09QTphcltmPj4yXT00fHIsdXI9dH1mdW5jdGlvbiBGcihBLGUscixpLGYpe0F8PTAsZXw9MCxyfD0wLGl8PTA7dmFyIG4sdD0wLG89MDtuPShmfD0wKSs4fDA7QTpmb3IoOzspe0E9MHxhcltlPj4yXTtkb3tpZihBKXtpZigwfE1mKEE9KDB8KGY9MHxhcltBKzEyPj4yXSkpPT0oMHxhcltBKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbQT4+Ml0pPj4yXV0oQSk6MHxoZigwfHRyW2Y+PjBdKSwtMSkpe2FyW2U+PjJdPTAsdD0xO2JyZWFrfXQ9MD09KDB8YXJbZT4+Ml0pO2JyZWFrfXQ9MX13aGlsZSgwKTtmPTB8YXJbcj4+Ml07ZG97aWYoZil7aWYoMHxNZihBPSgwfChBPTB8YXJbZisxMj4+Ml0pKT09KDB8YXJbZisxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW2Y+PjJdKT4+Ml1dKGYpOjB8aGYoMHx0cltBPj4wXSksLTEpKXthcltyPj4yXT0wLG89MTU7YnJlYWt9aWYodCl7dD1mO2JyZWFrfXQ9ZjticmVhayBBfW89MTV9d2hpbGUoMCk7aWYoMTU9PSgwfG8pKXtpZihvPTAsdCl7dD0wO2JyZWFrfXQ9MH1pZihBPTB8YXJbZT4+Ml0sKDI1NSYoQT0oMHwoZj0wfGFyW0ErMTI+PjJdKSk9PSgwfGFyW0ErMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltBPj4yXSk+PjJdXShBKTowfGhmKDB8dHJbZj4+MF0pKSk8PDI0Pj4yNDw9LTEpYnJlYWs7aWYoISg4MTkyJm9yWygwfGFyW24+PjJdKSsoQTw8MjQ+PjI0PDwxKT4+MV0pKWJyZWFrO0E9MHxhcltlPj4yXSwoMHwodD0wfGFyWyhmPUErMTJ8MCk+PjJdKSkhPSgwfGFyW0ErMTY+PjJdKT8oYXJbZj4+Ml09dCsxLGhmKDB8dHJbdD4+MF0pKTpqYlsxMjcmYXJbNDArKDB8YXJbQT4+Ml0pPj4yXV0oQSl9QT0wfGFyW2U+PjJdO2Rve2lmKEEpe2lmKDB8TWYoQT0oMHwoZj0wfGFyW0ErMTI+PjJdKSk9PSgwfGFyW0ErMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltBPj4yXSk+PjJdXShBKTowfGhmKDB8dHJbZj4+MF0pLC0xKSl7YXJbZT4+Ml09MCxmPTE7YnJlYWt9Zj0wPT0oMHxhcltlPj4yXSk7YnJlYWt9Zj0xfXdoaWxlKDApO2Rve2lmKHQpe2lmKDB8TWYoQT0oMHwoQT0wfGFyW3QrMTI+PjJdKSk9PSgwfGFyW3QrMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt0Pj4yXSk+PjJdXSh0KTowfGhmKDB8dHJbQT4+MF0pLC0xKSl7YXJbcj4+Ml09MCxvPTM4O2JyZWFrfWlmKGYpYnJlYWs7bz00MDticmVha31vPTM4fXdoaWxlKDApOzM4PT0oMHxvKSYmZiYmKG89NDApLDQwPT0oMHxvKSYmKGFyW2k+PjJdPTJ8YXJbaT4+Ml0pfWZ1bmN0aW9uIFJyKEEsZSxyLGksZixuKXtlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTA7dmFyIHQsbyxhLGM9MCxsPTA7bz11cj0oYT11cikrMzEmLTMyLHVyPXVyKzE2fDAsdD00K298MCxsPTB8amJbMTI3JmFyWzgrKDB8YXJbKGw9KEF8PTApKzh8MCk+PjJdKT4+Ml1dKGwpLGM9KEE9MHx0cltsKzExPj4wXSk8PDI0Pj4yNDwwPzB8YXJbbCs0Pj4yXToyNTUmQSwoQT0wfHRyW2wrMTIrMTE+PjBdKTw8MjQ+PjI0PDA/QT0wfGFyW2wrMTY+PjJdOkEmPTI1NTtkb3tpZigoMHxjKSE9KDAtQXwwKSl7aWYoYXJbbz4+Ml09YXJbaT4+Ml0sYXJbdD4+Ml09YXJbbz4+Ml0sQT0oMHxWbihyLHQsbCxsKzI0fDAsbixmLDApKS1sfDAsMTI9PSgwfChjPTB8YXJbZT4+Ml0pKSYwPT0oMHxBKSl7YXJbZT4+Ml09MDticmVha30oMHxjKTwxMiYxMj09KDB8QSkmJihhcltlPj4yXT1jKzEyKX1lbHNlIGFyW2Y+PjJdPTR8YXJbZj4+Ml19d2hpbGUoMCk7dXI9YX1mdW5jdGlvbiBOcihBLGUscixpLGYsbil7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTA7dmFyIHQsbztvPXVyPSh0PXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxBPTQrb3wwLGFyW28+PjJdPWFyW2k+PjJdLGFyW0E+PjJdPWFyW28+PjJdLCgwfChBPTB8SnIocixBLGYsbiwyKSkpPDYxJjA9PSg0JihyPTB8YXJbZj4+Ml0pfDApP2FyW2U+PjJdPUE6YXJbZj4+Ml09NHxyLHVyPXR9ZnVuY3Rpb24gX3IoQSxlLHIsaSxmLG4pe0F8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wO3ZhciB0LG87bz11cj0odD11cikrMzEmLTMyLHVyPXVyKzE2fDAsQT00K298MCxhcltvPj4yXT1hcltpPj4yXSxhcltBPj4yXT1hcltvPj4yXSwoMHwoQT0wfEpyKHIsQSxmLG4sMSkpKTw3JjA9PSg0JihyPTB8YXJbZj4+Ml0pfDApP2FyW2U+PjJdPUE6YXJbZj4+Ml09NHxyLHVyPXR9ZnVuY3Rpb24gWXIoQSxlLHIsaSxmLG4pe0F8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wO3ZhciB0LG87bz11cj0odD11cikrMzEmLTMyLHVyPXVyKzE2fDAsQT00K298MCxhcltvPj4yXT1hcltpPj4yXSxhcltBPj4yXT1hcltvPj4yXSxBPTB8SnIocixBLGYsbiw0KSw0JmFyW2Y+PjJdfHwoQT0oMHxBKTw2OT9BKzJlM3wwOigwfEEpPDEwMD9BKzE5MDB8MDpBLGFyW2U+PjJdPUErLTE5MDApLHVyPXR9ZnVuY3Rpb24gUXIoQSxlLHIsaSxmLG4pe0F8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wO3ZhciB0LG87bz11cj0odD11cikrMzEmLTMyLHVyPXVyKzE2fDAsQT00K298MCxhcltvPj4yXT1hcltpPj4yXSxhcltBPj4yXT1hcltvPj4yXSxBPTB8SnIocixBLGYsbiw0KSw0JmFyW2Y+PjJdfHwoYXJbZT4+Ml09QSstMTkwMCksdXI9dH1mdW5jdGlvbiBEcihBLGUscixpLGYpe0F8PTAscnw9MCxpfD0wLGZ8PTA7dmFyIG49MCx0PTAsbz0wLGE9MDtBPTB8YXJbKGV8PTApPj4yXTtkb3tpZihBKXtpZigwfE1mKEE9KDB8KG49MHxhcltBKzEyPj4yXSkpPT0oMHxhcltBKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbQT4+Ml0pPj4yXV0oQSk6MHxoZigwfHRyW24+PjBdKSwtMSkpe2FyW2U+PjJdPTAsdD0xO2JyZWFrfXQ9MD09KDB8YXJbZT4+Ml0pO2JyZWFrfXQ9MX13aGlsZSgwKTtuPTB8YXJbcj4+Ml07ZG97aWYobil7aWYoMHxNZihBPSgwfChBPTB8YXJbbisxMj4+Ml0pKT09KDB8YXJbbisxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW24+PjJdKT4+Ml1dKG4pOjB8aGYoMHx0cltBPj4wXSksLTEpKXthcltyPj4yXT0wLGE9MTQ7YnJlYWt9aWYodCl7bz1uLGE9MTY7YnJlYWt9QT02LGE9Mzg7YnJlYWt9YT0xNH13aGlsZSgwKTsxND09KDB8YSkmJihhPXQ/KEE9NiwzOCk6KG89MCwxNikpO0E6ZG97aWYoMTY9PSgwfGEpKWlmKEE9MHxhcltlPj4yXSxBPSgwfChuPTB8YXJbQSsxMj4+Ml0pKT09KDB8YXJbQSsxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW0E+PjJdKT4+Ml1dKEEpOjB8aGYoMHx0cltuPj4wXSksKDB8eGJbNjMmYXJbMzYrKDB8YXJbZj4+Ml0pPj4yXV0oZiwyNTUmQSwwKSk8PDI0Pj4yND09Mzcpe0E9MHxhcltlPj4yXSwoMHwodD0wfGFyWyhuPUErMTJ8MCk+PjJdKSk9PSgwfGFyW0ErMTY+PjJdKT9qYlsxMjcmYXJbNDArKDB8YXJbQT4+Ml0pPj4yXV0oQSk6KGFyW24+PjJdPXQrMSxoZigwfHRyW3Q+PjBdKSksQT0wfGFyW2U+PjJdO2Rve2lmKEEpe2lmKDB8TWYoQT0oMHwobj0wfGFyW0ErMTI+PjJdKSk9PSgwfGFyW0ErMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltBPj4yXSk+PjJdXShBKTowfGhmKDB8dHJbbj4+MF0pLC0xKSl7YXJbZT4+Ml09MCxuPTE7YnJlYWt9bj0wPT0oMHxhcltlPj4yXSk7YnJlYWt9bj0xfXdoaWxlKDApO2Rve2lmKDB8byl7aWYoMHxNZihBPSgwfChBPTB8YXJbbysxMj4+Ml0pKT09KDB8YXJbbysxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW28+PjJdKT4+Ml1dKG8pOjB8aGYoMHx0cltBPj4wXSksLTEpKXthcltyPj4yXT0wO2JyZWFrfWlmKG4pYnJlYWsgQTtBPTIsYT0zODticmVhayBBfX13aGlsZSgwKTtuJiYoQT0yLGE9MzgpfWVsc2UgQT00LGE9Mzh9d2hpbGUoMCk7Mzg9PSgwfGEpJiYoYXJbaT4+Ml09YXJbaT4+Ml18QSl9ZnVuY3Rpb24gSnIoQSxlLHIsaSxmKXtlfD0wLHJ8PTAsaXw9MCxmfD0wO3ZhciBuPTAsdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wO249MHxhclsoQXw9MCk+PjJdO2Rve2lmKG4pe2lmKDB8TWYobj0oMHwodD0wfGFyW24rMTI+PjJdKSk9PSgwfGFyW24rMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltuPj4yXSk+PjJdXShuKTowfGhmKDB8dHJbdD4+MF0pLC0xKSl7YXJbQT4+Ml09MCxvPTE7YnJlYWt9bz0wPT0oMHxhcltBPj4yXSk7YnJlYWt9bz0xfXdoaWxlKDApO3Q9MHxhcltlPj4yXTtkb3tpZih0KXtpZigwfE1mKG49KDB8KG49MHxhclt0KzEyPj4yXSkpPT0oMHxhclt0KzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbdD4+Ml0pPj4yXV0odCk6MHxoZigwfHRyW24+PjBdKSwtMSkpe2FyW2U+PjJdPTAsaz0xNDticmVha31pZihvKXtrPTE3O2JyZWFrfWs9MTY7YnJlYWt9az0xNH13aGlsZSgwKTsxND09KDB8aykmJihrPW8/MTY6KHQ9MCwxNykpO0E6ZG97aWYoMTY9PSgwfGspKWFyW3I+PjJdPTZ8YXJbcj4+Ml0sbj0wO2Vsc2UgaWYoMTc9PSgwfGspKXtpZihuPTB8YXJbQT4+Ml0sLTE8KG89MjU1JihuPSgwfChvPTB8YXJbbisxMj4+Ml0pKT09KDB8YXJbbisxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW24+PjJdKT4+Ml1dKG4pOjB8aGYoMHx0cltvPj4wXSkpKTw8MjQ+PjI0JiYyMDQ4Jm9yWygwfGFyWyhkPWkrOHwwKT4+Ml0pKyhuPDwyND4+MjQ8PDEpPj4xXSl7Zm9yKG49KDB8eGJbNjMmYXJbMzYrKDB8YXJbaT4+Ml0pPj4yXV0oaSxvLDApKTw8MjQ+PjI0LG89MHxhcltBPj4yXSxhPWw9KCgwfChjPTB8YXJbKGE9bysxMnwwKT4+Ml0pKT09KDB8YXJbbysxNj4+Ml0pP2piWzEyNyZhcls0MCsoMHxhcltvPj4yXSk+PjJdXShvKTooYXJbYT4+Ml09YysxLGhmKDB8dHJbYz4+MF0pKSx0KTs7KXtuPW4rLTQ4fDAscz1mKy0xfDAsdD0wfGFyW0E+PjJdO2Rve2lmKHQpe2lmKDB8TWYodD0oMHwobz0wfGFyW3QrMTI+PjJdKSk9PSgwfGFyW3QrMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt0Pj4yXSk+PjJdXSh0KTowfGhmKDB8dHJbbz4+MF0pLC0xKSl7YXJbQT4+Ml09MCxjPTE7YnJlYWt9Yz0wPT0oMHxhcltBPj4yXSk7YnJlYWt9Yz0xfXdoaWxlKDApO2Rve2lmKGEpe2lmKDB8TWYodD0oMHwodD0wfGFyW2ErMTI+PjJdKSk9PSgwfGFyW2ErMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclthPj4yXSk+PjJdXShhKTowfGhmKDB8dHJbdD4+MF0pLC0xKSl7dD0xLHU9Yj1hcltlPj4yXT0wO2JyZWFrfXQ9MD09KDB8KGI9bCkpLHU9bDticmVha31iPWwsdD0xLHU9MH13aGlsZSgwKTtpZihvPTB8YXJbQT4+Ml0sISgxPCgwfGYpJihjXnQpKSlicmVhaztpZigobz0yNTUmKHQ9KDB8KHQ9MHxhcltvKzEyPj4yXSkpPT0oMHxhcltvKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbz4+Ml0pPj4yXV0obyk6MHxoZigwfHRyW3Q+PjBdKSkpPDwyND4+MjQ8PS0xKWJyZWFrIEE7aWYoISgyMDQ4Jm9yWygwfGFyW2Q+PjJdKSsodDw8MjQ+PjI0PDwxKT4+MV0pKWJyZWFrIEE7bj0oKDB8eGJbNjMmYXJbMzYrKDB8YXJbaT4+Ml0pPj4yXV0oaSxvLDApKTw8MjQ+PjI0KSsoMTAqbnwwKXwwLHQ9MHxhcltBPj4yXSwoMHwoYT0wfGFyWyhvPXQrMTJ8MCk+PjJdKSkhPSgwfGFyW3QrMTY+PjJdKT8oYXJbbz4+Ml09YSsxLGhmKDB8dHJbYT4+MF0pLGY9cyxsPWIsYT11KTooamJbMTI3JmFyWzQwKygwfGFyW3Q+PjJdKT4+Ml1dKHQpLGY9cyxsPWIsYT11KX1kb3tpZihvKXtpZigwfE1mKHQ9KDB8KHQ9MHxhcltvKzEyPj4yXSkpPT0oMHxhcltvKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbz4+Ml0pPj4yXV0obyk6MHxoZigwfHRyW3Q+PjBdKSwtMSkpe2FyW0E+PjJdPTAsbz0xO2JyZWFrfW89MD09KDB8YXJbQT4+Ml0pO2JyZWFrfW89MX13aGlsZSgwKTtkb3tpZihiKXtpZigwfE1mKHQ9KDB8KHQ9MHxhcltiKzEyPj4yXSkpPT0oMHxhcltiKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbYj4+Ml0pPj4yXV0oYik6MHxoZigwfHRyW3Q+PjBdKSwtMSkpe2FyW2U+PjJdPTAsaz02MjticmVha31pZihvKWJyZWFrIEE7YnJlYWt9az02Mn13aGlsZSgwKTtpZig2Mj09KDB8aykmJiFvKWJyZWFrO2FyW3I+PjJdPTJ8YXJbcj4+Ml07YnJlYWt9YXJbcj4+Ml09NHxhcltyPj4yXSxuPTB9fXdoaWxlKDApO3JldHVybiAwfG59ZnVuY3Rpb24gTXIoQSl7cmV0dXJuIDB8ZnVuY3Rpb24oQSl7dmFyIGU9MDtlPUF8PTA7Zm9yKDswfGFyW2U+PjJdOyllPWUrNHwwO3JldHVybiBlLUE+PjJ8MH0oQXw9MCl9ZnVuY3Rpb24gVHIoQSxlLHIsaSxmLG4pe2V8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MDt2YXIgdCxvLGE7YT11cj0odD11cikrMzEmLTMyLHVyPXVyKzE2fDAsbz00K2F8MCxBPTB8amJbMTI3JmFyW2FyWyhBPShBfD0wKSs4fDApPj4yXT4+Ml1dKEEpLGFyW2E+PjJdPWFyW2k+PjJdLGFyW28+PjJdPWFyW2E+PjJdLCgwfChBPSgwfGlyKHIsbyxBLEErMTY4fDAsbixmLDApKS1BfDApKTwxNjgmJihhcltlPj4yXT0oKDB8QSkvMTJ8MCklN3wwKSx1cj10fWZ1bmN0aW9uIFVyKEEsZSxyLGksZixuKXtlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTA7dmFyIHQsbyxhO2E9dXI9KHQ9dXIpKzMxJi0zMix1cj11cisxNnwwLG89NCthfDAsQT0wfGpiWzEyNyZhcls0KygwfGFyWyhBPShBfD0wKSs4fDApPj4yXSk+PjJdXShBKSxhclthPj4yXT1hcltpPj4yXSxhcltvPj4yXT1hclthPj4yXSwoMHwoQT0oMHxpcihyLG8sQSxBKzI4OHwwLG4sZiwwKSktQXwwKSk8Mjg4JiYoYXJbZT4+Ml09KCgwfEEpLzEyfDApJTEyfDApLHVyPXR9ZnVuY3Rpb24gU3IoQSxlLHIsaSxmLG4sdCxvKXtBfD0wLGV8PTAscnw9MCxmfD0wLG58PTAsdHw9MCxvfD0wO3ZhciBhLGMsbCx1LGIscyxkPTAsaz0wLGg9MCx3PTAsdj0wLG09MCxnPTAsWj0wO2I9dXI9KHM9dXIpKzMxJi0zMix1cj11cisxNnwwLGE9OCtifDAsdT00K2J8MCxUZihjPTEyK2J8MCxpfD0wKSxsPTB8dW4oYyw1OTI2NCksYm4oYyksZD1hcltmPj4yXT0wO0E6Zm9yKDs7KXtmb3IoZz0oMHx0KSE9KDB8byksaz1kOzspe2lmKGQ9MHxhcltlPj4yXSwhKGcmMD09KDB8aykpKWJyZWFrIEE7bT0oaD1kKT8wfFVmKGs9KDB8KGs9MHxhcltkKzEyPj4yXSkpPT0oMHxhcltkKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbZD4+Ml0pPj4yXV0oZCk6MHxnZigwfGFyW2s+PjJdKSwtMSk/KHY9MSxkPWFyW2U+PjJdPTApOih2PTAsaCk6KGQ9MCx2PTEsaCksaz13PTB8YXJbcj4+Ml07ZG97aWYodyl7aWYoMHxVZihoPSgwfChoPTB8YXJbdysxMj4+Ml0pKT09KDB8YXJbdysxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3c+PjJdKT4+Ml1dKHcpOjB8Z2YoMHxhcltoPj4yXSksLTEpKXtrPWFyW3I+PjJdPTAsWj0xNjticmVha31pZih2KWJyZWFrO1o9NTg7YnJlYWsgQX1aPTE2fXdoaWxlKDApO2lmKDE2PT0oMHxaKSl7aWYoWj0wLHYpe1o9NTg7YnJlYWsgQX13PTB9aWYoKDB8eGJbNjMmYXJbNTIrKDB8YXJbbD4+Ml0pPj4yXV0obCwwfGFyW3Q+PjJdLDApKTw8MjQ+PjI0PT0zNyl7Wj0xOTticmVha31pZigwfHhiWzYzJmFyWzEyKygwfGFyW2w+PjJdKT4+Ml1dKGwsODE5MiwwfGFyW3Q+PjJdKSl7Wj0yNjticmVha31pZihrPSgwfChrPTB8YXJbKGg9ZCsxMnwwKT4+Ml0pKT09KDB8YXJbKHc9ZCsxNnwwKT4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW2Q+PjJdKT4+Ml1dKGQpOjB8Z2YoMHxhcltrPj4yXSksKDB8KG09MHxIYlszMSZhclsyOCsoMHxhcltsPj4yXSk+PjJdXShsLGspKSk9PSgwfEhiWzMxJmFyWzI4KygwfGFyW2w+PjJdKT4+Ml1dKGwsMHxhclt0Pj4yXSkpKXtaPTU0O2JyZWFrfWs9YXJbZj4+Ml09NH1lOmRve2lmKDE5PT0oMHxaKSl7aWYoKChaPTApfCh2PXQrNHwwKSk9PSgwfG8pKXtaPTU4O2JyZWFrIEF9c3dpdGNoKChoPTB8eGJbNjMmYXJbNTIrKDB8YXJbbD4+Ml0pPj4yXV0obCwwfGFyW3Y+PjJdLDApKTw8MjQ+PjI0KXtjYXNlIDQ4OmNhc2UgNjk6aWYoKDB8KHQ9dCs4fDApKT09KDB8bykpe1o9NTg7YnJlYWsgQX13PWgsZD0wfHhiWzYzJmFyWzUyKygwfGFyW2w+PjJdKT4+Ml1dKGwsMHxhclt0Pj4yXSwwKSx0PXY7YnJlYWs7ZGVmYXVsdDp3PTAsZD1ofWc9MHxhclszNisoMHxhcltBPj4yXSk+PjJdLGFyW3U+PjJdPW0sYXJbYj4+Ml09ayxhclthPj4yXT1hclt1Pj4yXSxhcltjPj4yXT1hcltiPj4yXSxnPTB8ZXNbMTUmZ10oQSxhLGMsaSxmLG4sZCx3KSxhcltlPj4yXT1nLHQ9dCs4fDB9ZWxzZSBpZigyNj09KDB8Wikpe2Zvcig7Oyl7aWYoKChaPTApfCh0PXQrNHwwKSk9PSgwfG8pKXt0PW87YnJlYWt9aWYoISgwfHhiWzYzJmFyWzEyKygwfGFyW2w+PjJdKT4+Ml1dKGwsODE5MiwwfGFyW3Q+PjJdKSkpYnJlYWs7Wj0yNn1mb3Ioaz13Ozspe2Q/MHxVZihoPSgwfChoPTB8YXJbZCsxMj4+Ml0pKT09KDB8YXJbZCsxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW2Q+PjJdKT4+Ml1dKGQpOjB8Z2YoMHxhcltoPj4yXSksLTEpPyh2PTEsZD1hcltlPj4yXT0wKTp2PTA6KHY9MSxkPTApO2Rve2lmKHcpe2lmKDB8VWYoaD0oMHwoaD0wfGFyW3crMTI+PjJdKSk9PSgwfGFyW3crMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt3Pj4yXSk+PjJdXSh3KTowfGdmKDB8YXJbaD4+Ml0pLC0xKSl7az1hcltyPj4yXT0wLFo9NDE7YnJlYWt9aWYodl4wPT0oMHxrKSl7dz1tPWs7YnJlYWt9YnJlYWsgZX1aPTQxfXdoaWxlKDApO2lmKDQxPT0oMHxaKSl7aWYoWj0wLHYpYnJlYWsgZTttPWssdz0wfWlmKGs9KDB8KGs9MHxhclsoaD1kKzEyfDApPj4yXSkpPT0oMHxhclsodj1kKzE2fDApPj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbZD4+Ml0pPj4yXV0oZCk6MHxnZigwfGFyW2s+PjJdKSwhKDB8eGJbNjMmYXJbMTIrKDB8YXJbbD4+Ml0pPj4yXV0obCw4MTkyLGspKSlicmVhayBlOygwfChrPTB8YXJbaD4+Ml0pKSE9KDB8YXJbdj4+Ml0pPyhhcltoPj4yXT1rKzQsZ2YoMHxhcltrPj4yXSksaz1tKTooamJbMTI3JmFyWzQwKygwfGFyW2Q+PjJdKT4+Ml1dKGQpLGs9bSl9fWVsc2UgaWYoNTQ9PSgwfFopKXtpZih0PXQrNHwoWj0wKSwoMHwoaz0wfGFyW2g+PjJdKSk9PSgwfGFyW3c+PjJdKSl7amJbMTI3JmFyWzQwKygwfGFyW2Q+PjJdKT4+Ml1dKGQpO2JyZWFrfWFyW2g+PjJdPWsrNCxnZigwfGFyW2s+PjJdKTticmVha319d2hpbGUoMCk7ZD0wfGFyW2Y+PjJdfTU4PT0oMHxaKSYmKGFyW2Y+PjJdPTQpLGg9ZD8wfFVmKHQ9KDB8KHQ9MHxhcltkKzEyPj4yXSkpPT0oMHxhcltkKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbZD4+Ml0pPj4yXV0oZCk6MHxnZigwfGFyW3Q+PjJdKSwtMSk/KGQ9YXJbZT4+Ml09MCwxKTowOihkPTAsMSksdD0wfGFyW3I+PjJdO2Rve2lmKHQpe2lmKDB8VWYodD0oMHwoaz0wfGFyW3QrMTI+PjJdKSk9PSgwfGFyW3QrMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt0Pj4yXSk+PjJdXSh0KTowfGdmKDB8YXJbaz4+Ml0pLC0xKSl7YXJbcj4+Ml09MCxaPTcxO2JyZWFrfWlmKGgpYnJlYWs7Wj03MzticmVha31aPTcxfXdoaWxlKDApO3JldHVybiA3MT09KDB8WikmJmgmJihaPTczKSw3Mz09KDB8WikmJihhcltmPj4yXT0yfGFyW2Y+PjJdKSx1cj1zLDB8ZH1mdW5jdGlvbiBPcihBLGUscixpLGYsbil7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTA7dmFyIHQsbztvPXVyPSh0PXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxBPTQrb3wwLGFyW28+PjJdPWFyW2k+PjJdLGFyW0E+PjJdPWFyW28+PjJdLCgoQT0wfGlpKHIsQSxmLG4sMikpKy0xfDApPj4+MDwzMSYwPT0oNCYocj0wfGFyW2Y+PjJdKXwwKT9hcltlPj4yXT1BOmFyW2Y+PjJdPTR8cix1cj10fWZ1bmN0aW9uIHpyKEEsZSxyLGksZixuKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MDt2YXIgdCxvO289dXI9KHQ9dXIpKzMxJi0zMix1cj11cisxNnwwLEE9NCtvfDAsYXJbbz4+Ml09YXJbaT4+Ml0sYXJbQT4+Ml09YXJbbz4+Ml0sKDB8KEE9MHxpaShyLEEsZixuLDIpKSk8MjQmMD09KDQmKHI9MHxhcltmPj4yXSl8MCk/YXJbZT4+Ml09QTphcltmPj4yXT00fHIsdXI9dH1mdW5jdGlvbiBqcihBLGUscixpLGYsbil7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTA7dmFyIHQsbztvPXVyPSh0PXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxBPTQrb3wwLGFyW28+PjJdPWFyW2k+PjJdLGFyW0E+PjJdPWFyW28+PjJdLCgoQT0wfGlpKHIsQSxmLG4sMikpKy0xfDApPj4+MDwxMiYwPT0oNCYocj0wfGFyW2Y+PjJdKXwwKT9hcltlPj4yXT1BOmFyW2Y+PjJdPTR8cix1cj10fWZ1bmN0aW9uIEhyKEEsZSxyLGksZixuKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MDt2YXIgdCxvO289dXI9KHQ9dXIpKzMxJi0zMix1cj11cisxNnwwLEE9NCtvfDAsYXJbbz4+Ml09YXJbaT4+Ml0sYXJbQT4+Ml09YXJbbz4+Ml0sKDB8KEE9MHxpaShyLEEsZixuLDMpKSk8MzY2JjA9PSg0JihyPTB8YXJbZj4+Ml0pfDApP2FyW2U+PjJdPUE6YXJbZj4+Ml09NHxyLHVyPXR9ZnVuY3Rpb24geHIoQSxlLHIsaSxmLG4pe0F8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wO3ZhciB0LG87bz11cj0odD11cikrMzEmLTMyLHVyPXVyKzE2fDAsQT00K298MCxhcltvPj4yXT1hcltpPj4yXSxhcltBPj4yXT1hcltvPj4yXSwoMHwoQT0wfGlpKHIsQSxmLG4sMikpKTwxMyYwPT0oNCYocj0wfGFyW2Y+PjJdKXwwKT9hcltlPj4yXT1BKy0xOmFyW2Y+PjJdPTR8cix1cj10fWZ1bmN0aW9uIFByKEEsZSxyLGksZixuKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MDt2YXIgdCxvO289dXI9KHQ9dXIpKzMxJi0zMix1cj11cisxNnwwLEE9NCtvfDAsYXJbbz4+Ml09YXJbaT4+Ml0sYXJbQT4+Ml09YXJbbz4+Ml0sKDB8KEE9MHxpaShyLEEsZixuLDIpKSk8NjAmMD09KDQmKHI9MHxhcltmPj4yXSl8MCk/YXJbZT4+Ml09QTphcltmPj4yXT00fHIsdXI9dH1mdW5jdGlvbiBMcihBLGUscixpLGYpe0F8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MDt2YXIgbj0wLHQ9MCxvPTA7QTpmb3IoOzspe0E9MHxhcltlPj4yXTtkb3tpZihBKXtpZigwfFVmKEE9KDB8KG49MHxhcltBKzEyPj4yXSkpPT0oMHxhcltBKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbQT4+Ml0pPj4yXV0oQSk6MHxnZigwfGFyW24+PjJdKSwtMSkpe2FyW2U+PjJdPTAsdD0xO2JyZWFrfXQ9MD09KDB8YXJbZT4+Ml0pO2JyZWFrfXQ9MX13aGlsZSgwKTtuPTB8YXJbcj4+Ml07ZG97aWYobil7aWYoMHxVZihBPSgwfChBPTB8YXJbbisxMj4+Ml0pKT09KDB8YXJbbisxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW24+PjJdKT4+Ml1dKG4pOjB8Z2YoMHxhcltBPj4yXSksLTEpKXthcltyPj4yXT0wLG89MTU7YnJlYWt9aWYodCl7dD1uO2JyZWFrfXQ9bjticmVhayBBfW89MTV9d2hpbGUoMCk7aWYoMTU9PSgwfG8pKXtpZihvPTAsdCl7dD0wO2JyZWFrfXQ9MH1pZihBPTB8YXJbZT4+Ml0sQT0oMHwobj0wfGFyW0ErMTI+PjJdKSk9PSgwfGFyW0ErMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltBPj4yXSk+PjJdXShBKTowfGdmKDB8YXJbbj4+Ml0pLCEoMHx4Yls2MyZhclsxMisoMHxhcltmPj4yXSk+PjJdXShmLDgxOTIsQSkpKWJyZWFrO0E9MHxhcltlPj4yXSwoMHwodD0wfGFyWyhuPUErMTJ8MCk+PjJdKSkhPSgwfGFyW0ErMTY+PjJdKT8oYXJbbj4+Ml09dCs0LGdmKDB8YXJbdD4+Ml0pKTpqYlsxMjcmYXJbNDArKDB8YXJbQT4+Ml0pPj4yXV0oQSl9QT0wfGFyW2U+PjJdO2Rve2lmKEEpe2lmKDB8VWYoQT0oMHwobj0wfGFyW0ErMTI+PjJdKSk9PSgwfGFyW0ErMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltBPj4yXSk+PjJdXShBKTowfGdmKDB8YXJbbj4+Ml0pLC0xKSl7YXJbZT4+Ml09MCxuPTE7YnJlYWt9bj0wPT0oMHxhcltlPj4yXSk7YnJlYWt9bj0xfXdoaWxlKDApO2Rve2lmKHQpe2lmKDB8VWYoQT0oMHwoQT0wfGFyW3QrMTI+PjJdKSk9PSgwfGFyW3QrMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt0Pj4yXSk+PjJdXSh0KTowfGdmKDB8YXJbQT4+Ml0pLC0xKSl7YXJbcj4+Ml09MCxvPTM3O2JyZWFrfWlmKG4pYnJlYWs7bz0zOTticmVha31vPTM3fXdoaWxlKDApOzM3PT0oMHxvKSYmbiYmKG89MzkpLDM5PT0oMHxvKSYmKGFyW2k+PjJdPTJ8YXJbaT4+Ml0pfWZ1bmN0aW9uIEtyKEEsZSxyLGksZixuKXtlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTA7dmFyIHQsbyxhLGM9MCxsPTA7bz11cj0oYT11cikrMzEmLTMyLHVyPXVyKzE2fDAsdD00K298MCxsPTB8amJbMTI3JmFyWzgrKDB8YXJbKGw9KEF8PTApKzh8MCk+PjJdKT4+Ml1dKGwpLGM9KEE9MHx0cltsKzgrMz4+MF0pPDwyND4+MjQ8MD8wfGFyW2wrND4+Ml06MjU1JkEsKEE9MHx0cltsKzIwKzM+PjBdKTw8MjQ+PjI0PDA/QT0wfGFyW2wrMTY+PjJdOkEmPTI1NTtkb3tpZigoMHxjKSE9KDAtQXwwKSl7aWYoYXJbbz4+Ml09YXJbaT4+Ml0sYXJbdD4+Ml09YXJbbz4+Ml0sQT0oMHxpcihyLHQsbCxsKzI0fDAsbixmLDApKS1sfDAsMTI9PSgwfChjPTB8YXJbZT4+Ml0pKSYwPT0oMHxBKSl7YXJbZT4+Ml09MDticmVha30oMHxjKTwxMiYxMj09KDB8QSkmJihhcltlPj4yXT1jKzEyKX1lbHNlIGFyW2Y+PjJdPTR8YXJbZj4+Ml19d2hpbGUoMCk7dXI9YX1mdW5jdGlvbiBxcihBLGUscixpLGYsbil7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTA7dmFyIHQsbztvPXVyPSh0PXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxBPTQrb3wwLGFyW28+PjJdPWFyW2k+PjJdLGFyW0E+PjJdPWFyW28+PjJdLCgwfChBPTB8aWkocixBLGYsbiwyKSkpPDYxJjA9PSg0JihyPTB8YXJbZj4+Ml0pfDApP2FyW2U+PjJdPUE6YXJbZj4+Ml09NHxyLHVyPXR9ZnVuY3Rpb24gJHIoQSxlLHIsaSxmLG4pe0F8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wO3ZhciB0LG87bz11cj0odD11cikrMzEmLTMyLHVyPXVyKzE2fDAsQT00K298MCxhcltvPj4yXT1hcltpPj4yXSxhcltBPj4yXT1hcltvPj4yXSwoMHwoQT0wfGlpKHIsQSxmLG4sMSkpKTw3JjA9PSg0JihyPTB8YXJbZj4+Ml0pfDApP2FyW2U+PjJdPUE6YXJbZj4+Ml09NHxyLHVyPXR9ZnVuY3Rpb24gQWkoQSxlLHIsaSxmLG4pe0F8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wO3ZhciB0LG87bz11cj0odD11cikrMzEmLTMyLHVyPXVyKzE2fDAsQT00K298MCxhcltvPj4yXT1hcltpPj4yXSxhcltBPj4yXT1hcltvPj4yXSxBPTB8aWkocixBLGYsbiw0KSw0JmFyW2Y+PjJdfHwoQT0oMHxBKTw2OT9BKzJlM3wwOigwfEEpPDEwMD9BKzE5MDB8MDpBLGFyW2U+PjJdPUErLTE5MDApLHVyPXR9ZnVuY3Rpb24gZWkoQSxlLHIsaSxmLG4pe0F8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wO3ZhciB0LG87bz11cj0odD11cikrMzEmLTMyLHVyPXVyKzE2fDAsQT00K298MCxhcltvPj4yXT1hcltpPj4yXSxhcltBPj4yXT1hcltvPj4yXSxBPTB8aWkocixBLGYsbiw0KSw0JmFyW2Y+PjJdfHwoYXJbZT4+Ml09QSstMTkwMCksdXI9dH1mdW5jdGlvbiByaShBLGUscixpLGYpe0F8PTAscnw9MCxpfD0wLGZ8PTA7dmFyIG49MCx0PTAsbz0wLGE9MDtBPTB8YXJbKGV8PTApPj4yXTtkb3tpZihBKXtpZigwfFVmKEE9KDB8KG49MHxhcltBKzEyPj4yXSkpPT0oMHxhcltBKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbQT4+Ml0pPj4yXV0oQSk6MHxnZigwfGFyW24+PjJdKSwtMSkpe2FyW2U+PjJdPTAsdD0xO2JyZWFrfXQ9MD09KDB8YXJbZT4+Ml0pO2JyZWFrfXQ9MX13aGlsZSgwKTtuPTB8YXJbcj4+Ml07ZG97aWYobil7aWYoMHxVZihBPSgwfChBPTB8YXJbbisxMj4+Ml0pKT09KDB8YXJbbisxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW24+PjJdKT4+Ml1dKG4pOjB8Z2YoMHxhcltBPj4yXSksLTEpKXthcltyPj4yXT0wLGE9MTQ7YnJlYWt9aWYodCl7bz1uLGE9MTY7YnJlYWt9QT02LGE9Mzg7YnJlYWt9YT0xNH13aGlsZSgwKTsxND09KDB8YSkmJihhPXQ/KEE9NiwzOCk6KG89MCwxNikpO0E6ZG97aWYoMTY9PSgwfGEpKWlmKEE9MHxhcltlPj4yXSxBPSgwfChuPTB8YXJbQSsxMj4+Ml0pKT09KDB8YXJbQSsxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW0E+PjJdKT4+Ml1dKEEpOjB8Z2YoMHxhcltuPj4yXSksKDB8eGJbNjMmYXJbNTIrKDB8YXJbZj4+Ml0pPj4yXV0oZixBLDApKTw8MjQ+PjI0PT0zNyl7QT0wfGFyW2U+PjJdLCgwfCh0PTB8YXJbKG49QSsxMnwwKT4+Ml0pKT09KDB8YXJbQSsxNj4+Ml0pP2piWzEyNyZhcls0MCsoMHxhcltBPj4yXSk+PjJdXShBKTooYXJbbj4+Ml09dCs0LGdmKDB8YXJbdD4+Ml0pKSxBPTB8YXJbZT4+Ml07ZG97aWYoQSl7aWYoMHxVZihBPSgwfChuPTB8YXJbQSsxMj4+Ml0pKT09KDB8YXJbQSsxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW0E+PjJdKT4+Ml1dKEEpOjB8Z2YoMHxhcltuPj4yXSksLTEpKXthcltlPj4yXT0wLG49MTticmVha31uPTA9PSgwfGFyW2U+PjJdKTticmVha31uPTF9d2hpbGUoMCk7ZG97aWYoMHxvKXtpZigwfFVmKEE9KDB8KEE9MHxhcltvKzEyPj4yXSkpPT0oMHxhcltvKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbz4+Ml0pPj4yXV0obyk6MHxnZigwfGFyW0E+PjJdKSwtMSkpe2FyW3I+PjJdPTA7YnJlYWt9aWYobilicmVhayBBO0E9MixhPTM4O2JyZWFrIEF9fXdoaWxlKDApO24mJihBPTIsYT0zOCl9ZWxzZSBBPTQsYT0zOH13aGlsZSgwKTszOD09KDB8YSkmJihhcltpPj4yXT1hcltpPj4yXXxBKX1mdW5jdGlvbiBpaShBLGUscixpLGYpe2V8PTAscnw9MCxpfD0wLGZ8PTA7dmFyIG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wLGQ9MDtuPTB8YXJbKEF8PTApPj4yXTtkb3tpZihuKXtpZigwfFVmKG49KDB8KHQ9MHxhcltuKzEyPj4yXSkpPT0oMHxhcltuKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbj4+Ml0pPj4yXV0obik6MHxnZigwfGFyW3Q+PjJdKSwtMSkpe2FyW0E+PjJdPTAsbz0xO2JyZWFrfW89MD09KDB8YXJbQT4+Ml0pO2JyZWFrfW89MX13aGlsZSgwKTt0PTB8YXJbZT4+Ml07ZG97aWYodCl7aWYoMHxVZihuPSgwfChuPTB8YXJbdCsxMj4+Ml0pKT09KDB8YXJbdCsxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3Q+PjJdKT4+Ml1dKHQpOjB8Z2YoMHxhcltuPj4yXSksLTEpKXthcltlPj4yXT0wLGQ9MTQ7YnJlYWt9aWYobyl7ZD0xNzticmVha31kPTE2O2JyZWFrfWQ9MTR9d2hpbGUoMCk7MTQ9PSgwfGQpJiYoZD1vPzE2Oih0PTAsMTcpKTtBOmRve2lmKDE2PT0oMHxkKSlhcltyPj4yXT02fGFyW3I+PjJdLG49MDtlbHNlIGlmKDE3PT0oMHxkKSl7aWYobj0wfGFyW0E+PjJdLG49KDB8KG89MHxhcltuKzEyPj4yXSkpPT0oMHxhcltuKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbj4+Ml0pPj4yXV0obik6MHxnZigwfGFyW28+PjJdKSwhKDB8eGJbNjMmYXJbMTIrKDB8YXJbaT4+Ml0pPj4yXV0oaSwyMDQ4LG4pKSl7YXJbcj4+Ml09NHxhcltyPj4yXSxuPTA7YnJlYWt9Zm9yKG49KDB8eGJbNjMmYXJbNTIrKDB8YXJbaT4+Ml0pPj4yXV0oaSxuLDApKTw8MjQ+PjI0LG89MHxhcltBPj4yXSxhPWw9KCgwfChjPTB8YXJbKGE9bysxMnwwKT4+Ml0pKT09KDB8YXJbbysxNj4+Ml0pP2piWzEyNyZhcls0MCsoMHxhcltvPj4yXSk+PjJdXShvKTooYXJbYT4+Ml09Yys0LGdmKDB8YXJbYz4+Ml0pKSx0KTs7KXtuPW4rLTQ4fDAscz1mKy0xfDAsdD0wfGFyW0E+PjJdO2Rve2lmKHQpe2lmKDB8VWYodD0oMHwobz0wfGFyW3QrMTI+PjJdKSk9PSgwfGFyW3QrMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt0Pj4yXSk+PjJdXSh0KTowfGdmKDB8YXJbbz4+Ml0pLC0xKSl7YXJbQT4+Ml09MCxjPTE7YnJlYWt9Yz0wPT0oMHxhcltBPj4yXSk7YnJlYWt9Yz0xfXdoaWxlKDApO2Rve2lmKGEpe2lmKDB8VWYodD0oMHwodD0wfGFyW2ErMTI+PjJdKSk9PSgwfGFyW2ErMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclthPj4yXSk+PjJdXShhKTowfGdmKDB8YXJbdD4+Ml0pLC0xKSl7dD0xLHU9Yj1hcltlPj4yXT0wO2JyZWFrfXQ9MD09KDB8KGI9bCkpLHU9bDticmVha31iPWwsdD0xLHU9MH13aGlsZSgwKTtpZihvPTB8YXJbQT4+Ml0sISgxPCgwfGYpJihjXnQpKSlicmVhaztpZih0PSgwfCh0PTB8YXJbbysxMj4+Ml0pKT09KDB8YXJbbysxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW28+PjJdKT4+Ml1dKG8pOjB8Z2YoMHxhclt0Pj4yXSksISgwfHhiWzYzJmFyWzEyKygwfGFyW2k+PjJdKT4+Ml1dKGksMjA0OCx0KSkpYnJlYWsgQTtuPSgoMHx4Yls2MyZhcls1MisoMHxhcltpPj4yXSk+PjJdXShpLHQsMCkpPDwyND4+MjQpKygxMCpufDApfDAsdD0wfGFyW0E+PjJdLCgwfChhPTB8YXJbKG89dCsxMnwwKT4+Ml0pKSE9KDB8YXJbdCsxNj4+Ml0pPyhhcltvPj4yXT1hKzQsZ2YoMHxhclthPj4yXSksZj1zLGw9YixhPXUpOihqYlsxMjcmYXJbNDArKDB8YXJbdD4+Ml0pPj4yXV0odCksZj1zLGw9YixhPXUpfWRve2lmKG8pe2lmKDB8VWYodD0oMHwodD0wfGFyW28rMTI+PjJdKSk9PSgwfGFyW28rMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltvPj4yXSk+PjJdXShvKTowfGdmKDB8YXJbdD4+Ml0pLC0xKSl7YXJbQT4+Ml09MCxvPTE7YnJlYWt9bz0wPT0oMHxhcltBPj4yXSk7YnJlYWt9bz0xfXdoaWxlKDApO2Rve2lmKGIpe2lmKDB8VWYodD0oMHwodD0wfGFyW2IrMTI+PjJdKSk9PSgwfGFyW2IrMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltiPj4yXSk+PjJdXShiKTowfGdmKDB8YXJbdD4+Ml0pLC0xKSl7YXJbZT4+Ml09MCxkPTYwO2JyZWFrfWlmKG8pYnJlYWsgQTticmVha31kPTYwfXdoaWxlKDApO2lmKDYwPT0oMHxkKSYmIW8pYnJlYWs7YXJbcj4+Ml09MnxhcltyPj4yXX19d2hpbGUoMCk7cmV0dXJuIDB8bn1mdW5jdGlvbiBmaShBLGUscixpLGYsbil7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTA7dmFyIHQsbyxhLGMsbCx1PTA7dD11cj0oYT11cikrMzEmLTMyLHVyPXVyKzE2fDAsdHJbdD4+MF09MzcsdHJbKG89MSt0fDApPj4wXT1mLHRyWyh1PTIrdHwwKT4+MF09bix0clszK3Q+PjBdPTAsbjw8MjQ+PjI0JiYodHJbbz4+MF09bix0clt1Pj4wXT1mKSx1PTB8KGM9ZSxsPTB8YXJbcj4+Ml0sKGx8PTApLShjfD0wKXwwKSx1PWUrKDB8RUEoMHxlLDB8dSwwfHQsMHxpLDB8YXJbQT4+Ml0pKXwwLGFyW3I+PjJdPXUsdXI9YX1mdW5jdGlvbiBuaShBKXsoMHwoMHxhclsoQXw9MCk+PjJdKSkhPSgwfGRuKCkpJiZvZigwfGFyW0E+PjJdKX1mdW5jdGlvbiB0aSgpe2xBKCl9ZnVuY3Rpb24gb2koQSxlLHIpe3JldHVybiBBfD0wLHJ8PTAsMHwoZXw9MCkmJnZiKDB8QSwyNTUmKDB8aGYocikpfDAsMHxlKSwwfEF9ZnVuY3Rpb24gYWkoQSxlLHIsaSxmLG4sdCxvLGEsYyxsKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCx0fD0wLG98PTAsYXw9MCxjfD0wLGx8PTA7dmFyIHUsYixzLGQsayxoLHcsdixtLGcsWixwLHksQixFLFgsVyxJLEMsRyxWLEYsUixOLF8sWSxRLEQsSixNPTAsVD0wLFU9MCxTPTAsTz0wLHo9MCxqPTAsSD0wO2ZvcihWPXVyPShKPXVyKSszMSYtMzIsdXI9dXIrNTEyfDAsaj05NitWfDAsRD04MCtWfDAsRz03MitWfDAsRT02OCtWfDAsWD01MDArVnwwLFc9NDk3K1Z8MCxJPTQ5NitWfDAsRj01NitWfDAsUj00NCtWfDAsTj0zMitWfDAsXz0yMCtWfDAsWT04K1Z8MCxDPTQrVnwwLGFyWyhCPTg4K1Z8MCk+PjJdPWwsYXJbRD4+Ml09aixhclsoUT00K0R8MCk+PjJdPTQ0NCxhcltHPj4yXT1qLGFyW0U+PjJdPWorNDAwLGFyW0Y+PjJdPTAsYXJbNCtGPj4yXT0wLGw9YXJbOCtGPj4yXT0wOzMhPSgwfGwpOylsPWwrMXwoYXJbRisobDw8Mik+PjJdPTApO2ZvcihhcltSPj4yXT0wLGFyWzQrUj4+Ml09MCxsPWFyWzgrUj4+Ml09MDszIT0oMHxsKTspbD1sKzF8KGFyW1IrKGw8PDIpPj4yXT0wKTtmb3IoYXJbTj4+Ml09MCxhcls0K04+PjJdPTAsbD1hcls4K04+PjJdPTA7MyE9KDB8bCk7KWw9bCsxfChhcltOKyhsPDwyKT4+Ml09MCk7Zm9yKGFyW18+PjJdPTAsYXJbNCtfPj4yXT0wLGw9YXJbOCtfPj4yXT0wOzMhPSgwfGwpOylsPWwrMXwoYXJbXysobDw8Mik+PjJdPTApO2ZvcihhcltZPj4yXT0wLGFyWzQrWT4+Ml09MCxsPWFyWzgrWT4+Ml09MDszIT0oMHxsKTspbD1sKzF8KGFyW1krKGw8PDIpPj4yXT0wKTshZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCxvLGEsYyl7ZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsb3w9MCxhfD0wLGN8PTA7dmFyIGwsdSxiO2lmKHU9dXI9KGI9dXIpKzMxJi0zMix1cj11cisxNnwwLGw9MTIrdXwwLEF8PTApe2ZvcihlPTB8dW4oZSw2MDk1MiksZnNbNjMmYXJbNDQrKDB8YXJbZT4+Ml0pPj4yXV0obCxlKSxBPTB8YXJbbD4+Ml0sdHJbcj4+MF09QSx0cltyKzE+PjBdPUE+PjgsdHJbcisyPj4wXT1BPj4xNix0cltyKzM+PjBdPUE+PjI0LGZzWzYzJmFyWzMyKygwfGFyW2U+PjJdKT4+Ml1dKHUsZSksQT0oKDB8dHJbKEE9YSsxMXwwKT4+MF0pPDA/KEE9MHxhclthPj4yXSx0cltsPj4wXT0wLFFmKEEsbCksYXJbYSs0Pj4yXT0wKToodHJbbD4+MF09MCxRZihhLGwpLHRyW0E+PjBdPTApLGEpLEN1KGEsMCksYXJbQT4+Ml09YXJbdT4+Ml0sYXJbQSs0Pj4yXT1hcls0K3U+PjJdLGFyW0ErOD4+Ml09YXJbOCt1Pj4yXSxBPTA7MyE9KDB8QSk7KWFyW3UrKEE8PDIpPj4yXT0wLEE9QSsxfDA7Zm9yKEJ1KHUpLGZzWzYzJmFyWzI4KygwfGFyW2U+PjJdKT4+Ml1dKHUsZSksQT0oKDB8dHJbKEE9bysxMXwwKT4+MF0pPDA/KEE9MHxhcltvPj4yXSx0cltsPj4wXT0wLFFmKEEsbCksYXJbbys0Pj4yXT0wKToodHJbbD4+MF09MCxRZihvLGwpLHRyW0E+PjBdPTApLG8pLEN1KG8sMCksYXJbQT4+Ml09YXJbdT4+Ml0sYXJbQSs0Pj4yXT1hcls0K3U+PjJdLGFyW0ErOD4+Ml09YXJbOCt1Pj4yXSxBPTA7MyE9KDB8QSk7KWFyW3UrKEE8PDIpPj4yXT0wLEE9QSsxfDA7Zm9yKEJ1KHUpLEE9MHxqYlsxMjcmYXJbMTIrKDB8YXJbZT4+Ml0pPj4yXV0oZSksdHJbaT4+MF09QSxBPTB8amJbMTI3JmFyWzE2KygwfGFyW2U+PjJdKT4+Ml1dKGUpLHRyW2Y+PjBdPUEsZnNbNjMmYXJbMjArKDB8YXJbZT4+Ml0pPj4yXV0odSxlKSxBPSgoMHx0clsoQT1uKzExfDApPj4wXSk8MD8oQT0wfGFyW24+PjJdLHRyW2w+PjBdPTAsUWYoQSxsKSxhcltuKzQ+PjJdPTApOih0cltsPj4wXT0wLFFmKG4sbCksdHJbQT4+MF09MCksbiksQ3UobiwwKSxhcltBPj4yXT1hclt1Pj4yXSxhcltBKzQ+PjJdPWFyWzQrdT4+Ml0sYXJbQSs4Pj4yXT1hcls4K3U+PjJdLEE9MDszIT0oMHxBKTspYXJbdSsoQTw8Mik+PjJdPTAsQT1BKzF8MDtmb3IoQnUodSksZnNbNjMmYXJbMjQrKDB8YXJbZT4+Ml0pPj4yXV0odSxlKSxBPSgoMHx0clsoQT10KzExfDApPj4wXSk8MD8oQT0wfGFyW3Q+PjJdLHRyW2w+PjBdPTAsUWYoQSxsKSxhclt0KzQ+PjJdPTApOih0cltsPj4wXT0wLFFmKHQsbCksdHJbQT4+MF09MCksdCksQ3UodCwwKSxhcltBPj4yXT1hclt1Pj4yXSxhcltBKzQ+PjJdPWFyWzQrdT4+Ml0sYXJbQSs4Pj4yXT1hcls4K3U+PjJdLEE9MDszIT0oMHxBKTspYXJbdSsoQTw8Mik+PjJdPTAsQT1BKzF8MDtCdSh1KSxBPTB8amJbMTI3JmFyWzM2KygwfGFyW2U+PjJdKT4+Ml1dKGUpfWVsc2V7Zm9yKGU9MHx1bihlLDYwOTQ0KSxmc1s2MyZhcls0NCsoMHxhcltlPj4yXSk+PjJdXShsLGUpLEE9MHxhcltsPj4yXSx0cltyPj4wXT1BLHRyW3IrMT4+MF09QT4+OCx0cltyKzI+PjBdPUE+PjE2LHRyW3IrMz4+MF09QT4+MjQsZnNbNjMmYXJbMzIrKDB8YXJbZT4+Ml0pPj4yXV0odSxlKSxBPSgoMHx0clsoQT1hKzExfDApPj4wXSk8MD8oQT0wfGFyW2E+PjJdLHRyW2w+PjBdPTAsUWYoQSxsKSxhclthKzQ+PjJdPTApOih0cltsPj4wXT0wLFFmKGEsbCksdHJbQT4+MF09MCksYSksQ3UoYSwwKSxhcltBPj4yXT1hclt1Pj4yXSxhcltBKzQ+PjJdPWFyWzQrdT4+Ml0sYXJbQSs4Pj4yXT1hcls4K3U+PjJdLEE9MDszIT0oMHxBKTspYXJbdSsoQTw8Mik+PjJdPTAsQT1BKzF8MDtmb3IoQnUodSksZnNbNjMmYXJbMjgrKDB8YXJbZT4+Ml0pPj4yXV0odSxlKSxBPSgoMHx0clsoQT1vKzExfDApPj4wXSk8MD8oQT0wfGFyW28+PjJdLHRyW2w+PjBdPTAsUWYoQSxsKSxhcltvKzQ+PjJdPTApOih0cltsPj4wXT0wLFFmKG8sbCksdHJbQT4+MF09MCksbyksQ3UobywwKSxhcltBPj4yXT1hclt1Pj4yXSxhcltBKzQ+PjJdPWFyWzQrdT4+Ml0sYXJbQSs4Pj4yXT1hcls4K3U+PjJdLEE9MDszIT0oMHxBKTspYXJbdSsoQTw8Mik+PjJdPTAsQT1BKzF8MDtmb3IoQnUodSksQT0wfGpiWzEyNyZhclsxMisoMHxhcltlPj4yXSk+PjJdXShlKSx0cltpPj4wXT1BLEE9MHxqYlsxMjcmYXJbMTYrKDB8YXJbZT4+Ml0pPj4yXV0oZSksdHJbZj4+MF09QSxmc1s2MyZhclsyMCsoMHxhcltlPj4yXSk+PjJdXSh1LGUpLEE9KCgwfHRyWyhBPW4rMTF8MCk+PjBdKTwwPyhBPTB8YXJbbj4+Ml0sdHJbbD4+MF09MCxRZihBLGwpLGFyW24rND4+Ml09MCk6KHRyW2w+PjBdPTAsUWYobixsKSx0cltBPj4wXT0wKSxuKSxDdShuLDApLGFyW0E+PjJdPWFyW3U+PjJdLGFyW0ErND4+Ml09YXJbNCt1Pj4yXSxhcltBKzg+PjJdPWFyWzgrdT4+Ml0sQT0wOzMhPSgwfEEpOylhclt1KyhBPDwyKT4+Ml09MCxBPUErMXwwO2ZvcihCdSh1KSxmc1s2MyZhclsyNCsoMHxhcltlPj4yXSk+PjJdXSh1LGUpLEE9KCgwfHRyWyhBPXQrMTF8MCk+PjBdKTwwPyhBPTB8YXJbdD4+Ml0sdHJbbD4+MF09MCxRZihBLGwpLGFyW3QrND4+Ml09MCk6KHRyW2w+PjBdPTAsUWYodCxsKSx0cltBPj4wXT0wKSx0KSxDdSh0LDApLGFyW0E+PjJdPWFyW3U+PjJdLGFyW0ErND4+Ml09YXJbNCt1Pj4yXSxhcltBKzg+PjJdPWFyWzgrdT4+Ml0sQT0wOzMhPSgwfEEpOylhclt1KyhBPDwyKT4+Ml09MCxBPUErMXwwO0J1KHUpLEE9MHxqYlsxMjcmYXJbMzYrKDB8YXJbZT4+Ml0pPj4yXV0oZSl9YXJbYz4+Ml09QSx1cj1ifShyLGksWCxXLEksRixSLE4sXyxDKSxhcltjPj4yXT1hclthPj4yXSxtPW8rOHwwLGc9MTErTnwwLFo9NCtOfDAscD0xMStffDAseT00K198MCx1PTAhPSg1MTImZnwwKSxiPTExK1J8MCxzPTQrUnwwLGQ9MTErWXwwLGs9NCtZfDAsaD0zK1h8MCx3PTExK0Z8MCx2PTQrRnwwLHo9aj0wO0E6Zm9yKDs7KXtpZihvPTAhPSgwfGopLDQ8PXo+Pj4wKXtIPTIzNDticmVha31sPTB8YXJbQT4+Ml07ZG97aWYobCl7aWYoMHxNZihsPSgwfChyPTB8YXJbbCsxMj4+Ml0pKT09KDB8YXJbbCsxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW2w+PjJdKT4+Ml1dKGwpOjB8aGYoMHx0cltyPj4wXSksLTEpKXthcltBPj4yXT0wLGk9MTticmVha31pPTA9PSgwfGFyW0E+PjJdKTticmVha31pPTF9d2hpbGUoMCk7cj0wfGFyW2U+PjJdO2Rve2lmKHIpe2lmKDB8TWYobD0oMHwobD0wfGFyW3IrMTI+PjJdKSk9PSgwfGFyW3IrMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltyPj4yXSk+PjJdXShyKTowfGhmKDB8dHJbbD4+MF0pLC0xKSl7YXJbZT4+Ml09MCxIPTMxO2JyZWFrfWlmKGkpe089cjticmVha31IPTIzNDticmVhayBBfUg9MzF9d2hpbGUoMCk7aWYoMzE9PSgwfEgpKXtpZihIPTAsaSl7SD0yMzQ7YnJlYWt9Tz0wfWw9MyE9KDB8eik7ZTpkb3tzd2l0Y2goMHx0cltYK3o+PjBdKXtjYXNlIDE6aWYobCl7aWYobD0wfGFyW0E+PjJdLCgyNTUmKGw9KDB8KHI9MHxhcltsKzEyPj4yXSkpPT0oMHxhcltsKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbD4+Ml0pPj4yXV0obCk6MHxoZigwfHRyW3I+PjBdKSkpPDwyND4+MjQ8PS0xKXtIPTQ0O2JyZWFrIEF9aWYoISg4MTkyJm9yWygwfGFyW20+PjJdKSsobDw8MjQ+PjI0PDwxKT4+MV0pKXtIPTQ0O2JyZWFrIEF9bD0wfGFyW0E+PjJdLF91KFksMjU1JihsPSgwfChpPTB8YXJbKHI9bCsxMnwwKT4+Ml0pKT09KDB8YXJbbCsxNj4+Ml0pPzB8amJbMTI3JmFyWzQwKygwfGFyW2w+PjJdKT4+Ml1dKGwpOihhcltyPj4yXT1pKzEsMHxoZigwfHRyW2k+PjBdKSkpKSxvPWw9TyxIPTQ2fWVsc2UgbD1qO2JyZWFrO2Nhc2UgMDpsPyhvPWw9TyxIPTQ2KTpsPWo7YnJlYWs7Y2FzZSAzOmlmKCgwfChsPShsPTB8dHJbZz4+MF0pPDwyND4+MjQ8MD8wfGFyW1o+PjJdOjI1NSZsKSk9PSgwLShvPShvPTB8dHJbcD4+MF0pPDwyND4+MjQ8MD8wfGFyW3k+PjJdOjI1NSZvKXwwKSlsPWo7ZWxzZXtpZihmPTA9PSgwfGwpLGw9MHxhcltBPj4yXSxpPSgwfChyPTB8YXJbbCsxMj4+Ml0pKT09KDB8YXJbbCsxNj4+Ml0pLGZ8MD09KDB8bykpe2lmKGw9aT8wfGpiWzEyNyZhclszNisoMHxhcltsPj4yXSk+PjJdXShsKTowfGhmKDB8dHJbcj4+MF0pLGwmPTI1NSxmKXtpZihsPDwyND4+MjQhPSgwfHRyWygoMHx0cltwPj4wXSk8MD8wfGFyW18+PjJdOl8pPj4wXSkpe2w9ajticmVhayBlfWw9MHxhcltBPj4yXSwoMHwoaT0wfGFyWyhyPWwrMTJ8MCk+PjJdKSk9PSgwfGFyW2wrMTY+PjJdKT9qYlsxMjcmYXJbNDArKDB8YXJbbD4+Ml0pPj4yXV0obCk6KGFyW3I+PjJdPWkrMSxoZigwfHRyW2k+PjBdKSksbD0odHJbdD4+MF09MSk8KChsPTB8dHJbcD4+MF0pPDwyND4+MjQ8MD8wfGFyW3k+PjJdOjI1NSZsKT4+PjA/XzpqO2JyZWFrIGV9aWYobDw8MjQ+PjI0IT0oMHx0clsoKDB8dHJbZz4+MF0pPDA/MHxhcltOPj4yXTpOKT4+MF0pKXt0clt0Pj4wXT0xLGw9ajticmVhayBlfWw9MHxhcltBPj4yXSwoMHwoaT0wfGFyWyhyPWwrMTJ8MCk+PjJdKSk9PSgwfGFyW2wrMTY+PjJdKT9qYlsxMjcmYXJbNDArKDB8YXJbbD4+Ml0pPj4yXV0obCk6KGFyW3I+PjJdPWkrMSxoZigwfHRyW2k+PjBdKSksbD0xPCgobD0wfHRyW2c+PjBdKTw8MjQ+PjI0PDA/MHxhcltaPj4yXToyNTUmbCk+Pj4wP046ajticmVhayBlfWlmKGw9aT8wfGpiWzEyNyZhclszNisoMHxhcltsPj4yXSk+PjJdXShsKTowfGhmKDB8dHJbcj4+MF0pLHI9MHxhcltBPj4yXSxmPSgwfChvPTB8YXJbKGk9cisxMnwwKT4+Ml0pKT09KDB8YXJbcisxNj4+Ml0pLCgyNTUmbCk8PDI0Pj4yND09KDB8dHJbKCgwfHRyW2c+PjBdKTwwPzB8YXJbTj4+Ml06Tik+PjBdKSl7Zj9qYlsxMjcmYXJbNDArKDB8YXJbcj4+Ml0pPj4yXV0ocik6KGFyW2k+PjJdPW8rMSxoZigwfHRyW28+PjBdKSksbD0xPCgobD0wfHRyW2c+PjBdKTw8MjQ+PjI0PDA/MHxhcltaPj4yXToyNTUmbCk+Pj4wP046ajticmVhayBlfWlmKCgyNTUmKGw9Zj8wfGpiWzEyNyZhclszNisoMHxhcltyPj4yXSk+PjJdXShyKTowfGhmKDB8dHJbbz4+MF0pKSk8PDI0Pj4yNCE9KDB8dHJbKCgwfHRyW3A+PjBdKTwwPzB8YXJbXz4+Ml06Xyk+PjBdKSl7SD0xMDM7YnJlYWsgQX1sPTB8YXJbQT4+Ml0sKDB8KGk9MHxhclsocj1sKzEyfDApPj4yXSkpPT0oMHxhcltsKzE2Pj4yXSk/amJbMTI3JmFyWzQwKygwfGFyW2w+PjJdKT4+Ml1dKGwpOihhcltyPj4yXT1pKzEsaGYoMHx0cltpPj4wXSkpLGw9KHRyW3Q+PjBdPTEpPCgobD0wfHRyW3A+PjBdKTw8MjQ+PjI0PDA/MHxhclt5Pj4yXToyNTUmbCk+Pj4wP186an1icmVhaztjYXNlIDI6aWYoISh6Pj4+MDwyfG8pJiYhKHV8Mj09KDB8eikmMCE9KDB8dHJbaD4+MF0pKSl7bD0wO2JyZWFrIGV9bD0ocj0wfHRyW2I+PjBdKTw8MjQ+PjI0PDAsVT0wfGFyW1I+PjJdLFQ9aT1sP1U6UjtyOmRve2lmKDAhPSgwfHopJiYoMHxjcltYKyh6Ky0xKT4+MF0pPDIpe2ZvcihsPWkrKGw/MHxhcltzPj4yXToyNTUmcil8MCxNPVQ7KDB8KG89TSkpIT0oMHxsKSYmISgoZj0wfHRyW28+PjBdKTw8MjQ+PjI0PD0tMSkmJjgxOTImb3JbKDB8YXJbbT4+Ml0pKyhmPDwyND4+MjQ8PDEpPj4xXTspTT1vKzF8MDtpZigoZj1NLVR8MCk+Pj4wPD0obz0obD0obz0wfHRyW2Q+PjBdKTw8MjQ+PjI0PDApPzB8YXJbaz4+Ml06MjU1Jm8pPj4+MClmb3IobD0obz0obD8wfGFyW1k+PjJdOlkpK298MCkrKDAtZil8MDs7KXtpZigoMHxsKT09KDB8bykpe2k9TSxsPVUsbz1TPU87YnJlYWsgcn1pZigoMHx0cltsPj4wXSkhPSgwfHRyW2k+PjBdKSl7aT1ULGw9VSxvPVM9TzticmVhayByfWk9aSsxfDAsbD1sKzF8MH1lbHNlIGk9VCxsPVUsbz1TPU99ZWxzZSBpPVQsbD1VLG89Uz1PfXdoaWxlKDApO3I6Zm9yKDtsPSgoTT1yPDwyND4+MjQ8MCk/bDpSKSsoTT8wfGFyW3M+PjJdOjI1NSZyKXwwLCgwfChNPWkpKSE9KDB8bCk7KXtsPTB8YXJbQT4+Ml07ZG97aWYobCl7aWYoMHxNZihsPSgwfChyPTB8YXJbbCsxMj4+Ml0pKT09KDB8YXJbbCsxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW2w+PjJdKT4+Ml1dKGwpOjB8aGYoMHx0cltyPj4wXSksLTEpKXthcltBPj4yXT0wLHI9MTticmVha31yPTA9PSgwfGFyW0E+PjJdKTticmVha31yPTF9d2hpbGUoMCk7ZG97aWYobyl7aWYoMHxNZihsPSgwfChsPTB8YXJbbysxMj4+Ml0pKT09KDB8YXJbbysxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW28+PjJdKT4+Ml1dKG8pOjB8aGYoMHx0cltsPj4wXSksLTEpKXtsPWFyW2U+PjJdPTAsSD0xMzI7YnJlYWt9aWYocl4wPT0oMHxTKSl7Zj1sPVM7YnJlYWt9bD1NO2JyZWFrIHJ9bD1TLEg9MTMyfXdoaWxlKDApO2lmKDEzMj09KDB8SCkpe2lmKEg9MCxyKXtsPU07YnJlYWt9Zj0wfWlmKHI9MHxhcltBPj4yXSwoMjU1JihyPSgwfChpPTB8YXJbcisxMj4+Ml0pKT09KDB8YXJbcisxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3I+PjJdKT4+Ml1dKHIpOjB8aGYoMHx0cltpPj4wXSkpKTw8MjQ+PjI0IT0oMHx0cltNPj4wXSkpe2w9TTticmVha31yPTB8YXJbQT4+Ml0sKDB8KG89MHxhclsoaT1yKzEyfDApPj4yXSkpPT0oMHxhcltyKzE2Pj4yXSk/amJbMTI3JmFyWzQwKygwfGFyW3I+PjJdKT4+Ml1dKHIpOihhcltpPj4yXT1vKzEsaGYoMHx0cltvPj4wXSkpLFM9bCxpPU0rMXwwLHI9MHx0cltiPj4wXSxsPTB8YXJbUj4+Ml0sbz1mfWlmKHUmJigwfGwpIT0oKChTPShPPTB8dHJbYj4+MF0pPDwyND4+MjQ8MCk/MHxhcltSPj4yXTpSKSsoUz8wfGFyW3M+PjJdOjI1NSZPKXwwKSl7SD0xNDQ7YnJlYWsgQX1sPWo7YnJlYWs7Y2FzZSA0OlQ9MCxvPWw9TztyOmZvcig7Oyl7cj0wfGFyW0E+PjJdO2Rve2lmKHIpe2lmKDB8TWYocj0oMHwoaT0wfGFyW3IrMTI+PjJdKSk9PSgwfGFyW3IrMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltyPj4yXSk+PjJdXShyKTowfGhmKDB8dHJbaT4+MF0pLC0xKSl7YXJbQT4+Ml09MCxpPTE7YnJlYWt9aT0wPT0oMHxhcltBPj4yXSk7YnJlYWt9aT0xfXdoaWxlKDApO2Rve2lmKG8pe2lmKDB8TWYocj0oMHwocj0wfGFyW28rMTI+PjJdKSk9PSgwfGFyW28rMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltvPj4yXSk+PjJdXShvKTowfGhmKDB8dHJbcj4+MF0pLC0xKSl7bD1hcltlPj4yXT0wLEg9MTU4O2JyZWFrfWlmKGleMD09KDB8bCkpe009Zj1sO2JyZWFrfW89bDticmVhayByfUg9MTU4fXdoaWxlKDApO2lmKDE1OD09KDB8SCkpe2lmKEg9MCxpKXtvPWw7YnJlYWt9Zj1sLE09MH1pZihsPTB8YXJbQT4+Ml0sLTE8KHI9MjU1JihsPSgwfChyPTB8YXJbbCsxMj4+Ml0pKT09KDB8YXJbbCsxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW2w+PjJdKT4+Ml1dKGwpOjB8aGYoMHx0cltyPj4wXSkpKTw8MjQ+PjI0JiYwIT0oMjA0OCZvclsoMHxhclttPj4yXSkrKGw8PDI0Pj4yNDw8MSk+PjFdKSkoMHwobD0wfGFyW2M+PjJdKSk9PSgwfGFyW0I+PjJdKSYmKGxpKGEsYyxCKSxsPTB8YXJbYz4+Ml0pLGFyW2M+PjJdPWwrMSx0cltsPj4wXT1yLGw9VCsxfDA7ZWxzZXtpZihPPTB8dHJbdz4+MF0sIShyPDwyND4+MjQ9PSgwfHRyW0k+PjBdKSYoMHxUPzAhPSgwfChPPDwyND4+MjQ8MD8wfGFyW3Y+PjJdOjI1NSZPKSk6MCkpKXtvPWY7YnJlYWt9KDB8KGw9MHxhcltHPj4yXSkpPT0oMHxhcltFPj4yXSkmJih1aShELEcsRSksbD0wfGFyW0c+PjJdKSxhcltHPj4yXT1sKzQsYXJbbD4+Ml09VCxsPTB9cj0wfGFyW0E+PjJdLCgwfChvPTB8YXJbKGk9cisxMnwwKT4+Ml0pKSE9KDB8YXJbcisxNj4+Ml0pPyhhcltpPj4yXT1vKzEsaGYoMHx0cltvPj4wXSksVD1sLGw9ZixvPU0pOihqYlsxMjcmYXJbNDArKDB8YXJbcj4+Ml0pPj4yXV0ociksVD1sLGw9ZixvPU0pfWw9MHxhcltHPj4yXSwwfFQmJigwfGFyW0Q+PjJdKSE9KDB8bCkmJigoMHxsKT09KDB8YXJbRT4+Ml0pJiYodWkoRCxHLEUpLGw9MHxhcltHPj4yXSksYXJbRz4+Ml09bCs0LGFyW2w+PjJdPVQpO3I6ZG97aWYoMDwoMHxhcltDPj4yXSkpe2w9MHxhcltBPj4yXTtkb3tpZihsKXtpZigwfE1mKGw9KDB8KHI9MHxhcltsKzEyPj4yXSkpPT0oMHxhcltsKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbD4+Ml0pPj4yXV0obCk6MHxoZigwfHRyW3I+PjBdKSwtMSkpe2FyW0E+PjJdPTAscj0xO2JyZWFrfXI9MD09KDB8YXJbQT4+Ml0pO2JyZWFrfXI9MX13aGlsZSgwKTtkb3tpZihvKXtpZigwfE1mKGw9KDB8KGw9MHxhcltvKzEyPj4yXSkpPT0oMHxhcltvKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbz4+Ml0pPj4yXV0obyk6MHxoZigwfHRyW2w+PjBdKSwtMSkpe2FyW2U+PjJdPTAsSD0xOTM7YnJlYWt9aWYocilicmVhaztIPTIzMjticmVhayBBfUg9MTkzfXdoaWxlKDApO2lmKDE5Mz09KDB8SCkpe2lmKEg9MCxyKXtIPTIzMjticmVhayBBfW89MH1pZihsPTB8YXJbQT4+Ml0sKDI1NSYobD0oMHwocj0wfGFyW2wrMTI+PjJdKSk9PSgwfGFyW2wrMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltsPj4yXSk+PjJdXShsKTowfGhmKDB8dHJbcj4+MF0pKSk8PDI0Pj4yNCE9KDB8dHJbVz4+MF0pKXtIPTIzMjticmVhayBBfWZvcihsPTB8YXJbQT4+Ml0sbD0oKDB8KGk9MHxhclsocj1sKzEyfDApPj4yXSkpPT0oMHxhcltsKzE2Pj4yXSk/amJbMTI3JmFyWzQwKygwfGFyW2w+PjJdKT4+Ml1dKGwpOihhcltyPj4yXT1pKzEsaGYoMHx0cltpPj4wXSkpLG8pOzspe2lmKCgwfGFyW0M+PjJdKTw9MClicmVhayByO3I9MHxhcltBPj4yXTtkb3tpZihyKXtpZigwfE1mKHI9KDB8KGk9MHxhcltyKzEyPj4yXSkpPT0oMHxhcltyKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbcj4+Ml0pPj4yXV0ocik6MHxoZigwfHRyW2k+PjBdKSwtMSkpe2FyW0E+PjJdPTAsaT0xO2JyZWFrfWk9MD09KDB8YXJbQT4+Ml0pO2JyZWFrfWk9MX13aGlsZSgwKTtkb3tpZihvKXtpZigwfE1mKHI9KDB8KHI9MHxhcltvKzEyPj4yXSkpPT0oMHxhcltvKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbz4+Ml0pPj4yXV0obyk6MHxoZigwfHRyW3I+PjBdKSwtMSkpe2w9YXJbZT4+Ml09MCxIPTIxNjticmVha31pZihpXjA9PSgwfGwpKXtvPWY9bDticmVha31IPTIzMjticmVhayBBfUg9MjE2fXdoaWxlKDApO2lmKDIxNj09KDB8SCkpe2lmKEg9MCxpKXtIPTIzMjticmVhayBBfWY9bCxvPTB9aWYobD0wfGFyW0E+PjJdLCgyNTUmKGw9KDB8KHI9MHxhcltsKzEyPj4yXSkpPT0oMHxhcltsKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbD4+Ml0pPj4yXV0obCk6MHxoZigwfHRyW3I+PjBdKSkpPDwyND4+MjQ8PS0xKXtIPTIzMjticmVhayBBfWlmKCEoMjA0OCZvclsoMHxhclttPj4yXSkrKGw8PDI0Pj4yNDw8MSk+PjFdKSl7SD0yMzI7YnJlYWsgQX0oMHxhcltjPj4yXSk9PSgwfGFyW0I+PjJdKSYmbGkoYSxjLEIpLGw9MHxhcltBPj4yXSxsPSgwfChyPTB8YXJbbCsxMj4+Ml0pKT09KDB8YXJbbCsxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW2w+PjJdKT4+Ml1dKGwpOjB8aGYoMHx0cltyPj4wXSkscj0wfGFyW2M+PjJdLGFyW2M+PjJdPXIrMSx0cltyPj4wXT1sLGFyW0M+PjJdPSgwfGFyW0M+PjJdKS0xLGw9MHxhcltBPj4yXSwoMHwoaT0wfGFyWyhyPWwrMTJ8MCk+PjJdKSkhPSgwfGFyW2wrMTY+PjJdKT8oYXJbcj4+Ml09aSsxLGhmKDB8dHJbaT4+MF0pLGw9Zik6KGpiWzEyNyZhcls0MCsoMHxhcltsPj4yXSk+PjJdXShsKSxsPWYpfX19d2hpbGUoMCk7aWYoKDB8YXJbYz4+Ml0pPT0oMHxhclthPj4yXSkpe0g9MjMyO2JyZWFrIEF9bD1qO2JyZWFrO2RlZmF1bHQ6bD1qfX13aGlsZSgwKTtlOmRve2lmKDQ2PT0oMHxIKSlmb3IoOzspe3I9KEg9MCl8YXJbQT4+Ml07ZG97aWYocil7aWYoMHxNZihyPSgwfChpPTB8YXJbcisxMj4+Ml0pKT09KDB8YXJbcisxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3I+PjJdKT4+Ml1dKHIpOjB8aGYoMHx0cltpPj4wXSksLTEpKXthcltBPj4yXT0wLGk9MTticmVha31pPTA9PSgwfGFyW0E+PjJdKTticmVha31pPTF9d2hpbGUoMCk7ZG97aWYobyl7aWYoMHxNZihyPSgwfChyPTB8YXJbbysxMj4+Ml0pKT09KDB8YXJbbysxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW28+PjJdKT4+Ml1dKG8pOjB8aGYoMHx0cltyPj4wXSksLTEpKXtsPWFyW2U+PjJdPTAsSD01OTticmVha31pZihpXjA9PSgwfGwpKXtvPWY9bDticmVha31sPWo7YnJlYWsgZX1IPTU5fXdoaWxlKDApO2lmKDU5PT0oMHxIKSl7aWYoSD0wLGkpe2w9ajticmVhayBlfWY9bCxvPTB9aWYobD0wfGFyW0E+PjJdLCgyNTUmKGw9KDB8KHI9MHxhcltsKzEyPj4yXSkpPT0oMHxhcltsKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbD4+Ml0pPj4yXV0obCk6MHxoZigwfHRyW3I+PjBdKSkpPDwyND4+MjQ8PS0xKXtsPWo7YnJlYWsgZX1pZighKDgxOTImb3JbKDB8YXJbbT4+Ml0pKyhsPDwyND4+MjQ8PDEpPj4xXSkpe2w9ajticmVhayBlfWw9MHxhcltBPj4yXSxfdShZLDI1NSYobD0oMHwoaT0wfGFyWyhyPWwrMTJ8MCk+PjJdKSk9PSgwfGFyW2wrMTY+PjJdKT8wfGpiWzEyNyZhcls0MCsoMHxhcltsPj4yXSk+PjJdXShsKTooYXJbcj4+Ml09aSsxLDB8aGYoMHx0cltpPj4wXSkpKSksbD1mLEg9NDZ9fXdoaWxlKDApO2o9bCx6PXorMXwwfUE6ZG97aWYoNDQ9PSgwfEgpKWFyW24+PjJdPTR8YXJbbj4+Ml0scj0wO2Vsc2UgaWYoMTAzPT0oMHxIKSlhcltuPj4yXT00fGFyW24+PjJdLHI9MDtlbHNlIGlmKDE0ND09KDB8SCkpYXJbbj4+Ml09NHxhcltuPj4yXSxyPTA7ZWxzZSBpZigyMzI9PSgwfEgpKWFyW24+PjJdPTR8YXJbbj4+Ml0scj0wO2Vsc2UgaWYoMjM0PT0oMHxIKSl7ZTpkb3tpZihvKXtmPWorMTF8MCxNPWorNHwwLG89MTtyOmZvcig7Oyl7aWYoKGw9MHx0cltmPj4wXSk8PDI0Pj4yNDwwP2w9MHxhcltNPj4yXTpsJj0yNTUsbD4+PjA8PW8+Pj4wKWJyZWFrIGU7bD0wfGFyW0E+PjJdO2Rve2lmKGwpe2lmKDB8TWYobD0oMHwocj0wfGFyW2wrMTI+PjJdKSk9PSgwfGFyW2wrMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltsPj4yXSk+PjJdXShsKTowfGhmKDB8dHJbcj4+MF0pLC0xKSl7YXJbQT4+Ml09MCxpPTE7YnJlYWt9aT0wPT0oMHxhcltBPj4yXSk7YnJlYWt9aT0xfXdoaWxlKDApO2w9MHxhcltlPj4yXTtkb3tpZihsKXtpZigwfE1mKGw9KDB8KHI9MHxhcltsKzEyPj4yXSkpPT0oMHxhcltsKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbD4+Ml0pPj4yXV0obCk6MHxoZigwfHRyW3I+PjBdKSwtMSkpe2FyW2U+PjJdPTAsSD0yNTM7YnJlYWt9aWYoaSlicmVhazticmVhayByfUg9MjUzfXdoaWxlKDApO2lmKDI1Mz09KDB8SCkmJihIPTAsaSkpYnJlYWs7aWYobD0wfGFyW0E+PjJdLGw9KDB8KHI9MHxhcltsKzEyPj4yXSkpPT0oMHxhcltsKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbD4+Ml0pPj4yXV0obCk6MHxoZigwfHRyW3I+PjBdKSxyPSgwfHRyW2Y+PjBdKTwwPzB8YXJbaj4+Ml06aiwoMjU1JmwpPDwyND4+MjQhPSgwfHRyW3Irbz4+MF0pKWJyZWFrO2w9bysxfDAscj0wfGFyW0E+PjJdLCgwfChvPTB8YXJbKGk9cisxMnwwKT4+Ml0pKSE9KDB8YXJbcisxNj4+Ml0pPyhhcltpPj4yXT1vKzEsaGYoMHx0cltvPj4wXSksbz1sKTooamJbMTI3JmFyWzQwKygwfGFyW3I+PjJdKT4+Ml1dKHIpLG89bCl9YXJbbj4+Ml09NHxhcltuPj4yXSxyPTA7YnJlYWsgQX19d2hpbGUoMCk7aWYoKDB8KHI9MHxhcltEPj4yXSkpIT0oMHwobD0wfGFyW0c+PjJdKSkpe2lmKGFyW1Y+PjJdPTAsZ24oRixyLGwsViksMHxhcltWPj4yXSl7YXJbbj4+Ml09NHxhcltuPj4yXSxyPTA7YnJlYWt9cj0xO2JyZWFrfXI9MX19d2hpbGUoMCk7cmV0dXJuIEJ1KFkpLEJ1KF8pLEJ1KE4pLEJ1KFIpLEJ1KEYpLGw9MHxhcltEPj4yXSwoYXJbRD4+Ml09MCl8bCYmaXNbNTExJmFyW1E+PjJdXShsKSx1cj1KLDB8cn1mdW5jdGlvbiBjaShBLGUscil7cmV0dXJuKGV8PTApPj4+MDw9KEF8PTApPj4+MCZBPj4+MDwocnw9MCk+Pj4wfDB9ZnVuY3Rpb24gbGkoQSxlLHIpe2V8PTAscnw9MDt2YXIgaSxmLG49MCx0PTAsbz0wO3Q9NDQ0IT0oMHxhclsoZj0oQXw9MCkrNHwwKT4+Ml0pLG49MHxhcltBPj4yXSxvPTA9PSgwfChvPShvPSgwfGFyW3I+PjJdKS1ufDApPj4+MDwyMTQ3NDgzNjQ3P288PDE6LTEpKT8xOm8saT0oMHxhcltlPj4yXSktbnwwLChuPTB8RWModD9uOjAsbykpfHxndSgpLHQ/YXJbQT4+Ml09bjoodD0wfGFyW0E+PjJdLGFyW0E+PjJdPW4sdCYmKGlzWzUxMSZhcltmPj4yXV0odCksbj0wfGFyW0E+PjJdKSksYXJbZj4+Ml09NDQ1LGFyW2U+PjJdPW4raSxhcltyPj4yXT0oMHxhcltBPj4yXSkrb31mdW5jdGlvbiB1aShBLGUscil7ZXw9MCxyfD0wO3ZhciBpLGYsbj0wLHQ9MCxvPTA7dD00NDQhPSgwfGFyWyhmPShBfD0wKSs0fDApPj4yXSksbj0wfGFyW0E+PjJdLG89MD09KDB8KG89KG89KDB8YXJbcj4+Ml0pLW58MCk+Pj4wPDIxNDc0ODM2NDc/bzw8MTotMSkpPzQ6byxpPSgwfGFyW2U+PjJdKS1uPj4yLChuPTB8RWModD9uOjAsbykpfHxndSgpLHQ/YXJbQT4+Ml09bjoodD0wfGFyW0E+PjJdLGFyW0E+PjJdPW4sdCYmKGlzWzUxMSZhcltmPj4yXV0odCksbj0wfGFyW0E+PjJdKSksYXJbZj4+Ml09NDQ1LGFyW2U+PjJdPW4rKGk8PDIpLGFyW3I+PjJdPSgwfGFyW0E+PjJdKSsobz4+PjI8PDIpfWZ1bmN0aW9uIGJpKEEsZSxyLGksZixuLHQsbyxhLGMsbCl7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsdHw9MCxvfD0wLGF8PTAsY3w9MCxsfD0wO3ZhciB1LGIscyxkLGssaCx3LHYsbSxnLFoscCx5LEIsRSxYLFcsSSxDLEcsVixGLFIsTixfLFksUSxELEo9MCxNPTAsVD0wLFU9MCxTPTAsTz0wLHo9MCxqPTA7Zm9yKEc9dXI9KEQ9dXIpKzMxJi0zMix1cj11cis1MTJ8MCx6PTEwNCtHfDAsUT04OCtHfDAsQz04MCtHfDAsQj03NitHfDAsRT01MDQrR3wwLFg9NzIrR3wwLFc9NjgrR3wwLFY9NTYrR3wwLEY9NDQrR3wwLFI9MzIrR3wwLE49MjArR3wwLF89OCtHfDAsST00K0d8MCxhclsoeT05NitHfDApPj4yXT1sLGFyW1E+PjJdPXosYXJbKFk9NCtRfDApPj4yXT00NDQsYXJbQz4+Ml09eixhcltCPj4yXT16KzQwMCxhcltWPj4yXT0wLGFyWzQrVj4+Ml09MCxsPWFyWzgrVj4+Ml09MDszIT0oMHxsKTspbD1sKzF8KGFyW1YrKGw8PDIpPj4yXT0wKTtmb3IoYXJbRj4+Ml09MCxhcls0K0Y+PjJdPTAsbD1hcls4K0Y+PjJdPTA7MyE9KDB8bCk7KWw9bCsxfChhcltGKyhsPDwyKT4+Ml09MCk7Zm9yKGFyW1I+PjJdPTAsYXJbNCtSPj4yXT0wLGw9YXJbOCtSPj4yXT0wOzMhPSgwfGwpOylsPWwrMXwoYXJbUisobDw8Mik+PjJdPTApO2ZvcihhcltOPj4yXT0wLGFyWzQrTj4+Ml09MCxsPWFyWzgrTj4+Ml09MDszIT0oMHxsKTspbD1sKzF8KGFyW04rKGw8PDIpPj4yXT0wKTtmb3IoYXJbXz4+Ml09MCxhcls0K18+PjJdPTAsbD1hcls4K18+PjJdPTA7MyE9KDB8bCk7KWw9bCsxfChhcltfKyhsPDwyKT4+Ml09MCk7IWZ1bmN0aW9uKEEsZSxyLGksZixuLHQsbyxhLGMpe2V8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCx0fD0wLG98PTAsYXw9MCxjfD0wO3ZhciBsLHUsYjtpZih1PXVyPShiPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxsPTEyK3V8MCxBfD0wKXtmb3IoZT0wfHVuKGUsNjA5NjgpLGZzWzYzJmFyWzQ0KygwfGFyW2U+PjJdKT4+Ml1dKGwsZSksQT0wfGFyW2w+PjJdLHRyW3I+PjBdPUEsdHJbcisxPj4wXT1BPj44LHRyW3IrMj4+MF09QT4+MTYsdHJbciszPj4wXT1BPj4yNCxmc1s2MyZhclszMisoMHxhcltlPj4yXSk+PjJdXSh1LGUpLCgwfHRyWyhBPWErOCszfDApPj4wXSk8MD8ocj0wfGFyW2E+PjJdLGFyW2w+PjJdPTAsbG4ocixsKSxhclthKzQ+PjJdPTApOihhcltsPj4yXT0wLGxuKGEsbCksdHJbQT4+MF09MCksTXUoYSwwKSxhclthPj4yXT1hclt1Pj4yXSxhclthKzQ+PjJdPWFyWzQrdT4+Ml0sYXJbYSs4Pj4yXT1hcls4K3U+PjJdLEE9MDszIT0oMHxBKTspYXJbdSsoQTw8Mik+PjJdPTAsQT1BKzF8MDtmb3IoUXUodSksZnNbNjMmYXJbMjgrKDB8YXJbZT4+Ml0pPj4yXV0odSxlKSwoMHx0clsoQT1vKzgrM3wwKT4+MF0pPDA/KGE9MHxhcltvPj4yXSxhcltsPj4yXT0wLGxuKGEsbCksYXJbbys0Pj4yXT0wKTooYXJbbD4+Ml09MCxsbihvLGwpLHRyW0E+PjBdPTApLE11KG8sMCksYXJbbz4+Ml09YXJbdT4+Ml0sYXJbbys0Pj4yXT1hcls0K3U+PjJdLGFyW28rOD4+Ml09YXJbOCt1Pj4yXSxBPTA7MyE9KDB8QSk7KWFyW3UrKEE8PDIpPj4yXT0wLEE9QSsxfDA7Zm9yKFF1KHUpLEE9MHxqYlsxMjcmYXJbMTIrKDB8YXJbZT4+Ml0pPj4yXV0oZSksYXJbaT4+Ml09QSxBPTB8amJbMTI3JmFyWzE2KygwfGFyW2U+PjJdKT4+Ml1dKGUpLGFyW2Y+PjJdPUEsZnNbNjMmYXJbMjArKDB8YXJbZT4+Ml0pPj4yXV0odSxlKSxBPSgoMHx0clsoQT1uKzExfDApPj4wXSk8MD8oQT0wfGFyW24+PjJdLHRyW2w+PjBdPTAsUWYoQSxsKSxhcltuKzQ+PjJdPTApOih0cltsPj4wXT0wLFFmKG4sbCksdHJbQT4+MF09MCksbiksQ3UobiwwKSxhcltBPj4yXT1hclt1Pj4yXSxhcltBKzQ+PjJdPWFyWzQrdT4+Ml0sYXJbQSs4Pj4yXT1hcls4K3U+PjJdLEE9MDszIT0oMHxBKTspYXJbdSsoQTw8Mik+PjJdPTAsQT1BKzF8MDtmb3IoQnUodSksZnNbNjMmYXJbMjQrKDB8YXJbZT4+Ml0pPj4yXV0odSxlKSwoMHx0clsoQT10KzgrM3wwKT4+MF0pPDA/KG49MHxhclt0Pj4yXSxhcltsPj4yXT0wLGxuKG4sbCksYXJbdCs0Pj4yXT0wKTooYXJbbD4+Ml09MCxsbih0LGwpLHRyW0E+PjBdPTApLE11KHQsMCksYXJbdD4+Ml09YXJbdT4+Ml0sYXJbdCs0Pj4yXT1hcls0K3U+PjJdLGFyW3QrOD4+Ml09YXJbOCt1Pj4yXSxBPTA7MyE9KDB8QSk7KWFyW3UrKEE8PDIpPj4yXT0wLEE9QSsxfDA7UXUodSksQT0wfGpiWzEyNyZhclszNisoMHxhcltlPj4yXSk+PjJdXShlKX1lbHNle2ZvcihlPTB8dW4oZSw2MDk2MCksZnNbNjMmYXJbNDQrKDB8YXJbZT4+Ml0pPj4yXV0obCxlKSxBPTB8YXJbbD4+Ml0sdHJbcj4+MF09QSx0cltyKzE+PjBdPUE+PjgsdHJbcisyPj4wXT1BPj4xNix0cltyKzM+PjBdPUE+PjI0LGZzWzYzJmFyWzMyKygwfGFyW2U+PjJdKT4+Ml1dKHUsZSksKDB8dHJbKEE9YSs4KzN8MCk+PjBdKTwwPyhyPTB8YXJbYT4+Ml0sYXJbbD4+Ml09MCxsbihyLGwpLGFyW2ErND4+Ml09MCk6KGFyW2w+PjJdPTAsbG4oYSxsKSx0cltBPj4wXT0wKSxNdShhLDApLGFyW2E+PjJdPWFyW3U+PjJdLGFyW2ErND4+Ml09YXJbNCt1Pj4yXSxhclthKzg+PjJdPWFyWzgrdT4+Ml0sQT0wOzMhPSgwfEEpOylhclt1KyhBPDwyKT4+Ml09MCxBPUErMXwwO2ZvcihRdSh1KSxmc1s2MyZhclsyOCsoMHxhcltlPj4yXSk+PjJdXSh1LGUpLCgwfHRyWyhBPW8rOCszfDApPj4wXSk8MD8oYT0wfGFyW28+PjJdLGFyW2w+PjJdPTAsbG4oYSxsKSxhcltvKzQ+PjJdPTApOihhcltsPj4yXT0wLGxuKG8sbCksdHJbQT4+MF09MCksTXUobywwKSxhcltvPj4yXT1hclt1Pj4yXSxhcltvKzQ+PjJdPWFyWzQrdT4+Ml0sYXJbbys4Pj4yXT1hcls4K3U+PjJdLEE9MDszIT0oMHxBKTspYXJbdSsoQTw8Mik+PjJdPTAsQT1BKzF8MDtmb3IoUXUodSksQT0wfGpiWzEyNyZhclsxMisoMHxhcltlPj4yXSk+PjJdXShlKSxhcltpPj4yXT1BLEE9MHxqYlsxMjcmYXJbMTYrKDB8YXJbZT4+Ml0pPj4yXV0oZSksYXJbZj4+Ml09QSxmc1s2MyZhclsyMCsoMHxhcltlPj4yXSk+PjJdXSh1LGUpLEE9KCgwfHRyWyhBPW4rMTF8MCk+PjBdKTwwPyhBPTB8YXJbbj4+Ml0sdHJbbD4+MF09MCxRZihBLGwpLGFyW24rND4+Ml09MCk6KHRyW2w+PjBdPTAsUWYobixsKSx0cltBPj4wXT0wKSxuKSxDdShuLDApLGFyW0E+PjJdPWFyW3U+PjJdLGFyW0ErND4+Ml09YXJbNCt1Pj4yXSxhcltBKzg+PjJdPWFyWzgrdT4+Ml0sQT0wOzMhPSgwfEEpOylhclt1KyhBPDwyKT4+Ml09MCxBPUErMXwwO2ZvcihCdSh1KSxmc1s2MyZhclsyNCsoMHxhcltlPj4yXSk+PjJdXSh1LGUpLCgwfHRyWyhBPXQrOCszfDApPj4wXSk8MD8obj0wfGFyW3Q+PjJdLGFyW2w+PjJdPTAsbG4obixsKSxhclt0KzQ+PjJdPTApOihhcltsPj4yXT0wLGxuKHQsbCksdHJbQT4+MF09MCksTXUodCwwKSxhclt0Pj4yXT1hclt1Pj4yXSxhclt0KzQ+PjJdPWFyWzQrdT4+Ml0sYXJbdCs4Pj4yXT1hcls4K3U+PjJdLEE9MDszIT0oMHxBKTspYXJbdSsoQTw8Mik+PjJdPTAsQT1BKzF8MDtRdSh1KSxBPTB8amJbMTI3JmFyWzM2KygwfGFyW2U+PjJdKT4+Ml1dKGUpfWFyW2M+PjJdPUEsdXI9Yn0ocixpLEUsWCxXLFYsRixSLE4sSSksYXJbYz4+Ml09YXJbYT4+Ml0sbT04K1IrM3wwLGc9NCtSfDAsWj04K04rM3wwLHA9NCtOfDAsdT0wIT0oNTEyJmZ8MCksYj04K0YrM3wwLHM9NCtGfDAsZD04K18rM3wwLGs9NCtffDAsaD0zK0V8MCx3PTExK1Z8MCx2PTQrVnwwLE89ej0wO0E6Zm9yKDs7KXtpZihmPTAhPSgwfHopLDQ8PU8+Pj4wKXtqPTIyOTticmVha31sPTB8YXJbQT4+Ml07ZG97aWYobCl7aWYoMHxVZihsPSgwfChyPTB8YXJbbCsxMj4+Ml0pKT09KDB8YXJbbCsxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW2w+PjJdKT4+Ml1dKGwpOjB8Z2YoMHxhcltyPj4yXSksLTEpKXthcltBPj4yXT0wLGk9MTticmVha31pPTA9PSgwfGFyW0E+PjJdKTticmVha31pPTF9d2hpbGUoMCk7cj0wfGFyW2U+PjJdO2Rve2lmKHIpe2lmKDB8VWYobD0oMHwobD0wfGFyW3IrMTI+PjJdKSk9PSgwfGFyW3IrMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltyPj4yXSk+PjJdXShyKTowfGdmKDB8YXJbbD4+Ml0pLC0xKSl7YXJbZT4+Ml09MCxqPTMxO2JyZWFrfWlmKGkpe1M9cjticmVha31qPTIyOTticmVhayBBfWo9MzF9d2hpbGUoMCk7aWYoMzE9PSgwfGopKXtpZihqPTAsaSl7aj0yMjk7YnJlYWt9Uz0wfWw9MyE9KDB8Tyk7ZTpkb3tzd2l0Y2goMHx0cltFK08+PjBdKXtjYXNlIDE6aWYobCl7aWYobD0wfGFyW0E+PjJdLGw9KDB8KHI9MHxhcltsKzEyPj4yXSkpPT0oMHxhcltsKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbD4+Ml0pPj4yXV0obCk6MHxnZigwfGFyW3I+PjJdKSwhKDB8eGJbNjMmYXJbMTIrKDB8YXJbbz4+Ml0pPj4yXV0obyw4MTkyLGwpKSl7aj00MzticmVhayBBfWw9MHxhcltBPj4yXSxPdShfLGw9KDB8KGk9MHxhclsocj1sKzEyfDApPj4yXSkpPT0oMHxhcltsKzE2Pj4yXSk/MHxqYlsxMjcmYXJbNDArKDB8YXJbbD4+Ml0pPj4yXV0obCk6KGFyW3I+PjJdPWkrNCwwfGdmKDB8YXJbaT4+Ml0pKSksZj1sPVMsaj00NX1lbHNlIGw9ejticmVhaztjYXNlIDA6bD8oZj1sPVMsaj00NSk6bD16O2JyZWFrO2Nhc2UgMzppZigoMHwobD0obD0wfHRyW20+PjBdKTw8MjQ+PjI0PDA/MHxhcltnPj4yXToyNTUmbCkpPT0oMC0oZj0oZj0wfHRyW1o+PjBdKTw8MjQ+PjI0PDA/MHxhcltwPj4yXToyNTUmZil8MCkpbD16O2Vsc2V7aWYoSj0wPT0oMHxsKSxsPTB8YXJbQT4+Ml0saT0oMHwocj0wfGFyW2wrMTI+PjJdKSk9PSgwfGFyW2wrMTY+PjJdKSxKfDA9PSgwfGYpKXtpZihsPWk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbD4+Ml0pPj4yXV0obCk6MHxnZigwfGFyW3I+PjJdKSxKKXtpZigoMHxsKSE9KDB8YXJbKCgwfHRyW1o+PjBdKTwwPzB8YXJbTj4+Ml06Tik+PjJdKSl7bD16O2JyZWFrIGV9bD0wfGFyW0E+PjJdLCgwfChpPTB8YXJbKHI9bCsxMnwwKT4+Ml0pKT09KDB8YXJbbCsxNj4+Ml0pP2piWzEyNyZhcls0MCsoMHxhcltsPj4yXSk+PjJdXShsKTooYXJbcj4+Ml09aSs0LGdmKDB8YXJbaT4+Ml0pKSxsPSh0clt0Pj4wXT0xKTwoKGw9MHx0cltaPj4wXSk8PDI0Pj4yNDwwPzB8YXJbcD4+Ml06MjU1JmwpPj4+MD9OOno7YnJlYWsgZX1pZigoMHxsKSE9KDB8YXJbKCgwfHRyW20+PjBdKTwwPzB8YXJbUj4+Ml06Uik+PjJdKSl7dHJbdD4+MF09MSxsPXo7YnJlYWsgZX1sPTB8YXJbQT4+Ml0sKDB8KGk9MHxhclsocj1sKzEyfDApPj4yXSkpPT0oMHxhcltsKzE2Pj4yXSk/amJbMTI3JmFyWzQwKygwfGFyW2w+PjJdKT4+Ml1dKGwpOihhcltyPj4yXT1pKzQsZ2YoMHxhcltpPj4yXSkpLGw9MTwoKGw9MHx0clttPj4wXSk8PDI0Pj4yNDwwPzB8YXJbZz4+Ml06MjU1JmwpPj4+MD9SOno7YnJlYWsgZX1pZihsPWk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbD4+Ml0pPj4yXV0obCk6MHxnZigwfGFyW3I+PjJdKSxyPTB8YXJbQT4+Ml0sSj0oMHwoZj0wfGFyWyhpPXIrMTJ8MCk+PjJdKSk9PSgwfGFyW3IrMTY+PjJdKSwoMHxsKT09KDB8YXJbKCgwfHRyW20+PjBdKTwwPzB8YXJbUj4+Ml06Uik+PjJdKSl7Sj9qYlsxMjcmYXJbNDArKDB8YXJbcj4+Ml0pPj4yXV0ocik6KGFyW2k+PjJdPWYrNCxnZigwfGFyW2Y+PjJdKSksbD0xPCgobD0wfHRyW20+PjBdKTw8MjQ+PjI0PDA/MHxhcltnPj4yXToyNTUmbCk+Pj4wP1I6ejticmVhayBlfWlmKCgwfChsPUo/MHxqYlsxMjcmYXJbMzYrKDB8YXJbcj4+Ml0pPj4yXV0ocik6MHxnZigwfGFyW2Y+PjJdKSkpIT0oMHxhclsoKDB8dHJbWj4+MF0pPDA/MHxhcltOPj4yXTpOKT4+Ml0pKXtqPTEwMTticmVhayBBfWw9MHxhcltBPj4yXSwoMHwoaT0wfGFyWyhyPWwrMTJ8MCk+PjJdKSk9PSgwfGFyW2wrMTY+PjJdKT9qYlsxMjcmYXJbNDArKDB8YXJbbD4+Ml0pPj4yXV0obCk6KGFyW3I+PjJdPWkrNCxnZigwfGFyW2k+PjJdKSksbD0odHJbdD4+MF09MSk8KChsPTB8dHJbWj4+MF0pPDwyND4+MjQ8MD8wfGFyW3A+PjJdOjI1NSZsKT4+PjA/Tjp6fWJyZWFrO2Nhc2UgMjppZighKE8+Pj4wPDJ8ZikmJiEodXwyPT0oMHxPKSYwIT0oMHx0cltoPj4wXSkpKXtsPTA7YnJlYWsgZX1pPTB8dHJbYj4+MF0sZj0wfGFyW0Y+PjJdLGw9aTw8MjQ+PjI0PDA/ZjpGO3I6ZG97aWYoMCE9KDB8TykmJigwfGNyW0UrKE8rLTEpPj4wXSk8Mil7Zm9yKDsoMHwocj1sKSkhPSgoKFU9aTw8MjQ+PjI0PDApP2Y6RikrKChVPzB8YXJbcz4+Ml06MjU1JmkpPDwyKXwwKTspe2lmKCEoMHx4Yls2MyZhclsxMisoMHxhcltvPj4yXSk+PjJdXShvLDgxOTIsMHxhcltyPj4yXSkpKXtqPTEwODticmVha31sPXIrNHwwLGk9MHx0cltiPj4wXSxmPTB8YXJbRj4+Ml19aWYoMTA4PT0oMHxqKSYmKGk9KGo9MCl8dHJbYj4+MF0sZj0wfGFyW0Y+PjJdKSxUPWwtKFU9Sj1pPDwyND4+MjQ8MD9mOkYpPj4yLChNPShyPShNPTB8dHJbZD4+MF0pPDwyND4+MjQ8MCk/MHxhcltrPj4yXToyNTUmTSk+Pj4wPFQ+Pj4wKXI9VSxKPVQ9UztlbHNlIGZvcihyPShNPShyPzB8YXJbXz4+Ml06XykrKE08PDIpfDApKygwLVQ8PDIpfDA7Oyl7aWYoKDB8cik9PSgwfE0pKXtyPWwsSj1UPVM7YnJlYWsgcn1pZigoMHxhcltyPj4yXSkhPSgwfGFyW0o+PjJdKSl7cj1VLEo9VD1TO2JyZWFrIHJ9Sj1KKzR8MCxyPXIrNHwwfX1lbHNlIHI9bCxKPVQ9U313aGlsZSgwKTtyOmZvcig7KDB8KE09cikpIT0oMHwobD0oKGw9aTw8MjQ+PjI0PDApP2Y6RikrKChsPzB8YXJbcz4+Ml06MjU1JmkpPDwyKXwwKSk7KXtsPTB8YXJbQT4+Ml07ZG97aWYobCl7aWYoMHxVZihsPSgwfChyPTB8YXJbbCsxMj4+Ml0pKT09KDB8YXJbbCsxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW2w+PjJdKT4+Ml1dKGwpOjB8Z2YoMHxhcltyPj4yXSksLTEpKXthcltBPj4yXT0wLHI9MTticmVha31yPTA9PSgwfGFyW0E+PjJdKTticmVha31yPTF9d2hpbGUoMCk7ZG97aWYoSil7aWYoMHxVZihsPSgwfChsPTB8YXJbSisxMj4+Ml0pKT09KDB8YXJbSisxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW0o+PjJdKT4+Ml1dKEopOjB8Z2YoMHxhcltsPj4yXSksLTEpKXtsPWFyW2U+PjJdPTAsaj0xMjk7YnJlYWt9aWYocl4wPT0oMHxUKSl7Sj1sPVQ7YnJlYWt9bD1NO2JyZWFrIHJ9bD1ULGo9MTI5fXdoaWxlKDApO2lmKDEyOT09KDB8aikpe2lmKGo9MCxyKXtsPU07YnJlYWt9Sj0wfWlmKHI9MHxhcltBPj4yXSwoMHwocj0oMHwoaT0wfGFyW3IrMTI+PjJdKSk9PSgwfGFyW3IrMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltyPj4yXSk+PjJdXShyKTowfGdmKDB8YXJbaT4+Ml0pKSkhPSgwfGFyW00+PjJdKSl7bD1NO2JyZWFrfXI9MHxhcltBPj4yXSwoMHwoZj0wfGFyWyhpPXIrMTJ8MCk+PjJdKSk9PSgwfGFyW3IrMTY+PjJdKT9qYlsxMjcmYXJbNDArKDB8YXJbcj4+Ml0pPj4yXV0ocik6KGFyW2k+PjJdPWYrNCxnZigwfGFyW2Y+PjJdKSksVD1sLHI9TSs0fDAsaT0wfHRyW2I+PjBdLGY9MHxhcltGPj4yXX1pZih1JiYoMHxsKSE9KCgoVT0oUz0wfHRyW2I+PjBdKTw8MjQ+PjI0PDApPzB8YXJbRj4+Ml06RikrKChVPzB8YXJbcz4+Ml06MjU1JlMpPDwyKXwwKSl7aj0xNDE7YnJlYWsgQX1sPXo7YnJlYWs7Y2FzZSA0OlQ9MCxmPWw9UztyOmZvcig7Oyl7cj0wfGFyW0E+PjJdO2Rve2lmKHIpe2lmKDB8VWYocj0oMHwoaT0wfGFyW3IrMTI+PjJdKSk9PSgwfGFyW3IrMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltyPj4yXSk+PjJdXShyKTowfGdmKDB8YXJbaT4+Ml0pLC0xKSl7YXJbQT4+Ml09MCxpPTE7YnJlYWt9aT0wPT0oMHxhcltBPj4yXSk7YnJlYWt9aT0xfXdoaWxlKDApO2Rve2lmKGYpe2lmKDB8VWYocj0oMHwocj0wfGFyW2YrMTI+PjJdKSk9PSgwfGFyW2YrMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltmPj4yXSk+PjJdXShmKTowfGdmKDB8YXJbcj4+Ml0pLC0xKSl7bD1hcltlPj4yXT0wLGo9MTU1O2JyZWFrfWlmKGleMD09KDB8bCkpe009Sj1sO2JyZWFrfWY9bDticmVhayByfWo9MTU1fXdoaWxlKDApO2lmKDE1NT09KDB8aikpe2lmKGo9MCxpKXtmPWw7YnJlYWt9Sj1sLE09MH1pZihsPTB8YXJbQT4+Ml0scj0oMHwocj0wfGFyW2wrMTI+PjJdKSk9PSgwfGFyW2wrMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltsPj4yXSk+PjJdXShsKTowfGdmKDB8YXJbcj4+Ml0pLDB8eGJbNjMmYXJbMTIrKDB8YXJbbz4+Ml0pPj4yXV0obywyMDQ4LHIpKSgwfChsPTB8YXJbYz4+Ml0pKT09KDB8YXJbeT4+Ml0pJiYoZGkoYSxjLHkpLGw9MHxhcltjPj4yXSksYXJbYz4+Ml09bCs0LGFyW2w+PjJdPXIsbD1UKzF8MDtlbHNle2lmKFM9MHx0clt3Pj4wXSwhKCgwfHIpPT0oMHxhcltXPj4yXSkmKDB8VD8wIT0oMHwoUzw8MjQ+PjI0PDA/MHxhclt2Pj4yXToyNTUmUykpOjApKSl7Zj1KO2JyZWFrfSgwfChsPTB8YXJbQz4+Ml0pKT09KDB8YXJbQj4+Ml0pJiYodWkoUSxDLEIpLGw9MHxhcltDPj4yXSksYXJbQz4+Ml09bCs0LGFyW2w+PjJdPVQsbD0wfXI9MHxhcltBPj4yXSwoMHwoZj0wfGFyWyhpPXIrMTJ8MCk+PjJdKSkhPSgwfGFyW3IrMTY+PjJdKT8oYXJbaT4+Ml09Zis0LGdmKDB8YXJbZj4+Ml0pLFQ9bCxsPUosZj1NKTooamJbMTI3JmFyWzQwKygwfGFyW3I+PjJdKT4+Ml1dKHIpLFQ9bCxsPUosZj1NKX1sPTB8YXJbQz4+Ml0sMHxUJiYoMHxhcltRPj4yXSkhPSgwfGwpJiYoKDB8bCk9PSgwfGFyW0I+PjJdKSYmKHVpKFEsQyxCKSxsPTB8YXJbQz4+Ml0pLGFyW0M+PjJdPWwrNCxhcltsPj4yXT1UKTtyOmRve2lmKDA8KDB8YXJbST4+Ml0pKXtsPTB8YXJbQT4+Ml07ZG97aWYobCl7aWYoMHxVZihsPSgwfChyPTB8YXJbbCsxMj4+Ml0pKT09KDB8YXJbbCsxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW2w+PjJdKT4+Ml1dKGwpOjB8Z2YoMHxhcltyPj4yXSksLTEpKXthcltBPj4yXT0wLHI9MTticmVha31yPTA9PSgwfGFyW0E+PjJdKTticmVha31yPTF9d2hpbGUoMCk7ZG97aWYoZil7aWYoMHxVZihsPSgwfChsPTB8YXJbZisxMj4+Ml0pKT09KDB8YXJbZisxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW2Y+PjJdKT4+Ml1dKGYpOjB8Z2YoMHxhcltsPj4yXSksLTEpKXthcltlPj4yXT0wLGo9MTg5O2JyZWFrfWlmKHIpYnJlYWs7aj0yMjc7YnJlYWsgQX1qPTE4OX13aGlsZSgwKTtpZigxODk9PSgwfGopKXtpZihqPTAscil7aj0yMjc7YnJlYWsgQX1mPTB9aWYobD0wfGFyW0E+PjJdLCgwfChsPSgwfChyPTB8YXJbbCsxMj4+Ml0pKT09KDB8YXJbbCsxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW2w+PjJdKT4+Ml1dKGwpOjB8Z2YoMHxhcltyPj4yXSkpKSE9KDB8YXJbWD4+Ml0pKXtqPTIyNzticmVhayBBfWZvcihsPTB8YXJbQT4+Ml0sbD0oKDB8KGk9MHxhclsocj1sKzEyfDApPj4yXSkpPT0oMHxhcltsKzE2Pj4yXSk/amJbMTI3JmFyWzQwKygwfGFyW2w+PjJdKT4+Ml1dKGwpOihhcltyPj4yXT1pKzQsZ2YoMHxhcltpPj4yXSkpLGYpOzspe2lmKCgwfGFyW0k+PjJdKTw9MClicmVhayByO3I9MHxhcltBPj4yXTtkb3tpZihyKXtpZigwfFVmKHI9KDB8KGk9MHxhcltyKzEyPj4yXSkpPT0oMHxhcltyKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbcj4+Ml0pPj4yXV0ocik6MHxnZigwfGFyW2k+PjJdKSwtMSkpe2FyW0E+PjJdPTAsaT0xO2JyZWFrfWk9MD09KDB8YXJbQT4+Ml0pO2JyZWFrfWk9MX13aGlsZSgwKTtkb3tpZihmKXtpZigwfFVmKHI9KDB8KHI9MHxhcltmKzEyPj4yXSkpPT0oMHxhcltmKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbZj4+Ml0pPj4yXV0oZik6MHxnZigwfGFyW3I+PjJdKSwtMSkpe2w9YXJbZT4+Ml09MCxqPTIxMjticmVha31pZihpXjA9PSgwfGwpKXtmPUo9bDticmVha31qPTIyNzticmVhayBBfWo9MjEyfXdoaWxlKDApO2lmKDIxMj09KDB8aikpe2lmKGo9MCxpKXtqPTIyNzticmVhayBBfUo9bCxmPTB9aWYobD0wfGFyW0E+PjJdLGw9KDB8KHI9MHxhcltsKzEyPj4yXSkpPT0oMHxhcltsKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbD4+Ml0pPj4yXV0obCk6MHxnZigwfGFyW3I+PjJdKSwhKDB8eGJbNjMmYXJbMTIrKDB8YXJbbz4+Ml0pPj4yXV0obywyMDQ4LGwpKSl7aj0yMjc7YnJlYWsgQX0oMHxhcltjPj4yXSk9PSgwfGFyW3k+PjJdKSYmZGkoYSxjLHkpLGw9MHxhcltBPj4yXSxsPSgwfChyPTB8YXJbbCsxMj4+Ml0pKT09KDB8YXJbbCsxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW2w+PjJdKT4+Ml1dKGwpOjB8Z2YoMHxhcltyPj4yXSkscj0wfGFyW2M+PjJdLGFyW2M+PjJdPXIrNCxhcltyPj4yXT1sLGFyW0k+PjJdPSgwfGFyW0k+PjJdKS0xLGw9MHxhcltBPj4yXSwoMHwoaT0wfGFyWyhyPWwrMTJ8MCk+PjJdKSkhPSgwfGFyW2wrMTY+PjJdKT8oYXJbcj4+Ml09aSs0LGdmKDB8YXJbaT4+Ml0pLGw9Sik6KGpiWzEyNyZhcls0MCsoMHxhcltsPj4yXSk+PjJdXShsKSxsPUopfX19d2hpbGUoMCk7aWYoKDB8YXJbYz4+Ml0pPT0oMHxhclthPj4yXSkpe2o9MjI3O2JyZWFrIEF9bD16O2JyZWFrO2RlZmF1bHQ6bD16fX13aGlsZSgwKTtlOmRve2lmKDQ1PT0oMHxqKSlmb3IoOzspe3I9KGo9MCl8YXJbQT4+Ml07ZG97aWYocil7aWYoMHxVZihyPSgwfChpPTB8YXJbcisxMj4+Ml0pKT09KDB8YXJbcisxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3I+PjJdKT4+Ml1dKHIpOjB8Z2YoMHxhcltpPj4yXSksLTEpKXthcltBPj4yXT0wLGk9MTticmVha31pPTA9PSgwfGFyW0E+PjJdKTticmVha31pPTF9d2hpbGUoMCk7ZG97aWYoZil7aWYoMHxVZihyPSgwfChyPTB8YXJbZisxMj4+Ml0pKT09KDB8YXJbZisxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW2Y+PjJdKT4+Ml1dKGYpOjB8Z2YoMHxhcltyPj4yXSksLTEpKXtsPWFyW2U+PjJdPTAsaj01ODticmVha31pZihpXjA9PSgwfGwpKXtmPUo9bDticmVha31sPXo7YnJlYWsgZX1qPTU4fXdoaWxlKDApO2lmKDU4PT0oMHxqKSl7aWYoaj0wLGkpe2w9ejticmVhayBlfUo9bCxmPTB9aWYobD0wfGFyW0E+PjJdLGw9KDB8KHI9MHxhcltsKzEyPj4yXSkpPT0oMHxhcltsKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbD4+Ml0pPj4yXV0obCk6MHxnZigwfGFyW3I+PjJdKSwhKDB8eGJbNjMmYXJbMTIrKDB8YXJbbz4+Ml0pPj4yXV0obyw4MTkyLGwpKSl7bD16O2JyZWFrIGV9bD0wfGFyW0E+PjJdLE91KF8sbD0oMHwoaT0wfGFyWyhyPWwrMTJ8MCk+PjJdKSk9PSgwfGFyW2wrMTY+PjJdKT8wfGpiWzEyNyZhcls0MCsoMHxhcltsPj4yXSk+PjJdXShsKTooYXJbcj4+Ml09aSs0LDB8Z2YoMHxhcltpPj4yXSkpKSxsPUosaj00NX19d2hpbGUoMCk7ej1sLE89TysxfDB9QTpkb3tpZig0Mz09KDB8aikpYXJbbj4+Ml09NHxhcltuPj4yXSxyPTA7ZWxzZSBpZigxMDE9PSgwfGopKWFyW24+PjJdPTR8YXJbbj4+Ml0scj0wO2Vsc2UgaWYoMTQxPT0oMHxqKSlhcltuPj4yXT00fGFyW24+PjJdLHI9MDtlbHNlIGlmKDIyNz09KDB8aikpYXJbbj4+Ml09NHxhcltuPj4yXSxyPTA7ZWxzZSBpZigyMjk9PSgwfGopKXtlOmRve2lmKGYpe0o9eis4KzN8MCxNPXorNHwwLGY9MTtyOmZvcig7Oyl7aWYoKGw9MHx0cltKPj4wXSk8PDI0Pj4yNDwwP2w9MHxhcltNPj4yXTpsJj0yNTUsbD4+PjA8PWY+Pj4wKWJyZWFrIGU7bD0wfGFyW0E+PjJdO2Rve2lmKGwpe2lmKDB8VWYobD0oMHwocj0wfGFyW2wrMTI+PjJdKSk9PSgwfGFyW2wrMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltsPj4yXSk+PjJdXShsKTowfGdmKDB8YXJbcj4+Ml0pLC0xKSl7YXJbQT4+Ml09MCxpPTE7YnJlYWt9aT0wPT0oMHxhcltBPj4yXSk7YnJlYWt9aT0xfXdoaWxlKDApO2w9MHxhcltlPj4yXTtkb3tpZihsKXtpZigwfFVmKGw9KDB8KHI9MHxhcltsKzEyPj4yXSkpPT0oMHxhcltsKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbD4+Ml0pPj4yXV0obCk6MHxnZigwfGFyW3I+PjJdKSwtMSkpe2FyW2U+PjJdPTAsaj0yNDg7YnJlYWt9aWYoaSlicmVhazticmVhayByfWo9MjQ4fXdoaWxlKDApO2lmKDI0OD09KDB8aikmJihqPTAsaSkpYnJlYWs7aWYobD0wfGFyW0E+PjJdLGw9KDB8KHI9MHxhcltsKzEyPj4yXSkpPT0oMHxhcltsKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbD4+Ml0pPj4yXV0obCk6MHxnZigwfGFyW3I+PjJdKSxyPSgwfHRyW0o+PjBdKTwwPzB8YXJbej4+Ml06eiwoMHxsKSE9KDB8YXJbcisoZjw8Mik+PjJdKSlicmVhaztsPWYrMXwwLHI9MHxhcltBPj4yXSwoMHwoZj0wfGFyWyhpPXIrMTJ8MCk+PjJdKSkhPSgwfGFyW3IrMTY+PjJdKT8oYXJbaT4+Ml09Zis0LGdmKDB8YXJbZj4+Ml0pLGY9bCk6KGpiWzEyNyZhcls0MCsoMHxhcltyPj4yXSk+PjJdXShyKSxmPWwpfWFyW24+PjJdPTR8YXJbbj4+Ml0scj0wO2JyZWFrIEF9fXdoaWxlKDApO2lmKCgwfChyPTB8YXJbUT4+Ml0pKSE9KDB8KGw9MHxhcltDPj4yXSkpKXtpZihhcltHPj4yXT0wLGduKFYscixsLEcpLDB8YXJbRz4+Ml0pe2FyW24+PjJdPTR8YXJbbj4+Ml0scj0wO2JyZWFrfXI9MTticmVha31yPTF9fXdoaWxlKDApO3JldHVybiBRdShfKSxRdShOKSxRdShSKSxRdShGKSxCdShWKSxsPTB8YXJbUT4+Ml0sKGFyW1E+PjJdPTApfGwmJmlzWzUxMSZhcltZPj4yXV0obCksdXI9RCwwfHJ9ZnVuY3Rpb24gc2koQSxlLHIpe3JldHVybihlfD0wKT4+PjA8PShBfD0wKT4+PjAmQT4+PjA8KHJ8PTApPj4+MHwwfWZ1bmN0aW9uIGRpKEEsZSxyKXtlfD0wLHJ8PTA7dmFyIGksZixuPTAsdD0wLG89MDt0PTQ0NCE9KDB8YXJbKGY9KEF8PTApKzR8MCk+PjJdKSxuPTB8YXJbQT4+Ml0sbz0wPT0oMHwobz0obz0oMHxhcltyPj4yXSktbnwwKT4+PjA8MjE0NzQ4MzY0Nz9vPDwxOi0xKSk/NDpvLGk9KDB8YXJbZT4+Ml0pLW4+PjIsKG49MHxFYyh0P246MCxvKSl8fGd1KCksdD9hcltBPj4yXT1uOih0PTB8YXJbQT4+Ml0sYXJbQT4+Ml09bix0JiYoaXNbNTExJmFyW2Y+PjJdXSh0KSxuPTB8YXJbQT4+Ml0pKSxhcltmPj4yXT00NDUsYXJbZT4+Ml09bisoaTw8MiksYXJbcj4+Ml09KDB8YXJbQT4+Ml0pKyhvPj4+Mjw8Mil9ZnVuY3Rpb24ga2koQSxlLHIsaSxmLG4sdCxvLGEsYyl7ZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsb3w9MCxhfD0wLGN8PTA7dmFyIGwsdSxiLHM9MDtpZih1PXVyPShiPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxsPTEyK3V8MCxBfD0wKXtpZihzPTB8dW4ociw2MDk1MiksZSl7Zm9yKGZzWzYzJmFyWzQ0KygwfGFyW3M+PjJdKT4+Ml1dKGwscyksQT0wfGFyW2w+PjJdLHRyW2k+PjBdPUEsdHJbaSsxPj4wXT1BPj44LHRyW2krMj4+MF09QT4+MTYsdHJbaSszPj4wXT1BPj4yNCxmc1s2MyZhclszMisoMHxhcltzPj4yXSk+PjJdXSh1LHMpLEE9KCgwfHRyWyhBPWErMTF8MCk+PjBdKTwwPyhBPTB8YXJbYT4+Ml0sdHJbbD4+MF09MCxRZihBLGwpLGFyW2ErND4+Ml09MCk6KHRyW2w+PjBdPTAsUWYoYSxsKSx0cltBPj4wXT0wKSxhKSxDdShhLDApLGFyW0E+PjJdPWFyW3U+PjJdLGFyW0ErND4+Ml09YXJbNCt1Pj4yXSxhcltBKzg+PjJdPWFyWzgrdT4+Ml0sQT0wOzMhPSgwfEEpOylBPUErMXwoYXJbdSsoQTw8Mik+PjJdPTApO0J1KHUpLHI9c31lbHNle2Zvcihmc1s2MyZhcls0MCsoMHxhcltzPj4yXSk+PjJdXShsLHMpLEE9MHxhcltsPj4yXSx0cltpPj4wXT1BLHRyW2krMT4+MF09QT4+OCx0cltpKzI+PjBdPUE+PjE2LHRyW2krMz4+MF09QT4+MjQsZnNbNjMmYXJbMjgrKDB8YXJbcz4+Ml0pPj4yXV0odSxzKSxBPSgoMHx0clsoQT1hKzExfDApPj4wXSk8MD8oQT0wfGFyW2E+PjJdLHRyW2w+PjBdPTAsUWYoQSxsKSxhclthKzQ+PjJdPTApOih0cltsPj4wXT0wLFFmKGEsbCksdHJbQT4+MF09MCksYSksQ3UoYSwwKSxhcltBPj4yXT1hclt1Pj4yXSxhcltBKzQ+PjJdPWFyWzQrdT4+Ml0sYXJbQSs4Pj4yXT1hcls4K3U+PjJdLEE9MDszIT0oMHxBKTspQT1BKzF8KGFyW3UrKEE8PDIpPj4yXT0wKTtCdSh1KSxyPXN9Zm9yKEE9MHxqYlsxMjcmYXJbMTIrKDB8YXJbcz4+Ml0pPj4yXV0ocyksdHJbZj4+MF09QSxBPTB8amJbMTI3JmFyWzE2KygwfGFyW3M+PjJdKT4+Ml1dKHMpLHRyW24+PjBdPUEsZnNbNjMmYXJbMjArKDB8YXJbcj4+Ml0pPj4yXV0odSxzKSxBPSgoMHx0clsoQT10KzExfDApPj4wXSk8MD8oQT0wfGFyW3Q+PjJdLHRyW2w+PjBdPTAsUWYoQSxsKSxhclt0KzQ+PjJdPTApOih0cltsPj4wXT0wLFFmKHQsbCksdHJbQT4+MF09MCksdCksQ3UodCwwKSxhcltBPj4yXT1hclt1Pj4yXSxhcltBKzQ+PjJdPWFyWzQrdT4+Ml0sYXJbQSs4Pj4yXT1hcls4K3U+PjJdLEE9MDszIT0oMHxBKTspQT1BKzF8KGFyW3UrKEE8PDIpPj4yXT0wKTtmb3IoQnUodSksZnNbNjMmYXJbMjQrKDB8YXJbcj4+Ml0pPj4yXV0odSxzKSxBPSgoMHx0clsoQT1vKzExfDApPj4wXSk8MD8oQT0wfGFyW28+PjJdLHRyW2w+PjBdPTAsUWYoQSxsKSxhcltvKzQ+PjJdPTApOih0cltsPj4wXT0wLFFmKG8sbCksdHJbQT4+MF09MCksbyksQ3UobywwKSxhcltBPj4yXT1hclt1Pj4yXSxhcltBKzQ+PjJdPWFyWzQrdT4+Ml0sYXJbQSs4Pj4yXT1hcls4K3U+PjJdLEE9MDszIT0oMHxBKTspQT1BKzF8KGFyW3UrKEE8PDIpPj4yXT0wKTtCdSh1KSxBPTB8amJbMTI3JmFyWzM2KygwfGFyW3M+PjJdKT4+Ml1dKHMpfWVsc2V7aWYocz0wfHVuKHIsNjA5NDQpLGUpe2Zvcihmc1s2MyZhcls0NCsoMHxhcltzPj4yXSk+PjJdXShsLHMpLEE9MHxhcltsPj4yXSx0cltpPj4wXT1BLHRyW2krMT4+MF09QT4+OCx0cltpKzI+PjBdPUE+PjE2LHRyW2krMz4+MF09QT4+MjQsZnNbNjMmYXJbMzIrKDB8YXJbcz4+Ml0pPj4yXV0odSxzKSxBPSgoMHx0clsoQT1hKzExfDApPj4wXSk8MD8oQT0wfGFyW2E+PjJdLHRyW2w+PjBdPTAsUWYoQSxsKSxhclthKzQ+PjJdPTApOih0cltsPj4wXT0wLFFmKGEsbCksdHJbQT4+MF09MCksYSksQ3UoYSwwKSxhcltBPj4yXT1hclt1Pj4yXSxhcltBKzQ+PjJdPWFyWzQrdT4+Ml0sYXJbQSs4Pj4yXT1hcls4K3U+PjJdLEE9MDszIT0oMHxBKTspQT1BKzF8KGFyW3UrKEE8PDIpPj4yXT0wKTtCdSh1KSxyPXN9ZWxzZXtmb3IoZnNbNjMmYXJbNDArKDB8YXJbcz4+Ml0pPj4yXV0obCxzKSxBPTB8YXJbbD4+Ml0sdHJbaT4+MF09QSx0cltpKzE+PjBdPUE+PjgsdHJbaSsyPj4wXT1BPj4xNix0cltpKzM+PjBdPUE+PjI0LGZzWzYzJmFyWzI4KygwfGFyW3M+PjJdKT4+Ml1dKHUscyksQT0oKDB8dHJbKEE9YSsxMXwwKT4+MF0pPDA/KEE9MHxhclthPj4yXSx0cltsPj4wXT0wLFFmKEEsbCksYXJbYSs0Pj4yXT0wKToodHJbbD4+MF09MCxRZihhLGwpLHRyW0E+PjBdPTApLGEpLEN1KGEsMCksYXJbQT4+Ml09YXJbdT4+Ml0sYXJbQSs0Pj4yXT1hcls0K3U+PjJdLGFyW0ErOD4+Ml09YXJbOCt1Pj4yXSxBPTA7MyE9KDB8QSk7KUE9QSsxfChhclt1KyhBPDwyKT4+Ml09MCk7QnUodSkscj1zfWZvcihBPTB8amJbMTI3JmFyWzEyKygwfGFyW3M+PjJdKT4+Ml1dKHMpLHRyW2Y+PjBdPUEsQT0wfGpiWzEyNyZhclsxNisoMHxhcltzPj4yXSk+PjJdXShzKSx0cltuPj4wXT1BLGZzWzYzJmFyWzIwKygwfGFyW3I+PjJdKT4+Ml1dKHUscyksQT0oKDB8dHJbKEE9dCsxMXwwKT4+MF0pPDA/KEE9MHxhclt0Pj4yXSx0cltsPj4wXT0wLFFmKEEsbCksYXJbdCs0Pj4yXT0wKToodHJbbD4+MF09MCxRZih0LGwpLHRyW0E+PjBdPTApLHQpLEN1KHQsMCksYXJbQT4+Ml09YXJbdT4+Ml0sYXJbQSs0Pj4yXT1hcls0K3U+PjJdLGFyW0ErOD4+Ml09YXJbOCt1Pj4yXSxBPTA7MyE9KDB8QSk7KUE9QSsxfChhclt1KyhBPDwyKT4+Ml09MCk7Zm9yKEJ1KHUpLGZzWzYzJmFyWzI0KygwfGFyW3I+PjJdKT4+Ml1dKHUscyksQT0oKDB8dHJbKEE9bysxMXwwKT4+MF0pPDA/KEE9MHxhcltvPj4yXSx0cltsPj4wXT0wLFFmKEEsbCksYXJbbys0Pj4yXT0wKToodHJbbD4+MF09MCxRZihvLGwpLHRyW0E+PjBdPTApLG8pLEN1KG8sMCksYXJbQT4+Ml09YXJbdT4+Ml0sYXJbQSs0Pj4yXT1hcls0K3U+PjJdLGFyW0ErOD4+Ml09YXJbOCt1Pj4yXSxBPTA7MyE9KDB8QSk7KUE9QSsxfChhclt1KyhBPDwyKT4+Ml09MCk7QnUodSksQT0wfGpiWzEyNyZhclszNisoMHxhcltzPj4yXSk+PjJdXShzKX1hcltjPj4yXT1BLHVyPWJ9ZnVuY3Rpb24gaGkoQSxlLHIsaSxmLG4sdCxvLGEsYyxsLHUsYixzLGQpe0F8PTAsZXw9MCxpfD0wLGZ8PTAsbnw9MCx0fD0wLG98PTAsYXw9MCxjfD0wLGx8PTAsdXw9MCxifD0wLHN8PTAsZHw9MDt2YXIgayxoLHcsdixtLGcsWixwLHksQj0wLEU9MCxYPTAsVz0wLEk9MCxDPTAsRz0wLFY9MCxGPTA7Zm9yKGFyWyhyfD0wKT4+Ml09QSxrPXMrMTF8MCx5PXMrNHwwLGg9YisxMXwwLHc9Yis0fDAsdj0wPT0oNTEyJml8MCksbT10Kzh8MCxnPTA8KDB8ZCksWj11KzExfDAscD11KzR8MCxHPTA7NCE9KDB8Ryk7KXtBOmRve3N3aXRjaCgwfHRyW2ErRz4+MF0pe2Nhc2UgMDphcltlPj4yXT1hcltyPj4yXTticmVhaztjYXNlIDE6YXJbZT4+Ml09YXJbcj4+Ml0sST0wfEhiWzMxJmFyWzI4KygwfGFyW3Q+PjJdKT4+Ml1dKHQsMzIpLEM9MHxhcltyPj4yXSxhcltyPj4yXT1DKzEsdHJbQz4+MF09STticmVhaztjYXNlIDM6MHwoKEI9KEM9MHx0cltrPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW3k+PjJdOjI1NSZDKSYmKEk9MHx0clsoQj8wfGFyW3M+PjJdOnMpPj4wXSxDPTB8YXJbcj4+Ml0sYXJbcj4+Ml09QysxLHRyW0M+PjBdPUkpO2JyZWFrO2Nhc2UgMjppZighKHZ8MD09KDB8KEU9KEI9KEU9MHx0cltoPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW3c+PjJdOjI1NSZFKSkpKXtmb3IoWD0oQz1CPzB8YXJbYj4+Ml06YikrRXwwLEI9MHxhcltyPj4yXSxFPUM7KDB8RSkhPSgwfFgpOyl0cltCPj4wXT0wfHRyW0U+PjBdLEI9QisxfDAsRT1FKzF8MDthcltyPj4yXT1CfWJyZWFrO2Nhc2UgNDpmb3IoRT0wfGFyW3I+PjJdLFg9Zj1vP2YrMXwwOmY7IShuPj4+MDw9WD4+PjApJiYhKChCPTB8dHJbWD4+MF0pPDwyND4+MjQ8PS0xKSYmMjA0OCZvclsoMHxhclttPj4yXSkrKEI8PDI0Pj4yNDw8MSk+PjFdOylYPVgrMXwwO2lmKGcpe2ZvcihXPWQ7Zj4+PjA8WD4+PjAmKEI9MDwoMHxXKSk7KUI9MHx0clsoQz1YKy0xfDApPj4wXSxJPTB8YXJbcj4+Ml0sYXJbcj4+Ml09SSsxLHRyW0k+PjBdPUIsVz1XKy0xfDAsWD1DO2ZvcihJPUI/MHxIYlszMSZhclsyOCsoMHxhclt0Pj4yXSk+PjJdXSh0LDQ4KTowLEI9VztXPTB8YXJbcj4+Ml0sYXJbcj4+Ml09VysxLCEoKDB8Qik8PTApOyl0cltXPj4wXT1JLEI9QistMXwwO3RyW1c+PjBdPWN9ZTpkb3tpZigoMHxYKT09KDB8ZikpST0wfEhiWzMxJmFyWzI4KygwfGFyW3Q+PjJdKT4+Ml1dKHQsNDgpLEM9MHxhcltyPj4yXSxhcltyPj4yXT1DKzEsdHJbQz4+MF09STtlbHNlIGZvcihDPVc9KEk9MHwoKEI9KEM9MHx0cltaPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW3A+PjJdOjI1NSZDKT8wfHRyWyhCPzB8YXJbdT4+Ml06dSk+PjBdOi0xLDApOzspe2lmKCgwfFgpPT0oMHxmKSlicmVhayBlO0I9KDB8Qyk9PSgwfEkpPyhJPTB8YXJbcj4+Ml0sYXJbcj4+Ml09SSsxLHRyW0k+PjBdPWwsST0oVz1XKzF8MCk+Pj4wPCgoQj0oST0wfHRyW1o+PjBdKTw8MjQ+PjI0PDApPzB8YXJbcD4+Ml06MjU1JkkpPj4+MD8oST0wfHRyWyhCPzB8YXJbdT4+Ml06dSkrVz4+MF0pPDwyND4+MjQ9PTEyNz8tMTpJPDwyND4+MjQ6QywwKTpDLEY9MHx0clsoVj1YKy0xfDApPj4wXSxDPTB8YXJbcj4+Ml0sYXJbcj4+Ml09QysxLHRyW0M+PjBdPUYsQz1CKzF8MCxYPVZ9fXdoaWxlKDApO2lmKCgwfEUpIT0oMHwoQj0wfGFyW3I+PjJdKSkpZm9yKDs7KXtpZigoQj1CKy0xfDApPj4+MDw9RT4+PjApYnJlYWsgQTtGPTB8dHJbRT4+MF0sdHJbRT4+MF09MHx0cltCPj4wXSx0cltCPj4wXT1GLEU9RSsxfDB9fX13aGlsZSgwKTtHPUcrMXwwfWlmKDE8KGY9KEI9KGY9MHx0cltrPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW3k+PjJdOjI1NSZmKT4+PjApe2ZvcihFPShGPUI/MHxhcltzPj4yXTpzKStmfDAsQj0wfGFyW3I+PjJdLGY9RjsoMHwoZj1mKzF8MCkpIT0oMHxFKTspdHJbQj4+MF09MHx0cltmPj4wXSxCPUIrMXwwO2FyW3I+PjJdPUJ9c3dpdGNoKCgxNzYmaSk8PDI0Pj4yNCl7Y2FzZSAzMjphcltlPj4yXT1hcltyPj4yXTticmVhaztjYXNlIDE2OmJyZWFrO2RlZmF1bHQ6YXJbZT4+Ml09QX19ZnVuY3Rpb24gd2koQSxlLHIsaSxmKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTA7dmFyIG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wLGQ9MDtBOmRve2lmKDM2PGU+Pj4wKWFyWyhmPTEwMzY0KT4+Ml09MjIsaT1mPTA7ZWxzZXtmb3IoZD1BKzR8MCxzPUErMTAwfDA7MCE9KDB8bWkobj0obj0wfGFyW2Q+PjJdKT4+PjA8KDB8YXJbcz4+Ml0pPj4+MD8oYXJbZD4+Ml09bisxLDB8Y3Jbbj4+MF0pOjB8dmkoQSkpKTspO2U6ZG97c3dpdGNoKDB8bil7Y2FzZSA0MzpjYXNlIDQ1OmlmKG49KDQ1PT0oMHxuKSk8PDMxPj4zMSwodD0wfGFyW2Q+PjJdKT4+PjA8KDB8YXJbcz4+Ml0pPj4+MCl7YXJbZD4+Ml09dCsxLGI9bixuPTB8Y3JbdD4+MF07YnJlYWsgZX1iPW4sbj0wfHZpKEEpO2JyZWFrIGU7ZGVmYXVsdDpiPTB9fXdoaWxlKDApO3Q9MD09KDB8ZSk7ZG97aWYoMTY9PSgxNnxlKSY0OD09KDB8bikpe2lmKDEyMCE9KDMyfChuPShuPTB8YXJbZD4+Ml0pPj4+MDwoMHxhcltzPj4yXSk+Pj4wPyhhcltkPj4yXT1uKzEsMHxjcltuPj4wXSk6MHx2aShBKSkpKXtpZih0KXtlPTgsbD00NjticmVha31sPTMyO2JyZWFrfWlmKG49KG49MHxhcltkPj4yXSk+Pj4wPCgwfGFyW3M+PjJdKT4+PjA/KGFyW2Q+PjJdPW4rMSwwfGNyW24+PjBdKTowfHZpKEEpLDE1PCgwfGNyWzUyNjI1K24+PjBdKSl7aWYoKGk9MCE9KDB8YXJbcz4+Ml0pKSYmKGFyW2Q+PjJdPSgwfGFyW2Q+PjJdKS0xKSwhcil7bmwoQSwwKSxpPWY9MDticmVhayBBfWlmKCFpKXtpPWY9MDticmVhayBBfWFyW2Q+PjJdPSgwfGFyW2Q+PjJdKS0xLGk9Zj0wO2JyZWFrIEF9ZT0xNixsPTQ2fWVsc2V7aWYoZT10PzEwOmUsISgoMHxjcls1MjYyNStuPj4wXSk+Pj4wPGU+Pj4wKSl7MHxhcltzPj4yXSYmKGFyW2Q+PjJdPSgwfGFyW2Q+PjJdKS0xKSxubChBLDApLGFyWyhmPTEwMzY0KT4+Ml09MjIsaT1mPTA7YnJlYWsgQX1sPTMyfX13aGlsZSgwKTtlOmRve2lmKDMyPT0oMHxsKSlpZigxMD09KDB8ZSkpe2lmKChlPW4rLTQ4fDApPj4+MDwxMCl7Zm9yKG49MCx0PWU7bj0oMTAqbnwwKSt0fDAsKHQ9KGU9KGU9MHxhcltkPj4yXSk+Pj4wPCgwfGFyW3M+PjJdKT4+PjA/KGFyW2Q+PjJdPWUrMSwwfGNyW2U+PjBdKTowfHZpKEEpKSstNDh8MCk+Pj4wPDEwJm4+Pj4wPDQyOTQ5NjcyOTspO3I9MH1lbHNlIGU9bixyPW49MDtpZigobz1lKy00OHwwKT4+PjA8MTApe3Q9ZTtkb3tpZihlPTB8bmIoMHxuLDB8ciwxMCwwKSwodT1+KGM9KCgwfG8pPDApPDwzMT4+MzEpKT4+PjA8KGE9RCk+Pj4wfCgwfGEpPT0oMHx1KSZ+bz4+PjA8ZT4+PjApe2U9MTAsbD03MjticmVhayBlfW49MHx0YigwfGUsMHxhLDB8bywwfGMpLHI9RCxvPSh0PShlPTB8YXJbZD4+Ml0pPj4+MDwoMHxhcltzPj4yXSk+Pj4wPyhhcltkPj4yXT1lKzEsMHxjcltlPj4wXSk6MHx2aShBKSkrLTQ4fDB9d2hpbGUobz4+PjA8MTAmKHI+Pj4wPDQyOTQ5NjcyOXw0Mjk0OTY3Mjk9PSgwfHIpJm4+Pj4wPDI1NzY5ODAzNzgpKTs5PG8+Pj4wPyh0PWIsZT1yKTooZT0xMCxsPTcyKX1lbHNlIHQ9YixlPXJ9ZWxzZSBsPTQ2fXdoaWxlKDApO2U6ZG97aWYoNDY9PSgwfGwpKXtpZighKGUrLTEmZSkpe2lmKGw9MHx0cls1Mjg4MSsoKDIzKmV8MCk+Pj41JjcpPj4wXSwodD0yNTUmKHI9MHx0cls1MjYyNStuPj4wXSkpPj4+MDxlPj4+MCl7Zm9yKG49MCxvPXQ7bj1vfG48PGwsdD0odD0wfGFyW2Q+PjJdKT4+PjA8KDB8YXJbcz4+Ml0pPj4+MD8oYXJbZD4+Ml09dCsxLDB8Y3JbdD4+MF0pOjB8dmkoQSksbj4+PjA8MTM0MjE3NzI4JihvPTI1NSYocj0wfHRyWzUyNjI1K3Q+PjBdKSk+Pj4wPGU+Pj4wOyk7bz0wfWVsc2UgdD1uLG49bz0wO2lmKGE9MHxzYigtMSwtMSwwfGwpLGU+Pj4wPD0oMjU1JnIpPj4+MHwoYz1EKT4+PjA8bz4+PjB8KDB8byk9PSgwfGMpJmE+Pj4wPG4+Pj4wKXtyPW8sbD03MjticmVha31mb3IodD1vOzspe2lmKG49MHxkYigwfG4sMHx0LDB8bCksbz1ELG58PTI1NSZyLHQ9KHQ9MHxhcltkPj4yXSk+Pj4wPCgwfGFyW3M+PjJdKT4+PjA/KGFyW2Q+PjJdPXQrMSwwfGNyW3Q+PjBdKTowfHZpKEEpLGU+Pj4wPD0oMjU1JihyPTB8dHJbNTI2MjUrdD4+MF0pKT4+PjB8Yz4+PjA8bz4+PjB8KDB8byk9PSgwfGMpJmE+Pj4wPG4+Pj4wKXtyPW8sbD03MjticmVhayBlfXQ9b319aWYoKHQ9MjU1JihyPTB8dHJbNTI2MjUrbj4+MF0pKT4+PjA8ZT4+PjApe2ZvcihuPTAsbz10O249bysoMHxicihuLGUpKXwwLHQ9KHQ9MHxhcltkPj4yXSk+Pj4wPCgwfGFyW3M+PjJdKT4+PjA/KGFyW2Q+PjJdPXQrMSwwfGNyW3Q+PjBdKTowfHZpKEEpLG4+Pj4wPDExOTMwNDY0NyYobz0yNTUmKHI9MHx0cls1MjYyNSt0Pj4wXSkpPj4+MDxlPj4+MDspO289MH1lbHNlIHQ9bixvPW49MDtpZigoMjU1JnIpPj4+MDxlPj4+MClmb3IobD0wfGxiKC0xLC0xLDB8ZSwwKSx1PUQsYz1vOzspe2lmKHU+Pj4wPGM+Pj4wfCgwfGMpPT0oMHx1KSZsPj4+MDxuPj4+MCl7cj1jLGw9NzI7YnJlYWsgZX1pZihvPTB8bmIoMHxuLDB8YywwfGUsMCksNDI5NDk2NzI5NTwoYT1EKT4+PjB8LTE9PSgwfGEpJn4ociY9MjU1KT4+PjA8bz4+PjApe3I9YyxsPTcyO2JyZWFrIGV9aWYobj0wfHRiKDB8ciwwLDB8bywwfGEpLG89RCx0PSh0PTB8YXJbZD4+Ml0pPj4+MDwoMHxhcltzPj4yXSk+Pj4wPyhhcltkPj4yXT10KzEsMHxjclt0Pj4wXSk6MHx2aShBKSxlPj4+MDw9KDI1NSYocj0wfHRyWzUyNjI1K3Q+PjBdKSk+Pj4wKXtyPW8sbD03MjticmVha31jPW99ZWxzZSByPW8sbD03Mn19d2hpbGUoMCk7aWYoNzI9PSgwfGwpKWlmKCgwfGNyWzUyNjI1K3Q+PjBdKT4+PjA8ZT4+PjApe2Zvcig7bj0obj0wfGFyW2Q+PjJdKT4+PjA8KDB8YXJbcz4+Ml0pPj4+MD8oYXJbZD4+Ml09bisxLDB8Y3Jbbj4+MF0pOjB8dmkoQSksKDB8Y3JbNTI2MjUrbj4+MF0pPj4+MDxlPj4+MDspO2FyWyh0PTEwMzY0KT4+Ml09MzQsdD0wPT0oMSZpfDApJiEwP2I6MCxlPWYsbj1pfWVsc2UgdD1iLGU9cjtpZigwfGFyW3M+PjJdJiYoYXJbZD4+Ml09KDB8YXJbZD4+Ml0pLTEpLCEoZT4+PjA8Zj4+PjB8KDB8ZSk9PSgwfGYpJm4+Pj4wPGk+Pj4wKSl7aWYoISgwIT0oMSZpfDApfCExfDAhPSgwfHQpKSl7YXJbKGQ9MTAzNjQpPj4yXT0zNCxpPTB8dGIoMHxpLDB8ZiwtMSwtMSksZj1EO2JyZWFrfWlmKGY+Pj4wPGU+Pj4wfCgwfGUpPT0oMHxmKSZpPj4+MDxuPj4+MCl7YXJbKGQ9MTAzNjQpPj4yXT0zNDticmVha319aT0wfG9iKG5edHwwLGVeKGk9KCgwfHQpPDApPDwzMT4+MzEpfDAsMHx0LDB8aSksZj1EfX13aGlsZSgwKTtyZXR1cm4gRD1mLDB8aX1mdW5jdGlvbiB2aShBKXt2YXIgZT0wLHI9MCxpPTAsZj0wLG49MCx0PTAsbz0wO3JldHVybiEoMCE9KDB8KHQ9MHxhclsocj0oQXw9MCkrMTA0fDApPj4yXSkpJiYoMHxhcltBKzEwOD4+Ml0pPj0oMHx0KSkmJjA8PSgwfChlPTB8Z2koQSkpKT8oaT0wfGFyW3I+PjJdLHI9QSs4fDAsaT9pPSgodD1uPTB8YXJbcj4+Ml0pLShyPTB8YXJbQSs0Pj4yXSl8MCk8KDB8KGk9aS0oMHxhclsoZj1BKzEwOHwwKT4+Ml0pfDApKT9uPXQ6KG49cisoaSstMSl8MCx0KTooZj1BKzEwOHwwLG49aT0wfGFyW3I+PjJdLHI9MHxhcltBKzQ+PjJdKSxhcltBKzEwMD4+Ml09biwwfGkmJihhcltmPj4yXT1pKzEtcisoMHxhcltmPj4yXSkpLCgwfGNyWyhyPXIrLTF8MCk+PjBdKSE9KDB8ZSkmJih0cltyPj4wXT1lKSk6bz00LDQ9PSgwfG8pJiYoYXJbQSsxMDA+PjJdPTAsZT0tMSksMHxlfWZ1bmN0aW9uIG1pKEEpe3JldHVybiAxJigzMj09KDB8KEF8PTApKXwoQSstOXwwKT4+PjA8NSl8MH1mdW5jdGlvbiBnaShBKXt2YXIgZSxyO3JldHVybiBlPXVyPShyPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxBPTA9PSgwfFppKEF8PTApKSYmMT09KDB8eGJbNjMmYXJbQSszMj4+Ml1dKEEsZSwxKSk/MHxjcltlPj4wXTotMSx1cj1yLDB8QX1mdW5jdGlvbiBaaShBKXt2YXIgZT0wLHI9MDtyZXR1cm4gcj0wfHRyWyhlPShBfD0wKSs3NHwwKT4+MF0sdHJbZT4+MF09cisyNTV8cixyPUErMjh8MCwoMHxhclsoZT1BKzIwfDApPj4yXSk+Pj4wPigwfGFyW3I+PjJdKT4+PjAmJnhiWzYzJmFyW0ErMzY+PjJdXShBLDAsMCksYXJbQSsxNj4+Ml09MCxhcltyPj4yXT0wLChhcltlPj4yXT0wKXwoZT00JihlPTB8YXJbQT4+Ml0pPyhhcltBPj4yXT0zMnxlLC0xKToocj0oMHxhcltBKzQ0Pj4yXSkrKDB8YXJbQSs0OD4+Ml0pfDAsYXJbQSs4Pj4yXT1yLGFyW0ErND4+Ml09cixlPDwyNz4+MzEpKX1mdW5jdGlvbiBwaShBLGUscil7dmFyIGksZixuO3JldHVybiAwfCgwfChpPUF8PTAsZj1lfD0wLG49cnw9MCwwfChuPTB8ZmwoaXw9MCxmfD0wLG58PTAsMCwtMjE0NzQ4MzY0OCkpKSl9ZnVuY3Rpb24geWkoKXtyZXR1cm4gMHwoMHxhclthclsyNjIyXT4+Ml0/NDoxKX1mdW5jdGlvbiBCaShBLGUscil7QXw9MCxlfD0wLHJ8PTA7dmFyIGksZixuLHQsbztyZXR1cm4gZj11cj0oaT11cikrMzEmLTMyLHVyPXVyKzE2fDAsYXJbZj4+Ml09cixyPTB8KG49QSx0PWUsbz1mLDB8WWMobnw9MCwyMTQ3NDgzNjQ3LHR8PTAsb3w9MCkpLHVyPWksMHxyfWZ1bmN0aW9uIEVpKEEsZSl7QXw9MCxlfD0wO3ZhciByLGk7cmV0dXJuIGk9dXI9KHI9dXIpKzMxJi0zMix1cj11cisxNnwwLGFyW2k+PjJdPUEsYXJbNCtpPj4yXT1lLGU9MHxJYygwfE0oOTEsMHxpKSksdXI9ciwwfGV9ZnVuY3Rpb24gWGkoQSxlLHIsaSl7QXw9MCxyfD0wLGl8PTA7dmFyIGY9MCxuPTAsdD0wLG89MCxhPTA7Zj0wfGFyWyhlfD0wKT4+Ml0sYT0wIT0oMHxpKSYmMCE9KDB8KG49MHxhcltpPj4yXSkpP0E/KGFyW2k+PjJdPTAsbz1yLHQ9Ziw0Myk6KHQ9ZixpPXIsMjUpOjU7QTpkb3tpZig1PT0oMHxhKSl7aWYoaT0wIT0oMHxBKSwwfGFyW2FyWyhhPTEwNDg4KT4+Ml0+PjJdKXtpZihpKXtpPXIsYT0xNTticmVha31pPXIsYT0xNDticmVha31pZighaSl7cj0wfFZjKGYpLGE9NTk7YnJlYWt9ZTpkb3tpZihyKXtmb3IoaT1yOyhuPTB8dHJbZj4+MF0pPDwyND4+MjQ7KXtpZihmPWYrMXwwLGFyW0E+PjJdPW48PDI0Pj4yNCY1NzM0MywhKGk9aSstMXwwKSlicmVhayBlO0E9QSs0fDB9YXJbQT4+Ml09MCxyPXItaXwoYXJbZT4+Ml09MCksYT01OTticmVhayBBfX13aGlsZSgwKTthcltlPj4yXT1mLGE9NTl9fXdoaWxlKDApO0E6Zm9yKDs7KXtlOmRve2lmKDE0PT0oMHxhKSl7Zm9yKDs7KXtpZigoKDI1NSYobj0wfHRyW2Y+PjBdKSktMXwwKT4+PjA8MTI3JiYwPT0oMyZmfDApJiYobj0yNTUmKGE9MHxhcltmPj4yXSksISgtMjEzOTA2MjE0NCYoYSstMTY4NDMwMDl8YSkpKSl7Zm9yKDtpPWkrLTR8MCwhKC0yMTM5MDYyMTQ0Jigobj0wfGFyWyhmPWYrNHwwKT4+Ml0pKy0xNjg0MzAwOXxuKXwwKTspO24mPTI1NX1pZigxMjc8PSgobiY9MjU1KSstMXwwKT4+PjApYnJlYWs7Zj1mKzF8MCxpPWkrLTF8MH1pZighKDUwPChuPW4rLTE5NHwwKT4+PjApKXtuPTB8YXJbOTg5Nisobjw8Mik+PjJdLHQ9ZisxfDAsYT0yNTtjb250aW51ZSBBfWE9NTN9ZWxzZXtpZigxNT09KDB8YSkpe3I6ZG97aWYoaSl7Zm9yKDs7KXtuPTB8dHJbZj4+MF07ZG97aWYoKCgyNTUmbiktMXwwKT4+PjA8MTI3JiY0PGk+Pj4wJjA9PSgzJmZ8MCkpe2Zvcig7Oyl7aWYoLTIxMzkwNjIxNDQmKChuPTB8YXJbZj4+Ml0pKy0xNjg0MzAwOXxuKXwwKXthPTM4O2JyZWFrfWlmKGFyW0E+PjJdPTI1NSZuLGFyW0ErND4+Ml09Y3JbZisxPj4wXSxhcltBKzg+PjJdPWNyW2YrMj4+MF0sdD1mKzR8MCxuPUErMTZ8MCxhcltBKzEyPj4yXT1jcltmKzM+PjBdLCEoNDwoaT1pKy00fDApPj4+MCkpe2E9Mzc7YnJlYWt9QT1uLGY9dH1pZigzNz09KDB8YSkpe0E9bixuPTB8dHJbKGY9dCk+PjBdO2JyZWFrfWlmKDM4PT0oMHxhKSl7biY9MjU1O2JyZWFrfX19d2hpbGUoMCk7aWYoMTI3PD0oKG4mPTI1NSkrLTF8MCk+Pj4wKWJyZWFrO2lmKGY9ZisxfDAsYXJbQT4+Ml09biwhKGk9aSstMXwwKSlicmVhayByO0E9QSs0fDB9aWYoNTA8KG49bistMTk0fDApPj4+MCl7YT01MzticmVhayBlfW49MHxhcls5ODk2KyhuPDwyKT4+Ml0sbz1pLHQ9ZisxfDAsYT00Mztjb250aW51ZSBBfX13aGlsZSgwKTthcltlPj4yXT1mLGE9NTk7Y29udGludWUgQX1pZigyNT09KDB8YSkpe2lmKCEoNzwoKGE9KDB8Y3JbdD4+MF0pPj4+MykrLTE2fGErKG4+PjI2KSk+Pj4wKSl7aWYoZj10KzF8MCwzMzU1NDQzMiZuKXtpZigoLTY0JnRyW2Y+PjBdKTw8MjQ+PjI0IT0tMTI4KXtmPXQsYT01MjticmVha31pZihmPXQrMnwwLDUyNDI4OCZuKXtpZigoLTY0JnRyW2Y+PjBdKTw8MjQ+PjI0IT0tMTI4KXtmPXQsYT01MjticmVha31mPXQrM3wwfX1pPWkrLTF8MCxhPTE0O2NvbnRpbnVlIEF9Zj10LGE9NTJ9ZWxzZSBpZig0Mz09KDB8YSkpe2lmKCEoNzwoKGY9KGk9KGE9MCl8Y3JbdD4+MF0pPj4+MykrLTE2fGYrKG4+PjI2KSk+Pj4wKSl7Zj10KzF8MCxpPWkrLTEyOHxuPDw2O2Rve2lmKCgwfGkpPDApe2lmKDYzPChuPSgwfGNyW2Y+PjBdKS0xMjh8MCk+Pj4wKXtmPXQrLTF8MCxyPUE7YnJlYWsgZX1pZihmPXQrMnwwLCgwfChpPW58aTw8NikpPDApe2lmKDYzPChuPSgwfGNyW2Y+PjBdKS0xMjh8MCk+Pj4wKXtmPXQrLTF8MCxyPUE7YnJlYWsgZX1mPXQrM3wwLGk9bnxpPDw2O2JyZWFrfX19d2hpbGUoMCk7YXJbQT4+Ml09aSxBPUErNHwwLGk9bystMXwwLGE9MTU7Y29udGludWUgQX1mPXQsaT1vLGE9NTJ9ZWxzZSBpZig1OT09KDB8YSkpcmV0dXJuIDB8cn19d2hpbGUoMCk7aWYoNTI9PSgwfGEpJiYoZj1mKy0xfChhPTApLG4/cj1BOmE9NTMpLDUzPT0oMHxhKSl7aWYoISgwfHRyW2Y+PjBdKSl7MHxBJiYoYXJbQT4+Ml09MCxhcltlPj4yXT0wKSxyPXItaXwwLGE9NTk7Y29udGludWV9cj1BfWFyWyhhPTEwMzY0KT4+Ml09ODQscj8oYXJbZT4+Ml09ZixyPS0xLGE9NTkpOihyPS0xLGE9NTkpfXJldHVybiAwfWZ1bmN0aW9uIFdpKEEpe3ZhciBlPTAscj0wLGk9MDswPD0oMHxhclsoQXw9MCkrNzY+PjJdKSYmMCE9KDB8SmMoKSk/ZT0ocj0wfGFyWyhlPUErNHwwKT4+Ml0pPj4+MDwoMHxhcltBKzg+PjJdKT4+PjA/KGFyW2U+PjJdPXIrMSwwfGNyW3I+PjBdKTowfGdpKEEpOmk9Mztkb3tpZigzPT0oMHxpKSl7aWYoKHI9MHxhclsoZT1BKzR8MCk+PjJdKT4+PjA8KDB8YXJbQSs4Pj4yXSk+Pj4wKXthcltlPj4yXT1yKzEsZT0wfGNyW3I+PjBdO2JyZWFrfWU9MHxnaShBKTticmVha319d2hpbGUoMCk7cmV0dXJuIDB8ZX1mdW5jdGlvbiBJaShBLGUscil7QXw9MCxlfD0wLHJ8PTA7dmFyIGksZjtyZXR1cm4gZj11cj0oaT11cikrMzEmLTMyLHVyPXVyKzE2fDAsYXJbZj4+Ml09cixyPTB8UWMoQSxlLGYpLHVyPWksMHxyfWZ1bmN0aW9uIENpKEEsZSxyLGkpe0F8PTAsZXw9MCxyfD0wLGl8PTA7dmFyIGYsbix0PTAsbz0wO2Y9dXI9KG49dXIpKzMxJi0zMix1cj11cisxNnwwO0E6ZG97aWYoQSl7ZTpkb3tpZigzPHI+Pj4wKXtmb3IoaT1yLHQ9MHxhcltlPj4yXTs7KXtpZigxMjY8KChvPTB8YXJbdD4+Ml0pKy0xfDApPj4+MCl7aWYoIW8pYnJlYWs7aWYoLTE9PSgwfChvPTB8JGMoQSxvKSkpKXtyPS0xO2JyZWFrIEF9QT1BK298MCxpPWktb3wwfWVsc2UgdHJbQT4+MF09byxBPUErMXwwLGk9aSstMXwwLHQ9MHxhcltlPj4yXTtpZih0PXQrNHwwLGFyW2U+PjJdPXQsaT4+PjA8PTMpYnJlYWsgZX10cltBPj4wXT0wLHI9ci1pfChhcltlPj4yXT0wKTticmVhayBBfWk9cn13aGlsZSgwKTtpZihpKXtmb3IodD0wfGFyW2U+PjJdOzspe2lmKDEyNjwoKG89MHxhclt0Pj4yXSkrLTF8MCk+Pj4wKXtpZighbyl7dD0xOTticmVha31pZigtMT09KDB8KG89MHwkYyhmLG8pKSkpe3I9LTE7YnJlYWsgQX1pZihpPj4+MDxvPj4+MCl7dD0yMjticmVha30kYyhBLDB8YXJbdD4+Ml0pLEE9QStvfDAsaT1pLW98MH1lbHNlIHRyW0E+PjBdPW8sQT1BKzF8MCxpPWkrLTF8MCx0PTB8YXJbZT4+Ml07aWYodD10KzR8MCxhcltlPj4yXT10LCFpKWJyZWFrIEF9aWYoMTk9PSgwfHQpKXt0cltBPj4wXT0wLHI9ci1pfChhcltlPj4yXT0wKTticmVha31pZigyMj09KDB8dCkpe3I9ci1pfDA7YnJlYWt9fX1lbHNlIGlmKHI9MHxhcltlPj4yXSxpPTB8YXJbcj4+Ml0pe0E9cixyPTA7ZG97aWYoMTI3PGk+Pj4wKXtpZigtMT09KDB8KGk9MHwkYyhmLGkpKSkpe3I9LTE7YnJlYWsgQX19ZWxzZSBpPTE7cj1pK3J8MCxpPTB8YXJbKEE9QSs0fDApPj4yXX13aGlsZSgwIT0oMHxpKSl9ZWxzZSByPTB9d2hpbGUoMCk7cmV0dXJuIHVyPW4sMHxyfWZ1bmN0aW9uIEdpKEEsZSxyLGkpe0F8PTAsZXw9MCxyfD0wO3ZhciBmLG4sdD0wLG89MCxhPTAsYz0wO3Q9dXI9KG49dXIpKzMxJi0zMix1cj11cisxNnwwLGk9MHxhclsoZj0wPT0oMHwoaXw9MCkpPzU4MTUyOmkpPj4yXTtBOmRve2lmKGUpaWYobz0wPT0oMHxBKT90OkEscil7aWYoaSl0PXIsYT0xMTtlbHNle2lmKC0xPChpPTB8dHJbZT4+MF0pPDwyND4+MjQpe2FyW28+PjJdPTI1NSZpLGk9aTw8MjQ+PjI0IT0wJjE7YnJlYWt9aWYodD0xMDQ4OCxpPTB8dHJbZT4+MF0sISgwfGFyW2FyW3Q+PjJdPj4yXSkpe2FyW28+PjJdPWk8PDI0Pj4yNCY1NzM0MyxpPTE7YnJlYWt9aWYoNTA8KGk9KDI1NSZpKS0xOTR8MCk+Pj4wKXthPTE3O2JyZWFrfWk9MHxhcls5ODk2KyhpPDwyKT4+Ml0sKHQ9cistMXwwKSYmKGU9ZSsxfDAsYT0xMSl9ZTpkb3tpZigxMT09KDB8YSkpe2lmKDc8KChjPSgyNTUmKEE9MHx0cltlPj4wXSkpPj4+MykrLTE2fGMrKGk+PjI2KSk+Pj4wKXthPTE3O2JyZWFrIEF9Zm9yKDtlPWUrMXwwLHQ9dCstMXwwLCEoMDw9KDB8KGk9KDI1NSZBKS0xMjh8aTw8NikpKTspe2lmKCF0KWJyZWFrIGU7aWYoKC02NCYoQT0wfHRyW2U+PjBdKSk8PDI0Pj4yNCE9LTEyOCl7YT0xNzticmVhayBBfX1hcltmPj4yXT0wLGFyW28+PjJdPWksaT1yLXR8MDticmVhayBBfX13aGlsZSgwKTthcltmPj4yXT1pLGk9LTJ9ZWxzZSBpPS0yO2Vsc2UgaT9hPTE3Omk9MH13aGlsZSgwKTtyZXR1cm4gMTc9PSgwfGEpJiYoYXJbZj4+Ml09MCxhclsoaT0xMDM2NCk+PjJdPTg0LGk9LTEpLHVyPW4sMHxpfWZ1bmN0aW9uIFZpKEEsZSxyLGksZil7QXw9MCxyfD0wLGl8PTAsZnw9MDt2YXIgbix0LG8sYSxjPTAsbD0wLHU9MCxiPTA7dD11cj0oYT11cikrMzEmLTMyLHVyPXVyKzEwNDB8MCxuPTgrdHwwLGI9MHxhclsoZXw9MCk+PjJdLGw9KG89MCE9KDB8QSkpP2k6MjU2LEE9bz9BOm4sYz1hclt0Pj4yXT1iO0E6ZG97aWYoMCE9KDB8bCkmMCE9KDB8Yikpe2ZvcihpPTAsYj1yOzspe2lmKCEoMTMxPGI+Pj4wfChyPWw+Pj4wPD0odT1iPj4+Mik+Pj4wKSkpe3I9YjticmVhayBBfWlmKHI9Yi0oYz1yP2w6dSl8MCwtMT09KDB8KGM9MHxYaShBLHQsYyxmKSkpKWJyZWFrO2lmKEE9KGI9KDB8QSk9PSgwfG4pKT9BOkErKGM8PDIpfDAsaT1jK2l8MCwhKDAhPSgwfChsPWwtKGI/MDpjKXwwKSkmMCE9KDB8KGM9MHxhclt0Pj4yXSkpKSlicmVhayBBO2I9cn1pPS0xLGM9KGw9MCl8YXJbdD4+Ml19ZWxzZSBpPTB9d2hpbGUoMCk7QTpkb3tpZigwIT0oMHxjKSYmMCE9KDB8bCkmMCE9KDB8cikpe2Zvcih1PUE7ISgoKEE9MHxHaSh1LGMscixmKSkrMnwwKT4+PjA8Myk7KXtpZihjPSgwfGFyW3Q+PjJdKStBfDAsYXJbdD4+Ml09YyxpPWkrMXwwLCEoMCE9KDB8KGw9bCstMXwwKSkmMCE9KDB8KHI9ci1BfDApKSkpYnJlYWsgQTt1PXUrNHwwfXN3aXRjaCgwfEEpe2Nhc2UtMTppPS0xO2JyZWFrIEE7Y2FzZSAwOmFyW3Q+PjJdPTA7YnJlYWsgQTtkZWZhdWx0OmFyW2Y+PjJdPTA7YnJlYWsgQX19fXdoaWxlKDApO3JldHVybiBvJiYoYXJbZT4+Ml09YXJbdD4+Ml0pLHVyPWEsMHxpfWZ1bmN0aW9uIEZpKEEsZSxyLGksZil7QXw9MCxyfD0wLGl8PTAsZnw9MDt2YXIgbix0LG8sYSxjPTAsbD0wO3Q9dXI9KGE9dXIpKzMxJi0zMix1cj11cisyNzJ8MCxuPTgrdHwwLGw9MHxhclsoZXw9MCk+PjJdLGM9KG89MCE9KDB8QSkpP2k6MjU2LEE9bz9BOm4saT1hclt0Pj4yXT1sO0E6ZG97aWYoMCE9KDB8YykmMCE9KDB8bCkpe2ZvcihmPTAsbD1pOzspe2lmKCEoKGk9Yz4+PjA8PXI+Pj4wKXwzMjxyPj4+MCkpe2k9bDticmVhayBBfWlmKHI9ci0oaT1pP2M6cil8MCwtMT09KDB8KGk9MHxDaShBLHQsaSwwKSkpKWJyZWFrO2lmKEE9KGw9KDB8QSk9PSgwfG4pKT9BOkEraXwwLGY9aStmfDAsISgwIT0oMHwoYz1jLShsPzA6aSl8MCkpJjAhPSgwfChpPTB8YXJbdD4+Ml0pKSkpYnJlYWsgQTtsPWl9Zj0tMSxpPShjPTApfGFyW3Q+PjJdfWVsc2UgZj0wfXdoaWxlKDApO0E6ZG97aWYoMCE9KDB8aSkmJjAhPSgwfGMpJjAhPSgwfHIpKXtmb3IobD1BOyEoKChBPTB8JGMobCwwfGFyW2k+PjJdKSkrMXwwKT4+PjA8Mik7KXtpZihpPTQrKDB8YXJbdD4+Ml0pfDAsYXJbdD4+Ml09aSxmPUErZnwwLCEoMCE9KDB8KGM9Yy1BfDApKSYwIT0oMHwocj1yKy0xfDApKSkpYnJlYWsgQTtsPWwrQXwwfUE/Zj0tMTphclt0Pj4yXT0wfX13aGlsZSgwKTtyZXR1cm4gbyYmKGFyW2U+PjJdPWFyW3Q+PjJdKSx1cj1hLDB8Zn1mdW5jdGlvbiBSaShBLGUscil7QXw9MCxyfD0wO3ZhciBpPTAsZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MDtzd2l0Y2goMHwoZXw9MCkpe2Nhc2UgMDphPS0xNDksYz0yNCx0PTQ7YnJlYWs7Y2FzZSAxOmNhc2UgMjphPS0xMDc0LGM9NTMsdD00O2JyZWFrO2RlZmF1bHQ6aT0wfUE6ZG97aWYoND09KDB8dCkpe2Zvcih1PUErNHwwLGw9QSsxMDB8MDswIT0oMHxtaShlPShlPTB8YXJbdT4+Ml0pPj4+MDwoMHxhcltsPj4yXSk+Pj4wPyhhclt1Pj4yXT1lKzEsMHxjcltlPj4wXSk6MHx2aShBKSkpOyk7ZTpkb3tzd2l0Y2goMHxlKXtjYXNlIDQzOmNhc2UgNDU6aWYobj0xLSgoNDU9PSgwfGUpJjEpPDwxKXwwLChlPTB8YXJbdT4+Ml0pPj4+MDwoMHxhcltsPj4yXSk+Pj4wKXthclt1Pj4yXT1lKzEsZj0wfGNyW2U+PjBdO2JyZWFrIGV9Zj0wfHZpKEEpO2JyZWFrIGU7ZGVmYXVsdDpmPWUsbj0xfX13aGlsZSgwKTtlPTA7ZG97aWYoKDMyfGYpIT0oMHx0cls1Mjg5MCtlPj4wXSkpYnJlYWs7ZG97aWYoZT4+PjA8Nyl7aWYoKGY9MHxhclt1Pj4yXSk+Pj4wPCgwfGFyW2w+PjJdKT4+PjApe2FyW3U+PjJdPWYrMSxmPTB8Y3JbZj4+MF07YnJlYWt9Zj0wfHZpKEEpO2JyZWFrfX13aGlsZSgwKTtlPWUrMXwwfXdoaWxlKGU+Pj4wPDgpO2U6ZG97c3dpdGNoKDB8ZSl7Y2FzZSA4OmJyZWFrO2Nhc2UgMzp0PTIzO2JyZWFrO2RlZmF1bHQ6aWYoKG89MCE9KDB8cikpJjM8ZT4+PjApe2lmKDg9PSgwfGUpKWJyZWFrIGU7dD0yMzticmVhayBlfXI6ZG97aWYoIWUpe2U9MDtkb3tpZigoMzJ8ZikhPSgwfHRyWzUyODk5K2U+PjBdKSlicmVhayByO2Rve2lmKGU+Pj4wPDIpe2lmKChmPTB8YXJbdT4+Ml0pPj4+MDwoMHxhcltsPj4yXSk+Pj4wKXthclt1Pj4yXT1mKzEsZj0wfGNyW2Y+PjBdO2JyZWFrfWY9MHx2aShBKTticmVha319d2hpbGUoMCk7ZT1lKzF8MH13aGlsZShlPj4+MDwzKX19d2hpbGUoMCk7c3dpdGNoKDB8ZSl7Y2FzZSAzOmlmKDQwIT0oMHwoZT0oZT0wfGFyW3U+PjJdKT4+PjA8KDB8YXJbbD4+Ml0pPj4+MD8oYXJbdT4+Ml09ZSsxLDB8Y3JbZT4+MF0pOjB8dmkoQSkpKSl7aWYoISgwfGFyW2w+PjJdKSl7aT1oO2JyZWFrIEF9YXJbdT4+Ml09KDB8YXJbdT4+Ml0pLTEsaT1oO2JyZWFrIEF9Zm9yKGU9MTsoKGY9KGY9MHxhclt1Pj4yXSk+Pj4wPCgwfGFyW2w+PjJdKT4+PjA/KGFyW3U+PjJdPWYrMSwwfGNyW2Y+PjBdKTowfHZpKEEpKSstNDh8MCk+Pj4wPDEwfChmKy02NXwwKT4+PjA8MjZ8fDk1PT0oMHxmKXwoZistOTd8MCk+Pj4wPDI2OyllPWUrMXwwO2lmKDQxPT0oMHxmKSl7aT1oO2JyZWFrIEF9aWYoKGY9MD09KDB8YXJbbD4+Ml0pKXx8KGFyW3U+PjJdPSgwfGFyW3U+PjJdKS0xKSwhbyl7YXJbKHU9MTAzNjQpPj4yXT0yMixubChBLDApLGk9MDticmVhayBBfWlmKCFlKXtpPWg7YnJlYWsgQX1mb3IoOzspaWYoZT1lKy0xfDAsZnx8KGFyW3U+PjJdPSgwfGFyW3U+PjJdKS0xKSwhZSl7aT1oO2JyZWFrIEF9Y2FzZSAwOmlmKDQ4PT0oMHxmKSl7aWYoMTIwPT0oMzJ8KGU9KGU9MHxhclt1Pj4yXSk+Pj4wPCgwfGFyW2w+PjJdKT4+PjA/KGFyW3U+PjJdPWUrMSwwfGNyW2U+PjBdKTowfHZpKEEpKSkpe2k9K05pKEEsYyxhLG4scik7YnJlYWsgQX1lPSgwfGFyW2w+PjJdJiYoYXJbdT4+Ml09KDB8YXJbdT4+Ml0pLTEpLDQ4KX1lbHNlIGU9ZjtpPStfaShBLGUsYyxhLG4scik7YnJlYWsgQTtkZWZhdWx0OjB8YXJbbD4+Ml0mJihhclt1Pj4yXT0oMHxhclt1Pj4yXSktMSksYXJbKHU9MTAzNjQpPj4yXT0yMixubChBLDApLGk9MDticmVhayBBfX19d2hpbGUoMCk7aWYoMjM9PSgwfHQpJiYoKGY9MD09KDB8YXJbbD4+Ml0pKXx8KGFyW3U+PjJdPSgwfGFyW3U+PjJdKS0xKSwwIT0oMHxyKSYzPGU+Pj4wKSlmb3IoO2Z8fChhclt1Pj4yXT0oMHxhclt1Pj4yXSktMSksMzwoZT1lKy0xfDApPj4+MDspO2k9KDB8bikqd319d2hpbGUoMCk7cmV0dXJuK2l9ZnVuY3Rpb24gTmkoQSxlLHIsaSxmKXtlfD0wLHJ8PTAsaXw9MCxmfD0wO3ZhciBuLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTAsZD0wLGs9MCxoPTAsdz0wLHY9MCxtPTAsZz0wO2E9KG89KG89MHxhclsoZz0oQXw9MCkrNHwwKT4+Ml0pPj4+MDwoMHxhclsobj1BKzEwMHwwKT4+Ml0pPj4+MD8oYXJbZz4+Ml09bysxLDB8Y3Jbbz4+MF0pOjB8dmkoQSksMCk7QTpmb3IoOzspe3N3aXRjaCgwfG8pe2Nhc2UgNDY6Yj04O2JyZWFrIEE7Y2FzZSA0ODpicmVhaztkZWZhdWx0OmQ9MSxoPWEsbD11PWs9YT1tPXQ9dj13PTA7YnJlYWsgQX0obz0wfGFyW2c+PjJdKT4+PjA8KDB8YXJbbj4+Ml0pPj4+MD8oYXJbZz4+Ml09bysxLG89MHxjcltvPj4wXSxhPTEpOihvPTB8dmkoQSksYT0xKX1pZig4PT0oMHxiKSlpZig0OD09KDB8KG89KG89MHxhcltnPj4yXSk+Pj4wPCgwfGFyW24+PjJdKT4+PjA/KGFyW2c+PjJdPW8rMSwwfGNyW28+PjBdKTowfHZpKEEpKSkpe2ZvcihhPWw9MDtvPShvPTB8YXJbZz4+Ml0pPj4+MDwoMHxhcltuPj4yXSk+Pj4wPyhhcltnPj4yXT1vKzEsMHxjcltvPj4wXSk6MHx2aShBKSxsPTB8dGIoMHxsLDB8YSwtMSwtMSksYT1ELDQ4PT0oMHxvKTspO2g9ZD13PTEsdT1rPW09dD12PTB9ZWxzZSBkPXc9MSxoPWEsbD11PWs9YT1tPXQ9dj0wO2Zvcig7cz00Nj09KDB8byksISgxMDw9KGI9bystNDh8MCk+Pj4wKXx8c3woKDMyfG8pLTk3fDApPj4+MDw2Oyl7aWYocyl7aWYodyl7bz00NjticmVha313PTEsYj12LGM9ZCxvPW0sbD11LGE9a31lbHNle289NTc8KDB8byk/KDMyfG8pLTg3fDA6Yjtkb3tpZighKCgwfGspPDB8MD09KDB8aykmdT4+PjA8OCkpe2lmKCgwfGspPDB8MD09KDB8aykmdT4+PjA8MTQpe2I9dix0Kz0oYz1kKj0uMDYyNSkqKDB8byksbz1tO2JyZWFrfWI9KG89MCE9KDB8dil8MD09KDB8bykpP3Y6MSxjPWQsdD1vP3Q6dCsuNSpkLG89bTticmVha31iPXYsYz1kLG89bysobTw8NCl8MH13aGlsZSgwKTt1PTB8dGIoMHx1LDB8aywxLDApLGg9MSxrPUR9bz0ocz0wfGFyW2c+PjJdKT4+PjA8KDB8YXJbbj4+Ml0pPj4+MD8oYXJbZz4+Ml09cysxLHY9YixkPWMsbT1vLDB8Y3Jbcz4+MF0pOih2PWIsZD1jLG09bywwfHZpKEEpKX1kb3tpZihoKXtpZihzPShiPTA9PSgwfHcpKT91OmwsYj1iP2s6YSwoMHxrKTwwfDA9PSgwfGspJnU+Pj4wPDgpe2ZvcihhPW0sbD1rO2E8PD00LHU9MHx0YigwfHUsMHxsLDEsMCksKDB8KGw9RCkpPDB8MD09KDB8bCkmdT4+PjA8ODspO3U9YX1lbHNlIHU9bTtpZigxMTI9PSgzMnxvKSl7aWYoMD09KDB8KGE9MHxZaShBLGYpKSkmLTIxNDc0ODM2NDg9PSgwfChvPUQpKSl7aWYoIWYpe25sKEEsMCksdD0wO2JyZWFrfW89YT0oMHxhcltuPj4yXSYmKGFyW2c+PjJdPSgwfGFyW2c+PjJdKS0xKSwwKX19ZWxzZSBvPWE9KDB8YXJbbj4+Ml0mJihhcltnPj4yXT0oMHxhcltnPj4yXSktMSksMCk7aWYobD0wfHRiKDB8KGw9MHxkYigwfHMsMHxiLDIpKSwwfEQsLTMyLC0xKSxsPTB8dGIoMHxsLDB8RCwwfGEsMHxvKSxvPUQsIXUpe3Q9MCooMHxpKTticmVha31pZigoMHwoZj0oKDB8KGc9MC1yfDApKTwwKTw8MzE+PjMxKSk8KDB8byl8KDB8byk9PSgwfGYpJmc+Pj4wPGw+Pj4wKXthclsoZT0xMDM2NCk+PjJdPTM0LHQ9MTc5NzY5MzEzNDg2MjMxNTdlMjkyKigwfGkpKjE3OTc2OTMxMzQ4NjIzMTU3ZTI5MjticmVha31pZigoMHxvKTwoMHwoZj0oKDB8KGc9cistMTA2fDApKTwwKTw8MzE+PjMxKSl8KDB8byk9PSgwfGYpJmw+Pj4wPGc+Pj4wKXthclsoZT0xMDM2NCk+PjJdPTM0LHQ9MjIyNTA3Mzg1ODUwNzIwMTRlLTMyNCooMHxpKSoyMjI1MDczODU4NTA3MjAxNGUtMzI0O2JyZWFrfWlmKC0xPCgwfHUpKXtmb3IoYT11O2E9YTw8MXwxJigxXihnPSEoLjU8PXQpKSksdCs9Zz90OnQrLTEsbD0wfHRiKDB8bCwwfG8sLTEsLTEpLG89RCwtMTwoMHxhKTspO2Q9dCx1PWF9ZWxzZSBkPXQ7bz0wfHRiKDB8KHI9MHxvYigzMiwwLDB8ciwoKDB8cik8MCk8PDMxPj4zMXwwKSksMHxELDB8bCwwfG8pLDU5PT0oMHwoYj0oMHwocj1EKSk8KDB8KGc9KCgwfGUpPDApPDwzMT4+MzEpKXwoMHxnKT09KDB8cikmbz4+PjA8ZT4+PjA/MDwoMHxvKT81OTooYT0wLG89ODQsNjEpOihvPWUsNTkpKSkmJigoMHxvKTw1Mz8obz04NC0oYT1vKXwwLGI9NjEpOnQ9KygoYz0wKXxpKSksNjE9PSgwfGIpJiYodD0rKDB8aSksYz0rRGkoK1FpKDEsbyksdCksbz1hKSwwPT0odD10KigoaT0wPT0oMSZ1fDApJjAhPWQmKDB8byk8MzIpPzA6ZCkrKGMrdCooKCgxJmkpK3V8MCk+Pj4wKSktYykmJihhclsoaT0xMDM2NCk+PjJdPTM0KSx0PStNaSh0LGwpfWVsc2UoYT0wIT0oMHwobz0wfGFyW24+PjJdKSkpJiYoYXJbZz4+Ml09KDB8YXJbZz4+Ml0pLTEpLGY/KGEmJihhcltnPj4yXT0oMHxhcltnPj4yXSktMSksMD09KDB8dyl8MD09KDB8byl8fChhcltnPj4yXT0oMHxhcltnPj4yXSktMSkpOm5sKEEsMCksdD0wKigwfGkpfXdoaWxlKDApO3JldHVybit0fWZ1bmN0aW9uIF9pKEEsZSxyLGksZixuKXtlfD0wLGZ8PTAsbnw9MDt2YXIgdCxvLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wLGQ9MCxrPTAsaD0wLHc9MCx2PTAsbT0wLGc9MCxaPTAscD0wLHk9MCxCPTAsRT0wLFg9MCxXPTAsST0wLEM9MCxHPTA7dD11cj0obz11cikrMzEmLTMyLHVyPXVyKzUxMnwwLEc9MC0oQz0oaXw9MCkrKHJ8PTApfDApfDAsWD0oQXw9MCkrNHwwLFc9QSsxMDB8MCxsPTA7QTpmb3IoOzspe3N3aXRjaCgwfGUpe2Nhc2UgNDY6Qj02O2JyZWFrIEE7Y2FzZSA0ODpicmVhaztkZWZhdWx0OmQ9bCxzPWs9Zz0wO2JyZWFrIEF9KGU9MHxhcltYPj4yXSk+Pj4wPCgwfGFyW1c+PjJdKT4+PjA/KGFyW1g+PjJdPWUrMSxlPTB8Y3JbZT4+MF0sbD0xKTooZT0wfHZpKEEpLGw9MSl9aWYoNj09KDB8QikpaWYoNDg9PSgwfChlPShlPTB8YXJbWD4+Ml0pPj4+MDwoMHxhcltXPj4yXSk+Pj4wPyhhcltYPj4yXT1lKzEsMHxjcltlPj4wXSk6MHx2aShBKSkpKWZvcihlPWw9MDs7KXtpZihsPTB8dGIoMHxsLDB8ZSwtMSwtMSkscz1ELDQ4IT0oMHwoZT0oZT0wfGFyW1g+PjJdKT4+PjA8KDB8YXJbVz4+Ml0pPj4+MD8oYXJbWD4+Ml09ZSsxLDB8Y3JbZT4+MF0pOjB8dmkoQSkpKSl7ZD1nPTEsaz1sO2JyZWFrfWU9c31lbHNlIGc9MSxkPWwscz1rPTA7Yj1lKy00OHwoYXJbdD4+Ml09MCksdT00Nj09KDB8ZSk7QTpkb3tpZih1fGI+Pj4wPDEwKXtFPTQ5Nit0fDAscD1nLHk9ZCxCPWIsYj1kPW09bD1aPTA7ZTpmb3IoOzspe2Rve2lmKHUpe2lmKHApYnJlYWsgZTtwPTEsaz1kLHM9Yn1lbHNle2lmKGQ9MHx0YigwfGQsMHxiLDEsMCksYj1ELGc9NDghPSgwfGUpLDEyNTw9KDB8bCkpe2lmKCFnKWJyZWFrO2FyW0U+PjJdPTF8YXJbRT4+Ml07YnJlYWt9dT10KyhsPDwyKXwwLGU9Wj9lKy00OCsoMTAqKDB8YXJbdT4+Ml0pfDApfDA6Qixhclt1Pj4yXT1lLFo9KHk9OT09KDB8KFo9WisxfDApKSk/MDpaLGw9KDEmeSkrbHwwLG09Zz9kOm0seT0xfX13aGlsZSgwKTtpZighKCh1PTQ2PT0oMHwoZT0oZT0wfGFyW1g+PjJdKT4+PjA8KDB8YXJbVz4+Ml0pPj4+MD8oYXJbWD4+Ml09ZSsxLDB8Y3JbZT4+MF0pOjB8dmkoQSkpKSl8KEI9ZSstNDh8MCk+Pj4wPDEwKSl7Zz1wLHU9eSxCPTI5O2JyZWFrIEF9fWU9Wix1PTAhPSgwfHkpLEI9Mzd9ZWxzZSB1PWQsYj1kPW09bD1aPTAsQj0yOX13aGlsZSgwKTtkb3tpZigyOT09KDB8Qikpe2lmKGs9KEU9MD09KDB8ZykpP2Q6ayxzPUU/YjpzLCEoKHU9MCE9KDB8dSkpJjEwMT09KDMyfGUpKSl7aWYoLTE8KDB8ZSkpe2U9WixCPTM3O2JyZWFrfWU9WixCPTM5O2JyZWFrfWlmKDA9PSgwfCh1PTB8WWkoQSxuKSkpJi0yMTQ3NDgzNjQ4PT0oMHwoZT1EKSkpe2lmKCFuKXtubChBLDApLGE9MDticmVha31lPXU9KDB8YXJbVz4+Ml0mJihhcltYPj4yXT0oMHxhcltYPj4yXSktMSksMCl9eT0wfHRiKDB8dSwwfGUsMHxrLDB8cyksZT1aLHM9RCxCPTQxfX13aGlsZSgwKTszNz09KDB8QikmJihCPTB8YXJbVz4+Ml0/KGFyW1g+PjJdPSgwfGFyW1g+PjJdKS0xLHU/KHk9ayw0MSk6NDApOjM5KSwzOT09KDB8QikmJihCPXU/KHk9ayw0MSk6NDApO2Rve2lmKDQwPT0oMHxCKSlhclsoRz0xMDM2NCk+PjJdPTIyLG5sKEEsMCksYT0wO2Vsc2UgaWYoNDE9PSgwfEIpKXtpZighKHU9MHxhclt0Pj4yXSkpe2E9MCooMHxmKTticmVha31pZigoMHx5KT09KDB8ZCkmKDB8cyk9PSgwfGIpJigoMHxiKTwwfDA9PSgwfGIpJmQ+Pj4wPDEwKSYmMzA8KDB8cil8MD09KHU+Pj5yfDApKXthPSgwfGYpKih1Pj4+MCk7YnJlYWt9aWYoKDB8KFc9KCgwfChBPSgwfGkpLy0yfDApKTwwKTw8MzE+PjMxKSk8KDB8cyl8KDB8cyk9PSgwfFcpJkE+Pj4wPHk+Pj4wKXthclsoRz0xMDM2NCk+PjJdPTM0LGE9MTc5NzY5MzEzNDg2MjMxNTdlMjkyKigwfGYpKjE3OTc2OTMxMzQ4NjIzMTU3ZTI5MjticmVha31pZigoMHxzKTwoMHwoVz0oKDB8KEE9aSstMTA2fDApKTwwKTw8MzE+PjMxKSl8KDB8cyk9PSgwfFcpJnk+Pj4wPEE+Pj4wKXthclsoRz0xMDM2NCk+PjJdPTM0LGE9MjIyNTA3Mzg1ODUwNzIwMTRlLTMyNCooMHxmKSoyMjI1MDczODU4NTA3MjAxNGUtMzI0O2JyZWFrfWlmKGUpe2lmKCgwfGUpPDkpe2Zvcih1PTB8YXJbKGI9dCsobDw8Mil8MCk+PjJdO3U9MTAqdXwwLDkhPSgwfChlPWUrMXwwKSk7KTthcltiPj4yXT11fWw9bCsxfDB9aWYoKDB8bSk8OSYmKDB8bSk8PSgwfHkpJigwfHkpPDE4KXtpZihlPTB8YXJbdD4+Ml0sOT09KDB8eSkpe2E9KDB8ZikqKGU+Pj4wKTticmVha31pZigoMHx5KTw5KXthPSgwfGYpKihlPj4+MCkvKDB8YXJbMTQwMTIrKDgteTw8Mik+PjJdKTticmVha31pZigzMDwoMHwoQT1yKzI3KygwfGJyKHksLTMpKXwwKSl8MD09KGU+Pj5BfDApKXthPSgwfGYpKihlPj4+MCkqKDB8YXJbMTQwMTIrKHkrLTEwPDwyKT4+Ml0pO2JyZWFrfX1pZihlPSgwfHkpJTl8MCl7aWYoZD0wfGFyWzE0MDEyKyg4LShtPS0xPCgwfHkpP2U6ZSs5fDApPDwyKT4+Ml0sbCl7Zm9yKGs9MWU5LygwfGQpfDAsdT15LGU9cz1iPTA7QT0oKChXPTB8YXJbKFg9dCsoZTw8Mil8MCk+PjJdKT4+PjApLyhkPj4+MCl8MCkrYnwwLGFyW1g+PjJdPUEsYj0wfGJyKGssKFc+Pj4wKSUoZD4+PjApfDApLHU9KEE9KDB8ZSk9PSgwfHMpJjA9PSgwfEEpKT91Ky05fDA6dSxzPUE/cysxJjEyNzpzLCgwfChlPWUrMXwwKSkhPSgwfGwpOyk7Yj8oYXJbdCsobDw8Mik+PjJdPWIsYj1zLGw9bCsxfDApOmI9c31lbHNlIGw9Yj0wLHU9eTt5PTktbSt1fChlPTApfWVsc2UgYj1lPTA7QTpmb3IoOzspe2ZvcihtPSgwfHkpPDE4LGc9MTg9PSgwfHkpLFo9dCsoYjw8Mil8MDs7KXtpZighbSl7aWYoIWcpe3U9eTticmVhayBBfWlmKDkwMDcxOTk8PSgwfGFyW1o+PjJdKT4+PjApe3U9MTg7YnJlYWsgQX19Zm9yKGw9KHA9bCkrMTI3fCh1PTApO2w9MHx0YigwfChsPTB8ZGIoMHxhclsoZD10Kygocz0xMjcmbCk8PDIpfDApPj4yXSwwLDI5KSksMHxELDB8dSwwKSwwPCh1PUQpPj4+MHwwPT0oMHx1KSYxZTk8bD4+PjA/KGs9MHxsYigwfGwsMHx1LDFlOSwwKSxsPTB8dWIoMHxsLDB8dSwxZTksMCkpOms9MCxwPTA9PSgwfChhcltkPj4yXT1sKSkmKDFeKCgwfHMpIT0ocCsxMjcmMTI3fDApfChBPSgwfHMpPT0oMHxiKSkpKT9zOnAsIUE7KXU9ayxsPXMrLTF8MDtpZihlPWUrLTI5fDAsMHxrKWJyZWFrO2w9cH1sPXArMTI3JjEyNyx1PXQrKChwKzEyNiYxMjcpPDwyKXwwLCgwfChiPWIrMTI3JjEyNykpPT0oMHxwKT9hclt1Pj4yXT1hclt1Pj4yXXxhclt0KyhsPDwyKT4+Ml06bD1wLGFyW3QrKGI8PDIpPj4yXT1rLHk9eSs5fDB9QTpmb3IoOzspe2ZvcihaPWwrMSYxMjcscD10KygobCsxMjcmMTI3KTw8Mil8MDs7KXtmb3Ioaz0xOD09KDB8dSksZz0yNzwoMHx1KT85OjEseT1iOzspe2ZvcihiPTA7Oyl7aWYoKDB8KHM9Yit5JjEyNykpPT0oMHxsKSl7ST0yLEI9ODg7YnJlYWt9aWYoKHM9MHxhclt0KyhzPDwyKT4+Ml0pPj4+MDwoZD0wfGFyWzE0MDQ0KyhiPDwyKT4+Ml0pPj4+MCl7ST0yLEI9ODg7YnJlYWt9aWYoZD4+PjA8cz4+PjApYnJlYWs7aWYoMjw9KDB8KGI9YisxfDApKSl7ST1iLEI9ODg7YnJlYWt9fWlmKDg4PT0oMHxCKSYmayYyPT0oKEI9MCl8SSkpe3M9YT0wO2JyZWFrIEF9aWYoZT1nK2V8MCwoMHx5KSE9KDB8bCkpYnJlYWs7eT1sfWZvcihrPSgxPDxnKS0xfDAsbT0xZTk+Pj5nLGQ9MCxzPWI9eTtBPSgoVz0wfGFyWyhYPXQrKHM8PDIpfDApPj4yXSk+Pj5nKStkfDAsYXJbWD4+Ml09QSxkPTB8YnIoVyZrLG0pLHU9KEE9KDB8cyk9PSgwfGIpJjA9PSgwfEEpKT91Ky05fDA6dSxiPUE/YisxJjEyNzpiLCgwfChzPXMrMSYxMjcpKSE9KDB8bCk7KTtpZihkKXtpZigoMHxaKSE9KDB8YikpYnJlYWs7YXJbcD4+Ml09MXxhcltwPj4yXX19YXJbdCsobDw8Mik+PjJdPWQsbD1afWZvcig7dT1sKzEmMTI3LCgwfChiPXMreSYxMjcpKT09KDB8bCkmJihhclt0Kyh1Ky0xPDwyKT4+Ml09MCxsPXUpLGE9MWU5KmErICsoKDB8YXJbdCsoYjw8Mik+PjJdKT4+PjApLDIhPSgwfChzPXMrMXwwKSk7KTtpZihjPSh2PSsoMHxmKSkqYSxoPSgwfChiPShrPSgwfChkPShzPWUrNTN8MCktaXwwKSk8KDB8cikpPzA8KDB8ZCk/ZDowOnIpKTw1Mz8odz0rRGkoK1FpKDEsMTA1LWJ8MCksYykpKyhjLShhPWg9K0ppKGMsK1FpKDEsNTMtYnwwKSkpKTooYT13PTAsYyksKDB8KHU9eSsyJjEyNykpIT0oMHxsKSl7dT0wfGFyW3QrKHU8PDIpPj4yXTtkb3tpZig1ZTg8PXU+Pj4wKXtpZig1ZTghPSgwfHUpKXthPS43NSp2K2E7YnJlYWt9aWYoKHkrMyYxMjd8MCk9PSgwfGwpKXthPS41KnYrYTticmVha31hPS43NSp2K2E7YnJlYWt9aWYoMD09KDB8dSkmJih5KzMmMTI3fDApPT0oMHxsKSlicmVhazthPS4yNSp2K2F9d2hpbGUoMCk7Yz0xPCg1My1ifDApJiYwPT0rSmkoYSwxKT9hKzE6YX1lbHNlIGM9YTthPWgrYy13O2Rve2lmKCgtMi1DfDApPCgyMTQ3NDgzNjQ3JnN8MCkpe2lmKGE9KEM9ISg5MDA3MTk5MjU0NzQwOTkyPD0rVigrYSkpKT9hOi41KmEsKChlPSgxJigxXkMpKStlfDApKzUwfDApPD0oMHxHKSYmISgwIT1jJmsmKCgwfGIpIT0oMHxkKXxDKSkpYnJlYWs7YXJbKEc9MTAzNjQpPj4yXT0zNH19d2hpbGUoMCk7YT0rTWkoYSxlKX19d2hpbGUoMCk7cmV0dXJuIHVyPW8sK2F9ZnVuY3Rpb24gWWkoQSxlKXtlfD0wO3ZhciByLGk9MCxmPTAsbj0wLHQ9MCxvPTAsYT0wO3N3aXRjaCgwfChpPShpPTB8YXJbKGE9KEF8PTApKzR8MCk+PjJdKT4+PjA8KDB8YXJbKHI9QSsxMDB8MCk+PjJdKT4+PjA/KGFyW2E+PjJdPWkrMSwwfGNyW2k+PjBdKTowfHZpKEEpKSl7Y2FzZSA0MzpjYXNlIDQ1OmY9NDU9PSgwfGkpJjEsMCE9KDB8ZSkmOTwoKGk9KGk9MHxhclthPj4yXSk+Pj4wPCgwfGFyW3I+PjJdKT4+PjA/KGFyW2E+PjJdPWkrMSwwfGNyW2k+PjBdKTowfHZpKEEpKSstNDh8MCk+Pj4wJiYwIT0oMHxhcltyPj4yXSkmJihhclthPj4yXT0oMHxhclthPj4yXSktMSk7YnJlYWs7ZGVmYXVsdDpmPTB9aWYoOTwoaSstNDh8MCk+Pj4wKWk9KGY9KDB8YXJbcj4+Ml0mJihhclthPj4yXT0oMHxhclthPj4yXSktMSksLTIxNDc0ODM2NDgpLDApO2Vsc2V7Zm9yKG49MDtuPWkrLTQ4KygxMCpufDApfDAsKChpPShpPTB8YXJbYT4+Ml0pPj4+MDwoMHxhcltyPj4yXSk+Pj4wPyhhclthPj4yXT1pKzEsMHxjcltpPj4wXSk6MHx2aShBKSkrLTQ4fDApPj4+MDwxMCYoMHxuKTwyMTQ3NDgzNjQ7KTtpZihlPSgoMHxuKTwwKTw8MzE+PjMxLChpKy00OHwwKT4+PjA8MTApe2Zvcig7ZT0wfG5iKDB8biwwfGUsMTAsMCksbj1ELGk9MHx0YigwfGksKCgwfGkpPDApPDwzMT4+MzF8MCwtNDgsLTEpLG49MHx0YigwfGksMHxELDB8ZSwwfG4pLGU9RCwoKGk9KGk9MHxhclthPj4yXSk+Pj4wPCgwfGFyW3I+PjJdKT4+PjA/KGFyW2E+PjJdPWkrMSwwfGNyW2k+PjBdKTowfHZpKEEpKSstNDh8MCk+Pj4wPDEwJigoMHxlKTwyMTQ3NDgzNnwyMTQ3NDgzNj09KDB8ZSkmbj4+PjA8MjA2MTU4NDMwMik7KTt0PWksbz1ufWVsc2UgdD1pLG89bjtpZihpPTB8YXJbcj4+Ml0sKHQrLTQ4fDApPj4+MDwxMClmb3IoOyhuPTB8YXJbYT4+Ml0pPj4+MDxpPj4+MD8oYXJbYT4+Ml09bisxLG49MHxjcltuPj4wXSk6KG49MHx2aShBKSxpPTB8YXJbcj4+Ml0pLChuKy00OHwwKT4+PjA8MTA7KTswfGkmJihhclthPj4yXT0oMHxhclthPj4yXSktMSksaT0wfG9iKDAsMCwwfG8sMHxlKSxmPShhPTAhPSgwfGYpKT9EOmUsaT1hP2k6b31yZXR1cm4gRD1mLDB8aX1mdW5jdGlvbiBRaShBLGUpe0E9K0E7dmFyIHI9MCxpPTA7cmV0dXJuKDB8KGV8PTApKTw9MTAyMz8oMHxlKTwtMTAyMiYmKEEqPTIyMjUwNzM4NTg1MDcyMDE0ZS0zMjQscj1lKzEwMjJ8MCxlPWUrMjA0NHwwLEE9KGk9KDB8cik8LTEwMjIpPzIyMjUwNzM4NTg1MDcyMDE0ZS0zMjQqQTpBLGU9aT8tMTAyMjwoMHxlKT9lOi0xMDIyOnIpOihBKj04OTg4NDY1Njc0MzExNThlMjkzLGk9ZSstMTAyM3wwLGU9ZSstMjA0NnwwLEE9KHI9MTAyMzwoMHxpKSk/ODk4ODQ2NTY3NDMxMTU4ZTI5MypBOkEsZT1yPygwfGUpPDEwMjM/ZToxMDIzOmkpLHI9MHxkYihlKzEwMjN8MCwwLDUyKSxpPUQsYXJbZD4+Ml09cixhcltkKzQ+PjJdPWksKyhBKlFbZD4+M10pfWZ1bmN0aW9uIERpKEEsZSl7cmV0dXJuKyArZnVuY3Rpb24oQSxlKXtBPStBLGU9K2U7dmFyIHIsaT0wO3JldHVybiBRW2Q+PjNdPUEscj0wfGFyW2Q+PjJdLGk9MHxhcltkKzQ+PjJdLFFbZD4+M109ZSxpPS0yMTQ3NDgzNjQ4JmFyW2QrND4+Ml18MjE0NzQ4MzY0NyZpLGFyW2Q+PjJdPXIsYXJbZCs0Pj4yXT1pLCsgK1FbZD4+M119KEE9K0EsZT0rZSl9ZnVuY3Rpb24gSmkoQSxlKXtyZXR1cm4rICtmdW5jdGlvbihBLGUpe0E9K0EsZT0rZTt2YXIgcixpPTAsZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wO1FbZD4+M109QSxvPTB8YXJbZD4+Ml0sYz0wfGFyW2QrND4+Ml0sUVtkPj4zXT1lLHU9MHxhcltkPj4yXSxiPTB8YXJbZCs0Pj4yXSxmPTIwNDcmKGY9MHxzYigwfG8sMHxjLDUyKSksbD0yMDQ3JihsPTB8c2IoMHx1LDB8Yiw1MikpLHI9LTIxNDc0ODM2NDgmYyx0PTB8ZGIoMHx1LDB8YiwxKSxhPUQ7QTpkb3tpZigwPT0oMHx0KSYwPT0oMHxhKXx8KG49MHxUaShlKSxpPTIxNDc0ODM2NDcmRCwyMDQ3PT0oMHxmKXwyMTQ2NDM1MDcyPGk+Pj4wfDIxNDY0MzUwNzI9PSgwfGkpJjA8bj4+PjApKXM9MztlbHNle2lmKGk9MHxkYigwfG8sMHxjLDEpLCEoYT4+PjA8KG49RCk+Pj4wfCgwfG4pPT0oMHxhKSZ0Pj4+MDxpPj4+MCkpcmV0dXJuKygoMHxpKT09KDB8dCkmKDB8bik9PSgwfGEpPzAqQTpBKTtpZihmKXQ9MTA0ODU3NSZjfDEwNDg1NzY7ZWxzZXtpZihpPTB8ZGIoMHxvLDB8YywxMiksLTE8KDB8KG49RCkpfC0xPT0oMHxuKSY0Mjk0OTY3Mjk1PGk+Pj4wKWZvcihmPTA7Zj1mKy0xfDAsaT0wfGRiKDB8aSwwfG4sMSksLTE8KDB8KG49RCkpfC0xPT0oMHxuKSY0Mjk0OTY3Mjk1PGk+Pj4wOyk7ZWxzZSBmPTA7bz0wfGRiKDB8bywwfGMsMS1mfDApLHQ9RH1pZihsKWM9MTA0ODU3NSZifDEwNDg1NzY7ZWxzZXtpZihuPTB8ZGIoMHx1LDB8YiwxMiksLTE8KDB8KGE9RCkpfC0xPT0oMHxhKSY0Mjk0OTY3Mjk1PG4+Pj4wKWZvcihpPTA7aT1pKy0xfDAsbj0wfGRiKDB8biwwfGEsMSksLTE8KDB8KGE9RCkpfC0xPT0oMHxhKSY0Mjk0OTY3Mjk1PG4+Pj4wOyk7ZWxzZSBpPTA7dT0wfGRiKDB8dSwwfGIsMS1pfDApLGw9aSxjPUR9bj0wfG9iKDB8bywwfHQsMHx1LDB8YyksYT0tMTwoMHwoaT1EKSl8LTE9PSgwfGkpJjQyOTQ5NjcyOTU8bj4+PjA7ZTpkb3tpZigoMHxsKTwoMHxmKSl7Zm9yKDs7KXtpZihhKXtpZigwPT0oMHxuKSYwPT0oMHxpKSlicmVha31lbHNlIG49byxpPXQ7aWYobz0wfGRiKDB8biwwfGksMSksbj0wfG9iKDB8bywwfCh0PUQpLDB8dSwwfGMpLGE9LTE8KDB8KGk9RCkpfC0xPT0oMHxpKSY0Mjk0OTY3Mjk1PG4+Pj4wLCgwfChmPWYrLTF8MCkpPD0oMHxsKSlicmVhayBlfWU9MCpBO2JyZWFrIEF9fXdoaWxlKDApO2lmKGEpe2lmKDA9PSgwfG4pJjA9PSgwfGkpKXtlPTAqQTticmVha319ZWxzZSBpPXQsbj1vO2lmKGk+Pj4wPDEwNDg1NzZ8MTA0ODU3Nj09KDB8aSkmbj4+PjA8MClmb3IoO249MHxkYigwfG4sMHxpLDEpLGY9ZistMXwwLChpPUQpPj4+MDwxMDQ4NTc2fDEwNDg1NzY9PSgwfGkpJm4+Pj4wPDA7KTswPCgwfGYpPyhiPTB8dGIoMHxuLDB8aSwwLC0xMDQ4NTc2KSxpPUQsZj0wfGRiKDB8ZiwwLDUyKSxpfD1ELGZ8PWIpOihmPTB8c2IoMHxuLDB8aSwxLWZ8MCksaT1EKSxhcltkPj4yXT1mLGFyW2QrND4+Ml09aXxyLGU9K1FbZD4+M119fXdoaWxlKDApOzM9PSgwfHMpJiYoZSo9QSxlLz1lKTtyZXR1cm4rZX0oQT0rQSxlPStlKX1mdW5jdGlvbiBNaShBLGUpe3JldHVybisgK1FpKEE9K0EsZXw9MCl9ZnVuY3Rpb24gVGkoQSl7QT0rQTt2YXIgZTtyZXR1cm4gUVtkPj4zXT1BLGU9MHxhcltkPj4yXSxEPTB8YXJbZCs0Pj4yXSwwfGV9ZnVuY3Rpb24gVWkoQSxlLHIsaSl7QXw9MCxpfD0wO3ZhciBmLG49MDtyZXR1cm4gZj0wfGJyKHJ8PTAsZXw9MCkscj0wPT0oMHxlKT8wOnIsLTE8KDB8YXJbaSs3Nj4+Ml0pPyhuPTA9PSgwfEpjKCkpLEE9MHxlbChBLGYsaSksbnx8TWMoKSk6QT0wfGVsKEEsZixpKSwoMHxBKSE9KDB8ZikmJihyPShBPj4+MCkvKGU+Pj4wKXwwKSwwfHJ9ZnVuY3Rpb24gU2koQSxlKXtBfD0wO3ZhciByLGksZixuPTAsdD0wLG89MCxhPTA7cj11cj0oZj11cikrMzEmLTMyLHVyPXVyKzE2fDAsaT0yNTUmKGV8PTApLHRyW3I+PjBdPWksKG89MHxhclsodD1BKzE2fDApPj4yXSk/YT00OjB8cmwoQSk/bj0tMToobz0wfGFyW3Q+PjJdLGE9NCk7ZG97aWYoND09KDB8YSkpe2lmKCh0PTB8YXJbKGE9QSsyMHwwKT4+Ml0pPj4+MDxvPj4+MCYmKDB8KG49MjU1JmUpKSE9KDB8dHJbQSs3NT4+MF0pKXthclthPj4yXT10KzEsdHJbdD4+MF09aTticmVha31uPTE9PSgwfHhiWzYzJmFyW0ErMzY+PjJdXShBLHIsMSkpPzB8Y3Jbcj4+MF06LTF9fXdoaWxlKDApO3JldHVybiB1cj1mLDB8bn1mdW5jdGlvbiBPaShBKXtBfD0wO3ZhciBlPTAscj0wO2Rve2lmKEEpe2lmKCgwfGFyW0ErNzY+PjJdKTw9LTEpe2U9MHx6aShBKTticmVha31yPTA9PSgwfEpjKCkpLGU9MHx6aShBKSxyfHxNYygpfWVsc2V7aWYoZT0wfGFyWzI2MzZdPzB8T2koMHxhclsyNjM2XSk6MCxBPTB8KEMoNTgxNjApLDU4MTY4KSxBPTB8YXJbQT4+Ml0pZm9yKDtyPS0xPCgwfGFyW0ErNzY+PjJdKT8wfEpjKCk6MCwoMHxhcltBKzIwPj4yXSk+Pj4wPigwfGFyW0ErMjg+PjJdKT4+PjAmJihlPTB8emkoQSl8ZSksMHxyJiZNYygpLDAhPSgwfChBPTB8YXJbQSs1Nj4+Ml0pKTspO1QoNTgxNjApfX13aGlsZSgwKTtyZXR1cm4gMHxlfWZ1bmN0aW9uIHppKEEpe3ZhciBlLHIsaT0wLGY9MCxuPTAsdD0wO3JldHVybiByPShBfD0wKSsyOHwwLDB8KEE9KDB8YXJbKGU9QSsyMHwwKT4+Ml0pPj4+MD4oMHxhcltyPj4yXSk+Pj4wJiYoeGJbNjMmYXJbQSszNj4+Ml1dKEEsMCwwKSwwPT0oMHxhcltlPj4yXSkpPy0xOigoZj0wfGFyWyhpPUErNHwwKT4+Ml0pPj4+MDwodD0wfGFyWyhuPUErOHwwKT4+Ml0pPj4+MCYmeGJbNjMmYXJbQSs0MD4+Ml1dKEEsZi10fDAsMSksYXJbQSsxNj4+Ml09MCxhcltyPj4yXT0wLGFyW2U+PjJdPTAsYXJbbj4+Ml09MCxhcltpPj4yXT0wKSl9ZnVuY3Rpb24gamkoQSxlLHIpe0F8PTAsZXw9MCxyfD0wO3ZhciBpLGY7cmV0dXJuIGY9dXI9KGk9dXIpKzMxJi0zMix1cj11cisxNnwwLGFyW2Y+PjJdPXIscj0wfEhpKEEsZSxmKSx1cj1pLDB8cn1mdW5jdGlvbiBIaShBLGUscil7QXw9MCxlfD0wLHJ8PTA7dmFyIGksZixuPTAsdD0wO2ZvcihpPXVyPShmPXVyKSszMSYtMzIsdXI9dXIrMTI4fDAsdD0obj1pKSsxMjR8MDsoMHwobj1uKzR8KGFyW24+PjJdPTApKSk8KDB8dCk7KTtyZXR1cm4gYXJbMzIraT4+Ml09MzQsYXJbNDQraT4+Ml09QSxhcls3NitpPj4yXT0tMSxhcls4NCtpPj4yXT1BLHQ9MHxmdW5jdGlvbihBLGUscil7ZXw9MCxyfD0wO3ZhciBpLGYsbix0LG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTAsQj0wLEU9MCxYPTAsVz0wLEk9MCxDPTAsRz0wLFY9MCxGPTAsUj0wLE49MCxfPTA7Uj11cj0odD11cikrMzEmLTMyLHVyPXVyKzI4OHwwLGk9Uis4fDAsZj1SKzE3fDAsUj0obj1SKSsxNnwwLF89LTE8KDB8YXJbNzYrKEF8PTApPj4yXSk/MHxKYygpOjA7bz0wfHRyW2U+PjBdO0E6ZG97aWYobzw8MjQ+PjI0KXt5PUErNHwwLEI9QSsxMDB8MCxFPUErMTA4fDAsWD1BKzh8MCxXPTEwK2Z8MCxJPTMzK2Z8MCxwPTQraXwwLEM9NDYrZnwwLEc9OTQrZnwwLEY9Vj0xK2Z8MCxsPWUsYT1jPWU9dj0wO2U6Zm9yKDs7KXtyOmRve2lmKDB8bWkoMjU1Jm8pKXtmb3IoOzB8bWkoMHxjclsobz1sKzF8MCk+PjBdKTspbD1vO2ZvcihubChBLDApOzAhPSgwfG1pKG89KG89MHxhclt5Pj4yXSk+Pj4wPCgwfGFyW0I+PjJdKT4+PjA/KGFyW3k+PjJdPW8rMSwwfGNyW28+PjBdKTowfHZpKEEpKSk7KTswfGFyW0I+PjJdPyhvPSgwfGFyW3k+PjJdKS0xfDAsYXJbeT4+Ml09byk6bz0wfGFyW3k+PjJdLHU9KDB8YXJbRT4+Ml0pK3Yrby0oMHxhcltYPj4yXSl8MH1lbHNle289bzw8MjQ+PjI0PT0zNztpOmRve2lmKG8pe3U9MHx0clsocz1sKzF8MCk+PjBdO2Y6ZG97c3dpdGNoKHU8PDI0Pj4yNCl7Y2FzZSAzNzpicmVhayBpO2Nhc2UgNDI6bD1sKzJ8KFo9MCk7YnJlYWs7ZGVmYXVsdDppZigobz0oMjU1JnUpLTQ4fDApPj4+MDwxMCYmMzY9PSgwfHRyW2wrMj4+MF0pKXtaPTB8eGkocixvKSxsPWwrM3wwO2JyZWFrIGZ9bD0zKygwfGFyW3I+PjJdKSYtNCxaPTB8YXJbbD4+Ml0sYXJbcj4+Ml09bCs0LGw9c319d2hpbGUoMCk7aWYobz0wfHRyW2w+PjBdLCgodT0yNTUmbykrLTQ4fDApPj4+MDwxMClmb3Iocz0wO3M9KDEwKnN8MCktNDgrdXwwLG89MHx0clsobD1sKzF8MCk+PjBdLCgodT0yNTUmbykrLTQ4fDApPj4+MDwxMDspO2Vsc2Ugcz0wO3N3aXRjaChjPShvPW88PDI0Pj4yND09MTA5KT8wOmMsYT1vPzA6YSxsPW8/bCsxfDA6bCxvJj1nPTAhPSgwfFopLHU9bCsxfDAsMHx0cltsPj4wXSl7Y2FzZSAxMDQ6bT0xMDQ9PSgwfHRyW3U+PjBdKSxkPW0/LTI6LTEsbD1tP2wrMnwwOnU7YnJlYWs7Y2FzZSAxMDg6bT0xMDg9PSgwfHRyW3U+PjBdKSxkPW0/MzoxLGw9bT9sKzJ8MDp1O2JyZWFrO2Nhc2UgMTA2OmQ9MyxsPXU7YnJlYWs7Y2FzZSAxMTY6Y2FzZSAxMjI6ZD0xLGw9dTticmVhaztjYXNlIDc2OmQ9MixsPXU7YnJlYWs7Y2FzZSAxMTA6Y2FzZSAxMTI6Y2FzZSA2NzpjYXNlIDgzOmNhc2UgOTE6Y2FzZSA5OTpjYXNlIDExNTpjYXNlIDg4OmNhc2UgNzE6Y2FzZSA3MDpjYXNlIDY5OmNhc2UgNjU6Y2FzZSAxMDM6Y2FzZSAxMDI6Y2FzZSAxMDE6Y2FzZSA5NzpjYXNlIDEyMDpjYXNlIDExNzpjYXNlIDExMTpjYXNlIDEwNTpjYXNlIDEwMDpkPTA7YnJlYWs7ZGVmYXVsdDpOPTEzNzticmVhayBlfXN3aXRjaChoPTB8Y3JbbD4+MF0saD0odz0zPT0oNDcmaHwwKSk/MzJ8aDpoLHc9dz8xOmQsKGs9MjU1JmgpPDwyND4+MjQpe2Nhc2UgOTk6cz0xPCgwfHMpP3M6MTticmVhaztjYXNlIDkxOmJyZWFrO2Nhc2UgMTEwOlBpKFosdyx2LCgoMHx2KTwwKTw8MzE+PjMxKSx1PXY7YnJlYWsgcjtkZWZhdWx0OmZvcihubChBLDApOzAhPSgwfG1pKHU9KHU9MHxhclt5Pj4yXSk+Pj4wPCgwfGFyW0I+PjJdKT4+PjA/KGFyW3k+PjJdPXUrMSwwfGNyW3U+PjBdKTowfHZpKEEpKSk7KTswfGFyW0I+PjJdPyh1PSgwfGFyW3k+PjJdKS0xfDAsYXJbeT4+Ml09dSk6dT0wfGFyW3k+PjJdLHY9KDB8YXJbRT4+Ml0pK3YrdS0oMHxhcltYPj4yXSl8MH1pZihubChBLHMpLHU9MHxhclt5Pj4yXSxkPTB8YXJbQj4+Ml0sdT4+PjA8ZD4+PjApYXJbeT4+Ml09dSsxO2Vsc2V7aWYoKDB8dmkoQSkpPDApe049MTM3O2JyZWFrIGV9ZD0wfGFyW0I+PjJdfTB8ZCYmKGFyW3k+PjJdPSgwfGFyW3k+PjJdKS0xKTtmOmRve3N3aXRjaChrPDwyND4+MjQpe2Nhc2UgOTE6Y2FzZSA5OTpjYXNlIDExNTptPTk5PT0oMHxoKTtuOmRve2lmKDExNT09KDE2fGgpKXZiKDB8ViwtMSwyNTYpLDExNT09KCh0cltmPj4wXT0wKXxoKSYmKHRyW0k+PjBdPTAsdHJbVz4+MF09MCx0cltXKzE+PjBdPTAsdHJbVysyPj4wXT0wLHRyW1crMz4+MF09MCx0cltXKzQ+PjBdPTApO2Vsc2V7c3dpdGNoKGg9OTQ9PSgwfHRyWyh1PWwrMXwwKT4+MF0pLGw9aD9sKzJ8MDp1LHZiKDB8Riwoaz0xJmgpfDAsMjU2KSwodHJbZj4+MF09MCl8dHJbbD4+MF0pe2Nhc2UgNDU6dT1DLE49NjQ7YnJlYWs7Y2FzZSA5Mzp1PUcsTj02NDticmVhaztkZWZhdWx0Omg9MjU1JigxXmspfWZvcig2ND09KDB8TikmJihoPTI1NSYoMV5rKSx0clt1Pj4oTj0wKV09aCxsPWwrMXwwKTs7KXt1PTB8dHJbbD4+MF07dDpkb3tzd2l0Y2godTw8MjQ+PjI0KXtjYXNlIDA6Tj0xMzc7YnJlYWsgZTtjYXNlIDkzOmJyZWFrIG47Y2FzZSA0NTpzd2l0Y2goKHU9MHx0clsoaz1sKzF8MCk+PjBdKTw8MjQ+PjI0KXtjYXNlIDkzOmNhc2UgMDp1PTQ1O2JyZWFrIHR9aWYoKDI1NSYobD0wfHRyW2wrLTE+PjBdKSk8KDI1NSZ1KSl7Zm9yKGwmPTI1NTt0cltmKyhsPWwrMXwwKT4+MF09aCx1PTB8dHJbaz4+MF0sKDB8bCk8KDI1NSZ1fDApOyk7bD1rfWVsc2UgbD1rfX13aGlsZSgwKTt0clsxKygyNTUmdSkrZj4+MF09aCxsPWwrMXwwfX19d2hpbGUoMCk7dT1tP3MrMXwwOjMxLGg9MT09KDB8dyk7bjpkb3tpZihoKXtpZihvKXtpZighKGE9MHx5Yyh1PDwyKSkpe2E9Yz0wLG89MSxOPTEzNzticmVhayBlfX1lbHNlIGE9WjthcltpPj4yXT0wLGFyW3A+PjJdPTAsaz11LGM9MDt0OmZvcig7Oyl7ZD0wPT0oMHxhKTtkb3tvOmZvcig7Oyl7aWYodT0odT0wfGFyW3k+PjJdKT4+PjA8KDB8YXJbQj4+Ml0pPj4+MD8oYXJbeT4+Ml09dSsxLDB8Y3JbdT4+MF0pOjB8dmkoQSksISgwfHRyW2YrKHUrMSk+PjBdKSlicmVhayB0O3N3aXRjaCh0cltSPj4wXT11LDB8R2kobixSLDEsaSkpe2Nhc2UtMTpjPTAsTj0xMzc7YnJlYWsgZTtjYXNlLTI6YnJlYWs7ZGVmYXVsdDpicmVhayBvfX1kfHwoYXJbYSsoYzw8Mik+PjJdPWFyW24+PjJdLGM9YysxfDApfXdoaWxlKCEobyYoMHxjKT09KDB8aykpKTtpZighKHU9MHxFYyhhLChjPWs8PDF8MSk8PDIpKSl7Yz0wLG89MSxOPTEzNzticmVhayBlfXc9ayxrPWMsYT11LGM9d31pZighKDB8KFk9aSwxJihZPShZfD0wKT8wPT0oMHxhcltZPj4yXSk6MSl8MCkpKXtjPTAsTj0xMzc7YnJlYWsgZX11PWMsYz0wLGs9YX1lbHNle2lmKG8pe2lmKCEoYz0wfHljKHUpKSl7YT1jPTAsbz0xLE49MTM3O2JyZWFrIGV9Zm9yKGQ9dSxhPTA7Oyl7ZG97aWYodT0odT0wfGFyW3k+PjJdKT4+PjA8KDB8YXJbQj4+Ml0pPj4+MD8oYXJbeT4+Ml09dSsxLDB8Y3JbdT4+MF0pOjB8dmkoQSksISgwfHRyW2YrKHUrMSk+PjBdKSl7dT1hLGE9az0wO2JyZWFrIG59dHJbYythPj4wXT11LGE9YSsxfDB9d2hpbGUoKDB8YSkhPSgwfGQpKTtpZighKHU9MHxFYyhjLGE9ZDw8MXwxKSkpe2E9MCxvPTEsTj0xMzc7YnJlYWsgZX13PWQsZD1hLGM9dSxhPXd9fWlmKFopZm9yKHU9MCxjPWQ7Oyl7aWYoYT0oYT0wfGFyW3k+PjJdKT4+PjA8Yz4+PjA/KGFyW3k+PjJdPWErMSwwfGNyW2E+PjBdKTowfHZpKEEpLCEoMHx0cltmKyhhKzEpPj4wXSkpe2M9WixhPWs9MDticmVhayBufXRyW1ordT4+MF09YSx1PXUrMXwwLGM9MHxhcltCPj4yXX1lbHNlIGZvcihjPWQ7Oyl7aWYoYT0oYT0wfGFyW3k+PjJdKT4+PjA8Yz4+PjA/KGFyW3k+PjJdPWErMSwwfGNyW2E+PjBdKTowfHZpKEEpLCEoMHx0cltmKyhhKzEpPj4wXSkpe2E9az1jPXU9MDticmVhayBufWM9MHxhcltCPj4yXX19fXdoaWxlKDApO2lmKDB8YXJbQj4+Ml0/KGQ9KDB8YXJbeT4+Ml0pLTF8MCxhclt5Pj4yXT1kKTpkPTB8YXJbeT4+Ml0sIShkPWQtKDB8YXJbWD4+Ml0pKygwfGFyW0U+PjJdKXwwKSl7Tj0xMzk7YnJlYWsgZX1pZighKCgwfGQpPT0oMHxzKXwxXm0pKXtOPTEzOTticmVhayBlfWRve2lmKG8pe2lmKGgpe2FyW1o+PjJdPWs7YnJlYWt9YXJbWj4+Ml09YzticmVha319d2hpbGUoMCk7aWYoIW0pe2lmKDB8ayYmKGFyW2srKHU8PDIpPj4yXT0wKSwhYyl7Yz0wO2JyZWFrIGZ9dHJbYyt1Pj4wXT0wfWJyZWFrO2Nhc2UgMTIwOmNhc2UgODg6Y2FzZSAxMTI6dT0xNixOPTEyNTticmVhaztjYXNlIDExMTp1PTgsTj0xMjU7YnJlYWs7Y2FzZSAxMTc6Y2FzZSAxMDA6dT0xMCxOPTEyNTticmVhaztjYXNlIDEwNTp1PTAsTj0xMjU7YnJlYWs7Y2FzZSA3MTpjYXNlIDEwMzpjYXNlIDcwOmNhc2UgMTAyOmNhc2UgNjk6Y2FzZSAxMDE6Y2FzZSA2NTpjYXNlIDk3OmlmKGI9K1JpKEEsdywwKSwoMHxhcltFPj4yXSk9PSgoMHxhcltYPj4yXSktKDB8YXJbeT4+Ml0pfDApKXtOPTEzOTticmVhayBlfWlmKFopc3dpdGNoKDB8dyl7Y2FzZSAwOmdBW1o+PjJdPWI7YnJlYWsgZjtjYXNlIDE6Y2FzZSAyOlFbWj4+M109YjticmVhayBmO2RlZmF1bHQ6YnJlYWsgZn19fXdoaWxlKDApO2Rve2lmKDEyNT09KDB8Tikpe2lmKHU9KE49MCl8d2koQSx1LDAsLTEsLTEpLCgwfGFyW0U+PjJdKT09KCgwfGFyW1g+PjJdKS0oMHxhclt5Pj4yXSl8MCkpe049MTM5O2JyZWFrIGV9aWYoZyYxMTI9PSgwfGgpKXthcltaPj4yXT11O2JyZWFrfVBpKFosdyx1LEQpO2JyZWFrfX13aGlsZSgwKTtlPSgxJmcpK2V8MCx1PSgwfGFyW0U+PjJdKSt2KygwfGFyW3k+PjJdKS0oMHxhcltYPj4yXSl8MDticmVhayByfX13aGlsZSgwKTtpZihsPWwrKDEmbyl8MCxubChBLDApLCgwfChvPShvPTB8YXJbeT4+Ml0pPj4+MDwoMHxhcltCPj4yXSk+Pj4wPyhhclt5Pj4yXT1vKzEsMHxjcltvPj4wXSk6MHx2aShBKSkpIT0oMHxjcltsPj4wXSkpe049MjI7YnJlYWsgZX11PXYrMXwwfX13aGlsZSgwKTtpZighKChvPTB8dHJbKGw9bCsxfDApPj4wXSk8PDI0Pj4yNCkpYnJlYWsgQTt2PXV9aWYoMjI9PSgwfE4pKXtpZigwfGFyW0I+PjJdJiYoYXJbeT4+Ml09KDB8YXJbeT4+Ml0pLTEpLDAhPSgwfGUpfC0xPCgwfG8pKWJyZWFrO289MCxOPTEzOH1lbHNlIDEzNz09KDB8Tik/KG8mPTEsZXx8KE49MTM4KSk6MTM5PT0oMHxOKSYmKG8mPTEpOzEzOD09KDB8TikmJihlPS0xKSxvJiYoQmMoYyksQmMoYSkpfWVsc2UgZT0wfXdoaWxlKDApO3ZhciBZOzB8XyYmTWMoKTtyZXR1cm4gdXI9dCwwfGV9KGksZSxyKSx1cj1mLDB8dH1mdW5jdGlvbiB4aShBLGUpe0F8PTAsZXw9MDt2YXIgcixpLGY9MDtmb3Iocj11cj0oaT11cikrMzEmLTMyLHVyPXVyKzE2fDAsYXJbcj4+Ml09YXJbQT4+Ml07Zj0zKygwfGFyW3I+PjJdKSYtNCxBPTB8YXJbZj4+Ml0sYXJbcj4+Ml09Zis0LDE8ZT4+PjA7KWU9ZSstMXwwO3JldHVybiB1cj1pLDB8QX1mdW5jdGlvbiBQaShBLGUscixpKXtBfD0wLGV8PTAscnw9MCxpfD0wO0E6ZG97aWYoMHxBKXN3aXRjaCgwfGUpe2Nhc2UtMjp0cltBPj4wXT1yO2JyZWFrIEE7Y2FzZS0xOm9yW0E+PjFdPXI7YnJlYWsgQTtjYXNlIDA6Y2FzZSAxOmFyW0E+PjJdPXI7YnJlYWsgQTtjYXNlIDM6YXJbKGU9QSk+PjJdPXIsYXJbZSs0Pj4yXT1pO2JyZWFrIEE7ZGVmYXVsdDpicmVhayBBfX13aGlsZSgwKX1mdW5jdGlvbiBMaShBLGUscil7QXw9MCxlfD0wLHJ8PTA7dmFyIGksZixuLHQ9MCxvPTA7Zm9yKGY9dXI9KG49dXIpKzMxJi0zMix1cj11cisxMjh8MCxvPSh0PWYpKzEyNHwwOygwfCh0PXQrNHwoYXJbdD4+Ml09MCkpKTwoMHxvKTspO3JldHVybiBhclsodD00K2Z8MCk+PjJdPUEsYXJbKG89OCtmfDApPj4yXT0tMSxhcls0NCtmPj4yXT1BLGFyWzc2K2Y+PjJdPS0xLG5sKGYsMCksaT0rUmkoZixyLDEpLHI9KDB8YXJbdD4+Ml0pLSgwfGFyW28+PjJdKSsoMHxhclsxMDgrZj4+Ml0pfDAsMHxlJiYoYXJbZT4+Ml09MHxyP0ErcnwwOkEpLHVyPW4sK2l9ZnVuY3Rpb24gS2koQSxlKXtyZXR1cm4gcj1BfD0wLGk9ZXw9MCwrICsgKyArTGkocnw9MCxpfD0wLDApO3ZhciByLGl9ZnVuY3Rpb24gcWkoQSxlKXtyZXR1cm4gcj1BfD0wLGk9ZXw9MCwrICsgKyArTGkocnw9MCxpfD0wLDEpO3ZhciByLGl9ZnVuY3Rpb24gJGkoQSxlKXtyZXR1cm4gcj1BfD0wLGk9ZXw9MCwrICsgKyArTGkocnw9MCxpfD0wLDIpO3ZhciByLGl9ZnVuY3Rpb24gQWYoQSxlKXtyZXR1cm4rICtRaShBPStBLGV8PTApfWZ1bmN0aW9uIGVmKEEpe3JldHVybiAwfH5+K3BiKCsoQT0rQSkpfWZ1bmN0aW9uIHJmKEEpe0F8PTA7dmFyIGU7cmV0dXJuIGU9MHxhclsyNjIyXSwwfEEmJihhclsyNjIyXT0tMT09KDB8QSk/NTgxMDQ6QSksMHwoNTgxMDQ9PSgwfGUpPy0xOmUpfWZ1bmN0aW9uIGZmKEEsZSl7QXw9MCxlfD0wO3ZhciByLGksZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTA7Yj11cj0oaT11cikrMzEmLTMyLHVyPXVyKzI3MnwwLHI9Yis4fDA7ZG97aWYoISgwfHRyW2U+PjBdKSl7aWYoMHwoZT0wfGJBKDUyOTAzKSkmJjB8dHJbZT4+MF0pYnJlYWs7aWYoMHwoZT0wfGJBKDUyOTEwKygxMipBfDApfDApKSYmMHx0cltlPj4wXSlicmVhaztpZigwfChlPTB8YkEoNTI5ODIpKSYmMHx0cltlPj4wXSlicmVhaztlPTUyOTg3fX13aGlsZSgwKTtmPTA7QTpkb3tzd2l0Y2goMHx0cltlK2Y+PjBdKXtjYXNlIDQ3OmNhc2UgMDpicmVhayBBfWY9ZisxfDB9d2hpbGUoZj4+PjA8MTUpOzE1PT0oMHwodT0obj0wfHRyW2U+PjBdKTw8MjQ+PjI0IT00NiYmMD09KDB8dHJbZStmPj4wXSk/bjw8MjQ+PjI0PT02Nz8xNToobD1lLDE2KTooZT01Mjk4NywxNSkpKSYmKHU9MHx0cltlKzE+PjBdPyhsPWUsMTYpOjE4KTtBOmRve2lmKDE2PT0oMHx1KSlpZigwIT0oMHxGYyhsLDUyOTg3KSkmJjAhPSgwfEZjKGwsNTI5OTUpKSl7aWYoMHwoZT0wfGFyWzE0NTQzXSkpZG97aWYoISgwfEZjKGwsZSs4fDApKSlicmVhayBBO2U9MHxhcltlKzI0Pj4yXX13aGlsZSgwIT0oMHxlKSk7Qyg1ODE3NiksZT0wfGFyWzE0NTQzXTtlOmRve2lmKDB8ZSl7Zm9yKDswfEZjKGwsZSs4fDApOylpZighKGU9MHxhcltlKzI0Pj4yXSkpYnJlYWsgZTtUKDU4MTc2KTticmVhayBBfX13aGlsZSgwKTtlOmRve2lmKDA9PSgwfGFyWzE0NTE4XSkmJjAhPSgwfCh0PTB8YkEoNTMwMDEpKSkmJjAhPSgwfHRyW3Q+PjBdKSl7Zm9yKGE9MjU0LWZ8MCxjPWYrMXwwLG49dDs7KXtpZigodD0obz0wfE5jKG4sNTgpKS1uKygoKGU9MHx0cltvPj4wXSk8PDI0Pj4yNCE9MCk8PDMxPj4zMSl8MCk+Pj4wPGE+Pj4wKXtpZihoYigwfHIsMHxuLDB8dCksdHJbKG49cit0fDApPj4wXT00NyxoYihuKzF8MCwwfGwsMHxmKSwodHJbcisoYyt0KT4+MF09MCl8KHQ9MHxHKDB8ciwwfGIpKSlicmVhaztlPTB8dHJbbz4+MF19aWYoISgwfHRyWyhuPW8rKGU8PDI0Pj4yNCE9MCYxKXwwKT4+MF0pKXt1PTQxO2JyZWFrIGV9fWlmKGU9MHx5YygyOCksbj0wfGFyW2I+PjJdLGUpe2FyW2U+PjJdPXQsYXJbZSs0Pj4yXT1uLGhiKDB8KGI9ZSs4fDApLDB8bCwwfGYpLHRyW2IrZj4+MF09MCxhcltlKzI0Pj4yXT1hclsxNDU0M10sYXJbMTQ1NDNdPWU7YnJlYWt9RWkodCxuKSx1PTQxO2JyZWFrfXU9NDF9d2hpbGUoMCk7NDE9PSgwfHUpJiYoZT0wfHljKDI4KSkmJihhcltlPj4yXT1hclsyNTI1XSxhcltlKzQ+PjJdPWFyWzI1MjZdLGhiKDB8KGI9ZSs4fDApLDB8bCwwfGYpLHRyW2IrZj4+MF09MCxhcltlKzI0Pj4yXT1hclsxNDU0M10sYXJbMTQ1NDNdPWUpLFQoNTgxNzYpLGU9MD09KDB8QSkmMD09KDB8ZSk/MTAxMDA6ZX1lbHNlIGU9bCx1PTE4fXdoaWxlKDApO2Rve2lmKDE4PT0oMHx1KSl7aWYoMD09KDB8QSkmJjQ2PT0oMHx0cltlKzE+PjBdKSl7ZT0xMDEwMDticmVha31lPTB9fXdoaWxlKDApO3JldHVybiB1cj1pLDB8ZX1mdW5jdGlvbiBuZihBKXtyZXR1cm4gMTAxNDghPSgwfChBfD0wKSkmMCE9KDB8QSkmNTgxMjghPSgwfEEpJjF8MH1mdW5jdGlvbiB0ZihBLGUscixpKXtyZXR1cm4gMHwoaXw9MCl9ZnVuY3Rpb24gb2YoQSl7MHxuZihBfD0wKSYmQmMoQSl9ZnVuY3Rpb24gYWYoQSl7cmV0dXJuKChBfD0wKSstNDh8MCk+Pj4wPDEwfDB9ZnVuY3Rpb24gY2YoKXtyZXR1cm4tMX1mdW5jdGlvbiBsZihBKXtyZXR1cm4gMHwoZT1BfD0wLDEmKCgoZXw9MCktNDh8MCk+Pj4wPDEwfCgoMzJ8ZSktOTd8MCk+Pj4wPDYpfDApO3ZhciBlfWZ1bmN0aW9uIHVmKEEsZSl7QXw9MCxlfD0wO3ZhciByPTAsaT0wLGY9MCxuPTAsdD0wO2Rve2lmKC0xIT0oMHxBKSl7aWYoZj0tMTwoMHxhcltlKzc2Pj4yXSk/MHxKYygpOjAsKHI9MHxhclsobj1lKzR8MCk+PjJdKT8oaT1yLHI9MCE9KDB8ZiksdD03KTooWmkoZSkscj0wIT0oMHxmKSwoaT0wfGFyW24+PjJdKT90PTc6QT1yKSw3PT0oMHx0KSl7aWYoaT4+PjA+KCgwfGFyW2UrNDQ+PjJdKS04fDApPj4+MCl7aWYodD1pKy0xfDAsYXJbbj4+Ml09dCx0clt0Pj4wXT1BLGFyW2U+PjJdPS0xNyZhcltlPj4yXSwhcilicmVhaztNYygpO2JyZWFrfUE9cn1BPShBJiZNYygpLC0xKX1lbHNlIEE9LTF9d2hpbGUoMCk7cmV0dXJuIDB8QX1mdW5jdGlvbiBiZihBKXtzZihBfD0wKX1mdW5jdGlvbiBzZihBKXthclsoQXw9MCk+PjJdPTE0MDYwLGZ1bmN0aW9uKEEsZSl7ZXw9MDt2YXIgcixpLGY9MCxuPTA7cj0zMisoQXw9MCl8MCxpPUErMzZ8MCxmPTB8YXJbQSs0MD4+Ml07Zm9yKDtmOyluPWYrLTF8MCxuc1sxMjcmYXJbKDB8YXJbcj4+Ml0pKyhuPDwyKT4+Ml1dKGUsQSwwfGFyWygwfGFyW2k+PjJdKSsobjw8Mik+PjJdKSxmPW59KEEsMCksYm4oQSsyOHwwKSxCYygwfGFyW0ErMzI+PjJdKSxCYygwfGFyW0ErMzY+PjJdKSxCYygwfGFyW0ErNDg+PjJdKSxCYygwfGFyW0ErNjA+PjJdKX1mdW5jdGlvbiBkZihBKXtzZihBfD0wKX1mdW5jdGlvbiBrZihBKXthclsoQXw9MCk+PjJdPTE0MDc2LGJuKEErNHwwKX1mdW5jdGlvbiBoZihBKXtyZXR1cm4gMjU1JihBfD0wKXwwfWZ1bmN0aW9uIHdmKEEsZSxyKXtyZXR1cm4gQXw9MCxlfD0wLDB8KHJ8PTApJiZoYigwfEEsMHxlLDB8ciksMHxBfWZ1bmN0aW9uIHZmKEEpe3JldHVybiAyNTUmKEF8PTApfDB9ZnVuY3Rpb24gbWYoQSl7YXJbKEF8PTApPj4yXT0xNDE0MCxibihBKzR8MCl9ZnVuY3Rpb24gZ2YoQSl7cmV0dXJuIDB8KEF8PTApfWZ1bmN0aW9uIFpmKEEsZSxyKXtyZXR1cm4gQXw9MCxlfD0wLChyfD0wKSYmZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MDt2YXIgaT0wO2lmKDB8KHJ8PTApKWZvcihpPUE7cj1yKy0xfDAsYXJbaT4+Ml09YXJbZT4+Ml0scjspZT1lKzR8MCxpPWkrNHwwfShBLGUsciksMHxBfWZ1bmN0aW9uIHBmKEEpe3JldHVybiAwfChBfD0wKX1mdW5jdGlvbiB5ZihBKXtFZihBfD0wKSxiZihBKzh8MCl9ZnVuY3Rpb24gQmYoQSl7eWYoQXw9MCksdnUoQSl9ZnVuY3Rpb24gRWYoKXt9ZnVuY3Rpb24gWGYoQSl7ZGYoKEF8PTApKzh8MCl9ZnVuY3Rpb24gV2YoQSl7WGYoQXw9MCksdnUoQSl9ZnVuY3Rpb24gSWYoQSl7R2YoQXw9MCksYmYoQSs0fDApfWZ1bmN0aW9uIENmKEEpe0lmKEF8PTApLHZ1KEEpfWZ1bmN0aW9uIEdmKCl7fWZ1bmN0aW9uIFZmKEEpe2RmKChBfD0wKSs0fDApfWZ1bmN0aW9uIEZmKEEpe1ZmKEF8PTApLHZ1KEEpfWZ1bmN0aW9uIFJmKEEpe19mKEF8PTApLGJmKEErMTJ8MCl9ZnVuY3Rpb24gTmYoQSl7UmYoQXw9MCksdnUoQSl9ZnVuY3Rpb24gX2YoKXt9ZnVuY3Rpb24gWWYoQSl7cmV0dXJuIDB8VmMoQXw9MCl9ZnVuY3Rpb24gUWYoQSxlKXtlfD0wLHRyWyhBfD0wKT4+MF09MHx0cltlPj4wXX1mdW5jdGlvbiBEZihBLGUpe2V8PTAsYXJbKEF8PTApKzE2Pj4yXT0wPT0oMHxhcltBKzI0Pj4yXSl8ZX1mdW5jdGlvbiBKZihBLGUpe2V8PTA7dmFyIHI7Zm9yKGFyWyhBfD0wKSsyND4+Ml09ZSxhcltBKzE2Pj4yXT0wPT0oMHxlKSYxLGFyW0ErMjA+PjJdPTAsYXJbQSs0Pj4yXT00MDk4LGFyW0ErMTI+PjJdPTAsYXJbQSs4Pj4yXT02LHI9QSsyOHwwLEE9KGU9QSszMnwwKSs0MHwwOygwfChlPWUrNHwoYXJbZT4+Ml09MCkpKTwoMHxBKTspO2Z1KHIpfWZ1bmN0aW9uIE1mKEEsZSl7cmV0dXJuKDB8KEF8PTApKT09KDB8KGV8PTApKXwwfWZ1bmN0aW9uIFRmKEEsZSl7cnUoQXw9MCwoZXw9MCkrMjh8MCl9ZnVuY3Rpb24gVWYoQSxlKXtyZXR1cm4oMHwoQXw9MCkpPT0oMHwoZXw9MCkpfDB9ZnVuY3Rpb24gU2YoQSl7YXJbKEF8PTApPj4yXT0xNDA3NixmdShBKzR8MCksYXJbKEE9QSs4fDApPj4yXT0wLGFyW0ErND4+Ml09MCxhcltBKzg+PjJdPTAsYXJbQSsxMj4+Ml09MCxhcltBKzE2Pj4yXT0wLGFyW0ErMjA+PjJdPTB9ZnVuY3Rpb24gT2YoQSl7YXJbKEF8PTApPj4yXT0xNDE0MCxmdShBKzR8MCksYXJbKEE9QSs4fDApPj4yXT0wLGFyW0ErND4+Ml09MCxhcltBKzg+PjJdPTAsYXJbQSsxMj4+Ml09MCxhcltBKzE2Pj4yXT0wLGFyW0ErMjA+PjJdPTB9ZnVuY3Rpb24gemYoQSxlKXt2YXIgcixpLGYsbjtlfD0wLHRyWyhBfD0wKT4+MF09MCxlPShhcltBKzQ+PjJdPWUpKygwfGFyWygwfGFyW2U+PjJdKS0xMj4+Ml0pfDAsMHxhcltlKzE2Pj4yXXx8KDB8KGU9MHxhcltlKzcyPj4yXSkmJihyPWUsaT11cj0oZj11cikrMzEmLTMyLHVyPXVyKzE2fChuPTApLDB8YXJbKHJ8PTApKygwfGFyWygwfGFyW3I+PjJdKS0xMj4+Ml0pKzI0Pj4yXSYmKHpmKGksciksMHx0cltpPj4wXSYmKG49MHxhcltyKygwfGFyWygwfGFyW3I+PjJdKS0xMj4+Ml0pKzI0Pj4yXSwtMT09KDB8amJbMTI3JmFyWzI0KygwfGFyW24+PjJdKT4+Ml1dKG4pKSkmJkRmKG49cisoMHxhclsoMHxhcltyPj4yXSktMTI+PjJdKXwwLDF8YXJbbisxNj4+Ml0pLGpmKGkpKSx1cj1mKSx0cltBPj4wXT0xKX1mdW5jdGlvbiBqZihBKXt2YXIgZT0wO2U9KGU9MHxhclsoQT0oQXw9MCkrNHwwKT4+Ml0pKygwfGFyWygwfGFyW2U+PjJdKS0xMj4+Ml0pfDAsMHxhcltlKzI0Pj4yXSYmMD09KDB8YXJbZSsxNj4+Ml0pJiY4MTkyJmFyW2UrND4+Ml18MCYmISgwfEUoKSkmJihlPTB8YXJbQT4+Ml0sZT0wfGFyW2UrKDB8YXJbKDB8YXJbZT4+Ml0pLTEyPj4yXSkrMjQ+PjJdLC0xPT0oMHxqYlsxMjcmYXJbMjQrKDB8YXJbZT4+Ml0pPj4yXV0oZSkpKSYmRGYoZT0oZT0wfGFyW0E+PjJdKSsoMHxhclsoMHxhcltlPj4yXSktMTI+PjJdKXwwLDF8YXJbZSsxNj4+Ml0pfWZ1bmN0aW9uIEhmKEEsZSl7ZXw9MDt2YXIgcixpLGYsbix0PTAsbz0wLGE9MCxjPTAsbD0wO3JldHVybiBmPXVyPShuPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxyPTEyK2Z8MCxpPTgrZnwwLHpmKGYsQXw9MCksMHx0cltmPj4wXSYmKFRmKHIsQSsoMHxhclsoMHxhcltBPj4yXSktMTI+PjJdKXwwKSxvPTB8dW4ociw1OTI4OCksYm4ociksYT1BKygwfGFyWygwfGFyW0E+PjJdKS0xMj4+Ml0pfDAsYz0wfGFyW2ErMjQ+PjJdLHQ9MHxNZihsPS0xLDB8YXJbKHQ9YSs3NnwwKT4+Ml0pPyhUZihyLGEpLGw9MHx1bihyLDU5MjMyKSxsPTB8SGJbMzEmYXJbMjgrKDB8YXJbbD4+Ml0pPj4yXV0obCwzMiksYm4ociksbD1sPDwyND4+MjQsYXJbdD4+Ml09bCk6MHxhclt0Pj4yXSxsPTB8YXJbMTIrKDB8YXJbbz4+Ml0pPj4yXSxhcltpPj4yXT1jLGFyW3I+PjJdPWFyW2k+PjJdLDB8S2JbMzEmbF0obyxyLGEsMjU1JnQsZSl8fERmKGw9QSsoMHxhclsoMHxhcltBPj4yXSktMTI+PjJdKXwwLDV8YXJbbCsxNj4+Ml0pKSxqZihmKSx1cj1uLDB8QX1mdW5jdGlvbiB4ZihBLGUpe2V8PTA7dmFyIHIsaSxmLG4sdD0wLG89MCxhPTAsYz0wLGw9MDtyZXR1cm4gZj11cj0obj11cikrMzEmLTMyLHVyPXVyKzE2fDAscj0xMitmfDAsaT04K2Z8MCx6ZihmLEF8PTApLDB8dHJbZj4+MF0mJihUZihyLEErKDB8YXJbKDB8YXJbQT4+Ml0pLTEyPj4yXSl8MCksbz0wfHVuKHIsNTkyODgpLGJuKHIpLGE9QSsoMHxhclsoMHxhcltBPj4yXSktMTI+PjJdKXwwLGM9MHxhclthKzI0Pj4yXSx0PTB8TWYobD0tMSwwfGFyWyh0PWErNzZ8MCk+PjJdKT8oVGYocixhKSxsPTB8dW4ociw1OTIzMiksbD0wfEhiWzMxJmFyWzI4KygwfGFyW2w+PjJdKT4+Ml1dKGwsMzIpLGJuKHIpLGw9bDw8MjQ+PjI0LGFyW3Q+PjJdPWwpOjB8YXJbdD4+Ml0sbD0wfGFyWzI0KygwfGFyW28+PjJdKT4+Ml0sYXJbaT4+Ml09YyxhcltyPj4yXT1hcltpPj4yXSwwfEtiWzMxJmxdKG8scixhLDI1NSZ0LDY1NTM1JmUpfHxEZihsPUErKDB8YXJbKDB8YXJbQT4+Ml0pLTEyPj4yXSl8MCw1fGFyW2wrMTY+PjJdKSksamYoZiksdXI9biwwfEF9ZnVuY3Rpb24gUGYoQSxlKXtlfD0wO3ZhciByLGksZixuLHQ9MCxvPTAsYT0wLGM9MCxsPTA7cmV0dXJuIGY9dXI9KG49dXIpKzMxJi0zMix1cj11cisxNnwwLHI9MTIrZnwwLGk9OCtmfDAsemYoZixBfD0wKSwwfHRyW2Y+PjBdJiYoVGYocixBKygwfGFyWygwfGFyW0E+PjJdKS0xMj4+Ml0pfDApLG89MHx1bihyLDU5Mjg4KSxibihyKSxhPUErKDB8YXJbKDB8YXJbQT4+Ml0pLTEyPj4yXSl8MCxjPTB8YXJbYSsyND4+Ml0sdD0wfE1mKGw9LTEsMHxhclsodD1hKzc2fDApPj4yXSk/KFRmKHIsYSksbD0wfHVuKHIsNTkyMzIpLGw9MHxIYlszMSZhclsyOCsoMHxhcltsPj4yXSk+PjJdXShsLDMyKSxibihyKSxsPWw8PDI0Pj4yNCxhclt0Pj4yXT1sKTowfGFyW3Q+PjJdLGw9MHxhclsxNisoMHxhcltvPj4yXSk+PjJdLGFyW2k+PjJdPWMsYXJbcj4+Ml09YXJbaT4+Ml0sMHxLYlszMSZsXShvLHIsYSwyNTUmdCxlKXx8RGYobD1BKygwfGFyWygwfGFyW0E+PjJdKS0xMj4+Ml0pfDAsNXxhcltsKzE2Pj4yXSkpLGpmKGYpLHVyPW4sMHxBfWZ1bmN0aW9uIExmKEEsZSl7ZXw9MDt2YXIgcixpLGYsbix0PTAsbz0wLGE9MCxjPTAsbD0wO3JldHVybiBmPXVyPShuPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxyPTEyK2Z8MCxpPTgrZnwwLHpmKGYsQXw9MCksMHx0cltmPj4wXSYmKFRmKHIsQSsoMHxhclsoMHxhcltBPj4yXSktMTI+PjJdKXwwKSxvPTB8dW4ociw1OTI4OCksYm4ociksYT1BKygwfGFyWygwfGFyW0E+PjJdKS0xMj4+Ml0pfDAsYz0wfGFyW2ErMjQ+PjJdLHQ9MHxNZihsPS0xLDB8YXJbKHQ9YSs3NnwwKT4+Ml0pPyhUZihyLGEpLGw9MHx1bihyLDU5MjMyKSxsPTB8SGJbMzEmYXJbMjgrKDB8YXJbbD4+Ml0pPj4yXV0obCwzMiksYm4ociksbD1sPDwyND4+MjQsYXJbdD4+Ml09bCk6MHxhclt0Pj4yXSxsPTB8YXJbMjQrKDB8YXJbbz4+Ml0pPj4yXSxhcltpPj4yXT1jLGFyW3I+PjJdPWFyW2k+PjJdLDB8S2JbMzEmbF0obyxyLGEsMjU1JnQsZSl8fERmKGw9QSsoMHxhclsoMHxhcltBPj4yXSktMTI+PjJdKXwwLDV8YXJbbCsxNj4+Ml0pKSxqZihmKSx1cj1uLDB8QX1mdW5jdGlvbiBLZihBLGUscil7ZXw9MCxyfD0wO3ZhciBpLGYsbix0LG89MCxhPTAsYz0wLGw9MCx1PTA7cmV0dXJuIG49dXI9KHQ9dXIpKzMxJi0zMix1cj11cisxNnwwLGk9MTIrbnwwLGY9OCtufDAsemYobixBfD0wKSwwfHRyW24+PjBdJiYoVGYoaSxBKygwfGFyWygwfGFyW0E+PjJdKS0xMj4+Ml0pfDApLGE9MHx1bihpLDU5Mjg4KSxibihpKSxjPUErKDB8YXJbKDB8YXJbQT4+Ml0pLTEyPj4yXSl8MCxsPTB8YXJbYysyND4+Ml0sbz0wfE1mKHU9LTEsMHxhclsobz1jKzc2fDApPj4yXSk/KFRmKGksYyksdT0wfHVuKGksNTkyMzIpLHU9MHxIYlszMSZhclsyOCsoMHxhclt1Pj4yXSk+PjJdXSh1LDMyKSxibihpKSx1PXU8PDI0Pj4yNCxhcltvPj4yXT11KTowfGFyW28+PjJdLHU9MHxhclsyOCsoMHxhclthPj4yXSk+PjJdLGFyW2Y+PjJdPWwsYXJbaT4+Ml09YXJbZj4+Ml0sMHwkYls2MyZ1XShhLGksYywyNTUmbyxlLHIpfHxEZih1PUErKDB8YXJbKDB8YXJbQT4+Ml0pLTEyPj4yXSl8MCw1fGFyW3UrMTY+PjJdKSksamYobiksdXI9dCwwfEF9ZnVuY3Rpb24gcWYoQSxlLHIpe2V8PTAscnw9MDt2YXIgaSxmO2Y9dXI9KGk9dXIpKzMxJi0zMix1cj11cisxNnwwLFNmKEF8PTApLGFyW0E+PjJdPTE0NTA4LGFyW0ErMzI+PjJdPWUscnUoZixBKzR8MCksZT0wfHVuKGYsNjEwMjQpLGJuKGYpLGFyW0ErMzY+PjJdPWUsYXJbQSs0MD4+Ml09cixyPTEmKDB8amJbMTI3JmFyWzI4KygwfGFyW2U+PjJdKT4+Ml1dKGUpKSx0cltBKzQ0Pj4wXT1yLHVyPWl9ZnVuY3Rpb24gJGYoQSxlLHIpe2V8PTAscnw9MDt2YXIgaSxmO2Y9dXI9KGk9dXIpKzMxJi0zMix1cj11cisxNnwwLE9mKEF8PTApLGFyW0E+PjJdPTE0NDQ0LGFyW0ErMzI+PjJdPWUscnUoZixBKzR8MCksZT0wfHVuKGYsNjEwMzIpLGJuKGYpLGFyW0ErMzY+PjJdPWUsYXJbQSs0MD4+Ml09cixyPTEmKDB8amJbMTI3JmFyWzI4KygwfGFyW2U+PjJdKT4+Ml1dKGUpKSx0cltBKzQ0Pj4wXT1yLHVyPWl9ZnVuY3Rpb24gQW4oQSl7bWYoQXw9MCl9ZnVuY3Rpb24gZW4oQSl7a2YoQXw9MCl9ZnVuY3Rpb24gcm4oQSl7bWYoQXw9MCl9ZnVuY3Rpb24gZm4oQSxlKXtlfD0wO3ZhciByLGksZixuLHQsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wLGQ9MCxrPTAsaD0wLHc9MDtpZihpPXVyPSh0PXVyKSszMSYtMzIsdXI9dXIrMzJ8MCxmPTE2K2l8MCxrPTgraXwwLHI9NCtpfDAsbj0oQXw9MCkrNDh8MCwwfHRyWyhhPUErNTJ8MCk+PjBdKW89MHxhcltuPj4yXSxlJiYoaz0tMSxhcltuPj4yXT1rLHRyW2E+PjBdPTApO2Vsc2V7Zm9yKG89MTwoMHwobz0wfGFyW0ErNDQ+PjJdKSk/bzoxLGQ9QSszMnwwLGE9MDs7KXtpZigoMHxvKTw9KDB8YSkpe3M9OTticmVha31pZigtMT09KDB8KGM9MHxXaSgwfGFyW2Q+PjJdKSkpKXtzPTg7YnJlYWt9dHJbZithPj4wXT1jLGE9YSsxfDB9aWYoOD09KDB8cykpbz0tMTtlbHNlIGlmKDk9PSgwfHMpKXtkb3tpZigwfHRyW0ErNTM+PjBdKWFyW2s+PjJdPXRyW2Y+PjBdLHM9MTk7ZWxzZXtiPUErNDB8MCxsPUErMzZ8MCx1PWsrNHwwO0E6Zm9yKDs7KXtzd2l0Y2goaD0wfGFyW2I+PjJdLGE9MHxhclsoYz1oKT4+Ml0sYz0wfGFyW2MrND4+Ml0sdz0wfGFyW2w+PjJdLEE9ZitvfDAsMHxlc1sxNSZhclsxNisoMHxhclt3Pj4yXSk+PjJdXSh3LGgsZixBLHIsayx1LGkpKXtjYXNlIDM6cz0xNjticmVhayBBO2Nhc2UgMjpzPTE4O2JyZWFrIEE7Y2FzZSAxOmJyZWFrO2RlZmF1bHQ6YnJlYWsgQX1pZih3PTB8YXJbYj4+Ml0sYXJbdz4+Ml09YSxhclt3KzQ+PjJdPWMsOD09KDB8bykpe3M9MTg7YnJlYWt9aWYoLTE9PSgwfChhPTB8V2koMHxhcltkPj4yXSkpKSl7cz0xODticmVha310cltBPj4wXT1hLG89bysxfDB9aWYoMTY9PSgwfHMpKWFyW2s+PjJdPXRyW2Y+PjBdO2Vsc2UgaWYoMTg9PSgwfHMpKXtvPS0xO2JyZWFrfXM9MTl9fXdoaWxlKDApO0E6ZG97aWYoMTk9PSgwfHMpKXtlOmRve2lmKCFlKXtkb3tpZigoMHxvKTw9MClicmVhayBlO3c9MHxnZigwfHRyW2YrKG89bystMXwwKT4+MF0pfXdoaWxlKC0xIT0oMHx1Zih3LDB8YXJbZD4+Ml0pKSk7bz0tMTticmVhayBBfXc9MHxnZigwfGFyW2s+PjJdKSxhcltuPj4yXT13fXdoaWxlKDApO289MHxnZigwfGFyW2s+PjJdKX19d2hpbGUoMCl9fXJldHVybiB1cj10LDB8b31mdW5jdGlvbiBubihBKXtrZihBfD0wKX1mdW5jdGlvbiB0bihBLGUpe2V8PTA7dmFyIHIsaSxmLG4sdCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTAsZD0wLGs9MCxoPTAsdz0wO2lmKGk9dXI9KHQ9dXIpKzMxJi0zMix1cj11ciszMnwwLGY9MTYraXwwLGs9OCtpfDAscj00K2l8MCxuPShBfD0wKSs0OHwwLDB8dHJbKGE9QSs1MnwwKT4+MF0pbz0wfGFyW24+PjJdLGUmJihrPS0xLGFyW24+PjJdPWssdHJbYT4+MF09MCk7ZWxzZXtmb3Iobz0xPCgwfChvPTB8YXJbQSs0ND4+Ml0pKT9vOjEsZD1BKzMyfDAsYT0wOzspe2lmKCgwfG8pPD0oMHxhKSl7cz05O2JyZWFrfWlmKC0xPT0oMHwoYz0wfFdpKDB8YXJbZD4+Ml0pKSkpe3M9ODticmVha310cltmK2E+PjBdPWMsYT1hKzF8MH1pZig4PT0oMHxzKSlvPS0xO2Vsc2UgaWYoOT09KDB8cykpe2Rve2lmKDB8dHJbQSs1Mz4+MF0pdHJbaz4+MF09MHx0cltmPj4wXSxzPTE5O2Vsc2V7Yj1BKzQwfDAsbD1BKzM2fDAsdT1rKzF8MDtBOmZvcig7Oyl7c3dpdGNoKGg9MHxhcltiPj4yXSxhPTB8YXJbKGM9aCk+PjJdLGM9MHxhcltjKzQ+PjJdLHc9MHxhcltsPj4yXSxBPWYrb3wwLDB8ZXNbMTUmYXJbMTYrKDB8YXJbdz4+Ml0pPj4yXV0odyxoLGYsQSxyLGssdSxpKSl7Y2FzZSAzOnM9MTY7YnJlYWsgQTtjYXNlIDI6cz0xODticmVhayBBO2Nhc2UgMTpicmVhaztkZWZhdWx0OmJyZWFrIEF9aWYodz0wfGFyW2I+PjJdLGFyW3c+PjJdPWEsYXJbdys0Pj4yXT1jLDg9PSgwfG8pKXtzPTE4O2JyZWFrfWlmKC0xPT0oMHwoYT0wfFdpKDB8YXJbZD4+Ml0pKSkpe3M9MTg7YnJlYWt9dHJbQT4+MF09YSxvPW8rMXwwfWlmKDE2PT0oMHxzKSl0cltrPj4wXT0wfHRyW2Y+PjBdO2Vsc2UgaWYoMTg9PSgwfHMpKXtvPS0xO2JyZWFrfXM9MTl9fXdoaWxlKDApO0E6ZG97aWYoMTk9PSgwfHMpKXtlOmRve2lmKCFlKXtkb3tpZigoMHxvKTw9MClicmVhayBlO3c9MHxoZigwfHRyW2YrKG89bystMXwwKT4+MF0pfXdoaWxlKC0xIT0oMHx1Zih3LDB8YXJbZD4+Ml0pKSk7bz0tMTticmVhayBBfXc9MHxoZigwfHRyW2s+PjBdKSxhcltuPj4yXT13fXdoaWxlKDApO289MHxoZigwfHRyW2s+PjBdKX19d2hpbGUoMCl9fXJldHVybiB1cj10LDB8b31mdW5jdGlvbiBvbihBKXthbihBfD0wKX1mdW5jdGlvbiBhbihBKXswfWZ1bmN0aW9uIGNuKEEpe2FuKCl9ZnVuY3Rpb24gbG4oQSxlKXtlfD0wLGFyWyhBfD0wKT4+Ml09YXJbZT4+Ml19ZnVuY3Rpb24gdW4oQSxlKXtyZXR1cm4gZXw9MCxBPTB8YXJbKEF8PTApPj4yXSwwfChyPUEsaT0wfGhuKGUpLGl8PTAsMHxhclsoMHxhcls4KyhyfD0wKT4+Ml0pKyhpPDwyKT4+Ml0pO3ZhciByLGl9ZnVuY3Rpb24gYm4oQSl7bHUoMHxhclsoQXw9MCk+PjJdKX1mdW5jdGlvbiBzbihBLGUscixpLGYsbix0LG8sYSxjKXtBfD0wLGV8PTAscnw9MCxmfD0wLG58PTAsdHw9MCxvfD0wLGF8PTAsY3w9MDt2YXIgbCx1LGI9MCxzPTA7dT0oMHwobD0wfGFyWyhpfD0wKT4+Ml0pKT09KDB8cik7ZG97aWYodSl7aWYoIShiPSgwfHRyW2MrMjQ+PjBdKT09QTw8MjQ+PjI0KSYmKDB8dHJbYysyNT4+MF0pIT1BPDwyND4+MjQpe3M9NTticmVha31hcltpPj4yXT1yKzEsdHJbcj4+MF09Yj80Mzo0NSxiPWFyW2Y+PjJdPTB9ZWxzZSBzPTV9d2hpbGUoMCk7QTpkb3tpZig1PT0oMHxzKSl7aWYocz0wfHRyW3QrMTE+PjBdLEE8PDI0Pj4yND09bjw8MjQ+PjI0JiYwIT0oMHwoczw8MjQ+PjI0PDA/MHxhclt0KzQ+PjJdOjI1NSZzKSkpe2lmKDE2MDw9KChiPTB8YXJbYT4+Ml0pLW98MCkpe2I9MDticmVha31pPTB8YXJbZj4+Ml0sYXJbYT4+Ml09Yis0LGFyW2I+PjJdPWksYj1hcltmPj4yXT0wO2JyZWFrfWZvcih0PWMrMjZ8MCxuPTA7Oyl7aWYoYj1jK258MCwyNj09KDB8bikpe2I9dDticmVha31pZigoMHx0cltiPj4wXSk9PUE8PDI0Pj4yNClicmVhaztuPW4rMXwwfWlmKDIzPCgwfChiPWItY3wwKSkpYj0tMTtlbHNle3N3aXRjaChuPTUzNjQ4K2J8MCwwfGUpe2Nhc2UgMTA6Y2FzZSA4OmlmKCgwfGUpPD0oMHxiKSl7Yj0tMTticmVhayBBfWJyZWFrO2Nhc2UgMTY6aWYoMjI8PSgwfGIpKXtpZih1KXtiPS0xO2JyZWFrIEF9aWYoMzw9KGwtcnwwKSl7Yj0tMTticmVhayBBfWlmKDQ4IT0oMHx0cltsLTE+PjBdKSl7Yj0tMTticmVhayBBfWI9KGFyW2Y+PjJdPTApfHRyW24+PjBdLGFyW2k+PjJdPTErbCx0cltsPj4wXT1iLGI9MDticmVhayBBfX1iPTB8dHJbbj4+MF0sYXJbaT4+Ml09MStsLHRyW2w+PjBdPWIsYXJbZj4+Ml09MSsoMHxhcltmPj4yXSksYj0wfX19d2hpbGUoMCk7cmV0dXJuIDB8Yn1mdW5jdGlvbiBkbigpe3ZhciBBPTA7cmV0dXJuIDA9PSgwfHRyWzU2NjI0XSkmJjB8aWIoNTY2MjQpJiYoQT0wfGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTAscnw9MDt2YXIgaSxmLG49MCx0PTAsbz0wLGE9MDtpPXVyPShmPXVyKSszMSYtMzIsdXI9dXIrMzJ8MDtBOmRve2lmKDB8bmYocikpZm9yKG49MDsxPDxuJkF8MCYmKGE9MHxmZihuLGUpLGFyW3IrKG48PDIpPj4yXT1hKSw2IT0oMHwobj1uKzF8MCkpOyk7ZWxzZXtmb3IoYT0wPT0oMHxyKSxvPXQ9MDt0PSgwIT0oMHwobj1hfChuPTAhPSgxPDxvJkF8MCkpPzB8ZmYobyxuP2U6Nzk2NTkpOjB8YXJbcisobzw8Mik+PjJdKSkmMSkrdHwwLGFyW2krKG88PDIpPj4yXT1uLDYhPSgwfChvPW8rMXwwKSk7KTtzd2l0Y2goMHx0KXtjYXNlIDA6cj01ODEyODticmVhayBBO2Nhc2UgMTppZigxMDEwMCE9KDB8YXJbaT4+Ml0pKWJyZWFrO3I9MTAxNDg7YnJlYWsgQX19fXdoaWxlKDApO3JldHVybiB1cj1mLDB8cn0oMjE0NzQ4MzY0Nyw1MzY4NCwwKSxhclsxNDgxMF09QSksMHxhclsxNDgxMF19ZnVuY3Rpb24ga24oQSxlLHIsaSl7QXw9MCxlfD0wLHJ8PTAsaXw9MDt2YXIgZixuO3JldHVybiBuPXVyPShmPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxhcltuPj4yXT1pLGk9MHxyZihlKSxlPTB8SGkoQSxyLG4pLDB8aSYmcmYoaSksdXI9ZiwwfGV9ZnVuY3Rpb24gaG4oQSl7QXw9MDt2YXIgZSxyLGksZixuPTA7cmV0dXJuIG49dXI9KGY9dXIpKzMxJi0zMix1cj11cis0OHwwLGU9biszMnwwLHI9bisyNHwwLGFyWyhuPShpPW4pKzE2fDApPj4yXT00NDIsYXJbbis0Pj4yXT0wLGFyW2U+PjJdPWFyW24+PjJdLGFyWzQrZT4+Ml09YXJbbis0Pj4yXSxmdW5jdGlvbihBLGUscil7QXw9MCxyfD0wO3ZhciBpO2k9MHxhclsoZT1lfDApPj4yXSxlPTB8YXJbZSs0Pj4yXSxhcltBPj4yXT1yLGFyW0ErND4+Ml09aSxhcltBKzg+PjJdPWV9KGksZSxBKSwtMSE9KDB8YXJbQT4+Ml0pJiYoYXJbZT4+Ml09aSxhcltyPj4yXT1lLGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTAscnw9MCxnYigpO2Zvcig7MT09KDB8YXJbQT4+Ml0pOyloQSg2MTEwMCw2MTA3Mik7MHxhcltBPj4yXT9aYigpOihhcltBPj4yXT0xLFpiKCksaXNbNTExJnJdKGUpLGdiKCksYXJbQT4+Ml09LTEsWmIoKSxtYigpKX0oQSxyLDQ0MykpLHVyPWYsKDB8YXJbQSs0Pj4yXSktMXwwfWZ1bmN0aW9uIHduKEEsZSxyLGksZil7QXw9MCxyfD0wLGl8PTAsZnw9MDt2YXIgbix0O3Q9dXI9KG49dXIpKzMxJi0zMix1cj11cisxNnwwLFRmKHQsZXw9MCksZT0wfHVuKHQsNTkyMzIpLFBiWzcmYXJbMzIrKDB8YXJbZT4+Ml0pPj4yXV0oZSw1MzY0OCw1MzY4MCxyKSxyPTB8dW4odCw1OTI0OCksZT0wfGpiWzEyNyZhclsxMisoMHxhcltyPj4yXSk+PjJdXShyKSx0cltpPj4wXT1lLGk9MHxqYlsxMjcmYXJbMTYrKDB8YXJbcj4+Ml0pPj4yXV0ociksdHJbZj4+MF09aSxmc1s2MyZhclsyMCsoMHxhcltyPj4yXSk+PjJdXShBLHIpLGJuKHQpLHVyPW59ZnVuY3Rpb24gdm4oQSxlLHIsaSxmLG4sdCxvLGEsYyxsLHUpe0F8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsb3w9MCxjfD0wLGx8PTAsdXw9MDt2YXIgYixzPTAsZD0wO2I9YXw9MDtBOmRve2lmKEE8PDI0Pj4yND09bjw8MjQ+PjI0KWE9MHx0cltlPj4wXT8ocj0odHJbZT4+MF09MCl8YXJbZj4+Ml0sYXJbZj4+Ml09cisxLHRyW3I+PjBdPTQ2LDAhPSgwfCgoZj0wfHRyW28rMTE+PjBdKTw8MjQ+PjI0PDA/MHxhcltvKzQ+PjJdOjI1NSZmKSkmJigocz0wfGFyW2M+PjJdKS1ifDApPDE2MCYmKGE9MHxhcltsPj4yXSxhcltjPj4yXT1zKzQsYXJbcz4+Ml09YSksMCk6LTE7ZWxzZXtpZihBPDwyND4+MjQ9PXQ8PDI0Pj4yNCYmMHwoKHQ9MHx0cltvKzExPj4wXSk8PDI0Pj4yNDwwPzB8YXJbbys0Pj4yXToyNTUmdCkpe2lmKCEoMHx0cltlPj4wXSkpe2E9LTE7YnJlYWt9aWYoMTYwPD0oKGE9MHxhcltjPj4yXSktYnwwKSl7YT0wO2JyZWFrfWY9MHxhcltsPj4yXSxhcltjPj4yXT1hKzQsYXJbYT4+Ml09ZixhPWFyW2w+PjJdPTA7YnJlYWt9Zm9yKG49dSszMnwwLHM9MDs7KXtpZihhPXUrc3wwLDMyPT0oMHxzKSl7YT1uO2JyZWFrfWlmKCgwfHRyW2E+PjBdKT09QTw8MjQ+PjI0KWJyZWFrO3M9cysxfDB9aWYoMzE8KDB8KHM9YS11fDApKSlhPS0xO2Vsc2Ugc3dpdGNoKG49MHx0cls1MzY0OCtzPj4wXSwwfHMpe2Nhc2UgMjQ6Y2FzZSAyNTppZigoMHwoYT0wfGFyW2Y+PjJdKSkhPSgwfGkpJiYoOTUmdHJbYSstMT4+MF0pIT0oMTI3JnRyW3I+PjBdKSl7YT0tMTticmVhayBBfWFyW2Y+PjJdPWErMSx0clthPj4wXT1uLGE9MDticmVhayBBO2Nhc2UgMjM6Y2FzZSAyMjp0cltyPj4wXT04MCxhPTB8YXJbZj4+Ml0sYXJbZj4+Ml09YSsxLHRyW2E+PjBdPW4sYT0wO2JyZWFrIEE7ZGVmYXVsdDppZigoMHwoYT05NSZuKSk9PSgwfHRyW3I+PjBdKSYmKHRyW3I+PjBdPTEyOHxhLDB8dHJbZT4+MF0pJiYodHJbZT4+MF09MCl8KChyPTB8dHJbbysxMT4+MF0pPDwyND4+MjQ8MD8wfGFyW28rND4+Ml06MjU1JnIpJiYoKGQ9MHxhcltjPj4yXSktYnwwKTwxNjAmJihyPTB8YXJbbD4+Ml0sYXJbYz4+Ml09ZCs0LGFyW2Q+PjJdPXIpLGM9MHxhcltmPj4yXSxhcltmPj4yXT1jKzEsdHJbYz4+MF09biwyMTwoMHxzKSl7YT0wO2JyZWFrIEF9YXJbbD4+Ml09MSsoMHxhcltsPj4yXSksYT0wO2JyZWFrIEF9fX13aGlsZSgwKTtyZXR1cm4gMHxhfWZ1bmN0aW9uIG1uKEEsZSxyKXtyfD0wO3ZhciBpLGYsbj0wLHQ9MCxvPTA7cmV0dXJuIGk9dXI9KGY9dXIpKzMxJi0zMix1cj11cisxNnwwLCgwfChBfD0wKSk9PSgwfChlfD0wKSk/KGFyW3I+PjJdPTQsbj0wKToodD0wfGFyWyh0PTEwMzY0KT4+Ml0sYXJbMTAzNjQ+PjJdPTAsbj0rJGkoQSxpLGRuKCkpLChBPTB8YXJbKEE9MTAzNjQpPj4yXSl8fChhclsxMDM2ND4+Ml09dCksKDB8YXJbaT4+Ml0pPT0oMHxlKT8zND09KDB8QSkmJihvPTYpOihuPTAsbz02KSw2PT0oMHxvKSYmKGFyW3I+PjJdPTQpKSx1cj1mLCtufWZ1bmN0aW9uIGduKEEsZSxyLGkpe2V8PTAscnw9MCxpfD0wO3ZhciBmLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wO2Y9KGE9MHx0clsoQXw9MCkrMTE+PjBdKTw8MjQ+PjI0PDAsbj0wfGFyWyhvPUErNHwwKT4+Ml0sYSY9MjU1O2Rve2lmKDB8KGY/bjphKSl7aWYoKDB8ZSkhPSgwfHIpKXtmb3Iobj1yLHQ9ZTshKChuPW4rLTR8MCk+Pj4wPD10Pj4+MCk7KWw9MHxhclt0Pj4yXSxhclt0Pj4yXT1hcltuPj4yXSxhcltuPj4yXT1sLHQ9dCs0fDA7bj0wfGFyW28+PjJdfWZvcihyPXIrLTR8MCxBPShsPWY/MHxhcltBPj4yXTpBKSsoZj9uOmEpfDAsbj1sO289MDwodD0wfHRyW24+PjBdKTw8MjQ+PjI0JnQ8PDI0Pj4yNCE9MTI3LCEocj4+PjA8PWU+Pj4wKTspe2lmKG8mJih0PDwyND4+MjR8MCkhPSgwfGFyW2U+PjJdKSl7Yz0xMDticmVha31lPWUrNHwwLG49MTwoQS1ufDApP24rMXwwOm59aWYoMTA9PSgwfGMpKXthcltpPj4yXT00O2JyZWFrfW8mJigoMHxhcltyPj4yXSktMXwwKT4+PjA+PXQ8PDI0Pj4yND4+PjAmJihhcltpPj4yXT00KX19d2hpbGUoMCl9ZnVuY3Rpb24gWm4oQSxlLHIpe3J8PTA7dmFyIGksZixuPTAsdD0wLG89MDtyZXR1cm4gaT11cj0oZj11cikrMzEmLTMyLHVyPXVyKzE2fDAsKDB8KEF8PTApKT09KDB8KGV8PTApKT8oYXJbcj4+Ml09NCxuPTApOih0PTB8YXJbKHQ9MTAzNjQpPj4yXSxhclsxMDM2ND4+Ml09MCxuPStxaShBLGksZG4oKSksKEE9MHxhclsoQT0xMDM2NCk+PjJdKXx8KGFyWzEwMzY0Pj4yXT10KSwoMHxhcltpPj4yXSk9PSgwfGUpPzM0PT0oMHxBKSYmKG89Nik6KG49MCxvPTYpLDY9PSgwfG8pJiYoYXJbcj4+Ml09NCkpLHVyPWYsK259ZnVuY3Rpb24gcG4oQSxlLHIpe3J8PTA7dmFyIGksZixuPTAsdD0wLG89MDtyZXR1cm4gaT11cj0oZj11cikrMzEmLTMyLHVyPXVyKzE2fDAsKDB8KEF8PTApKT09KDB8KGV8PTApKT8oYXJbcj4+Ml09NCxuPTApOih0PTB8YXJbKHQ9MTAzNjQpPj4yXSxhclsxMDM2ND4+Ml09MCxuPStLaShBLGksZG4oKSksKEE9MHxhclsoQT0xMDM2NCk+PjJdKXx8KGFyWzEwMzY0Pj4yXT10KSwoMHxhcltpPj4yXSk9PSgwfGUpPzM0PT0oMHxBKSYmKG89Nik6KG49MCxvPTYpLDY9PSgwfG8pJiYoYXJbcj4+Ml09NCkpLHVyPWYsK259ZnVuY3Rpb24geW4oQSl7c3dpdGNoKDc0JmFyWyhBfD0wKSs0Pj4yXSl7Y2FzZSA2NDpBPTg7YnJlYWs7Y2FzZSA4OkE9MTY7YnJlYWs7Y2FzZSAwOkE9MDticmVhaztkZWZhdWx0OkE9MTB9cmV0dXJuIDB8QX1mdW5jdGlvbiBCbihBLGUscixpKXtBfD0wLHJ8PTAsaXw9MDt2YXIgZixuO249dXI9KGY9dXIpKzMxJi0zMix1cj11cisxNnwwLFRmKG4sZXw9MCksZT0wfHVuKG4sNTkyMzIpLFBiWzcmYXJbMzIrKDB8YXJbZT4+Ml0pPj4yXV0oZSw1MzY0OCw1MzY3NCxyKSxyPTB8dW4obiw1OTI0OCksZT0wfGpiWzEyNyZhclsxNisoMHxhcltyPj4yXSk+PjJdXShyKSx0cltpPj4wXT1lLGZzWzYzJmFyWzIwKygwfGFyW3I+PjJdKT4+Ml1dKEEsciksYm4obiksdXI9Zn1mdW5jdGlvbiBFbihBLGUscixpKXtBfD0wLGV8PTAscnw9MCxpfD0wO3ZhciBmLG4sdD0wLG89MCxhPTA7Zj11cj0obj11cikrMzEmLTMyLHVyPXVyKzE2fDA7ZG97aWYoKDB8QSk9PSgwfGUpKWFyW3I+PjJdPTQsQT1pPTA7ZWxzZXtpZig0NT09KDB8dHJbQT4+MF0pKXthcltyPj4yXT00LEE9aT0wO2JyZWFrfW89MHxhclsobz0xMDM2NCk+PjJdLEE9KGFyWyh0PTEwMzY0KT4+Ml09MCl8aWwoQSxmLGksZG4oKSksaT1ELCh0PTB8YXJbKHQ9MTAzNjQpPj4yXSl8fChhclsxMDM2ND4+Ml09byksKDB8YXJbZj4+Ml0pPT0oMHxlKT8zND09KDB8dCkmJihpPUE9LTEsYT04KTooaT1BPTAsYT04KSw4PT0oMHxhKSYmKGFyW3I+PjJdPTQpfX13aGlsZSgwKTtyZXR1cm4gRD1pLHVyPW4sMHxBfWZ1bmN0aW9uIFhuKEEsZSxyLGkpe0F8PTAsZXw9MCxyfD0wLGl8PTA7dmFyIGYsbix0PTAsbz0wO2Y9dXI9KG49dXIpKzMxJi0zMix1cj11cisxNnwwO2Rve2lmKCgwfEEpPT0oMHxlKSlhcltyPj4yXT00LEE9MDtlbHNle2lmKDQ1PT0oMHx0cltBPj4wXSkpe2FyW3I+PjJdPTQsQT0wO2JyZWFrfW89MHxhclsobz0xMDM2NCk+PjJdLEE9KGFyWyh0PTEwMzY0KT4+Ml09MCl8aWwoQSxmLGksZG4oKSksaT1ELCh0PTB8YXJbKHQ9MTAzNjQpPj4yXSl8fChhclsxMDM2ND4+Ml09byk7ZG97aWYoKDB8YXJbZj4+Ml0pPT0oMHxlKSl7aWYoMDxpPj4+MHwwPT0oMHxpKSY0Mjk0OTY3Mjk1PEE+Pj4wfDM0PT0oMHx0KSl7YXJbcj4+Ml09NCxBPS0xO2JyZWFrfWJyZWFrfWFyW3I+PjJdPTQsQT0wfXdoaWxlKDApfX13aGlsZSgwKTtyZXR1cm4gdXI9biwwfEF9ZnVuY3Rpb24gV24oQSxlLHIsaSl7QXw9MCxlfD0wLHJ8PTAsaXw9MDt2YXIgZixuLHQ9MCxvPTA7Zj11cj0obj11cikrMzEmLTMyLHVyPXVyKzE2fDA7ZG97aWYoKDB8QSk9PSgwfGUpKWFyW3I+PjJdPTQsQT0wO2Vsc2V7aWYoNDU9PSgwfHRyW0E+PjBdKSl7YXJbcj4+Ml09NCxBPTA7YnJlYWt9bz0wfGFyWyhvPTEwMzY0KT4+Ml0sQT0oYXJbKHQ9MTAzNjQpPj4yXT0wKXxpbChBLGYsaSxkbigpKSxpPUQsKHQ9MHxhclsodD0xMDM2NCk+PjJdKXx8KGFyWzEwMzY0Pj4yXT1vKTtkb3tpZigoMHxhcltmPj4yXSk9PSgwfGUpKXtpZigwPGk+Pj4wfDA9PSgwfGkpJjQyOTQ5NjcyOTU8QT4+PjB8MzQ9PSgwfHQpKXthcltyPj4yXT00LEE9LTE7YnJlYWt9YnJlYWt9YXJbcj4+Ml09NCxBPTB9d2hpbGUoMCl9fXdoaWxlKDApO3JldHVybiB1cj1uLDB8QX1mdW5jdGlvbiBJbihBLGUscixpKXtBfD0wLGV8PTAscnw9MCxpfD0wO3ZhciBmLG4sdD0wLG89MDtmPXVyPShuPXVyKSszMSYtMzIsdXI9dXIrMTZ8MDtkb3tpZigoMHxBKT09KDB8ZSkpYXJbcj4+Ml09NCxBPTA7ZWxzZXtpZig0NT09KDB8dHJbQT4+MF0pKXthcltyPj4yXT00LEE9MDticmVha31vPTB8YXJbKG89MTAzNjQpPj4yXSxBPShhclsodD0xMDM2NCk+PjJdPTApfGlsKEEsZixpLGRuKCkpLGk9RCwodD0wfGFyWyh0PTEwMzY0KT4+Ml0pfHwoYXJbMTAzNjQ+PjJdPW8pO2Rve2lmKCgwfGFyW2Y+PjJdKT09KDB8ZSkpe2lmKDA8aT4+PjB8MD09KDB8aSkmNjU1MzU8QT4+PjB8MzQ9PSgwfHQpKXthcltyPj4yXT00LEE9LTE7YnJlYWt9QSY9NjU1MzU7YnJlYWt9YXJbcj4+Ml09NCxBPTB9d2hpbGUoMCl9fXdoaWxlKDApO3JldHVybiB1cj1uLDB8QX1mdW5jdGlvbiBDbihBLGUscixpKXtyfD0wLGl8PTA7dmFyIGYsbix0PTAsbz0wO3JldHVybiBmPXVyPShuPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCwoMHwoQXw9MCkpPT0oMHwoZXw9MCkpPyhhcltyPj4yXT00LEE9aT0wKToobz0wfGFyWyhvPTEwMzY0KT4+Ml0sQT0oYXJbKHQ9MTAzNjQpPj4yXT0wKXxwaShBLGYsaSxkbigpKSxpPUQsKHQ9MHxhclsodD0xMDM2NCk+PjJdKXx8KGFyWzEwMzY0Pj4yXT1vKSwoMHxhcltmPj4yXSk9PSgwfGUpPzM0PT0oMHx0KSYmKGFyW3I+PjJdPTQsQT0oaT0wPCgwfGkpfDA9PSgwfGkpJjA8QT4+PjApPy0xOjAsaT1pPzIxNDc0ODM2NDc6LTIxNDc0ODM2NDgpOihhcltyPj4yXT00LGk9QT0wKSksRD1pLHVyPW4sMHxBfWZ1bmN0aW9uIEduKEEsZSxyLGkpe3J8PTAsaXw9MDt2YXIgZixuLHQ9MCxvPTA7aWYoZj11cj0obj11cikrMzEmLTMyLHVyPXVyKzE2fDAsKDB8KEF8PTApKT09KDB8KGV8PTApKSlhcltyPj4yXT00LEE9MDtlbHNle289MHxhclsobz0xMDM2NCk+PjJdLEE9KGFyWyh0PTEwMzY0KT4+Ml09MCl8cGkoQSxmLGksZG4oKSksaT1ELCh0PTB8YXJbKHQ9MTAzNjQpPj4yXSl8fChhclsxMDM2ND4+Ml09byk7QTpkb3tpZigoMHxhcltmPj4yXSk9PSgwfGUpKXtkb3tpZigzNCE9KDB8dCkpe2lmKCgwfGkpPC0xfC0xPT0oMHxpKSZBPj4+MDwyMTQ3NDgzNjQ4KXthcltyPj4yXT00O2JyZWFrfWlmKDA8KDB8aSl8MD09KDB8aSkmMjE0NzQ4MzY0NzxBPj4+MCl7YXJbcj4+Ml09NCxBPTIxNDc0ODM2NDc7YnJlYWsgQX1icmVhayBBfWlmKGFyW3I+PjJdPTQsMDwoMHxpKXwwPT0oMHxpKSYwPEE+Pj4wKXtBPTIxNDc0ODM2NDc7YnJlYWsgQX19d2hpbGUoMCk7QT0tMjE0NzQ4MzY0OH1lbHNlIGFyW3I+PjJdPTQsQT0wfXdoaWxlKDApfXJldHVybiB1cj1uLDB8QX1mdW5jdGlvbiBWbihBLGUscixpLGYsbix0KXtBfD0wLGV8PTAsZnw9MCxufD0wLHR8PTA7dmFyIG8sYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTAsZD0wLGs9MCxoPTAsdz0wLHY9MCxtPTAsZz0wLFo9MDtmb3IoYz11cj0obz11cikrMzEmLTMyLHVyPXVyKzExMnwwLDEwMDwobD0oKGl8PTApLShyfD0wKXwwKS8xMnwwKT4+PjA/KGM9MHx5YyhsKSk/Zz1hPWM6Z3UoKTooYT1jLGc9MCksYj1yLHM9YSxjPTA7KDB8YikhPSgwfGkpOykodT0wfHRyW2IrMTE+PjBdKTw8MjQ+PjI0PDA/dT0wfGFyW2IrND4+Ml06dSY9MjU1LHU/dHJbcz4+MF09MToodHJbcz4+MF09MixsPWwrLTF8MCxjPWMrMXwwKSxiPWIrMTJ8MCxzPXMrMXwwO209MCx3PWM7QTpmb3IoOzspe2M9MHxhcltBPj4yXTtkb3tpZihjKXtpZigwfE1mKGM9KDB8KHU9MHxhcltjKzEyPj4yXSkpPT0oMHxhcltjKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbYz4+Ml0pPj4yXV0oYyk6MHxoZigwfHRyW3U+PjBdKSwtMSkpe2FyW0E+PjJdPTAscz0xO2JyZWFrfXM9MD09KDB8YXJbQT4+Ml0pO2JyZWFrfXM9MX13aGlsZSgwKTtpZihjPSh1PTB8YXJbZT4+Ml0pPzB8TWYoYz0oMHwoYz0wfGFyW3UrMTI+PjJdKSk9PSgwfGFyW3UrMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt1Pj4yXSk+PjJdXSh1KTowfGhmKDB8dHJbYz4+MF0pLC0xKT8odT1hcltlPj4yXT0wLDEpOjA6KHU9MCwxKSxiPTB8YXJbQT4+Ml0sISgwIT0oMHxsKSYoc15jKSkpYnJlYWs7Zm9yKGM9KDB8KGM9MHxhcltiKzEyPj4yXSkpPT0oMHxhcltiKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbYj4+Ml0pPj4yXV0oYik6MHxoZigwfHRyW2M+PjBdKSxjJj0yNTUsdHx8KGM9MHxIYlszMSZhclsxMisoMHxhcltmPj4yXSk+PjJdXShmLGMpKSx2PW0rMXwwLGs9cixkPTAsaD1hOygwfGspIT0oMHxpKTspe2Rve2lmKDE9PSgwfHRyW2g+PjBdKSl7aWYodT0oMHx0clsoYj1rKzExfDApPj4wXSk8MD8wfGFyW2s+PjJdOmssdT0wfHRyW3UrbT4+MF0sdHx8KHU9MHxIYlszMSZhclsxMisoMHxhcltmPj4yXSk+PjJdXShmLHUpKSxzPWwrLTF8MCxjPDwyND4+MjQhPXU8PDI0Pj4yNCl7dHJbaD4+MF09MCx1PWQsYj13LGw9czticmVha30odT0wfHRyW2I+PjBdKTw8MjQ+PjI0PDA/dT0wfGFyW2srND4+Ml06dSY9MjU1LCgwfHUpPT0oMHx2KT8odHJbaD4+MF09MixiPXcrKHU9MSl8MCxsPXMpOih1PTEsYj13KX1lbHNlIHU9ZCxiPXd9d2hpbGUoMCk7az1rKzEyfDAsZD11LGg9aCsxfDAsdz1ifWlmKGQpaWYoYz0wfGFyW0E+PjJdLCgwfChiPTB8YXJbKHU9YysxMnwwKT4+Ml0pKT09KDB8YXJbYysxNj4+Ml0pP2piWzEyNyZhcls0MCsoMHxhcltjPj4yXSk+PjJdXShjKTooYXJbdT4+Ml09YisxLGhmKDB8dHJbYj4+MF0pKSwxPCh3K2x8MCk+Pj4wKWZvcihiPXIscz1hLGM9dzs7KXtpZigoMHxiKT09KDB8aSkpe209dix3PWM7Y29udGludWUgQX0yPT0oMHx0cltzPj4wXSkmJigodT0wfHRyW2IrMTE+PjBdKTw8MjQ+PjI0PDA/dT0wfGFyW2IrND4+Ml06dSY9MjU1LCgwfHUpIT0oMHx2KSYmKGM9YystMXwodHJbcz4+MF09MCkpKSxiPWIrMTJ8MCxzPXMrMXwwfWVsc2UgbT12O2Vsc2UgbT12fWRve2lmKGIpe2lmKDB8TWYoYz0oMHwoYz0wfGFyW2IrMTI+PjJdKSk9PSgwfGFyW2IrMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltiPj4yXSk+PjJdXShiKTowfGhmKDB8dHJbYz4+MF0pLC0xKSl7YXJbQT4+Ml09MCxsPTE7YnJlYWt9bD0wPT0oMHxhcltBPj4yXSk7YnJlYWt9bD0xfXdoaWxlKDApO2Rve2lmKHUpe2lmKDB8TWYoYz0oMHwoYz0wfGFyW3UrMTI+PjJdKSk9PSgwfGFyW3UrMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt1Pj4yXSk+PjJdXSh1KTowfGhmKDB8dHJbYz4+MF0pLC0xKSl7YXJbZT4+Ml09MCxaPTQxO2JyZWFrfWlmKGwpYnJlYWs7Wj03NzticmVha31aPTQxfXdoaWxlKDApO2Zvcig0MT09KDB8WikmJmwmJihaPTc3KSw3Nz09KDB8WikmJihhcltuPj4yXT0yfGFyW24+PjJdKTs7KXtpZigoMHxyKT09KDB8aSkpe1o9ODE7YnJlYWt9aWYoMj09KDB8dHJbYT4+MF0pKWJyZWFrO3I9cisxMnwwLGE9YSsxfDB9cmV0dXJuIDgxPT0oMHxaKSYmKGFyW24+PjJdPTR8YXJbbj4+Ml0scj1pKSxCYyhnKSx1cj1vLDB8cn1mdW5jdGlvbiBGbihBLGUscixpLGYsbix0LG8sYSxjKXtBfD0wLGV8PTAscnw9MCxmfD0wLG58PTAsdHw9MCxvfD0wLGF8PTAsY3w9MDt2YXIgbCx1LGI9MCxzPTA7dT0oMHwobD0wfGFyWyhpfD0wKT4+Ml0pKT09KDB8cik7ZG97aWYodSl7aWYoIShiPSgwfGFyW2MrOTY+PjJdKT09KDB8QSkpJiYoMHxhcltjKzEwMD4+Ml0pIT0oMHxBKSl7cz01O2JyZWFrfWFyW2k+PjJdPXIrMSx0cltyPj4wXT1iPzQzOjQ1LGI9YXJbZj4+Ml09MH1lbHNlIHM9NX13aGlsZSgwKTtBOmRve2lmKDU9PSgwfHMpKXtpZihzPTB8dHJbdCsxMT4+MF0sKDB8QSk9PSgwfG4pJiYwIT0oMHwoczw8MjQ+PjI0PDA/MHxhclt0KzQ+PjJdOjI1NSZzKSkpe2lmKDE2MDw9KChiPTB8YXJbYT4+Ml0pLW98MCkpe2I9MDticmVha31pPTB8YXJbZj4+Ml0sYXJbYT4+Ml09Yis0LGFyW2I+PjJdPWksYj1hcltmPj4yXT0wO2JyZWFrfWZvcih0PWMrMTA0fDAsbj0wOzspe2lmKGI9Yysobjw8Mil8MCwyNj09KDB8bikpe2I9dDticmVha31pZigoMHxhcltiPj4yXSk9PSgwfEEpKWJyZWFrO249bisxfDB9aWYobj0oYj1iLWN8MCk+PjIsOTI8KDB8YikpYj0tMTtlbHNle3N3aXRjaCh0PTUzNjQ4K258MCwwfGUpe2Nhc2UgMTA6Y2FzZSA4OmlmKCgwfGUpPD0oMHxuKSl7Yj0tMTticmVhayBBfWJyZWFrO2Nhc2UgMTY6aWYoODg8PSgwfGIpKXtpZih1KXtiPS0xO2JyZWFrIEF9aWYoMzw9KGwtcnwwKSl7Yj0tMTticmVhayBBfWlmKDQ4IT0oMHx0cltsLTE+PjBdKSl7Yj0tMTticmVhayBBfWI9KGFyW2Y+PjJdPTApfHRyW3Q+PjBdLGFyW2k+PjJdPTErbCx0cltsPj4wXT1iLGI9MDticmVhayBBfX1iPTB8dHJbdD4+MF0sYXJbaT4+Ml09MStsLHRyW2w+PjBdPWIsYXJbZj4+Ml09MSsoMHxhcltmPj4yXSksYj0wfX19d2hpbGUoMCk7cmV0dXJuIDB8Yn1mdW5jdGlvbiBSbihBLGUscixpLGYpe0F8PTAscnw9MCxpfD0wLGZ8PTA7dmFyIG4sdDt0PXVyPShuPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxUZih0LGV8PTApLGU9MHx1bih0LDU5MjY0KSxQYls3JmFyWzQ4KygwfGFyW2U+PjJdKT4+Ml1dKGUsNTM2NDgsNTM2ODAscikscj0wfHVuKHQsNTkyNzIpLGU9MHxqYlsxMjcmYXJbMTIrKDB8YXJbcj4+Ml0pPj4yXV0ociksYXJbaT4+Ml09ZSxpPTB8amJbMTI3JmFyWzE2KygwfGFyW3I+PjJdKT4+Ml1dKHIpLGFyW2Y+PjJdPWksZnNbNjMmYXJbMjArKDB8YXJbcj4+Ml0pPj4yXV0oQSxyKSxibih0KSx1cj1ufWZ1bmN0aW9uIE5uKEEsZSxyLGksZixuLHQsbyxhLGMsbCx1KXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCx0fD0wLG98PTAsY3w9MCxsfD0wLHV8PTA7dmFyIGIscz0wLGQ9MDtiPWF8PTA7QTpkb3tpZigoMHxBKT09KDB8bikpYT0wfHRyW2U+PjBdPyhyPSh0cltlPj4wXT0wKXxhcltmPj4yXSxhcltmPj4yXT1yKzEsdHJbcj4+MF09NDYsMCE9KDB8KChmPTB8dHJbbysxMT4+MF0pPDwyND4+MjQ8MD8wfGFyW28rND4+Ml06MjU1JmYpKSYmKChzPTB8YXJbYz4+Ml0pLWJ8MCk8MTYwJiYoYT0wfGFyW2w+PjJdLGFyW2M+PjJdPXMrNCxhcltzPj4yXT1hKSwwKTotMTtlbHNle2lmKCgwfEEpPT0oMHx0KSYmMHwoKHQ9MHx0cltvKzExPj4wXSk8PDI0Pj4yNDwwPzB8YXJbbys0Pj4yXToyNTUmdCkpe2lmKCEoMHx0cltlPj4wXSkpe2E9LTE7YnJlYWt9aWYoMTYwPD0oKGE9MHxhcltjPj4yXSktYnwwKSl7YT0wO2JyZWFrfWY9MHxhcltsPj4yXSxhcltjPj4yXT1hKzQsYXJbYT4+Ml09ZixhPWFyW2w+PjJdPTA7YnJlYWt9Zm9yKG49dSsxMjh8MCxzPTA7Oyl7aWYoYT11KyhzPDwyKXwwLDMyPT0oMHxzKSl7YT1uO2JyZWFrfWlmKCgwfGFyW2E+PjJdKT09KDB8QSkpYnJlYWs7cz1zKzF8MH1pZihhPShzPWEtdXwwKT4+MiwoMHxzKTw9MTI0KXtzd2l0Y2gobj0wfHRyWzUzNjQ4K2E+PjBdLDB8YSl7Y2FzZSAyNDpjYXNlIDI1OmlmKCgwfChhPTB8YXJbZj4+Ml0pKSE9KDB8aSkmJig5NSZ0clthKy0xPj4wXSkhPSgxMjcmdHJbcj4+MF0pKXthPS0xO2JyZWFrIEF9YXJbZj4+Ml09YSsxLHRyW2E+PjBdPW4sYT0wO2JyZWFrIEE7Y2FzZSAyMzpjYXNlIDIyOnRyW3I+PjBdPTgwO2JyZWFrO2RlZmF1bHQ6KDB8KGE9OTUmbikpPT0oMHx0cltyPj4wXSkmJih0cltyPj4wXT0xMjh8YSwwfHRyW2U+PjBdKSYmKHRyW2U+PjBdPTApfCgocj0wfHRyW28rMTE+PjBdKTw8MjQ+PjI0PDA/MHxhcltvKzQ+PjJdOjI1NSZyKSYmKChkPTB8YXJbYz4+Ml0pLWJ8MCk8MTYwJiYocj0wfGFyW2w+PjJdLGFyW2M+PjJdPWQrNCxhcltkPj4yXT1yKX1jPTB8YXJbZj4+Ml0sYXJbZj4+Ml09YysxLHRyW2M+PjBdPW4sYT0oODQ8KDB8cyl8fChhcltsPj4yXT0xKygwfGFyW2w+PjJdKSksMCl9ZWxzZSBhPS0xfX13aGlsZSgwKTtyZXR1cm4gMHxhfWZ1bmN0aW9uIF9uKEEsZSxyLGkpe0F8PTAscnw9MCxpfD0wO3ZhciBmLG47bj11cj0oZj11cikrMzEmLTMyLHVyPXVyKzE2fDAsVGYobixlfD0wKSxlPTB8dW4obiw1OTI2NCksUGJbNyZhcls0OCsoMHxhcltlPj4yXSk+PjJdXShlLDUzNjQ4LDUzNjc0LHIpLHI9MHx1bihuLDU5MjcyKSxlPTB8amJbMTI3JmFyWzE2KygwfGFyW3I+PjJdKT4+Ml1dKHIpLGFyW2k+PjJdPWUsZnNbNjMmYXJbMjArKDB8YXJbcj4+Ml0pPj4yXV0oQSxyKSxibihuKSx1cj1mfWZ1bmN0aW9uIFluKEEpe2diKEF8PTApfWZ1bmN0aW9uIFFuKEEpe1piKEF8PTApfWZ1bmN0aW9uIERuKEEpe2FyWyhBfD0wKT4+Ml09MCxwQShBKzR8MCwwKSxkQShBKzMyfDAsMCl9ZnVuY3Rpb24gSm4oQSl7WkEoKEF8PTApKzR8MCksc0EoQSszMnwwKX1mdW5jdGlvbiBNbihBLGUpe2V8PTA7dmFyIHIsaT0wO2lmKCEoKDB8YXJbKEF8PTApPj4yXSk+PSgwfGUpKSl7aWYoZ2Iocj1BKzR8MCksKDB8YXJbQT4+Ml0pPCgwfGUpKWZvcihpPUErMzJ8MDtoQSgwfGksMHxyKSwoMHxhcltBPj4yXSk8KDB8ZSk7KTtaYigpfX1mdW5jdGlvbiBUbihBLGUpe2V8PTA7dmFyIHI7Z2Iocj0oQXw9MCkrNHwwKSwoMHxhcltBPj4yXSk+PSgwfGUpfHwoYXJbQT4+Ml09ZSxtYigpKSxaYigpfWZ1bmN0aW9uIFVuKEEsZSl7ZXw9MDt2YXIgcjtnYihyPShBfD0wKSs0fDApLGFyW0E+PjJdPSgwfGFyW0E+PjJdKStlLG1iKCksWmIoKX1mdW5jdGlvbiBTbihBLGUpe2V8PTA7dmFyIHIsaSxmLG4sdD0wLG89MCxhPTAsYz0wO2diKG49KEF8PTApKzQyMHwwKSwwfHRyW0E+PjBdfHwodD0wfGFyWyhpPUErOHwwKT4+Ml0sYz0oMHxhcltBKzEyPj4yXSktdHwwLGE9MHxhclsobz1BKzIwfDApPj4yXSwoMHwoMD09KDB8Yyk/MDooYzw8OCktMXwwKSk9PSgocj0wfGFyWyhmPUErMjR8MCk+PjJdKSthfDApPyhmdW5jdGlvbihBKXt2YXIgZT0wLHI9MCxpPTAsZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wO2lmKHVyPShzPXVyKSszMnwwLGM9cys0fDAsYT1zLDEwMjM8KHI9MHxhclsoZT0xNisoQXw9MCl8MCk+PjJdKT4+PjApe2FyW2U+PjJdPXIrLTEwMjQsYz0wfGFyWyhsPUErNHwwKT4+Ml0sYj0wfGFyW2M+PjJdLGM9Yys0fDAsYXJbbD4+Ml09YyxvPTB8YXJbKHU9QSs4fDApPj4yXSx0PTB8YXJbKGE9QSsxMnwwKT4+Ml0sZT10LG49bztkb3tpZigoMHxvKT09KDB8dCkpe2lmKHI9MHxhcltBPj4yXSwoaT1yKT4+PjA8Yz4+PjApe2Y9KGU9YykrKChpPSgxKyhlLWk+PjIpfDApLy0yfDApPDwyKXwwLGU9KHI9KGU9bi1lfDApPj4yKT8od2IoMHxmLDB8YywwfGUpLDB8YXJbbD4+Ml0pOmMsQT1mKyhyPDwyKXwwLGFyW3U+PjJdPUEsYXJbbD4+Ml09ZSsoaTw8MiksZT1BO2JyZWFrfWlmKDEwNzM3NDE4MjM8KGU9MD09KDB8KGU9ZS1pPj4xKSk/MTplKT4+PjAmJihadShzPTB8WCg4KSw0NDUxOSksYXJbcz4+Ml09MTc2NjAsSSgwfHMsNDAxNiw0MjgpKSxmPTB8aHUoZTw8MiksdD1pPShuPWYpKyhlPj4+Mjw8Mil8MCxmPWYrKGU8PDIpfDAsKDB8Yyk9PSgwfG8pKWU9dDtlbHNle2ZvcihlPXQscj1jO2FyW2k+PjJdPWFyW3I+PjJdLGU9aT1lKzR8MCwoMHwocj1yKzR8MCkpIT0oMHxvKTspO3I9MHxhcltBPj4yXX1hcltBPj4yXT1uLGFyW2w+PjJdPXQsYXJbdT4+Ml09ZSxhclthPj4yXT1mLHImJih2dShyKSxlPTB8YXJbdT4+Ml0pfWVsc2UgZT1vfXdoaWxlKDApO3JldHVybiBhcltlPj4yXT1iLGFyW3U+PjJdPTQrKDB8YXJbdT4+Ml0pLHVyPXN9aWYoZT0wfGFyWyhiPUErOHwwKT4+Ml0sZj1lLSgwfGFyWyh1PUErNHwwKT4+Ml0pfDAscj0wfGFyWyhsPUErMTJ8MCk+PjJdLGk9ci0oMHxhcltBPj4yXSl8MCxpPj4+MDw9Zj4+PjApe2ZvcihlPTA9PSgwfChlPWk+PjEpKT8xOmUsYXJbYysxMj4+Ml09MCxhcltjKzE2Pj4yXT1BKzEyLDEwNzM3NDE4MjM8ZT4+PjAmJihadShzPTB8WCg4KSw0NDUxOSksYXJbcz4+Ml09MTc2NjAsSSgwfHMsNDAxNiw0MjgpKSxpPTB8aHUoZTw8MiksYXJbYz4+Ml09aSx0PWkrKGY+PjI8PDIpfDAsYXJbKG89Yys4fDApPj4yXT10LGFyWyhuPWMrNHwwKT4+Ml09dCxhclsodD1jKzEyfDApPj4yXT1pKyhlPDwyKSxmPTB8aHUoNDA5NiksYXJbYT4+Ml09ZixmdW5jdGlvbihBLGUpe2V8PTA7dmFyIHIsaSxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MDtyPTB8YXJbKGI9OCsoQXw9MCl8MCk+PjJdLHU9MHxhclsoaT1BKzEyfDApPj4yXSx0PXUsYT1yO2Rve2lmKCgwfHIpPT0oMHx1KSl7aWYobD0wfGFyWyh1PUErNHwwKT4+Ml0sbj0wfGFyW0E+PjJdLChmPW4pPj4+MDxsPj4+MCl7bz0obj1sKSsoKHQ9KDErKG4tZj4+Mil8MCkvLTJ8MCk8PDIpfDAsZj0obj0oZj1hLW58MCk+PjIpPyh3YigwfG8sMHxsLDB8ZiksMHxhclt1Pj4yXSk6bCxsPW8rKG48PDIpfDAsYXJbYj4+Ml09bCxhclt1Pj4yXT1mKyh0PDwyKSxmPWw7YnJlYWt9aWYoMTA3Mzc0MTgyMzwoZj0wPT0oMHwoZj10LWY+PjEpKT8xOmYpPj4+MCYmKFp1KGI9MHxYKDgpLDQ0NTE5KSxhcltiPj4yXT0xNzY2MCxJKDB8Yiw0MDE2LDQyOCkpLG89MHxodShmPDwyKSxjPXQ9KGE9bykrKGY+Pj4yPDwyKXwwLG89bysoZjw8Mil8MCwoMHxsKT09KDB8cikpZj1jO2Vsc2V7Zm9yKGY9YyxuPWw7YXJbdD4+Ml09YXJbbj4+Ml0sZj10PWYrNHwwLCgwfChuPW4rNHwwKSkhPSgwfHIpOyk7bj0wfGFyW0E+PjJdfWFyW0E+PjJdPWEsYXJbdT4+Ml09YyxhcltiPj4yXT1mLGFyW2k+PjJdPW8sbiYmKHZ1KG4pLGY9MHxhcltiPj4yXSl9ZWxzZSBmPXJ9d2hpbGUoMCk7YXJbZj4+Ml09YXJbZT4+Ml0sYXJbYj4+Ml09NCsoMHxhcltiPj4yXSl9KGMsYSksZj0wfGFyW2I+PjJdO2U9MHxhclt1Pj4yXSwoMHxmKSE9KDB8ZSk7KU9uKGMsYT1mKy00fDApLGY9YTtyZXR1cm4gcj1lLGk9MHxhcltBPj4yXSxhcltBPj4yXT1hcltjPj4yXSxhcltjPj4yXT1pLGFyW3U+PjJdPWFyW24+PjJdLGFyW24+PjJdPXIsZT0wfGFyW2I+PjJdLGFyW2I+PjJdPWFyW28+PjJdLGFyW28+PjJdPWUsQT0wfGFyW2w+PjJdLGFyW2w+PjJdPWFyW3Q+PjJdLGFyW3Q+PjJdPUEsKDB8ZSkhPSgwfGYpJiYoYXJbbz4+Ml09ZSsofigoZSstNC1yfDApPj4+Mik8PDIpKSwwfGkmJnZ1KGkpLHVyPXN9aWYoKDB8cikhPSgwfGUpKXJldHVybiBiPTB8aHUoNDA5NiksYXJbYz4+Ml09YixmdW5jdGlvbihBLGUpe2V8PTA7dmFyIHIsaSxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MDtyPTB8YXJbKGI9OCsoQXw9MCl8MCk+PjJdLHU9MHxhclsoaT1BKzEyfDApPj4yXSx0PXUsYT1yO2Rve2lmKCgwfHIpPT0oMHx1KSl7aWYobD0wfGFyWyh1PUErNHwwKT4+Ml0sbj0wfGFyW0E+PjJdLChmPW4pPj4+MDxsPj4+MCl7bz0obj1sKSsoKHQ9KDErKG4tZj4+Mil8MCkvLTJ8MCk8PDIpfDAsZj0obj0oZj1hLW58MCk+PjIpPyh3YigwfG8sMHxsLDB8ZiksMHxhclt1Pj4yXSk6bCxsPW8rKG48PDIpfDAsYXJbYj4+Ml09bCxhclt1Pj4yXT1mKyh0PDwyKSxmPWw7YnJlYWt9aWYoMTA3Mzc0MTgyMzwoZj0wPT0oMHwoZj10LWY+PjEpKT8xOmYpPj4+MCYmKFp1KGI9MHxYKDgpLDQ0NTE5KSxhcltiPj4yXT0xNzY2MCxJKDB8Yiw0MDE2LDQyOCkpLG89MHxodShmPDwyKSxjPXQ9KGE9bykrKGY+Pj4yPDwyKXwwLG89bysoZjw8Mil8MCwoMHxsKT09KDB8cikpZj1jO2Vsc2V7Zm9yKGY9YyxuPWw7YXJbdD4+Ml09YXJbbj4+Ml0sZj10PWYrNHwwLCgwfChuPW4rNHwwKSkhPSgwfHIpOyk7bj0wfGFyW0E+PjJdfWFyW0E+PjJdPWEsYXJbdT4+Ml09YyxhcltiPj4yXT1mLGFyW2k+PjJdPW8sbiYmKHZ1KG4pLGY9MHxhcltiPj4yXSl9ZWxzZSBmPXJ9d2hpbGUoMCk7YXJbZj4+Ml09YXJbZT4+Ml0sYXJbYj4+Ml09NCsoMHxhcltiPj4yXSl9KEEsYyksdXI9czthPTB8aHUoNDA5NiksYXJbYz4+Ml09YSxmdW5jdGlvbihBLGUpe2V8PTA7dmFyIHIsaT0wLGY9MCxuPTAsdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MDtyPTB8YXJbKHM9NCsoQXw9MCl8MCk+PjJdLGI9MHxhcltBPj4yXSxuPWI7ZG97aWYoKDB8cik9PSgwfGIpKXtpZihmPTB8YXJbKGI9QSs4fDApPj4yXSxsPTB8YXJbKHU9QSsxMnwwKT4+Ml0sZj4+PjA8KGk9bCk+Pj4wKXt0PShpPShuPWYpKygobz0oMSsoaS1uPj4yKXwwKS8yfDApPDwyKXwwKSsoMC0odT0obj1uLXJ8MCk+PjIpPDwyKXwwLHUmJih3YigwfHQsMHxyLDB8biksaT10LGY9MHxhcltiPj4yXSksYXJbcz4+Ml09aSxhcltiPj4yXT1mKyhvPDwyKTticmVha31pZigxMDczNzQxODIzPChuPTA9PSgwfChuPWktbj4+MSkpPzE6bik+Pj4wJiYoWnUocz0wfFgoOCksNDQ1MTkpLGFyW3M+PjJdPTE3NjYwLEkoMHxzLDQwMTYsNDI4KSksYT0wfGh1KG48PDIpLGw9aT0oYz1hKSsoKG4rM3wwKT4+PjI8PDIpfDAsYT1hKyhuPDwyKXwwLCgwfHIpPT0oMHxmKSluPWwsZj1yO2Vsc2V7Zm9yKG89aSxuPWwsdD1yO2FyW28+PjJdPWFyW3Q+PjJdLG49bz1uKzR8MCwoMHwodD10KzR8MCkpIT0oMHxmKTspO2Y9MHxhcltBPj4yXX1hcltBPj4yXT1jLGFyW3M+PjJdPWwsYXJbYj4+Ml09bixhclt1Pj4yXT1hLGYmJih2dShmKSxpPTB8YXJbcz4+Ml0pfWVsc2UgaT1yfXdoaWxlKDApO2FyW2krLTQ+PjJdPWFyW2U+PjJdLGFyW3M+PjJdPSgwfGFyW3M+PjJdKS00fShBLGMpLGE9MHxhclt1Pj4yXSxjPTB8YXJbYT4+Ml0sYT1hKzR8MCxhclt1Pj4yXT1hLG89MHxhcltiPj4yXSx0PTB8YXJbbD4+Ml0sZT10LG49bztkb3tpZigoMHxvKT09KDB8dCkpe2lmKHI9MHxhcltBPj4yXSwoaT1yKT4+PjA8YT4+PjApe2Y9KGU9YSkrKChpPSgxKyhlLWk+PjIpfDApLy0yfDApPDwyKXwwLGU9KHI9KGU9bi1lfDApPj4yKT8od2IoMHxmLDB8YSwwfGUpLDB8YXJbdT4+Ml0pOmEsQT1mKyhyPDwyKXwwLGFyW2I+PjJdPUEsYXJbdT4+Ml09ZSsoaTw8MiksZT1BO2JyZWFrfWlmKDEwNzM3NDE4MjM8KGU9MD09KDB8KGU9ZS1pPj4xKSk/MTplKT4+PjAmJihadShzPTB8WCg4KSw0NDUxOSksYXJbcz4+Ml09MTc2NjAsSSgwfHMsNDAxNiw0MjgpKSxmPTB8aHUoZTw8MiksdD1pPShuPWYpKyhlPj4+Mjw8Mil8MCxmPWYrKGU8PDIpfDAsKDB8YSk9PSgwfG8pKWU9dDtlbHNle2ZvcihlPXQscj1hO2FyW2k+PjJdPWFyW3I+PjJdLGU9aT1lKzR8MCwoMHwocj1yKzR8MCkpIT0oMHxvKTspO3I9MHxhcltBPj4yXX1hcltBPj4yXT1uLGFyW3U+PjJdPXQsYXJbYj4+Ml09ZSxhcltsPj4yXT1mLHImJih2dShyKSxlPTB8YXJbYj4+Ml0pfWVsc2UgZT1vfXdoaWxlKDApO2FyW2U+PjJdPWMsYXJbYj4+Ml09NCsoMHxhcltiPj4yXSksdXI9c30oQSs0fDApLGE9MHxhcltvPj4yXSxvPTB8YXJbZj4+Ml0sdD0wfGFyW2k+PjJdKTpvPXIsYXJbKDB8YXJbdCsoKGM9bythfDApPj4+MTA8PDIpPj4yXSkrKCgxMDIzJmMpPDwyKT4+Ml09ZSxhcltmPj4yXT1vKzEsa0EoQSs0NDh8MCkpLFpiKCl9ZnVuY3Rpb24gT24oQSxlKXtlfD0wO3ZhciByLGk9MCxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTA7cj0wfGFyWyhzPShBfD0wKSs0fDApPj4yXSxuPWI9MHxhcltBPj4yXTtkb3tpZigoMHxyKT09KDB8Yikpe2lmKChmPTB8YXJbKGI9QSs4fDApPj4yXSk+Pj4wPChpPWw9MHxhclsodT1BKzEyfDApPj4yXSk+Pj4wKXt0PShpPShuPWYpKygobz0oMSsoaS1uPj4yKXwwKS8yfDApPDwyKXwwKSsoMC0odT0obj1uLXJ8MCk+PjIpPDwyKXwwLHUmJih3YigwfHQsMHxyLDB8biksaT10LGY9MHxhcltiPj4yXSksYXJbcz4+Ml09aSxhcltiPj4yXT1mKyhvPDwyKTticmVha31pZigxMDczNzQxODIzPChuPTA9PSgwfChuPWktbj4+MSkpPzE6bik+Pj4wJiYoWnUocz0wfFgoOCksNDQ1MTkpLGFyW3M+PjJdPTE3NjYwLEkoMHxzLDQwMTYsNDI4KSksbD1pPShjPWE9MHxodShuPDwyKSkrKChuKzN8MCk+Pj4yPDwyKXwwLGE9YSsobjw8Mil8MCwoMHxyKT09KDB8Zikpbj1sLGY9cjtlbHNle2ZvcihvPWksbj1sLHQ9cjthcltvPj4yXT1hclt0Pj4yXSxuPW89bis0fDAsKDB8KHQ9dCs0fDApKSE9KDB8Zik7KTtmPTB8YXJbQT4+Ml19YXJbQT4+Ml09YyxhcltzPj4yXT1sLGFyW2I+PjJdPW4sYXJbdT4+Ml09YSxmJiYodnUoZiksaT0wfGFyW3M+PjJdKX1lbHNlIGk9cn13aGlsZSgwKTthcltpKy00Pj4yXT1hcltlPj4yXSxhcltzPj4yXT0oMHxhcltzPj4yXSktNH1mdW5jdGlvbiB6bihBLGUscixpLGYpe2V8PTAscnw9MCxpfD0wLGZ8PTA7dmFyIG4sdCxvLGEsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wO3U9NTkzMisobz0wfGFyWyhhPShBfD0wKSsxODU5NnwwKT4+Ml0pfDAsdD0wfGFyWyhiPUErMTg2MDB8MCk+PjJdLG49KGg9LTE8PGFyWzEwMDkyK28+PjJdKSZpLGgmPWYscj1BKzE4NTM2fDAsKDB8bik9PSgwfGFyWyhlPUErMTg1MzJ8MCk+PjJdKSYmKDB8aCk9PSgwfGFyW3I+PjJdKXx8KGFyW0ErMTg1NDA+PjJdPWFyW0ErMTg1Mjg+PjJdLGFyW2U+PjJdPW4sYXJbcj4+Ml09aCksaz01ODA0K298MCxsPW4/MDowPT0oKDE8PGFyW2s+PjJdKS0xJmh8MCksZT0wfGFyWzgwMCt0Pj4yXSxyPTB8YXJbNTgyMCtvPj4yXSxjPTB8YXJbNTgxMitvPj4yXSxyPSgwfGJyKGMsKDB8ZSklKDB8cil8MCkpPT0oMHxuKT8oMHxicigoMHxlKS8oMHxyKXwwLGMpKT09KDB8aCk6MCxlPTAhPSgwfHRyWzU5NjYrbz4+MF0pJiYwPT0oKDE8PChzPTB8YXJbaz4+Ml0pKS0xJihufGgpfDApPzB8RmEodSxuPj5zLGg+PnMpOjA7ZG97aWYocnxlKWQ9MTQ7ZWxzZXtpZihsJiYwfHRyWzU5NjUrbz4+MF0pe2Q9MTQ7YnJlYWt9ZT1BKzE4NTQwfDB9fXdoaWxlKDApOzE0PT0oMHxkKSYmKGU9NzkyKygwfGFyW2I+PjJdKXwwKSx1PTB8YXJbZT4+Ml0sZT1uLTF8MDtkb3tpZigwfGRhKDB8YXJbYT4+Ml0sbixoLGUsaCkmJihkPTB8YXJbNTg2NCtvPj4yXSxzPSgwfGJyKGg+PmQsMHxhcls1ODUyK28+PjJdKSkrKGU+PmQpfDAsKGFyWygwfGFyWzEwMzIwK28+PjJdKSsoczw8Mik+PjJdPj4oKDB8YXJbaz4+Ml0pLWQ8PDEpfDApPT0oMHxhcltBKzQ+PjJdKSkpe2lmKGw9MHxhclthPj4yXSxlPj49cj0wfGFyW2wrMTAzNjg+PjJdLHI9aD4+ciwoMHxlKTw9LTEmJnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSksKDB8KGM9MHxhcltsKzEwMzcyPj4yXSkpPD0oMHxlKSYmc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KSwoMHxyKTw9LTEmJnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSksKDB8cik8KDB8YXJbbCsxMDM3Nj4+Ml0pKXt3PSgwfGFyW2wrMTAzNjA+PjJdKSsoMyooKDB8YnIoYyxyKSkrZXwwKXwwKSsyfDAsdz0wfHRyW3c+PjBdO2JyZWFrfXNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSl9ZWxzZSB3PXV9d2hpbGUoMCk7ZT1oKy0xfDA7ZG97aWYoMHxkYSgwfGFyW2E+PjJdLG4saCxuLGUpJiYoaD0wfGFyWzU4NjQrbz4+Ml0sZD0oMHxicihlPj5oLDB8YXJbNTg1MitvPj4yXSkpKyhuPj5oKXwwLChhclsoMHxhclsxMDMyMCtvPj4yXSkrKGQ8PDIpPj4yXT4+KCgwfGFyW2s+PjJdKS1oPDwxKXwwKT09KDB8YXJbQSs0Pj4yXSkpKXtpZihsPTB8YXJbYT4+Ml0sZT4+PWg9MHxhcltsKzEwMzY4Pj4yXSwoMHwoYz1uPj5oKSk8PS0xJiZzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpLCgwfChyPTB8YXJbbCsxMDM3Mj4+Ml0pKTw9KDB8YykmJnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSksKDB8ZSk8PS0xJiZzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpLCgwfGUpPCgwfGFyW2wrMTAzNzY+PjJdKSl7dj0oMHxhcltsKzEwMzYwPj4yXSkrKDMqKCgwfGJyKHIsZSkpK2N8MCl8MCkrMnwwLHY9MHx0clt2Pj4wXTticmVha31zcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpfWVsc2Ugdj11fXdoaWxlKDApO2g9MHxhcls1NzY0K28+PjJdLGg9KGU9KDUyKygwfGFyW0ErMTg1MTI+PjJdKSsodysxK3Y+PjEpKyhoPDwxKXwwKSUoaCs1MnwwKXwwKS1ofDAsYXJbQSsxODU0ND4+Ml09ZSxlPSgwfChlPSgwfGFyWzU5NTIrbz4+Ml0pK2grKDB8YXJbNzQ0K3Q+PjJdKSsoMHxhcltBKzE4NTIwPj4yXSl8MCkpPCgwfCh2PTAtKGM9MHxhcls1NzcyK28+PjJdKXwwKSk/djooMHxlKTw1Nz9lOjU3LHI9KDB8KHI9KDB8YXJbNTk1NitvPj4yXSkraCsoMHxhcls3NDgrdD4+Ml0pKygwfGFyW0ErMTg1MjQ+PjJdKXwwKSk8KDB8dik/djooMHxyKTw1Nz9yOjU3O2Rve2lmKDE9PSgwfGFyWzU3NzYrbz4+Ml0pKXtkb3tpZigzMDw9KDB8ZSkpe2lmKDQyPCgwfGUpKXtlPWUrLTZ8MDticmVha31lPTB8YXJbODAyMCsoZSstMzA8PDIpPj4yXTticmVha319d2hpbGUoMCk7aWYoMzA8PSgwfHIpKXtpZig0MjwoMHxyKSl7cj1yKy02fDA7YnJlYWt9cj0wfGFyWzgwMjArKHIrLTMwPDwyKT4+Ml07YnJlYWt9fX13aGlsZSgwKTtpZihhcltBKzE4NTQ4Pj4yXT1jK2UsYXJbQSsxODU1Mj4+Ml09YytyLGU9MHxhclthPj4yXSxjPWY+PihyPTB8YXJbZSsxMDM2OD4+Ml0pLCgwfChrPWk+PnIpKTw9LTEmJnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSksKDB8KGQ9MHxhcltlKzEwMzcyPj4yXSkpPD0oMHxrKSYmc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KSwoMHxjKTw9LTEmJnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSksKDB8Yyk+PSgwfGFyW2UrMTAzNzY+PjJdKSYmc3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KSxmPShzPTB8YXJbZSsxMDM2MD4+Ml0pKygzKigoMHxicihkLGMpKStrfDApfDApfDAsYj0oZT0xPDwoZj0oMzwoZj03JihjcltmPj4wXXxjcltmKzE+PjBdPDw4KSk+Pj4wP2Y6MyktcnwwKSkrY3wwLDMxIT0oMHxmKSl7bD1lK2t8MCx1PTI1NSZoLGU9Yztkb3tmb3IoYz0wfGJyKGUsZCkscj1rO3RyW3MrKDMqKHIrY3wwKXwwKSsyPj4wXT11LCgwfChyPXIrMXwwKSk8KDB8bCk7KTtlPWUrMXwwfXdoaWxlKCgwfGUpPCgwfGIpKTthclsoQT1BKzE4NTI4fDApPj4yXT1ofWVsc2UgYXJbKEE9QSsxODUyOHwwKT4+Ml09aH1mdW5jdGlvbiBqbihBLGUscixpLGYsbix0LG8sYSxjKXtlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsdHw9MCxvfD0wLGF8PTAsY3w9MDt2YXIgbDtyZXR1cm4gbD0wfGFyWyhBfD0wKSsxODU5Nj4+Ml0sODwoMHxhclsoMD09KDB8dCk/NTc2MCtsfDA6NTc2OCtsfDApPj4yXSk/dm9pZCBmdW5jdGlvbihBLGUscixpLGYsbix0LG8sYSxjKXtlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsdHw9MCxvfD0wLGF8PTAsY3w9MDt2YXIgbCx1LGIscyxkLGssaCx3LHYsbSxnLFo9MCxwPTAseT0wLEI9MCxFPTAsWD0wLFc9MCxJPTAsQz0wLEc9MCxWPTAsRj0wLFI9MCxOPTA7c3dpdGNoKHVyPShnPXVyKSs0MDk2fDAscz1nLGI9MHxhclsoaz0xODU5NisoQXw9MCl8MCk+PjJdLDB8dCl7Y2FzZSAwOlo9QSsxODU0NHwwO2JyZWFrO2Nhc2UgMTpaPUErMTg1NDh8MDticmVhaztjYXNlIDI6Wj1BKzE4NTUyfDA7YnJlYWs7ZGVmYXVsdDpzcig0NDQ1Niw0NDQ0MywzNjcsNDQ0NTgpfVg9MHxhcltaPj4yXSxpPTB8YXJbKG09QSsyMTEyfDApPj4yXSxoPTB8YXJbKChkPTA9PSgwfHQpKT80MCtifDA6NDQrYnwwKT4+Ml0sdj0oMHxhcls0K2IrKHQ8PDIpPj4yXSkrKCgwfGJyKGgscikpK2U8PDEpfDAsdz0wfGFyWyhkPzU3NjArYnwwOjU3NjgrYnwwKT4+Ml0sZj0wfGFyWzEwMzY4K2I+PjJdLGU+Pj1mLGY9cj4+ZiwoMHxlKTw9LTEmJnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSk7Wj0wfGFyWzEwMzcyK2I+PjJdLCgwfFopPD0oMHxlKSYmc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KTsoMHxmKTw9LTEmJnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSk7KDB8Zik+PSgwfGFyWzEwMzc2K2I+PjJdKSYmc3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KTtJPSgwfGFyWzEwMzYwK2I+PjJdKSsoMyooKDB8YnIoWixmKSkrZXwwKXwwKXwwLEk9KDY1NTM1JihjcltJPj4wXXxjcltJKzE+PjBdPDw4KSk+Pj44JjMsbD02NTUzNSZJLEk9KHU9ND09KDB8bikpJjAhPSgwfHRyWzU3NDgrYj4+MF0pJkk8PDE2Pj4xNj09MDtBOmRve2lmKDB8dHJbQSszMj4+MF0pe2lmKHI9ZD9BKzE0NDEyfDA6cywwPCgwfG9yWyhaPUErMTQ0MDQrKHQ8PDEpfDApPj4xXSkpZm9yKGY9MDtvcltpKyhvcltBKzgyNjArKHQ8PDExKSsoZjw8MSk+PjFdPDwxKT4+MV09MHxvcltBKzIxMTYrKHQ8PDExKSsoZjw8MSk+PjFdLCgwfChmPWYrMXwwKSk8KDB8b3JbWj4+MV0pOyk7SSYmZnNbNjMmYXJbNDMyKygwfGFyW0ErMTg1OTI+PjJdKT4+Ml1dKGksNCk7ZG97aWYoYyl7aWYoZj0wfGFyW0ErMTg1OTI+PjJdLDI9PSgwfGMpKXtuc1sxMjcmYXJbZiszNjg+PjJdXShyLGksbik7YnJlYWt9bnNbMTI3JmFyW2YrMzcyPj4yXV0ocixpLG4pO2JyZWFrfW5zWzEyNyZhclszNjQrKDB8YXJbQSsxODU5Mj4+Ml0pPj4yXV0ocixpLG4pfXdoaWxlKDApO2lmKCFkJiYwfGFyWyhwPUErMjh8MCk+PjJdJiYoQj0wfGFyW2s+PjJdLHk9MHxhcltCKzU3Njg+PjJdLEI9MHxhcltCKzU3NjA+PjJdLDA8KDB8bikpKXtmPTA7ZG97Zm9yKGU9MHxicihmLG4pLFo9MDtSPSgwfGJyKGFyW0ErMTQ0MTIrKChOPVorZXwwKTw8Mik+PjJdPDx5Pj5CLDB8YXJbcD4+Ml0pKT4+MyxhclsoTj1yKyhOPDwyKXwwKT4+Ml09UisoMHxhcltOPj4yXSksKDB8KFo9WisxfDApKSE9KDB8bik7KTtmPWYrMXwwfXdoaWxlKCgwfGYpIT0oMHxuKSl9aWYob3NbNjMmYXJbNDYwKygwfGFyW0ErMTg1OTI+PjJdKT4+Ml1dKHYsaCxyLG4sdyksSSlmb3IoZj1pKzMyfDA7KChvcltpPj4xXT0wKXwoaT1pKzJ8MCkpPCgwfGYpOyk7fWVsc2V7aWYoRT0xPCgwfG4pKWZvcihaPW4sZj0wO2Y9ZisxfDAsMzxaPj4+MDspWj4+Pj0xO2Vsc2UgZj0wO2lmKEI9KGY9Zit3fDApKy01fDAsMHx0clsxNDAwK2I+PjBdKXt5PTE8PGYrLTY7ZG97aWYoIWEpe2lmKCgwfG4pPDMyKXtmPXQrM3wwO2JyZWFrfWY9dCsxfDA7YnJlYWt9Zj10fXdoaWxlKDApO3N3aXRjaCgoYT1uKy00fDApPj4+MnxhPDwzMHwwKXtjYXNlIDA6Vz01OTkzK2IrKGY8PDQpfDA7YnJlYWs7Y2FzZSAxOlc9NjA4OStiKyhmPDw2KXwwO2JyZWFrO2Nhc2UgMzpXPTY0NzMrYisoZjw8OCl8MDticmVhaztjYXNlIDc6Vz04MDA5K2IrKGY8PDEwKXwwO2JyZWFrO2RlZmF1bHQ6c3IoNDQ0NTYsNDQ0NDMsNDkyLDQ0NDU4KX1pZigwPCgwfG9yWyhyPUErMTQ0MDQrKHQ8PDEpfDApPj4xXSkpZm9yKHA9MHxhcls4MDcyKygoKDB8WCklNnwwKTw8Mik+PjJdLFo9KDB8WCkvNnwwLGU9KCgwfHkpPDApPDwzMT4+MzEsZj0wO1g9MHxvcltBKzgyNjArKHQ8PDExKSsoZjw8MSk+PjFdLFI9KDB8YnIoMHxjcltXK1g+PjBdLHApKTw8WixhPTB8b3JbQSsyMTE2Kyh0PDwxMSkrKGY8PDEpPj4xXSxhPTB8YmIoMHwoYT0wfHRiKDB8KGE9MHxuYigwfFIsKCgwfFIpPDApPDwzMT4+MzF8MCwwfGEsKCgwfGEpPDApPDwzMT4+MzF8MCkpLDB8RCwwfHksMHxlKSksMHxELDB8QiksRj0oMHwoUj1EKSk8LTF8LTE9PSgwfFIpJmE+Pj4wPDQyOTQ5MzQ1MjgsYT0oTj0oMHxSKTwwfDA9PSgwfFIpJmE+Pj4wPDMyNzY3KT9hOjMyNzY3LG9yW2krKFg8PDEpPj4xXT1GPy0zMjc2ODo2NTUzNSZhLCgwfChmPWYrMXwwKSk8KDB8b3Jbcj4+MV0pOyk7fWVsc2UgaWYocD1mKy05fDAscj0xPDxmKy0xMCxaPWFyWzgwNzIrKCgoMHxYKSU2fDApPDwyKT4+Ml08PCgoMHxYKS82fDApLDA8KDB8b3JbKGU9QSsxNDQwNCsodDw8MSl8MCk+PjFdKSlmb3IoZj0wO1c9KDB8YnIoMHxvcltBKzIxMTYrKHQ8PDExKSsoZjw8MSk+PjFdLFopKStyPj5wLG9yW2krKG9yW0ErODI2MCsodDw8MTEpKyhmPDwxKT4+MV08PDEpPj4xXT0oMHxXKTwtMzI3Njg/LTMyNzY4OjY1NTM1JigoMHxXKTwzMjc2Nz9XOjMyNzY3KSwoMHwoZj1mKzF8MCkpPCgwfG9yW2U+PjFdKTspO2lmKHA9MDwoMHxuKSwhbyl7aWYoWj11JjA9PShsfHR8MCksMHxjJiZzcig0NDQ4Niw0NDQ0Myw1OTEsNDQ0NTgpLDB8dHJbMTAwNzErYj4+MF0pe3huKEEsaSxuLG4sMSZaLHYsaCx3LHQpO2JyZWFrfWlmKGY9MHxhcltBKzE4NTkyPj4yXSxaKXt0c1szMSZhcltmKzQxMj4+Ml1dKHYsaSxoLHcpO2JyZWFrfXN3aXRjaCgwfG4pe2Nhc2UgNDp0c1szMSZhcltmKzQxNj4+Ml1dKHYsaSxoLHcpO2JyZWFrIEE7Y2FzZSA4OnRzWzMxJmFyW2YrNDIwPj4yXV0odixpLGgsdyk7YnJlYWsgQTtjYXNlIDE2OnRzWzMxJmFyW2YrNDI0Pj4yXV0odixpLGgsdyk7YnJlYWsgQTtkZWZhdWx0OnRzWzMxJmFyW2YrNDI4Pj4yXV0odixpLGgsdyk7YnJlYWsgQX19aWYoRSl7Zm9yKGY9bixaPTA7MzxmPj4+MDspZj4+Pj0xLFo9WisxfDA7Wj1aKzZ8MH1lbHNlIFo9NTtlPTA8KDB8KGU9MjAtd3wwKSk/ZTowLEkmJmZzWzYzJmFyWzQzMisoMHxhcltBKzE4NTkyPj4yXSk+PjJdXShpLDQpLHI9ZD9BKzE0NDEyfDA6cztkb3tpZihjKXtpZihmPTB8YXJbQSsxODU5Mj4+Ml0sMj09KDB8Yykpe29zWzYzJmFyW2YrNDY0Pj4yXV0ocixpLG4sWixlKTticmVha31vc1s2MyZhcltmKzQ2OD4+Ml1dKHIsaSxuLFosZSk7YnJlYWt9b3NbNjMmYXJbNDcyKygwfGFyW0ErMTg1OTI+PjJdKT4+Ml1dKHIsaSxuLFosZSl9d2hpbGUoMCk7aWYoIWQmJjB8YXJbKEM9QSsyOHwwKT4+Ml0mJihWPTB8YXJbaz4+Ml0sRz0wfGFyW1YrNTc2OD4+Ml0sVj0wfGFyW1YrNTc2MD4+Ml0scCkpe2Y9MDtkb3tmb3IoZT0wfGJyKGYsbiksWj0wO1I9KDB8YnIoYXJbQSsxNDQxMisoKE49WitlfDApPDwyKT4+Ml08PEc+PlYsMHxhcltDPj4yXSkpPj4zLGFyWyhOPXIrKE48PDIpfDApPj4yXT1SKygwfGFyW04+PjJdKSwoMHwoWj1aKzF8MCkpIT0oMHxuKTspO2Y9ZisxfDB9d2hpbGUoKDB8ZikhPSgwfG4pKX1pZihvc1s2MyZhcls0NjArKDB8YXJbQSsxODU5Mj4+Ml0pPj4yXV0odixoLHIsbix3KSxJKWZvcihmPWkrMzJ8MDsoKG9yW2k+PjFdPTApfChpPWkrMnwwKSk8KDB8Zik7KTt9fXdoaWxlKDApO2lmKCgwfG9yWyhaPUErMTQ0MDQrKHQ8PDEpfDApPj4xXSk8PTApcmV0dXJuIHVyPWc7Zj0wfGFyW20+PjJdLGk9MDtmb3IoO29yW2YrKG9yW0ErODI2MCsodDw8MTEpKyhpPDwxKT4+MV08PDEpPj4xXT0wLGk9aSsxfDAsKDB8aSk8KDB8b3JbWj4+MV0pOyk7dXI9Z30oQSxlLHIsaSxmLG4sdCxvLGEsYyk6dm9pZCBmdW5jdGlvbihBLGUscixpLGYsbix0LG8sYSxjKXtlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsdHw9MCxvfD0wLGF8PTAsY3w9MDt2YXIgbCx1LGIscyxkLGssaCx3LHYsbSxnPTAsWj0wLHA9MCx5PTAsQj0wLEU9MCxYPTAsVz0wLEk9MCxDPTAsRz0wLFY9MCxGPTAsUj0wO3N3aXRjaCh1cj0obT11cikrNDA5NnwwLHM9bSxiPTB8YXJbKGs9MTg1OTYrKEF8PTApfDApPj4yXSwwfHQpe2Nhc2UgMDpnPUErMTg1NDR8MDticmVhaztjYXNlIDE6Zz1BKzE4NTQ4fDA7YnJlYWs7Y2FzZSAyOmc9QSsxODU1MnwwO2JyZWFrO2RlZmF1bHQ6c3IoNDQ0NTYsNDQ0NDMsMzY3LDQ0NDU4KX1FPTB8YXJbZz4+Ml0saT0wfGFyWyh2PUErMjExMnwwKT4+Ml0saD0wfGFyWygoZD0wPT0oMHx0KSk/NDArYnwwOjQ0K2J8MCk+PjJdLHc9KDB8YXJbNCtiKyh0PDwyKT4+Ml0pKygoMHxicihoLHIpKStlKXwwLGY9MHxhclsxMDM2OCtiPj4yXSxlPj49ZixmPXI+PmYsKDB8ZSk8PS0xJiZzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpO2c9MHxhclsxMDM3MitiPj4yXSwoMHxnKTw9KDB8ZSkmJnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSk7KDB8Zik8PS0xJiZzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpOygwfGYpPj0oMHxhclsxMDM3NitiPj4yXSkmJnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSk7Vz0oMHxhclsxMDM2MCtiPj4yXSkrKDMqKCgwfGJyKGcsZikpK2V8MCl8MCl8MCxXPSg2NTUzNSYoY3JbVz4+MF18Y3JbVysxPj4wXTw8OCkpPj4+OCYzLGw9NjU1MzUmVyxXPSh1PTQ9PSgwfG4pKSYwIT0oMHx0cls1NzQ4K2I+PjBdKSZXPDwxNj4+MTY9PTA7QTpkb3tpZigwfHRyW0ErMzI+PjBdKXtpZihyPWQ/QSsxNDQxMnwwOnMsMDwoMHxvclsoZz1BKzE0NDA0Kyh0PDwxKXwwKT4+MV0pKWZvcihmPTA7b3JbaSsob3JbQSs4MjYwKyh0PDwxMSkrKGY8PDEpPj4xXTw8MSk+PjFdPTB8b3JbQSsyMTE2Kyh0PDwxMSkrKGY8PDEpPj4xXSwoMHwoZj1mKzF8MCkpPCgwfG9yW2c+PjFdKTspO1cmJmZzWzYzJmFyWzQzMisoMHxhcltBKzE4NTkyPj4yXSk+PjJdXShpLDQpO2Rve2lmKGMpe2lmKGY9MHxhcltBKzE4NTkyPj4yXSwyPT0oMHxjKSl7bnNbMTI3JmFyW2YrMzY4Pj4yXV0ocixpLG4pO2JyZWFrfW5zWzEyNyZhcltmKzM3Mj4+Ml1dKHIsaSxuKTticmVha31uc1sxMjcmYXJbMzY0KygwfGFyW0ErMTg1OTI+PjJdKT4+Ml1dKHIsaSxuKX13aGlsZSgwKTtpZighZCYmMHxhclsoWj1BKzI4fDApPj4yXSYmKHk9MHxhcltrPj4yXSxwPTB8YXJbeSs1NzY4Pj4yXSx5PTB8YXJbeSs1NzYwPj4yXSwwPCgwfG4pKSl7Zj0wO2Rve2ZvcihlPTB8YnIoZixuKSxnPTA7Rj0oMHxicihhcltBKzE0NDEyKygoUj1nK2V8MCk8PDIpPj4yXTw8cD4+eSwwfGFyW1o+PjJdKSk+PjMsYXJbKFI9cisoUjw8Mil8MCk+PjJdPUYrKDB8YXJbUj4+Ml0pLCgwfChnPWcrMXwwKSkhPSgwfG4pOyk7Zj1mKzF8MH13aGlsZSgoMHxmKSE9KDB8bikpfWlmKG9zWzYzJmFyWzQ1NisoMHxhcltBKzE4NTkyPj4yXSk+PjJdXSh3LGgscixuLDgpLFcpZm9yKGY9aSszMnwwOygob3JbaT4+MV09MCl8KGk9aSsyfDApKTwoMHxmKTspO31lbHNle2lmKGU9MHxhclsoZD81NzYwK2J8MDo1NzY4K2J8MCk+PjJdLEI9MTwoMHxuKSlmb3IoZz1uLGY9MDtmPWYrMXwwLDM8Zz4+PjA7KWc+Pj49MTtlbHNlIGY9MDtpZih5PShmPWYrZXwwKSstNXwwLDB8dHJbMTQwMCtiPj4wXSl7cD0xPDxmKy02O2Rve2lmKCFhKXtpZigoMHxuKTwzMil7Zj10KzN8MDticmVha31mPXQrMXwwO2JyZWFrfWY9dH13aGlsZSgwKTtzd2l0Y2goKGE9bistNHwwKT4+PjJ8YTw8MzB8MCl7Y2FzZSAwOlg9NTk5MytiKyhmPDw0KXwwO2JyZWFrO2Nhc2UgMTpYPTYwODkrYisoZjw8Nil8MDticmVhaztjYXNlIDM6WD02NDczK2IrKGY8PDgpfDA7YnJlYWs7Y2FzZSA3Olg9ODAwOStiKyhmPDwxMCl8MDticmVhaztkZWZhdWx0OnNyKDQ0NDU2LDQ0NDQzLDQ5Miw0NDQ1OCl9aWYoMDwoMHxvclsocj1BKzE0NDA0Kyh0PDwxKXwwKT4+MV0pKWZvcihaPTB8YXJbODA3MisoKCgwfEUpJTZ8MCk8PDIpPj4yXSxnPSgwfEUpLzZ8MCxlPSgoMHxwKTwwKTw8MzE+PjMxLGY9MDtFPTB8b3JbQSs4MjYwKyh0PDwxMSkrKGY8PDEpPj4xXSxGPSgwfGJyKDB8Y3JbWCtFPj4wXSxaKSk8PGcsYT0wfG9yW0ErMjExNisodDw8MTEpKyhmPDwxKT4+MV0sYT0wfGJiKDB8KGE9MHx0YigwfChhPTB8bmIoMHxGLCgoMHxGKTwwKTw8MzE+PjMxfDAsMHxhLCgoMHxhKTwwKTw8MzE+PjMxfDApKSwwfEQsMHxwLDB8ZSkpLDB8RCwwfHkpLFY9KDB8KEY9RCkpPC0xfC0xPT0oMHxGKSZhPj4+MDw0Mjk0OTM0NTI4LGE9KFI9KDB8Rik8MHwwPT0oMHxGKSZhPj4+MDwzMjc2Nyk/YTozMjc2NyxvcltpKyhFPDwxKT4+MV09Vj8tMzI3Njg6NjU1MzUmYSwoMHwoZj1mKzF8MCkpPCgwfG9yW3I+PjFdKTspO31lbHNlIGlmKFo9ZistOXwwLHI9MTw8ZistMTAsZz1hcls4MDcyKygoKDB8RSklNnwwKTw8Mik+PjJdPDwoKDB8RSkvNnwwKSwwPCgwfG9yWyhlPUErMTQ0MDQrKHQ8PDEpfDApPj4xXSkpZm9yKGY9MDtYPSgwfGJyKDB8b3JbQSsyMTE2Kyh0PDwxMSkrKGY8PDEpPj4xXSxnKSkrcj4+WixvcltpKyhvcltBKzgyNjArKHQ8PDExKSsoZjw8MSk+PjFdPDwxKT4+MV09KDB8WCk8LTMyNzY4Py0zMjc2ODo2NTUzNSYoKDB8WCk8MzI3Njc/WDozMjc2NyksKDB8KGY9ZisxfDApKTwoMHxvcltlPj4xXSk7KTtpZihlPTA8KDB8biksIW8pe2lmKGc9dSYwPT0obHx0fDApLDB8YyYmc3IoNDQ0ODYsNDQ0NDMsNTkxLDQ0NDU4KSwwfHRyWzEwMDcxK2I+PjBdKXtIbihBLGksbixuLDEmZyx3LGgsOCx0KTticmVha31pZihmPTB8YXJbQSsxODU5Mj4+Ml0sZyl7bnNbMTI3JmFyW2YrMzg4Pj4yXV0odyxpLGgpO2JyZWFrfXN3aXRjaCgwfG4pe2Nhc2UgNDpuc1sxMjcmYXJbZiszOTI+PjJdXSh3LGksaCk7YnJlYWsgQTtjYXNlIDg6bnNbMTI3JmFyW2YrMzk2Pj4yXV0odyxpLGgpO2JyZWFrIEE7Y2FzZSAxNjpuc1sxMjcmYXJbZis0MDA+PjJdXSh3LGksaCk7YnJlYWsgQTtkZWZhdWx0Om5zWzEyNyZhcltmKzQwND4+Ml1dKHcsaSxoKTticmVhayBBfX1pZihCKXtmb3IoZj1uLGc9MDszPGY+Pj4wOylmPj4+PTEsZz1nKzF8MDtnPWcrNnwwfWVsc2UgZz01O1cmJmZzWzYzJmFyWzQzMisoMHxhcltBKzE4NTkyPj4yXSk+PjJdXShpLDQpLHI9ZD9BKzE0NDEyfDA6cztkb3tpZihjKXtpZihmPTB8YXJbQSsxODU5Mj4+Ml0sMj09KDB8Yykpe29zWzYzJmFyW2YrNDY0Pj4yXV0ocixpLG4sZywxMik7YnJlYWt9b3NbNjMmYXJbZis0Njg+PjJdXShyLGksbixnLDEyKTticmVha31vc1s2MyZhcls0NzIrKDB8YXJbQSsxODU5Mj4+Ml0pPj4yXV0ocixpLG4sZywxMil9d2hpbGUoMCk7aWYoIWQmJjB8YXJbKEk9QSsyOHwwKT4+Ml0mJihHPTB8YXJbaz4+Ml0sQz0wfGFyW0crNTc2OD4+Ml0sRz0wfGFyW0crNTc2MD4+Ml0sZSkpe2Y9MDtkb3tmb3IoZT0wfGJyKGYsbiksZz0wO0Y9KDB8YnIoYXJbQSsxNDQxMisoKFI9ZytlfDApPDwyKT4+Ml08PEM+PkcsMHxhcltJPj4yXSkpPj4zLGFyWyhSPXIrKFI8PDIpfDApPj4yXT1GKygwfGFyW1I+PjJdKSwoMHwoZz1nKzF8MCkpIT0oMHxuKTspO2Y9ZisxfDB9d2hpbGUoKDB8ZikhPSgwfG4pKX1pZihvc1s2MyZhcls0NTYrKDB8YXJbQSsxODU5Mj4+Ml0pPj4yXV0odyxoLHIsbiw4KSxXKWZvcihmPWkrMzJ8MDsoKG9yW2k+PjFdPTApfChpPWkrMnwwKSk8KDB8Zik7KTt9fXdoaWxlKDApO2lmKCgwfG9yWyhnPUErMTQ0MDQrKHQ8PDEpfDApPj4xXSk8PTApcmV0dXJuIHVyPW07Zj0wfGFyW3Y+PjJdLGk9MDtmb3IoO29yW2YrKG9yW0ErODI2MCsodDw8MTEpKyhpPDwxKT4+MV08PDEpPj4xXT0wLGk9aSsxfDAsKDB8aSk8KDB8b3JbZz4+MV0pOyk7dXI9bX0oQSxlLHIsaSxmLG4sdCxvLGEsYyl9ZnVuY3Rpb24gSG4oQSxlLHIsaSxmLG4sdCxvLGEpe2V8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCx0fD0wLG98PTAsYXw9MDt2YXIgYyxsLHUsYj0wLHM9MCxkPTAsaz0wO3VyPSh1PXVyKSs0MDk2fDAsbD0wfGFyWyhBfD0wKSsxODU5Mj4+Ml0sYz0ocj0wPT0oMHxhKSk/QSsxNDQxMnwwOnUsYT0yMC1vfDA7QTpkb3tpZigxPT0oMHxmKSl0c1szMSZhcls0MzYrbD4+Ml1dKGMsZSxhLDE1KTtlbHNlIHN3aXRjaCgwfGkpe2Nhc2UgNDp0c1szMSZhcls0NDArbD4+Ml1dKGMsZSxhLDE1KTticmVhayBBO2Nhc2UgODp0c1szMSZhcls0NDQrbD4+Ml1dKGMsZSxhLDE1KTticmVhayBBO2Nhc2UgMTY6dHNbMzEmYXJbNDQ4K2w+PjJdXShjLGUsYSwxNSk7YnJlYWsgQTtkZWZhdWx0OnRzWzMxJmFyWzQ1MitsPj4yXV0oYyxlLGEsMTUpO2JyZWFrIEF9fXdoaWxlKDApO2lmKCFyJiYwfGFyWyhiPUErMjh8MCk+PjJdJiYoZD0wfGFyW0ErMTg1OTY+PjJdLHM9MHxhcltkKzU3Njg+PjJdLGQ9MHxhcltkKzU3NjA+PjJdLDA8KDB8aSkpKXtyPTA7ZG97Zm9yKGU9MHxicihyLGkpLGE9MDtrPSgwfGJyKGFyW0ErMTQ0MTIrKChmPWErZXwwKTw8Mik+PjJdPDxzPj5kLDB8YXJbYj4+Ml0pKT4+MyxhclsoZj1jKyhmPDwyKXwwKT4+Ml09aysoMHxhcltmPj4yXSksKDB8KGE9YSsxfDApKSE9KDB8aSk7KTtyPXIrMXwwfXdoaWxlKCgwfHIpIT0oMHxpKSl9b3NbNjMmYXJbNDU2K2w+PjJdXShuLHQsYyxpLG8pLHVyPXV9ZnVuY3Rpb24geG4oQSxlLHIsaSxmLG4sdCxvLGEpe2V8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCx0fD0wLG98PTAsYXw9MDt2YXIgYyxsLHUsYj0wLHM9MCxkPTAsaz0wO3VyPSh1PXVyKSs0MDk2fDAsbD0wfGFyWyhBfD0wKSsxODU5Mj4+Ml0sYz0ocj0wPT0oMHxhKSk/QSsxNDQxMnwwOnUsYT0yMC1vfDA7QTpkb3tpZigxPT0oMHxmKSl0c1szMSZhcls0MzYrbD4+Ml1dKGMsZSxhLDE1KTtlbHNlIHN3aXRjaCgwfGkpe2Nhc2UgNDp0c1szMSZhcls0NDArbD4+Ml1dKGMsZSxhLDE1KTticmVhayBBO2Nhc2UgODp0c1szMSZhcls0NDQrbD4+Ml1dKGMsZSxhLDE1KTticmVhayBBO2Nhc2UgMTY6dHNbMzEmYXJbNDQ4K2w+PjJdXShjLGUsYSwxNSk7YnJlYWsgQTtkZWZhdWx0OnRzWzMxJmFyWzQ1MitsPj4yXV0oYyxlLGEsMTUpO2JyZWFrIEF9fXdoaWxlKDApO2lmKCFyJiYwfGFyWyhiPUErMjh8MCk+PjJdJiYoZD0wfGFyW0ErMTg1OTY+PjJdLHM9MHxhcltkKzU3Njg+PjJdLGQ9MHxhcltkKzU3NjA+PjJdLDA8KDB8aSkpKXtyPTA7ZG97Zm9yKGU9MHxicihyLGkpLGE9MDtrPSgwfGJyKGFyW0ErMTQ0MTIrKChmPWErZXwwKTw8Mik+PjJdPDxzPj5kLDB8YXJbYj4+Ml0pKT4+MyxhclsoZj1jKyhmPDwyKXwwKT4+Ml09aysoMHxhcltmPj4yXSksKDB8KGE9YSsxfDApKSE9KDB8aSk7KTtyPXIrMXwwfXdoaWxlKCgwfHIpIT0oMHxpKSl9b3NbNjMmYXJbNDYwK2w+PjJdXShuLHQsYyxpLG8pLHVyPXV9ZnVuY3Rpb24gUG4oQSxlLHIpe0F8PTAscnw9MDt2YXIgaSxmLG4sdDt1cj0odD11cikrMTZ8MCxmPXQsbj00Mj09KDB8dHJbKGV8PTApPj4wXSksaT0wfGFyWzI1NDNdLG58fFVpKDQ0NTA1LDYsMSxpKSxhcltmPj4yXT1yLFFjKEEsZSsoMSZuKXwwLGYpLE9pKGkpLHVyPXR9ZnVuY3Rpb24gTG4oQSxlLHIpe2V8PTAscnw9MDt2YXIgaSxmLG49MCx0PTA7aWYodHJbKEF8PTApPj4wXT0xLHRyW0ErNDQ+PjBdPTEscW4oQSxlKSxmPXIrLTF8MCxpPTE8KDB8cikpZm9yKG49MDt0PTI1NSYoMHxBdChlLDEpKSx0cltBKzUyKyg1MipufDApPj4wXT10LHQ9MjU1JigwfEF0KGUsMSkpLHRyW0ErNTIrKDUyKm58MCkrNDQ+PjBdPXQsKDB8KG49bisxfDApKSE9KDB8Zik7KTtpZigocistMnwwKT4+PjA8Nylmb3Iobj1mO2V0KGUsMiksKDB8KG49bisxfDApKTw4Oyk7aWYoaSlmb3Iobj0wO3FuKEErNTIrKDUyKm58MCl8MCxlKSwoMHwobj1uKzF8MCkpIT0oMHxmKTspO31mdW5jdGlvbiBLbihBLGUscil7cnw9MDt2YXIgaSxmLG4sdCxvLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wLGQ9MCxrPTA7cmV0dXJuIHVyPShvPXVyKSszMnwwLGY9bys4fDAsaT1vLChlfD0wKT4+PjA8PShjPTB8YXJbKG49KEF8PTApKzR8MCk+PjJdKT4+PjA/KGFyW24+PjJdPWUsdm9pZCh1cj1vKSk6KChsPSh1PTB8YXJbKHQ9QSs4fDApPj4yXSk8PDUpPj4+MDwoYT1lLWN8MCk+Pj4wfChsLWF8MCk+Pj4wPGM+Pj4wPyhhcltmPj4yXT0wLGFyWyhzPTQrZnwwKT4+Ml09MCwoKGFyWyhkPTgrZnwwKT4+Ml09MCl8ZSk8MCYmemwoKSxjPXU8PDYsdT1lKzMxJi0zMixmdW5jdGlvbihBLGUpe2V8PTA7dmFyIHIsaSxmLG4sdCxvPTAsYT0wLGM9MCxsPTA7aWYodXI9KHQ9dXIpKzMyfDAsbz10KzE2fDAscj10Kzh8MCxpPXQsYXJbKG49OCsoQXw9MCl8MCk+PjJdPDw1Pj4+MD49ZT4+PjApcmV0dXJuIHVyPXQ7YXJbbz4+Ml09MCxhclsoYT1vKzR8MCk+PjJdPTAsYXJbKGY9bys4fDApPj4yXT0wLCgwfGUpPDAmJnpsKCk7Yz0wfGh1KChsPTErKChlKy0xfDApPj4+NSl8MCk8PDIpLGFyW28+PjJdPWMsYXJbYT4+Ml09MCxhcltmPj4yXT1sLGw9MHxhcltBPj4yXSxhcltyPj4yXT1sLGFyWzQrcj4+Ml09MCxlPTB8YXJbKGM9QSs0fDApPj4yXSxhcltpPj4yXT1sKyhlPj4+NTw8MiksYXJbaSs0Pj4yXT0zMSZlLGZ1bmN0aW9uKEEsZSxyKXtlfD0wLHJ8PTA7dmFyIGksZixuLHQsbyxhLGMsbD0wLHU9MCxiPTAscz0wLGQ9MDtpZih1cj0oYz11cikrMzJ8MCxmPWMrMjR8MCxuPWMrMTZ8MCx0PWMrOHwwLGE9YyxkPTB8YXJbKHU9NCsoQXw9MCl8MCk+PjJdLG89MHxhcltlPj4yXSxsPTB8YXJbZSs0Pj4yXSxpPTB8YXJbcj4+Ml0sYj0wfGFyW3IrND4+Ml0scz1pLW88PDMsYXJbdT4+Ml09ZC1sK2Ircyx1PSgwfGFyW0E+PjJdKSsoZD4+PjU8PDIpfDAsZT11LCgwfGwpIT0oMHwocj0zMSZkKSkpcmV0dXJuIGFyW2Y+PjJdPW8sYXJbNCtmPj4yXT1sLGFyW24+PjJdPWksYXJbNCtuPj4yXT1iLGFyW3Q+PjJdPWUsYXJbNCt0Pj4yXT1yLGZ1bmN0aW9uKEEsZSxyLGkpe0F8PTAscnw9MCxpfD0wO3ZhciBmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MDtpZihsPTB8YXJbKGV8PTApPj4yXSxmPTB8YXJbKHU9ZSs0fDApPj4yXSxvPSgoMHxhcltyPj4yXSktbDw8MykrKDB8YXJbcis0Pj4yXSktZnwwLHI9bCwoMHxvKTw9MClyZXR1cm4gZT1pKzR8MCxpPTB8YXJbaT4+Ml0sYXJbQT4+Ml09aSxpPUErNHwwLEE9MHxhcltlPj4yXSxhcltpPj4yXT1BO2Y/KG49LTE+Pj4oKG49MzItZnwwKS0obD0oMHxvKTwoMHxuKT9vOm4pfDApJi0xPDxmJmFyW3I+PjJdLGY9MHxhclsoYz1pKzR8MCk+PjJdLHI9KGE9MzItZnwwKT4+PjA8bD4+PjA/YTpsLHQ9MHxhcltpPj4yXSxmPWFyW3Q+PjJdJn4oLTE+Pj4oYS1yfDApJi0xPDxmKSxhclt0Pj4yXT1mLGE9MHxhcltjPj4yXSxiPTB8YXJbdT4+Ml0sYXJbdD4+Ml09KGI+Pj4wPGE+Pj4wP248PGEtYjpuPj4+KGItYXwwKSl8ZixmPSgwfGFyW2M+PjJdKStyfDAsdD10KyhmPj4+NTw8Mil8MCxhcltpPj4yXT10LGYmPTMxLGFyW2M+PjJdPWYsMDwoMHwoYT1sLXJ8MCkpJiYoZj1hclt0Pj4yXSZ+KC0xPj4+KDMyLWF8MCkpLGFyW3Q+PjJdPWYsYXJbdD4+Ml09bj4+PigoMHxhclt1Pj4yXSkrcnwwKXxmLGFyW2M+PjJdPWEsZj1hKSxyPTQrKDB8YXJbZT4+Ml0pfDAsYXJbZT4+Ml09cixvPW8tbHwwKTpmPTB8YXJbKGM9Zj1pKzR8MCk+PjJdO2lmKGE9MzItZnwwLG49LTE8PGYsMzE8KDB8bykpe2Zvcih0PX5uLGY9bzt1PTB8YXJbcj4+Ml0sYj0wfGFyW2k+PjJdLGw9YXJbYj4+Ml0mdCxhcltiPj4yXT1sLGFyW2I+PjJdPXU8PGFyW2M+PjJdfGwsYj1iKzR8MCxhcltpPj4yXT1iLGFyW2I+PjJdPWFyW2I+PjJdJm58dT4+PmEsZj1mKy0zMnwwLHI9NCsoMHxhcltlPj4yXSl8MCxhcltlPj4yXT1yLDMxPCgwfGYpOyk7byY9MzF9aWYoKDB8byk8PTApcmV0dXJuIGU9YyxiPTB8YXJbaT4+Ml0sYXJbQT4+Ml09YixiPUErNHwwLGk9MHxhcltlPj4yXSxhcltiPj4yXT1pO2lmKHQ9YXJbcj4+Ml0mLTE+Pj4oMzItb3wwKSxuPSgwfGEpPCgwfG8pP2E6byxmPTB8YXJbaT4+Ml0scj1hcltmPj4yXSZ+KC0xPDxhcltjPj4yXSYtMT4+PihhLW58MCkpLGFyW2Y+PjJdPXIsYXJbZj4+Ml09cnx0PDxhcltjPj4yXSxyPSgwfGFyW2M+PjJdKStufDAsZj1mKyhyPj4+NTw8Mil8MCxhcltpPj4yXT1mLGFyW2M+PjJdPTMxJnIsKDB8KHI9by1ufDApKTw9MClyZXR1cm4gZT1jLGI9MHxhcltpPj4yXSxhcltBPj4yXT1iLGI9QSs0fDAsaT0wfGFyW2U+PjJdLGFyW2I+PjJdPWk7YXJbZj4+Ml09YXJbZj4+Ml0mfigtMT4+PigzMi1yfDApKXx0Pj4+bixhcltjPj4yXT1yLGU9YyxiPTB8YXJbaT4+Ml0sYXJbQT4+Ml09YixiPUErNHwwLGk9MHxhcltlPj4yXSxhcltiPj4yXT1pfShhLGYsbix0KSx1cj1jO3I9Yi1sK3N8MCxzPW8sMDwoMHxyKSYmKGU9bD8oZD0tMT4+PigoZD0zMi1sfDApLShlPSgwfHIpPCgwfGQpP3I6ZCl8MCkmLTE8PGwsYXJbdT4+Ml09YXJbdT4+Ml0mfmR8YXJbcz4+Ml0mZCxyPXItZXwwLHU9dSsoKGw9ZStsfDApPj4+NTw8Mil8MCxsJj0zMSxzPXMrNHwwKToobD0wLG8pLHdiKDB8dSwwfGUsKGI9KDB8cikvMzJ8MCk8PDJ8MCksQT1yLShiPDw1KXwwLGU9cj11KyhiPDwyKXwwLDA8KDB8QSkmJihsPS0xPj4+KDMyLUF8MCksYXJbcj4+Ml09YXJbcj4+Ml0mfmx8YXJbcysoYjw8Mik+PjJdJmwsbD1BKSk7YXJbYT4+Ml09ZSxhclthKzQ+PjJdPWwsdXI9Y30obyxyLGkpLGU9MHxhcltBPj4yXSxhcltBPj4yXT1hcltvPj4yXSxhcltvPj4yXT1lLG89MHxhcltjPj4yXSxhcltjPj4yXT1hclthPj4yXSxhclthPj4yXT1vLGE9MHxhcltuPj4yXSxhcltuPj4yXT1hcltmPj4yXSxhcltmPj4yXT1hLDB8ZSYmdnUoZSk7dXI9dH0oZixsPj4+MDwxMDczNzQxODIzP2M+Pj4wPHU+Pj4wP3U6YzoyMTQ3NDgzNjQ3KSxsPTB8YXJbbj4+Ml0sYXJbcz4+Ml09bCthLHU9Yz0wfGFyW0E+PjJdLGU9MHxhcltmPj4yXSwwPCgwfChsPSh1KyhsPj4+NTw8MiktYzw8MykrKDMxJmwpfDApKT8od2IoMHxlLDB8YywoYj1sPj4+NSk8PDJ8MCksYz1sLShiPDw1KXwwLGU9bD1lKyhiPDwyKXwwLDA8KDB8Yyk/KGs9LTE+Pj4oMzItY3wwKSxhcltsPj4yXT1hcltsPj4yXSZ+a3xhclt1KyhiPDwyKT4+Ml0mayk6Yz0wKTpjPTAsYXJbaT4+Ml09ZSxhcltpKzQ+PjJdPWMsZT0wfGFyWyhsPWkpPj4yXSxsPTB8YXJbbCs0Pj4yXSxjPTB8YXJbQT4+Ml0sYXJbQT4+Ml09YXJbZj4+Ml0sYXJbZj4+Ml09YyxrPTB8YXJbbj4+Ml0sYXJbbj4+Ml09YXJbcz4+Ml0sYXJbcz4+Ml09ayxrPTB8YXJbdD4+Ml0sYXJbdD4+Ml09YXJbZD4+Ml0sYXJbZD4+Ml09aywwfGMmJnZ1KGMpKToobD0oMHxhcltBPj4yXSkrKGM+Pj41PDwyKXwwLGFyW24+PjJdPWUsZT1sLGw9MzEmYyksYT8odT0wPT0oMHxsKSxjPWUscj8odXx8KGU9YT4+PjA8KGs9MzItbHwwKT4+PjA/YTprLGFyW2M+PjJdPWFyW2M+PjJdfC0xPj4+KGstZXwwKSYtMTw8bCxhPWEtZXwwLGU9Yz1jKzR8MCksdmIoMHxlLC0xLChrPWE+Pj41KTw8MnwwKSwoYT1hLShrPDw1KXwwKSYmKGFyWyhlPWMrKGs8PDIpfDApPj4yXT1hcltlPj4yXXwtMT4+PigzMi1hfDApKSx2b2lkKHVyPW8pKToodXx8KGU9YT4+PjA8KGs9MzItbHwwKT4+PjA/YTprLGFyW2M+PjJdPWFyW2M+PjJdJn4oLTE+Pj4oay1lfDApJi0xPDxsKSxhPWEtZXwwLGU9Yz1jKzR8MCksdmIoMHxlLDAsKGs9YT4+PjUpPDwyfDApLChhPWEtKGs8PDUpfDApJiYoYXJbKGU9Yysoazw8Mil8MCk+PjJdPWFyW2U+PjJdJn4oLTE+Pj4oMzItYXwwKSkpLHZvaWQodXI9bykpKTp2b2lkKHVyPW8pKX1mdW5jdGlvbiBxbihBLGUpe2V8PTA7dmFyIHI9MCxpPTA7aWYoMHx0clsoQXw9MCk+PjBdKXtmb3Iocj0yNTUmKDB8QXQoZSwyKSksdHJbQSsxPj4wXT1yLHI9MjU1JigwfEF0KGUsMSkpLHRyW0ErMj4+MF09cixyPTB8QXQoZSw1KSxhcltBKzQ+PjJdPXIsaT0yNTUmKChyPTApfEF0KGUsMSkpO3RyW0ErOCtyPj4wXT1pLHI9cisxfDAsaT0yNTUmKDB8QXQoZSwxKSksMzIhPSgwfHIpOyk7dHJbQSs0MD4+MF09aSxpPTI1NSYoMHxBdChlLDEpKSx0cltBKzQxPj4wXT1pLGk9MjU1JigwfEF0KGUsMSkpLHRyW0ErNDI+PjBdPWksaT0yNTUmKDB8QXQoZSwxKSksdHJbQSs0Mz4+MF09aSxldChlLDQ0KX0wfHRyW0ErNDQ+PjBdJiYoaT0wfEF0KGUsOCksYXJbQSs0OD4+Ml09aSl9ZnVuY3Rpb24gJG4oQSxlLHIpe3J8PTA7dmFyIGksZixuLHQsbyxhLGMsbCx1LGIscyxkLGs9MCxoPTA7aWYodXI9KGQ9dXIpKzExMnwwLHM9ZCs4OHwwLGg9ZCs4MHwwLGI9ZCs3MnwwLHU9ZCs2NHwwLGw9ZCs1NnwwLGM9ZCs0OHwwLGE9ZCs0MHwwLG89ZCszMnwwLG49ZCsyNHwwLHQ9ZCsxNnwwLGk9ZCs4fDAsaz1kLGY9KGV8PTApPzQ1NTI3OjQ1NTM1LDB8dHJbKEF8PTApPj4wXSl7c3dpdGNoKGU9MHx0cltBKzE+PjBdLGFyW2s+PjJdPWYsYXJbays0Pj4yXT1lLFBuKHIsNDU1NDUsayksaz0wfHRyW0ErMj4+MF0sYXJbaT4+Ml09Zixhcls0K2k+PjJdPWssUG4ociw0NTU3NCxpKSwwfGFyW0ErND4+Ml0pe2Nhc2UgMTplPTQ1NjU5O2JyZWFrO2Nhc2UgMjplPTQ1NjUyO2JyZWFrO2Nhc2UgMzplPTQ1NjM1O2JyZWFrO2Nhc2UgNDplPTQ1NjEzO2JyZWFrO2RlZmF1bHQ6ZT00NTYwM31mb3IoYXJbdD4+Ml09Zixhcls0K3Q+PjJdPWUsUG4ociw0NTY2NCx0KSxhcltuPj4yXT1mLFBuKHIsNDU2OTMsbiksZT0wOzB8ZSYmUG4ociw0NTg4NCxiKSxhcltoPj4yXT10cltBKzgrZT4+MF0sUG4ociw0NTg4NyxoKSwzMiE9KDB8KGU9ZSsxfDApKTspO1BuKHIsNDU3MjgsbyksaD0wfHRyW0ErNDA+PjBdLGFyW2E+PjJdPWYsYXJbNCthPj4yXT1oLFBuKHIsNDU3MzEsYSksaD0wfHRyW0ErNDE+PjBdLGFyW2M+PjJdPWYsYXJbNCtjPj4yXT1oLFBuKHIsNDU3NjgsYyksaD0wfHRyW0ErNDI+PjBdLGFyW2w+PjJdPWYsYXJbNCtsPj4yXT1oLFBuKHIsNDU4MDQsbCksaD0wfHRyW0ErNDM+PjBdLGFyW3U+PjJdPWYsYXJbNCt1Pj4yXT1oLFBuKHIsNDU4NDQsdSl9dXI9KDB8dHJbQSs0ND4+MF0mJihoPTB8YXJbQSs0OD4+Ml0sYXJbcz4+Ml09Zixhcls0K3M+PjJdPWgsUVs4K3M+PjNdPSgwfGgpLzMwLFBuKHIsNDU4OTEscykpLGQpfWZ1bmN0aW9uIEF0KEEsZSl7ZXw9MDt2YXIgcixpPTAsZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wO2lmKCgwfChpPTB8YXJbKHI9KEF8PTApKzE2fDApPj4yXSkpPCgwfGUpKXtpPTY0LWl8MCxuPUErNHwwO0E6ZG97aWYoNzwoMHxpKSl7dD1BKzh8MCxmPTB8YXJbbj4+Ml07ZG97aWYoIWYpYnJlYWsgQTtjPTB8YXJbQT4+Ml0sYXJbQT4+Ml09YysxLGM9MHxjcltjPj4wXSxmPWYrLTF8MCxhcltuPj4yXT1mLGM9MHxkYigwfGMsMCwwfChpPWkrLTh8MCkpLGE9YXJbKGw9dCkrND4+Ml18RCxhclsobz10KT4+Ml09YXJbbD4+Ml18YyxhcltvKzQ+PjJdPWF9d2hpbGUoNzwoMHxpKSl9fXdoaWxlKDApO2k9NjQtaXwwLGFyW3I+PjJdPWl9cmV0dXJuIGw9MHxzYigwfChvPTB8YXJbKGE9Yz1BKzh8MCk+PjJdKSwwfChhPTB8YXJbYSs0Pj4yXSksNjQtZXwwKSxhPTB8ZGIoMHxvLDB8YSwwfGUpLGFyW2M+PjJdPWEsYXJbYys0Pj4yXT1ELGFyW3I+PjJdPWktZSwwfGx9ZnVuY3Rpb24gZXQoQSxlKXtlfD0wO3ZhciByLGk9MCxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTA7aWYoKDB8KGk9MHxhclsocj0oQXw9MCkrMTZ8MCk+PjJdKSk8KDB8ZSkpe2k9NjQtaXwwLG49QSs0fDA7QTpkb3tpZig3PCgwfGkpKXt0PUErOHwwLGY9MHxhcltuPj4yXTtkb3tpZighZilicmVhayBBO2M9MHxhcltBPj4yXSxhcltBPj4yXT1jKzEsYz0wfGNyW2M+PjBdLGY9ZistMXwwLGFyW24+PjJdPWYsYz0wfGRiKDB8YywwLDB8KGk9aSstOHwwKSksYT1hclsobD10KSs0Pj4yXXxELGFyWyhvPXQpPj4yXT1hcltsPj4yXXxjLGFyW28rND4+Ml09YX13aGlsZSg3PCgwfGkpKX19d2hpbGUoMCk7aT02NC1pfDAsYXJbcj4+Ml09aX1jPTB8ZGIoMHxhclsoYz1sPUErOHwwKT4+Ml0sMHxhcltjKzQ+PjJdLDB8ZSksYXJbbD4+Ml09YyxhcltsKzQ+PjJdPUQsYXJbcj4+Ml09aS1lfWZ1bmN0aW9uIHJ0KEEpe3ZhciBlLHIsaTtpPSgtOCZhclsoZT0oQXw9MCkrMTZ8MCk+PjJdfDApLzh8MCxhcltBPj4yXT0oMHxhcltBPj4yXSkrKDAtaSksYXJbKHI9QSs0fDApPj4yXT0oMHxhcltyPj4yXSkraSxhclsoQT1BKzh8MCk+PjJdPTAsYXJbQSs0Pj4yXT0wLGFyW2U+PjJdPTB9ZnVuY3Rpb24gaXQoQSl7dmFyIGUscixpPTAsZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MDtmb3IoYT0oQXw9MCkrNHwwLHI9QSs4fDAsaT0oYz0wKXxhclsoZT1BKzE2fDApPj4yXTs7KXtpZigoMHxpKTwxKXtpPTY0LWl8MDtBOmRve2lmKDc8KDB8aSkpe2Y9MHxhclthPj4yXTtkb3tpZighZilicmVhayBBO2w9MHxhcltBPj4yXSxhcltBPj4yXT1sKzEsbD0wfGNyW2w+PjBdLGY9ZistMXwwLGFyW2E+PjJdPWYsbD0wfGRiKDB8bCwwLDB8KGk9aSstOHwwKSksbj1hclsodT1yKSs0Pj4yXXxELGFyWyh0PXIpPj4yXT1hclt1Pj4yXXxsLGFyW3QrND4+Ml09bn13aGlsZSg3PCgwfGkpKX19d2hpbGUoMCk7dD02NC1pfDAsYXJbZT4+Ml09dH1lbHNlIHQ9aTtpZihuPTB8ZGIoMHwodT0wfGFyWyhsPXIpPj4yXSksMHwobD0wfGFyW2wrND4+Ml0pLDEpLGY9RCxhclsoaT1yKT4+Ml09bixhcltpKzQ+PjJdPWYsaT10Ky0xfDAsYXJbZT4+Ml09aSwhKC0xPCgwfGwpfC0xPT0oMHxsKSY0Mjk0OTY3Mjk1PHU+Pj4wKSlicmVhaztpZigxOTwoMHxjKSl7aT0tOTk5OTksbz0yMDticmVha31jPWMrMXwwfWlmKDIwPT0oMHxvKSlyZXR1cm4gMHxpO2lmKCFjKXJldHVybih1PTApfHU7aWYoKDB8dCk8PSgwfGMpKXtpPTY1LXR8MDtBOmRve2lmKDc8KDB8aSkpe3Q9MHxhclthPj4yXTtkb3tpZighdClicmVhayBBO3U9MHxhcltBPj4yXSxhcltBPj4yXT11KzEsdT0wfGNyW3U+PjBdLHQ9dCstMXwwLGFyW2E+PjJdPXQsbnw9dT0wfGRiKDB8dSwwLDB8KGk9aSstOHwwKSksZnw9RCxhclsodT1yKT4+Ml09bixhclt1KzQ+PjJdPWZ9d2hpbGUoNzwoMHxpKSl9fXdoaWxlKDApO2k9NjQtaXwwLGFyW2U+PjJdPWl9cmV0dXJuIHU9MHxzYigwfG4sMHxmLDY0LWN8MCksYT0wfGRiKDB8biwwfGYsMHxjKSxhclsobD1yKT4+Ml09YSxhcltsKzQ+PjJdPUQsYXJbZT4+Ml09aS1jLCgwfChpPXUrKDE8PGMpfDApKTw9MSYmc3IoNDczOTUsNDczODIsMTQ2LDQ3NDAzKSwwfCh1PWkrLTF8MCl9ZnVuY3Rpb24gZnQoQSl7QT0wfGl0KEF8PTApO0E6ZG97aWYoKDB8QSk8MCl7c3dpdGNoKDB8QSl7Y2FzZS05OTk5OTpicmVhaztkZWZhdWx0OmJyZWFrIEF9cmV0dXJuIDB8KEE9LTk5OTk5KX1zd2l0Y2goMHxBKXtjYXNlIDA6QT0wO2JyZWFrO2RlZmF1bHQ6YnJlYWsgQX1yZXR1cm4gMHxBfXdoaWxlKDApO3JldHVybiAwfChBPSgwfCgwPT0oMSZBfDApPzAtQXwwOkErMXwwKSkvMnwwKX1mdW5jdGlvbiBudChBLGUscil7aWYoQXw9MCxlfD0wLC0xPCgwfChyfD0wKSkpcmV0dXJuIGFyW0E+PjJdPWUsYXJbQSs0Pj4yXT1lLHZvaWQoYXJbQSs4Pj4yXT1lK3IpO3NyKDQ3ODM3LDQ3ODI4LDEzOCw0Nzg0OSl9ZnVuY3Rpb24gdHQoQSl7dmFyIGUscixpLGYsbix0O2Y9MHxhclsoaT0oQXw9MCkrNHwwKT4+Ml0sbj0oMHxhcltBKzg+PjJdKS1mfDAsYXJbQSsxMj4+Ml09NTEwLG9yWyh0PUErMjB8MCk+PjFdPTgsKChhclsocj1BKzE2fDApPj4yXT0wKXxuKTw9MHx8KEE9MStmfDAsYXJbaT4+Ml09QSxlPSgwfGNyW2Y+PjBdKTw8OCxhcltyPj4yXT1lLDEhPSgob3JbdD4+MV09MCl8bikmJihhcltpPj4yXT0yK2YsYXJbcj4+Ml09MHxlfGNyW0E+PjBdLG9yW3Q+PjFdPS04KSl9ZnVuY3Rpb24gb3QoQSxlKXtlfD0wO3ZhciByPTAsaT0wLGY9MCxuPTAsdD0wLG89MCxhPTA7cmV0dXJuIGk9KGk9MHxhclsodD0oQXw9MCkrMTJ8MCk+PjJdKS0ocj0wfGNyWyhpPj4+NiktNCsoNDc0MTIrKCgoMHxjcltlPj4wXSk+Pj4xJjI1NSk8PDIpKT4+MF0pfDAsbj0oYXJbdD4+Ml09aSk8PDcsKGY9MHxhclsoYT1BKzE2fDApPj4yXSk+Pj4wPG4+Pj4wPyhvPTI1NSYoZj0xJihyPTB8dHJbZT4+MF0pKSx0cltlPj4wXT10cls0Nzc2NCsoKDI1NSZyKT4+PjEmMjU1KT4+MF08PDEmMjU1fGYsMzI3Njg8PW4+Pj4wPzB8KGE9byk6KGFyW3Q+PjJdPWk8PDEmNjcxMDg4NjIsZj1hclthPj4yXTw8MSxhclthPj4yXT1mLGU9MSsoMHxvclsocj1BKzIwfDApPj4xXSk8PDE2Pj4xNiwob3Jbcj4+MV09ZSk8PDE2Pj4xNj8wfChhPW8pOihvcltyPj4xXT0tOCwoaT0wfGFyWyhyPUErNHwwKT4+Ml0pPj4+MD49KDB8YXJbQSs4Pj4yXSk+Pj4wfHwoYXJbcj4+Ml09aSsxLGFyW2E+PjJdPTB8ZnxjcltpPj4wXSksMHwoYT1vKSkpKToobz0wfGNyWzQ3NjY4KyhyPj4+Myk+PjBdLGFyW2E+PjJdPWYtbjw8byxhclt0Pj4yXT1yPDxvLHQ9MjU1JihpPTEmKHI9MHx0cltlPj4wXSleMSksKDI1NSZyKTwyJiYocj1pfC0yJnIsdHJbZT4+MF09ciksdHJbZT4+MF09dHJbNDc3MDArKCgyNTUmcik+Pj4xJjI1NSk+PjBdPDwxJjI1NXwxJnIscj0oMHxsclsobj1BKzIwfDApPj4xXSkrb3wwLDMyNzY4JihvcltuPj4xXT1yKXwwfHwocj1yPDwxNj4+MTYsKGY9MHxhclsoaT1BKzR8MCk+PjJdKT4+PjA8KDB8YXJbQSs4Pj4yXSk+Pj4wJiYoYXJbaT4+Ml09ZisxLGFyW2E+PjJdPSgwfGNyW2Y+PjBdKTw8cnxhclthPj4yXSksb3Jbbj4+MV09cis2NTUyOCksMHwoYT10KSl9ZnVuY3Rpb24gYXQoQSl7dmFyIGU9MCxyPTAsaT0wLGY9MCxuPTA7cmV0dXJuIHI9KDB8YXJbKGU9KEF8PTApKzEyfDApPj4yXSktMnwwLChpPShhcltlPj4yXT1yKTw8Nyk+Pj4wPD0oZj0wfGFyWyhuPUErMTZ8MCk+PjJdKT4+PjA/MHwobj0xKTozMjc2ODw9aT4+PjA/KG49MCl8bjooYXJbZT4+Ml09cjw8MSY2NzEwODg2MixpPWY8PDEsYXJbbj4+Ml09aSxmPTErKDB8b3JbKGU9QSsyMHwwKT4+MV0pPDwxNj4+MTYsKG9yW2U+PjFdPWYpPDwxNj4+MTY/KG49MCl8bjoob3JbZT4+MV09LTgsKHI9MHxhclsoZT1BKzR8MCk+PjJdKT4+PjA+PSgwfGFyW0ErOD4+Ml0pPj4+MHx8KGFyW2U+PjJdPXIrMSxhcltuPj4yXT1pKygwfGNyW3I+PjBdKSksKG49MCl8bikpfWZ1bmN0aW9uIGN0KEEpe3ZhciBlLHIsaT0wLGY9MCxuPTAsdD0wO3JldHVybiBmPWFyWyhyPShBfD0wKSsxNnwwKT4+Ml08PDEsYXJbcj4+Ml09Zix0PTErKDB8b3JbKGU9QSsyMHwwKT4+MV0pPDwxNj4+MTYsLTE8KG9yW2U+PjFdPXQpPDwxNj4+MTYmJihuPTB8YXJbKGk9QSs0fDApPj4yXSwoMHxhcltBKzg+PjJdKT4+PjA+bj4+PjApJiYob3JbZT4+MV09LTgsYXJbaT4+Ml09bisxLGY9MHxmfGNyW24+PjBdLGFyW3I+PjJdPWYpLGY+Pj4wPChpPWFyW0ErMTI+PjJdPDw3KT4+PjA/KHQ9MCl8dDooYXJbcj4+Ml09Zi1pLDB8KHQ9MSkpfWZ1bmN0aW9uIGx0KEEsZSl7dmFyIHIsaSxmLG4sdD0wLG89MCxhPTAsYz0wLGw9MDtpZigoMHwoZXw9MCkpPD0wKXJldHVybiAwfChsPWUpO2ZvcihpPShBfD0wKSsxNnwwLGY9QSsyMHwwLG49QSs4fDAsbD1BKzR8MCxyPUErMTJ8MCx0PShBPTApfG9yW2Y+PjFdLG89MHxhcltpPj4yXTs7KXtpZihvPDw9MSxhcltpPj4yXT1vLHQ9dCsxPDwxNj4+MTYsLTE8KG9yW2Y+PjFdPXQpPDwxNj4+MTYmJihjPTB8YXJbbD4+Ml0sKDB8YXJbbj4+Ml0pPj4+MD5jPj4+MCk/KG9yW2Y+PjFdPS04LGFyW2w+PjJdPWMrMSxhPTB8Y3JbYz4+MF18byxhcltpPj4yXT1hLHQ9LTgpOmE9byxhPj4+MDwobz1hcltyPj4yXTw8Nyk+Pj4wKXt0PTg7YnJlYWt9aWYobz1hLW98MCxhcltpPj4yXT1vLCgwfGUpPD0oMHwoQT1BKzF8MCkpKXtBPWUsdD04O2JyZWFrfX1yZXR1cm4gOD09KDB8dCk/MHxBOjB9ZnVuY3Rpb24gdXQoQSxlKXtBfD0wO3ZhciByLGk9MCxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MDtpZigoMHwoZXw9MCkpPDkpcmV0dXJuIGU/KGk9YXJbKHQ9QSsxNnwwKT4+Ml08PGUsYXJbdD4+Ml09aSxmPSgwfGxyWyhuPUErMjB8MCk+PjFdKStlfDAsMD09KDMyNzY4JihvcltuPj4xXT1mKXwwKSYmKGE9MHxhclsobz1BKzR8MCk+PjJdLCgwfGFyW0ErOD4+Ml0pPj4+MD5hPj4+MCkmJihhcltvPj4yXT1hKzEsdT1mPDwxNj4+MTYsYj0oMHxjclthPj4wXSk8PHUsb3Jbbj4+MV09dSs2NTUyOCxpfD1iLGFyW3Q+PjJdPWkpLHU9YXJbQSsxMj4+Ml08PDcsdT1pLSgwfGJyKGI9KDB8KGw9KGk+Pj4wKS8odT4+PjApfDApKTwoMHwoYj0xPDxlKSk/bDpiKy0xfDAsdSkpfDAsYXJbdD4+Ml09dSwwfGIpOihiPTApfGI7aWYoaT1hclsobD1BKzE2fDApPj4yXTw8OCxhcltsPj4yXT1pLG49NjU1MzUmKGY9OCsoMHxsclsodT1BKzIwfDApPj4xXSl8MCksb3JbdT4+MV09biwwPT0oMzI3NjgmZnwwKSYmKGM9MHxhclsodD1BKzR8MCk+PjJdLCgwfGFyW0ErOD4+Ml0pPj4+MD5jPj4+MCk/KGFyW3Q+PjJdPWMrMSxuPWY8PDE2Pj4xNixmPSgwfGNyW2M+PjBdKTw8bixuPW4rNjU1MjgmNjU1MzUsb3JbdT4+MV09bixmfD1pLGFyW2w+PjJdPWYpOmY9aSxyPWFyW0ErMTI+PjJdPDw3LHQ9Zi0oMHxicihpPSgwfChpPShmPj4+MCkvKHI+Pj4wKXwwKSk8MjU1P2k6MjU1LHIpKXwwLGFyW2w+PjJdPXQsIShmPWUrLTh8MCkpcmV0dXJuIDB8KGI9aSk7Zm9yKGU9QSs4fDAsYz1BKzR8MDtmPWYrLTF8MCxhPWk8PDEsaT10PDwxLGFyW2w+PjJdPWksbj1uKzE8PDE2Pj4xNiwtMTwob3JbdT4+MV09bik8PDE2Pj4xNiYmKGI9MHxhcltjPj4yXSwoMHxhcltlPj4yXSk+Pj4wPmI+Pj4wKSYmKG9yW3U+PjFdPS04LGFyW2M+PjJdPWIrMSxpPTB8Y3JbYj4+MF18aSxhcltsPj4yXT1pLG49LTgpLGk+Pj4wPHI+Pj4wPyh0PTAsbz1pKToobz1pLXJ8MCxhcltsPj4yXT1vLHQ9MSksaT10fGEsZjspdD1vO3JldHVybiAwfGl9ZnVuY3Rpb24gYnQoQSxlKXt2YXIgcixpLGYsbix0LG8sYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTA7Zm9yKHI9KEF8PTApKzE2fDAsZj1BKzh8MCxuPUErNHwwLHQ9QSsxMnwwLG89KGV8PTApKzMxfDAsYT0odT0wKXxvclsoaT1BKzIwfDApPj4xXSxjPTB8YXJbcj4+Ml07Yzw8PTEsYXJbcj4+Ml09YyxhPWErMTw8MTY+PjE2LC0xPChvcltpPj4xXT1hKTw8MTY+PjE2JiYoYj0wfGFyW24+PjJdLCgwfGFyW2Y+PjJdKT4+PjA+Yj4+PjApPyhvcltpPj4xXT0tOCxhcltuPj4yXT1iKzEsbD0wfGNyW2I+PjBdfGMsYXJbcj4+Ml09bCxhPS04KTpsPWMsIShsPj4+MDwoYz1hclt0Pj4yXTw8Nyk+Pj4wKTspe2lmKGM9bC1jfDAsYXJbcj4+Ml09YywoMHxlKT09KDB8bykpe2U9MCxzPTg7YnJlYWt9dT11KygxPDxlKXwwLGU9ZSsxfDB9cmV0dXJuIDg9PSgwfHMpPzB8ZTowfChzPSgwfHV0KEEsZSkpK3V8MCl9ZnVuY3Rpb24gc3QoQSl7YXJbKEF8PTApPj4yXT0wLGFyW0ErND4+Ml09MH1mdW5jdGlvbiBkdChBLGUpe0F8PTA7dmFyIHIsaT0wO3VyPShyPXVyKSsxNnwwLGk9ciwwfChpPTB8YXJbKGV8PTApKzQ+PjJdKSYmKGFyW2k+PjJdPTErKDB8YXJbaT4+Ml0pKSxhcltBKzQ+PjJdPWksYXJbQT4+Ml09YXJbZT4+Ml0sdXI9cn1mdW5jdGlvbiBrdChBKXt2YXIgZSxyLGksZj0wO3VyPShyPXVyKSsxNnwwLGY9cix1cj0oKGY9MHxhclsoZT0oQXw9MCkrNHwwKT4+Ml0pJiYoaT0oMHxhcltmPj4yXSktMXwwLGFyW2Y+PjJdPWksMHxpfHwoMHwoZj0wfGFyW0E+PjJdKSYmbXUoZiksKGY9MHxhcltlPj4yXSkmJnZ1KGYpKSkscil9ZnVuY3Rpb24gaHQoQSxlLHIpe2V8PTAscnw9MDt2YXIgaSxmLG49MCx0PTAsbz0wO3VyPShmPXVyKSsxNnwwLG89Zis4fDAsbj1mLGk9MHxhclsobj0oQXw9MCkrNHwwKT4+Ml07ZG97aWYoMHxpKXtpZigxPT0oMHwodD0wfGFyW2k+PjJdKSkpcmV0dXJuIHd0KG89MHxhcltBPj4yXSxlLHIpLHZvaWQodXI9Zik7aWYoMTwoMHx0KSl7YXJbaT4+Ml09dCstMTticmVha31zcig0NzkxNyw0NzkyNywxNzcsNDc5NDMpfX13aGlsZSgwKTtvPTB8d3UoMTcyKSxhcltBPj4yXT1vLEE9MHxodSg0KSxhcltuPj4yXT1BLGFyW0E+PjJdPTEsd3QobyxlLHIpLHVyPWZ9ZnVuY3Rpb24gd3QoQSxlLHIpe0F8PTAsZXw9MCxyfD0wO3ZhciBpPTAsZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wO2Rve2lmKDA8KDB8ZSkpe2lmKG89KDB8cik8MD8wOigwfHIpPDUxP3I6NTEsaT1BKzV8MCxmPSgyNTUmKGE9KGY9NjM8KDB8KGE9KDB8KGE9KChhPTB8YXJbODA5NisoMTIqKG49ZSstMXwwKXwwKT4+Ml0pPDwzJjEyMCktMTYrKCgwfGJyKCg1KihhPj40KXwwKS00NXwwLG8pKT4+NCl8MCkpPDE/MTooMHxhKTwxMjY/YToxMjYpKSk/YSs2NHwwOjYzLWF8MCkpPDwxJjI1NXwxJmYsNjM8PSgxMjcmYSk+Pj4wJiYodD1mLHRyWyhhPWkpPj4wXT10LHNyKDQ3OTg5LDQ3OTI3LDIxMCw0ODAxMCkpLHZiKDB8aSwwfGYsMSksaT1BKzZ8MCxmPSgyNTUmKGE9KGY9NjM8KDB8KGE9KDB8KGE9KChhPTB8YXJbODA5NisoMTIqbnwwKSs0Pj4yXSk8PDMmMTIwKS0xNisoKDB8YnIoKDUqKGE+PjQpfDApLTQ1fDAsbykpPj40KXwwKSk8MT8xOigwfGEpPDEyNj9hOjEyNikpKT9hKzY0fDA6NjMtYXwwKSk8PDEmMjU1fDEmZiw2Mzw9KDEyNyZhKT4+PjAmJih0PWYsdHJbKGE9aSk+PjBdPXQsc3IoNDc5ODksNDc5MjcsMjEwLDQ4MDEwKSksdmIoMHxpLDB8ZiwxKSxpPUErN3wwLGY9KDI1NSYoYT0oZj02MzwoMHwoYT0oMHwoYT0oKGE9MHxhcls4MDk2KygxMipufDApKzg+PjJdKTw8MyYxMjApLTE2KygoMHxicigoNSooYT4+NCl8MCktNDV8MCxvKSk+PjQpfDApKTwxPzE6KDB8YSk8MTI2P2E6MTI2KSkpP2ErNjR8MDo2My1hfDApKTw8MSYyNTV8MSZmLDYzPD0oMTI3JmEpPj4+MCYmKHQ9Zix0clsoYT1pKT4+MF09dCxzcig0Nzk4OSw0NzkyNywyMTAsNDgwMTApKSx2YigwfGksMHxmLDEpLGY9QSsxNDl8MCxpPSgyNTUmKGE9KGk9NjM8KDB8KGE9KDB8KGE9KChhPTB8YXJbOTUzNisobjw8Mik+PjJdKTw8MyYxMjApLTE2KygoMHxicigoNSooYT4+NCl8MCktNDV8MCxvKSk+PjQpfDApKTwxPzE6KDB8YSk8MTI2P2E6MTI2KSkpP2ErNjR8MDo2My1hfDApKTw8MSYyNTV8MSZpLDYzPD0oMTI3JmEpPj4+MCYmKHRyW2Y+PjBdPWksc3IoNDc5ODksNDc5MjcsMjEwLDQ4MDEwKSksdmIoMHxmLDB8aSwxKSxpPUErMTQ3fDAsZj0oMjU1JihhPShmPTYzPCgwfChhPSgwfChhPSgoYT0wfGFyWzgxMjArKG48PDIpPj4yXSk8PDMmMTIwKS0xNisoKDB8YnIoKDUqKGE+PjQpfDApLTQ1fDAsbykpPj40KXwwKSk8MT8xOigwfGEpPDEyNj9hOjEyNikpKT9hKzY0fDA6NjMtYXwwKSk8PDEmMjU1fDEmZiw2Mzw9KDEyNyZhKT4+PjAmJih0cltpPj4wXT1mLHNyKDQ3OTg5LDQ3OTI3LDIxMCw0ODAxMCkpLHZiKDB8aSwwfGYsMSksZj1BKzE0OHwwLGk9KDI1NSYoYT0oaT02MzwoMHwoYT0oMHwoYT0oKGE9MHxhcls4MTI4KyhuPDwyKT4+Ml0pPDwzJjEyMCktMTYrKCgwfGJyKCg1KihhPj40KXwwKS00NXwwLG8pKT4+NCl8MCkpPDE/MTooMHxhKTwxMjY/YToxMjYpKSk/YSs2NHwwOjYzLWF8MCkpPDwxJjI1NXwxJmksNjM8PSgxMjcmYSk+Pj4wJiYodHJbZj4+MF09aSxzcig0Nzk4OSw0NzkyNywyMTAsNDgwMTApKSx2YigwfGYsMHxpLDEpLGk9QSsxNTZ8MCxmPSgyNTUmKGE9KGY9NjM8KDB8KGE9KDB8KGE9MTA0KygoMHxicihvLC0yMCkpPj40KXwwKSk8MT8xOigwfGEpPDEyNj9hOjEyNikpKT9hKzY0fDA6NjMtYXwwKSk8PDEmMjU1fDEmZiw2Mzw9KDEyNyZhKT4+PjAmJih0PWYsdHJbKGE9aSk+PjBdPXQsc3IoNDc5ODksNDc5MjcsMjEwLDQ4MDEwKSksdmIoMHxpLDB8ZiwxKSxpPUErMTU3fDAsdD0oMjU1JihhPSh0PTYzPCgwfChhPSgwfChhPTEwNCsoKDB8YnIobywtMjUpKT4+NCl8MCkpPDE/MTooMHxhKTwxMjY/YToxMjYpKSk/YSs2NHwwOjYzLWF8MCkpPDwxJjI1NXwxJnQsNjM8PSgxMjcmYSk+Pj4wJiYobj10LHRyWyhhPWkpPj4wXT1uLHNyKDQ3OTg5LDQ3OTI3LDIxMCw0ODAxMCkpLHZiKDB8aSwwfHQsMSksaT1BKzE1OHwwLGY9KDI1NSYoYT0oZj02MzwoMHwoYT0oMHwoYT0xMDQrKCgwfGJyKG8sLTMwKSk+PjQpfDApKTwxPzE6KDB8YSk8MTI2P2E6MTI2KSkpP2ErNjR8MDo2My1hfDApKTw8MSYyNTV8MSZmLDYzPD0oMTI3JmEpPj4+MCYmKG49Zix0clsoYT1pKT4+MF09bixzcig0Nzk4OSw0NzkyNywyMTAsNDgwMTApKSx2YigwfGksMHxmLDEpLGk9QSsxNTl8MCxmPSgyNTUmKGE9KGY9NjM8KDB8KGE9KDB8KGE9MTA0KygoMHxicihvLC00MCkpPj40KXwwKSk8MT8xOigwfGEpPDEyNj9hOjEyNikpKT9hKzY0fDA6NjMtYXwwKSk8PDEmMjU1fDEmZiw2Mzw9KDEyNyZhKT4+PjAmJihuPWYsdHJbKGE9aSk+PjBdPW4sc3IoNDc5ODksNDc5MjcsMjEwLDQ4MDEwKSksdmIoMHxpLDB8ZiwxKSx2YihBKzE2MHwwLDB8ZiwxKSx0cltBKzE1ND4+MF09MTQsdHJbQSsxNTU+PjBdPTE0LGk9QSsxNTB8MCxmPSgyNTUmKGE9KGY9NjM8KDB8KGE9KDB8KGE9KChhPTB8YXJbKG49OTUyMCsoKDE9PSgwfGUpPzA6Mik8PDIpfDApPj4yXSk8PDMmMTIwKS0xNisoKDB8YnIoKDUqKGE+PjQpfDApLTQ1fDAsbykpPj40KXwwKSk8MT8xOigwfGEpPDEyNj9hOjEyNikpKT9hKzY0fDA6NjMtYXwwKSk8PDEmMjU1fDEmZiw2Mzw9KDEyNyZhKT4+PjAmJihsPWYsdHJbKGE9aSk+PjBdPWwsc3IoNDc5ODksNDc5MjcsMjEwLDQ4MDEwKSksdmIoMHxpLDB8ZiwxKSxpPUErMTUxfDAsZj0oMjU1JihsPShmPTYzPCgwfChsPSgwfChsPSgobD0wfGFyW24rND4+Ml0pPDwzJjEyMCktMTYrKCgwfGJyKCg1KihsPj40KXwwKS00NXwwLG8pKT4+NCl8MCkpPDE/MTooMHxsKTwxMjY/bDoxMjYpKSk/bCs2NHwwOjYzLWx8MCkpPDwxJjI1NXwxJmYsNjM8PSgxMjcmbCk+Pj4wJiYoYT1mLHRyWyhsPWkpPj4wXT1hLHNyKDQ3OTg5LDQ3OTI3LDIxMCw0ODAxMCkpLHZiKDB8aSwwfGYsMSksaT0oMjU1JihsPShpPTYzPCgwfChsPSgwfChsPTQ4Kyg1Km8+PjQpfDApKTwxPzE6KDB8bCk8MTI2P2w6MTI2KSkpP2wrNjR8MDo2My1sfDApKTw8MSYyNTV8MSZpLGY9QSsxNTJ8MCw2Mzw9KDEyNyZsKT4+PjAmJih0cltmPj4wXT1pLHNyKDQ3OTg5LDQ3OTI3LDIxMCw0ODAxMCkpLHZiKDB8ZiwwfGksMSksdmIoQSsxNTN8MCwwfHQsMSksZj1BKzE0M3wwLGk9KDI1NSYobD0oaT02MzwoMHwobD0oMHwobD03MisoKDB8YnIobywtNSkpPj40KXwwKSk8MT8xOigwfGwpPDEyNj9sOjEyNikpKT9sKzY0fDA6NjMtbHwwKSk8PDEmMjU1fDEmaSwoMTI3JmwpPj4+MDw2Myl7dmIoMHxmLDB8aSw0KTticmVha310cltmPj4wXT1pLHNyKDQ3OTg5LDQ3OTI3LDIxMCw0ODAxMCl9fXdoaWxlKDApO2E9KDB8cik8MD8wOigwfHIpPDUxP3I6NTEsaT1BKzJ8MCxmPSgyNTUmKGw9KGY9NjM8KDB8KGw9KDB8KGw9KChsPTB8YXJbODEzNisoMTIqZXwwKT4+Ml0pPDwzJjEyMCktMTYrKCgwfGJyKCg1KihsPj40KXwwKS00NXwwLGEpKT4+NCl8MCkpPDE/MTooMHxsKTwxMjY/bDoxMjYpKSk/bCs2NHwwOjYzLWx8MCkpPDwxJjI1NXwxJmYsNjM8PSgxMjcmbCk+Pj4wJiYocj1mLHRyWyhsPWkpPj4wXT1yLHNyKDQ3OTg5LDQ3OTI3LDIxMCw0ODAxMCkpLHZiKDB8aSwwfGYsMSksaT1BKzN8MCxmPSgyNTUmKGw9KGY9NjM8KDB8KGw9KDB8KGw9KChsPTB8YXJbODEzNisoMTIqZXwwKSs0Pj4yXSk8PDMmMTIwKS0xNisoKDB8YnIoKDUqKGw+PjQpfDApLTQ1fDAsYSkpPj40KXwwKSk8MT8xOigwfGwpPDEyNj9sOjEyNikpKT9sKzY0fDA6NjMtbHwwKSk8PDEmMjU1fDEmZiw2Mzw9KDEyNyZsKT4+PjAmJihyPWYsdHJbKGw9aSk+PjBdPXIsc3IoNDc5ODksNDc5MjcsMjEwLDQ4MDEwKSksdmIoMHxpLDB8ZiwxKSxpPUErNHwwLGY9KDI1NSYobD0oZj02MzwoMHwobD0oMHwobD0oKGw9MHxhcls4MTM2KygxMiplfDApKzg+PjJdKTw8MyYxMjApLTE2KygoMHxicigoNSoobD4+NCl8MCktNDV8MCxhKSk+PjQpfDApKTwxPzE6KDB8bCk8MTI2P2w6MTI2KSkpP2wrNjR8MDo2My1sfDApKTw8MSYyNTV8MSZmLDYzPD0oMTI3JmwpPj4+MCYmKHI9Zix0clsobD1pKT4+MF09cixzcig0Nzk4OSw0NzkyNywyMTAsNDgwMTApKSx2YigwfGksMHxmLDEpLGk9QSs4fDAsZj0oMjU1JihsPShmPTYzPCgwfChsPSgwfChsPSgobD0wfGFyWyhuPTk0ODQrKCgyIT0oMHxlKT9lOjUpPDwyKXwwKT4+Ml0pPDwzJjEyMCktMTYrKCgwfGJyKCg1KihsPj40KXwwKS00NXwwLGEpKT4+NCl8MCkpPDE/MTooMHxsKTwxMjY/bDoxMjYpKSk/bCs2NHwwOjYzLWx8MCkpPDwxJjI1NXwxJmYsNjM8PSgxMjcmbCk+Pj4wJiYocj1mLHRyWyhsPWkpPj4wXT1yLHNyKDQ3OTg5LDQ3OTI3LDIxMCw0ODAxMCkpLHZiKDB8aSwwfGYsMSksaT1BKzl8MCxmPSgyNTUmKGw9KGY9NjM8KDB8KGw9KDB8KGw9KChsPTB8YXJbbis0Pj4yXSk8PDMmMTIwKS0xNisoKDB8YnIoKDUqKGw+PjQpfDApLTQ1fDAsYSkpPj40KXwwKSk8MT8xOigwfGwpPDEyNj9sOjEyNikpKT9sKzY0fDA6NjMtbHwwKSk8PDEmMjU1fDEmZiw2Mzw9KDEyNyZsKT4+PjAmJihyPWYsdHJbKGw9aSk+PjBdPXIsc3IoNDc5ODksNDc5MjcsMjEwLDQ4MDEwKSksdmIoMHxpLDB8ZiwxKSxpPUErMTB8MCxmPSgyNTUmKGw9KGY9NjM8KDB8KGw9KDB8KGw9KChsPTB8YXJbbis4Pj4yXSk8PDMmMTIwKS0xNisoKDB8YnIoKDUqKGw+PjQpfDApLTQ1fDAsYSkpPj40KXwwKSk8MT8xOigwfGwpPDEyNj9sOjEyNikpKT9sKzY0fDA6NjMtbHwwKSk8PDEmMjU1fDEmZiw2Mzw9KDEyNyZsKT4+PjAmJihyPWYsdHJbKGw9aSk+PjBdPXIsc3IoNDc5ODksNDc5MjcsMjEwLDQ4MDEwKSksdmIoMHxpLDB8ZiwxKSxpPUErMTF8MCxmPSgyNTUmKGw9KGY9NjM8KDB8KGw9KDB8KGw9KChsPTB8YXJbbisxMj4+Ml0pPDwzJjEyMCktMTYrKCgwfGJyKCg1KihsPj40KXwwKS00NXwwLGEpKT4+NCl8MCkpPDE/MTooMHxsKTwxMjY/bDoxMjYpKSk/bCs2NHwwOjYzLWx8MCkpPDwxJjI1NXwxJmYsNjM8PSgxMjcmbCk+Pj4wJiYocj1mLHRyWyhsPWkpPj4wXT1yLHNyKDQ3OTg5LDQ3OTI3LDIxMCw0ODAxMCkpLHZiKDB8aSwwfGYsMSksZj1BKzEyfDAsaT0oMjU1JihsPShpPTYzPCgwfChsPSgwfChsPSgobD0wfGFyWzk0NzIrKGU8PDIpPj4yXSk8PDMmMTIwKS0xNisoKDB8YnIoKDUqKGw+PjQpfDApLTQ1fDAsYSkpPj40KXwwKSk8MT8xOigwfGwpPDEyNj9sOjEyNikpKT9sKzY0fDA6NjMtbHwwKSk8PDEmMjU1fDEmaSw2Mzw9KDEyNyZsKT4+PjAmJih0cltmPj4wXT1pLHNyKDQ3OTg5LDQ3OTI3LDIxMCw0ODAxMCkpLHZiKDB8ZiwwfGksMSksaT1BKzEzfDAsZj0oMjU1JihsPShmPTYzPCgwfChsPSgwfChsPSgobD0wfGFyWzgxNzIrKGU8PDIpPj4yXSk8PDMmMTIwKS0xNisoKDB8YnIoKDUqKGw+PjQpfDApLTQ1fDAsYSkpPj40KXwwKSk8MT8xOigwfGwpPDEyNj9sOjEyNikpKT9sKzY0fDA6NjMtbHwwKSk8PDEmMjU1fDEmZiw2Mzw9KDEyNyZsKT4+PjAmJih0cltpPj4wXT1mLHNyKDQ3OTg5LDQ3OTI3LDIxMCw0ODAxMCkpLHZiKDB8aSwwfGYsMSksZj1BKzE0fDAsbj0oMjU1JihsPShuPTYzPCgwfChsPSgwfChsPSgobD0wfGFyWyhpPTgxODQrKCgwPT0oMHxlKT8wOjIpPDwyKXwwKT4+Ml0pPDwzJjEyMCktMTYrKCgwfGJyKCg1KihsPj40KXwwKS00NXwwLGEpKT4+NCl8MCkpPDE/MTooMHxsKTwxMjY/bDoxMjYpKSk/bCs2NHwwOjYzLWx8MCkpPDwxJjI1NXwxJm4sNjM8PSgxMjcmbCk+Pj4wJiYocj1uLHRyWyhsPWYpPj4wXT1yLHNyKDQ3OTg5LDQ3OTI3LDIxMCw0ODAxMCkpLHZiKDB8ZiwwfG4sMSksbD0wfGFyW2krND4+Ml0saT1BKzE1fDAsZj0oMjU1JihsPShmPTYzPCgwfChsPSgwfChsPShsPDwzJjEyMCktMTYrKCgwfGJyKCg1KihsPj40KXwwKS00NXwwLGEpKT4+NCl8MCkpPDE/MTooMHxsKTwxMjY/bDoxMjYpKSk/bCs2NHwwOjYzLWx8MCkpPDwxJjI1NXwxJmYsNjM8PSgxMjcmbCk+Pj4wJiYocj1mLHRyWyhsPWkpPj4wXT1yLHNyKDQ3OTg5LDQ3OTI3LDIxMCw0ODAxMCkpLHZiKDB8aSwwfGYsMSksaT1BKzE2fDAsZj0oMjU1JihsPShmPTYzPCgwfChsPSgwfChsPSgobD0wfGFyWyhuPTk0MjQrKChyPWU8PDIpPDwyKXwwKT4+Ml0pPDwzJjEyMCktMTYrKCgwfGJyKCg1KihsPj40KXwwKS00NXwwLGEpKT4+NCl8MCkpPDE/MTooMHxsKTwxMjY/bDoxMjYpKSk/bCs2NHwwOjYzLWx8MCkpPDwxJjI1NXwxJmYsNjM8PSgxMjcmbCk+Pj4wJiYobz1mLHRyWyhsPWkpPj4wXT1vLHNyKDQ3OTg5LDQ3OTI3LDIxMCw0ODAxMCkpLHZiKDB8aSwwfGYsMSksaT1BKzE3fDAsZj0oMjU1JihsPShmPTYzPCgwfChsPSgwfChsPSgobD0wfGFyW24rND4+Ml0pPDwzJjEyMCktMTYrKCgwfGJyKCg1KihsPj40KXwwKS00NXwwLGEpKT4+NCl8MCkpPDE/MTooMHxsKTwxMjY/bDoxMjYpKSk/bCs2NHwwOjYzLWx8MCkpPDwxJjI1NXwxJmYsNjM8PSgxMjcmbCk+Pj4wJiYobz1mLHRyWyhsPWkpPj4wXT1vLHNyKDQ3OTg5LDQ3OTI3LDIxMCw0ODAxMCkpLHZiKDB8aSwwfGYsMSksaT1BKzE4fDAsZj0oMjU1JihsPShmPTYzPCgwfChsPSgwfChsPSgobD0wfGFyW24rOD4+Ml0pPDwzJjEyMCktMTYrKCgwfGJyKCg1KihsPj40KXwwKS00NXwwLGEpKT4+NCl8MCkpPDE/MTooMHxsKTwxMjY/bDoxMjYpKSk/bCs2NHwwOjYzLWx8MCkpPDwxJjI1NXwxJmYsNjM8PSgxMjcmbCk+Pj4wJiYobz1mLHRyWyhsPWkpPj4wXT1vLHNyKDQ3OTg5LDQ3OTI3LDIxMCw0ODAxMCkpLHZiKDB8aSwwfGYsMSksaT1BKzE5fDAsZj0oMjU1JihsPShmPTYzPCgwfChsPSgwfChsPSgobD0wfGFyW24rMTI+PjJdKTw8MyYxMjApLTE2KygoMHxicigoNSoobD4+NCl8MCktNDV8MCxhKSk+PjQpfDApKTwxPzE6KDB8bCk8MTI2P2w6MTI2KSkpP2wrNjR8MDo2My1sfDApKTw8MSYyNTV8MSZmLDYzPD0oMTI3JmwpPj4+MCYmKG89Zix0clsobD1pKT4+MF09byxzcig0Nzk4OSw0NzkyNywyMTAsNDgwMTApKSx2YigwfGksMHxmLDEpLGk9QSsyMHwwLGY9KDI1NSYobD0oZj02MzwoMHwobD0oMHwobD0oKGw9MHxhclsobj05Mzg4KygzKmU8PDIpfDApPj4yXSk8PDMmMTIwKS0xNisoKDB8YnIoKDUqKGw+PjQpfDApLTQ1fDAsYSkpPj40KXwwKSk8MT8xOigwfGwpPDEyNj9sOjEyNikpKT9sKzY0fDA6NjMtbHwwKSk8PDEmMjU1fDEmZiw2Mzw9KDEyNyZsKT4+PjAmJihvPWYsdHJbKGw9aSk+PjBdPW8sc3IoNDc5ODksNDc5MjcsMjEwLDQ4MDEwKSksdmIoMHxpLDB8ZiwxKSxpPUErMjF8MCxmPSgyNTUmKGw9KGY9NjM8KDB8KGw9KDB8KGw9KChsPTB8YXJbbis0Pj4yXSk8PDMmMTIwKS0xNisoKDB8YnIoKDUqKGw+PjQpfDApLTQ1fDAsYSkpPj40KXwwKSk8MT8xOigwfGwpPDEyNj9sOjEyNikpKT9sKzY0fDA6NjMtbHwwKSk8PDEmMjU1fDEmZiw2Mzw9KDEyNyZsKT4+PjAmJihvPWYsdHJbKGw9aSk+PjBdPW8sc3IoNDc5ODksNDc5MjcsMjEwLDQ4MDEwKSksdmIoMHxpLDB8ZiwxKSxpPUErMjJ8MCxmPSgyNTUmKGw9KGY9NjM8KDB8KGw9KDB8KGw9KChsPTB8YXJbbis4Pj4yXSk8PDMmMTIwKS0xNisoKDB8YnIoKDUqKGw+PjQpfDApLTQ1fDAsYSkpPj40KXwwKSk8MT8xOigwfGwpPDEyNj9sOjEyNikpKT9sKzY0fDA6NjMtbHwwKSk8PDEmMjU1fDEmZiw2Mzw9KDEyNyZsKT4+PjAmJihvPWYsdHJbKGw9aSk+PjBdPW8sc3IoNDc5ODksNDc5MjcsMjEwLDQ4MDEwKSksdmIoMHxpLDB8ZiwxKSxuPUErMjV8MCxvPTkxNzIrKDE4KmU8PDIpfDAsaT0wO2Rve2lmKGY9bitpfDAsdD0oMjU1JihsPSh0PTYzPCgwfChsPSgwfChsPSgobD0wfGFyW28rKGk8PDIpPj4yXSk8PDMmMTIwKS0xNisoKDB8YnIoKDUqKGw+PjQpfDApLTQ1fDAsYSkpPj40KXwwKSk8MT8xOigwfGwpPDEyNj9sOjEyNikpKT9sKzY0fDA6NjMtbHwwKSk8PDEmMjU1fDEmdCw2Mzw9KDEyNyZsKT4+PjApe2M9MzU7YnJlYWt9dmIoMHxmLDB8dCwxKSxpPWkrMXwwfXdoaWxlKCgwfGkpPDE4KTszNT09KDB8YykmJih0cltmPj4wXT10LHNyKDQ3OTg5LDQ3OTI3LDIxMCw0ODAxMCkpLGY9QSs0M3wwLGk9MDtkb3tpZihuPWYraXwwLHQ9KDI1NSYobD0odD02MzwoMHwobD0oMHwobD0oKGw9MHxhcltvKyhpPDwyKT4+Ml0pPDwzJjEyMCktMTYrKCgwfGJyKCg1KihsPj40KXwwKS00NXwwLGEpKT4+NCl8MCkpPDE/MTooMHxsKTwxMjY/bDoxMjYpKSk/bCs2NHwwOjYzLWx8MCkpPDwxJjI1NXwxJnQsNjM8PSgxMjcmbCk+Pj4wKXtjPTM5O2JyZWFrfXZiKDB8biwwfHQsMSksaT1pKzF8MH13aGlsZSgoMHxpKTwxOCk7Mzk9PSgwfGMpJiYodHJbbj4+MF09dCxzcig0Nzk4OSw0NzkyNywyMTAsNDgwMTApKSxpPUErNjF8MCxmPSgyNTUmKGw9KGY9NjM8KDB8KGw9KDB8KGw9KChsPTB8YXJbKG49ODIwMCsocjw8Mil8MCk+PjJdKTw8MyYxMjApLTE2KygoMHxicigoNSoobD4+NCl8MCktNDV8MCxhKSk+PjQpfDApKTwxPzE6KDB8bCk8MTI2P2w6MTI2KSkpP2wrNjR8MDo2My1sfDApKTw8MSYyNTV8MSZmLDYzPD0oMTI3JmwpPj4+MCYmKHI9Zix0clsobD1pKT4+MF09cixzcig0Nzk4OSw0NzkyNywyMTAsNDgwMTApKSx2YigwfGksMHxmLDEpLGk9QSs2MnwwLGY9KDI1NSYobD0oZj02MzwoMHwobD0oMHwobD0oKGw9MHxhcltuKzQ+PjJdKTw8MyYxMjApLTE2KygoMHxicigoNSoobD4+NCl8MCktNDV8MCxhKSk+PjQpfDApKTwxPzE6KDB8bCk8MTI2P2w6MTI2KSkpP2wrNjR8MDo2My1sfDApKTw8MSYyNTV8MSZmLDYzPD0oMTI3JmwpPj4+MCYmKHI9Zix0clsobD1pKT4+MF09cixzcig0Nzk4OSw0NzkyNywyMTAsNDgwMTApKSx2YigwfGksMHxmLDEpLGk9QSs2M3wwLGY9KDI1NSYobD0oZj02MzwoMHwobD0oMHwobD0oKGw9MHxhcltuKzg+PjJdKTw8MyYxMjApLTE2KygoMHxicigoNSoobD4+NCl8MCktNDV8MCxhKSk+PjQpfDApKTwxPzE6KDB8bCk8MTI2P2w6MTI2KSkpP2wrNjR8MDo2My1sfDApKTw8MSYyNTV8MSZmLDYzPD0oMTI3JmwpPj4+MCYmKHI9Zix0clsobD1pKT4+MF09cixzcig0Nzk4OSw0NzkyNywyMTAsNDgwMTApKSx2YigwfGksMHxmLDEpLGk9QSs2NHwwLGY9KDI1NSYobD0oZj02MzwoMHwobD0oMHwobD0oKGw9MHxhcltuKzEyPj4yXSk8PDMmMTIwKS0xNisoKDB8YnIoKDUqKGw+PjQpfDApLTQ1fDAsYSkpPj40KXwwKSk8MT8xOigwfGwpPDEyNj9sOjEyNikpKT9sKzY0fDA6NjMtbHwwKSk8PDEmMjU1fDEmZiw2Mzw9KDEyNyZsKT4+PjAmJihyPWYsdHJbKGw9aSk+PjBdPXIsc3IoNDc5ODksNDc5MjcsMjEwLDQ4MDEwKSksdmIoMHxpLDB8ZiwxKSxuPUErNjV8MCxpPTA7ZG97aWYoZj1uK2l8MCx0PSgyNTUmKGw9KHQ9NjM8KDB8KGw9KDB8KGw9KChsPTB8YXJbODI0OCsoMTY4KmV8MCkrKGk8PDIpPj4yXSk8PDMmMTIwKS0xNisoKDB8YnIoKDUqKGw+PjQpfDApLTQ1fDAsYSkpPj40KXwwKSk8MT8xOigwfGwpPDEyNj9sOjEyNikpKT9sKzY0fDA6NjMtbHwwKSk8PDEmMjU1fDEmdCw2Mzw9KDEyNyZsKT4+PjApe2M9NDU7YnJlYWt9dmIoMHxmLDB8dCwxKSxpPWkrMXwwfXdoaWxlKCgwfGkpPDQyKTs0NT09KDB8YykmJih0cltmPj4wXT10LHNyKDQ3OTg5LDQ3OTI3LDIxMCw0ODAxMCkpLGk9QSsxMDd8MCxmPSgyNTUmKGw9KGY9NjM8KDB8KGw9KDB8KGw9KChsPTB8YXJbODc1MisoZTw8Myk+PjJdKTw8MyYxMjApLTE2KygoMHxicigoNSoobD4+NCl8MCktNDV8MCxhKSk+PjQpfDApKTwxPzE6KDB8bCk8MTI2P2w6MTI2KSkpP2wrNjR8MDo2My1sfDApKTw8MSYyNTV8MSZmLDYzPD0oMTI3JmwpPj4+MCYmKHI9Zix0clsobD1pKT4+MF09cixzcig0Nzk4OSw0NzkyNywyMTAsNDgwMTApKSx2YigwfGksMHxmLDEpLGk9QSsxMDh8MCxmPSgyNTUmKGw9KGY9NjM8KDB8KGw9KDB8KGw9KChsPTB8YXJbODc1MisoZTw8MykrND4+Ml0pPDwzJjEyMCktMTYrKCgwfGJyKCg1KihsPj40KXwwKS00NXwwLGEpKT4+NCl8MCkpPDE/MTooMHxsKTwxMjY/bDoxMjYpKSk/bCs2NHwwOjYzLWx8MCkpPDwxJjI1NXwxJmYsNjM8PSgxMjcmbCk+Pj4wJiYocj1mLHRyWyhsPWkpPj4wXT1yLHNyKDQ3OTg5LDQ3OTI3LDIxMCw0ODAxMCkpLHZiKDB8aSwwfGYsMSksdD1BKzEwOXwwLGY9ODg4NCsoMjQqZTw8Mil8MCxpPTA7ZG97aWYobj10K2l8MCxvPSgyNTUmKGw9KG89NjM8KDB8KGw9KDB8KGw9KChsPTB8YXJbZisoaTw8Mik+PjJdKTw8MyYxMjApLTE2KygoMHxicigoNSoobD4+NCl8MCktNDV8MCxhKSk+PjQpfDApKTwxPzE6KDB8bCk8MTI2P2w6MTI2KSkpP2wrNjR8MDo2My1sfDApKTw8MSYyNTV8MSZvLDYzPD0oMTI3JmwpPj4+MCl7Yz01MTticmVha312YigwfG4sMHxvLDEpLGk9aSsxfDB9d2hpbGUoKDB8aSk8MjQpOzUxPT0oMHxjKSYmKHRyW24+PjBdPW8sc3IoNDc5ODksNDc5MjcsMjEwLDQ4MDEwKSksZj1BKzEzM3wwLG49ODc3NisoNiplPDwyKXwwLGk9MDtkb3tpZih0PWYraXwwLG89KDI1NSYobD0obz02MzwoMHwobD0oMHwobD0oKGw9MHxhcltuKyhpPDwyKT4+Ml0pPDwzJjEyMCktMTYrKCgwfGJyKCg1KihsPj40KXwwKS00NXwwLGEpKT4+NCl8MCkpPDE/MTooMHxsKTwxMjY/bDoxMjYpKSk/bCs2NHwwOjYzLWx8MCkpPDwxJjI1NXwxJm8sNjM8PSgxMjcmbCk+Pj4wKXtjPTU1O2JyZWFrfXZiKDB8dCwwfG8sMSksaT1pKzF8MH13aGlsZSgoMHxpKTw2KTtpZig1NT09KDB8YykmJih0clt0Pj4wXT1vLHNyKDQ3OTg5LDQ3OTI3LDIxMCw0ODAxMCkpLGk9KDI1NSYobD0oaT02MzwoMHwobD0oMHwobD0oKGw9MHxhcls4ODQ4KyhlPDwyKT4+Ml0pPDwzJjEyMCktMTYrKCgwfGJyKCg1KihsPj40KXwwKS00NXwwLGEpKT4+NCl8MCkpPDE/MTooMHxsKTwxMjY/bDoxMjYpKSk/bCs2NHwwOjYzLWx8MCkpPDwxJjI1NXwxJmksNjM8PSgxMjcmbCk+Pj4wJiYodHJbQT4+MF09aSxzcig0Nzk4OSw0NzkyNywyMTAsNDgwMTApKSx2YigwfEEsMHxpLDEpLGk9QSsxfDAsZj0oMjU1JihsPShmPTYzPCgwfChsPSgwfChsPSgobD0wfGFyWzg4NjArKGU8PDIpPj4yXSk8PDMmMTIwKS0xNisoKDB8YnIoKDUqKGw+PjQpfDApLTQ1fDAsYSkpPj40KXwwKSk8MT8xOigwfGwpPDEyNj9sOjEyNikpKT9sKzY0fDA6NjMtbHwwKSk8PDEmMjU1fDEmZiw2Mzw9KDEyNyZsKT4+PjAmJih0cltpPj4wXT1mLHNyKDQ3OTg5LDQ3OTI3LDIxMCw0ODAxMCkpLHZiKDB8aSwwfGYsMSksdHJbQSsxMzk+PjBdPTEsdHJbQSsxNDA+PjBdPTEsZj1BKzE0MXwwLGk9KDI1NSYobD0oaT02MzwoMHwobD0oMHwobD03MisoKDB8YnIoYSwtNSkpPj40KXwwKSk8MT8xOigwfGwpPDEyNj9sOjEyNikpKT9sKzY0fDA6NjMtbHwwKSk8PDEmMjU1fDEmaSw2Mzw9KDEyNyZsKT4+PjAmJih0cltmPj4wXT1pLHNyKDQ3OTg5LDQ3OTI3LDIxMCw0ODAxMCkpLHZiKDB8ZiwwfGksMSksdmIoQSsxNDJ8MCwwfGksMSksZj1BKzE2MXwwLGk9KDI1NSYobD0oaT02MzwoMHwobD0oMHwobD0oKGw9MHxhcls4ODcyKyhlPDwyKT4+Ml0pPDwzJjEyMCktMTYrKCgwfGJyKCg1KihsPj40KXwwKS00NXwwLGEpKT4+NCl8MCkpPDE/MTooMHxsKTwxMjY/bDoxMjYpKSk/bCs2NHwwOjYzLWx8MCkpPDwxJjI1NXwxJmksKDEyNyZsKT4+PjA8NjMpcmV0dXJuIHZiKDB8ZiwwfGksMSksdHJbKGU9bD1BKzE2MnwwKT4+MF09MSx0cltlKzE+PjBdPTEsdHJbZSsyPj4wXT0xLHRyW2UrMz4+MF09MSx0clsobD1sKzR8MCk+PjBdPTEsdHJbbCsxPj4wXT0xLHRyW2wrMj4+MF09MSx0cltsKzM+PjBdPTEsdHJbKGw9QSsxNzB8MCk+PjBdPTEsdHJbbCsxPj4wXT0xLHRyW0ErMjM+PjBdPTEsdm9pZCh0cltBKzI0Pj4wXT0xKTt0cltmPj4wXT1pLHNyKDQ3OTg5LDQ3OTI3LDIxMCw0ODAxMCl9ZnVuY3Rpb24gdnQoQSl7dmFyIGUscixpPTA7dXI9KHI9dXIpKzE2fDAsaT1yLHVyPSgoaT0wfGFyWyhlPShBfD0wKSs0fDApPj4yXSkmJihhcltpPj4yXT0oMHxhcltpPj4yXSktMSxhcltBPj4yXT0wLGFyW2U+PjJdPTApLHIpfWZ1bmN0aW9uIG10KEEpe3ZhciBlLHIsaT0wLGY9MDt1cj0ocj11cikrMTZ8MCxpPXIsKGk9MHxhclsoZT0oQXw9MCkrNHwwKT4+Ml0pfHxzcig0ODA1Nyw0NzkyNyw5NSw0ODA2NCksdXI9KCgwfChmPTB8YXJbaT4+Ml0pKTw9MXx8KGFyW2k+PjJdPWYrLTEsZj0wfGFyW0E+PjJdLGk9MHx3dSgxNzIpLGFyW0E+PjJdPWksQT0wfGh1KDQpLGFyW2U+PjJdPUEsYXJbQT4+Ml09MSxoYigwfGksMHxmLDE3MikpLHIpfWZ1bmN0aW9uIGd0KEEsZSl7QXw9MDt2YXIgcixpLGY9MCxuPTA7cmV0dXJuIHVyPShpPXVyKSszMnwwLGY9aSxmPTB8YXJbKHI9KGV8PTApKzR8MCk+PjJdLHVyPShmPyhhcltmPj4yXT0xKygwfGFyW2Y+PjJdKSwwfChmPTB8YXJbKG49QSs0fDApPj4yXSkmJihhcltmPj4yXT0oMHxhcltmPj4yXSktMSxhcltBPj4yXT0wLGFyW24+PjJdPTApLGFyW0E+PjJdPWFyW2U+PjJdLGFyW24+PjJdPWFyW3I+PjJdKTooZj0wfGFyWyhuPUErNHwwKT4+Ml0pJiYoYXJbZj4+Ml09KDB8YXJbZj4+Ml0pLTEsYXJbQT4+Ml09MCxhcltuPj4yXT0wKSxpKSwwfEF9ZnVuY3Rpb24gWnQoQSxlKXtlfD0wO3ZhciByLGksZixuLHQsbyxhLGMsbCx1LGIscyxkPTAsaz0wLGg9MCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTAsQj0wLEU9MCxYPTAsVz0wLEk9MCxDPTAsRz0wLFY9MCxGPTAsUj0wLE49MCxfPTAsWT0wLFE9MCxEPTAsSj0wLE09MDtpZihiPTB8YXJbKEF8PTApKzU4MDg+PjJdLEo9KDE8PChzPTB8YXJbQSs1ODA0Pj4yXSkpLTF8MCxNPTB8YXJbQSs1ODIwPj4yXSxkPWU8PHM+PihRPTB8YXJbQSs1ODAwPj4yXSksUT1lKzE8PHM+PlEsKDB8KFE9KDB8KEQ9MHxhcltBKzU4MjQ+PjJdKSk8KDB8USk/RDpRKSk8PSgwfGQpKXJldHVybihNPTApfChNJj1KPTEpO2k9QSsxMDM3MnwwLGY9QSsxMDM2MHwwLG49QSsxMDM0OHwwLHQ9QSsxMDM1MnwwLG89QSsxMDM1NnwwLGE9QSsxMDM0MHwwLGM9QSs0OHwwLGw9QSs1MnwwLHU9QSs1OTc3fDAsRD1BKzEwMzA4fDAsaz0oZT0wKXxhclsocj1BKzU4MTZ8MCk+PjJdO0E6Zm9yKDs7KXtpZigwPCgwfGspKXtHPTA9PSgwfChGPTB8YnIoZCxiKSkpPzA6MzIsUj0wfGJyKEY+PnMsTSksWT0wIT0oMHxGKSYwPT0oRiZKfDApLF89MHxicigoTj1GKy0xfDApPj5zLE0pLFY9MDtkb3tpZihDPSgwfGJyKDB8YXJbaT4+Ml0sZCkpK1Z8MCxDPSgwfGFyW2Y+PjJdKSsoMypDfDApfDAsST02NTUzNSYoQz03JihjcltDPj4wXXxjcltDKzE+PjBdPDw4KSksQzw8MTY+PjE2KXtpZih5PShDPTB8YnIoVixiKSk+PnMsaD1GPj4oWj0wfGFyW24+PjJdKSwoMHwoQj1DPj5aKSk8PS0xKXtkPTg7YnJlYWsgQX1pZigoMHwoRT0wfGFyW3Q+PjJdKSk8PSgwfEIpKXtkPTg7YnJlYWsgQX1pZigoMHxoKTw9LTEpe2Q9MTE7YnJlYWsgQX1pZigoMHwoWD0wfGFyW28+PjJdKSk8PSgwfGgpKXtkPTExO2JyZWFrIEF9aWYoVz0wfGFyW2E+PjJdLHY9MHxicihFLGgpLHc9MHxscltXKygyNCooditCfDApfDApKzI+PjFdLGg9MHxhcltjPj4yXSwocD0oMHxhcltsPj4yXSktaD4+Mik+Pj4wPD13Pj4+MCl7az0wLGQ9MzM7YnJlYWsgQX1nPTB8YXJbKG09aCkrKHc8PDIpPj4yXSxoPTA9PSgwfEMpPzA6MTY7ZG97aWYoMCE9KDB8QykmMD09KEMmSnwwKSl7aWYoISgwfHRyW2crNzY0Pj4wXSkpe2lmKCEoLTE8KDB8KHc9QystMT4+WikpJigwfHcpPCgwfEUpKSl7ZD0xNjticmVhayBBfWlmKCh2PTB8bHJbVysoMjQqKHYrd3wwKXwwKSsyPj4xXSk+Pj4wPHA+Pj4wJiYoMHxhcltnKzgwMD4+Ml0pIT0oMHxhcls4MDArKDB8YXJbbSsodjw8Mik+PjJdKT4+Ml0pKXt3PTA7YnJlYWt9fXc9MHx0clt1Pj4wXT9oOih3PTB8YXJbRD4+Ml0sKDB8YXJbdysoeStSPDwyKT4+Ml0pPT0oMHxhclt3KygoQystMT4+cykrUjw8Mik+PjJdKT9oOjApfWVsc2Ugdz1ofXdoaWxlKDApO2Rve2lmKFkpe2lmKCEoMHx0cltnKzc2ND4+MF0pKXtpZighKC0xPCgwfChoPU4+PlopKSYoMHxoKTwoMHxYKSkpe2Q9MjQ7YnJlYWsgQX1pZihXPVcrKDI0KigoMHxicihFLGgpKStCfDApfDApKzJ8MCwoVz0wfGxyW1c+PjFdKT4+PjA8cD4+PjAmJigwfGFyW2crODAwPj4yXSkhPSgwfGFyWzgwMCsoMHxhclttKyhXPDwyKT4+Ml0pPj4yXSkpe2g9MDticmVha319aD0wfHRyW3U+PjBdP0c6KGg9MHxhcltEPj4yXSwoMHxhcltoKyh5K1I8PDIpPj4yXSk9PSgwfGFyW2grKHkrXzw8Mik+PjJdKT9HOjApfWVsc2UgaD1HfXdoaWxlKDApOzB8dHJbZys3NTQ+PjBdfHwoV3QoQSxDLEYsSSwwLDI1NSZ3LDI1NSZoKSxJdChBLEMsRixJLDAsMCksZT0xLGs9MHxhcltyPj4yXSl9Vj1WKzF8MH13aGlsZSgoMHxWKTwoMHxrKSl9aWYoKDB8USk8PSgwfChkPWQrMXwwKSkpe2s9MSxkPTMzO2JyZWFrfX1pZig4PT0oMHxkKSlzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpO2Vsc2UgaWYoMTE9PSgwfGQpKXNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSk7ZWxzZSBpZigxNj09KDB8ZCkpc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KTtlbHNlIGlmKDI0PT0oMHxkKSlzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpO2Vsc2UgaWYoMzM9PSgwfGQpKXJldHVybiAwfChNPWsmZSk7cmV0dXJuIDB9ZnVuY3Rpb24gcHQoQSxlLHIsaSxmLG4pe3J8PTAsaXw9MCxmfD0wO3ZhciB0LG8sYSxjLGwsdSxiLHMsZCxrLGgsdyx2LG0sZyxaLHAseSxCLEUsWCxXLEksQyxHLFYsRixSLE4sXz0wLFk9MCxRPTAsRD0wLEo9MCxNPTAsVD0wLFU9MCxTPTAsTz0wLHo9MCxqPTAsSD0wLHg9MCxQPTAsTD0wLEs9MCxxPTAsJD0wLEFBPTAsZUE9MCxyQT0wLGlBPTAsZkE9MCxuQT0wO2lmKFY9KGV8PTApPzI6MSxGPWU/MToyLFI9MSZlLE49MSYoMV5lKSxHPWU/ODA6MTYwLEk9ZT8xNjozMixuQT0oMHwobnw9MCkpPCgwfChuQT0wfGFyWyhDPShBfD0wKSsxMDQ3MnwwKT4+Ml0pKT9uOm5BLCEoKDB8KGZBPSgwfGkpPCgwfChmQT0wfGFyW0ErMTA0NzY+PjJdKSk/aTpmQSkpPD0oMHxyKSkpe289KDB8Zik8KDB8bkEpLGE9QSsxMDQ2MHwwLGM9QSsxMDM2OHwwLGw9QSsxMDM3MnwwLHU9QSsxMDM3NnwwLGI9QSsxMDM2MHwwLHM9QSsxMDM4OHwwLGQ9QSsxMDM5MnwwLGs9QSsxMDM5NnwwLGg9QSsxMDM4MHwwLHc9QSsxMDM0OHwwLHY9QSsxMDM1MnwwLG09QSsxMDM1NnwwLGc9QSsxMDM0MHwwLFo9QSs0OHwwLHA9QSs1MnwwLHk9QSsxMDMzMnwwLEI9QSsxMDUxNnwwLEU9QSsxMDQ0OHwwLFg9QSsxMDQ1MnwwLFc9QSsxMDQ1NnwwLHQ9QSsxMDQ0MHwwO0E6Zm9yKDs7KXtpZihvKXtlQT0oMHwoQUE9cjw8MikpLzR8MCxyQT1BQS1OfDAsJD1mO2Rve2lmKGlBPSgwfChNPSQ8PDIpKS80fDAsZT0oMHxicigwfGFyW0M+PjJdLGVBKSkraUF8MCxlPSgwfGFyW2E+PjJdKStlfDAsKEQ9MjU1JihuPTB8dHJbZT4+MF0pKSZHKXtpZihKPU0tUnwwLG49ckE+PihBPTB8YXJbYz4+Ml0pLCgwfChlPUo+PkEpKTw9LTEpe2U9MTA7YnJlYWsgQX1pZigoMHwoXz0wfGFyW2w+PjJdKSk8PSgwfGUpKXtlPTEwO2JyZWFrIEF9aWYoKDB8bik8PS0xKXtlPTEzO2JyZWFrIEF9aWYoKDB8KFk9MHxhclt1Pj4yXSkpPD0oMHxuKSl7ZT0xMzticmVhayBBfWlmKG49KFE9MHxhcltiPj4yXSkrKDMqKCgwfGJyKF8sbikpK2V8MCl8MCl8MCxlPUFBPj5BLCEoLTE8KDB8KGk9TT4+QSkpJigwfGkpPCgwfF8pKSl7ZT0xNTticmVhayBBfWlmKCEoLTE8KDB8ZSkmKDB8ZSk8KDB8WSkpKXtlPTE3O2JyZWFrIEF9cT1RKygzKigoMHxicihfLGUpKStpfDApfDApfDA7ZTpkb3tpZigwIT0oNzY4JihjcltuPj4wXXxjcltuKzE+PjBdPDw4KSkmJjAhPSg3NjgmKGNyW3E+PjBdfGNyW3ErMT4+MF08PDgpKSl7aWYoRCZJfDApe2lmKG49QUE+PihpPTB8YXJbRT4+Ml0pLCgwfChlPU0+PmkpKTw9LTEpe2U9MjI7YnJlYWsgQX1pZigoMHwoQT0wfGFyW1g+PjJdKSk8PSgwfGUpKXtlPTIyO2JyZWFrIEF9aWYoKDB8bik8PS0xKXtlPTI1O2JyZWFrIEF9aWYoKDB8KF89MHxhcltXPj4yXSkpPD0oMHxuKSl7ZT0yNTticmVhayBBfWlmKHE9KFk9MHxhclt0Pj4yXSkrKCgwfGJyKEEsbikpK2UpfDAsKDB8dHJbcT4+MF0pPD0tMSl7ZT0xO2JyZWFrfWlmKGU9ckE+PmksISgtMTwoMHwobj1KPj5pKSkmKDB8bik8KDB8QSkpKXtlPTI4O2JyZWFrIEF9aWYoISgtMTwoMHxlKSYoMHxlKTwoMHxfKSkpe2U9MzA7YnJlYWsgQX1pZihxPVkrKCgwfGJyKEEsZSkpK24pfDAsKDB8dHJbcT4+MF0pPD0tMSl7ZT0xO2JyZWFrfX1pZihuPXJBPj4oaT0wfGFyW3M+PjJdKSwoMHwoZT1KPj5pKSk8PS0xKXtlPTM0O2JyZWFrIEF9aWYoKDB8KEE9MHxhcltkPj4yXSkpPD0oMHxlKSl7ZT0zNDticmVhayBBfWlmKCgwfG4pPD0tMSl7ZT0zNzticmVhayBBfWlmKCgwfChfPTB8YXJbaz4+Ml0pKTw9KDB8bikpe2U9Mzc7YnJlYWsgQX1pZihxPTB8YXJbaD4+Ml0sSz0oMHxicihBLG4pKStlfDAsZT1BQT4+aSwhKC0xPCgwfChuPU0+PmkpKSYoMHxuKTwoMHxBKSkpe2U9Mzk7YnJlYWsgQX1pZighKC0xPCgwfGUpJigwfGUpPCgwfF8pKSl7ZT00MTticmVhayBBfWlmKEw9KDB8YnIoQSxlKSkrbnwwLG49ckE+PihfPTB8YXJbdz4+Ml0pLCgwfChlPUo+Pl8pKTw9LTEpe2U9NDQ7YnJlYWsgQX1pZigoMHwoWT0wfGFyW3Y+PjJdKSk8PSgwfGUpKXtlPTQ0O2JyZWFrIEF9aWYoKDB8bik8PS0xKXtlPTQ3O2JyZWFrIEF9aWYoKDB8KFE9MHxhclttPj4yXSkpPD0oMHxuKSl7ZT00NzticmVhayBBfWlmKGU9KEQ9MHxhcltnPj4yXSkrKDI0KigoMHxicihZLG4pKStlfDApfDApKzJ8MCxlPTB8bHJbZT4+MV0saT0wfGFyW1o+PjJdLEo9ZT4+PjA8KEE9KDB8YXJbcD4+Ml0pLWk+PjIpPj4+MD8wfGFyW2krKGU8PDIpPj4yXTowLGU9QUE+Pl8sISgtMTwoMHwobj1NPj5fKSkmKDB8bik8KDB8WSkpKXtlPTUxO2JyZWFrIEF9aWYoISgtMTwoMHxlKSYoMHxlKTwoMHxRKSkpe2U9NTM7YnJlYWsgQX1pZihlPUQrKDI0KigoMHxicihZLGUpKStufDApfDApKzJ8MCxlPShlPTB8bHJbZT4+MV0pPj4+MDxBPj4+MD8wfGFyW2krKGU8PDIpPj4yXTowLHg9KG49KGo9MHx0cltxKygxMipLfDApPj4wXSk8PDI0Pj4yND09MCk/LTE6MHxhcltKKzkxNisodHJbcSsoMTIqS3wwKSsyPj4wXTw8Mik+PjJdLE89KGk9KEg9MHx0cltxKygxMipLfDApKzE+PjBdKTw8MjQ+PjI0PT0wKT8tMTowfGFyW0orOTgwKyh0cltxKygxMipLfDApKzM+PjBdPDwyKT4+Ml0sISgoVT0oMHx4KT09KDB8KFM9KEE9KE09MHx0cltxKygxMipMfDApPj4wXSk8PDI0Pj4yND09MCk/LTE6MHxhcltlKzkxNisodHJbcSsoMTIqTHwwKSsyPj4wXTw8Mik+PjJdKSkpJigwfE8pPT0oMHwoSj0oRD0oVD0wfHRyW3ErKDEyKkx8MCkrMT4+MF0pPDwyND4+MjQ9PTApPy0xOjB8YXJbZSs5ODArKHRyW3ErKDEyKkx8MCkrMz4+MF08PDIpPj4yXSkpKSYmISgoMHxPKT09KDB8UykmKDB8eCk9PSgwfEopKSl7ZT0xO2JyZWFrfWlmKFA9bj8wOjB8b3JbcSsoMTIqS3wwKSs2Pj4xXSxlPW4/MDowfG9yW3ErKDEyKkt8MCkrND4+MV0sej1pPzA6MHxvcltxKygxMipLfDApKzEwPj4xXSxRPWk/MDowfG9yW3ErKDEyKkt8MCkrOD4+MV0sWT1BPzA6MHxvcltxKygxMipMfDApKzY+PjFdLEE9QT8wOjB8b3JbcSsoMTIqTHwwKSs0Pj4xXSxfPUQ/MDowfG9yW3ErKDEyKkx8MCkrMTA+PjFdLGk9RD8wOjB8b3JbcSsoMTIqTHwwKSs4Pj4xXSwoKDI1NSZIKSsoMjU1JmopfDApIT0oKDI1NSZUKSsoMjU1Jk0pfDApJiYoZXIoNCsoMHxhclt5Pj4yXSl8MCwxMDEzLDApLHRyW0I+PjBdPTMpLCgwfHgpPT0oMHxPKSl7aWYoKDB8UykhPSgwfEopKXtlPTgxO2JyZWFrIEF9cT0obj1lPDwxNj4+MTYpLShlPUE8PDE2Pj4xNil8MDtkb3tpZigoMHwoKDB8cSk8MD8wLXF8MDpxKSk8PTMpe2lmKDM8KDB8KCgwfChxPShQPDwxNj4+MTYpLShZPDwxNj4+MTYpfDApKTwwPzAtcXwwOnEpKSlicmVhaztpZigzPCgwfCgoMHwocT0oUTw8MTY+PjE2KS0oaTw8MTY+PjE2KXwwKSk8MD8wLXF8MDpxKSkpYnJlYWs7aWYoKDB8KCgwfChxPSh6PDwxNj4+MTYpLShfPDwxNj4+MTYpfDApKTwwPzAtcXwwOnEpKTw9Myl7ZT0wO2JyZWFrIGV9fX13aGlsZSgwKTtxPW4tKGk8PDE2Pj4xNil8MDtkb3tpZigoMHwoKDB8cSk8MD8wLXF8MDpxKSk8PTMpe2lmKDM8KDB8KCgwfChxPShQPDwxNj4+MTYpLShfPDwxNj4+MTYpfDApKTwwPzAtcXwwOnEpKSlicmVhaztpZigzPCgwfCgoMHwocT0oUTw8MTY+PjE2KS1lfDApKTwwPzAtcXwwOnEpKSlicmVhaztpZigoMHwoKDB8KHE9KHo8PDE2Pj4xNiktKFk8PDE2Pj4xNil8MCkpPDA/MC1xfDA6cSkpPD0zKXtlPTA7YnJlYWsgZX19fXdoaWxlKDApO2U9MTticmVha31pZihlPWU8PDE2Pj4xNixVKXtxPWUtKEE8PDE2Pj4xNil8MDtkb3tpZigoMHwoKDB8cSk8MD8wLXF8MDpxKSk8PTMpe2lmKDM8KDB8KCgwfChxPShQPDwxNj4+MTYpLShZPDwxNj4+MTYpfDApKTwwPzAtcXwwOnEpKSlicmVhaztpZigzPCgwfCgoMHwocT0oUTw8MTY+PjE2KS0oaTw8MTY+PjE2KXwwKSk8MD8wLXF8MDpxKSkpYnJlYWs7aWYoKDB8KCgwfChxPSh6PDwxNj4+MTYpLShfPDwxNj4+MTYpfDApKTwwPzAtcXwwOnEpKTw9Myl7ZT0wO2JyZWFrIGV9fX13aGlsZSgwKTtlPTE7YnJlYWt9cT1lLShpPDwxNj4+MTYpfDA7ZG97aWYoKDB8KCgwfHEpPDA/MC1xfDA6cSkpPD0zKXtpZigzPCgwfCgoMHwocT0oUDw8MTY+PjE2KS0oXzw8MTY+PjE2KXwwKSk8MD8wLXF8MDpxKSkpYnJlYWs7aWYoMzwoMHwoKDB8KHE9KFE8PDE2Pj4xNiktKEE8PDE2Pj4xNil8MCkpPDA/MC1xfDA6cSkpKWJyZWFrO2lmKCgwfCgoMHwocT0oejw8MTY+PjE2KS0oWTw8MTY+PjE2KXwwKSk8MD8wLXF8MDpxKSk8PTMpe2U9MDticmVhayBlfX19d2hpbGUoMCk7ZT0xO2JyZWFrfWU9Mn13aGlsZSgwKTtpQT0oMHxicigwfGFyW0M+PjJdLGVBKSkraUF8MCxpQT0oMHxhclthPj4yXSkraUF8MCx0cltpQT4+MF09LTQmdHJbaUE+PjBdfGV9ZWxzZSB0cltlPj4wXT0tNCZuOyQ9JCtWfDB9d2hpbGUoKDB8JCk8KDB8bkEpKX1pZigoMHxmQSk8PSgwfChyPXIrRnwwKSkpe2U9NTticmVha319c3dpdGNoKDB8ZSl7Y2FzZSA1OnJldHVybjtjYXNlIDEwOnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSk7YnJlYWs7Y2FzZSAxMzpzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpO2JyZWFrO2Nhc2UgMTU6c3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KTticmVhaztjYXNlIDE3OnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSk7YnJlYWs7Y2FzZSAyMjpzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpO2JyZWFrO2Nhc2UgMjU6c3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KTticmVhaztjYXNlIDI4OnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSk7YnJlYWs7Y2FzZSAzMDpzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpO2JyZWFrO2Nhc2UgMzQ6c3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KTticmVhaztjYXNlIDM3OnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSk7YnJlYWs7Y2FzZSAzOTpzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpO2JyZWFrO2Nhc2UgNDE6c3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KTticmVhaztjYXNlIDQ0OnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSk7YnJlYWs7Y2FzZSA0Nzpzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpO2JyZWFrO2Nhc2UgNTE6c3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KTticmVhaztjYXNlIDUzOnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSk7YnJlYWs7Y2FzZSA4MTpzcig0ODIwNiw0ODIyNSwzNDMsNDgyMzYpfX19ZnVuY3Rpb24geXQoQSxlLHIsaSxmLG4pe3J8PTAsaXw9MCxmfD0wLG58PTA7dmFyIHQsbyxhLGMsbCx1LGIscyxkLGssaCx3LHYsbSxnLFoscCx5LEIsRSxYLFcsSSxDLEcsVixGLFIsTixfLFksUSxELEosTSxULFUsUyxPLHosaixILHgsUCxMLEsscSwkLEFBLGVBLHJBLGlBLGZBLG5BLHRBLG9BLGFBLGNBLGxBLHVBLGJBLHNBLGRBLGtBLGhBLHdBLHZBLG1BLGdBLFpBLHBBLHlBLEJBLEVBLFhBLFdBLElBLENBLEdBLFZBLEZBLFJBLE5BLF9BLFlBLFFBLERBLEpBLE1BLFRBLFVBLFNBLE9BLHpBLGpBLEhBLHhBLFBBLExBLEtBLHFBLCRBLEFlLGVlLHJlLGllLGZlLG5lLHRlLG9lLGFlLGNlLGxlLHVlLGJlLHNlLGRlLGtlLGhlLHdlLHZlLG1lLGdlLFplLHBlLHllPTAsQmU9MCxFZT0wLFhlPTAsV2U9MCxJZT0wLENlPTAsR2U9MCxWZT0wLEZlPTAsUmU9MCxOZT0wLF9lPTAsWWU9MCxRZT0wLERlPTAsSmU9MCxNZT0wLFRlPTAsVWU9MCxTZT0wLE9lPTAsemU9MCxqZT0wLEhlPTAseGU9MCxQZT0wLExlPTAsS2U9MCxxZT0wLCRlPTAsQXI9MCxlcj0wLHJyPTAsaXI9MCxmcj0wLG5yPTA7aWYodXI9KHBlPXVyKSs4MHwwLG1lPSh2ZT1wZSkrNDB8MCxnZT1wZSszMnwwLFplPShlfD0wKT8yOjEsa2U9ZT8xOjIsZGU9MHxhclsoaGU9KEF8PTApKzQwfDApPj4yXSx5ZT0wfGFyW0ErNTc2MD4+Ml0sbnI9KDB8bik8KDB8KG5yPTB8YXJbKHdlPUErMTA0NzJ8MCk+PjJdKSk/bjpuciwoMHwoZnI9KDB8aSk8KDB8KGZyPTB8YXJbQSsxMDQ3Nj4+Ml0pKT9pOmZyKSk8PSgwfHIpKXVyPXBlO2Vsc2V7VEE9KDB8Zik8KDB8bnIpLFVBPUErMTA0NjB8MCxTQT1BKzR8MCxPQT1BKzEwMzY4fDAsekE9QSsxMDM3MnwwLGpBPUErMTAzNzZ8MCxIQT1BKzEwMzYwfDAseEE9QSsxMDM0OHwwLFBBPUErMTAzNTJ8MCxMQT1BKzEwMzU2fDAsS0E9QSsxMDM0MHwwLHFBPUErNDh8MCwkQT15ZSstOHwwLEFlPTQrbWV8MCxlZT0yK21lfDAscmU9MjgrbWV8MCxpZT0yNittZXwwLGZlPTI0K21lfDAsbmU9dmUrNHwwLHRlPXZlKzJ8MCxvZT12ZSsyOHwwLGFlPXZlKzI2fDAsY2U9dmUrMjR8MCxsZT02K21lfDAsdWU9dmUrNnwwLGJlPTMwK21lfDAsc2U9dmUrMzB8MCxEQT1BKzU0ODB8MCxKQT0yK2dlfDAsTUE9NCtnZXwwLHg9NjU1MzUrKEg9MTw8eWUpfDAsWUE9dmUrOHwwLEw9ZGUtMXwwLHk9OCttZXwwLEs9ZGUtMnwwLFo9MTArbWV8MCxxPWRlLTN8MCxCPTEyK21lfDAsJD1kZS00fDAsVz0xNCttZXwwLFFBPXZlKzE2fDAsQUE9ZGU8PDIsZUE9KHJyPVA9ZGU8PDEpKy0xfDAsWD0xNittZXwwLHJBPXJyKy0yfDAscD0xOCttZXwwLGlBPXJyKy0zfDAsRT0yMCttZXwwLHJyPXJyKy00fDAsST0yMittZXwwLGZBPTYqZGV8MCxuQT0oaXI9MypkZXwwKSstMXwwLHRBPWlyKy0yfDAsb0E9aXIrLTN8MCxpcj1pcistNHwwLGFBPWRlPDwxLGNBPTB8YnIoZGUsLTMpLGxBPWRlPDwxLHVBPTB8YnIoZGUsLTMpLGtBPTAtZGV8MCxoQT12ZSsyfDAsd0E9MC0oc0E9YkE9ZGU8PDEpfDAsdD0yK21lfDAsdkE9dmUrNHwwLG1BPTAtKGRBPTMqZGV8MCl8MCx1PTQrbWV8MCxnQT12ZSs2fDAsWkE9MC0oZXI9ZGU8PDIpfDAsaD02K21lfDAscEE9dmUrOHwwLHlBPTEtZGV8MCxsPTgrbWV8MCxCQT0xK2RlfDAsRUE9dmUrMTB8MCxYQT0xLXNBfDAsbz0xMCttZXwwLFdBPTF8c0EsSUE9dmUrMTJ8MCxDQT0xLWRBfDAsYj0xMittZXwwLEdBPTErZEF8MCxWQT12ZSsxNHwwLEZBPTEtZXJ8MCx3PTE0K21lfDAsUkE9dmUrMTZ8MCxOQT0yLWRlfDAsaz0xNittZXwwLF9BPTIrZGV8MCxDPXZlKzE4fDAsRz0yLXNBfDAsYT0xOCttZXwwLFY9MitzQXwwLEY9dmUrMjB8MCxSPTItZEF8MCxzPTIwK21lfDAsTj0yK2RBfDAsXz12ZSsyMnwwLFk9Mi1lcnwwLHY9MjIrbWV8MCxRPXZlKzI0fDAsRD0zLWRlfDAsZz0yNCttZXwwLEo9MytkZXwwLE09dmUrMjZ8MCxUPTMtc0F8MCxjPTI2K21lfDAsVT0zK3NBfDAsUz12ZSsyOHwwLE89My1kQXwwLGQ9MjgrbWV8MCx6PTMrZEF8MCxqPXZlKzMwfDAsZXI9My1lcnwwLG09MzArbWV8MDtBOmZvcig7Oyl7aWYoVEEpe0xlPSgwfChQZT1yPDwyKSkvNHwwLEtlPVBlKy0xfDAseGU9ZT9QZTpLZSxIZT1mO2Rve2lmKFhlPUhlPDwyLFdlPSgwfGJyKDB8YXJbd2U+PjJdLExlKSkrKCgwfFhlKS80fDApfDAsKFdlPTMmdHJbKDB8YXJbVUE+PjJdKStXZT4+MF0pPDwyND4+MjQpe2lmKEFyPShxZT0wfGFyW1NBPj4yXSkrKCRlPSgwfGJyKDB8YXJbaGU+PjJdLFBlKSkrWGU8PDEpfDAsRWU9ZT8oaT1sclsoaT0oQT1pPUFyKSs0fDApPj4xXXxscltpKzI+PjFdPDwxNixhclsobj12ZSk+PjJdPWxyW0E+PjFdfGxyW0ErMj4+MV08PDE2LGFyW24rND4+Ml09aSxvclttZT4+MV09MHxvcltBcistMj4+MV0sb3JbZWU+PjFdPTB8b3JbQXIrLTQ+PjFdLG9yW0FlPj4xXT0wfG9yW0FyKy02Pj4xXSxvcltsZT4+MV09MHxvcltBcistOD4+MV0sbj1sclsobj0oaT1uPXFlKygkZStQKXwwKSs0fDApPj4xXXxscltuKzI+PjFdPDwxNixhclsoQT1ZQSk+PjJdPWxyW2k+PjFdfGxyW2krMj4+MV08PDE2LGFyW0ErND4+Ml09bixvclt5Pj4xXT0wfG9yW0FyKyhMPDwxKT4+MV0sb3JbWj4+MV09MHxvcltBcisoSzw8MSk+PjFdLG9yW0I+PjFdPTB8b3JbQXIrKHE8PDEpPj4xXSxvcltXPj4xXT0wfG9yW0FyKygkPDwxKT4+MV0sQT1sclsoQT0obj1BPXFlKygkZStBQSl8MCkrNHwwKT4+MV18bHJbQSsyPj4xXTw8MTYsYXJbKGk9UUEpPj4yXT1scltuPj4xXXxscltuKzI+PjFdPDwxNixhcltpKzQ+PjJdPUEsb3JbWD4+MV09MHxvcltBcisoZUE8PDEpPj4xXSxvcltwPj4xXT0wfG9yW0FyKyhyQTw8MSk+PjFdLG9yW0U+PjFdPTB8b3JbQXIrKGlBPDwxKT4+MV0sb3JbST4+MV09MHxvcltBcisocnI8PDEpPj4xXSxpPWxyWyhpPShBPWk9cWUrKCRlK2ZBKXwwKSs0fDApPj4xXXxscltpKzI+PjFdPDwxNixhclsobj1jZSk+PjJdPWxyW0E+PjFdfGxyW0ErMj4+MV08PDE2LGFyW24rND4+Ml09aSxvcltmZT4+MV09MHxvcltBcisobkE8PDEpPj4xXSxuPWllLGk9YmUsQT10QSx5ZT1pcixCZT1yZSxvQSk6KG9yW3ZlPj4xXT0wfG9yW0FyPj4xXSxvclttZT4+MV09MHxvcltBcisoa0E8PDEpPj4xXSxvcltoQT4+MV09MHxvcltBcisoZGU8PDEpPj4xXSxvclt0Pj4xXT0wfG9yW0FyKyh3QTw8MSk+PjFdLG9yW3ZBPj4xXT0wfG9yW0FyKyhzQTw8MSk+PjFdLG9yW3U+PjFdPTB8b3JbQXIrKG1BPDwxKT4+MV0sb3JbZ0E+PjFdPTB8b3JbQXIrKGRBPDwxKT4+MV0sb3JbaD4+MV09MHxvcltBcisoWkE8PDEpPj4xXSxvcltwQT4+MV09MHxvcltBcisyPj4xXSxvcltsPj4xXT0wfG9yW0FyKyh5QTw8MSk+PjFdLG9yW0VBPj4xXT0wfG9yW0FyKyhCQTw8MSk+PjFdLG9yW28+PjFdPTB8b3JbQXIrKFhBPDwxKT4+MV0sb3JbSUE+PjFdPTB8b3JbQXIrKFdBPDwxKT4+MV0sb3JbYj4+MV09MHxvcltBcisoQ0E8PDEpPj4xXSxvcltWQT4+MV09MHxvcltBcisoR0E8PDEpPj4xXSxvclt3Pj4xXT0wfG9yW0FyKyhGQTw8MSk+PjFdLG9yW1JBPj4xXT0wfG9yW0FyKzQ+PjFdLG9yW2s+PjFdPTB8b3JbQXIrKE5BPDwxKT4+MV0sb3JbQz4+MV09MHxvcltBcisoX0E8PDEpPj4xXSxvclthPj4xXT0wfG9yW0FyKyhHPDwxKT4+MV0sb3JbRj4+MV09MHxvcltBcisoVjw8MSk+PjFdLG9yW3M+PjFdPTB8b3JbQXIrKFI8PDEpPj4xXSxvcltfPj4xXT0wfG9yW0FyKyhOPDwxKT4+MV0sb3Jbdj4+MV09MHxvcltBcisoWTw8MSk+PjFdLG9yW1E+PjFdPTB8b3JbQXIrNj4+MV0sb3JbZz4+MV09MHxvcltBcisoRDw8MSk+PjFdLG9yW00+PjFdPTB8b3JbQXIrKEo8PDEpPj4xXSxvcltjPj4xXT0wfG9yW0FyKyhUPDwxKT4+MV0sb3JbUz4+MV09MHxvcltBcisoVTw8MSk+PjFdLG49ZCxpPW0sQT1PLHllPWVyLEJlPWoseiksb3Jbbj4+MV09MHxvcltBcisoQTw8MSk+PjFdLG9yW0JlPj4xXT0wfG9yW0FyKyhFZTw8MSk+PjFdLG9yW2k+PjFdPTB8b3JbQXIrKHllPDwxKT4+MV0sbj1QZT4+KFZlPTB8YXJbT0E+PjJdKSwoMHwoUmU9WGU+PlZlKSk8PS0xKXtuPTEzO2JyZWFrIEF9aWYoKDB8KF9lPTB8YXJbekE+PjJdKSk8PSgwfFJlKSl7bj0xMzticmVhayBBfWlmKCgwfG4pPD0tMSl7bj0xNjticmVhayBBfWlmKCgwfChOZT0wfGFyW2pBPj4yXSkpPD0oMHxuKSl7bj0xNjticmVhayBBfWlmKFFlPTB8YXJbSEE+PjJdLFllPShGZT0wfGJyKF9lLG4pKStSZXwwLEdlPVhlKy0xfDAsaT14ZT4+VmUsISgtMTwoMHwobj0oZT9HZTpYZSk+PlZlKSkmKDB8bik8KDB8X2UpKSl7bj0xODticmVhayBBfWlmKCEoLTE8KDB8aSkmKDB8aSk8KDB8TmUpKSl7bj0yMDticmVhayBBfWlmKHllPVFlKygzKigoMHxicihfZSxpKSkrbnwwKXwwKSsyfDAseWU9MSsoMHx0cltRZSsoMypZZXwwKSsyPj4wXSkrKDB8dHJbeWU+PjBdKT4+MSxuPVhlPj4oaT0wfGFyW3hBPj4yXSksaT1QZT4+aSwoMHxuKTw9LTEpe249MjM7YnJlYWsgQX1pZigoMHwoQT0wfGFyW1BBPj4yXSkpPD0oMHxuKSl7bj0yMzticmVhayBBfWlmKCgwfGkpPD0tMSl7bj0yNjticmVhayBBfWlmKCgwfGkpPj0oMHxhcltMQT4+Ml0pKXtuPTI2O2JyZWFrIEF9amU9KDB8YXJbS0E+PjJdKSsoMjQqKCgwfGJyKEEsaSkpK258MCl8MCkrMnwwLGplPTB8YXJbKDB8YXJbcUE+PjJdKSsobHJbamU+PjFdPDwyKT4+Ml0sQ2U9KDB8YXJbamUrNzU2Pj4yXSkreWV8MCxDZT1jcls0ODE1NCsoKDB8Q2UpPDA/MDooMHxDZSk8NTE/Q2U6NTEpPj4wXTw8JEEsamU9KFdlPDwxJjI1NSktMit5ZSsoMHxhcltqZSs3NjA+PjJdKXwwLGplPWNyWzQ4MTAwKygoMHxqZSk8MD8wOigwfGplKTw1Mz9qZTo1Myk+PjBdPDwkQSxKZT0oMHwoSmU9KDY1NTM1JihUZT0wfG9yW0FlPj4xXSkpLSgoNjU1MzUmKFVlPTB8b3JbZWU+PjFdKSk8PDEpKyhuPTY1NTM1Jih5ZT0wfG9yW21lPj4xXSkpfDApKTwwPzAtSmV8MDpKZSxCZT0wfGxyW2ZlPj4xXSxEZT0oMHwoRGU9KDB8bHJbcmU+PjFdKS0obHJbaWU+PjFdPDwxKStCZXwwKSk8MD8wLURlfDA6RGUsTWU9KDB8KE1lPSg2NTUzNSYoSWU9MHxvcltuZT4+MV0pKS0oKDY1NTM1JihPZT0wfG9yW3RlPj4xXSkpPDwxKSsoaT02NTUzNSYoU2U9MHxvclt2ZT4+MV0pKXwwKSk8MD8wLU1lfDA6TWUsRWU9MHxscltjZT4+MV0sQT1NZStKZXwwLFhlPSh6ZT0oMHwoemU9KDB8bHJbb2U+PjFdKS0obHJbYWU+PjFdPDwxKStFZXwwKSk8MD8wLXplfDA6emUpK0RlfDAsSmU9RGUrSmV8MCxNZT16ZStNZXwwO2U6ZG97aWYoKFhlK0F8MCk8KDB8Q2UpKXtXZT1DZT4+Mjtkb3tpZigoQTw8MXwwKTwoMHxXZSkpe2lmKHplPSgwfGxyW2xlPj4xXSktbnwwLChDZT4+M3wwKTw9KCgoMHwoRGU9aS0oMHxsclt1ZT4+MV0pfDApKTwwPzAtRGV8MDpEZSkrKCgwfHplKTwwPzAtemV8MDp6ZSl8MCkpe2k9MDticmVha31pPSgwfCgoMHwoaT1uLWl8MCkpPDA/MC1pfDA6aSkpPCgxKyg1KmplfDApPj4xfDApfWVsc2UgaT0wfXdoaWxlKDApO2Rve2lmKChYZTw8MXwwKTwoMHxXZSkpe2lmKHplPSgwfGxyW2JlPj4xXSktQmV8MCwoQ2U+PjN8MCk8PSgoKDB8KERlPUVlLSgwfGxyW3NlPj4xXSl8MCkpPDA/MC1EZXwwOkRlKSsoKDB8emUpPDA/MC16ZXwwOnplKXwwKSl7bj0wO2JyZWFrfW49KDB8KCgwfChuPUJlLUVlfDApKTwwPzAtbnwwOm4pKTwoMSsoNSpqZXwwKT4+MXwwKX1lbHNlIG49MH13aGlsZSgwKTtpZih6ZT1pJm4sRWU9KENlPj4xKStDZT4+MyxBPShCZT0wfHRyW0RBPj4wXSk8PDI0Pj4yNCE9MCxlKXtpZihuPS0xPCgwfChpPUdlPj5WZSkpLEEpe2lmKCEobiYoMHxpKTwoMHxfZSkpKXtuPTM3O2JyZWFrIEF9QT0oNjU1MzUmKGNyWyhBPVFlKygzKihGZStpfDApfDApfDApPj4wXXxjcltBKzE+PjBdPDw4KSk+Pj4xMCYxXjF9ZWxzZXtpZighbil7bj00MTticmVhayBBfUE9MX1pZigoMHxfZSk8PSgwfGkpKXtuPTQxO2JyZWFrIEF9aT1RZSsoMyooRmUraXwwKXwwKXwwLERlPShuPUJlPDwyND4+MjQ/MD09KDEwMjQmKGNyWyhuPVFlKygzKlllfDApfDApPj4wXXxjcltuKzE+PjBdPDw4KSk6MSkmMD09KDIwNDgmKGNyWyhEZT1RZSsoMypZZXwwKXwwKT4+MF18Y3JbRGUrMT4+MF08PDgpKSxOZT1BPDwyND4+MjQ/MD09KDIwNDgmKGNyW2k+PjBdfGNyW2krMT4+MF08PDgpKTowfWVsc2V7aWYobj0tMTwoMHwoaT1LZT4+VmUpKSxBKXtpZighKG4mKDB8aSk8KDB8TmUpKSl7bj00NzticmVhayBBfUE9UWUrKDMqKCgwfGJyKF9lLGkpKStSZXwwKXwwKXwwLEE9MD09KDEwMjQmKGNyW0E+PjBdfGNyW0ErMT4+MF08PDgpKX1lbHNle2lmKCFuKXtuPTUxO2JyZWFrIEF9QT0xfWlmKCgwfE5lKTw9KDB8aSkpe249NTE7YnJlYWsgQX1pPVFlKygzKigoMHxicihfZSxpKSkrUmV8MCl8MCl8MCxEZT0obj1CZTw8MjQ+PjI0PzA9PSgxMDI0Jihjclsobj1RZSsoMypZZXwwKXwwKT4+MF18Y3JbbisxPj4wXTw8OCkpOjEpJjA9PSgyMDQ4JihjclsoRGU9UWUrKDMqWWV8MCl8MCk+PjBdfGNyW0RlKzE+PjBdPDw4KSksTmU9QSYwPT0oMjA0OCYoY3JbaT4+MF18Y3JbaSsxPj4wXTw8OCkpfWZvcihfZT1qZTw8MSxZZT0xMCpqZXwwLFFlPTAtamV8MCxSZT0oMHxFZSk8PSgwfEplKXwxXk5lLEZlPSgwfEVlKTw9KDB8TWUpfDFeRGUsVmU9MC0oR2U9amU+PjEpfDAsQ2U9MCxYZT1UZSxFZT1VZSxpPVNlLEE9T2U7Oyl7V2U9cWUrKCRlKygwfGJyKFAsQ2UpKSl8MDtkb3tpZih6ZSl7U2U9MHxvclt2ZSsoQ2U8PDMpKzY+PjFdLE1lPTY1NTM1JkVlLFVlPTY1NTM1JkEsRWU9KFRlPTY1NTM1JnllKStfZXwwLEJlPTY1NTM1JigoMHwoQmU9KEE9NCsoVGU8PDEpfDApKyhNZTw8MSkrKE9lPTY1NTM1JlhlKSsobj0oaSY9NjU1MzUpPDwxKStVZT4+MykpPCgwfChKZT1UZS1fZXwwKSk/SmU6KDB8RWUpPCgwfEJlKT9FZTpCZSksWGU9TWUrX2V8MCxFZT02NTUzNSYoKDB8KEVlPShUZSsyK01lK09lK2l8MCk+Pj4yKSk8KDB8KEplPU1lLV9lfDApKT9KZTooMHxYZSk8KDB8RWUpP1hlOkVlKSxYZT0oVGUrNCtNZSsoMypPZXwwKStpKyhsclttZSsoQ2U8PDMpKzY+PjFdPDwxKXwwKT4+PjMsSmU9T2UtX2V8MCxPZT1PZStfZXwwLFhlPTY1NTM1JigoMHxYZSk8KDB8SmUpP0plOigwfE9lKTwoMHxYZSk/T2U6WGUpLG49QStNZStuKyhVZTw8MSkrKE9lPTY1NTM1JkllKT4+MyxBPWkrX2V8MCxuPTY1NTM1JigoMHxuKTwoMHwoTWU9aS1fZXwwKSk/TWU6KDB8QSk8KDB8bik/QTpuKSxvcltnZT4+MV09bixBPWkrVGUrVWV8MCxUZT1VZS1fZXwwLFVlPVVlK19lfDAsaT02NTUzNSYoKDB8KGk9KE9lKzIrQXwwKT4+PjIpKTwoMHxUZSk/VGU6KDB8VWUpPCgwfGkpP1VlOmkpLG9yW0pBPj4xXT1pLEE9KEErNCsoMypPZXwwKSsoKDY1NTM1JlNlKTw8MSl8MCk+Pj4zLFNlPU9lLV9lfDAsT2U9T2UrX2V8MCxBPTY1NTM1JigoMHxBKTwoMHxTZSk/U2U6KDB8T2UpPCgwfEEpP09lOkEpLG9yW01BPj4xXT1BO2Rve2lmKGUpe2lmKHllPTB8YnIoQ2UsZGUpLCFOZSl7aWYoIURlKWJyZWFrO29yW1dlPj4xXT0wfG9yW2dlPj4xXSxvcltXZSsyPj4xXT0wfG9yWzIrZ2U+PjFdLG9yW1dlKzQ+PjFdPTB8b3JbNCtnZT4+MV07YnJlYWt9aWYob3JbQXIrKHllKy0xPDwxKT4+MV09QmUsRGUpe29yW0FyKyh5ZTw8MSk+PjFdPW4sb3JbQXIrKHllKy0yPDwxKT4+MV09RWUsb3JbQXIrKHllKzE8PDEpPj4xXT1pLG9yW0FyKyh5ZSstMzw8MSk+PjFdPVhlLG9yW0FyKyh5ZSsyPDwxKT4+MV09QTticmVha31vcltBcisoeWUrLTI8PDEpPj4xXT1FZSxvcltBcisoeWUrLTM8PDEpPj4xXT1YZTticmVha31pZighTmUpe2lmKCFEZSlicmVhaztvcltBcisoQ2U8PDEpPj4xXT1uLG9yW0FyKyhkZStDZTw8MSk+PjFdPWksb3JbQXIrKGJBK0NlPDwxKT4+MV09QTticmVha31pZihvcltBcisoQ2UtZGU8PDEpPj4xXT1CZSxEZSl7b3JbQXIrKENlPDwxKT4+MV09bixvcltBcisoQ2UtYUE8PDEpPj4xXT1FZSxvcltBcisoZGUrQ2U8PDEpPj4xXT1pLG9yW0FyKyhDZStjQTw8MSk+PjFdPVhlLG9yW0FyKyhhQStDZTw8MSk+PjFdPUE7YnJlYWt9b3JbQXIrKENlLWxBPDwxKT4+MV09RWUsb3JbQXIrKENlK3VBPDwxKT4+MV09WGU7YnJlYWt9d2hpbGUoMCl9ZWxzZXtpZigoMHxZZSk8PSgwfCgoMHwobj04Kyg5KigoQmU9NjU1MzUmaSktKHllJj02NTUzNSl8MCl8MCkrKDB8YnIoKEEmPTY1NTM1KS0oaT02NTUzNSZFZSl8MCwtMykpPj40KSk8MD8wLW58MDpuKSkpYnJlYWs7bj0oMHxuKTwoMHxRZSk/UWU6KDB8amUpPCgwfG4pP2plOm47ZG97aWYoZSl7aWYoTmUmJihTZT1uK3llfDAsT2U9QXIrKCgwfGJyKENlLGRlKSktMTw8MSl8MCxvcltPZT4+MV09KDB8U2UpPDA/MDo2NTUzNSYoKDB8U2UpPCgwfEgpP1NlOngpKSwhRGUpYnJlYWs7U2U9QmUtbnwwLE9lPUFyKygoMHxicihDZSxkZSkpPDwxKXwwLG9yW09lPj4xXT0oMHxTZSk8MD8wOjY1NTM1JigoMHxTZSk8KDB8SCk/U2U6eCl9ZWxzZXtpZihOZSYmKE9lPW4reWV8MCxvcltBcisoQ2UtZGU8PDEpPj4xXT0oMHxPZSk8MD8wOjY1NTM1JigoMHxPZSk8KDB8SCk/T2U6eCkpLCFEZSlicmVhaztPZT1CZS1ufDAsb3JbQXIrKENlPDwxKT4+MV09KDB8T2UpPDA/MDo2NTUzNSYoKDB8T2UpPCgwfEgpP09lOngpfX13aGlsZSgwKTtpZihSZXx8KFNlPSgoMHwoT2U9KFNlPW4rKCgoeWUrMSsoNjU1MzUmWGUpfDApPj4+MSktaSl8MCk+PjEpKTwoMHxWZSk/VmU6KCgwfEdlKTwoMHxPZSk/amU6U2UpPj4xKStpfDAsT2U9KDB8YnIoQ2UsZGUpKS0yfDAsb3JbQXIrKChlP09lOkNlLVB8MCk8PDEpPj4xXT0oMHxTZSk8MD8wOjY1NTM1JigoMHxTZSk8KDB8SCk/U2U6eCkpLEZlKWJyZWFrO1NlPSgoMHwoT2U9KFNlPSgoQmUrMSsoNjU1MzUmSWUpfDApPj4+MSktQS1ufDApPj4xKSk8KDB8VmUpP1ZlOigoMHxHZSk8KDB8T2UpP2plOlNlKT4+MSkrQXwwLE9lPTB8YnIoZT9DZToxLGRlKSxvcltBcisoT2UrKGU/MTpDZSk8PDEpPj4xXT0oMHxTZSk8MD8wOjY1NTM1JigoMHxTZSk8KDB8SCk/U2U6eCl9fXdoaWxlKDApO2lmKDQ9PSgwfChuPUNlKzF8MCkpKWJyZWFrIGU7WGU9MHxvclttZSsoKENlPW4pPDwzKSs0Pj4xXSxFZT0wfG9yW21lKyhuPDwzKSsyPj4xXSx5ZT0wfG9yW21lKyhuPDwzKT4+MV0saT0wfG9yW3ZlKyhuPDwzKT4+MV0sQT0wfG9yW3ZlKyhuPDwzKSsyPj4xXSxJZT0wfG9yW3ZlKyhuPDwzKSs0Pj4xXX19fXdoaWxlKDApfUhlPUhlK1plfDB9d2hpbGUoKDB8SGUpPCgwfG5yKSl9aWYoKDB8ZnIpPD0oMHwocj1yK2tlfDApKSl7bj01O2JyZWFrfX1zd2l0Y2goMHxuKXtjYXNlIDU6cmV0dXJuIHZvaWQodXI9cGUpO2Nhc2UgMTM6c3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KTticmVhaztjYXNlIDE2OnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSk7YnJlYWs7Y2FzZSAxODpzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpO2JyZWFrO2Nhc2UgMjA6c3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KTticmVhaztjYXNlIDIzOnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSk7YnJlYWs7Y2FzZSAyNjpzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpO2JyZWFrO2Nhc2UgMzc6Y2FzZSA0MTpzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpO2JyZWFrO2Nhc2UgNDc6Y2FzZSA1MTpzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpfX19ZnVuY3Rpb24gQnQoQSxlLHIsaSxmLG4pe3J8PTAsaXw9MCxmfD0wLG58PTA7dmFyIHQsbyxhLGMsbCx1LGIscyxkLGssaCx3LHYsbSxnLFoscCx5LEIsRSxYLFcsSSxDLEcsVixGLFIsTixfLFksUSxELEosTSxULFUsUyxPLHosaixILHgsUCxMLEsscSwkLEFBLGVBLHJBLGlBLGZBLG5BLHRBLG9BLGFBLGNBLGxBLHVBLGJBLHNBLGRBLGtBLGhBLHdBLHZBLG1BLGdBLFpBLHBBLHlBLEJBLEVBLFhBLFdBLElBLENBLEdBLFZBLEZBLFJBLE5BLF9BLFlBLFFBLERBLEpBLE1BLFRBLFVBPTAsU0E9MCxPQT0wLHpBPTAsakE9MCxIQT0wLHhBPTAsUEE9MCxMQT0wLEtBPTAscUE9MCwkQT0wLEFlPTAsZWU9MCxyZT0wLGllPTAsZmU9MCxuZT0wLHRlPTAsb2U9MCxhZT0wLGNlPTAsbGU9MCx1ZT0wLGJlPTAsc2U9MCxkZT0wLGtlPTAsaGU9MCx3ZT0wLHZlPTAsbWU9MCxnZT0wLFplPTAscGU9MCx5ZT0wLEJlPTAsRWU9MCxYZT0wLFdlPTAsSWU9MDtpZih1cj0oVEE9dXIpKzQ4fDAsUUE9VEErMjR8MCxEQT1UQSs4fDAsSkE9VEEsTUE9KGV8PTApPzI6MSxOQT1lPzE6MixSQT0wfGFyWyhfQT0oQXw9MCkrNDB8MCk+PjJdLFVBPTB8YXJbQSs1NzYwPj4yXSxJZT0oMHxuKTwoMHwoSWU9MHxhclsoWUE9QSsxMDQ3MnwwKT4+Ml0pKT9uOkllLCgwfChXZT0oMHxpKTwoMHwoV2U9MHxhcltBKzEwNDc2Pj4yXSkpP2k6V2UpKTw9KDB8cikpdXI9VEE7ZWxzZXt0QT0oMHxmKTwoMHxJZSksb0E9QSsxMDQ2MHwwLGFBPUErNHwwLGNBPUErMTAzNjh8MCxsQT1BKzEwMzcyfDAsdUE9QSsxMDM3NnwwLGJBPUErMTAzNjB8MCxzQT1BKzEwMzQ4fDAsZEE9QSsxMDM1MnwwLGtBPUErMTAzNTZ8MCxoQT1BKzEwMzQwfDAsd0E9QSs0OHwwLHZBPVVBKy04fDAsbUE9MitEQXwwLGdBPTErREF8MCxaQT0xNCtEQXwwLHBBPTEzK0RBfDAseUE9MTIrREF8MCxCQT0yK1FBfDAsRUE9MStRQXwwLFhBPTE0K1FBfDAsV0E9MTMrUUF8MCxJQT0xMitRQXwwLENBPTMrREF8MCxHQT0zK1FBfDAsVkE9MTUrREF8MCxGQT0xNStRQXwwLGlBPUErNTQ4MHwwLGZBPUpBKzF8MCxuQT1KQSsyfDAsTD0yNTUrKFA9MTw8VUEpfDAscGU9MypSQXwwLHE9eWU9Sz1SQTw8MSwkPTB8YnIoUkEsLTMpLEFBPVJBPDwxLGVBPTB8YnIoUkEsLTMpLEJlPXJBPVJBPDwxLEVlPTMqUkF8MCxYZT1SQTw8MixhPWU/LTE6MC1SQXwwLHQ9ZT8xOlJBLGM9ZT8tMjowLUJlfDAsbD1lPzI6QmUsdT1lPy0zOjAtRWV8MCxiPWU/MzpFZSxzPWU/LTQ6MC1YZXwwLG89ZT9SQToxLGQ9NCtRQXwwLGs9ZT9SQS0xfDA6MS1SQXwwLFM9NCtEQXwwLGg9MStSQXwwLHc9NStRQXwwLHY9ZT9SQS0yfDA6MS1CZXwwLFQ9NStEQXwwLG09ZT8yK1JBfDA6MXxCZSxnPTYrUUF8MCxaPWU/UkEtM3wwOjEtRWV8MCxPPTYrREF8MCxwPWU/MytSQXwwOkVlKzF8MCx5PTcrUUF8MCxCPWU/UkEtNHwwOjEtWGV8MCxIPTcrREF8MCxFPWU/eWU6MixYPTgrUUF8MCxXPWU/eWUrLTF8MDoyLVJBfDAsaj04K0RBfDAsST1lPzF8eWU6MitSQXwwLEM9OStRQXwwLEc9ZT95ZSstMnwwOjItQmV8MCxVPTkrREF8MCxWPShlP3llOkJlKSsyfDAsRj0xMCtRQXwwLFI9ZT95ZSstM3wwOjItRWV8MCx6PTEwK0RBfDAsTj1lP3llKzN8MDpFZSsyfDAsXz0xMStRQXwwLHllPWU/eWUrLTR8MDoyLVhlfDAseD0xMStEQXwwLFk9ZT9wZTozLFE9ZT9wZSstMXwwOjMtUkF8MCxEPWU/cGUrMXwwOjMrUkF8MCxKPWU/cGUrLTJ8MDozLUJlfDAsQmU9ZT9wZSsyfDA6QmUrM3wwLE09ZT9wZSstM3wwOjMtRWV8MCxFZT0oZT9wZTpFZSkrM3wwLFhlPWU/cGUrLTR8MDozLVhlfDA7QTpmb3IoOzspe2lmKHRBKXt2ZT0oMHwod2U9cjw8MikpLzR8MCxtZT13ZSstMXwwLGhlPWU/d2U6bWUsa2U9Zjtkb3tpZihBPWtlPDwyLFNBPSgwfGJyKDB8YXJbWUE+PjJdLHZlKSkrKCgwfEEpLzR8MCl8MCwoU0E9MyZ0clsoMHxhcltvQT4+Ml0pK1NBPj4wXSk8PDI0Pj4yNCl7aWYocGU9KGdlPTB8YXJbYUE+PjJdKSsoWmU9KDB8YnIoMHxhcltfQT4+Ml0sd2UpKStBfDApfDAsdHJbUUE+PjBdPTB8dHJbcGU+PjBdLHRyW0RBPj4wXT0wfHRyW3BlK2E+PjBdLHRyW0VBPj4wXT0wfHRyW3BlK3Q+PjBdLHRyW2dBPj4wXT0wfHRyW3BlK2M+PjBdLHRyW0JBPj4wXT0wfHRyW3BlK2w+PjBdLHRyW21BPj4wXT0wfHRyW3BlK3U+PjBdLHRyW0dBPj4wXT0wfHRyW3BlK2I+PjBdLHRyW0NBPj4wXT0wfHRyW3BlK3M+PjBdLHRyW2Q+PjBdPTB8dHJbcGUrbz4+MF0sdHJbUz4+MF09MHx0cltwZStrPj4wXSx0clt3Pj4wXT0wfHRyW3BlK2g+PjBdLHRyW1Q+PjBdPTB8dHJbcGUrdj4+MF0sdHJbZz4+MF09MHx0cltwZSttPj4wXSx0cltPPj4wXT0wfHRyW3BlK1o+PjBdLHRyW3k+PjBdPTB8dHJbcGUrcD4+MF0sdHJbSD4+MF09MHx0cltwZStCPj4wXSx0cltYPj4wXT0wfHRyW3BlK0U+PjBdLHRyW2o+PjBdPTB8dHJbcGUrVz4+MF0sdHJbQz4+MF09MHx0cltwZStJPj4wXSx0cltVPj4wXT0wfHRyW3BlK0c+PjBdLHRyW0Y+PjBdPTB8dHJbcGUrVj4+MF0sdHJbej4+MF09MHx0cltwZStSPj4wXSx0cltfPj4wXT0wfHRyW3BlK04+PjBdLHRyW3g+PjBdPTB8dHJbcGUreWU+PjBdLEtBPTB8dHJbcGUrWT4+MF0sdHJbSUE+PjBdPUtBLHpBPTB8dHJbcGUrUT4+MF0sdHJbeUE+PjBdPXpBLHFBPTB8dHJbcGUrRD4+MF0sdHJbV0E+PjBdPXFBLGpBPTB8dHJbcGUrSj4+MF0sdHJbcEE+PjBdPWpBLCRBPTB8dHJbcGUrQmU+PjBdLHRyW1hBPj4wXT0kQSxIQT0wfHRyW3BlK00+PjBdLHRyW1pBPj4wXT1IQSxyZT0wfHRyW3BlK0VlPj4wXSx0cltGQT4+MF09cmUsZWU9MHx0cltwZStYZT4+MF0sdHJbVkE+PjBdPWVlLG49d2U+PihmZT0wfGFyW2NBPj4yXSksKDB8KHRlPUE+PmZlKSk8PS0xKXtuPTEwO2JyZWFrIEF9aWYoKDB8KGFlPTB8YXJbbEE+PjJdKSk8PSgwfHRlKSl7bj0xMDticmVhayBBfWlmKCgwfG4pPD0tMSl7bj0xMzticmVhayBBfWlmKCgwfChvZT0wfGFyW3VBPj4yXSkpPD0oMHxuKSl7bj0xMzticmVhayBBfWlmKGxlPTB8YXJbYkE+PjJdLGNlPShuZT0wfGJyKGFlLG4pKSt0ZXwwLGllPUErLTF8MCxpPWhlPj5mZSwhKC0xPCgwfChuPShlP2llOkEpPj5mZSkpJigwfG4pPCgwfGFlKSkpe249MTU7YnJlYWsgQX1pZighKC0xPCgwfGkpJigwfGkpPCgwfG9lKSkpe249MTc7YnJlYWsgQX1pZihVQT1sZSsoMyooKDB8YnIoYWUsaSkpK258MCl8MCkrMnwwLFVBPTErKDB8dHJbbGUrKDMqY2V8MCkrMj4+MF0pKygwfHRyW1VBPj4wXSk+PjEsbj1BPj4oaT0wfGFyW3NBPj4yXSksaT13ZT4+aSwoMHxuKTw9LTEpe249MjA7YnJlYWsgQX1pZigoMHwoQT0wfGFyW2RBPj4yXSkpPD0oMHxuKSl7bj0yMDticmVhayBBfWlmKCgwfGkpPD0tMSl7bj0yMzticmVhayBBfWlmKCgwfGkpPj0oMHxhcltrQT4+Ml0pKXtuPTIzO2JyZWFrIEF9ZGU9KDB8YXJbaEE+PjJdKSsoMjQqKCgwfGJyKEEsaSkpK258MCl8MCkrMnwwLGRlPTB8YXJbKDB8YXJbd0E+PjJdKSsobHJbZGU+PjFdPDwyKT4+Ml0sQWU9KDB8YXJbZGUrNzU2Pj4yXSkrVUF8MCxBZT1jcls0ODE1NCsoKDB8QWUpPDA/MDooMHxBZSk8NTE/QWU6NTEpPj4wXTw8dkEsZGU9KFNBPDwxJjI1NSktMitVQSsoMHxhcltkZSs3NjA+PjJdKXwwLGRlPWNyWzQ4MTAwKygoMHxkZSk8MD8wOigwfGRlKTw1Mz9kZTo1Myk+PjBdPDx2QSxTQT0oMHwoU0E9KDI1NSYoeEE9MHx0clttQT4+MF0pKS0oKDI1NSYoT0E9MHx0cltnQT4+MF0pKTw8MSkrKFBBPTI1NSYoVUE9MHx0cltEQT4+MF0pKXwwKSk8MD8wLVNBfDA6U0EsSEE9KDB8KEhBPSgyNTUmSEEpLSgoMjU1JmpBKTw8MSkrKExBPTI1NSZ6QSl8MCkpPDA/MC1IQXwwOkhBLG49KHNlPSgwfChzZT0oMjU1JihqQT0wfHRyW0JBPj4wXSkpLSgoMjU1JihiZT0wfHRyW0VBPj4wXSkpPDwxKSsoaT0yNTUmKHVlPTB8dHJbUUE+PjBdKSl8MCkpPDA/MC1zZXwwOnNlKStTQXwwLEE9KEtBPSgwfChLQT0oMjU1JiRBKS0oKDI1NSZxQSk8PDEpKyh6QT0yNTUmS0EpfDApKTwwPzAtS0F8MDpLQSkrSEF8MCxIQT1IQStTQXwwLEtBPUtBK3NlfDA7ZTpkb3tpZigoQStufDApPCgwfEFlKSl7U0E9QWU+PjI7ZG97aWYoKG48PDF8MCk8KDB8U0EpKXtpZihzZT0oMHxjcltDQT4+MF0pLVBBfDAsKEFlPj4zfDApPD0oKCgwfCgkQT1pLSgwfGNyW0dBPj4wXSl8MCkpPDA/MC0kQXwwOiRBKSsoKDB8c2UpPDA/MC1zZXwwOnNlKXwwKSl7aT0wO2JyZWFrfWk9KDB8KCgwfChpPVBBLWl8MCkpPDA/MC1pfDA6aSkpPCgxKyg1KmRlfDApPj4xfDApfWVsc2UgaT0wfXdoaWxlKDApO2Rve2lmKChBPDwxfDApPCgwfFNBKSl7aWYoKEFlPj4zfDApPD0oKCgwfChyZT16QS0oMjU1JnJlKXwwKSk8MD8wLXJlfDA6cmUpKygoMHwoc2U9KDI1NSZlZSktTEF8MCkpPDA/MC1zZXwwOnNlKXwwKSl7bj0wO2JyZWFrfW49KDB8KCgwfChuPUxBLXpBfDApKTwwPzAtbnwwOm4pKTwoMSsoNSpkZXwwKT4+MXwwKX1lbHNlIG49MH13aGlsZSgwKTtpZihzZT1pJm4sekE9KEFlPj4xKStBZT4+MyxBPShTQT0wfHRyW2lBPj4wXSk8PDI0Pj4yNCE9MCxlKXtpZihuPS0xPCgwfChpPWllPj5mZSkpLEEpe2lmKCEobiYoMHxpKTwoMHxhZSkpKXtuPTM0O2JyZWFrIEF9QT0oNjU1MzUmKGNyWyhBPWxlKygzKihuZStpfDApfDApfDApPj4wXXxjcltBKzE+PjBdPDw4KSk+Pj4xMCYxXjF9ZWxzZXtpZighbil7bj0zODticmVhayBBfUE9MX1pZigoMHxhZSk8PSgwfGkpKXtuPTM4O2JyZWFrIEF9aT1sZSsoMyoobmUraXwwKXwwKXwwLGZlPShuPVNBPDwyND4+MjQ/MD09KDEwMjQmKGNyWyhuPWxlKygzKmNlfDApfDApPj4wXXxjcltuKzE+PjBdPDw4KSk6MSkmMD09KDIwNDgmKGNyWyhmZT1sZSsoMypjZXwwKXwwKT4+MF18Y3JbZmUrMT4+MF08PDgpKSxBZT1BPDwyND4+MjQ/MD09KDIwNDgmKGNyW2k+PjBdfGNyW2krMT4+MF08PDgpKTowfWVsc2V7aWYobj0tMTwoMHwoaT1tZT4+ZmUpKSxBKXtpZighKG4mKDB8aSk8KDB8b2UpKSl7bj00NDticmVhayBBfUE9bGUrKDMqKCgwfGJyKGFlLGkpKSt0ZXwwKXwwKXwwLEE9MD09KDEwMjQmKGNyW0E+PjBdfGNyW0ErMT4+MF08PDgpKX1lbHNle2lmKCFuKXtuPTQ4O2JyZWFrIEF9QT0xfWlmKCgwfG9lKTw9KDB8aSkpe249NDg7YnJlYWsgQX1pPWxlKygzKigoMHxicihhZSxpKSkrdGV8MCl8MCl8MCxmZT0obj1TQTw8MjQ+PjI0PzA9PSgxMDI0Jihjclsobj1sZSsoMypjZXwwKXwwKT4+MF18Y3JbbisxPj4wXTw8OCkpOjEpJjA9PSgyMDQ4JihjclsoZmU9bGUrKDMqY2V8MCl8MCk+PjBdfGNyW2ZlKzE+PjBdPDw4KSksQWU9QSYwPT0oMjA0OCYoY3JbaT4+MF18Y3JbaSsxPj4wXTw8OCkpfWZvcihlZT1kZTw8MSxyZT0xMCpkZXwwLGllPTAtZGV8MCwkQT0oMHx6QSk8PSgwfEhBKXwxXkFlLHFBPSgwfHpBKTw9KDB8S0EpfDFeZmUsS0E9MC0oTEE9ZGU+PjEpfDAsUEE9MCxpPXVlLEE9YmU7Oyl7ekE9Z2UrKFplKyhIQT0wfGJyKFJBLFBBKSkpfDA7ZG97aWYoc2Upe3VlPTB8dHJbUUErKFBBPDwyKSszPj4wXSxsZT0yNTUmQSxTQT0oY2U9MjU1JlVBKStlZXwwLFVBPTI1NSYoKDB8KFVBPShBPTQrKGNlPDwxKXwwKSsoKGFlPTI1NSZPQSk8PDEpKyhiZT0yNTUmeEEpKyhuPShpJj0yNTUpPDwxKStsZT4+MykpPCgwfChvZT1jZS1lZXwwKSk/b2U6KDB8U0EpPCgwfFVBKT9TQTpVQSksT0E9YWUrZWV8MCxTQT0yNTUmKCgwfChTQT0oY2UrMithZStiZStpfDApPj4+MikpPCgwfChvZT1hZS1lZXwwKSk/b2U6KDB8T0EpPCgwfFNBKT9PQTpTQSksT0E9KGNlKzQrYWUrKDMqYmV8MCkraSsoY3JbREErKFBBPDwyKSszPj4wXTw8MSl8MCk+Pj4zLG9lPWJlLWVlfDAsYmU9YmUrZWV8MCxPQT0yNTUmKCgwfE9BKTwoMHxvZSk/b2U6KDB8YmUpPCgwfE9BKT9iZTpPQSksbj1BK2FlK24rKGxlPDwxKSsoYmU9MjU1JmpBKT4+MyxBPWkrZWV8MCxuPTI1NSYoKDB8bik8KDB8KGFlPWktZWV8MCkpP2FlOigwfEEpPCgwfG4pP0E6biksdHJbSkE+PjBdPW4sQT1pK2NlK2xlfDAsY2U9bGUtZWV8MCxsZT1sZStlZXwwLGk9MjU1JigoMHwoaT0oYmUrMitBfDApPj4+MikpPCgwfGNlKT9jZTooMHxsZSk8KDB8aSk/bGU6aSksdHJbZkE+PjBdPWksQT0oQSs0KygzKmJlfDApKygoMjU1JnVlKTw8MSl8MCk+Pj4zLHVlPWJlLWVlfDAsYmU9YmUrZWV8MCxBPTI1NSYoKDB8QSk8KDB8dWUpP3VlOigwfGJlKTwoMHxBKT9iZTpBKSx0cltuQT4+MF09QTtkb3tpZihlKXtpZighQWUpe2lmKCFmZSlicmVhazt0clt6QT4+MF09MHx0cltKQT4+MF0sdHJbekErMT4+MF09MHx0cltKQSsxPj4wXSx0clt6QSsyPj4wXT0wfHRyW0pBKzI+PjBdO2JyZWFrfWlmKHRyW3BlKyhIQSstMSk+PjBdPVVBLGZlKXt0cltwZStIQT4+MF09bix0cltwZSsoSEErLTIpPj4wXT1TQSx0cltwZSsoSEErMSk+PjBdPWksdHJbcGUrKEhBKy0zKT4+MF09T0EsdHJbcGUrKEhBKzIpPj4wXT1BO2JyZWFrfXRyW3BlKyhIQSstMik+PjBdPVNBLHRyW3BlKyhIQSstMyk+PjBdPU9BO2JyZWFrfWlmKCFBZSl7aWYoIWZlKWJyZWFrO3RyW3BlK1BBPj4wXT1uLHRyW3BlKyhSQStQQSk+PjBdPWksdHJbcGUrKHJBK1BBKT4+MF09QTticmVha31pZih0cltwZSsoUEEtUkEpPj4wXT1VQSxmZSl7dHJbcGUrUEE+PjBdPW4sdHJbcGUrKFBBLXEpPj4wXT1TQSx0cltwZSsoUkErUEEpPj4wXT1pLHRyW3BlKyhQQSskKT4+MF09T0EsdHJbcGUrKHErUEEpPj4wXT1BO2JyZWFrfXRyW3BlKyhQQS1BQSk+PjBdPVNBLHRyW3BlKyhQQStlQSk+PjBdPU9BO2JyZWFrfXdoaWxlKDApfWVsc2V7aWYoKDB8cmUpPD0oMHwoKDB8KG49OCsoOSooKFNBPTI1NSZpKS0oVUEmPTI1NSl8MCl8MCkrKDB8YnIoKEEmPTI1NSktKGk9MjU1Jk9BKXwwLC0zKSk+PjQpKTwwPzAtbnwwOm4pKSlicmVhaztuPSgwfG4pPCgwfGllKT9pZTooMHxkZSk8KDB8bik/ZGU6bjtkb3tpZihlKXtpZihBZSYmKGJlPW4rVUF8MCx0cltwZSsoSEErLTEpPj4wXT0oMHxiZSk8MD8wOjI1NSYoKDB8YmUpPCgwfFApP2JlOkwpKSwhZmUpYnJlYWs7YmU9U0EtbnwwLHRyW3BlK0hBPj4wXT0oMHxiZSk8MD8wOjI1NSYoKDB8YmUpPCgwfFApP2JlOkwpfWVsc2V7aWYoQWUmJihiZT1uK1VBfDAsdHJbcGUrKFBBLVJBKT4+MF09KDB8YmUpPDA/MDoyNTUmKCgwfGJlKTwoMHxQKT9iZTpMKSksIWZlKWJyZWFrO2JlPVNBLW58MCx0cltwZStQQT4+MF09KDB8YmUpPDA/MDoyNTUmKCgwfGJlKTwoMHxQKT9iZTpMKX19d2hpbGUoMCk7aWYoJEF8fChiZT0oKDB8KHVlPShiZT1uKygoKFVBKzErKDI1NSZ4QSl8MCk+Pj4xKS1pKXwwKT4+MSkpPCgwfEtBKT9LQTooKDB8TEEpPCgwfHVlKT9kZTpiZSk+PjEpK2l8MCx0cltwZSsoZT9IQSstMnwwOlBBLUt8MCk+PjBdPSgwfGJlKTwwPzA6MjU1JigoMHxiZSk8KDB8UCk/YmU6TCkpLHFBKWJyZWFrO3VlPSgoMHwoYmU9KHVlPSgoU0ErMSsoMjU1JmpBKXwwKT4+PjEpLUEtbnwwKT4+MSkpPCgwfEtBKT9LQTooKDB8TEEpPCgwfGJlKT9kZTp1ZSk+PjEpK0F8MCxiZT0wfGJyKGU/UEE6MSxSQSksdHJbcGUrKGJlKyhlPzE6UEEpKT4+MF09KDB8dWUpPDA/MDoyNTUmKCgwfHVlKTwoMHxQKT91ZTpMKX19d2hpbGUoMCk7aWYoND09KDB8KG49UEErMXwwKSkpYnJlYWsgZTt4QT0wfHRyW0RBKygoUEE9bik8PDIpKzI+PjBdLE9BPTB8dHJbREErKG48PDIpKzE+PjBdLFVBPTB8dHJbREErKG48PDIpPj4wXSxpPTB8dHJbUUErKG48PDIpPj4wXSxBPTB8dHJbUUErKG48PDIpKzE+PjBdLGpBPTB8dHJbUUErKG48PDIpKzI+PjBdfX19d2hpbGUoMCl9a2U9a2UrTUF8MH13aGlsZSgoMHxrZSk8KDB8SWUpKX1pZigoMHxXZSk8PSgwfChyPXIrTkF8MCkpKXtuPTU7YnJlYWt9fXN3aXRjaCgwfG4pe2Nhc2UgNTpyZXR1cm4gdm9pZCh1cj1UQSk7Y2FzZSAxMDpzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpO2JyZWFrO2Nhc2UgMTM6c3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KTticmVhaztjYXNlIDE1OnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSk7YnJlYWs7Y2FzZSAxNzpzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpO2JyZWFrO2Nhc2UgMjA6c3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KTticmVhaztjYXNlIDIzOnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSk7YnJlYWs7Y2FzZSAzNDpjYXNlIDM4OnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSk7YnJlYWs7Y2FzZSA0NDpjYXNlIDQ4OnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSl9fX1mdW5jdGlvbiBFdChBLGUscixpLGYsbil7ZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wO3ZhciB0LG8sYSxjLGwsdSxiLHMsZCxrLGgsdyx2LG0sZyxaLHAseSxCLEUsWCxXLEksQyxHLFYsRixSLE4sXyxZLFEsRCxKLE0sVCxVLFMsTyx6LGosSCx4LFAsTCxLLHEsJCxBQSxlQSxyQSxpQSxmQSxuQSx0QSxvQSxhQSxjQSxsQSx1QSxiQSxzQSxkQSxrQSxoQSx3QSx2QSxtQSxnQSxaQSxwQSx5QSxCQSxFQSxYQSxXQSxJQSxDQSxHQSxWQSxGQSxSQSxOQSxfQSxZQSxRQSxEQSxKQSxNQSxUQT0wLFVBPTAsU0E9MCxPQT0wLHpBPTAsakE9MCxIQT0wLHhBPTAsUEE9MCxMQT0wLEtBPTAscUE9MCwkQT0wLEFlPTAsZWU9MCxyZT0wLGllPTAsZmU9MCxuZT0wLHRlPTAsb2U9MCxhZT0wLGNlPTAsbGU9MCx1ZT0wO2lmKHVyPShNQT11cikrMzJ8MCxRQT1NQSsxNnwwLERBPU1BLEpBPTB8YXJbKEF8PTApKzU3ODA+PjJdLEZBPTB8YXJbQSs1Nzg0Pj4yXSxSQT0wfGJyKEpBLGU/MjoxKSxOQT0wfGJyKEZBLGU/MToyKSxWQT0wfGFyWyhfQT1BKzQ0fDApPj4yXSx1ZT0oMHxuKTwoMHwodWU9MHxhclsoWUE9QSsxMDQ3MnwwKT4+Ml0pKT9uOnVlLHM9QSs1NzY4fDAsKDB8KGxlPSgwfGkpPCgwfChsZT0wfGFyW0ErMTA0NzY+PjJdKSk/aTpsZSkpPD0oMHxyKSl1cj1NQTtlbHNle2Q9KDB8Zik8KDB8dWUpLGs9My1KQXwwLGg9My1GQXwwLHc9QSsxMDQ2MHwwLHY9QSs1OTU2fDAsbT1BKzU5NTJ8MCxnPUErMTAzNjh8MCxaPUErMTAzNzJ8MCxwPUErMTAzNzZ8MCx5PUErMTAzNjB8MCxCPUErNTc3NnwwLEU9QSsxMDM0OHwwLFg9QSsxMDM1MnwwLFc9QSsxMDM1NnwwLEk9QSsxMDM0MHwwLEM9QSs0OHwwLEc9QSs1NDgwfDAsRj02NTUzNSsoVj0xPDxhcltzPj4yXSl8MCxSPVZBPDwxLE49MHxicihWQSwtMiksWT1WQS0xfDAsSj0oUT1WQTw8MSktMXwwLFU9KE09MypWQXwwKS0xfDAsTz0xK1ZBfDAsaj1WQS0yfDAsSD0xfFEsUD1RLTJ8MCxMPTErTXwwLHE9TS0yfDAsY0E9VkE8PDEsZEE9MypWQXwwLHdBPWVBPV89REErMnwwLHZBPXJBPXQ9MitRQXwwLG1BPWlBPW89MTArUUF8MCxnQT1mQT16PURBKzEwfDAsWkE9bkE9RD1EQSs0fDAscEE9dEE9Yz00K1FBfDAseUE9b0E9bD0xMitRQXwwLEJBPWFBPXg9REErMTJ8MCxFQT1sQT1UPURBKzZ8MCxYQT11QT11PTYrUUF8MCxXQT1iQT1iPTE0K1FBfDAsSUE9c0E9Sz1EQSsxNHwwLEdBPWtBPSQ9YT04K1FBfDAsQ0E9aEE9QUE9Uz1EQSs4fDA7QTpmb3IoOzspe2lmKGQpe2FlPSgwfChvZT0wfGJyKHRlPXI8PGgsRkEpKSkvNHwwLGNlPW9lKy0xfDAscmU9ZT9vZTpjZSxBZT1mO2Rve2lmKGZlPTB8YnIoaWU9QWU8PGssSkEpLG49KDB8YnIoMHxhcltZQT4+Ml0sYWUpKSsoKDB8ZmUpLzR8MCl8MCwxPCgyNTUmKG49MyZ0clsoMHxhclt3Pj4yXSkrbj4+MF0pKSl7bmU9ZmUrLTF8MCxlZT1lP25lOmZlLHFBPShuPDwxJjI1NSktMnwwLEtBPTA7ZG97aWYoVEE9MHxhclsoMD09KDB8S0EpP206dik+PjJdLCRBPShuPTB8YXJbQSs0KygoS0E9S0ErMXwwKTw8Mik+PjJdKSsoaT0oMHxicigwfGFyW19BPj4yXSx0ZSkpK2llPDwxKXwwLGU/KG9yW0RBPj4xXT0wfG9yWyRBPj4xXSxvcltRQT4+MV09MHxvclskQSstMj4+MV0sb3JbXz4+MV09MHxvclskQSsoVkE8PDEpPj4xXSxvclt0Pj4xXT0wfG9yWyRBKyhZPDwxKT4+MV0sb3JbRD4+MV09MHxvclskQSsoUTw8MSk+PjFdLG9yW2M+PjFdPTB8b3JbJEErKEo8PDEpPj4xXSxvcltUPj4xXT0wfG9yWyRBKyhNPDwxKT4+MV0sb3JbdT4+MV09MHxvclskQSsoVTw8MSk+PjFdLG9yW1M+PjFdPTB8b3JbJEErMj4+MV0sb3JbYT4+MV09MHxvclskQSstND4+MV0sb3Jbej4+MV09MHxvclskQSsoTzw8MSk+PjFdLG9yW28+PjFdPTB8b3JbJEErKGo8PDEpPj4xXSxvclt4Pj4xXT0wfG9yWyRBKyhIPDwxKT4+MV0sb3JbbD4+MV09MHxvclskQSsoUDw8MSk+PjFdLG9yW0s+PjFdPTB8b3JbJEErKEw8PDEpPj4xXSxvcltiPj4xXT0wfG9yWyRBKyhxPDwxKT4+MV0pOihQQT1OK2l8MCx4QT1sclsoeEE9KExBPXhBPSRBKSs0fDApPj4xXXxsclt4QSsyPj4xXTw8MTYsYXJbKEhBPURBKT4+Ml09bHJbTEE+PjFdfGxyW0xBKzI+PjFdPDwxNixhcltIQSs0Pj4yXT14QSxIQT1sclsoSEE9KHhBPUhBPW4rUEF8MCkrNHwwKT4+MV18bHJbSEErMj4+MV08PDE2LGFyWyhMQT1RQSk+PjJdPWxyW3hBPj4xXXxsclt4QSsyPj4xXTw8MTYsYXJbTEErND4+Ml09SEEsTEE9bHJbKExBPShIQT1MQT1uKyhpK1IpfDApKzR8MCk+PjFdfGxyW0xBKzI+PjFdPDwxNixhclsoeEE9Q0EpPj4yXT1scltIQT4+MV18bHJbSEErMj4+MV08PDE2LGFyW3hBKzQ+PjJdPUxBLFBBPWxyWyhQQT0oeEE9UEE9bisoUEErTil8MCkrNHwwKT4+MV18bHJbUEErMj4+MV08PDE2LGFyWyhMQT1HQSk+PjJdPWxyW3hBPj4xXXxsclt4QSsyPj4xXTw8MTYsYXJbTEErND4+Ml09UEEpLG49b2U+PihTQT0wfGFyW2c+PjJdKSwoMHwoekE9ZmU+PlNBKSk8PS0xKXtuPTE0O2JyZWFrIEF9aWYoKDB8KEhBPTB8YXJbWj4+Ml0pKTw9KDB8ekEpKXtuPTE0O2JyZWFrIEF9aWYoKDB8bik8PS0xKXtuPTE3O2JyZWFrIEF9aWYoKDB8KGpBPTB8YXJbcD4+Ml0pKTw9KDB8bikpe249MTc7YnJlYWsgQX1pZihQQT0wfGFyW3k+PjJdLHhBPShPQT0wfGJyKEhBLG4pKSt6QXwwLGk9cmU+PlNBLCEoLTE8KDB8KG49ZWU+PlNBKSkmKDB8bik8KDB8SEEpKSl7bj0xOTticmVhayBBfWlmKCEoLTE8KDB8aSkmKDB8aSk8KDB8akEpKSl7bj0yMTticmVhayBBfW49UEErKDMqKCgwfGJyKEhBLGkpKStufDApfDApKzJ8MCxuPSgxKygwfHRyW1BBKygzKnhBfDApKzI+PjBdKSsoMHx0cltuPj4wXSk+PjEpK1RBfDA7ZG97aWYoMT09KDB8YXJbQj4+Ml0pKXtpZigzMDw9KDB8bikpe2lmKDQyPCgwfG4pKXtuPW4rLTZ8MDticmVha31uPTB8YXJbODAyMCsobistMzA8PDIpPj4yXTticmVha319ZWxzZSBuPSgwfG4pPDUxP246NTF9d2hpbGUoMCk7aWYoaT1mZT4+KFRBPTB8YXJbRT4+Ml0pLFRBPW9lPj5UQSwoMHxpKTw9LTEpe249MzA7YnJlYWsgQX1pZigoMHwoVUE9MHxhcltYPj4yXSkpPD0oMHxpKSl7bj0zMDticmVhayBBfWlmKCgwfFRBKTw9LTEpe249MzM7YnJlYWsgQX1pZigoMHxUQSk+PSgwfGFyW1c+PjJdKSl7bj0zMzticmVhayBBfUxBPSgwfGFyW0k+PjJdKSsoMjQqKCgwfGJyKFVBLFRBKSkraXwwKXwwKSsyfDAsTEE9cUErbisoMHxhcls3NjArKDB8YXJbKDB8YXJbQz4+Ml0pKyhscltMQT4+MV08PDIpPj4yXSk+PjJdKXwwLExBPWNyWzQ4MTAwKygoMHxMQSk8MD8wOigwfExBKTw1Mz9MQTo1Myk+PjBdPDwoMHxhcltzPj4yXSktOCxVQT0wPT0oMHx0cltHPj4wXSk7ZTpkb3tpZihlKXtpZihuPS0xPCgwfChpPW5lPj5TQSkpLFVBKXtpZighbil7bj00MTticmVhayBBfVRBPTF9ZWxzZXtpZighKG4mKDB8aSk8KDB8SEEpKSl7bj0zNzticmVhayBBfVRBPTA9PSgxMDI0JihjclsoVEE9UEErKDMqKE9BK2l8MCl8MCl8MCk+PjBdfGNyW1RBKzE+PjBdPDw4KSl9aWYoKDB8SEEpPD0oMHxpKSl7bj00MTticmVhayBBfWlmKGk9UEErKDMqKE9BK2l8MCl8MCl8MCxTQT0obj1VQT8xOjA9PSgxMDI0Jihjclsobj1QQSsoMyp4QXwwKXwwKT4+MF18Y3JbbisxPj4wXTw8OCkpKSYwPT0oMjA0OCYoY3JbKFNBPVBBKygzKnhBfDApfDApPj4wXXxjcltTQSsxPj4wXTw8OCkpLE9BPTAtTEF8MCxUQSYwPT0oMjA0OCYoY3JbaT4+MF18Y3JbaSsxPj4wXTw8OCkpKWZvcihuPTA7OylpZihpPURBKyhuPDwxKXwwLFBBPTB8bHJbUUErKG48PDEpPj4xXSxQQT0oVEE9KDB8KFRBPTQrKDB8bHJbOCtRQSsobjw8MSk+PjFdKSsoKDB8bHJbaT4+MV0pLVBBPDwyKS0oMHxscltEQSs4KyhuPDwxKT4+MV0pPj4zKSk8KDB8T0EpP09BOigwfExBKTwoMHxUQSk/TEE6VEEpK1BBfDAsVUE9MHxicihuLFZBKSxvclskQSsoVUErLTE8PDEpPj4xXT0oMHxQQSk8MD8wOjY1NTM1JigoMHxQQSk8KDB8Vik/UEE6RiksU0EmJihQQT0oMHxscltpPj4xXSktVEF8MCxvclskQSsoVUE8PDEpPj4xXT0oMHxQQSk8MD8wOjY1NTM1JigoMHxQQSk8KDB8Vik/UEE6RikpLDQ9PSgwfChuPW4rMXwwKSkpYnJlYWsgZTtpZihuPTB8bHJbREE+PjFdLGk9NCsoMHxsclskPj4xXSkrKG4tKDB8bHJbUUE+PjFdKTw8MiktKDB8bHJbQUE+PjFdKT4+MyxTQSYmKFBBPW4tKCgwfGkpPCgwfE9BKT9PQTooMHxMQSk8KDB8aSk/TEE6aSl8MCxvclskQT4+MV09KDB8UEEpPDA/MDo2NTUzNSYoKDB8UEEpPCgwfFYpP1BBOkYpKSxuPTB8bHJbZUE+PjFdLGk9NCsoMHxscltpQT4+MV0pKyhuLSgwfGxyW3JBPj4xXSk8PDIpLSgwfGxyW2ZBPj4xXSk+PjMsU0EmJihQQT1uLSgoMHxpKTwoMHxPQSk/T0E6KDB8TEEpPCgwfGkpP0xBOmkpfDAsb3JbJEErKFZBPDwxKT4+MV09KDB8UEEpPDA/MDo2NTUzNSYoKDB8UEEpPCgwfFYpP1BBOkYpKSxuPTB8bHJbbkE+PjFdLGk9NCsoMHxscltvQT4+MV0pKyhuLSgwfGxyW3RBPj4xXSk8PDIpLSgwfGxyW2FBPj4xXSk+PjMsU0EmJihQQT1uLSgoMHxpKTwoMHxPQSk/T0E6KDB8TEEpPCgwfGkpP0xBOmkpfDAsb3JbJEErKGNBPDwxKT4+MV09KDB8UEEpPDA/MDo2NTUzNSYoKDB8UEEpPCgwfFYpP1BBOkYpKSxuPTB8bHJbbEE+PjFdLGk9NCsoMHxscltiQT4+MV0pKyhuLSgwfGxyW3VBPj4xXSk8PDIpLSgwfGxyW3NBPj4xXSk+PjMsIVNBKWJyZWFrO0xBPW4tKCgwfGkpPCgwfE9BKT9PQTooMHxMQSk8KDB8aSk/TEE6aSl8MCxvclskQSsoZEE8PDEpPj4xXT0oMHxMQSk8MD8wOjY1NTM1JigoMHxMQSk8KDB8Vik/TEE6Ril9ZWxzZXtpZihuPS0xPCgwfChpPWNlPj5TQSkpLFVBKXtpZighbil7bj01NzticmVhayBBfVRBPTF9ZWxzZXtpZighKG4mKDB8aSk8KDB8akEpKSl7bj01MzticmVhayBBfVRBPVBBKygzKigoMHxicihIQSxpKSkrekF8MCl8MCl8MCxUQT0wPT0oMTAyNCYoY3JbVEE+PjBdfGNyW1RBKzE+PjBdPDw4KSl9aWYoKDB8akEpPD0oMHxpKSl7bj01NzticmVhayBBfWlmKGk9UEErKDMqKCgwfGJyKEhBLGkpKSt6QXwwKXwwKXwwLFVBPShuPVVBPzE6MD09KDEwMjQmKGNyWyhuPVBBKygzKnhBfDApfDApPj4wXXxjcltuKzE+PjBdPDw4KSkpJjA9PSgyMDQ4JihjclsoVUE9UEErKDMqeEF8MCl8MCk+PjBdfGNyW1VBKzE+PjBdPDw4KSksU0E9MC1MQXwwLCEoVEEmMD09KDIwNDgmKGNyW2k+PjBdfGNyW2krMT4+MF08PDgpKSkpe2lmKCFVQSlicmVhazt4QT0oUEE9MHxscltEQT4+MV0pLSgoMHwoeEE9NCsoMHxscltrQT4+MV0pKyhQQS0oMHxscltRQT4+MV0pPDwyKS0oMHxscltoQT4+MV0pPj4zKSk8KDB8U0EpP1NBOigwfExBKTwoMHx4QSk/TEE6eEEpfDAsb3JbJEE+PjFdPSgwfHhBKTwwPzA6NjU1MzUmKCgwfHhBKTwoMHxWKT94QTpGKSxQQT0oeEE9MHxsclt3QT4+MV0pLSgoMHwoUEE9NCsoMHxsclttQT4+MV0pKyh4QS0oMHxsclt2QT4+MV0pPDwyKS0oMHxscltnQT4+MV0pPj4zKSk8KDB8U0EpP1NBOigwfExBKTwoMHxQQSk/TEE6UEEpfDAsb3JbJEErMj4+MV09KDB8UEEpPDA/MDo2NTUzNSYoKDB8UEEpPCgwfFYpP1BBOkYpLHhBPShQQT0wfGxyW1pBPj4xXSktKCgwfCh4QT00KygwfGxyW3lBPj4xXSkrKFBBLSgwfGxyW3BBPj4xXSk8PDIpLSgwfGxyW0JBPj4xXSk+PjMpKTwoMHxTQSk/U0E6KDB8TEEpPCgwfHhBKT9MQTp4QSl8MCxvclskQSs0Pj4xXT0oMHx4QSk8MD8wOjY1NTM1JigoMHx4QSk8KDB8Vik/eEE6RiksTEE9KHhBPTB8bHJbRUE+PjFdKS0oKDB8KFBBPTQrKDB8bHJbV0E+PjFdKSsoeEEtKDB8bHJbWEE+PjFdKTw8MiktKDB8bHJbSUE+PjFdKT4+MykpPCgwfFNBKT9TQTooMHxMQSk8KDB8UEEpP0xBOlBBKXwwLG9yWyRBKzY+PjFdPSgwfExBKTwwPzA6NjU1MzUmKCgwfExBKTwoMHxWKT9MQTpGKTticmVha31mb3Iobj0wO2k9REErKG48PDEpfDAsUEE9MHxscltRQSsobjw8MSk+PjFdLFBBPShUQT0oMHwoVEE9NCsoMHxscls4K1FBKyhuPDwxKT4+MV0pKygoMHxscltpPj4xXSktUEE8PDIpLSgwfGxyW0RBKzgrKG48PDEpPj4xXSk+PjMpKTwoMHxTQSk/U0E6KDB8TEEpPCgwfFRBKT9MQTpUQSkrUEF8MCxvclskQSsobi1WQTw8MSk+PjFdPSgwfFBBKTwwPzA6NjU1MzUmKCgwfFBBKTwoMHxWKT9QQTpGKSxVQSYmKFBBPSgwfGxyW2k+PjFdKS1UQXwwLG9yWyRBKyhuPDwxKT4+MV09KDB8UEEpPDA/MDo2NTUzNSYoKDB8UEEpPCgwfFYpP1BBOkYpKSw0IT0oMHwobj1uKzF8MCkpOyk7fX13aGlsZSgwKX13aGlsZSgoMHxLQSk8Mil9QWU9QWUrUkF8MH13aGlsZSgoMHxBZSk8KDB8dWUpKX1pZigoMHxsZSk8PSgwfChyPXIrTkF8MCkpKXtuPTU7YnJlYWt9fXN3aXRjaCgwfG4pe2Nhc2UgNTpyZXR1cm4gdm9pZCh1cj1NQSk7Y2FzZSAxNDpzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpO2JyZWFrO2Nhc2UgMTc6c3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KTticmVhaztjYXNlIDE5OnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSk7YnJlYWs7Y2FzZSAyMTpzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpO2JyZWFrO2Nhc2UgMzA6c3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KTticmVhaztjYXNlIDMzOnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSk7YnJlYWs7Y2FzZSAzNzpjYXNlIDQxOnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSk7YnJlYWs7Y2FzZSA1MzpjYXNlIDU3OnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSl9fX1mdW5jdGlvbiBYdChBLGUscixpLGYsbil7ZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wO3ZhciB0LG8sYSxjLGwsdSxiLHMsZCxrLGgsdyx2LG0sZyxaLHAseSxCLEUsWCxXLEksQyxHLFYsRixSLE4sXyxZLFEsRCxKLE0sVCxVLFMsTyx6LGosSCx4LFAsTCxLLHEsJCxBQSxlQSxyQSxpQSxmQSxuQSx0QSxvQSxhQSxjQSxsQSx1QSxiQSxzQSxkQSxrQSxoQSx3QSx2QSxtQSxnQSxaQSxwQSx5QSxCQSxFQSxYQSxXQSxJQSxDQSxHQSxWQSxGQSxSQSxOQSxfQSxZQSxRQSxEQSxKQSxNQSxUQSxVQSxTQSxPQSx6QSxqQSxIQSx4QSxQQSxMQSxLQSxxQSwkQSxBZSxlZSxyZSxpZSxmZSxuZSx0ZSxvZSxhZSxjZSxsZSx1ZSxiZSxzZSxkZSxrZSxoZSx3ZSx2ZSxtZSxnZSxaZSxwZT0wLHllPTAsQmU9MCxFZT0wLFhlPTAsV2U9MCxJZT0wLENlPTAsR2U9MCxWZT0wLEZlPTAsUmU9MCxOZT0wLF9lPTAsWWU9MCxRZT0wLERlPTAsSmU9MCxNZT0wLFRlPTAsVWU9MCxTZT0wLE9lPTAsemU9MCxqZT0wLEhlPTA7aWYodXI9KFplPXVyKSsxNnwwLHZlPVplKzh8MCxtZT1aZSxnZT0wfGFyWyhBfD0wKSs1NzgwPj4yXSxzZT0wfGFyW0ErNTc4ND4+Ml0sZGU9MHxicihnZSxlPzI6MSksa2U9MHxicihzZSxlPzE6MiksYmU9MHxhclsoaGU9QSs0NHwwKT4+Ml0sSGU9KDB8bik8KDB8KEhlPTB8YXJbKHdlPUErMTA0NzJ8MCk+PjJdKSk/bjpIZSxPPUErNTc2OHwwLCgwfChqZT0oMHxpKTwoMHwoamU9MHxhcltBKzEwNDc2Pj4yXSkpP2k6amUpKTw9KDB8cikpdXI9WmU7ZWxzZXt6PSgwfGYpPCgwfEhlKSxqPTMtZ2V8MCxIPTMtc2V8MCx4PUErMTA0NjB8MCxQPUErNTk1NnwwLEw9QSs1OTUyfDAsSz1BKzEwMzY4fDAscT1BKzEwMzcyfDAsJD1BKzEwMzc2fDAsQUE9QSsxMDM2MHwwLGVBPUErNTc3NnwwLHJBPUErMTAzNDh8MCxpQT1BKzEwMzUyfDAsZkE9QSsxMDM1NnwwLG5BPUErMTAzNDB8MCx0QT1BKzQ4fDAsb0E9QSs1NDgwfDAsY0E9MjU1KyhhQT0xPDxhcltPPj4yXSl8MCxsQT0wLWJlfDAsa0E9KHNBPWJlPDwxKS0xfDAsdkE9KGhBPTMqYmV8MCktMXwwLGdBPTErYmV8MCxwQT1iZS0yfDAseUE9MXxzQSxFQT1zQS0yfDAsWEE9MStoQXwwLElBPWhBLTJ8MCxfQT1iQT1iZS0xfDAsVEE9KE1BPWJlPDwxKS0xfDAsSEE9KGpBPTMqYmV8MCktMXwwLGZlPWJlPDwxLGNlPTMqYmV8MCxtPTEtYmV8MCxCPTItYmV8MCxDPTMtYmV8MCxGPWs9TEE9VkE9dUE9bWUrMXwwLFI9aD1LQT1GQT10PTErdmV8MCxOPXc9cUE9UkE9bz01K3ZlfDAsXz12PSRBPU5BPVpBPW1lKzV8MCxZPWc9QWU9WUE9ZEE9bWUrMnwwLFE9Wj1lZT1RQT1jPTIrdmV8MCxEPXA9cmU9REE9bD02K3ZlfDAsSj15PWllPUpBPUJBPW1lKzZ8MCxNPUU9bmU9VUE9d0E9bWUrM3wwLFQ9WD10ZT1TQT11PTMrdmV8MCxVPVc9b2U9T0E9Yj03K3ZlfDAsUz1JPWFlPXpBPVdBPW1lKzd8MCx1ZT1HPXM9eEE9Q0E9YT00K3ZlfDAsbGU9Vj1kPVBBPUdBPW1BPW1lKzR8MDtBOmZvcig7Oyl7aWYoeil7VGU9KDB8KE1lPTB8YnIoSmU9cjw8SCxzZSkpKS80fDAsVWU9TWUrLTF8MCxEZT1lP01lOlVlLFllPWY7ZG97aWYoT2U9MHxicihTZT1ZZTw8aixnZSksbj0oMHxicigwfGFyW3dlPj4yXSxUZSkpKygoMHxPZSkvNHwwKXwwLDE8KDI1NSYobj0zJnRyWygwfGFyW3g+PjJdKStuPj4wXSkpKXt6ZT1PZSstMXwwLFFlPWU/emU6T2UsUmU9KG48PDEmMjU1KS0yfDAsTmU9U2UtYmV8MCxGZT0wO2Rve2lmKHllPTB8YXJbKDA9PSgwfEZlKT9MOlApPj4yXSxfZT0obj0wfGFyW0ErNCsoKEZlPUZlKzF8MCk8PDIpPj4yXSkrKHBlPShpPTB8YnIoMHxhcltoZT4+Ml0sSmUpKStTZXwwKXwwLGU/KHRyW21lPj4wXT0wfHRyW19lPj4wXSx0clt2ZT4+MF09MHx0cltfZSstMT4+MF0sdHJbdUE+PjBdPTB8dHJbX2UrYmU+PjBdLHRyW3Q+PjBdPTB8dHJbX2UrYkE+PjBdLHRyW2RBPj4wXT0wfHRyW19lK3NBPj4wXSx0cltjPj4wXT0wfHRyW19lK2tBPj4wXSx0clt3QT4+MF09MHx0cltfZStoQT4+MF0sdHJbdT4+MF09MHx0cltfZSt2QT4+MF0sdHJbbUE+PjBdPTB8dHJbX2UrMT4+MF0sdHJbYT4+MF09MHx0cltfZSstMj4+MF0sdHJbWkE+PjBdPTB8dHJbX2UrZ0E+PjBdLHRyW28+PjBdPTB8dHJbX2UrcEE+PjBdLHRyW0JBPj4wXT0wfHRyW19lK3lBPj4wXSx0cltsPj4wXT0wfHRyW19lK0VBPj4wXSx0cltXQT4+MF09MHx0cltfZStYQT4+MF0sdHJbYj4+MF09MHx0cltfZStJQT4+MF0pOihHZT1uKyhWZT1OZStpfDApfDAsYXJbbWU+PjJdPWNyW19lPj4wXXxjcltfZSsxPj4wXTw8OHxjcltfZSsyPj4wXTw8MTZ8Y3JbX2UrMz4+MF08PDI0LGFyW3ZlPj4yXT1jcltHZT4+MF18Y3JbR2UrMT4+MF08PDh8Y3JbR2UrMj4+MF08PDE2fGNyW0dlKzM+PjBdPDwyNCxWZT1uKyhWZS1iZSl8MCxHZT1uKyhwZStiZSl8MCxhcltsZT4+Ml09Y3JbR2U+PjBdfGNyW0dlKzE+PjBdPDw4fGNyW0dlKzI+PjBdPDwxNnxjcltHZSszPj4wXTw8MjQsYXJbdWU+PjJdPWNyW1ZlPj4wXXxjcltWZSsxPj4wXTw8OHxjcltWZSsyPj4wXTw8MTZ8Y3JbVmUrMz4+MF08PDI0KSxuPU1lPj4oQmU9MHxhcltLPj4yXSksKDB8KFhlPU9lPj5CZSkpPD0tMSl7bj0xNDticmVhayBBfWlmKCgwfChJZT0wfGFyW3E+PjJdKSk8PSgwfFhlKSl7bj0xNDticmVhayBBfWlmKCgwfG4pPD0tMSl7bj0xNzticmVhayBBfWlmKCgwfChXZT0wfGFyWyQ+PjJdKSk8PSgwfG4pKXtuPTE3O2JyZWFrIEF9aWYoR2U9MHxhcltBQT4+Ml0sQ2U9KEVlPTB8YnIoSWUsbikpK1hlfDAsaT1EZT4+QmUsISgtMTwoMHwobj1RZT4+QmUpKSYoMHxuKTwoMHxJZSkpKXtuPTE5O2JyZWFrIEF9aWYoISgtMTwoMHxpKSYoMHxpKTwoMHxXZSkpKXtuPTIxO2JyZWFrIEF9bj1HZSsoMyooKDB8YnIoSWUsaSkpK258MCl8MCkrMnwwLG49KDErKDB8dHJbR2UrKDMqQ2V8MCkrMj4+MF0pKygwfHRyW24+PjBdKT4+MSkreWV8MDtkb3tpZigxPT0oMHxhcltlQT4+Ml0pKXtpZigzMDw9KDB8bikpe2lmKDQyPCgwfG4pKXtuPW4rLTZ8MDticmVha31uPTB8YXJbODAyMCsobistMzA8PDIpPj4yXTticmVha319ZWxzZSBuPSgwfG4pPDUxP246NTF9d2hpbGUoMCk7aWYoaT1PZT4+KHBlPTB8YXJbckE+PjJdKSxwZT1NZT4+cGUsKDB8aSk8PS0xKXtuPTMwO2JyZWFrIEF9aWYoKDB8KHllPTB8YXJbaUE+PjJdKSk8PSgwfGkpKXtuPTMwO2JyZWFrIEF9aWYoKDB8cGUpPD0tMSl7bj0zMzticmVhayBBfWlmKCgwfHBlKT49KDB8YXJbZkE+PjJdKSl7bj0zMzticmVhayBBfVZlPSgwfGFyW25BPj4yXSkrKDI0KigoMHxicih5ZSxwZSkpK2l8MCl8MCkrMnwwLFZlPVJlK24rKDB8YXJbNzYwKygwfGFyWygwfGFyW3RBPj4yXSkrKGxyW1ZlPj4xXTw8Mik+PjJdKT4+Ml0pfDAsVmU9Y3JbNDgxMDArKCgwfFZlKTwwPzA6KDB8VmUpPDUzP1ZlOjUzKT4+MF08PCgwfGFyW08+PjJdKS04LHBlPTA9PSgwfHRyW29BPj4wXSk7ZG97aWYoZSl7aWYobj0tMTwoMHwoaT16ZT4+QmUpKSxwZSl7aWYoIW4pe249NDE7YnJlYWsgQX1CZT0xfWVsc2V7aWYoIShuJigwfGkpPCgwfEllKSkpe249Mzc7YnJlYWsgQX1CZT0wPT0oMTAyNCYoY3JbKEJlPUdlKygzKihFZStpfDApfDApfDApPj4wXXxjcltCZSsxPj4wXTw8OCkpfWlmKCgwfEllKTw9KDB8aSkpe249NDE7YnJlYWsgQX1pZih5ZT1HZSsoMyooRWUraXwwKXwwKXwwLHBlPShuPXBlPzE6MD09KDEwMjQmKGNyWyhuPUdlKygzKkNlfDApfDApPj4wXXxjcltuKzE+PjBdPDw4KSkpJjA9PSgyMDQ4JihjclsocGU9R2UrKDMqQ2V8MCl8MCk+PjBdfGNyW3BlKzE+PjBdPDw4KSksaT0wLVZlfDAsIShCZSYwPT0oMjA0OCYoY3JbeWU+PjBdfGNyW3llKzE+PjBdPDw4KSkpKXtpZighcGUpYnJlYWs7Q2U9KEdlPTB8Y3JbbWU+PjBdKS0oKDB8KENlPTQrKDB8Y3JbeEE+PjBdKSsoR2UtKDB8Y3JbdmU+PjBdKTw8MiktKDB8Y3JbUEE+PjBdKT4+MykpPCgwfGkpP2k6KDB8VmUpPCgwfENlKT9WZTpDZSl8MCx0cltfZT4+MF09KDB8Q2UpPDA/MDoyNTUmKCgwfENlKTwoMHxhQSk/Q2U6Y0EpLEdlPShDZT0wfGNyW0xBPj4wXSktKCgwfChHZT00KygwfGNyW3FBPj4wXSkrKENlLSgwfGNyW0tBPj4wXSk8PDIpLSgwfGNyWyRBPj4wXSk+PjMpKTwoMHxpKT9pOigwfFZlKTwoMHxHZSk/VmU6R2UpfDAsdHJbX2UrYmU+PjBdPSgwfEdlKTwwPzA6MjU1JigoMHxHZSk8KDB8YUEpP0dlOmNBKSxDZT0oR2U9MHxjcltBZT4+MF0pLSgoMHwoQ2U9NCsoMHxjcltyZT4+MF0pKyhHZS0oMHxjcltlZT4+MF0pPDwyKS0oMHxjcltpZT4+MF0pPj4zKSk8KDB8aSk/aTooMHxWZSk8KDB8Q2UpP1ZlOkNlKXwwLHRyW19lK2ZlPj4wXT0oMHxDZSk8MD8wOjI1NSYoKDB8Q2UpPCgwfGFBKT9DZTpjQSksVmU9KENlPTB8Y3JbbmU+PjBdKS0oKDB8KEdlPTQrKDB8Y3Jbb2U+PjBdKSsoQ2UtKDB8Y3JbdGU+PjBdKTw8MiktKDB8Y3JbYWU+PjBdKT4+MykpPCgwfGkpP2k6KDB8VmUpPCgwfEdlKT9WZTpHZSl8MCx0cltfZStjZT4+MF09KDB8VmUpPDA/MDoyNTUmKCgwfFZlKTwoMHxhQSk/VmU6Y0EpO2JyZWFrfWlmKEdlPTB8Y3JbdmU+PjBdLEdlPShuPSgwfChuPTQrKDB8Y3JbQ0E+PjBdKSsoKDB8Y3JbbWU+PjBdKS1HZTw8MiktKDB8Y3JbR0E+PjBdKT4+MykpPCgwfGkpP2k6KDB8VmUpPCgwfG4pP1ZlOm4pK0dlfDAsdHJbX2UrLTE+PjBdPSgwfEdlKTwwPzA6MjU1JigoMHxHZSk8KDB8YUEpP0dlOmNBKSxwZSYmKEdlPSgwfGNyW21lPj4wXSktbnwwLHRyW19lPj4wXT0oMHxHZSk8MD8wOjI1NSYoKDB8R2UpPCgwfGFBKT9HZTpjQSkpLEdlPTB8Y3JbRkE+PjBdLEdlPShuPSgwfChuPTQrKDB8Y3JbUkE+PjBdKSsoKDB8Y3JbVkE+PjBdKS1HZTw8MiktKDB8Y3JbTkE+PjBdKT4+MykpPCgwfGkpP2k6KDB8VmUpPCgwfG4pP1ZlOm4pK0dlfDAsdHJbX2UrX0E+PjBdPSgwfEdlKTwwPzA6MjU1JigoMHxHZSk8KDB8YUEpP0dlOmNBKSxwZSYmKEdlPSgwfGNyW1ZBPj4wXSktbnwwLHRyW19lK2JlPj4wXT0oMHxHZSk8MD8wOjI1NSYoKDB8R2UpPCgwfGFBKT9HZTpjQSkpLEdlPTB8Y3JbUUE+PjBdLEdlPShuPSgwfChuPTQrKDB8Y3JbREE+PjBdKSsoKDB8Y3JbWUE+PjBdKS1HZTw8MiktKDB8Y3JbSkE+PjBdKT4+MykpPCgwfGkpP2k6KDB8VmUpPCgwfG4pP1ZlOm4pK0dlfDAsdHJbX2UrVEE+PjBdPSgwfEdlKTwwPzA6MjU1JigoMHxHZSk8KDB8YUEpP0dlOmNBKSxwZSYmKEdlPSgwfGNyW1lBPj4wXSktbnwwLHRyW19lK01BPj4wXT0oMHxHZSk8MD8wOjI1NSYoKDB8R2UpPCgwfGFBKT9HZTpjQSkpLEdlPTB8Y3JbU0E+PjBdLFZlPShuPSgwfChuPTQrKDB8Y3JbT0E+PjBdKSsoKDB8Y3JbVUE+PjBdKS1HZTw8MiktKDB8Y3JbekE+PjBdKT4+MykpPCgwfGkpP2k6KDB8VmUpPCgwfG4pP1ZlOm4pK0dlfDAsdHJbX2UrSEE+PjBdPSgwfFZlKTwwPzA6MjU1JigoMHxWZSk8KDB8YUEpP1ZlOmNBKSwhcGUpYnJlYWs7VmU9KDB8Y3JbVUE+PjBdKS1ufDAsdHJbX2UrakE+PjBdPSgwfFZlKTwwPzA6MjU1JigoMHxWZSk8KDB8YUEpP1ZlOmNBKX1lbHNle2lmKG49LTE8KDB8KGk9VWU+PkJlKSkscGUpe2lmKCFuKXtuPTU2O2JyZWFrIEF9QmU9MX1lbHNle2lmKCEobiYoMHxpKTwoMHxXZSkpKXtuPTUyO2JyZWFrIEF9QmU9R2UrKDMqKCgwfGJyKEllLGkpKStYZXwwKXwwKXwwLEJlPTA9PSgxMDI0JihjcltCZT4+MF18Y3JbQmUrMT4+MF08PDgpKX1pZigoMHxXZSk8PSgwfGkpKXtuPTU2O2JyZWFrIEF9aWYoeWU9R2UrKDMqKCgwfGJyKEllLGkpKStYZXwwKXwwKXwwLHBlPShuPXBlPzE6MD09KDEwMjQmKGNyWyhuPUdlKygzKkNlfDApfDApPj4wXXxjcltuKzE+PjBdPDw4KSkpJjA9PSgyMDQ4JihjclsocGU9R2UrKDMqQ2V8MCl8MCk+PjBdfGNyW3BlKzE+PjBdPDw4KSksaT0wLVZlfDAsIShCZSYwPT0oMjA0OCYoY3JbeWU+PjBdfGNyW3llKzE+PjBdPDw4KSkpKXtpZighcGUpYnJlYWs7Q2U9KEdlPTB8Y3JbbWU+PjBdKS0oKDB8KENlPTQrKDB8Y3JbRz4+MF0pKyhHZS0oMHxjclt2ZT4+MF0pPDwyKS0oMHxjcltWPj4wXSk+PjMpKTwoMHxpKT9pOigwfFZlKTwoMHxDZSk/VmU6Q2UpfDAsdHJbX2U+PjBdPSgwfENlKTwwPzA6MjU1JigoMHxDZSk8KDB8YUEpP0NlOmNBKSxHZT0oQ2U9MHxjcltGPj4wXSktKCgwfChHZT00KygwfGNyW04+PjBdKSsoQ2UtKDB8Y3JbUj4+MF0pPDwyKS0oMHxjcltfPj4wXSk+PjMpKTwoMHxpKT9pOigwfFZlKTwoMHxHZSk/VmU6R2UpfDAsdHJbX2UrMT4+MF09KDB8R2UpPDA/MDoyNTUmKCgwfEdlKTwoMHxhQSk/R2U6Y0EpLENlPShHZT0wfGNyW1k+PjBdKS0oKDB8KENlPTQrKDB8Y3JbRD4+MF0pKyhHZS0oMHxjcltRPj4wXSk8PDIpLSgwfGNyW0o+PjBdKT4+MykpPCgwfGkpP2k6KDB8VmUpPCgwfENlKT9WZTpDZSl8MCx0cltfZSsyPj4wXT0oMHxDZSk8MD8wOjI1NSYoKDB8Q2UpPCgwfGFBKT9DZTpjQSksVmU9KENlPTB8Y3JbTT4+MF0pLSgoMHwoR2U9NCsoMHxjcltVPj4wXSkrKENlLSgwfGNyW1Q+PjBdKTw8MiktKDB8Y3JbUz4+MF0pPj4zKSk8KDB8aSk/aTooMHxWZSk8KDB8R2UpP1ZlOkdlKXwwLHRyW19lKzM+PjBdPSgwfFZlKTwwPzA6MjU1JigoMHxWZSk8KDB8YUEpP1ZlOmNBKTticmVha31pZihHZT0wfGNyW3ZlPj4wXSxHZT0obj0oMHwobj00KygwfGNyW3M+PjBdKSsoKDB8Y3JbbWU+PjBdKS1HZTw8MiktKDB8Y3JbZD4+MF0pPj4zKSk8KDB8aSk/aTooMHxWZSk8KDB8bik/VmU6bikrR2V8MCx0cltfZStsQT4+MF09KDB8R2UpPDA/MDoyNTUmKCgwfEdlKTwoMHxhQSk/R2U6Y0EpLHBlJiYoR2U9KDB8Y3JbbWU+PjBdKS1ufDAsdHJbX2U+PjBdPSgwfEdlKTwwPzA6MjU1JigoMHxHZSk8KDB8YUEpP0dlOmNBKSksR2U9MHxjcltoPj4wXSxHZT0obj0oMHwobj00KygwfGNyW3c+PjBdKSsoKDB8Y3Jbaz4+MF0pLUdlPDwyKS0oMHxjclt2Pj4wXSk+PjMpKTwoMHxpKT9pOigwfFZlKTwoMHxuKT9WZTpuKStHZXwwLHRyW19lK20+PjBdPSgwfEdlKTwwPzA6MjU1JigoMHxHZSk8KDB8YUEpP0dlOmNBKSxwZSYmKEdlPSgwfGNyW2s+PjBdKS1ufDAsdHJbX2UrMT4+MF09KDB8R2UpPDA/MDoyNTUmKCgwfEdlKTwoMHxhQSk/R2U6Y0EpKSxHZT0wfGNyW1o+PjBdLEdlPShuPSgwfChuPTQrKDB8Y3JbcD4+MF0pKygoMHxjcltnPj4wXSktR2U8PDIpLSgwfGNyW3k+PjBdKT4+MykpPCgwfGkpP2k6KDB8VmUpPCgwfG4pP1ZlOm4pK0dlfDAsdHJbX2UrQj4+MF09KDB8R2UpPDA/MDoyNTUmKCgwfEdlKTwoMHxhQSk/R2U6Y0EpLHBlJiYoR2U9KDB8Y3JbZz4+MF0pLW58MCx0cltfZSsyPj4wXT0oMHxHZSk8MD8wOjI1NSYoKDB8R2UpPCgwfGFBKT9HZTpjQSkpLEdlPTB8Y3JbWD4+MF0sVmU9KG49KDB8KG49NCsoMHxjcltXPj4wXSkrKCgwfGNyW0U+PjBdKS1HZTw8MiktKDB8Y3JbST4+MF0pPj4zKSk8KDB8aSk/aTooMHxWZSk8KDB8bik/VmU6bikrR2V8MCx0cltfZStDPj4wXT0oMHxWZSk8MD8wOjI1NSYoKDB8VmUpPCgwfGFBKT9WZTpjQSksIXBlKWJyZWFrO1ZlPSgwfGNyW0U+PjBdKS1ufDAsdHJbX2UrMz4+MF09KDB8VmUpPDA/MDoyNTUmKCgwfFZlKTwoMHxhQSk/VmU6Y0EpfX13aGlsZSgwKX13aGlsZSgoMHxGZSk8Mil9WWU9WWUrZGV8MH13aGlsZSgoMHxZZSk8KDB8SGUpKX1pZigoMHxqZSk8PSgwfChyPXIra2V8MCkpKXtuPTU7YnJlYWt9fXN3aXRjaCgwfG4pe2Nhc2UgNTpyZXR1cm4gdm9pZCh1cj1aZSk7Y2FzZSAxNDpzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpO2JyZWFrO2Nhc2UgMTc6c3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KTticmVhaztjYXNlIDE5OnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSk7YnJlYWs7Y2FzZSAyMTpzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpO2JyZWFrO2Nhc2UgMzA6c3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KTticmVhaztjYXNlIDMzOnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSk7YnJlYWs7Y2FzZSAzNzpjYXNlIDQxOnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSk7YnJlYWs7Y2FzZSA1MjpjYXNlIDU2OnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSl9fX1mdW5jdGlvbiBXdChBLGUscixpLGYsbix0KXtyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTA7dmFyIG8sYSxjLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wO2ZvcigoMHwobD0oZXw9MCk+Pih1PTB8YXJbKGQ9KEF8PTApKzEwNDQ4fDApPj4yXSkpKTw9LTEmJnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSksbz1BKzEwNDUyfDAsYT1BKzEwNDU2fDAsYz1BKzEwNDQwfDAsdj1lLGI9aSxzPW4saD10LGk9KHc9cik+PnU7Oyl7aWYoKDB8KGU9MHxhcltvPj4yXSkpPD0oMHxsKSl7ZT00O2JyZWFrfWlmKCgwfGkpPD0tMSl7ZT03O2JyZWFrfWlmKCgwfGkpPj0oMHxhclthPj4yXSkpe2U9NzticmVha31pZih1PSgwfGFyW2M+PjJdKSsoKDB8YnIoZSxpKSkrbCl8MCxrPTE8PGIsISgoMHxjclt1Pj4wXSkmMTw8Zikpe2U9OTticmVha31pZihpPShuPWs+PjEpK3Z8MCxuPW4rd3wwLFd0KEEsdix3LGU9YistMXwwLGY9ZisxfDAscyxoKSxXdChBLGksdyxlLGYsMTYsaCksV3QoQSx2LG4sZSxmLHMsMzIpLCgwfChsPWk+Pih0PTB8YXJbZD4+Ml0pKSk8PS0xKXtlPTQ7YnJlYWt9dj1pLGI9ZSxzPTE2LGg9MzIsaT0odz1uKT4+dH1pZig0PT0oMHxlKSlzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpO2Vsc2UgaWYoNz09KDB8ZSkpc3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KTtlbHNlIGlmKDk9PSgwfGUpKXtpZihiPTMxPT0oMHxiKSlyZXR1cm47Zm9yKGk9MjU1JnMsZj0oMHx2KS80fDAsbj1BKzEwNDcyfDAsdD1BKzEwNDc2fDAsbD1BKzEwNDYwfDAsZT0wO3I9KGUrd3wwKS80fDAsKDB8Zik8KDB8KHU9MHxhcltuPj4yXSkpJiYoMHxyKTwoMHxhclt0Pj4yXSkmJihkPSgwfGJyKHUscikpK2Z8MCxkPSgwfGFyW2w+PjJdKStkfDAsdHJbZD4+MF09dHJbZD4+MF18aSksKDB8KGU9ZSs0fDApKTwoMHxrKTspO2lmKGIpcmV0dXJuO2Zvcih1PTI1NSZoLHQ9KDB8dykvNHwwLGw9QSsxMDQ3MnwwLHI9QSsxMDQ3NnwwLGk9QSsxMDQ2MHwwLGU9MDsoMHwoZj0oZSt2fDApLzR8MCkpPCgwfChuPTB8YXJbbD4+Ml0pKSYmKDB8dCk8KDB8YXJbcj4+Ml0pJiYoQT0oMHxicihuLHQpKStmfDAsQT0oMHxhcltpPj4yXSkrQXwwLHRyW0E+PjBdPXRyW0E+PjBdfHUpLCgwfChlPWUrNHwwKSk8KDB8ayk7KTtyZXR1cm59fWZ1bmN0aW9uIEl0KEEsZSxyLGksZixuKXtyfD0wLGl8PTAsZnw9MCxufD0wO3ZhciB0LG89MCxhPTAsYz0wLGw9MCx1PTA7c3dpdGNoKG49KGV8PTApPj4obz0wfGFyWyhBfD0wKSsxMDM2OD4+Ml0pLG89cj4+bywoMHxuKTw9LTEmJnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSksKDB8KGY9MHxhcltBKzEwMzcyPj4yXSkpPD0oMHxuKSYmc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KSwoMHxvKTw9LTEmJnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSksKDB8byk+PSgwfGFyW0ErMTAzNzY+PjJdKSYmc3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KSx1PSgwfGFyW0ErMTAzNjA+PjJdKSsoMyooKDB8YnIoZixvKSkrbnwwKXwwKXwwLHQ9MTw8aSxuPTE8PGkrLTEsZj0xPDxpKy0yLCg2NTUzNSYoY3JbdT4+MF18Y3JbdSsxPj4wXTw8OCkpPj4+MyY3KXtjYXNlIDM6aWYoMzE9PSgwfGkpKXJldHVybjtmb3IoYz0obitlfDApLzR8MCxsPUErMTA0NzJ8MCx1PUErMTA0NzZ8MCxhPUErMTA0NjB8MCxpPShuK3J8MCkvNHwwLG89MDtmPShvK3J8MCkvNHwwLCgwfGMpPCgwfChuPTB8YXJbbD4+Ml0pKSYmKDB8Zik8KDB8YXJbdT4+Ml0pJiYobj0oMHxicihuLGYpKStjfDAsbj0oMHxhclthPj4yXSkrbnwwLHRyW24+PjBdPTY0fHRyW24+PjBdLG49MHxhcltsPj4yXSksKDB8KGY9KG8rZXwwKS80fDApKTwoMHxuKSYmKDB8aSk8KDB8YXJbdT4+Ml0pJiYoQT0oMHxicihuLGkpKStmfDAsQT0oMHxhclthPj4yXSkrQXwwLHRyW0E+PjBdPS0xMjh8dHJbQT4+MF0pLCgwfChvPW8rMXwwKSk8KDB8dCk7KTtyZXR1cm47Y2FzZSAyOmlmKDMxPT0oMHxpKSlyZXR1cm47Zm9yKGE9KG4rZXwwKS80fDAsYz1BKzEwNDcyfDAsbD1BKzEwNDc2fDAsaT1BKzEwNDYwfDAsZj0wO249KGYrcnwwKS80fDAsKDB8YSk8KDB8KG89MHxhcltjPj4yXSkpJiYoMHxuKTwoMHxhcltsPj4yXSkmJihlPSgwfGJyKG8sbikpK2F8MCxlPSgwfGFyW2k+PjJdKStlfDAsdHJbZT4+MF09NjR8dHJbZT4+MF0pLCgwfChmPWYrMXwwKSk8KDB8dCk7KTtyZXR1cm47Y2FzZSAxOmlmKDMxPT0oMHxpKSlyZXR1cm47Zm9yKGE9KG4rcnwwKS80fDAsYz1BKzEwNDcyfDAsbD1BKzEwNDc2fDAsaT1BKzEwNDYwfDAsZj0wOygwfChuPShmK2V8MCkvNHwwKSk8KDB8KG89MHxhcltjPj4yXSkpJiYoMHxhKTwoMHxhcltsPj4yXSkmJihyPSgwfGJyKG8sYSkpK258MCxyPSgwfGFyW2k+PjJdKStyfDAsdHJbcj4+MF09LTEyOHx0cltyPj4wXSksKDB8KGY9ZisxfDApKTwoMHx0KTspO3JldHVybjtjYXNlIDY6aWYoMzE9PSgwfGkpKXJldHVybjtmb3IoYT0oZitlfDApLzR8MCxjPUErMTA0NzJ8MCxsPUErMTA0NzZ8MCxpPUErMTA0NjB8MCxmPTA7bj0oZityfDApLzR8MCwoMHxhKTwoMHwobz0wfGFyW2M+PjJdKSkmJigwfG4pPCgwfGFyW2w+PjJdKSYmKGU9KDB8YnIobyxuKSkrYXwwLGU9KDB8YXJbaT4+Ml0pK2V8MCx0cltlPj4wXT02NHx0cltlPj4wXSksKDB8KGY9ZisxfDApKTwoMHx0KTspO3JldHVybjtjYXNlIDc6aWYoMzE9PSgwfGkpKXJldHVybjtmb3IoYT0obitlK2Z8MCkvNHwwLGM9QSsxMDQ3MnwwLGw9QSsxMDQ3NnwwLGk9QSsxMDQ2MHwwLGY9MDtuPShmK3J8MCkvNHwwLCgwfGEpPCgwfChvPTB8YXJbYz4+Ml0pKSYmKDB8bik8KDB8YXJbbD4+Ml0pJiYoZT0oMHxicihvLG4pKSthfDAsZT0oMHxhcltpPj4yXSkrZXwwLHRyW2U+PjBdPTY0fHRyW2U+PjBdKSwoMHwoZj1mKzF8MCkpPCgwfHQpOyk7cmV0dXJuO2Nhc2UgNDppZigzMT09KDB8aSkpcmV0dXJuO2ZvcihhPShmK3J8MCkvNHwwLGM9QSsxMDQ3MnwwLGw9QSsxMDQ3NnwwLGk9QSsxMDQ2MHwwLGY9MDsoMHwobj0oZitlfDApLzR8MCkpPCgwfChvPTB8YXJbYz4+Ml0pKSYmKDB8YSk8KDB8YXJbbD4+Ml0pJiYocj0oMHxicihvLGEpKStufDAscj0oMHxhcltpPj4yXSkrcnwwLHRyW3I+PjBdPS0xMjh8dHJbcj4+MF0pLCgwfChmPWYrMXwwKSk8KDB8dCk7KTtyZXR1cm47Y2FzZSA1OmlmKDMxPT0oMHxpKSlyZXR1cm47Zm9yKGE9KG4rcitmfDApLzR8MCxjPUErMTA0NzJ8MCxsPUErMTA0NzZ8MCxpPUErMTA0NjB8MCxmPTA7KDB8KG49KGYrZXwwKS80fDApKTwoMHwobz0wfGFyW2M+PjJdKSkmJigwfGEpPCgwfGFyW2w+PjJdKSYmKHI9KDB8YnIobyxhKSkrbnwwLHI9KDB8YXJbaT4+Ml0pK3J8MCx0cltyPj4wXT0tMTI4fHRyW3I+PjBdKSwoMHwoZj1mKzF8MCkpPCgwfHQpOyk7cmV0dXJuO2RlZmF1bHQ6cmV0dXJufX1mdW5jdGlvbiBDdChBLGUscixpLGYsbix0KXtBfD0wLGV8PTAscnw9MCxpfD0wLG58PTAsdHw9MDt2YXIgbz0wLGE9MCxjPTA7cmV0dXJuIHQ9KDB8KGM9KGZ8PTApPyhmPWUrLTE+PihvPTB8YXJbdCsxMDM2OD4+Ml0pLG89cj4+bywoMHxmKTw9LTEmJnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSksKDB8KGE9MHxhclt0KzEwMzcyPj4yXSkpPD0oMHxmKSYmc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KSwoMHxvKTw9LTEmJnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSksKDB8byk+PSgwfGFyW3QrMTAzNzY+PjJdKSYmc3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KSxjPSgwfGFyW3QrMTAzNjA+PjJdKSsoMyooKDB8YnIoYSxvKSkrZnwwKXwwKXwwLDE3OTImKGNyW2M+PjBdfGNyW2MrMT4+MF08PDgpPzE6MHxjclsoMHxhclt0KzEwNDAwPj4yXSkrKGkrLTEpPj4wXSk6MSkpIT0oMHwoZj1uPyhmPWU+PihvPTB8YXJbdCsxMDM2OD4+Ml0pLG89cistMT4+bywoMHxmKTw9LTEmJnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSksKDB8KGE9MHxhclt0KzEwMzcyPj4yXSkpPD0oMHxmKSYmc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KSwoMHxvKTw9LTEmJnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSksKDB8byk+PSgwfGFyW3QrMTAzNzY+PjJdKSYmc3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KSxuPSgwfGFyW3QrMTAzNjA+PjJdKSsoMyooKDB8YnIoYSxvKSkrZnwwKXwwKXwwLDA9PSgxNzkyJihjcltuPj4wXXxjcltuKzE+PjBdPDw4KSkmJihyPj4obj0wfGFyW3QrNTgwND4+Ml0pPDxufDApPCgwfHIpPzB8Y3JbKDB8YXJbdCsxMDQwMD4+Ml0pKyhpLSgwfGFyW3QrNTg3Nj4+Ml0pKT4+MF06MSk6MSkpPzAhPSgwfChhcltBPj4yXT1jKSkmMCE9KDB8KGFyW0ErND4+Ml09ZikpPzA6MSE9KDB8YykmMSE9KDB8Zik/MToyNjpjPj4+MDwyPyhhcltBPj4yXT0wLGFyW0ErND4+Ml09MSwyNik6KGFyW0E+PjJdPWMsYXJbQSs0Pj4yXT0yKyhjKzI5JjMxKSwyKygoYystMXwwKSUzMnwwKXwwKSx2b2lkKGFyWyhBPUErOHwwKT4+Ml09dCl9ZnVuY3Rpb24gR3QoQSxlLHIsaSxmLG4pe3JldHVybiBBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsODwoMHxhclsoMD09KDB8KG58PTApKT9BKzU3NjB8MDpBKzU3Njh8MCk+PjJdKT92b2lkIGZ1bmN0aW9uKEEsZSxyLGksZixuKXtpfD0wO3ZhciB0LG8sYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTAsZD0wLGs9MCxoPTAsdz0wO3VyPShvPXVyKSsyNzJ8MCxmdW5jdGlvbihBLGUscixpLGYsbil7ZXw9MCxyfD0wLGl8PTAsbnw9MDt2YXIgdCxvLGEsYyxsLHUsYixzLGQsayxoLHcsdixtLGc9MCxaPTAscD0wLHk9MCxCPTAsRT0wLFg9MCxXPTAsST0wLEM9MCxHPTAsVj0wLEY9MCxSPTAsTj0wLF89MCxZPTAsUT0wLEQ9MCxKPTAsTT0wLFQ9MCxVPTAsUz0wLE89MCx6PTAsaj0wLEg9MCx4PTAsUD0wLEw9MCxLPTAscT0wLCQ9MCxBQT0wO3VyPShtPXVyKSsxNDR8MCx2PShoPW0pKzY0fDAsdz0wfGFyWzQrKEF8PTApKygoZnw9MCk8PDIpPj4yXSxjPTB8YXJbKChmPTA9PSgwfGYpKT9BKzQwfDA6QSs0NHwwKT4+Ml0sTD1mP3E9MToocT0wfGFyW0ErNTc4MD4+Ml0sMHxhcltBKzU3ODQ+PjJdKTtrPTB8YXJbKGY/QSs1NzYwfDA6QSs1NzY4fDApPj4yXSxRPTB8YnIocSxlKSxZPTB8YnIoTCxyKSxDPTB8YXJbQSs1ODA0Pj4yXSxXPTB8YXJbQSs1ODIwPj4yXSxGPShNPTAhPSgwfFEpKSYoVj0xXih5PTA9PSgwfFkpKSksST1RKygwfGJyKHEsaSkpfDAsRD0wfGFyW0ErMTI0OD4+Ml0sTj0oMHxJKTwoMHxEKSZWLEI9UT4+QyxwPVk+PkMsRT1RKy0xPj5DLEk+Pj1DLEM9WSstMT4+QyxnPTB8YXJbQSsxMDM1Mj4+Ml0sZj0wfGJyKGcscCksWj0wfGFyW0ErMTAzNDA+PjJdLG89MHxscltaKygyNCooZitCfDApfDApPj4xXSxKPU0/MHxscltaKygyNCooZitFfDApfDApPj4xXTotMTtHPXk/LTE6KEc9WisoMjQqKCgwfGJyKGcsQykpK0J8MCl8MCl8MCwwfGxyW0c+PjFdKTtSPU4/KFI9WisoMjQqKCgwfGJyKGcsQykpK0l8MCl8MCl8MCwwfGxyW1I+PjFdKTotMTtYPUY/KFg9WisoMjQqKCgwfGJyKGcsQykpK0V8MCl8MCl8MCwwfGxyW1g+PjFdKTotMTtmPTB8YnIocCxXKSxwPTB8YXJbQSsxMDMwOD4+Ml0sdD0wfGFyW3ArKGYrQjw8Mik+PjJdLF89TT8wfGFyW3ArKGYrRTw8Mik+PjJdOi0xO2c9eT8tMTooZz1wKygoMHxicihDLFcpKStCPDwyKXwwLDB8YXJbZz4+Ml0pO1o9Rj8oWj1wKygoMHxicihDLFcpKStFPDwyKXwwLDB8YXJbWj4+Ml0pOi0xO2Y9Tj8oZj1wKygoMHxicihDLFcpKStJPDwyKXwwLDB8YXJbZj4+Ml0pOi0xO2Q9KDB8Ryk9PSgwfG8pJigwfGcpPT0oMHx0KSZWLEY9RiYoMHxYKT09KDB8bykmKDB8Wik9PSgwfHQpLGw9TiYoMHxSKT09KDB8bykmKDB8Zik9PSgwfHQpLHU9MHxhcltBKzU4NjQ+PjJdLGE9MHxhcltBKzU4NTI+PjJdLEs9KDB8YnIoWT4+dSxhKSkrKFE+PnUpfDAsYj0wfGFyW0ErMTAzMjA+PjJdLEs9MHxhcltiKyhLPDwyKT4+Ml0sZj0oTCstMS1ZKygwfGFyW0ErMTI1Mj4+Ml0pfDApLygwfEwpfDAsWT0oMHxmKT4oMHwocz1pPDwxKSk/czpmLFE9KDB8KFE9KHErLTEtUStEfDApLygwfHEpfDApKT4oMHxzKT9zOlEsdmIoMC1zK3Z8MCwwLDB8KEQ9aTw8MnwxKSksZz1ZKy0xfDA7QTpkb3tpZigwPCgwfFkpJiYoVD1lKy0xfDAsVT0wfGJyKHEsVCksUz1BKzEwMzY4fDAsTz1BKzEwMzcyfDAsej1BKzEwMzc2fDAsaj1BKzEwMzYwfDAsTSYoMHxKKT09KDB8bykmKDB8Xyk9PSgwfHQpKSl7Zm9yKEM9NjQtKCgwfGYpPCgwfHMpP2Y6cyl8MCxHPVU+PnUsVj0wPT0oMHx0cltBKzU5NDQ+PjBdKSxXPWcsST1nPWY9MDs7KXtpZihYPWgrKEMrKEk8PDIpKXwwLFo9MHxicihFPVcrcnwwLEwpLHk9YisoKDB8YnIoWj4+dSxhKSkrRzw8Mil8MCx5PSgwfGFyW3k+PjJdKTw9KDB8SyksVil5JiYoSD0yOSk7ZWxzZXtpZihNPTB8YXJbUz4+Ml0sWj4+PU0sKDB8KEI9VT4+TSkpPD0tMSl7SD0zNDticmVha31pZigoMHwocD0wfGFyW08+PjJdKSk8PSgwfEIpKXtIPTM0O2JyZWFrfWlmKCgwfFopPD0tMSl7SD0zNTticmVha31pZigoMHxaKT49KDB8YXJbej4+Ml0pKXtIPTM1O2JyZWFrfU09KDB8YXJbaj4+Ml0pKygzKigoMHxicihwLFopKStCfDApfDApfDAseSYwPT0oNzY4JihjcltNPj4wXXxjcltNKzE+PjBdPDw4KSkmJihIPTI5KX1pZigyOT09KDB8SCkmJihaPXcrKCgoSD0wKXxicihFLGMpKStUPDwxKXwwLGd8fChmPTB8b3JbWj4+MV0pLHRyW1g+PjBdPTEsdHJbWCsxPj4wXT0xLHRyW1grMj4+MF09MSx0cltYKzM+PjBdPTEsb3Jbbisoflc8PDEpPj4xXT0wfG9yW1o+PjFdLE09dysoKDB8YnIoRSstMXwwLGMpKStUPDwxKXwwLG9yW24rKDEtVy0xPDwxKT4+MV09MHxvcltNPj4xXSxNPXcrKCgwfGJyKEUrLTJ8MCxjKSkrVDw8MSl8MCxvcltuKygyLVctMTw8MSk+PjFdPTB8b3JbTT4+MV0sTT13KygoMHxicihFKy0zfDAsYykpK1Q8PDEpfDAsb3JbbisoMy1XLTE8PDEpPj4xXT0wfG9yW00+PjFdLGc9Zys0fDApLCgwfChXPVcrLTR8MCkpPD0tMSl7eD1mLFA9ZzticmVhayBBfUk9SSsxfDB9MzQ9PSgwfEgpP3NyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSk6MzU9PSgwfEgpJiZzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpfWVsc2UgUD14PTB9d2hpbGUoMCk7QTpkb3tpZihGKXtmPTB8YnIocSxwPWUrLTF8MCksZz0wfGJyKEwseT1yKy0xfDApLEI9YisoKDB8YnIoZz4+dSxhKSkrKGY+PnUpPDwyKXwwLEI9KDB8YXJbQj4+Ml0pPD0oMHxLKTtkb3tpZigwfHRyW0ErNTk0ND4+MF0pe2lmKEg9MHxhcltBKzEwMzY4Pj4yXSxaPWY+PkgsZj1nPj5ILCgwfFopPD0tMSYmc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KSwoMHwoZz0wfGFyW0ErMTAzNzI+PjJdKSk8PSgwfFopJiZzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpLCgwfGYpPD0tMSYmc3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KSwoMHxmKTwoMHxhcltBKzEwMzc2Pj4yXSkpe2lmKEg9KDB8YXJbQSsxMDM2MD4+Ml0pKygzKigoMHxicihnLGYpKStafDApfDApfDAsQiYwPT0oNzY4JihjcltIPj4wXXxjcltIKzE+PjBdPDw4KSkpYnJlYWs7Zz1QLGY9eDticmVhayBBfXNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSl9ZWxzZSBpZighQil7Zz1QLGY9eDticmVhayBBfX13aGlsZSgwKTtnPXcrKCgwfGJyKGMseSkpK3A8PDEpfDAsZj1QP3g6MHxvcltnPj4xXSxvcltuPj4xXT0wfG9yW2c+PjFdLHRyW3Y+PjBdPTEsZz1QKzF8MH1lbHNlIGc9UCxmPXh9d2hpbGUoMCk7QTpkb3tpZigwPCgwfFEpKXtfPTB8YnIoTCxWPXIrLTF8MCksWT1BKzU5NDR8MCxWPTB8YnIoYyxWKSxGPUErMTAzNjh8MCxSPUErMTAzNzJ8MCxOPUErMTAzNzZ8MCxHPUErMTAzNjB8MCxDPTB8YnIoXz4+dSxhKSxXPUk9MDtlOmZvcig7Oyl7WD1oKyg2NSsoVzw8MikpfDA7ZG97aWYoKDB8SSk8KDB8aSk/ZDpsKXtpZihaPTB8YnIoQj1JK2V8MCxxKSxFPSgwfGFyW2IrKEMrKFo+PnUpPDwyKT4+Ml0pPD0oMHxLKSwwfHRyW1k+PjBdKXtpZihwPTB8YXJbRj4+Ml0sWj4+PXAscD1fPj5wLCgwfFopPD0tMSl7SD01NTticmVhayBlfWlmKCgwfCh5PTB8YXJbUj4+Ml0pKTw9KDB8Wikpe0g9NTU7YnJlYWsgZX1pZigoMHxwKTw9LTEpe0g9NTg7YnJlYWsgZX1pZigoMHxwKT49KDB8YXJbTj4+Ml0pKXtIPTU4O2JyZWFrIGV9aWYoQT0oMHxhcltHPj4yXSkrKDMqKCgwfGJyKHkscCkpK1p8MCl8MCl8MCwhKEUmMD09KDc2OCYoY3JbQT4+MF18Y3JbQSsxPj4wXTw8OCkpKSlicmVha31lbHNlIGlmKCFFKWJyZWFrO3A9dysoKFo9QitWfDApPDwxKXwwLGd8fChmPTB8b3JbcD4+MV0pLEE9MXxJLHRyW1g+PjBdPTEsdHJbWCsxPj4wXT0xLHRyW1grMj4+MF09MSx0cltYKzM+PjBdPTEsb3JbbisoQTw8MSk+PjFdPTB8b3JbcD4+MV0sb3JbbisoQSsxPDwxKT4+MV09MHxvclt3KyhaKzE8PDEpPj4xXSxvcltuKygoM3xJKTw8MSk+PjFdPTB8b3JbdysoWisyPDwxKT4+MV0sb3JbbisoQSszPDwxKT4+MV09MHxvclt3KyhaKzM8PDEpPj4xXSxnPWcrNHwwfX13aGlsZSgwKTtpZigoMHxRKTw9KDB8KEk9SSs0fDApKSl7JD1nLEFBPWY7YnJlYWsgQX1XPVcrMXwwfTU1PT0oMHxIKT9zcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpOjU4PT0oMHxIKSYmc3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KX1lbHNlICQ9ZyxBQT1mfXdoaWxlKDApO2lmKCgwfCQpPT0oMHxEKSlyZXR1cm4gdXI9bTtpZihmPTB8YnIoaSwtMiksISQpe2lmKCgwfHMpPCgwfGYpKXJldHVybiB1cj1tO2ZvcihnPTE8PGstMSY2NTUzNTtvcltuKyhmPDwxKT4+MV09ZywoMHxmKTwoMHxzKTspZj1mKzF8MDtyZXR1cm4gdXI9bX0wfHRyW3YrZj4+MF18fChvcltuKyhmPDwxKT4+MV09QUEpO2lmKCgwfChmfD0xKSk+KDB8cykpcmV0dXJuIHVyPW07Zm9yKDswfHRyW3YrZj4+MF18fChvcltuKyhmPDwxKT4+MV09MHxvcltuKyhmKy0xPDwxKT4+MV0pLCgwfGYpPCgwfHMpOylmPWYrMXwwO3VyPW19KEF8PTAsZXw9MCxyfD0wLGZ8PTAsbnw9MCx0PW8rMTI4fDApO2Rve2lmKCEoMHx0cltBKzU3NTM+PjBdKSl7aWYoMHxuJiYzIT0oMHxhcltBKzU3NzY+PjJdKSlicmVhazt0YyhBLHQsZixuLGkpfX13aGlsZSgwKTtzd2l0Y2goMHxpKXtjYXNlIDA6aWYocz0wfGFyWygwPT0oMHxuKT9BKzQwfDA6QSs0NHwwKT4+Ml0sYj0oMHxhcltBKzQrKG48PDIpPj4yXSkrKCgwfGJyKHMscikpK2U8PDEpfDAsMTwoMHxmKSl7Zm9yKGk9ZixBPTA7MzxpPj4+MDspaT4+Pj0xLEE9QSsxfDA7aT1BKzJ8MH1lbHNlIGk9MTtpZigoMHxmKTw9MClyZXR1cm4gdXI9bztyPWYrLTF8MCxuPXQrKGYrMTw8MSl8MCxhPXQrKH5mPDwxKXwwLGU9MDtkb3tmb3IoYz10Kyh+ZTw8MSl8MCxsPXItZXwwLHU9MHxicihlLHMpLGU9ZSsxfDAsQT0wO3c9MHxicigwfGxyW2M+PjFdLHItQXwwKSxBPShkPUEpKzF8MCxoPTB8YnIoMHxscltuPj4xXSxBKSxrPTB8YnIoMHxsclt0KyhBPDwxKT4+MV0sbCksaz13K2YraCtrKygwfGJyKDB8bHJbYT4+MV0sZSkpPj5pJjY1NTM1LG9yW2IrKGQrdTw8MSk+PjFdPWssKDB8QSkhPSgwfGYpOyk7fXdoaWxlKCgwfGUpIT0oMHxmKSk7cmV0dXJuIHVyPW87Y2FzZSAxOnJldHVybiBmdW5jdGlvbihBLGUscixpLGYsbil7QXw9MCxlfD0wLHJ8PTAsaXw9MCxufD0wO3ZhciB0LG8sYSxjLGw9MDtpZihjPTB8YXJbKChvPTA9PSgwfChmfD0wKSkpP0ErNDB8MDpBKzQ0fDApPj4yXSxhPSgwfGFyW0ErNCsoZjw8Mik+PjJdKSsoKDB8YnIoYyxyKSkrZTw8MSl8MCx0PTE8KDB8aSkpe2ZvcihBPWksZT0wOzM8QT4+PjA7KUE+Pj49MSxlPWUrMXwwO3I9ZSsyfDB9ZWxzZSByPTE7aWYoZj0wPCgwfGkpKWZvcihBPWU9MDtBPSgwfGxyW24rKChlPShsPWUpKzF8MCk8PDEpPj4xXSkrQSsoMHxscltuKyh+bDw8MSk+PjFdKXwwLCgwfGUpIT0oMHxpKTspO2Vsc2UgQT0wO2lmKHI9QStpPj5yLCEoKDB8aSk8MzImbykpe2lmKCFmKXJldHVybjtyJj02NTUzNSxlPTA7ZG97Zm9yKGY9MHxicihlLGMpLEE9MDtvclthKyhBK2Y8PDEpPj4xXT1yLCgwfChBPUErMXwwKSkhPSgwfGkpOyk7ZT1lKzF8MH13aGlsZSgoMHxlKSE9KDB8aSkpO3JldHVybn1pZihvclthPj4xXT0oMisocjw8MSkrKDB8bHJbbistMj4+MV0pKygwfGxyW24rMj4+MV0pfDApPj4+MiwhdClyZXR1cm47ZT0yKygzKnJ8MCl8MCxBPTE7Zm9yKDtBPShsPUEpKzF8MCxvclthKyhsPDwxKT4+MV09KGUrKDB8bHJbbisoQTw8MSk+PjFdKXwwKT4+PjIsKDB8QSkhPSgwfGkpOyk7aWYoIXQpcmV0dXJuO2U9MisoMypyfDApfDAsQT0xO2Zvcig7bD1hKygoMHxicihBLGMpKTw8MSl8MCxvcltsPj4xXT0oZSsoMHxscltuKyh+QTw8MSk+PjFdKXwwKT4+PjIsQT1BKzF8MCwoMHxBKSE9KDB8aSk7KTtpZighdClyZXR1cm47ciY9NjU1MzUsQT0xO2Rve2ZvcihmPTB8YnIoQSxjKSxlPTE7b3JbYSsoZStmPDwxKT4+MV09ciwoMHwoZT1lKzF8MCkpIT0oMHxpKTspO0E9QSsxfDB9d2hpbGUoKDB8QSkhPSgwfGkpKX0oQSxlLHIsZixuLHQpLHVyPW87ZGVmYXVsdDooZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCl7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLHR8PTA7dmFyIG8sYSxjLGwsdSxiLHMsZCxrLGg9MCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTAsQj0wO3VyPShrPXVyKSsyNzJ8MCxsPSh3PWspKzEyOHwwLHM9MHxhclsoKHU9MD09KDB8KG58PTApKSk/QSs0MHwwOkErNDR8MCk+PjJdLG89MHxhcltBKzQrKG48PDIpPj4yXSxhPSgwfGJyKHMscikpK2U8PDEsZD1vK2F8MCxiPTB8YXJbKHU/QSs1NzYwfDA6QSs1NzY4fDApPj4yXSwzNTw9KDB8aSkmJnNyKDQ4MzAyLDQ4Mjg5LDU5Niw0ODMxOSk7KDB8aSk8PTEmJnNyKDQ4MzQ0LDQ4Mjg5LDU5Nyw0ODMxOSk7Yz0wfGFyWzk1NjgrKGk8PDIpPj4yXTtkb3tpZigwfHRyW0ErNTc1MD4+MF0pe2lmKG49MHxhcltBKzEwMzY4Pj4yXSxoPWU+Pm4sbj1yPj5uLCgwfGgpPD0tMSYmc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KSwoMHwoZT0wfGFyW0ErMTAzNzI+PjJdKSk8PSgwfGgpJiZzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpLCgwfG4pPD0tMSYmc3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KSwoMHxuKTwoMHxhcltBKzEwMzc2Pj4yXSkpe3A9KDB8YXJbQSsxMDM2MD4+Ml0pKygzKigoMHxicihlLG4pKStofDApfDApfDAscD0wPT0oMjA0OCYoY3JbcD4+MF18Y3JbcCsxPj4wXTw8OCkpO2JyZWFrfXNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSl9ZWxzZSBwPTF9d2hpbGUoMCk7e2lmKG49KDB8Zik8MCwxNzwoMHxpKSl7aWYobnx8aGIoMHxsLDB8dCwyKyhmPDwxKXwwKSwobj1pKy0xMXwwKT4+PjA8MTUpe2lmKGU9MHxhcls5NzA4KyhuPDwyKT4+Ml0sKDB8KG49KDB8YnIoYyxmKSk+PjUpKTwtMSlmb3IoO1o9dCsoMC0oMTI4KygwfGJyKG4sZSkpPj44KTw8MSl8MCxvcltsKyhuPDwxKT4+MV09MHxvcltaPj4xXSwoMHxuKTwtMTspbj1uKzF8MH1lbHNlKDB8Zik8KDB8KG49Zjw8MSkpJiZoYih3KyhmKzY1PDwxKXwwLHQrKGYrMTw8MSl8MCwwfG4pO2lmKCEoZz0wPCgwfGYpKSlyZXR1cm4gdXI9aztaPXM8PDEsbT13KzEzMHwwLHI9Zjw8MSxlPTA7ZG97aWYoQT0wfGJyKGU9KG49ZSkrMXwwLGMpLGg9QT4+NSxBJj0zMSx3PTB8YnIobixzKSx2PTMyLUF8MCxBKWZvcihuPTA7eT0oKEI9MHxicigwfGxyW2wrKCh5PW4raHwwKSsxPDwxKT4+MV0sdikpKzE2KygwfGJyKDB8bHJbbCsoeSsyPDwxKT4+MV0sQSkpfDApPj4+NSY2NTUzNSxvcltkKyhuK3c8PDEpPj4xXT15LCgwfChuPW4rMXwwKSkhPSgwfGYpOyk7ZWxzZSBoYihvKyhhKygwfGJyKFosbikpKXwwLG0rKGg8PDEpfDAsMHxyKX13aGlsZSgoMHxlKSE9KDB8ZikpO2lmKCEoKDB8Zik8MzImMjY9PSgwfGkpJnUmcCZnKSlyZXR1cm4gdXI9aztmb3IoaD10KzJ8MCxyPShlPTE8PGIpKzY1NTM1fDAsbj0wO3k9KCgwfGxyW3QrKH5uPDwxKT4+MV0pLSgwfGxyW3Q+PjFdKT4+MSkrKDB8bHJbaD4+MV0pfDAsQj1kKygoMHxicihuLHMpKTw8MSl8MCxvcltCPj4xXT0oMHx5KTwwPzA6NjU1MzUmKCgwfHkpPCgwfGUpP3k6ciksKDB8KG49bisxfDApKSE9KDB8Zik7KTtyZXR1cm4gdXI9a31pZighbilmb3Iobj0wO29yW2wrKG48PDEpPj4xXT0wfG9yW3QrKDAtbjw8MSk+PjFdLCgwfG4pIT0oMHxmKTspbj1uKzF8MDtpZigobj1pKy0xMXwwKT4+PjA8MTUpe2lmKGU9MHxhcls5NzA4KyhuPDwyKT4+Ml0sKDB8KG49KDB8YnIoYyxmKSk+PjUpKTwtMSlmb3IoO0I9dCsoMTI4KygwfGJyKG4sZSkpPj44PDwxKXwwLG9yW2wrKG48PDEpPj4xXT0wfG9yW0I+PjFdLCgwfG4pPC0xOyluPW4rMXwwfWVsc2UgaWYoKDB8Zik8KDB8KGU9Zjw8MSkpKWZvcihuPWY7b3JbbCsoKG49KEI9bikrMXwwKTw8MSk+PjFdPTB8b3JbdCsofkI8PDEpPj4xXSwoMHxuKSE9KDB8ZSk7KTtpZighKHY9MDwoMHxmKSkpcmV0dXJuIHVyPWs7dz0wO2Rve2ZvcihtPTB8YnIodyxzKSxoPTA7cj0wfGJyKGg9KEE9aCkrMXwwLGMpLGU9MzEmcixuPTB8b3JbbCsoKHI9KHI+PjUpK3d8MCkrMTw8MSk+PjFdLGUmJihuPSgobj0wfGJyKDY1NTM1Jm4sMzItZXwwKSkrMTYrKDB8YnIoMHxscltsKyhyKzI8PDEpPj4xXSxlKSl8MCk+Pj41JjY1NTM1KSxvcltkKyhBK208PDEpPj4xXT1uLCgwfGgpIT0oMHxmKTspO3c9dysxfDB9d2hpbGUoKDB8dykhPSgwfGYpKTtpZighKCgwfGYpPDMyJjEwPT0oMHxpKSZ1JnAmdikpcmV0dXJuIHVyPWs7Zm9yKGg9dCstMnwwLHI9KGU9MTw8YikrNjU1MzV8MCxuPTA7eT0oKDB8bHJbdCsoKG49KEI9bikrMXwwKTw8MSk+PjFdKS0oMHxsclt0Pj4xXSk+PjEpKygwfGxyW2g+PjFdKXwwLG9yW2QrKEI8PDEpPj4xXT0oMHx5KTwwPzA6NjU1MzUmKCgwfHkpPCgwfGUpP3k6ciksKDB8bikhPSgwfGYpOyk7dXI9a319KShBLGUscixpLGYsbix0KSx1cj1vfX0oQSxlLHIsaSxmLG4pOnZvaWQgZnVuY3Rpb24oQSxlLHIsaSxmLG4pe2l8PTA7dmFyIHQsbyxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTA7dXI9KG89dXIpKzE0NHwwLGZ1bmN0aW9uKEEsZSxyLGksZixuKXtlfD0wLHJ8PTAsaXw9MCxufD0wO3ZhciB0LG8sYSxjLGwsdSxiLHMsZCxrLGgsdyx2LG0sZyxaPTAscD0wLHk9MCxCPTAsRT0wLFg9MCxXPTAsST0wLEM9MCxHPTAsVj0wLEY9MCxSPTAsTj0wLF89MCxZPTAsUT0wLEQ9MCxKPTAsTT0wLFQ9MCxVPTAsUz0wLE89MCx6PTAsaj0wLEg9MCx4PTAsUD0wLEw9MCxLPTAscT0wLCQ9MCxBQT0wLGVBPTAsckE9MDt1cj0oZz11cikrMTQ0fDAsbT0odz1nKSs2NHwwLHY9MHxhcls0KyhBfD0wKSsoKGZ8PTApPDwyKT4+Ml0scz0wfGFyWygoZj0wPT0oMHxmKSk/QSs0MHwwOkErNDR8MCk+PjJdLHE9Zj9BQT0xOihBQT0wfGFyW0ErNTc4MD4+Ml0sMHxhcltBKzU3ODQ+PjJdKTtoPTB8YXJbKGY/QSs1NzYwfDA6QSs1NzY4fDApPj4yXSxEPTB8YnIoQUEsZSksWT0wfGJyKHEsciksRz0wfGFyW0ErNTgwND4+Ml0sST0wfGFyW0ErNTgyMD4+Ml0sUj0oVD0wIT0oMHxEKSkmKEY9MV4oQj0wPT0oMHxZKSkpLEM9RCsoMHxicihBQSxpKSl8MCxKPTB8YXJbQSsxMjQ4Pj4yXSxfPSgwfEMpPCgwfEopJkYsRT1EPj5HLHk9WT4+RyxYPUQrLTE+PkcsQz4+PUcsRz1ZKy0xPj5HLFo9MHxhcltBKzEwMzUyPj4yXSxmPTB8YnIoWix5KSxwPTB8YXJbQSsxMDM0MD4+Ml0sbz0wfGxyW3ArKDI0KihmK0V8MCl8MCk+PjFdLE09VD8wfGxyW3ArKDI0KihmK1h8MCl8MCk+PjFdOi0xO1Y9Qj8tMTooVj1wKygyNCooKDB8YnIoWixHKSkrRXwwKXwwKXwwLDB8bHJbVj4+MV0pO049Xz8oTj1wKygyNCooKDB8YnIoWixHKSkrQ3wwKXwwKXwwLDB8bHJbTj4+MV0pOi0xO1c9Uj8oVz1wKygyNCooKDB8YnIoWixHKSkrWHwwKXwwKXwwLDB8bHJbVz4+MV0pOi0xO2Y9MHxicih5LEkpLHk9MHxhcltBKzEwMzA4Pj4yXSx0PTB8YXJbeSsoZitFPDwyKT4+Ml0sUT1UPzB8YXJbeSsoZitYPDwyKT4+Ml06LTE7Wj1CPy0xOihaPXkrKCgwfGJyKEcsSSkpK0U8PDIpfDAsMHxhcltaPj4yXSk7cD1SPyhwPXkrKCgwfGJyKEcsSSkpK1g8PDIpfDAsMHxhcltwPj4yXSk6LTE7Zj1fPyhmPXkrKCgwfGJyKEcsSSkpK0M8PDIpfDAsMHxhcltmPj4yXSk6LTE7az0oMHxWKT09KDB8bykmKDB8Wik9PSgwfHQpJkYsRj1SJigwfFcpPT0oMHxvKSYoMHxwKT09KDB8dCksYz1fJigwfE4pPT0oMHxvKSYoMHxmKT09KDB8dCksRT0wfGFyWyhsPUErNTg2NHwwKT4+Ml0sQj0wfGFyWyh1PUErNTg1MnwwKT4+Ml0sJD0oMHxicihZPj5FLEIpKSsoRD4+RSl8MCx5PTB8YXJbKGI9QSsxMDMyMHwwKT4+Ml0sJD0wfGFyW3krKCQ8PDIpPj4yXSxaPShxKy0xLVkrKDB8YXJbQSsxMjUyPj4yXSl8MCkvKDB8cSl8MCxZPSgwfFopPigwfChkPWk8PDEpKT9kOlosRD0oMHwoRD0oQUErLTEtRCtKfDApLygwfEFBKXwwKSk+KDB8ZCk/ZDpELHZiKG0rKEo9MC1kfDApfDAsMCwwfChhPWk8PDJ8MSkpLGY9WSstMXwwO0E6ZG97aWYoMDwoMHxZKSYmKFU9ZSstMXwwLFM9MHxicihBQSxVKSxPPUErNTk0NHwwLHo9QSsxMDM2OHwwLGo9QSsxMDM3MnwwLEg9QSsxMDM3NnwwLHg9QSsxMDM2MHwwLFQmKDB8TSk9PSgwfG8pJigwfFEpPT0oMHx0KSkpe2ZvcihWPTY0LSgoMHxaKTwoMHxkKT9aOmQpfDAsRz1wPVo9MDs7KXtpZihDPXcrKFYrKEc8PDIpKXwwLFc9MHxicihJPWYrcnwwLHEpLEU9eSsoKDB8YnIoVz4+RSxCKSkrKFM+PkUpPDwyKXwwLEU9KDB8YXJbRT4+Ml0pPD0oMHwkKSwwfHRyW08+PjBdKXtpZih5PTB8YXJbej4+Ml0sWD1TPj55LHk9Vz4+eSwoMHxYKTw9LTEpe1A9MzU7YnJlYWt9aWYoKDB8KEI9MHxhcltqPj4yXSkpPD0oMHxYKSl7UD0zNTticmVha31pZigoMHx5KTw9LTEpe1A9MzY7YnJlYWt9aWYoKDB8eSk+PSgwfGFyW0g+PjJdKSl7UD0zNjticmVha31UPSgwfGFyW3g+PjJdKSsoMyooKDB8YnIoQix5KSkrWHwwKXwwKXwwLEUmMD09KDc2OCYoY3JbVD4+MF18Y3JbVCsxPj4wXTw8OCkpJiYoUD0yOSl9ZWxzZSBFJiYoUD0yOSk7aWYoMjk9PSgwfFApJiYoeT12KygoKFA9MCl8YnIoSSxzKSkrVSl8MCxwfHwoWj0wfHRyW3k+PjBdKSx0cltDPj4wXT0xLHRyW0MrMT4+MF09MSx0cltDKzI+PjBdPTEsdHJbQyszPj4wXT0xLHRyW24rfmY+PjBdPTB8dHJbeT4+MF0sVD12KygoMHxicihJKy0xfDAscykpK1UpfDAsdHJbbisoMS1mLTEpPj4wXT0wfHRyW1Q+PjBdLFQ9disoKDB8YnIoSSstMnwwLHMpKStVKXwwLHRyW24rKDItZi0xKT4+MF09MHx0cltUPj4wXSxUPXYrKCgwfGJyKEkrLTN8MCxzKSkrVSl8MCx0cltuKygzLWYtMSk+PjBdPTB8dHJbVD4+MF0scD1wKzR8MCksKDB8KGY9ZistNHwwKSk8PS0xKXtMPVosSz1wO2JyZWFrIEF9RT0wfGFyW2w+PjJdLEI9MHxhclt1Pj4yXSx5PTB8YXJbYj4+Ml0sRz1HKzF8MH0zNT09KDB8UCk/c3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KTozNj09KDB8UCkmJnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSl9ZWxzZSBLPUw9MH13aGlsZSgwKTtBOmRve2lmKEYpe2Y9MHxicihBQSx5PWUrLTF8MCksRT0wfGFyW2w+PjJdLFo9MHxicihxLEI9cistMXwwKSxFPSgwfGJyKFo+PkUsMHxhclt1Pj4yXSkpKyhmPj5FKXwwLEU9KDB8YXJbKDB8YXJbYj4+Ml0pKyhFPDwyKT4+Ml0pPD0oMHwkKTtkb3tpZigwfHRyW0ErNTk0ND4+MF0pe2lmKFA9MHxhcltBKzEwMzY4Pj4yXSxwPWY+PlAsZj1aPj5QLCgwfHApPD0tMSYmc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KSwoMHwoWj0wfGFyW0ErMTAzNzI+PjJdKSk8PSgwfHApJiZzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpLCgwfGYpPD0tMSYmc3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KSwoMHxmKTwoMHxhcltBKzEwMzc2Pj4yXSkpe2lmKFA9KDB8YXJbQSsxMDM2MD4+Ml0pKygzKigoMHxicihaLGYpKStwfDApfDApfDAsRSYwPT0oNzY4JihjcltQPj4wXXxjcltQKzE+PjBdPDw4KSkpYnJlYWs7Wj1LLGY9TDticmVhayBBfXNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSl9ZWxzZSBpZighRSl7Wj1LLGY9TDticmVhayBBfX13aGlsZSgwKTtaPXYrKCgwfGJyKHMsQikpK3kpfDAsZj1LP0w6MHx0cltaPj4wXSx0cltuPj4wXT0wfHRyW1o+PjBdLHRyW20+PjBdPTEsWj1LKzF8MH1lbHNlIFo9SyxmPUx9d2hpbGUoMCk7QTpkb3tpZigwPCgwfEQpKXtfPTB8YnIocSxWPXIrLTF8MCksWT1BKzU5NDR8MCxWPTB8YnIocyxWKSxGPUErMTAzNjh8MCxSPUErMTAzNzJ8MCxOPUErMTAzNzZ8MCxHPUErMTAzNjB8MCxJPUM9MDtlOmZvcig7Oyl7Vz13Kyg2NSsoSTw8MikpfDA7ZG97aWYoKDB8Qyk8KDB8aSk/azpjKXtpZihwPTB8YnIoRT1DK2V8MCxBQSksWD0wfGFyW2w+PjJdLFg9KDB8YnIoXz4+WCwwfGFyW3U+PjJdKSkrKHA+PlgpfDAsWD0oMHxhclsoMHxhcltiPj4yXSkrKFg8PDIpPj4yXSk8PSgwfCQpLDB8dHJbWT4+MF0pe2lmKHk9MHxhcltGPj4yXSxwPj49eSx5PV8+PnksKDB8cCk8PS0xKXtQPTU2O2JyZWFrIGV9aWYoKDB8KEI9MHxhcltSPj4yXSkpPD0oMHxwKSl7UD01NjticmVhayBlfWlmKCgwfHkpPD0tMSl7UD01OTticmVhayBlfWlmKCgwfHkpPj0oMHxhcltOPj4yXSkpe1A9NTk7YnJlYWsgZX1pZihBPSgwfGFyW0c+PjJdKSsoMyooKDB8YnIoQix5KSkrcHwwKXwwKXwwLCEoWCYwPT0oNzY4JihjcltBPj4wXXxjcltBKzE+PjBdPDw4KSkpKWJyZWFrfWVsc2UgaWYoIVgpYnJlYWs7eT12KyhwPUUrVnwwKXwwLFp8fChmPTB8dHJbeT4+MF0pLEE9MXxDLHRyW1c+PjBdPTEsdHJbVysxPj4wXT0xLHRyW1crMj4+MF09MSx0cltXKzM+PjBdPTEsdHJbbitBPj4wXT0wfHRyW3k+PjBdLHRyW24rKEErMSk+PjBdPTB8dHJbdisocCsxKT4+MF0sdHJbbisoM3xDKT4+MF09MHx0clt2KyhwKzIpPj4wXSx0cltuKyhBKzMpPj4wXT0wfHRyW3YrKHArMyk+PjBdLFo9Wis0fDB9fXdoaWxlKDApO2lmKCgwfEQpPD0oMHwoQz1DKzR8MCkpKXtlQT1aLHJBPWY7YnJlYWsgQX1JPUkrMXwwfTU2PT0oMHxQKT9zcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpOjU5PT0oMHxQKSYmc3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KX1lbHNlIGVBPVosckE9Zn13aGlsZSgwKTtpZigoMHxlQSk9PSgwfGEpKXJldHVybiB1cj1nO2lmKCFlQSlyZXR1cm4gdmIobitKfDAsMTw8aC0xJjI1NXwwLDB8YSksdXI9ZztmPTB8YnIoaSwtMiksMHx0clttK2Y+PjBdfHwodHJbbitmPj4wXT1yQSk7aWYoKDB8KGZ8PTEpKT4oMHxkKSlyZXR1cm4gdXI9Zztmb3IoOzB8dHJbbStmPj4wXXx8KHRyW24rZj4+MF09MHx0cltuKyhmKy0xKT4+MF0pLCgwfGYpPCgwfGQpOylmPWYrMXwwO3VyPWd9KEF8PTAsZXw9MCxyfD0wLGZ8PTAsbnw9MCx0PW8rNjR8MCk7ZG97aWYoISgwfHRyW0ErNTc1Mz4+MF0pKXtpZigwfG4mJjMhPSgwfGFyW0ErNTc3Nj4+Ml0pKWJyZWFrO25jKEEsdCxmLG4saSl9fXdoaWxlKDApO3N3aXRjaCgwfGkpe2Nhc2UgMDppZihzPTB8YXJbKDA9PSgwfG4pP0ErNDB8MDpBKzQ0fDApPj4yXSxiPSgwfGFyW0ErNCsobjw8Mik+PjJdKSsoKDB8YnIocyxyKSkrZSl8MCwxPCgwfGYpKXtmb3IoaT1mLEE9MDszPGk+Pj4wOylpPj4+PTEsQT1BKzF8MDtpPUErMnwwfWVsc2UgaT0xO2lmKCgwfGYpPD0wKXJldHVybiB1cj1vO3I9ZistMXwwLG49dCsoZisxKXwwLGE9dCt+ZnwwLGU9MDtkb3tmb3IoYz10K35lfDAsbD1yLWV8MCx1PTB8YnIoZSxzKSxlPWUrMXwwLEE9MDt3PTB8YnIoMHxjcltjPj4wXSxyLUF8MCksQT0oZD1BKSsxfDAsaD0wfGJyKDB8Y3Jbbj4+MF0sQSksaz0wfGJyKDB8Y3JbdCtBPj4wXSxsKSxrPXcrZitoK2srKDB8YnIoMHxjclthPj4wXSxlKSk+PmkmMjU1LHRyW2IrKGQrdSk+PjBdPWssKDB8QSkhPSgwfGYpOyk7fXdoaWxlKCgwfGUpIT0oMHxmKSk7cmV0dXJuIHVyPW87Y2FzZSAxOnJldHVybiBmdW5jdGlvbihBLGUscixpLGYsbil7QXw9MCxlfD0wLHJ8PTAsaXw9MCxufD0wO3ZhciB0LG8sYSxjLGwsdSxiPTAscz0wLGQ9MDtpZih1PTB8YXJbKChvPTA9PSgwfChmfD0wKSkpP0ErNDB8MDpBKzQ0fDApPj4yXSxsPTB8YXJbQSs0KyhmPDwyKT4+Ml0sdD0oMHxicih1LHIpKStlfDAsYT1sK3R8MCxjPTE8KDB8aSkpe2ZvcihBPWksZj0wOzM8QT4+PjA7KUE+Pj49MSxmPWYrMXwwO2I9ZisyfDB9ZWxzZSBiPTE7aWYocz0wPCgwfGkpKWZvcihBPWY9MDtBPSgwfGNyW24rKGY9KGQ9ZikrMXwwKT4+MF0pK0ErKDB8Y3Jbbit+ZD4+MF0pfDAsKDB8ZikhPSgwfGkpOyk7ZWxzZSBBPTA7aWYoYj1BK2k+PmIsISgoMHxpKTwzMiZvKSl7aWYoIXMpcmV0dXJuO2ZvcihmPTI1NSZiLEE9MDt2YihsKyh0KygwfGJyKHUsQSkpKXwwLDB8ZiwwfGkpLCgwfChBPUErMXwwKSkhPSgwfGkpOyk7cmV0dXJufWlmKHRyW2E+PjBdPSgyKyhiPDwxKSsoMHxjcltuKy0xPj4wXSkrKDB8Y3JbbisxPj4wXSl8MCk+Pj4yLCFjKXJldHVybjtmPTIrKDMqYnwwKXwwLEE9MTtmb3IoO0E9KGQ9QSkrMXwwLHRyW2ErZD4+MF09KGYrKDB8Y3JbbitBPj4wXSl8MCk+Pj4yLCgwfEEpIT0oMHxpKTspO2lmKCFjKXJldHVybjtmPTIrKDMqYnwwKXwwLEE9MTtmb3IoO2Q9YSsoMHxicihBLHUpKXwwLHRyW2Q+PjBdPShmKygwfGNyW24rfkE+PjBdKXwwKT4+PjIsQT1BKzF8MCwoMHxBKSE9KDB8aSk7KTtpZighYylyZXR1cm47cz0yNTUmYixiPSgwfGJyKHUscisxfDApKStlKzF8MCxBPWkrLTF8MCxmPTA7Zm9yKDt2YihsKyhiKygwfGJyKHUsZikpKXwwLDB8cywwfEEpLGY9ZisxfDAsKDB8ZikhPSgwfEEpOyk7fShBLGUscixmLG4sdCksdXI9bztkZWZhdWx0OihmdW5jdGlvbihBLGUscixpLGYsbix0KXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsdHw9MDt2YXIgbyxhLGMsbCx1LGIscyxkLGssaD0wLHc9MCx2PTAsbT0wLGc9MCxaPTAscD0wO3VyPShrPXVyKSsxNDR8MCxsPSh3PWspKzY0fDAscz0wfGFyWygodT0wPT0oMHwobnw9MCkpKT9BKzQwfDA6QSs0NHwwKT4+Ml0sbz0wfGFyW0ErNCsobjw8Mik+PjJdLGE9KDB8YnIocyxyKSkrZXwwLGQ9bythfDAsYj0wfGFyWyh1P0ErNTc2MHwwOkErNTc2OHwwKT4+Ml0sMzU8PSgwfGkpJiZzcig0ODMwMiw0ODI4OSw1OTYsNDgzMTkpOygwfGkpPD0xJiZzcig0ODM0NCw0ODI4OSw1OTcsNDgzMTkpO2M9MHxhcls5NTY4KyhpPDwyKT4+Ml07ZG97aWYoMHx0cltBKzU3NTA+PjBdKXtpZihuPTB8YXJbQSsxMDM2OD4+Ml0saD1lPj5uLG49cj4+biwoMHxoKTw9LTEmJnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSksKDB8KGU9MHxhcltBKzEwMzcyPj4yXSkpPD0oMHxoKSYmc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KSwoMHxuKTw9LTEmJnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSksKDB8bik8KDB8YXJbQSsxMDM3Nj4+Ml0pKXtnPSgwfGFyW0ErMTAzNjA+PjJdKSsoMyooKDB8YnIoZSxuKSkraHwwKXwwKXwwLGc9MD09KDIwNDgmKGNyW2c+PjBdfGNyW2crMT4+MF08PDgpKTticmVha31zcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpfWVsc2UgZz0xfXdoaWxlKDApO3tpZihuPSgwfGYpPDAsMTc8KDB8aSkpe2lmKG58fGhiKDB8bCwwfHQsZisxfDApLChuPWkrLTExfDApPj4+MDwxNSl7aWYoZT0wfGFyWzk3MDgrKG48PDIpPj4yXSwoMHwobj0oMHxicihjLGYpKT4+NSkpPC0xKWZvcig7bT10KygwLSgxMjgrKDB8YnIobixlKSk+PjgpKXwwLHRyW2wrbj4+MF09MHx0clttPj4wXSwoMHxuKTwtMTspbj1uKzF8MH1lbHNlKDB8Zik8KGY8PDF8MCkmJmhiKHcrKGYrNjUpfDAsdCsoZisxKXwwLDB8Zik7aWYoIShtPTA8KDB8ZikpKXJldHVybiB1cj1rO3Y9dys2NXwwLG49MDtkb3tpZihyPTB8YnIocyxuKSxBPTB8YnIobj1uKzF8MCxjKSxoPUE+PjUsdz0zMi0oQSY9MzEpfDAsQSlmb3IoZT0wO1o9KChwPTB8YnIoMHxjcltsKygoWj1lK2h8MCkrMSk+PjBdLHcpKSsxNisoMHxicigwfGNyW2wrKForMik+PjBdLEEpKXwwKT4+PjUmMjU1LHRyW2QrKGUrcik+PjBdPVosKDB8KGU9ZSsxfDApKSE9KDB8Zik7KTtlbHNlIGhiKG8rKGErcil8MCx2K2h8MCwwfGYpfXdoaWxlKCgwfG4pIT0oMHxmKSk7aWYoISgoMHxmKTwzMiYyNj09KDB8aSkmdSZnJm0pKXJldHVybiB1cj1rO2ZvcihoPXQrMXwwLGU9KHI9MTw8YikrMjU1fDAsbj0wO1o9KCgwfGNyW3Qrfm4+PjBdKS0oMHxjclt0Pj4wXSk+PjEpKygwfGNyW2g+PjBdKXwwLHA9ZCsoMHxicihuLHMpKXwwLHRyW3A+PjBdPSgwfFopPDA/MDoyNTUmKCgwfFopPCgwfHIpP1o6ZSksKDB8KG49bisxfDApKSE9KDB8Zik7KTtyZXR1cm4gdXI9a31pZighbilmb3Iobj0wO3RyW2wrbj4+MF09MHx0clt0KygwLW4pPj4wXSwoMHxuKSE9KDB8Zik7KW49bisxfDA7aWYoKG49aSstMTF8MCk+Pj4wPDE1KXtpZihlPTB8YXJbOTcwOCsobjw8Mik+PjJdLCgwfChuPSgwfGJyKGMsZikpPj41KSk8LTEpZm9yKDtwPXQrKDEyOCsoMHxicihuLGUpKT4+OCl8MCx0cltsK24+PjBdPTB8dHJbcD4+MF0sKDB8bik8LTE7KW49bisxfDB9ZWxzZSBpZigoMHxmKTwoMHwoZT1mPDwxKSkpZm9yKG49Zjt0cltsKyhuPShwPW4pKzF8MCk+PjBdPTB8dHJbdCt+cD4+MF0sKDB8bikhPSgwfGUpOyk7aWYoISh2PTA8KDB8ZikpKXJldHVybiB1cj1rO3c9MDtkb3tmb3IobT0wfGJyKHcscyksaD0wO3I9MHxicihoPShBPWgpKzF8MCxjKSxlPTMxJnIsbj0wfHRyW2wrKChyPShyPj41KSt3fDApKzEpPj4wXSxlJiYobj0oKG49MHxicigyNTUmbiwzMi1lfDApKSsxNisoMHxicigwfGNyW2wrKHIrMik+PjBdLGUpKXwwKT4+PjUmMjU1KSx0cltkKyhBK20pPj4wXT1uLCgwfGgpIT0oMHxmKTspO3c9dysxfDB9d2hpbGUoKDB8dykhPSgwfGYpKTtpZighKCgwfGYpPDMyJjEwPT0oMHxpKSZ1JmcmdikpcmV0dXJuIHVyPWs7Zm9yKGg9dCstMXwwLHI9KGU9MTw8YikrMjU1fDAsbj0wO1o9KCgwfGNyW3QrKG49KHA9bikrMXwwKT4+MF0pLSgwfGNyW3Q+PjBdKT4+MSkrKDB8Y3JbaD4+MF0pfDAsdHJbZCtwPj4wXT0oMHxaKTwwPzA6MjU1JigoMHxaKTwoMHxlKT9aOnIpLCgwfG4pIT0oMHxmKTspO3VyPWt9fSkoQSxlLHIsaSxmLG4sdCksdXI9b319KEEsZSxyLGksZixuKX1mdW5jdGlvbiBWdChBKXt2YXIgZSxyLGk9MCxmPTAsbj0wLHQ9MDtpZihhclsoQXw9MCk+PjJdPTUxOTYsYXJbKHI9QSsxNnwwKT4+Ml09NTIyNCwwfChpPTB8YXJbQSs4ND4+Ml0pJiYoKDB8YXJbKGY9QSs4OHwwKT4+Ml0pIT0oMHxpKSYmKGFyW2Y+PjJdPWkpLHZ1KGkpKSwoMHx0clsoaT1BKzcyfDApKzExPj4wXSk8MCYmdnUoMHxhcltpPj4yXSksYXJbcj4+Ml09NDQwNCwwfChpPTB8YXJbKGU9QSs2MHwwKT4+Ml0pKXtpZigoMHwoZj0wfGFyWyh0PUErNjR8MCk+PjJdKSkhPSgwfGkpKXtmb3IoO249ZistOHwwLGFyW3Q+PjJdPW4sKDB8KGY9KGY9MHxhcltmKy00Pj4yXSk/KGR1KGYpLDB8YXJbdD4+Ml0pOm4pKSE9KDB8aSk7KTtpPTB8YXJbZT4+Ml19dnUoaSl9YXJbcj4+Ml09NDI2NCwoaT0wfGFyW0ErNDA+PjJdKSYmKCgwfGFyWyhmPUErNDR8MCk+PjJdKSE9KDB8aSkmJihhcltmPj4yXT1pKSx2dShpKSksdHUoKX1mdW5jdGlvbiBGdChBKXt2YXIgZT0wLHI9MCxpPTAsZj0wLG49MCx0PTA7aWYoYXJbKEF8PTApPj4yXT01MTA0LDB8KGU9MHxhclsobj1BKzU2fDApPj4yXSkpe2lmKCgwfChyPTB8YXJbKHQ9QSs2MHwwKT4+Ml0pKSE9KDB8ZSkpe2ZvcihpPXI7cj1pKy0xNnwwLGFyW3Q+PjJdPXIsKGY9MHxhcltpKy0xMj4+Ml0pJiYoKDB8KGk9MHxhclsocj1pKy04fDApPj4yXSkpIT0oMHxmKSYmKGFyW3I+PjJdPWkrKH4oKGkrLTQtZnwwKT4+PjIpPDwyKSksdnUoZikscj0wfGFyW3Q+PjJdKSwoMHxyKSE9KDB8ZSk7KWk9cjtlPTB8YXJbbj4+Ml19dnUoZSl9aWYoYXJbQT4+Ml09NDQwNCwwfChlPTB8YXJbKGY9QSs0NHwwKT4+Ml0pKXtpZigoMHwocj0wfGFyWyhuPUErNDh8MCk+PjJdKSkhPSgwfGUpKXtmb3IoO2k9cistOHwwLGFyW24+PjJdPWksKDB8KHI9KHI9MHxhcltyKy00Pj4yXSk/KGR1KHIpLDB8YXJbbj4+Ml0pOmkpKSE9KDB8ZSk7KTtlPTB8YXJbZj4+Ml19dnUoZSl9YXJbQT4+Ml09NDI2NCwocj0wfGFyW0ErMjQ+PjJdKSYmKCgwfGFyWyhlPUErMjh8MCk+PjJdKSE9KDB8cikmJihhcltlPj4yXT1yKSx2dShyKSl9ZnVuY3Rpb24gUnQoQSxlKXtlfD0wO3ZhciByLGk9MCxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MDtyPShBfD0wKSs0fDAsaT0wfGFyW0E+PjJdLDI2ODQzNTQ1NTwoZj0obz0oMHxhcltyPj4yXSktaT4+NCkrMXwwKT4+PjAmJnpsKCksaT0oYT0oMHxhclsoYz1BKzh8MCk+PjJdKS1pfDApPj4zLGk9YT4+ND4+PjA8MTM0MjE3NzI3P2k+Pj4wPGY+Pj4wP2Y6aToyNjg0MzU0NTU7ZG97aWYoaSl7aWYoISgyNjg0MzU0NTU8aT4+PjApKXt0PTB8aHUoaTw8NCk7YnJlYWt9WnUoYz0wfFgoOCksNDQ1MTkpLGFyW2M+PjJdPTE3NjYwLEkoMHxjLDQwMTYsNDI4KX1lbHNlIHQ9MH13aGlsZSgwKTtpZihhPXQrKGk8PDQpfDAsYXJbKG49Zj10KyhvPDw0KXwwKT4+Ml09YXJbZT4+Ml0sZnVuY3Rpb24oQSxlKXtlfD0wO3ZhciByLGksZixuLHQ9MDtpZihhclsoQXw9MCk+PjJdPTAsYXJbKG49QSs0fDApPj4yXT0wLGFyW0ErOD4+Ml09MCx0PSgwfGFyWyhmPWUrNHwwKT4+Ml0pLSgwfGFyW2U+PjJdKXwwLCEocj10Pj4yKSlyZXR1cm47MTA3Mzc0MTgyMzxyPj4+MCYmemwoKTtpZihpPTB8aHUodCksYXJbbj4+Ml09aSxhcltBPj4yXT1pLGFyW0ErOD4+Ml09aSsocjw8MiksQT0wfGFyW2U+PjJdLCgwfCh0PSgwfGFyW2Y+PjJdKS1BfDApKTw9MClyZXR1cm47aGIoMHxpLDB8QSwwfHQpLGFyW24+PjJdPWkrKHQ+Pj4yPDwyKX0odCsobzw8NCkrNHwwLGUrNHwwKSxlPWYrMTZ8MCx0PTB8YXJbQT4+Ml0sKDB8KGk9MHxhcltyPj4yXSkpPT0oMHx0KSlmPW4saT1vPXQ7ZWxzZXtmb3IoO2k9KHU9aSkrLTE2fDAsYXJbZistMTY+PjJdPWFyW2k+PjJdLG89dSstMTJ8MCxhclsobD1mKy0xMnwwKT4+Ml09MCxhclsoYj1mKy04fDApPj4yXT0wLGFyW2YrLTQ+PjJdPTAsYXJbbD4+Ml09YXJbbz4+Ml0sbD11Ky04fDAsYXJbYj4+Ml09YXJbbD4+Ml0sdT11Ky00fDAsYXJbZistND4+Ml09YXJbdT4+Ml0sYXJbdT4+Ml09MCxhcltsPj4yXT0wLG49Zj1uKy0xNnwoYXJbbz4+Ml09MCksKDB8aSkhPSgwfHQpOyk7Zj1uLG89MHxhcltBPj4yXSxpPTB8YXJbcj4+Ml19aWYoYXJbQT4+Ml09ZixhcltyPj4yXT1lLGFyW2M+PjJdPWEsKDB8aSkhPSgwfChlPW8pKSlmb3IoOzB8KGY9MHxhcltpKy0xMj4+Ml0pJiYoKDB8KHQ9MHxhclsobj1pKy04fDApPj4yXSkpIT0oMHxmKSYmKGFyW24+PjJdPXQrKH4oKHQrLTQtZnwwKT4+PjIpPDwyKSksdnUoZikpLCgwfChpPWkrLTE2fDApKSE9KDB8ZSk7KTtvJiZ2dShvKX1mdW5jdGlvbiBOdChBLGUpe2V8PTA7dmFyIHIsaSxmLG4sdCxvLGE9MCxjPTAsbD0wLHU9MDtuPShBfD0wKSs0fDAsdT10PTB8YXJbQT4+Ml0sMTA3Mzc0MTgyMzwoYT0xKyhpPShvPSgwfGFyW24+PjJdKS10fDApPj4yKXwwKT4+PjAmJnpsKCksYz0obD0oMHxhclsoZj1BKzh8MCk+PjJdKS10fDApPj4xLGM9bD4+Mj4+PjA8NTM2ODcwOTExP2M+Pj4wPGE+Pj4wP2E6YzoxMDczNzQxODIzO2Rve2lmKGMpe2lmKCEoMTA3Mzc0MTgyMzxjPj4+MCkpe2w9MHxodShjPDwyKTticmVha31adSh1PTB8WCg4KSw0NDUxOSksYXJbdT4+Ml09MTc2NjAsSSgwfHUsNDAxNiw0MjgpfWVsc2UgbD0wfXdoaWxlKDApO3I9bCsoaTw8Mil8MCxhPWxyW2U+PjFdfGxyW2UrMj4+MV08PDE2LG9yW3I+PjFdPWEsb3JbMityPj4xXT1hPj4+MTYsYT1yKygwLWk8PDIpfDAsMDwoMHxvKSYmaGIoMHxhLDB8dSwwfG8pLGFyW0E+PjJdPWEsYXJbbj4+Ml09NCtyLGFyW2Y+PjJdPWwrKGM8PDIpLHQmJnZ1KHUpfWZ1bmN0aW9uIF90KEEpe3ZhciBlLHI9MCxpPTAsZj0wLG49MDtpZihhclsoQXw9MCk+PjJdPTQ5MjQsKDB8dHJbKHI9QSsxMTJ8MCkrMTE+PjBdKTwwJiZ2dSgwfGFyW3I+PjJdKSwoMHx0clsocj1BKzEwMHwwKSsxMT4+MF0pPDAmJnZ1KDB8YXJbcj4+Ml0pLCgwfHRyWyhyPUErODh8MCkrMTE+PjBdKTwwJiZ2dSgwfGFyW3I+PjJdKSwoMHx0clsocj1BKzc2fDApKzExPj4wXSk8MCYmdnUoMHxhcltyPj4yXSksKDB8dHJbKHI9QSs2NHwwKSsxMT4+MF0pPDAmJnZ1KDB8YXJbcj4+Ml0pLGFyW0E+PjJdPTQ0MDQsMHwocj0wfGFyWyhlPUErNDR8MCk+PjJdKSl7aWYoKDB8KGk9MHxhclsobj1BKzQ4fDApPj4yXSkpIT0oMHxyKSl7Zm9yKDtmPWkrLTh8MCxhcltuPj4yXT1mLCgwfChpPShpPTB8YXJbaSstND4+Ml0pPyhkdShpKSwwfGFyW24+PjJdKTpmKSkhPSgwfHIpOyk7cj0wfGFyW2U+PjJdfXZ1KHIpfWFyW0E+PjJdPTQyNjQsKGk9MHxhcltBKzI0Pj4yXSkmJigoMHxhclsocj1BKzI4fDApPj4yXSkhPSgwfGkpJiYoYXJbcj4+Ml09aSksdnUoaSkpfWZ1bmN0aW9uIFl0KEEpe3ZhciBlLHI9MCxpPTAsZj0wLG49MCx0PTAsbz0wLGE9MCxjPTA7aWYoYXJbKEF8PTApPj4yXT00ODA0LDB8KHI9MHxhclsoZT1BKzU2fDApPj4yXSkpe2lmKCgwfChpPTB8YXJbKGM9QSs2MHwwKT4+Ml0pKSE9KDB8cikpe2ZvcihmPWk7Oyl7aWYoaT1mKy0zMnwwLGFyW2M+PjJdPWksbz0wfGFyWyhhPWYrLTE2fDApPj4yXSl7aWYoKDB8KGk9MHxhclsodD1mKy0xMnwwKT4+Ml0pKT09KDB8bykpaT1vO2Vsc2V7Zm9yKDtmPWkrLTQwfDAsYXJbdD4+Ml09ZiwoMHwoaT0obj0wfGFyW2krLTE2Pj4yXSk/KCgwfGFyWyhpPWkrLTEyfDApPj4yXSkhPSgwfG4pJiYoYXJbaT4+Ml09biksdnUobiksMHxhclt0Pj4yXSk6ZikpIT0oMHxvKTspO2k9MHxhclthPj4yXX12dShpKSxpPTB8YXJbYz4+Ml19aWYoKDB8aSk9PSgwfHIpKWJyZWFrO2Y9aX1yPTB8YXJbZT4+Ml19dnUocil9aWYoYXJbQT4+Ml09NDQwNCwwfChyPTB8YXJbKG49QSs0NHwwKT4+Ml0pKXtpZigoMHwoaT0wfGFyWyh0PUErNDh8MCk+PjJdKSkhPSgwfHIpKXtmb3IoO2Y9aSstOHwwLGFyW3Q+PjJdPWYsKDB8KGk9KGk9MHxhcltpKy00Pj4yXSk/KGR1KGkpLDB8YXJbdD4+Ml0pOmYpKSE9KDB8cik7KTtyPTB8YXJbbj4+Ml19dnUocil9YXJbQT4+Ml09NDI2NCwoaT0wfGFyW0ErMjQ+PjJdKSYmKCgwfGFyWyhyPUErMjh8MCk+PjJdKSE9KDB8aSkmJihhcltyPj4yXT1pKSx2dShpKSl9ZnVuY3Rpb24gUXQoQSxlKXtlfD0wO3ZhciByLGksZixuPTAsdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MDtiPTB8YXJbKGQ9KEF8PTApKzR8MCk+PjJdLG49dD0wfGFyW0E+PjJdLDEwNzM3NDE4Mjwobz0odT0oKGE9YiktdHwwKS80MHwwKSsxfDApPj4+MCYmemwoKSxjPShzPSgoMHxhclsoZj1BKzh8MCk+PjJdKS10fDApLzQwfDApPDwxLGM9cz4+PjA8NTM2ODcwOTE/Yz4+PjA8bz4+PjA/bzpjOjEwNzM3NDE4Mjtkb3tpZihjKXtpZighKDEwNzM3NDE4MjxjPj4+MCkpe2w9MHxodSg0MCpjfDApO2JyZWFrfVp1KGQ9MHxYKDgpLDQ0NTE5KSxhcltkPj4yXT0xNzY2MCxJKDB8ZCw0MDE2LDQyOCl9ZWxzZSBsPTB9d2hpbGUoMCk7cz1sKyg0MCpjfDApfDAsYXJbKG89dD1sKyg0MCp1fDApfDApPj4yXT1hcltlPj4yXSxhclt0KzQ+PjJdPWFyW2UrND4+Ml0sYXJbdCs4Pj4yXT1hcltlKzg+PjJdLGFyW3QrMTI+PjJdPWFyW2UrMTI+PjJdLGFyW3QrMTY+PjJdPWFyW2UrMTY+PjJdLGFyW3QrMjA+PjJdPWFyW2UrMjA+PjJdLGFyWyhyPWwrKDQwKnV8MCkrMjR8MCk+PjJdPTAsYXJbKGk9bCsoNDAqdXwwKSsyOHwwKT4+Ml09MCxrPShhcltsKyg0MCp1fDApKzMyPj4yXT0wKXxhcltlKzI0Pj4yXSxjPSgwfGFyW2UrMjg+PjJdKS1rfDAsZT1rO2Rve2lmKDB8Yyl7aWYoISgoMHxjKTwwKSl7aD0wfGh1KGMpLGFyW2k+PjJdPWgsaz0oYXJbcj4+Ml09aCkrY3wwLGFyW2wrKDQwKnV8MCkrMzI+PjJdPWssaGIoMHxoLDB8ZSwwfGMpLGFyW2k+PjJdPWs7YnJlYWt9emwoKX19d2hpbGUoMCk7aWYoZT10KzQwfDAsKDB8YSk9PSgwfG4pKWM9YjtlbHNle2Zvcig7YT0oYj1hKSstNDB8MCxhclsoaz10Ky00MHwwKT4+Ml09YXJbYT4+Ml0sYXJbays0Pj4yXT1hclthKzQ+PjJdLGFyW2srOD4+Ml09YXJbYSs4Pj4yXSxhcltrKzEyPj4yXT1hclthKzEyPj4yXSxhcltrKzE2Pj4yXT1hclthKzE2Pj4yXSxhcltrKzIwPj4yXT1hclthKzIwPj4yXSxoPWIrLTE2fDAsYXJbKGs9dCstMTZ8MCk+PjJdPTAsYXJbKHU9dCstMTJ8MCk+PjJdPTAsYXJbdCstOD4+Ml09MCxhcltrPj4yXT1hcltoPj4yXSxrPWIrLTEyfDAsYXJbdT4+Ml09YXJbaz4+Ml0sYj1iKy04fDAsYXJbdCstOD4+Ml09YXJbYj4+Ml0sYXJbYj4+Ml09MCxhcltrPj4yXT0wLG89dD1vKy00MHwoYXJbaD4+Ml09MCksKDB8YSkhPSgwfG4pOyk7Yz0wfGFyW0E+PjJdLG49MHxhcltkPj4yXX1pZihhcltBPj4yXT1vLGFyW2Q+PjJdPWUsYXJbZj4+Ml09cywoMHxuKSE9KDB8KGE9YykpKWZvcig7MHwodD0wfGFyW24rLTE2Pj4yXSkmJigoMHxhclsobz1uKy0xMnwwKT4+Ml0pIT0oMHx0KSYmKGFyW28+PjJdPXQpLHZ1KHQpKSwoMHwobj1uKy00MHwwKSkhPSgwfGEpOyk7YyYmdnUoYyl9ZnVuY3Rpb24gRHQoQSxlKXtlfD0wO3ZhciByLGksZixuPTA7YXJbKEF8PTApPj4yXT0wLGFyWyhyPUErNHwwKT4+Ml09MCxmPSgoYXJbQSs4Pj4yXT0wKXwobj0oMHxhclsoaT1lKzR8MCk+PjJdKS0oMHxhcltlPj4yXSl8MCkpLzQwfDAsbiYmKDEwNzM3NDE4MjxmPj4+MCYmemwoKSxuPTB8aHUobiksYXJbcj4+Ml09bixhcltBPj4yXT1uLGFyW0ErOD4+Ml09bisoNDAqZnwwKSxmdW5jdGlvbihBLGUscixpKXtpfD0wO3ZhciBmLG49MCx0PTAsbz0wLGE9MCxjPTA7aWYoZj00KyhBfD0wKXwwLCgwfChlfD0wKSk9PSgwfChyfD0wKSkpcmV0dXJuO2k9MHxhcltmPj4yXTtmb3IoOzspe2lmKGFyW2k+PjJdPWFyW2U+PjJdLGFyW2krND4+Ml09YXJbZSs0Pj4yXSxhcltpKzg+PjJdPWFyW2UrOD4+Ml0sYXJbaSsxMj4+Ml09YXJbZSsxMj4+Ml0sYXJbaSsxNj4+Ml09YXJbZSsxNj4+Ml0sYXJbaSsyMD4+Ml09YXJbZSsyMD4+Ml0sbj1lKzI0fDAsYXJbKG89aSsyNHwwKT4+Ml09MCxhclsoYz1pKzI4fDApPj4yXT0wLChhcltpKzMyPj4yXT0wKXwoQT0oMHxhclsodD1lKzI4fDApPj4yXSktKDB8YXJbbj4+Ml0pfDApKXtpZigoMHxBKTwwKXtBPTU7YnJlYWt9YT0wfGh1KEEpLGFyW2M+PjJdPWEsYXJbbz4+Ml09YSxhcltpKzMyPj4yXT1hK0EsaT0wfGFyW24+PjJdLDA8KDB8KEE9KDB8YXJbdD4+Ml0pLWl8MCkpJiYoaGIoMHxhLDB8aSwwfEEpLGFyW2M+PjJdPWErQSl9aWYoZT1lKzQwfDAsaT00MCsoMHxhcltmPj4yXSl8MCxhcltmPj4yXT1pLCgwfGUpPT0oMHxyKSl7QT05O2JyZWFrfX1pZig1PT0oMHxBKSl6bCgpO2Vsc2UgaWYoOT09KDB8QSkpO30oQSwwfGFyW2U+PjJdLDB8YXJbaT4+Ml0sZikpfWZ1bmN0aW9uIEp0KEEsZSl7ZXw9MDt2YXIgcixpPTAsZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTA7cj0oQXw9MCkrNHwwLGk9MHxhcltBPj4yXSwxMzQyMTc3Mjc8KGY9KG89KDB8YXJbcj4+Ml0pLWk+PjUpKzF8MCk+Pj4wJiZ6bCgpLGk9KGM9KDB8YXJbKGw9QSs4fDApPj4yXSktaXwwKT4+NCxpPWM+PjU+Pj4wPDY3MTA4ODYzP2k+Pj4wPGY+Pj4wP2Y6aToxMzQyMTc3Mjc7ZG97aWYoaSl7aWYoISgxMzQyMTc3Mjc8aT4+PjApKXt0PTB8aHUoaTw8NSk7YnJlYWt9WnUobD0wfFgoOCksNDQ1MTkpLGFyW2w+PjJdPTE3NjYwLEkoMHxsLDQwMTYsNDI4KX1lbHNlIHQ9MH13aGlsZSgwKTtpZihhPXQrKGk8PDUpfDAsYXJbKG49Zj10KyhvPDw1KXwwKT4+Ml09YXJbZT4+Ml0sYXJbZis0Pj4yXT1hcltlKzQ+PjJdLGFyW2YrOD4+Ml09YXJbZSs4Pj4yXSxhcltmKzEyPj4yXT1hcltlKzEyPj4yXSxEdCh0KyhvPDw1KSsxNnwwLGUrMTZ8MCksZT1mKzMyfDAsdD0wfGFyW0E+PjJdLCgwfChpPTB8YXJbcj4+Ml0pKT09KDB8dCkpaT1uLGY9Yz10O2Vsc2V7Zm9yKDtpPSh1PWkpKy0zMnwwLGFyWyhvPWYrLTMyfDApPj4yXT1hcltpPj4yXSxhcltvKzQ+PjJdPWFyW2krND4+Ml0sYXJbbys4Pj4yXT1hcltpKzg+PjJdLGFyW28rMTI+PjJdPWFyW2krMTI+PjJdLGM9dSstMTZ8MCxhclsobz1mKy0xNnwwKT4+Ml09MCxhclsoYj1mKy0xMnwwKT4+Ml09MCxhcltmKy04Pj4yXT0wLGFyW28+PjJdPWFyW2M+PjJdLG89dSstMTJ8MCxhcltiPj4yXT1hcltvPj4yXSx1PXUrLTh8MCxhcltmKy04Pj4yXT1hclt1Pj4yXSxhclt1Pj4yXT0wLGFyW28+PjJdPTAsbj1mPW4rLTMyfChhcltjPj4yXT0wKSwoMHxpKSE9KDB8dCk7KTtpPW4sYz0wfGFyW0E+PjJdLGY9MHxhcltyPj4yXX1pZihhcltBPj4yXT1pLGFyW3I+PjJdPWUsYXJbbD4+Ml09YSwoMHxmKSE9KDB8KEE9YykpKXthPWY7ZG97aWYoMHwoaT0wfGFyWyhlPWErLTE2fDApPj4yXSkpe2lmKCgwfChmPTB8YXJbKG89YSstMTJ8MCk+PjJdKSkhPSgwfGkpKXtmb3IoO249ZistNDB8MCxhcltvPj4yXT1uLCgwfChmPSh0PTB8YXJbZistMTY+PjJdKT8oKDB8YXJbKGY9ZistMTJ8MCk+PjJdKSE9KDB8dCkmJihhcltmPj4yXT10KSx2dSh0KSwwfGFyW28+PjJdKTpuKSkhPSgwfGkpOyk7aT0wfGFyW2U+PjJdfXZ1KGkpfWE9YSstMzJ8MH13aGlsZSgoMHxhKSE9KDB8QSkpfWMmJnZ1KGMpfWZ1bmN0aW9uIE10KEEpe3ZhciBlO2FyWyhBfD0wKT4+Ml09NDI2NCxlPUErOHwwLGFyW0ErNDA+PjJdPTAsYXJbZT4+Ml09MCxhcls0K2U+PjJdPTAsYXJbOCtlPj4yXT0wLGFyWzEyK2U+PjJdPTAsYXJbMTYrZT4+Ml09MCxhclsyMCtlPj4yXT0wLGFyWzI0K2U+PjJdPTAsb3JbMjgrZT4+MV09MH1mdW5jdGlvbiBUdChBLGUscil7QXw9MCxyfD0wO3ZhciBpLGY9MDtmPTB8YXJbKGV8PTApKzQ0Pj4yXSxpPTB8YXJbZSs0OD4+Ml07QTpkb3tpZigoMHxmKSE9KDB8aSkpe2ZvcihlPWY7Zj0wfGFyW2U+PjJdLCgwfGFyW2YrMjA+PjJdKSE9KDB8cik7KWlmKCgwfChlPWUrOHwwKSk9PSgwfGkpKWJyZWFrIEE7cmV0dXJuKGFyW0E+PjJdPWYsZT0wfGFyW2UrND4+Ml0sYXJbQSs0Pj4yXT1lKT92b2lkIGJ1KGUpOnZvaWQgMH19d2hpbGUoMCk7YXJbQT4+Ml09MCxhcltBKzQ+PjJdPTB9ZnVuY3Rpb24gVXQoQSxlKXtlfD0wO3ZhciByLGksZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MDtmPTB8YXJbKHU9KEF8PTApKzR8MCk+PjJdLGM9bj0wfGFyW0E+PjJdLDUzNjg3MDkxMTwodD0xKyhyPWYtbj4+Myl8MCk+Pj4wJiZ6bCgpLG89KGw9KDB8YXJbKGk9QSs4fDApPj4yXSktbnwwKT4+MixvPWw+PjM+Pj4wPDI2ODQzNTQ1NT9vPj4+MDx0Pj4+MD90Om86NTM2ODcwOTExO2Rve2lmKG8pe2lmKCEoNTM2ODcwOTExPG8+Pj4wKSl7YT0wfGh1KG88PDMpO2JyZWFrfVp1KHU9MHxYKDgpLDQ0NTE5KSxhclt1Pj4yXT0xNzY2MCxJKDB8dSw0MDE2LDQyOCl9ZWxzZSBhPTB9d2hpbGUoMCk7aWYobD1hKyhvPDwzKXwwLGFyWyh0PW49YSsocjw8Myl8MCk+PjJdPWFyW2U+PjJdLG89MHxhcltlKzQ+PjJdLG89KGFyW2ErKHI8PDMpKzQ+PjJdPW8pPyhidShvKSxmPTB8YXJbdT4+Ml0sMHxhcltBPj4yXSk6YyxhPW4rOHwwLCgwfGYpIT0oMHxvKSl7Zm9yKDtmPShjPWYpKy04fDAsYXJbbistOD4+Ml09YXJbZj4+Ml0sYz1jKy00fDAsYXJbbistND4+Ml09YXJbYz4+Ml0sYXJbZj4+Ml09MCx0PW49dCstOHwoYXJbYz4+Ml09MCksKDB8ZikhPSgwfG8pOyk7bz0wfGFyW0E+PjJdLGY9MHxhclt1Pj4yXX1pZihhcltBPj4yXT10LGFyW3U+PjJdPWEsYXJbaT4+Ml09bCwoMHxmKSE9KDB8KHQ9bykpKWZvcig7bj0wfGFyW2YrLTQ+PjJdLGY9ZistOHwwLDB8biYmZHUobiksKDB8ZikhPSgwfHQpOyk7byYmdnUobyl9ZnVuY3Rpb24gU3QoQSxlKXtlfD0wO3ZhciByPTA7aWYoKDB8KHI9MHxhclsoQXw9MCkrNjQ+PjJdKSk9PSgwfChBPTB8YXJbQSs2OD4+Ml0pKSlyZXR1cm4oZT0wKXxlO2Zvcig7Oyl7aWYoKDB8YXJbcj4+Ml0pPT0oMHxlKSl7cj0xLEE9NDticmVha31pZigoMHwocj1yKzR8MCkpPT0oMHxBKSl7cj0wLEE9NDticmVha319cmV0dXJuIDQ9PSgwfEEpPzB8cjowfWZ1bmN0aW9uIE90KEEsZSxyLGksZixuKXtBfD0wLGV8PTAsaXw9MCxmfD0wLG58PTA7dmFyIHQsbyxhLGMsbCx1LGIscyxkLGssaCx3LHY9MCxtPTAsZz0wLFo9MCxwPTAseT0wLEI9MCxFPTAsWD0wLFc9MCxJPTAsQz0wLEc9MCxWPTAsRj0wLFI9MCxOPTAsXz0wLFk9MDt1cj0odz11cikrMjcyfDAsaz13KzI1MnwwLGg9dys3MnwwLGI9dysyNDB8MCxzPXcrMjI4fDAsZD13KzIxNnwwLGM9dys1NnwwLGw9dys0NHwwLHQ9dysyNHwwLG89dysxNnwwLHU9dyxlPTB8YXJbKHJ8PTApKzE2Pj4yXSxhPTB8YXJbcisyMD4+Ml07QTpkb3tpZigoMHxlKSE9KDB8YSkpe0Y9cis0fDAsVj1uKzR8MCxSPXIrOHwwLEU9NCtvfDAsWD1pKzR8MCxJPShXPTgrdHwwKSsxMXwwO2U6Zm9yKDs7KXtzd2l0Y2goMHx0cltGPj4wXSl7Y2FzZSAwOmlmKEM9KDB8YXJbVj4+Ml0pLSgwfGFyW24+PjJdKXwwLG09MHxhclsoZz1CPWUrMTZ8MCk+PjJdLDA8KGc9MHxhcltnKzQ+PjJdKT4+PjB8MD09KDB8ZykmKDUzNjg3MDkxMi1DfDApPj4+MDxtPj4+MCl7ZT01O2JyZWFrIGV9aWYoWj0wfGFyWyhwPXk9ZSs4fDApPj4yXSw4Mzg4NjA3PChwPTB8YXJbcCs0Pj4yXSk+Pj4wfDgzODg2MDc9PSgwfHApJjQyOTQ5NjcyOTU8Wj4+PjApe2U9MTQ7YnJlYWsgZX1pZihyPTB8YXJbKHY9Uik+PjJdLDgzODg2MDc8KE49KHY9MHxhclt2KzQ+PjJdKXxnKT4+PjB8ODM4ODYwNz09KDB8TikmNDI5NDk2NzI5NTwocnxtKT4+PjApe2U9MTQ7YnJlYWsgZX1zd2l0Y2goXz0wfGFyW2k+PjJdLFk9MHxhclsxMisoMHxhcltfPj4yXSk+PjJdLE49MHx0YigwfHRiKDB8WiwwfHAsMHxtLDB8ZyksMHxELDB8ciwwfHYpLDB8eGJbNjMmWV0oXyxOLEQpKXtjYXNlIDI6ZT0xNzticmVhayBlO2Nhc2UgMTplPTI2O2JyZWFrIGV9aWYoXz0wfGFyW2k+PjJdLE49MHxhclsyMCsoMHxhcltfPj4yXSk+PjJdLFk9eSxZPTB8dGIoMHxhclsoeT1SKT4+Ml0sMHxhclt5KzQ+PjJdLDB8YXJbWT4+Ml0sMHxhcltZKzQ+PjJdKSwhKDB8eGJbNjMmTl0oXyxZLEQpKSl7ZT0yOTticmVhayBlfWlmKChtPTB8dGIoMHwodj0wfGFyWyhtPUIpPj4yXSksMHxhclttKzQ+PjJdLDB8QywwKSk+Pj4wPD0oZz0oWj0wfGFyW1Y+PjJdKS0ocj0wfGFyW24+PjJdKXwwKT4+PjA/bT4+PjA8Zz4+PjAmJigwfFopIT0oMHwoRz1yK218MCkpJiYoYXJbVj4+Ml09Ryk6KFRBKG4sbS1nfDApLHY9MHxhcltCPj4yXSxyPTB8YXJbbj4+Ml0pLFk9MHxhcltpPj4yXSwwfHhiWzYzJmFyWzE2KygwfGFyW1k+PjJdKT4+Ml1dKFkscitDfDAsdikpYnJlYWs7ZT0zNjticmVhayBlO2Nhc2UgMTppZighKHI9MHxhcltmPj4yXSkpe2U9Mzg7YnJlYWsgZX1hcltvPj4yXT1hcltpPj4yXSx2PTB8YXJbWD4+Ml0sKG09MD09KDB8KGFyW0U+PjJdPXYpKSl8fGJ1KHYpLF89ZSs4fDAsWT1lKzE2fDAsenQodCxyLG8sMHx0YigwfGFyWyhOPVIpPj4yXSwwfGFyW04rND4+Ml0sMHxhcltfPj4yXSwwfGFyW18rND4+Ml0pLEQsMHxhcltZPj4yXSwwfGFyW1krND4+Ml0sbiksKDB8dHJbST4+MF0pPDAmJnZ1KDB8YXJbVz4+Ml0pLG18fGR1KHYpO2JyZWFrO2RlZmF1bHQ6ZT00NjticmVhayBlfWlmKCgwfChlPWUrNDB8MCkpPT0oMHxhKSlicmVhayBBfWlmKDU9PSgwfGUpKXJldHVybiByPTY0K2h8MCxhclsobT04K2h8MCk+PjJdPTQ1MjQsdj0xMitofDAsYXJbaD4+Ml09MTg4LGFyW3I+PjJdPTIwOCxKZig2NCtofChhcls0K2g+PjJdPTApLHYpLGFyWzEzNitoPj4yXT0wLGFyWzE0MCtoPj4yXT0tMSxhcltoPj4yXT00NTA0LGFyW3I+PjJdPTQ1NDQsYXJbbT4+Ml09NDUyNCxTZih2KSxhclt2Pj4yXT00MzQwLGFyWyhtPTQ0K2h8MCk+PjJdPTAsYXJbbSs0Pj4yXT0wLGFyW20rOD4+Ml09MCxhclttKzEyPj4yXT0wLGFyWzYwK2g+PjJdPTI0LGFyW2s+PjJdPTAsYXJbNCtrPj4yXT0wLGFyWzgraz4+Ml09MCxYZSh2LGspLCgwfHRyWzExK2s+PjBdKTwwJiZ2dSgwfGFyW2s+PjJdKSxZPTB8V2UoZT04K2h8MCwyMzQ3OSwxOSksXz0wfFdlKDB8S2YoWSwwfGFyWyhfPUIpPj4yXSwwfGFyW18rND4+Ml0pLDIzNDk5LDM1KSxXZSgwfFBmKDB8V2UoMHxLZihfLFk9MHx0YigwfGFyWyhZPUIpPj4yXSwwfGFyW1krND4+Ml0sMHxDLDApLEQpLDIzNTM1LDQwKSw1MzY4NzA5MTIpLDIzNTc2LDYpLEllKGIsdiksb28oQSw2LDFlMyxiKSwoMHx0clsxMStiPj4wXSk8MCYmdnUoMHxhcltiPj4yXSksYXJbaD4+Ml09NDUwNCxhcltyPj4yXT00NTQ0LGFyW2U+PjJdPTQ1MjQsYXJbdj4+Ml09NDM0MCwoMHx0clttKzExPj4wXSk8MCYmdnUoMHxhclttPj4yXSksa2YodiksYmYociksdm9pZCh1cj13KTtpZigxND09KDB8ZSkpe2ZvcihlPTB8aHUoNDgpLGFyW3M+PjJdPWUsYXJbOCtzPj4yXT0tMjE0NzQ4MzYwMCx2PTIzNTgzLG09KHI9ZSkrKGFyWzQrcz4+Ml09MzkpfDA7dHJbcj4+MF09MHx0clt2Pj4wXSx2PXYrMXwwLCgwfChyPXIrMXwwKSk8KDB8bSk7KTtyZXR1cm4odHJbZSszOT4+MF09MCxvbyhBLDIsMWUzLHMpLDA8PSgwfHRyWzExK3M+PjBdKSk/dm9pZCh1cj13KToodnUoMHxhcltzPj4yXSksdm9pZCh1cj13KSl9aWYoMTc9PSgwfGUpKXJldHVybiBlPTB8YXJbbj4+Ml0sKDB8YXJbVj4+Ml0pIT0oMHxlKSYmKGFyW1Y+PjJdPWUpLHI9NjQraHwwLGFyWyhtPTgraHwwKT4+Ml09NDUyNCx2PTEyK2h8MCxhcltoPj4yXT0xODgsYXJbcj4+Ml09MjA4LEpmKDY0K2h8KGFyWzQraD4+Ml09MCksdiksYXJbMTM2K2g+PjJdPTAsYXJbMTQwK2g+PjJdPS0xLGFyW2g+PjJdPTQ1MDQsYXJbcj4+Ml09NDU0NCxhclttPj4yXT00NTI0LFNmKHYpLGFyW3Y+PjJdPTQzNDAsYXJbKG09NDQraHwwKT4+Ml09MCxhclttKzQ+PjJdPTAsYXJbbSs4Pj4yXT0wLGFyW20rMTI+PjJdPTAsYXJbNjAraD4+Ml09MjQsYXJbaz4+Ml09MCxhcls0K2s+PjJdPTAsYXJbOCtrPj4yXT0wLFhlKHYsayksKDB8dHJbMTEraz4+MF0pPDAmJnZ1KDB8YXJbaz4+Ml0pLF89MHxXZSgwfFdlKGU9OCtofDAsMjM2MjMsNTgpLDIzNjgyLDI1KSxZPXksV2UoMHxLZihfLFk9MHx0YigwfGFyWyhOPVIpPj4yXSwwfGFyW04rND4+Ml0sMHxhcltZPj4yXSwwfGFyW1krND4+Ml0pLEQpLDE4OTA0LDIpLEllKGQsdiksb28oQSwyLDEwMCxkKSwoMHx0clsxMStkPj4wXSk8MCYmdnUoMHxhcltkPj4yXSksYXJbaD4+Ml09NDUwNCxhcltyPj4yXT00NTQ0LGFyW2U+PjJdPTQ1MjQsYXJbdj4+Ml09NDM0MCwoMHx0clttKzExPj4wXSk8MCYmdnUoMHxhclttPj4yXSksa2YodiksYmYociksdm9pZCh1cj13KTtpZigyNj09KDB8ZSkpcmV0dXJuIGFyW2M+PjJdPTAsYXJbNCtjPj4yXT0wLGFyWzgrYz4+Ml09MCxvbyhBLDIsMTAwLGMpLDA8PSgwfHRyWzExK2M+PjBdKXx8dnUoMHxhcltjPj4yXSksdm9pZCh1cj13KTtpZigyOT09KDB8ZSkpc3IoMjM3MDgsMTkxMDQsMTExNCwyMzcxNik7ZWxzZSBpZigzNj09KDB8ZSkpc3IoMjM3MDgsMTkxMDQsMTEyMiwyMzcxNik7ZWxzZXtpZigzOD09KDB8ZSkpe2ZvcihlPTB8aHUoNjQpLGFyW2w+PjJdPWUsYXJbOCtsPj4yXT0tMjE0NzQ4MzU4NCx2PTIzNzI2LG09KHI9ZSkrKGFyWzQrbD4+Ml09NTQpfDA7dHJbcj4+MF09MHx0clt2Pj4wXSx2PXYrMXwwLCgwfChyPXIrMXwwKSk8KDB8bSk7KTtyZXR1cm4odHJbZSs1ND4+MF09MCxvbyhBLDIsMTAzLGwpLDA8PSgwfHRyWzExK2w+PjBdKSk/dm9pZCh1cj13KToodnUoMHxhcltsPj4yXSksdm9pZCh1cj13KSl9aWYoNDY9PSgwfGUpKXJldHVybiBlPTY0K2h8MCxhclsodj04K2h8MCk+PjJdPTQ1MjQscj0xMitofDAsYXJbaD4+Ml09MTg4LGFyW2U+PjJdPTIwOCxKZig2NCtofChhcls0K2g+PjJdPTApLHIpLGFyWzEzNitoPj4yXT0wLGFyWzE0MCtoPj4yXT0tMSxhcltoPj4yXT00NTA0LGFyW2U+PjJdPTQ1NDQsYXJbdj4+Ml09NDUyNCxTZihyKSxhcltyPj4yXT00MzQwLGFyWyh2PTQ0K2h8MCk+PjJdPTAsYXJbdis0Pj4yXT0wLGFyW3YrOD4+Ml09MCxhclt2KzEyPj4yXT0wLGFyWzYwK2g+PjJdPTI0LGFyW2s+PjJdPTAsYXJbNCtrPj4yXT0wLGFyWzgraz4+Ml09MCxYZShyLGspLCgwfHRyWzExK2s+PjBdKTwwJiZ2dSgwfGFyW2s+PjJdKSxZPTB8V2UobT04K2h8MCwyMzc4MSwyNSksdHJbaz4+MF09MHx0cltGPj4wXSxXZSgwfFdlKFksaywxKSwyMzgwNywxNiksSWUodSxyKSxvbyhBLDQsMTAzLHUpLCgwfHRyW3UrMTE+PjBdKTwwJiZ2dSgwfGFyW3U+PjJdKSxhcltoPj4yXT00NTA0LGFyW2U+PjJdPTQ1NDQsYXJbbT4+Ml09NDUyNCxhcltyPj4yXT00MzQwLCgwfHRyW3YrMTE+PjBdKTwwJiZ2dSgwfGFyW3Y+PjJdKSxrZihyKSxiZihlKSx2b2lkKHVyPXcpfX19d2hpbGUoMCk7Xz0wfGFyWyhOPTU2NTkyKSs0Pj4yXSxhclsoWT1BKT4+Ml09YXJbTj4+Ml0sYXJbWSs0Pj4yXT1fLHl1KEErOHwwLDU2NjAwKSx1cj13fWZ1bmN0aW9uIHp0KEEsZSxyLGksZixuLHQsbyl7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTA7dmFyIGEsYyxsPTAsdT0wLGI9MCxzPTAsZD0wLGs9MCxoPTAsdz0wLHY9MCxtPTAsZz0wO3JldHVybiB1cj0oYz11cikrMjA4fDAscz1jKzE5MnwwLGs9Yys0OHwwLGQ9YyszNnwwLGw9YysyNHwwLGg9YysxMnwwLHc9YywwPCh0fD0wKT4+PjB8MD09KDB8dCkmKDUzNjg3MDkxMi0obT0oMHxhclsoYT0ob3w9MCkrNHwwKT4+Ml0pLSgwfGFyW28+PjJdKXwwKXwwKT4+PjA8bj4+PjA/KGw9ays2NHwwLGFyWyhiPWsrOHwwKT4+Ml09NDUyNCx1PWsrMTJ8MCxhcltrPj4yXT0xODgsYXJbbD4+Ml09MjA4LEpmKGsrNjR8KGFyW2srND4+Ml09MCksdSksYXJbaysxMzY+PjJdPTAsYXJbaysxNDA+PjJdPS0xLGFyW2s+PjJdPTQ1MDQsYXJbbD4+Ml09NDU0NCxhcltiPj4yXT00NTI0LFNmKHUpLGFyW3U+PjJdPTQzNDAsYXJbKGI9ays0NHwwKT4+Ml09MCxhcltiKzQ+PjJdPTAsYXJbYis4Pj4yXT0wLGFyW2IrMTI+PjJdPTAsYXJbays2MD4+Ml09MjQsYXJbcz4+Ml09MCxhcltzKzQ+PjJdPTAsYXJbcys4Pj4yXT0wLFhlKHUscyksKDB8dHJbcysxMT4+MF0pPDAmJnZ1KDB8YXJbcz4+Ml0pLHI9MHxXZSgwfEtmKDB8V2UoZT1rKzh8MCwyMzgyNCwxOSksbix0KSwyMzQ5OSwzNSksV2UoMHxQZigwfFdlKDB8S2YocixuPTB8dGIoMHxtLDAsMHxuLDB8dCksRCksMjM1MzUsNDApLDUzNjg3MDkxMiksMjM1NzYsNiksSWUoZCx1KSxvbyhBLDYsMWUzLGQpLCgwfHRyW2QrMTE+PjBdKTwwJiZ2dSgwfGFyW2Q+PjJdKSxhcltrPj4yXT00NTA0LGFyW2w+PjJdPTQ1NDQsYXJbZT4+Ml09NDUyNCxhclt1Pj4yXT00MzQwLCgwfHRyW2IrMTE+PjBdKTwwJiZ2dSgwfGFyW2I+PjJdKSxrZih1KSxiZihsKSx2b2lkKHVyPWMpKTooZD0wfGFyWyhrPXM9ZSs2NHwwKT4+Ml0saz0wfGFyW2srND4+Ml0sZT0wfHRiKDB8KHU9MHxhclsoYj1lKzh8MCk+PjJdKSwwfChiPTB8YXJbYis0Pj4yXSksMHxkLDB8ayksKGc9RCk+Pj4wPGY+Pj4wfCgwfGcpPT0oMHxmKSZlPj4+MDxpPj4+MD8oYXJbbD4+Ml09MCxhcltsKzQ+PjJdPTAsYXJbbCs4Pj4yXT0wLG9vKEEsMiwxMDAsbCksMDw9KDB8dHJbbCsxMT4+MF0pfHx2dSgwfGFyW2w+PjJdKSx2b2lkKHVyPWMpKTooZT0wfHRiKDB8biwwfHQsMHxpLDB8ZiksYj4+PjA8dD4+PjB8KDB8Yik9PSgwfHQpJnU+Pj4wPG4+Pj4wfGI+Pj4wPChsPUQpPj4+MHwoMHxsKT09KDB8YikmdT4+PjA8ZT4+PjA/KGFyW2g+PjJdPTAsYXJbaCs0Pj4yXT0wLGFyW2grOD4+Ml09MCxvbyhBLDIsMTAwLGgpLDA8PSgwfHRyW2grMTE+PjBdKXx8dnUoMHxhcltoPj4yXSksdm9pZCh1cj1jKSk6KGg9MHxhcltyPj4yXSxiPTB8YXJbMTIrKDB8YXJbaD4+Ml0pPj4yXSxnPTB8dGIoMHxlLDB8bCwwfGQsMHxrKSwoKDB8eGJbNjMmYl0oaCxnLEQpKS0xfDApPj4+MDwyPyhhclt3Pj4yXT0wLGFyW3crND4+Ml09MCxhclt3Kzg+PjJdPTAsb28oQSwyLDEwMCx3KSwwPD0oMHx0clt3KzExPj4wXSl8fHZ1KDB8YXJbdz4+Ml0pLHZvaWQodXI9YykpOih3PTB8YXJbcj4+Ml0saD0wfGFyWzIwKygwfGFyW3c+PjJdKT4+Ml0sZz0wfHRiKDB8YXJbKGc9cyk+PjJdLDB8YXJbZys0Pj4yXSwwfGksMHxmKSwwfHhiWzYzJmhdKHcsZyxEKXx8c3IoMjM3MDgsMTkxMDQsMzAzMSwyMzcxNiksMD09KDB8bikmMD09KDB8dCl8fCgobD0wfHRiKDB8bSwwLDB8biwwfHQpKT4+PjA8PSh1PShiPTB8YXJbYT4+Ml0pLShlPTB8YXJbbz4+Ml0pfDApPj4+MD9sPj4+MDx1Pj4+MCYmKDB8YikhPSgwfCh2PWUrbHwwKSkmJihhclthPj4yXT12KTooVEEobyxsLXV8MCksZT0wfGFyW28+PjJdKSxnPTB8YXJbcj4+Ml0sMHx4Yls2MyZhclsxNisoMHxhcltnPj4yXSk+PjJdXShnLGUrbXwwLG4pfHxzcigyMzcwOCwxOTEwNCwzMDQwLDIzNzE2KSksbj0wfGFyWyhtPTU2NTkyKSs0Pj4yXSxhclsoZz1BKT4+Ml09YXJbbT4+Ml0sYXJbZys0Pj4yXT1uLHl1KEErOHwwLDU2NjAwKSx2b2lkKHVyPWMpKSkpKX1mdW5jdGlvbiBqdChBKXtvclsoQXw9MCkrND4+MV09MixvcltBKzY+PjFdPTIsb3JbQSs4Pj4xXT02LHRyW0ErMTA+PjBdPTF9ZnVuY3Rpb24gSHQoQSxlLHIsaSxmKXtBfD0wLGV8PTAscnw9MCxmfD0wO3ZhciBuLHQsbyxhLGMsbD0wLHU9MCxiPTAscz0wLGQ9MCxrPTAsaD0wLHc9MCx2PTAsbT0wLGc9MCxaPTA7dXI9KGM9dXIpKzMzNnwwLG89YyszMTZ8MCxhPWMrMTYwfDAsYj1jKzMwNHwwLHQ9KG49YykrMTQ0fDAsdT0wfGFyWyhpfD0wKT4+Ml0saT0wfGFyW3UrNTY+PjJdLHU9MHxhclt1KzYwPj4yXTtBOmRve2lmKCgwfGkpIT0oMHx1KSl7Zm9yKDtsPWkrMTZ8MCwoMHxhcltpPj4yXSkhPSgwfHIpOyl7aWYoKDB8bCk9PSgwfHUpKWJyZWFrIEE7aT1sfXh0KGEsZSs0NHwwKSxsPTB8YXJbaSs0Pj4yXSxzPTB8YXJbaSs4Pj4yXTtlOmRve2lmKCgwfGwpPT0oMHxzKSlnPTM0O2Vsc2V7Zm9yKGQ9NCthfDAsaD04K298MCx3PWs9NCtvfDAsdj1mKzR8MCxtPWYrOHwwO3U9NjU1MzUmKGk9MHxvclsoYj1sKzJ8MCk+PjFdKSxlPVo9MHxhclthPj4yXSwhKHU+Pj4wPigwfGFyW2Q+PjJdKS1aPj4zPj4+MCk7KXthcltrPj4yXT0wLGFyW2g+PjJdPTAsdHJbbz4+MF09MHx0cltsPj4wXTtkb3tpZihpPDwxNj4+MTYpe2lmKGI9MHxhcltlKygoaT11Ky0xfDApPDwzKT4+Ml0sKHU9aT0wfGFyW2UrKGk8PDMpKzQ+PjJdKT8oYnUoaSksaT0wfGFyW2g+PjJdLGFyW3c+PjJdPWIsYXJbaD4+Ml09dSwwfGkmJmR1KGkpKTooYXJbdz4+Ml09YixhcltoPj4yXT11KSwoMHwoaT0wfGFyW3Y+PjJdKSk9PSgwfGFyW20+PjJdKSl7UHQoZixvKTticmVha310cltpPj4wXT0wfHRyW28+PjBdLGFyW2krND4+Ml09YXJbdz4+Ml0sdT0wfGFyW2g+PjJdLChhcltpKzg+PjJdPXUpJiYoYnUodSksaT0wfGFyW3Y+PjJdKSxhclt2Pj4yXT1pKzEyfX13aGlsZSgwKTtpZigwfChpPTB8YXJbaD4+Ml0pJiZkdShpKSwoMHwobD1sKzR8MCkpPT0oMHxzKSl7Zz0zNDticmVhayBlfX1sPW4rNjR8MCxhclsoZT1uKzh8MCk+PjJdPTQ1MjQsdT1uKzEyfDAsYXJbbj4+Ml09MTg4LGFyW2w+PjJdPTIwOCxKZihuKzY0fChhcltuKzQ+PjJdPTApLHUpLGFyW24rMTM2Pj4yXT0wLGFyW24rMTQwPj4yXT0tMSxhcltuPj4yXT00NTA0LGFyW2w+PjJdPTQ1NDQsYXJbZT4+Ml09NDUyNCxTZih1KSxhclt1Pj4yXT00MzQwLGFyWyhlPW4rNDR8MCk+PjJdPTAsYXJbZSs0Pj4yXT0wLGFyW2UrOD4+Ml09MCxhcltlKzEyPj4yXT0wLGFyW24rNjA+PjJdPTI0LGFyW28+PjJdPTAsYXJbNCtvPj4yXT0wLGFyWzgrbz4+Ml09MCxYZSh1LG8pLCgwfHRyWzExK28+PjBdKTwwJiZ2dSgwfGFyW28+PjJdKSxaPTB8V2UoaT1uKzh8MCwyMzkwMSwyOCksV2UoMHxMZigwfFdlKDB8V2UoMHx4ZihaLDB8b3JbYj4+MV0pLDIzOTMwLDExKSwyMzk0Miw0KSxyKSwyMzk0NywyMyksSWUodCx1KSxvbyhBLDIsMTE1LHQpLCgwfHRyWzExK3Q+PjBdKTwwJiZ2dSgwfGFyW3Q+PjJdKSxhcltuPj4yXT00NTA0LGFyW2w+PjJdPTQ1NDQsYXJbaT4+Ml09NDUyNCxhclt1Pj4yXT00MzQwLCgwfHRyW2UrMTE+PjBdKTwwJiZ2dSgwfGFyW2U+PjJdKSxrZih1KSxiZihsKSxpPWF9fXdoaWxlKDApO2lmKDM0PT0oMHxnKSYmKFo9MHxhclsocj01NjU5MikrND4+Ml0sYXJbKGk9QSk+PjJdPWFyW3I+PjJdLGFyW2krND4+Ml09Wix5dShBKzh8MCw1NjYwMCksaT1hKSwwfChpPTB8YXJbaT4+Ml0pKXtpZigoMHwobD0wfGFyWyhlPTQrYXwwKT4+Ml0pKSE9KDB8aSkpe2Zvcig7dT1sKy04fDAsYXJbZT4+Ml09dSwoMHwobD0obD0wfGFyW2wrLTQ+PjJdKT8oZHUobCksMHxhcltlPj4yXSk6dSkpIT0oMHxpKTspO2k9MHxhclthPj4yXX12dShpKX1yZXR1cm4gdm9pZCh1cj1jKX19d2hpbGUoMCk7bD02NCthfDAsYXJbKGU9OCthfDApPj4yXT00NTI0LHU9MTIrYXwwLGFyW2E+PjJdPTE4OCxhcltsPj4yXT0yMDgsSmYoNjQrYXwoYXJbNCthPj4yXT0wKSx1KSxhclsxMzYrYT4+Ml09MCxhclsxNDArYT4+Ml09LTEsYXJbYT4+Ml09NDUwNCxhcltsPj4yXT00NTQ0LGFyW2U+PjJdPTQ1MjQsU2YodSksYXJbdT4+Ml09NDM0MCxhclsoZT00NCthfDApPj4yXT0wLGFyW2UrND4+Ml09MCxhcltlKzg+PjJdPTAsYXJbZSsxMj4+Ml09MCxhcls2MCthPj4yXT0yNCxhcltvPj4yXT0wLGFyWzQrbz4+Ml09MCxhcls4K28+PjJdPTAsWGUodSxvKSwoMHx0clsxMStvPj4wXSk8MCYmdnUoMHxhcltvPj4yXSksV2UoMHxMZigwfFdlKGk9OCthfDAsMjM4NDQsOSksciksMjM4NTQsNDYpLEllKGIsdSksb28oQSwyLDExNixiKSwoMHx0cltiKzExPj4wXSk8MCYmdnUoMHxhcltiPj4yXSksYXJbYT4+Ml09NDUwNCxhcltsPj4yXT00NTQ0LGFyW2k+PjJdPTQ1MjQsYXJbdT4+Ml09NDM0MCwoMHx0cltlKzExPj4wXSk8MCYmdnUoMHxhcltlPj4yXSksa2YodSksYmYobCksdXI9Y31mdW5jdGlvbiB4dChBLGUpe2V8PTA7dmFyIHIsaSxmLG49MCx0PTA7aWYoYXJbKEF8PTApPj4yXT0wLGFyWyhmPUErNHwwKT4+Ml09MCwocj0obj0oKGFyW0ErOD4+Ml09MCl8YXJbKGk9ZSs0fDApPj4yXSktKDB8YXJbZT4+Ml0pfDApPj4zKSYmKDUzNjg3MDkxMTxyPj4+MCYmemwoKSx0PTB8aHUobiksYXJbZj4+Ml09dCxhcltBPj4yXT10LGFyW0ErOD4+Ml09dCsocjw8MyksKDB8KG49MHxhcltlPj4yXSkpIT0oMHwoZT0wfGFyW2k+PjJdKSkpKWZvcig7YXJbdD4+Ml09YXJbbj4+Ml0sQT0wfGFyW24rND4+Ml0sMHwoYXJbdCs0Pj4yXT1BKSYmYnUoQSksbj1uKzh8MCx0PTgrKDB8YXJbZj4+Ml0pfDAsYXJbZj4+Ml09dCwoMHxuKSE9KDB8ZSk7KTt9ZnVuY3Rpb24gUHQoQSxlKXtlfD0wO3ZhciByLGk9MCxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wO249MHxhclsodT0oQXw9MCkrNHwwKT4+Ml0sYz1pPTB8YXJbQT4+Ml0sMzU3OTEzOTQxPChmPShhPShuLWl8MCkvMTJ8MCkrMXwwKT4+PjAmJnpsKCksdD0obD0oKDB8YXJbKHI9QSs4fDApPj4yXSktaXwwKS8xMnwwKTw8MSx0PWw+Pj4wPDE3ODk1Njk3MD90Pj4+MDxmPj4+MD9mOnQ6MzU3OTEzOTQxO2Rve2lmKHQpe2lmKCEoMzU3OTEzOTQxPHQ+Pj4wKSl7bz0wfGh1KDEyKnR8MCk7YnJlYWt9WnUodT0wfFgoOCksNDQ1MTkpLGFyW3U+PjJdPTE3NjYwLEkoMHx1LDQwMTYsNDI4KX1lbHNlIG89MH13aGlsZSgwKTtpZihsPW8rKDEyKnR8MCl8MCx0clsoZj1pPW8rKDEyKmF8MCl8MCk+PjBdPTB8dHJbZT4+MF0sYXJbbysoMTIqYXwwKSs0Pj4yXT1hcltlKzQ+PjJdLHQ9MHxhcltlKzg+PjJdLHQ9KGFyW28rKDEyKmF8MCkrOD4+Ml09dCk/KGJ1KHQpLG49MHxhclt1Pj4yXSwwfGFyW0E+PjJdKTpjLG89aSsxMnwwLCgwfG4pPT0oMHx0KSlpPXQ9bjtlbHNle2Zvcig7bj0oYz1uKSstMTJ8MCx0cltpKy0xMj4+MF09MHx0cltuPj4wXSxhPWMrLTh8MCxhcltpKy04Pj4yXT1hclthPj4yXSxjPWMrLTR8MCxhcltpKy00Pj4yXT1hcltjPj4yXSxhclthPj4yXT0wLGY9aT1mKy0xMnwoYXJbYz4+Ml09MCksKDB8bikhPSgwfHQpOyk7dD0wfGFyW0E+PjJdLGk9MHxhclt1Pj4yXX1pZihhcltBPj4yXT1mLGFyW3U+PjJdPW8sYXJbcj4+Ml09bCwoMHxpKSE9KDB8KG49dCkpKWZvcig7Zj0wfGFyW2krLTQ+PjJdLGk9aSstMTJ8MCwwfGYmJmR1KGYpLCgwfGkpIT0oMHxuKTspO3QmJnZ1KG4pfWZ1bmN0aW9uIEx0KEEsZSxyLGksZil7QXw9MCxlfD0wLHJ8PTAsZnw9MDt2YXIgbix0LG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wO3VyPSh0PXVyKSsxNnwwLG49dCxhPTB8YXJbKGl8PTApPj4yXSxpPTB8YXJbYSs1Nj4+Ml0sYT0wfGFyW2ErNjA+PjJdO0E6ZG97aWYoKDB8aSkhPSgwfGEpKXtmb3IoO289aSsxNnwwLCgwfGFyW2k+PjJdKSE9KDB8cik7KXtpZigoMHxvKT09KDB8YSkpYnJlYWsgQTtpPW99eHQobixlKzQ0fDApLGE9MHxhcltpKzQ+PjJdLGM9MHxhcltpKzg+PjJdO2U6ZG97aWYoKDB8YSk9PSgwfGMpKW89QSs0fDAsaT1uLHU9MTU7ZWxzZXtmb3IobD1uKzR8MCxvPUErNHwwOzspe2lmKGk9NjU1MzUmKGI9MHxvclthKzI+PjFdKSxlPXI9MHxhcltuPj4yXSxiPDwxNj4+MTY9PTB8fGk+Pj4wPigwfGFyW2w+PjJdKS1yPj4zPj4+MCl7aT1uLHU9MTU7YnJlYWsgZX1pZihyPTB8YXJbZSsoKGk9aSstMXwwKTw8Myk+PjJdLDB8KGk9MHxhcltlKyhpPDwzKSs0Pj4yXSkmJmJ1KGkpLCgwfGFyW3IrMjA+PjJdKT09KDB8ZikpYnJlYWs7aWYoMHxpJiZkdShpKSwoMHwoYT1hKzR8MCkpPT0oMHxjKSl7aT1uLHU9MTU7YnJlYWsgZX19YXJbQT4+Ml09cixhcltvPj4yXT1pLGk9bn19d2hpbGUoMCk7aWYoMTU9PSgwfHUpJiYoYXJbQT4+Ml09MCxhcltvPj4yXT0wKSwwfChpPTB8YXJbaT4+Ml0pKXtpZigoMHwobz0wfGFyWyhlPW4rNHwwKT4+Ml0pKSE9KDB8aSkpe2Zvcig7YT1vKy04fDAsYXJbZT4+Ml09YSwoMHwobz0obz0wfGFyW28rLTQ+PjJdKT8oZHUobyksMHxhcltlPj4yXSk6YSkpIT0oMHxpKTspO2k9MHxhcltuPj4yXX12dShpKX1yZXR1cm4gdm9pZCh1cj10KX19d2hpbGUoMCk7YXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsdXI9dH1mdW5jdGlvbiBLdChBLGUpe0F8PTA7dmFyIHI9MCxpPTAsZj0wO2lmKHI9KGV8PTApKy0xfDAsMTMxMDcyPChlKzY1NTM1fDApPj4+MClmb3IoZT0yO2U9KDB8ZSkvMnwwLDEzMTA3MjwoKHI9KDB8cikvMnwwKSs2NTUzNnwwKT4+PjA7KTtlbHNlIGU9MjtpZihmPTB8YXJbQSs3Nj4+Ml0saT0wfGFyW0ErNzI+PjJdLCgwfGYpPT0oMHxlKSl7aWYocj1pK3J8MCwxMzEwNzI8KGUrNjU1MzZ8MCk+Pj4wKWZvcig7cj0oMHxyKS8yfDAsMTMxMDcyPCgoZT0oMHxlKS8yfDApKzY1NTM2fDApPj4+MDspO2lmKDEzMTA3Mjwocis2NTUzNnwwKT4+PjApZm9yKDtlPSgwfGUpLzJ8MCwxMzEwNzI8KChyPSgwfHIpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7fWVsc2V7aWYocj0oMHxicihpLGUpKSsoMHxicihmLHIpKXwwLDEzMTA3MjwoKGU9MHxicihmLGUpKSs2NTUzNnwwKT4+PjApZm9yKDtyPSgwfHIpLzJ8MCwxMzEwNzI8KChlPSgwfGUpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7aWYoMTMxMDcyPChyKzY1NTM2fDApPj4+MClmb3IoO2U9KDB8ZSkvMnwwLDEzMTA3MjwoKHI9KDB8cikvMnwwKSs2NTUzNnwwKT4+PjA7KTt9aWYoaT0wfGFyW0ErNjA+PjJdLGY9KDB8YXJbQSs1Nj4+Ml0pLWl8MCwxMzEwNzI8KGkrNjU1MzZ8MCk+Pj4wKWZvcig7Zj0oMHxmKS8yfDAsMTMxMDcyPCgoaT0oMHxpKS8yfDApKzY1NTM2fDApPj4+MDspO2lmKDEzMTA3MjwoZis2NTUzNnwwKT4+PjApZm9yKDtpPSgwfGkpLzJ8MCwxMzEwNzI8KChmPSgwfGYpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7aWYoMTMxMDcyPCgoaTw8PTEpKzY1NTM2fDApPj4+MClmb3IoO2Y9KDB8ZikvMnwwLDEzMTA3MjwoKGk9KDB8aSkvMnwwKSs2NTUzNnwwKT4+PjA7KTtpZigxMzEwNzI8KGYrNjU1MzZ8MCk+Pj4wKWZvcig7aT0oMHxpKS8yfDAsMTMxMDcyPCgoZj0oMHxmKS8yfDApKzY1NTM2fDApPj4+MDspO2lmKCgwfGUpPT0oMHxpKSl7aWYocj1yLWZ8MCwxMzEwNzI8KGUrNjU1MzZ8MCk+Pj4wKWZvcig7cj0oMHxyKS8yfDAsMTMxMDcyPCgoZT0oMHxlKS8yfDApKzY1NTM2fDApPj4+MDspO2lmKChyKzY1NTM2fDApPj4+MDw9MTMxMDcyKXJldHVybiAwfChBPSgwfChmPXIpKS8oMHwoQT1lKSl8MCk7Zm9yKDtlPSgwfGUpLzJ8MCwxMzEwNzI8KChyPSgwfHIpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7cmV0dXJuIDB8KEE9KDB8cikvKDB8ZSl8MCl9aWYocj0oMHxicihpLHIpKS0oMHxicihmLGUpKXwwLDEzMTA3MjwoKGU9MHxicihpLGUpKSs2NTUzNnwwKT4+PjApZm9yKDtyPSgwfHIpLzJ8MCwxMzEwNzI8KChlPSgwfGUpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7aWYoKHIrNjU1MzZ8MCk+Pj4wPD0xMzEwNzIpcmV0dXJuIDB8KEE9KDB8KGY9cikpLygwfChBPWUpKXwwKTtmb3IoO2U9KDB8ZSkvMnwwLDEzMTA3MjwoKHI9KDB8cikvMnwwKSs2NTUzNnwwKT4+PjA7KTtyZXR1cm4gMHwoQT0oMHxyKS8oMHxlKXwwKX1mdW5jdGlvbiBxdChBLGUpe2V8PTA7dmFyIHI9MCxpPTA7aWYocj0wfGFyWyhBfD0wKSs2MD4+Ml0saT0oMHxhcltBKzU2Pj4yXSktcnwwLDEzMTA3Mjwocis2NTUzNnwwKT4+PjApZm9yKDtpPSgwfGkpLzJ8MCwxMzEwNzI8KChyPSgwfHIpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7aWYoMTMxMDcyPChpKzY1NTM2fDApPj4+MClmb3IoO3I9KDB8cikvMnwwLDEzMTA3MjwoKGk9KDB8aSkvMnwwKSs2NTUzNnwwKT4+PjA7KTtpZihpPSgwfGJyKDB8S3QoQSxlKSxyKSkraXwwLDEzMTA3Mjwocis2NTUzNnwwKT4+PjApZm9yKDtpPSgwfGkpLzJ8MCwxMzEwNzI8KChyPSgwfHIpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7aWYoKGkrNjU1MzZ8MCk+Pj4wPD0xMzEwNzIpcmV0dXJuIEE9aSwwfChlPSgwfChBPShpPSgwfChlPXIpKS8yfDApK0F8MCkpLygwfGUpfDApO2Zvcig7cj0oMHxyKS8yfDAsMTMxMDcyPCgoaT0oMHxpKS8yfDApKzY1NTM2fDApPj4+MDspO3JldHVybiAwfChlPSgwfChlPShlPSgwfHIpLzJ8MCkraXwwKSkvKDB8cil8MCl9ZnVuY3Rpb24gJHQoQSxlKXtBfD0wO3ZhciByPTAsaT0wLGY9MDtpZihyPShlfD0wKSstMXwwLDEzMTA3MjwoZSs2NTUzNXwwKT4+PjApZm9yKGU9MjtlPSgwfGUpLzJ8MCwxMzEwNzI8KChyPSgwfHIpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7ZWxzZSBlPTI7aWYoZj0wfGFyW0ErODQ+PjJdLGk9MHxhcltBKzgwPj4yXSwoMHxmKT09KDB8ZSkpe2lmKHI9aStyfDAsMTMxMDcyPChlKzY1NTM2fDApPj4+MClmb3IoO3I9KDB8cikvMnwwLDEzMTA3MjwoKGU9KDB8ZSkvMnwwKSs2NTUzNnwwKT4+PjA7KTtpZigxMzEwNzI8KHIrNjU1MzZ8MCk+Pj4wKWZvcig7ZT0oMHxlKS8yfDAsMTMxMDcyPCgocj0oMHxyKS8yfDApKzY1NTM2fDApPj4+MDspO31lbHNle2lmKHI9KDB8YnIoaSxlKSkrKDB8YnIoZixyKSl8MCwxMzEwNzI8KChlPTB8YnIoZixlKSkrNjU1MzZ8MCk+Pj4wKWZvcig7cj0oMHxyKS8yfDAsMTMxMDcyPCgoZT0oMHxlKS8yfDApKzY1NTM2fDApPj4+MDspO2lmKDEzMTA3Mjwocis2NTUzNnwwKT4+PjApZm9yKDtlPSgwfGUpLzJ8MCwxMzEwNzI8KChyPSgwfHIpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7fWlmKGk9MHxhcltBKzY4Pj4yXSxmPSgwfGFyW0ErNjQ+PjJdKS1pfDAsMTMxMDcyPChpKzY1NTM2fDApPj4+MClmb3IoO2Y9KDB8ZikvMnwwLDEzMTA3MjwoKGk9KDB8aSkvMnwwKSs2NTUzNnwwKT4+PjA7KTtpZigxMzEwNzI8KGYrNjU1MzZ8MCk+Pj4wKWZvcig7aT0oMHxpKS8yfDAsMTMxMDcyPCgoZj0oMHxmKS8yfDApKzY1NTM2fDApPj4+MDspO2lmKDEzMTA3MjwoKGk8PD0xKSs2NTUzNnwwKT4+PjApZm9yKDtmPSgwfGYpLzJ8MCwxMzEwNzI8KChpPSgwfGkpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7aWYoMTMxMDcyPChmKzY1NTM2fDApPj4+MClmb3IoO2k9KDB8aSkvMnwwLDEzMTA3MjwoKGY9KDB8ZikvMnwwKSs2NTUzNnwwKT4+PjA7KTtpZigoMHxlKT09KDB8aSkpe2lmKHI9ci1mfDAsMTMxMDcyPChlKzY1NTM2fDApPj4+MClmb3IoO3I9KDB8cikvMnwwLDEzMTA3MjwoKGU9KDB8ZSkvMnwwKSs2NTUzNnwwKT4+PjA7KTtpZigocis2NTUzNnwwKT4+PjA8PTEzMTA3MilyZXR1cm4gMHwoQT0oMHwoZj0oaT0oMHwoQT1lKSkvMnwwKSsoZj1yKXwwKSkvKDB8QSl8MCk7Zm9yKDtlPSgwfGUpLzJ8MCwxMzEwNzI8KChyPSgwfHIpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7cmV0dXJuIDB8KEE9KDB8KEE9KEE9KDB8ZSkvMnwwKStyfDApKS8oMHxlKXwwKX1pZihyPSgwfGJyKGkscikpLSgwfGJyKGYsZSkpfDAsMTMxMDcyPCgoZT0wfGJyKGksZSkpKzY1NTM2fDApPj4+MClmb3IoO3I9KDB8cikvMnwwLDEzMTA3MjwoKGU9KDB8ZSkvMnwwKSs2NTUzNnwwKT4+PjA7KTtpZigocis2NTUzNnwwKT4+PjA8PTEzMTA3MilyZXR1cm4gMHwoQT0oMHwoZj0oaT0oMHwoQT1lKSkvMnwwKSsoZj1yKXwwKSkvKDB8QSl8MCk7Zm9yKDtlPSgwfGUpLzJ8MCwxMzEwNzI8KChyPSgwfHIpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7cmV0dXJuIDB8KEE9KDB8KEE9KEE9KDB8ZSkvMnwwKStyfDApKS8oMHxlKXwwKX1mdW5jdGlvbiBBbyhBLGUpe2V8PTA7dmFyIHI9MCxpPTA7aWYocj0wfGFyWyhBfD0wKSs2OD4+Ml0saT0oMHxhcltBKzY0Pj4yXSktcnwwLDEzMTA3Mjwocis2NTUzNnwwKT4+PjApZm9yKDtpPSgwfGkpLzJ8MCwxMzEwNzI8KChyPSgwfHIpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7aWYoMTMxMDcyPChpKzY1NTM2fDApPj4+MClmb3IoO3I9KDB8cikvMnwwLDEzMTA3MjwoKGk9KDB8aSkvMnwwKSs2NTUzNnwwKT4+PjA7KTtpZihpPSgwfGJyKDB8JHQoQSxlKSxyKSkraXwwLDEzMTA3Mjwocis2NTUzNnwwKT4+PjApZm9yKDtpPSgwfGkpLzJ8MCwxMzEwNzI8KChyPSgwfHIpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7aWYoKGkrNjU1MzZ8MCk+Pj4wPD0xMzEwNzIpcmV0dXJuIEE9aSwwfChlPSgwfChBPShpPSgwfChlPXIpKS8yfDApK0F8MCkpLygwfGUpfDApO2Zvcig7cj0oMHxyKS8yfDAsMTMxMDcyPCgoaT0oMHxpKS8yfDApKzY1NTM2fDApPj4+MDspO3JldHVybiAwfChlPSgwfChlPShlPSgwfHIpLzJ8MCkraXwwKSkvKDB8cil8MCl9ZnVuY3Rpb24gZW8oQSl7dmFyIGU9MCxyPTAsaT0wLGY9MCxuPTA7aWYobj0wfGFyWyhBfD0wKSs2MD4+Ml0sZT0oMHxhcltBKzU2Pj4yXSktbnwwLGY9MTMxMDcyPChuKzY1NTM2fDApPj4+MClmb3Iocj1lLEE9bjtyPSgwfHIpLzJ8MCwxMzEwNzI8KChBPSgwfEEpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7ZWxzZSByPWUsQT1uO2lmKDEzMTA3Mjwocis2NTUzNnwwKT4+PjApZm9yKDtBPSgwfEEpLzJ8MCwxMzEwNzI8KChyPSgwfHIpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7aWYoMTMxMDcyPCgoQTw8PTEpKzY1NTM2fDApPj4+MClmb3IoO3I9KDB8cikvMnwwLDEzMTA3MjwoKEE9KDB8QSkvMnwwKSs2NTUzNnwwKT4+PjA7KTtpZigxMzEwNzI8KHIrNjU1MzZ8MCk+Pj4wKWZvcig7QT0oMHxBKS8yfDAsMTMxMDcyPCgocj0oMHxyKS8yfDApKzY1NTM2fDApPj4+MDspO2lmKGk9MC1yfDAsMT09KDB8QSkpaWYoMTMxMDcyPCg2NTUzNi1yfDApPj4+MClmb3IoQT0xO0E9KDB8QSkvMnwwLDEzMTA3MjwoKGk9KDB8aSkvMnwwKSs2NTUzNnwwKT4+PjA7KTtlbHNlIEE9MTtlbHNle2lmKDEzMTA3MjwoQSs2NTUzNnwwKT4+PjApZm9yKDtpPSgwfGkpLzJ8MCwxMzEwNzI8KChBPSgwfEEpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7aWYoMTMxMDcyPChpKzY1NTM2fDApPj4+MClmb3IoO0E9KDB8QSkvMnwwLDEzMTA3MjwoKGk9KDB8aSkvMnwwKSs2NTUzNnwwKT4+PjA7KTt9aWYocj0oKCgwfEEpLzJ8MCkraXwwKS8oMHxBKXwwLGYpZm9yKEE9bjtlPSgwfGUpLzJ8MCwxMzEwNzI8KChBPSgwfEEpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7ZWxzZSBBPW47aWYoMTMxMDcyPChlKzY1NTM2fDApPj4+MClmb3IoO0E9KDB8QSkvMnwwLDEzMTA3MjwoKGU9KDB8ZSkvMnwwKSs2NTUzNnwwKT4+PjA7KTtpZigxMzEwNzI8KChBPDw9MSkrNjU1MzZ8MCk+Pj4wKWZvcig7ZT0oMHxlKS8yfDAsMTMxMDcyPCgoQT0oMHxBKS8yfDApKzY1NTM2fDApPj4+MDspO2lmKChlKzY1NTM2fDApPj4+MDw9MTMxMDcyKXJldHVybiBuPSgwfChmPShpPSgwfChuPUEpKS8yfDApKyhmPWUpfDApKS8oMHxuKXwwLDB8KG49KGY9MS1yfDApK258MCk7Zm9yKDtBPSgwfEEpLzJ8MCwxMzEwNzI8KChlPSgwfGUpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7cmV0dXJuIDB8KG49KGY9MS1yfDApKyhuPSgwfChuPShuPSgwfEEpLzJ8MCkrZXwwKSkvKDB8QSl8MCl8MCl9ZnVuY3Rpb24gcm8oQSl7dmFyIGU9MCxyPTAsaT0wLGY9MCxuPTA7aWYobj0wfGFyWyhBfD0wKSs2OD4+Ml0sZT0oMHxhcltBKzY0Pj4yXSktbnwwLGY9MTMxMDcyPChuKzY1NTM2fDApPj4+MClmb3Iocj1lLEE9bjtyPSgwfHIpLzJ8MCwxMzEwNzI8KChBPSgwfEEpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7ZWxzZSByPWUsQT1uO2lmKDEzMTA3Mjwocis2NTUzNnwwKT4+PjApZm9yKDtBPSgwfEEpLzJ8MCwxMzEwNzI8KChyPSgwfHIpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7aWYoMTMxMDcyPCgoQTw8PTEpKzY1NTM2fDApPj4+MClmb3IoO3I9KDB8cikvMnwwLDEzMTA3MjwoKEE9KDB8QSkvMnwwKSs2NTUzNnwwKT4+PjA7KTtpZigxMzEwNzI8KHIrNjU1MzZ8MCk+Pj4wKWZvcig7QT0oMHxBKS8yfDAsMTMxMDcyPCgocj0oMHxyKS8yfDApKzY1NTM2fDApPj4+MDspO2lmKGk9MC1yfDAsMT09KDB8QSkpaWYoMTMxMDcyPCg2NTUzNi1yfDApPj4+MClmb3IoQT0xO0E9KDB8QSkvMnwwLDEzMTA3MjwoKGk9KDB8aSkvMnwwKSs2NTUzNnwwKT4+PjA7KTtlbHNlIEE9MTtlbHNle2lmKDEzMTA3MjwoQSs2NTUzNnwwKT4+PjApZm9yKDtpPSgwfGkpLzJ8MCwxMzEwNzI8KChBPSgwfEEpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7aWYoMTMxMDcyPChpKzY1NTM2fDApPj4+MClmb3IoO0E9KDB8QSkvMnwwLDEzMTA3MjwoKGk9KDB8aSkvMnwwKSs2NTUzNnwwKT4+PjA7KTt9aWYocj0oKCgwfEEpLzJ8MCkraXwwKS8oMHxBKXwwLGYpZm9yKEE9bjtlPSgwfGUpLzJ8MCwxMzEwNzI8KChBPSgwfEEpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7ZWxzZSBBPW47aWYoMTMxMDcyPChlKzY1NTM2fDApPj4+MClmb3IoO0E9KDB8QSkvMnwwLDEzMTA3MjwoKGU9KDB8ZSkvMnwwKSs2NTUzNnwwKT4+PjA7KTtpZigxMzEwNzI8KChBPDw9MSkrNjU1MzZ8MCk+Pj4wKWZvcig7ZT0oMHxlKS8yfDAsMTMxMDcyPCgoQT0oMHxBKS8yfDApKzY1NTM2fDApPj4+MDspO2lmKChlKzY1NTM2fDApPj4+MDw9MTMxMDcyKXJldHVybiBuPSgwfChmPShpPSgwfChuPUEpKS8yfDApKyhmPWUpfDApKS8oMHxuKXwwLDB8KG49KGY9MS1yfDApK258MCk7Zm9yKDtBPSgwfEEpLzJ8MCwxMzEwNzI8KChlPSgwfGUpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7cmV0dXJuIDB8KG49KGY9MS1yfDApKyhuPSgwfChuPShuPSgwfEEpLzJ8MCkrZXwwKSkvKDB8QSl8MCl8MCl9ZnVuY3Rpb24gaW8oQSxlLHIpe2V8PTAscnw9MDt2YXIgaSxmLG4sdD0wO2lmKGFyWyhBfD0wKT4+Ml09MCxhclsobj1BKzR8MCk+PjJdPTAsKChhcltBKzg+PjJdPTApfCh0PTB8YXJbZSs1Nj4+Ml0pKSE9KDB8KGY9MHxhcltlKzYwPj4yXSkpKXtpPUErOHwwLGU9dDtkb3tkb3tpZigoMHxhcltlKzQ4Pj4yXSk9PSgwfHIpKXtpZigoMHwodD0wfGFyW24+PjJdKSk9PSgwfGFyW2k+PjJdKSl7ZGUoQSxlKTticmVha31zZSh0LGUpLGFyW24+PjJdPTY0KygwfGFyW24+PjJdKTticmVha319d2hpbGUoMCk7ZT1lKzY0fDB9d2hpbGUoKDB8ZSkhPSgwfGYpKX19ZnVuY3Rpb24gZm8oQSxlLHIsaSl7QXw9MCxyfD0wLGl8PTA7dmFyIGY9MDtmPTB8YXJbKGV8PTApKzU2Pj4yXSxlPTB8YXJbZSs2MD4+Ml07QTpkb3tpZigoMHxmKSE9KDB8ZSkpe2Zvcig7KDB8YXJbZis0OD4+Ml0pIT0oMHxyKXx8KDB8YXJbZisyMD4+Ml0pIT0oMHxpKTspaWYoKDB8KGY9Zis2NHwwKSk9PSgwfGUpKWJyZWFrIEE7cmV0dXJuIHZvaWQgR2UoQSxmKzUyfDApfX13aGlsZSgwKTthcltBPj4yXT0wLGFyW0ErND4+Ml09MCxhcltBKzg+PjJdPTB9ZnVuY3Rpb24gbm8oQSxlKXtlfD0wO3ZhciByLGksZixuLHQsbyxhLGMsbCx1LGI9MCxzPTAsZD0wLGs9MCxoPTAsdz0wLHY9MCxtPTAsZz0wLFo9MCxwPTA7aWYodXI9KHU9dXIpKzMyfDAsbz11KzIwfDAsdD11KzE2fDAsbj11KzEyfDAsYT11Kzh8MCxjPXUrNHwwLGw9dSwoMHwoYj0wfGFyWyhBfD0wKSs5Mj4+Ml0pKT09KDB8KGY9MHxhcltBKzk2Pj4yXSkpKXJldHVybiB1cj11LDE7cj1lKzR8MCxpPWUrOHwwO0E6Zm9yKDs7KXtpZigoMHwoQT0wfGFyW2IrND4+Ml0pKSE9KDB8KHA9MHxhcltiKzg+PjJdKSkpZG97aWYodz0oKDB8YXJbKFo9QSs0fDApPj4yXSktKDB8YXJbQT4+Ml0pfDApPj4+MjQmMjU1LHM9MHxhcltyPj4yXSwoZD1nPTB8YXJbaT4+Ml0pPj4+MDw9cz4+PjApe2lmKG09Zz0wfGFyW2U+PjJdLCgwfChzPSh2PXMtZ3wwKSsxfDApKTwwKXtBPTk7YnJlYWsgQX1rPShoPWQtZ3wwKTw8MSxoPShrPWg+Pj4wPDEwNzM3NDE4MjM/az4+PjA8cz4+PjA/czprOjIxNDc0ODM2NDcpPzB8aHUoayk6MCx0clsoZD1oK3Z8MCk+PjBdPXcscz1kKzF8MCxkPWQrKDAtdil8MCwwPCgwfHYpJiZoYigwfGQsMHxtLDB8diksYXJbZT4+Ml09ZCxhcltyPj4yXT1zLGFyW2k+PjJdPWgrayxnJiYodnUobSkscz0wfGFyW3I+PjJdKX1lbHNlIHRyW3M+PjBdPXcscz0xKygwfGFyW3I+PjJdKXwwLGFyW3I+PjJdPXM7aWYodz0oKDB8YXJbWj4+Ml0pLSgwfGFyW0E+PjJdKXwwKT4+PjE2JjI1NSwoZD1nPTB8YXJbaT4+Ml0pPj4+MDw9cz4+PjApe2lmKG09Zz0wfGFyW2U+PjJdLCgwfChzPSh2PXMtZ3wwKSsxfDApKTwwKXtBPTE5O2JyZWFrIEF9az0oaD1kLWd8MCk8PDEsaD0oaz1oPj4+MDwxMDczNzQxODIzP2s+Pj4wPHM+Pj4wP3M6azoyMTQ3NDgzNjQ3KT8wfGh1KGspOjAsdHJbKGQ9aCt2fDApPj4wXT13LHM9ZCsxfDAsZD1kKygwLXYpfDAsMDwoMHx2KSYmaGIoMHxkLDB8bSwwfHYpLGFyW2U+PjJdPWQsYXJbcj4+Ml09cyxhcltpPj4yXT1oK2ssZyYmKHZ1KG0pLHM9MHxhcltyPj4yXSl9ZWxzZSB0cltzPj4wXT13LHM9MSsoMHxhcltyPj4yXSl8MCxhcltyPj4yXT1zO2lmKHc9KCgwfGFyW1o+PjJdKS0oMHxhcltBPj4yXSl8MCk+Pj44JjI1NSwoZD1nPTB8YXJbaT4+Ml0pPj4+MDw9cz4+PjApe2lmKG09Zz0wfGFyW2U+PjJdLCgwfChzPSh2PXMtZ3wwKSsxfDApKTwwKXtBPTI5O2JyZWFrIEF9az0oaD1kLWd8MCk8PDEsaD0oaz1oPj4+MDwxMDczNzQxODIzP2s+Pj4wPHM+Pj4wP3M6azoyMTQ3NDgzNjQ3KT8wfGh1KGspOjAsdHJbKGQ9aCt2fDApPj4wXT13LHM9ZCsxfDAsZD1kKygwLXYpfDAsMDwoMHx2KSYmaGIoMHxkLDB8bSwwfHYpLGFyW2U+PjJdPWQsYXJbcj4+Ml09cyxhcltpPj4yXT1oK2ssZyYmKHZ1KG0pLHM9MHxhcltyPj4yXSl9ZWxzZSB0cltzPj4wXT13LHM9MSsoMHxhcltyPj4yXSl8MCxhcltyPj4yXT1zO2lmKHc9KDB8YXJbWj4+Ml0pLSgwfGFyW0E+PjJdKSYyNTUsKGQ9Zz0wfGFyW2k+PjJdKT4+PjA8PXM+Pj4wKXtpZihtPWc9MHxhcltlPj4yXSwoMHwocz0odj1zLWd8MCkrMXwwKSk8MCl7QT0zOTticmVhayBBfWs9KGg9ZC1nfDApPDwxLGg9KGs9aD4+PjA8MTA3Mzc0MTgyMz9rPj4+MDxzPj4+MD9zOms6MjE0NzQ4MzY0Nyk/MHxodShrKTowLHRyWyhkPWgrdnwwKT4+MF09dyxzPWQrMXwwLGQ9ZCsoMC12KXwwLDA8KDB8dikmJmhiKDB8ZCwwfG0sMHx2KSxhcltlPj4yXT1kLGFyW3I+PjJdPXMsYXJbaT4+Ml09aCtrLGcmJih2dShtKSxzPTB8YXJbcj4+Ml0pfWVsc2UgdHJbcz4+MF09dyxzPTErKDB8YXJbcj4+Ml0pfDAsYXJbcj4+Ml09czthclthPj4yXT1zLGFyW2M+PjJdPWFyW0E+PjJdLGFyW2w+PjJdPWFyW1o+PjJdLGFyW24+PjJdPWFyW2E+PjJdLGFyW3Q+PjJdPWFyW2M+PjJdLGFyW28+PjJdPWFyW2w+PjJdLHRvKGUsbix0LG8pLEE9QSsxMnwwfXdoaWxlKCgwfEEpIT0oMHxwKSk7aWYoKDB8KGI9YisxNnwwKSk9PSgwfGYpKXtBPTM7YnJlYWt9fXJldHVybiAzPT0oMHxBKT8odXI9dSwxKTooOSE9KDB8QSkmJjE5IT0oMHxBKSYmMjkhPSgwfEEpJiYzOSE9KDB8QSl8fHpsKCksMCl9ZnVuY3Rpb24gdG8oQSxlLHIsaSl7ZXw9MCxyfD0wLGl8PTA7dmFyIGYsbix0LG8sYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTAsZD0wO2lmKGU9KHU9Zj0wfGFyWyhBfD0wKT4+Ml0pKyhiPSgwfGFyW2U+PjJdKS11fDApfDAsYT0wfGFyW3I+PjJdLHQ9Yz0wfGFyW2k+PjJdLCgwfChzPWMtYXwwKSk8PTApcmV0dXJuIDB8KGQ9ZSk7aWYoKDB8cyk8PSgobD0wfGFyWyhvPUErOHwwKT4+Ml0pLShpPW49MHxhclsoZD1BKzR8MCk+PjJdKXwwKSl7aWYoKDB8KGw9aS1lfDApKTwoMHxzKSl7aWYoKDB8KGM9aT1hK2x8MCkpPT0oMHx0KSlpPW47ZWxzZXtmb3IoYT1uO3RyW2E+PjBdPTB8dHJbaT4+MF0saT1pKzF8MCxhPTErKDB8YXJbZD4+Ml0pfDAsYXJbZD4+Ml09YSwoMHxpKSE9KDB8dCk7KTtpPWF9aWYoISgwPCgwfGwpKSlyZXR1cm4gMHwoZD1lKTt1PWl9ZWxzZSB1PW47aWYoKGk9ZSsobD11LShlK3MpfDApfDApPj4+MDxuPj4+MClmb3IoYT11O3RyW2E+PjBdPTB8dHJbaT4+MF0saT1pKzF8MCxhPTErKDB8YXJbZD4+Ml0pfDAsYXJbZD4+Ml09YSwoMHxpKSE9KDB8bik7KTtpZigwfGwmJndiKHUrKDAtbCl8MCwwfGUsMHxsKSwoMHwoaT0wfGFyW3I+PjJdKSk9PSgwfGMpKXJldHVybiAwfChkPWUpO2ZvcihhPWU7dHJbYT4+MF09MHx0cltpPj4wXSwoMHwoaT1pKzF8MCkpIT0oMHxjKTspYT1hKzF8MDtyZXR1cm4gMHxlfWlmKCgwfChpPWktdStzfDApKTwwJiZ6bCgpLGM9KHU9bC11fDApPDwxLGM9dT4+PjA8MTA3Mzc0MTgyMz9jPj4+MDxpPj4+MD9pOmM6MjE0NzQ4MzY0Nyx1PWUsaT1zPShsPWM/MHxodShjKTowKStifDAsYj1sK2N8MCwoMHxhKT09KDB8dCkpYz1mO2Vsc2V7Zm9yKGM9czt0cltjPj4wXT0wfHRyW2E+PjBdLGk9Yz1pKzF8MCwoMHwoYT1hKzF8MCkpIT0oMHx0KTspO2M9MHxhcltBPj4yXX1yZXR1cm4gbD1zKygwLShhPXUtY3wwKSl8MCwwPCgwfGEpJiZoYigwfGwsMHxjLDB8YSksZT0wPCgwfChhPSgwfGFyW2Q+PjJdKS11fDApKT8oaGIoMHxpLDB8ZSwwfGEpLGk9aSthfDAsMHxhcltBPj4yXSk6YyxhcltBPj4yXT1sLGFyW2Q+PjJdPWksYXJbbz4+Ml09YixlJiZ2dShlKSwwfChkPXMpfWZ1bmN0aW9uIG9vKEEsZSxyLGkpe2V8PTAscnw9MCxpfD0wLGFyWyhBfD0wKT4+Ml09ZSxhcltBKzQ+PjJdPXIseXUoQSs4fDAsaSl9ZnVuY3Rpb24gYW8oQSxlLHIpe0F8PTAscnw9MDt2YXIgaSxmLG4sdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTA7aWYodXI9KG49dXIpKzE3NnwwLG89bisxNjB8MCxpPW4rMTZ8MCxmPW4sdD0wfGFyWyhlfD0wKT4+Ml0sIXIpcmV0dXJuIGFyW0E+PjJdPXQsYXJbQSs0Pj4yXT1hcltlKzQ+PjJdLGU9MHxhclsoZT02MTY4KT4+Ml0sYXJbKEE9QSs4fDApPj4yXT1lLHZvaWQodXI9bik7aWYodCl7c3dpdGNoKHU9NjQraXwwLGFyWyhzPTgraXwwKT4+Ml09NDUyNCxiPTEyK2l8MCxhcltpPj4yXT0xODgsYXJbdT4+Ml09MjA4LEpmKDY0K2l8KGFyWzQraT4+Ml09MCksYiksYXJbMTM2K2k+PjJdPTAsYXJbMTQwK2k+PjJdPS0xLGFyW2k+PjJdPTQ1MDQsYXJbdT4+Ml09NDU0NCxhcltzPj4yXT00NTI0LFNmKGIpLGFyW2I+PjJdPTQzNDAsYXJbKHM9NDQraXwwKT4+Ml09MCxhcltzKzQ+PjJdPTAsYXJbcys4Pj4yXT0wLGFyW3MrMTI+PjJdPTAsYXJbNjAraT4+Ml09MjQsYXJbbz4+Ml09MCxhcltvKzQ+PjJdPTAsYXJbbys4Pj4yXT0wLFhlKGIsbyksKDB8dHJbbysxMT4+MF0pPDAmJnZ1KDB8YXJbbz4+Ml0pLGw9OCtpfDAsMHxhcltlPj4yXSl7Y2FzZSAwOmE9MzIyMTU7YnJlYWs7Y2FzZSAxOmE9MjQyNDU7YnJlYWs7Y2FzZSAyOmE9MjQyMzE7YnJlYWs7Y2FzZSAzOmE9MjQyMDk7YnJlYWs7Y2FzZSA0OmE9MjQxODk7YnJlYWs7Y2FzZSA1OmE9MjQxNzc7YnJlYWs7Y2FzZSA2OmE9MjQxNTM7YnJlYWs7Y2FzZSA3OmE9MjQxMTk7YnJlYWs7Y2FzZSA4OmE9MjQwODU7YnJlYWs7Y2FzZSA5OmE9MjQwNDA7YnJlYWs7Y2FzZSAxMDphPTI0MDExO2JyZWFrO2RlZmF1bHQ6c3IoNTU3MzksMjM5ODUsNzQsMjM5OTQpfWM9MHxXZSgwfFdlKGwsYSwwfFZjKGEpKSwyNTM5MiwyKSxXZShjLGE9MHxmdW5jdGlvbihBKXt2YXIgZT0wO3N3aXRjaCgwfChBfD0wKSl7Y2FzZSAwOmU9MjUzODA7YnJlYWs7Y2FzZSAxMDA6ZT0yNTM1NzticmVhaztjYXNlIDEwMTplPTI1MzQwO2JyZWFrO2Nhc2UgMTE4OmU9MjUzMjI7YnJlYWs7Y2FzZSAxMTk6ZT0yNTMwMjticmVhaztjYXNlIDEwMjplPTI1Mjg4O2JyZWFrO2Nhc2UgMTAzOmU9MjUyNzQ7YnJlYWs7Y2FzZSAxMDQ6ZT0yNTI2MDticmVhaztjYXNlIDEwNTplPTI1MjQ2O2JyZWFrO2Nhc2UgMTA2OmU9MjUyMzI7YnJlYWs7Y2FzZSAxMzE6ZT0yNTIxODticmVhaztjYXNlIDEwNzplPTI1MjA0O2JyZWFrO2Nhc2UgMTA4OmU9MjUxOTA7YnJlYWs7Y2FzZSAxMDk6ZT0yNTE3NjticmVhaztjYXNlIDExMDplPTI1MTYyO2JyZWFrO2Nhc2UgMTExOmU9MjUxNDg7YnJlYWs7Y2FzZSAxMTI6ZT0yNTEzNDticmVhaztjYXNlIDExMzplPTI1MTIwO2JyZWFrO2Nhc2UgMTI1OmU9MjUxMDY7YnJlYWs7Y2FzZSAxMTQ6ZT0yNTA4NTticmVhaztjYXNlIDExNTplPTI1MDM5O2JyZWFrO2Nhc2UgMTE2OmU9MjUwMDg7YnJlYWs7Y2FzZSAxMTc6ZT0yNDk5MTticmVhaztjYXNlIDEyMDplPTI0OTU0O2JyZWFrO2Nhc2UgMTIxOmU9MjQ5MzM7YnJlYWs7Y2FzZSAxMjI6ZT0yNDg5NjticmVhaztjYXNlIDEyMzplPTI0ODYwO2JyZWFrO2Nhc2UgMTI0OmU9MjQ4MzM7YnJlYWs7Y2FzZSAxMjY6ZT0yNDgwNjticmVhaztjYXNlIDEyNzplPTI0Nzc1O2JyZWFrO2Nhc2UgMTI4OmU9MjQ3NDk7YnJlYWs7Y2FzZSAxMjk6ZT0yNDczMDticmVhaztjYXNlIDEzMDplPTI0NzEzO2JyZWFrO2Nhc2UgMWUzOmU9MjQ2ODk7YnJlYWs7Y2FzZSAyZTM6ZT0yNDY1NzticmVhaztjYXNlIDIwMDE6ZT0yNDYzNDticmVhaztjYXNlIDIwMDI6ZT0yNDU5NjticmVhaztjYXNlIDIwMDM6ZT0yNDU0NjticmVhaztjYXNlIDIwMDQ6ZT0yNDQ5NjticmVhaztjYXNlIDIwMDU6ZT0yNDQ3NDticmVhaztjYXNlIDIwMDY6ZT0yNDQ1MDticmVhaztjYXNlIDNlMzplPTI0NDMyO2JyZWFrO2Nhc2UgMzAwMTplPTI0NDA5O2JyZWFrO2Nhc2UgMzAwMjplPTI0Mzg0O2JyZWFrO2Nhc2UgMzAwMzplPTI0MzU1O2JyZWFrO2Nhc2UgMzAwNDplPTI0MzE4O2JyZWFrO2Nhc2UgNGUzOmU9MjQyOTY7YnJlYWs7Y2FzZSA1ZTM6ZT0yNDI3MTticmVhaztkZWZhdWx0OnNyKDU1NzM5LDIzOTg1LDE5OCwyMzk5NCl9cmV0dXJuIDB8ZX0oMHxhclsobz1lKzR8MCk+PjJdKSwwfFZjKGEpKSwodD0wfHRyWyhjPShhPWUrOHwwKSsxMXwwKT4+MF0pPDwyND4+MjQ8MD90PTB8YXJbZSsxMj4+Ml06dCY9MjU1LDB8dCYmKGQ9MHxXZShsLDI1MzkyLDIpLFdlKGQsKHQ9KGM9MHx0cltjPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW2E+PjJdOmEsdD8wfGFyW2UrMTI+PjJdOjI1NSZjKSksSWUoZixiKSxFdShyLGYpLHQ9KDB8dHJbcisxMT4+MF0pPDA/MHxhcltyPj4yXTpyLGFyWyhhPXIrMTJ8MCk+PjJdPXQsKDB8dHJbZisxMT4+MF0pPDAmJnZ1KDB8YXJbZj4+Ml0pLGFyW2k+PjJdPTQ1MDQsYXJbdT4+Ml09NDU0NCxhcltsPj4yXT00NTI0LGFyW2I+PjJdPTQzNDAsKDB8dHJbcysxMT4+MF0pPDAmJnZ1KDB8YXJbcz4+Ml0pLGtmKGIpLGJmKHUpLHQ9MHxhcltlPj4yXX1lbHNlIGFyWyhhPXIrMTJ8MCk+PjJdPTMyMjE1LG89ZSs0fDAsdD0wO2FyW0E+PjJdPXQsYXJbQSs0Pj4yXT1hcltvPj4yXSxlPTB8YXJbKGU9YSk+PjJdLGFyWyhkPUErOHwwKT4+Ml09ZSx1cj1ufWZ1bmN0aW9uIGNvKEEpe3ZhciBlLHIsaTtmb3IoYXJbKEF8PTApKzExMj4+Ml09MCxyPUErMTEyfChhcltBKzExNj4+Ml09MCksZT1pPUErMTA4fDA7KDB8KEE9QSs0fChhcltBPj4yXT0wKSkpPCgwfGUpOyk7YXJbaT4+Ml09cn1mdW5jdGlvbiBsbyhBKXt2YXIgZSxyPTAsaT0wLGY9MCxuPTA7aWYodW8oKEF8PTApKzEwOHwwLDB8YXJbQSsxMTI+PjJdKSwwfChyPTB8YXJbQSsxMDQ+PjJdKSYmZHUociksMHwocj0wfGFyW0ErOTY+PjJdKSYmZHUociksMHwocj0wfGFyW0ErODg+PjJdKSYmZHUociksMHwocj0wfGFyW0ErODA+PjJdKSYmZHUociksMHwocj0wfGFyW0ErNzI+PjJdKSYmZHUociksMHwocj0wfGFyW0ErNjQ+PjJdKSYmZHUociksMHwocj0wfGFyW0ErNTY+PjJdKSYmZHUociksMHwocj0wfGFyW0ErNDg+PjJdKSYmZHUociksMHwocj0wfGFyW0ErNDA+PjJdKSYmZHUociksMHwocj0wfGFyW0ErMzI+PjJdKSYmZHUociksMHwocj0wfGFyW0ErMjQ+PjJdKSYmZHUociksMHwocj0wfGFyWyhlPUErOHwwKT4+Ml0pKXtpZigoMHwoaT0wfGFyWyhuPUErMTJ8MCk+PjJdKSkhPSgwfHIpKXtmb3IoO2Y9aSstOHwwLGFyW24+PjJdPWYsKDB8KGk9KGk9MHxhcltpKy00Pj4yXSk/KGR1KGkpLDB8YXJbbj4+Ml0pOmYpKSE9KDB8cik7KTtyPTB8YXJbZT4+Ml19dnUocil9KHI9MHxhcltBKzQ+PjJdKSYmZHUocil9ZnVuY3Rpb24gdW8oQSxlKXtBfD0wLChlfD0wKSYmKHVvKEEsMHxhcltlPj4yXSksdW8oQSwwfGFyW2UrND4+Ml0pLDB8KEE9MHxhcltlKzI0Pj4yXSkmJmR1KEEpLHZ1KGUpKX1mdW5jdGlvbiBibyhBLGUscil7QXw9MCxlfD0wO3ZhciBpLGYsbix0LG8sYT0wO3VyPShvPXVyKSs0OHwwLG49KHQ9bykrMzJ8MCxmPTB8YXJbKHJ8PTApPj4yXSwwfChhPTB8YXJbcis0Pj4yXSkmJmJ1KGEpLGFyW2U+PjJdPWYscj0wfGFyWyhpPWUrNHwwKT4+Ml0sYXJbaT4+Ml09YSxyPyhkdShyKSxyPTB8YXJbZT4+Ml0sYT0wfGFyW2k+PjJdKTpyPWYsYXJbbj4+Ml09ciwwfChhclsocj00K258MCk+PjJdPWEpJiZidShhKSxXQSh0LG4sLTEsMjE0NzQ4MzY0NywwKSwwfChyPTB8YXJbcj4+Ml0pJiZkdShyKSxmdW5jdGlvbihBLGUscil7QXw9MDt2YXIgaSxmLG4sdCxvLGEsYyxsLHUsYixzLGQ9MCxrPTAsaD0wLHc9MCx2PTAsbT0wLGc9MCxaPTAscD0wLHk9MCxCPTAsRT0wLFg9MCxXPTAsST0wLEM9MCxHPTAsVj0wLEY9MCxSPTAsTj0wLF89MCxZPTAsUT0wLEQ9MDt1cj0ocz11cikrMjg4fDAsdD1zKzI2NHwwLEM9cysxMDh8MCxvPXMrOTZ8MCxjPXMrODR8MCxsPXMrNzJ8MCx1PXMrNjB8MCxSPXMrNDh8MCxOPXMrMzZ8MCxfPXMrMjR8MCxRPXMrMTJ8MCxpPTQrKGI9KEQ9cykrMjc2fDApfDAsdz0yNCsocnw9MCl8MCx2PXIrMTZ8MCxtPTEyKyhlfD0wKXwwLGc9ZSsxNnwwLFo9ZSs4fDAscD1lKzM2fDAseT1lKzQwfDAsQj1lKzIwfDAsRT1lKzI0fDAsbj0xMSsoZj04KyhhPXMrMTIwfDApfDApfDA7Zm9yKDs7KXtpZihhcltiPj4yXT0wLGFyW2k+PjJdPTAsQWUoYSxyLGIpLCgwfGFyW2E+PjJdKSE9KDB8YXJbMTQxNDhdKSl7WT00MDticmVha31pZigwfHRyW3c+PjBdKXtZPTM1O2JyZWFrfWlmKDA9PSgwfGFyWyhZPXYpPj4yXSkmMD09KDB8YXJbWSs0Pj4yXSkpe1k9MzA7YnJlYWt9KDB8KGQ9MHxhclttPj4yXSkpPT0oMHxhcltnPj4yXSk/VXQoWixiKTooYXJbZD4+Ml09YXJbYj4+Ml0saz0wfGFyW2k+PjJdLChhcltkKzQ+PjJdPWspJiYoYnUoayksZD0wfGFyW20+PjJdKSxhclttPj4yXT1kKzgpLGs9MHxhcltiPj4yXSwxODM1MzY1NDczPT0oMHwoZD0wfGFyW2srMjA+PjJdKSkmJigwIT0oMHxrKSYmMCE9KDB8KFg9MHxxdShrLDEyOCwxNjAsMCkpKT8oZD1YLGg9MHxhcltpPj4yXSwoaz1oKSYmYnUoaCkpOms9ZD0wLGFyW3A+PjJdPWQsZD0wfGFyW3k+PjJdLGFyW3k+PjJdPWssMHxkJiZkdShkKSxrPTB8YXJbYj4+Ml0sZD0wfGFyW2srMjA+PjJdKSwxNzE4OTA5Mjk2PT0oMHxkKSYmKDAhPSgwfGspJiYwIT0oMHwoVz0wfHF1KGssMTI4LDE0NCwwKSkpPyhkPVcsaD0wfGFyW2k+PjJdLChrPWgpJiZidShoKSk6az1kPTAsYXJbQj4+Ml09ZCxkPTB8YXJbRT4+Ml0sYXJbRT4+Ml09aywwfGQmJmR1KGQpKSwoMHx0cltuPj4wXSk8MCYmdnUoMHxhcltmPj4yXSksMHwoZD0wfGFyW2k+PjJdKSYmZHUoZCl9MzAhPSgwfFkpJiYzNSE9KDB8WSkmJjQwIT0oMHxZKXx8KCgwfHRyW24+PjBdKTwwJiZ2dSgwfGFyW2Y+PjJdKSwwfChkPTB8YXJbaT4+Ml0pJiZkdShkKSk7aWYoIShrPTB8YXJbKGQ9ZSsyMHwwKT4+Ml0pKXJldHVybiBhclt0Pj4yXT0wLGFyWzQrdD4+Ml09MCxhcls4K3Q+PjJdPTAsb28oQSwyLDEwMix0KSwwPD0oMHx0clsxMSt0Pj4wXSl8fHZ1KDB8YXJbdD4+Ml0pLHVyPXM7aWYoISgwfFN0KGssMTc1MTQ3NjU3OSl8fDB8U3QoMHxhcltkPj4yXSwxNzUxNDc2NjAwKXx8MHxTdCgwfGFyW2Q+PjJdLDE4MzU2MjM5ODUpKSYmISgwfFN0KDB8YXJbZD4+Ml0sMTYzNTE1MDE4MikpKXJldHVybiBrPTY0K2F8MCxhclsodz04K2F8MCk+PjJdPTQ1MjQsaD0xMithfDAsYXJbYT4+Ml09MTg4LGFyW2s+PjJdPTIwOCxhcls0K2E+PjJdPTAsSmYoNjQrYXwwLGgpLGFyWzEzNithPj4yXT0wLGFyWzE0MCthPj4yXT0tMSxhclthPj4yXT00NTA0LGFyW2s+PjJdPTQ1NDQsYXJbdz4+Ml09NDUyNCxTZihoKSxhcltoPj4yXT00MzQwLGFyWyh3PTQ0K2F8MCk+PjJdPTAsYXJbdys0Pj4yXT0wLGFyW3crOD4+Ml09MCxhclt3KzEyPj4yXT0wLGFyWzYwK2E+PjJdPTI0LGFyW2I+PjJdPTAsYXJbNCtiPj4yXT0wLGFyWzgrYj4+Ml09MCxYZShoLGIpLCgwfHRyWzExK2I+PjBdKTwwJiZ2dSgwfGFyW2I+PjJdKSxXZShkPTgrYXwwLDI1Mzk1LDQ0KSxJZShDLGgpLG9vKEEsMywwLEMpLCgwfHRyW0MrMTE+PjBdKTwwJiZ2dSgwfGFyW0M+PjJdKSxhclthPj4yXT00NTA0LGFyW2s+PjJdPTQ1NDQsYXJbZD4+Ml09NDUyNCxhcltoPj4yXT00MzQwLCgwfHRyW3crMTE+PjBdKTwwJiZ2dSgwfGFyW3c+PjJdKSxrZihoKSxiZihrKSx1cj1zO2lmKCEoZD0wfGFyWyh2PWUrMzZ8MCk+PjJdKSlyZXR1cm4gYXJbbz4+Ml09MCxhcls0K28+PjJdPTAsYXJbOCtvPj4yXT0wLG9vKEEsMiwxMDQsbyksMDw9KDB8dHJbMTErbz4+MF0pfHx2dSgwfGFyW28+PjJdKSx1cj1zO1R0KGIsZCwxNzUxNDExODI2KSxrPTAhPSgwfChkPTB8YXJbYj4+Ml0pKSYmMCE9KDB8KEk9MHxxdShkLDEyOCwxMTI4LDApKSk/KGQ9SSxrPTB8YXJbNCtiPj4yXSwoaD1rKSYmYnUoayksaCk6ZD0wO2FyWyhoPWUrMjh8MCk+PjJdPWQsZD0wfGFyWyhDPWUrMzJ8MCk+PjJdLGFyW0M+PjJdPWssMHxkJiZkdShkKTswfChkPTB8YXJbNCtiPj4yXSkmJmR1KGQpO2lmKDB8KEM9MHxhcltoPj4yXSkmJjE4ODU5NTQ5MzIhPSgwfGFyW0MrNjA+PjJdKSlyZXR1cm4gYXJbYz4+Ml09MCxhcls0K2M+PjJdPTAsYXJbOCtjPj4yXT0wLG9vKEEsMiwxMTQsYyksMDw9KDB8dHJbMTErYz4+MF0pfHx2dSgwfGFyW2M+PjJdKSx1cj1zO1R0KGIsMHxhclt2Pj4yXSwxODg1OTU5Mjc3KSxrPTAhPSgwfChkPTB8YXJbYj4+Ml0pKSYmMCE9KDB8KEc9MHxxdShkLDEyOCwxMDk2LDApKSk/KGQ9RyxrPTB8YXJbNCtiPj4yXSwoaD1rKSYmYnUoayksaCk6ZD0wO2FyWyhoPWUrODR8MCk+PjJdPWQsZD0wfGFyWyhHPWUrODh8MCk+PjJdLGFyW0c+PjJdPWssMHxkJiZkdShkKTswfChkPTB8YXJbNCtiPj4yXSkmJmR1KGQpO2lmKCEoMHxhcltoPj4yXSkpcmV0dXJuIGFyW2w+PjJdPTAsYXJbNCtsPj4yXT0wLGFyWzgrbD4+Ml09MCxvbyhBLDIsMTA3LGwpLDA8PSgwfHRyWzExK2w+PjBdKXx8dnUoMHxhcltsPj4yXSksdXI9cztUdChiLDB8YXJbdj4+Ml0sMTc2ODk3NzAwOCksaz0wIT0oMHwoZD0wfGFyW2I+PjJdKSkmJjAhPSgwfChWPTB8cXUoZCwxMjgsOTY4LDApKSk/KGQ9VixrPTB8YXJbNCtiPj4yXSwoaD1rKSYmYnUoayksaCk6ZD0wO2FyWyh3PWUrMTAwfDApPj4yXT1kLGQ9MHxhclsoVj1lKzEwNHwwKT4+Ml0sYXJbVj4+Ml09aywwfGQmJmR1KGQpOzB8KGQ9MHxhcls0K2I+PjJdKSYmZHUoZCk7aWYoIShkPTB8YXJbdz4+Ml0pKXJldHVybiBhclt1Pj4yXT0wLGFyWzQrdT4+Ml09MCxhcls4K3U+PjJdPTAsb28oQSwyLDExMix1KSwwPD0oMHx0clsxMSt1Pj4wXSl8fHZ1KDB8YXJbdT4+Ml0pLHVyPXM7VHQoYixkLDE3Njg5NzMxNjcpLGs9MCE9KDB8KGQ9MHxhcltiPj4yXSkpJiYwIT0oMHwoRj0wfHF1KGQsMTI4LDkzNiwwKSkpPyhkPUYsaz0wfGFyWzQrYj4+Ml0sKGg9aykmJmJ1KGspLGgpOmQ9MDthclsoaD1lKzQ0fDApPj4yXT1kLGQ9MHxhclsoRj1lKzQ4fDApPj4yXSxhcltGPj4yXT1rLDB8ZCYmZHUoZCk7MHwoZD0wfGFyWzQrYj4+Ml0pJiZkdShkKTtpZighKDB8YXJbaD4+Ml0pKXJldHVybiBhcltSPj4yXT0wLGFyW1IrND4+Ml09MCxhcltSKzg+PjJdPTAsb28oQSwyLDEwOCxSKSwwPD0oMHx0cltSKzExPj4wXSl8fHZ1KDB8YXJbUj4+Ml0pLHVyPXM7VHQoYiwwfGFyW3c+PjJdLDE3Njg5NzU3MTMpLGQ9MHxhcltiPj4yXTtkb3tpZihkKXtpZighKGQ9MHxxdShkLDEyOCw5MDQsMCkpKXtrPWQ9MDticmVha31pZihrPTB8YXJbNCtiPj4yXSwhKGg9aykpe2s9aDticmVha31idShrKSxrPWh9ZWxzZSBrPWQ9MH13aGlsZSgwKTthclsoaD1lKzUyfDApPj4yXT1kLGQ9MHxhclsoUj1lKzU2fDApPj4yXSxhcltSPj4yXT1rLDB8ZCYmZHUoZCk7MHwoZD0wfGFyWzQrYj4+Ml0pJiZkdShkKTtpZighKDB8YXJbaD4+Ml0pKXJldHVybiBhcltOPj4yXT0wLGFyW04rND4+Ml09MCxhcltOKzg+PjJdPTAsb28oQSwyLDEwOSxOKSwwPD0oMHx0cltOKzExPj4wXSl8fHZ1KDB8YXJbTj4+Ml0pLHVyPXM7VHQoYiwwfGFyW3Y+PjJdLDE3Njg3MTQwODMpLGQ9MHxhcltiPj4yXTtkb3tpZihkKXtpZighKGQ9MHxxdShkLDEyOCwxMDY0LDApKSl7az1kPTA7YnJlYWt9aWYoaz0wfGFyWzQrYj4+Ml0sIShoPWspKXtrPWg7YnJlYWt9YnUoayksaz1ofWVsc2Ugaz1kPTB9d2hpbGUoMCk7YXJbKGg9ZSs2MHwwKT4+Ml09ZCxkPTB8YXJbKE49ZSs2NHwwKT4+Ml0sYXJbTj4+Ml09aywwfGQmJmR1KGQpOzB8KGQ9MHxhcls0K2I+PjJdKSYmZHUoZCk7aWYoISgwfGFyW2g+PjJdKSlyZXR1cm4gYXJbXz4+Ml09MCxhcltfKzQ+PjJdPTAsYXJbXys4Pj4yXT0wLG9vKEEsMiwxMTAsXyksMDw9KDB8dHJbXysxMT4+MF0pfHx2dSgwfGFyW18+PjJdKSx1cj1zO1R0KGIsMHxhclt2Pj4yXSwxNzY4MTg2MjI4KSxkPTB8YXJbYj4+Ml07ZG97aWYoZCl7aWYoIShkPTB8cXUoZCwxMjgsNjE2LDApKSl7az1kPTA7YnJlYWt9aWYoaD0wfGFyWzQrYj4+Ml0sIShrPWgpKWJyZWFrO2J1KGgpfWVsc2Ugaz1kPTB9d2hpbGUoMCk7YXJbZSs2OD4+Ml09ZCxkPTB8YXJbKF89ZSs3MnwwKT4+Ml0sYXJbXz4+Ml09aywwfGQmJmR1KGQpOzB8KGQ9MHxhcls0K2I+PjJdKSYmZHUoZCk7VHQoYiwwfGFyW3Y+PjJdLDE3NjkxMDQ3NDIpLGQ9MHxhcltiPj4yXTtkb3tpZihkKXtpZighKGQ9MHxxdShkLDEyOCw3MTIsMCkpKXtrPWQ9MDticmVha31pZihoPTB8YXJbNCtiPj4yXSwhKGs9aCkpYnJlYWs7YnUoaCl9ZWxzZSBrPWQ9MH13aGlsZSgwKTthcltlKzc2Pj4yXT1kLGQ9MHxhclsoXz1lKzgwfDApPj4yXSxhcltfPj4yXT1rLDB8ZCYmZHUoZCk7MHwoZD0wfGFyWzQrYj4+Ml0pJiZkdShkKTtUdChiLDB8YXJbdj4+Ml0sMTc2ODUxNzIyMiksZD0wfGFyW2I+PjJdO2Rve2lmKGQpe2lmKCEoZD0wfHF1KGQsMTI4LDEwMzIsMCkpKXtrPWQ9MDticmVha31pZihrPTB8YXJbNCtiPj4yXSwhKGg9aykpe2s9aDticmVha31idShrKSxrPWh9ZWxzZSBrPWQ9MH13aGlsZSgwKTthclsoaD1lKzkyfDApPj4yXT1kLGQ9MHxhclsoXz1lKzk2fDApPj4yXSxhcltfPj4yXT1rLDB8ZCYmZHUoZCk7MHwoZD0wfGFyWzQrYj4+Ml0pJiZkdShkKTtpZighKGQ9MHxhcltoPj4yXSkpcmV0dXJuIGFyW1E+PjJdPTAsYXJbUSs0Pj4yXT0wLGFyW1ErOD4+Ml09MCxvbyhBLDIsMTExLFEpLDA8PSgwfHRyW1ErMTE+PjBdKXx8dnUoMHxhcltRPj4yXSksdXI9czsoZnVuY3Rpb24oQSxlLHIpe2V8PTAscnw9MDt2YXIgaSxmLG4sdD0wLG89MDtpZihhclsoQXw9MCk+PjJdPTAsYXJbKG49QSs0fDApPj4yXT0wLCgoYXJbQSs4Pj4yXT0wKXwodD0wfGFyW2UrNDQ+PjJdKSkhPSgwfChmPTB8YXJbZSs0OD4+Ml0pKSl7aT1BKzh8MDtkb3tvPWU9MHxhclt0Pj4yXTtkb3tpZigoMHxhcltlKzIwPj4yXSk9PSgwfHIpKXtpZigoMHwoZT0wfGFyW24+PjJdKSk9PSgwfGFyW2k+PjJdKSl7VXQoQSx0KTticmVha31hcltlPj4yXT1vLG89MHxhclt0KzQ+PjJdLChhcltlKzQ+PjJdPW8pJiYoYnUobyksZT0wfGFyW24+PjJdKSxhcltuPj4yXT1lKzh9fXdoaWxlKDApO3Q9dCs4fDB9d2hpbGUoKDB8dCkhPSgwfGYpKX19KShiLGQsMTc2ODg0Mjg1MyksZD0wfGFyW2I+PjJdLHA9MHxhclsoVz00K2J8MCk+PjJdO0E6ZG97aWYoKDB8ZCk9PSgwfHApKVk9MTg2O2Vsc2UgZm9yKHk9RCsxMXwwLEI9ZSsxMDh8MCxYPUU9ZSsxMTJ8MCxaPWUrMTE2fDA7Oyl7az0wfGFyW2Q+PjJdO2Rve2lmKGspe2lmKCEoaD0wfHF1KGssMTI4LDFlMywwKSkpe2s9MCxZPTE2NDticmVha31pZihnPWgsKGs9MHxhcltkKzQ+PjJdKT9idShrKTprPTAsIWgpe1k9MTY0O2JyZWFrfW09MHxhcltoKzU2Pj4yXSwwfChyPWspJiZidShrKSxoPTB8YXJbRT4+Ml07ZG97aWYoaCl7Zm9yKHY9WDs7KWlmKHc9MHxhcltoKzE2Pj4yXSxtPj4+MDx3Pj4+MCl7aWYoISh3PTB8YXJbaD4+Ml0pKXtZPTE3MjticmVha312PWgsaD13fWVsc2V7aWYobT4+PjA8PXc+Pj4wKXtZPTE3NjticmVha31pZighKHc9MHxhclsodj1oKzR8MCk+PjJdKSl7WT0xNzU7YnJlYWt9aD13fWlmKDE3Mj09KDB8WSkpe1k9MCx2PXc9aDticmVha31pZigxNzU9PSgwfFkpKXtZPTAsdz1oO2JyZWFrfWlmKDE3Nj09KDB8WSkpe1k9MCx3PWg7YnJlYWt9fWVsc2Ugdj13PUV9d2hpbGUoMCk7aWYoMHxhclt2Pj4yXSl7aWYoIWspe2g9MDticmVha31kdShrKSxoPTA7YnJlYWt9aD0wfGh1KDI4KSxhcltoKzE2Pj4yXT1tLGFyW2grMjA+PjJdPWcsYXJbaCsyND4+Ml09cixhcltoPj4yXT0wLGFyW2grND4+Ml09MCxhcltoKzg+PjJdPXcsYXJbdj4+Ml09aCwodz0wfGFyW2FyW0I+PjJdPj4yXSkmJihhcltCPj4yXT13LGg9MHxhclt2Pj4yXSksc28oMHxhcltYPj4yXSxoKSxhcltaPj4yXT0xKygwfGFyW1o+PjJdKSxoPTB9ZWxzZSBrPTAsWT0xNjR9d2hpbGUoMCk7ZG97aWYoMTY0PT0oMHxZKSl7aWYoWT0wLGFyW0Q+PjJdPTAsYXJbRCs0Pj4yXT0wLGFyW0QrOD4+Ml09MCxvbyhBLDIsMTI1LEQpLDA8PSgwfHRyW3k+PjBdKSl7aD0xO2JyZWFrfXZ1KDB8YXJbRD4+Ml0pLGg9MX19d2hpbGUoMCk7aWYoMHxrJiZkdShrKSxkPWQrOHwwLDB8aClicmVhayBBO2lmKCgwfGQpPT0oMHxwKSl7WT0xODY7YnJlYWt9fX13aGlsZSgwKTsxODY9PSgwfFkpJiYoZT0wfGFyWyhRPTU2NTkyKSs0Pj4yXSxhclsoRD1BKT4+Ml09YXJbUT4+Ml0sYXJbRCs0Pj4yXT1lLHl1KEErOHwwLDU2NjAwKSk7aWYoMHwoZD0wfGFyW2I+PjJdKSl7aWYoKDB8KGs9MHxhcltXPj4yXSkpIT0oMHxkKSl7Zm9yKDtoPWsrLTh8MCxhcltXPj4yXT1oLCgwfChrPShrPTB8YXJbaystND4+Ml0pPyhkdShrKSwwfGFyW1c+PjJdKTpoKSkhPSgwfGQpOyk7ZD0wfGFyW2I+PjJdfXZ1KGQpfXVyPXN9KEEsZSx0KSx1cj0oKHI9MHxhclt0KzQ+PjJdKSYmZHUociksbyl9ZnVuY3Rpb24gc28oQSxlKXt2YXIgcj0wLGk9MCxmPTAsbj0wLHQ9MDtpZih0PSgwfChlfD0wKSk9PSgwfChBfD0wKSksdHJbZSsxMj4+MF09MSZ0LCF0KXtmb3IoOzspe2lmKHQ9MHxhcltlKzg+PjJdLDB8dHJbKGY9dCsxMnwwKT4+MF0pe3I9MjM7YnJlYWt9aWYoaT0wfGFyWyhuPXQrOHwwKT4+Ml0sKDB8KHI9MHxhcltpPj4yXSkpPT0oMHx0KSl7aWYoIShyPTB8YXJbaSs0Pj4yXSkpe3I9NzticmVha31pZigwfHRyWyhyPXIrMTJ8MCk+PjBdKXtyPTc7YnJlYWt9ZT1yfWVsc2V7aWYoIXIpe3I9MTY7YnJlYWt9aWYoMHx0clsocj1yKzEyfDApPj4wXSl7cj0xNjticmVha31lPXJ9aWYodHJbZj4+MF09MSx0PSgwfGkpPT0oMHxBKSx0cltpKzEyPj4wXT0xJnQsdHJbZT4+MF09MSx0KXtyPTIzO2JyZWFrfWU9aX1pZig3PT0oMHxyKSlyZXR1cm4gZj0oMHxhclt0Pj4yXSk9PSgwfGUpPyhlPXQsaSk6KHI9MHxhclsoQT10KzR8MCk+PjJdLGU9MHxhcltyPj4yXSxlPShhcltBPj4yXT1lKT8oYXJbZSs4Pj4yXT10LDB8YXJbbj4+Ml0pOmksYXJbcis4Pj4yXT1lLGU9MHxhcltuPj4yXSxhclsoKDB8YXJbZT4+Ml0pPT0oMHx0KT9lOmUrNHwwKT4+Ml09cixhcltyPj4yXT10LGFyW24+PjJdPXIsMHxhclsoZT1yKSs4Pj4yXSksdHJbZSsxMj4+MF09MSxlPSh0cltmKzEyPj4wXT0wKXxhcltmPj4yXSxpPTB8YXJbKHI9ZSs0fDApPj4yXSwwfChhcltmPj4yXT1pKSYmKGFyW2krOD4+Ml09ZiksdD1mKzh8MCxhcltlKzg+PjJdPWFyW3Q+PjJdLG49MHxhclt0Pj4yXSxhclsoKDB8YXJbbj4+Ml0pPT0oMHxmKT9uOm4rNHwwKT4+Ml09ZSxhcltyPj4yXT1mLHZvaWQoYXJbdD4+Ml09ZSk7aWYoMTY9PSgwfHIpKXJldHVybigwfGFyW3Q+PjJdKT09KDB8ZSk/KGY9MHxhclt0Pj4yXSxlPTB8YXJbKHI9Zis0fDApPj4yXSwoYXJbdD4+Ml09ZSkmJihhcltlKzg+PjJdPXQsaT0wfGFyW24+PjJdKSxhcltmKzg+PjJdPWksZT0wfGFyW24+PjJdLGFyWygoMHxhcltlPj4yXSk9PSgwfHQpP2U6ZSs0fDApPj4yXT1mLGFyW3I+PjJdPXQsYXJbbj4+Ml09ZixpPTB8YXJbKGU9ZikrOD4+Ml0pOmU9dCx0cltlKzEyPj4wXT0xLGU9KHRyW2krMTI+PjBdPTApfGFyWyh0PWkrNHwwKT4+Ml0scj0wfGFyW2U+PjJdLDB8KGFyW3Q+PjJdPXIpJiYoYXJbcis4Pj4yXT1pKSx0PWkrOHwwLGFyW2UrOD4+Ml09YXJbdD4+Ml0sbj0wfGFyW3Q+PjJdLGFyWygoMHxhcltuPj4yXSk9PSgwfGkpP246bis0fDApPj4yXT1lLGFyW2U+PjJdPWksdm9pZChhclt0Pj4yXT1lKX19ZnVuY3Rpb24ga28oQSxlLHIsaSxmKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTA7dmFyIG4sdCxvLGE7dXI9KG49dXIpKzE2fDAsbz1uLHQ9MHxodSg0OCksYXJbNCt0Pj4yXT0wLGFyWzgrdD4+Ml09MCxhclt0Pj4yXT02MTgwLGZ1bmN0aW9uKEEsZSxyLGksZil7ZXw9MCxyfD0wLGl8PTAsZnw9MDt2YXIgbj0wO2lmKGFyWyhBfD0wKT4+Ml09NDIzMixhclsobj1BKzh8MCk+PjJdPXIsYXJbbis0Pj4yXT1pLGFyWyhuPUErMTZ8MCk+PjJdPTAsYXJbbis0Pj4yXT0wLGFyWyhuPUErMjR8MCk+PjJdPTAsIWYpcmV0dXJuIGk9ZSxhclsoZj1BKzR8MCk+PjJdPWk7aT0wfHd1KGY9aT4+PjA8MHwwPT0oMHxpKSZyPj4+MDw0Mjk0OTY3Mjk1P3I6LTEpLGhiKDB8KGFyW24+PjJdPWkpLDB8ZSwwfHIpLGFyWyhmPUErNHwwKT4+Ml09aX0oYT0xNit0fDAscixpLDAsZiksYXJbbz4+Ml09YSxidShhcltvKzQ+PjJdPXQpLGJvKEEsZSxvKSxkdSh0KSxkdSh0KSx1cj1ufWZ1bmN0aW9uIGhvKEEsZSxyKXtBfD0wLHJ8PTA7dmFyIGksZj0wLG49MCx0PTA7aWYoZj0wfGFyWyhpPShlfD0wKSsxMTJ8MCk+PjJdKXtlPWksbj1mO0E6Zm9yKDs7KXtmb3IoZj1uOyEoKDB8YXJbZisxNj4+Ml0pPj4+MD49cj4+PjApOylpZighKGY9MHxhcltmKzQ+PjJdKSlicmVhayBBO2lmKCEobj0wfGFyW2Y+PjJdKSl7ZT1mO2JyZWFrfWU9Zn0oMHxlKSE9KDB8aSkmJigwfGFyW2UrMTY+PjJdKT4+PjA8PXI+Pj4wPyhmPTB8YXJbZSsyMD4+Ml0sKGU9MHxhcltlKzI0Pj4yXSk/YnUoZSk6ZT0wLGY/eXUoQSxmKzY0fDApOnQ9MTEpOihlPTAsdD0xMSl9ZWxzZSBlPTAsdD0xMTsxMT09KDB8dCkmJihhcltBPj4yXT0wLGFyW0ErND4+Ml09MCxhcltBKzg+PjJdPTApLGUmJmR1KGUpfWZ1bmN0aW9uIHdvKEEsZSxyKXtBfD0wLHJ8PTA7dmFyIGksZj0wLG49MCx0PTA7aWYoZj0wfGFyWyhpPShlfD0wKSsxMTJ8MCk+PjJdKXtlPWksbj1mO0E6Zm9yKDs7KXtmb3IoZj1uOyEoKDB8YXJbZisxNj4+Ml0pPj4+MD49cj4+PjApOylpZighKGY9MHxhcltmKzQ+PjJdKSlicmVhayBBO2lmKCEobj0wfGFyW2Y+PjJdKSl7ZT1mO2JyZWFrfWU9Zn0oMHxlKSE9KDB8aSkmJigwfGFyW2UrMTY+PjJdKT4+PjA8PXI+Pj4wPyhmPTB8YXJbZSsyMD4+Ml0sKGU9MHxhcltlKzI0Pj4yXSk/YnUoZSk6ZT0wLGY/eXUoQSxmKzg4fDApOnQ9MTEpOihlPTAsdD0xMSl9ZWxzZSBlPTAsdD0xMTsxMT09KDB8dCkmJihhcltBPj4yXT0wLGFyW0ErND4+Ml09MCxhcltBKzg+PjJdPTApLGUmJmR1KGUpfWZ1bmN0aW9uIHZvKEEsZSxyLGkpe0F8PTAscnw9MCxpfD0wO3ZhciBmLG4sdCxvO3JldHVybiB1cj0obz11cikrMzJ8MCxmPW8rMTJ8MCxuPW8sKHQ9MHxhclsoZXw9MCkrNDQ+PjJdKT8wfGFyWyhlPWUrNTJ8MCk+PjJdPyhIdChBLHQscixlLGkpLHZvaWQodXI9bykpOihhcltuPj4yXT0wLGFyW24rND4+Ml09MCxhcltuKzg+PjJdPTAsb28oQSwyLDEwOSxuKSx2b2lkKHVyPSgwPD0oMHx0cltuKzExPj4wXSl8fHZ1KDB8YXJbbj4+Ml0pLG8pKSk6KGFyW2Y+PjJdPTAsYXJbNCtmPj4yXT0wLGFyWzgrZj4+Ml09MCxvbyhBLDIsMTA4LGYpLDA8PSgwfHRyWzExK2Y+PjBdKXx8dnUoMHxhcltmPj4yXSksdm9pZCh1cj1vKSl9ZnVuY3Rpb24gbW8oQSxlLHIsaSl7QXw9MCxyfD0wLGl8PTA7dmFyIGYsbix0LG8sYSxjLGwsdSxiLHMsZCxrLGgsdyx2LG0sZyxaLHAseSxCLEU9MCxYPTAsVz0wLEk9MCxDPTAsRz0wLFY9MCxGPTAsUj0wLE49MCxfPTAsWT0wLFE9MCxEPTAsSj0wLE09MCxUPTAsVT0wLFM9MDtpZih1cj0oZD11cikrMzUyfDAsbD1kKzE5MnwwLEM9ZCszMjh8MCxWPWQrMzA0fDAsYj1kKzM0MHwwLHM9ZCszMTZ8MCx1PWQrMjkyfDAsVD1kKzQ4fDAsUj1kKzI4MHwwLEY9ZCsyNjh8MCxNPWQrMjR8MCxuPWQrMjU2fDAsdD0oYz1kKSsyNDh8MCxvPWQrMjMyfDAsYT1kKzIyNHwwLGY9ZCsyMTZ8MCwwfChXPTB8YXJbKEc9KGV8PTApKzExMnwwKT4+Ml0pKXtFPUcsST1XO0E6Zm9yKDs7KXtmb3IoWD1JOyEoKDB8YXJbWCsxNj4+Ml0pPj4+MD49cj4+PjApOylpZighKFg9MHxhcltYKzQ+PjJdKSlicmVhayBBO2lmKCEoST0wfGFyW1g+PjJdKSl7RT1YO2JyZWFrfUU9WH1pZigoMHxFKSE9KDB8RykmJigwfGFyW0UrMTY+PjJdKT4+PjA8PXI+Pj4wKXtFPUc7QTpmb3IoOzspe2ZvcihYPVc7ISgoMHxhcltYKzE2Pj4yXSk+Pj4wPj1yPj4+MCk7KWlmKCEoWD0wfGFyW1grND4+Ml0pKWJyZWFrIEE7aWYoIShXPTB8YXJbWD4+Ml0pKXtFPVg7YnJlYWt9RT1YfWlmKCgwfEUpIT0oMHxHKSYmKDB8YXJbRSsxNj4+Ml0pPj4+MDw9cj4+PjApaWYoVz0wfGFyW0UrMjA+PjJdLChFPTB8YXJbRSsyND4+Ml0pP2J1KEUpOkU9MCxYPVcpe2lmKHl1KGIsWCs2NHwwKSx5dShzLFgrODh8MCksZnVuY3Rpb24oQSxlKXtlfD0wO3ZhciByLGksZixuPTA7aWYoYXJbKEF8PTApPj4yXT0wLGFyWyhmPUErNHwwKT4+Ml09MCxhcltBKzg+PjJdPTAsbj0oMHxhclsoaT1lKzR8MCk+PjJdKS0oMHxhcltlPj4yXSl8MCwhKHI9bj4+NSkpcmV0dXJuOzEzNDIxNzcyNzxyPj4+MCYmemwoKTtpZihuPTB8aHUobiksYXJbZj4+Ml09bixhcltBPj4yXT1uLGFyW0ErOD4+Ml09bisocjw8NSksQT0wfGFyW2U+PjJdLGU9MHxhcltpPj4yXSwoMHxBKT09KDB8ZSkpcmV0dXJuO2Zvcig7YXJbbj4+Ml09YXJbQT4+Ml0sYXJbbis0Pj4yXT1hcltBKzQ+PjJdLGFyW24rOD4+Ml09YXJbQSs4Pj4yXSxhcltuKzEyPj4yXT1hcltBKzEyPj4yXSxEdChuKzE2fDAsQSsxNnwwKSxBPUErMzJ8MCxuPTMyKygwfGFyW2Y+PjJdKXwwLGFyW2Y+PjJdPW4sKDB8QSkhPSgwfGUpOyk7fSh1LDU2KygwfGFyWyhRPWUrNjB8MCk+PjJdKXwwKSwoMHwoWD0wfGFyW3U+PjJdKSkhPSgwfChXPTB8YXJbKFU9NCt1fDApPj4yXSkpKXtmb3IoSj0wO0o9KFY9KDB8YXJbWD4+Ml0pPT0oMHxyKSk/WDpKLCEoVnwoMHwoWD1YKzMyfDApKT09KDB8VykpOyk7aWYoSil7YXJbRj4+Ml09MCxhcltGKzQ+PjJdPTAsYXJbRis4Pj4yXT0wLG9vKGwsNCwzZTMsRiksKDB8dHJbRisxMT4+MF0pPDAmJnZ1KDB8YXJbRj4+Ml0pLFc9MHx0clsoST0xMStifDApPj4wXSxYPTB8YXJbKEM9NCtifDApPj4yXTtkb3tpZig0PT0oMHwoVzw8MjQ+PjI0PDA/WDoyNTUmVykpKXtpZigwfFl1KGIsMCwtMSwzMDI5OCw0KSl7Vz0wfHRyW0k+PjBdLFg9MHxhcltDPj4yXSxTPTcyO2JyZWFrfWFyW1Q+PjJdPTAsYXJbKEc9VCs0fDApPj4yXT0wLEh0KE0sKGFyW1QrOD4+Ml09MCl8YXJbZSs0ND4+Ml0scixlKzUyfDAsVCk7ZG97aWYoMHxhcltNPj4yXSlDPTB8YXJbKGU9TSkrND4+Ml0sYXJbKGk9QSk+PjJdPWFyW2U+PjJdLGFyW2krND4+Ml09QyxDPU0rOHwwLGFyWyhpPUErOHwwKT4+Ml09YXJbQz4+Ml0sYXJbaSs0Pj4yXT1hcltDKzQ+PjJdLGFyW2krOD4+Ml09YXJbQys4Pj4yXSxhcltDPj4yXT0wLGFyW0MrND4+Ml09MCxhcltDKzg+PjJdPTAsQz0xO2Vsc2V7Zm9yKCgwfChYPTB8YXJbVD4+Ml0pKT09KDB8KEM9MHxhcltHPj4yXSkpP3NyKDU1NzM5LDI1NTIwLDU2NSwyNTU3MSk6KFk9WCxfPTApOzspe2lmKFg9MHxhcltZKzQ+PjJdLDE3NTI1ODkxMjM9PSgwfGFyW1grMjA+PjJdKSl7ZG97aWYoWCl7aWYoIShYPTB8cXUoWCwxMjgsNjgwLDApKSl7RD1OPTA7YnJlYWt9aWYoIShJPVc9MHxhcltZKzg+PjJdKSl7Tj1YLEQ9STticmVha31idShXKSxOPVgsRD1JfWVsc2UgRD1OPTB9d2hpbGUoMCk7aWYoMHxfJiZkdShfKSxOKWJyZWFrO1g9RH1lbHNlIFg9XztpZigoMHwoWT1ZKzEyfDApKT09KDB8Qykpe1M9NDg7YnJlYWt9Xz1YfTQ4PT0oMHxTKSYmc3IoNTU3MzksMjU1MjAsNTY1LDI1NTcxKTtkb3tpZigwfG5vKE4saSkpWD0wfGFyW1E+PjJdLGFyW3Q+PjJdPWFyW2U+PjJdLEM9NCt0fDAsVz0wfGFyW2UrND4+Ml0sMHwoYXJbQz4+Ml09VykmJmJ1KFcpLE90KGMsWCxKLHQsZSs2OHwwLGkpLFg9MHxhclsoVz1jKSs0Pj4yXSxhclsoST1sKT4+Ml09YXJbVz4+Ml0sYXJbSSs0Pj4yXT1YLFg9Yys4fDAsKDB8dHJbKFc9KEk9OCtsfDApKzExfDApPj4wXSk8MD8odHJbYXJbST4+Ml0+PjBdPTAsYXJbMTIrbD4+Ml09MCk6KHRyW0k+PjBdPTAsdHJbVz4+MF09MCksQ3UoSSwwKSxhcltJPj4yXT1hcltYPj4yXSxhcltJKzQ+PjJdPWFyW1grND4+Ml0sYXJbSSs4Pj4yXT1hcltYKzg+PjJdLGFyW1g+PjJdPTAsYXJbWCs0Pj4yXT0wLChhcltYKzg+PjJdPTApfChYPTB8YXJbQz4+Ml0pJiZkdShYKSxYPTA7ZWxzZXtpZihhcltuPj4yXT0wLGFyWzQrbj4+Ml09MCxhcls4K24+PjJdPTAsb28oQSwyLDExNyxuKSwwPD0oMHx0clsxMStuPj4wXSkpe1g9MTticmVha312dSgwfGFyW24+PjJdKSxYPTF9fXdoaWxlKDApO2lmKCFEKXtDPVg7YnJlYWt9ZHUoRCksQz1YfX13aGlsZSgwKTtpZigoMHx0clsoWD1NKzh8MCkrMTE+PjBdKTwwJiZ2dSgwfGFyW1g+PjJdKSwwfChYPTB8YXJbVD4+Ml0pKXtpZigoMHwoVz0wfGFyW0c+PjJdKSkhPSgwfFgpKXtmb3IoO0k9VystMTJ8MCxhcltHPj4yXT1JLCgwfChXPShXPTB8YXJbVystND4+Ml0pPyhkdShXKSwwfGFyW0c+PjJdKTpJKSkhPSgwfFgpOyk7WD0wfGFyW1Q+PjJdfXZ1KFgpfUN8fChTPTExOCl9ZWxzZSBTPTcyfXdoaWxlKDApO2Rve2lmKDcyPT0oMHxTKSl7aWYoND09KDB8KFc8PDI0Pj4yNDwwP1g6MjU1JlcpKSYmMD09KDB8WXUoYiwwLC0xLDMwMzE4LDQpKSl7YXJbVD4+Ml09MCxhclsoUj1UKzR8MCk+PjJdPTAsSHQoTSwoYXJbVCs4Pj4yXT0wKXxhcltlKzQ0Pj4yXSxyLGUrNTJ8MCxUKTtkb3tpZigwfGFyW00+PjJdKUM9MHxhclsoZT1NKSs0Pj4yXSxhclsoaT1BKT4+Ml09YXJbZT4+Ml0sYXJbaSs0Pj4yXT1DLEM9TSs4fDAsYXJbKGk9QSs4fDApPj4yXT1hcltDPj4yXSxhcltpKzQ+PjJdPWFyW0MrND4+Ml0sYXJbaSs4Pj4yXT1hcltDKzg+PjJdLGFyW0M+PjJdPTAsYXJbQys0Pj4yXT0wLGFyW0MrOD4+Ml09MCxDPTE7ZWxzZXtYPTB8YXJbVD4+Ml0sVj0wfGFyW1I+PjJdO0E6ZG97aWYoKDB8WCk9PSgwfFYpKVg9MCxTPTg2O2Vsc2V7Zm9yKEc9WCxYPTA7Oyl7aWYoVz0wfGFyW0crND4+Ml0sMTYzNTEzNTgxMT09KDB8YXJbVysyMD4+Ml0pKXtkb3tpZihXKXtpZighKFc9MHxxdShXLDEyOCw2NDgsMCkpKXtGPVc9MDticmVha31pZighKEM9ST0wfGFyW0crOD4+Ml0pKXtGPUM7YnJlYWt9YnUoSSksRj1DfWVsc2UgRj1XPTB9d2hpbGUoMCk7aWYoMHxYJiZkdShYKSxXKWJyZWFrO1g9Rn1pZigoMHwoRz1HKzEyfDApKT09KDB8Vikpe1M9ODY7YnJlYWsgQX19KDB8KFc9KFg9VykrNjh8MCkpIT0oMHxpKSYmKGs9aSxoPTB8YXJbVz4+Ml0sdz0wfGFyW1grNzI+PjJdLEI9eT1wPVo9Zz1tPXY9dm9pZCAwLG09KEI9d3w9Qj15PXA9Wj1nPTApLSh2PWh8PTApfDAsKChnPTB8YXJbKHA9OCsoa3w9MCl8MCk+PjJdKS0oeT1aPTB8YXJbaz4+Ml0pfDApPj4+MDxtPj4+MD8oWiYmKCgwfGFyWyhnPWsrNHwwKT4+Ml0pIT0oMHx5KSYmKGFyW2c+PjJdPXkpLHZ1KHkpLGFyW3A+PjJdPTAsYXJbZz4+Ml09MCxnPWFyW2s+PjJdPTApLCgwfG0pPDAmJnpsKCksQj1nPDwxLCgwfChnPWc+Pj4wPDEwNzM3NDE4MjM/Qj4+PjA8bT4+PjA/bTpCOjIxNDc0ODM2NDcpKTwwJiZ6bCgpLHk9MHxodShnKSxhclsoQj1rKzR8MCk+PjJdPXksYXJbaz4+Ml09eSxhcltwPj4yXT15K2csaGIoMHx5LDB8aCwwfG0pLGFyW0I+PjJdPXkrbSk6KDB8KGc9KFo9dz0oaz0oWj0oMHxhclsocD1rKzR8MCk+PjJdKS1afDApPj4+MDxtPj4+MCk/aCtafDA6dyktdnwwKSYmd2IoMHx5LDB8aCwwfGcpLGc9eStnfDAsaz8oMHwoZz1CLVp8MCkpPD0wfHwoaGIoMHxhcltwPj4yXSwwfHcsMHxnKSxhcltwPj4yXT0oMHxhcltwPj4yXSkrZyk6KDB8YXJbcD4+Ml0pIT0oMHxnKSYmKGFyW3A+PjJdPWcpKSksWD0wfGFyW1E+PjJdLGFyW2E+PjJdPWFyW2U+PjJdLEM9NCthfDAsVz0wfGFyW2UrND4+Ml0sMHwoYXJbQz4+Ml09VykmJmJ1KFcpLE90KGMsWCxKLGEsZSs2OHwwLGkpLFg9MHxhclsoVz1jKSs0Pj4yXSxhclsoST1sKT4+Ml09YXJbVz4+Ml0sYXJbSSs0Pj4yXT1YLFg9Yys4fDAsKDB8dHJbKFc9KEk9OCtsfDApKzExfDApPj4wXSk8MD8odHJbYXJbST4+Ml0+PjBdPTAsYXJbMTIrbD4+Ml09MCk6KHRyW0k+PjBdPTAsdHJbVz4+MF09MCksQ3UoSSwwKSxhcltJPj4yXT1hcltYPj4yXSxhcltJKzQ+PjJdPWFyW1grND4+Ml0sYXJbSSs4Pj4yXT1hcltYKzg+PjJdLGFyW1g+PjJdPTAsYXJbWCs0Pj4yXT0wLChhcltYKzg+PjJdPTApfChYPTB8YXJbQz4+Ml0pJiZkdShYKSxXPTAsWD1GfX13aGlsZSgwKTtkb3tpZig4Nj09KDB8Uykpe2lmKGFyW28+PjJdPTAsYXJbNCtvPj4yXT0wLGFyWzgrbz4+Ml09MCxvbyhBLDIsMTMxLG8pLDA8PSgwfHRyWzExK28+PjBdKSl7Vz0xO2JyZWFrfXZ1KDB8YXJbbz4+Ml0pLFc9MX19d2hpbGUoMCk7aWYoIVgpe0M9VzticmVha31kdShYKSxDPVd9fXdoaWxlKDApO2lmKCgwfHRyWyhYPU0rOHwwKSsxMT4+MF0pPDAmJnZ1KDB8YXJbWD4+Ml0pLDB8KFg9MHxhcltUPj4yXSkpe2lmKCgwfChXPTB8YXJbUj4+Ml0pKSE9KDB8WCkpe2Zvcig7ST1XKy0xMnwwLGFyW1I+PjJdPUksKDB8KFc9KFc9MHxhcltXKy00Pj4yXSk/KGR1KFcpLDB8YXJbUj4+Ml0pOkkpKSE9KDB8WCk7KTtYPTB8YXJbVD4+Ml19dnUoWCl9aWYoQylicmVhaztTPTExODticmVha31YPTB8YXJbUT4+Ml0sYXJbZj4+Ml09YXJbZT4+Ml0sQz00K2Z8MCxXPTB8YXJbZSs0Pj4yXSwwfChhcltDPj4yXT1XKSYmYnUoVyksT3QoVCxYLEosZixlKzY4fDAsaSksWD0wfGFyWyhXPVQpKzQ+PjJdLGFyWyhJPWwpPj4yXT1hcltXPj4yXSxhcltJKzQ+PjJdPVgsWD1UKzh8MCwoMHx0clsoVz0oST04K2x8MCkrMTF8MCk+PjBdKTwwPyh0clthcltJPj4yXT4+MF09MCxhclsxMitsPj4yXT0wKToodHJbST4+MF09MCx0cltXPj4wXT0wKSxDdShJLDApLGFyW0k+PjJdPWFyW1g+PjJdLGFyW0krND4+Ml09YXJbWCs0Pj4yXSxhcltJKzg+PjJdPWFyW1grOD4+Ml0sYXJbWD4+Ml09MCxhcltYKzQ+PjJdPTAsKGFyW1grOD4+Ml09MCl8KFg9MHxhcltDPj4yXSkmJmR1KFgpLFM9MTE4fX13aGlsZSgwKTtkb3tpZigxMTg9PSgwfFMpKXtpZigoMHxhcltsPj4yXSk9PSgwfGFyWzE0MTQ4XSkpe009MHxhclsoaT01NjU5MikrND4+Ml0sYXJbKFQ9QSk+PjJdPWFyW2k+PjJdLGFyW1QrND4+Ml09TSx5dShBKzh8MCw1NjYwMCk7YnJlYWt9TT0wfGFyWyhpPWwpKzQ+PjJdLGFyWyhUPUEpPj4yXT1hcltpPj4yXSxhcltUKzQ+PjJdPU0sVD1BKzh8MCxBPTgrbHwwLGFyW1Q+PjJdPWFyW0E+PjJdLGFyW1QrND4+Ml09YXJbQSs0Pj4yXSxhcltUKzg+PjJdPWFyW0ErOD4+Ml0sYXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsYXJbQSs4Pj4yXT0wO2JyZWFrfX13aGlsZSgwKTsoMHx0clsoWD04K2x8MCkrMTE+PjBdKTwwJiZ2dSgwfGFyW1g+PjJdKX1lbHNlIFM9MjR9ZWxzZSBTPTI0O2lmKDI0PT0oMHxTKSYmKFc9VCs2NHwwLGFyWyhDPVQrOHwwKT4+Ml09NDUyNCxJPVQrMTJ8MCxhcltUPj4yXT0xODgsYXJbVz4+Ml09MjA4LEpmKFQrNjR8KGFyW1QrND4+Ml09MCksSSksYXJbVCsxMzY+PjJdPTAsYXJbVCsxNDA+PjJdPS0xLGFyW1Q+PjJdPTQ1MDQsYXJbVz4+Ml09NDU0NCxhcltDPj4yXT00NTI0LFNmKEkpLGFyW0k+PjJdPTQzNDAsYXJbKEM9VCs0NHwwKT4+Ml09MCxhcltDKzQ+PjJdPTAsYXJbQys4Pj4yXT0wLGFyW0MrMTI+PjJdPTAsYXJbVCs2MD4+Ml09MjQsYXJbbD4+Ml09MCxhcls0K2w+PjJdPTAsYXJbOCtsPj4yXT0wLFhlKEksbCksKDB8dHJbMTErbD4+MF0pPDAmJnZ1KDB8YXJbbD4+Ml0pLFdlKDB8TGYoMHxXZShYPVQrOHwwLDI1NTMzLDEzKSxyKSwyNTU0NywyMyksSWUoUixJKSxvbyhBLDIsMTE3LFIpLCgwfHRyW1IrMTE+PjBdKTwwJiZ2dSgwfGFyW1I+PjJdKSxhcltUPj4yXT00NTA0LGFyW1c+PjJdPTQ1NDQsYXJbWD4+Ml09NDUyNCxhcltJPj4yXT00MzQwLCgwfHRyW0MrMTE+PjBdKTwwJiZ2dSgwfGFyW0M+PjJdKSxrZihJKSxiZihXKSksMHwoWD0wfGFyW3U+PjJdKSl7aWYoKDB8KFc9MHxhcltVPj4yXSkpIT0oMHxYKSl7ZG97aWYoST1XKy0zMnwwLGFyW1U+PjJdPUksRj0wfGFyWyhWPVcrLTE2fDApPj4yXSl7aWYoKDB8KFc9MHxhclsoRz1XKy0xMnwwKT4+Ml0pKT09KDB8RikpVz1GO2Vsc2V7Zm9yKDtJPVcrLTQwfDAsYXJbRz4+Ml09SSwoMHwoVz0oQz0wfGFyW1crLTE2Pj4yXSk/KCgwfGFyWyhXPVcrLTEyfDApPj4yXSkhPSgwfEMpJiYoYXJbVz4+Ml09QyksdnUoQyksMHxhcltHPj4yXSk6SSkpIT0oMHxGKTspO1c9MHxhcltWPj4yXX12dShXKSxXPTB8YXJbVT4+Ml19ZWxzZSBXPUl9d2hpbGUoKDB8VykhPSgwfFgpKTtYPTB8YXJbdT4+Ml19dnUoWCl9KDB8dHJbMTErcz4+MF0pPDAmJnZ1KDB8YXJbcz4+Ml0pLCgwfHRyWzExK2I+PjBdKTwwJiZ2dSgwfGFyW2I+PjJdKX1lbHNlIFM9MTk7ZWxzZSBFPTAsUz0xOTtyZXR1cm4oMTk9PSgwfFMpJiYoYXJbVj4+Ml09MCxhcltWKzQ+PjJdPTAsYXJbVis4Pj4yXT0wLG9vKEEsNSwyZTMsViksKDB8dHJbVisxMT4+MF0pPDAmJnZ1KDB8YXJbVj4+Ml0pKSxFKT8oZHUoRSksdm9pZCh1cj1kKSk6dm9pZCh1cj1kKX19YXJbQz4+Ml09MCxhcltDKzQ+PjJdPTAsYXJbQys4Pj4yXT0wLG9vKEEsNSwyZTMsQyksdXI9KDA8PSgwfHRyW0MrMTE+PjBdKXx8dnUoMHxhcltDPj4yXSksZCl9ZnVuY3Rpb24gZ28oQSl7cmV0dXJuKEF8PTApPj4+MDw0PzE2OTA4ODAxPj4+KEE8PDMpJjI1NXwwOihzcig1NTczOSwyNTU5Nyw0NywyNTYxMSksMCl9ZnVuY3Rpb24gWm8oQSl7cmV0dXJuKEF8PTApPj4+MDw0PzE2ODQzMjY1Pj4+KEE8PDMpJjI1NXwwOihzcig1NTczOSwyNTU5Nyw2NiwyNTYzMiksMCl9ZnVuY3Rpb24gcG8oQSl7dmFyIGUscixpPTAsZj0wLG49MDtpZigoMHwoaT0wfGFyWyhlPShBfD0wKSs1NnwwKT4+Ml0pKSE9KDB8KHI9QSs2MHwwKSkpZm9yKG49aTs7KXtpZigwfChpPTB8YXJbbis0ND4+Ml0pJiZtdShpKSxpPTB8YXJbbis0Pj4yXSlmb3IoO2Y9MHxhcltpPj4yXTspaT1mO2Vsc2UgaWYoaT0wfGFyWyhmPW4rOHwwKT4+Ml0sKDB8YXJbaT4+Ml0pIT0oMHxuKSlmb3IoO249MHxhcltmPj4yXSxpPTB8YXJbKGY9bis4fDApPj4yXSwoMHxhcltpPj4yXSkhPSgwfG4pOyk7aWYoKDB8aSk9PSgwfHIpKWJyZWFrO249aX0hZnVuY3Rpb24gQShlLHIpe2V8PTA7cnw9MDtyZXR1cm4gcj8oQShlLDB8YXJbcj4+Ml0pLEEoZSwwfGFyW3IrND4+Ml0pLHZvaWQgdnUocikpOnZvaWQgMH0oZSwwfGFyW3I+PjJdKSwwfChpPTB8YXJbQSs1Mj4+Ml0pJiZkdShpKSwwfChpPTB8YXJbQSs0ND4+Ml0pJiZkdShpKSwoMHx0clsoaT1BKzh8MCkrMTE+PjBdKTwwJiZ2dSgwfGFyW2k+PjJdKSwoaT0wfGFyW0ErND4+Ml0pJiZrdShpKX1mdW5jdGlvbiB5byhBLGUscixpLGYpe2V8PTAscnw9MCxpfD0wLGZ8PTAsYXJbKEF8PTApKzI0Pj4yXT1lLGFyW0ErMjg+PjJdPXIsYXJbQSszMj4+Ml09aSxhcltBKzM2Pj4yXT1mfWZ1bmN0aW9uIEJvKEEsZSxyLGksZil7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wO3ZhciBuLHQsbz0wLGE9MDtpZih1cj0odD11cikrNjR8MCx0clsobz0obj10KSszMnwwKT4+MF09MCxhclsoYT1vKzR8MCk+PjJdPTAsYXJbYSs0Pj4yXT0wLGFyW2ErOD4+Ml09MCxhclthKzEyPj4yXT0wLGFyW2ErMTY+PjJdPTAsYXJbYSsyMD4+Ml09MCwhKChhclthKzI0Pj4yXT0wKXxmdW5jdGlvbihBLGUscixpLGYpe0F8PTAscnw9MCxpfD0wLGZ8PTA7dmFyIG49MCx0PTA7KDB8KGV8PTApKTw9LTEmJnNyKDI1Njg2LDI1NTk3LDE1NywyNTY5Nyk7KDB8cik8PS0xJiZzcigyNTcwMywyNTU5NywxNTgsMjU2OTcpOygwfGkpPD0wJiZzcigyNTcxNSwyNTU5NywxNTksMjU2OTcpOzMzPD0oMHxpKSYmc3IoMjU3MzAsMjU1OTcsMTYwLDI1Njk3KTthcltBKzQ+PjJdPWUsYXJbQSs4Pj4yXT1yLG49NjQ8KG49ZSsxJi0yKT4+PjA/bjo2NCxhcltBKzEyPj4yXT1uLHI9NjQ8KHI9cisxJi0yKT4+PjA/cjo2NCxhcltBKzE2Pj4yXT1yLGU9MTE9PSgwfGYpJjMyPT0oMHwoZT0yND09KDB8aSkmMTA9PSgwfGYpPzg6aSkpPzg6ZSwxNzw9KDB8Y3JbQT4+MF0pJiZzcigyNTc0NiwyNTU5NywxODEsMjU2OTcpO3N3aXRjaChlPSg3KygyNTUmKHRyW0E+PjBdPWUpKXwwKT4+PjMsMHxmKXtjYXNlIDM6Y2FzZSAyOmNhc2UgMTpjYXNlIDA6Y2FzZSA5OTp0PTE7YnJlYWs7Y2FzZSAxNDpjYXNlIDEyOmNhc2UgMTA6dD0zO2JyZWFrO2Nhc2UgMTU6Y2FzZSAxMzpjYXNlIDExOnQ9NDticmVhaztkZWZhdWx0OnNyKDU1NzM5LDI1NTk3LDExOCwyNTY1Myl9cmV0dXJuIHQ9MTUrKDB8YnIoMHxicih0LGUpLG4pKSYtMTYsYXJbQSsyOD4+Ml09dCx0PTB8d3UoMTV8YnIodCxyKSksYXJbQSsyND4+Ml09dCxmPTE1JnQsYXJbQSsyMD4+Ml09MD09KDB8Zik/dDp0KygxNi1mKXwwLDF9KG8scixpLGYsMHxhcltBKzM2Pj4yXSkpKXJldHVybiB1cj10LChBPTApfEE7YT1BKzU2fDAsYXJbbj4+Ml09YXJbbz4+Ml0sYXJbbis0Pj4yXT1hcltvKzQ+PjJdLGFyW24rOD4+Ml09YXJbbys4Pj4yXSxhcltuKzEyPj4yXT1hcltvKzEyPj4yXSxhcltuKzE2Pj4yXT1hcltvKzE2Pj4yXSxhcltuKzIwPj4yXT1hcltvKzIwPj4yXSxhcltuKzI0Pj4yXT1hcltvKzI0Pj4yXSxhcltuKzI4Pj4yXT1hcltvKzI4Pj4yXSxyPTB8YXJbKGk9QSs2MHwwKT4+Ml07ZG97aWYocil7Zm9yKGY9QSs2MHwwOzspaWYoKDB8ZSk8KDB8KGk9MHxhcltyKzE2Pj4yXSkpKXtpZighKGk9MHxhcltyPj4yXSkpe2k9NzticmVha31mPXIscj1pfWVsc2V7aWYoKDB8ZSk8PSgwfGkpKXtpPTExO2JyZWFrfWlmKCEoaT0wfGFyWyhmPXIrNHwwKT4+Ml0pKXtpPTEwO2JyZWFrfXI9aX1pZig3PT0oMHxpKSl7Zj1vPXI7YnJlYWt9aWYoMTA9PSgwfGkpKXtvPXI7YnJlYWt9aWYoMTE9PSgwfGkpKXtvPXI7YnJlYWt9fWVsc2UgZj1vPWl9d2hpbGUoMCk7cmV0dXJuIDB8YXJbZj4+Ml18fChyPTB8aHUoNTIpLGFyW3IrMTY+PjJdPWUsYXJbKGk9cisyMHwwKT4+Ml09YXJbbj4+Ml0sYXJbaSs0Pj4yXT1hcltuKzQ+PjJdLGFyW2krOD4+Ml09YXJbbis4Pj4yXSxhcltpKzEyPj4yXT1hcltuKzEyPj4yXSxhcltpKzE2Pj4yXT1hcltuKzE2Pj4yXSxhcltpKzIwPj4yXT1hcltuKzIwPj4yXSxhcltpKzI0Pj4yXT1hcltuKzI0Pj4yXSxhcltpKzI4Pj4yXT1hcltuKzI4Pj4yXSxhcltyPj4yXT0wLGFyW3IrND4+Ml09MCxhcltyKzg+PjJdPW8sYXJbZj4+Ml09ciwoaT0wfGFyW2FyW2E+PjJdPj4yXSkmJihhclthPj4yXT1pLHI9MHxhcltmPj4yXSksc28oMHxhcltBKzYwPj4yXSxyKSxhclsoQT1BKzY0fDApPj4yXT0xKygwfGFyW0E+PjJdKSksdXI9dCwwfChBPTEpfWZ1bmN0aW9uIEVvKEEsZSl7ZXw9MDt2YXIgcixpPTAsZj0wO2lmKDB8KGk9MHxhclsocj0oQXw9MCkrNjB8MCk+PjJdKSl7QT1yLGY9aTtBOmZvcig7Oyl7Zm9yKGk9ZjshKCgwfGFyW2krMTY+PjJdKT49KDB8ZSkpOylpZighKGk9MHxhcltpKzQ+PjJdKSlicmVhayBBO2lmKCEoZj0wfGFyW2k+PjJdKSl7QT1pO2JyZWFrfUE9aX1pZigoMHxBKSE9KDB8cikmJigwfGFyW0ErMTY+PjJdKTw9KDB8ZSkpcmV0dXJuIDB8KGU9KDB8KGU9QSkpIT0oMHxyKSl9cmV0dXJuIDB8KGU9KDB8KGU9cikpIT0oMHxyKSl9ZnVuY3Rpb24gWG8oQSxlKXtlfD0wO3ZhciByLGk9MCxmPTA7aWYoIShpPTB8YXJbKHI9KEF8PTApKzYwfDApPj4yXSkpcmV0dXJuIDB8KGU9LTEpO0E9cixmPWk7QTpmb3IoOzspe2ZvcihpPWY7ISgoMHxhcltpKzE2Pj4yXSk+PSgwfGUpKTspaWYoIShpPTB8YXJbaSs0Pj4yXSkpYnJlYWsgQTtpZighKGY9MHxhcltpPj4yXSkpe0E9aTticmVha31BPWl9cmV0dXJuKDB8QSk9PSgwfHIpfHwoMHxhcltBKzE2Pj4yXSk+KDB8ZSk/MHwoZT0tMSk6MHwoZT0wfGFyW0ErMjQ+PjJdKX1mdW5jdGlvbiBXbyhBLGUpe2V8PTA7dmFyIHIsaT0wLGY9MDtpZighKGk9MHxhclsocj0oQXw9MCkrNjB8MCk+PjJdKSlyZXR1cm4gMHwoZT0tMSk7QT1yLGY9aTtBOmZvcig7Oyl7Zm9yKGk9ZjshKCgwfGFyW2krMTY+PjJdKT49KDB8ZSkpOylpZighKGk9MHxhcltpKzQ+PjJdKSlicmVhayBBO2lmKCEoZj0wfGFyW2k+PjJdKSl7QT1pO2JyZWFrfUE9aX1yZXR1cm4oMHxBKT09KDB8cil8fCgwfGFyW0ErMTY+PjJdKT4oMHxlKT8wfChlPS0xKTowfChlPTB8YXJbQSsyOD4+Ml0pfWZ1bmN0aW9uIElvKEEsZSl7ZXw9MDt2YXIgcixpLGYsbix0PTAsbz0wLGE9MCxjPTAsbD0wO2lmKGFyWyhpPShBfD0wKSs0fDApPj4yXT0wLG49QSs0fChhclsoZj1BKzh8MCk+PjJdPTApLGFyW0E+PjJdPW4sKDB8KHQ9MHxhcltlKzU2Pj4yXSkpIT0oMHwocj1lKzYwfDApKSlmb3IobD10LGU9MDs7KXtjPWwrMTZ8MDtkb3tpZihlKXtmb3IoYT0wfGFyW2M+PjJdLG89aTs7KXtpZigoMHxhKTwoMHwodD0wfGFyW2UrMTY+PjJdKSkpe2lmKCEodD0wfGFyW2U+PjJdKSl7dD05O2JyZWFrfX1lbHNle2lmKCgwfGEpPD0oMHx0KSl7dD0xMzticmVha31pZighKHQ9MHxhclsobz1lKzR8MCk+PjJdKSl7dD0xMjticmVha31lPW99bz1lLGU9dH1pZig5PT0oMHx0KSl7bz1hPWU7YnJlYWt9aWYoMTI9PSgwfHQpKXthPWU7YnJlYWt9aWYoMTM9PSgwfHQpKXthPWU7YnJlYWt9fWVsc2Ugbz1hPW59d2hpbGUoMCk7aWYoMHxhcltvPj4yXXx8KGU9MHxodSgyMCksYXJbZSsxNj4+Ml09YXJbYz4+Ml0sYXJbZT4+Ml09MCxhcltlKzQ+PjJdPTAsYXJbZSs4Pj4yXT1hLGFyW28+PjJdPWUsKHQ9MHxhclthcltBPj4yXT4+Ml0pJiYoYXJbQT4+Ml09dCxlPTB8YXJbbz4+Ml0pLHNvKDB8YXJbaT4+Ml0sZSksYXJbZj4+Ml09MSsoMHxhcltmPj4yXSkpLGU9MHxhcltsKzQ+PjJdKWZvcig7dD0wfGFyW2U+PjJdOyllPXQ7ZWxzZSBpZihlPTB8YXJbKHQ9bCs4fDApPj4yXSwoMHxhcltlPj4yXSkhPSgwfGwpKWZvcig7bD0wfGFyW3Q+PjJdLGU9MHxhclsodD1sKzh8MCk+PjJdLCgwfGFyW2U+PjJdKSE9KDB8bCk7KTtpZigoMHxlKT09KDB8cikpYnJlYWs7bD1lLGU9MHxhcltuPj4yXX19ZnVuY3Rpb24gQ28oQSxlKXtyZXR1cm4gQXw9MCwoZXw9MCkmJihDbyhBLDB8YXJbZT4+Ml0pLENvKEEsMHxhcltlKzQ+PjJdKSx2b2lkIHZ1KGUpKX1mdW5jdGlvbiBHbyhBLGUpe0F8PTA7dmFyIHIsaT0wLGY9MDtpZigxMD09KDB8KGV8PTApKSlzd2l0Y2goMHxhcltBKzM2Pj4yXSl7Y2FzZSAxMTpyZXR1cm4gMHwoZT0zMik7Y2FzZSAxNDpjYXNlIDEyOnJldHVybiAwfChlPTQ4KTtjYXNlIDE1OmNhc2UgMTM6cmV0dXJuIDB8KGU9NjQpO2Nhc2UgMTA6cmV0dXJuIDB8KGU9MjQpO2RlZmF1bHQ6cmV0dXJuIDB8KGU9LTEpfWlmKGk9MHxhclsocj1BKzYwfDApPj4yXSl7QT1yLGY9aTtBOmZvcig7Oyl7Zm9yKGk9ZjshKCgwfGFyW2krMTY+PjJdKT49KDB8ZSkpOylpZighKGk9MHxhcltpKzQ+PjJdKSlicmVhayBBO2lmKCEoZj0wfGFyW2k+PjJdKSl7QT1pO2JyZWFrfUE9aX1BPSgwfEEpIT0oMHxyKSYmKDB8YXJbQSsxNj4+Ml0pPD0oMHxlKT8wfHRyW0ErMjA+PjBdOi0xfWVsc2UgQT0tMTtyZXR1cm4gMjU2PD0oQT03KygyNTUmQSkmNTA0KT4+PjAmJnNyKDI1NzY0LDI1NTk3LDM2MiwyNTc3NSksMHwoZT0yNTUmQSl9ZnVuY3Rpb24gVm8oQSxlKXtlfD0wO3ZhciByLGk9MCxmPTA7aWYoIShpPTB8YXJbKHI9KEF8PTApKzYwfDApPj4yXSkpcmV0dXJuIDB8KGU9LTEpO0E9cixmPWk7QTpmb3IoOzspe2ZvcihpPWY7ISgoMHxhcltpKzE2Pj4yXSk+PSgwfGUpKTspaWYoIShpPTB8YXJbaSs0Pj4yXSkpYnJlYWsgQTtpZighKGY9MHxhcltpPj4yXSkpe0E9aTticmVha31BPWl9cmV0dXJuKDB8QSk9PSgwfHIpfHwoMHxhcltBKzE2Pj4yXSk+KDB8ZSk/MHwoZT0tMSk6MHwoZT0wfHRyW0ErMjA+PjBdKX1mdW5jdGlvbiBGbyhBLGUscil7ZXw9MCxyfD0wO3ZhciBpLGY9MCxuPTA7aWYoIShmPTB8YXJbKGk9KEF8PTApKzYwfDApPj4yXSkpcmV0dXJuKHI9MCl8cjtBPWksbj1mO0E6Zm9yKDs7KXtmb3IoZj1uOyEoKDB8YXJbZisxNj4+Ml0pPj0oMHxlKSk7KWlmKCEoZj0wfGFyW2YrND4+Ml0pKWJyZWFrIEE7aWYoIShuPTB8YXJbZj4+Ml0pKXtBPWY7YnJlYWt9QT1mfXJldHVybigwfEEpPT0oMHxpKXx8KDB8YXJbQSsxNj4+Ml0pPigwfGUpPyhyPTApfHI6KDB8ciYmKGFyW3I+PjJdPWFyW0ErNDg+PjJdKSwwfChyPTB8YXJbQSs0MD4+Ml0pKX1mdW5jdGlvbiBSbyhBLGUscil7ZXw9MCxyfD0wO3ZhciBpLGY9MCxuPTA7aWYoIShmPTB8YXJbKGk9KEF8PTApKzYwfDApPj4yXSkpcmV0dXJuKHI9MCl8cjtBPWksbj1mO0E6Zm9yKDs7KXtmb3IoZj1uOyEoKDB8YXJbZisxNj4+Ml0pPj0oMHxlKSk7KWlmKCEoZj0wfGFyW2YrND4+Ml0pKWJyZWFrIEE7aWYoIShuPTB8YXJbZj4+Ml0pKXtBPWY7YnJlYWt9QT1mfXJldHVybigwfEEpPT0oMHxpKXx8KDB8YXJbQSsxNj4+Ml0pPigwfGUpPyhyPTApfHI6KDB8ciYmKGFyW3I+PjJdPWFyW0ErNDg+PjJdKSwwfChyPTB8YXJbQSs0MD4+Ml0pKX1mdW5jdGlvbiBObyhBLGUscixpKXtBfD0wLHJ8PTAsaXw9MDt2YXIgZixuPTAsdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wO2lmKGI9NjArKDB8YXJbKGV8PTApPj4yXSl8MCxsPTA9PSgwfCh1PTB8YXJbYj4+Ml0pKSlkPW49cz0tMTtlbHNle249YixvPXU7QTpmb3IoOzspe2Zvcih0PW87ISgoMHxhclt0KzE2Pj4yXSk+PSgwfHIpKTspaWYoISh0PTB8YXJbdCs0Pj4yXSkpYnJlYWsgQTtpZighKG89MHxhclt0Pj4yXSkpe249dDticmVha31uPXR9aWYoYz0oMHxuKSE9KDB8YikmJigwfGFyW24rMTY+PjJdKTw9KDB8cik/MHxhcltuKzI0Pj4yXTotMSxsKXM9YyxkPW49LTE7ZWxzZXtuPWIsbz11O0E6Zm9yKDs7KXtmb3IodD1vOyEoKDB8YXJbdCsxNj4+Ml0pPj0oMHxyKSk7KWlmKCEodD0wfGFyW3QrND4+Ml0pKWJyZWFrIEE7aWYoIShvPTB8YXJbdD4+Ml0pKXtuPXQ7YnJlYWt9bj10fWlmKGE9KDB8bikhPSgwfGIpJiYoMHxhcltuKzE2Pj4yXSk8PSgwfHIpPzB8YXJbbisyOD4+Ml06LTEsbClzPWMsbj0tMSxkPWE7ZWxzZXtuPWIsbz11O0E6Zm9yKDs7KXtmb3IodD1vOyEoKDB8YXJbdCsxNj4+Ml0pPj0oMHxyKSk7KWlmKCEodD0wfGFyW3QrND4+Ml0pKWJyZWFrIEE7aWYoIShvPTB8YXJbdD4+Ml0pKXtuPXQ7YnJlYWt9bj10fWQ9KG49KDB8bikhPSgwfGIpJiYoMHxhcltuKzE2Pj4yXSk8PSgwfHIpPyhzPWMsMHx0cltuKzIwPj4wXSk6KHM9YywtMSksYSl9fX1pZihCbyhBLGkscyxkLDI1NSZuKSxsPTB8YXJbZT4+Ml0sdT0wPT0oMHwobz0wfGFyWyhmPWwrNjB8MCk+PjJdKSkpYj1lPTA7ZWxzZXtuPWYsYT1vO0E6Zm9yKDs7KXtmb3IodD1hOyEoKDB8YXJbdCsxNj4+Ml0pPj0oMHxyKSk7KWlmKCEodD0wfGFyW3QrND4+Ml0pKWJyZWFrIEE7aWYoIShhPTB8YXJbdD4+Ml0pKXtuPXQ7YnJlYWt9bj10fWI9KDB8bikhPSgwfGYpJiYoMHxhcltuKzE2Pj4yXSk8PSgwfHIpPyhlPTB8YXJbbis0MD4+Ml0sMHxhcltuKzQ4Pj4yXSk6ZT0wfWlmKHQ9MHxhclsoYz1BKzYwfDApPj4yXSl7bj1jO0E6Zm9yKDs7KXtmb3IoYT10OyEoKDB8YXJbYSsxNj4+Ml0pPj0oMHxpKSk7KXtpZighKHQ9MHxhclthKzQ+PjJdKSlicmVhayBBO2E9dH1pZighKHQ9MHxhclthPj4yXSkpe249YTticmVha31uPWF9YT0oMHxuKSE9KDB8YykmJigwfGFyW24rMTY+PjJdKTw9KDB8aSk/KGM9MHxhcltuKzQwPj4yXSwwfGFyW24rNDg+PjJdKTpjPTB9ZWxzZSBhPWM9MDtBOmRve2lmKDEwIT0oMHxyKSl7aWYodSluPS0xO2Vsc2V7bj1mO2U6Zm9yKDs7KXtmb3IodD1vOyEoKDB8YXJbdCsxNj4+Ml0pPj0oMHxyKSk7KWlmKCEodD0wfGFyW3QrND4+Ml0pKWJyZWFrIGU7aWYoIShvPTB8YXJbdD4+Ml0pKXtuPXQ7YnJlYWt9bj10fW49KDB8bikhPSgwfGYpJiYoMHxhcltuKzE2Pj4yXSk8PSgwfHIpPzB8dHJbbisyMD4+MF06LTF9aWYoKG49NysoMjU1Jm4pfDApPj4+MDwyNTYpe2s9KDI1NSZuKT4+PjM7YnJlYWt9c3IoMjU3NjQsMjU1OTcsMzYyLDI1Nzc1KX1lbHNlIHN3aXRjaCgwfGFyW2wrMzY+PjJdKXtjYXNlIDEwOms9MzticmVhayBBO2Nhc2UgMTE6az00O2JyZWFrIEE7Y2FzZSAxNDpjYXNlIDEyOms9NjticmVhayBBO2Nhc2UgMTU6Y2FzZSAxMzprPTg7YnJlYWsgQTtkZWZhdWx0Oms9MzE7YnJlYWsgQX19d2hpbGUoMCk7aWYodD0wfGJyKDI1NSZrLHMpLDA8KDB8ZCkpZm9yKG49MDtoYihjKygwfGJyKG4sYSkpfDAsZSsoMHxicihuLGIpKXwwLDB8dCksKDB8KG49bisxfDApKSE9KDB8ZCk7KTt9ZnVuY3Rpb24gX28oQSxlLHIsaSl7QXw9MCxyfD0wLGl8PTA7dmFyIGYsbix0LG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MDt1cj0odD11cikrNjR8MCxmPXQrMzJ8MCxuPXQsdT0ocz0wfGFyWyhlfD0wKT4+Ml0pKzU2fDAsYj0wfGFyWyhvPXMrNjB8MCk+PjJdO2Rve2lmKGIpe2ZvcihjPXMrNjB8MCxvPWI7OylpZigoMHxyKTwoMHwoYT0wfGFyW28rMTY+PjJdKSkpe2lmKCEoYT0wfGFyW28+PjJdKSl7YT02O2JyZWFrfWM9byxvPWF9ZWxzZXtpZigoMHxyKTw9KDB8YSkpe2E9MTA7YnJlYWt9aWYoIShhPTB8YXJbKGM9bys0fDApPj4yXSkpe2E9OTticmVha31vPWF9aWYoNj09KDB8YSkpe2M9bD1vO2JyZWFrfWlmKDk9PSgwfGEpKXtsPW87YnJlYWt9aWYoMTA9PSgwfGEpKXtsPW87YnJlYWt9fWVsc2UgYz1sPW99d2hpbGUoMCk7aWYoKG89MHxhcltjPj4yXSl8fChhPTB8aHUoNTIpLGFyW2ErMTY+PjJdPXIsYXJbKG89YSsyMHwwKT4+Ml09MCxhcltvKzQ+PjJdPTAsYXJbbys4Pj4yXT0wLGFyW28rMTI+PjJdPTAsYXJbbysxNj4+Ml09MCxhcltvKzIwPj4yXT0wLGFyW28rMjQ+PjJdPTAsYXJbbysyOD4+Ml09MCxhclthPj4yXT0wLGFyW2ErND4+Ml09MCxhclthKzg+PjJdPWwsYXJbYz4+Ml09YSxvPShvPTB8YXJbYXJbdT4+Ml0+PjJdKT8oYXJbdT4+Ml09bywwfGFyW2M+PjJdKTphLHNvKDB8YXJbcys2MD4+Ml0sbyksYXJbKGI9cys2NHwwKT4+Ml09MSsoMHxhcltiPj4yXSksYj0wfGFyW2U+PjJdLG89YSxiPTB8YXJbKHM9YikrNjA+PjJdKSx1PW8rMjB8MCxhcltmPj4yXT1hclt1Pj4yXSxhcls0K2Y+PjJdPWFyW3UrND4+Ml0sYXJbOCtmPj4yXT1hclt1Kzg+PjJdLGFyWzEyK2Y+PjJdPWFyW3UrMTI+PjJdLGFyWzE2K2Y+PjJdPWFyW3UrMTY+PjJdLGFyWzIwK2Y+PjJdPWFyW3UrMjA+PjJdLGFyWzI0K2Y+PjJdPWFyW3UrMjQ+PjJdLGFyWzI4K2Y+PjJdPWFyW3UrMjg+PjJdLHU9cys1NnwwLGw9cys2MHwwLDB8Yil7Yz1sLGE9YjtBOmZvcig7Oyl7Zm9yKG89YTshKCgwfGFyW28rMTY+PjJdKT49KDB8cikpOylpZighKG89MHxhcltvKzQ+PjJdKSlicmVhayBBO2lmKCEoYT0wfGFyW28+PjJdKSl7Yz1vO2JyZWFrfWM9b31pZigoMHxjKSE9KDB8bCkmJigwfGFyW2MrMTY+PjJdKTw9KDB8cikpe2lmKG89MHxhcltjKzQ+PjJdKWZvcig7YT0wfGFyW28+PjJdOylvPWE7ZWxzZSBpZihvPTB8YXJbKGE9Yys4fDApPj4yXSwoMHxhcltvPj4yXSkhPSgwfGMpKWZvcig7cj0wfGFyW2E+PjJdLG89MHxhclsoYT1yKzh8MCk+PjJdLCgwfGFyW28+PjJdKSE9KDB8cik7KTsoMHxhclt1Pj4yXSk9PSgwfGMpJiYoYXJbdT4+Ml09byksYXJbKHI9cys2NHwwKT4+Ml09KDB8YXJbcj4+Ml0pLTEsZnVuY3Rpb24oQSxlKXtBfD0wO3ZhciByLGksZixuPTAsdD0wLG89MCxhPTAsYz0wLGw9MCx1PTA7aWYodD0wfGFyWyhlfD0wKT4+Ml0paWYobj0wfGFyW2UrND4+Ml0pZm9yKDs7KXtpZighKHQ9MHxhcltuPj4yXSkpe3Q9MDticmVha31uPXR9ZWxzZSBuPWU7ZWxzZSBuPWUsdD0wO3I9bis0fDAsaT0wfGFyWygwfHQ/bjpyKT4+Ml0sbD1uKzh8MCwoZj0wIT0oMHxpKSkmJihhcls4K2k+PjJdPWFyW2w+PjJdKTt0PTB8YXJbbD4+Ml0sKDB8YXJbdD4+Ml0pPT0oMHxuKT8oYXJbdD4+Ml09aSwoMHxuKT09KDB8QSk/KEE9aSxjPTApOih0PXQrNHwwLHU9MTApKTooYXJbdCs0Pj4yXT1pLHU9MTApOzEwPT0oMHx1KSYmKGM9MHxhclt0Pj4yXSk7YT0wIT0oMHx0clsobz1uKzEyfDApPj4wXSksKDB8bikhPSgwfGUpJiYodD0wfGFyWyh1PWUrOHwwKT4+Ml0sYXJbbD4+Ml09dCxhclsoKDB8YXJbYXJbdT4+Ml0+PjJdKT09KDB8ZSk/dDp0KzR8MCk+PjJdPW4sdD0wfGFyW2U+PjJdLGFyW24+PjJdPXQsYXJbdCs4Pj4yXT1uLHQ9MHxhcltlKzQ+PjJdLDB8KGFyW3I+PjJdPXQpJiYoYXJbdCs4Pj4yXT1uKSx0cltvPj4wXT0wfHRyW2UrMTI+PjBdLEE9KDB8QSk9PSgwfGUpP246QSk7aWYoIShhJjAhPSgwfEEpKSlyZXR1cm47aWYoZilyZXR1cm4gdHJbMTIraT4+MF09MTtmb3IoOzspe2lmKGE9MHxhcltjKzg+PjJdLHQ9MCE9KDB8dHJbKG49YysxMnwwKT4+MF0pLCgwfGFyW2E+PjJdKT09KDB8Yykpe2lmKHQ/bD1jOih0cltuPj4wXT0xLHRyW2ErMTI+PjBdPTAsbj0wfGFyW2E+PjJdLG89MHxhclsodD1uKzR8MCk+PjJdLDB8KGFyW2E+PjJdPW8pJiYoYXJbbys4Pj4yXT1hKSx1PWErOHwwLGFyW24rOD4+Ml09YXJbdT4+Ml0sbD0wfGFyW3U+PjJdLGFyWygoMHxhcltsPj4yXSk9PSgwfGEpP2w6bCs0fDApPj4yXT1uLGFyW3Q+PjJdPWEsYXJbdT4+Ml09bix1PTB8YXJbYys0Pj4yXSxsPTB8YXJbdT4+Ml0sQT0oMHxBKT09KDB8dSk/YzpBKSxuPTB8YXJbbD4+Ml0sIShvPTA9PSgwfG4pKSYmMD09KDB8dHJbbisxMj4+MF0pKXtBPWwsdT01NTticmVha31pZigwfChhPTB8YXJbKHQ9bCs0fDApPj4yXSkmJjA9PSgwfHRyW2ErMTI+PjBdKSl7dT00OTticmVha31pZigoKHRyW2wrMTI+PjBdPTApfChuPTB8YXJbbCs4Pj4yXSkpPT0oMHxBKXwwPT0oMHx0clsodD1uKzEyfDApPj4wXSkpe3U9NDg7YnJlYWt9fWVsc2V7aWYodD9vPWM6KHRyW24+PjBdPTEsdHJbYSsxMj4+MF09MCxuPTB8YXJbKHU9YSs0fDApPj4yXSx0PTB8YXJbbj4+Ml0sMHwoYXJbdT4+Ml09dCkmJihhclt0Kzg+PjJdPWEpLHU9YSs4fDAsYXJbbis4Pj4yXT1hclt1Pj4yXSxvPTB8YXJbdT4+Ml0sYXJbKCgwfGFyW28+PjJdKT09KDB8YSk/bzpvKzR8MCk+PjJdPW4sYXJbbj4+Ml09YSxhclt1Pj4yXT1uLHU9MHxhcltjPj4yXSxvPTB8YXJbdSs0Pj4yXSxBPSgwfEEpPT0oMHx1KT9jOkEpLDB8KHQ9MHxhcltvPj4yXSkmJjA9PSgwfHRyW3QrMTI+PjBdKSl7dT0zMTticmVha31pZigwfChuPTB8YXJbbys0Pj4yXSkmJjA9PSgwfHRyW24rMTI+PjBdKSl7QT1uLHU9MzI7YnJlYWt9aWYoKCh0cltvKzEyPj4wXT0wKXwobj0wfGFyW28rOD4+Ml0pKT09KDB8QSkpe3U9MzA7YnJlYWt9aWYoISgwfHRyW24rMTI+PjBdKSl7QT1uLHU9MzA7YnJlYWt9fWM9MHxhcltuKzg+PjJdLGM9MHxhclsoKDB8YXJbYz4+Ml0pPT0oMHxuKT9jKzR8MDpjKT4+Ml19ZG97aWYoMzA9PSgwfHUpKXJldHVybiB0cltBKzEyPj4wXT0xO2lmKDMxPT0oMHx1KSlBPTB8YXJbbys0Pj4yXSx1PUE/MzI6MzM7ZWxzZXtpZig0OD09KDB8dSkpcmV0dXJuIHRyW3Q+PjBdPTE7aWYoNDk9PSgwfHUpKXtpZihvKUE9YTtlbHNle2lmKCEoMHx0cltuKzEyPj4wXSkpe0E9bCx1PTU1O2JyZWFrfUE9MHxhclsodD1BPWwrNHwwKT4+Ml19dHJbQSsxMj4+MF09MSx0cltsKzEyPj4wXT0wLG49MHxhcltBPj4yXSwwfChhclt0Pj4yXT1uKSYmKGFyW24rOD4+Ml09bCksbj1sKzh8MCxhcltBKzg+PjJdPWFyW24+PjJdLHU9MHxhcltuPj4yXSxhclsoKDB8YXJbdT4+Ml0pPT0oMHxsKT91OnUrNHwwKT4+Ml09QSxhcltBPj4yXT1sLGFyW24+PjJdPUEsbj1sLHU9NTV9fX13aGlsZSgwKTtpZigzMj09KDB8dSkpMHx0cltBKzEyPj4wXT91PTMzOm49bztlbHNlIGlmKDU1PT0oMHx1KSlyZXR1cm4gbz0wfGFyW0ErOD4+Ml0sdD1vKzEyfDAsdHJbQSsxMj4+MF09MHx0clt0Pj4wXSx0clt0Pj4wXT0xLHRyW24rMTI+PjBdPTEsQT0wfGFyW28+PjJdLHQ9MHxhclsobj1BKzR8MCk+PjJdLDB8KGFyW28+PjJdPXQpJiYoYXJbdCs4Pj4yXT1vKSx1PW8rOHwwLGFyW0ErOD4+Ml09YXJbdT4+Ml0sZT0wfGFyW3U+PjJdLGFyWygoMHxhcltlPj4yXSk9PSgwfG8pP2U6ZSs0fDApPj4yXT1BLGFyW24+PjJdPW8sYXJbdT4+Ml09QTszMz09KDB8dSkmJih0clt0KzEyPj4wXT0xLHRyW28rMTI+PjBdPTAsbj0wfGFyWyhBPXQrNHwwKT4+Ml0sMHwoYXJbbz4+Ml09bikmJihhcltuKzg+PjJdPW8pLG49bys4fDAsYXJbdCs4Pj4yXT1hcltuPj4yXSx1PTB8YXJbbj4+Ml0sYXJbKCgwfGFyW3U+PjJdKT09KDB8byk/dTp1KzR8MCk+PjJdPXQsYXJbQT4+Ml09byxhcltuPj4yXT10LG49dCxBPW8pO3Q9MHxhcltuKzg+PjJdLHU9dCsxMnwwLHRyW24rMTI+PjBdPTB8dHJbdT4+MF0sdHJbdT4+MF09MSx0cltBKzEyPj4wXT0xLEE9MHxhclsodT10KzR8MCk+PjJdLG49MHxhcltBPj4yXSwwfChhclt1Pj4yXT1uKSYmKGFyW24rOD4+Ml09dCk7dT10Kzh8MCxhcltBKzg+PjJdPWFyW3U+PjJdLGU9MHxhclt1Pj4yXSxhclsoKDB8YXJbZT4+Ml0pPT0oMHx0KT9lOmUrNHwwKT4+Ml09QSxhcltBPj4yXT10LGFyW3U+PjJdPUF9KGIsYyksdnUoYyl9fXU9QSs1NnwwLGFyW24+PjJdPWFyW2Y+PjJdLGFyW24rND4+Ml09YXJbNCtmPj4yXSxhcltuKzg+PjJdPWFyWzgrZj4+Ml0sYXJbbisxMj4+Ml09YXJbMTIrZj4+Ml0sYXJbbisxNj4+Ml09YXJbMTYrZj4+Ml0sYXJbbisyMD4+Ml09YXJbMjArZj4+Ml0sYXJbbisyND4+Ml09YXJbMjQrZj4+Ml0sYXJbbisyOD4+Ml09YXJbMjgrZj4+Ml0sbz0wfGFyWyhhPUErNjB8MCk+PjJdO2Rve2lmKG8pe2ZvcihjPUErNjB8MDs7KWlmKCgwfGkpPCgwfChhPTB8YXJbbysxNj4+Ml0pKSl7aWYoIShhPTB8YXJbbz4+Ml0pKXthPTM2O2JyZWFrfWM9byxvPWF9ZWxzZXtpZigoMHxpKTw9KDB8YSkpe2E9NDA7YnJlYWt9aWYoIShhPTB8YXJbKGM9bys0fDApPj4yXSkpe2E9Mzk7YnJlYWt9bz1hfWlmKDM2PT0oMHxhKSl7Yz1sPW87YnJlYWt9aWYoMzk9PSgwfGEpKXtsPW87YnJlYWt9aWYoNDA9PSgwfGEpKXtsPW87YnJlYWt9fWVsc2UgYz1sPWF9d2hpbGUoMCk7dXI9KDB8YXJbYz4+Ml18fChvPTB8aHUoNTIpLGFyW28rMTY+PjJdPWksYXJbKGE9bysyMHwwKT4+Ml09YXJbbj4+Ml0sYXJbYSs0Pj4yXT1hcltuKzQ+PjJdLGFyW2ErOD4+Ml09YXJbbis4Pj4yXSxhclthKzEyPj4yXT1hcltuKzEyPj4yXSxhclthKzE2Pj4yXT1hcltuKzE2Pj4yXSxhclthKzIwPj4yXT1hcltuKzIwPj4yXSxhclthKzI0Pj4yXT1hcltuKzI0Pj4yXSxhclthKzI4Pj4yXT1hcltuKzI4Pj4yXSxhcltvPj4yXT0wLGFyW28rND4+Ml09MCxhcltvKzg+PjJdPWwsYXJbYz4+Ml09bywoYT0wfGFyW2FyW3U+PjJdPj4yXSkmJihhclt1Pj4yXT1hLG89MHxhcltjPj4yXSksc28oMHxhcltBKzYwPj4yXSxvKSxhclsoQT1BKzY0fDApPj4yXT0xKygwfGFyW0E+PjJdKSksdCl9ZnVuY3Rpb24gWW8oQSxlKXtBfD0wO3ZhciByLGksZixuPTAsdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTA7aWYodXI9KGY9dXIpKzE2fDAscj1mLCgodHJbKGV8PTApPj4wXT0wKXwodD1uPTB8YXJbKGk9QSszNzcyMTZ8MCk+PjJdKSk9PSgwfChvPWI9MHxhclsoZD1BKzM3NzIyMHwwKT4+Ml0pKSlyZXR1cm4gdXI9ZiwoZD0wKXxkO3U9MHxhcltuPj4yXSxhPTB8YXJbdSsxMDYzNj4+Ml0sYj1jPTB8YXJbdSsxMDYzMj4+Ml07QTpkb3tpZigoMHxhKSE9KDB8Yykpe2ZvcihjPWEtYz4+MixhPTA7bD0wfGFyW2IrKGE8PDIpPj4yXSxhPWErMXwwLDB8YXJbbCs0MD4+Ml07KWlmKGM+Pj4wPD1hPj4+MClicmVhayBBO2lmKGwpe2lmKDB8dHJbbCszNj4+MF0mJnJhKEErMzc2MTQ4fDApLHRyW2U+PjBdPTEsbj0wfFFvKEEsdSxsKSlyZXR1cm4gdXI9ZiwwfChkPW4pO3Q9bj0wfGFyW2k+PjJdLG89MHxhcltkPj4yXTticmVha319fXdoaWxlKDApO2lmKDE8by10Pj4yPj4+MD8odT0wfGFyW24+PjJdLCgwfChiPTB8YXJbdSsxMDYzNj4+Ml0pKSE9KDB8YXJbdSsxMDYzMj4+Ml0pJiYwPT0oMHxhcls0MCsoMHxhcltiKy00Pj4yXSk+PjJdKSYmKHM9MTQpKTpzPTE0LDE0PT0oMHxzKSl7aWYoKDB8byk9PSgwfChuPXM9MHxhcltpPj4yXSkpKXJldHVybiB1cj1mLChkPTApfGQ7aWYoYj0wfGFyW24+PjJdLCgwfChzPTB8YXJbYisxMDYzNj4+Ml0pKSE9KDB8YXJbYisxMDYzMj4+Ml0pJiYwPT0oMHxhcls0MCsoMHxhcltzKy00Pj4yXSk+PjJdKSlyZXR1cm4gdXI9ZiwoZD0wKXxkO2lmKCgwIT0oMHxhcltBKzU1Nj4+Ml0pfDApIT0oMC0oMHxhcltBKzU4MD4+Ml0pfDApKXJldHVybiB1cj1mLChkPTApfGQ7aWYoMD09KDB8dHJbQSs1NDg+PjBdKSYmMD09KDB8dHJbQSs1NDk+PjBdKSlyZXR1cm4gdXI9ZiwoZD0wKXxkfWlmKGM9MHxhcltuPj4yXSx0cltlPj4wXT0xLG49MHxhcltjPj4yXSwwPCgwfGFyWyhvPW4rMTAzNDR8MCk+PjJdKSl7Zm9yKHQ9bisxMDUyNHwwLG49MDtUbigoMHxhclt0Pj4yXSkrKDgwKm58MCl8MCwxKSwoMHwobj1uKzF8MCkpPCgwfGFyW28+PjJdKTspO2E9MHxhcltjPj4yXX1lbHNlIGE9bjtuPTB8YXJbKG89YSsxMDMzMnwwKT4+Ml0sdD0wPT0oMHx0cltuKzUzMj4+MF0pLDB8YXJbMzc1ODkyKygwfGFyWzEwMzMyKygwfGFyW0ErMzc2MjI0Pj4yXSk+PjJdKT4+Ml0/KHQ/KGZ1bmN0aW9uKEEpe3ZhciBlLHIsaSxmLG4sdCxvLGE9MCxjPTAsbD0wO2lmKHVyPShvPXVyKSsxNnwwLHI9byxpPTB8YXJbKEF8PTApPj4yXSxsPTB8YXJbMTAzMzIraT4+Ml0sY2EoaSxhclsoZj01ODI4K2l8MCk+PjJdPDwxKSxuPUErMTA2Njh8MCx0PUErMTA2NzJ8MCxsPWwrMzc1Mzk2fDAsZT1BKzEwNjY0fDAsMDwoMHxhcltmPj4yXSkpe2ZvcihjPTA7QT0wfGh1KDIwKSxhcltBKzQ+PjJdPTAsYXJbQT4+Ml09OTU1MixhcltBKzg+PjJdPWksYXJbQSsxMj4+Ml09Yyx0cltBKzE2Pj4wXT0xLGFyW3I+PjJdPUEsKGE9MHxhcltuPj4yXSk+Pj4wPCgwfGFyW3Q+PjJdKT4+PjA/KGFyW2E+PjJdPUEsYXJbbj4+Ml09NCsoMHxhcltuPj4yXSkpOk9lKGUsciksU24obCxBKSwoMHwoYz1jKzF8MCkpPCgwfChBPTB8YXJbZj4+Ml0pKTspO2lmKDA8KDB8QSkpe2ZvcihBPTA7YT0wfGh1KDIwKSxhclthKzQ+PjJdPTAsYXJbYT4+Ml09OTU1MixhclthKzg+PjJdPWksYXJbYSsxMj4+Ml09QSx0clthKzE2Pj4wXT0wLGFyW3I+PjJdPWEsKGM9MHxhcltuPj4yXSk+Pj4wPCgwfGFyW3Q+PjJdKT4+PjA/KGFyW2M+PjJdPWEsYXJbbj4+Ml09NCsoMHxhcltuPj4yXSkpOk9lKGUsciksU24obCxhKSwoMHwoQT1BKzF8MCkpPCgwfGFyW2Y+PjJdKTspO3VyPW99ZWxzZSB1cj1vfWVsc2UgdXI9b30oYyksdD0zLG49MHxhcltvPj4yXSk6dD0xLDB8dHJbbis1MzM+PjBdfHxmdW5jdGlvbihBLGUpe2V8PTA7dmFyIHIsaSxmLG4sdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wO2lmKHVyPShuPXVyKSsxNnwwLGY9bixiPTB8YXJbKEF8PTApPj4yXSwhKDB8dHJbYis1NDY3Pj4wXSkpcmV0dXJuIHVyPW4sYj0wO2lmKG89MHxhclsodD1iKzEwMzMyfDApPj4yXSx1PWIrMTA0ODB8MCwwfHRhKGk9QSs4fDAsMHxhcltiKzI0Pj4yXSwwfGFyW2IrMjg+PjJdLDB8YXJbYisyMD4+Ml0sYis3NjR8MCwwLG8sMHxhcltiKzEwMzM2Pj4yXSwwfGFyW3U+PjJdLDB8YXJbdSs0Pj4yXSwwfGFyW2IrMTA0ODg+PjJdLDEpKXJldHVybiBlcig0KygwfGFyW3Q+PjJdKXwwLDEwMjQsMCksdXI9bixiPTA7aWYocj0wfGFyW2IrNTgyOD4+Ml0sY2EoYixyKSwwPCgwfHIpKWZvcihsPUErMTA2Njh8MCx1PUErMTA2NzJ8MCxjPW8rMzc1Mzk2fDAsbz1BKzEwNjY0fDAsdD0wO0E9MHxodSgyOCksYXJbQSs0Pj4yXT0wLGFyW0E+PjJdPTc3NTIsYXJbQSsxNj4+Ml09YixhcltBKzIwPj4yXT1pLGFyW0ErMTI+PjJdPWIsYXJbQSs4Pj4yXT10LGFyW0ErMjQ+PjJdPWUsYXJbZj4+Ml09QSwoYT0wfGFyW2w+PjJdKT4+PjA8KDB8YXJbdT4+Ml0pPj4+MD8oYXJbYT4+Ml09QSxhcltsPj4yXT00KygwfGFyW2w+PjJdKSk6T2UobyxmKSxTbihjLEEpLCgwfCh0PXQrMXwwKSkhPSgwfHIpOyk7c2EoYiksZnVuY3Rpb24oQSxlKXt2YXIgcixpPTAsZj0wLG49MDtuPShlPWV8MCkrNHwwLGY9MHxhclsoaT0oQT1BfDApKzR8MCk+PjJdLGFyW2k+PjJdPWFyW24+PjJdLGFyW24+PjJdPWYsZj1lKzYwfDAsaT0wfGFyWyhuPUErNjB8MCk+PjJdLGFyW24+PjJdPWFyW2Y+PjJdLGFyW2Y+PjJdPWksaT1lKzEwNDkyfDAsbj0wfGFyWyhmPUErMTA0OTJ8MCk+PjJdLGFyW2Y+PjJdPWFyW2k+PjJdLGFyW2k+PjJdPW4sbj1lKzh8MCxmPTB8YXJbKGk9QSs4fDApPj4yXSxhcltpPj4yXT1hcltuPj4yXSxhcltuPj4yXT1mLGY9ZSs2NHwwLGk9MHxhclsobj1BKzY0fDApPj4yXSxhcltuPj4yXT1hcltmPj4yXSxhcltmPj4yXT1pLGk9ZSsxMDQ5NnwwLG49MHxhclsoZj1BKzEwNDk2fDApPj4yXSxhcltmPj4yXT1hcltpPj4yXSxhcltpPj4yXT1uLG49ZSsxMnwwLGY9MHxhclsoaT1BKzEyfDApPj4yXSxhcltpPj4yXT1hcltuPj4yXSxhcltuPj4yXT1mLGY9ZSs2OHwwLGk9MHxhclsobj1BKzY4fDApPj4yXSxhcltuPj4yXT1hcltmPj4yXSxhcltmPj4yXT1pLGk9ZSsxMDUwMHwwLG49MHxhclsoZj1BKzEwNTAwfDApPj4yXSxhcltmPj4yXT1hcltpPj4yXSxhcltpPj4yXT1uLG49ZSs0MHwwLGY9MHxhclsoaT1BKzQwfDApPj4yXSxhcltpPj4yXT1hcltuPj4yXSxhcltuPj4yXT1mLGY9ZSs0NHwwLGk9MHxhclsobj1BKzQ0fDApPj4yXSxhcltuPj4yXT1hcltmPj4yXSxhcltmPj4yXT1pLGU9ZSsxMDUwNHwwLGk9MHxhclsoQT1mPUErMTA1MDR8MCk+PjJdLEE9MHxhcltBKzQ+PjJdLHI9MHxhclsobj1lKSs0Pj4yXSxhcltmPj4yXT1hcltuPj4yXSxhcltmKzQ+PjJdPXIsYXJbZT4+Ml09aSxhcltlKzQ+PjJdPUF9KGIsaSksdXI9bixiPTF9KGMsdCksc2EoYSkpOih0JiYoZnVuY3Rpb24oQSl7dmFyIGUscixpLGY9MCxuPTAsdD0wO2lmKDA8KDB8YXJbKHQ9KEF8PTApKzU4Mjh8MCk+PjJdKSl7Zm9yKG49Zj0wO2Y9MHxmfFp0KEEsbiksKDB8KG49bisxfDApKTwoMHxhclt0Pj4yXSk7KTtpZihmKXtpPUErMTA0NzJ8MCxwdChBLDEsMCwwfGFyWyhyPUErMTA0NzZ8MCk+PjJdLDAsMHxhcltpPj4yXSksZj0wfGFyW3I+PjJdLG49MHxhcltpPj4yXSwoODwoMHxhclsoZT1BKzU3NjB8MCk+PjJdKT95dDpCdCkoQSwxLDAsZiwwLG4pLHQ9QSs1Nzc2fDA7ZG97aWYoMHxhclt0Pj4yXSl7aWYoZj0wfGFyW3I+PjJdLG49MHxhcltpPj4yXSw4PCgwfGFyW0ErNTc2OD4+Ml0pKXtFdChBLDEsMCxmLDAsbik7YnJlYWt9WHQoQSwxLDAsZiwwLG4pO2JyZWFrfX13aGlsZSgwKTtpZihwdChBLDAsMCwwfGFyW3I+PjJdLDAsMHxhcltpPj4yXSksZj0wfGFyW3I+PjJdLG49MHxhcltpPj4yXSwoODwoMHxhcltlPj4yXSk/eXQ6QnQpKEEsMCwwLGYsMCxuKSwwfGFyW3Q+PjJdKW49MHxhcltyPj4yXSxmPTB8YXJbaT4+Ml0sODwoMHxhcltBKzU3Njg+PjJdKT9FdChBLDAsMCxuLDAsZik6WHQoQSwwLDAsbiwwLGYpfX19KGEpLG49MHxhcltvPj4yXSksMHx0cltuKzUzMz4+MF18fGZ1bmN0aW9uKEEpe3ZhciBlLHIsaSxmLG4sdCxvLGEsYyxsLHUsYixzLGQsayxoLHc9MCx2PTAsbT0wLGc9MCxaPTAscD0wLHk9MCxCPTAsRT0wLFg9MCxXPTAsST0wLEM9MCxHPTAsVj0wO2lmKCEoMHx0cls1NDY3KyhBfD0wKT4+MF0pKXJldHVybjtkPUErNDB8MCxDPTB8YnIoMHxhclsoaz1BKzI4fDApPj4yXSwwfGFyW2Q+PjJdKSxDPTB8YnIoQywoNysoMHxhclsoaD1BKzU3NjB8MCk+PjJdKXwwKS84fDApLGU9QSs0NHwwLFY9MHxicigwfGFyWyhyPUErMzZ8MCk+PjJdLDB8YXJbZT4+Ml0pLFY9MHxicihWLCg3KygwfGFyWyhpPUErNTc2OHwwKT4+Ml0pfDApLzh8MCksVj0wfHd1KC0xPCgwfChWPSgwfFYpPCgwfEMpP0M6VikpP1Y6LTEpLEM9MD09KDB8YXJbQSs1Nzc2Pj4yXSk/MTozLG49QSs1ODIwfDAsdD1BKzEwMzUyfDAsbz1BKzEwMzQwfDAsYT1BKzQ4fDAsYz1BKzUyfDAsbD1BKzU4MDR8MCx1PUErNHwwLGI9QSs1NzgwfDAscz1BKzU3ODR8MCx3PTB8YXJbKGY9QSs1ODI4fChHPTApKT4+Ml07QTpmb3IoOzspe2lmKEI9MHxhclsoWD0oVz0wPT0oMHxHKSk/ZDplKT4+Ml0sST1BKzQrKEc8PDIpfDAseT0wfGJyKDB8YXJbKFc/azpyKT4+Ml0sQiksRT1XP2g6aSxoYigwfFYsMHxhcltJPj4yXSwwfGJyKHksKDcrKDB8YXJbRT4+Ml0pfDApLzh8MCkpLDA8KDB8dykpZm9yKHc9KHk9MCl8YXJbbj4+Ml07Oyl7aWYoMDwoMHx3KSlmb3IocD0wOzspe2lmKHc9KDB8YnIoMHxhclt0Pj4yXSx5KSkrcHwwLHc9MHxsclsoMHxhcltvPj4yXSkrKDI0Knd8MCkrMj4+MV0sdj0wfGFyW2E+PjJdLHc+Pj4wPj0oMHxhcltjPj4yXSktdj4+Mj4+PjApe3c9MjE7YnJlYWsgQX1pZighKFo9MHxhclt2Kyh3PDwyKT4+Ml0pKXt3PTIxO2JyZWFrIEF9ZG97aWYoVyl7aWYoMHx0cltaKzMyNT4+MF0pe2lmKHY9MTw8YXJbbD4+Ml0sbT0wfGFyW3U+PjJdLHc9MHxhcltkPj4yXSw4PCgwfGFyW2g+PjJdKSl7UmEoQSxwLHksWiwwLHYsdixWLEIsbSx3KTticmVha31OYShBLHAseSxaLDAsdix2LFYsQixtLHcpO2JyZWFrfX1lbHNlIGlmKDB8dHJbWiszMjY+PjBdKXtpZihtPTE8PGFyW2w+PjJdLHY9KDB8bSkvKDB8YXJbYj4+Ml0pfDAsbT0oMHxtKS8oMHxhcltzPj4yXSl8MCxnPTB8YXJbST4+Ml0sdz0wfGFyW1g+PjJdLDg8KDB8YXJbRT4+Ml0pKXtSYShBLHAseSxaLEcsdixtLFYsQixnLHcpO2JyZWFrfU5hKEEscCx5LFosRyx2LG0sVixCLGcsdyk7YnJlYWt9fXdoaWxlKDApO2lmKHA9cCsxfDAsKDB8KHc9MHxhcltuPj4yXSkpPD0oMHxwKSl7dj13O2JyZWFrfX1lbHNlIHY9dztpZih5PXkrMXwwLCgwfCh3PTB8YXJbZj4+Ml0pKTw9KDB8eSkpYnJlYWs7dz12fWlmKCgwfEMpPD0oMHwoRz1HKzF8MCkpKXt3PTIwO2JyZWFrfX17aWYoMjA9PSgwfHcpKXJldHVybiBtdShWKTtpZigyMT09KDB8dykpO319KGEpKSxhPWMrMTA2NDh8MCxuPTB8YXJbKG89YysxMDY0NHwwKT4+Ml07QTpkb3tpZigoMHxhclthPj4yXSk9PSgwfG4pKWE9MDtlbHNlIGZvcih0PTA7Oyl7aWYobj0wfFFhKG4rKDgwKnR8MCl8MCwwfGFyW2M+PjJdKSx0PXQrMXwwLDB8bil7YT1uO2JyZWFrIEF9aWYobj0wfGFyW28+PjJdLHQ+Pj4wPj0oKCgwfGFyW2E+PjJdKS1ufDApLzgwfDApPj4+MCl7YT0wO2JyZWFrfX19d2hpbGUoMCk7aWYoMHwobj0wfGFyW2M+PjJdKSl7ZG97aWYoMHx0cltuKzEwMD4+MF0pe2lmKDB8dHJbbisxMDUxNj4+MF0mJjB8dHJbQSs1MTQ+PjBdKWJyZWFrO2FyW3I+PjJdPW4sKDB8KG89MHxhclsodD1BKzM3NjE3MnwwKT4+Ml0pKT09KDB8YXJbQSszNzYxNzY+PjJdKT9EbyhBKzM3NjE2OHwwLHIpOihhcltvPj4yXT1uLGFyW3Q+PjJdPTQrKDB8YXJbdD4+Ml0pKX19d2hpbGUoMCk7KCgwfGFyW0ErMzc2MTcyPj4yXSktKDB8YXJbQSszNzYxNjg+PjJdKT4+MnwwKT4oMHxhcltuKzU5NisoMTIqKCgwfGFyW24rMTE2Pj4yXSktMXwwKXwwKSs0Pj4yXSkmJkFhKEErMzc2MTQ4fDApfWlmKFRlKGMpLHZ1KGMpLDE8KG49MHxhcltkPj4yXSktKHQ9MHxhcltpPj4yXSk+PjI+Pj4wKWZvcihvPTE7YXJbKG49dCkrKG8rLTE8PDIpPj4yXT1hcltuKyhvPDwyKT4+Ml0sKG89bysxfDApPj4+MDwobj0wfGFyW2Q+PjJdKS0odD0wfGFyW2k+PjJdKT4+Mj4+PjA7KTtyZXR1cm4gYXJbZD4+Ml09bistNCx1cj1mLDB8KGQ9YSl9ZnVuY3Rpb24gUW8oQSxlLHIpe0F8PTAsZXw9MDt2YXIgaSxmLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wLGQ9MCxrPTAsaD0wLHc9MCx2PTA7aWYobD0odT0wfGFyWyhmPShyfD0wKSs0fDApPj4yXSkrMTM0NHwwLHU9dSsxMzQ4fDAsdD0wfGFyW2w+PjJdLCgwfGFyW3U+PjJdKSE9KDB8dCkpZm9yKGE9QSszNzYxNDh8MCxjPUErMzc2MTU2fDAsbz0wOy0xPCgwfCh0PTB8JG8oYSwwfGFyW3QrKG88PDIpPj4yXSkpKSYmKGFyWzk2KygwfGFyWygwfGFyW2M+PjJdKSsodDw8Mik+PjJdKT4+Ml09MCksbz1vKzF8MCx0PTB8YXJbbD4+Ml0sbz4+PjA8KDB8YXJbdT4+Ml0pLXQ+PjI+Pj4wOyk7dT0wfGFyW2U+PjJdLGFyWyhpPXIrNDB8MCk+PjJdPTEsYz0wfGFyW3UrMTAzMzI+PjJdO0E6ZG97aWYoMDwoMHxhcltjKzM3NTg5Mj4+Ml0pKWlmKGw9KGs9MHx0clt1KzU5NjU+PjBdKTw8MjQ+PjI0IT0wLHQ9KGg9MHx0clt1KzU5NjY+PjBdKTw8MjQ+PjI0IT0wLChrfGgpPDwyND4+MjQpZD10O2Vsc2V7aWYoMDwoMHwoYT0wfGFyWyhvPWMrMTY4fDApPj4yXSkpKXt0PTA7ZG97aWYoMWUzPT0oMHxhcltjKzg4Kyh0PDwyKT4+Ml0pKXtkPTA7YnJlYWsgQX10PXQrMXwwfXdoaWxlKCgwfHQpPCgwfGEpKTsoMHxhKTwyMCYmKHY9MTIpfWVsc2Ugdj0xMjsxMj09KDB8dikmJihhcltvPj4yXT1hKzEsYXJbYys4OCsoYTw8Mik+PjJdPTFlMyksMjA9PSgwfCh0PTB8YXJbKG89Yys4NHwwKT4+Ml0pKT8obz0xMDAxLHQ9MTkpOihhcltvPj4yXT10KzEsbz0xZTMpLGFyW2MrNCsodDw8Mik+PjJdPW8sZD0wfWVsc2UgbD1kPTB9d2hpbGUoMCk7aWYoaz1lKzEwNjMyfDAsKDB8KHQ9MHxhclsoaD1lKzEwNjM2fDApPj4yXSkpIT0oMHwobz0wfGFyW2s+PjJdKSkpe2lmKCgwfGFyW28+PjJdKT09KDB8cikmJjA8KDB8KGI9MHxhclsxNisoMHxhcltmPj4yXSk+PjJdKSkpe2ZvcihvPXUrMTA1MjR8MCx0PTA7VG4oKDB8YXJbbz4+Ml0pKyg4MCp0fDApfDAsMSksKDB8KHQ9dCsxfDApKSE9KDB8Yik7KTtvPTB8YXJbaz4+Ml0sdD0wfGFyW2g+PjJdfX1lbHNlIG89dDthPXQtbz4+MjtBOmRve2lmKDE8YT4+PjApe2Zvcih0PTE7KDB8YXJbbysodDw8Mik+PjJdKSE9KDB8cik7KWlmKGE+Pj4wPD0odD10KzF8MCk+Pj4wKWJyZWFrIEE7aWYoMHwoYz0wfGFyW28rKHQrLTE8PDIpPj4yXSkmJjI9PSgwfGFyW2MrNDA+PjJdKSl7YT1hKy0xfDAsdD0wO2Rve2lmKGE+Pj4wPD10Pj4+MClicmVhayBBO3Q9KGI9dCkrMXwwfXdoaWxlKCgwfGFyW28rKGI8PDIpPj4yXSkhPSgwfGMpKTtpZigwfCh0PTB8YXJbbysodDw8Mik+PjJdKSYmKDB8KG49MHxhclsxNisoMHxhcltjKzQ+PjJdKT4+Ml0pKTwoMHxhclsxNisoMHxhclsocz10KzR8MCk+PjJdKT4+Ml0pKWRve2lmKHQ9MHxhcltlPj4yXSwoMHxuKT49KDB8YXJbdCsxMDM0ND4+Ml0pKWJyZWFrIEE7VG4oKDB8YXJbdCsxMDUyND4+Ml0pKyg4MCpufDApfDAsMSksbj1uKzF8MH13aGlsZSgoMHxuKTwoMHxhclsxNisoMHxhcltzPj4yXSk+PjJdKSl9fX13aGlsZSgwKTtpZighKGx8ZCkpe2E9MHxmdW5jdGlvbihBLGUscil7QXw9MCxlfD0wO3ZhciBpLGYsbix0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wO2lmKHVyPShuPXVyKSsxODYyNHwwLGY9bix0PTB8YXJbKGk9NCsocnw9MCl8MCk+PjJdLGI9dCsxMzQ4fDAsbz0wfGFyWyh1PXQrMTM0NHwwKT4+Ml0sKDB8YXJbYj4+Ml0pIT0oMHxvKSl7Zm9yKGM9QSszNzYxNDh8MCxsPUErMzc2MTU2fDAsYT0wLHQ9bzstMTwoMHwodD0wfCRvKGMsMHxhclt0KyhhPDwyKT4+Ml0pKSkmJihhcls5NisoMHxhclsoMHxhcltsPj4yXSkrKHQ8PDIpPj4yXSk+PjJdPTApLGE9YSsxfDAsdD0wfGFyW3U+PjJdLGE+Pj4wPCgwfGFyW2I+PjJdKS10Pj4yPj4+MDspO3Q9MHxhcltpPj4yXX1pZihiPTB8YXJbZT4+Ml0sKDB8YXJbdCsxNj4+Ml0pPj4+MD49KDB8YXJbYisxMDI3Nj4+Ml0pLSgwfGFyW2IrMTAyNzI+PjJdKT4+Mj4+PjApcmV0dXJuIHVyPW4sMHwocz02KTtpZihzdChiPWYrMTg1ODB8MCksdD1mKzQ4fDAsYXJbKHU9ZisxODUwOHwwKT4+Ml09MCxhclt1KzQ+PjJdPTAsYXJbdSs4Pj4yXT0wLGFyW3UrMTI+PjJdPTAsYXJbdSsxNj4+Ml09MCx2YigwfChhcltmKzIxMTI+PjJdPXQpLDAsMjA0OCksdD0wfGFyW2k+PjJdLGFyW2YrMTg2MDA+PjJdPXQsdT0wfGFyW2U+PjJdLGFyW2YrMTg1OTY+PjJdPXUsYXJbZisxODU5Mj4+Ml09QSxhcltmKzE4NjA0Pj4yXT1lLGFyW2YrMTg2MDg+PjJdPXIsYXJbZis0Pj4yXT1hclsoMHxhclt1KzEwMjcyPj4yXSkrKGFyW3QrMTY+PjJdPDwyKT4+Ml0sU2UoYXJbZisxODYxMj4+Ml09MCxmKSwoMHwodD0wfGFyW3IrMTI+PjJdKSk8MSl0PTE3O2Vsc2V7bnQoZisxODU1NnwwLDB8YXJbcis4Pj4yXSx0KTtkb3tpZigwfHRyW0ErOTM4MTc+PjBdJiYwfHRyWzQrKDB8YXJbaT4+Ml0pPj4wXSl7aWYodT1lKzEwNjc2fDAsYz0oMHxhcls1ODI4KygwfGFyW0ErMzc2MjI0Pj4yXSk+PjJdKS0xfDAsdD0wfGFyWyhsPWUrMTA2ODB8MCk+PjJdLG89MHxhclt1Pj4yXSwoYT10LW8+PjMpPj4+MDxjPj4+MCl7Sm8odSxjLWF8MCk7YnJlYWt9aWYoYz4+PjA8YT4+PjAmJigwfHQpIT0oMHwocz1vKyhjPDwzKXwwKSkpZm9yKDtlPXQrLTh8MCxrdChhcltsPj4yXT1lKSwoMHwodD0wfGFyW2w+PjJdKSkhPSgwfHMpOyk7fX13aGlsZSgwKTthcltyKzEyND4+Ml09MSx0PTB8ZnVuY3Rpb24oQSl7dmFyIGUscixpLGYsbix0LG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wO2w9MHxhclsxODU5NisoQXw9MCk+PjJdLGE9MHxhcltBKzQ+PjJdLG89MHxhcltsKzU4MzY+PjJdLGM9MHxhcltsKzU4MjA+PjJdLCgwfGEpPCgwfG8pJiYobz0wfGFyWygwfGFyW2wrMTAyODQ+PjJdKSsoYTw8Mik+PjJdKTtpZihhcltBPj4yXT1vLGFyW0ErOD4+Ml09KDB8byklKDB8Yyl8MCxhcltBKzEyPj4yXT0oMHxvKS8oMHxjKXwwLGE9MHxhclsoaT1BKzE4NjAwfDApPj4yXSwhKDB8RGEoQSkpKXJldHVybiAwfChBPTE4KTt0dChmPUErMTg1NTZ8MCksbj1BKzE4NTYwfDAsdD1BKzE4NTkyfDAsbD1sKzU5NjZ8MCxlPUErMTg1ODB8MCxyPUErMTg1ODh8MCxhPTA9PSgwfHRyW2ErMTI+PihvPTApXSk7Zm9yKDs7KXtkb3tpZigwPCgwfG8pKXtpZihjPW8rLTF8MCxiPTB8YXJbaT4+Ml0sdT0wfGFyW2IrNzc2Pj4yXSxjPj4+MDwoMHxhcltiKzc4MD4+Ml0pLXU+PjI+Pj4wJiYoKDB8YXJbbj4+Ml0pLTItKDB8YXJbZj4+Ml0pfDApPT0oMHxhclt1KyhjPDwyKT4+Ml0pKWJyZWFrO2VyKDQrKDB8YXJbdD4+Ml0pfDAsMTAwMywxKX19d2hpbGUoMCk7aWYobz1vKzF8MCwyPT0oMnxKYShBLDAsYSkpKXtvPTAsYT0xNDticmVha31pZigwfHRyW2w+PjBdKXtpZihhPTB8YXJbaT4+Ml0sMzw9KGM9MHxhclthKzc5Nj4+Ml0pPj4+MCl7YT0xMjticmVha31odChlLGMsMHxhclthKzc5Mj4+Ml0pLHRyW3I+PjBdPTAsdHJbMStyPj4wXT0wLHRyWzIrcj4+MF09MCx0clszK3I+PjBdPTAsYT0wfWVsc2UgYT0wfWlmKDEyPT0oMHxhKSlzcigzOTIxMSwzOTI0MiwxNTA4LDM5MjUxKTtlbHNlIGlmKDE0PT0oMHxhKSlyZXR1cm4gMHxvO3JldHVybiAwfShmKSxUbihyKzQ0fDAsMSl9cmV0dXJuIGt0KGIpLHVyPW4sMHwocz10KX0oQSxlLHIpLGFyW2k+PjJdPTIsbz0wfGFyW2s+PjJdLHQ9KCgwfGFyW2g+PjJdKS1vPj4yKS0xfDAsbj0wO2Rve2lmKHQ+Pj4wPD1uPj4+MCl7dz1hLHY9NjA7YnJlYWt9bj0ocz1uKSsxfDB9d2hpbGUoKDB8YXJbbysoczw8Mik+PjJdKSE9KDB8cikpO2lmKDYwPT0oMHx2KSlyZXR1cm4gMHx3O2lmKCEobj0wfGFyW28rKG48PDIpPj4yXSkpcmV0dXJuIDB8KGU9YSk7aWYoISgoMHwodD0wfGFyWzE2KygwfGFyW2Y+PjJdKT4+Ml0pKTwoMHxhclsxNisoMHxhclsobz1uKzR8MCk+PjJdKT4+Ml0pKSlyZXR1cm4gMHwoZT1hKTtmb3Iobj10Ozspe2lmKHQ9MHxhcltlPj4yXSwoMHxuKT49KDB8YXJbdCsxMDM0ND4+Ml0pKXt3PWEsdj02MDticmVha31pZihUbigoMHxhclt0KzEwNTI0Pj4yXSkrKDgwKm58MCl8MCwxKSwoMHwobj1uKzF8MCkpPj0oMHxhclsxNisoMHxhcltvPj4yXSk+PjJdKSl7dz1hLHY9NjA7YnJlYWt9fWlmKDYwPT0oMHx2KSlyZXR1cm4gMHx3fWlmKGwmZClyZXR1cm4gMHwoZT0xMDA2KTtpZihsKXshZnVuY3Rpb24oQSxlLHIpe0F8PTAscnw9MDt2YXIgaSxmLG4sdCxvLGEsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTAsQj0wLEU9MCxYPTA7dXI9KGE9dXIpKzE2fDAsdD1hLG89MHxhclsoZXw9MCk+PjJdLG49MHxhcltyKzQ+PjJdLGY9MHxhcls3Njgrbj4+Ml0saD0xK2Z8MCxpPTB8YXJbNTgyMCtvPj4yXSwoMHxhclsxMDUzNitvPj4yXSkhPSgwLSgwfGFyWzEwNTMyK28+PjJdKXwwKSYmc3IoMzQ3NjIsMzQ3MDAsOTg5LDM0ODY3KTtkb3tpZigwfHRyWzQrbj4+MF0pe2lmKGw9ZSsxMDY3NnwwLHU9KDB8YXJbNTgyOCtvPj4yXSktMXwwLGM9MHxhclsoZD1lKzEwNjgwfDApPj4yXSxiPTB8YXJbbD4+Ml0sKHM9Yy1iPj4zKT4+PjA8dT4+PjApe0pvKGwsdS1zfDApO2JyZWFrfWlmKHU+Pj4wPHM+Pj4wJiYoMHxjKSE9KDB8KGs9YisodTw8Myl8MCkpKWZvcig7WD1jKy04fDAsa3QoYXJbZD4+Ml09WCksKDB8KGM9MHxhcltkPj4yXSkpIT0oMHxrKTspO319d2hpbGUoMCk7VWUocixoKSxjPTB8YXJbMTYrbj4+Ml0scz0oMHxjKS8oMHxpKXwwO0E6ZG97aWYoMDw9KDB8Zikpe2lmKG09cisxNDB8MCxnPXIrMTM2fDAsWj0xMDMzMitvfDAscD0xMDI3MitvfDAseT1yKzEyfDAsQj1yKzh8MCxFPXIrMTI0fDAsWD1BKzM3NTM5NnwwLHY9Nzc2K258MCwhZil7aWYoKDB8YXJbbT4+Ml0pPD0wJiZzcigzNDgxNywzNDgzNywxNzAsMzQ4NDgpLHU9MHxhcltnPj4yXSxhclt1KzE4NjAwPj4yXT1uLGFyW3UrMTg1OTI+PjJdPWFyW1o+PjJdLGFyW3UrMTg1OTY+PjJdPW8sYXJbKGw9dSsxODYwNHwwKT4+Ml09ZSxhclt1KzE4NjA4Pj4yXT1yLGFyW3UrND4+Ml09YXJbKDB8YXJbcD4+Ml0pKyhjPDwyKT4+Ml0sU2UoMCx1KSwoMHwoYz0wfGFyW3k+PjJdKSk8PTApYnJlYWs7bnQodSsxODU1NnwwLDB8YXJbQj4+Ml0sYyksY2EobywxKSxhcltFPj4yXT0xKygwfGFyW0U+PjJdKSxiPTB8aHUoMjApLGFyW2IrND4+Ml09MCxhcltiPj4yXT03OTcyLHRyW2IrOD4+MF09MSxhcltiKzE2Pj4yXT11LGFyW2IrMTI+PjJdPXMsYXJbdSsxODYxMj4+Ml09YixTbihYLGIpLGM9MHxhcltsPj4yXSxhclt0Pj4yXT1iLCh1PTB8YXJbKGw9YysxMDY2OHwwKT4+Ml0pPj4+MDwoMHxhcltjKzEwNjcyPj4yXSk+Pj4wPyhhclt1Pj4yXT1iLGFyW2w+PjJdPTQrKDB8YXJbbD4+Ml0pKTpPZShjKzEwNjY0fDAsdCk7YnJlYWt9Zm9yKGw9cyx3PTA7Oyl7aWYoKDB8dyk8PTApe2lmKCgwfGMpJSgwfGkpfDApYnJlYWsgQX1lbHNlIGM9MHxicihsPWM9bCsxfDAsaSk7aWYoKDB8YXJbbT4+Ml0pPD0oMHx3KSlicmVhaztpZihzPTB8YXJbZz4+Ml0sZD1zKygxODYyNCp3fDApfDAsYXJbcysoMTg2MjQqd3wwKSsxODYwMD4+Ml09bixhcltzKygxODYyNCp3fDApKzE4NTkyPj4yXT1hcltaPj4yXSxhcltzKygxODYyNCp3fDApKzE4NTk2Pj4yXT1vLGFyWyhrPXMrKDE4NjI0Knd8MCkrMTg2MDR8MCk+PjJdPWUsYXJbcysoMTg2MjQqd3wwKSsxODYwOD4+Ml09cixhcltzKygxODYyNCp3fDApKzQ+PjJdPWFyWygwfGFyW3A+PjJdKSsoYzw8Mik+PjJdLFNlKDAsZCksYj0oaD0wPT0oMHx3KSk/MDowfGFyWygwfGFyW3Y+PjJdKSsodystMTw8Mik+PjJdLHU9KDB8dyk9PSgwfGYpP3k6KDB8YXJbdj4+Ml0pKyh3PDwyKXwwLHU9MHxhclt1Pj4yXSwoMHxiKTwwKWJyZWFrIEE7aWYoISgoMHxiKTwoMHx1KSYmKDB8dSk8PSgwfGFyW3k+PjJdKSkpYnJlYWsgQTtpZihudChzKygxODYyNCp3fDApKzE4NTU2fDAsKDB8YXJbQj4+Ml0pK2J8MCx1LWJ8MCksY2EobywxKSxhcltFPj4yXT0xKygwfGFyW0U+PjJdKSxBPTB8aHUoMjApLGFyW0ErND4+Ml09MCxhcltBPj4yXT03OTcyLHRyW0ErOD4+MF09MSZoLGFyW0ErMTY+PjJdPWQsYXJbQSsxMj4+Ml09bCxhcltzKygxODYyNCp3fDApKzE4NjEyPj4yXT1BLFNuKFgsQSkscz0wfGFyW2s+PjJdLGFyW3Q+PjJdPUEsKGI9MHxhclsodT1zKzEwNjY4fDApPj4yXSk+Pj4wPCgwfGFyW3MrMTA2NzI+PjJdKT4+PjA/KGFyW2I+PjJdPUEsYXJbdT4+Ml09NCsoMHxhclt1Pj4yXSkpOk9lKHMrMTA2NjR8MCx0KSwhKCgwfHcpPCgwfGYpKSlicmVhayBBO3c9dysxfDB9c3IoMzQ4MTcsMzQ4MzcsMTcwLDM0ODQ4KX19d2hpbGUoMCk7aWYoc2EobyksZD1lKzEwNjY0fDAsbD0wfGFyWyhrPWUrMTA2Njh8MCk+PjJdLGI9MHxhcltkPj4yXSwoMHwoYz1sKSkhPSgwfCh1PWIpKSl7Zm9yKHM9MDsodT0wfGFyW3UrKHM8PDIpPj4yXSkmJihpc1s1MTEmYXJbNCsoMHxhclt1Pj4yXSk+PjJdXSh1KSxjPTB8YXJbaz4+Ml0sYj0wfGFyW2Q+PjJdLGw9YyksKHM9cysxfDApPj4+MDxsLSh1PWIpPj4yPj4+MDspO2w9Yn11cj0oKDB8YykhPSgwfHUpJiYoYXJbaz4+Ml09YysofigoYystNC1sfDApPj4+Mik8PDIpKSxhKX0oQSxlLHIpLGFyW2k+PjJdPTIsbz0wfGFyW2s+PjJdLHQ9KCgwfGFyW2g+PjJdKS1vPj4yKS0xfDAsbj0wO2Rve2lmKHQ+Pj4wPD1uPj4+MCl7dz0wLHY9NjA7YnJlYWt9bj0ocz1uKSsxfDB9d2hpbGUoKDB8YXJbbysoczw8Mik+PjJdKSE9KDB8cikpO2lmKDYwPT0oMHx2KSlyZXR1cm4gMHx3O2lmKCEobj0wfGFyW28rKG48PDIpPj4yXSkpcmV0dXJuKGU9MCl8ZTtpZighKCgwfCh0PTB8YXJbMTYrKDB8YXJbZj4+Ml0pPj4yXSkpPCgwfGFyWzE2KygwfGFyWyhvPW4rNHwwKT4+Ml0pPj4yXSkpKXJldHVybihlPTApfGU7Zm9yKG49dDs7KXtpZih0PTB8YXJbZT4+Ml0sKDB8bik+PSgwfGFyW3QrMTAzNDQ+PjJdKSl7dz0wLHY9NjA7YnJlYWt9aWYoVG4oKDB8YXJbdCsxMDUyND4+Ml0pKyg4MCpufDApfDAsMSksKDB8KG49bisxfDApKT49KDB8YXJbMTYrKDB8YXJbbz4+Ml0pPj4yXSkpe3c9MCx2PTYwO2JyZWFrfX1pZig2MD09KDB8dikpcmV0dXJuIDB8d31kfHxzcig1NTczOSwzNDcwMCw5NzEsMzQ3MzUpLGE9MHxmdW5jdGlvbihBLGUscil7QXw9MCxyfD0wO3ZhciBpLGYsbix0LG8sYSxjPTAsbD0wLHU9MCxiPTAscz0wLGQ9MCxrPTAsaD0wLHc9MCx2PTAsbT0wLGc9MCxaPTAscD0wLHk9MCxCPTAsRT0wLFg9MCxXPTAsST0wLEM9MDt1cj0oYT11cikrMTZ8MCxmPWEsbj0wfGFyWyhlfD0wKT4+Ml0sdD0wfGFyW3IrND4+Ml0sbz0wfGFyWzc2OCt0Pj4yXSxpPTB8YXJbNTgyMCtuPj4yXSwoMHxhclsxMDUzNituPj4yXSkhPSgwLSgwfGFyWzEwNTMyK24+PjJdKXwwKSYmc3IoMzQ3NjIsMzQ3MDAsMTEwMywzNDc5Myk7VWUociwxK298MCksYz0wfGFyWzE2K3Q+PjJdO0E6ZG97aWYoKDB8byk8MClDPTA7ZWxzZXtmb3IoZz01OTY4K258MCxaPTU5NzIrbnwwLHA9cisxNDB8MCx5PXIrMTM2fDAsQj0xMDMzMitufDAsRT0xMDI3MitufDAsWD1yKzEyfDAsVz1yKzh8MCxJPXIrMTI0fDAsdj1BKzM3NTM5NnwwLG09Nzc2K3R8MCxsPWMsQT0wfGFyWygwfGFyWzEwMzA4K24+PjJdKSsoYzw8Mik+PjJdLHc9MDs7KXtpZigwPCgwfHcpKXtpZihjPUErMXwwLEE9MHxhcltnPj4yXSwoMHxjKT49KDB8YnIoMHxhcltaPj4yXSxBKSkpe0M9MTAwNzticmVhayBBfWw9KDB8YnIoMHxhclsxMDIyOCtuKygoKDB8YykvKDB8QSl8MCk8PDIpPj4yXSxpKSkrKDB8YXJbMTAxODQrbisoKCgwfGMpJSgwfEEpfDApPDwyKT4+Ml0pfDAsQT1jfWlmKCgwfGFyW3A+PjJdKTw9KDB8dykpYnJlYWs7aWYoYj0wfGFyW3k+PjJdLHM9YisoMTg2MjQqd3wwKXwwLGFyW2IrKDE4NjI0Knd8MCkrMTg2MDA+PjJdPXQsYXJbYisoMTg2MjQqd3wwKSsxODU5Mj4+Ml09YXJbQj4+Ml0sYXJbYisoMTg2MjQqd3wwKSsxODU5Nj4+Ml09bixhclsoZD1iKygxODYyNCp3fDApKzE4NjA0fDApPj4yXT1lLGFyW2IrKDE4NjI0Knd8MCkrMTg2MDg+PjJdPXIsYXJbYisoMTg2MjQqd3wwKSs0Pj4yXT1hclsoMHxhcltFPj4yXSkrKGw8PDIpPj4yXSxTZSgwLHMpLHU9KGs9MD09KDB8dykpPzA6MHxhclsoMHxhclttPj4yXSkrKHcrLTE8PDIpPj4yXSxjPSgwfHcpPT0oMHxvKT9YOigwfGFyW20+PjJdKSsodzw8Mil8MCxjPTB8YXJbYz4+Ml0sKDB8dSk8MCl7Qz0xNzticmVhayBBfWlmKCEoKDB8dSk8KDB8YykmJigwfGMpPD0oMHxhcltYPj4yXSkpKXtDPTE3O2JyZWFrIEF9aWYobnQoYisoMTg2MjQqd3wwKSsxODU1NnwwLCgwfGFyW1c+PjJdKSt1fDAsYy11fDApLGNhKG4sMSksYXJbST4+Ml09MSsoMHxhcltJPj4yXSksaD0wfGh1KDI0KSxhcltoKzQ+PjJdPTAsYXJbaD4+Ml09NzkzMix0cltoKzg+PjBdPTEmayxhcltoKzIwPj4yXT1zLGFyW2grMTI+PjJdPSgwfGwpJSgwfGkpfDAsYXJbaCsxNj4+Ml09KDB8bCkvKDB8aSl8MCxhcltiKygxODYyNCp3fDApKzE4NjEyPj4yXT1oLFNuKHYsaCksYz0wfGFyW2Q+PjJdLGFyW2Y+PjJdPWgsKGI9MHxhclsodT1jKzEwNjY4fDApPj4yXSk+Pj4wPCgwfGFyW2MrMTA2NzI+PjJdKT4+PjA/KGFyW2I+PjJdPWgsYXJbdT4+Ml09NCsoMHxhclt1Pj4yXSkpOk9lKGMrMTA2NjR8MCxmKSwhKCgwfHcpPCgwfG8pKSl7Qz0wO2JyZWFrIEF9dz13KzF8MH1zcigzNDgxNywzNDgzNywxNzAsMzQ4NDgpfX13aGlsZSgwKTtpZihzYShuKSxzPWUrMTA2NjR8MCxjPTB8YXJbKGQ9ZSsxMDY2OHwwKT4+Ml0sdT0wfGFyW3M+PjJdLCgwfChBPWMpKSE9KDB8KGw9dSkpKXtmb3IoYj0wOyhsPTB8YXJbbCsoYjw8Mik+PjJdKSYmKGlzWzUxMSZhcls0KygwfGFyW2w+PjJdKT4+Ml1dKGwpLEE9MHxhcltkPj4yXSx1PTB8YXJbcz4+Ml0sYz1BKSwoYj1iKzF8MCk+Pj4wPGMtKGw9dSk+PjI+Pj4wOyk7Yz11fXJldHVybiB1cj0oKDB8QSkhPSgwfGwpJiYoYXJbZD4+Ml09QSsofigoQSstNC1jfDApPj4+Mik8PDIpKSxhKSwwfEN9KEEsZSxyKSxhcltpPj4yXT0yLG89MHxhcltrPj4yXSx0PSgoMHxhcltoPj4yXSktbz4+MiktMXwwLG49MDtkb3tpZih0Pj4+MDw9bj4+PjApe3c9YSx2PTYwO2JyZWFrfW49KEE9bikrMXwwfXdoaWxlKCgwfGFyW28rKEE8PDIpPj4yXSkhPSgwfHIpKTtpZig2MD09KDB8dikpcmV0dXJuIDB8dztpZighKHQ9MHxhcltvKyhuPDwyKT4+Ml0pKXJldHVybiAwfChlPWEpO2lmKCgwfChuPTB8YXJbMTYrKDB8YXJbZj4+Ml0pPj4yXSkpPj0oMHxhclsxNisoMHxhclsobz10KzR8MCk+PjJdKT4+Ml0pKXJldHVybiAwfChlPWEpO2Zvcig7Oyl7aWYodD0wfGFyW2U+PjJdLCgwfG4pPj0oMHxhclt0KzEwMzQ0Pj4yXSkpe3c9YSx2PTYwO2JyZWFrfWlmKFRuKCgwfGFyW3QrMTA1MjQ+PjJdKSsoODAqbnwwKXwwLDEpLCgwfChuPW4rMXwwKSk+PSgwfGFyWzE2KygwfGFyW28+PjJdKT4+Ml0pKXt3PWEsdj02MDticmVha319cmV0dXJuIDYwPT0oMHx2KT8wfHc6MH1mdW5jdGlvbiBEbyhBLGUpe2V8PTA7dmFyIHIsaSxmLG4sdCxvPTAsYT0wLGM9MCxsPTA7Zj0oQXw9MCkrNHwwLG49MHxhcltBPj4yXSwxMDczNzQxODIzPChvPTErKGk9KHQ9KDB8YXJbZj4+Ml0pLW58MCk+PjIpfDApPj4+MCYmemwoKSxhPShjPSgwfGFyWyhsPUErOHwwKT4+Ml0pLW58MCk+PjEsYT1jPj4yPj4+MDw1MzY4NzA5MTE/YT4+PjA8bz4+PjA/bzphOjEwNzM3NDE4MjM7ZG97aWYoYSl7aWYoISgxMDczNzQxODIzPGE+Pj4wKSl7Yz0wfGh1KGE8PDIpO2JyZWFrfVp1KGw9MHxYKDgpLDQ0NTE5KSxhcltsPj4yXT0xNzY2MCxJKDB8bCw0MDE2LDQyOCl9ZWxzZSBjPTB9d2hpbGUoMCk7YXJbKHI9YysoaTw8Mil8MCk+PjJdPWFyW2U+PjJdLG89cisoMC1pPDwyKXwwLDA8KDB8dCkmJmhiKDB8bywwfG4sMHx0KSxhcltBPj4yXT1vLGFyW2Y+PjJdPTQrcixhcltsPj4yXT1jKyhhPDwyKSxuJiZ2dShuKX1mdW5jdGlvbiBKbyhBLGUpe3ZhciByLGksZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wO2lmKChlfD0wKT4+PjA8PSh0PTB8YXJbKGk9KEF8PTApKzh8MCk+PjJdKS0oZj0wfGFyWyhsPUErNHwwKT4+Ml0pPj4zPj4+MClmb3IoO3N0KGYpLGY9OCsoMHxhcltsPj4yXSl8MCxhcltsPj4yXT1mLDAhPSgwfChlPWUrLTF8MCkpOyk7ZWxzZXs1MzY4NzA5MTE8KGY9KG89Zi0obj0wfGFyW0E+PjJdKT4+MykrZXwwKT4+PjAmJnpsKCksYz0oYT10LW58MCk+PjIsZj1hPj4zPj4+MDwyNjg0MzU0NTU/Yz4+PjA8Zj4+PjA/ZjpjOjUzNjg3MDkxMTtkb3tpZihmKXtpZighKDUzNjg3MDkxMTxmPj4+MCkpe249MHxodShmPDwzKTticmVha31adShsPTB8WCg4KSw0NDUxOSksYXJbbD4+Ml09MTc2NjAsSSgwfGwsNDAxNiw0MjgpfWVsc2Ugbj0wfXdoaWxlKDApO2ZvcihjPW4rKGY8PDMpfDAsYT1vPXI9bisobzw8Myl8MCxmPXI7c3QoZiksYT1mPWErOHwwLDAhPSgwfChlPWUrLTF8MCkpOyk7aWYodD0wfGFyW0E+PjJdLCgwfChmPTB8YXJbbD4+Ml0pKT09KDB8dCkpZT1vLGY9bj10O2Vsc2V7Zm9yKG49byxlPXI7ZHQoZSstOHwwLGY9ZistOHwwKSxuPWU9bistOHwwLCgwfGYpIT0oMHx0KTspO2U9bixuPTB8YXJbQT4+Ml0sZj0wfGFyW2w+PjJdfWlmKGFyW0E+PjJdPWUsYXJbbD4+Ml09YSxhcltpPj4yXT1jLCgwfGYpIT0oMHwoZT1uKSkpZm9yKDtrdChmPWYrLTh8MCksKDB8ZikhPSgwfGUpOyk7biYmdnUobil9fWZ1bmN0aW9uIE1vKEEsZSl7ZXw9MDt2YXIgcixpLGYsbix0LG89MCxhPTAsYz0wLGw9MDtmPShBfD0wKSs0fDAsbj0wfGFyW0E+PjJdLDEwNzM3NDE4MjM8KG89MSsoaT0odD0oMHxhcltmPj4yXSktbnwwKT4+Mil8MCk+Pj4wJiZ6bCgpLGE9KGM9KDB8YXJbKGw9QSs4fDApPj4yXSktbnwwKT4+MSxhPWM+PjI+Pj4wPDUzNjg3MDkxMT9hPj4+MDxvPj4+MD9vOmE6MTA3Mzc0MTgyMztkb3tpZihhKXtpZighKDEwNzM3NDE4MjM8YT4+PjApKXtjPTB8aHUoYTw8Mik7YnJlYWt9WnUobD0wfFgoOCksNDQ1MTkpLGFyW2w+PjJdPTE3NjYwLEkoMHxsLDQwMTYsNDI4KX1lbHNlIGM9MH13aGlsZSgwKTthclsocj1jKyhpPDwyKXwwKT4+Ml09YXJbZT4+Ml0sbz1yKygwLWk8PDIpfDAsMDwoMHx0KSYmaGIoMHxvLDB8biwwfHQpLGFyW0E+PjJdPW8sYXJbZj4+Ml09NCtyLGFyW2w+PjJdPWMrKGE8PDIpLG4mJnZ1KG4pfWZ1bmN0aW9uIFRvKEEsZSxyLGksZil7QXw9MCxyfD0wLGl8PTAsZnw9MDt2YXIgbix0PTAsbz0wLGE9MCxjPTA7aWYoMHxMbyh0PShlfD0wKSszNzYxNDh8MCwxKXx8c3IoMzUwNDQsMzQ3MDAsMTQzMywzNTA4MCksKDB8KG49MHxpYSh0LDB8YXJbZSszNzUzODg+PjJdLEEsMCwwLDAsMCkpKTw9LTEmJnNyKDM1MTE5LDM0NzAwLDE0MzYsMzUwODApLEE9MHxhcltlKzM3NjE1Nj4+Ml0sQT0oMHxhcltlKzM3NjE2MD4+Ml0pLUE+PjI+Pj4wPm4+Pj4wPzB8YXJbQSsobjw8Mik+PjJdOjAsZT0xPDwoMHxhcltyKzUwMDQ+PjJdKS0xLGZ1bmN0aW9uKEEsZSxyLGkpe0F8PTAscnw9MCxpfD0wLC0xPCgwfChlfD0wKSkmJnZiKDB8YXJbQSs0Pj4yXSwyNTUmZXwwLDB8YnIoMHxhcltBKzI4Pj4yXSwwfGFyW0ErNDA+PjJdKSk7LTE8KDB8cikmJnZiKDB8YXJbQSs4Pj4yXSwyNTUmcnwwLDB8YnIoMHxhcltBKzM2Pj4yXSwwfGFyW0ErNDQ+PjJdKSk7aWYoKDB8aSk8PS0xKXJldHVybjt2YigwfGFyW0ErMTI+PjJdLDI1NSZpfDAsMHxicigwfGFyW0ErMzY+PjJdLDB8YXJbQSs0ND4+Ml0pKX0oQSwxPDwoMHxhcltyKzQ5OTY+PjJdKS0xLGUsZSksMDwoMHxhclsoZT1BKzEwMzY0fDApPj4yXSkpZm9yKG89QSsxMDM2MHwwLHQ9MDthPSgwfGFyW28+PjJdKSsoMyp0fDApfDAsYz0tNzY5JihjclthPj4wXXxjclthKzE+PjBdPDw4KSx0clthPj4wXT1jLHRyW2ErMT4+MF09Yz4+OCwoMHwodD10KzF8MCkpPCgwfGFyW2U+PjJdKTspO3JldHVybiBhcltBKzkyPj4yXT1pLGFyW0ErODg+PjJdPSgwfGFyW3IrNTAzMj4+Ml0pLTEmaSx0cltBKzEwMD4+MF09MCxhcltBKzk2Pj4yXT1mPzI6MSx0cltBKzEwNTE2Pj4wXT0xLDB8bn1mdW5jdGlvbiBVbyhBLGUpe0F8PTA7dmFyIHIsaSxmPTAsbj0wLHQ9MCxvPTAsYT0wO2lmKHVyPShpPXVyKSsxMTJ8MCxyPWkrMjR8MCx0PShvPWkpKzEwNHwwLGZ1bmN0aW9uKEEsZSxyKXtlfD0wLHJ8PTA7dmFyIGksZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wO2FyWyhBfD0wKT4+Ml09ZSxhclsoaT1BKzR8MCk+PjJdPXIsYXJbKGM9YT1BKzh8MCk+PjJdPTAsYXJbYys0Pj4yXT0wLGFyWyhjPUErMTZ8MCk+PjJdPTAscj8oZj1lKzF8MCxhcltBPj4yXT1mLG49MHxjcltlPj4wXSxvPXIrLTF8MCxhcltpPj4yXT1vLG49MHxkYigwfG4sMCw1NiksdD1ELGFyWyhsPWEpPj4yXT1uLGFyW2wrND4+Ml09dCxvPyhvPWUrMnwwLGFyW0E+PjJdPW8sZj0wfGNyW2Y+PjBdLGw9cistMnwwLGFyW2k+PjJdPWwsZj0wfGRiKDB8ZiwwLDQ4KSxmfD1uLG49dHxELGFyWyh0PWEpPj4yXT1mLGFyW3QrND4+Ml09bixsPyh0PWUrM3wwLGFyW0E+PjJdPXQsbz0wfGNyW28+PjBdLGw9cistM3wwLGFyW2k+PjJdPWwsbz0wfGRiKDB8bywwLDQwKSxvfD1mLGY9bnxELGFyWyhuPWEpPj4yXT1vLGFyW24rND4+Ml09ZixsPyhuPWUrNHwwLGFyW0E+PjJdPW4sdD0wfGNyW3Q+PjBdLGw9cistNHwwLGFyW2k+PjJdPWwsZnw9dCxhclsodD1hKT4+Ml09byxhclt0KzQ+PjJdPWYsbD8odD1lKzV8MCxhcltBPj4yXT10LG49MHxjcltuPj4wXSxsPXIrLTV8MCxhcltpPj4yXT1sLG49MHxkYigwfG4sMCwyNCksbnw9byxmfD1ELGFyWyhvPWEpPj4yXT1uLGFyW28rND4+Ml09ZixsPyhvPWUrNnwwLGFyW0E+PjJdPW8sdD0wfGNyW3Q+PjBdLGw9cistNnwwLGFyW2k+PjJdPWwsbnw9dD0wfGRiKDB8dCwwLDE2KSxmfD1ELGFyWyh0PWEpPj4yXT1uLGFyW3QrND4+Ml09ZixsPyh0PWUrN3wwLGFyW0E+PjJdPXQsbz0wfGNyW28+PjBdLGw9cistN3wwLGFyW2k+PjJdPWwsbnw9bz0wfGRiKDB8bywwLDgpLGZ8PUQsYXJbKG89YSk+PjJdPW4sYXJbbys0Pj4yXT1mLGw9bD8oYXJbQT4+Ml09ZSs4LGU9MHxjclt0Pj4wXSxhcltpPj4yXT1yKy04LGFyWyhsPWEpPj4yXT1ufGUsYXJbbCs0Pj4yXT1mLDY0LShsPTApfDApOjY0LShsPTgpfDAsYXJbYz4+Ml09bCk6KGw9NjQtKGw9MTYpfDAsYXJbYz4+Ml09bCkpOihsPTY0LShsPTI0KXwwLGFyW2M+PjJdPWwpKToobD02NC0obD0zMil8MCxhcltjPj4yXT1sKSk6KGw9NjQtKGw9NDApfDAsYXJbYz4+Ml09bCkpOihsPTY0LShsPTQ4KXwwLGFyW2M+PjJdPWwpKToobD02NC0obD01Nil8MCxhcltjPj4yXT1sKSk6KGE9KGE9NjQpLWF8MCxhcltjPj4yXT1hKX0obywwfGFyWyhlfD0wKSsyMD4+Ml0sMHxhcltlKzI0Pj4yXSksdHJbdD4+MF09MCx0clsoYT10KzF8MCk+PjBdPTAsdHJbKGY9dCsyfDApPj4wXT0wLGZ1bmN0aW9uKEEsZSl7QXw9MDt2YXIgcj0wO2V0KGU9ZXwwLDEpLHI9MjU1JigwfEF0KGUsNikpLHRyW0E+PjBdPXIscj0yNTUmKDB8QXQoZSw2KSksdHJbQSsxPj4wXT1yLGU9MjU1KygwfEF0KGUsMykpJjI1NSx0cltBKzI+PjBdPWV9KHQsbyksbj0wfHRyW3Q+PjBdLHRyW0ErMzc3MjEyPj4wXT1uLHRyW0ErMzc3MjEzPj4wXT0obistMTkmMjU1KTwyJjEsdHJbQSszNzcyMTQ+PjBdPSgtOCZuKTw8MjQ+PjI0PT0xNiYxLDB8dHJbYT4+MF0pcmV0dXJuIEJhKEErNTQ4fDAsZSksdXI9aSwoZT0wKXxlO2lmKCgwfGNyW2Y+PjBdKT4oMHxhcltBKzM3NTkxMj4+Ml0pKXJldHVybiBCYShBKzU0OHwwLGUpLHVyPWksKGU9MCl8ZTtpZigoMjU1Jm4pPDMyKXJldHVybiBlPTB8cnIoQSxvLGUsdCksdXI9aSwwfGU7c3dpdGNoKG48PDI0Pj4yNCl7Y2FzZSAzMjpyZXR1cm4gYT0wfHplKEEsbyksQmEoQSs1NDh8MCxlKSx1cj1pLDB8KGU9YSk7Y2FzZSAzMzpyZXR1cm4gYT0wfExlKEEsbyksQmEoQSs1NDh8MCxlKSx1cj1pLDB8KGU9YSk7Y2FzZSAzNDpyZXR1cm4gYT0wfHFlKEEsbyksQmEoQSs1NDh8MCxlKSx1cj1pLDB8KGU9YSk7Y2FzZSA0MDpjYXNlIDM5OmE9MHxmdW5jdGlvbihBLGUscixpKXtBfD0wLGV8PTAscnw9MCxpfD0wO3ZhciBmPTAsbj0wO3I9MDtmb3IoO249MHxBdChBLDgpLHI9bityfDAsMjU1PT0oMHxuKTspO2Y9MDtmb3IoO249MHxBdChBLDgpLGY9bitmfDAsMjU1PT0oMHxuKTspO2lmKGFyW2U+PjJdPXIsYXJbZSs0Pj4yXT1mLDEzMiE9KDB8cikpcmV0dXJuKGU9MCl8ZTtpZihmPTB8QXQoQSw4KSxhclsobj1lKzh8MCk+PjJdPWYsIWkpcmV0dXJuIDB8KGU9MTAyNSk7aT0wPT0oMHxhcltpKzQ3Nj4+Ml0pPzE6MyxyPTA7Zm9yKDs7KXtzd2l0Y2goMHxmKXtjYXNlIDA6Zj0yNTUmKDB8QXQoQSw4KSksdHJbZSsxMisocjw8NCk+PjBdPWYsZj0yNTUmKDB8QXQoQSw4KSksdHJbZSsxMisocjw8NCkrMT4+MF09ZixmPTI1NSYoMHxBdChBLDgpKSx0cltlKzEyKyhyPDw0KSsyPj4wXT1mLGY9MjU1JigwfEF0KEEsOCkpLHRyW2UrMTIrKHI8PDQpKzM+PjBdPWYsZj0yNTUmKDB8QXQoQSw4KSksdHJbZSsxMisocjw8NCkrND4+MF09ZixmPTI1NSYoMHxBdChBLDgpKSx0cltlKzEyKyhyPDw0KSs1Pj4wXT1mLGY9MjU1JigwfEF0KEEsOCkpLHRyW2UrMTIrKHI8PDQpKzY+PjBdPWYsZj0yNTUmKDB8QXQoQSw4KSksdHJbZSsxMisocjw8NCkrNz4+MF09ZixmPTI1NSYoMHxBdChBLDgpKSx0cltlKzEyKyhyPDw0KSs4Pj4wXT1mLGY9MjU1JigwfEF0KEEsOCkpLHRyW2UrMTIrKHI8PDQpKzk+PjBdPWYsZj0yNTUmKDB8QXQoQSw4KSksdHJbZSsxMisocjw8NCkrMTA+PjBdPWYsZj0yNTUmKDB8QXQoQSw4KSksdHJbZSsxMisocjw8NCkrMTE+PjBdPWYsZj0yNTUmKDB8QXQoQSw4KSksdHJbZSsxMisocjw8NCkrMTI+PjBdPWYsZj0yNTUmKDB8QXQoQSw4KSksdHJbZSsxMisocjw8NCkrMTM+PjBdPWYsZj0yNTUmKDB8QXQoQSw4KSksdHJbZSsxMisocjw8NCkrMTQ+PjBdPWYsZj0yNTUmKDB8QXQoQSw4KSksdHJbZSsxMisocjw8NCkrMTU+PjBdPWY7YnJlYWs7Y2FzZSAxOmY9NjU1MzUmKDB8QXQoQSwxNikpLG9yW2UrNjArKHI8PDEpPj4xXT1mO2JyZWFrO2Nhc2UgMjpmPTB8QXQoQSwzMiksYXJbZSs2OCsocjw8Mik+PjJdPWZ9aWYoKDB8aSk8PSgwfChyPXIrMXwwKSkpe3I9MDticmVha31mPTB8YXJbbj4+Ml19cmV0dXJuIDB8cn0obyxyLG49bjw8MjQ+PjI0PT00MCwwfGFyW0ErMzc1Mzg4Pj4yXSk7ZG97aWYoYSkyMD09KDB8KGY9MHxhclsobj1BKzg0fDApPj4yXSkpPyhuPTEwMDEsZj0xOSk6KGFyW24+PjJdPWYrMSxuPWEpLGFyW0ErNCsoZjw8Mik+PjJdPW47ZWxzZSBpZihmPTB8YXJbQSszNzcyMjA+PjJdLCEoKDB8YXJbQSszNzcyMTY+PjJdKT09KDB8Zil8MV5uKSl7aWYoZj0wfGFyW2YrLTQ+PjJdLCgwfChuPTB8YXJbKG89ZisxMDY0OHwwKT4+Ml0pKT09KDB8YXJbZisxMDY1Mj4+Ml0pKXtBcihmKzEwNjQ0fDAscik7YnJlYWt9Zm9yKGY9cix0PW4rODB8MDthcltuPj4yXT1hcltmPj4yXSxmPWYrNHwwLCgwfChuPW4rNHwwKSk8KDB8dCk7KTthcltvPj4yXT04MCsoMHxhcltvPj4yXSk7YnJlYWt9fXdoaWxlKDApO3JldHVybiBCYShBKzU0OHwwLGUpLHVyPWksMHwoZT1hKTtjYXNlIDM2OnJldHVybiB0cltBKzM3NjIxMT4+MF09MSxCYShBKzU0OHwwLGUpLHVyPWksKGU9MCl8ZTtkZWZhdWx0OnJldHVybiBCYShBKzU0OHwwLGUpLHVyPWksKGU9MCl8ZX1yZXR1cm4gMH1mdW5jdGlvbiBTbyhBLGUscixpLGYpe0F8PTAscnw9MCxpfD0wLGZ8PTA7dmFyIG4sdCxvLGEsYyxsLHUsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wO2lmKHVyPSh1PXVyKSsyMDQ4fDAsbD11LDE8KDB8KGV8PTApKSlmb3Iocz1lLGI9MDtiPWIrMXwwLDM8cz4+PjA7KXM+Pj49MTtlbHNlIGI9MDtpZihhPTUtYnwwLGM9MTw8aSstMSxuPSh3PTE8PGYpKzY1NTM1fDAsdD0wLXd8MCxvPTA8KDB8ZSkpe2g9NjU1MzUmKDMxPT0oMHxmKT90OjMxIT0oMHxmKT8wOm4pLGs9MDtkb3tmb3IoZD1lOzspe2lmKGI9ZCstMXwwLCgwfGQpPD0wKXtiPTAscz04O2JyZWFrfWlmKGY9cisoKDB8YnIoYixlKSkrazw8MSl8MCwwfG9yW2Y+PjFdKXtmPTAscz0xMDticmVha31kPWJ9aWYoOD09KDB8cykpZm9yKDtkPWwrKCgwfGJyKGIsZSkpK2s8PDEpfDAsb3JbZD4+MV09aCwoMHwoYj1iKzF8MCkpIT0oMHxlKTspcz04O2Vsc2UgaWYoMTA9PSgwfHMpKWZvcig7Oyl7Zm9yKHM9Yj0wO3Y9cisoKDB8YnIoYixlKSkrazw8MSl8MCxzPSgwfGJyKDB8b3Jbdj4+MV0sMHx0clszNTIwNisoYjw8YTw8NSkrZj4+MF0pKStzfDAsKDB8KGI9YisxfDApKSE9KDB8ZCk7KTtpZihzPXMrNjQ+Pjcsdj1sKygoMHxicihmLGUpKStrPDwxKXwwLG9yW3Y+PjFdPSgwfHMpPCgwfHQpP3Q6KDB8cyk8KDB8dyk/czpuLCgwfChmPWYrMXwwKSk9PSgwfGUpKWJyZWFrO3M9MTB9az1rKzF8MH13aGlsZSgoMHxrKSE9KDB8ZSkpO2lmKG8pe2g9Yz4+aSxrPTA7ZG97Zm9yKHc9MHxicihrLGUpLGQ9ZTs7KXtpZihiPWQrLTF8MCwoMHxkKTw9MCl7Yj0wLHM9MTg7YnJlYWt9aWYoMHxvcltsKyhiK3c8PDEpPj4xXSl7Zj0wLHM9MjA7YnJlYWt9ZD1ifWlmKDE4PT0oMHxzKSlmb3IoO2FyW0ErKGIrdzw8Mik+PjJdPWgsKDB8KGI9YisxfDApKSE9KDB8ZSk7KXM9MTg7ZWxzZSBpZigyMD09KDB8cykpZm9yKDs7KXtmb3Iocz1iPTA7cz0oMHxicigwfG9yW2wrKGIrdzw8MSk+PjFdLDB8dHJbMzUyMDYrKGI8PGE8PDUpK2Y+PjBdKSkrc3wwLCgwfChiPWIrMXwwKSkhPSgwfGQpOyk7aWYoYXJbQSsoZit3PDwyKT4+Ml09cytjPj5pLCgwfChmPWYrMXwwKSk9PSgwfGUpKWJyZWFrO3M9MjB9az1rKzF8MH13aGlsZSgoMHxrKSE9KDB8ZSkpO3VyPXV9ZWxzZSB1cj11fWVsc2UgdXI9dX1mdW5jdGlvbiBPbyhBLGUscixpLGYpe0F8PTAsZXw9MCxpfD0wO3ZhciBuLHQsbyxhLGMsbD0wLHU9MCxiPTAscz0wLGQ9MCxrPTAsaD0wLHc9MDtpZih1cj0oYz11cikrMjA0OHwwLHQ9YyxhPTE8PChvPTIwLShmfD0wKXwwKS0xLDE8KDB8KHJ8PTApKSlmb3IodT1yLGw9MDtsPWwrMXwwLDM8dT4+PjA7KXU+Pj49MTtlbHNlIGw9MDtpZihuPTUtbHwwLGs9MDwoMHxyKSl7ZD0wO2Rve2ZvcihzPXI7Oyl7aWYobD1zKy0xfDAsKDB8cyk8PTApe2w9MCx1PTc7YnJlYWt9aWYodz1pKygoMHxicihsLHIpKStkPDwxKXwwLDB8b3Jbdz4+MV0pe2I9MCx1PTk7YnJlYWt9cz1sfWlmKDc9PSgwfHUpKWZvcig7dz10KygoMHxicihsLHIpKStkPDwxKXwwLCgob3Jbdz4+MV09MCl8KGw9bCsxfDApKSE9KDB8cik7KXU9NztlbHNlIGlmKDk9PSgwfHUpKWZvcig7Oyl7Zm9yKHU9bD0wO3c9aSsoKDB8YnIobCxyKSkrZDw8MSl8MCx1PSgwfGJyKDB8b3Jbdz4+MV0sMHx0clszNTIwNisobDw8bjw8NSkrYj4+MF0pKSt1fDAsKDB8KGw9bCsxfDApKSE9KDB8cyk7KTtpZihoPXUrNjQ+Pjcsdz10KygoMHxicihiLHIpKStkPDwxKXwwLG9yW3c+PjFdPSgwfGgpPC0zMjc2OD8tMzI3Njg6NjU1MzUmKCgwfGgpPDMyNzY3P2g6MzI3NjcpLCgwfChiPWIrMXwwKSk9PSgwfHIpKWJyZWFrO3U9OX1kPWQrMXwwfXdoaWxlKCgwfGQpIT0oMHxyKSk7aWYoayl7aD0oZj0xPDxmKSsyNTV8MCx3PWE+Pm8saT0wO2Rve2ZvcihrPTB8YnIoaSxyKSxkPXI7Oyl7aWYobD1kKy0xfDAsKDB8ZCk8PTApe3U9MTg7YnJlYWt9aWYoMHxvclt0KyhsK2s8PDEpPj4xXSl7dT0xOTticmVha31kPWx9aWYoMTg9PSgwfHUpKWZvcih1PTB8YnIoaSxlKSxsPTA7ZD0oMHxjclsoaz1BKyhsK3UpfDApPj4wXSkrd3wwLHRyW2s+PjBdPSgwfGQpPDA/MDoyNTUmKCgwfGQpPCgwfGYpP2Q6aCksKDB8KGw9bCsxfDApKSE9KDB8cik7KTtlbHNlIGlmKDE5PT0oMHx1KSl7cz0wfGJyKGksZSksYj0wO2Rve2Zvcih1PWw9MDt1PSgwfGJyKDB8b3JbdCsobCtrPDwxKT4+MV0sMHx0clszNTIwNisobDw8bjw8NSkrYj4+MF0pKSt1fDAsKDB8KGw9bCsxfDApKSE9KDB8ZCk7KTt1PSgwfGNyWyhsPUErKGIrcyl8MCk+PjBdKSsodSthPj5vKXwwLHRyW2w+PjBdPSgwfHUpPDA/MDoyNTUmKCgwfHUpPCgwfGYpP3U6aCksYj1iKzF8MH13aGlsZSgoMHxiKSE9KDB8cikpfWk9aSsxfDB9d2hpbGUoKDB8aSkhPSgwfHIpKTt1cj1jfWVsc2UgdXI9Y31lbHNlIHVyPWN9ZnVuY3Rpb24gem8oQSxlLHIsaSxmKXtBfD0wLGV8PTAsaXw9MDt2YXIgbix0LG8sYSxjLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTA7aWYodXI9KGM9dXIpKzIwNDh8MCx0PWMsYT0xPDwobz0yMC0oZnw9MCl8MCktMSwxPCgwfChyfD0wKSkpZm9yKHU9cixsPTA7bD1sKzF8MCwzPHU+Pj4wOyl1Pj4+PTE7ZWxzZSBsPTA7aWYobj01LWx8MCxrPTA8KDB8cikpe2Q9MDtkb3tmb3Iocz1yOzspe2lmKGw9cystMXwwLCgwfHMpPD0wKXtsPTAsdT03O2JyZWFrfWlmKHc9aSsoKDB8YnIobCxyKSkrZDw8MSl8MCwwfG9yW3c+PjFdKXtiPTAsdT05O2JyZWFrfXM9bH1pZig3PT0oMHx1KSlmb3IoO3c9dCsoKDB8YnIobCxyKSkrZDw8MSl8MCwoKG9yW3c+PjFdPTApfChsPWwrMXwwKSkhPSgwfHIpOyl1PTc7ZWxzZSBpZig5PT0oMHx1KSlmb3IoOzspe2Zvcih1PWw9MDt3PWkrKCgwfGJyKGwscikpK2Q8PDEpfDAsdT0oMHxicigwfG9yW3c+PjFdLDB8dHJbMzUyMDYrKGw8PG48PDUpK2I+PjBdKSkrdXwwLCgwfChsPWwrMXwwKSkhPSgwfHMpOyk7aWYoaD11KzY0Pj43LHc9dCsoKDB8YnIoYixyKSkrZDw8MSl8MCxvclt3Pj4xXT0oMHxoKTwtMzI3Njg/LTMyNzY4OjY1NTM1JigoMHxoKTwzMjc2Nz9oOjMyNzY3KSwoMHwoYj1iKzF8MCkpPT0oMHxyKSlicmVhazt1PTl9ZD1kKzF8MH13aGlsZSgoMHxkKSE9KDB8cikpO2lmKGspe2g9KGY9MTw8ZikrNjU1MzV8MCx3PWE+Pm8saT0wO2Rve2ZvcihrPTB8YnIoaSxyKSxkPXI7Oyl7aWYobD1kKy0xfDAsKDB8ZCk8PTApe3U9MTg7YnJlYWt9aWYoMHxvclt0KyhsK2s8PDEpPj4xXSl7dT0xOTticmVha31kPWx9aWYoMTg9PSgwfHUpKWZvcih1PTB8YnIoaSxlKSxsPTA7ZD0oMHxsclsoaz1BKyhsK3U8PDEpfDApPj4xXSkrd3wwLG9yW2s+PjFdPSgwfGQpPDA/MDo2NTUzNSYoKDB8ZCk8KDB8Zik/ZDpoKSwoMHwobD1sKzF8MCkpIT0oMHxyKTspO2Vsc2UgaWYoMTk9PSgwfHUpKXtzPTB8YnIoaSxlKSxiPTA7ZG97Zm9yKHU9bD0wO3U9KDB8YnIoMHxvclt0KyhsK2s8PDEpPj4xXSwwfHRyWzM1MjA2KyhsPDxuPDw1KStiPj4wXSkpK3V8MCwoMHwobD1sKzF8MCkpIT0oMHxkKTspO3U9KDB8bHJbKGw9QSsoYitzPDwxKXwwKT4+MV0pKyh1K2E+Pm8pfDAsb3JbbD4+MV09KDB8dSk8MD8wOjY1NTM1JigoMHx1KTwoMHxmKT91OmgpLGI9YisxfDB9d2hpbGUoKDB8YikhPSgwfHIpKX1pPWkrMXwwfXdoaWxlKCgwfGkpIT0oMHxyKSk7dXI9Y31lbHNlIHVyPWN9ZWxzZSB1cj1jfWZ1bmN0aW9uIGpvKEEsZSxyLGkpe0F8PTAscnw9MCxpfD0wO3ZhciBmLG4sdCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTAsZD0wLGs9MCxoPTAsdz0wO2lmKHVyPSh0PXVyKSsyMDQ4fDAsbj10LDE8KDB8KGV8PTApKSl7Zm9yKG89ZSx1PTA7Oyl7aWYoISgzPG8+Pj4wKSl7bz1lLGE9MDticmVha31vPj4+PTEsdT11KzF8MH1mb3IoOzM8bz4+PjA7KW8+Pj49MSxhPWErMXwwO2ZvcihiPWErN3wwLGM9MTw8dSstMSxsPTE8PGErNixhPWUsbz0wOzspe2lmKG89bysxfDAsISgzPGE+Pj4wKSl7ZD11LGg9bCxrPWI7YnJlYWt9YT4+Pj0xfX1lbHNlIGM9bz0wLGQ9LTEsaD0zMixrPTY7aWYoZj01LW98MCxiPTA8KDB8ZSkpe289MDtkb3t1PTA7ZG97Zm9yKHM9dTw8ZixsPWE9MDt3PXIrKCgwfGJyKGEsaSkpK288PDEpfDAsbD0oMHxicigwfG9yW3c+PjFdLDB8dHJbMzUyMDYrKHM8PDUpK2E+PjBdKSkrbHwwLCgwfChhPWErMXwwKSkhPSgwfGUpOyk7dz1uKygoMHxicih1LGUpKStvPDwxKXwwLG9yW3c+PjFdPWwrYz4+ZCx1PXUrMXwwfXdoaWxlKCgwfHUpIT0oMHxlKSk7bz1vKzF8MH13aGlsZSgoMHxvKSE9KDB8ZSkpO2lmKGIpe2w9MDtkb3t1PTB8YnIobCxlKSxjPTA7ZG97Zm9yKGI9Yzw8ZixhPW89MDthPSgwfGJyKDB8b3Jbbisobyt1PDwxKT4+MV0sMHx0clszNTIwNisoYjw8NSkrbz4+MF0pKSthfDAsKDB8KG89bysxfDApKSE9KDB8ZSk7KTtvcltBKyhjK3U8PDEpPj4xXT1hK2g+PmssYz1jKzF8MH13aGlsZSgoMHxjKSE9KDB8ZSkpO2w9bCsxfDB9d2hpbGUoKDB8bCkhPSgwfGUpKTt1cj10fWVsc2UgdXI9dH1lbHNlIHVyPXR9ZnVuY3Rpb24gSG8oQSxlLHIsaSl7QXw9MCxyfD0wLGl8PTA7dmFyIGYsbix0LG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTA7aWYodXI9KHQ9dXIpKzIxNzZ8MCxuPXQrMTI4fDAsZj0wPCgwfChlfD0wKSkpe2Zvcih3PTA9PSgwfChoPWU+Pj4xKSksdj1lPj4+MixtPTc8ZT4+PjAsYj0obD10KSs2NHwoaz0wKTs7KXtpZihhPTB8YnIoayxpKSwhdylmb3IoYz1iLG89MDt1PXIrKG8rYTw8MSl8MCxzPXIrKChkPW8raHwwKSthPDwxKXwwLG9yW2MrKG88PDEpPj4xXT0oMHxscltzPj4xXSkrKDB8bHJbdT4+MV0pLG9yW2MrKGQ8PDEpPj4xXT0oMHxsclt1Pj4xXSktKDB8bHJbcz4+MV0pLCgwfChvPW8rMXwwKSkhPSgwfGgpOyk7aWYobSlmb3Iocz12LGQ9aCx1PWwsbD1iOzspe2M9bCxiPXUsYT0wO2Rve2ZvcihvPTA7cD1jKygoeT1vK2F8MCk8PDEpfDAsWj1jKygoZz15K3N8MCk8PDEpfDAsb3JbYisoeTw8MSk+PjFdPSgwfGxyW1o+PjFdKSsoMHxscltwPj4xXSksb3JbYisoZzw8MSk+PjFdPSgwfGxyW3A+PjFdKS0oMHxscltaPj4xXSksKDB8KG89bysxfDApKSE9KDB8cyk7KTthPWErZHwwfXdoaWxlKCgwfGEpPCgwfGUpKTtpZigoMHwocz4+PTEpKTw9MSlicmVhazt5PWwsZD4+PTEsbD11LHU9eX1lbHNlIHU9Yjtmb3IoYT11LGM9MHxicihrLGUpLG89MDtaPTB8b3JbYSsobzw8MSk+PjFdLHA9MHxvclthKygoeT0xfG8pPDwxKT4+MV0sb3JbbisobytjPDwxKT4+MV09cCtaLG9yW24rKHkrYzw8MSk+PjFdPVotcCwoMHwobz1vKzJ8MCkpPCgwfGUpOyk7aWYoKDB8KGs9aysxfDApKT09KDB8ZSkpYnJlYWs7Yj11fWlmKGYpe2Zvcih3PTA9PSgwfChoPWU+Pj4xKSksdj1lPj4+MixtPTc8ZT4+PjAsaz0wOzspe2lmKCF3KWZvcihhPXUsbz0wO1o9bisoKDB8YnIobyxlKSkrazw8MSl8MCxaPTB8b3JbWj4+MV0scD1uKygoMHxicih5PW8raHwwLGUpKStrPDwxKXwwLHA9MHxvcltwPj4xXSxvclthKyhvPDwxKT4+MV09cCtaLG9yW2ErKHk8PDEpPj4xXT1aLXAsKDB8KG89bysxfDApKSE9KDB8aCk7KTtpZihtKWZvcihzPXYsZD1oLGM9bCxsPXU7Oyl7dT1sLGI9YyxhPTA7ZG97Zm9yKG89MDtaPXUrKChnPW8rYXwwKTw8MSl8MCxwPXUrKCh5PWcrc3wwKTw8MSl8MCxvcltiKyhnPDwxKT4+MV09KDB8bHJbcD4+MV0pKygwfGxyW1o+PjFdKSxvcltiKyh5PDwxKT4+MV09KDB8bHJbWj4+MV0pLSgwfGxyW3A+PjFdKSwoMHwobz1vKzF8MCkpIT0oMHxzKTspO2E9YStkfDB9d2hpbGUoKDB8YSk8KDB8ZSkpO2lmKCgwfChzPj49MSkpPD0xKWJyZWFrO3k9bCxkPj49MSxsPWMsYz15fWVsc2UgYz11O2ZvcihhPWMsbz0wO1o9YSsobzw8MSl8MCxwPWErKCh5PTF8byk8PDEpfDAsZz1BKygoMHxicihvLGUpKStrPDwxKXwwLG9yW2c+PjFdPSgwfGxyW3A+PjFdKSsoMHxscltaPj4xXSkseT1BKygoMHxicih5LGUpKStrPDwxKXwwLG9yW3k+PjFdPSgwfGxyW1o+PjFdKS0oMHxscltwPj4xXSksKDB8KG89bysyfDApKTwoMHxlKTspO2lmKCgwfChrPWsrMXwwKSk9PSgwfGUpKWJyZWFrO3U9Y311cj10fWVsc2UgdXI9dH1lbHNlIHVyPXR9ZnVuY3Rpb24geG8oQSxlLHIsaSxmLG4sdCxvLGEsYyl7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsdHw9MCxhfD0wLGN8PTA7dmFyIGwsdSxiLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wLG09MCxnPTA7c3dpdGNoKGQ9MHxhcls5NzY4Kygob3w9MCk8PDIpPj4yXSxiPSh1PTB8YXJbOTc2OCsoYTw8Mik+PjJdKStuKyhzPTB8YXJbOTc4NCsoYTw8Mik+PjJdKXwwLGw9YystOHwwLDB8byl7Y2FzZSAwOmlmKCgwfChjPTAtdXwwKSk8KDB8KGg9cytufDApKSYmKHY9MC1kfDAsMDwoMHxmKSkpZG97Zm9yKGQ9dCsoYyt1PDwxKXwocz0wKSxrPXIrKDB8YnIoYyxpKSkrdnwwO29yW2Q+PjFdPTB8Y3Jbaz4+MF0sKDB8KHM9cysxfDApKSE9KDB8Zik7KWQ9ZCsoYjw8MSl8MCxrPWsrMXwwO2M9YysxfDB9d2hpbGUoKDB8YykhPSgwfGgpKTticmVhaztjYXNlIDE6aWYoKDB8KGM9MC11fDApKTwoMHwoaD1zK258MCkpJiYobT0wLWR8MCwwPCgwfGYpKSlkb3tmb3IoZD10KyhjK3U8PDEpfChzPTApLGs9cisoMHxicihjLGkpKSttfDA7dj0odj0oY3JbKGs9KGc9aykrMXwwKT4+MF08PDIpLSgwfGNyW2c+PjBdKSsoMHxicigwfGNyW2crMj4+MF0sLTEwKSl8MCkrKDU4KigwfGNyW2crMz4+MF0pfDApKygxNyooMHxjcltnKzQ+PjBdKXwwKSsoMHxicigwfGNyW2crNT4+MF0sLTUpKXwwLG9yW2Q+PjFdPXYrKDB8Y3JbZys2Pj4wXSk+PmwsKDB8KHM9cysxfDApKSE9KDB8Zik7KWQ9ZCsoYjw8MSl8MDtjPWMrMXwwfXdoaWxlKCgwfGMpIT0oMHxoKSk7YnJlYWs7Y2FzZSAyOmlmKCgwfChjPTAtdXwwKSk8KDB8KGg9cytufDApKSYmKGc9MC1kfDAsMDwoMHxmKSkpZG97Zm9yKGQ9dCsoYyt1PDwxKXwocz0wKSxrPXIrKDB8YnIoYyxpKSkrZ3wwO209KGNyWyhrPShtPWspKzF8MCk+PjBdPDwyKS0oMHxjclttPj4wXSkrKDQwKigoMHxjclttKzQ+PjBdKSsoMHxjclttKzM+PjBdKXwwKXwwKSsoY3JbbSs2Pj4wXTw8MiktKDB8Y3JbbSs3Pj4wXSkrKDB8YnIoKDB8Y3JbbSs1Pj4wXSkrKDB8Y3JbbSsyPj4wXSl8MCwtMTEpKT4+bCY2NTUzNSxvcltkPj4xXT1tLCgwfChzPXMrMXwwKSkhPSgwfGYpOylkPWQrKGI8PDEpfDA7Yz1jKzF8MH13aGlsZSgoMHxjKSE9KDB8aCkpO2JyZWFrO2Nhc2UgMzppZigoMHwoYz0wLXV8MCkpPCgwfChoPXMrbnwwKSkmJih3PTAtZHwwLDA8KDB8ZikpKWRve2ZvcihkPXQrKGMrdTw8MSl8KHM9MCksaz1yKygwfGJyKGMsaSkpK3d8MDttPShtPSgwfGJyKDB8Y3JbKGs9KGc9aykrMXwwKT4+MF0sLTUpKSsoMHxjcltnPj4wXSl8MCkrKDE3KigwfGNyW2crMj4+MF0pfDApKyg1OCooMHxjcltnKzM+PjBdKXwwKSsoMHxicigwfGNyW2crND4+MF0sLTEwKSl8MCxvcltkPj4xXT1tKyhjcltnKzU+PjBdPDwyKS0oMHxjcltnKzY+PjBdKT4+bCwoMHwocz1zKzF8MCkpIT0oMHxmKTspZD1kKyhiPDwxKXwwO2M9YysxfDB9d2hpbGUoKDB8YykhPSgwfGgpKX1zd2l0Y2goaD0wPT0oMHxvKT9sOjYsMHxhKXtjYXNlIDA6aWYoISgwPCgwfGYpJjA8KDB8bikpKXJldHVybjtrPTA7ZG97Zm9yKHM9QSsoazw8MSl8KGM9MCksZD10KygoMHxicihrLGIpKTw8MSl8MDtvcltzPj4xXT0wfG9yW2Q+PjFdLCgwfChjPWMrMXwwKSkhPSgwfG4pOylzPXMrKGU8PDEpfDAsZD1kKzJ8MDtrPWsrMXwwfXdoaWxlKCgwfGspIT0oMHxmKSk7cmV0dXJuO2Nhc2UgMTppZighKDA8KDB8ZikmMDwoMHxuKSkpcmV0dXJuO2s9MDtkb3tmb3Iocz1BKyhrPDwxKXwoYz0wKSxkPXQrKCgwfGJyKGssYikpPDwxKXwwO289KG89KG9yWyhkPShhPWQpKzJ8MCk+PjFdPDwyKS0oMHxvclthPj4xXSkrKDB8YnIoMHxvclthKzQ+PjFdLC0xMCkpfDApKyg1OCooMHxvclthKzY+PjFdKXwwKSsoMTcqKDB8b3JbYSs4Pj4xXSl8MCkrKDB8YnIoMHxvclthKzEwPj4xXSwtNSkpfDAsb3Jbcz4+MV09bysoMHxvclthKzEyPj4xXSk+PmgsKDB8KGM9YysxfDApKSE9KDB8bik7KXM9cysoZTw8MSl8MDtrPWsrMXwwfXdoaWxlKCgwfGspIT0oMHxmKSk7cmV0dXJuO2Nhc2UgMjppZighKDA8KDB8ZikmMDwoMHxuKSkpcmV0dXJuO2s9MDtkb3tmb3Iocz1BKyhrPDwxKXwoYz0wKSxkPXQrKCgwfGJyKGssYikpPDwxKXwwO2E9KG9yWyhkPShhPWQpKzJ8MCk+PjFdPDwyKS0oMHxvclthPj4xXSkrKDQwKigoMHxvclthKzg+PjFdKSsoMHxvclthKzY+PjFdKXwwKXwwKSsob3JbYSsxMj4+MV08PDIpLSgwfG9yW2ErMTQ+PjFdKSsoMHxicigoMHxvclthKzEwPj4xXSkrKDB8b3JbYSs0Pj4xXSl8MCwtMTEpKT4+aCY2NTUzNSxvcltzPj4xXT1hLCgwfChjPWMrMXwwKSkhPSgwfG4pOylzPXMrKGU8PDEpfDA7az1rKzF8MH13aGlsZSgoMHxrKSE9KDB8ZikpO3JldHVybjtjYXNlIDM6aWYoISgwPCgwfGYpJjA8KDB8bikpKXJldHVybjtrPTA7ZG97Zm9yKHM9QSsoazw8MSl8KGM9MCksZD10KygoMHxicihrLGIpKTw8MSl8MDtvPShvPSgwfGJyKDB8b3JbKGQ9KGE9ZCkrMnwwKT4+MV0sLTUpKSsoMHxvclthPj4xXSl8MCkrKDE3KigwfG9yW2ErND4+MV0pfDApKyg1OCooMHxvclthKzY+PjFdKXwwKSsoMHxicigwfG9yW2ErOD4+MV0sLTEwKSl8MCxvcltzPj4xXT1vKyhvclthKzEwPj4xXTw8MiktKDB8b3JbYSsxMj4+MV0pPj5oLCgwfChjPWMrMXwwKSkhPSgwfG4pOylzPXMrKGU8PDEpfDA7az1rKzF8MH13aGlsZSgoMHxrKSE9KDB8ZikpO3JldHVybjtkZWZhdWx0OnJldHVybn19ZnVuY3Rpb24gUG8oQSxlLHIsaSxmLG4sdCxvLGEsYyl7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsdHw9MCxhfD0wLGN8PTA7dmFyIGwsdSxiLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wLG09MCxnPTA7c3dpdGNoKGQ9MHxhcls5NzY4Kygob3w9MCk8PDIpPj4yXSxiPSh1PTB8YXJbOTc2OCsoYTw8Mik+PjJdKStuKyhzPTB8YXJbOTc4NCsoYTw8Mik+PjJdKXwwLGw9YystOHwwLDB8byl7Y2FzZSAwOmlmKCgwfChjPTAtdXwwKSk8KDB8KGg9cytufDApKSYmKHY9MC1kfDAsMDwoMHxmKSkpZG97Zm9yKGQ9dCsoYyt1PDwxKXwocz0wKSxrPXIrKCgwfGJyKGMsaSkpPDwxKSsodjw8MSl8MDtvcltkPj4xXT0wfG9yW2s+PjFdLCgwfChzPXMrMXwwKSkhPSgwfGYpOylkPWQrKGI8PDEpfDAsaz1rKzJ8MDtjPWMrMXwwfXdoaWxlKCgwfGMpIT0oMHxoKSk7YnJlYWs7Y2FzZSAxOmlmKCgwfChjPTAtdXwwKSk8KDB8KGg9cytufDApKSYmKG09MC1kfDAsMDwoMHxmKSkpZG97Zm9yKGQ9dCsoYyt1PDwxKXwocz0wKSxrPXIrKCgwfGJyKGMsaSkpPDwxKSsobTw8MSl8MDt2PSh2PShsclsoaz0oZz1rKSsyfDApPj4xXTw8MiktKDB8bHJbZz4+MV0pKygwfGJyKDB8bHJbZys0Pj4xXSwtMTApKXwwKSsoNTgqKDB8bHJbZys2Pj4xXSl8MCkrKDE3KigwfGxyW2crOD4+MV0pfDApKygwfGJyKDB8bHJbZysxMD4+MV0sLTUpKXwwLG9yW2Q+PjFdPXYrKDB8bHJbZysxMj4+MV0pPj5sLCgwfChzPXMrMXwwKSkhPSgwfGYpOylkPWQrKGI8PDEpfDA7Yz1jKzF8MH13aGlsZSgoMHxjKSE9KDB8aCkpO2JyZWFrO2Nhc2UgMjppZigoMHwoYz0wLXV8MCkpPCgwfChoPXMrbnwwKSkmJihnPTAtZHwwLDA8KDB8ZikpKWRve2ZvcihkPXQrKGMrdTw8MSl8KHM9MCksaz1yKygoMHxicihjLGkpKTw8MSkrKGc8PDEpfDA7bT0obHJbKGs9KG09aykrMnwwKT4+MV08PDIpLSgwfGxyW20+PjFdKSsoNDAqKCgwfGxyW20rOD4+MV0pKygwfGxyW20rNj4+MV0pfDApfDApKyhsclttKzEyPj4xXTw8MiktKDB8bHJbbSsxND4+MV0pKygwfGJyKCgwfGxyW20rMTA+PjFdKSsoMHxsclttKzQ+PjFdKXwwLC0xMSkpPj5sJjY1NTM1LG9yW2Q+PjFdPW0sKDB8KHM9cysxfDApKSE9KDB8Zik7KWQ9ZCsoYjw8MSl8MDtjPWMrMXwwfXdoaWxlKCgwfGMpIT0oMHxoKSk7YnJlYWs7Y2FzZSAzOmlmKCgwfChjPTAtdXwwKSk8KDB8KGg9cytufDApKSYmKHc9MC1kfDAsMDwoMHxmKSkpZG97Zm9yKGQ9dCsoYyt1PDwxKXwocz0wKSxrPXIrKCgwfGJyKGMsaSkpPDwxKSsodzw8MSl8MDttPShtPSgwfGJyKDB8bHJbKGs9KGc9aykrMnwwKT4+MV0sLTUpKSsoMHxscltnPj4xXSl8MCkrKDE3KigwfGxyW2crND4+MV0pfDApKyg1OCooMHxscltnKzY+PjFdKXwwKSsoMHxicigwfGxyW2crOD4+MV0sLTEwKSl8MCxvcltkPj4xXT1tKyhscltnKzEwPj4xXTw8MiktKDB8bHJbZysxMj4+MV0pPj5sLCgwfChzPXMrMXwwKSkhPSgwfGYpOylkPWQrKGI8PDEpfDA7Yz1jKzF8MH13aGlsZSgoMHxjKSE9KDB8aCkpfXN3aXRjaChoPTA9PSgwfG8pP2w6NiwwfGEpe2Nhc2UgMDppZighKDA8KDB8ZikmMDwoMHxuKSkpcmV0dXJuO2s9MDtkb3tmb3Iocz1BKyhrPDwxKXwoYz0wKSxkPXQrKCgwfGJyKGssYikpPDwxKXwwO29yW3M+PjFdPTB8b3JbZD4+MV0sKDB8KGM9YysxfDApKSE9KDB8bik7KXM9cysoZTw8MSl8MCxkPWQrMnwwO2s9aysxfDB9d2hpbGUoKDB8aykhPSgwfGYpKTtyZXR1cm47Y2FzZSAxOmlmKCEoMDwoMHxmKSYwPCgwfG4pKSlyZXR1cm47az0wO2Rve2ZvcihzPUErKGs8PDEpfChjPTApLGQ9dCsoKDB8YnIoayxiKSk8PDEpfDA7bz0obz0ob3JbKGQ9KGE9ZCkrMnwwKT4+MV08PDIpLSgwfG9yW2E+PjFdKSsoMHxicigwfG9yW2ErND4+MV0sLTEwKSl8MCkrKDU4KigwfG9yW2ErNj4+MV0pfDApKygxNyooMHxvclthKzg+PjFdKXwwKSsoMHxicigwfG9yW2ErMTA+PjFdLC01KSl8MCxvcltzPj4xXT1vKygwfG9yW2ErMTI+PjFdKT4+aCwoMHwoYz1jKzF8MCkpIT0oMHxuKTspcz1zKyhlPDwxKXwwO2s9aysxfDB9d2hpbGUoKDB8aykhPSgwfGYpKTtyZXR1cm47Y2FzZSAyOmlmKCEoMDwoMHxmKSYwPCgwfG4pKSlyZXR1cm47az0wO2Rve2ZvcihzPUErKGs8PDEpfChjPTApLGQ9dCsoKDB8YnIoayxiKSk8PDEpfDA7YT0ob3JbKGQ9KGE9ZCkrMnwwKT4+MV08PDIpLSgwfG9yW2E+PjFdKSsoNDAqKCgwfG9yW2ErOD4+MV0pKygwfG9yW2ErNj4+MV0pfDApfDApKyhvclthKzEyPj4xXTw8MiktKDB8b3JbYSsxND4+MV0pKygwfGJyKCgwfG9yW2ErMTA+PjFdKSsoMHxvclthKzQ+PjFdKXwwLC0xMSkpPj5oJjY1NTM1LG9yW3M+PjFdPWEsKDB8KGM9YysxfDApKSE9KDB8bik7KXM9cysoZTw8MSl8MDtrPWsrMXwwfXdoaWxlKCgwfGspIT0oMHxmKSk7cmV0dXJuO2Nhc2UgMzppZighKDA8KDB8ZikmMDwoMHxuKSkpcmV0dXJuO2s9MDtkb3tmb3Iocz1BKyhrPDwxKXwoYz0wKSxkPXQrKCgwfGJyKGssYikpPDwxKXwwO289KG89KDB8YnIoMHxvclsoZD0oYT1kKSsyfDApPj4xXSwtNSkpKygwfG9yW2E+PjFdKXwwKSsoMTcqKDB8b3JbYSs0Pj4xXSl8MCkrKDU4KigwfG9yW2ErNj4+MV0pfDApKygwfGJyKDB8b3JbYSs4Pj4xXSwtMTApKXwwLG9yW3M+PjFdPW8rKG9yW2ErMTA+PjFdPDwyKS0oMHxvclthKzEyPj4xXSk+PmgsKDB8KGM9YysxfDApKSE9KDB8bik7KXM9cysoZTw8MSl8MDtrPWsrMXwwfXdoaWxlKCgwfGspIT0oMHxmKSk7cmV0dXJuO2RlZmF1bHQ6cmV0dXJufX1mdW5jdGlvbiBMbyhBLGUpe3ZhciByLGk9MCxmPTA7aWYoZXw9MClyZXR1cm4gMHwoZj0xKTtpZihlPTB8YXJbKEF8PTApKzEyPj4yXSxyPWk9MHxhcltBKzg+PjJdLChmPWUtaT4+Mik+Pj4wPCgwfGFyW0E+PjJdKT4+PjApcmV0dXJuIDB8KGY9MSk7aWYoKDB8ZSk9PSgwfGkpKXJldHVybihmPTApfGY7Zm9yKGU9MDs7KXtpZihBPTB8YXJbcisoZTw8Mik+PjJdLDA9PSgwfHRyW0ErMTAwPj4wXSkmJjA9PSgwfGFyW0ErOTY+PjJdKSl7ZT0xLGk9NzticmVha31pZihmPj4+MDw9KGU9ZSsxfDApPj4+MCl7ZT0wLGk9NzticmVha319cmV0dXJuIDc9PSgwfGkpPzB8ZTowfWZ1bmN0aW9uIEtvKEEsZSxyLGkpe0F8PTAsZXw9MCxyfD0wLGl8PTA7dmFyIGY9MCxuPTAsdD0wLG89MCxhPTA7QTpkb3tpZihpKXtpZihuPUErOHwwLCgwfCh0PTB8YXJbQSsxMj4+Ml0pKT09KDB8KEE9bz0wfGFyW24+PjJdKSkpcmV0dXJuIDB8KHI9LTEpO2ZvcihmPXQtbz4+MixpPTA7YT0wfGFyW0ErKGk8PDIpPj4yXSwhKCgwfGFyW2ErOTI+PjJdKT09KDB8ZSkmJigwfGFyW2ErMTA0Pj4yXSk+KDB8cikmJjI9PSgwfGFyW2ErOTY+PjJdKSk7KWlmKGY+Pj4wPD0oaT1pKzF8MCk+Pj4wKXtmPXQsaT1vO2JyZWFrIEF9cmV0dXJuIDB8aX1hPTB8YXJbKG49QSs4fDApPj4yXSxmPTB8YXJbQSsxMj4+Ml0sQT1pPWF9d2hpbGUoMCk7aWYoKDB8Zik9PSgwfGkpKXJldHVybiAwfChhPS0xKTtmb3IoaT0wOzspe2lmKGE9MHxhcltBKyhpPDwyKT4+Ml0sKDB8YXJbYSs5Mj4+Ml0pPT0oMHxlKSYmKDB8YXJbYSsxMDQ+PjJdKT4oMHxyKSYmMHxhclthKzk2Pj4yXSl7QT0xNDticmVha31pZigoaT1pKzF8MCk+Pj4wPj1mLSgwfGFyW24+PjJdKT4+Mj4+PjApe2k9LTEsQT0xNDticmVha319cmV0dXJuIDE0PT0oMHxBKT8wfGk6MH1mdW5jdGlvbiBxbyhBLGUscixpKXtBfD0wLGV8PTAscnw9MCxpfD0wO3ZhciBmPTAsbj0wLHQ9MCxvPTAsYT0wO0E6ZG97aWYoaSl7aWYobj1BKzh8MCwoMHwodD0wfGFyW0ErMTI+PjJdKSk9PSgwfChBPW89MHxhcltuPj4yXSkpKXJldHVybiAwfChyPS0xKTtmb3IoZj10LW8+PjIsaT0wO2E9MHxhcltBKyhpPDwyKT4+Ml0sISgoMHxhclthKzg4Pj4yXSk9PSgwfGUpJiYoMHxhclthKzEwND4+Ml0pPigwfHIpJiYyPT0oMHxhclthKzk2Pj4yXSkpOylpZihmPj4+MDw9KGk9aSsxfDApPj4+MCl7Zj10LGk9bzticmVhayBBfXJldHVybiAwfGl9YT0wfGFyWyhuPUErOHwwKT4+Ml0sZj0wfGFyW0ErMTI+PjJdLEE9aT1hfXdoaWxlKDApO2lmKCgwfGYpPT0oMHxpKSlyZXR1cm4gMHwoYT0tMSk7Zm9yKGk9MDs7KXtpZihhPTB8YXJbQSsoaTw8Mik+PjJdLCgwfGFyW2ErODg+PjJdKT09KDB8ZSkmJigwfGFyW2ErMTA0Pj4yXSk+KDB8cikmJjB8YXJbYSs5Nj4+Ml0pe0E9MTQ7YnJlYWt9aWYoKGk9aSsxfDApPj4+MD49Zi0oMHxhcltuPj4yXSk+PjI+Pj4wKXtpPS0xLEE9MTQ7YnJlYWt9fXJldHVybiAxND09KDB8QSk/MHxpOjB9ZnVuY3Rpb24gJG8oQSxlKXtlfD0wO3ZhciByLGk9MDtpZigoMHwoaT0wfGFyWyhBfD0wKSsxMj4+Ml0pKT09KDB8KHI9QT0wfGFyW0ErOD4+Ml0pKSlyZXR1cm4gMHwoZT0tMSk7Zm9yKGk9aS1BPj4yLEE9MDs7KXtpZigoMHxhclthcltyKyhBPDwyKT4+Ml0+PjJdKT09KDB8ZSkpe2k9NTticmVha31pZihpPj4+MDw9KEE9QSsxfDApPj4+MCl7QT0tMSxpPTU7YnJlYWt9fXJldHVybiA1PT0oMHxpKT8wfEE6MH1mdW5jdGlvbiBBYShBKXt2YXIgZSxyLGksZixuPTAsdD0wLG89MCxhPTAsYz0wLGw9MCx1PTA7aWYoKDB8KGk9MHxhclsocj0oQXw9MCkrMjB8MCk+PjJdKSk9PSgwfChuPTB8YXJbKGY9QSsyNHwwKT4+Ml0pKSYmc3IoMzY1MjQsMzY1NTQsMTQ3LDM2NTYxKSwxPChsPW4taT4+Mik+Pj4wKWZvcih0PShuPTApfGFyWzkyKygwfGFyW2k+PjJdKT4+Ml0sbz0xOzspe2lmKG49KGM9KDB8KGE9MHxhcls5MisoMHxhcltpKyhvPDwyKT4+Ml0pPj4yXSkpPCgwfHQpKT9vOm4sbD4+PjA8PShvPW8rMXwwKT4+PjApe2w9bjticmVha310PWM/YTp0fWVsc2UgbD0wO249MHxhclsoYz1BKzM2fDApPj4yXSx1PSgwfGFyW0ErNDA+PjJdKS1ufDAsYT0wfGFyWyhvPUErNDh8MCk+PjJdLCgwfCgwPT0oMHx1KT8wOih1PDw4KS0xfDApKT09KCh0PTB8YXJbKGU9QSs1MnwwKT4+Ml0pK2F8MCkmJihmdW5jdGlvbihBKXt2YXIgZT0wLHI9MCxpPTAsZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wO2lmKHVyPShzPXVyKSszMnwwLGM9cys0fDAsYT1zLDEwMjM8KHI9MHxhclsoZT0xNisoQXw9MCl8MCk+PjJdKT4+PjApe2FyW2U+PjJdPXIrLTEwMjQsYz0wfGFyWyhsPUErNHwwKT4+Ml0sYj0wfGFyW2M+PjJdLGM9Yys0fDAsYXJbbD4+Ml09YyxvPTB8YXJbKHU9QSs4fDApPj4yXSx0PTB8YXJbKGE9QSsxMnwwKT4+Ml0sZT10LG49bztkb3tpZigoMHxvKT09KDB8dCkpe2lmKHI9MHxhcltBPj4yXSwoaT1yKT4+PjA8Yz4+PjApe2Y9KGU9YykrKChpPSgxKyhlLWk+PjIpfDApLy0yfDApPDwyKXwwLGU9KHI9KGU9bi1lfDApPj4yKT8od2IoMHxmLDB8YywwfGUpLDB8YXJbbD4+Ml0pOmMsQT1mKyhyPDwyKXwwLGFyW3U+PjJdPUEsYXJbbD4+Ml09ZSsoaTw8MiksZT1BO2JyZWFrfWlmKDEwNzM3NDE4MjM8KGU9MD09KDB8KGU9ZS1pPj4xKSk/MTplKT4+PjAmJihadShzPTB8WCg4KSw0NDUxOSksYXJbcz4+Ml09MTc2NjAsSSgwfHMsNDAxNiw0MjgpKSxmPTB8aHUoZTw8MiksdD1pPShuPWYpKyhlPj4+Mjw8Mil8MCxmPWYrKGU8PDIpfDAsKDB8Yyk9PSgwfG8pKWU9dDtlbHNle2ZvcihlPXQscj1jO2FyW2k+PjJdPWFyW3I+PjJdLGU9aT1lKzR8MCwoMHwocj1yKzR8MCkpIT0oMHxvKTspO3I9MHxhcltBPj4yXX1hcltBPj4yXT1uLGFyW2w+PjJdPXQsYXJbdT4+Ml09ZSxhclthPj4yXT1mLHImJih2dShyKSxlPTB8YXJbdT4+Ml0pfWVsc2UgZT1vfXdoaWxlKDApO3JldHVybiBhcltlPj4yXT1iLGFyW3U+PjJdPTQrKDB8YXJbdT4+Ml0pLHVyPXN9aWYoZT0wfGFyWyhiPUErOHwwKT4+Ml0sZj1lLSgwfGFyWyh1PUErNHwwKT4+Ml0pfDAscj0wfGFyWyhsPUErMTJ8MCk+PjJdLGk9ci0oMHxhcltBPj4yXSl8MCxpPj4+MDw9Zj4+PjApe2ZvcihlPTA9PSgwfChlPWk+PjEpKT8xOmUsYXJbYysxMj4+Ml09MCxhcltjKzE2Pj4yXT1BKzEyLDEwNzM3NDE4MjM8ZT4+PjAmJihadShzPTB8WCg4KSw0NDUxOSksYXJbcz4+Ml09MTc2NjAsSSgwfHMsNDAxNiw0MjgpKSxpPTB8aHUoZTw8MiksYXJbYz4+Ml09aSx0PWkrKGY+PjI8PDIpfDAsYXJbKG89Yys4fDApPj4yXT10LGFyWyhuPWMrNHwwKT4+Ml09dCxhclsodD1jKzEyfDApPj4yXT1pKyhlPDwyKSxmPTB8aHUoNDA5NiksYXJbYT4+Ml09ZixmdW5jdGlvbihBLGUpe2V8PTA7dmFyIHIsaSxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MDtyPTB8YXJbKGI9OCsoQXw9MCl8MCk+PjJdLHU9MHxhclsoaT1BKzEyfDApPj4yXSx0PXUsYT1yO2Rve2lmKCgwfHIpPT0oMHx1KSl7aWYobD0wfGFyWyh1PUErNHwwKT4+Ml0sbj0wfGFyW0E+PjJdLChmPW4pPj4+MDxsPj4+MCl7bz0obj1sKSsoKHQ9KDErKG4tZj4+Mil8MCkvLTJ8MCk8PDIpfDAsZj0obj0oZj1hLW58MCk+PjIpPyh3YigwfG8sMHxsLDB8ZiksMHxhclt1Pj4yXSk6bCxsPW8rKG48PDIpfDAsYXJbYj4+Ml09bCxhclt1Pj4yXT1mKyh0PDwyKSxmPWw7YnJlYWt9aWYoMTA3Mzc0MTgyMzwoZj0wPT0oMHwoZj10LWY+PjEpKT8xOmYpPj4+MCYmKFp1KGI9MHxYKDgpLDQ0NTE5KSxhcltiPj4yXT0xNzY2MCxJKDB8Yiw0MDE2LDQyOCkpLG89MHxodShmPDwyKSxjPXQ9KGE9bykrKGY+Pj4yPDwyKXwwLG89bysoZjw8Mil8MCwoMHxsKT09KDB8cikpZj1jO2Vsc2V7Zm9yKGY9YyxuPWw7YXJbdD4+Ml09YXJbbj4+Ml0sZj10PWYrNHwwLCgwfChuPW4rNHwwKSkhPSgwfHIpOyk7bj0wfGFyW0E+PjJdfWFyW0E+PjJdPWEsYXJbdT4+Ml09YyxhcltiPj4yXT1mLGFyW2k+PjJdPW8sbiYmKHZ1KG4pLGY9MHxhcltiPj4yXSl9ZWxzZSBmPXJ9d2hpbGUoMCk7YXJbZj4+Ml09YXJbZT4+Ml0sYXJbYj4+Ml09NCsoMHxhcltiPj4yXSl9KGMsYSksZj0wfGFyW2I+PjJdO2U9MHxhclt1Pj4yXSwoMHxmKSE9KDB8ZSk7KWVhKGMsYT1mKy00fDApLGY9YTtyZXR1cm4gcj1lLGk9MHxhcltBPj4yXSxhcltBPj4yXT1hcltjPj4yXSxhcltjPj4yXT1pLGFyW3U+PjJdPWFyW24+PjJdLGFyW24+PjJdPXIsZT0wfGFyW2I+PjJdLGFyW2I+PjJdPWFyW28+PjJdLGFyW28+PjJdPWUsQT0wfGFyW2w+PjJdLGFyW2w+PjJdPWFyW3Q+PjJdLGFyW3Q+PjJdPUEsKDB8ZSkhPSgwfGYpJiYoYXJbbz4+Ml09ZSsofigoZSstNC1yfDApPj4+Mik8PDIpKSwwfGkmJnZ1KGkpLHVyPXN9aWYoKDB8cikhPSgwfGUpKXJldHVybiBiPTB8aHUoNDA5NiksYXJbYz4+Ml09YixmdW5jdGlvbihBLGUpe2V8PTA7dmFyIHIsaSxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MDtyPTB8YXJbKGI9OCsoQXw9MCl8MCk+PjJdLHU9MHxhclsoaT1BKzEyfDApPj4yXSx0PXUsYT1yO2Rve2lmKCgwfHIpPT0oMHx1KSl7aWYobD0wfGFyWyh1PUErNHwwKT4+Ml0sbj0wfGFyW0E+PjJdLChmPW4pPj4+MDxsPj4+MCl7bz0obj1sKSsoKHQ9KDErKG4tZj4+Mil8MCkvLTJ8MCk8PDIpfDAsZj0obj0oZj1hLW58MCk+PjIpPyh3YigwfG8sMHxsLDB8ZiksMHxhclt1Pj4yXSk6bCxsPW8rKG48PDIpfDAsYXJbYj4+Ml09bCxhclt1Pj4yXT1mKyh0PDwyKSxmPWw7YnJlYWt9aWYoMTA3Mzc0MTgyMzwoZj0wPT0oMHwoZj10LWY+PjEpKT8xOmYpPj4+MCYmKFp1KGI9MHxYKDgpLDQ0NTE5KSxhcltiPj4yXT0xNzY2MCxJKDB8Yiw0MDE2LDQyOCkpLG89MHxodShmPDwyKSxjPXQ9KGE9bykrKGY+Pj4yPDwyKXwwLG89bysoZjw8Mil8MCwoMHxsKT09KDB8cikpZj1jO2Vsc2V7Zm9yKGY9YyxuPWw7YXJbdD4+Ml09YXJbbj4+Ml0sZj10PWYrNHwwLCgwfChuPW4rNHwwKSkhPSgwfHIpOyk7bj0wfGFyW0E+PjJdfWFyW0E+PjJdPWEsYXJbdT4+Ml09YyxhcltiPj4yXT1mLGFyW2k+PjJdPW8sbiYmKHZ1KG4pLGY9MHxhcltiPj4yXSl9ZWxzZSBmPXJ9d2hpbGUoMCk7YXJbZj4+Ml09YXJbZT4+Ml0sYXJbYj4+Ml09NCsoMHxhcltiPj4yXSl9KEEsYyksdXI9czthPTB8aHUoNDA5NiksYXJbYz4+Ml09YSxmdW5jdGlvbihBLGUpe2V8PTA7dmFyIHIsaT0wLGY9MCxuPTAsdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MDtyPTB8YXJbKHM9NCsoQXw9MCl8MCk+PjJdLGI9MHxhcltBPj4yXSxuPWI7ZG97aWYoKDB8cik9PSgwfGIpKXtpZihmPTB8YXJbKGI9QSs4fDApPj4yXSxsPTB8YXJbKHU9QSsxMnwwKT4+Ml0sZj4+PjA8KGk9bCk+Pj4wKXt0PShpPShuPWYpKygobz0oMSsoaS1uPj4yKXwwKS8yfDApPDwyKXwwKSsoMC0odT0obj1uLXJ8MCk+PjIpPDwyKXwwLHUmJih3YigwfHQsMHxyLDB8biksaT10LGY9MHxhcltiPj4yXSksYXJbcz4+Ml09aSxhcltiPj4yXT1mKyhvPDwyKTticmVha31pZigxMDczNzQxODIzPChuPTA9PSgwfChuPWktbj4+MSkpPzE6bik+Pj4wJiYoWnUocz0wfFgoOCksNDQ1MTkpLGFyW3M+PjJdPTE3NjYwLEkoMHxzLDQwMTYsNDI4KSksYT0wfGh1KG48PDIpLGw9aT0oYz1hKSsoKG4rM3wwKT4+PjI8PDIpfDAsYT1hKyhuPDwyKXwwLCgwfHIpPT0oMHxmKSluPWwsZj1yO2Vsc2V7Zm9yKG89aSxuPWwsdD1yO2FyW28+PjJdPWFyW3Q+PjJdLG49bz1uKzR8MCwoMHwodD10KzR8MCkpIT0oMHxmKTspO2Y9MHxhcltBPj4yXX1hcltBPj4yXT1jLGFyW3M+PjJdPWwsYXJbYj4+Ml09bixhclt1Pj4yXT1hLGYmJih2dShmKSxpPTB8YXJbcz4+Ml0pfWVsc2UgaT1yfXdoaWxlKDApO2FyW2krLTQ+PjJdPWFyW2U+PjJdLGFyW3M+PjJdPSgwfGFyW3M+PjJdKS00fShBLGMpLGE9MHxhclt1Pj4yXSxjPTB8YXJbYT4+Ml0sYT1hKzR8MCxhclt1Pj4yXT1hLG89MHxhcltiPj4yXSx0PTB8YXJbbD4+Ml0sZT10LG49bztkb3tpZigoMHxvKT09KDB8dCkpe2lmKHI9MHxhcltBPj4yXSwoaT1yKT4+PjA8YT4+PjApe2Y9KGU9YSkrKChpPSgxKyhlLWk+PjIpfDApLy0yfDApPDwyKXwwLGU9KHI9KGU9bi1lfDApPj4yKT8od2IoMHxmLDB8YSwwfGUpLDB8YXJbdT4+Ml0pOmEsQT1mKyhyPDwyKXwwLGFyW2I+PjJdPUEsYXJbdT4+Ml09ZSsoaTw8MiksZT1BO2JyZWFrfWlmKDEwNzM3NDE4MjM8KGU9MD09KDB8KGU9ZS1pPj4xKSk/MTplKT4+PjAmJihadShzPTB8WCg4KSw0NDUxOSksYXJbcz4+Ml09MTc2NjAsSSgwfHMsNDAxNiw0MjgpKSxmPTB8aHUoZTw8MiksdD1pPShuPWYpKyhlPj4+Mjw8Mil8MCxmPWYrKGU8PDIpfDAsKDB8YSk9PSgwfG8pKWU9dDtlbHNle2ZvcihlPXQscj1hO2FyW2k+PjJdPWFyW3I+PjJdLGU9aT1lKzR8MCwoMHwocj1yKzR8MCkpIT0oMHxvKTspO3I9MHxhcltBPj4yXX1hcltBPj4yXT1uLGFyW3U+PjJdPXQsYXJbYj4+Ml09ZSxhcltsPj4yXT1mLHImJih2dShyKSxlPTB8YXJbYj4+Ml0pfWVsc2UgZT1vfXdoaWxlKDApO2FyW2U+PjJdPWMsYXJbYj4+Ml09NCsoMHxhcltiPj4yXSksdXI9c30oQSszMnwwKSxhPTB8YXJbbz4+Ml0sdD0wfGFyW2U+PjJdLG49MHxhcltjPj4yXSksYXJbKDB8YXJbbisoKHU9dCthfDApPj4+MTA8PDIpPj4yXSkrKCgxMDIzJnUpPDwyKT4+Ml09YXJbaSsobDw8Mik+PjJdLGFyW2U+PjJdPXQrMSxhclsoMHxhcltyPj4yXSkrKGw8PDIpPj4yXT1hclsoMHxhcltmPj4yXSktND4+Ml0sYXJbZj4+Ml09KDB8YXJbZj4+Ml0pLTR9ZnVuY3Rpb24gZWEoQSxlKXtlfD0wO3ZhciByLGk9MCxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTA7cj0wfGFyWyhzPShBfD0wKSs0fDApPj4yXSxuPWI9MHxhcltBPj4yXTtkb3tpZigoMHxyKT09KDB8Yikpe2lmKChmPTB8YXJbKGI9QSs4fDApPj4yXSk+Pj4wPChpPWw9MHxhclsodT1BKzEyfDApPj4yXSk+Pj4wKXt0PShpPShuPWYpKygobz0oMSsoaS1uPj4yKXwwKS8yfDApPDwyKXwwKSsoMC0odT0obj1uLXJ8MCk+PjIpPDwyKXwwLHUmJih3YigwfHQsMHxyLDB8biksaT10LGY9MHxhcltiPj4yXSksYXJbcz4+Ml09aSxhcltiPj4yXT1mKyhvPDwyKTticmVha31pZigxMDczNzQxODIzPChuPTA9PSgwfChuPWktbj4+MSkpPzE6bik+Pj4wJiYoWnUocz0wfFgoOCksNDQ1MTkpLGFyW3M+PjJdPTE3NjYwLEkoMHxzLDQwMTYsNDI4KSksbD1pPShjPWE9MHxodShuPDwyKSkrKChuKzN8MCk+Pj4yPDwyKXwwLGE9YSsobjw8Mil8MCwoMHxyKT09KDB8Zikpbj1sLGY9cjtlbHNle2ZvcihvPWksbj1sLHQ9cjthcltvPj4yXT1hclt0Pj4yXSxuPW89bis0fDAsKDB8KHQ9dCs0fDApKSE9KDB8Zik7KTtmPTB8YXJbQT4+Ml19YXJbQT4+Ml09YyxhcltzPj4yXT1sLGFyW2I+PjJdPW4sYXJbdT4+Ml09YSxmJiYodnUoZiksaT0wfGFyW3M+PjJdKX1lbHNlIGk9cn13aGlsZSgwKTthcltpKy00Pj4yXT1hcltlPj4yXSxhcltzPj4yXT0oMHxhcltzPj4yXSktNH1mdW5jdGlvbiByYShBKXt2YXIgZSxyPTA7aWYocj0oQXw9MCkrMjR8MCwoMHxhclsoZT1BKzIwfDApPj4yXSk9PSgwfGFyW3I+PjJdKSlyZXR1cm4ocj0wKXxyO2Zvcig7QWEoQSksKDB8YXJbZT4+Ml0pIT0oMHxhcltyPj4yXSk7KTtyZXR1cm4gMHwoQT0xKX1mdW5jdGlvbiBpYShBLGUscixpLGYsbix0KXtlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsdHw9MDt2YXIgbyxhLGMsbCx1LGI9MCxzPTAsZD0wLGs9MCxoPTAsdz0wLHY9MDt1cj0odT11cikrMTZ8MCxhPXUsbD0oQXw9MCkrOHwwLHM9MHxhclsoYz1BKzEyfDApPj4yXSxvPWs9MHxhcltsPj4yXSxiPXM7QTpkb3tpZigoMHxzKT09KDB8aykpZD0tMSxrPXM7ZWxzZXtmb3Iodz1zLWs+PjIsZD0wO2g9MHxhcltvKyhkPDwyKT4+Ml0sMCE9KDB8dHJbaCsxMDA+PjBdKXx8MCE9KDB8YXJbaCs5Nj4+Ml0pOylpZih3Pj4+MDw9KGQ9ZCsxfDApPj4+MCl7ZD0tMTticmVhayBBfW9hKGgpLGI9MHxhcltjPj4yXSxrPTB8YXJbbD4+Ml0scz1ifX13aGlsZSgwKTtyZXR1cm4oMHxkKT09KCh3PXMtaz4+MikrLTF8MCl8fHc+Pj4wPD0oMHxhcltBKzQ+PjJdKT4+PjB8fCh2PTB8YXJbYistND4+Ml0sMCE9KDB8dHJbdisxMDA+PjBdKSl8fDAhPSgwfGFyW3YrOTY+PjJdKT9iPXM6KChzPTB8YXJbYistND4+Ml0pJiYoYWEocyksdnUocyksYj0wfGFyW2M+PjJdKSxiPWIrLTR8MCxhcltjPj4yXT1iKSwtMT09KDB8ZCkmJihkPWItKDB8YXJbbD4+Ml0pPj4yLG5hKGI9MHxodSgxMDYyNCkpLGFyW2E+PjJdPWIsKHM9MHxhcltjPj4yXSk+Pj4wPCgwfGFyW0ErMTY+PjJdKT4+PjA/KGFyW3M+PjJdPWIsYXJbYz4+Ml09NCsoMHxhcltjPj4yXSkpOmZ1bmN0aW9uKEEsZSl7ZXw9MDt2YXIgcixpLGYsbix0LG89MCxhPTAsYz0wLGw9MDtmPTQrKEF8PTApfDAsbj0wfGFyW0E+PjJdLHQ9KDB8YXJbZj4+Ml0pLW58MCwxMDczNzQxODIzPChvPTErKGk9dD4+Mil8MCk+Pj4wJiZ6bCgpO2M9KDB8YXJbKGw9QSs4fDApPj4yXSktbnwwLGE9Yz4+MSxhPWM+PjI+Pj4wPDUzNjg3MDkxMT9hPj4+MDxvPj4+MD9vOmE6MTA3Mzc0MTgyMztkb3tpZihhKXtpZighKDEwNzM3NDE4MjM8YT4+PjApKXtjPTB8aHUoYTw8Mik7YnJlYWt9WnUobD0wfFgoOCksNDQ1MTkpLGFyW2w+PjJdPTE3NjYwLEkoMHxsLDQwMTYsNDI4KX1lbHNlIGM9MH13aGlsZSgwKTthclsocj1jKyhpPDwyKXwwKT4+Ml09YXJbZT4+Ml0sbz1yKygwLWk8PDIpfDAsMDwoMHx0KSYmaGIoMHxvLDB8biwwfHQpO2lmKGFyW0E+PjJdPW8sYXJbZj4+Ml09NCtyLGFyW2w+PjJdPWMrKGE8PDIpLCFuKXJldHVybjt2dShuKX0obCxhKSksYj0wfGFyWygwfGFyW2w+PjJdKSsoZDw8Mik+PjJdLChzPTB8YXJbZSs0NzY+PjJdKT4+PjA8ND8odGEoYiwwfGFyW2UrNDg0Pj4yXSwwfGFyW2UrNDg4Pj4yXSxzLGUsMSxyLDAsaSxmLG4sdCksdHJbYisxMDUxNj4+MF09MCx1cj11LDB8ZCk6KHNyKDQ0NDU2LDM2NTU0LDI1OSwzNjU5OSksMCl9ZnVuY3Rpb24gZmEoQSl7dmFyIGUscjtlPShBfD0wKSszNnwwLHI9QSs0OHwwLGFyWyhBPUErNTJ8MCk+PjJdPSgwfGFyW0E+PjJdKS0xLEE9MSsoMHxhcltyPj4yXSl8MCwoYXJbcj4+Ml09QSk+Pj4wPD0yMDQ3fHwodnUoMHxhclthcltlPj4yXT4+Ml0pLGFyW2U+PjJdPTQrKDB8YXJbZT4+Ml0pLGFyW3I+PjJdPSgwfGFyW3I+PjJdKS0xMDI0KX1mdW5jdGlvbiBuYShBKXt2YXIgZSxyLGk9MDthclsoQXw9MCkrNDg+PjJdPTAsYXJbQSs1Mj4+Ml09MCxhcltBKzU2Pj4yXT0wLGFyW0ErNzAwPj4yXT0wLGFyW0ErNzA0Pj4yXT0wLGFyW0ErNzA4Pj4yXT0wLGFyWyhpPUErNzM2fDApPj4yXT0wLGFyW2krND4+Ml09MCxhcltpKzg+PjJdPTAsYXJbaSsxMj4+Ml09MCxhcltpKzE2Pj4yXT0wLCRhKEErNzY0fChhcltpKzIwPj4yXT0wKSksSWEoQSs1OTMyfDApLHRyW0ErMTA1MTg+PjBdPTAsdHJbQSsxMDUxOT4+MF09MCx2YihBKzEwMzQwfCh0cltBKzEwNTIwPj4wXT0wKSwwLDE0MCksYXJbQT4+Ml09LTEsYXJbQSsxMDQ+PjJdPTAsYXJbQSsxMDMzMj4+Ml09MCxhcltBKzEwMzM2Pj4yXT0wLGFyW0ErMTA1MTI+PjJdPTAsYXJbQSs0Pj4yXT0wLGFyW0ErNjA+PjJdPTAsYXJbQSs4Pj4yXT0wLGFyW0ErNjQ+PjJdPTAsYXJbQSsxMj4+Ml09MCxhcltBKzY4Pj4yXT0wLGFyW0ErMjg+PjJdPTAsaT1BKzEwNDgwfChhcltBKzI0Pj4yXT0wKSxhcltBKzEwNTI0Pj4yXT0wLGFyW2k+PjJdPTAsYXJbaSs0Pj4yXT0wLGFyW2krOD4+Ml09MCxhcltpKzEyPj4yXT0wLGFyW2krMTY+PjJdPTAsYXJbaSsyMD4+Ml09MCx0cltBKzEwNTE2Pj4wXT0yLGFyW0ErODg+PjJdPS0xLGFyW0ErOTI+PjJdPS0xLGFyW0ErOTY+PjJdPTAsdHJbQSsxMDA+PjBdPTAsYXJbKGk9QSsxMDUyOHwwKT4+Ml09MCxhcltpKzQ+PjJdPTAsYXJbaSs4Pj4yXT0wLGFyW2krMTI+PjJdPTAsYXJbaSsxNj4+Ml09MCxlPUErMTA1NDh8MCxwQSgwfChlfD0wKSwwKSxyPUErMTA1NzZ8MCxkQSgwfChyfD0wKSwwKX1mdW5jdGlvbiB0YShBLGUscixpLGYsbix0LG8sYSxjLGwsdSl7QXw9MCxlfD0wLHJ8PTAsaXw9MCxufD0wLHR8PTAsb3w9MCxhfD0wLGN8PTAsbHw9MCx1fD0wO3ZhciBiLHMsZD0wLGs9MCxoPTAsdz0wLHY9MCxtPTAsZz0wLFo9MCxwPTAseT0wO3N3aXRjaCh1cj0ocz11cikrNDh8MCxiPXMsKGZ8PTApfHxzcigzNjc0OSwzNjY2MywyNDAsMzY3NTMpLGhiKDB8KGg9QSs3NjR8MCksMHxmLDQ3MTcpLCgwfGgpIT0oMHxmKSYmS2UoQSs1NDg0fDAsMHxhcltmKzQ3MjA+PjJdLDB8YXJbZis0NzI0Pj4yXSksaGIoQSs1NDk2fDAsZis0NzMyfDAsNDM2KSxvYShBKSxrPTB8YXJbMTQzMjZdLGFyWzE0MzI2XT1rKzEsYXJbQT4+Ml09ayxhcltBKzEwND4+Ml09MjE0NzQ4MzY0NyxhcltBKzEwMzMyPj4yXT10LGFyW0ErMTAzMzY+PjJdPW8sYXJbQSsyMD4+Ml09aSxhcltBKzI0Pj4yXT1lLGFyW0ErMjg+PjJdPXIsYXJbKGs9QSszMnwwKT4+Ml09ZSxhclsoaD1BKzM2fDApPj4yXT1yLGFyW0ErMTA0ODg+PjJdPWwsYXJbKGw9QSsxMDQ4MHwwKT4+Ml09YSxhcltsKzQ+PjJdPWMsMHxpKXtjYXNlIDM6Y2FzZSAwOmQ9bT0xO2JyZWFrO2Nhc2UgMTpkPTIscD04O2JyZWFrO2Nhc2UgMjpkPTEscD04O2JyZWFrO2RlZmF1bHQ6c3IoNDQ0NTYsMzY2NjMsMjc2LDM2NzUzKX1zd2l0Y2goOD09KDB8cCkmJihtPTIpLDB8aSl7Y2FzZSAxOnc9KGUrMXwwKS8oYXJbYj4+Ml09Mil8MCxhcltrPj4yXT13LHY9KHIrMXwwKS8yfDAsYXJbaD4+Ml09djticmVhaztjYXNlIDI6YXJbYj4+Ml09Myx3PShlKzF8MCkvMnwwLGFyW2s+PjJdPXcsdj1yO2JyZWFrO2Nhc2UgMzphcltiPj4yXT00LHc9ZSx2PXI7YnJlYWs7Y2FzZSAwOmFyW2I+PjJdPTEsYXJbaz4+Ml09MCx2PXc9YXJbaD4+Ml09MDticmVhaztkZWZhdWx0OnNyKDU1NzM5LDM2NjYzLDMwMiwzNjc1Myl9YXJbYis0Pj4yXT1lLGFyW2IrOD4+Ml09cixhcltiKzEyPj4yXT0xNixpPTB8YXJbZis0OTY+PjJdLGE9MHxhcltmKzUwMD4+Ml0saz0wfGFyW2YrNTA0Pj4yXSxoPTB8YXJbZis1MDg+PjJdLGU9ZS0oMHxicih5PWEraXwwLG0pKXwwLGFyW0ErNzI+PjJdPWUsbD1yLSgwfGJyKGM9aCtrfDAsZCkpfDAsYXJbQSs3Nj4+Ml09bCxhcltBKzgwPj4yXT13LXksYXJbQSs4ND4+Ml09di1jLGM9MHxicihpLG0pLGFyW2IrMTY+PjJdPWMsYT0wfGJyKGEsbSksYXJbYisyMD4+Ml09YSxhPTB8YnIoayxkKSxhcltiKzI0Pj4yXT1hLG09MHxicihoLGQpLGFyW2IrMjg+PjJdPW0sYXJbYiszMj4+Ml09ZSxhcltiKzM2Pj4yXT1sLHRyW0ErMTY+PjBdPTg8KDB8YXJbZis0OTk2Pj4yXSkmMSxsPTg8KDB8YXJbZis1MDA0Pj4yXSkmMSx0cltBKzE3Pj4wXT1sLHRyW0ErMTg+PjBdPWwsZD0obD0wPT0oMHx0KSk/MDowfGFyW3QrNTQ0Pj4yXTtkb3tpZihvKXtpZihkPTB8YXJbbyszMDYwPj4yXSx1KXtpZih5PTB8YXJbbyszMDY0Pj4yXSxsPUErMTA1MDR8MCxhcltBKzEwNTEyPj4yXT15KXthcltsPj4yXT0wLGFyW0ErMTA1MDg+PjJdPTA7YnJlYWt9Wj0wfGFyWyhwPTc3MzYpPj4yXSxwPTB8YXJbcCs0Pj4yXSxhclsoZz1sKT4+Ml09WixhcltnKzQ+PjJdPXAsZz1kLHA9MjU7YnJlYWt9cD0yNH1lbHNlIHA9bHwxXnU/MjQ6KFo9MHxhclsocD10KzUzNnwwKT4+Ml0scD0wfGFyW3ArND4+Ml0sYXJbKGc9QSsxMDUwNHwwKT4+Ml09WixhcltnKzQ+PjJdPXAsZz1kLDI1KX13aGlsZSgwKTtpZigyND09KDB8cCkmJihaPTB8YXJbKHk9NzczNik+PjJdLHk9MHxhclt5KzQ+PjJdLGFyWyhnPUErMTA1MDR8MCk+PjJdPVosYXJbZys0Pj4yXT15LGc9ZCxwPTI1KSwyNT09KDB8cCkmJjB8WiYmKHk9MD09KDB8UGJbNyZaXSh0LGIsQSxnKSksdD0oMHxhcltBKzQ+PjJdKStjKygwfGJyKDB8YXJbQSs0MD4+Ml0sYSkpfDAsYXJbQSs2MD4+Ml09dCx0PTB8YnIoMHxhcltBKzQ0Pj4yXSxrKSxhcltBKzY0Pj4yXT0oMHxhcltBKzg+PjJdKStpK3QsYXJbQSs2OD4+Ml09KDB8YXJbQSsxMj4+Ml0pK2krdCx5KSlyZXR1cm4gdXI9cywwfCh5PTcpO2Rve2lmKG4pe2k9MHxhclsoZT1mKzUxMTJ8MCk+PjJdLGs9MHxhclsodz1mKzUxMTZ8MCk+PjJdLGg9MHxhclsodj1mKzUxMDh8MCk+PjJdLGE9MHxicihrLGkpLGM9QSsxMDQwNHwwLGQ9MHxhclsobD1BKzEwNDAwfDApPj4yXTtkb3tpZigoMHxhKSE9KDB8YXJbYz4+Ml0pKXtpZihCYyhkKSxkPTB8eWMoYSksYXJbbD4+Ml09ZCl7YXJbYz4+Ml09YSxwPTMyO2JyZWFrfXI9YXJbYz4+Ml09MDticmVha31wPTMyfXdoaWxlKDApOzMyPT0oMHxwKSYmKGFyW0ErMTA0MTI+PjJdPWksYXJbQSsxMDQxNj4+Ml09ayxhcltBKzEwNDA4Pj4yXT1oLHI9MCE9KDB8ZCkpLGg9MHxhcltlPj4yXSxrPTB8YXJbdz4+Ml0saT0wfGFyW3Y+PjJdLGE9MHxicihrLGgpLGM9QSsxMDQyNHwwLGQ9MHxhclsobD1BKzEwNDIwfDApPj4yXTtkb3tpZigoMHxhKSE9KDB8YXJbYz4+Ml0pKXtpZihCYyhkKSxkPTB8eWMoYSksYXJbbD4+Ml09ZCl7YXJbYz4+Ml09YSxwPTM3O2JyZWFrfWQ9YXJbYz4+Ml09MDticmVha31wPTM3fXdoaWxlKDApOzM3PT0oMHxwKSYmKGFyW0ErMTA0MzI+PjJdPWgsYXJbQSsxMDQzNj4+Ml09ayxhcltBKzEwNDI4Pj4yXT1pLGQ9MCE9KDB8ZCkpLGU9ciZkLGw9QSsxMDM2MHwwLGk9MHxhclsocj1mKzUwNTJ8MCk+PjJdLGs9MHxhclsodj1mKzUwNjB8MCk+PjJdLGg9MHxhclsodz1mKzUwMzZ8MCk+PjJdLGE9MHxicihrLGkpLGM9QSsxMDM2NHwwO2Rve2lmKCgwfGEpIT0oMHxhcltjPj4yXSkpe2lmKEJjKDB8YXJbbD4+Ml0pLGQ9MHx5YygzKmF8MCksYXJbbD4+Ml09ZCl7YXJbYz4+Ml09YSxwPTQzO2JyZWFrfWQ9YXJbYz4+Ml09MDticmVha31kPTB8YXJbbD4+Ml0scD00M313aGlsZSgwKTs0Mz09KDB8cCkmJihhcltBKzEwMzcyPj4yXT1pLGFyW0ErMTAzNzY+PjJdPWssYXJbQSsxMDM2OD4+Ml09aCxkPTAhPSgwfGQpKSxoPWUmZCxpPSgwfGFyW3c+PjJdKS0yfDAsaz1hcltyPj4yXTw8aSxpPWFyW3Y+PjJdPDxpLGw9QSsxMDM4MHwwLGE9MHxicihpLGspLGM9QSsxMDM4NHwwO2Rve2lmKCgwfGEpIT0oMHxhcltjPj4yXSkpe2lmKEJjKDB8YXJbbD4+Ml0pLGQ9MHx5YygxMiphfDApLGFyW2w+PjJdPWQpe2FyW2M+PjJdPWEscD00OTticmVha31kPWFyW2M+PjJdPTA7YnJlYWt9ZD0wfGFyW2w+PjJdLHA9NDl9d2hpbGUoMCk7NDk9PSgwfHApJiYoYXJbQSsxMDM5Mj4+Ml09ayxhcltBKzEwMzk2Pj4yXT1pLGFyW0ErMTAzODg+PjJdPTIsZD0wIT0oMHxkKSksZT1oJmQsaT0wfGFyW2YrNTA4OD4+Ml0saz0wfGFyW2YrNTA5Mj4+Ml0saD0wfGFyW2YrNTEwMD4+Ml0sYT0wfGJyKGssaSksYz1BKzEwNDQ0fDAsZD0wfGFyWyhsPUErMTA0NDB8MCk+PjJdO2Rve2lmKCgwfGEpIT0oMHxhcltjPj4yXSkpe2lmKEJjKGQpLGQ9MHx5YyhhKSxhcltsPj4yXT1kKXthcltjPj4yXT1hLHA9NTQ7YnJlYWt9ZD1hcltjPj4yXT0wO2JyZWFrfXA9NTR9d2hpbGUoMCk7NTQ9PSgwfHApJiYoYXJbQSsxMDQ1Mj4+Ml09aSxhcltBKzEwNDU2Pj4yXT1rLGFyW0ErMTA0NDg+PjJdPWgsZD0wIT0oMHxkKSksaD1lJmQsaT0oMysoMHxhcltmKzQ4ND4+Ml0pfDApLzR8MCxrPSgzKygwfGFyW2YrNDg4Pj4yXSl8MCkvNHwwLGE9MHxicihrLGkpLGM9QSsxMDQ2NHwwLGQ9MHxhclsobD1BKzEwNDYwfDApPj4yXTtkb3tpZigoMHxhKSE9KDB8YXJbYz4+Ml0pKXtpZihCYyhkKSxkPTB8eWMoYSksYXJbbD4+Ml09ZCl7YXJbYz4+Ml09YSxwPTU5O2JyZWFrfWQ9YXJbYz4+Ml09MDticmVha31wPTU5fXdoaWxlKDApO2lmKDU5PT0oMHxwKSYmKGFyW0ErMTA0NzI+PjJdPWksYXJbQSsxMDQ3Nj4+Ml09ayxhcltBKzEwNDY4Pj4yXT0yLGQ9MCE9KDB8ZCkpLHI9aCZkLGg9QSsxMDM0MHwwLCgwfChkPTB8YXJbKGU9QSsxMDM0NHwwKT4+Ml0pKT09KDB8YXJbZis1MDcyPj4yXSkpe2lmKHIpYnJlYWs7cmV0dXJuIHVyPXMsMHwoZD03KX1pZihhPTB8YXJbKHc9QSsxMDUyNHwwKT4+Ml0pe2lmKDB8KGQ9MHxhclsobD1hKy00fDApPj4yXSkpZm9yKGQ9YSsoODAqZHwwKXwwO0puKGQ9ZCstODB8MCksKDB8ZCkhPSgwfGEpOyk7bXUobCksZD0wfGFyW2U+PjJdfWk9MHxhcltmKzUwNTY+PjJdLGs9MHxhcltmKzUwNjQ+PjJdLGM9MHxhcltmKzUwNDA+PjJdLGw9MHxicihrLGkpO2Rve2lmKCgwfGwpIT0oMHxkKSl7aWYoQmMoMHxhcltoPj4yXSksZD0wfHljKDI0Kmx8MCksYXJbaD4+Ml09ZCl7YXJbZT4+Ml09bCxhPWQscD03MTticmVha31sPWQ9YXJbZT4+Ml09MDticmVha31hPTB8YXJbaD4+Ml0sbD1kLHA9NzF9d2hpbGUoMCk7aWYoNzE9PSgwfHApJiYoYXJbQSsxMDM1Mj4+Ml09aSxhcltBKzEwMzU2Pj4yXT1rLGFyW0ErMTAzNDg+PjJdPWMsZD0wIT0oMHxhKSksYT1yJmQsYz0wfHd1KDUzNjg3MDkxPGw+Pj4wfDQyOTQ5NjcyOTE8KGM9ODAqbHwwKT4+PjA/LTE6Yys0fDApLGFyW2M+PjJdPWwsYz1jKzR8MCwwfGwpZm9yKGQ9YysoODAqbHwwKXwwLGw9YztEbihsKSwoMHwobD1sKzgwfDApKSE9KDB8ZCk7KTtpZihhclt3Pj4yXT1jLCFhKXJldHVybiB1cj1zLDB8KHk9Nyl9fXdoaWxlKDApO3JldHVybiB1cj1zLCh5PTApfHl9ZnVuY3Rpb24gb2EoQSl7dmFyIGUscj0wLGk9MCxmPTAsbj0wLHQ9MCxvPTA7aWYoMHxhclsoZj0oQXw9MCkrNHwwKT4+Ml0mJigocj0wfGFyW0ErMTA1MTI+PjJdKT8obz0wfGFyW0ErMTAzMzY+PjJdLG5zWzEyNyZyXShvLEEsMHxhcltvKzMwNjA+PjJdKSk6KGk9KHI9MHxhcltBKzEwMzMyPj4yXSk/MHxhcltyKzU0ND4+Ml06MCxuc1sxMjcmYXJbQSsxMDUwOD4+Ml1dKHIsQSxpKSksYXJbZj4+Ml09MCxhcltBKzYwPj4yXT0wLGFyW0ErOD4+Ml09MCxhcltBKzY0Pj4yXT0wLGFyW0ErMTI+PjJdPTAsYXJbQSs2OD4+Ml09MCksZT1BKzQ4fDAsKDB8KHI9aT0wfGFyWyhvPUErNTJ8MCk+PjJdKSkhPSgwfChmPUE9MHxhcltlPj4yXSkpKXtmb3IodD0wOyhuPTB8YXJbZisodDw8Mik+PjJdKSYmKDB8KHI9MHxhcltuKzEzNDQ+PjJdKSYmKCgwfChmPTB8YXJbKGk9bisxMzQ4fDApPj4yXSkpIT0oMHxyKSYmKGFyW2k+PjJdPWYrKH4oKGYrLTQtcnwwKT4+PjIpPDwyKSksdnUocikpLGt0KG4rMTMzMnwwKSwwfChyPTB8YXJbbis3NzY+PjJdKSYmKCgwfChmPTB8YXJbKGk9bis3ODB8MCk+PjJdKSkhPSgwfHIpJiYoYXJbaT4+Ml09ZisofigoZistNC1yfDApPj4+Mik8PDIpKSx2dShyKSksdnUobikscj0wfGFyW28+PjJdLEE9MHxhcltlPj4yXSxpPXIpLCh0PXQrMXwwKT4+PjA8aS0oZj1BKT4+Mj4+PjA7KTtpPUF9KDB8cikhPSgwfGYpJiYoYXJbbz4+Ml09cisofigocistNC1pfDApPj4+Mik8PDIpKX1mdW5jdGlvbiBhYShBKXt2YXIgZSxyLGksZj0wLG49MCx0PTAsbz0wO2lmKG9hKEF8PTApLDB8KG49MHxhcltBKzEwNTI0Pj4yXSkpe2lmKDB8KGY9MHxhclsodD1uKy00fDApPj4yXSkpZm9yKGY9bisoODAqZnwwKXwwO0puKGY9ZistODB8MCksKDB8ZikhPSgwfG4pOyk7bXUodCl9aWYocj1BKzEwNTc2fDAsc0EoMHwocnw9MCkpLGk9QSsxMDU0OHwwLFpBKDB8KGl8PTApKSxCYygwfGFyW0ErMTA0NjA+PjJdKSxCYygwfGFyW0ErMTA0NDA+PjJdKSxCYygwfGFyW0ErMTA0MjA+PjJdKSxCYygwfGFyW0ErMTA0MDA+PjJdKSxCYygwfGFyW0ErMTAzODA+PjJdKSxCYygwfGFyW0ErMTAzNjA+PjJdKSxCYygwfGFyW0ErMTAzNDA+PjJdKSxHYShBKzU5MzJ8MCksQWMoQSs3NjR8MCksMHwoZj0wfGFyW0ErNzQ4Pj4yXSkmJigoMHxhclsobj1BKzc1MnwwKT4+Ml0pIT0oMHxmKSYmKGFyW24+PjJdPWYpLHZ1KGYpKSwwfChmPTB8YXJbQSs3MzY+PjJdKSYmKCgwfCh0PTB8YXJbKG49QSs3NDB8MCk+PjJdKSkhPSgwfGYpJiYoYXJbbj4+Ml09dCsofigodCstMi1mfDApPj4+MSk8PDEpKSx2dShmKSksMHwoZj0wfGFyWyhlPUErNzAwfDApPj4yXSkpe2lmKCgwfChuPTB8YXJbKG89QSs3MDR8MCk+PjJdKSkhPSgwfGYpKXtmb3IoO249bistMTJ8MCxhcltvPj4yXT1uLCh0PTB8YXJbbj4+Ml0pJiYodnUodCksbj0wfGFyW28+PjJdKSwoMHxuKSE9KDB8Zik7KTtmPTB8YXJbZT4+Ml19dnUoZil9KHQ9MHxhcltBKzQ4Pj4yXSkmJigoMHwobj0wfGFyWyhmPUErNTJ8MCk+PjJdKSkhPSgwfHQpJiYoYXJbZj4+Ml09bisofigobistNC10fDApPj4+Mik8PDIpKSx2dSh0KSl9ZnVuY3Rpb24gY2EoQSxlKXtlfD0wO3ZhciByLGk7WW4ocj0oQXw9MCkrMTA1NDh8MCksYXJbKGk9QSsxMDUyOHwwKT4+Ml09KDB8YXJbaT4+Ml0pK2UsYXJbKEE9QSsxMDU0NHwwKT4+Ml09KDB8YXJbQT4+Ml0pK2UsUW4ocil9ZnVuY3Rpb24gbGEoQSxlKXtlfD0wO3ZhciByO1luKGU9KEF8PTApKzEwNTQ4fDApLGFyWyhyPUErMTA1Mjh8MCk+PjJdPSgwfGFyW3I+PjJdKS0xLGFyWyhBPUErMTA1MzJ8MCk+PjJdPTErKDB8YXJbQT4+Ml0pLFFuKGUpfWZ1bmN0aW9uIHVhKEEsZSl7ZXw9MDt2YXIgcixpLGYsbj0wOyhZbihlPShBfD0wKSsxMDU0OHwwKSxpPTB8YXJbKG49QSsxMDUzMnwwKT4+Ml0sYXJbbj4+Ml09aS0xLHI9MSsoMHxhclsobj1BKzEwNTQwfDApPj4yXSl8MCxhcltuPj4yXT1yLCgwfGkpPD0wJiZzcigzNjgwOSwzNjY2Myw2NDIsMzY4MzApLCgwfHIpPT0oMHxhcltBKzEwNTQ0Pj4yXSkpPyhmPUErMTA1NzZ8MCxtYihmfD0wKSxRbihlKSk6UW4oZSl9ZnVuY3Rpb24gYmEoQSxlLHIsaSxmKXtyfD0wLGl8PTAsZnw9MCxmdW5jdGlvbihBLGUscixpKXtBfD0wLHJ8PTAsaXw9MDt2YXIgZixuO2lmKCEoZXw9MCkpcmV0dXJuO2lmKCgwfGZ1bmN0aW9uKEEpe3JldHVybiAwfGFyWyhBfD0wKT4+Ml19KHI9KDB8YXJbQSsxMDUyND4+Ml0pKyg4MCpyfDApfDApKT49KDB8aSkpcmV0dXJuO1luKGY9QSsxMDU0OHwwKSxhclsobj1BKzEwNTMyfDApPj4yXT0oMHxhcltuPj4yXSktMSxhclsoQT1BKzEwNTM2fDApPj4yXT0xKygwfGFyW0E+PjJdKSxRbihmKSxhclsoZT1lKzR8MCk+PjJdPTIsTW4ocixpKSxhcltlPj4yXT0xLFluKGYpLGFyW0E+PjJdPSgwfGFyW0E+PjJdKS0xLGFyW24+PjJdPTErKDB8YXJbbj4+Ml0pLFFuKGYpfShBfD0wLGV8PTAsKDB8YnIoMHxhcltBKzU4MjA+PjJdLGkpKStyfDAsZil9ZnVuY3Rpb24gc2EoQSl7dmFyIGUscixpO2lmKFluKGU9KEF8PTApKzEwNTQ4fDApLGk9QSsxMDU0NHwwLCgwfGFyWyhyPUErMTA1NDB8MCk+PjJdKSE9KDB8YXJbaT4+Ml0pKXtmb3IoQT1BKzEwNTc2fDA7Zj1BLG49ZSxoQSgwfChmfD0wKSwwfChufD0wKSksKDB8YXJbcj4+Ml0pIT0oMHxhcltpPj4yXSk7KTt2YXIgZixuO1FuKGUpfWVsc2UgUW4oZSl9ZnVuY3Rpb24gZGEoQSxlLHIsaSxmKXtBfD0wLGV8PTAscnw9MDt2YXIgbj0wLHQ9MCxvPTAsYT0wO3JldHVybigoZnw9MCl8KGl8PTApfDApPDB8fCgwfGFyW0ErMTI0OD4+Ml0pPD0oMHxpKXx8KDB8YXJbQSsxMjUyPj4yXSk8PSgwfGYpPyhBPTApfEE6KHQ9MHxhcltBKzU4NjQ+PjJdLGE9MHxhcltBKzU4NTI+PjJdLG49KDB8YnIoZj4+dCxhKSkrKGk+PnQpfDAsdD0obz0wfGFyW0ErMTAzMjA+PjJdKSsoKDB8YnIocj4+dCxhKSkrKGU+PnQpPDwyKXwwLCgwfGFyW28rKG48PDIpPj4yXSk+KDB8YXJbdD4+Ml0pPyhhPTApfGE6KHQ9ZT4+KGE9MHxhcltBKzU4MDQ+PjJdKSxuPXI+PmEscj1pPj5hLGU9Zj4+YSxhPTB8YXJbQSsxMDM1Mj4+Ml0sbz0oMHxicihhLG4pKSt0fDAsYT0oZj0wfGFyW0ErMTAzNDA+PjJdKSsoMjQqKCgwfGJyKGEsZSkpK3J8MCl8MCl8MCwoMHxvcltmKygyNCpvfDApPj4xXSkhPSgwfG9yW2E+PjFdKT8oYT0wKXxhOihhPTB8YXJbQSs1ODIwPj4yXSxvPSgwfGJyKGEsbikpK3R8MCxhPShBPTB8YXJbQSsxMDMwOD4+Ml0pKygoMHxicihhLGUpKStyPDwyKXwwLDB8KGE9KDB8YXJbQSsobzw8Mik+PjJdKT09KDB8YXJbYT4+Ml0pKSkpKX1mdW5jdGlvbiBrYShBLGUscixpLGYsbix0LG8sYSxjLGwpe2lmKEF8PTAsZnw9MCxufD0wLHR8PTAsb3w9MCxhfD0wLCgwfChsfD0wKSk8KChpfD0wKSsocnw9MCl8MCkmKDFeKChpKyhlfD0wKXwwKTw9KDB8KGN8PTApKXwoMHxjKTwoMHxlKXwoMHxsKTwoMHxyKSkpKXtpZigodDw8MXwwKT09KDB8aSkmJiEoKHQrZXwwKTw9KDB8Yyl8MSE9KDB8YSl8KG88PDF8MCkhPSgwfGkpfCgwfGwpPChvK3J8MCkpKXJldHVybiAwfWVsc2V7aWYoKGx8Y3wwKTwwKXJldHVybiAwO2lmKCgwfGFyW0ErMTI0OD4+Ml0pPD0oMHxjKSlyZXR1cm4gMDtpZigoMHxhcltBKzEyNTI+PjJdKTw9KDB8bCkpcmV0dXJuIDA7aWYoYT0wfGFyW0ErNTg2ND4+Ml0saT0wfGFyW0ErNTg1Mj4+Ml0sbz0oMHxicihsPj5hLGkpKSsoYz4+YSl8MCxhPSh0PTB8YXJbQSsxMDMyMD4+Ml0pKygoMHxicihuPj5hLGkpKSsoZj4+YSk8PDIpfDAsKDB8YXJbdCsobzw8Mik+PjJdKT4oMHxhclthPj4yXSkpcmV0dXJuIDA7aWYoZj4+PWk9MHxhcltBKzU4MDQ+PjJdLGU9bj4+aSxyPWM+PmksaT1sPj5pLG49MHxhcltBKzEwMzUyPj4yXSxhPSgwfGJyKG4sZSkpK2Z8MCxuPShvPTB8YXJbQSsxMDM0MD4+Ml0pKygyNCooKDB8YnIobixpKSkrcnwwKXwwKXwwLCgwfG9yW28rKDI0KmF8MCk+PjFdKSE9KDB8b3Jbbj4+MV0pKXJldHVybiAwO2lmKG49MHxhcltBKzU4MjA+PjJdLGE9KDB8YnIobixlKSkrZnwwLG49KG89MHxhcltBKzEwMzA4Pj4yXSkrKCgwfGJyKG4saSkpK3I8PDIpfDAsKDB8YXJbbysoYTw8Mik+PjJdKSE9KDB8YXJbbj4+Ml0pKXJldHVybiAwfXJldHVybiBpPWM+PihlPTB8YXJbQSsxMDM2OD4+Ml0pLGU9bD4+ZSwoMHxpKTw9LTEmJnNyKDQ4NDgyLDM2ODQ2LDExOCw0ODUzOSksKDB8KHI9MHxhcltBKzEwMzcyPj4yXSkpPD0oMHxpKSYmc3IoNDg0ODIsMzY4NDYsMTE4LDQ4NTM5KSwoMHxlKTw9LTEmJnNyKDQ4NTQzLDM2ODQ2LDExOSw0ODUzOSksKDB8ZSk8KDB8YXJbQSsxMDM3Nj4+Ml0pPyhBPSgwfGFyW0ErMTAzNjA+PjJdKSsoMyooKDB8YnIocixlKSkraXwwKXwwKXwwLDAhPSg3NjgmKGNyW0E+PjBdfGNyW0ErMT4+MF08PDgpKXwwKTooc3IoNDg1NDMsMzY4NDYsMTE5LDQ4NTM5KSwwKX1mdW5jdGlvbiBoYShBKXtyZXR1cm4oKEF8PTApKy0xOSYyNTUpPDJ8MH1mdW5jdGlvbiB3YShBKXtyZXR1cm4oKEF8PTApKy0xNiYyNTUpPDN8MH1mdW5jdGlvbiB2YShBKXtyZXR1cm4oMXwoQXw9MCkpPDwyND4+MjQ9PTl8MH1mdW5jdGlvbiBtYShBKXtyZXR1cm4oLTgmKEF8PTApKTw8MjQ+PjI0PT0xNnwwfWZ1bmN0aW9uIGdhKEEsZSl7ZXw9MDt2YXIgcixpLGYsbix0LG89MCxhPTAsYz0wLGw9MDtmPShBfD0wKSs0fDAsbj0wfGFyW0E+PjJdLDEwNzM3NDE4MjM8KG89MSsoaT0odD0oMHxhcltmPj4yXSktbnwwKT4+Mil8MCk+Pj4wJiZ6bCgpLGE9KGM9KDB8YXJbKGw9QSs4fDApPj4yXSktbnwwKT4+MSxhPWM+PjI+Pj4wPDUzNjg3MDkxMT9hPj4+MDxvPj4+MD9vOmE6MTA3Mzc0MTgyMztkb3tpZihhKXtpZighKDEwNzM3NDE4MjM8YT4+PjApKXtjPTB8aHUoYTw8Mik7YnJlYWt9WnUobD0wfFgoOCksNDQ1MTkpLGFyW2w+PjJdPTE3NjYwLEkoMHxsLDQwMTYsNDI4KX1lbHNlIGM9MH13aGlsZSgwKTthclsocj1jKyhpPDwyKXwwKT4+Ml09YXJbZT4+Ml0sbz1yKygwLWk8PDIpfDAsMDwoMHx0KSYmaGIoMHxvLDB8biwwfHQpLGFyW0E+PjJdPW8sYXJbZj4+Ml09NCtyLGFyW2w+PjJdPWMrKGE8PDIpLG4mJnZ1KG4pfWZ1bmN0aW9uIFphKEEsZSxyKXtlfD0wLHJ8PTA7dmFyIGksZj0wO2ZvcihpPWY9MHxhclsoQXw9MCkrMzI+PjJdLEE9KDB8YXJbQSszNj4+Ml0pLWY+PjI7Oyl7aWYoZj1BKy0xfDAsKDB8QSk8PTApe0E9MCxmPTQ7YnJlYWt9aWYoISgoKDB8YXJbaSsoZjw8Mik+PjJdKS1yfDApPigwfGUpKSl7Zj00O2JyZWFrfUE9Zn1yZXR1cm4gND09KDB8Zik/MHxBOjB9ZnVuY3Rpb24gcGEoQSxlKXtlfD0wO3ZhciByLGksZixuLHQsbz0wLGE9MCxjPTAsbD0wO2Y9KEF8PTApKzR8MCxuPTB8YXJbQT4+Ml0sMTA3Mzc0MTgyMzwobz0xKyhpPSh0PSgwfGFyW2Y+PjJdKS1ufDApPj4yKXwwKT4+PjAmJnpsKCksYT0oYz0oMHxhclsobD1BKzh8MCk+PjJdKS1ufDApPj4xLGE9Yz4+Mj4+PjA8NTM2ODcwOTExP2E+Pj4wPG8+Pj4wP286YToxMDczNzQxODIzO2Rve2lmKGEpe2lmKCEoMTA3Mzc0MTgyMzxhPj4+MCkpe2M9MHxodShhPDwyKTticmVha31adShsPTB8WCg4KSw0NDUxOSksYXJbbD4+Ml09MTc2NjAsSSgwfGwsNDAxNiw0MjgpfWVsc2UgYz0wfXdoaWxlKDApO2FyWyhyPWMrKGk8PDIpfDApPj4yXT1hcltlPj4yXSxvPXIrKDAtaTw8Mil8MCwwPCgwfHQpJiZoYigwfG8sMHxuLDB8dCksYXJbQT4+Ml09byxhcltmPj4yXT00K3IsYXJbbD4+Ml09YysoYTw8MiksbiYmdnUobil9ZnVuY3Rpb24geWEoQSl7dmFyIGUscixpLGYsbj0wLHQ9MCxvPTA7cmV0dXJuKG49MHxhclsoZT0oQXw9MCkrMzJ8MCk+PjJdKT8oZj0wfGFyWyhpPUErMTZ8MCk+PjJdLG89MHxhclsodD1BKzI4fDApPj4yXSxyPTB8YXJbKDB8YXJbZisobz4+PjEwPDwyKT4+Ml0pKygoMTAyMyZvKTw8Mik+PjJdLGFyW2U+PjJdPW4rLTEsbj1vKzF8MCwyMDQ3PChhclt0Pj4yXT1uKT4+PjAmJih2dSgwfGFyW2Y+PjJdKSxhcltpPj4yXT00KygwfGFyW2k+PjJdKSxhclt0Pj4yXT0oMHxhclt0Pj4yXSktMTAyNCksYXJbKG89QSszNnwwKT4+Ml09KDB8YXJbbz4+Ml0pLSgwfGFyWzI0K3I+PjJdKSwwfChvPXIpKToodD0wKXx0fWZ1bmN0aW9uIEJhKEEsZSl7QXw9MCxlfD0wO3ZhciByLGksZixuLHQ9MCxvPTA7aWYodXI9KG49dXIpKzE2fDAsbz1hclsodD1uKT4+Ml09ZSl7aWYocj1BKzQwfDAsKGY9MHxhclsoaT1BKzQ0fDApPj4yXSktKDB8YXJbcj4+Ml0pPj4yPj4+MDwxNilyZXR1cm4oMHxmKT09KDB8YXJbQSs0OD4+Ml0pP3BhKHIsdCk6KGFyW2Y+PjJdPW8sYXJbaT4+Ml09NCsoMHxhcltpPj4yXSkpLHZvaWQodXI9bik7QmMoMHxhcltlKzIwPj4yXSksMHwoQT0wfGFyW2UrMzI+PjJdKSYmKCgwfChvPTB8YXJbKHQ9ZSszNnwwKT4+Ml0pKSE9KDB8QSkmJihhclt0Pj4yXT1vKyh+KChvKy00LUF8MCk+Pj4yKTw8MikpLHZ1KEEpKSx2dShlKSx1cj1ufWVsc2UgdXI9bn1mdW5jdGlvbiBFYShBKXt2YXIgZT0wLHI9MCxpPTAsZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wO2lmKHVyPShzPXVyKSszMnwwLGM9cys0fDAsYT1zLDEwMjM8KHI9MHxhclsoZT0oQXw9MCkrMTZ8MCk+PjJdKT4+PjApe2FyW2U+PjJdPXIrLTEwMjQsYz0wfGFyWyhsPUErNHwwKT4+Ml0sYj0wfGFyW2M+PjJdLGM9Yys0fDAsYXJbbD4+Ml09YyxvPTB8YXJbKHU9QSs4fDApPj4yXSxlPXQ9MHxhclsoYT1BKzEyfDApPj4yXSxuPW87ZG97aWYoKDB8byk9PSgwfHQpKXtpZigoaT1yPTB8YXJbQT4+Ml0pPj4+MDxjPj4+MCl7Zj0oZT1jKSsoKGk9KDErKGUtaT4+Mil8MCkvLTJ8MCk8PDIpfDAsZT0ocj0oZT1uLWV8MCk+PjIpPyh3YigwfGYsMHxjLDB8ZSksMHxhcltsPj4yXSk6YyxBPWYrKHI8PDIpfDAsYXJbdT4+Ml09QSxhcltsPj4yXT1lKyhpPDwyKSxlPUE7YnJlYWt9aWYoMTA3Mzc0MTgyMzwoZT0wPT0oMHwoZT1lLWk+PjEpKT8xOmUpPj4+MCYmKFp1KHM9MHxYKDgpLDQ0NTE5KSxhcltzPj4yXT0xNzY2MCxJKDB8cyw0MDE2LDQyOCkpLHQ9aT0obj1mPTB8aHUoZTw8MikpKyhlPj4+Mjw8Mil8MCxmPWYrKGU8PDIpfDAsKDB8Yyk9PSgwfG8pKWU9dDtlbHNle2ZvcihlPXQscj1jO2FyW2k+PjJdPWFyW3I+PjJdLGU9aT1lKzR8MCwoMHwocj1yKzR8MCkpIT0oMHxvKTspO3I9MHxhcltBPj4yXX1hcltBPj4yXT1uLGFyW2w+PjJdPXQsYXJbdT4+Ml09ZSxhclthPj4yXT1mLHImJih2dShyKSxlPTB8YXJbdT4+Ml0pfWVsc2UgZT1vfXdoaWxlKDApO3JldHVybiBhcltlPj4yXT1iLGFyW3U+PjJdPTQrKDB8YXJbdT4+Ml0pLHZvaWQodXI9cyl9aWYoZj0oZT0wfGFyWyhiPUErOHwwKT4+Ml0pLSgwfGFyWyh1PUErNHwwKT4+Ml0pfDAsKGk9KHI9MHxhclsobD1BKzEyfDApPj4yXSktKDB8YXJbQT4+Ml0pfDApPj4+MDw9Zj4+PjApe2ZvcihlPTA9PSgwfChlPWk+PjEpKT8xOmUsYXJbYysxMj4+Ml09MCxhcltjKzE2Pj4yXT1BKzEyLDEwNzM3NDE4MjM8ZT4+PjAmJihadShzPTB8WCg4KSw0NDUxOSksYXJbcz4+Ml09MTc2NjAsSSgwfHMsNDAxNiw0MjgpKSxpPTB8aHUoZTw8MiksdD0oYXJbYz4+Ml09aSkrKGY+PjI8PDIpfDAsYXJbKG89Yys4fDApPj4yXT10LGFyWyhuPWMrNHwwKT4+Ml09dCxhclsodD1jKzEyfDApPj4yXT1pKyhlPDwyKSxmPTB8aHUoNDA5NiksYXJbYT4+Ml09ZixmdW5jdGlvbihBLGUpe2V8PTA7dmFyIHIsaSxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MDtyPTB8YXJbKGI9OCsoQXw9MCl8MCk+PjJdLHU9MHxhclsoaT1BKzEyfDApPj4yXSx0PXUsYT1yO2Rve2lmKCgwfHIpPT0oMHx1KSl7aWYobD0wfGFyWyh1PUErNHwwKT4+Ml0sbj0wfGFyW0E+PjJdLChmPW4pPj4+MDxsPj4+MCl7bz0obj1sKSsoKHQ9KDErKG4tZj4+Mil8MCkvLTJ8MCk8PDIpfDAsZj0obj0oZj1hLW58MCk+PjIpPyh3YigwfG8sMHxsLDB8ZiksMHxhclt1Pj4yXSk6bCxsPW8rKG48PDIpfDAsYXJbYj4+Ml09bCxhclt1Pj4yXT1mKyh0PDwyKSxmPWw7YnJlYWt9aWYoMTA3Mzc0MTgyMzwoZj0wPT0oMHwoZj10LWY+PjEpKT8xOmYpPj4+MCYmKFp1KGI9MHxYKDgpLDQ0NTE5KSxhcltiPj4yXT0xNzY2MCxJKDB8Yiw0MDE2LDQyOCkpLG89MHxodShmPDwyKSxjPXQ9KGE9bykrKGY+Pj4yPDwyKXwwLG89bysoZjw8Mil8MCwoMHxsKT09KDB8cikpZj1jO2Vsc2V7Zm9yKGY9YyxuPWw7YXJbdD4+Ml09YXJbbj4+Ml0sZj10PWYrNHwwLCgwfChuPW4rNHwwKSkhPSgwfHIpOyk7bj0wfGFyW0E+PjJdfWFyW0E+PjJdPWEsYXJbdT4+Ml09YyxhcltiPj4yXT1mLGFyW2k+PjJdPW8sbiYmKHZ1KG4pLGY9MHxhcltiPj4yXSl9ZWxzZSBmPXJ9d2hpbGUoMCk7YXJbZj4+Ml09YXJbZT4+Ml0sYXJbYj4+Ml09NCsoMHxhcltiPj4yXSl9KGMsYSksZj0wfGFyW2I+PjJdOygwfGYpIT0oMHwoZT0wfGFyW3U+PjJdKSk7KVhhKGMsYT1mKy00fDApLGY9YTtyZXR1cm4gcj1lLGk9MHxhcltBPj4yXSxhcltBPj4yXT1hcltjPj4yXSxhcltjPj4yXT1pLGFyW3U+PjJdPWFyW24+PjJdLGFyW24+PjJdPXIsZT0wfGFyW2I+PjJdLGFyW2I+PjJdPWFyW28+PjJdLGFyW28+PjJdPWUsQT0wfGFyW2w+PjJdLGFyW2w+PjJdPWFyW3Q+PjJdLGFyW3Q+PjJdPUEsKDB8ZSkhPSgwfGYpJiYoYXJbbz4+Ml09ZSsofigoZSstNC1yfDApPj4+Mik8PDIpKSwwfGkmJnZ1KGkpLHZvaWQodXI9cyl9aWYoKDB8cikhPSgwfGUpKXJldHVybiBiPTB8aHUoNDA5NiksYXJbYz4+Ml09YixmdW5jdGlvbihBLGUpe2V8PTA7dmFyIHIsaSxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MDtyPTB8YXJbKGI9OCsoQXw9MCl8MCk+PjJdLHU9MHxhclsoaT1BKzEyfDApPj4yXSx0PXUsYT1yO2Rve2lmKCgwfHIpPT0oMHx1KSl7aWYobD0wfGFyWyh1PUErNHwwKT4+Ml0sbj0wfGFyW0E+PjJdLChmPW4pPj4+MDxsPj4+MCl7bz0obj1sKSsoKHQ9KDErKG4tZj4+Mil8MCkvLTJ8MCk8PDIpfDAsZj0obj0oZj1hLW58MCk+PjIpPyh3YigwfG8sMHxsLDB8ZiksMHxhclt1Pj4yXSk6bCxsPW8rKG48PDIpfDAsYXJbYj4+Ml09bCxhclt1Pj4yXT1mKyh0PDwyKSxmPWw7YnJlYWt9aWYoMTA3Mzc0MTgyMzwoZj0wPT0oMHwoZj10LWY+PjEpKT8xOmYpPj4+MCYmKFp1KGI9MHxYKDgpLDQ0NTE5KSxhcltiPj4yXT0xNzY2MCxJKDB8Yiw0MDE2LDQyOCkpLG89MHxodShmPDwyKSxjPXQ9KGE9bykrKGY+Pj4yPDwyKXwwLG89bysoZjw8Mil8MCwoMHxsKT09KDB8cikpZj1jO2Vsc2V7Zm9yKGY9YyxuPWw7YXJbdD4+Ml09YXJbbj4+Ml0sZj10PWYrNHwwLCgwfChuPW4rNHwwKSkhPSgwfHIpOyk7bj0wfGFyW0E+PjJdfWFyW0E+PjJdPWEsYXJbdT4+Ml09YyxhcltiPj4yXT1mLGFyW2k+PjJdPW8sbiYmKHZ1KG4pLGY9MHxhcltiPj4yXSl9ZWxzZSBmPXJ9d2hpbGUoMCk7YXJbZj4+Ml09YXJbZT4+Ml0sYXJbYj4+Ml09NCsoMHxhcltiPj4yXSl9KEEsYyksdm9pZCh1cj1zKTthPTB8aHUoNDA5NiksYXJbYz4+Ml09YSxmdW5jdGlvbihBLGUpe2V8PTA7dmFyIHIsaT0wLGY9MCxuPTAsdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MDtyPTB8YXJbKHM9NCsoQXw9MCl8MCk+PjJdLGI9MHxhcltBPj4yXSxuPWI7ZG97aWYoKDB8cik9PSgwfGIpKXtpZihmPTB8YXJbKGI9QSs4fDApPj4yXSxsPTB8YXJbKHU9QSsxMnwwKT4+Ml0sZj4+PjA8KGk9bCk+Pj4wKXt0PShpPShuPWYpKygobz0oMSsoaS1uPj4yKXwwKS8yfDApPDwyKXwwKSsoMC0odT0obj1uLXJ8MCk+PjIpPDwyKXwwLHUmJih3YigwfHQsMHxyLDB8biksaT10LGY9MHxhcltiPj4yXSksYXJbcz4+Ml09aSxhcltiPj4yXT1mKyhvPDwyKTticmVha31pZigxMDczNzQxODIzPChuPTA9PSgwfChuPWktbj4+MSkpPzE6bik+Pj4wJiYoWnUocz0wfFgoOCksNDQ1MTkpLGFyW3M+PjJdPTE3NjYwLEkoMHxzLDQwMTYsNDI4KSksYT0wfGh1KG48PDIpLGw9aT0oYz1hKSsoKG4rM3wwKT4+PjI8PDIpfDAsYT1hKyhuPDwyKXwwLCgwfHIpPT0oMHxmKSluPWwsZj1yO2Vsc2V7Zm9yKG89aSxuPWwsdD1yO2FyW28+PjJdPWFyW3Q+PjJdLG49bz1uKzR8MCwoMHwodD10KzR8MCkpIT0oMHxmKTspO2Y9MHxhcltBPj4yXX1hcltBPj4yXT1jLGFyW3M+PjJdPWwsYXJbYj4+Ml09bixhclt1Pj4yXT1hLGYmJih2dShmKSxpPTB8YXJbcz4+Ml0pfWVsc2UgaT1yfXdoaWxlKDApO2FyW2krLTQ+PjJdPWFyW2U+PjJdLGFyW3M+PjJdPSgwfGFyW3M+PjJdKS00fShBLGMpLGE9MHxhclt1Pj4yXSxjPTB8YXJbYT4+Ml0sYT1hKzR8MCxhclt1Pj4yXT1hLG89MHxhcltiPj4yXSxlPXQ9MHxhcltsPj4yXSxuPW87ZG97aWYoKDB8byk9PSgwfHQpKXtpZigoaT1yPTB8YXJbQT4+Ml0pPj4+MDxhPj4+MCl7Zj0oZT1hKSsoKGk9KDErKGUtaT4+Mil8MCkvLTJ8MCk8PDIpfDAsZT0ocj0oZT1uLWV8MCk+PjIpPyh3YigwfGYsMHxhLDB8ZSksMHxhclt1Pj4yXSk6YSxBPWYrKHI8PDIpfDAsYXJbYj4+Ml09QSxhclt1Pj4yXT1lKyhpPDwyKSxlPUE7YnJlYWt9aWYoMTA3Mzc0MTgyMzwoZT0wPT0oMHwoZT1lLWk+PjEpKT8xOmUpPj4+MCYmKFp1KHM9MHxYKDgpLDQ0NTE5KSxhcltzPj4yXT0xNzY2MCxJKDB8cyw0MDE2LDQyOCkpLHQ9aT0obj1mPTB8aHUoZTw8MikpKyhlPj4+Mjw8Mil8MCxmPWYrKGU8PDIpfDAsKDB8YSk9PSgwfG8pKWU9dDtlbHNle2ZvcihlPXQscj1hO2FyW2k+PjJdPWFyW3I+PjJdLGU9aT1lKzR8MCwoMHwocj1yKzR8MCkpIT0oMHxvKTspO3I9MHxhcltBPj4yXX1hcltBPj4yXT1uLGFyW3U+PjJdPXQsYXJbYj4+Ml09ZSxhcltsPj4yXT1mLHImJih2dShyKSxlPTB8YXJbYj4+Ml0pfWVsc2UgZT1vfXdoaWxlKDApO2FyW2U+PjJdPWMsYXJbYj4+Ml09NCsoMHxhcltiPj4yXSksdXI9c31mdW5jdGlvbiBYYShBLGUpe2V8PTA7dmFyIHIsaT0wLGY9MCxuPTAsdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MDtyPTB8YXJbKHM9KEF8PTApKzR8MCk+PjJdLG49Yj0wfGFyW0E+PjJdO2Rve2lmKCgwfHIpPT0oMHxiKSl7aWYoKGY9MHxhclsoYj1BKzh8MCk+PjJdKT4+PjA8KGk9bD0wfGFyWyh1PUErMTJ8MCk+PjJdKT4+PjApe3Q9KGk9KG49ZikrKChvPSgxKyhpLW4+PjIpfDApLzJ8MCk8PDIpfDApKygwLSh1PShuPW4tcnwwKT4+Mik8PDIpfDAsdSYmKHdiKDB8dCwwfHIsMHxuKSxpPXQsZj0wfGFyW2I+PjJdKSxhcltzPj4yXT1pLGFyW2I+PjJdPWYrKG88PDIpO2JyZWFrfWlmKDEwNzM3NDE4MjM8KG49MD09KDB8KG49aS1uPj4xKSk/MTpuKT4+PjAmJihadShzPTB8WCg4KSw0NDUxOSksYXJbcz4+Ml09MTc2NjAsSSgwfHMsNDAxNiw0MjgpKSxsPWk9KGM9YT0wfGh1KG48PDIpKSsoKG4rM3wwKT4+PjI8PDIpfDAsYT1hKyhuPDwyKXwwLCgwfHIpPT0oMHxmKSluPWwsZj1yO2Vsc2V7Zm9yKG89aSxuPWwsdD1yO2FyW28+PjJdPWFyW3Q+PjJdLG49bz1uKzR8MCwoMHwodD10KzR8MCkpIT0oMHxmKTspO2Y9MHxhcltBPj4yXX1hcltBPj4yXT1jLGFyW3M+PjJdPWwsYXJbYj4+Ml09bixhclt1Pj4yXT1hLGYmJih2dShmKSxpPTB8YXJbcz4+Ml0pfWVsc2UgaT1yfXdoaWxlKDApO2FyW2krLTQ+PjJdPWFyW2U+PjJdLGFyW3M+PjJdPSgwfGFyW3M+PjJdKS00fWZ1bmN0aW9uIFdhKEEpe3ZhciBlLHIsaT0wLGY9MCxuPTAsdD0wLG89MCxhPTAsYz0wLGw9MDtpZighKHI9MHxhclsoZT0oQXw9MCkrOHwwKT4+Ml0pKXJldHVybihsPTApfGw7aWYoNj09KDB8KGk9MHxhclsobD1BKzR8MCk+PjJdKSkpe2lmKGE9KGk9MHxhclsoYz0yNCtyfDApPj4yXSkrMXwwLCgwfGFyWyh0PTI4K3J8MCk+PjJdKT4oMHxpKSlmPTB8YXJbMjArcj4+Ml07ZWxzZXtpZighKGY9MHx5YyhhKSkpcmV0dXJuIDB8KGw9Nyk7KG49MHxhclsobz0yMCtyfDApPj4yXSkmJihoYigwfGYsMHxuLDB8aSksQmMobiksaT0wfGFyW2M+PjJdKSxhcltvPj4yXT1mLGFyW3Q+PjJdPWF9dHJbZitpPj4wXT0wLGFyW2M+PjJdPTErKDB8YXJbYz4+Ml0pLGk9MHxhcltsPj4yXX1pZig3PT0oMHxpKSl7aWYodD0oaT0wfGFyWyhjPTI0K3J8MCk+PjJdKSsyfDAsKDB8YXJbKG89MjgrcnwwKT4+Ml0pPCgwfHQpKXtpZighKGY9MHx5Yyh0KSkpcmV0dXJuIDB8KGw9Nyk7KG49MHxhclsoYT0yMCtyfDApPj4yXSkmJihoYigwfGYsMHxuLDB8aSksQmMobiksaT0wfGFyW2M+PjJdKSxhclthPj4yXT1mLGFyW28+PjJdPXR9ZWxzZSBmPTB8YXJbMjArcj4+Ml07dHJbKGk9ZitpfDApPj4wXT0wLHRyW2krMT4+MF09MCxhcltjPj4yXT0yKygwfGFyW2M+PjJdKSxpPTB8YXJbbD4+Ml19cmV0dXJuIDQ8KDB8aSkmJihpPTB8YXJbKG89QSsxNnwwKT4+Ml0sYz0oMHxhcltBKzIwPj4yXSktaXwwLG49MHxhclsoZj1BKzI4fDApPj4yXSwoMHwoMD09KDB8Yyk/MDooYzw8OCktMXwwKSk9PSgodD0wfGFyWyhhPUErMzJ8MCk+PjJdKStufDApPyhFYShBKzEyfDApLG49MHxhcltmPj4yXSxmPTB8YXJbYT4+Ml0saT0wfGFyW28+PjJdKTpmPXQsYXJbKDB8YXJbaSsoKGM9ZitufDApPj4+MTA8PDIpPj4yXSkrKCgxMDIzJmMpPDwyKT4+Ml09cixhclthPj4yXT1mKzEsYXJbKEE9QSszNnwwKT4+Ml09KDB8YXJbQT4+Ml0pKygwfGFyWzI0K3I+PjJdKSxhcltlPj4yXT0wKSwobD1hcltsPj4yXT0wKXxsfWZ1bmN0aW9uIElhKEEpe3ZhciBlLHI9MDtmb3IodHJbKEF8PTApKzQxMzg+PjBdPTIscj1BKzQxMzl8MCx0cltBKzQxNTU+PjBdPTAsdHJbQSs0MTU2Pj4wXT0wLHRyW3I+PjBdPTAsdHJbcisxPj4wXT0wLHRyW3IrMj4+MF09MCxlPShyPUErNDM0MHwodHJbciszPj4wXT0wKSkrNjB8MDsoMHwocj1yKzR8KGFyW3I+PjJdPTApKSk8KDB8ZSk7KTtDYShBLDApfWZ1bmN0aW9uIENhKEEsZSl7ZXw9MDt2YXIgcj0wLGk9MDtpZihhclsoQXw9MCk+PjJdPTAsb3JbQSs0Pj4xXT0wLHRyW0ErNj4+MF09MSx0cltBKzc+PjBdPTEsYXJbQSs4Pj4yXT0yNyx0cltBKzEyPj4wXT0wLHRyW0ErMTM+PjBdPTAsdHJbQSsxND4+MF09MCxhclsoZT1BKzE2fDApPj4yXT0wLGFyW2UrND4+Ml09MCxhcltlKzg+PjJdPTAsYXJbZSsxMj4+Ml09MCxvcltlKzE2Pj4xXT0wLHRyW2UrMTg+PjBdPTAsYXJbQSszNj4+Ml09MSxhcltBKzQwPj4yXT0xLHRyW0ErNDQ+PjBdPTEsdHJbQSs0NT4+MF09MSx0cltBKzQ2Pj4wXT0xLHZiKEErNDE3MnwwLDAsMTY4KSxlPTB8YXJbQSs0MzQwPj4yXSwoMHwoaT0wfGFyWyhyPUErNDM0NHwwKT4+Ml0pKSE9KDB8ZSkmJihhcltyPj4yXT1pKyh+KChpKy00LWV8MCk+Pj4yKTw8MikpLGU9MHxhcltBKzQzNTI+PjJdLCgwfChpPTB8YXJbKHI9QSs0MzU2fDApPj4yXSkpIT0oMHxlKSYmKGFyW3I+PjJdPWkrKH4oKGkrLTQtZXwwKT4+PjIpPDwyKSksZT0wfGFyW0ErNDM2ND4+Ml0sKDB8KGk9MHxhclsocj1BKzQzNjh8MCk+PjJdKSkhPSgwfGUpJiYoYXJbcj4+Ml09aSsofigoaSstNC1lfDApPj4+Mik8PDIpKSxlPTB8YXJbQSs0Mzc2Pj4yXSwoMHwoaT0wfGFyWyhyPUErNDM4MHwwKT4+Ml0pKSE9KDB8ZSkmJihhcltyPj4yXT1pKyh+KChpKy00LWV8MCk+Pj4yKTw8MikpLGU9MHxhcltBKzQzODg+PjJdLCgwfChpPTB8YXJbKHI9QSs0MzkyfDApPj4yXSkpPT0oMHxlKSlyZXR1cm4gYXJbKGk9QSs0MTYwfDApPj4yXT0wLHRyWyhpPUErNDd8MCk+PjBdPTAsdHJbKGk9QSs0OHwwKT4+MF09MCx0clsoaT1BKzQ5fDApPj4wXT0wLGFyWyhpPUErNTJ8MCk+PjJdPTAsYXJbKGk9QSs1NnwwKT4+Ml09MCx0clsoaT1BKzYwfDApPj4wXT0wLHRyWyhpPUErNDEyNXwwKT4+MF09MCxhclsoaT1BKzQxMjh8MCk+PjJdPTIsYXJbKEE9QSs0MTMyfDApPj4yXT0wLHZvaWQob3JbQSs0Pj4xXT0wKTthcltyPj4yXT1pKyh+KChpKy00LWV8MCk+Pj4yKTw8MiksYXJbKGk9QSs0MTYwfDApPj4yXT0wLHRyWyhpPUErNDd8MCk+PjBdPTAsdHJbKGk9QSs0OHwwKT4+MF09MCx0clsoaT1BKzQ5fDApPj4wXT0wLGFyWyhpPUErNTJ8MCk+PjJdPTAsYXJbKGk9QSs1NnwwKT4+Ml09MCx0clsoaT1BKzYwfDApPj4wXT0wLHRyWyhpPUErNDEyNXwwKT4+MF09MCxhclsoaT1BKzQxMjh8MCk+PjJdPTIsYXJbKEE9QSs0MTMyfDApPj4yXT0wLG9yW0ErND4+MV09MH1mdW5jdGlvbiBHYShBKXt2YXIgZT0wLHI9MCxpPTA7MHwoZT0wfGFyWyhBfD0wKSs0Mzg4Pj4yXSkmJigoMHwoaT0wfGFyWyhyPUErNDM5MnwwKT4+Ml0pKSE9KDB8ZSkmJihhcltyPj4yXT1pKyh+KChpKy00LWV8MCk+Pj4yKTw8MikpLHZ1KGUpKSwwfChlPTB8YXJbQSs0Mzc2Pj4yXSkmJigoMHwoaT0wfGFyWyhyPUErNDM4MHwwKT4+Ml0pKSE9KDB8ZSkmJihhcltyPj4yXT1pKyh+KChpKy00LWV8MCk+Pj4yKTw8MikpLHZ1KGUpKSwwfChlPTB8YXJbQSs0MzY0Pj4yXSkmJigoMHwoaT0wfGFyWyhyPUErNDM2OHwwKT4+Ml0pKSE9KDB8ZSkmJihhcltyPj4yXT1pKyh+KChpKy00LWV8MCk+Pj4yKTw8MikpLHZ1KGUpKSwwfChlPTB8YXJbQSs0MzUyPj4yXSkmJigoMHwoaT0wfGFyWyhyPUErNDM1NnwwKT4+Ml0pKSE9KDB8ZSkmJihhcltyPj4yXT1pKyh+KChpKy00LWV8MCk+Pj4yKTw8MikpLHZ1KGUpKSwoaT0wfGFyW0ErNDM0MD4+Ml0pJiYoKDB8KHI9MHxhclsoZT1BKzQzNDR8MCk+PjJdKSkhPSgwfGkpJiYoYXJbZT4+Ml09cisofigocistNC1pfDApPj4+Mik8PDIpKSx2dShpKSl9ZnVuY3Rpb24gVmEoQSxlKXt2YXIgcixpLGYsbix0LG89MCxhPTAsYz0wLGw9MDtpZigoZXw9MCk+Pj4wPD0oYT0wfGFyWyh0PShBfD0wKSs4fDApPj4yXSktKG89MHxhclsobD1BKzR8MCk+PjJdKT4+Mj4+PjApcmV0dXJuIHZiKDB8bywwLGU8PDJ8MCksdm9pZChhcltsPj4yXT1vKyhlPDwyKSk7MTA3Mzc0MTgyMzwobz0oaT0oZj1vLShuPTB8YXJbQT4+Ml0pfDApPj4yKStlfDApPj4+MCYmemwoKSxhPShjPWEtbnwwKT4+MSxhPWM+PjI+Pj4wPDUzNjg3MDkxMT9hPj4+MDxvPj4+MD9vOmE6MTA3Mzc0MTgyMztkb3tpZihhKXtpZighKDEwNzM3NDE4MjM8YT4+PjApKXtjPTB8aHUoYTw8Mik7YnJlYWt9WnUobD0wfFgoOCksNDQ1MTkpLGFyW2w+PjJdPTE3NjYwLEkoMHxsLDQwMTYsNDI4KX1lbHNlIGM9MH13aGlsZSgwKTt2YigwfChyPWMrKGk8PDIpfDApLDAsZTw8MnwwKSxvPXIrKDAtaTw8Mil8MCwwPCgwfGYpJiZoYigwfG8sMHxuLDB8ZiksYXJbQT4+Ml09byxhcltsPj4yXT1yKyhlPDwyKSxhclt0Pj4yXT1jKyhhPDwyKSxuJiZ2dShuKX1mdW5jdGlvbiBGYShBLGUscil7ZXw9MCxyfD0wO3ZhciBpLGY9MDtpZighKDB8dHJbKEF8PTApKzM0Pj4wXSkpcmV0dXJuIDA9PShyfGV8MCl8MDtpPTB8YXJbQSszNj4+Ml07QTpkb3tpZigwPCgwfGkpKXtmb3IoZj0wOygwfGFyW0ErNDI1MisoZjw8Mik+PjJdKSE9KDB8ZSk7KWlmKCgwfGkpPD0oMHwoZj1mKzF8MCkpKXtlPWY9MDticmVhayBBfWlmKDA8KDB8KGU9MHxhcltBKzQwPj4yXSkpKWZvcihmPTA7Oyl7aWYoKDB8YXJbQSs0Mjk2KyhmPDwyKT4+Ml0pPT0oMHxyKSl7ZT1mPTE7YnJlYWsgQX1pZigoMHxlKTw9KDB8KGY9ZisxfDApKSl7Zj0xLGU9MDticmVha319ZWxzZSBmPTEsZT0wfWVsc2UgZT1mPTB9d2hpbGUoMCk7cmV0dXJuIGUmZnwwfWZ1bmN0aW9uIFJhKEEsZSxyLGksZixuLHQsbyxhLGMsbCl7ZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsb3w9MCxhfD0wLGN8PTAsbHw9MDt2YXIgdSxiLHMsZCxrLGgsdyx2LG0sZyxaLHAseSxCLEUsWCxXLEksQyxHLFYsRixSLE4sXyxZLFEsRCxKLE0sVCxVLFM9MCxPPTAsej0wLGo9MCxIPTAseD0wLFA9MCxMPTAsSz0wLHE9MCwkPTAsQUE9MCxlQT0wLHJBPTAsaUE9MCxmQT0wLG5BPTAsdEE9MCxvQT0wLGFBPTAsY0E9MCxsQT0wO2lmKHVyPShVPXVyKSsxNDR8MCxEPVUrOHwwLEY9KFY9VSkrMTM2fDAsUz0wfGFyWyhSPShBfD0wKSsxMDM1MnwwKT4+Ml0saUE9KDB8YnIoUyxyKSkrZXwwLEo9MHxhcltBKzEwMzQwPj4yXSx6PWY8PDEsaj0oMHxjcltKKygyNCppQXwwKSs0Pj4wXSk+Pj56JjMpaWYoVD0oTT0xPDwoUD0wfGFyWygoTz0wPT0oMHxmKSk/QSs1NzYwfDA6QSs1NzY4fDApPj4yXSkpLTF8MCxRPTB8YnIobixlKSxZPTB8YnIodCxyKSxXPTB8YXJbKE8/QSsyNHwwOkErMzJ8MCk+PjJdLEk9MHxhclsoTz9BKzI4fDA6QSszNnwwKT4+Ml0sZT1ZPj4oQz0wfGFyW0ErMTAzNDg+PjJdKSwtMTwoMHwoaT1RPj5DKSkmKDB8aSk8KDB8Uyl8fHNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSksKDB8ZSk8PS0xJiZzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpLCgwfChHPTB8YXJbQSsxMDM1Nj4+Ml0pKTw9KDB8ZSkmJnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSksbkE9SisoMjQqKCgwfGJyKGUsUykpK2l8MCl8MCkrMnwwLHA9QSs1MnwwLHk9MHxhcltBKzQ4Pj4yXSxuQT0wfGFyWzgwMCsoMHxhclt5KyhscltuQT4+MV08PDIpPj4yXSk+PjJdLEI9MHxhcltBKzU4MjA+PjJdLEU9eSxjQT1PP2FBPTA6KGFBPSgwfGFyW0ErNTc4MD4+Ml0pLTF8MCwoMHxhcltBKzU3ODQ+PjJdKS0xfDApLFo9KGZBPTB8YXJbQSs1ODA0Pj4yXSktYUF8MCxmQT1mQS1jQXwwLF89KDB8Vyk8KFErbnwwKT9XLVF8MDpuLE49KDB8SSk8KFkrdHwwKT9JLVl8MDp0LFg9MCE9KDB8dHJbSisoMjQqaUF8MCkrMjI+PjBdKSwyPT0oMHxqKSl7c3dpdGNoKCgwfGNyW0orKDI0KmlBfDApKzU+PjBdKT4+PnomMyl7Y2FzZSAwOkg9eD0wLHRBPS0xLG9BPTE7YnJlYWs7Y2FzZSAxOkg9LSh4PTEpLG9BPXRBPTA7YnJlYWs7Y2FzZSAyOnRBPUg9LSh4PTEpLG9BPTE7YnJlYWs7Y2FzZSAzOkg9LSh4PTEpLG9BPS0odEE9MSl9aWYoYXJbRD4+Ml09dEEsYXJbNCtEPj4yXT1vQSxhcltWPj4yXT1ILGFyW1YrND4+Ml09eCxnPTB8YnIoSCxhKSxtPTAteCZhLHRyW0Y+PjBdPTB8dHJbSisoMjQqaUF8MCkrOSsoZjw8Mik+PjBdLHRyWzErRj4+MF09MHx0cltKKygyNCppQXwwKSs5KyhmPDwyKSsxPj4wXSx0clsyK0Y+PjBdPTAsdHJbMytGPj4wXT0wfHRyW0orKDI0KmlBfDApKzkrKGY8PDIpKzI+PjBdLHRyWzQrRj4+MF09MHx0cltKKygyNCppQXwwKSs5KyhmPDwyKSszPj4wXSwoMHxOKTw9MCl1cj1VO2Vsc2V7Zj0wPCgwfF8pLHU9QSs1NDgwfDAsYj1BKzEwMzY4fDAscz1BKzEwMzcyfDAsZD1BKzEwMzc2fDAsaz1BKzEwMzYwfDAsaD1fKy0xfDAsdz1OKy0xfDAsdj1BKzU5Nzd8MCxQPUErMTAzMDh8MCxMPSgwfGJyKFk+PmZBLEIpKSsoUT4+Wil8MCxIPTA7QTpmb3IoOzspe2lmKEs9bysoKDB8YnIoQT1IK1l8MCxhKSkrUTw8MSl8MCxxPWMrKCgwfGJyKEEsbCkpK1E8PDEpfDAsZil7QUE9MD09KDB8SCksZUE9KDB8SCk9PSgwfHcpLGlBPSgwfChyQT0oJD1BPDxjQSk+PkMpKTwwfCgwfEcpPD0oMHxyQSkseD0wO2Rve2lmKFgmJjAhPSgwfHRyW3U+PjBdKSl7aWYoaT14K1E8PGFBPj4oZT0wfGFyW2I+PjJdKSxlPSQ+PmUsKDB8aSk8PS0xKXtsQT0yMzticmVhayBBfWlmKCgwfChyPTB8YXJbcz4+Ml0pKTw9KDB8aSkpe2xBPTIzO2JyZWFrIEF9aWYoKDB8ZSk8PS0xKXtsQT0yNjticmVhayBBfWlmKCgwfGUpPj0oMHxhcltkPj4yXSkpe2xBPTI2O2JyZWFrIEF9aj0oMHxhcltrPj4yXSkrKDMqKCgwfGJyKHIsZSkpK2l8MCl8MCl8MCwxMDI0JihjcltqPj4wXXxjcltqKzE+PjBdPDw4KXx8KGxBPTI4KX1lbHNlIGxBPTI4O2U6ZG97aWYoMjg9PSgwfGxBKSl7aWYoZT0oaT0oaj14K1F8KGxBPTApKTw8YUEpPj4ocj0wfGFyW2I+PjJdKSxyPSQ+PnIsKDB8ZSk8PS0xKXtsQT0zMDticmVhayBBfWlmKCgwfChTPTB8YXJbcz4+Ml0pKTw9KDB8ZSkpe2xBPTMwO2JyZWFrIEF9aWYoKDB8cik8PS0xKXtsQT0zMzticmVhayBBfWlmKCgwfHIpPj0oMHxhcltkPj4yXSkpe2xBPTMzO2JyZWFrIEF9aWYoej0oMHxhcltrPj4yXSkrKDMqKCgwfGJyKFMscikpK2V8MCl8MCl8MCwhKDIwNDgmKGNyW3o+PjBdfGNyW3orMT4+MF08PDgpKSl7aWYoZUF8KDB8eCk9PSgwfGgpfEFBfDA9PSgwfHgpKXtPPS0xPCgwfChTPWk+PkMpKSxyPTA7ZG97aWYobj0oMHxhcltEKyhyPDwyKT4+Ml0pK2p8MCwhKCgwfCh0PSgwfGFyW1YrKHI8PDIpPj4yXSkrQXwwKSk8KDB8SSkmKDB8bik8KDB8VykmLTE8KHR8bnwwKSkpYnJlYWsgZTtpZihlPXQ8PGNBPj5DLCgwfChpPW48PGFBPj5DKSk8PS0xKXtsQT00MDticmVhayBBfWlmKCgwfCh6PTB8YXJbUj4+Ml0pKTw9KDB8aSkpe2xBPTQwO2JyZWFrIEF9aWYoISgtMTwoMHxlKSYoMHxlKTwoMHxHKSkpe2xBPTQyO2JyZWFrIEF9aWYoZT1KKygyNCooKDB8YnIoeixlKSkraXwwKXwwKSsyfDAsKGU9MHxscltlPj4xXSk+Pj4wPj0oMHxhcltwPj4yXSktRT4+Mj4+PjApe2xBPTU5O2JyZWFrIEF9aWYoIShpPTB8YXJbeSsoZTw8Mik+PjJdKSl7bEE9NTk7YnJlYWsgQX1pZigoMHwoaT0wfGFyW2krODAwPj4yXSkpPCgwfG5BKSl7aWYoIShPJigwfFMpPCgwfHopKSl7bEE9NDc7YnJlYWsgQX1pZihpQSl7bEE9NDk7YnJlYWsgQX1pZih6PUorKDI0KigoMHxicih6LHJBKSkrU3wwKXwwKSsyfDAsISgwfHRyWzc2NCsoMHxhclt5Kyhsclt6Pj4xXTw8Mik+PjJdKT4+MF0pKWJyZWFrIGV9aWYoKDB8bkEpPCgwfGkpJiYwPT0oMHx0cls3NjQrKDB8YXJbeSsoZTw8Mik+PjJdKT4+MF0pKWJyZWFrIGU7aWYoMD09KDB8dHJbdj4+MF0pJiYodD0oMHxicih0Pj5mQSxCKSkrKG4+PlopfDAsej0wfGFyW1A+PjJdLCgwfGFyW3orKHQ8PDIpPj4yXSkhPSgwfGFyW3orKEw8PDIpPj4yXSkpKWJyZWFrIGU7cj1yKzF8MH13aGlsZSgoMHxyKTwyKX10PShqPTB8bHJbSysoeDw8MSk+PjFdKS0oMHxscltLKyh4K2crdEE8PDEpPj4xXSl8MCx6PWotKDB8bHJbSysoeCttK29BPDwxKT4+MV0pfDAsaj0oMHx0clsoKDB8dCk8MD8xOjB8dD8zOjIpKygoMHx6KTwwPy0xOjAhPSgwfHopJjEpK0Y+PjBdKStqfDAsb3JbcSsoeDw8MSk+PjFdPSgwfGopPDA/MDo2NTUzNSYoKDB8aik8KDB8TSk/ajpUKX19fXdoaWxlKDApO3g9eCsxfDB9d2hpbGUoKDB8eCk8KDB8XykpfWlmKCgwfE4pPD0oMHwoSD1IKzF8MCkpKXtsQT01OTticmVha319aWYoMjM9PSgwfGxBKSlzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpO2Vsc2UgaWYoMjY9PSgwfGxBKSlzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpO2Vsc2UgaWYoMzA9PSgwfGxBKSlzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpO2Vsc2UgaWYoMzM9PSgwfGxBKSlzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpO2Vsc2UgaWYoNDA9PSgwfGxBKSlzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpO2Vsc2UgaWYoNDI9PSgwfGxBKSlzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpO2Vsc2UgaWYoNDc9PSgwfGxBKSlzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpO2Vsc2UgaWYoNDk9PSgwfGxBKSlzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpO2Vsc2UgaWYoNTk9PSgwfGxBKSlyZXR1cm4gdm9pZCh1cj1VKX19ZWxzZXtmb3IoaT0wfGNyW0orKDI0KmlBfDApKzYrZj4+MF0scj0oZT1EKSsxMjh8MDsoMHwoZT1lKzR8KGFyW2U+PjJdPTApKSk8KDB8cik7KTthcltEKygoMzEmaSk8PDIpPj4yXT0xLGFyW0QrKChpKzEmMzEpPDwyKT4+Ml09MixhcltEKygoaSsyJjMxKTw8Mik+PjJdPTMsYXJbRCsoKGkrMyYzMSk8PDIpPj4yXT00LHJBPVArLTV8MCxpPTA8KDB8Tik7QTpkb3tpZihYKXtpZihpKXtLPTA8KDB8XykscT1BKzU0ODB8MCwkPUErMTAzNjh8MCxBQT1BKzEwMzcyfDAsZUE9QSsxMDM3NnwwLFA9QSsxMDM2MHwwLEw9NzwoMHxyQSkseD0wO2U6Zm9yKDs7KXtyOmRve2lmKEspe2lmKEg9KHo9eCtZfDApPDxjQSx0PTB8YnIoeixhKSx6PTB8YnIoeixsKSxBPTA9PSgwfHRyW3E+PjBdKSxMKWZvcihqPS0xPCgwfCh6PUg+Pih0PTB8YXJbJD4+Ml0pKSksbj0tMTwoMHwoTz1IPj50KSksUz0wOzspe2lmKGk9UytRPDxhQSxBKWxBPTc5O2Vsc2V7aWYoKDB8KGU9aT4+dCkpPD0tMSl7bEE9ODg7YnJlYWsgZX1pZigoMHwocj0wfGFyW0FBPj4yXSkpPD0oMHxlKSl7bEE9ODg7YnJlYWsgZX1pZighbil7bEE9OTE7YnJlYWsgZX1pZigoMHxPKT49KDB8YXJbZUE+PjJdKSl7bEE9OTE7YnJlYWsgZX1vQT0oMHxhcltQPj4yXSkrKDMqKCgwfGJyKHIsTykpK2V8MCl8MCl8MCwxMDI0JihjcltvQT4+MF18Y3Jbb0ErMT4+MF08PDgpfHwobEE9NzkpfWlmKDc5PT0oMHxsQSkpe2lmKCgobEE9MCl8KGk+Pj10KSk8PS0xKXtsQT05NTticmVhayBlfWlmKCgwfGkpPj0oMHxhcltBQT4+Ml0pKXtsQT05NTticmVhayBlfWlmKCFqKXtsQT05ODticmVhayBlfWlmKCgwfHopPj0oMHxhcltlQT4+Ml0pKXtsQT05ODticmVhayBlfX1pZigoMHxfKTw9KDB8KFM9UysxfDApKSlicmVhayByfWVsc2Ugbj0wO2Rve2lmKGk9KGo9bitRfDApPDxhQSxPPTB8YXJbJD4+Ml0sQSlsQT05MztlbHNle2lmKHI9SD4+TywoMHwoZT1pPj5PKSk8PS0xKXtsQT04ODticmVhayBlfWlmKCgwfChTPTB8YXJbQUE+PjJdKSk8PSgwfGUpKXtsQT04ODticmVhayBlfWlmKCgwfHIpPD0tMSl7bEE9OTE7YnJlYWsgZX1pZigoMHxyKT49KDB8YXJbZUE+PjJdKSl7bEE9OTE7YnJlYWsgZX1vQT0oMHxhcltQPj4yXSkrKDMqKCgwfGJyKFMscikpK2V8MCl8MCl8MCwxMDI0JihjcltvQT4+MF18Y3Jbb0ErMT4+MF08PDgpfHwobEE9OTMpfWRve2lmKDkzPT0oMHxsQSkpe2lmKHI9aT4+TyxpPUg+Pk8sKChsQT0wKXxyKTw9LTEpe2xBPTk1O2JyZWFrIGV9aWYoKDB8KGU9MHxhcltBQT4+Ml0pKTw9KDB8cikpe2xBPTk1O2JyZWFrIGV9aWYoKDB8aSk8PS0xKXtsQT05ODticmVhayBlfWlmKCgwfGkpPj0oMHxhcltlQT4+Ml0pKXtsQT05ODticmVhayBlfWlmKG9BPSgwfGFyW1A+PjJdKSsoMyooKDB8YnIoZSxpKSkrcnwwKXwwKXwwLDIwNDgmKGNyW29BPj4wXXxjcltvQSsxPj4wXTw8OCkpYnJlYWs7aWYoaT0wfGxyW28rKGordDw8MSk+PjFdLCgwfChlPTB8YXJbRCsoaT4+PnJBPDwyKT4+Ml0pKTw9MClicmVhaztvQT0oMHx0cltlKy0xKyhKKygyNCppQXwwKSs5KyhmPDwyKSk+PjBdKStpfDAsb3JbYysoait6PDwxKT4+MV09KDB8b0EpPDA/MDo2NTUzNSYoKDB8b0EpPCgwfE0pP29BOlQpfX13aGlsZSgwKTtuPW4rMXwwfXdoaWxlKCgwfG4pPCgwfF8pKX19d2hpbGUoMCk7aWYoKDB8Tik8PSgwfCh4PXgrMXwwKSkpYnJlYWsgQX04OD09KDB8bEEpP3NyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSk6OTE9PSgwfGxBKT9zcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpOjk1PT0oMHxsQSk/c3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KTo5OD09KDB8bEEpJiZzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpfX1lbHNlIGlmKGkmJihMPTc8KDB8ckEpLDA8KDB8XykpKXtlPTA7ZG97aWYocj0wfGJyKFM9ZStZfDAsYSksUz0wfGJyKFMsbCksIUwpZm9yKGk9MDtuPTB8bHJbbysoKE89aStRfDApK3I8PDEpPj4xXSwwPCgwfCh0PTB8YXJbRCsobj4+PnJBPDwyKT4+Ml0pKSYmKGxBPSgwfHRyW3QrLTErKEorKDI0KmlBfDApKzkrKGY8PDIpKT4+MF0pK258MCxvcltjKyhPK1M8PDEpPj4xXT0oMHxsQSk8MD8wOjY1NTM1JigoMHxsQSk8KDB8TSk/bEE6VCkpLCgwfChpPWkrMXwwKSk8KDB8Xyk7KTtlPWUrMXwwfXdoaWxlKCgwfGUpPCgwfE4pKX19d2hpbGUoMCk7dXI9VX1lbHNlIHVyPVV9ZnVuY3Rpb24gTmEoQSxlLHIsaSxmLG4sdCxvLGEsYyxsKXtlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsdHw9MCxvfD0wLGF8PTAsY3w9MCxsfD0wO3ZhciB1LGIscyxkLGssaCx3LHYsbSxnLFoscCx5LEIsRSxYLFcsSSxDLEcsVixGLFIsTixfLFksUSxELEosTSxULFUsUz0wLE89MCx6PTAsaj0wLEg9MCx4PTAsUD0wLEw9MCxLPTAscT0wLCQ9MCxBQT0wLGVBPTAsckE9MCxpQT0wLGZBPTAsbkE9MCx0QT0wLG9BPTAsYUE9MCxjQT0wLGxBPTAsdUE9MCxiQT0wO2lmKHVyPShVPXVyKSsxNDR8MCxKPVUrOHwwLEY9KFY9VSkrMTM2fDAsUz0wfGFyWyhSPShBfD0wKSsxMDM1MnwwKT4+Ml0saUE9KDB8YnIoUyxyKSkrZXwwLGZBPTB8YXJbKE49QSsxMDM0MHwwKT4+Ml0sej1mPDwxLGo9KDB8Y3JbZkErKDI0KmlBfDApKzQ+PjBdKT4+PnomMylpZihUPShNPTE8PChQPTB8YXJbKChPPTA9PSgwfGYpKT9BKzU3NjB8MDpBKzU3Njh8MCk+PjJdKSktMXwwLEQ9MHxicihuLGUpLFE9MHxicih0LHIpLFc9MHxhclsoTz9BKzI0fDA6QSszMnwwKT4+Ml0sST0wfGFyWyhPP0ErMjh8MDpBKzM2fDApPj4yXSxpPUQ+PihlPTB8YXJbKEM9QSsxMDM0OHwwKT4+Ml0pLGU9UT4+ZSwtMTwoMHxpKSYoMHxpKTwoMHxTKXx8c3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KSwoMHxlKTw9LTEmJnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSksKDB8ZSk+PSgwfGFyWyhHPUErMTAzNTZ8MCk+PjJdKSYmc3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KSxvQT1mQSsoMjQqKCgwfGJyKGUsUykpK2l8MCl8MCkrMnwwLEI9QSs1MnwwLG9BPTB8YXJbODAwKygwfGFyWygwfGFyWyh5PUErNDh8MCk+PjJdKSsobHJbb0E+PjFdPDwyKT4+Ml0pPj4yXSxFPTB8YXJbQSs1ODIwPj4yXSx1QT1PP2xBPTA6KGxBPSgwfGFyW0ErNTc4MD4+Ml0pLTF8MCwoMHxhcltBKzU3ODQ+PjJdKS0xfDApLHA9KHRBPTB8YXJbQSs1ODA0Pj4yXSktbEF8MCx0QT10QS11QXwwLFk9KDB8Vyk8KEQrbnwwKT9XLUR8MDpuLF89KDB8SSk8KFErdHwwKT9JLVF8MDp0LFg9MCE9KDB8dHJbZkErKDI0KmlBfDApKzIyPj4wXSksMj09KDB8aikpe3N3aXRjaCgoMHxjcltmQSsoMjQqaUF8MCkrNT4+MF0pPj4+eiYzKXtjYXNlIDA6SD14PTAsYUE9LTEsY0E9MTticmVhaztjYXNlIDE6SD0tKHg9MSksY0E9YUE9MDticmVhaztjYXNlIDI6YUE9SD0tKHg9MSksY0E9MTticmVhaztjYXNlIDM6SD0tKHg9MSksY0E9LShhQT0xKX1pZihhcltKPj4yXT1hQSxhcls0K0o+PjJdPWNBLGFyW1Y+PjJdPUgsYXJbVis0Pj4yXT14LFo9MHxicihILGEpLGc9MC14JmEsdHJbRj4+MF09MHx0cltmQSsoMjQqaUF8MCkrOSsoZjw8Mik+PjBdLHRyWzErRj4+MF09MHx0cltmQSsoMjQqaUF8MCkrOSsoZjw8MikrMT4+MF0sdHJbMitGPj4wXT0wLHRyWzMrRj4+MF09MHx0cltmQSsoMjQqaUF8MCkrOSsoZjw8MikrMj4+MF0sdHJbNCtGPj4wXT0wfHRyW2ZBKygyNCppQXwwKSs5KyhmPDwyKSszPj4wXSwoMHxfKTw9MCl1cj1VO2Vsc2V7dT0wPCgwfFkpLGI9QSs1NDgwfDAscz1BKzEwMzY4fDAsZD1BKzEwMzcyfDAsaz1BKzEwMzc2fDAsaD1BKzEwMzYwfDAsdz1ZKy0xfDAsdj1fKy0xfDAsbT1BKzU5Nzd8MCwkPUErMTAzMDh8MCxBQT0oMHxicihRPj50QSxFKSkrKEQ+PnApfDAsSz0wO0E6Zm9yKDs7KXtpZihyQT1vKygoMHxicihlQT1LK1F8MCxhKSkrRCl8MCxpQT1jKygoMHxicihlQSxsKSkrRCl8MCx1KXtmQT1lQTw8dUEsZj0wPT0oMHxLKSxuQT0oMHxLKT09KDB8dikscT0wO2Rve2lmKFgmJjAhPSgwfHRyW2I+PjBdKSl7aWYoaT1xK0Q8PGxBPj4oZT0wfGFyW3M+PjJdKSxlPWZBPj5lLCgwfGkpPD0tMSl7YkE9MjM7YnJlYWsgQX1pZigoMHwocj0wfGFyW2Q+PjJdKSk8PSgwfGkpKXtiQT0yMzticmVhayBBfWlmKCgwfGUpPD0tMSl7YkE9MjY7YnJlYWsgQX1pZigoMHxlKT49KDB8YXJbaz4+Ml0pKXtiQT0yNjticmVhayBBfUE9KDB8YXJbaD4+Ml0pKygzKigoMHxicihyLGUpKStpfDApfDApfDAsMTAyNCYoY3JbQT4+MF18Y3JbQSsxPj4wXTw8OCl8fChiQT0yOCl9ZWxzZSBiQT0yODtlOmRve2lmKDI4PT0oMHxiQSkpe2lmKGk9KEE9KEw9cStEfChiQT0wKSk8PGxBKT4+KGU9MHxhcltzPj4yXSksZT1mQT4+ZSwoMHxpKTw9LTEpe2JBPTMwO2JyZWFrIEF9aWYoKDB8KHI9MHxhcltkPj4yXSkpPD0oMHxpKSl7YkE9MzA7YnJlYWsgQX1pZigoMHxlKTw9LTEpe2JBPTMzO2JyZWFrIEF9aWYoKDB8ZSk+PSgwfGFyW2s+PjJdKSl7YkE9MzM7YnJlYWsgQX1pZihQPSgwfGFyW2g+PjJdKSsoMyooKDB8YnIocixlKSkraXwwKXwwKXwwLCEoMjA0OCYoY3JbUD4+MF18Y3JbUCsxPj4wXTw8OCkpKXtpZihuQXwoMHxxKT09KDB8dyl8ZnwwPT0oMHxxKSl7dD0wO2Rve2lmKHo9KDB8YXJbSisodDw8Mik+PjJdKStMfDAsISgoMHwoaj0oMHxhcltWKyh0PDwyKT4+Ml0pK2VBfDApKTwoMHxJKSYoMHx6KTwoMHxXKSYtMTwoanx6fDApKSlicmVhayBlO2lmKGU9ajw8dUE+PihuPTB8YXJbQz4+Ml0pLCgwfChpPXo8PGxBPj5uKSk8PS0xKXtiQT0zOTticmVhayBBfWlmKCgwfChIPTB8YXJbUj4+Ml0pKTw9KDB8aSkpe2JBPTM5O2JyZWFrIEF9aWYoKDB8ZSk8PS0xKXtiQT00MjticmVhayBBfWlmKCgwfCh4PTB8YXJbRz4+Ml0pKTw9KDB8ZSkpe2JBPTQyO2JyZWFrIEF9aWYoaT0oUD0wfGFyW04+PjJdKSsoMjQqKCgwfGJyKEgsZSkpK2l8MCl8MCkrMnwwLGk9MHxscltpPj4xXSxPPVM9MHxhclt5Pj4yXSxpPj4+MD49KDB8YXJbQj4+Ml0pLVM+PjI+Pj4wKXtiQT01OTticmVhayBBfWlmKCEoZT0wfGFyW08rKGk8PDIpPj4yXSkpe2JBPTU5O2JyZWFrIEF9aWYoKDB8KHI9MHxhcltlKzgwMD4+Ml0pKTwoMHxvQSkpe2lmKGk9ZkE+Pm4sISgtMTwoMHwoUz1BPj5uKSkmKDB8Uyk8KDB8SCkpKXtiQT00NzticmVhayBBfWlmKCEoLTE8KDB8aSkmKDB8aSk8KDB8eCkpKXtiQT00OTticmVhayBBfWlmKFA9UCsoMjQqKCgwfGJyKEgsaSkpK1N8MCl8MCkrMnwwLCEoMHx0cls3NjQrKDB8YXJbTysobHJbUD4+MV08PDIpPj4yXSk+PjBdKSlicmVhayBlfWlmKCgwfG9BKTwoMHxyKSYmMD09KDB8dHJbZSs3NjQ+PjBdKSlicmVhayBlO2lmKDA9PSgwfHRyW20+PjBdKSYmKHg9KDB8YnIoaj4+dEEsRSkpKyh6Pj5wKXwwLFA9MHxhclskPj4yXSwoMHxhcltQKyh4PDwyKT4+Ml0pIT0oMHxhcltQKyhBQTw8Mik+PjJdKSkpYnJlYWsgZTt0PXQrMXwwfXdoaWxlKCgwfHQpPDIpfVA9KEE9MHxjcltyQStxPj4wXSktKDB8Y3JbckErKHErWithQSk+PjBdKXwwLEw9QS0oMHxjcltyQSsocStnK2NBKT4+MF0pfDAsQT0oMHx0clsoKDB8UCk8MD8xOjB8UD8zOjIpKygoMHxMKTwwPy0xOjAhPSgwfEwpJjEpK0Y+PjBdKStBfDAsdHJbaUErcT4+MF09KDB8QSk8MD8wOjI1NSYoKDB8QSk8KDB8TSk/QTpUKX19fXdoaWxlKDApO3E9cSsxfDB9d2hpbGUoKDB8cSk8KDB8WSkpfWlmKCgwfF8pPD0oMHwoSz1LKzF8MCkpKXtiQT01OTticmVha319aWYoMjM9PSgwfGJBKSlzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpO2Vsc2UgaWYoMjY9PSgwfGJBKSlzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpO2Vsc2UgaWYoMzA9PSgwfGJBKSlzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpO2Vsc2UgaWYoMzM9PSgwfGJBKSlzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpO2Vsc2UgaWYoMzk9PSgwfGJBKSlzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpO2Vsc2UgaWYoNDI9PSgwfGJBKSlzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpO2Vsc2UgaWYoNDc9PSgwfGJBKSlzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpO2Vsc2UgaWYoNDk9PSgwfGJBKSlzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpO2Vsc2UgaWYoNTk9PSgwfGJBKSlyZXR1cm4gdm9pZCh1cj1VKX19ZWxzZXtmb3IoaT0wfGNyW2ZBKygyNCppQXwwKSs2K2Y+PjBdLHI9KGU9SikrMTI4fDA7KDB8KGU9ZSs0fChhcltlPj4yXT0wKSkpPCgwfHIpOyk7YXJbSisoKDMxJmkpPDwyKT4+Ml09MSxhcltKKygoaSsxJjMxKTw8Mik+PjJdPTIsYXJbSisoKGkrMiYzMSk8PDIpPj4yXT0zLGFyW0orKChpKzMmMzEpPDwyKT4+Ml09NCxyQT1QKy01fDAsaT0wPCgwfF8pO0E6ZG97aWYoWCl7aWYoaSl7Sz0wPCgwfFkpLHE9QSs1NDgwfDAsJD1BKzEwMzY4fDAsQUE9QSsxMDM3MnwwLGVBPUErMTAzNzZ8MCxMPUErMTAzNjB8MCxBPTc8KDB8ckEpLFA9MDtlOmZvcig7Oyl7cjpkb3tpZihLKXtpZih4PSh6PVArUXwwKTw8dUEsdD0wfGJyKHosYSksej0wfGJyKHosbCksQSlmb3Ioej0wPT0oMHx0cltxPj4wXSksSD0tMTwoMHwoaj14Pj4odD0wfGFyWyQ+PjJdKSkpLG49LTE8KDB8KE89eD4+dCkpLFM9MDs7KXtpZihpPVMrRDw8bEEseiliQT03OTtlbHNle2lmKCgwfChlPWk+PnQpKTw9LTEpe2JBPTg4O2JyZWFrIGV9aWYoKDB8KHI9MHxhcltBQT4+Ml0pKTw9KDB8ZSkpe2JBPTg4O2JyZWFrIGV9aWYoIW4pe2JBPTkxO2JyZWFrIGV9aWYoKDB8Tyk+PSgwfGFyW2VBPj4yXSkpe2JBPTkxO2JyZWFrIGV9Y0E9KDB8YXJbTD4+Ml0pKygzKigoMHxicihyLE8pKStlfDApfDApfDAsMTAyNCYoY3JbY0E+PjBdfGNyW2NBKzE+PjBdPDw4KXx8KGJBPTc5KX1pZig3OT09KDB8YkEpKXtpZigoKGJBPTApfChpPj49dCkpPD0tMSl7YkE9OTU7YnJlYWsgZX1pZigoMHxpKT49KDB8YXJbQUE+PjJdKSl7YkE9OTU7YnJlYWsgZX1pZighSCl7YkE9OTg7YnJlYWsgZX1pZigoMHxqKT49KDB8YXJbZUE+PjJdKSl7YkE9OTg7YnJlYWsgZX19aWYoKDB8WSk8PSgwfChTPVMrMXwwKSkpYnJlYWsgcn1lbHNlIG49MDtkb3tpZihpPShqPW4rRHwwKTw8bEEsTz0wfGFyWyQ+PjJdLDB8dHJbcT4+MF0pe2lmKHI9eD4+TywoMHwoZT1pPj5PKSk8PS0xKXtiQT04ODticmVhayBlfWlmKCgwfChTPTB8YXJbQUE+PjJdKSk8PSgwfGUpKXtiQT04ODticmVhayBlfWlmKCgwfHIpPD0tMSl7YkE9OTE7YnJlYWsgZX1pZigoMHxyKT49KDB8YXJbZUE+PjJdKSl7YkE9OTE7YnJlYWsgZX1jQT0oMHxhcltMPj4yXSkrKDMqKCgwfGJyKFMscikpK2V8MCl8MCl8MCwxMDI0JihjcltjQT4+MF18Y3JbY0ErMT4+MF08PDgpfHwoYkE9OTMpfWVsc2UgYkE9OTM7ZG97aWYoOTM9PSgwfGJBKSl7aWYocj1pPj5PLGk9eD4+TywoKGJBPTApfHIpPD0tMSl7YkE9OTU7YnJlYWsgZX1pZigoMHwoZT0wfGFyW0FBPj4yXSkpPD0oMHxyKSl7YkE9OTU7YnJlYWsgZX1pZigoMHxpKTw9LTEpe2JBPTk4O2JyZWFrIGV9aWYoKDB8aSk+PSgwfGFyW2VBPj4yXSkpe2JBPTk4O2JyZWFrIGV9aWYoY0E9KDB8YXJbTD4+Ml0pKygzKigoMHxicihlLGkpKStyfDApfDApfDAsMjA0OCYoY3JbY0E+PjBdfGNyW2NBKzE+PjBdPDw4KSlicmVhaztpZihpPTB8Y3Jbbysoait0KT4+MF0sKDB8KGU9MHxhcltKKyhpPj4+ckE8PDIpPj4yXSkpPD0wKWJyZWFrO2NBPSgwfHRyW2UrLTErKGZBKygyNCppQXwwKSs5KyhmPDwyKSk+PjBdKStpfDAsdHJbYysoait6KT4+MF09KDB8Y0EpPDA/MDoyNTUmKCgwfGNBKTwoMHxNKT9jQTpUKX19d2hpbGUoMCk7bj1uKzF8MH13aGlsZSgoMHxuKTwoMHxZKSl9fXdoaWxlKDApO2lmKCgwfF8pPD0oMHwoUD1QKzF8MCkpKWJyZWFrIEF9ODg9PSgwfGJBKT9zcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpOjkxPT0oMHxiQSk/c3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KTo5NT09KDB8YkEpP3NyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSk6OTg9PSgwfGJBKSYmc3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KX19ZWxzZSBpZihpJiYoTD03PCgwfHJBKSwwPCgwfFkpKSl7ZT0wO2Rve2lmKHI9MHxicihTPWUrUXwwLGEpLFM9MHxicihTLGwpLCFMKWZvcihpPTA7bj0wfGNyW28rKChPPWkrRHwwKStyKT4+MF0sMDwoMHwodD0wfGFyW0orKG4+Pj5yQTw8Mik+PjJdKSkmJihiQT0oMHx0clt0Ky0xKyhmQSsoMjQqaUF8MCkrOSsoZjw8MikpPj4wXSkrbnwwLHRyW2MrKE8rUyk+PjBdPSgwfGJBKTwwPzA6MjU1JigoMHxiQSk8KDB8TSk/YkE6VCkpLCgwfChpPWkrMXwwKSk8KDB8WSk7KTtlPWUrMXwwfXdoaWxlKCgwfGUpPCgwfF8pKX19d2hpbGUoMCk7dXI9VX1lbHNlIHVyPVV9ZnVuY3Rpb24gX2EoQSxlKXtBfD0wO3ZhciByPTA7c3dpdGNoKDB8KGV8PTApKXtjYXNlIDA6ZT03Nzk2LHI9NDticmVhaztjYXNlIDE6ZT03ODI0LHI9NDticmVhaztjYXNlIDI6ZT03NzY4LHI9NDticmVhaztkZWZhdWx0OmU9MH1yZXR1cm4gND09KDB8cikmJihlPTB8YXJbZSsoQTw8Mik+PjJdKSwwfGV9ZnVuY3Rpb24gWWEoKXt2YXIgQT0wLGU9MCxyPTAsaT0wLGY9MCxuPTAsdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTA7dD0xO2Rve2ZvcihmPTB8YXJbNzgyNCsodDw8Mik+PjJdLG89MTw8dCxlPUE9MDs7KXtmb3Iobj0yNTUmQSxyPTAsaT1lO3RyW2YrKGk8PDEpPj4wXT1yLHRyW2YrKGk8PDEpKzE+PjBdPW4sKDB8KHI9cisxfDApKSE9KDB8byk7KWk9aSsxfDA7aWYoKDB8KEE9QSsxfDApKT09KDB8bykpYnJlYWs7ZT1lK298MH1mb3IoZj0wfGFyWzc3NjgrKHQ8PDIpPj4yXSxlPUE9MDs7KXtmb3Iobj0yNTUmQSxyPTAsaT1lO3RyW2YrKGk8PDEpPj4wXT1uLCgwfChyPSh0cltmKyhpPDwxKSsxPj4wXT1yKSsxfDApKSE9KDB8byk7KWk9aSsxfDA7aWYoKDB8KEE9QSsxfDApKT09KDB8bykpYnJlYWs7ZT1lK298MH1mPTB8YXJbNzc5NisodDw8Mik+PjJdLG49bzw8dCxBPWU9MDtkb3tpZigtMTwoMHxlKSlmb3IoaT0wLHI9ZTsoMHxyKTwoMHxvKSYoMHxpKTwoMHxvKSYmKHRyW2YrKEE8PDEpPj4wXT1pLHRyW2YrKEE8PDEpKzE+PjBdPXIsQT1BKzF8MCksZT1pKzF8MCwwPCgwfHIpOylpPWUscj1yKy0xfDA7ZWxzZSBlPTB9d2hpbGUoKDB8QSk8KDB8bikpO3Q9dCsxfDB9d2hpbGUoNiE9KDB8dCkpO2E9Mjtkb3tjPTE8PGEsbD0oMTw8KHM9YSstMnwwKTw8cyktMXwwLHU9Nzc2OCsoczw8Mil8MCxiPTc3OTYrKHM8PDIpfDAscz03ODI0KyhzPDwyKXwwLG89MDtkb3tkPTB8YXJbNzg1MisoMjQqb3wwKSsoYTw8Mik+PjJdLG49KGg9Mj09KDB8bykpPzY2NzA3OjAsdD0wO2Rve3N3aXRjaChrPXQ8PGEsMHxvKXtjYXNlIDA6aT0wfGFyW2I+PjJdLHI9MDtkb3tmb3IoQT0xNixlPWw7QT0oZj0wPT0oMHxBKSk/MTU6QSstMXwwLCgoKDB8Y3JbaSsoKGU9KGY8PDMxPj4zMSkrZXwwKTw8MSk+PjBdKTw8MikrKDB8Y3JbNjM5NzkrKEE8PDEpPj4wXSl8MCkhPSgwfHIpfHwoKCgwfGNyW2krKGU8PDEpKzE+PjBdKTw8MikrKDB8Y3JbNjM5NzkrKEE8PDEpKzE+PjBdKXwwKSE9KDB8dCk7KTt0cltkKygoZj1yK2t8MCk8PDEpPj4wXT1lLHRyW2QrKGY8PDEpKzE+PjBdPUEscj1yKzF8MH13aGlsZSgoMHxyKTwoMHxjKSk7YnJlYWs7Y2FzZSAxOmk9MHxhcltzPj4yXSxyPTA7ZG97Zm9yKEE9MTYsZT1sO0E9KGY9MD09KDB8QSkpPzE1OkErLTF8MCwoKCgwfGNyW2krKChlPShmPDwzMT4+MzEpK2V8MCk8PDEpPj4wXSk8PDIpKygwfGNyWzYxMjUxKyhBPDwxKT4+MF0pfDApIT0oMHxyKXx8KCgoMHxjcltpKyhlPDwxKSsxPj4wXSk8PDIpKygwfGNyWzYxMjUxKyhBPDwxKSsxPj4wXSl8MCkhPSgwfHQpOyk7dHJbZCsoKGY9citrfDApPDwxKT4+MF09ZSx0cltkKyhmPDwxKSsxPj4wXT1BLHI9cisxfDB9d2hpbGUoKDB8cik8KDB8YykpO2JyZWFrO2RlZmF1bHQ6aT0wO2Rve2ZvcihmPWkra3wwLGU9aD8wfGFyW3U+PjJdOjAsQT0xNixyPWw7QT0odz0wPT0oMHxBKSk/MTU6QSstMXwwLCgoKDB8Y3JbZSsoKHI9KHc8PDMxPj4zMSkrcnwwKTw8MSk+PjBdKTw8MikrKDB8Y3JbbisoQTw8MSk+PjBdKXwwKSE9KDB8aSl8fCgoKDB8Y3JbZSsocjw8MSkrMT4+MF0pPDwyKSsoMHxjcltuKyhBPDwxKSsxPj4wXSl8MCkhPSgwfHQpOyk7dHJbZCsoZjw8MSk+PjBdPXIsdHJbZCsoZjw8MSkrMT4+MF09QSxpPWkrMXwwfXdoaWxlKCgwfGkpPCgwfGMpKX10PXQrMXwwfXdoaWxlKCgwfHQpPCgwfGMpKTtvPW8rMXwwfXdoaWxlKDMhPSgwfG8pKTthPWErMXwwfXdoaWxlKDYhPSgwfGEpKX1mdW5jdGlvbiBRYShBLGUpe2V8PTA7dmFyIHIsaSxmLG4sdCxvLGEsYyxsLHUsYixzLGQsayxoLHcsdixtLGcsWixwLHksQixFLFgsVyxJLEMsRyxWLEY9MCxSPTAsTj0wLF89MCxZPTAsUT0wLEQ9MCxKPTAsTT0wLFQ9MCxVPTAsUz0wLE89MCx6PTAsaj0wLEg9MCx4PTAsUD0wO2lmKHVyPShWPXVyKSsyMDh8MCxIPVYrMjR8MCxHPVYrOHwwLHQ9KEM9VikrNDB8MCx3PVYrMTkyfDAsMTMyIT0oMHxhclsoQXw9MCk+PjJdKSlyZXR1cm4gdXI9ViwoSD0wKXxIO2lmKCEoMHx0cls1MTIrKDB8YXJbZSsxMDMzMj4+Ml0pPj4wXSkpcmV0dXJuIHVyPVYsKEg9MCl8SDtpZighKDB8dHJbZSsxMDA+PjBdKSlyZXR1cm4gdXI9ViwoSD0wKXxIO3I9MD09KDB8YXJbZSsxMjQwPj4yXSk/MTozLGk9ZSszMnwwLGY9ZSsyNHwwLG49ZSszNnwwLG89ZSsyOHwwLGE9ZSs0MHwwLGM9ZSs0NHwwLGw9QSs4fDAsdT1lKzU3NjB8MCxiPWUrNTc2OHwwLHM9MSt3fDAsZD0yK3d8MCxrPTMrd3wwLGg9NCt3fDAsdj01K3d8MCxtPTYrd3wwLGc9Nyt3fDAsWj04K3d8MCxwPTkrd3wwLHk9MTArd3wwLEI9MTErd3wwLEU9MTIrd3wwLFg9MTMrd3wwLFc9MTQrd3wwLEk9MTUrd3wwLGo9MDtBOmZvcig7Oyl7c3dpdGNoKFU9MHxhclsoKFI9MD09KDB8aikpP2Y6aSk+PjJdLE89MHxhclsoUj9vOm4pPj4yXSxTPTB8YXJbZSs0KyhqPDwyKT4+Ml0sVD0wfGFyWyhSP2E6Yyk+PjJdLDB8YXJbbD4+Ml0pe2Nhc2UgMDpGPTB8YXJbKFI/dTpiKT4+Ml0sb2ModCk7ZTpkb3tpZigwPCgwfE8pKXtpZihEPVU8PDEsSj0oMHxVKTwwPy0xOkQsKDB8Rik8PTgpZm9yKEY9MDs7KWlmKGFjKHQsUysoMHxicihGLFQpKXwwLFUpLCgwfE8pPD0oMHwoRj1GKzF8MCkpKXtGPTA7YnJlYWsgZX1pZigwPCgwfFUpKUY9UT0wO2Vsc2UgZm9yKEY9Uj0wOzspaWYoYWModCxOPUZ8fChGPTB8d3UoSikpLEQpLCgwfE8pPD0oMHwoUj1SKzF8MCkpKWJyZWFrIGU7ZG97Zm9yKE49Rnx8KEY9MHx3dShKKSksXz0wfGJyKFEsVCksWT1GLFI9MDt4PVMrKFIrXzw8MSl8MCx0cltOKyhNPVI8PDEpPj4wXT1vclt4Pj4xXSx0cltZKygxfE0pPj4wXT0oMHxsclt4Pj4xXSk+Pj44LCgwfChSPVIrMXwwKSkhPSgwfFUpOylOPVk7YWModCxZLEQpLFE9USsxfDB9d2hpbGUoKDB8USk8KDB8TykpfWVsc2UgRj0wfXdoaWxlKDApO2lmKGxjKHcsdCksMHxGJiZtdShGKSwoMHx0clt3Pj4wXSkhPSgwfHRyW0ErMTIrKGo8PDQpPj4wXSkpe3o9MjI7YnJlYWsgQX1pZigoMHx0cltzPj4wXSkhPSgwfHRyW0ErMTIrKGo8PDQpKzE+PjBdKSl7ej0yMjticmVhayBBfWlmKCgwfHRyW2Q+PjBdKSE9KDB8dHJbQSsxMisoajw8NCkrMj4+MF0pKXt6PTIyO2JyZWFrIEF9aWYoKDB8dHJbaz4+MF0pIT0oMHx0cltBKzEyKyhqPDw0KSszPj4wXSkpe3o9MjI7YnJlYWsgQX1pZigoMHx0cltoPj4wXSkhPSgwfHRyW0ErMTIrKGo8PDQpKzQ+PjBdKSl7ej0yMjticmVhayBBfWlmKCgwfHRyW3Y+PjBdKSE9KDB8dHJbQSsxMisoajw8NCkrNT4+MF0pKXt6PTIyO2JyZWFrIEF9aWYoKDB8dHJbbT4+MF0pIT0oMHx0cltBKzEyKyhqPDw0KSs2Pj4wXSkpe3o9MjI7YnJlYWsgQX1pZigoMHx0cltnPj4wXSkhPSgwfHRyW0ErMTIrKGo8PDQpKzc+PjBdKSl7ej0yMjticmVhayBBfWlmKCgwfHRyW1o+PjBdKSE9KDB8dHJbQSsxMisoajw8NCkrOD4+MF0pKXt6PTIyO2JyZWFrIEF9aWYoKDB8dHJbcD4+MF0pIT0oMHx0cltBKzEyKyhqPDw0KSs5Pj4wXSkpe3o9MjI7YnJlYWsgQX1pZigoMHx0clt5Pj4wXSkhPSgwfHRyW0ErMTIrKGo8PDQpKzEwPj4wXSkpe3o9MjI7YnJlYWsgQX1pZigoMHx0cltCPj4wXSkhPSgwfHRyW0ErMTIrKGo8PDQpKzExPj4wXSkpe3o9MjI7YnJlYWsgQX1pZigoMHx0cltFPj4wXSkhPSgwfHRyW0ErMTIrKGo8PDQpKzEyPj4wXSkpe3o9MjI7YnJlYWsgQX1pZigoMHx0cltYPj4wXSkhPSgwfHRyW0ErMTIrKGo8PDQpKzEzPj4wXSkpe3o9MjI7YnJlYWsgQX1pZigoMHx0cltXPj4wXSkhPSgwfHRyW0ErMTIrKGo8PDQpKzE0Pj4wXSkpe3o9MjI7YnJlYWsgQX1pZigoMHx0cltJPj4wXSk9PSgwfHRyW0ErMTIrKGo8PDQpKzE1Pj4wXSkpYnJlYWs7ej0yMjticmVhayBBO2Nhc2UgMTplOmRve2lmKDA8KDB8Tykpe2lmKEo9VTw8MSxNPSgwfFUpPDA/LTE6SixGPTA8KDB8VSksKDB8YXJbKFI/dTpiKT4+Ml0pPD04KXtpZighRil7Rj03NDM5LHo9Mzk7YnJlYWt9Zm9yKFI9MCxGPTc0Mzk7Oyl7Zm9yKF89UysoMHxicihSLFQpKXwwLE49MDt6PTY1NTM1JkYseD1jcltfK04+PjBdXno+Pj44LEY9KCh4Xj14Pj4+NCl8ejw8OCleeDw8NV54PDwxMiwoMHwoTj1OKzF8MCkpIT0oMHxVKTspO2lmKCgwfChSPVIrMXwwKSk9PSgwfE8pKXt6PTM5O2JyZWFrIGV9fX1pZihGKXtGPTc0MzksUj1EPTA7ZG97Zm9yKF89Unx8KFI9MHx3dShNKSksWT0wfGJyKEQsVCksUT1SLE49MDs7KXtpZihQPVMrKE4rWTw8MSl8MCx0cltfKyh4PU48PDEpPj4wXT1vcltQPj4xXSx0cltRKygxfHgpPj4wXT0oMHxscltQPj4xXSk+Pj44LCgwfChOPU4rMXwwKSk9PSgwfFUpKXtOPTA7YnJlYWt9Xz1RfWZvcig7eD02NTUzNSZGLFA9Y3JbUStOPj4wXV54Pj4+OCxGPSgoUF49UD4+PjQpfHg8PDgpXlA8PDVeUDw8MTIsKDB8KE49TisxfDApKTwoMHxKKTspO0Q9RCsxfDB9d2hpbGUoKDB8RCkhPSgwfE8pKX1lbHNle2ZvcihSPUY9MDtSPVJ8fDB8d3UoTSksKDB8KEY9RisxfDApKSE9KDB8Tyk7KTtGPTc0Mzl9RiY9NjU1MzUsUiYmbXUoUil9ZWxzZSBGPTc0Mzksej0zOX13aGlsZSgwKTtpZigzOT09KDB8eikmJih6PTAsRiY9NjU1MzUpLCgwfEYpPT0oMHwoUj0wfGxyW0ErNjArKGo8PDEpPj4xXSkpKWJyZWFrO3o9NDM7YnJlYWsgQTtjYXNlIDI6aWYoRj0wPCgwfFUpJjA8KDB8TyksKDB8YXJbKFI/dTpiKT4+Ml0pPDkpaWYoRil7Rj1SPTA7ZG97Zm9yKF89Uj4+PjheUixZPTB8YnIoUixUKSxOPTA7Rj0oMjU1JihfXk5eTj4+PjgpXmNyW1MrKE4rWSk+PjBdKStGfDAsKDB8KE49TisxfDApKSE9KDB8VSk7KTtSPVIrMXwwfXdoaWxlKCgwfFIpIT0oMHxPKSl9ZWxzZSBGPTA7ZWxzZSBpZihGKXtGPU49MDtkb3tmb3IoXz1OPj4+OF5OLFk9MHxicihOLFQpLFI9MDtGPShQPTI1NSYoX15SXlI+Pj44KSkrRisoUF5jcltTKyhSK1kpPj4wXSl8MCwoMHwoUj1SKzF8MCkpIT0oMHxVKTspO049TisxfDB9d2hpbGUoKDB8TikhPSgwfE8pKX1lbHNlIEY9MDtpZigoMHxGKT09KDB8KFI9MHxhcltBKzY4KyhqPDwyKT4+Ml0pKSlicmVhazt6PTU0O2JyZWFrIEF9aWYoKDB8cik8PSgwfChqPWorMXwwKSkpe0Y9MCx6PTcxO2JyZWFrfX1yZXR1cm4gMjI9PSgwfHopPyhQPTB8YXJbMjY2OV0sYXJbQz4+Ml09YXJbZSs5Mj4+Ml0sSWkoUCwzOTA4NCxDKSx1cj1WLDB8KFA9NSkpOjQzPT0oMHx6KT8oUD0wfGFyWzI2NjldLHg9MHxhcltlKzkyPj4yXSxhcltHPj4yXT1SLGFyWzQrRz4+Ml09Rixhcls4K0c+PjJdPXgsSWkoUCwzOTEyNyxHKSx1cj1WLDB8KFA9NSkpOjU0PT0oMHx6KT8oUD0wfGFyWzI2NjldLHg9MHxhcltlKzkyPj4yXSxhcltIPj4yXT1SLGFyW0grND4+Ml09RixhcltIKzg+PjJdPXgsSWkoUCwzOTEyNyxIKSx1cj1WLDB8KFA9NSkpOjcxPT0oMHx6KT8odXI9ViwwfEYpOjB9ZnVuY3Rpb24gRGEoQSl7dmFyIGUscixpLGY9MCxuPTAsdD0wLG89MCxhPTA7aWYoZT0obz0wfGFyWyhBfD0wKSsxODU5Nj4+Ml0pKzU5MzJ8MCxuPTB8YXJbKHI9QSsxODYwMHwwKT4+Ml0sISgwfHRyW24rMTI+PjBdKSlyZXR1cm4gMzw9KGY9MHxhcltuKzc5Nj4+Ml0pPj4+MCYmc3IoMzkyMTEsMzkyNDIsMTUwOCwzOTI1MSksaHQoQSsxODU4MHwwLGYsMHxhcltuKzc5Mj4+Ml0pLHRyWyhBPUErMTg1ODh8MCk+PjBdPTAsdHJbQSsxPj4wXT0wLHRyW0ErMj4+MF09MCwodHJbQSszPj4wXT0wKXwoQT0xKTtpZih0PTB8YXJbbisxNj4+Ml0sZj0wfGxyWygwfGFyW28rMTAzNDA+PjJdKSsoMjQqKDB8YXJbKDB8YXJbbysxMDI4ND4+Ml0pKygoMHxhclsoMHxhcltvKzEwMjcyPj4yXSkrKHQ8PDIpPj4yXSktMTw8Mik+PjJdKXwwKSsyPj4xXSxuPTB8YXJbbys0OD4+Ml0sZj4+PjA+PSgwfGFyW28rNTI+PjJdKS1uPj4yPj4+MClyZXR1cm4oQT0wKXxBO2lmKGk9MHxhcltuKyhmPDwyKT4+Ml0sMHxGYShlLCgwfHQpJSgwfChvPTB8YXJbbys1ODIwPj4yXSkpfDAsKDB8dCkvKDB8byl8MCkpcmV0dXJuIGY9MHxhcltyPj4yXSwzPD0obj0wfGFyW2YrNzk2Pj4yXSk+Pj4wJiZzcigzOTIxMSwzOTI0MiwxNTA4LDM5MjUxKSxodChBKzE4NTgwfDAsbiwwfGFyW2YrNzkyPj4yXSksdHJbKEE9QSsxODU4OHwwKT4+MF09MCx0cltBKzE+PjBdPTAsdHJbQSsyPj4wXT0wLCh0cltBKzM+PjBdPTApfChBPTEpO2lmKHQ9MHxhcltBKzE4NjA0Pj4yXSxuPTB8YXJbQSsxODYwOD4+Ml0sbz0wfGFyW3QrMTA2MzI+PjJdLCEoMTwodD0oMHxhclt0KzEwNjM2Pj4yXSktbz4+Mik+Pj4wKSlyZXR1cm4oQT0wKXxBO2ZvcihmPTE7KDB8YXJbbysoZjw8Mik+PjJdKSE9KDB8bik7KWlmKHQ+Pj4wPD0oZj1mKzF8MCk+Pj4wKXtmPTAsYT0xNjticmVha31yZXR1cm4gMTY9PSgwfGEpPzB8ZjooZj0wfGFyW28rKGYrLTE8PDIpPj4yXSk/KE1uKGYrNDR8MCwwfGFyW2YrMTI0Pj4yXSksMHx0clsxMzQwK2k+PjBdPyhndChBKzE4NTgwfDAsYT0xMzMyK2l8MCksdnQoYSksMHwoQT0xKSk6KEE9MCl8QSk6KEE9MCl8QX1mdW5jdGlvbiBKYShBLGUscil7ZXw9MCxyfD0wO3ZhciBpLGYsbix0LG8sYSxjLGwsdSxiLHMsZCxrLGgsdyx2PTAsbT0wLGc9MCxaPTAscD0wLHk9MCxCPTAsRT0wLFg9MCxXPTAsST0wLEM9MDttPTB8YXJbKEM9KEF8PTApKzE4NTk2fDApPj4yXSxoPTB8YXJbbSs1ODIwPj4yXSx2PTB8YXJbKHc9QSsxMnwwKT4+Ml0saz1tKzU5NjV8MDtkb3tpZighciYmMDwoMHx2KSYwIT0oMHx0cltrPj4wXSkmJjA9PSgwfGFyW0ErOD4+Ml0pKXtpZihyPXYrLTF8MCwxPCgwfGgpKXtpZihJPTB8YXJbKHY9QSsxODYwNHwwKT4+Ml0scj4+PjA8KDB8YXJbSSsxMDY4MD4+Ml0pLSgwfGFyW0krMTA2NzY+PjJdKT4+Mz4+PjApe2JhKG0sMHxhcltBKzE4NjEyPj4yXSwxLHIsMSksZ3QoQSsxODU4MHwwLCgwfGFyWzEwNjc2KygwfGFyW3Y+PjJdKT4+Ml0pKygoMHxhclt3Pj4yXSktMTw8Myl8MCksdnQoKDB8YXJbMTA2NzYrKDB8YXJbdj4+Ml0pPj4yXSkrKCgwfGFyW3c+PjJdKS0xPDwzKXwwKTticmVha31yZXR1cm4gMHwoQz0yKX1pZihiYShtLDB8YXJbQSsxODYxMj4+Ml0sMCxyLDEpLHI9MHxhcltBKzE4NjAwPj4yXSwodj0wfGFyW3IrNzk2Pj4yXSk+Pj4wPDMpe2h0KEErMTg1ODB8MCx2LDB8YXJbcis3OTI+PjJdKSx0clsoST1BKzE4NTg4fDApPj4wXT0wLHRyW0krMT4+MF09MCx0cltJKzI+PjBdPTAsdHJbSSszPj4wXT0wO2JyZWFrfXNyKDM5MjExLDM5MjQyLDE1MDgsMzkyNTEpfX13aGlsZSgwKTtmb3IoZj1BKzh8MCxuPWgtMXwwLHQ9QSsxODYxMnwwLG89QSsxODU4MHwwLGE9QSsxODU4NHwwLGM9bSs1ODI4fDAsbD1BKzE4NjA0fDAsST1BKzE4NTU2fDAsdT1tKzU5MzV8MCxiPUErMTg2MDB8MCxzPUErNHwwLGQ9bSs1OTY2fDAsaT1tKzEwMjk2fDAsWD0wfGFyW3c+PjJdLHA9MHxhcltmPj4yXSxXPTB8YXJbQz4+Ml07Oyl7aWYoKHY9KDB8YnIoWCxoKSkrcHwwKT4+PjA+PSgwfGFyW1crMTAyNzY+PjJdKS0oMHxhcltXKzEwMjcyPj4yXSk+PjI+Pj4wKXtyPTIsdj0zNTticmVha31pZigoMHxwKT49KDB8YXJbVys1ODIwPj4yXSkpe3I9Mix2PTM1O2JyZWFrfWlmKCgwfFgpPj0oMHxhcltXKzU4Mjg+PjJdKSl7cj0yLHY9MzU7YnJlYWt9aWYoKDB8cCk8KDB8bikmMDwoMHxYKSZlJiZiYShXLDB8YXJbdD4+Ml0scCsxfDAsWCstMXwwLDEpLCEoMHxhclthPj4yXSkpe3I9Mix2PTM1O2JyZWFrfWlmKE1hKEEpLDE9PSgwfHApJjAhPSgwfHRyW2s+PjBdKSYmKDB8WCk8KCgwfGFyW2M+PjJdKS0xfDApKXtpZihXPTB8YXJbbD4+Ml0scj0wfGFyW1crMTA2NzY+PjJdLCgwfGFyW1crMTA2ODA+PjJdKS1yPj4zPj4+MDw9WD4+PjApe3I9Mix2PTM1O2JyZWFrfWd0KHIrKFg8PDMpfDAsbyksbXQoKDB8YXJbMTA2NzYrKDB8YXJbbD4+Ml0pPj4yXSkrKFg8PDMpfDApfWlmKChCPTAhPSgwfCh5PTB8YXQoSSkpKSkmJjB8dHJbdT4+MF0mJihndCgxMzMyKygwfGFyW2I+PjJdKXwwLG8pLG10KDEzMzIrKDB8YXJbYj4+Ml0pfDApLHRyWzEzNDArKDB8YXJbYj4+Ml0pPj4wXT0xKSxUbigoMHxhclsxMDUyNCsoMHxhcltDPj4yXSk+PjJdKSsoODAqdnwwKXwwLDEpLEU9MHxhclt3Pj4yXSxaPShnPTB8YXJbcz4+Ml0pKzF8MCxhcltzPj4yXT1aLFc9MHxhcltDPj4yXSxyPTB8YXJbVys1ODM2Pj4yXSx2PTB8YXJbVys1ODIwPj4yXSwoMHxaKTwoMHxyKT9yPShtPTApfGFyWygwfGFyW1crMTAyODQ+PjJdKSsoWjw8Mik+PjJdOm09MSxYPSgwfHIpLygwfHYpfDAscD0oMHxyKSUoMHx2KXwwLGFyW0E+PjJdPXIsYXJbZj4+Ml09cCxhclt3Pj4yXT1YLDA9PSgwfHkpJm0pe3Y9Mjc7YnJlYWt9aWYoQil7cj0wLHY9MzU7YnJlYWt9aWYoKHI9MHx0cltkPj4wXT8ocj0wfGFyW2k+PjJdLCgwfGFyW3IrKFo8PDIpPj4yXSkhPSgwfGFyW3IrKGc8PDIpPj4yXSkpOjApfCgwfEUpIT0oMHxYKSYwIT0oMHx0cltrPj4wXSkpe3Y9MzI7YnJlYWt9fXJldHVybiAyNz09KDB8dik/KGVyKDQrKDB8YXJbQSsxODU5Mj4+Ml0pfDAsMTAwNCwwKSx0clsxMDUxNisoMHxhcltDPj4yXSk+PjBdPTMsMHwoQz0yKSk6MzI9PSgwfHYpPzB8YXQoSSk/KHR0KEkpLDB8KEM9MSkpOihlcig0KygwfGFyW0ErMTg1OTI+PjJdKXwwLDEwMTcsMCksdHJbMTA1MTYrKDB8YXJbQz4+Ml0pPj4wXT0zLDB8KEM9MikpOjM1PT0oMHx2KT8wfHI6MH1mdW5jdGlvbiBNYShBKXt2YXIgZSxyLGksZixuLHQsbyxhLGM9MCxsPTAsdT0wLGI9MCxzPTA7bj0wfGFyWyhBfD0wKSsxODYwMD4+Ml0sYj0wfGFyW0ErMTg1OTY+PjJdLGE9KDB8KGM9MHxhcltBPj4yXSkpJSgwfChzPTB8YXJbYis1ODIwPj4yXSkpfDAscz0oMHxjKS8oMHxzKXwwLHI9YTw8KGU9MHxhclsoYz1iKzU4MDR8MCk+PjJdKSxpPXM8PGUsZj0wfGFyW2IrMTAzNTI+PjJdLGw9KDB8YnIoZixzKSkrYXwwLHQ9MHxhcltiKzEwMzQwPj4yXSxvclt0KygyNCpsfDApPj4xXT1hcls4MDArbj4+Ml0sbD02NTUzNSZhcltuPj4yXSxvPXI+Pih1PTB8YXJbYisxMDM0OD4+Ml0pLHU9aT4+dSwtMTwoMHxvKSYoMHxvKTwoMHxmKXx8c3IoNDg0ODIsNDg1MTksMTI4LDQ4NTM5KSwoMHx1KTw9LTEmJnNyKDQ4NTQzLDQ4NTE5LDEyOSw0ODUzOSksKDB8dSk+PSgwfGFyW2IrMTAzNTY+PjJdKSYmc3IoNDg1NDMsNDg1MTksMTI5LDQ4NTM5KSxiPXQrKDI0KigoMHxicihmLHUpKStvfDApfDApKzJ8MCxvcltiPj4xXT1sLDAhPSgwfHRyWzMyNStuPj4wXSl8fDAhPSgwfHRyWzMyNituPj4wXSk/KGZ1bmN0aW9uKEEsZSxyLGkpe2V8PTAscnw9MCxpfD0wO3ZhciBmLG4sdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTAsQj0wLEU9MCxYPTAsVz0wLEk9MCxDPTAsRz0wO3VyPShuPXVyKSszMnwwLGk9bixhPTB8YXJbMTg2MDArKEF8PTApPj4yXSxmPTB8YXJbQSsxODU5Nj4+Ml0sbz0odD1pKSsxN3wwO2Zvcig7dHJbdD4+MF09MCx0PXQrMXwwLCgwfHQpPCgwfG8pOyk7dD0wPCgwfGUpJiYoQz0wfGJyKDB8YXJbNTgyMCtmPj4yXSxyKSxJPTB8YXJbMTAzMDgrZj4+Ml0sKDB8YXJbQT4+Ml0pPigwfGFyW2ErODAwPj4yXSkmJigwfGFyW0krKEMrZTw8Mik+PjJdKT09KDB8YXJbSSsoZSstMStDPDwyKT4+Ml0pKT8yNTUmKDB8b3QoQSsxODU1NnwwLDB8YXJbQSsxODU4MD4+Ml0pKTowO289MDwoMHxyKSYoST10PDwyND4+MjQ9PTApJiYoRT0wfGFyWzU4MjArZj4+Ml0sVz0oMHxicihFLHIpKStlfDAsWD0wfGFyWzEwMzA4K2Y+PjJdLEM9WCsoKDB8YnIoRSxyKy0xfDApKStlPDwyKXwwLCgoMHxhcltBPj4yXSktRXwwKT49KDB8YXJbYSs4MDA+PjJdKSYmKDB8YXJbWCsoVzw8Mik+PjJdKT09KDB8YXJbQz4+Ml0pKT8yNTUmKDB8b3QoQSsxODU1NnwwLDB8YXJbQSsxODU4MD4+Ml0pKTowO2lmKEM9bzw8MjQ+PjI0PT0wLCEoKG98dCk8PDI0Pj4yNCkpe0U9MD09KDB8YXJbNTc3NitmPj4yXSk/MTozLFg9YSszMjV8MCxXPUErMTg1NTZ8MCxtPUErMTg1ODB8MCxnPTU3NjArZnwwLFo9NTc2OCtmfDAscD0xMDA4NytmfDAseT0xMDA4OCtmfDAsQj1pKzF8MCx2PWErMzI2fDAsdD1vPXc9MDtkb3tpZigoYj0wPT0oMHx3KSkmMCE9KDB8dHJbWD4+MF0pfHwwPCgwfHcpJjAhPSgwfHRyW3Y+PjBdKSl7ZG97aWYoYilvPTB8b3QoVywxKygwfGFyW20+PjJdKXwwKT8obz0wPT0oMHxjdChXKSkpPzE6MjowLGE9byxvJj0yNTU7ZWxzZXtpZigxIT0oMHx3KSl7YT0oMjU1Jm8pPj4+KHc8PDEpJjM7YnJlYWt9QT0wfG90KFcsMSsoMHxhclttPj4yXSl8MCk/KEE9MD09KDB8Y3QoVykpKT8xOjI6MCxvPTI1NSYoKGE9QSk8PDR8QTw8MnwyNTUmbyl9fXdoaWxlKDApO2lmKEE9MjU1JmEpe2E9MHxhclsodT1iP2c6Wik+PjJdLGE9MjU1JigwfGx0KFcsKDE8PCgoMHxhKTwxMD9hOjEwKSstNSktMXwwKSksdHJbKHM9aSs1Kyh3PDwyKXwwKT4+MF09YSxjPTB8YXJbdT4+Ml0sYz0yNTUmKDB8bHQoVywoMTw8KCgwfGMpPDEwP2M6MTApKy01KS0xfDApKSx0clsoZD1pKzUrKHc8PDIpKzF8MCk+PjBdPWMsbD0wfGFyW3U+PjJdLGw9MjU1JigwfGx0KFcsKDE8PCgoMHxsKTwxMD9sOjEwKSstNSktMXwwKSksdHJbKGs9aSs1Kyh3PDwyKSsyfDApPj4wXT1sLHU9MHxhclt1Pj4yXSx1PTI1NSYoMHxsdChXLCgxPDwoKDB8dSk8MTA/dToxMCkrLTUpLTF8MCkpLHRyWyhoPWkrNSsodzw8MikrM3wwKT4+MF09dTtkb3tpZigxPT0oMHxBKSlBPWE8PDI0Pj4yND8oQT0wIT0oMHxjdChXKSkpPy0xOjE6MCxjPWM8PDI0Pj4yND8oYz0wIT0oMHxjdChXKSkpPy0xOjE6MCxsPWw8PDI0Pj4yND8obD0wIT0oMHxjdChXKSkpPy0xOjE6MCxhPXU8PDI0Pj4yND8oYT0wIT0oMHxjdChXKSkpPy0xOjE6MCx1PTI1NSYoMHx1dChXLDUpKSx0cltpKzIrdz4+MF09dSxiP3U9cDpHPTMwO2Vsc2V7aWYoYil7dT1wLGE9bD0tKGM9QT0xKSx0PTI1NSYoMHx1dChXLDIpKTticmVha31HPSgxPT0oMHx3KT8oRz0yNTUmKDB8dXQoVywyKSksbD1hPS0xLEE9Yz0xLHQ9MjU1JigyNTUmdHxHPDwyfEc8PDQpKToobD1hPS0xLEE9Yz0xKSwzMCl9fXdoaWxlKDApOzMwPT0oMHxHKSYmKEc9MCx1PXkpLGI9MHxjclt1Pj4wXSx1PTI1NSYoMHxicih0cltzPj4wXTw8YixBKSksdHJbcz4+MF09dSxzPTI1NSYoMHxicih0cltkPj4wXTw8YixjKSksdHJbZD4+MF09cyxkPTI1NSYoMHxicih0cltrPj4wXTw8YixsKSksdHJbaz4+MF09ZCxrPTI1NSYoMHxicih0cltoPj4wXTw8YixhKSksdHJbaD4+MF09a319dz13KzF8MH13aGlsZSgoMHx3KTwoMHxFKSk7Zm9yKHRyW2k+PjBdPW8sdHJbQj4+MF09dCx0PSgwfGJyKDB8YXJbMTAzNTIrZj4+Ml0scikpK2V8MCx0PSgwfGFyWzEwMzQwK2Y+PjJdKSsoMjQqdHwwKSs0fDAsbz10KzE3fDA7dHJbdD4+MF09MHx0cltpPj4wXSxpPWkrMXwwLCgwfCh0PXQrMXwwKSk8KDB8byk7KTt9aWYoIUkpZm9yKGk9MHxicigwfGFyWzEwMzUyK2Y+PjJdLHIpLG89MHxhclsxMDM0MCtmPj4yXSx0PW8rKDI0KihpK2V8MCl8MCkrNHwwLGk9bysoMjQqKGUrLTEraXwwKXwwKSs0fDAsbz10KzE3fDA7dHJbdD4+MF09MHx0cltpPj4wXSxpPWkrMXwwLCgwfCh0PXQrMXwwKSk8KDB8byk7KTtpZihDKXJldHVybiB1cj1uO3Q9MHxhclsxMDM1MitmPj4yXSxpPSgwfGJyKHQscistMXwwKSkrZXwwLG89MHxhclsxMDM0MCtmPj4yXSx0PW8rKDI0KigoMHxicih0LHIpKStlfDApfDApKzR8MCxpPW8rKDI0Kml8MCkrNHwwLG89dCsxN3wwO2Zvcig7dHJbdD4+MF09MHx0cltpPj4wXSx0PXQrMXwwLGk9aSsxfDAsKDB8dCk8KDB8byk7KTt1cj1ufShBLGEscywwKSxUYShBLHIsaSxzPTB8YXJbYz4+Ml0sMCkpOlRhKEEscixpLHM9ZSwwKX1mdW5jdGlvbiBUYShBLGUscixpLGYpe3ZhciBuLHQsbyxhLGMsbD0wLHU9MCxiPTAscz0wLGQ9MCxrPTAsaD0wLHc9MCx2PTAsbT0wLGc9MCxaPTAscD0wLHk9MCxCPTA7Zm9yKHQ9KEF8PTApKzE4NTk2fDAsbz1BKzE4NjAwfDAsYT1BKzE4NTE2fDAsYz1BKzE4NTA4fDAsbT1BKzE4NTEyfDAscz1BKzE4NTU2fDAsbj1BKzE4NTgwfDAsQj1lfD0wLHk9cnw9MCxaPWl8PTAscD1mfD0wOzspe2lmKGc9MHxhclt0Pj4yXSwoKGU9MTw8WikrQnwwKTw9KDB8KHI9MHxhclsoYj1nKzEyNDh8MCk+PjJdKSkmJihlK3l8MCk8PSgwfChkPTB8YXJbZysxMjUyPj4yXSkpJiYoMHxhcltnKzU4MDA+PjJdKTwoMHxaKSl7aWYoZT0tMTwoKGk9QistMXwwKXx5fDApJigwfEIpPD0oMHxyKSYoMHx5KTwoMHxkKSYmKGg9MHxhcltnKzU4MDQ+PjJdLGs9KHU9MHxicih5Pj5oLDB8YXJbZys1ODIwPj4yXSkpKyhCPj5oKXwwLGg9dSsoaT4+aCl8MCx1PTB8YXJbZysxMDM0MD4+Ml0sKDB8b3JbdSsoMjQqa3wwKT4+MV0pPT0oMHxvclt1KygyNCpofDApPj4xXSkpPyhlPTB8YXJbZysxMDMwOD4+Ml0sKDB8YXJbZSsoazw8Mik+PjJdKT09KDB8YXJbZSsoaDw8Mik+PjJdKSYxKTowLGw9KDB8cik8PSgwfEIpfCgodT15Ky0xfDApfEJ8MCk8MHwoMHxkKTwoMHx5KXx8KGY9MHxhcltnKzU4MDQ+PjJdLGw9MHxhcltnKzU4MjA+PjJdLHY9Qj4+Zix3PSgwfGJyKHk+PmYsbCkpK3Z8MCx2PSgwfGJyKHU+PmYsbCkpK3Z8MCxsPTB8YXJbZysxMDM0MD4+Ml0sKDB8b3JbbCsoMjQqd3wwKT4+MV0pIT0oMHxvcltsKygyNCp2fDApPj4xXSkpPzA6KGw9MHxhcltnKzEwMzA4Pj4yXSwoMHxhcltsKyh3PDwyKT4+Ml0pPT0oMHxhcltsKyh2PDwyKT4+Ml0pJjEpLGUpe2lmKGU9aT4+KHI9MHxhcltnKzEwMzY4Pj4yXSkscj15Pj5yLCgwfGUpPD0tMSl7ZT0xNDticmVha31pZigoMHwoaT0wfGFyW2crMTAzNzI+PjJdKSk8PSgwfGUpKXtlPTE0O2JyZWFrfWlmKCgwfHIpPD0tMSl7ZT0xNzticmVha31pZigoMHxyKT49KDB8YXJbZysxMDM3Nj4+Ml0pKXtlPTE3O2JyZWFrfWY9KDB8YXJbZysxMDM2MD4+Ml0pKygzKigoMHxicihpLHIpKStlfDApfDApfDAsZj0oKDY1NTM1JihjcltmPj4wXXxjcltmKzE+PjBdPDw4KSk+Pj42JjN8MCk+KDB8cCk/MzoyfWVsc2UgZj0yO2lmKGwpe2lmKGk9Qj4+KHI9MHxhcltnKzEwMzY4Pj4yXSkscj11Pj5yLCgwfGkpPD0tMSl7ZT0yMjticmVha31pZigoMHwoZT0wfGFyW2crMTAzNzI+PjJdKSk8PSgwfGkpKXtlPTIyO2JyZWFrfWlmKCgwfHIpPD0tMSl7ZT0yNTticmVha31pZigoMHxyKT49KDB8YXJbZysxMDM3Nj4+Ml0pKXtlPTI1O2JyZWFrfWU9KDB8YXJbZysxMDM2MD4+Ml0pKygzKigoMHxicihlLHIpKStpfDApfDApfDAsZT0oKDY1NTM1JihjcltlPj4wXXxjcltlKzE+PjBdPDw4KSk+Pj42JjN8MCk+KDB8cCkmMX1lbHNlIGU9MDtlPTB8b3QocywoMHxhcltuPj4yXSkrKGUrZil8MCl9ZWxzZSBlPSgwfGFyW2crNTgwMD4+Ml0pPCgwfFopJjE7aWYoMHx0cltnKzU5NDY+PjBdJiYoMHxhcltnKzEwMDkyPj4yXSk8PSgwfFopJiYoYXJbYz4+Ml09MCxhclttPj4yXT0wKSwwfHRyWzc1MisoMHxhcltvPj4yXSk+PjBdJiYoMHxhcltnKzEwMDk2Pj4yXSk8PSgwfFopJiYoYXJbYT4+Ml09MCksIWUpe2U9NDI7YnJlYWt9aWYoaT0oZj0xPDwocj1aKy0xfDApKStCfDAsZj1mK3l8MCxUYShBLEIseSxyLGw9cCsxfDApLCgwfGkpPCgwfGFyW2I+PjJdKSYmVGEoQSxpLHkscixsKSwoMHxmKTwoMHxhclsoZT1nKzEyNTJ8MCk+PjJdKSYmVGEoQSxCLGYscixsKSwoMHxpKT49KDB8YXJbYj4+Ml0pKXtlPTQ4O2JyZWFrfWlmKCEoKDB8Zik8KDB8YXJbZT4+Ml0pKSl7ZT00ODticmVha31CPWkseT1mLFo9cixwPWx9aWYoMTQ9PSgwfGUpKXNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSk7ZWxzZSBpZigxNz09KDB8ZSkpc3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KTtlbHNlIGlmKDIyPT0oMHxlKSlzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpO2Vsc2UgaWYoMjU9PSgwfGUpKXNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSk7ZWxzZXtpZig0Mj09KDB8ZSkpe2lmKGI9Qj4+KG09MHxhcltnKzEwMzY4Pj4yXSkscj15Pj5tLHM9KGU9MTw8KG09Wi1tfDApKStyfDAsMzEhPSgwfG0pKXtsPWUrYnwwLHU9ZysxMDM3MnwwLGk9ZysxMDM2MHwwLGY9KDY1NTM1JnApPDw2JjE5MixlPXI7ZG97Zm9yKHI9YjtnPSgwfGJyKDB8YXJbdT4+Ml0sZSkpK3J8MCxnPSgwfGFyW2k+PjJdKSsoMypnfDApfDAsbT0tMTkzJihjcltnPj4wXXxjcltnKzE+PjBdPDw4KXxmLHRyW2c+PjBdPW0sdHJbZysxPj4wXT1tPj44LCgwfChyPXIrMXwwKSk8KDB8bCk7KTtlPWUrMXwwfXdoaWxlKCgwfGUpPCgwfHMpKX1yZXR1cm4gdm9pZCBmdW5jdGlvbihBLGUscixpLGYpe2V8PTAscnw9MCxpfD0wLGZ8PTA7dmFyIG4sdCxvLGEsYyxsPTAsdT0wLGI9MCxzPTAsZD0wLGs9MCxoPTAsdz0wLHY9MCxtPTAsZz0wLFo9MCxwPTAseT0wLEI9MCxFPTAsWD0wLFc9MCxJPTAsQz0wLEc9MCxWPTAsRj0wLFI9MCxOPTAsXz0wLFk9MCxRPTAsRD0wLEo9MDtpZih1cj0oYz11cikrODB8MCxuPShEPWMpKzU2fDAsdD1jKzQwfDAsbz1jKzI0fDAsYT0wfGFyWyhDPTE4NTk2KyhBfD0wKXwwKT4+Ml0sdj0wfGFyWyhFPUErMTg2MDB8MCk+PjJdLGZ1bmN0aW9uKEEsZSxyLGksZil7ZXw9MCxyfD0wLGl8PTA7dmFyIG4sdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MDtpZihuPTEwMzY4KyhBfD0wKXwwLChmfD0wKSYmKGM9MHxhcltuPj4yXSxiPWU+PmMsbD1yPj5jLHU9KHQ9MTw8KGM9aS1jfDApKStsfDAsMzEhPSgwfGMpKSl7bz10K2J8MCxhPUErMTAzNzJ8MCxjPUErMTAzNjB8MCx0PWw7ZG97Zm9yKGY9YjtsPSgwfGJyKDB8YXJbYT4+Ml0sdCkpK2Z8MCxsPSgwfGFyW2M+PjJdKSsoMypsfDApfDAscz0tOCYoY3JbbD4+MF18Y3JbbCsxPj4wXTw8OCksdHJbbD4+MF09cyx0cltsKzE+PjBdPXM+PjgsKDB8KGY9ZisxfDApKTwoMHxvKTspO3Q9dCsxfDB9d2hpbGUoKDB8dCk8KDB8dSkpfXQ9MHxhcltuPj4yXSxvPWU+PnQsdD1yPj50LCgwfG8pPD0tMSYmc3IoNDg0ODIsNDg1MTksMTI4LDQ4NTM5KTtmPTB8YXJbQSsxMDM3Mj4+Ml0sKDB8Zik8PSgwfG8pJiZzcig0ODQ4Miw0ODUxOSwxMjgsNDg1MzkpOygwfHQpPD0tMSYmc3IoNDg1NDMsNDg1MTksMTI5LDQ4NTM5KTt7aWYoKDB8dCk8KDB8YXJbQSsxMDM3Nj4+Ml0pKXJldHVybiBzPSgwfGFyW0ErMTAzNjA+PjJdKSsoMyooKDB8YnIoZix0KSkrb3wwKXwwKXwwLGk9LTgmKGNyW3M+PjBdfGNyW3MrMT4+MF08PDgpfDcmaSx0cltzPj4wXT1pLHRyW3MrMT4+MF09aT4+ODtzcig0ODU0Myw0ODUxOSwxMjksNDg1MzkpfX0oYSxlLHIsaSwxKSxKPTB8YXJbMTA0NDgrYT4+Ml0saD1lPj5KLHU9cj4+Six3PShsPTE8PChKPWktSnwwKSkrdXwwLDMxIT0oMHxKKSl7Yj1sK2h8MCxkPTEwNDUyK2F8MCxrPTEwNDQwK2F8MCxsPXU7ZG97Zm9yKHU9aDtKPSgwfGJyKDB8YXJbZD4+Ml0sbCkpK3V8MCwoKHRyWygwfGFyW2s+PjJdKStKPj4wXT0wKXwodT11KzF8MCkpPCgwfGIpOyk7bD1sKzF8MH13aGlsZSgoMHxsKTwoMHx3KSl9Sj0xPDxpLHpuKEEsZSxyLGUsciksMHx0cls1OTY0K2E+PjBdPyhRPTB8b3QoQSsxODU1NnwwLDE2MSsoMHxhcltBKzE4NTgwPj4yXSl8MCksMHwodHJbQSszMj4+MF09USkmJmZ1bmN0aW9uKEEsZSxyLGksZil7ZXw9MCxyfD0wLGl8PTAsZnw9MDt2YXIgbix0LG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wO2lmKGw9MHxhclsxMDM2OCsoQXw9MCk+PjJdLHQ9ZT4+bCx1PXI+Pmwsbj0oaT0xPDwobD1pLWx8MCkpK3V8MCwzMSE9KDB8bCkpe2E9aSt0fDAsYz1BKzEwMzcyfDAsbD1BKzEwMzYwfDAsbz0oMSZmKTw8MTEmNjU1MzUsaT11O2Rve2ZvcihmPXQ7dT0oMHxicigwfGFyW2M+PjJdLGkpKStmfDAsdT0oMHxhcltsPj4yXSkrKDMqdXwwKXwwLGI9LTIwNDkmKGNyW3U+PjBdfGNyW3UrMT4+MF08PDgpfG8sdHJbdT4+MF09Yix0clt1KzE+PjBdPWI+PjgsKDB8KGY9ZisxfDApKTwoMHxhKTspO2k9aSsxfDB9d2hpbGUoKDB8aSk8KDB8bikpfWk9MHxhcltBKzEwMzQ4Pj4yXSxvPWU+PmksaT1yPj5pLCgwfG8pPD0tMSYmc3IoNDg0ODIsNDg1MTksMTI4LDQ4NTM5KTtmPTB8YXJbQSsxMDM1Mj4+Ml0sKDB8Zik8PSgwfG8pJiZzcig0ODQ4Miw0ODUxOSwxMjgsNDg1MzkpOygwfGkpPD0tMSYmc3IoNDg1NDMsNDg1MTksMTI5LDQ4NTM5KTt7aWYoKDB8aSk8KDB8YXJbQSsxMDM1Nj4+Ml0pKXJldHVybiBiPSgwfGFyW0ErMTAzNDA+PjJdKSsoMjQqKCgwfGJyKGYsaSkpK298MCl8MCkrMjJ8MCx0cltiPj4wXT0xO3NyKDQ4NTQzLDQ4NTE5LDEyOSw0ODUzOSl9fShhLGUscixpLDEpKTp0cltBKzMyPj4wXT0wO3c9disyMHwwO2Rve2lmKDIhPSgwfGFyW3c+PjJdKSl7aD0wfGFyW0M+PjJdLGw9MDw9KCh1PWUrLTF8MCl8cnwwKSYmKDB8YXJbaCsxMjQ4Pj4yXSk+PSgwfGUpJiYoMHxhcltoKzEyNTI+PjJdKT4oMHxyKSYmKGc9MHxhcltoKzU4MDQ+PjJdLFE9MHxicihyPj5nLDB8YXJbaCs1ODIwPj4yXSksbT1RKyhlPj5nKXwwLGc9USsodT4+Zyl8MCxRPTB8YXJbaCsxMDM0MD4+Ml0sKDB8b3JbUSsoMjQqbXwwKT4+MV0pPT0oMHxvcltRKygyNCpnfDApPj4xXSkpPyhsPTB8YXJbaCsxMDMwOD4+Ml0sKDB8YXJbbCsobTw8Mik+PjJdKT09KDB8YXJbbCsoZzw8Mik+PjJdKSYxKTowLGQ9MDw9KChrPXIrLTF8MCl8ZXwwKSYmKDB8YXJbaCsxMjQ4Pj4yXSk+KDB8ZSkmJigwfGFyW2grMTI1Mj4+Ml0pPj0oMHxyKSYmKFk9MHxhcltoKzU4MDQ+PjJdLFE9MHxhcltoKzU4MjA+PjJdLHA9ZT4+WSxaPSgwfGJyKHI+PlksUSkpK3B8MCxwPSgwfGJyKGs+PlksUSkpK3B8MCxRPTB8YXJbaCsxMDM0MD4+Ml0sKDB8b3JbUSsoMjQqWnwwKT4+MV0pPT0oMHxvcltRKygyNCpwfDApPj4xXSkpPyhkPTB8YXJbaCsxMDMwOD4+Ml0sKDB8YXJbZCsoWjw8Mik+PjJdKT09KDB8YXJbZCsocDw8Mik+PjJdKSYxKTowO2Rve2lmKGwpe2lmKFE9MHxhcltoKzEwMzY4Pj4yXSxsPXU+PlEsdT1yPj5RLCgwfGwpPD0tMSYmc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KSwoMHwoYj0wfGFyW2grMTAzNzI+PjJdKSk8PSgwfGwpJiZzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpLCgwfHUpPD0tMSYmc3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KSwoMHx1KTwoMHxhcltoKzEwMzc2Pj4yXSkpe3k9KDB8YXJbaCsxMDM2MD4+Ml0pKygzKigoMHxicihiLHUpKStsfDApfDApfDAseT01MTI9PSg3NjgmKGNyW3k+PjBdfGNyW3krMT4+MF08PDgpKT82OjU7YnJlYWt9c3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KX1lbHNlIHk9NX13aGlsZSgwKTtkb3tpZihkKXtpZihsPTB8YXJbaCsxMDM2OD4+Ml0sYj1lPj5sLGw9az4+bCwoMHxiKTw9LTEmJnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSksKDB8KHU9MHxhcltoKzEwMzcyPj4yXSkpPD0oMHxiKSYmc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KSwoMHxsKTw9LTEmJnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSksKDB8bCk8KDB8YXJbaCsxMDM3Nj4+Ml0pKXtCPSgwfGFyW2grMTAzNjA+PjJdKSsoMyooKDB8YnIodSxsKSkrYnwwKXwwKXwwLEI9NTEyPT0oNzY4JihjcltCPj4wXXxjcltCKzE+PjBdPDw4KSkmMTticmVha31zcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpfWVsc2UgQj0wfXdoaWxlKDApO2lmKCEoKDI1NSYoMHxvdCh1PUErMTg1NTZ8MCwoMHxhclsobD1BKzE4NTgwfDApPj4yXSkrKEIreSl8MCkpKTw8MjQ+PjI0KSl7aWYoMj09KDB8YXJbdz4+Ml0pKXtRPTA7YnJlYWt9UT0wPT0oMHxvdCh1LDE0OSsoMHxhcltsPj4yXSl8MCkpJjE7YnJlYWt9QTpkb3tpZigyPD0oMHxhcls4MDQrKDB8YXJbRT4+Ml0pPj4yXSkmJjAhPSgwfG90KHUsMTQ4KygwfGFyW2w+PjJdKXwwKSkpaWYoMTwoKDB8YXJbODA0KygwfGFyW0U+PjJdKT4+Ml0pLTF8MCkpe2w9MTtkb3tpZighKDB8Y3QodSkpKWJyZWFrIEE7bD1sKzF8MH13aGlsZSgoMHxsKTwoKDB8YXJbODA0KygwfGFyW0U+PjJdKT4+Ml0pLTF8MCkpfWVsc2UgbD0xO2Vsc2UgbD0wfXdoaWxlKDApO2lmKHRyWyhiPUErMjZ8MCk+PjBdPTE1JnRyW2I+PjBdfCgyNTUmbCk8PDUmMjU1fDE2LGI9MHxhclsobD0xMDM2OCthfDApPj4yXSx1PWU+PmIsYj1yPj5iLCgwfHUpPD0tMSYmc3IoNDg0ODIsNDg1MTksMTI4LDQ4NTM5KSwoMHwocz0wfGFyWyhoPTEwMzcyK2F8MCk+PjJdKSk8PSgwfHUpJiZzcig0ODQ4Miw0ODUxOSwxMjgsNDg1MzkpLCgwfGIpPD0tMSYmc3IoNDg1NDMsNDg1MTksMTI5LDQ4NTM5KSwoMHxiKT49KDB8YXJbMTAzNzYrYT4+Ml0pJiZzcig0ODU0Myw0ODUxOSwxMjksNDg1MzkpLEQ9KDB8YXJbKGs9MTAzNjArYXwwKT4+Ml0pKygzKigoMHxicihzLGIpKSt1fDApfDApfDAsZD0tNTcmKGNyW0Q+PjBdfGNyW0QrMT4+MF08PDgpLHRyW0Q+PjBdPWQsdHJbRCsxPj4wXT1kPj44LEQ9MHxhcltsPj4yXSxkPWU+PkQsdT1yPj5ELHM9KGw9MTw8KEQ9aS1EfDApKSt1fDAsMzEhPSgwfEQpKXtiPWwrZHwwLGw9dTtkb3tmb3IodT1kO0Q9KDB8YnIoMHxhcltoPj4yXSxsKSkrdXwwLEQ9KDB8YXJbaz4+Ml0pKygzKkR8MCl8MCxpPS03NjkmKGNyW0Q+PjBdfGNyW0QrMT4+MF08PDgpfDUxMix0cltEPj4wXT1pLHRyW0QrMT4+MF09aT4+OCwoMHwodT11KzF8MCkpPCgwfGIpOyk7bD1sKzF8MH13aGlsZSgoMHxsKTwoMHxzKSl9cmV0dXJuIG1jKDB8YXJbQSsxODU5Mj4+Ml0sMHxhcltFPj4yXSwwfGFyW0M+PjJdLEErMTZ8MCxlLHIsMCwwLEosSixKLDApLHVyPWN9UT0wfXdoaWxlKDApO2lmKFk9MHxhclsobT0xMDM2OCthfDApPj4yXSx3PWU+PlksdT1yPj5ZLHY9KGw9MTw8KFk9aS1ZfDApKSt1fDAsMzEhPSgwfFkpKXtiPWwrd3wwLGQ9MTAzNzIrYXwwLGs9MTAzNjArYXwwLGg9KDY1NTM1JlEpPDw4JjY1NTM1LGw9dTtkb3tmb3IodT13O1k9KDB8YnIoMHxhcltkPj4yXSxsKSkrdXwwLFk9KDB8YXJbaz4+Ml0pKygzKll8MCl8MCxfPS03NjkmKGNyW1k+PjBdfGNyW1krMT4+MF08PDgpfGgsdHJbWT4+MF09Xyx0cltZKzE+PjBdPV8+PjgsKDB8KHU9dSsxfDApKTwoMHxiKTspO2w9bCsxfDB9d2hpbGUoKDB8bCk8KDB8dikpfWlmKChZPTAhPSgwfFEpKXx8KDB8YXJbNTgwMCthPj4yXSk9PSgwfGkpKXt1PTB8YXJbQz4+Ml0saD0wPT0oMHxRKSxsPTB8b3QoYj1BKzE4NTU2fDAsOCsoMHxhclsoZD1BKzE4NTgwfDApPj4yXSl8MCk7ZG97aWYoaClzPTB8bD8wOjM7ZWxzZSBpZihsKXM9MDtlbHNle2lmKGs9MHxvdChiLDkrKDB8YXJbZD4+Ml0pfDApLCgwfGFyW3UrNTgwMD4+Ml0pPj0oMHxpKSl7aWYoMHxrKXtzPTE7YnJlYWt9aWYoMz09KDB8aSkpe3M9MjticmVha31zPTMtKDB8b3QoYiwxMCsoMHxhcltkPj4yXSl8MCkpfDA7YnJlYWt9aWYoISgwfHRyW3UrNTQ2Nj4+MF0pKXtzPTB8az8xOjI7YnJlYWt9aWYoMHxvdChiLDExKygwfGFyW2Q+PjJdKXwwKSl7cz0wfGs/MToyO2JyZWFrfWw9MHxjdChiKSwwIT0oMHxrKSYodT0wIT0oMHxsKSk/cz01OihiPTA9PSgwfGspKXx1P2x8az9iJnU/cz03OnNyKDU1NzM5LDM5MjQyLDE3NjAsMzkyNzUpOnM9NjpzPTR9fXdoaWxlKDApO189aCYzPT0oMHxzKSYxfWVsc2Ugcz1fPTA7dT0wfGFyW20+PjJdLGw9ZT4+dSx1PXI+PnUsKDB8bCk8PS0xJiZzcig0ODQ4Miw0ODUxOSwxMjgsNDg1MzkpO2I9MHxhclsxMDM3MithPj4yXSwoMHxiKTw9KDB8bCkmJnNyKDQ4NDgyLDQ4NTE5LDEyOCw0ODUzOSk7KDB8dSk8PS0xJiZzcig0ODU0Myw0ODUxOSwxMjksNDg1MzkpOygwfHUpPj0oMHxhclsxMDM3NithPj4yXSkmJnNyKDQ4NTQzLDQ4NTE5LDEyOSw0ODUzOSk7Uj0oMHxhclsxMDM2MCthPj4yXSkrKDMqKCgwfGJyKGIsdSkpK2x8MCl8MCl8MCxOPS01NyYoY3JbUj4+MF18Y3JbUisxPj4wXTw8OCl8KDY1NTM1JnMpPDwzJjU2LHRyW1I+PjBdPU4sdHJbUisxPj4wXT1OPj44LFI9MD09KDB8USksTj0wPT0oMHxzKTtBOmRve2lmKFIpe2lmKE4mJjB8dHJbNTQ2OCthPj4wXSYmKDB8YXJbNTg4NCthPj4yXSk8PSgwfGkpJiYoMHxhcls1ODg4K2E+PjJdKT49KDB8aSkmJjB8YXQoRz1BKzE4NTU2fDApKXtpZihVYShhLGUscixpLDEpLGw9MHxhclsoWj1BKzE4NTYwfDApPj4yXSxhcltEPj4yXT1sLGFyW0QrND4+Ml09KDB8YXJbQSsxODU2ND4+Ml0pLWwsYXJbKGw9RCs4fDApPj4yXT0wLGFyW2wrND4+Ml09MCxhcltEKzE2Pj4yXT0wLGw9MHxhcltDPj4yXSxiPTB8YXJbbCs1NzYwPj4yXSxoPTB8dHJbbCs1NDY5Pj4wXSxrPTB8YXJbbCs0MD4+Ml0sbD0wfGFyW2wrND4+Ml0sdT0oMHxicihrLHIpKStlfDAsODwoMHxiKSl7aWYoZD1sKyh1PDwxKXwwLHM9Yi1ofDAsMzEhPSgwfGkpKXt1PTA7ZG97Zm9yKGI9MHxicih1LGspLGw9MDtpPSgwfEF0KEQsaCkpPDxzJjY1NTM1LG9yW2QrKGwrYjw8MSk+PjFdPWksKDB8KGw9bCsxfDApKSE9KDB8Sik7KTt1PXUrMXwwfXdoaWxlKCgwfHUpIT0oMHxKKSl9fWVsc2UgaWYoZD1sK3V8MCxzPWItaHwwLDMxIT0oMHxpKSl7dT0wO2Rve2ZvcihiPTB8YnIodSxrKSxsPTA7aT0oMHxBdChELGgpKTw8cyYyNTUsdHJbZCsobCtiKT4+MF09aSwoMHwobD1sKzF8MCkpIT0oMHxKKTspO3U9dSsxfDB9d2hpbGUoKDB8dSkhPSgwfEopKX11PTB8YXJbQz4+Ml07ZG97aWYoMHxhclt1KzU3NzY+PjJdKWlmKHc9MHxhclt1KzU3Njg+PjJdLGs9MHxhclt1KzU3ODA+PjJdLGg9KDB8SikvKDB8ayl8MCxiPTB8YXJbdSs1Nzg0Pj4yXSx2PSgwfEopLygwfGIpfDAsbD0wfHRyW3UrNTQ3MD4+MF0sZz1sPDwyND4+MjQsbT0wfGFyW3UrNDQ+PjJdLHM9MHxhclt1Kzg+PjJdLGQ9KDB8YnIobSwoMHxyKS8oMHxiKXwwKSkrKCgwfGUpLygwfGspfDApfDAsODwoMHx3KSl7aWYocz1zKyhkPDwxKXwwLGQ9dy1nfDAsMDwoMHxoKSYwPCgwfHYpKXt1PTA7ZG97Zm9yKGI9MHxicih1LG0pLGw9MDtpPSgwfEF0KEQsZykpPDxkJjY1NTM1LG9yW3MrKGwrYjw8MSk+PjFdPWksKDB8KGw9bCsxfDApKSE9KDB8aCk7KTt1PXUrMXwwfXdoaWxlKCgwfHUpIT0oMHx2KSk7dT0wfGFyW0M+PjJdLG09MHxhclt1KzQ0Pj4yXSx3PTB8YXJbdSs1NzY4Pj4yXSxzPTB8YXJbdSs1NzgwPj4yXSxiPTB8YXJbdSs1Nzg0Pj4yXSxsPTB8dHJbdSs1NDcwPj4wXX1lbHNlIHM9aztpZih2PSgwfEopLygwfHMpfDAsaD0oMHxKKS8oMHxiKXwwLGs9bDw8MjQ+PjI0LGQ9KDB8YXJbdSsxMj4+Ml0pKygoMHxicigoMHxyKS8oMHxiKXwwLG0pKSsoKDB8ZSkvKDB8cyl8MCk8PDEpfDAsYj13LWt8MCwhKDA8KDB8dikmMDwoMHxoKSkpYnJlYWs7dT0wO2Rve2ZvcihzPTB8YnIodSxtKSxsPTA7cj0oMHxBdChELGspKTw8YiY2NTUzNSxvcltkKyhsK3M8PDEpPj4xXT1yLCgwfChsPWwrMXwwKSkhPSgwfHYpOyk7dT11KzF8MH13aGlsZSgoMHx1KSE9KDB8aCkpfWVsc2V7aWYocz1zK2R8MCxkPXctZ3wwLDA8KDB8aCkmMDwoMHx2KSl7dT0wO2Rve2ZvcihiPTB8YnIodSxtKSxsPTA7aT0oMHxBdChELGcpKTw8ZCYyNTUsdHJbcysobCtiKT4+MF09aSwoMHwobD1sKzF8MCkpIT0oMHxoKTspO3U9dSsxfDB9d2hpbGUoKDB8dSkhPSgwfHYpKTt1PTB8YXJbQz4+Ml0sbT0wfGFyW3UrNDQ+PjJdLHc9MHxhclt1KzU3Njg+PjJdLHM9MHxhclt1KzU3ODA+PjJdLGI9MHxhclt1KzU3ODQ+PjJdLGw9MHx0clt1KzU0NzA+PjBdfWVsc2Ugcz1rO2lmKHY9KDB8SikvKDB8cyl8MCxoPSgwfEopLygwfGIpfDAsaz1sPDwyND4+MjQsZD0oMHxhclt1KzEyPj4yXSkrKCgwfGJyKCgwfHIpLygwfGIpfDAsbSkpKygoMHxlKS8oMHxzKXwwKSl8MCxiPXcta3wwLCEoMDwoMHx2KSYwPCgwfGgpKSlicmVhazt1PTA7ZG97Zm9yKHM9MHxicih1LG0pLGw9MDtyPSgwfEF0KEQsaykpPDxiJjI1NSx0cltkKyhsK3MpPj4wXT1yLCgwfChsPWwrMXwwKSkhPSgwfHYpOyk7dT11KzF8MH13aGlsZSgoMHx1KSE9KDB8aCkpfX13aGlsZSgwKTtyZXR1cm4gcnQoRCksYXJbWj4+Ml09YXJbRD4+Ml0sdHQoRyksdXI9Y31pZihHPShWPTM9PSgwfHMpKT8oMHxKKS8yfDA6SixWPShWPDwzMT4+MzEpK2l8MCwhKEM9MzE9PSgwfGkpKSl7cz1BKzE4NTU2fDAsZD1BKzE4NTgwfDAsdT1sPTA7ZG97Zm9yKGI9MDtFPTB8b3QocywxMisoMHxhcltkPj4yXSl8MCksbD0oZj1sKSsxfDAsYXJbRCsoZjw8Mik+PjJdPUUsKDB8KGI9YitHfDApKTwoMHxKKTspO3U9dStHfDB9d2hpbGUoKDB8dSk8KDB8SikpfWlmKHU9MDw9KChsPWUrLTF8MCl8cnwwKSYmKDB8YXJbMTI0OCthPj4yXSk+PSgwfGUpJiYoMHxhclsxMjUyK2E+PjJdKT4oMHxyKSYmKFc9MHxhcls1ODA0K2E+PjJdLGY9MHxicihyPj5XLDB8YXJbNTgyMCthPj4yXSksWD1mKyhlPj5XKXwwLFc9ZisobD4+Vyl8MCxmPTB8YXJbMTAzNDArYT4+Ml0sKDB8b3JbZisoMjQqWHwwKT4+MV0pPT0oMHxvcltmKygyNCpXfDApPj4xXSkpPyh1PTB8YXJbMTAzMDgrYT4+Ml0sKDB8YXJbdSsoWDw8Mik+PjJdKT09KDB8YXJbdSsoVzw8Mik+PjJdKSYxKTowLGw9MDw9KChsPXIrLTF8MCl8ZXwwKSYmKDB8YXJbMTI0OCthPj4yXSk+KDB8ZSkmJigwfGFyWzEyNTIrYT4+Ml0pPj0oMHxyKSYmKFg9MHxhcls1ODA0K2E+PjJdLFc9MHxhcls1ODIwK2E+PjJdLEY9ZT4+WCxJPSgwfGJyKHI+PlgsVykpK0Z8MCxGPSgwfGJyKGw+PlgsVykpK0Z8MCxXPTB8YXJbMTAzNDArYT4+Ml0sKDB8b3JbVysoMjQqSXwwKT4+MV0pPT0oMHxvcltXKygyNCpGfDApPj4xXSkpPyhsPTB8YXJbMTAzMDgrYT4+Ml0sKDB8YXJbbCsoSTw8Mik+PjJdKT09KDB8YXJbbCsoRjw8Mik+PjJdKSYxKTowLCFDKXtJPUErMTg1NTZ8MCxXPTAhPSgwfHUpLHY9MCE9KDB8bCksbT01ODcyK2F8MCxnPTU4NzYrYXwwLFo9MTA0MDgrYXwwLHA9MTA0MTIrYXwwLHk9MTA0MDArYXwwLEI9NCtvfDAsRT04K298MCxsPWg9MDtkb3tmPWgrcnwwLFg9dnwwPCgwfGgpLHc9MDtkb3tpZihzPTB8YXJbRCsobDw8Mik+PjJdLGI9cz8odT1uLDB8bHQoSSwyKSk6KHU9dCwwfHV0KEksNSkpLGFyW3UrKGw8PDIpPj4yXT1iLEY9dytlfDAsaz0wfGFyW20+PjJdLGs9KDB8YnIoZj4+aywwfGFyW2c+PjJdKSkrKEY+PmspfDAsQ3QobyxGLGYsayxXfDA8KDB8dyksWCxhKSx1PTE9PSgwfHMpPzB8YXJbbysoYXJbbisobDw8Mik+PjJdPDwyKT4+Ml06KHU9MHxhcltvPj4yXSwoMHwoYj0wfGFyW0I+PjJdKSk8KDB8dSk/KGFyW28+PjJdPWIsYXJbQj4+Ml09dSxzPWIpOihzPXUsdT1iKSwoMHwoYj0wfGFyW0U+PjJdKSk8KDB8cyk/KGFyW28+PjJdPWIsYXJbRT4+Ml09cyxkPXMpOihkPWIsYj1zKSwoMHxkKTwoMHx1KT8oYXJbQj4+Ml09ZCxhcltFPj4yXT11LHM9ZCk6KHM9dSx1PWQpLEY9MHxhclt0KyhsPDwyKT4+Ml0sKCgwfHUpPD0oMHwoRj0oKDB8cyk8PSgwfChGPSgoMHxiKTw9KDB8RikmMSkrRnwwKSkmMSkrRnwwKSkmMSkrRnwwKSxGPVYtKDB8YXJbWj4+Ml0pfDAsZD0xPDxGLDMxIT0oMHxGKSl7cz0yNTUmdSx1PTA7ZG97Zm9yKGI9MDtGPWIraysoMHxicigwfGFyW3A+PjJdLHUpKXwwLHRyWygwfGFyW3k+PjJdKStGPj4wXT1zLCgwfChiPWIrMXwwKSk8KDB8ZCk7KTt1PXUrMXwwfXdoaWxlKCgwfHUpPCgwfGQpKX1sPWwrMXwwLHc9dytHfDB9d2hpbGUoKDB8dyk8KDB8SikpO2g9aCtHfDB9d2hpbGUoKDB8aCk8KDB8SikpfWQ9NTc3NithfDA7ZTpkb3tzd2l0Y2goMHxhcltkPj4yXSl7Y2FzZSAzOmlmKCFDKXtoPUErMTg1NTZ8MCx3PUErMTg1ODB8MCx2PTEwNDA4K2F8MCxtPTEwNDEyK2F8MCxnPTEwNDE2K2F8MCxaPTEwNDAwK2F8MCxrPTA7cjpmb3IoOzspe3A9aytyfDAsZD0wO2Rve2lmKHk9ZCtlfDAscz0wfG90KGgsMTMrKDB8YXJbdz4+Ml0pfDApPzB8dXQoaCwyKTo0LHU9MHxhclt2Pj4yXSxsPXk+PnUsdT1wPj51LCgwfGwpPD0tMSl7bD0xNzQ7YnJlYWsgcn1pZigoMHwoYj0wfGFyW20+PjJdKSk8PSgwfGwpKXtsPTE3NDticmVhayByfWlmKCgwfHUpPD0tMSl7bD0xNzU7YnJlYWsgcn1pZigoMHx1KT49KDB8YXJbZz4+Ml0pKXtsPTE3NTticmVhayByfWw9KDB8YXJbWj4+Ml0pKygoMHxicihiLHUpKStsKXwwLGw9MHxjcltsPj4wXSwodT00PT0oMHxzKSl8fChEPTB8YXJbNzk0OCsoczw8Mik+PjJdLGw9KDB8RCk9PSgwfGwpPzM0OkQpLFNhKGEseSxwLFYsbCx1KSxkPWQrR3wwfXdoaWxlKCgwfGQpPCgwfEopKTtpZigoMHxKKTw9KDB8KGs9aytHfDApKSlicmVhayBlfTE3ND09KDB8bCk/c3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KToxNzU9PSgwfGwpJiZzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpfWJyZWFrO2Nhc2UgMDpicmVhaztkZWZhdWx0OnM9MHxvdChsPUErMTg1NTZ8MCwxMysoMHxhcltBKzE4NTgwPj4yXSl8MCk/MHx1dChsLDIpOjQsdT0wfGFyWzEwNDA4K2E+PjJdLGw9ZT4+dSx1PXI+PnUsKDB8bCk8PS0xJiZzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpLCgwfChiPTB8YXJbMTA0MTIrYT4+Ml0pKTw9KDB8bCkmJnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSksKDB8dSk8PS0xJiZzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpLCgwfHUpPj0oMHxhclsxMDQxNithPj4yXSkmJnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSksbD0oMHxhclsxMDQwMCthPj4yXSkrKCgwfGJyKGIsdSkpK2wpfDAsbD0wfGNyW2w+PjBdLCh1PTQ9PSgwfHMpKXx8KEo9MHxhcls3OTQ4KyhzPDwyKT4+Ml0sbD0oMHxKKT09KDB8bCk/MzQ6SiksMj09KDB8YXJbZD4+Ml0pJiYobD0wfGNyWzM5MjkyK2w+PjBdKSxTYShhLGUscixpLGwsdSl9fXdoaWxlKDApfWVsc2V7aWYoTil7T2EoQSxlLHIsMCwwLEosSixmLEosMCk7YnJlYWt9c3dpdGNoKDB8cyl7Y2FzZSAxOk9hKEEsZSxyLDAsMCxKLEQ9KDB8SikvMnwwLGYsSiwwKSxPYShBLGUsciwwLEQsSixELGYsSiwxKTticmVhayBBO2Nhc2UgMjpPYShBLGUsciwwLDAsRD0oMHxKKS8yfDAsSixmLEosMCksT2EoQSxlLHIsRCwwLEQsSixmLEosMSk7YnJlYWsgQTtjYXNlIDQ6T2EoQSxlLHIsMCwwLEosRD0oMHxKKS80fDAsZixKLDApLE9hKEEsZSxyLDAsRCxKLCgzPDxpfDApLzR8MCxmLEosMSk7YnJlYWsgQTtjYXNlIDU6T2EoQSxlLHIsMCwwLEosRD0oMzw8aXwwKS80fDAsZixKLDApLE9hKEEsZSxyLDAsRCxKLCgwfEopLzR8MCxmLEosMSk7YnJlYWsgQTtjYXNlIDY6T2EoQSxlLHIsMCwwLEQ9KDB8SikvNHwwLEosZixKLDApLE9hKEEsZSxyLEQsMCwoMzw8aXwwKS80fDAsSixmLEosMSk7YnJlYWsgQTtjYXNlIDc6T2EoQSxlLHIsMCwwLEQ9KDM8PGl8MCkvNHwwLEosZixKLDApLE9hKEEsZSxyLEQsMCwoMHxKKS80fDAsSixmLEosMSk7YnJlYWsgQTtjYXNlIDM6T2EoQSxlLHIsMCwwLEQ9KDB8SikvMnwwLEQsZixKLDApLE9hKEEsZSxyLEQsMCxELEQsZixKLDEpLE9hKEEsZSxyLDAsRCxELEQsZixKLDIpLE9hKEEsZSxyLEQsRCxELEQsZixKLDMpO2JyZWFrIEE7ZGVmYXVsdDpzcig0NDQ1NiwzOTI0Miw0NTExLDM5MzI3KX19fXdoaWxlKDApO2lmKFkmJiEoTiYwIT0oMTYmdHJbQSsyNj4+MF0pKSYmMD09KDB8b3QoQSsxODU1NnwwLDE1MysoMHxhcltBKzE4NTgwPj4yXSl8MCkpKXJldHVybiB1cj1jO2w9Uj8oMHxhclsxMzk2K2E+PjJdKStffDA6MHxhclsxMzkyK2E+PjJdO0o9MCE9KDB8YXJbNTc3NithPj4yXSkmMSxmdW5jdGlvbiBBKGUscixpLGYsbix0LG8sYSxjLGwsdSxiLHMsZCxrKXtlfD0wO3J8PTA7aXw9MDtmfD0wO258PTA7dHw9MDtvfD0wO2F8PTA7Y3w9MDtsfD0wO3V8PTA7Ynw9MDtzfD0wO2R8PTA7a3w9MDt2YXIgaD0wLHc9MCx2PTAsbT0wLGc9MCxaPTAscD0wLHk9MCxCPTAsRT0wLFg9MCxXPTAsST0wLEM9MCxHPTAsVj0wO1g9ZSsxODU5NnwwO3c9MHxhcltYPj4yXTtoPTB8YXJbdysxMDM2OD4+Ml07dj1yPj5oOygwfHYpPD0tMSYmc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KTtXPTE9PSgwfGIpO0k9ZSsxODU1NnwwO0M9ZSsxODU4MHwwO0c9MCE9KDB8Yik7RT1pO3k9ZjtwPW47Qj1hO1o9bDtnPXc7bT12O2Y9aT4+aDtmb3IoOzspe2lmKCgwfChsPTB8YXJbZysxMDM3Mj4+Ml0pKTw9KDB8bSkpe1Y9NDticmVha31pZigoMHxmKTw9LTEpe1Y9NzticmVha31pZigoMHwodz0wfGFyW2crMTAzNzY+PjJdKSk8PSgwfGYpKXtWPTc7YnJlYWt9aWYodj0wfGFyW2crMTAzNjA+PjJdLGk9disoMyooKDB8YnIobCxmKSkrbXwwKXwwKXwwLCg2NTUzNSYoaT0oNjU1MzUmKGNyW2k+PjBdfGNyW2krMT4+MF08PDgpKT4+PjgmMyl8MCkhPSgwfHMpKXtWPTk7YnJlYWt9aWYoKG49KDB8YXJbZys1ODY4Pj4yXSk8KDB8QikpfHwoKDB8dSk8PSgwfGMpPzE6KDB8YXJbZys1ODY0Pj4yXSk+PSgwfEIpKXxHJjA9PSgwfGMpKXtpZihmPUU+PmgsISgtMTwoMHwoYT1yPj5oKSkmKDB8YSk8KDB8bCkpKXtWPTE2O2JyZWFrfWlmKCEoLTE8KDB8ZikmKDB8Zik8KDB8dykpKXtWPTE4O2JyZWFrfWw9disoMyooKDB8YnIobCxmKSkrYXwwKXwwKXwwLGw9MSYoVyYwPT0oMHxjKXxufDAhPSg1NiYoY3JbbD4+MF18Y3JbbCsxPj4wXTw8OCkpJihpPDwxNj4+MTY9PTE/MD09KGFyW2crMTM5Mj4+Ml18Y3wwKTowKSl9ZWxzZXtpZigzPD0oZj01LUJ8MCk+Pj4wKXtWPTEzO2JyZWFrfWw9MHxvdChJLCgwfGFyW0M+PjJdKSsoZisyMCl8MCl9aWYodz0wIT0oMHxsKSl7aWYobj0wfGFyW2crMTA0NDg+PjJdLGY9cj4+bixuPUU+Pm4sKDB8Zik8PS0xKXtWPTIzO2JyZWFrfWlmKCgwfChoPTB8YXJbZysxMDQ1Mj4+Ml0pKTw9KDB8Zikpe1Y9MjM7YnJlYWt9aWYoKDB8bik8PS0xKXtWPTI2O2JyZWFrfWlmKCgwfG4pPj0oMHxhcltnKzEwNDU2Pj4yXSkpe1Y9MjY7YnJlYWt9bT0oMHxhcltnKzEwNDQwPj4yXSkrKCgwfGJyKGgsbikpK2YpfDAsdHJbbT4+MF09MHxjclttPj4wXXwxPDxjfWlmKDM9PSgwfChnPTB8YXJbKGE9Zys1Nzc2fDApPj4yXSkpfDI8KDB8QikmMCE9KDB8Zyk/KGQ8PDI0Pj4yND8oZj1jKzE2fDAsbj0wfG90KEksKDB8YXJbQz4+Ml0pK2Z8MCksMj09KDB8YXJbYT4+Ml0pJiYzPT0oMHxCKXwwPT0oMHxsKSYmKG49KDB8b3QoSSwoMHxhcltDPj4yXSkrZnwwKSk8PDF8bikpOm49LTEsazw8MjQ+PjI0PyhoPWMrMTZ8MCxmPTB8b3QoSSwoMHxhcltDPj4yXSkraHwwKSwyPT0oMHxhclthPj4yXSkmJjM9PSgwfEIpfDA9PSgwfGwpJiYoZj0oMHxvdChJLCgwfGFyW0M+PjJdKStofDApKTw8MXxmKSk6Zj0tMSwoMHxuKTwwP1Y9Mzg6bD1uKTooZj0tMSxWPTM4KSwzOD09KDB8Vikpe2lmKChuPTI9PSgoVj0wKXxCKSkmMD09KDB8Yykpe1Y9Mzk7YnJlYWt9bD1uJjA8KDB8Yyk/MjU1JmQ6MH1pZihoPSgwfGYpPDA/Mj09KDB8QikmMDwoMHxjKT8yNTUmazowOmYsIXcpe1Y9NDM7YnJlYWt9aWYobj0oYT0xPDwoZj1CKy0xfDApKStyfDAsYT1hK0V8MCxBKGUscixFLHIsRSx0LG8sZixjPWMrMXwwLDAsdSxiLHMsZD0yNTUmbCxrPTI1NSZoKSxBKGUsbixFLHIsRSx0LG8sZixjLDEsdSxiLHMsZCxrKSxBKGUscixhLHIsRSx0LG8sZixjLDIsdSxiLHMsZCxrKSxnPTB8YXJbWD4+Ml0saD0wfGFyW2crMTAzNjg+PjJdLCgwfChtPW4+PmgpKTw9LTEpe1Y9NDticmVha31wPUUseT1yLHI9bixCPWYsWj0zLGY9KEU9YSk+Pmh9c3dpdGNoKDB8Vil7Y2FzZSA0OnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSk7YnJlYWs7Y2FzZSA3OnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSk7YnJlYWs7Y2FzZSA5OnNyKDM5MzQ0LDM5MjQyLDM4MjcsMzkzNjcpO2JyZWFrO2Nhc2UgMTM6c3IoMzkzODcsMzkyNDIsMTgyMCwzOTQxNik7YnJlYWs7Y2FzZSAxNjpzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpO2JyZWFrO2Nhc2UgMTg6c3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KTticmVhaztjYXNlIDIzOnNyKDQ4NDgyLDQ4NTE5LDEyOCw0ODUzOSk7YnJlYWs7Y2FzZSAyNjpzcig0ODU0Myw0ODUxOSwxMjksNDg1MzkpO2JyZWFrO2Nhc2UgMzk6c3IoMzk0NDQsMzkyNDIsMzg5NCwzOTM2Nyk7YnJlYWs7Y2FzZSA0MzpyZXR1cm4gaTw8MTY+PjE2PT0wfDAhPShsfGN8aHwwKT8oVj0wfG90KEksKDB8YXJbQz4+Ml0pKygwPT0oMHxjKT8xNToxNCl8MCksdm9pZCB6YShlLHIsRSx5LHAsdCxvLEIsMCxaLFYsbCxoKSk6dm9pZCB6YShlLHIsRSx5LHAsdCxvLEIsMCxaLFY9MSxsLGgpfX0oQSxlLHIsZSxyLGUscixpLDAsMCxsLF8sUSxKLEopLHVyPWN9KEEsQix5LFoscCl9aWYoNDg9PSgwfGUpKXJldHVybn19ZnVuY3Rpb24gVWEoQSxlLHIsaSxmKXtyfD0wLGl8PTAsZnw9MDt2YXIgbix0LG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wO2lmKHQ9KGV8PTApPj4obD0wfGFyWyhBfD0wKSsxMDM2OD4+Ml0pLHU9cj4+bCxuPShpPTE8PChsPWktbHwwKSkrdXwwLDMxIT0oMHxsKSl7YT1pK3R8MCxjPUErMTAzNzJ8MCxsPUErMTAzNjB8MCxvPSgxJmYpPDwxMCY2NTUzNSxpPXU7ZG97Zm9yKGY9dDt1PSgwfGJyKDB8YXJbYz4+Ml0saSkpK2Z8MCx1PSgwfGFyW2w+PjJdKSsoMyp1fDApfDAsYj0tMTAyNSYoY3JbdT4+MF18Y3JbdSsxPj4wXTw8OCl8byx0clt1Pj4wXT1iLHRyW3UrMT4+MF09Yj4+OCwoMHwoZj1mKzF8MCkpPCgwfGEpOyk7aT1pKzF8MH13aGlsZSgoMHxpKTwoMHxuKSl9aWYobz1lPj4oaT0wfGFyW0ErMTAzNDg+PjJdKSxpPXI+PmksKDB8byk8PS0xJiZzcig0ODQ4Miw0ODUxOSwxMjgsNDg1MzkpLCgwfChmPTB8YXJbQSsxMDM1Mj4+Ml0pKTw9KDB8bykmJnNyKDQ4NDgyLDQ4NTE5LDEyOCw0ODUzOSksKDB8aSk8PS0xJiZzcig0ODU0Myw0ODUxOSwxMjksNDg1MzkpLCgwfGkpPCgwfGFyW0ErMTAzNTY+PjJdKSlyZXR1cm4gYj0oMHxhcltBKzEwMzQwPj4yXSkrKDI0KigoMHxicihmLGkpKStvfDApfDApKzIyfDAsdm9pZCh0cltiPj4wXT0xKTtzcig0ODU0Myw0ODUxOSwxMjksNDg1MzkpfWZ1bmN0aW9uIFNhKEEsZSxyLGksZixuKXtlfD0wLHJ8PTAsZnw9MDt2YXIgdCxvLGEsYyxsPTAsdT0wO2lmKGM9MjU1Jigobnw9MCk/MTI4fGY6Ziksbz0xPDwodT0oaXw9MCktKDB8YXJbKEF8PTApKzEwNDA4Pj4yXSl8MCksbD0wfGFyW0ErNTg3Mj4+Ml0scj0oMHxicihyPj5sLDB8YXJbKGE9QSs1ODc2fDApPj4yXSkpKyhlPj5sKXwwLDMxIT0oMHx1KSl7dD1BKzU4ODB8MCxsPUErMTA0MzJ8MCx1PUErMTA0MjR8MCxpPUErMTA0MjB8MCxuPTA7QTpmb3IoOzspe2Y9MDtkb3tpZigoMHxmKT49KDB8YXJbYT4+Ml0pKXtmPTEwO2JyZWFrIEF9aWYoKDB8bik+PSgwfGFyW3Q+PjJdKSl7Zj0xMTticmVhayBBfWlmKCgwfChlPXIrZisoMHxicigwfGFyW2w+PjJdLG4pKXwwKSk+PSgwfGFyW3U+PjJdKSl7Zj0xMjticmVhayBBfXRyWygwfGFyW2k+PjJdKStlPj4wXT1jLGY9ZisxfDB9d2hpbGUoKDB8Zik8KDB8bykpO2lmKCgwfG8pPD0oMHwobj1uKzF8MCkpKXtmPTk7YnJlYWt9fTkhPSgwfGYpJiYoMTA9PSgwfGYpP3NyKDM5NTQyLDQ4NTE5LDY1OSwzOTU2NSk6MTE9PSgwfGYpP3NyKDM5NTg0LDQ4NTE5LDY2MCwzOTU2NSk6MTI9PSgwfGYpJiZzcigzOTYwOCw0ODUxOSw2NjMsMzk1NjUpKX19ZnVuY3Rpb24gT2EoQSxlLHIsaSxmLG4sdCxvLGEsYyl7ZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsb3w9MCxhfD0wLGN8PTA7dmFyIGwsdSxiLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wO2lmKGw9MHxhclsodz0oQXw9MCkrMTg2MDB8MCk+PjJdLGs9MHxvdChoPUErMTg1NTZ8MCwxNDcrKDB8YXJbKHU9QSsxODU4MHwwKT4+Ml0pfDApLGI9QSsxNnwwLHRyWyh2PUErMjZ8MCk+PjBdPSgyNTUmayk8PDQmMTZ8LTE3JnRyW3Y+PjBdLGspe0E6ZG97aWYoMjw9KDB8YXJbODA0KygwfGFyW3c+PjJdKT4+Ml0pJiYwIT0oMHxvdChoLDE0OCsoMHxhclt1Pj4yXSl8MCkpKWlmKDE8KCgwfGFyWzgwNCsoMHxhclt3Pj4yXSk+PjJdKS0xfDApKXtzPTE7ZG97aWYoISgwfGN0KGgpKSlicmVhayBBO3M9cysxfDB9d2hpbGUoKDB8cyk8KCgwfGFyWzgwNCsoMHxhclt3Pj4yXSk+PjJdKS0xfDApKX1lbHNlIHM9MTtlbHNlIHM9MH13aGlsZSgwKTtvPTMxJnRyW3Y+PjBdLHM9KDI1NSZzKTw8NSYyNTV9ZWxzZXtkb3tpZigwfGFyWzIwK2w+PjJdKWs9MTtlbHNle2lmKHM9MHxhclt1Pj4yXSwxMiE9KHQrbnwwKSYmMHxvdChoLHMrMTU2K298MCkpe2s9MzticmVha31rPTErKDB8b3QoaCxzKzE2MHwwKSl8MH19d2hpbGUoMCk7aWYodHJbdj4+MF09LTQmdHJbdj4+MF18MyZrLDIhPSgwfGspKXtzPSgwfGFyWzMyOCtsPj4yXSktMXwwO0E6ZG97aWYoMCE9KDB8cykmJjAhPSgwfG90KGgsMTU0KygwfGFyW3U+PjJdKXwwKSkpZm9yKG89MDs7KXtpZigoMHwoZD1vKzF8MCkpPT0oMHxzKSlicmVhayBBO2lmKCEobz1vPzB8Y3QoaCk6MHxvdChoLDE1NSsoMHxhclt1Pj4yXSl8MCkpKXtzPWQ7YnJlYWt9bz1kfWVsc2Ugcz0wfXdoaWxlKDApO2lmKHRyW2I+PjBdPXMseGEoQSwwLDAsMCksZD0yNTUmKDB8b3QoaCwxNTIrKDB8YXJbdT4+Ml0pfDApKSx0clt2Pj4wXT1kPDwyJjR8LTUmdHJbdj4+MF0sMT09KDB8aykpcmV0dXJuIHZvaWQgbWMoaD0wfGFyWyhoPUErMTg1OTJ8MCk+PjJdLHc9MHxhclt3Pj4yXSx2PTB8YXJbKHY9QSsxODU5NnwwKT4+Ml0sYixlLHIsaSxmLGEsbix0LGMpfWQ9KDB8YXJbMzMyK2w+PjJdKS0xfDA7QTpkb3tpZigwIT0oMHxkKSYmMCE9KDB8b3QoaCwxNTQrKDB8YXJbdT4+Ml0pfDApKSlmb3Iobz0wOzspe2lmKCgwfChzPW8rMXwwKSk9PSgwfGQpKXtzPWQ7YnJlYWsgQX1pZighKG89bz8wfGN0KGgpOjB8b3QoaCwxNTUrKDB8YXJbdT4+Ml0pfDApKSlicmVhaztvPXN9ZWxzZSBzPTB9d2hpbGUoMCk7dHJbQSsxNz4+MF09cywzPT0oMHxrKSYwIT0oMHx0clszNzArbD4+MF0pPyhvcltBKzIyPj4xXT0wLG9yW0ErMjQ+PjFdPTApOnhhKEEsMCwwLDEpLHM9MjU1JigwfG90KGgsMTUyKygwfGFyW3U+PjJdKXwwKSksbz0tOSZ0clt2Pj4wXSxzPXM8PDMmOH10clt2Pj4wXT1vfHMsbWMoaD0wfGFyWyhoPUErMTg1OTJ8MCk+PjJdLHc9MHxhclt3Pj4yXSx2PTB8YXJbKHY9QSsxODU5NnwwKT4+Ml0sYixlLHIsaSxmLGEsbix0LGMpfWZ1bmN0aW9uIHphKEEsZSxyLGksZixuLHQsbyxhLGMsbCx1LGIpe0F8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsb3w9MCxhfD0wLGN8PTAsbHw9MCxifD0wO3ZhciBzLGQsayxoLHcsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTAsQj0wLEU9MCxYPTA7LTE9PSgwfCh1fD0wKSkmJnNyKDM5NDgxLDM5MjQyLDM1NDcsMzk0OTQpLC0xPT0oMHxiKSYmc3IoMzk1MTQsMzkyNDIsMzU0OCwzOTQ5NCksLTE9PSgwfGwpJiZzcigzOTUyNywzOTI0MiwzNTQ5LDM5NDk0KSxnPTB8YXJbKHc9QSsxODU5NnwwKT4+Ml0sWD0yPCgwfChYPSgoMV4oZD0zPT0oMHwoaz0wfGFyW2crNTc3Nj4+Ml0pKSkpPDwzMT4+MzEpK298MCkpP1g6MixaPWJ8dSx0clsodj1BKzMzfDApPj4wXT0wLHRyW3YrMT4+MF09MCx0clt2KzI+PjBdPTAsYT1lPj4odj0odHJbdiszPj4wXT0wKXxhcltnKzEwMzY4Pj4yXSksdj1yPj52LCgwfGEpPD0tMSYmc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KSwoMHwobT0wfGFyW2crMTAzNzI+PjJdKSk8PSgwfGEpJiZzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpLCgwfHYpPD0tMSYmc3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KSwoMHx2KT49KDB8YXJbZysxMDM3Nj4+Ml0pJiZzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpLEU9KDB8YXJbZysxMDM2MD4+Ml0pKygzKigoMHxicihtLHYpKSthfDApfDApfDAsaD02NTUzNSYoRT0oNjU1MzUmKGNyW0U+PjBdfGNyW0UrMT4+MF08PDgpKT4+PjgmMykscz0wIT0oMHxsKSxtPTAhPSgwfFopO2Rve2lmKFp8bHwwKXtpZigwIT0oMHx0cltnKzU5NDY+PjBdKSYmMD09KDB8YXJbKHA9QSsxODUwOHwwKT4+Ml0pKXt2PUErMTg1NTZ8MCxhPUErMTg1ODB8MDtkb3tpZigwfG90KHYsMTM5KygwfGFyW2E+PjJdKXwwKSl7aWYoMHxvdCh2LDE0MCsoMHxhclthPj4yXSl8MCkpaWYoMHxvdCh2LDE0MCsoMHxhclthPj4yXSl8MCkpaWYoMHxvdCh2LDE0MCsoMHxhclthPj4yXSl8MCkpaWYoMHxvdCh2LDE0MCsoMHxhclthPj4yXSl8MCkpe2lmKCEoYT01KygwfGJ0KHYsMCkpfDApKXthPXY9MDticmVha319ZWxzZSBhPTQ7ZWxzZSBhPTM7ZWxzZSBhPTI7ZWxzZSBhPTE7dj0wfGN0KHYpfWVsc2UgYT12PTB9d2hpbGUoMCk7YXJbcD4+Ml09MSxnPTB8YnIoMS0odjw8MSl8MCxhKSxhcltBKzE4NTEyPj4yXT1nLGc9MX1lbHNlIGc9MDtpZihtJjAhPSgwfHRyWzc1MisoMHxhcltBKzE4NjAwPj4yXSk+PjBdKSYmMD09KDB8dHJbQSszMj4+MF0pJiYwPT0oMHxhclsoeT1BKzE4NTE2fDApPj4yXSk/KHA9MHxvdCh2PUErMTg1NTZ8MCwyMysoMHxhclsoYT1BKzE4NTgwfDApPj4yXSl8MCksbT0wfGFyW3c+PjJdLGE9cD8oYT0xPCgwfGNyW20rMTAwNzQ+PjBdKT8wfG90KHYsMjQrKDB8YXJbYT4+Ml0pfDApOjAsYXJbeT4+Ml09MSxhcltBKzE4NTIwPj4yXT10clttKzEwMDc1K2E+PjBdLDB8dHJbbSsxMDA4MSthPj4wXSk6KGFyW3k+PjJdPTEsYXJbQSsxODUyMD4+Ml09MCksYXJbQSsxODUyND4+Ml09YSk6Qj0zMywzMz09KDB8QikmJiFnKWJyZWFrO3puKEEsZSxyLG4sdCl9fXdoaWxlKDApO2lmKG09MTw8byxwPTE8PFgsQj0wfGFyW3c+PjJdLHk9MHxhcltCKzU3ODA+PjJdLEI9MHxhcltCKzU3ODQ+PjJdLGFyWyhsPUErMjh8MCk+PjJdPTAscyYmamEoQSxlLHIsbywwKSxIYShBLGUscixuLHQsbSwwLGgscyksISgyPCgwfG8pfGQpKXJldHVybiAzIT0oMHxjKT8wOigoYT0wIT0oMSZ1fDApKSYmamEoQSxpLGYsbywxKSwwfGFyWzU3NzYrKDB8YXJbdz4+Ml0pPj4yXSYmSGEoQSwoMHxpKS8oMHx5KXwwLCgwfGYpLygwfEIpfDAsKDB8bikvKDB8eSl8MCwoMHx0KS8oMHxCKXwwLG0sMSxoLGEpLChhPTAhPSgyJnV8MCkpJiZqYShBLGksbStmfDAsbywxKSwodj0yPT0oMHxrKSkmJkhhKEEsKDB8aSkvKDB8eSl8MCwoKDB8ZikvKDB8Qil8MCkrbXwwLCgwfG4pLygwfHkpfDAsKDB8dCkvKDB8Qil8MCxtLDEsaCxhKSwoYT0wIT0oMSZifDApKSYmamEoQSxpLGYsbywyKSwwfGFyWzU3NzYrKDB8YXJbdz4+Ml0pPj4yXSYmSGEoQSwoMHxpKS8oMHx5KXwwLCgwfGYpLygwfEIpfDAsKDB8bikvKDB8eSl8MCwoMHx0KS8oMHxCKXwwLG0sMixoLGEpLChhPTAhPSgyJmJ8MCkpJiZqYShBLGkscCtmfDAsbywyKSx2JiZIYShBLCgwfGkpLygwfHkpfDAsKCgwfGYpLygwfEIpfDApK218MCwoMHxuKS8oMHx5KXwwLCgwfHQpLygwfEIpfDAsbSwyLGgsYSksMCk7Zz0wfGFyW3c+PjJdO0E6ZG97aWYocyYwIT0oMHx0cltnKzEwMDcxPj4wXSkpe2Rve2lmKEU8PDE2Pj4xNiE9MSl7aWYoYT1lPj4odj0wfGFyW2crMTA0Mjg+PjJdKSx2PXI+PnYsKDB8YSk8PS0xJiZzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpLCgwfChtPTB8YXJbZysxMDQzMj4+Ml0pKTw9KDB8YSkmJnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSksKDB8dik8PS0xJiZzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpLCgwfHYpPCgwfGFyW2crMTA0MzY+PjJdKSl7aWYobz0oMHxhcltnKzEwNDIwPj4yXSkrKCgwfGJyKG0sdikpK2EpfDAsKDB8dHJbbz4+MF0pPDApYnJlYWs7dj1hPTA7YnJlYWsgQX1zcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpfX13aGlsZSgwKTtmb3IobT1BKzE4NTU2fDAsZz1BKzE4NTgwfDAsdj1hPTA7dj0oMSYobz0wIT0oMHxvdChtLCgwfGFyW2c+PjJdKSsoYSsxNjIpfDApKSkpK3Z8MCwoMHwoYT1hKzF8MCkpPDQmbzspO3Y9KGE9dj8xLSgoMHxvdChtLDE3MCsoMHxhcltnPj4yXSl8MCkpPDwxKTw8distMTowLDEpfWVsc2Ugdj1hPTB9d2hpbGUoMCk7aWYoYXJbbD4+Ml09YSwoYT0wIT0oMSZ1fDApKSYmamEoQSxlLHIsWCwxKSwwfGFyWzU3NzYrKDB8YXJbdz4+Ml0pPj4yXSYmSGEoQSwoMHxlKS8oMHx5KXwwLCgwfHIpLygwfEIpfDAsKDB8bikvKDB8eSl8MCwoMHx0KS8oMHxCKXwwLHAsMSxoLGEpLChaPTI9PSgwfGspKSYmKChhPTAhPSgyJnV8MCkpJiZqYShBLGUsKEI8PFgpK3J8MCxYLDEpLEhhKEEsKDB8ZSkvKDB8eSl8MCwoKDB8cikvKDB8Qil8MCkrcHwwLCgwfG4pLygwfHkpfDAsKCgwfHQpLygwfEIpfDApK3B8MCxwLDEsaCxhKSksdil7Zm9yKG09QSsxODU1NnwwLGc9QSsxODU4MHwwLHY9YT0wO3Y9KDEmKHU9MCE9KDB8b3QobSwoMHxhcltnPj4yXSkrKGErMTY2KXwwKSkpKSt2fDAsKDB8KGE9YSsxfDApKTw0JnU7KTthPXY/MS0oKDB8b3QobSwxNzErKDB8YXJbZz4+Ml0pfDApKTw8MSk8PHYrLTE6MH1lbHNlIGE9MDtyZXR1cm4gYXJbbD4+Ml09YSwoYT0wIT0oMSZifDApKSYmamEoQSxlLHIsWCwyKSwwfGFyWzU3NzYrKDB8YXJbdz4+Ml0pPj4yXSYmSGEoQSwoMHxlKS8oMHx5KXwwLCgwfHIpLygwfEIpfDAsKDB8bikvKDB8eSl8MCwoMHx0KS8oMHxCKXwwLHAsMixoLGEpLFomJigoYT0wIT0oMiZifDApKSYmamEoQSxlLChCPDxYKStyfDAsWCwyKSxIYShBLCgwfGUpLygwfHkpfDAsKCgwfHIpLygwfEIpfDApK3B8MCwoMHxuKS8oMHx5KXwwLCgoMHx0KS8oMHxCKXwwKStwfDAscCwyLGgsYSkpLDB9ZnVuY3Rpb24gamEoQSxlLHIsaSxmKXtlfD0wLHJ8PTAsaXw9MCxmfD0wO3ZhciBuLHQsbyxhLGMsbCx1LGIscyxkLGssaCx3LHYsbSxnLFoscCx5LEIsRSxYLFcsSSxDLEcsVixGLFIsTixfLFksUSxELEosTSxULFUsUyxPLHo9MCxqPTAsSD0wLHg9MCxQPTAsTD0wLEs9MCxxPTAsJD0wLEFBPTAsZUE9MCxyQT0wLGlBPTAsZkE9MCxuQT0wLHRBPTAsb0E9MCxhQT0wLGNBPTAsbEE9MCx1QT0wLGJBPTA7aWYodXI9KEo9dXIpKzE2MHwwLGlBPUorMTQ0fDAsXz1KKzgwfDAsUT0oWT1KKSs2NHwwLEQ9Sis0OHwwLE49SiszMnwwLHJBPShmQT0wfGFyWyhBfD0wKSsxODU5Nj4+Ml0pKzc2NHwwLHo9ZT4+KGo9MHxhcltmQSsxMDM2OD4+Ml0pLGo9cj4+aiwoMHx6KTw9LTEmJnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSksKDB8KEg9MHxhcltmQSsxMDM3Mj4+Ml0pKTw9KDB8eikmJnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSksKDB8aik8PS0xJiZzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpLCgwfGopPj0oMHxhcltmQSsxMDM3Nj4+Ml0pJiZzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpLEFBPSgwfGFyW2ZBKzEwMzYwPj4yXSkrKDMqKCgwfGJyKEgsaikpK3p8MCl8MCl8MCxBQT0oNjU1MzUmKGNyW0FBPj4wXXxjcltBQSsxPj4wXTw8OCkpPj4+OCYzLChSPTA9PSgwfGYpKSYmKEs9ZT4+KHVBPTB8YXJbZkErMTA0NDg+PjJdKSxMPXI+PnVBLHE9KHg9MTw8KHVBPWktdUF8MCkpK0x8MCwzMSE9KDB8dUEpKSl7SD14K0t8MCx4PWZBKzEwNDUyfDAsUD1mQSsxMDQ0MHwwLHo9TDtkb3tmb3Ioaj1LO3VBPSgwfGJyKDB8YXJbeD4+Ml0seikpK2p8MCx1QT0oMHxhcltQPj4yXSkrdUF8MCx0clt1QT4+MF09LTEyOHx0clt1QT4+MF0sKDB8KGo9aisxfDApKTwoMHxIKTspO3o9eisxfDB9d2hpbGUoKDB8eik8KDB8cSkpfXo9MCE9KDB8dHJbZkErNTk0NT4+MF0pJiYwPT0oMHx0cltBKzMyPj4wXSkmJigwfGFyW2ZBKzEwMTAwPj4yXSk+PSgwfGkpPzI1NSYoMHxvdChBKzE4NTU2fDAsKDB8YXJbQSsxODU4MD4+Ml0pKygwfGY/MTQyOjE0MSl8MCkpOjAsdHJbKHVBPUErMzMrZnwwKT4+MF09eix0clsoRj1BKzM2fDApPj4wXT0wO2Rve2lmKEFBPDwxNj4+MTY9PTEmJjAhPSgwfHRyW2ZBKzU3NTE+PjBdKSl7aWYoMD09KDB8dHJbdUE+PjBdKSYmMD09KDB8dHJbQSszMj4+MF0pKXtiQT0yMzticmVha31IPTAhPSgwfGYpJjEsbEE9MjU1JigwfG90KGo9QSsxODU1NnwwLDE0MysoMHxhclsoej1BKzE4NTgwfDApPj4yXSkrSHwwKSksKHRyW0Y+PjBdPWxBKTw8MjQ+PjI0JiYobEE9MjU1JigwfG90KGosMTQ1KygwfGFyW3o+PjJdKStIfDApKSx0cltBKzM3Pj4wXT1sQSl9ZWxzZSBiQT0yM313aGlsZSgwKTtpZigyMz09KDB8YkEpJiYodHJbRj4+MF09MCksej1SPzI6MCwwPT0oMHx0clt1QT4+MF0pJiYwPT0oMHx0cltBKzMyPj4wXSl8fCh6fD0xKSx4PTI1KygwfGFyWyhWPUErMTg1ODB8MCk+PjJdKXwwLCQ9KGNBPWk8PDEpKy0xfDAsbEE9aSstMnwwLEw9Uj9pKzE+PjI6bEEsSz1SPygzKmxBfDApKyhpKy0xPj4yKXwwOjE1LDE8KDB8Y0EpKXtmb3IocT1BKzE4NTU2fDAsaj0kLEg9MDtqPShjQT0wPT0oMHxvdChxLHgrKChIPj5MKStLKXwwKSkpP0g6aiwoMHwoSD1IKzF8MCkpPCgwfCQpJigxXmNBKTspO2ZvcihQPTQzKygwfGFyW1Y+PjJdKXwwLHg9JCxIPTA7eD0oY0E9MD09KDB8b3QocSxQKygoSD4+TCkrSyl8MCkpKT9IOngsKDB8KEg9SCsxfDApKTwoMHwkKSYoMV5jQSk7KTt9ZWxzZSBqPXg9JDtpZihIPShqPj4xKS0xfDAsMzwoMHxqKSYmKGo9KDB8dXQoQSsxODU1NnwwLEgpKSsoKDEmanwyKTw8SCl8MCksSD0oeD4+MSktMXwwLEw9MzwoMHx4KT8oMHx1dChBKzE4NTU2fDAsSCkpKygoMSZ4fDIpPDxIKXwwOngsY0E9QUE8PDE2Pj4xNj09MCl7ZG97aWYoUil7aWYoSD1lPj4oeD0wfGFyW2ZBKzEwNDA4Pj4yXSkseD1yPj54LCgwfEgpPD0tMSYmc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KSwoMHwoUD0wfGFyW2ZBKzEwNDEyPj4yXSkpPD0oMHxIKSYmc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KSwoMHx4KTw9LTEmJnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSksKDB8eCk8KDB8YXJbZkErMTA0MTY+PjJdKSl7ZUE9KDB8YXJbZkErMTA0MDA+PjJdKSsoKDB8YnIoUCx4KSkrSCl8MCxlQT0wfHRyW2VBPj4wXTticmVha31zcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpfWVsc2V7aWYoSD1lPj4oeD0wfGFyW2ZBKzEwNDI4Pj4yXSkseD1yPj54LCgwfEgpPD0tMSYmc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KSwoMHwoUD0wfGFyW2ZBKzEwNDMyPj4yXSkpPD0oMHxIKSYmc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KSwoMHx4KTw9LTEmJnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSksKDB8eCk8KDB8YXJbZkErMTA0MzY+PjJdKSl7ZUE9KDB8YXJbZkErMTA0MjA+PjJdKSsoKDB8YnIoUCx4KSkrSCl8MCxlQT02MyZ0cltlQT4+MF07YnJlYWt9c3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KX19d2hpbGUoMCk7SD0oYUE9Mj09KDB8KHg9MHxmdW5jdGlvbihBLGUscixpKXtlfD0wLHJ8PTAsaXw9MDt2YXIgZj0wO3N3aXRjaCgwfChBfD0wKSl7Y2FzZSAyOmJyZWFrO2Nhc2UgMzpmPTI7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gMH1yZXR1cm4gMj09KDB8ZikmJjB8ciYmMyE9KDB8YXJbaSs1MDEyPj4yXSk/MDowfCgoZSstNnwwKT4+PjA8OT8yOihlKy0yMnwwKT4+PjA8OSYxKX0oaSwyNTUmZUEsZixyQSkpKSk/ajpMLGo9YUE/TDpqfWVsc2UgeD0wLEg9TDtHPTB8X2EobEEseCksYUE9MHxfYSgyLHgpLE09aUEsVD1qLFU9SCxTPXgsTz1pLE18PTAsVHw9MCxVfD0wLE89KDB8YXJbNzg1MisoMjQqKFN8PTApfDApKygoT3w9MCk8PDIpPj4yXSkrKChVPDxPKStUPDwxKXwwLE89Y3JbTz4+MF18Y3JbTysxPj4wXTw8OCx0cltNPj4wXT1PLHRyW00rMT4+MF09Tz4+OCxDPTB8dHJbaUErMT4+MF0sRT0wfGNyW2lBPj4wXSx2YigwfF8sMCwxPDxsQTw8bEF8MCksVz1BKzE4NTU2fChvclsoWD1BKzE0NDA0KyhmPDwxKXwwKT4+MV09MCksST0wIT0oMHxmKSYxLHU9MCE9KDB8eCkmMSxiPSgyNTUmQyktMXwwLHM9ZkErNTc0OXwwLGQ9QSszMnwwLGs9Uj80Mjo0MyxoPUM8PDI0Pj4yNCE9MCx3PTA8KDB8Ziksdj1mQSsxMDQwOHwwLG09ZkErMTA0MTJ8MCxnPWZBKzEwNDE2fDAsWj1mQSsxMDQwMHwwLHA9ZkErNTc1MHwwLHk9ZkErNTkzNnwwLEI9ZkErNTc1NXwwLG89QSsxODU4OCt6fDAsYT1mQSsxMDQyOHwwLGM9ZkErMTA0MzJ8MCxsPWZBKzEwNDM2fDAsbj1mQSsxMDQyMHwwLHQ9MTwoMjU1JkMpLHo9MSxvQT1FLGo9QUE9MDtBOmZvcig7Oyl7Sz0wfHRyW0crKG9BPDwxKT4+MF0scT0wfHRyW0crKG9BPDwxKSsxPj4wXSwoMHxvQSk8KDB8RSkmMCE9KDB8b0EpPyh0QT0xJih0QT0wfGNyW18rKCh4PShIPTI1NSZxKTw8bEEpKyhQPTI1NSZLKSk+PjBdKXx0QT4+PjEsMHxvdChXLCgwfGFyW1Y+PjJdKSsoKFI/dEE6dEErMnwwKSs2MSl8MCk/KEw9MSxiQT01OSk6KHg9MSxIPTApKTowPT0oMHxvQSl8KDB8b0EpPT0oMHxFKT8oTD0wLEg9eD0yNTUmcSx4PDw9bEEsUD0yNTUmSyxiQT01OSk6SD14PTAsNTk9PSgwfGJBKSYmKHg9XysoUCstMSt4KXwoYkE9MCksSzw8MjQ+PjI0JiYodHJbeD4+MF09MXx0clt4Pj4wXSksSD1fKygoSCstMTw8bEEpK1ApfDAsSD0oeD0ocTw8MjQ+PjI0JiYodHJbSD4+MF09Mnx0cltIPj4wXSksTCksMSkpO2Rve2lmKEgpe2lmKHRBPSgkPTI1NSZLKTw8MixuQT0ocSY9MjU1KTw8MixxPTB8YXJbNTczMDgrKGxBPDw2KSsoSTw8NSkrKHU8PDQpKyhjcltfKygocTw8bEEpKyQpPj4wXTw8Mik+PjJdLCgkPSgwfG9BKT09KDB8RSkpPyhvcltZPj4xXT0xLHRyW04+PjBdPTEsdHJbUT4+MF09Qyx0PyhLPWIsSD14LHg9MSxiQT02Nyk6KEg9eCx4PTEpKTooSz0xNSxIPXgseD0wLGJBPTY3KSw2Nz09KDB8YkEpKWZvcig7Oyl7UD0oKGJBPTApfGNyW2FBKyhLPDwxKT4+MF0pK3RBfDAsTD0oMHxjclthQSsoSzw8MSkrMT4+MF0pK25BfDA7ZG97aWYoMHx0cltzPj4wXSl7aWYoMHx0cltkPj4wXSl7UD1rO2JyZWFrfTB8dHJbdUE+PjBdP1A9azpiQT03MH1lbHNlIGJBPTcwfXdoaWxlKDApO2lmKDcwPT0oMHxiQSkmJihQPShiQT0wKXxjcltxKyhQKyhMPDxpKSk+PjBdKSwwfG90KFcsKDB8YXJbVj4+Ml0pKyhQKzY1KXwwKSYmKG9yW1krKHg8PDEpPj4xXT0xLHRyW04reD4+MF09MSx0cltRK3g+PjBdPUsseD14KzF8KEg9MCkpLCEoMTwoMHxLKSkpYnJlYWs7Sz1LKy0xfDAsYkE9Njd9ZG97aWYoaHwxXiQpe2lmKDB8SCl7b3JbWSsoeDw8MSk+PjFdPTEsZkE9eCsodHJbTit4Pj4wXT0xKXwodHJbUSt4Pj4wXT0wKTticmVha31kb3tpZigwfHRyW3M+PjBdKXtpZigwfHRyW2Q+PjBdKXtIPWs7YnJlYWt9MHx0clt1QT4+MF0/SD1rOmJBPTc4fWVsc2UgYkE9Nzh9d2hpbGUoMCk7aWYoNzg9PSgwfGJBKSYmKEg9KGJBPTApfGNyW3ErKChuQTw8aSkrdEEpPj4wXSksISgwfG90KFcsKDB8YXJbVj4+Ml0pKyhIKzY1KXwwKSkpe2ZBPXg7YnJlYWt9b3JbWSsoeDw8MSk+PjFdPTEsZkE9eCsodHJbTit4Pj4wXT0xKXwodHJbUSt4Pj4wXT0wKX1lbHNlIGZBPXh9d2hpbGUoMCk7aWYoZkEpe3E9MD09KDB8eil8KHd8MD09KDB8b0EpPzA6MiksTD0oMHxmQSk8OD9mQTo4LCQ9MDwoMHxmQSk7ZG97aWYoJCl7aWYoSz1xPDwyLHcpZm9yKFA9MCx4PS0xLHo9MSxIPUFBO2o9UD8wPCgwfGopPzE9PSgwfEgpPzA6aisxfDA6ajoxLHo9KEg9MHxvdChXLCgwfGFyW1Y+PjJdKSsoKCgwfGopPDM/ajozKStLKzEyNSl8MCkpPyhvclsoej1ZKyhQPDwxKXwwKT4+MV09MSsoMHxvclt6Pj4xXSk8PDE2Pj4xNix4PS0xPT0oMHx4KT9QOngsMCk6KCh6Ky0xfCh0cltOK1A+PjBdPTApKT4+PjA8MiYxKSt6fDAsKDB8KFA9UCsxfDApKTwoMHxMKTspO2Vsc2UgZm9yKFA9MCx4PS0xLHo9MSxIPUFBO2o9UD8wPCgwfGopPzE9PSgwfEgpPzA6aisxfDA6ajoxLHo9KEg9MHxvdChXLCgwfGFyW1Y+PjJdKSsoKCgwfGopPDM/ajozKStLKzEwOSl8MCkpPyhvclsoej1ZKyhQPDwxKXwwKT4+MV09MSsoMHxvclt6Pj4xXSk8PDE2Pj4xNix4PS0xPT0oMHx4KT9QOngsMCk6KCh6Ky0xfCh0cltOK1A+PjBdPTApKT4+PjA8MiYxKSt6fDAsKDB8KFA9UCsxfDApKTwoMHxMKTspO2lmKC0xPT0oMHx4KSlicmVhaztpQT0wfG90KFcsKDB8YXJbVj4+Ml0pKygodz80fHE6cSkrMTMzKXwwKSxvclsockE9WSsoeDw8MSl8MCk+PjFdPSgwfGxyW3JBPj4xXSkraUEsdHJbTit4Pj4wXT1pQX1lbHNlIHo9MSxIPUFBfXdoaWxlKDApO2lmKFIpe2lmKHg9ZT4+KFA9MHxhclt2Pj4yXSksUD1yPj5QLCgwfHgpPD0tMSl7YkE9MTAyO2JyZWFrIEF9aWYoKDB8KEw9MHxhclttPj4yXSkpPD0oMHx4KSl7YkE9MTAyO2JyZWFrIEF9aWYoKDB8UCk8PS0xKXtiQT0xMDU7YnJlYWsgQX1pZigoMHxQKT49KDB8YXJbZz4+Ml0pKXtiQT0xMDU7YnJlYWsgQX14PSgwfGFyW1o+PjJdKSsoKDB8YnIoTCxQKSkreCl8MCx4PTB8dHJbeD4+MF19ZWxzZXtpZih4PWU+PihQPTB8YXJbYT4+Ml0pLFA9cj4+UCwoMHx4KTw9LTEpe2JBPTEwOTticmVhayBBfWlmKCgwfChMPTB8YXJbYz4+Ml0pKTw9KDB8eCkpe2JBPTEwOTticmVhayBBfWlmKCgwfFApPD0tMSl7YkE9MTEyO2JyZWFrIEF9aWYoKDB8UCk+PSgwfGFyW2w+PjJdKSl7YkE9MTEyO2JyZWFrIEF9eD0oMHxhcltuPj4yXSkrKCgwfGJyKEwsUCkpK3gpfDAseD02MyZ0clt4Pj4wXX1lOmRve2lmKDB8dHJbZD4+MF0pUD0wO2Vsc2V7ZG97aWYoY0Epe2lmKCEoMHx0cltwPj4wXSkpYnJlYWs7aWYoKDE2fHgpPDwyND4+MjQ9PTI2JjAhPSgwfHRyW3VBPj4wXSkpe1A9MDticmVhayBlfX19d2hpbGUoMCk7aWYoMHx0cltGPj4wXSl7UD0wO2JyZWFrfVA9MzwoKDB8dHJbUT4+MF0pLSgwfHRyW1ErKGZBKy0xKT4+MF0pfDApJjF9fXdoaWxlKDApO2lmKGlBPWZBKy0xfDAsMTwoMHxmQSkpZm9yKHg9MDtyQT0yNTUmKDB8Y3QoVykpLHRyW0QreD4+MF09ckEsKDB8KHg9eCsxfDApKSE9KDB8aUEpOyk7aWYoeD0ockE9MCE9KDB8UCkpJjAhPSgwfHRyW3k+PjBdKT8wOjI1NSYoMHxjdChXKSksdHJbRCtpQT4+MF09eCx4PTB8dHJbQj4+MF0/KDB8Y3Jbbz4+MF0pPj4+MiYyNTU6MCwhJClicmVhazskPTEsUD1lQT0wO2Rve0FBPTB8b3JbWSsoZUE8PDEpPj4xXTtkb3tpZigwfHRyW04rZUE+PjBdKXtmb3IoSz0tMTs7KXtpZihMPUsrMXwwLHE9MHxjdChXKSw2MzwoMHxLKSl7cT0wO2JyZWFrfWlmKCFxKXtiQT0xMzA7YnJlYWt9Sz1MfWlmKDEzMD09KDB8YkEpJiYoKChiQT0wKXxMKTw0P0s9MHx1dChXLHgpOihLPTB8dXQoVywoTD1LKy0yfDApK3h8MCksTD0yKygxPDxMKXwwKSxxPShMPDx4KStLfDApLEs9MD09KDB8dHJbQj4+MF0pLEw9eCsxfDAseD0oMzw8eHwwKTwocStBQXwwKT8hS3x8KDB8TCk8ND9MOjQ6eCxLfDFeJCl7JD0wO2JyZWFrfWlmKCgzPDwoSz0oMjU1JihMPTB8dHJbbz4+MF0pKT4+PjImMjU1KXwwKTw9KDB8cSkpe3RyW28+PjBdPUwrMTw8MjQ+PjI0LCQ9MDticmVha31pZihMPDwyND4+MjQ9PTB8KDE8PEt8MCk8PShxPDwxfDApKXskPTA7YnJlYWt9dHJbbz4+MF09TCstMTw8MjQ+PjI0LCQ9MH1lbHNlIHE9MH13aGlsZSgwKTtLPXErQUF8MCxMPTY1NTM1JihxPTA9PSgwfHRyW0QrZUE+PjBdKT9LOjAtKDY1NTM1JkspfDApO2Rve2lmKHJBJjAhPSgwfHRyW3k+PjBdKSl7aWYoKDB8ZUEpIT0oMHxpQSl8MD09KDEmKFA9SytQfDApfDApKWJyZWFrO0w9MC1xJjY1NTM1fX13aGlsZSgwKTtBQT0wfHRyW1ErZUE+PjBdLHE9KDB8Y3JbYUErKEFBPDwxKT4+MF0pK3RBfDAsQUE9KDB8Y3JbYUErKEFBPDwxKSsxPj4wXSkrbkF8MCxvcltBKzIxMTYrKGY8PDExKSsob3JbWD4+MV08PDEpPj4xXT1MLG9yW0ErODI2MCsoZjw8MTEpKyhvcltYPj4xXTw8MSk+PjFdPXErKEFBPDxpKSxvcltYPj4xXT0xKygwfG9yW1g+PjFdKTw8MTY+PjE2LGVBPWVBKzF8MH13aGlsZSgoMHxlQSkhPSgwfGZBKSl9ZWxzZSBIPUFBfWVsc2UgSD1BQX13aGlsZSgwKTtpZighKDA8KDB8b0EpKSl7YkE9NTQ7YnJlYWt9b0E9b0ErLTF8MCxBQT1IfXJldHVybiA1ND09KDB8YkEpP3VyPUo6MTAyPT0oMHxiQSk/c3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KToxMDU9PSgwfGJBKT9zcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpOjEwOT09KDB8YkEpP3NyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSk6MTEyPT0oMHxiQSkmJnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSksMH1mdW5jdGlvbiBIYShBLGUscixpLGYsbix0LG8sYSl7ZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsb3w9MCxhfD0wO3ZhciBjLGwsdSxiPTAscz0wLGQ9MDtpZihjPTB8YXJbKGw9KEF8PTApKzE4NTk2fDApPj4yXSx1PTA9PSgwfG8pKXtkb3tpZih0KXtpZihvPTB8YnIoMHxhcls1NzgwK2M+PjJdLGUpLHM9MHxicigwfGFyWzU3ODQrYz4+Ml0sciksbz4+PWI9MHxhclsxMDQyOCtjPj4yXSxiPXM+PmIsKDB8byk8PS0xJiZzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpLCgwfChzPTB8YXJbMTA0MzIrYz4+Ml0pKTw9KDB8bykmJnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSksKDB8Yik8PS0xJiZzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpLCgwfGIpPCgwfGFyWzEwNDM2K2M+PjJdKSl7ZD0oMHxhclsxMDQyMCtjPj4yXSkrKCgwfGJyKHMsYikpK28pfDAsZD02MyZ0cltkPj4wXTticmVha31zcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpfWVsc2V7aWYobz1lPj4oYj0wfGFyWzEwNDA4K2M+PjJdKSxiPXI+PmIsKDB8byk8PS0xJiZzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpLCgwfChzPTB8YXJbMTA0MTIrYz4+Ml0pKTw9KDB8bykmJnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSksKDB8Yik8PS0xJiZzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpLCgwfGIpPCgwfGFyWzEwNDE2K2M+PjJdKSl7ZD0oMHxhclsxMDQwMCtjPj4yXSkrKCgwfGJyKHMsYikpK28pfDAsZD0wfHRyW2Q+PjBdO2JyZWFrfXNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSl9fXdoaWxlKDApO0d0KGMsZSxyLGI9MzQ8KDI1NSZkKT8xOjI1NSZkLG4sdCk7ZG97aWYoMHx0cls1NzUwKygwfGFyW2w+PjJdKT4+MF0pe2lmKDA9PSgwfHRyW0ErMzI+PjBdKSYmMD09KDB8dHJbQSszMyt0Pj4wXSkpe289MDticmVha31vPTI2PT0oMTZ8Yil9ZWxzZSBvPTB9d2hpbGUoMCk7bz0yNj09KDB8Yikmbz8yOjEmb31lbHNlIG89MHx0cltBKzM2Pj4wXT8wfHRyW0ErMzc+PjBdPzI6MTowO2E/am4oQSxlLHIsaSxmLG4sdCwwIT0oMHx0cltBKzMzK3Q+PjBdKSx1LG8pOnQmJjB8YXJbQSsyOD4+Ml0mJmpuKEEsZSxyLGksZixuLHQsKG9yW0ErMTQ0MDQrKHQ8PDEpPj4xXT0wKSE9KDB8dHJbQSszMyt0Pj4wXSksdSwwKX1mdW5jdGlvbiB4YShBLGUscixpKXtlfD0wLHJ8PTAsaXw9MDt2YXIgZixuLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wO3VyPShuPXVyKSsxNnwwLGw9bix0PTB8b3QoYz0oQXw9MCkrMTg1NTZ8MCwxNTArKDB8YXJbKHI9QSsxODU4MHwwKT4+Ml0pfDApLGU9MHxvdChjLDE1MCsoMHxhcltyPj4yXSl8MCksbz0odD0wPT0oMHx0KSk/MDowfG90KGMsMTUxKygwfGFyW3I+PjJdKXwwKSxhPShmPTA9PSgwfGUpKT8wOjB8b3QoYywxNTErKDB8YXJbcj4+Ml0pfDApLHQ/KHI9bCxlPTAsdT0xMSk6KHQ9bz8wfGJ0KGMsMSk6LTEsbz0wfGN0KGMpLGU9dCsyfDAsYXJbbD4+Ml09ZSxvPyhyPWwsZT0tMi10fDAsdT0xMSk6bz1lKSwxMT09KDB8dSkmJihvPWFyW3I+PjJdPWUpO2Rve2lmKCFmKXtpZih0PWE/MHxidChjLDEpOi0xLHU9MHxjdChjKSxlPXQrMnwwLGFyWyhyPWwrNHwwKT4+Ml09ZSx1KXtlPS0yLXR8MDticmVha31yZXR1cm4gdT1lLGM9NjU1MzUmbyxvclsobD1BKzE4KyhpPDwyKXwwKT4+MV09Yyx1Jj02NTUzNSxvclsoaT1BKzE4KyhpPDwyKSsyfDApPj4xXT11LHZvaWQodXI9bil9cj1sKzR8MCxlPTB9d2hpbGUoMCk7dT1hcltyPj4yXT1lLGM9NjU1MzUmbyxvclsobD1BKzE4KyhpPDwyKXwwKT4+MV09Yyx1Jj02NTUzNSxvclsoaT1BKzE4KyhpPDwyKSsyfDApPj4xXT11LHVyPW59ZnVuY3Rpb24gUGEoQSxlLHIpe0F8PTA7dmFyIGksZixuLHQsbyxhLGM9MCxsPTAsdT0wLGI9MCxzPTAsZD0wLGs9MCxoPTAsdz0wO2lmKGw9MHx0clsocnw9MCkrOTM3ODQrKDQ0MDAqKDB8YXJbKGV8PTApKzg+PjJdKXwwKSsyPj4wXSxkPTB8aXQoQSksNzwodHJbKGE9ZSszODB8MCk+PjBdPWQpPj4+MClyZXR1cm4odz0wKXx3O2Q9cisxMTA5NisoNTE2OCpsfDApKzQ3NnwwO2Rve2lmKDB8YXJbZD4+Ml0pe2lmKGM9MHxmdChBKSw3PChjPSgwfGNyW2E+PjBdKStjfDApPj4+MClyZXR1cm4odz0wKXx3O3RyWyhzPWUrMzgxfDApPj4wXT1jO2JyZWFrfXM9ZSszODF8MH13aGlsZSgwKTtuPWUrMzMyfDAsdD1lKzMyOHwwLG89cisxMTA5NisoNTE2OCpsfDApKzUxNjR8MCxpPXIrMTEwOTYrKDUxNjgqbHwwKSs1MTYwfDAsZj1lKzIwfDAsYj0wO0E6Zm9yKDs7KXtpZihjPTA9PSgwfGIpKXc9MTA7ZWxzZSBpZigxPT0oMHxiKSl7aWYoMHxhcltmPj4yXSl7Yz0xLHc9Mjc7YnJlYWt9dz0xMH1pZigxMD09KDB8dykmJihoPSh3PTApPCgwfChrPTB8YXJbKGM/dDpuKT4+Ml0pKSkpe2ZvcihjPTA7dT0yNTUmKDB8QXQoQSwxKSksdHJbZSszODIrKGI8PDQpK2M+PjBdPXUsKDB8KGM9YysxfDApKSE9KDB8ayk7KTtpZigwIT0oMHxhcltkPj4yXSkmaClmb3IoYz0wO3U9MjU1JigwfEF0KEEsMSkpLHRyW2UrNDE0KyhiPDw0KStjPj4wXT11LCgwfChjPWMrMXwwKSkhPSgwfGspOyk7aWYoaCl7dT0wO2Rve2lmKDB8dHJbZSszODIrKGI8PDQpK3U+PjBdKXtpZigyNTU8KChjPTB8ZnQoQSkpKzEyOHwwKT4+PjApe2M9MCx3PTI3O2JyZWFrIEF9aWYob3JbZSs0NDYrKGI8PDUpKyh1PDwxKT4+MV09KDE8PGNyW2E+PjBdKStjLGM9MHxmdChBKSwhKCgwLShsPTB8YXJbaT4+Ml0pfDApPD0oMHxjKSYoMHxjKTwoMHxsKSkpe2M9MCx3PTI3O2JyZWFrIEF9YyY9MjU1fWVsc2Ugb3JbZSs0NDYrKGI8PDUpKyh1PDwxKT4+MV09MTw8Y3JbYT4+MF0sYz0wO2lmKHRyW2UrNTEwKyhiPDw0KSt1Pj4wXT1jLDB8dHJbZSs0MTQrKGI8PDQpK3U+PjBdKXtpZigyNTU8KChjPTB8ZnQoQSkpKzEyOHwwKT4+PjApe2M9MCx3PTI3O2JyZWFrIEF9aWYob3JbKGw9ZSs1NDIrKGI8PDYpKyh1PDwyKXwwKT4+MV09KDE8PGNyW3M+PjBdKStjLGM9MHxmdChBKSxyPTB8YXJbbz4+Ml0sISgoMHxjKT49KDB8YnIociwtNCkpJigwfGMpPChyPDwyfDApKSl7Yz0wLHc9Mjc7YnJlYWsgQX1pZihjPXIrYy0oKGw9MHxicigwfG9yW2w+PjFdLHIpKT4+Y3Jbcz4+MF0pfDAsbD0wLXJ8MCx0cltlKzY3MCsoYjw8NSkrKHU8PDEpPj4wXT0oMHxjKTwoMHxsKT9sOigwfGMpPCgwfHIpP2M6cisyNTV8MCwyNTU8KChjPTB8ZnQoQSkpKzEyOHwwKT4+PjApe2M9MCx3PTI3O2JyZWFrIEF9aWYob3JbKGw9ZSs1NDIrKGI8PDYpKyh1PDwyKSsyfDApPj4xXT0oMTw8Y3Jbcz4+MF0pK2MsYz0wfGZ0KEEpLHI9MHxhcltvPj4yXSwhKCgwfGMpPj0oMHxicihyLC00KSkmKDB8Yyk8KHI8PDJ8MCkpKXtjPTAsdz0yNzticmVhayBBfWM9MjU1JigoMHwoYz1yK2MtKChsPTB8YnIoMHxvcltsPj4xXSxyKSk+PmNyW3M+PjBdKXwwKSk8KDB8KGw9MC1yfDApKT9sOigwfGMpPCgwfHIpP2M6cisyNTV8MCl9ZWxzZSBjPTE8PGNyW3M+PjBdJjY1NTM1LG9yW2UrNTQyKyhiPDw2KSsodTw8Mik+PjFdPWMsdHJbZSs2NzArKGI8PDUpKyh1PDwxKT4+MF09MCxvcltlKzU0MisoYjw8NikrKHU8PDIpKzI+PjFdPWMsYz0wO3RyW2UrNjcwKyhiPDw1KSsodTw8MSkrMT4+MF09Yyx1PXUrMXwwfXdoaWxlKCgwfHUpPCgwfGspKX19aWYoMjw9KDB8KGI9YisxfDApKSl7Yz0xLHc9Mjc7YnJlYWt9fXJldHVybiAyNz09KDB8dyk/MHxjOjB9ZnVuY3Rpb24gTGEoQSl7dmFyIGU9MCxyPTAsaT0wO2ZvcihhclsoQXw9MCk+PjJdPTAsdHJbQSs0Pj4wXT0wLHRyW0ErNT4+MF09MCxhcltBKzg+PjJdPTAsZT1BKzE2fCh0cltBKzEyPj4wXT0wKSxhcltBKzI4Pj4yXT0wLHRyW0ErMzI+PjBdPTAsYXJbZT4+Ml09MCxhcltlKzQ+PjJdPTAsZ2MoQSszNHwob3JbZSs4Pj4xXT0wKSksYXJbQSsxMzY+PjJdPTAsYXJbQSsxNDA+PjJdPTAsZT1hcltBKzE0ND4+Ml09MDt0cltBKzE0OCtlPj4wXT0wLGFyW0ErMTY0KyhlPDwyKT4+Ml09MCx0cltBKzIyOCtlPj4wXT0wLDE2IT0oKHRyW0ErMjQ0K2U+PjBdPTApfChlPWUrMXwoYXJbQSsyNjArKGU8PDIpPj4yXT0wKSkpOyk7Zm9yKGU9QSszMjR8MCxhcltBKzM3Nj4+Ml09MCx0cltBKzM4MD4+MF09MCxpPShyPWUpKzQ4fCh0cltBKzM4MT4+MF09MCk7KDB8KHI9cis0fChhcltyPj4yXT0wKSkpPCgwfGkpOyk7Zm9yKGU9dHJbZSs0OD4+MF09MDt0cltBKzM4MitlPj4wXT0wLHRyW0ErNDE0K2U+PjBdPTAsb3JbQSs0NDYrKGU8PDEpPj4xXT0wLHRyW0ErNTEwK2U+PjBdPTAsb3JbQSs1NDIrKGU8PDIpKzI+PjFdPTAsb3JbQSs1NDIrKGU8PDIpPj4xXT0wLDE2IT0oKHRyW0ErNjcwKyhlPDwxKSsxPj4wXT0wKXwoZT1lKzF8KHRyW0ErNjcwKyhlPDwxKT4+MF09MCkpKTspO2ZvcihlPTA7dHJbQSszOTgrZT4+MF09MCx0cltBKzQzMCtlPj4wXT0wLG9yW0ErNDc4KyhlPDwxKT4+MV09MCx0cltBKzUyNitlPj4wXT0wLG9yW0ErNjA2KyhlPDwyKSsyPj4xXT0wLG9yW0ErNjA2KyhlPDwyKT4+MV09MCwxNiE9KCh0cltBKzcwMisoZTw8MSkrMT4+MF09MCl8KGU9ZSsxfCh0cltBKzcwMisoZTw8MSk+PjBdPTApKSk7KTtmb3Iocj1BKzczNnwwLGFyW0ErNzU2Pj4yXT0wLGFyW0ErNzYwPj4yXT0wLHRyW0ErNzY0Pj4wXT0wLGFyW0ErNzY4Pj4yXT0wLGFyW0ErNzcyPj4yXT0wLGFyW3I+PjJdPTAsYXJbcis0Pj4yXT0wLGFyW3IrOD4+Ml09MCxhcltyKzEyPj4yXT0wLG9yW3IrMTY+PjFdPTAscj0odHJbcisxOD4+MF09MCl8YXJbQSs3NzY+PjJdLCgwfChlPTB8YXJbKGk9QSs3ODB8MCk+PjJdKSkhPSgwfHIpJiYoYXJbaT4+Ml09ZSsofigoZSstNC1yfDApPj4+Mik8PDIpKSxhclsoZT1BKzc4OHwwKT4+Ml09MCxhcltlKzQ+PjJdPTAsYXJbZSs4Pj4yXT0wLGFyW2UrMTI+PjJdPTAsYXJbZSsxNj4+Ml09MCxnYyhBKzgxMnwoYXJbZSsyMD4+Ml09MCkpLGU9YXJbQSs5MTI+PjJdPTA7YXJbQSs5MTYrKGU8PDYpPj4yXT0wLGFyW0ErMTA0NCsoZTw8Nik+PjJdPTAsYXJbQSsxMTcyKyhlPDw2KT4+Ml09MCx0cltBKzEzMDArKGU8PDQpPj4wXT0wLGFyW0ErOTE2KyhlPDw2KSs0Pj4yXT0wLGFyW0ErMTA0NCsoZTw8NikrND4+Ml09MCxhcltBKzExNzIrKGU8PDYpKzQ+PjJdPTAsdHJbQSsxMzAwKyhlPDw0KSsxPj4wXT0wLGFyW0ErOTE2KyhlPDw2KSs4Pj4yXT0wLGFyW0ErMTA0NCsoZTw8NikrOD4+Ml09MCxhcltBKzExNzIrKGU8PDYpKzg+PjJdPTAsdHJbQSsxMzAwKyhlPDw0KSsyPj4wXT0wLGFyW0ErOTE2KyhlPDw2KSsxMj4+Ml09MCxhcltBKzEwNDQrKGU8PDYpKzEyPj4yXT0wLGFyW0ErMTE3MisoZTw8NikrMTI+PjJdPTAsdHJbQSsxMzAwKyhlPDw0KSszPj4wXT0wLGFyW0ErOTE2KyhlPDw2KSsxNj4+Ml09MCxhcltBKzEwNDQrKGU8PDYpKzE2Pj4yXT0wLGFyW0ErMTE3MisoZTw8NikrMTY+PjJdPTAsdHJbQSsxMzAwKyhlPDw0KSs0Pj4wXT0wLGFyW0ErOTE2KyhlPDw2KSsyMD4+Ml09MCxhcltBKzEwNDQrKGU8PDYpKzIwPj4yXT0wLGFyW0ErMTE3MisoZTw8NikrMjA+PjJdPTAsdHJbQSsxMzAwKyhlPDw0KSs1Pj4wXT0wLGFyW0ErOTE2KyhlPDw2KSsyND4+Ml09MCxhcltBKzEwNDQrKGU8PDYpKzI0Pj4yXT0wLGFyW0ErMTE3MisoZTw8NikrMjQ+PjJdPTAsdHJbQSsxMzAwKyhlPDw0KSs2Pj4wXT0wLGFyW0ErOTE2KyhlPDw2KSsyOD4+Ml09MCxhcltBKzEwNDQrKGU8PDYpKzI4Pj4yXT0wLGFyW0ErMTE3MisoZTw8NikrMjg+PjJdPTAsdHJbQSsxMzAwKyhlPDw0KSs3Pj4wXT0wLGFyW0ErOTE2KyhlPDw2KSszMj4+Ml09MCxhcltBKzEwNDQrKGU8PDYpKzMyPj4yXT0wLGFyW0ErMTE3MisoZTw8NikrMzI+PjJdPTAsdHJbQSsxMzAwKyhlPDw0KSs4Pj4wXT0wLGFyW0ErOTE2KyhlPDw2KSszNj4+Ml09MCxhcltBKzEwNDQrKGU8PDYpKzM2Pj4yXT0wLGFyW0ErMTE3MisoZTw8NikrMzY+PjJdPTAsdHJbQSsxMzAwKyhlPDw0KSs5Pj4wXT0wLGFyW0ErOTE2KyhlPDw2KSs0MD4+Ml09MCxhcltBKzEwNDQrKGU8PDYpKzQwPj4yXT0wLGFyW0ErMTE3MisoZTw8NikrNDA+PjJdPTAsdHJbQSsxMzAwKyhlPDw0KSsxMD4+MF09MCxhcltBKzkxNisoZTw8NikrNDQ+PjJdPTAsYXJbQSsxMDQ0KyhlPDw2KSs0ND4+Ml09MCxhcltBKzExNzIrKGU8PDYpKzQ0Pj4yXT0wLHRyW0ErMTMwMCsoZTw8NCkrMTE+PjBdPTAsYXJbQSs5MTYrKGU8PDYpKzQ4Pj4yXT0wLGFyW0ErMTA0NCsoZTw8NikrNDg+PjJdPTAsYXJbQSsxMTcyKyhlPDw2KSs0OD4+Ml09MCx0cltBKzEzMDArKGU8PDQpKzEyPj4wXT0wLGFyW0ErOTE2KyhlPDw2KSs1Mj4+Ml09MCxhcltBKzEwNDQrKGU8PDYpKzUyPj4yXT0wLGFyW0ErMTE3MisoZTw8NikrNTI+PjJdPTAsdHJbQSsxMzAwKyhlPDw0KSsxMz4+MF09MCxhcltBKzkxNisoZTw8NikrNTY+PjJdPTAsYXJbQSsxMDQ0KyhlPDw2KSs1Nj4+Ml09MCxhcltBKzExNzIrKGU8PDYpKzU2Pj4yXT0wLHRyW0ErMTMwMCsoZTw8NCkrMTQ+PjBdPTAsYXJbQSs5MTYrKGU8PDYpKzYwPj4yXT0wLGFyW0ErMTA0NCsoZTw8NikrNjA+PjJdPTAsMiE9KChhcltBKzExNzIrKGU8PDYpKzYwPj4yXT0wKXwoZT1lKzF8KHRyW0ErMTMwMCsoZTw8NCkrMTU+PjBdPTApKSk7KTtlPTB8YXJbQSsxMzQ0Pj4yXSwoMHwoaT0wfGFyWyhyPUErMTM0OHwwKT4+Ml0pKSE9KDB8ZSkmJihhcltyPj4yXT1pKyh+KChpKy00LWV8MCk+Pj4yKTw8MikpLHRyWyhBPUErMTM0MHwwKT4+MF09MH1mdW5jdGlvbiBLYSgpe3ZhciBBPTAsZT0wLHI9MCxpPTAsZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wLGQ9MCxrPTAsaD0wLHc9MCx2PTAsbT0wLGc9MDtpZighKEE9MHx5YygxMTI5NikpKXJldHVybihnPTApfGc7dmIoMHxBLC0xLDExMjk2KSxhclsxNDMyN109QSxhclsxNDMyOF09QSxhclsxNDMyOV09QSxhclsxNDMzMF09QSxhclsxNDMzMV09QSxhclsxNDMzMl09QSxhclsxNDMzM109QSxiPShhclsxNDMzNF09QSkrMTZ8MCxhclsxNDMzNV09YixhclsxNDMzNl09YixhclsxNDMzN109YixhclsxNDMzOF09YixhclsxNDMzOV09YixhclsxNDM0MF09YixhclsxNDM0MV09YixhclsxNDM0Ml09YixhclsxNDM0M109QSszMixhclsxNDM0NF09QSs5NixhclsxNDM0NV09QSsxNjAsYXJbMTQzNDZdPUErMjI0LGFyWzE0MzQ3XT1BKzI4OCxhclsxNDM0OF09QSszNTIsYXJbMTQzNDldPUErNDE2LGFyWzE0MzUwXT1BKzQ4MCxhclsxNDM1MV09QSs1NDQsYXJbMTQzNTJdPUErNjA4LGFyWzE0MzUzXT1BKzY3MixhclsxNDM1NF09QSs3MzYsYXJbMTQzNTVdPUErODAwLGFyWzE0MzU2XT1BKzg2NCxhclsxNDM1N109QSs5MjgsYXJbMTQzNThdPUErOTkyLGI9QSsxMDU2fDAsYXJbMTQzNTldPWIsYXJbMTQzNjNdPWIsYj1BKzEzMTJ8MCxhclsxNDM2MF09YixhclsxNDM2NF09YixiPUErMTU2OHwwLGFyWzE0MzYxXT1iLGFyWzE0MzY1XT1iLGI9QSsxODI0fDAsYXJbMTQzNjJdPWIsYXJbMTQzNjZdPWIsYj1BKzIwODB8MCxhclsxNDM2N109YixhclsxNDM3MV09YixiPUErMjMzNnwwLGFyWzE0MzY4XT1iLGFyWzE0MzcyXT1iLGI9QSsyNTkyfDAsYXJbMTQzNjldPWIsYXJbMTQzNzNdPWIsYj1BKzI4NDh8MCxhclsxNDM3MF09YixhclsxNDM3NF09YixiPUErMzEwNHwwLGFyWzE0Mzc1XT1iLGFyWzE0Mzc5XT1iLGI9QSs0MTI4fDAsYXJbMTQzNzZdPWIsYXJbMTQzODBdPWIsYj1BKzUxNTJ8MCxhclsxNDM3N109YixhclsxNDM4MV09YixiPUErNjE3NnwwLGFyWzE0Mzc4XT1iLGFyWzE0MzgyXT1iLGI9QSs3MjAwfDAsYXJbMTQzODNdPWIsYXJbMTQzODddPWIsYj1BKzgyMjR8MCxhclsxNDM4NF09YixhclsxNDM4OF09YixiPUErOTI0OHwwLGFyWzE0Mzg1XT1iLGFyWzE0Mzg5XT1iLGI9QSsxMDI3MnwwLGFyWzE0Mzg2XT1iLGFyWzE0MzkwXT1iLGI9MjtBOmZvcig7Oyl7ZD0xPT0oMHwoaD0ocz0xPDxiKT4+MikpLGs9YistMnwwLGg9Mj09KDB8aCksdT0wO2Rve3c9MD09KDB8dSksbD0wO2Rve3Y9MD09KDB8bCk/OToxNSxjPTA7ZG97bT01NzMwOCsoazw8NikrKHU8PDUpKyhsPDw0KSsoYzw8Mil8MCxhPTA7ZG97aWYoaT1hPDwyLGc9YTw8YixmPTAtYXwwLG49YT4+MixvPTA9PSgwfCh0PTMmYSkpPzI6MT09KDB8dCkmMSxkKXtlPTA7ZG97aWYoQT0wfGNyWzQxNDg5KyhlK2kpPj4wXSxBPXc/QTpBKzI3fDAscj0oMHxhclttPj4yXSkrKGUrZyl8MCwhKChvPTB8dHJbcj4+MF0pPDwyND4+MjQ9PS0xfCgyNTUmb3wwKT09KDB8QSkpKXtlPTI4O2JyZWFrIEF9dHJbcj4+MF09QSxlPWUrMXwwfXdoaWxlKCgwfGUpPCgwfHMpKX1lbHNle3I9MDtkb3tkb3tpZigoMHxyKSE9KDB8Zikpe3N3aXRjaChlPXI+PjIsQT0zJnIsMHxjKXtjYXNlIDA6QT0yPChBPUErdHwwKT4+PjA/MDowfEE/MToyO2JyZWFrO2Nhc2UgMTpBPW87YnJlYWs7Y2FzZSAyOkE9MD09KDB8QSk/MjoxPT0oMHxBKSYxO2JyZWFrO2RlZmF1bHQ6QT0yfWlmKHcpe2lmKEE9MDwoZStufDApP0ErM3wwOkEsaCl7QT1BK3Z8MDticmVha31BPUErMjF8MDticmVha31pZihoKXtBPUErOXwwO2JyZWFrfUE9QSsxMnwwO2JyZWFrfUE9MH13aGlsZSgwKTtpZihBPXc/QTpBKzI3fDAsZT0oMHxhclttPj4yXSkrKHIrZyl8MCwhKChpPTB8dHJbZT4+MF0pPDwyND4+MjQ9PS0xfCgyNTUmaXwwKT09KDB8QSkpKXtlPTI4O2JyZWFrIEF9dHJbZT4+MF09QSxyPXIrMXwwfXdoaWxlKCgwfHIpPCgwfHMpKX1hPWErMXwwfXdoaWxlKCgwfGEpPCgwfHMpKTtjPWMrMXwwfXdoaWxlKCgwfGMpPDQpO2w9bCsxfDB9d2hpbGUoKDB8bCk8Mik7dT11KzF8MH13aGlsZSgoMHx1KTwyKTtpZig2PD0oMHwoYj1iKzF8MCkpKXtBPTEsZT0zMDticmVha319aWYoMjg9PSgwfGUpKXNyKDQxNTA1LDM5MjQyLDIxMDAsNDE1ODEpO2Vsc2UgaWYoMzA9PSgwfGUpKXJldHVybiAwfEE7cmV0dXJuIDB9ZnVuY3Rpb24gcWEoKXtCYygwfGFyWzE0MzI3XSksYXJbMTQzMjddPTB9ZnVuY3Rpb24gJGEoQSl7dmFyIGUscj0wO2ZvcihhclsoQXw9MCkrNDcyMD4+Ml09MCxhcltBKzQ3MjQ+PjJdPTAsZnVuY3Rpb24oQSl7dmFyIGUscj0wLGk9MDtmb3IodHJbKEF8PTApPj4wXT0wLG9yWyhyPUErMnwwKT4+MV09MCxvcltyKzI+PjFdPTAsb3Jbcis0Pj4xXT0wLHRyW3IrNj4+MF09MCxhcltBKzEyPj4yXT01LHRyW0ErMTY+PjBdPTAsdHJbQSsxNz4+MF09MCx0cltBKzE4Pj4wXT0yLHRyW0ErMTk+PjBdPTIsdHJbQSsyMD4+MF09MixhcltBKzQ4Pj4yXT0wLGFyW0ErNTI+PjJdPTAscj1BKzYwfCh0cltBKzU2Pj4wXT0wKSxlPShpPUErMjF8MCkrMjR8MDsoMHwoaT1pKzF8KHRyW2k+PjBdPTApKSk8KDB8ZSk7KTthcltyPj4yXT0xLHRyW0ErNjQ+PjBdPTAsdHJbQSs2NT4+MF09MCx0cltBKzY2Pj4wXT0wLHRyW0ErNjc+PjBdPTEsdHJbQSs2OD4+MF09MCxvcltBKzcwPj4xXT0wLHRyW0ErNzI+PjBdPTIsdHJbQSs3Mz4+MF09MSx0cltBKzc0Pj4wXT0xNSx0cltBKzc1Pj4wXT0xNX0oQSs0OTA0fChhcltBKzQ3Mjg+PjJdPTApKSxlPShyPUErNDk4NHwwKSs5fDA7KDB8KHI9cisxfCh0cltyPj4wXT0wKSkpPCgwfGUpOyk7dHJbQT4+MF09MH1mdW5jdGlvbiBBYyhBKXt2YXIgZSxyOyhyPTB8YXJbKEF8PTApKzQ3MjA+PjJdKSYmKCgwfChlPTB8YXJbKEE9QSs0NzI0fDApPj4yXSkpIT0oMHxyKSYmKGFyW0E+PjJdPWUrKDEwMCp+KCgoZS0xMDAtcnwwKT4+PjApLzEwMHwwKXwwKSksdnUocikpfWZ1bmN0aW9uIGVjKEEsZSxyLGkpe0F8PTAsZXw9MCxyfD0wLGl8PTA7dmFyIGYsbix0LG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wLG09MDt1cj0odD11cikrNjI0MHwwLG49KGY9dCkrOTZ8MCxsPTA7QTpmb3IoOzspe2s9KGQ9Mz09KDB8bCkpPzI6Nix3PTMhPSgwfGwpLGI9KGg9MD09KDB8bCkpPzE2OjY0LHM9MTwoMHxsKSx1PTA7ZG97Yz1uKyh1PDwxMCl8MCxvPWQmMT09KDB8dSk7ZG97aWYoISgoMjU1JigwfEF0KEEsMSkpKTw8MjQ+PjI0KSl7aWYoLTk5OTk5PT0oMHwoZT0wfGl0KEEpKSl8KDB8dSk8KDB8ZSkpe2E9MzE7YnJlYWsgQX1pZihhclsoaT1mKygyNCpsfDApKyh1PDwyKXwwKT4+Ml09MTYsMHxlKXtpZighKHd8MT09KDB8ZSkpKXthPTEzO2JyZWFrIEF9aGIoMHxjLG4rKChvPXUtZXwwKTw8MTApfDAsMHxiKSxvPTB8YXJbZisoMjQqbHwwKSsobzw8Mik+PjJdLGFyW2k+PjJdPW8sYT0yMTticmVha31pZihoKXtmb3IoaT00MTY0NixvPShlPWMpKzE2fDA7dHJbZT4+MF09MHx0cltpPj4wXSxpPWkrMXwwLCgwfChlPWUrMXwwKSk8KDB8byk7KTthPTIyO2JyZWFrfWlmKCgwfHUpPDMmKDFebykpe2ZvcihpPTQxNjYyLG89KGU9YykrNjR8MDt0cltlPj4wXT0wfHRyW2k+PjBdLGk9aSsxfDAsKDB8KGU9ZSsxfDApKTwoMHxvKTspO289MTYsYT0yMTticmVha31mb3IoaT00MTcyNixvPShlPWMpKzY0fDA7dHJbZT4+MF09MHx0cltpPj4wXSxpPWkrMXwwLCgwfChlPWUrMXwwKSk8KDB8byk7KTtvPTE2LGE9MjE7YnJlYWt9aWYocyl7aWYoMjU0PCgoZT0wfGZ0KEEpKSs3fDApPj4+MCl7YT0zMTticmVhayBBfW89ZSs4fDAsZT1hcltmKygyNCpsfDApKyh1PDwyKT4+Ml09b31lbHNlIGU9OCxvPTE2O2ZvcihhPTA7Oyl7aWYoMjU1PCgoaT0wfGZ0KEEpKSsxMjh8MCk+Pj4wKXthPTMxO2JyZWFrIEF9aWYoZT0oZSsyNTYraXwwKSUyNTZ8MCx0cltuKyh1PDwxMCkrYT4+MF09ZSwoMHxiKTw9KDB8KGE9YSsxfDApKSl7YT0yMTticmVha319fXdoaWxlKDApO2U6ZG97aWYoMjE9PSgwfGEpKXN3aXRjaCgoYT0wKXxsKXtjYXNlIDA6YT0yMjticmVhayBlO2Nhc2UgMTpmb3IoaT0wfF9hKDMsMCksZT0wO3RyWygoMHxjcltpKyhlPDwxKSsxPj4wXSk8PDMpKygwfGNyW2krKGU8PDEpPj4wXSkrKHIrOTYrKHU8PDYpKT4+MF09MHx0cltuKyh1PDwxMCkrZT4+MF0sNjQhPSgwfChlPWUrMXwwKSk7KTticmVhaztjYXNlIDI6Zm9yKGk9MHxfYSgzLDApLGU9MDtjPWkrKGU8PDEpfDAsdj1pKyhlPDwxKSsxfDAsbT0wfHRyW24rKHU8PDEwKStlPj4wXSx0clsoKDB8Y3Jbdj4+MF0pPDw1KSsoKDB8Y3JbYz4+MF0pPDwxKSsocis0ODArKHU8PDgpKT4+MF09bSx0clsoKDB8Y3JbYz4+MF0pPDwxfDEpKygoMHxjclt2Pj4wXSk8PDUpKyhyKzQ4MCsodTw8OCkpPj4wXT1tLHRyWygoMHxjclt2Pj4wXSk8PDV8MTYpKygoMHxjcltjPj4wXSk8PDEpKyhyKzQ4MCsodTw8OCkpPj4wXT1tLHRyWygoMHxjclt2Pj4wXSk8PDV8MTYpKygoMHxjcltjPj4wXSk8PDF8MSkrKHIrNDgwKyh1PDw4KSk+PjBdPW0sNjQhPSgwfChlPWUrMXwwKSk7KTt0cltyKzQ4MCsodTw8OCk+PjBdPW87YnJlYWsgZTtjYXNlIDM6ZmMobT1yKzIwMTYrKHU8PDEwKXwwLGMsMyksdHJbbT4+MF09bzticmVhayBlO2RlZmF1bHQ6YnJlYWsgZX19d2hpbGUoMCk7aWYoMjI9PSgwfGEpKWZvcihpPTB8X2EoMiwwKSxlPTA7dHJbKCgwfGNyW2krKGU8PDEpKzE+PjBdKTw8MikrKDB8Y3JbaSsoZTw8MSk+PjBdKSsocisodTw8NCkpPj4wXT0wfHRyW24rKHU8PDEwKStlPj4wXSwxNiE9KDB8KGU9ZSsxfDApKTspO3U9dSsxfDB9d2hpbGUoKDB8dSk8KDB8aykpO2lmKDQ8PSgwfChsPWwrMXwwKSkpe2U9MCxhPTMyO2JyZWFrfX1pZigxMz09KDB8YSkpc3IoNDE4MTAsNDE2MzksODczLDQxODQ3KTtlbHNle2lmKDMxPT0oMHxhKSlyZXR1cm4gdXI9dCwwfChtPTgpO2lmKDMyPT0oMHxhKSlyZXR1cm4gdXI9dCwwfGV9cmV0dXJuIDB9ZnVuY3Rpb24gcmMoQSl7QXw9MDt2YXIgZT0wLHI9MCxpPTAsZj0wLG49MCx0PTAsbz0wO2ZvcihyPTB8X2EoMiwwKSxlPTA7dHJbQSsoKCgwfGNyW3IrKGU8PDEpKzE+PjBdKTw8MikrKDB8Y3JbcisoZTw8MSk+PjBdKSk+PjBdPTB8dHJbNDE2NDYrZT4+MF0sMTYhPSgwfChlPWUrMXwwKSk7KTtmb3Iocj0wfF9hKDIsMCksZT0wO3RyWygoMHxjcltyKyhlPDwxKSsxPj4wXSk8PDIpKygwfGNyW3IrKGU8PDEpPj4wXSkrKEErMTYpPj4wXT0wfHRyWzQxNjQ2K2U+PjBdLDE2IT0oMHwoZT1lKzF8MCkpOyk7Zm9yKHI9MHxfYSgyLDApLGU9MDt0clsoKDB8Y3JbcisoZTw8MSkrMT4+MF0pPDwyKSsoMHxjcltyKyhlPDwxKT4+MF0pKyhBKzMyKT4+MF09MHx0cls0MTY0NitlPj4wXSwxNiE9KDB8KGU9ZSsxfDApKTspO2ZvcihyPTB8X2EoMiwwKSxlPTA7dHJbKCgwfGNyW3IrKGU8PDEpKzE+PjBdKTw8MikrKDB8Y3JbcisoZTw8MSk+PjBdKSsoQSs0OCk+PjBdPTB8dHJbNDE2NDYrZT4+MF0sMTYhPSgwfChlPWUrMXwwKSk7KTtmb3Iocj0wfF9hKDIsMCksZT0wO3RyWygoMHxjcltyKyhlPDwxKSsxPj4wXSk8PDIpKygwfGNyW3IrKGU8PDEpPj4wXSkrKEErNjQpPj4wXT0wfHRyWzQxNjQ2K2U+PjBdLDE2IT0oMHwoZT1lKzF8MCkpOyk7Zm9yKHI9MHxfYSgyLDApLGU9MDt0clsoKDB8Y3JbcisoZTw8MSkrMT4+MF0pPDwyKSsoMHxjcltyKyhlPDwxKT4+MF0pKyhBKzgwKT4+MF09MHx0cls0MTY0NitlPj4wXSwxNiE9KDB8KGU9ZSsxfDApKTspO2ZvcihyPTB8X2EoMywwKSxlPTA7dHJbKCgwfGNyW3IrKGU8PDEpKzE+PjBdKTw8MykrKDB8Y3JbcisoZTw8MSk+PjBdKSsoQSs5Nik+PjBdPTB8dHJbNDE2NjIrZT4+MF0sNjQhPSgwfChlPWUrMXwwKSk7KTtmb3Iocj0wfF9hKDMsMCksZT0wO3RyWygoMHxjcltyKyhlPDwxKSsxPj4wXSk8PDMpKygwfGNyW3IrKGU8PDEpPj4wXSkrKEErMjg4KT4+MF09MHx0cls0MTcyNitlPj4wXSw2NCE9KDB8KGU9ZSsxfDApKTspO2ZvcihyPTB8X2EoMywwKSxlPTA7dHJbKCgwfGNyW3IrKGU8PDEpKzE+PjBdKTw8MykrKDB8Y3JbcisoZTw8MSk+PjBdKSsoQSsxNjApPj4wXT0wfHRyWzQxNjYyK2U+PjBdLDY0IT0oMHwoZT1lKzF8MCkpOyk7Zm9yKHI9MHxfYSgzLDApLGU9MDt0clsoKDB8Y3JbcisoZTw8MSkrMT4+MF0pPDwzKSsoMHxjcltyKyhlPDwxKT4+MF0pKyhBKzM1Mik+PjBdPTB8dHJbNDE3MjYrZT4+MF0sNjQhPSgwfChlPWUrMXwwKSk7KTtmb3Iocj0wfF9hKDMsMCksZT0wO3RyWygoMHxjcltyKyhlPDwxKSsxPj4wXSk8PDMpKygwfGNyW3IrKGU8PDEpPj4wXSkrKEErMjI0KT4+MF09MHx0cls0MTY2MitlPj4wXSw2NCE9KDB8KGU9ZSsxfDApKTspO2ZvcihyPTB8X2EoMywwKSxlPTA7dHJbKCgwfGNyW3IrKGU8PDEpKzE+PjBdKTw8MykrKDB8Y3JbcisoZTw8MSk+PjBdKSsoQSs0MTYpPj4wXT0wfHRyWzQxNzI2K2U+PjBdLDY0IT0oMHwoZT1lKzF8MCkpOyk7Zj0wO2Rve2ZvcihyPTB8X2EoMywwKSxlPTA7aT1yKyhlPDwxKXwwLHQ9NDE2NjIrZXwwLHRyWygoMHxjclsobj1yKyhlPDwxKSsxfDApPj4wXSk8PDUpKygoMHxjcltpPj4wXSk8PDEpKyhBKzQ4MCsoZjw8OCkpPj4wXT0wfHRyW3Q+PjBdLHRyWygoMHxjcltpPj4wXSk8PDF8MSkrKCgwfGNyW24+PjBdKTw8NSkrKEErNDgwKyhmPDw4KSk+PjBdPTB8dHJbdD4+MF0sdHJbKCgwfGNyW24+PjBdKTw8NXwxNikrKCgwfGNyW2k+PjBdKTw8MSkrKEErNDgwKyhmPDw4KSk+PjBdPTB8dHJbdD4+MF0sdHJbKCgwfGNyW24+PjBdKTw8NXwxNikrKCgwfGNyW2k+PjBdKTw8MXwxKSsoQSs0ODArKGY8PDgpKT4+MF09MHx0clt0Pj4wXSw2NCE9KDB8KGU9ZSsxfDApKTspO2ZvcihyPWYrM3wwLGk9MHxfYSgzLDApLGU9MDt0PWkrKGU8PDEpfDAsbz00MTcyNitlfDAsdHJbKCgwfGNyWyhuPWkrKGU8PDEpKzF8MCk+PjBdKTw8NSkrKCgwfGNyW3Q+PjBdKTw8MSkrKEErNDgwKyhyPDw4KSk+PjBdPTB8dHJbbz4+MF0sdHJbKCgwfGNyW3Q+PjBdKTw8MXwxKSsoKDB8Y3Jbbj4+MF0pPDw1KSsoQSs0ODArKHI8PDgpKT4+MF09MHx0cltvPj4wXSx0clsoKDB8Y3Jbbj4+MF0pPDw1fDE2KSsoKDB8Y3JbdD4+MF0pPDwxKSsoQSs0ODArKHI8PDgpKT4+MF09MHx0cltvPj4wXSx0clsoKDB8Y3Jbbj4+MF0pPDw1fDE2KSsoKDB8Y3JbdD4+MF0pPDwxfDEpKyhBKzQ4MCsocjw8OCkpPj4wXT0wfHRyW28+PjBdLDY0IT0oMHwoZT1lKzF8MCkpOyk7Zj1mKzF8MH13aGlsZSgzIT0oMHxmKSk7ZmMoQSsyMDE2fDAsNDE2NjIsMyksZmMoQSszMDQwfDAsNDE3MjYsMyl9ZnVuY3Rpb24gaWMoQSxlLHIpe3JldHVybiBBfD0wLGV8PTAsZT0yNTUmKDB8QXQocnw9MCwxKSksdHJbQT4+MF09ZSxlPTI1NSYoMHxBdChyLDEpKSx0cltBKzE+PjBdPWUsZT0yNTUmKDB8QXQociwxKSksdHJbQSsyPj4wXT1lLGU9MjU1JigwfEF0KHIsMSkpLHRyW0ErMz4+MF09ZSxlPTI1NSYoMHxBdChyLDEpKSx0cltBKzQ+PjBdPWUsZT0yNTUmKDB8QXQociwxKSksdHJbQSs1Pj4wXT1lLGU9MjU1JigwfEF0KHIsMSkpLHRyW0ErNj4+MF09ZSxlPTI1NSYoMHxBdChyLDEpKSx0cltBKzc+PjBdPWUscj0yNTUmKDB8QXQociwxKSksdHJbQSs4Pj4wXT1yLDB9ZnVuY3Rpb24gZmMoQSxlLHIpe0F8PTAsZXw9MDt2YXIgaT0wLGY9MCxuPTAsdD0wLG89MDtzd2l0Y2goMHwocnw9MCkpe2Nhc2UgMDpmb3IoaT0wfF9hKDIsMCkscj0wO3RyW0ErKCgoMHxjcltpKyhyPDwxKSsxPj4wXSk8PDIpKygwfGNyW2krKHI8PDEpPj4wXSkpPj4wXT0wfHRyW2Urcj4+MF0sMTYhPSgwfChyPXIrMXwwKSk7KTtyZXR1cm47Y2FzZSAxOmZvcihpPTB8X2EoMywwKSxyPTA7dHJbQSsoKCgwfGNyW2krKHI8PDEpKzE+PjBdKTw8MykrKDB8Y3JbaSsocjw8MSk+PjBdKSk+PjBdPTB8dHJbZStyPj4wXSw2NCE9KDB8KHI9cisxfDApKTspO3JldHVybjtjYXNlIDI6Zm9yKGk9MHxfYSgzLDApLHI9MDtvPWkrKHI8PDEpKzF8MCxuPWUrcnwwLHRyW0ErKCgoMHxjclsodD1pKyhyPDwxKXwwKT4+MF0pPDwxKSsoKDB8Y3Jbbz4+MF0pPDw1KSk+PjBdPTB8dHJbbj4+MF0sdHJbQSsoKCgwfGNyW3Q+PjBdKTw8MXwxKSsoKDB8Y3Jbbz4+MF0pPDw1KSk+PjBdPTB8dHJbbj4+MF0sdHJbQSsoKCgwfGNyW3Q+PjBdKTw8MSkrKCgwfGNyW28+PjBdKTw8NXwxNikpPj4wXT0wfHRyW24+PjBdLHRyW0ErKCgoMHxjclt0Pj4wXSk8PDF8MSkrKCgwfGNyW28+PjBdKTw8NXwxNikpPj4wXT0wfHRyW24+PjBdLDY0IT0oMHwocj1yKzF8MCkpOyk7cmV0dXJuO2Nhc2UgMzpmPTB8X2EoMywwKSxpPTA7ZG97Zm9yKG49ZisoaTw8MSl8MCx0PWYrKGk8PDEpKzF8MCxvPWUraXwwLHI9MDt0cltBKygoKDB8Y3Jbbj4+MF0pPDwyKSsoKCgwfGNyW3Q+PjBdKTw8Mikrcjw8NSkpPj4wXT0wfHRyW28+PjBdLHRyW0ErKCgoMHxjcltuPj4wXSk8PDJ8MSkrKCgoMHxjclt0Pj4wXSk8PDIpK3I8PDUpKT4+MF09MHx0cltvPj4wXSx0cltBKygoKDB8Y3Jbbj4+MF0pPDwyfDIpKygoKDB8Y3JbdD4+MF0pPDwyKStyPDw1KSk+PjBdPTB8dHJbbz4+MF0sdHJbQSsoKCgwfGNyW24+PjBdKTw8MnwzKSsoKCgwfGNyW3Q+PjBdKTw8Mikrcjw8NSkpPj4wXT0wfHRyW28+PjBdLDQhPSgwfChyPXIrMXwwKSk7KTtpPWkrMXwwfXdoaWxlKDY0IT0oMHxpKSk7cmV0dXJuO2RlZmF1bHQ6c3IoNDQ0NTYsNDE2MzksODEwLDQxNzkwKX19ZnVuY3Rpb24gbmMoQSxlLHIsaSxmKXtBfD0wLGV8PTAsaXw9MDt2YXIgbix0PTAsbz0wLGE9MCxjPTAsbD0wO2lmKHVyPShuPXVyKSsxNDR8MCxjPW4sND09KDB8KHJ8PTApKXwxPT0oMHwoZnw9MCkpKXVyPW47ZWxzZXtzd2l0Y2goZj0oMHwobD0oMHxmKTwyNj8yNi1mfDA6ZistMjZ8MCkpPCgwfChmPSgwfGYpPDEwPzEwLWZ8MDpmKy0xMHwwKSk/bDpmLDB8cil7Y2FzZSA4OnQ9NzticmVhaztjYXNlIDE2OnQ9MTticmVhaztjYXNlIDMyOnQ9MDticmVhaztkZWZhdWx0OnNyKDU1NzM5LDQ4Mjg5LDUxOCw0ODM2MSl9aWYoKDB8Zik8PSgwfHQpKXVyPW47ZWxzZXtpZihmPTMyPT0oMHxyKSYoMD09KDB8aSkmMCE9KDB8dHJbQSs1NjY1Pj4wXSkpJiYobz0wfGNyW2U+PjBdLCgwfCgoMHwobD0oMHxjcltlKzY0Pj4wXSkrby0oY3JbZSszMj4+MF08PDEpfDApKTwwPzAtbHwwOmwpKTwoMHwoYT0xPDwoMHxhcltBKzEyNzY+PjJdKS01KSkpPygwfCgoMHwoZj0oMHxjcltlKy02ND4+MF0pK28tKGNyW2UrLTMyPj4wXTw8MSl8MCkpPDA/MC1mfDA6ZikpPCgwfGEpOjAsaT1jKzY0fDAsYT0wfGJyKHIsLTIpLHRyW2krYT4+MF09MHx0cltlK2E+PjBdLHRyW2krKGE9cjw8MSk+PjBdPTB8dHJbZSthPj4wXSxmKWZvcih0PTB8dHJbZT4+MF0sdHJbaT4+MF09dCx0Jj0yNTUsQT0oMHxjcltlKy02ND4+MF0pLXR8MCxvPSgwfGNyW2UrNjQ+PjBdKS10fDAsZj0xO2w9KCgzMisoMHxicihBLGYpKXwwKT4+PjYpK3QmMjU1LHRyW2krKDAtZik+PjBdPWwsbD0oKDMyKygwfGJyKG8sZikpfDApPj4+NikrdCYyNTUsdHJbaStmPj4wXT1sLDY0IT0oMHwoZj1mKzF8MCkpOyk7ZWxzZSBpZigoMHwoZj0xLWF8MCkpPCgwfGEpKWZvcihmPTB8dHJbZSsodD1mKT4+MF07Yz1mLGY9MHx0cltlKyh0PShsPXQpKzF8MCk+PjBdLHRyW2krbD4+MF09KDIrKDI1NSZmKSsoKDI1NSZjKTw8MSkrKDB8Y3JbZSsobCstMSk+PjBdKXwwKT4+PjIsKDB8dCkhPSgwfGEpOyk7aGIoZSsobD0wLWF8MCl8MCxpK2x8MCxyPDwyfDEpLHVyPW59fX1mdW5jdGlvbiB0YyhBLGUscixpLGYpe0F8PTAsZXw9MCxpfD0wO3ZhciBuLHQ9MCxvPTAsYT0wLGM9MCxsPTA7aWYodXI9KG49dXIpKzI3MnwwLGM9biw0PT0oMHwocnw9MCkpfDE9PSgwfChmfD0wKSkpdXI9bjtlbHNle3N3aXRjaChmPSgwfChsPSgwfGYpPDI2PzI2LWZ8MDpmKy0yNnwwKSk8KDB8KGY9KDB8Zik8MTA/MTAtZnwwOmYrLTEwfDApKT9sOmYsMHxyKXtjYXNlIDg6dD03O2JyZWFrO2Nhc2UgMTY6dD0xO2JyZWFrO2Nhc2UgMzI6dD0wO2JyZWFrO2RlZmF1bHQ6c3IoNTU3MzksNDgyODksNTE4LDQ4MzYxKX1pZigoMHxmKTw9KDB8dCkpdXI9bjtlbHNle2lmKGY9MzI9PSgwfHIpJigwPT0oMHxpKSYwIT0oMHx0cltBKzU2NjU+PjBdKSkmJihvPTB8bHJbZT4+MV0sKDB8KCgwfChsPSgwfGxyW2UrMTI4Pj4xXSkrby0obHJbZSs2ND4+MV08PDEpfDApKTwwPzAtbHwwOmwpKTwoMHwoYT0xPDwoMHxhcltBKzEyNzY+PjJdKS01KSkpPygwfCgoMHwoZj0oMHxscltlKy0xMjg+PjFdKStvLShscltlKy02ND4+MV08PDEpfDApKTwwPzAtZnwwOmYpKTwoMHxhKTowLGk9YysxMjh8MCxhPTB8YnIociwtMiksb3JbaSsoYTw8MSk+PjFdPTB8b3JbZSsoYTw8MSk+PjFdLG9yW2krKChhPXI8PDEpPDwxKT4+MV09MHxvcltlKyhhPDwxKT4+MV0sZilmb3IodD0wfG9yW2U+PjFdLG9yW2k+PjFdPXQsdCY9NjU1MzUsQT0oMHxscltlKy0xMjg+PjFdKS10fDAsbz0oMHxscltlKzEyOD4+MV0pLXR8MCxmPTE7bD0oKDMyKygwfGJyKEEsZikpfDApPj4+NikrdCY2NTUzNSxvcltpKygwLWY8PDEpPj4xXT1sLGw9KCgzMisoMHxicihvLGYpKXwwKT4+PjYpK3QmNjU1MzUsb3JbaSsoZjw8MSk+PjFdPWwsNjQhPSgwfChmPWYrMXwwKSk7KTtlbHNlIGlmKCgwfChmPTEtYXwwKSk8KDB8YSkpZm9yKGY9MHxvcltlKygodD1mKTw8MSk+PjFdO2M9ZixmPTB8b3JbZSsoKHQ9KGw9dCkrMXwwKTw8MSk+PjFdLG9yW2krKGw8PDEpPj4xXT0oMisoNjU1MzUmZikrKCg2NTUzNSZjKTw8MSkrKDB8bHJbZSsobCstMTw8MSk+PjFdKXwwKT4+PjIsKDB8dCkhPSgwfGEpOyk7aGIoZSsoKGw9MC1hfDApPDwxKXwwLGkrKGw8PDEpfDAscjw8M3wyKSx1cj1ufX19ZnVuY3Rpb24gb2MoQSl7YXJbKEF8PTApKzg+PjJdPTE3MzI1ODQxOTMsYXJbQSsxMj4+Ml09LTI3MTczMzg3OSxhcltBKzE2Pj4yXT0tMTczMjU4NDE5NCxhcltBKzIwPj4yXT0yNzE3MzM4NzgsYXJbQT4+Ml09MCxhcltBKzQ+PjJdPTB9ZnVuY3Rpb24gYWMoQSxlLHIpe2V8PTAscnw9MDt2YXIgaSxmLG49MCx0PTA7Zj0odD0wfGFyWyhBfD0wKT4+Ml0pK3ImNTM2ODcwOTExLGFyW0E+PjJdPWYsbj0wfGFyWyhpPUErNHwwKT4+Ml0sZj4+PjA8dD4+PjAmJihuPW4rMXwwLGFyW2k+PjJdPW4pLGFyW2k+PjJdPW4rKHI+Pj4yOSksbj02MyZ0O2Rve2lmKG4pe2lmKHQ9NjQtbnwwLG49QSsyNCtufDAsdD4+PjA8PXI+Pj4wKXtoYigwfG4sMHxlLDB8dCksY2MoQSxBKzI0fDAsNjQpLGU9ZSt0fDAscj1yLXR8MDticmVha31yZXR1cm4gdm9pZCBoYigwfG4sMHxlLDB8cil9fXdoaWxlKDApOzYzPHI+Pj4wJiYoZT0wfGNjKEEsZSwtNjQmciksciY9NjMpLGhiKEErMjR8MCwwfGUsMHxyKX1mdW5jdGlvbiBjYyhBLGUscil7ZXw9MCxyfD0wO3ZhciBpLGYsbix0LG8sYSxjLGwsdSxiLHMsZCxrLGgsdyx2LG0sZyxaLHAseT0wLEI9MCxFPTAsWD0wLFc9MCxJPTAsQz0wLEc9MCxWPTAsRj0wLFI9MCxOPTAsXz0wLFk9MCxRPTAsRD0wLEo9MCxNPTAsVD0wLFU9MCxTPTAsTz0wLHo9MCxqPTA7Zm9yKGc9KEF8PTApKzEyfDAsWj1BKzE2fDAscD1BKzIwfDAsZj1BKzg4fDAsbj1BKzkyfDAsdD1BKzk2fDAsbz1BKzEwMHwwLGE9QSsxMDR8MCxjPUErMTA4fDAsbD1BKzExMnwwLHU9QSsxMTZ8MCxiPUErMTIwfDAscz1BKzEyNHwwLGQ9QSsxMjh8MCxrPUErMTMyfDAsaD1BKzEzNnwwLHc9QSsxNDB8MCx2PUErMTQ0fDAsaT1BKzE0OHwwLEE9MHxhclsobT1BKzh8MCk+PjJdLHk9MHxhcltnPj4yXSxCPTB8YXJbcD4+Ml0sRT0wfGFyW1o+PjJdO1g9KDB8Y3JbZSsxPj4wXSk8PDh8MHxjcltlPj4wXXwoMHxjcltlKzI+PjBdKTw8MTZ8KDB8Y3JbZSszPj4wXSk8PDI0LFg9KChYPUErLTY4MDg3NjkzNisoeSYoQl5FKV5CKSsoYXJbZj4+Ml09WCl8MCk8PDd8WD4+PjI1KSt5fDAsVz0oMHxjcltlKzU+PjBdKTw8OHwwfGNyW2UrND4+MF18KDB8Y3JbZSs2Pj4wXSk8PDE2fCgwfGNyW2UrNz4+MF0pPDwyNCxXPSgoVz1CKy0zODk1NjQ1ODYrKGFyW24+PjJdPVcpKyhYJih5XkUpXkUpfDApPDwxMnxXPj4+MjApK1h8MCxJPSgwfGNyW2UrOT4+MF0pPDw4fDB8Y3JbZSs4Pj4wXXwoMHxjcltlKzEwPj4wXSk8PDE2fCgwfGNyW2UrMTE+PjBdKTw8MjQsST0oKEk9RSs2MDYxMDU4MTkrKGFyW3Q+PjJdPUkpKyhXJihYXnkpXnkpfDApPDwxN3xJPj4+MTUpK1d8MCxqPSgwfGNyW2UrMTM+PjBdKTw8OHwwfGNyW2UrMTI+PjBdfCgwfGNyW2UrMTQ+PjBdKTw8MTZ8KDB8Y3JbZSsxNT4+MF0pPDwyNCxqPSgoaj15Ky0xMDQ0NTI1MzMwKyhhcltvPj4yXT1qKSsoSSYoV15YKV5YKXwwKTw8MjJ8aj4+PjEwKStJfDAsWT0oMHxjcltlKzE3Pj4wXSk8PDh8MHxjcltlKzE2Pj4wXXwoMHxjcltlKzE4Pj4wXSk8PDE2fCgwfGNyW2UrMTk+PjBdKTw8MjQsWT0oKFk9WCstMTc2NDE4ODk3KyhhclthPj4yXT1ZKSsoaiYoSV5XKV5XKXwwKTw8N3xZPj4+MjUpK2p8MCxYPSgwfGNyW2UrMjE+PjBdKTw8OHwwfGNyW2UrMjA+PjBdfCgwfGNyW2UrMjI+PjBdKTw8MTZ8KDB8Y3JbZSsyMz4+MF0pPDwyNCxYPSgoWD1XKzEyMDAwODA0MjYrKGFyW2M+PjJdPVgpKyhZJihqXkkpXkkpfDApPDwxMnxYPj4+MjApK1l8MCxXPSgwfGNyW2UrMjU+PjBdKTw8OHwwfGNyW2UrMjQ+PjBdfCgwfGNyW2UrMjY+PjBdKTw8MTZ8KDB8Y3JbZSsyNz4+MF0pPDwyNCxXPSgoVz1JKy0xNDczMjMxMzQxKyhhcltsPj4yXT1XKSsoWCYoWV5qKV5qKXwwKTw8MTd8Vz4+PjE1KStYfDAsST0oMHxjcltlKzI5Pj4wXSk8PDh8MHxjcltlKzI4Pj4wXXwoMHxjcltlKzMwPj4wXSk8PDE2fCgwfGNyW2UrMzE+PjBdKTw8MjQsST0oKEk9aistNDU3MDU5ODMrKGFyW3U+PjJdPUkpKyhXJihYXlkpXlkpfDApPDwyMnxJPj4+MTApK1d8MCxqPSgwfGNyW2UrMzM+PjBdKTw8OHwwfGNyW2UrMzI+PjBdfCgwfGNyW2UrMzQ+PjBdKTw8MTZ8KDB8Y3JbZSszNT4+MF0pPDwyNCxqPSgoaj1ZKzE3NzAwMzU0MTYrKGFyW2I+PjJdPWopKyhJJihXXlgpXlgpfDApPDw3fGo+Pj4yNSkrSXwwLFk9KDB8Y3JbZSszNz4+MF0pPDw4fDB8Y3JbZSszNj4+MF18KDB8Y3JbZSszOD4+MF0pPDwxNnwoMHxjcltlKzM5Pj4wXSk8PDI0LFg9KChYPShhcltzPj4yXT1ZKSstMTk1ODQxNDQxNytYKyhqJihJXlcpXlcpfDApPDwxMnxYPj4+MjApK2p8MCxZPSgwfGNyW2UrNDE+PjBdKTw8OHwwfGNyW2UrNDA+PjBdfCgwfGNyW2UrNDI+PjBdKTw8MTZ8KDB8Y3JbZSs0Mz4+MF0pPDwyNCxXPSgoVz0oYXJbZD4+Ml09WSkrLTQyMDYzK1crKFgmKGpeSSleSSl8MCk8PDE3fFc+Pj4xNSkrWHwwLFk9KDB8Y3JbZSs0NT4+MF0pPDw4fDB8Y3JbZSs0ND4+MF18KDB8Y3JbZSs0Nj4+MF0pPDwxNnwoMHxjcltlKzQ3Pj4wXSk8PDI0LEk9KChJPShhcltrPj4yXT1ZKSstMTk5MDQwNDE2MitJKyhXJihYXmopXmopfDApPDwyMnxJPj4+MTApK1d8MCxZPSgwfGNyW2UrNDk+PjBdKTw8OHwwfGNyW2UrNDg+PjBdfCgwfGNyW2UrNTA+PjBdKTw8MTZ8KDB8Y3JbZSs1MT4+MF0pPDwyNCxqPSgoaj0oYXJbaD4+Ml09WSkrMTgwNDYwMzY4MitqKyhJJihXXlgpXlgpfDApPDw3fGo+Pj4yNSkrSXwwLFk9KDB8Y3JbZSs1Mz4+MF0pPDw4fDB8Y3JbZSs1Mj4+MF18KDB8Y3JbZSs1ND4+MF0pPDwxNnwoMHxjcltlKzU1Pj4wXSk8PDI0LFg9KChYPShhclt3Pj4yXT1ZKSstNDAzNDExMDErWCsoaiYoSV5XKV5XKXwwKTw8MTJ8WD4+PjIwKStqfDAsWT0oMHxjcltlKzU3Pj4wXSk8PDh8MHxjcltlKzU2Pj4wXXwoMHxjcltlKzU4Pj4wXSk8PDE2fCgwfGNyW2UrNTk+PjBdKTw8MjQsVz0oKFc9KGFyW3Y+PjJdPVkpKy0xNTAyMDAyMjkwK1crKFgmKGpeSSleSSl8MCk8PDE3fFc+Pj4xNSkrWHwwLFk9KDB8Y3JbZSs2MT4+MF0pPDw4fDB8Y3JbZSs2MD4+MF18KDB8Y3JbZSs2Mj4+MF0pPDwxNnwoMHxjcltlKzYzPj4wXSk8PDI0LEk9KChJPShhcltpPj4yXT1ZKSsxMjM2NTM1MzI5K0krKFcmKFheaileail8MCk8PDIyfEk+Pj4xMCkrV3wwLGo9KChqPShEPTB8YXJbbj4+Ml0pKy0xNjU3OTY1MTAraisoKEleVykmWF5XKXwwKTw8NXxqPj4+MjcpK0l8MCxYPSgoWD0oXz0wfGFyW2w+PjJdKSstMTA2OTUwMTYzMitYKygoal5JKSZXXkkpfDApPDw5fFg+Pj4yMykranwwLFc9KChXPShGPTB8YXJbaz4+Ml0pKzY0MzcxNzcxMytXKygoWF5qKSZJXmopfDApPDwxNHxXPj4+MTgpK1h8MCxJPSgoST0oej0wfGFyW2Y+PjJdKSstMzczODk3MzAyK0krKChXXlgpJmpeWCl8MCk8PDIwfEk+Pj4xMikrV3wwLGo9KChqPShVPTB8YXJbYz4+Ml0pKy03MDE1NTg2OTEraisoKEleVykmWF5XKXwwKTw8NXxqPj4+MjcpK0l8MCxXPSgoVz1ZKy02NjA0NzgzMzUrVysoKChYPSgoWD0oSj0wfGFyW2Q+PjJdKSszODAxNjA4MytYKygoal5JKSZXXkkpfDApPDw5fFg+Pj4yMykranwwKV5qKSZJXmopfDApPDwxNHxXPj4+MTgpK1h8MCxJPSgoST0oUj0wfGFyW2E+PjJdKSstNDA1NTM3ODQ4K0krKChXXlgpJmpeWCl8MCk8PDIwfEk+Pj4xMikrV3wwLGo9KChqPShHPTB8YXJbcz4+Ml0pKzU2ODQ0NjQzOCtqKygoSV5XKSZYXlcpfDApPDw1fGo+Pj4yNykrSXwwLFg9KChYPShTPTB8YXJbdj4+Ml0pKy0xMDE5ODAzNjkwK1grKChqXkkpJldeSSl8MCk8PDl8WD4+PjIzKStqfDAsVz0oKFc9KE09MHxhcltvPj4yXSkrLTE4NzM2Mzk2MStXKygoWF5qKSZJXmopfDApPDwxNHxXPj4+MTgpK1h8MCxJPSgoST0oUT0wfGFyW2I+PjJdKSsxMTYzNTMxNTAxK0krKChXXlgpJmpeWCl8MCk8PDIwfEk+Pj4xMikrV3wwLGo9KChqPShOPTB8YXJbdz4+Ml0pKy0xNDQ0NjgxNDY3K2orKChJXlcpJlheVyl8MCk8PDV8aj4+PjI3KStJfDAsWD0oKFg9KFY9MHxhclt0Pj4yXSkrLTUxNDAzNzg0K1grKChqXkkpJldeSSl8MCk8PDl8WD4+PjIzKStqfDAsQz0oVz0oKFc9KE89MHxhclt1Pj4yXSkrMTczNTMyODQ3MytXKygoWF5qKSZJXmopfDApPDwxNHxXPj4+MTgpK1h8MCleWCxBPShDPSgoQz1SKy0xNDU1MjMwNzArKEM9KChDPVErMTg3MzMxMzM1OSsoQz0oKEM9KFQ9MHxhcltoPj4yXSkrMTcwMDQ4NTU3MSsoQz0oKEM9eistMTk4NjMwODQ0KyhDPSgoQz1HKy02NDAzNjQ0ODcrKEM9KChDPU4rNjgxMjc5MTc0KyhDPSgoQz1EKy0xNTMwOTkyMDYwKyhDPSgoQz1VKy0zNzg1NTgraisoQ14oST0oKEk9VCstMTkyNjYwNzczNCtJKyhDJmpeWCl8MCk8PDIwfEk+Pj4xMikrV3wwKSl8MCk8PDR8Qz4+PjI4KStJfDApKygoVz0oKFc9RisxODM5MDMwNTYyK1crKENeSV4oWD0oKFg9USstMjAyMjU3NDQ2MytYKyhJXldeQyl8MCk8PDExfFg+Pj4yMSkrQ3wwKSl8MCk8PDE2fFc+Pj4xNikrWHwwKV5YXihJPSgoST1TKy0zNTMwOTU1NitJKyhYXkNeVyl8MCk8PDIzfEk+Pj45KStXfDApKXwwKTw8NHxDPj4+MjgpK0l8MCkrKChXPSgoVz1PKy0xNTU0OTc2MzIrVysoQ15JXihYPSgoWD1SKzEyNzI4OTMzNTMrWCsoSV5XXkMpfDApPDwxMXxYPj4+MjEpK0N8MCkpfDApPDwxNnxXPj4+MTYpK1h8MCleWF4oST0oKEk9SistMTA5NDczMDY0MCtJKyhYXkNeVyl8MCk8PDIzfEk+Pj45KStXfDApKXwwKTw8NHxDPj4+MjgpK0l8MCkrKChXPSgoVz1NKy03MjI1MjE5NzkrVysoQ15JXihYPSgoWD16Ky0zNTg1MzcyMjIrWCsoSV5XXkMpfDApPDwxMXxYPj4+MjEpK0N8MCkpfDApPDwxNnxXPj4+MTYpK1h8MCleWF4oST0oKEk9Xys3NjAyOTE4OStJKyhYXkNeVyl8MCk8PDIzfEk+Pj45KStXfDApKXwwKTw8NHxDPj4+MjgpK0l8MCkrKCgoST0oKEk9VistOTk1MzM4NjUxK0krKChYPSgoWD1UKy00MjE4MTU4MzUrWCsoSV5XXkMpfDApPDwxMXxYPj4+MjEpK0N8MCleQ14oVz0oKFc9WSs1MzA3NDI1MjArVysoQ15JXlgpfDApPDwxNnxXPj4+MTYpK1h8MCkpfDApPDwyM3xJPj4+OSkrV3wwKXx+WCleVyl8MCk8PDZ8Qz4+PjI2KStJfDApKygoKEk9KChJPVUrLTU3NDM0MDU1K0krKCgoVz0oKFc9UystMTQxNjM1NDkwNStXKygoKFg9KChYPU8rMTEyNjg5MTQxNStYKygoQ3x+VyleSSl8MCk8PDEwfFg+Pj4yMikrQ3wwKXx+SSleQyl8MCk8PDE1fFc+Pj4xNykrWHwwKXx+QyleWCl8MCk8PDIxfEk+Pj4xMSkrV3wwKXx+WCleVyl8MCk8PDZ8Qz4+PjI2KStJfDApKygoKEk9KChJPUQrLTIwNTQ5MjI3OTkrSSsoKChXPSgoVz1KKy0xMDUxNTIzK1crKCgoWD0oKFg9TSstMTg5NDk4NjYwNitYKygoQ3x+VyleSSl8MCk8PDEwfFg+Pj4yMikrQ3wwKXx+SSleQyl8MCk8PDE1fFc+Pj4xNykrWHwwKXx+QyleWCl8MCk8PDIxfEk+Pj4xMSkrV3wwKXx+WCleVyl8MCk8PDZ8Qz4+PjI2KStJfDApKygoKEk9KChJPU4rMTMwOTE1MTY0OStJKygoKFc9KChXPV8rLTE1NjAxOTgzODArVysoKChYPSgoWD1ZKy0zMDYxMTc0NCtYKygoQ3x+VyleSSl8MCk8PDEwfFg+Pj4yMikrQ3wwKXx+SSleQyl8MCk8PDE1fFc+Pj4xNykrWHwwKXx+QyleWCl8MCk8PDIxfEk+Pj4xMSkrV3wwKXx+WCleVyl8MCk8PDZ8Qz4+PjI2KStJfDApK0F8MCx5PShXPSgoVz1WKzcxODc4NzI1OStXKygoKFg9KChYPUYrLTExMjAyMTAzNzkrWCsoKEN8flcpXkkpfDApPDwxMHxYPj4+MjIpK0N8MCl8fkkpXkMpfDApPDwxNXxXPj4+MTcpK1h8MCkreSsoKEk9RystMzQzNDg1NTUxK0krKChXfH5DKV5YKXwwKTw8MjF8ST4+PjExKXwwLEU9VytFfDAsQj1YK0J8MCxlPWUrNjR8MCwwIT0oMHwocj1yKy02NHwwKSk7KTtyZXR1cm4gYXJbbT4+Ml09QSxhcltnPj4yXT15LGFyW1o+PjJdPUUsYXJbcD4+Ml09QiwwfGV9ZnVuY3Rpb24gbGMoQSxlKXtBfD0wO3ZhciByPTAsaT0wLGY9MDtyPShpPTYzJmFyWyhlfD0wKT4+Ml0pKzF8MCx0cltlKzI0K2k+PjBdPS0xMjgsZj1lKzI0fDAsKGlePTYzKT4+PjA8OD8odmIoZSsyNCtyfDAsMCwwfGkpLGNjKGUsZiw2NCksaT01NixyPTApOmk9aSstOHwwLHZiKGUrMjQrcnwwLDAsMHxpKSxyPShpPTB8YXJbZT4+Ml0pPDwzLGFyW2U+PjJdPXIsdHJbZSs4MD4+MF09cix0cltlKzgxPj4wXT1pPj4+NSx0cltlKzgyPj4wXT1pPj4+MTMsdHJbZSs4Mz4+MF09aT4+PjIxLGk9MHxhcltlKzQ+PjJdLHRyW2UrODQ+PjBdPWksdHJbZSs4NT4+MF09aT4+PjgsdHJbZSs4Nj4+MF09aT4+PjE2LHRyW2UrODc+PjBdPWk+Pj4yNCxjYyhlLGYsNjQpLGY9ZSs4fDAsdHJbQT4+MF09YXJbZj4+Ml0sdHJbQSsxPj4wXT0oMHxhcltmPj4yXSk+Pj44LHRyW0ErMj4+MF09KDB8YXJbZj4+Ml0pPj4+MTYsdHJbQSszPj4wXT0oMHxhcltmPj4yXSk+Pj4yNCxmPWUrMTJ8MCx0cltBKzQ+PjBdPWFyW2Y+PjJdLHRyW0ErNT4+MF09KDB8YXJbZj4+Ml0pPj4+OCx0cltBKzY+PjBdPSgwfGFyW2Y+PjJdKT4+PjE2LHRyW0ErNz4+MF09KDB8YXJbZj4+Ml0pPj4+MjQsZj1lKzE2fDAsdHJbQSs4Pj4wXT1hcltmPj4yXSx0cltBKzk+PjBdPSgwfGFyW2Y+PjJdKT4+PjgsdHJbQSsxMD4+MF09KDB8YXJbZj4+Ml0pPj4+MTYsdHJbQSsxMT4+MF09KDB8YXJbZj4+Ml0pPj4+MjQsZj1lKzIwfDAsdHJbQSsxMj4+MF09YXJbZj4+Ml0sdHJbQSsxMz4+MF09KDB8YXJbZj4+Ml0pPj4+OCx0cltBKzE0Pj4wXT0oMHxhcltmPj4yXSk+Pj4xNix0cltBKzE1Pj4wXT0oMHxhcltmPj4yXSk+Pj4yNCx2YigwfGUsMCwxNTIpfWZ1bmN0aW9uIHVjKEEsZSxyLGksZixuLHQsbyxhLGMsbCx1LGIpe0F8PTAsdHw9MCxvfD0wLGF8PTAsY3w9MCxsfD0wLHV8PTAsYnw9MDt2YXIgcyxkLGssaCx3LHYsbSxnLFoscD0wLHk9MCxCPTAsRT0wLFg9MCxXPTAsST0wO2lmKHVyPShaPXVyKSsyMDQ0OHwwLGQ9KFc9WikrOTA4OHwwLGs9MyYocnw9MCksaD0zJihpfD0wKSxnPShyPj4yKSsoZnw9MCl8MCxtPShpPj4yKSsobnw9MCl8MCx5PTE0LSgwfGFyWyhlfD0wKSs0OTk2Pj4yXSl8MCx2PTB8YXJbZSs0ODQ+PjJdLHc9MHxhcltlKzQ4OD4+Ml0sMyYoaXxyKSl7aWYoeT0wfGFyWzk3NjgrKGs8PDIpPj4yXSxuPTB8YXJbOTc4NCsoazw8Mik+PjJdLHM9MHxhcls5NzY4KyhoPDwyKT4+Ml0sZj0wfGFyWzk3ODQrKGg8PDIpPj4yXSxwPTAteXwwLC0xPChtLXN8Zy15fDApJiYoZytsK258MCk8KDB8dikmJihtK3UrZnwwKTwoMHx3KSlmPWErKCgwfGJyKG0sbj1jKSkrZzw8MSl8MDtlbHNle2lmKCgwfChlPTAtc3wwKSk8KDB8KGk9Zit1fDApKSYmKEU9di0xfDAsWD13LTF8MCwoMHxwKTwoMHwoQj1uK2x8MCkpKSlkb3tmb3Iobj0wfGJyKCgwfChuPWUrbXwwKSk8MD8wOigwfG4pPCgwfHcpP246WCxjKSxyPSg4MCooZStzfDApfDApK3l8MCxmPXA7ST1mK2d8MCxvcltkKyhyK2Y8PDEpPj4xXT0wfG9yW2ErKCgoMHxJKTwwPzA6KDB8SSk8KDB8dik/STpFKStuPDwxKT4+MV0sKDB8KGY9ZisxfDApKSE9KDB8Qik7KTtlPWUrMXwwfXdoaWxlKCgwfGUpIT0oMHxpKSk7Zj1kKygoKG49ODApKnN8MCkreTw8MSl8MH0oMHxiKTw5P2NzWzMxJmFyW0ErMjIwKyhrPDw0KSsoaDw8Mik+PjJdXSh0LG8sZixuLGwsdSxXKTpsc1szMSZhcltBKzMwMCsoazw8NCkrKGg8PDIpPj4yXV0odCxvLGYsbixsLHUsVyxiKSx1cj1afWVsc2V7aWYoISgobXxnfDApPDB8KDB8dik8KGcrbHwwKXwoMHx3KTwobSt1fDApKSlyZXR1cm4gZj1hKygoMHxicihtLGMpKStnPDwxKXwwLCgwfGIpPDk/Y3NbMzEmYXJbQSsyMjA+PjJdXSh0LG8sZixjLGwsdSxXKTpsc1szMSZhcltBKzMwMD4+Ml1dKHQsbyxmLGMsbCx1LFcsYiksdm9pZCh1cj1aKTtpZigoMHx1KTw9MClyZXR1cm4gdm9pZCh1cj1aKTtpZihlPXYtMXwwLHI9dy0xfDAsISgwPCgwfGwpKSlyZXR1cm4gdm9pZCh1cj1aKTtmPTA7ZG97Zm9yKGk9MHxicigoMHwoaT1mK218MCkpPDA/MDooMHxpKTwoMHx3KT9pOnIsYykscD0wfGJyKGYsbyksbj0wO1c9bitnfDAsb3JbdCsobitwPDwxKT4+MV09KDB8bHJbYSsoKCgwfFcpPDA/MDooMHxXKTwoMHx2KT9XOmUpK2k8PDEpPj4xXSk8PHksKDB8KG49bisxfDApKSE9KDB8bCk7KTtmPWYrMXwwfXdoaWxlKCgwfGYpIT0oMHx1KSk7dXI9Wn19ZnVuY3Rpb24gYmMoQSxlLHIsaSxmLG4sdCxvLGEsYyxsLHUsYil7QXw9MCx0fD0wLG98PTAsYXw9MCxjfD0wLGx8PTAsdXw9MCxifD0wO3ZhciBzLGQsayxoLHcsdixtLGcsWixwPTAseT0wLEI9MCxFPTAsWD0wLFc9MCxJPTA7aWYodXI9KFo9dXIpKzE0NzY4fDAsZD0oVz1aKSs5MDg4fDAsaz0zJihyfD0wKSxoPTMmKGl8PTApLGc9KHI+PjIpKyhmfD0wKXwwLG09KGk+PjIpKyhufD0wKXwwLHk9MTQtKDB8YXJbKGV8PTApKzQ5OTY+PjJdKXwwLHY9MHxhcltlKzQ4ND4+Ml0sdz0wfGFyW2UrNDg4Pj4yXSwzJihpfHIpKXtpZih5PTB8YXJbOTc2OCsoazw8Mik+PjJdLG49MHxhcls5Nzg0KyhrPDwyKT4+Ml0scz0wfGFyWzk3NjgrKGg8PDIpPj4yXSxmPTB8YXJbOTc4NCsoaDw8Mik+PjJdLHA9MC15fDAsLTE8KG0tc3xnLXl8MCkmJihnK2wrbnwwKTwoMHx2KSYmKG0rdStmfDApPCgwfHcpKWY9YSsoKDB8YnIobSxuPWMpKStnKXwwO2Vsc2V7aWYoKDB8KGU9MC1zfDApKTwoMHwoaT1mK3V8MCkpJiYoRT12LTF8MCxYPXctMXwwLCgwfHApPCgwfChCPW4rbHwwKSkpKWRve2ZvcihuPTB8YnIoKDB8KG49ZSttfDApKTwwPzA6KDB8bik8KDB8dyk/bjpYLGMpLHI9KDgwKihlK3N8MCl8MCkreXwwLGY9cDtJPWYrZ3wwLHRyW2QrKHIrZik+PjBdPTB8dHJbYSsoKCgwfEkpPDA/MDooMHxJKTwoMHx2KT9JOkUpK24pPj4wXSwoMHwoZj1mKzF8MCkpIT0oMHxCKTspO2U9ZSsxfDB9d2hpbGUoKDB8ZSkhPSgwfGkpKTtmPWQrKCgobj04MCkqc3wwKSt5KXwwfSgwfGIpPDk/Y3NbMzEmYXJbQSsyMjArKGs8PDQpKyhoPDwyKT4+Ml1dKHQsbyxmLG4sbCx1LFcpOmxzWzMxJmFyW0ErMzAwKyhrPDw0KSsoaDw8Mik+PjJdXSh0LG8sZixuLGwsdSxXLGIpLHVyPVp9ZWxzZXtpZighKChtfGd8MCk8MHwoMHx2KTwoZytsfDApfCgwfHcpPChtK3V8MCkpKXJldHVybiBmPWErKCgwfGJyKG0sYykpK2cpfDAsKDB8Yik8OT9jc1szMSZhcltBKzIyMD4+Ml1dKHQsbyxmLGMsbCx1LFcpOmxzWzMxJmFyW0ErMzAwPj4yXV0odCxvLGYsYyxsLHUsVyxiKSx2b2lkKHVyPVopO2lmKCgwfHUpPD0wKXJldHVybiB2b2lkKHVyPVopO2lmKGU9di0xfDAscj13LTF8MCwhKDA8KDB8bCkpKXJldHVybiB2b2lkKHVyPVopO2Y9MDtkb3tmb3IoaT0wfGJyKCgwfChpPWYrbXwwKSk8MD8wOigwfGkpPCgwfHcpP2k6cixjKSxwPTB8YnIoZixvKSxuPTA7Vz1uK2d8MCxvclt0KyhuK3A8PDEpPj4xXT0oMHxjclthKygoKDB8Vyk8MD8wOigwfFcpPCgwfHYpP1c6ZSkraSk+PjBdKTw8eSwoMHwobj1uKzF8MCkpIT0oMHxsKTspO2Y9ZisxfDB9d2hpbGUoKDB8ZikhPSgwfHUpKTt1cj1afX1mdW5jdGlvbiBzYyhBLGUscixpLGYsbix0LG8sYSxjLGwsdSxiKXtBfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsdHw9MCxvfD0wLGF8PTAsY3w9MCxsfD0wLHV8PTAsYnw9MDt2YXIgcyxkLGssaCx3LHYsbT0wLGc9MCxaPTAscD0wLHk9MCxCPTAsRT0wO2lmKG09dXI9KHY9dXIpKzMxJi0zMix1cj11cisxOTgwOHwwLG09KGs9bSkrOTA4OHwwLHk9MTQtKDB8YXJbKGV8PTApKzUwMDQ+PjJdKXwwLEU9MHxhcltlKzUwMTY+PjJdLHc9KDB8YXJbZSs0ODQ+PjJdKS8oMHxFKXwwLEI9MHxhcltlKzUwMjA+PjJdLGg9KDB8YXJbZSs0ODg+PjJdKS8oMHxCKXwwLHM9NyYocj0wfGJyKDIvKDB8RSl8MCxyKSksZD03JihpPTB8YnIoMi8oMHxCKXwwLGkpKSxFPSgoMHxmKS8oMHxFKXwwKSsocj4+Myl8MCxCPSgoMHxuKS8oMHxCKXwwKSsoaT4+Myl8MCw3JihpfHIpKXtpZigwPCgwfEUpJiYoRStsfDApPD0ody0yfDApJjA8KDB8QikmJihCK3V8MCk8PShoLTJ8MCkpZj1hKygoMHxicihCLGMpKStFPDwxKXwwLGU9YztlbHNle2lmKC0xPCgwfChpPXUrMnwwKSkmJihaPXctMXwwLHA9aC0xfDAsLTE8KDB8KGc9bCsyfDApKSkpe3I9LTE7ZG97Zm9yKGY9MHxicigoMHwoZj1yK0J8MCkpPDA/MDooMHxmKTwoMHxoKT9mOnAsYyksbj04MCsoODAqcnwwKXwwLGU9LTE7eT1lK0V8MCxvclttKyhuKyhlPWUrMXwwKTw8MSk+PjFdPTB8b3JbYSsoKCgwfHkpPDA/MDooMHx5KTwoMHx3KT95OlopK2Y8PDEpPj4xXSwoMHxlKSE9KDB8Zyk7KTtyPXIrMXwwfXdoaWxlKCgwfHIpIT0oMHxpKSl9Zj1tKzE2MnwwLGU9ODB9cj0wIT0oMHxzKSxpPTAhPSgwfGQpO2Rve2lmKHImaSl7aWYoKDB8Yik8OSl7YnNbNyZhcltBKzIxNj4+Ml1dKHQsbyxmLGUsbCx1LHMsZCxrLGIpO2JyZWFrfWJzWzcmYXJbQSsyOTY+PjJdXSh0LG8sZixlLGwsdSxzLGQsayxiKTticmVha31pZihyKXtpZigoMHxiKTw5KXtic1s3JmFyW0ErMjA4Pj4yXV0odCxvLGYsZSxsLHUscyxkLGssYik7YnJlYWt9YnNbNyZhcltBKzI4OD4+Ml1dKHQsbyxmLGUsbCx1LHMsZCxrLGIpO2JyZWFrfWlmKGl8fHNyKDU1NzM5LDQ4NDI4LDI2OCw0ODQ3MiksKDB8Yik8OSl7YnNbNyZhcltBKzIxMj4+Ml1dKHQsbyxmLGUsbCx1LDAsZCxrLGIpO2JyZWFrfWJzWzcmYXJbQSsyOTI+PjJdXSh0LG8sZixlLGwsdSwwLGQsayxiKTticmVha313aGlsZSgwKTt1cj12fWVsc2V7aWYoLTE8KDB8RSkmJiEoKDB8Qik8MHwoMHx3KTwoRStsfDApfCgwfGgpPChCK3V8MCkpKXJldHVybiBlPWErKCgwfGJyKEIsYykpK0U8PDEpfDAsKDB8Yik8OT91c1szJmFyW0ErMjA0Pj4yXV0odCxvLGUsYyxsLHUsMCwwLDApOmJzWzcmYXJbQSsyODQ+PjJdXSh0LG8sZSxjLGwsdSwwLDAsMCxiKSx2b2lkKHVyPXYpO2lmKCgwfHUpPD0wKXJldHVybiB2b2lkKHVyPXYpO2lmKGk9dy0xfDAsZj1oLTF8MCwhKDA8KDB8bCkpKXJldHVybiB2b2lkKHVyPXYpO3I9MDtkb3tmb3Iobj0wfGJyKCgwfChuPXIrQnwwKSk8MD8wOigwfG4pPCgwfGgpP246ZixjKSxtPTB8YnIocixvKSxlPTA7Yj1lK0V8MCxvclt0KyhlK208PDEpPj4xXT0oMHxsclthKygoKDB8Yik8MD8wOigwfGIpPCgwfHcpP2I6aSkrbjw8MSk+PjFdKTw8eSwoMHwoZT1lKzF8MCkpIT0oMHxsKTspO3I9cisxfDB9d2hpbGUoKDB8cikhPSgwfHUpKTt1cj12fX1mdW5jdGlvbiBkYyhBLGUscixpLGYsbix0LG8sYSxjLGwsdSxiKXtBfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsdHw9MCxvfD0wLGF8PTAsY3w9MCxsfD0wLHV8PTAsYnw9MDt2YXIgcyxkLGssaCx3LHYsbT0wLGc9MCxaPTAscD0wLHk9MCxCPTAsRT0wO2lmKG09dXI9KHY9dXIpKzMxJi0zMix1cj11cisxNDQ0OHwwLG09KGs9bSkrOTA4OHwwLHk9MTQtKDB8YXJbKGV8PTApKzUwMDQ+PjJdKXwwLEU9MHxhcltlKzUwMTY+PjJdLHc9KDB8YXJbZSs0ODQ+PjJdKS8oMHxFKXwwLEI9MHxhcltlKzUwMjA+PjJdLGg9KDB8YXJbZSs0ODg+PjJdKS8oMHxCKXwwLHM9NyYocj0wfGJyKDIvKDB8RSl8MCxyKSksZD03JihpPTB8YnIoMi8oMHxCKXwwLGkpKSxFPSgoMHxmKS8oMHxFKXwwKSsocj4+Myl8MCxCPSgoMHxuKS8oMHxCKXwwKSsoaT4+Myl8MCw3JihpfHIpKXtpZigwPCgwfEUpJiYoRStsfDApPD0ody0yfDApJjA8KDB8QikmJihCK3V8MCk8PShoLTJ8MCkpZj1hKygoMHxicihCLGMpKStFKXwwLGU9YztlbHNle2lmKC0xPCgwfChpPXUrMnwwKSkmJihaPXctMXwwLHA9aC0xfDAsLTE8KDB8KGc9bCsyfDApKSkpe3I9LTE7ZG97Zm9yKGY9MHxicigoMHwoZj1yK0J8MCkpPDA/MDooMHxmKTwoMHxoKT9mOnAsYyksbj04MCsoODAqcnwwKXwwLGU9LTE7eT1lK0V8MCx0clttKyhuKyhlPWUrMXwwKSk+PjBdPTB8dHJbYSsoKCgwfHkpPDA/MDooMHx5KTwoMHx3KT95OlopK2YpPj4wXSwoMHxlKSE9KDB8Zyk7KTtyPXIrMXwwfXdoaWxlKCgwfHIpIT0oMHxpKSl9Zj1tKzgxfDAsZT04MH1yPTAhPSgwfHMpLGk9MCE9KDB8ZCk7ZG97aWYociZpKXtpZigoMHxiKTw5KXtic1s3JmFyW0ErMjE2Pj4yXV0odCxvLGYsZSxsLHUscyxkLGssYik7YnJlYWt9YnNbNyZhcltBKzI5Nj4+Ml1dKHQsbyxmLGUsbCx1LHMsZCxrLGIpO2JyZWFrfWlmKHIpe2lmKCgwfGIpPDkpe2JzWzcmYXJbQSsyMDg+PjJdXSh0LG8sZixlLGwsdSxzLGQsayxiKTticmVha31ic1s3JmFyW0ErMjg4Pj4yXV0odCxvLGYsZSxsLHUscyxkLGssYik7YnJlYWt9aWYoaXx8c3IoNTU3MzksNDg0MjgsMjY4LDQ4NDcyKSwoMHxiKTw5KXtic1s3JmFyW0ErMjEyPj4yXV0odCxvLGYsZSxsLHUsMCxkLGssYik7YnJlYWt9YnNbNyZhcltBKzI5Mj4+Ml1dKHQsbyxmLGUsbCx1LDAsZCxrLGIpO2JyZWFrfXdoaWxlKDApO3VyPXZ9ZWxzZXtpZigtMTwoMHxFKSYmISgoMHxCKTwwfCgwfHcpPChFK2x8MCl8KDB8aCk8KEIrdXwwKSkpcmV0dXJuIGU9YSsoKDB8YnIoQixjKSkrRSl8MCwoMHxiKTw5P3VzWzMmYXJbQSsyMDQ+PjJdXSh0LG8sZSxjLGwsdSwwLDAsMCk6YnNbNyZhcltBKzI4ND4+Ml1dKHQsbyxlLGMsbCx1LDAsMCwwLGIpLHZvaWQodXI9dik7aWYoKDB8dSk8PTApcmV0dXJuIHZvaWQodXI9dik7aWYoaT13LTF8MCxmPWgtMXwwLCEoMDwoMHxsKSkpcmV0dXJuIHZvaWQodXI9dik7cj0wO2Rve2ZvcihuPTB8YnIoKDB8KG49citCfDApKTwwPzA6KDB8bik8KDB8aCk/bjpmLGMpLG09MHxicihyLG8pLGU9MDtiPWUrRXwwLG9yW3QrKGUrbTw8MSk+PjFdPSgwfGNyW2ErKCgoMHxiKTwwPzA6KDB8Yik8KDB8dyk/YjppKStuKT4+MF0pPDx5LCgwfChlPWUrMXwwKSkhPSgwfGwpOyk7cj1yKzF8MH13aGlsZSgoMHxyKSE9KDB8dSkpO3VyPXZ9fWZ1bmN0aW9uIGtjKEEsZSxyLGksZixuLHQsbyxhLGMsbCx1KXtlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsdHw9MCxvfD0wLGF8PTAsY3w9MCxsfD0wLHV8PTA7dmFyIGIscz0wLGQ9MCxrPTAsaD0wLHc9MDtpZigwfEhiWzMxJmFyWzEyKygwfGFyWyhBfD0wKT4+Ml0pPj4yXV0oQSxuKXx8c3IoNDg1ODEsNDg0MjgsMTA3NCw0ODYwNCksYj0wfEhiWzMxJmFyWzgrKDB8YXJbQT4+Ml0pPj4yXV0oQSxuKSwoMHxhclsyNCtiPj4yXSk+KDB8dCkmJigwfGFyWzI4K2I+PjJdKT4oMHxvKSl7aWYoaT10Pj4oZj0wfGFyWzEwMzY4K2I+PjJdKSxmPW8+PmYsKDB8aSk8PS0xJiZzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpLCgwfChuPTB8YXJbMTAzNzIrYj4+Ml0pKTw9KDB8aSkmJnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSksKDB8Zik8PS0xJiZzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpLCgwfGYpPj0oMHxhclsxMDM3NitiPj4yXSkmJnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSksdz0oMHxhclsxMDM2MCtiPj4yXSkrKDMqKCgwfGJyKG4sZikpK2l8MCl8MCl8MCwhKDc2OCYoY3Jbdz4+MF18Y3JbdysxPj4wXTw8OCkpKXJldHVybiBvcltsPj4xXT0wLG9yW2wrMj4+MV09MCx2b2lkKHRyW3U+PjBdPTApO2lmKDE9PSgwfHRyWzEwNTE2K2I+PjBdKSlyZXR1cm4gb3JbbD4+MV09MCxvcltsKzI+PjFdPTAsdm9pZCh0clt1Pj4wXT0wKTtpZihpPXQ+PihmPTB8YXJbMTAzODgrYj4+Ml0pLGY9bz4+ZiwoMHxpKTw9LTEmJnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSksKDB8KG49MHxhclsxMDM5MitiPj4yXSkpPD0oMHxpKSYmc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KSwoMHxmKTw9LTEmJnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSksKDB8Zik+PSgwfGFyWzEwMzk2K2I+PjJdKSYmc3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KSx3PTB8YXJbMTAzODArYj4+Ml0saD0oMHxicihuLGYpKStpfDAsMHx0clt3KygxMipofDApPj4wXSlpZigwfHRyW3crKDEyKmh8MCkrMT4+MF0pe2lmKHM9MHxhcltlKzkyPj4yXSwwPCgwfGFyWyhuPXIrMzMyfDApPj4yXSkpZm9yKGY9MDtpPTkyKygwfEhiWzMxJmFyWzgrKDB8YXJbQT4+Ml0pPj4yXV0oQSwwfGFyW3IrOTgwKyhmPDwyKT4+Ml0pKXwwLChpPSgwfGFyW2k+PjJdKTw9KDB8cykpJigwfChmPWYrMXwwKSk8KDB8YXJbbj4+Ml0pOyk7ZWxzZSBpPTE7aWYoaSYwPCgwfGFyWyhuPXIrMzI4fDApPj4yXSkpZm9yKGY9MDtpPTkyKygwfEhiWzMxJmFyWzgrKDB8YXJbQT4+Ml0pPj4yXV0oQSwwfGFyW3IrOTE2KyhmPDwyKT4+Ml0pKXwwLChpPSgwfGFyW2k+PjJdKTw9KDB8cykpJigwfChmPWYrMXwwKSk8KDB8YXJbbj4+Ml0pOyk7ZD1pP2M6MHx0cltyKzM3Mj4+MF19ZWxzZSBkPTA7ZWxzZSBkPTE7cmV0dXJuKGs9bHJbKGs9dysoMTIqaHwwKSs0KyhkPDwyKXwwKT4+MV18bHJbaysyPj4xXTw8MTYscz0wfHRyW3crKDEyKmh8MCkrMitkPj4wXSxuPXQ+PihpPTB8YXJbMTAzNDgrYj4+Ml0pLGk9bz4+aSwoMHxuKTw9LTEmJnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSksKDB8KGY9MHxhclsxMDM1MitiPj4yXSkpPD0oMHxuKSYmc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KSwoMHxpKTw9LTEmJnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSksKDB8aSk+PSgwfGFyWzEwMzU2K2I+PjJdKSYmc3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KSxpPSgwfGFyWzEwMzQwK2I+PjJdKSsoMjQqKCgwfGJyKGYsaSkpK258MCl8MCkrMnwwLGk9MHxhclsoMHxhcls0OCtiPj4yXSkrKGxyW2k+PjFdPDwyKT4+Ml0sKDB8dHJbKG49cisxMzAwKyhjPDw0KSthfDApPj4wXSkhPSgwfHRyW2krMTMwMCsoZDw8NCkrcz4+MF0pKT8odHJbdT4+MF09MCxvcltsPj4xXT0wLHZvaWQob3JbbCsyPj4xXT0wKSk6KHRyW3U+PjBdPTEsaT0oMHxhcls5MitiPj4yXSktKDB8YXJbaSsxMDQ0KyhkPDw2KSsoczw8Mik+PjJdKXwwLGY9KDB8YXJbZSs5Mj4+Ml0pLSgwfGFyW3IrMTA0NCsoYzw8NikrKGE8PDIpPj4yXSl8MCwwIT0oMHx0cltuPj4wXSl8KDB8aSk9PSgwfGYpPyhvcltsPj4xXT1rLHZvaWQob3JbbCsyPj4xXT1rPj4+MTYpKTooaT0oMHxpKTwtMTI4Py0xMjg6KDB8aSk8MTI3P2k6MTI3KT8oZT0zMisoMHxicigoMTYzODQrKCgoMHxpKTwwPzAtaXwwOmkpPj4xKXwwKS8oMHxpKXwwLCgwfGYpPC0xMjg/LTEyODooMHxmKTwxMjc/ZjoxMjcpKT4+NixBPTB8YnIoZT0oMHxlKTwtNDA5Nj8tNDA5NjooMHxlKTw0MDk1P2U6NDA5NSxrPDwxNj4+MTYpLEE9MHxicigoKGM9KDB8QSk8MCk/MC1BfDA6QSkrMTI3Pj44LGM/LTE6MCE9KDB8QSkmMSksb3JbbD4+MV09KDB8QSk8LTMyNzY4Py0zMjc2ODo2NTUzNSYoKDB8QSk8MzI3Njc/QTozMjc2NyksZT0wfGJyKGUsaz4+MTYpLGU9MHxicigoKEE9KDB8ZSk8MCk/MC1lfDA6ZSkrMTI3Pj44LEE/LTE6MCE9KDB8ZSkmMSksdm9pZChvcltsKzI+PjFdPSgwfGUpPC0zMjc2OD8tMzI3Njg6NjU1MzUmKCgwfGUpPDMyNzY3P2U6MzI3NjcpKSk6KG9yW2w+PjFdPWssb3JbbCsyPj4xXT1rPj4+MTYsZXIoQSs0fDAsMTAwOCwwKSx2b2lkKHRyW2UrMTA1MTY+PjBdPTMpKSl9ZXIoQSs0fDAsMTAyNiwwKSx0clt1Pj4wXT0wfWZ1bmN0aW9uIGhjKEEsZSxyLGksZixuLHQsbyxhLGMsbCl7QXw9MCxlfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsb3w9MCxhfD0wLGN8PTAsbHw9MDt2YXIgdSxiLHMsZD0wO2lmKCEoMHx0clsocnw9MCkrMzI0Pj4wXSkpcmV0dXJuIG9yW2M+PjFdPTAsb3JbYysyPj4xXT0wLHZvaWQodHJbbD4+MF09MCk7aWYocz0wfGFyW2UrNTgwND4+Ml0sZD0wfGFyW3IrMjA+PjJdPzA6MD09KDB8dHJbciszNzI+PjBdKSYxLGQ9MHxhcltyKzkxNisoZDw8NikrKGFyW3IrMzc2Pj4yXTw8Mik+PjJdLCEoMHxIYlszMSZhclsxMisoMHxhcltBPj4yXSk+PjJdXShBLGQpKSlyZXR1cm4gb3JbYz4+MV09MCxvcltjKzI+PjFdPTAsdm9pZCBlcihBKzR8KHRyW2w+PjBdPTApLDEwMTIsMCk7aWYoYj1uK2l8MCwoZj4+c3wwKT09KCh1PXQrZnwwKT4+c3wwKSYmKDB8Yik8KDB8YXJbZSsxMjQ4Pj4yXSkmJigwfHUpPCgwfGFyW2UrMTI1Mj4+Ml0pKXtpZihrYyhBLGUsciwwLDAsZCwtMTYmYiwtMTYmdSxvLGEsYyxsKSwwfHRyW2w+PjBdKXJldHVybn1lbHNlIG9yW2M+PjFdPTAsb3JbYysyPj4xXT0wLHRyW2w+PjBdPTA7a2MoQSxlLHIsMCwwLGQsKG4+PjEpK2kmLTE2LCh0Pj4xKStmJi0xNixvLGEsYyxsKX1mdW5jdGlvbiB3YyhBLGUscixpLGYsbix0LG8sYSxjLGwsdSxiKXtBfD0wLGV8PTAsbnw9MCx0fD0wLGF8PTAsY3w9MCxsfD0wLHV8PTAsYnw9MDt2YXIgcyxkLGssaCx3LHYsbT0wLGc9MCxaPTA7aWYoZz11cj0odj11cikrMzEmLTMyLHVyPXVyKzE2fDAsdz1nKzh8MCxnPShtPWcpKzEyfDAsdD0wfGZ1bmN0aW9uKEEsZSxyLGksZixuLHQsbyxhLGMsbCx1KXtlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsdHw9MCxvfD0wLGF8PTAsY3w9MCxsfD0wLHV8PTA7dmFyIGIscyxkLGssaCx3LHY9MCxtPTAsZz0wLFo9MCxwPTAseT0wLEI9MCxFPTAsWD0wLFc9MCxJPTA7dz0wfGFyWyhBfD0wKSsxMDA2MD4+Ml0sdD1lPj4obT0wfGFyW0ErMTAzNjg+PjJdKSxtPXI+Pm0sKDB8dCk8PS0xJiZzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpLCgwfChnPTB8YXJbQSsxMDM3Mj4+Ml0pKTw9KDB8dCkmJnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSksKDB8bSk8PS0xJiZzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpLCgwfG0pPj0oMHxhcltBKzEwMzc2Pj4yXSkmJnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSksWj0oMHxhcltBKzEwMzYwPj4yXSkrKDMqKCgwfGJyKGcsbSkpK3R8MCl8MCl8MCxaPSg2NTUzNSYoY3JbWj4+MF18Y3JbWisxPj4wXTw8OCkpPj4+Myx0PShkPWErbnwwKS0xfDAsKGg9KDB8KHM9Zj4+dykpPT0oKGs9ZistMXwwKT4+d3wwKSkmJihuPj53fDApPT0odD4+d3wwKT92PUk9MDpFPTk7QTpkb3tpZig5PT0oMHxFKSl7aWYoMT09KDB8Yykpc3dpdGNoKDcmWil7Y2FzZSAyOmNhc2UgNjpjYXNlIDc6dj1JPTA7YnJlYWsgQX1pZigwfGthKEEsZSxyLGksZixuLG8sYSxjLGssdCkpe2lmKHQ+Pj1YPTB8YXJbQSsxMDM4OD4+Ml0sKDB8KGc9az4+WCkpPD0tMSYmc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KSwoMHwobT0wfGFyW0ErMTAzOTI+PjJdKSk8PSgwfGcpJiZzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpLCgwfHQpPD0tMSYmc3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KSwoMHx0KTwoMHxhcltBKzEwMzk2Pj4yXSkpe0k9KDB8YXJbQSsxMDM4MD4+Ml0pKygxMiooKDB8YnIobSx0KSkrZ3wwKXwwKXwwLG9yW2w+PjFdPTB8b3JbST4+MV0sb3JbbCsyPj4xXT0wfG9yW0krMj4+MV0sb3JbbCs0Pj4xXT0wfG9yW0krND4+MV0sb3JbbCs2Pj4xXT0wfG9yW0krNj4+MV0sb3JbbCs4Pj4xXT0wfG9yW0krOD4+MV0sb3JbbCsxMD4+MV09MHxvcltJKzEwPj4xXSx2PUk9MTticmVha31zcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpfWVsc2Ugdj1JPTB9fXdoaWxlKDApO2lmKCgwfHUpPD0oMHx2KSlyZXR1cm4gMHwobD12KTtYPW4rLTF8MCwoMHxzKT09KCh0PShiPW8rZnwwKS0xfDApPj53fDApJiYobj4+d3wwKT09KFg+Pnd8MCk/Qj1wPTA6RT0yMjtBOmRve2lmKDIyPT0oMHxFKSl7aWYoMT09KDB8Yykpc3dpdGNoKDcmWil7Y2FzZSAxOmNhc2UgNDpjYXNlIDU6Qj1wPTA7YnJlYWsgQX1pZigwfGthKEEsZSxyLGksZixuLG8sYSxjLHQsWCkpe3Q+Pj1tPTB8YXJbQSsxMDM4OD4+Ml0sbT1YPj5tLCgwfHQpPD0tMSYmc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KSwoMHwoZz0wfGFyW0ErMTAzOTI+PjJdKSk8PSgwfHQpJiZzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpLCgwfG0pPD0tMSYmc3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KSwoMHxtKT49KDB8YXJbQSsxMDM5Nj4+Ml0pJiZzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpLHQ9KFo9MHxhcltBKzEwMzgwPj4yXSkrKDEyKihnPSgwfGJyKGcsbSkpK3R8MCl8MCl8MDtkb3tpZihJJiYocD0wfHRyW2w+PjBdKTw8MjQ+PjI0PT0oMHx0clt0Pj4wXSkpe2lmKHA8PDI0Pj4yNCl7aWYoKDB8b3JbbCs0Pj4xXSkhPSgwfG9yW1orKDEyKmd8MCkrND4+MV0pKWJyZWFrO2lmKCgwfG9yW2wrNj4+MV0pIT0oMHxvcltaKygxMipnfDApKzY+PjFdKSlicmVhaztpZigoMHx0cltsKzI+PjBdKSE9KDB8dHJbWisoMTIqZ3wwKSsyPj4wXSkpYnJlYWt9aWYoKG09MHx0cltsKzE+PjBdKTw8MjQ+PjI0PT0oMHx0cltaKygxMipnfDApKzE+PjBdKSl7aWYoIShtPDwyND4+MjQpKXtwPTEsQj0wO2JyZWFrIEF9aWYoKDB8b3JbbCs4Pj4xXSkhPSgwfG9yW1orKDEyKmd8MCkrOD4+MV0pKWJyZWFrO2lmKCgwfG9yW2wrMTA+PjFdKSE9KDB8b3JbWisoMTIqZ3wwKSsxMD4+MV0pKWJyZWFrO2lmKCgwfHRyW2wrMz4+MF0pPT0oMHx0cltaKygxMipnfDApKzM+PjBdKSl7cD0xLEI9MDticmVhayBBfX19fXdoaWxlKDApO29yWyhwPWwrKDEyKnZ8MCl8MCk+PjFdPTB8b3JbdD4+MV0sb3JbcCsyPj4xXT0wfG9yW3QrMj4+MV0sb3JbcCs0Pj4xXT0wfG9yW3QrND4+MV0sb3JbcCs2Pj4xXT0wfG9yW3QrNj4+MV0sb3JbcCs4Pj4xXT0wfG9yW3QrOD4+MV0sb3JbcCsxMD4+MV09MHxvclt0KzEwPj4xXSx2PShCPXYpKyhwPTEpfDB9ZWxzZSBCPXA9MH19d2hpbGUoMCk7aWYoKDB8dSk8PSgwfHYpKXJldHVybiAwfChsPXYpOygwfHMpPT0oYj4+d3wwKSYmKG4+Pnd8MCk9PShYPj53fDApfHwoRT00Nyk7QTpkb3tpZig0Nz09KDB8RSkmJjB8a2EoQSxlLHIsaSxmLG4sbyxhLGMsYixYKSl7dD1iPj4obT0wfGFyW0ErMTAzODg+PjJdKSxtPVg+Pm0sKDB8dCk8PS0xJiZzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpLCgwfChnPTB8YXJbQSsxMDM5Mj4+Ml0pKTw9KDB8dCkmJnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSksKDB8bSk8PS0xJiZzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpLCgwfG0pPj0oMHxhcltBKzEwMzk2Pj4yXSkmJnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSksdD0oWj0wfGFyW0ErMTAzODA+PjJdKSsoMTIqKGc9KDB8YnIoZyxtKSkrdHwwKXwwKXwwO2Rve2lmKHAmJih5PTB8dHJbbCsoMTIqQnwwKT4+MF0pPDwyND4+MjQ9PSgwfHRyW3Q+PjBdKSl7aWYoeTw8MjQ+PjI0KXtpZigoMHxvcltsKygxMipCfDApKzQ+PjFdKSE9KDB8b3JbWisoMTIqZ3wwKSs0Pj4xXSkpYnJlYWs7aWYoKDB8b3JbbCsoMTIqQnwwKSs2Pj4xXSkhPSgwfG9yW1orKDEyKmd8MCkrNj4+MV0pKWJyZWFrO2lmKCgwfHRyW2wrKDEyKkJ8MCkrMj4+MF0pIT0oMHx0cltaKygxMipnfDApKzI+PjBdKSlicmVha31pZigobT0wfHRyW2wrKDEyKkJ8MCkrMT4+MF0pPDwyND4+MjQ9PSgwfHRyW1orKDEyKmd8MCkrMT4+MF0pKXtpZighKG08PDI0Pj4yNCkpYnJlYWsgQTtpZigoMHxvcltsKygxMipCfDApKzg+PjFdKSE9KDB8b3JbWisoMTIqZ3wwKSs4Pj4xXSkpYnJlYWs7aWYoKDB8b3JbbCsoMTIqQnwwKSsxMD4+MV0pIT0oMHxvcltaKygxMipnfDApKzEwPj4xXSkpYnJlYWs7aWYoKDB8dHJbbCsoMTIqQnwwKSszPj4wXSk9PSgwfHRyW1orKDEyKmd8MCkrMz4+MF0pKWJyZWFrIEF9fX13aGlsZSgwKTtvclsoeT1sKygxMip2fDApfDApPj4xXT0wfG9yW3Q+PjFdLG9yW3krMj4+MV09MHxvclt0KzI+PjFdLG9yW3krND4+MV09MHxvclt0KzQ+PjFdLG9yW3krNj4+MV09MHxvclt0KzY+PjFdLG9yW3krOD4+MV09MHxvclt0Kzg+PjFdLG9yW3krMTA+PjFdPTB8b3JbdCsxMD4+MV0sdj12KzF8MH19d2hpbGUoMCk7aWYoKDB8dSk8PSgwfHYpKXJldHVybiAwfChsPXYpO2gmJihuPj53fDApPT0oZD4+d3wwKXx8KEU9NzApO0E6ZG97aWYoNzA9PSgwfEUpJiYwfGthKEEsZSxyLGksZixuLG8sYSxjLGssZCkpe2c9az4+KHQ9MHxhcltBKzEwMzg4Pj4yXSksdD1kPj50LCgwfGcpPD0tMSYmc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KSwoMHwobT0wfGFyW0ErMTAzOTI+PjJdKSk8PSgwfGcpJiZzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpLCgwfHQpPD0tMSYmc3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KSwoMHx0KT49KDB8YXJbQSsxMDM5Nj4+Ml0pJiZzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpLHQ9KFo9MHxhcltBKzEwMzgwPj4yXSkrKDEyKihnPSgwfGJyKG0sdCkpK2d8MCl8MCl8MDtkb3tpZihJJiYoVz0wfHRyW2w+PjBdKTw8MjQ+PjI0PT0oMHx0clt0Pj4wXSkpe2lmKFc8PDI0Pj4yNCl7aWYoKDB8b3JbbCs0Pj4xXSkhPSgwfG9yW1orKDEyKmd8MCkrND4+MV0pKWJyZWFrO2lmKCgwfG9yW2wrNj4+MV0pIT0oMHxvcltaKygxMipnfDApKzY+PjFdKSlicmVhaztpZigoMHx0cltsKzI+PjBdKSE9KDB8dHJbWisoMTIqZ3wwKSsyPj4wXSkpYnJlYWt9aWYoKG09MHx0cltsKzE+PjBdKTw8MjQ+PjI0IT0oMHx0cltaKygxMipnfDApKzE+PjBdKSlicmVhaztpZighKG08PDI0Pj4yNCkpYnJlYWsgQTtpZigoMHxvcltsKzg+PjFdKSE9KDB8b3JbWisoMTIqZ3wwKSs4Pj4xXSkpYnJlYWs7aWYoKDB8b3JbbCsxMD4+MV0pIT0oMHxvcltaKygxMipnfDApKzEwPj4xXSkpYnJlYWs7aWYoKDB8dHJbbCszPj4wXSk9PSgwfHRyW1orKDEyKmd8MCkrMz4+MF0pKWJyZWFrIEF9fXdoaWxlKDApO29yWyhXPWwrKDEyKnZ8MCl8MCk+PjFdPTB8b3JbdD4+MV0sb3JbVysyPj4xXT0wfG9yW3QrMj4+MV0sb3JbVys0Pj4xXT0wfG9yW3QrND4+MV0sb3JbVys2Pj4xXT0wfG9yW3QrNj4+MV0sb3JbVys4Pj4xXT0wfG9yW3QrOD4+MV0sb3JbVysxMD4+MV09MHxvclt0KzEwPj4xXSx2PXYrMXwwfX13aGlsZSgwKTtpZigoMHx1KTw9KDB8dil8ND09KDB8dikpcmV0dXJuIDB8KGw9dik7aWYoaCYmKG4+Pnd8MCk9PShYPj53fDApKXJldHVybiAwfChsPXYpO2lmKCEoMHxrYShBLGUscixpLGYsbixvLGEsYyxrLFgpKSlyZXR1cm4gMHwobD12KTtnPWs+Pih0PTB8YXJbQSsxMDM4OD4+Ml0pLHQ9WD4+dCwoMHxnKTw9LTEmJnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSksKDB8KG09MHxhcltBKzEwMzkyPj4yXSkpPD0oMHxnKSYmc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KSwoMHx0KTw9LTEmJnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSksKDB8dCk+PSgwfGFyW0ErMTAzOTY+PjJdKSYmc3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KSx0PShaPTB8YXJbQSsxMDM4MD4+Ml0pKygxMiooZz0oMHxicihtLHQpKStnfDApfDApfDA7ZG97aWYocCl7aWYoKG09MHx0cltsKygxMipCfDApPj4wXSk8PDI0Pj4yNCE9KDB8dHJbdD4+MF0pKWJyZWFrO2lmKG08PDI0Pj4yNCl7aWYoKDB8b3JbbCsoMTIqQnwwKSs0Pj4xXSkhPSgwfG9yW1orKDEyKmd8MCkrND4+MV0pKWJyZWFrO2lmKCgwfG9yW2wrKDEyKkJ8MCkrNj4+MV0pIT0oMHxvcltaKygxMipnfDApKzY+PjFdKSlicmVhaztpZigoMHx0cltsKygxMipCfDApKzI+PjBdKSE9KDB8dHJbWisoMTIqZ3wwKSsyPj4wXSkpYnJlYWt9aWYoKG09MHx0cltsKygxMipCfDApKzE+PjBdKTw8MjQ+PjI0IT0oMHx0cltaKygxMipnfDApKzE+PjBdKSlicmVhaztpZighKG08PDI0Pj4yNCkpcmV0dXJuIDB8KGw9dik7aWYoKDB8b3JbbCsoMTIqQnwwKSs4Pj4xXSkhPSgwfG9yW1orKDEyKmd8MCkrOD4+MV0pKWJyZWFrO2lmKCgwfG9yW2wrKDEyKkJ8MCkrMTA+PjFdKSE9KDB8b3JbWisoMTIqZ3wwKSsxMD4+MV0pKWJyZWFrO2lmKCgwfHRyW2wrKDEyKkJ8MCkrMz4+MF0pIT0oMHx0cltaKygxMipnfDApKzM+PjBdKSlicmVhaztyZXR1cm4gMHx2fX13aGlsZSgwKTtkb3tpZihJKXtpZigobT0wfHRyW2w+PjBdKTw8MjQ+PjI0IT0oMHx0clt0Pj4wXSkpYnJlYWs7aWYobTw8MjQ+PjI0KXtpZigoMHxvcltsKzQ+PjFdKSE9KDB8b3JbWisoMTIqZ3wwKSs0Pj4xXSkpYnJlYWs7aWYoKDB8b3JbbCs2Pj4xXSkhPSgwfG9yW1orKDEyKmd8MCkrNj4+MV0pKWJyZWFrO2lmKCgwfHRyW2wrMj4+MF0pIT0oMHx0cltaKygxMipnfDApKzI+PjBdKSlicmVha31pZigobT0wfHRyW2wrMT4+MF0pPDwyND4+MjQhPSgwfHRyW1orKDEyKmd8MCkrMT4+MF0pKWJyZWFrO2lmKCEobTw8MjQ+PjI0KSlyZXR1cm4gMHwobD12KTtpZigoMHxvcltsKzg+PjFdKSE9KDB8b3JbWisoMTIqZ3wwKSs4Pj4xXSkpYnJlYWs7aWYoKDB8b3JbbCsxMD4+MV0pIT0oMHxvcltaKygxMipnfDApKzEwPj4xXSkpYnJlYWs7aWYoKDB8dHJbbCszPj4wXSkhPSgwfHRyW1orKDEyKmd8MCkrMz4+MF0pKWJyZWFrO3JldHVybiAwfHZ9fXdoaWxlKDApO3JldHVybiBvclsobD1sKygxMip2fDApfDApPj4xXT0wfG9yW3Q+PjFdLG9yW2wrMj4+MV09MHxvclt0KzI+PjFdLG9yW2wrND4+MV09MHxvclt0KzQ+PjFdLG9yW2wrNj4+MV09MHxvclt0KzY+PjFdLG9yW2wrOD4+MV09MHxvclt0Kzg+PjFdLG9yW2wrMTA+PjFdPTB8b3JbdCsxMD4+MV0sMHwobD12KzF8MCl9KHJ8PTAsaXw9MCxmfD0wLG98PTAsbj0oWj04PT0oMHxvKT8yPCgwfGFyW3IrMTAwNjA+PjJdKTowKT9pOm4scz1aP2Y6dCwwLGQ9Wj9vOmEsaz1aP286YyxaPzA6bCxiLGg9dSsxfDApLCgwfHUpPCgwfChhclt3Pj4yXT10KSk/aT1lKzIwfDA6KGhjKEEscixlLG4scyxkLGssMCwwLG0sZyksYz0wfHRyW2c+PjBdLCh0clsoYT1nKzF8MCk+PjBdPTApfGFyWyhpPWUrMjB8MCk+PjJdP2E9MDooaGMoQSxyLGUsbixzLGQsaywwLDEsbSs0fDAsYSksY3w9YT0wfHRyW2E+PjBdKSxjPDwyND4+MjQmJihhclt3Pj4yXT10KzEsWj1iKygxMip0fDApKzR8MCxyPTB8YXJbbT4+Ml0sb3JbWj4+MV09cixvcltaKzI+PjFdPXI+Pj4xNixaPWIrKDEyKnR8MCkrOHwwLG09MHxhclttKzQ+PjJdLG9yW1o+PjFdPW0sb3JbWisyPj4xXT1tPj4+MTYsdHJbYisoMTIqdHwwKT4+MF09MHx0cltnPj4wXSx0cltiKygxMip0fDApKzE+PjBdPWEsdHJbYisoMTIqdHwwKSsyPj4wXT0wLHRyW2IrKDEyKnR8MCkrMz4+MF09MCkpLChjPTB8YXJbaT4+Ml0pfHwoZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLGV8PTAscnw9MCxmfD0wO3ZhciBuLHQsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wLGQ9MCxrPTA7aWYoMTwoMHwobj0wfGFyWyhpfD0wKT4+Ml0pKSYoMHxuKTwoMHxmKSl7Zm9yKHQ9MHxicihuLTF8MCxuKSx1PTA7Oyl7aWYoISgoMHwoYj0wfGFyWzk4MDArKHU8PDIpPj4yXSkpPCgwfG4pJigwfChzPTB8YXJbOTg0OCsodTw8Mik+PjJdKSk8KDB8bikpKXtvPTQ7YnJlYWt9aWYoZD0wfHRyWyhvPXIrKDEyKmJ8MCl8MCk+PjBdPzB8SGJbMzEmYXJbOCsoMHxhcltBPj4yXSk+PjJdXShBLDB8YXJbZSs5MTYrKHRyW3IrKDEyKmJ8MCkrMj4+MF08PDIpPj4yXSk6MCxrPTB8dHJbKGE9cisoMTIqc3wwKSsxfDApPj4wXT8wfEhiWzMxJmFyWzgrKDB8YXJbQT4+Ml0pPj4yXV0oQSwwfGFyW2UrOTgwKyh0cltyKygxMipzfDApKzM+PjBdPDwyKT4+Ml0pOjAsISgwIT0oMHxkKXwobD0oYz0wfHRyW28+PjBdKTw8MjQ+PjI0PT0wKSkpe289MTg7YnJlYWt9aWYoISgwIT0oMHxrKXwoYT0obz0wfHRyW2E+PjBdKTw8MjQ+PjI0PT0wKSkpe289MTg7YnJlYWt9ZG97aWYoIShsfGEpKXtpZigoMHxhcltkKzkyPj4yXSk9PSgwfGFyW2srOTI+PjJdKSYmKDB8b3JbcisoMTIqYnwwKSs0Pj4xXSk9PSgwfG9yW3IrKDEyKnN8MCkrOD4+MV0pJiYoMHxvcltyKygxMipifDApKzY+PjFdKT09KDB8b3JbcisoMTIqc3wwKSsxMD4+MV0pKWJyZWFrO2s9MHxhcltpPj4yXSx0cltyKygxMiprfDApKzI+PjBdPTB8dHJbcisoMTIqYnwwKSsyPj4wXSx0cltyKygxMiprfDApKzM+PjBdPTB8dHJbcisoMTIqc3wwKSszPj4wXSx0cltyKygxMiprfDApPj4wXT1jLHRyW3IrKDEyKmt8MCkrMT4+MF09byxkPXIrKDEyKmt8MCkrNHwwLGI9bHJbKGI9cisoMTIqYnwwKSs0fDApPj4xXXxscltiKzI+PjFdPDwxNixvcltkPj4xXT1iLG9yW2QrMj4+MV09Yj4+PjE2LGs9cisoMTIqa3wwKSs4fDAsZD1sclsoZD1yKygxMipzfDApKzh8MCk+PjFdfGxyW2QrMj4+MV08PDE2LG9yW2s+PjFdPWQsb3JbaysyPj4xXT1kPj4+MTYsYXJbaT4+Ml09MSsoMHxhcltpPj4yXSl9fXdoaWxlKDApO2lmKCgwfCh1PXUrMXwwKSk9PSgwfHQpKXtvPTE4O2JyZWFrfWlmKCgwfGFyW2k+PjJdKT09KDB8Zikpe289MTg7YnJlYWt9fWlmKDQ9PSgwfG8pKXNyKDU1NzM5LDQ4NDI4LDEzNjAsNDg2MzcpO2Vsc2UgaWYoMTg9PSgwfG8pKTt9fShBLGUsYix3LGgpLGM9MHxhcltpPj4yXSksdD0wfGFyWyhhPWUrMzI4fDApPj4yXSwxIT0oMHxjKSYmKHQ9MHxhclsoKDB8dCk8KDB8YXJbKFo9ZSszMzJ8MCk+PjJdKT9hOlopPj4yXSksKDB8dSk8KDB8KGE9MHxhclt3Pj4yXSkpKXVyPXY7ZWxzZXtmb3IobD0wO249MT09KDB8YyksWj0oMHxsKTwoMHx0KT8yNTUmbDowLHRyW2IrKDEyKmF8MCkrMj4+MF09Wix0cltiKygxMiphfDApKzM+PjBdPW4/LTE6Wix0cltiKygxMiphfDApPj4wXT0xLHRyW2IrKDEyKmF8MCkrMT4+MF09MSYoMV5uKSxvclsoWj1uPWIrKDEyKmF8MCkrNHwwKT4+MV09MCxvcltaKzI+PjFdPTAsb3JbKG49bis0fDApPj4xXT0wLG49YSsxfChvcltuKzI+PjFdPTApLCEoKDB8dSk8PSgwfGEpKTspbD1sKzF8MCxjPTB8YXJbaT4+Ml0sYT1uO2FyW3c+PjJdPW4sdXI9dn19ZnVuY3Rpb24gdmMoQSxlLHIsaSxmLG4sdCxvLGEsYyxsLHUsYixzKXtzfD0wO3ZhciBkLGs9MCxoPTAsdz0wLHY9MCxtPTA7aWYobT11cj0oZD11cikrMzEmLTMyLHVyPXVyKzMyfDAsdj1tKzE2fDAsZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCxvLGEsYyxsLHUsYixzLGQpe0F8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLG98PTAsYXw9MCxjfD0wLGx8PTAsdXw9MCxifD0wLGR8PTA7dmFyIGssaCx3LHYsbSxnLFoscCx5LEIsRSxYLFcsSSxDLEcsVixGPTAsUj0wLE49MCxfPTAsWT0wLFE9MCxEPTAsSj0wLE09MCxUPTAsVT0wLFM9MCxPPTAsej0wLGo9MCxIPTAseD0wLFA9MCxMPTAsSz0wLHE9MDtpZihQPXVyPShWPXVyKSszMSYtMzIsdXI9dXIrNDh8MCx2PVArMzJ8MCxtPVArMjR8MCxnPVArNDR8MCxJPVArMTJ8MCxQPShDPVApKzQwfDAsWj0odHw9MCkrLTF8KHRyWyhHPShzfD0wKSsxfDApPj4wXT0wKSxhclt2Pj4yXT1aLHg9YytvfDAsYXJbbT4+Ml09eCxhcls0K3Y+PjJdPVosTD14Ky0xfDAsYXJbNCttPj4yXT1MLHRyW3M+PjBdPTAsb3JbZD4+MV09MCxSPTEmKHg9KG9yWyhTPWQrMnwwKT4+MV09MCl8a2EoZSxpLGYsbix0LG8sYSxjLGIsWix4KSksdHJbZz4+MF09UixMPTB8a2EoZSxpLGYsbix0LG8sYSxjLGIsWixMKSx0clsxK2c+PjBdPTEmTCx4fD1MLEw9cis5MTYrKGw8PDYpKyh1PDwyKXwwLEY9MHxIYlszMSZhcls4KygwfGFyW0E+PjJdKT4+Ml1dKEEsMHxhcltMPj4yXSkpe3A9MHxhcltGKzkyPj4yXSxNPWUrMTAzNjh8MCxrPWUrMTAzNzJ8MCxoPWUrMTAzNzZ8MCx3PWUrMTAzNjB8MCx5PTEtbHwwLEI9ZSsxMDM4OHwwLEU9ZSsxMDM5MnwwLFg9ZSsxMDM5NnwwLFc9ZSsxMDM4MHwwLEQ9LTEsSj0wLEY9UjtBOmZvcig7Oyl7ZG97aWYoRjw8MjQ+PjI0IT0wJiYwPT0oMHx0cltzPj4wXSkpe2lmKEY9MHxhclt2KyhKPDwyKT4+Ml0sWT0wfGFyW20rKEo8PDIpPj4yXSxSPUY+PihOPTB8YXJbTT4+Ml0pLE49WT4+TiwoMHxSKTw9LTEpe0Y9ODticmVhayBBfWlmKCgwfChfPTB8YXJbaz4+Ml0pKTw9KDB8Uikpe0Y9ODticmVhayBBfWlmKCgwfE4pPD0tMSl7Rj0xMTticmVhayBBfWlmKCgwfE4pPj0oMHxhcltoPj4yXSkpe0Y9MTE7YnJlYWsgQX1pZihIPSgwfGFyW3c+PjJdKSsoMyooKDB8YnIoXyxOKSkrUnwwKXwwKXwwLDc2OCYoY3JbSD4+MF18Y3JbSCsxPj4wXTw8OCkpe2lmKE49Rj4+KEg9MHxhcltCPj4yXSksRj1ZPj5ILCgwfE4pPD0tMSl7Rj0xNTticmVhayBBfWlmKCgwfChSPTB8YXJbRT4+Ml0pKTw9KDB8Tikpe0Y9MTU7YnJlYWsgQX1pZigoMHxGKTw9LTEpe0Y9MTg7YnJlYWsgQX1pZigoMHxGKT49KDB8YXJbWD4+Ml0pKXtGPTE4O2JyZWFrIEF9aWYoUT0wfGFyW1c+PjJdLF89KDB8YnIoUixGKSkrTnwwLEY9MHx0clsoWT1RKygxMipffDApK2x8MCk+PjBdPzB8SGJbMzEmYXJbOCsoMHxhcltBPj4yXSk+PjJdXShBLDB8YXJbcis5MTYrKGw8PDYpKyh0cltRKygxMipffDApKzIrbD4+MF08PDIpPj4yXSk6MCxSPTB8dHJbKE49USsoMTIqX3wwKSt5fDApPj4wXT8wfEhiWzMxJmFyWzgrKDB8YXJbQT4+Ml0pPj4yXV0oQSwwfGFyW3IrOTE2Kyh5PDw2KSsodHJbUSsoMTIqX3wwKSsyK3k+PjBdPDwyKT4+Ml0pOjAsMCE9KDB8RikmMCE9KDB8dHJbWT4+MF0pJiYoMHxhcltGKzkyPj4yXSk9PSgwfHApKXt0cltzPj4wXT0xLFI9bHJbKFI9USsoMTIqX3wwKSs0KyhsPDwyKXwwKT4+MV18bHJbUisyPj4xXTw8MTYsb3JbZD4+MV09UixvcltkKzI+PjFdPVI+Pj4xNixSPTB8dHJbUSsoMTIqX3wwKSsyK2w+PjBdO2JyZWFrfVI9MCE9KDB8UikmMCE9KDB8dHJbTj4+MF0pJiYoMHxhcltSKzkyPj4yXSk9PSgwfHApPyh0cltzPj4wXT0xLFI9bHJbKFI9USsoMTIqX3wwKSs0Kyh5PDwyKXwwKT4+MV18bHJbUisyPj4xXTw8MTYsb3JbZD4+MV09UixvcltkKzI+PjFdPVI+Pj4xNiwwfHRyW1ErKDEyKl98MCkrMit5Pj4wXSk6RH1lbHNlIFI9RH1lbHNlIFI9RH13aGlsZSgwKTtpZigyPD0oMHwoRj1KKzF8MCkpKXtGPTM7YnJlYWt9RD1SLEY9MHx0cltnKyhKPUYpPj4wXX1pZigzPT0oMHxGKSl7Tz1yKzEzMDArKGw8PDQpK3V8MCx6PWUrOTJ8MCxqPUErNHwwLEg9ZSsxMDUxNnwwLEQ9MCxfPVI7QTpmb3IoOzspe2lmKDB8dHJbcz4+MF0pe0Y9NjI7YnJlYWt9ZG97aWYoMHx0cltnK0Q+PjBdKXtpZihGPTB8YXJbdisoRDw8Mik+PjJdLFE9MHxhclttKyhEPDwyKT4+Ml0sUj1GPj4oTj0wfGFyW00+PjJdKSxOPVE+Pk4sKDB8Uik8PS0xKXtGPTM1O2JyZWFrIEF9aWYoKDB8KFk9MHxhcltrPj4yXSkpPD0oMHxSKSl7Rj0zNTticmVhayBBfWlmKCgwfE4pPD0tMSl7Rj0zODticmVhayBBfWlmKCgwfE4pPj0oMHxhcltoPj4yXSkpe0Y9Mzg7YnJlYWsgQX1pZih1PSgwfGFyW3c+PjJdKSsoMyooKDB8YnIoWSxOKSkrUnwwKXwwKXwwLDc2OCYoY3JbdT4+MF18Y3JbdSsxPj4wXTw8OCkpe2lmKE49Rj4+KHU9MHxhcltCPj4yXSksRj1RPj51LCgwfE4pPD0tMSl7Rj00MjticmVhayBBfWlmKCgwfChSPTB8YXJbRT4+Ml0pKTw9KDB8Tikpe0Y9NDI7YnJlYWsgQX1pZigoMHxGKTw9LTEpe0Y9NDU7YnJlYWsgQX1pZigoMHxGKT49KDB8YXJbWD4+Ml0pKXtGPTQ1O2JyZWFrIEF9aWYoWT0wfGFyW1c+PjJdLEY9KDB8YnIoUixGKSkrTnwwLDE9PSgwfHRyW1krKDEyKkZ8MCkrbD4+MF0pJiYoVD1ZKygxMipGfDApKzIrbHwwLCgwfHRyW08+PjBdKT09KDB8dHJbKDB8dHJbVD4+MF0pKyhyKzEzMDArKGw8PDQpKT4+MF0pKSl7dHJbcz4+MF09MSxSPWxyWyhSPVkrKDEyKkZ8MCkrNCsobDw8Mil8MCk+PjFdfGxyW1IrMj4+MV08PDE2LG9yW2Q+PjFdPVIsb3JbZCsyPj4xXT1SPj4+MTYsUj1sLF89MHx0cltUPj4wXTticmVha30xPT0oMHx0cltZKygxMipGfDApK3k+PjBdKSYmKFU9WSsoMTIqRnwwKSsyK3l8MCwoMHx0cltPPj4wXSk9PSgwfHRyWygwfHRyW1U+PjBdKSsocisxMzAwKyh5PDw0KSk+PjBdKSk/KHRyW3M+PjBdPTEsUj1sclsoUj1ZKygxMipGfDApKzQrKHk8PDIpfDApPj4xXXxscltSKzI+PjFdPDwxNixvcltkPj4xXT1SLG9yW2QrMj4+MV09Uj4+PjE2LFI9eSxfPTB8dHJbVT4+MF0pOlI9LTF9ZWxzZSBSPS0xfWVsc2UgUj0tMX13aGlsZSgwKTtkb3tpZigxPT0oMHx0cltzPj4wXSkpe2lmKCgwfF8pPDApe0Y9NjE7YnJlYWsgQX1pZigoMHxSKTw9LTEpe0Y9NTU7YnJlYWsgQX1pZihGPTB8SGJbMzEmYXJbOCsoMHxhcltBPj4yXSk+PjJdXShBLDB8YXJbcis5MTYrKFI8PDYpKyhfPDwyKT4+Ml0pLEhiWzMxJmFyWzgrKDB8YXJbQT4+Ml0pPj4yXV0oQSwwfGFyW0w+PjJdKSwhKCh0cltPPj4wXXx0cltyKzEzMDArKFI8PDQpK18+PjBdKTw8MjQ+PjI0KSl7aWYoTj0oUj0wfGFyW3o+PjJdKS0oMHxhcltGKzkyPj4yXSl8MCxGPVItcHwwLFI9bHJbZD4+MV18bHJbZCsyPj4xXTw8MTYsTj0oMHxOKTwtMTI4Py0xMjg6KDB8Tik8MTI3P046MTI3KXt1PTMyKygwfGJyKCgxNjM4NCsoKCgwfE4pPDA/MC1OfDA6Tik+PjEpfDApLygwfE4pfDAsKDB8Rik8LTEyOD8tMTI4OigwfEYpPDEyNz9GOjEyNykpPj42LEo9MHxicih1PSgwfHUpPC00MDk2Py00MDk2OigwfHUpPDQwOTU/dTo0MDk1LFI8PDE2Pj4xNiksSj0wfGJyKCgoUT0oMHxKKTwwKT8wLUp8MDpKKSsxMjc+PjgsUT8tMTowIT0oMHxKKSYxKSxvcltkPj4xXT0oMHxKKTwtMzI3Njg/LTMyNzY4OjY1NTM1JigoMHxKKTwzMjc2Nz9KOjMyNzY3KSx1PTB8YnIodSxSPj4xNiksdT0wfGJyKCgoSj0oMHx1KTwwKT8wLXV8MDp1KSsxMjc+PjgsSj8tMTowIT0oMHx1KSYxKSxvcltTPj4xXT0oMHx1KTwtMzI3Njg/LTMyNzY4OjY1NTM1JigoMHx1KTwzMjc2Nz91OjMyNzY3KTticmVha31lcihqLDEwMDgsMCksdHJbSD4+MF09MzticmVha319fXdoaWxlKDApO2lmKDI8PSgwfChEPUQrMXwwKSkpe0Y9NjI7YnJlYWt9fWlmKDM1PT0oMHxGKSlzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpO2Vsc2UgaWYoMzg9PSgwfEYpKXNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSk7ZWxzZSBpZig0Mj09KDB8Rikpc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KTtlbHNlIGlmKDQ1PT0oMHxGKSlzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpO2Vsc2UgaWYoNTU9PSgwfEYpKXNyKDQ4Njg1LDQ4NDI4LDE2OTgsNDg2OTkpO2Vsc2V7aWYoNjE9PSgwfEYpKXJldHVybiB0cltHPj4wXT0wLHRyW3M+PjBdPTAsdXI9VjtpZig2Mj09KDB8Rikpe0Y9YSt0fDAsYXJbST4+Ml09RixSPW8rLTF8MCxhcltDPj4yXT1SLGFyWzQrST4+Ml09RistMSxhcltDKzQ+PjJdPVIsYXJbOCtJPj4yXT1aLGFyW0MrOD4+Ml09Uix0cltHPj4wXT0wLG9yWyh1PWQrNHwwKT4+MV09MCxZPS0xLEo9b3JbKE09ZCs2fDApPj4xXT0wO0E6Zm9yKDs7KXtTPTB8a2EoZSxpLGYsbix0LG8sYSxjLGIsRixSKSx0cltQK0o+PjBdPTEmUztkb3tpZihTJiYwPT0oMHx0cltHPj4wXSkpe2lmKE49Rj4+KFM9MHxhcltCPj4yXSksRj1SPj5TLCgwfE4pPD0tMSl7Rj02ODticmVhayBBfWlmKCgwfChSPTB8YXJbRT4+Ml0pKTw9KDB8Tikpe0Y9Njg7YnJlYWsgQX1pZigoMHxGKTw9LTEpe0Y9NzE7YnJlYWsgQX1pZigoMHxGKT49KDB8YXJbWD4+Ml0pKXtGPTcxO2JyZWFrIEF9aWYoRD0wfGFyW1c+PjJdLE49KDB8YnIoUixGKSkrTnwwLFI9MHx0clsoXz1EKygxMipOfDApK2x8MCk+PjBdPzB8SGJbMzEmYXJbOCsoMHxhcltBPj4yXSk+PjJdXShBLDB8YXJbcis5MTYrKGw8PDYpKyh0cltEKygxMipOfDApKzIrbD4+MF08PDIpPj4yXSk6MCxGPTB8dHJbKFE9RCsoMTIqTnwwKSt5fDApPj4wXT8wfEhiWzMxJmFyWzgrKDB8YXJbQT4+Ml0pPj4yXV0oQSwwfGFyW3IrOTE2Kyh5PDw2KSsodHJbRCsoMTIqTnwwKSsyK3k+PjBdPDwyKT4+Ml0pOjAsMCE9KDB8UikmMCE9KDB8dHJbXz4+MF0pJiYoMHxhcltSKzkyPj4yXSk9PSgwfHApKXt0cltHPj4wXT0xLFk9bHJbKFk9RCsoMTIqTnwwKSs0KyhsPDwyKXwwKT4+MV18bHJbWSsyPj4xXTw8MTYsb3JbdT4+MV09WSxvclt1KzI+PjFdPVk+Pj4xNixZPTB8dHJbRCsoMTIqTnwwKSsyK2w+PjBdO2JyZWFrfTAhPSgwfEYpJjAhPSgwfHRyW1E+PjBdKSYmKDB8YXJbRis5Mj4+Ml0pPT0oMHxwKSYmKHRyW0c+PjBdPTEsWT1sclsoWT1EKygxMipOfDApKzQrKHk8PDIpfDApPj4xXXxscltZKzI+PjFdPDwxNixvclt1Pj4xXT1ZLG9yW3UrMj4+MV09WT4+PjE2LFk9MHx0cltEKygxMipOfDApKzIreT4+MF0pfX13aGlsZSgwKTtpZigzPD0oMHwoUj1KKzF8MCkpKXtGPTYzO2JyZWFrfUY9MHxhcltJKygoSj1SKTw8Mik+PjJdLFI9MHxhcltDKyhSPDwyKT4+Ml19aWYoNjM9PSgwfEYpKXtBOmRve2lmKCF4KXswfHRyW0c+PjBdJiYodHJbcz4+MF09MSx4PWxyW3U+PjFdfGxyW3UrMj4+MV08PDE2LG9yW2Q+PjFdPXgsb3JbZCsyPj4xXT14Pj4+MTYpLEQ9ZSsxMDMzMnwodHJbRz4+MF09MCksUT0wO2U6Zm9yKDs7KXtkb3tpZigwfHRyW1ArUT4+MF0pe2lmKFI9MHxhcltCPj4yXSxGPWFyW0krKFE8PDIpPj4yXT4+UixSPWFyW0MrKFE8PDIpPj4yXT4+UiwoMHxGKTw9LTEpe0Y9OTA7YnJlYWsgZX1pZigoMHwoTj0wfGFyW0U+PjJdKSk8PSgwfEYpKXtGPTkwO2JyZWFrIGV9aWYoKDB8Uik8PS0xKXtGPTkzO2JyZWFrIGV9aWYoKDB8Uik+PSgwfGFyW1g+PjJdKSl7Rj05MzticmVhayBlfWlmKF89MHxhcltXPj4yXSxGPSgwfGJyKE4sUikpK0Z8MCwxPT0oMHx0cltfKygxMipGfDApK2w+PjBdKSYmKEs9XysoMTIqRnwwKSsyK2x8MCwoMHx0cltPPj4wXSk9PSgwfHRyWygwfHRyW0s+PjBdKSsocisxMzAwKyhsPDw0KSk+PjBdKSkpe3RyW0c+PjBdPTEsTj1sclsoTj1fKygxMipGfDApKzQrKGw8PDIpfDApPj4xXXxscltOKzI+PjFdPDwxNixvclt1Pj4xXT1OLG9yW3UrMj4+MV09Tj4+PjE2LE49bCxZPTB8dHJbSz4+MF07YnJlYWt9MT09KDB8dHJbXysoMTIqRnwwKSt5Pj4wXSkmJihxPV8rKDEyKkZ8MCkrMit5fDAsKDB8dHJbTz4+MF0pPT0oMHx0clsoMHx0cltxPj4wXSkrKHIrMTMwMCsoeTw8NCkpPj4wXSkpPyh0cltHPj4wXT0xLE49bHJbKE49XysoMTIqRnwwKSs0Kyh5PDwyKXwwKT4+MV18bHJbTisyPj4xXTw8MTYsb3JbdT4+MV09Tixvclt1KzI+PjFdPU4+Pj4xNixOPXksWT0wfHRyW3E+PjBdKTpOPS0xfWVsc2UgTj0tMX13aGlsZSgwKTtkb3tpZigxPT0oMHx0cltHPj4wXSkpe2lmKCgwfFkpPDApe0Y9MTEwO2JyZWFrIGV9aWYoKDB8Tik8PS0xKXtGPTEwMzticmVhayBlfWlmKDA9PSgwfChGPTB8SGJbMzEmYXJbOCsoMHxhcltBPj4yXSk+PjJdXShBLDB8YXJbcis5MTYrKE48PDYpKyhZPDwyKT4+Ml0pKSl8MD09KDB8KFI9MHxIYlszMSZhcls4KygwfGFyW0E+PjJdKT4+Ml1dKEEsMHxhcltMPj4yXSkpKSl7ZXIoNCsoMHxhcltEPj4yXSl8MCwxMDEyLDApLHRyW0g+PjBdPTM7YnJlYWt9aWYoKDB8KEY9MHxhcltGKzkyPj4yXSkpIT0oMHxhcltSKzkyPj4yXSkmJih0cltyKzEzMDArKE48PDQpK1k+PjBdfHRyW08+PjBdKTw8MjQ+PjI0PT0wKXtpZihOPShSPTB8YXJbej4+Ml0pLUZ8MCxGPVItcHwwLFI9bHJbdT4+MV18bHJbdSsyPj4xXTw8MTYsTj0oMHxOKTwtMTI4Py0xMjg6KDB8Tik8MTI3P046MTI3KXt4PTMyKygwfGJyKCgxNjM4NCsoKCgwfE4pPDA/MC1OfDA6Tik+PjEpfDApLygwfE4pfDAsKDB8Rik8LTEyOD8tMTI4OigwfEYpPDEyNz9GOjEyNykpPj42LGM9MHxicih4PSgwfHgpPC00MDk2Py00MDk2OigwfHgpPDQwOTU/eDo0MDk1LFI8PDE2Pj4xNiksYz0wfGJyKCgoYT0oMHxjKTwwKT8wLWN8MDpjKSsxMjc+PjgsYT8tMTowIT0oMHxjKSYxKSxvclt1Pj4xXT0oMHxjKTwtMzI3Njg/LTMyNzY4OjY1NTM1JigoMHxjKTwzMjc2Nz9jOjMyNzY3KSx4PTB8YnIoeCxSPj4xNikseD0wfGJyKCgoYz0oMHx4KTwwKT8wLXh8MDp4KSsxMjc+PjgsYz8tMTowIT0oMHx4KSYxKSxvcltNPj4xXT0oMHx4KTwtMzI3Njg/LTMyNzY4OjY1NTM1JigoMHx4KTwzMjc2Nz94OjMyNzY3KTticmVha31lcihqLDEwMDgsMCksdHJbSD4+MF09MzticmVha319fXdoaWxlKDApO2lmKDM8PSgwfChRPVErMXwwKSkpYnJlYWsgQTtpZigwfHRyW0c+PjBdKWJyZWFrIEF9aWYoOTA9PSgwfEYpKXNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSk7ZWxzZSBpZig5Mz09KDB8Rikpc3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KTtlbHNlIGlmKDEwMz09KDB8Rikpc3IoNDg2ODUsNDg0MjgsMTgzOSw0ODY5OSk7ZWxzZSBpZigxMTA9PSgwfEYpKXt0cltHPj4wXT0wLHRyW3M+PjBdPTA7YnJlYWt9fX13aGlsZSgwKTtyZXR1cm4gdXI9Vn02OD09KDB8Rik/c3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KTo3MT09KDB8RikmJnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSl9fX1lbHNlIDg9PSgwfEYpP3NyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSk6MTE9PSgwfEYpP3NyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSk6MTU9PSgwfEYpP3NyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSk6MTg9PSgwfEYpJiZzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpfWVsc2UgdXI9Vn0oQXw9MCxyfD0wLGV8PTAsaXw9MCxmfD0wLG58PTAsdHw9MCxvfD0wLGF8PTAsY3w9MCxsfD0wLHV8PTAsYnw9MCxoPW0rMTh8MCx3PW0rOHwwKSwwfHRyW2g+PjBdKXtkb3tpZigwfHRyW2grMT4+MF0pe2lmKCgwfG9yW3c+PjFdKT09KDB8b3Jbdys0Pj4xXSkmJigwfG9yW3crMj4+MV0pPT0oMHxvclt3KzY+PjFdKSl7az02O2JyZWFrfXRyW3Y+PjBdPTB9ZWxzZSBrPTZ9d2hpbGUoMCk7Nj09KDB8aykmJmhjKEEscixlLHQsbyxhLGMsdSxsLG0sdiksQT0wfGFyW3c+PjJdLG9yW3M+PjFdPUEsb3JbcysyPj4xXT1BPj4+MTYsZT1BPTF9ZWxzZSBoYyhBLHIsZSx0LG8sYSxjLHUsbCxtLHYpLGU9QT0wO2Rve2lmKDB8dHJbaCsxPj4wXSl7aWYoZSYmKDB8b3Jbdz4+MV0pPT0oMHxvclt3KzQ+PjFdKSYmKDB8b3JbdysyPj4xXSk9PSgwfG9yW3crNj4+MV0pKWJyZWFrO2g9cysoQTw8Mil8MCx3PTB8YXJbdys0Pj4yXSxvcltoPj4xXT13LG9yW2grMj4+MV09dz4+PjE2LEE9QSsxfDB9fXdoaWxlKDApO2lmKDB8dHJbdj4+MF0mJih2PXMrKEE8PDIpfDAsbT0wfGFyW20+PjJdLG9yW3Y+PjFdPW0sb3JbdisyPj4xXT1tPj4+MTYsQT1BKzF8MCksKDB8QSk8MilyZXR1cm4gdmIocysoQTw8Mil8MCwwLDgtKEE8PDIpfDApLHZvaWQodXI9ZCk7MiE9KDB8QSk/c3IoNDg3MzcsNDg0MjgsMTk0Myw0ODc1Myk6dXI9ZH1mdW5jdGlvbiBtYyhBLGUscixpLGYsbix0LG8sYSxjLGwsdSl7dmFyIGIscztzPXVyPShiPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxmdW5jdGlvbihBLGUscixpLGYsbix0LG8sYSxjLGwsdSxiKXtBfD0wLGV8PTAsaXw9MCxhfD0wLGN8PTAsbHw9MCx1fD0wLGJ8PTA7dmFyIHMsZCxrLGgsdyx2PTAsbT0wLGc9MDtzd2l0Y2goZD11cj0odz11cikrMzEmLTMyLHVyPXVyKzgwfDAsaD04K2R8MCxrPSh0fD0wKSsoZnw9MCl8MCxzPShvfD0wKSsobnw9MCl8MCx0PWY+PihvPTB8YXJbKHJ8PTApKzEwMzY4Pj4yXSksbz1uPj5vLCgwfHQpPD0tMSYmc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KSwoMHwodj0wfGFyW3IrMTAzNzI+PjJdKSk8PSgwfHQpJiZzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpLCgwfG8pPD0tMSYmc3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KSwoMHxvKT49KDB8YXJbcisxMDM3Nj4+Ml0pJiZzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpLHY9KDB8YXJbcisxMDM2MD4+Ml0pKygzKigoMHxicih2LG8pKSt0fDApfDApfDAsKDY1NTM1Jihjclt2Pj4wXXxjclt2KzE+PjBdPDw4KSk+Pj44JjMpe2Nhc2UgMjp0PTB8dHJbaSsxMD4+MF0sZz0xMTticmVhaztjYXNlIDE6MTYmKHQ9MHx0clsobz1pKzEwfDApPj4wXSk/Zz0xMTp0PW87YnJlYWs7ZGVmYXVsdDp0PWkrMTB8MH1pZigxMT09KDB8ZykpcmV0dXJuIHdjKEEsZSxyLGYsbixrLHMsYSxjLGwsdSxnPSgyNTUmdCk+Pj41JjI1NSxoKSxnPWgrKDEyKmd8MCl8MCxvcltiPj4xXT0wfG9yW2c+PjFdLG9yW2IrMj4+MV09MHxvcltnKzI+PjFdLG9yW2IrND4+MV09MHxvcltnKzQ+PjFdLG9yW2IrNj4+MV09MHxvcltnKzY+PjFdLG9yW2IrOD4+MV09MHxvcltnKzg+PjFdLG9yW2IrMTA+PjFdPTB8b3JbZysxMD4+MV0sMHx0cltiPj4wXSYmMTI9PShsK2N8MCkmMCE9KDB8dHJbKG09YisxfDApPj4wXSkmJih0cltiKzM+PjBdPS0xLHRyW20+PjBdPTApLHVyPXc7c3dpdGNoKDMmdHJbdD4+MF0pe2Nhc2UgMTpjYXNlIDM6dj0wfHRyW2k+PjBdLHRyW2IrMj4+MF09dix0cltiPj4wXT0xLGc9MHxscltpKzQ+PjFdLG09MHxscltpKzI+PjFdLHZjKEEsZSxyLGYsbixhLGsscyxjLGwsMCx2PDwyND4+MjQsdSxoKSx2PWgrKCgoMHxjclt0Pj4wXSk+Pj4yJjEpPDwyKXwwLHY9bHJbdj4+MV18bHJbdisyPj4xXTw8MTYsYXJbZD4+Ml09dixnPSgwfGxyWzIrZD4+MV0pK2d8MCxvcltiKzQ+PjFdPXYrbSxvcltiKzY+PjFdPWc7YnJlYWs7ZGVmYXVsdDp0cltiKzI+PjBdPS0xLHRyW2I+PjBdPTB9KCgzJnRyW3Q+PjBdKS0yJjI1NSk8Mj8odj0wfHRyW2krMT4+MF0sdHJbYiszPj4wXT12LHRyW2IrMT4+MF09MSxnPTB8bHJbaSs4Pj4xXSxtPTB8bHJbaSs2Pj4xXSx2YyhBLGUscixmLG4sYSxrLHMsYyxsLDEsdjw8MjQ+PjI0LHUsaCksYz1oKygoKDB8Y3JbdD4+MF0pPj4+MyYxKTw8Mil8MCxjPWxyW2M+PjFdfGxyW2MrMj4+MV08PDE2LGFyWzQrZD4+Ml09YyxnPSgwfGxyWzYrZD4+MV0pK2d8MCxvcltiKzg+PjFdPWMrbSxvcltiKzEwPj4xXT1nKToodHJbYiszPj4wXT0tMSx0cltiKzE+PjBdPTApLHVyPXd9KEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsb3w9MCxhfD0wLGN8PTAsbHw9MCx1fD0wLHMpLGZ1bmN0aW9uKEEsZSxyLGksZixuLHQsbyxhLGMsbCl7QXw9MCxlfD0wLG98PTAsYXw9MCxjfD0wLGx8PTA7dmFyIHUsYixzLGQsayxoLHcsdixtLGcsWixwLHksQixFPTAsWD0wLFc9MCxJPTAsQz0wLEc9MCxWPTAsRj0wLFI9MCxOPTAsXz0wLFk9MCxRPTAsRD0wLEo9MCxNPTAsVD0wLFU9MDt1cj0oQj11cikrNDkxNjh8MCx3PUIrMzI3Njh8MCxZPSh5PUIpKzQ5MTUyfDAsTj0obnw9MCkrKGl8PTApfDAsVj0odHw9MCkrKGZ8PTApfDAsRj0ocnw9MCkrNzY0fDAsdj0wfGFyW3IrNTc4MD4+Ml0sbT0wfGFyW3IrNTc4ND4+Ml0saz0wfGFyW3IrNDA+PjJdLEo9KDB8YnIoayxWKSkrTnwwLEo9KDB8YXJbcis0Pj4yXSkrKEo8PGNyW3IrMTY+PjBdKXwwLGc9MHxhcltyKzQ0Pj4yXSxNPSgwfGJyKGcsKDB8VikvKDB8bSl8MCkpKygoMHxOKS8oMHx2KXwwKXwwLFo9KDB8YXJbcis4Pj4yXSkrKE08PGNyW3IrMTc+PjBdKXwwLE09KDB8YXJbcisxMj4+Ml0pKyhNPDxjcltyKzE4Pj4wXSl8MCxmPTI1NSYodT0wfHRyW2w+PjBdKSxhcltZPj4yXT1mLGk9MjU1JihEPTB8dHJbbCsxPj4wXSksYXJbKG49WSs0fDApPj4yXT1pLGg9MHxhclsoUj1yKzU3NjB8MCk+PjJdLHA9MHxhclsoXz1yKzU3Njh8MCk+PjJdLGQ9dTw8MjQ+PjI0PT0wLEQ8PDI0Pj4yND09MHwwIT0oMHx0clsoYj1yKzU5NjF8MCk+PjBdKXxkfHwoMHxvcltsKzQ+PjFdKSE9KDB8b3JbbCs4Pj4xXSl8fCgwfG9yW2wrNj4+MV0pIT0oMHxvcltsKzEwPj4xXSl8fCgwfGFyW2UrOTE2Kyh0cltsKzI+PjBdPDwyKT4+Ml0pIT0oMHxhcltlKzk4MCsodHJbbCszPj4wXTw8Mik+PjJdKXx8KGk9YXJbbj4+Ml09MCkscz1yKzEwNTE2fDAsRD1BKzR8MCxHPTAsbj1mO0E6Zm9yKDs7KXtkb3tpZigwfG4pe2lmKDE1PChuPTB8dHJbbCsyK0c+PjBdKTw8MjQ+PjI0KXtRPTk7YnJlYWsgQX1pZihDPTB8SGJbMzEmYXJbOCsoMHxhcltBPj4yXSk+PjJdXShBLDB8YXJbZSs5MTYrKEc8PDYpKyhuPDwyND4+MjQ8PDIpPj4yXSksISgwfGFyW0MrOTY+PjJdKSl7dHJbcz4+MF09MyxlcihELDEwMTIsMCk7YnJlYWt9aWYobj0wfG9yWyhXPWwrNCsoRzw8Mil8MCk+PjFdLGY9MHxvclsoST1sKzQrKEc8PDIpKzJ8MCk+PjFdLHQ9dysoRzw8MTMpfDAsRT0wfGFyW0MrND4+Ml0sWD0wfGFyW0MrNDA+PjJdLCg4PCgwfGFyW1I+PjJdKT91YzpiYykoQSxGLG4sZixOLFYsdCxvLEUsWCxhLGMsaCksbj0wfG9yW1c+PjFdLGY9MHxvcltJPj4xXSx0PXkrKEc8PDEzKXwwLEU9MHxhcltDKzg+PjJdLDg8KDB8YXJbUj4+Ml0pKXtUPSgwfGEpLygwfHYpfDAsWD0oMHxjKS8oMHxtKXwwLHNjKEEsRixuLGYsTixWLHQsbyxFLDB8YXJbKFU9Qys0NHwwKT4+Ml0sVCxYLHApLHNjKEEsRiwwfG9yW1c+PjFdLDB8b3JbST4+MV0sTixWLHkrMTYzODQrKEc8PDEzKXwwLG8sMHxhcltDKzEyPj4yXSwwfGFyW1U+PjJdLFQsWCxwKTticmVha31UPSgwfGEpLygwfHYpfDAsVT0oMHxjKS8oMHxtKXwwLGRjKEEsRixuLGYsTixWLHQsbyxFLDB8YXJbKFg9Qys0NHwwKT4+Ml0sVCxVLHApLGRjKEEsRiwwfG9yW1c+PjFdLDB8b3JbST4+MV0sTixWLHkrMTYzODQrKEc8PDEzKXwwLG8sMHxhcltDKzEyPj4yXSwwfGFyW1g+PjJdLFQsVSxwKTticmVha319d2hpbGUoMCk7aWYoMjw9KDB8KG49RysxfDApKSlicmVhaztuPTB8YXJbWSsoKEc9bik8PDIpPj4yXX1pZig5PT0oMHxRKSlyZXR1cm4gdHJbcz4+MF09MyxlcihELDEwMTIsMCksdXI9Qjtzd2l0Y2goZj0yPCgwfChmPTE0LSgwfGFyW1I+PjJdKXwwKSk/ZjoyLFY9MHxjcltyKzU5MjA+PjBdLFc9MjwoMHwoVz0xNC0oMHxhcltfPj4yXSl8MCkpP1c6MixZPTB8Y3Jbcis1OTIxPj4wXSwwfGFyW2UrMjA+PjJdKXtjYXNlIDE6cmV0dXJuIGk9dTw8MjQ+PjI0PT0xJjA9PSgwfGkpLDB8dHJbYj4+MF0/aT8oVT0wfHRyW2wrMj4+MF0sdD0oMHxjcltlKzM4MD4+MF0pK2Z8MCxJPSgwfGNyW2UrMzgxPj4wXSkrV3wwLG49MHxvcltlKzQ0NisoVTw8MSk+PjFdLGk9dHJbZSs1MTArVT4+MF08PFYsRT0wfG9yW2UrNTQyKyhVPDwyKT4+MV0sWD10cltlKzY3MCsoVTw8MSk+PjBdPDxZLFc9MHxvcltlKzU0MisoVTw8MikrMj4+MV0sZj10cltlKzY3MCsoVTw8MSkrMT4+MF08PFksKDB8aCk8OT91c1szJmFyW0ErMTgwPj4yXV0oSixrLHcsbyxhLGMsbixpLHQpOmJzWzcmYXJbQSsxOTY+PjJdXShKLGssdyxvLGEsYyxuLGksdCxoKSxuPSgwfGEpLygwfHYpfDAsaT0oMHxjKS8oMHxtKXwwLCgwfHApPDk/KHVzWzMmYXJbKFU9QSsxODB8MCk+PjJdXShaLGcseSxvLG4saSxFLFgsSSksdXNbMyZhcltVPj4yXV0oTSxnLHkrMTYzODR8MCxvLG4saSxXLGYsSSkpOihic1s3JmFyWyhVPUErMTk2fDApPj4yXV0oWixnLHksbyxuLGksRSxYLEkscCksYnNbNyZhcltVPj4yXV0oTSxnLHkrMTYzODR8MCxvLG4saSxXLGYsSSxwKSkpOihlcihELDEwMTEsMCksdHJbcz4+MF09Myk6aT8oKDB8aCk8OT9hc1sxNSZhcltBKzE3Nj4+Ml1dKEosayx3LG8sYSxjKTpjc1szMSZhcltBKzE5Mj4+Ml1dKEosayx3LG8sYSxjLGgpLG49KDB8YSkvKDB8dil8MCxpPSgwfGMpLygwfG0pfDAsKDB8cCk8OT8oYXNbMTUmYXJbKFU9QSsxNzZ8MCk+PjJdXShaLGcseSxvLG4saSksYXNbMTUmYXJbVT4+Ml1dKE0sZyx5KzE2Mzg0fDAsbyxuLGkpKTooY3NbMzEmYXJbKFU9QSsxOTJ8MCk+PjJdXShaLGcseSxvLG4saSxwKSxjc1szMSZhcltVPj4yXV0oTSxnLHkrMTYzODR8MCxvLG4saSxwKSkpOihlcihELDEwMTEsMCksdHJbcz4+MF09MyksdXI9QjtjYXNlIDA6cmV0dXJuKG49dTw8MjQ+PjI0PT0xKSYoaT0xPT0oMHxpKSk/MHx0cltyKzU5NjI+PjBdPyhGPTB8dHJbbCsyPj4wXSxpPTB8dHJbbCszPj4wXSxYPSgwfGNyW2UrMzgwPj4wXSkrZnwwLF89KDB8Y3JbZSszODE+PjBdKStXfDAsZj0wfG9yW2UrNDQ2KyhGPDwxKT4+MV0sdD10cltlKzUxMCtGPj4wXTw8VixFPTB8b3JbZSs0NzgrKGk8PDEpPj4xXSxuPXRyW2UrNTI2K2k+PjBdPDxWLEk9MHxvcltlKzU0MisoRjw8Mik+PjFdLEM9dHJbZSs2NzArKEY8PDEpPj4wXTw8WSxHPTB8b3JbZSs1NDIrKEY8PDIpKzI+PjFdLFY9dHJbZSs2NzArKEY8PDEpKzE+PjBdPDxZLEY9MHxvcltlKzYwNisoaTw8Mik+PjFdLFI9dHJbZSs3MDIrKGk8PDEpPj4wXTw8WSxOPTB8b3JbZSs2MDYrKGk8PDIpKzI+PjFdLFc9dHJbZSs3MDIrKGk8PDEpKzE+PjBdPDxZLGk9ODE5Mit3fDAsKDB8aCk8OT9zc1sxJmFyW0ErMTg0Pj4yXV0oSixrLHcsaSxvLGEsYyxmLHQsRSxuLFgpOmRzWzEmYXJbQSsyMDA+PjJdXShKLGssdyxpLG8sYSxjLGYsdCxFLG4sWCxoKSxmPXkrODE5MnwwLHQ9eSsxNjM4NHwwLEU9eSsyNDU3NnwwLG49KDB8YSkvKDB8dil8MCxpPSgwfGMpLygwfG0pfDAsKDB8cCk8OT8oc3NbMSZhclsoVT1BKzE4NHwwKT4+Ml1dKFosZyx5LGYsbyxuLGksSSxDLEYsUixfKSxzc1sxJmFyW1U+PjJdXShNLGcsdCxFLG8sbixpLEcsVixOLFcsXykpOihkc1sxJmFyWyhVPUErMjAwfDApPj4yXV0oWixnLHksZixvLG4saSxJLEMsRixSLF8scCksZHNbMSZhcltVPj4yXV0oTSxnLHQsRSxvLG4saSxHLFYsTixXLF8scCkpKTooaT04MTkyK3d8MCxYPUErMTcyfDAsKDB8aCk8OT9jc1szMSZhcltYPj4yXV0oSixrLHcsaSxvLGEsYyk6bHNbMzEmYXJbQSsxODg+PjJdXShKLGssdyxpLG8sYSxjLGgpLGY9eSs4MTkyfDAsdD15KzE2Mzg0fDAsRT15KzI0NTc2fDAsbj0oMHxhKS8oMHx2KXwwLGk9KDB8YykvKDB8bSl8MCwoMHxwKTw5Pyhjc1szMSZhcltYPj4yXV0oWixnLHksZixvLG4saSksY3NbMzEmYXJbWD4+Ml1dKE0sZyx0LEUsbyxuLGkpKToobHNbMzEmYXJbKFU9QSsxODh8MCk+PjJdXShaLGcseSxmLG8sbixpLHApLGxzWzMxJmFyW1U+PjJdXShNLGcsdCxFLG8sbixpLHApKSk6bnxpPyhHPTEmZCwwfHRyW3IrNTk2Mj4+MF0/KHQ9MHx0cltsKzIrRz4+MF0sRT0oMHxjcltlKzM4MD4+MF0pK2Z8MCxDPSgwfGNyW2UrMzgxPj4wXSkrV3wwLGY9MHxvcltlKzQ0NisoRzw8NSkrKHQ8PDEpPj4xXSxuPXRyW2UrNTEwKyhHPDw0KSt0Pj4wXTw8VixYPTB8b3JbZSs1NDIrKEc8PDYpKyh0PDwyKT4+MV0sVz10cltlKzY3MCsoRzw8NSkrKHQ8PDEpPj4wXTw8WSxJPTB8b3JbZSs1NDIrKEc8PDYpKyh0PDwyKSsyPj4xXSx0PXRyW2UrNjcwKyhHPDw1KSsodDw8MSkrMT4+MF08PFksaT13KyhHPDwxMyl8MCwoMHxoKTw5P3VzWzMmYXJbQSsxODA+PjJdXShKLGssaSxvLGEsYyxmLG4sRSk6YnNbNyZhcltBKzE5Nj4+Ml1dKEosayxpLG8sYSxjLGYsbixFLGgpLGY9eSsoRzw8MTMpfDAsbj0oMHxhKS8oMHx2KXwwLGk9KDB8YykvKDB8bSl8MCwoMHxwKTw5Pyh1c1szJmFyWyhVPUErMTgwfDApPj4yXV0oWixnLGYsbyxuLGksWCxXLEMpLHVzWzMmYXJbVT4+Ml1dKE0sZyx5KzE2Mzg0KyhHPDwxMyl8MCxvLG4saSxJLHQsQykpOihic1s3JmFyWyhVPUErMTk2fDApPj4yXV0oWixnLGYsbyxuLGksWCxXLEMscCksYnNbNyZhcltVPj4yXV0oTSxnLHkrMTYzODQrKEc8PDEzKXwwLG8sbixpLEksdCxDLHApKSk6KGk9dysoRzw8MTMpfDAsKDB8aCk8OT9hc1sxNSZhcltBKzE3Nj4+Ml1dKEosayxpLG8sYSxjKTpjc1szMSZhcltBKzE5Mj4+Ml1dKEosayxpLG8sYSxjLGgpLGY9eSsoRzw8MTMpfDAsbj0oMHxhKS8oMHx2KXwwLGk9KDB8YykvKDB8bSl8MCwoMHxwKTw5Pyhhc1sxNSZhclsoVT1BKzE3NnwwKT4+Ml1dKFosZyxmLG8sbixpKSxhc1sxNSZhcltVPj4yXV0oTSxnLHkrMTYzODQrKEc8PDEzKXwwLG8sbixpKSk6KGNzWzMxJmFyWyhVPUErMTkyfDApPj4yXV0oWixnLGYsbyxuLGkscCksY3NbMzEmYXJbVT4+Ml1dKE0sZyx5KzE2Mzg0KyhHPDwxMyl8MCxvLG4saSxwKSkpKTooZXIoRCwxMDExLDApLHRyW3M+PjBdPTMpLHVyPUI7ZGVmYXVsdDpzcig0ODM5NSw0ODQyOCw0ODksNDg0MzgpfX0oQSxlLHIsZixuLHQsbyxhLGMsbCxzKSxmdW5jdGlvbihBLGUscixpLGYsbil7dmFyIHQsbyxhLGMsbDtpZihufD0wLGw9KGV8PTApPj4yLGM9KHJ8PTApPj4yLGE9KGl8PTApPj4yLG89KGZ8PTApPj4yLHQ9MHxhclsoQXw9MCkrMTAzOTI+PjJdLCEoKDB8byk8PTApJiYoaT1BKzEwMzgwfDAsMDwoMHxhKSkpe2U9MDtkb3tmb3IoZj0oMHxicihlK2N8MCx0KSkrbHwwLHI9MDtBPSgwfGFyW2k+PjJdKSsoMTIqKGYrcnwwKXwwKXwwLG9yW0E+PjFdPTB8b3Jbbj4+MV0sb3JbQSsyPj4xXT0wfG9yW24rMj4+MV0sb3JbQSs0Pj4xXT0wfG9yW24rND4+MV0sb3JbQSs2Pj4xXT0wfG9yW24rNj4+MV0sb3JbQSs4Pj4xXT0wfG9yW24rOD4+MV0sb3JbQSsxMD4+MV09MHxvcltuKzEwPj4xXSwoMHwocj1yKzF8MCkpIT0oMHxhKTspO2U9ZSsxfDB9d2hpbGUoKDB8ZSkhPSgwfG8pKX19KHIsdCtmfDAsbytufDAsYyxsLHMpLHVyPWJ9ZnVuY3Rpb24gZ2MoQSl7dmFyIGU7Zm9yKGU9KEF8PTApKzEwMHwwOygwfChBPUErMnwob3JbQT4+MV09MCkpKTwoMHxlKTspO31mdW5jdGlvbiBaYyhBLGUscixpLGYsbix0KXtBfD0wLGV8PTAscnw9MCxpfD0wLG58PTAsdHw9MDt2YXIgbyxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTAsQj0wLEU9MCxYPTAsVz0wLEk9MDtpZihvPXVyLDAhPSgwfChmfD0wKSkmJigyNTUmKDB8QXQociwxKSkpPDwyND4+MjQhPTApe2Rve2lmKHQpe2lmKC05OTk5OSE9KDB8KHQ9MHxpdChyKSkpJigwfHQpPCgwfGYpKXt0PXQrMXwwO2JyZWFrfXJldHVybiB1cj1vLChpPTApfGl9dD0xfXdoaWxlKDApO2lmKCgwfChYPWYtdHwwKSk8PS0xJiZzcig0ODc4OCw0ODc5NiwxMjksNDg4MDYpLGw9MHxBdChyLDEpLC05OTk5OT09KDB8KHQ9MHxpdChyKSkpKXJldHVybiB1cj1vLChpPTApfGk7Zm9yKHU9dCsxfDAsYT1+dCx5PTB8Y3JbKDB8YXJbbj4+Ml0pKygxMDAqWHwwKSs5OD4+MF0sdXI9KEU9dXI9KEI9dXIpKygxNSsoMHwrKGM9eSsxfDApKSYtMTYpfDApKygxNSsoMHwrYykmLTE2KXwwLHQ9MDtwPTI1NSYoMHxBdChyLDEpKSxmPSh0cltCK3Q+PjBdPXApPDwyND4+MjQ/MToyNTUmKDB8QXQociwxKSksdHJbRSt0Pj4wXT1mLCgwfCh0PXQrMXwwKSkhPSgwfGMpOyk7Zz0wfGw/YTp1LHQ9MHxhcltuPj4yXSxaPTI1NSYodT0wfHRyW3QrKDEwMCpYfDApKzk2Pj4wXSkscD0yNTUmKHc9MHx0clt0KygxMDAqWHwwKSs5Nz4+MF0pLHc9dzw8MjQ+PjI0PT0wO0E6ZG97aWYodylkPTA7ZWxzZXtYPj4+MDwoKCgwfGFyWyhsPW4rNHwwKT4+Ml0pLXR8MCkvMTAwfDApPj4+MD8oYj1wLGs9MCxzPXQpOnNyKDQ4ODM0LDQ4Nzk2LDE3NCw0ODgwNik7ZTpmb3IoOzspe2Zvcih0PWI7Oyl7aWYoYT10Ky0xfDAsMTc8PSgwfHQpKXtJPTE4O2JyZWFrIGV9aWYoKDB8KGY9KDB8b3JbcysoMTAwKlh8MCkrMzIrKGE8PDEpPj4xXSkrZ3wwKSk8MCYmMHx0cltFKyhoPWErWnwwKT4+MF0pYnJlYWs7aWYoISgxPCgwfHQpKSl7ZD1rO2JyZWFrIEF9dD1hfWlmKDE1PCgwfGspKXt2PTAsST03NDticmVha31pZihjPWsrMXwwLG9yW2krKGs8PDEpPj4xXT1mLHRyW2krNjQraz4+MF09MHx0cltCK2g+PjBdLCgwfHQpPD0xKXtkPWM7YnJlYWsgQX1pZih0PTB8YXJbbj4+Ml0sIShYPj4+MDwoKCgwfGFyW2w+PjJdKS10fDApLzEwMHwwKT4+PjApKXtJPTE3O2JyZWFrfWI9YSxrPWMscz10fWlmKDE3PT0oMHxJKSlzcig0ODgzNCw0ODc5NiwxNzQsNDg4MDYpO2Vsc2UgaWYoMTg9PSgwfEkpKXNyKDQ4ODY2LDQ4Nzk2LDE3NSw0ODgwNik7ZWxzZSBpZig3ND09KDB8SSkpcmV0dXJuIHVyPW8sMHx2fX13aGlsZSgwKTtkb3tpZigoMHxnKTwwJiYwIT0oMHx0cltFK3k+PjBdKSl7aWYoMTU8KDB8ZCkpcmV0dXJuIHVyPW8sKGk9MCl8aTtvcltpKyhkPDwxKT4+MV09Zyx0cltpKzY0K2Q+PjBdPTB8dHJbQit5Pj4wXSx0PWQrMXwwO2JyZWFrfXQ9ZH13aGlsZSgwKTtjPXU8PDI0Pj4yND09MDtBOmRve2lmKGMpdHJbKHU9aSs5NnwwKT4+MF09dCx0PTA7ZWxzZXtmb3IoYT0wOzspe2lmKCgwfChmPSgwfG9yWygwfGFyW24+PjJdKSsoMTAwKlh8MCkrKGE8PDEpPj4xXSkrZ3wwKSk8MCYmMCE9KDB8dHJbRSthPj4wXSkpe2lmKDE1PCgwfHQpKXt2PTAsST03NDticmVha31vcltpKyh0PDwxKT4+MV09Zix0cltpKzY0K3Q+PjBdPTB8dHJbQithPj4wXSxtPXQrMXwwfWVsc2UgbT10O2lmKCgwfFopPD0oMHwoYT1hKzF8MCkpKWJyZWFrO3Q9bX1pZig3ND09KDB8SSkpcmV0dXJuIHVyPW8sMHx2O2lmKHRyWyh1PWkrOTZ8MCk+PjBdPW0sIWMpe2ZvcihmPVosdD0wOzspe2ZvcihjPTB8YXJbbj4+Ml0sYT1mOyEoMDwoMHwobD0oMHxvcltjKygxMDAqWHwwKSsoKGY9YSstMXwwKTw8MSk+PjFdKStnfDApKSYmMHx0cltFK2Y+PjBdKTspe2lmKCEoMTwoMHxhKSkpYnJlYWsgQTthPWZ9aWYoMTU8KDB8dCkpe3Y9MDticmVha31pZihjPXQrMXwwLG9yW2krMzIrKHQ8PDEpPj4xXT1sLHRyW2krODArdD4+MF09MHx0cltCK2Y+PjBdLCEoMTwoMHxhKSkpe3Q9YzticmVhayBBfXQ9Y31yZXR1cm4gdXI9bywwfHZ9dD0wfX13aGlsZSgwKTtkb3tpZigwPCgwfGcpJiYwIT0oMHx0cltFK3k+PjBdKSl7aWYoMTU8KDB8dCkpcmV0dXJuIHVyPW8sKGk9MCl8aTtvcltpKzMyKyh0PDwxKT4+MV09Zyx0cltpKzgwK3Q+PjBdPTB8dHJbQit5Pj4wXSx0PXQrMXwwO2JyZWFrfX13aGlsZSgwKTtBOmRve2lmKCF3KXtmb3IoYT0wOzspe2lmKDA8KDB8KGY9KDB8b3JbKDB8YXJbbj4+Ml0pKygxMDAqWHwwKSszMisoYTw8MSk+PjFdKStnfDApKSYmMCE9KDB8dHJbRSsoVz1hK1p8MCk+PjBdKSl7aWYoMTU8KDB8dCkpe3Y9MDticmVha31vcltpKzMyKyh0PDwxKT4+MV09Zix0cltpKzgwK3Q+PjBdPTB8dHJbQitXPj4wXSx0PXQrMXwwfWlmKCgwfHApPD0oMHwoYT1hKzF8MCkpKWJyZWFrIEF9cmV0dXJuIHVyPW8sMHx2fX13aGlsZSgwKTt0cltpKzk3Pj4wXT10fWVsc2UgST01NDtBOmRve2lmKDU0PT0oMHxJKSl7aWYobD0wfGl0KHIpLCgoYj0wfGl0KHIpKStsfDApPigwfGFyW2UrNTI4KygoMHx0cltlKzI+PjBdKS0xPDwyKT4+Ml0pKXJldHVybiBvclsoaT1pKzk2fDApPj4xXT0wLGVyKEEsMTAxOCxvcltpKzI+PjFdPTApLHVyPW8sKGk9MCl8aTtpZigxNjwoMHxsKXwxNjwoMHxiKSlyZXR1cm4gZXIoQSwxMDE4LDApLHVyPW8sKGk9MCl8aTt0clsodT1pKzk2fDApPj4wXT1sLHRyW2krOTc+PjBdPWI7ZTpkb3tpZigwPCgwfGwpKXtmb3IoZj10PTA7Oyl7aWYoLTk5OTk5PT0oMHwoYT0wfGl0KHIpKSkpe3Y9MDticmVha31pZihlPTI1NSYoMHxBdChyLDEpKSxvclsoYz1pKyh0PDwxKXwwKT4+MV09Zis2NTUzNS1hLHRyW2krNjQrdD4+MF09ZSwoMHxsKTw9KDB8KHQ9dCsxfDApKSlicmVhayBlO2Y9MHxvcltjPj4xXX1yZXR1cm4gdXI9bywwfHZ9fXdoaWxlKDApO2lmKDA8KDB8Yikpe2ZvcihmPXQ9MDs7KXtpZigtOTk5OTk9PSgwfChhPTB8aXQocikpKSl7dj0wO2JyZWFrfWlmKGU9MjU1JigwfEF0KHIsMSkpLG9yWyhjPWkrMzIrKHQ8PDEpfDApPj4xXT1mKzErYSx0cltpKzgwK3Q+PjBdPWUsKDB8Yik8PSgwfCh0PXQrMXwwKSkpYnJlYWsgQTtmPTB8b3JbYz4+MV19cmV0dXJuIHVyPW8sMHx2fX19d2hpbGUoMCk7aWYoKGw9KHRyWyhiPWkrOTl8MCk+PjBdPTApfHRyW3U+PjBdKTw8MjQ+PjI0KWZvcihjPTI1NSZsLGY9YT0wO3Q9ZisxPDwyND4+MjQsMHx0cltpKzY0K2E+PjBdP3RyW2I+PjBdPXQ6dD1mLCgwfChhPWErMXwwKSkhPSgwfGMpOylmPXQ7ZWxzZSB0PTA7aWYoYz0yNTUmKHI9MHx0cltpKzk3Pj4wXSkscjw8MjQ+PjI0KWZvcihhPTA7Zj10KzE8PDI0Pj4yNCwwfHRyW2krODArYT4+MF0mJih0PXRyW2I+PjBdPWYpLCgwfChhPWErMXwwKSkhPSgwfGMpOyk7cmV0dXJuIHRyW2krOTg+PjBdPWMrKDI1NSZsKSx1cj1vLDB8KGk9MSl9ZnVuY3Rpb24gcGMoQSxlLHIpe0F8PTAscnw9MDt2YXIgaSxmLG4sdCxvLGE9MCxjPTAsbD0wLHU9MCxiPTA7aWYodD0xNisoaT11cj0obz11cikrMzEmLTMyKXwwLG49OCtpfDAsdXI9KGY9dXI9dXIrMzJ8MCkrKDE1KygoYT0oZXw9MCk8PDEpKzJ8MCkmLTE2KXwwLCh0cltmKyhhfD0xKT4+MF09MCk8KDB8YSkmJnZiKDB8Ziw0NiwwfGEpLHRyW2YrZT4+MF09MTI0LChhPTB8dHJbQSs5Nj4+MF0pPDwyND4+MjQpZm9yKGI9MC1lfDAsYSY9MjU1O3U9MHxvcltBKygoYT0oYz1hKSstMXwwKTw8MSk+PjFdLGw9MHx0cltBKzY0K2E+PjBdPzg4OjExMSwoMHx1KTwoMHxiKT8oYXJbaT4+Ml09dSxhcls0K2k+PjJdPTI1NSZsLFBuKHIsNDg4OTUsaSkpOnRyW2YrKHUrZSk+PjBdPWwsMTwoMHxjKTspO2lmKCEoKGE9MHx0cltBKzk3Pj4wXSk8PDI0Pj4yNCkpcmV0dXJuIGFyW24+PjJdPWYsUG4ociw0ODkwMixuKSx2b2lkKHVyPW8pO2ZvcihhJj0yNTU7dT0wfG9yW0ErMzIrKChhPShjPWEpKy0xfDApPDwxKT4+MV0sbD0wfHRyW0ErODArYT4+MF0/ODg6MTExLCgwfGUpPCgwfHUpPyhhclt0Pj4yXT11LGFyWzQrdD4+Ml09MjU1JmwsUG4ociw0ODg5NSx0KSk6dHJbZisodStlKT4+MF09bCwxPCgwfGMpOyk7YXJbbj4+Ml09ZixQbihyLDQ4OTAyLG4pLHVyPW99ZnVuY3Rpb24geWMoQSl7QXw9MDt2YXIgZSxyPTAsaT0wLGY9MCxuPTAsdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wLG09MCxnPTAsWj0wO3M9dXI9KGU9dXIpKzMxJi0zMix1cj11cisxNnwwO2Rve2lmKEE+Pj4wPDI0NSl7aWYoQT0obD1BPj4+MDwxMT8xNjpBKzExJi04KT4+PjMsMyYoaT0oYj0wfGFyWzE0MzkyXSk+Pj5BKXwwKXJldHVybiBmPTB8YXJbKGk9KEE9NTc2MDgrKChyPSgxJmleMSkrQXwwKTw8MTw8Mil8MCkrOHwwKT4+Ml0sKDB8QSk9PSgwfCh0PTB8YXJbKG49Zis4fDApPj4yXSkpP2FyWzE0MzkyXT1iJn4oMTw8cik6KGFyW3QrMTI+PjJdPUEsYXJbaT4+Ml09dCksWj1yPDwzLGFyW2YrND4+Ml09M3xaLGFyWyhaPWYrWis0fDApPj4yXT0xfGFyW1o+PjJdLHVyPWUsMHwoWj1uKTtpZigodT0wfGFyWzE0Mzk0XSk+Pj4wPGw+Pj4wKXtpZigwfGkpcmV0dXJuIHI9KChyPWk8PEEmKChyPTI8PEEpfDAtcikpJjAtciktMXwwLG49MHxhclsoQT0ocj01NzYwOCsoKGY9KChpPShyPj4+PW89cj4+PjEyJjE2KT4+PjUmOCl8b3wobj0ocj4+Pj1pKT4+PjImNCl8KEE9KHI+Pj49bik+Pj4xJjIpfChmPShyPj4+PUEpPj4+MSYxKSkrKHI+Pj5mKXwwKTw8MTw8Mil8MCkrOHwwKT4+Ml0sKDB8cik9PSgwfChpPTB8YXJbKG89bis4fDApPj4yXSkpPyhBPWImfigxPDxmKSxhclsxNDM5Ml09QSk6KGFyW2krMTI+PjJdPXIsYXJbQT4+Ml09aSxBPWIpLHQ9KGY8PDMpLWx8MCxhcltuKzQ+PjJdPTN8bCxhclsoZj1uK2x8MCkrND4+Ml09MXx0LGFyW2YrdD4+Ml09dCwwfHUmJihuPTB8YXJbMTQzOTddLGk9NTc2MDgrKChyPXU+Pj4zKTw8MTw8Mil8MCxBJihyPTE8PHIpP3I9MHxhclsoQT1pKzh8MCk+PjJdOihhclsxNDM5Ml09QXxyLEE9KHI9aSkrOHwwKSxhcltBPj4yXT1uLGFyW3IrMTI+PjJdPW4sYXJbbis4Pj4yXT1yLGFyW24rMTI+PjJdPWkpLGFyWzE0Mzk0XT10LGFyWzE0Mzk3XT1mLHVyPWUsMHwoWj1vKTtpZihhPTB8YXJbMTQzOTNdKXtpZihpPShhJjAtYSktMXwwLEE9MHxhcls1Nzg3MisoKCh0PShpPj4+PW89aT4+PjEyJjE2KT4+PjUmOCl8b3woYz0oaT4+Pj10KT4+PjImNCl8KGY9KGk+Pj49Yyk+Pj4xJjIpfChBPShpPj4+PWYpPj4+MSYxKSkrKGk+Pj5BKTw8Mik+PjJdLGk9KC04JmFyW0ErND4+Ml0pLWx8MCxmPTB8YXJbQSsxNisoKDA9PSgwfGFyW0ErMTY+PjJdKSYxKTw8Mik+PjJdKXtmb3IoO2k9KGM9KG89KC04JmFyW2YrND4+Ml0pLWx8MCk+Pj4wPGk+Pj4wKT9vOmksQT1jP2Y6QSwwIT0oMHwoZj0wfGFyW2YrMTYrKCgwPT0oMHxhcltmKzE2Pj4yXSkmMSk8PDIpPj4yXSkpOyk7Yz1BLHQ9aX1lbHNlIGM9QSx0PWk7aWYoYz4+PjA8KG89YytsfDApPj4+MCl7bj0wfGFyW2MrMjQ+PjJdLHI9MHxhcltjKzEyPj4yXTtkb3tpZigoMHxyKT09KDB8Yykpe2lmKCEocj0wfGFyWyhBPWMrMjB8MCk+PjJdKSYmIShyPTB8YXJbKEE9YysxNnwwKT4+Ml0pKXtpPTA7YnJlYWt9Zm9yKDs7KWlmKDB8KGY9MHxhclsoaT1yKzIwfDApPj4yXSkpcj1mLEE9aTtlbHNle2lmKCEoZj0wfGFyWyhpPXIrMTZ8MCk+PjJdKSlicmVhaztyPWYsQT1pfWFyW0E+PjJdPTAsaT1yfWVsc2UgaT0wfGFyW2MrOD4+Ml0sYXJbaSsxMj4+Ml09cixhcltyKzg+PjJdPWksaT1yfXdoaWxlKDApO2Rve2lmKDB8bil7aWYocj0wfGFyW2MrMjg+PjJdLCgwfGMpPT0oMHxhclsoQT01Nzg3Misocjw8Mil8MCk+PjJdKSl7aWYoIShhcltBPj4yXT1pKSl7YXJbMTQzOTNdPWEmfigxPDxyKTticmVha319ZWxzZSBpZighKGFyW24rMTYrKCgoMHxhcltuKzE2Pj4yXSkhPSgwfGMpJjEpPDwyKT4+Ml09aSkpYnJlYWs7YXJbaSsyND4+Ml09biwwfChyPTB8YXJbYysxNj4+Ml0pJiYoYXJbaSsxNj4+Ml09cixhcltyKzI0Pj4yXT1pKSwwfChyPTB8YXJbYysyMD4+Ml0pJiYoYXJbaSsyMD4+Ml09cixhcltyKzI0Pj4yXT1pKX19d2hpbGUoMCk7cmV0dXJuIHQ+Pj4wPDE2PyhaPXQrbHwwLGFyW2MrND4+Ml09M3xaLGFyWyhaPWMrWis0fDApPj4yXT0xfGFyW1o+PjJdKTooYXJbYys0Pj4yXT0zfGwsYXJbbys0Pj4yXT0xfHQsYXJbbyt0Pj4yXT10LDB8dSYmKGY9MHxhclsxNDM5N10saT01NzYwOCsoKHI9dT4+PjMpPDwxPDwyKXwwLGImKHI9MTw8cik/cj0wfGFyWyhBPWkrOHwwKT4+Ml06KGFyWzE0MzkyXT1ifHIsQT0ocj1pKSs4fDApLGFyW0E+PjJdPWYsYXJbcisxMj4+Ml09ZixhcltmKzg+PjJdPXIsYXJbZisxMj4+Ml09aSksYXJbMTQzOTRdPXQsYXJbMTQzOTddPW8pLHVyPWUsMHwoWj1jKzh8MCl9Yj1sfWVsc2UgYj1sfWVsc2UgYj1sfWVsc2UgaWYoQT4+PjA8PTQyOTQ5NjcyMzEpaWYobD0tOCYoQT1BKzExfDApLGM9MHxhclsxNDM5M10pe2Y9MC1sfDAsYT0oQT4+Pj04KT8xNjc3NzIxNTxsPj4+MD8zMTpsPj4+KChhPTE0LSgodT0oKGc9QTw8KGI9KEErMTA0ODMyMHwwKT4+PjE2JjgpKSs1MjAxOTJ8MCk+Pj4xNiY0KXxifChhPSgoZzw8PXUpKzI0NTc2MHwwKT4+PjE2JjIpKSsoZzw8YT4+PjE1KXwwKSs3fDApJjF8YTw8MTowLGk9MHxhcls1Nzg3MisoYTw8Mik+PjJdO0E6ZG97aWYoaSlmb3Iobz1sPDwoMzE9PSgoQT0wKXxhKT8wOjI1LShhPj4+MSl8MCksdD0wOzspe2lmKChuPSgtOCZhcltpKzQ+PjJdKS1sfDApPj4+MDxmPj4+MCl7aWYoIW4pe2Y9MCxuPUE9aSxnPTYxO2JyZWFrIEF9QT1pLGY9bn1pZih0PTA9PSgwfChuPTB8YXJbaSsyMD4+Ml0pKXwoMHxuKT09KDB8KGk9MHxhcltpKzE2KyhvPj4+MzE8PDIpPj4yXSkpP3Q6bixuPTA9PSgwfGkpKXtpPXQsZz01NzticmVha31vPDw9MSYoMV5uKX1lbHNlIEE9aT0wLGc9NTd9d2hpbGUoMCk7aWYoNTc9PSgwfGcpKXtpZigwPT0oMHxpKSYwPT0oMHxBKSl7aWYoIShBPWMmKChBPTI8PGEpfDAtQSkpKXtiPWw7YnJlYWt9Yj0oQSYwLUEpLTF8MCxpPShBPTApfGFyWzU3ODcyKygoKHQ9KGI+Pj49bz1iPj4+MTImMTYpPj4+NSY4KXxvfChhPShiPj4+PXQpPj4+MiY0KXwodT0oYj4+Pj1hKT4+PjEmMil8KGk9KGI+Pj49dSk+Pj4xJjEpKSsoYj4+PmkpPDwyKT4+Ml19aT8obj1pLGc9NjEpOihhPUEsbz1mKX1pZig2MT09KDB8ZykpZm9yKDs7KXtpZihnPTAsaT0oYj0oaT0oLTgmYXJbbis0Pj4yXSktbHwwKT4+PjA8Zj4+PjApP2k6ZixBPWI/bjpBLCEobj0wfGFyW24rMTYrKCgwPT0oMHxhcltuKzE2Pj4yXSkmMSk8PDIpPj4yXSkpe2E9QSxvPWk7YnJlYWt9Zj1pLGc9NjF9aWYoMCE9KDB8YSkmJm8+Pj4wPCgoMHxhclsxNDM5NF0pLWx8MCk+Pj4wKXtpZigodD1hK2x8MCk+Pj4wPD1hPj4+MClyZXR1cm4gdXI9ZSwoWj0wKXxaO249MHxhclthKzI0Pj4yXSxyPTB8YXJbYSsxMj4+Ml07ZG97aWYoKDB8cik9PSgwfGEpKXtpZighKHI9MHxhclsoQT1hKzIwfDApPj4yXSkmJiEocj0wfGFyWyhBPWErMTZ8MCk+PjJdKSl7cj0wO2JyZWFrfWZvcig7OylpZigwfChmPTB8YXJbKGk9cisyMHwwKT4+Ml0pKXI9ZixBPWk7ZWxzZXtpZighKGY9MHxhclsoaT1yKzE2fDApPj4yXSkpYnJlYWs7cj1mLEE9aX1hcltBPj4yXT0wfWVsc2UgWj0wfGFyW2ErOD4+Ml0sYXJbWisxMj4+Ml09cixhcltyKzg+PjJdPVp9d2hpbGUoMCk7ZG97aWYobil7aWYoQT0wfGFyW2ErMjg+PjJdLCgwfGEpPT0oMHxhclsoaT01Nzg3MisoQTw8Mil8MCk+PjJdKSl7aWYoIShhcltpPj4yXT1yKSl7Zj1jJn4oMTw8QSksYXJbMTQzOTNdPWY7YnJlYWt9fWVsc2UgaWYoIShhcltuKzE2KygoKDB8YXJbbisxNj4+Ml0pIT0oMHxhKSYxKTw8Mik+PjJdPXIpKXtmPWM7YnJlYWt9YXJbcisyND4+Ml09biwwfChBPTB8YXJbYSsxNj4+Ml0pJiYoYXJbcisxNj4+Ml09QSxhcltBKzI0Pj4yXT1yKSxmPSgoQT0wfGFyW2ErMjA+PjJdKSYmKGFyW3IrMjA+PjJdPUEsYXJbQSsyND4+Ml09ciksYyl9ZWxzZSBmPWN9d2hpbGUoMCk7ZG97aWYoMTY8PW8+Pj4wKXtpZihhclthKzQ+PjJdPTN8bCxhclt0KzQ+PjJdPTF8byxyPShhclt0K28+PjJdPW8pPj4+MyxvPj4+MDwyNTYpe2k9NTc2MDgrKHI8PDE8PDIpfDAsKEE9MHxhclsxNDM5Ml0pJihyPTE8PHIpP3I9MHxhclsoQT1pKzh8MCk+PjJdOihhclsxNDM5Ml09QXxyLEE9KHI9aSkrOHwwKSxhcltBPj4yXT10LGFyW3IrMTI+PjJdPXQsYXJbdCs4Pj4yXT1yLGFyW3QrMTI+PjJdPWk7YnJlYWt9aWYoaT01Nzg3MisoKHI9KHI9bz4+PjgpPzE2Nzc3MjE1PG8+Pj4wPzMxOm8+Pj4oKHI9MTQtKChtPSgoWj1yPDwoZz0ocisxMDQ4MzIwfDApPj4+MTYmOCkpKzUyMDE5MnwwKT4+PjE2JjQpfGd8KHI9KChaPDw9bSkrMjQ1NzYwfDApPj4+MTYmMikpKyhaPDxyPj4+MTUpfDApKzd8MCkmMXxyPDwxOjApPDwyKXwwLGFyW3QrMjg+PjJdPXIsYXJbKEE9dCsxNnwwKSs0Pj4yXT0wLGFyW0E+PjJdPTAsIShmJihBPTE8PHIpKSl7YXJbMTQzOTNdPWZ8QSxhcltpPj4yXT10LGFyW3QrMjQ+PjJdPWksYXJbdCsxMj4+Ml09dCxhclt0Kzg+PjJdPXQ7YnJlYWt9Zm9yKEE9bzw8KDMxPT0oMHxyKT8wOjI1LShyPj4+MSl8MCksaT0wfGFyW2k+PjJdOzspe2lmKCgtOCZhcltpKzQ+PjJdfDApPT0oMHxvKSl7Zz05NzticmVha31pZighKHI9MHxhclsoZj1pKzE2KyhBPj4+MzE8PDIpfDApPj4yXSkpe2c9OTY7YnJlYWt9QTw8PTEsaT1yfWlmKDk2PT0oMHxnKSl7YXJbZj4+Ml09dCxhclt0KzI0Pj4yXT1pLGFyW3QrMTI+PjJdPXQsYXJbdCs4Pj4yXT10O2JyZWFrfWlmKDk3PT0oMHxnKSl7Wj0wfGFyWyhnPWkrOHwwKT4+Ml0sYXJbWisxMj4+Ml09dCxhcltnPj4yXT10LGFyW3QrOD4+Ml09Wixhclt0KzEyPj4yXT1pLGFyW3QrMjQ+PjJdPTA7YnJlYWt9fWVsc2UgWj1vK2x8MCxhclthKzQ+PjJdPTN8WixhclsoWj1hK1orNHwwKT4+Ml09MXxhcltaPj4yXX13aGlsZSgwKTtyZXR1cm4gdXI9ZSwwfChaPWErOHwwKX1iPWx9ZWxzZSBiPWw7ZWxzZSBiPS0xfXdoaWxlKDApO2lmKGI+Pj4wPD0oaT0wfGFyWzE0Mzk0XSk+Pj4wKXJldHVybiByPWktYnwwLEE9MHxhclsxNDM5N10sMTU8cj4+PjA/KFo9QStifDAsYXJbMTQzOTddPVosYXJbMTQzOTRdPXIsYXJbWis0Pj4yXT0xfHIsYXJbWityPj4yXT1yLGFyW0ErND4+Ml09M3xiKTooYXJbMTQzOTRdPTAsYXJbMTQzOTddPTAsYXJbQSs0Pj4yXT0zfGksYXJbKFo9QStpKzR8MCk+PjJdPTF8YXJbWj4+Ml0pLHVyPWUsMHwoWj1BKzh8MCk7aWYoYj4+PjA8KG89MHxhclsxNDM5NV0pPj4+MClyZXR1cm4gbT1vLWJ8MCxhclsxNDM5NV09bSxnPShaPTB8YXJbMTQzOThdKStifDAsYXJbMTQzOThdPWcsYXJbZys0Pj4yXT0xfG0sYXJbWis0Pj4yXT0zfGIsdXI9ZSwwfChaPVorOHwwKTtpZihhPWIrNDh8MCwobD0odD0oQT0wfGFyWzE0NTEwXT8wfGFyWzE0NTEyXTooYXJbMTQ1MTJdPTQwOTYsYXJbMTQ1MTFdPTQwOTYsYXJbMTQ1MTNdPS0xLGFyWzE0NTE0XT0tMSxhclsxNDUxNV09MCxhclsxNDUwM109MCxBPS0xNiZzXjE0MzE2NTU3NjgsYXJbcz4+Ml09QSxhclsxNDUxMF09QSw0MDk2KSkrKGM9Yis0N3wwKXwwKSYobj0wLUF8MCkpPj4+MDw9Yj4+PjApcmV0dXJuIHVyPWUsKFo9MCl8WjtpZigwfChBPTB8YXJbMTQ1MDJdKSYmKHM9KHU9MHxhclsxNDUwMF0pK2x8MCk+Pj4wPD11Pj4+MHxBPj4+MDxzPj4+MClyZXR1cm4gdXI9ZSwoWj0wKXxaO0E6ZG97aWYoNCZhclsxNDUwM10pcj0wLGc9MTMzO2Vsc2V7aT0wfGFyWzE0Mzk4XTtlOmRve2lmKGkpe2ZvcihmPTU4MDE2OyEoKEE9MHxhcltmPj4yXSk+Pj4wPD1pPj4+MCYmKEErKDB8YXJbKGg9Zis0fDApPj4yXSl8MCk+Pj4wPmk+Pj4wKTspe2lmKCEoQT0wfGFyW2YrOD4+Ml0pKXtnPTExODticmVhayBlfWY9QX1pZigocj10LW8mbik+Pj4wPDIxNDc0ODM2NDcpaWYoKDB8KEE9MHx5YigwfHIpKSk9PSgoMHxhcltmPj4yXSkrKDB8YXJbaD4+Ml0pfDApKXtpZigtMSE9KDB8QSkpe289cix0PUEsZz0xMzU7YnJlYWsgQX19ZWxzZSBmPUEsZz0xMjY7ZWxzZSByPTB9ZWxzZSBnPTExOH13aGlsZSgwKTtkb3tpZigxMTg9PSgwfGcpKWlmKC0xIT0oMHwoaT0wfHliKDApKSkmJihyPWksaz0ocj0oMD09KChrPShkPTB8YXJbMTQ1MTFdKSstMXwwKSZyfDApPzA6KGsrciYwLWQpLXJ8MCkrbHwwKSsoZD0wfGFyWzE0NTAwXSl8MCxiPj4+MDxyPj4+MCZyPj4+MDwyMTQ3NDgzNjQ3KSl7aWYoMHwoaD0wfGFyWzE0NTAyXSkmJms+Pj4wPD1kPj4+MHxoPj4+MDxrPj4+MCl7cj0wO2JyZWFrfWlmKCgwfChBPTB8eWIoMHxyKSkpPT0oMHxpKSl7bz1yLHQ9aSxnPTEzNTticmVhayBBfWY9QSxnPTEyNn1lbHNlIHI9MH13aGlsZSgwKTtkb3tpZigxMjY9PSgwfGcpKXtpZihpPTAtcnwwLCEocj4+PjA8YT4+PjAmcj4+PjA8MjE0NzQ4MzY0NyYtMSE9KDB8ZikpKXtpZigtMT09KDB8Zikpe3I9MDticmVha31vPXIsdD1mLGc9MTM1O2JyZWFrIEF9aWYoMjE0NzQ4MzY0Nzw9KEE9Yy1yKyhBPTB8YXJbMTQ1MTJdKSYwLUEpPj4+MCl7bz1yLHQ9ZixnPTEzNTticmVhayBBfWlmKC0xPT0oMHx5YigwfEEpKSl7eWIoMHxpKSxyPTA7YnJlYWt9bz1BK3J8MCx0PWYsZz0xMzU7YnJlYWsgQX19d2hpbGUoMCk7YXJbMTQ1MDNdPTR8YXJbMTQ1MDNdLGc9MTMzfX13aGlsZSgwKTtpZigxMzM9PSgwfGcpJiZsPj4+MDwyMTQ3NDgzNjQ3JiYhKC0xPT0oMHwobT0wfHliKDB8bCkpKXwxXih2PShiKzQwfDApPj4+MDwodz0oaD0wfHliKDApKS1tfDApPj4+MCl8bT4+PjA8aD4+PjAmLTEhPSgwfG0pJi0xIT0oMHxoKV4xKSYmKG89dj93OnIsdD1tLGc9MTM1KSwxMzU9PSgwfGcpKXtyPSgwfGFyWzE0NTAwXSkrb3wwLChhclsxNDUwMF09cik+Pj4wPigwfGFyWzE0NTAxXSk+Pj4wJiYoYXJbMTQ1MDFdPXIpLGM9MHxhclsxNDM5OF07ZG97aWYoYyl7Zm9yKHI9NTgwMTY7Oyl7aWYoKDB8dCk9PSgoQT0wfGFyW3I+PjJdKSsoZj0wfGFyWyhpPXIrNHwwKT4+Ml0pfDApKXtnPTE0NTticmVha31pZighKG49MHxhcltyKzg+PjJdKSlicmVhaztyPW59aWYoMTQ1PT0oMHxnKSYmMD09KDgmYXJbcisxMj4+Ml18MCkmJmM+Pj4wPHQ+Pj4wJkE+Pj4wPD1jPj4+MCl7YXJbaT4+Ml09ZitvLGc9YysoWj0wPT0oNyYoWj1jKzh8MCl8MCk/MDowLVomNyl8MCxaPSgwfGFyWzE0Mzk1XSkrKG8tWil8MCxhclsxNDM5OF09ZyxhclsxNDM5NV09WixhcltnKzQ+PjJdPTF8WixhcltnK1orND4+Ml09NDAsYXJbMTQzOTldPWFyWzE0NTE0XTticmVha31mb3IodD4+PjA8KDB8YXJbMTQzOTZdKT4+PjAmJihhclsxNDM5Nl09dCksaT10K298MCxyPTU4MDE2Ozspe2lmKCgwfGFyW3I+PjJdKT09KDB8aSkpe2c9MTUzO2JyZWFrfWlmKCEoQT0wfGFyW3IrOD4+Ml0pKWJyZWFrO3I9QX1pZigxNTM9PSgwfGcpJiYwPT0oOCZhcltyKzEyPj4yXXwwKSl7YXJbcj4+Ml09dCxhclsodT1yKzR8MCk+PjJdPSgwfGFyW3U+PjJdKStvLGw9KHU9dCsoMD09KDcmKHU9dCs4fDApfDApPzA6MC11JjcpfDApK2J8MCxhPShyPWkrKDA9PSg3JihyPWkrOHwwKXwwKT8wOjAtciY3KXwwKS11LWJ8MCxhclt1KzQ+PjJdPTN8Yjtkb3tpZigoMHxyKSE9KDB8Yykpe2lmKCgwfHIpPT0oMHxhclsxNDM5N10pKXtaPSgwfGFyWzE0Mzk0XSkrYXwwLGFyWzE0Mzk0XT1aLGFyWzE0Mzk3XT1sLGFyW2wrND4+Ml09MXxaLGFyW2wrWj4+Ml09WjticmVha31pZigxPT0oMyYoQT0wfGFyW3IrND4+Ml0pfDApKXtvPS04JkEsZj1BPj4+MztBOmRve2lmKEE+Pj4wPDI1Nil7aWYoQT0wfGFyW3IrOD4+Ml0sKDB8KGk9MHxhcltyKzEyPj4yXSkpPT0oMHxBKSl7YXJbMTQzOTJdPWFyWzE0MzkyXSZ+KDE8PGYpO2JyZWFrfWFyW0ErMTI+PjJdPWksYXJbaSs4Pj4yXT1BO2JyZWFrfXQ9MHxhcltyKzI0Pj4yXSxBPTB8YXJbcisxMj4+Ml07ZG97aWYoKDB8QSk9PSgwfHIpKXtpZighKEE9MHxhclsoaT0oZj1yKzE2fDApKzR8MCk+PjJdKSl7aWYoIShBPTB8YXJbZj4+Ml0pKXtBPTA7YnJlYWt9aT1mfWZvcig7OylpZigwfChuPTB8YXJbKGY9QSsyMHwwKT4+Ml0pKUE9bixpPWY7ZWxzZXtpZighKG49MHxhclsoZj1BKzE2fDApPj4yXSkpYnJlYWs7QT1uLGk9Zn1hcltpPj4yXT0wfWVsc2UgWj0wfGFyW3IrOD4+Ml0sYXJbWisxMj4+Ml09QSxhcltBKzg+PjJdPVp9d2hpbGUoMCk7aWYoIXQpYnJlYWs7Zj01Nzg3MisoKGk9MHxhcltyKzI4Pj4yXSk8PDIpfDA7ZG97aWYoKDB8cik9PSgwfGFyW2Y+PjJdKSl7aWYoMHwoYXJbZj4+Ml09QSkpYnJlYWs7YXJbMTQzOTNdPWFyWzE0MzkzXSZ+KDE8PGkpO2JyZWFrIEF9aWYoIShhclt0KzE2KygoKDB8YXJbdCsxNj4+Ml0pIT0oMHxyKSYxKTw8Mik+PjJdPUEpKWJyZWFrIEF9d2hpbGUoMCk7aWYoYXJbQSsyND4+Ml09dCwwfChmPTB8YXJbKGk9cisxNnwwKT4+Ml0pJiYoYXJbQSsxNj4+Ml09ZixhcltmKzI0Pj4yXT1BKSwhKGk9MHxhcltpKzQ+PjJdKSlicmVhazthcltBKzIwPj4yXT1pLGFyW2krMjQ+PjJdPUF9d2hpbGUoMCk7cj1yK298MCxuPW8rYXwwfWVsc2Ugbj1hO2lmKGFyWyhyPXIrNHwwKT4+Ml09LTImYXJbcj4+Ml0sYXJbbCs0Pj4yXT0xfG4scj0oYXJbbCtuPj4yXT1uKT4+PjMsbj4+PjA8MjU2KXtpPTU3NjA4KyhyPDwxPDwyKXwwLChBPTB8YXJbMTQzOTJdKSYocj0xPDxyKT9yPTB8YXJbKEE9aSs4fDApPj4yXTooYXJbMTQzOTJdPUF8cixBPShyPWkpKzh8MCksYXJbQT4+Ml09bCxhcltyKzEyPj4yXT1sLGFyW2wrOD4+Ml09cixhcltsKzEyPj4yXT1pO2JyZWFrfXI9bj4+Pjg7ZG97aWYocil7aWYoMTY3NzcyMTU8bj4+PjApe3I9MzE7YnJlYWt9cj1uPj4+KChyPTE0LSgobT0oKFo9cjw8KGc9KHIrMTA0ODMyMHwwKT4+PjE2JjgpKSs1MjAxOTJ8MCk+Pj4xNiY0KXxnfChyPSgoWjw8PW0pKzI0NTc2MHwwKT4+PjE2JjIpKSsoWjw8cj4+PjE1KXwwKSs3fDApJjF8cjw8MX1lbHNlIHI9MH13aGlsZSgwKTtpZihmPTU3ODcyKyhyPDwyKXwwLGFyW2wrMjg+PjJdPXIsYXJbKEE9bCsxNnwwKSs0Pj4yXT0wLCEoKEE9KGFyW0E+PjJdPTApfGFyWzE0MzkzXSkmKGk9MTw8cikpKXthclsxNDM5M109QXxpLGFyW2Y+PjJdPWwsYXJbbCsyND4+Ml09ZixhcltsKzEyPj4yXT1sLGFyW2wrOD4+Ml09bDticmVha31mb3IoQT1uPDwoMzE9PSgwfHIpPzA6MjUtKHI+Pj4xKXwwKSxpPTB8YXJbZj4+Ml07Oyl7aWYoKC04JmFyW2krND4+Ml18MCk9PSgwfG4pKXtnPTE5NDticmVha31pZighKHI9MHxhclsoZj1pKzE2KyhBPj4+MzE8PDIpfDApPj4yXSkpe2c9MTkzO2JyZWFrfUE8PD0xLGk9cn1pZigxOTM9PSgwfGcpKXthcltmPj4yXT1sLGFyW2wrMjQ+PjJdPWksYXJbbCsxMj4+Ml09bCxhcltsKzg+PjJdPWw7YnJlYWt9aWYoMTk0PT0oMHxnKSl7Wj0wfGFyWyhnPWkrOHwwKT4+Ml0sYXJbWisxMj4+Ml09bCxhcltnPj4yXT1sLGFyW2wrOD4+Ml09WixhcltsKzEyPj4yXT1pLGFyW2wrMjQ+PjJdPTA7YnJlYWt9fWVsc2UgWj0oMHxhclsxNDM5NV0pK2F8MCxhclsxNDM5NV09WixhclsxNDM5OF09bCxhcltsKzQ+PjJdPTF8Wn13aGlsZSgwKTtyZXR1cm4gdXI9ZSwwfChaPXUrOHwwKX1mb3Iocj01ODAxNjshKChBPTB8YXJbcj4+Ml0pPj4+MDw9Yz4+PjAmJmM+Pj4wPChaPUErKDB8YXJbcis0Pj4yXSl8MCk+Pj4wKTspcj0wfGFyW3IrOD4+Ml07Zm9yKHI9KEE9KEE9KG49WistNDd8MCkrKDA9PSg3JihBPW4rOHwwKXwwKT8wOjAtQSY3KXwwKT4+PjA8KG49YysxNnwwKT4+PjA/YzpBKSs4fDAsZz10KyhpPTA9PSg3JihpPXQrOHwwKXwwKT8wOjAtaSY3KXwwLGk9bystNDAtaXwwLGFyWzE0Mzk4XT1nLGFyWzE0Mzk1XT1pLGFyW2crND4+Ml09MXxpLGFyW2craSs0Pj4yXT00MCxhclsxNDM5OV09YXJbMTQ1MTRdLGFyWyhpPUErNHwwKT4+Ml09MjcsYXJbcj4+Ml09YXJbMTQ1MDRdLGFyW3IrND4+Ml09YXJbMTQ1MDVdLGFyW3IrOD4+Ml09YXJbMTQ1MDZdLGFyW3IrMTI+PjJdPWFyWzE0NTA3XSxhclsxNDUwNF09dCxhclsxNDUwNV09byxhclsxNDUwN109MCxhclsxNDUwNl09cixyPUErMjR8MDthclsocj0oZz1yKSs0fDApPj4yXT03LChnKzh8MCk+Pj4wPFo+Pj4wOyk7aWYoKDB8QSkhPSgwfGMpKXtpZih0PUEtY3wwLGFyW2k+PjJdPS0yJmFyW2k+PjJdLGFyW2MrND4+Ml09MXx0LHI9KGFyW0E+PjJdPXQpPj4+Myx0Pj4+MDwyNTYpe2k9NTc2MDgrKHI8PDE8PDIpfDAsKEE9MHxhclsxNDM5Ml0pJihyPTE8PHIpP3I9MHxhclsoQT1pKzh8MCk+PjJdOihhclsxNDM5Ml09QXxyLEE9KHI9aSkrOHwwKSxhcltBPj4yXT1jLGFyW3IrMTI+PjJdPWMsYXJbYys4Pj4yXT1yLGFyW2MrMTI+PjJdPWk7YnJlYWt9aWYoZj01Nzg3MisoKGk9KHI9dD4+PjgpPzE2Nzc3MjE1PHQ+Pj4wPzMxOnQ+Pj4oKGk9MTQtKChtPSgoWj1yPDwoZz0ocisxMDQ4MzIwfDApPj4+MTYmOCkpKzUyMDE5MnwwKT4+PjE2JjQpfGd8KGk9KChaPDw9bSkrMjQ1NzYwfDApPj4+MTYmMikpKyhaPDxpPj4+MTUpfDApKzd8MCkmMXxpPDwxOjApPDwyKXwwLGFyW2MrMjg+PjJdPWksYXJbYysyMD4+Ml09MCwhKChyPShhcltuPj4yXT0wKXxhclsxNDM5M10pJihBPTE8PGkpKSl7YXJbMTQzOTNdPXJ8QSxhcltmPj4yXT1jLGFyW2MrMjQ+PjJdPWYsYXJbYysxMj4+Ml09YyxhcltjKzg+PjJdPWM7YnJlYWt9Zm9yKEE9dDw8KDMxPT0oMHxpKT8wOjI1LShpPj4+MSl8MCksaT0wfGFyW2Y+PjJdOzspe2lmKCgtOCZhcltpKzQ+PjJdfDApPT0oMHx0KSl7Zz0yMTY7YnJlYWt9aWYoIShyPTB8YXJbKGY9aSsxNisoQT4+PjMxPDwyKXwwKT4+Ml0pKXtnPTIxNTticmVha31BPDw9MSxpPXJ9aWYoMjE1PT0oMHxnKSl7YXJbZj4+Ml09YyxhcltjKzI0Pj4yXT1pLGFyW2MrMTI+PjJdPWMsYXJbYys4Pj4yXT1jO2JyZWFrfWlmKDIxNj09KDB8Zykpe1o9MHxhclsoZz1pKzh8MCk+PjJdLGFyW1orMTI+PjJdPWMsYXJbZz4+Ml09YyxhcltjKzg+PjJdPVosYXJbYysxMj4+Ml09aSxhcltjKzI0Pj4yXT0wO2JyZWFrfX19ZWxzZXtmb3IoMD09KDB8KFo9MHxhclsxNDM5Nl0pKXx0Pj4+MDxaPj4+MCYmKGFyWzE0Mzk2XT10KSxhclsxNDUwNF09dCxhclsxNDUwNV09byxhclsxNDUwN109MCxhclsxNDQwMV09YXJbMTQ1MTBdLGFyWzE0NDAwXT0tMSxyPTA7YXJbKFo9NTc2MDgrKHI8PDE8PDIpfDApKzEyPj4yXT1aLGFyW1orOD4+Ml09WiwzMiE9KDB8KHI9cisxfDApKTspO2c9dCsoWj0wPT0oNyYoWj10Kzh8MCl8MCk/MDowLVomNyl8MCxaPW8rLTQwLVp8MCxhclsxNDM5OF09ZyxhclsxNDM5NV09WixhcltnKzQ+PjJdPTF8WixhcltnK1orND4+Ml09NDAsYXJbMTQzOTldPWFyWzE0NTE0XX19d2hpbGUoMCk7aWYoYj4+PjA8KHI9MHxhclsxNDM5NV0pPj4+MClyZXR1cm4gbT1yLWJ8MCxhclsxNDM5NV09bSxnPShaPTB8YXJbMTQzOThdKStifDAsYXJbMTQzOThdPWcsYXJbZys0Pj4yXT0xfG0sYXJbWis0Pj4yXT0zfGIsdXI9ZSwwfChaPVorOHwwKX1yZXR1cm4gYXJbKFo9MTAzNjQpPj4yXT0xMix1cj1lLChaPTApfFp9ZnVuY3Rpb24gQmMoQSl7dmFyIGU9MCxyPTAsaT0wLGY9MCxuPTAsdD0wLG89MCxhPTA7aWYoQXw9MCl7cj1BKy04fDAsZj0wfGFyWzE0Mzk2XSxhPXIrKGU9LTgmKEE9MHxhcltBKy00Pj4yXSkpfDA7ZG97aWYoMSZBKXQ9bz1yO2Vsc2V7aWYoaT0wfGFyW3I+PjJdLCEoMyZBKSlyZXR1cm47aWYobj1pK2V8MCwodD1yKygwLWkpfDApPj4+MDxmPj4+MClyZXR1cm47aWYoKDB8dCk9PSgwfGFyWzE0Mzk3XSkpe2lmKDM9PSgzJihlPTB8YXJbKEE9YSs0fDApPj4yXSl8MCkpcmV0dXJuIGFyWzE0Mzk0XT1uLGFyW0E+PjJdPS0yJmUsYXJbdCs0Pj4yXT0xfG4sdm9pZChhclt0K24+PjJdPW4pO289dCxlPW47YnJlYWt9aWYocj1pPj4+MyxpPj4+MDwyNTYpe2lmKEE9MHxhclt0Kzg+PjJdLCgwfChlPTB8YXJbdCsxMj4+Ml0pKT09KDB8QSkpe2FyWzE0MzkyXT1hclsxNDM5Ml0mfigxPDxyKSxvPXQsZT1uO2JyZWFrfWFyW0ErMTI+PjJdPWUsYXJbZSs4Pj4yXT1BLG89dCxlPW47YnJlYWt9Zj0wfGFyW3QrMjQ+PjJdLEE9MHxhclt0KzEyPj4yXTtkb3tpZigoMHxBKT09KDB8dCkpe2lmKCEoQT0wfGFyWyhlPShyPXQrMTZ8MCkrNHwwKT4+Ml0pKXtpZighKEE9MHxhcltyPj4yXSkpe0E9MDticmVha31lPXJ9Zm9yKDs7KWlmKDB8KGk9MHxhclsocj1BKzIwfDApPj4yXSkpQT1pLGU9cjtlbHNle2lmKCEoaT0wfGFyWyhyPUErMTZ8MCk+PjJdKSlicmVhaztBPWksZT1yfWFyW2U+PjJdPTB9ZWxzZSBvPTB8YXJbdCs4Pj4yXSxhcltvKzEyPj4yXT1BLGFyW0ErOD4+Ml09b313aGlsZSgwKTtpZihmKXtpZihlPTB8YXJbdCsyOD4+Ml0sKDB8dCk9PSgwfGFyWyhyPTU3ODcyKyhlPDwyKXwwKT4+Ml0pKXtpZighKGFyW3I+PjJdPUEpKXthclsxNDM5M109YXJbMTQzOTNdJn4oMTw8ZSksbz10LGU9bjticmVha319ZWxzZSBpZighKGFyW2YrMTYrKCgoMHxhcltmKzE2Pj4yXSkhPSgwfHQpJjEpPDwyKT4+Ml09QSkpe289dCxlPW47YnJlYWt9YXJbQSsyND4+Ml09ZiwwfChyPTB8YXJbKGU9dCsxNnwwKT4+Ml0pJiYoYXJbQSsxNj4+Ml09cixhcltyKzI0Pj4yXT1BKSxlPShvPSgoZT0wfGFyW2UrND4+Ml0pJiYoYXJbQSsyMD4+Ml09ZSxhcltlKzI0Pj4yXT1BKSx0KSxuKX1lbHNlIG89dCxlPW59fXdoaWxlKDApO2lmKCEoYT4+PjA8PXQ+Pj4wKSYmMSYoaT0wfGFyWyhBPWErNHwwKT4+Ml0pKXtpZigyJmkpYXJbQT4+Ml09LTImaSxhcltvKzQ+PjJdPTF8ZSxmPWFyW3QrZT4+Ml09ZTtlbHNle2lmKEE9MHxhclsxNDM5N10sKDB8YSk9PSgwfGFyWzE0Mzk4XSkpe2lmKGE9KDB8YXJbMTQzOTVdKStlfDAsYXJbMTQzOTVdPWEsYXJbMTQzOThdPW8sYXJbbys0Pj4yXT0xfGEsKDB8bykhPSgwfEEpKXJldHVybjtyZXR1cm4gYXJbMTQzOTddPTAsdm9pZChhclsxNDM5NF09MCl9aWYoKDB8YSk9PSgwfEEpKXJldHVybiBhPSgwfGFyWzE0Mzk0XSkrZXwwLGFyWzE0Mzk0XT1hLGFyWzE0Mzk3XT10LGFyW28rND4+Ml09MXxhLHZvaWQoYXJbdCthPj4yXT1hKTtmPSgtOCZpKStlfDAscj1pPj4+Mztkb3tpZihpPj4+MDwyNTYpe2lmKGU9MHxhclthKzg+PjJdLCgwfChBPTB8YXJbYSsxMj4+Ml0pKT09KDB8ZSkpe2FyWzE0MzkyXT1hclsxNDM5Ml0mfigxPDxyKTticmVha31hcltlKzEyPj4yXT1BLGFyW0ErOD4+Ml09ZTticmVha31uPTB8YXJbYSsyND4+Ml0sQT0wfGFyW2ErMTI+PjJdO2Rve2lmKCgwfEEpPT0oMHxhKSl7aWYoIShBPTB8YXJbKGU9KHI9YSsxNnwwKSs0fDApPj4yXSkpe2lmKCEoQT0wfGFyW3I+PjJdKSl7cj0wO2JyZWFrfWU9cn1mb3IoOzspaWYoMHwoaT0wfGFyWyhyPUErMjB8MCk+PjJdKSlBPWksZT1yO2Vsc2V7aWYoIShpPTB8YXJbKHI9QSsxNnwwKT4+Ml0pKWJyZWFrO0E9aSxlPXJ9YXJbZT4+Ml09MCxyPUF9ZWxzZSByPTB8YXJbYSs4Pj4yXSxhcltyKzEyPj4yXT1BLGFyW0ErOD4+Ml09cixyPUF9d2hpbGUoMCk7aWYoMHxuKXtpZihBPTB8YXJbYSsyOD4+Ml0sKDB8YSk9PSgwfGFyWyhlPTU3ODcyKyhBPDwyKXwwKT4+Ml0pKXtpZighKGFyW2U+PjJdPXIpKXthclsxNDM5M109YXJbMTQzOTNdJn4oMTw8QSk7YnJlYWt9fWVsc2UgaWYoIShhcltuKzE2KygoKDB8YXJbbisxNj4+Ml0pIT0oMHxhKSYxKTw8Mik+PjJdPXIpKWJyZWFrO2FyW3IrMjQ+PjJdPW4sMHwoZT0wfGFyWyhBPWErMTZ8MCk+PjJdKSYmKGFyW3IrMTY+PjJdPWUsYXJbZSsyND4+Ml09ciksMHwoQT0wfGFyW0ErND4+Ml0pJiYoYXJbcisyMD4+Ml09QSxhcltBKzI0Pj4yXT1yKX19d2hpbGUoMCk7aWYoYXJbbys0Pj4yXT0xfGYsYXJbdCtmPj4yXT1mLCgwfG8pPT0oMHxhclsxNDM5N10pKXJldHVybiB2b2lkKGFyWzE0Mzk0XT1mKX1pZihBPWY+Pj4zLGY+Pj4wPDI1NilyZXR1cm4gcj01NzYwOCsoQTw8MTw8Mil8MCwoZT0wfGFyWzE0MzkyXSkmKEE9MTw8QSk/QT0wfGFyWyhlPXIrOHwwKT4+Ml06KGFyWzE0MzkyXT1lfEEsZT0oQT1yKSs4fDApLGFyW2U+PjJdPW8sYXJbQSsxMj4+Ml09byxhcltvKzg+PjJdPUEsdm9pZChhcltvKzEyPj4yXT1yKTtpPTU3ODcyKygoQT0oQT1mPj4+OCk/MTY3NzcyMTU8Zj4+PjA/MzE6Zj4+PigoQT0xNC0oKG49KChhPUE8PCh0PShBKzEwNDgzMjB8MCk+Pj4xNiY4KSkrNTIwMTkyfDApPj4+MTYmNCl8dHwoQT0oKGE8PD1uKSsyNDU3NjB8MCk+Pj4xNiYyKSkrKGE8PEE+Pj4xNSl8MCkrN3wwKSYxfEE8PDE6MCk8PDIpfDAsYXJbbysyOD4+Ml09QSxhcltvKzIwPj4yXT0wLGU9KGFyW28rMTY+PjJdPTApfGFyWzE0MzkzXSxyPTE8PEE7ZG97aWYoZSZyKXtmb3IoZT1mPDwoMzE9PSgwfEEpPzA6MjUtKEE+Pj4xKXwwKSxyPTB8YXJbaT4+Ml07Oyl7aWYoKC04JmFyW3IrND4+Ml18MCk9PSgwfGYpKXtBPTczO2JyZWFrfWlmKCEoQT0wfGFyWyhpPXIrMTYrKGU+Pj4zMTw8Mil8MCk+PjJdKSl7QT03MjticmVha31lPDw9MSxyPUF9aWYoNzI9PSgwfEEpKXthcltpPj4yXT1vLGFyW28rMjQ+PjJdPXIsYXJbbysxMj4+Ml09byxhcltvKzg+PjJdPW87YnJlYWt9aWYoNzM9PSgwfEEpKXthPTB8YXJbKHQ9cis4fDApPj4yXSxhclthKzEyPj4yXT1vLGFyW3Q+PjJdPW8sYXJbbys4Pj4yXT1hLGFyW28rMTI+PjJdPXIsYXJbbysyND4+Ml09MDticmVha319ZWxzZSBhclsxNDM5M109ZXxyLGFyW2k+PjJdPW8sYXJbbysyND4+Ml09aSxhcltvKzEyPj4yXT1vLGFyW28rOD4+Ml09b313aGlsZSgwKTtpZihhPSgwfGFyWzE0NDAwXSktMXwwLCEoYXJbMTQ0MDBdPWEpKXtmb3IoQT01ODAyNDtBPTB8YXJbQT4+Ml07KUE9QSs4fDA7YXJbMTQ0MDBdPS0xfX19fWZ1bmN0aW9uIEVjKEEsZSl7ZXw9MDt2YXIgcj0wLGk9MDtyZXR1cm4oQXw9MCk/NDI5NDk2NzIzMTxlPj4+MD8oYXJbKGU9MTAzNjQpPj4yXT0xMiwoZT0wKXxlKTowfChyPTB8ZnVuY3Rpb24oQSxlKXtlfD0wO3ZhciByLGksZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MDtpZihsPTB8YXJbKHU9NCsoQXw9MCl8MCk+PjJdLHI9QSsoZj0tOCZsKXwwLCEoMyZsKSlyZXR1cm4hKGU+Pj4wPDI1NikmJihlKzR8MCk+Pj4wPD1mPj4+MCYmKGYtZXwwKT4+PjA8PWFyWzE0NTEyXTw8MT4+PjA/MHxBOihBPTApfEE7aWYoZT4+PjA8PWY+Pj4wKXJldHVybihmPWYtZXwwKT4+PjA8PTE1fHwoYz1BK2V8MCxhclt1Pj4yXT0xJmx8ZXwyLGFyW2MrND4+Ml09M3xmLGFyWyh1PWMrZis0fDApPj4yXT0xfGFyW3U+PjJdLFhjKGMsZikpLDB8QTtpZigoMHxyKT09KDB8YXJbMTQzOThdKSlyZXR1cm4gYz0oMHxhclsxNDM5NV0pK2Z8MCxmPWMtZXwwLG49QStlfDAsYz4+PjA8PWU+Pj4wPyhBPTApfEE6KGFyW3U+PjJdPTEmbHxlfDIsYXJbbis0Pj4yXT0xfGYsYXJbMTQzOThdPW4sYXJbMTQzOTVdPWYsMHxBKTtpZigoMHxyKT09KDB8YXJbMTQzOTddKSlyZXR1cm4odD0oMHxhclsxNDM5NF0pK2Z8MCk+Pj4wPGU+Pj4wPyhBPTApfEE6KG49MSZsLDE1PChmPXQtZXwwKT4+PjA/KGM9KGw9QStlfDApK2Z8MCxhclt1Pj4yXT1ufGV8MixhcltsKzQ+PjJdPTF8ZixhcltjPj4yXT1mLGFyWyhuPWMrNHwwKT4+Ml09LTImYXJbbj4+Ml0sbj1sKTooYXJbdT4+Ml09bnx0fDIsYXJbKG49QSt0KzR8MCk+PjJdPTF8YXJbbj4+Ml0sZj1uPTApLGFyWzE0Mzk0XT1mLGFyWzE0Mzk3XT1uLDB8QSk7aWYoMiYobj0wfGFyWzQrcj4+Ml0pfDApcmV0dXJuKEE9MCl8QTtpZigoaT0oLTgmbikrZnwwKT4+PjA8ZT4+PjApcmV0dXJuKEE9MCl8QTtjPWktZXwwLHQ9bj4+PjM7ZG97aWYobj4+PjA8MjU2KXtpZihuPTB8YXJbOCtyPj4yXSwoMHwoZj0wfGFyWzEyK3I+PjJdKSk9PSgwfG4pKXthclsxNDM5Ml09YXJbMTQzOTJdJn4oMTw8dCk7YnJlYWt9YXJbbisxMj4+Ml09ZixhcltmKzg+PjJdPW47YnJlYWt9YT0wfGFyWzI0K3I+PjJdLGY9MHxhclsxMityPj4yXTtkb3tpZigoMHxmKT09KDB8cikpe2lmKGY9MHxhclsobj0odD0xNityfDApKzR8MCk+PjJdKW89bjtlbHNle2lmKCEoZj0wfGFyW3Q+PjJdKSl7dD0wO2JyZWFrfW89dH1mb3IoOzspaWYoMHwobj0wfGFyWyh0PWYrMjB8MCk+PjJdKSlmPW4sbz10O2Vsc2V7aWYoISh0PTB8YXJbKG49ZisxNnwwKT4+Ml0pKWJyZWFrO2Y9dCxvPW59YXJbbz4+Ml09MCx0PWZ9ZWxzZSB0PTB8YXJbOCtyPj4yXSxhclt0KzEyPj4yXT1mLGFyW2YrOD4+Ml09dCx0PWZ9d2hpbGUoMCk7aWYoMHxhKXtpZihmPTB8YXJbMjgrcj4+Ml0sKDB8cik9PSgwfGFyWyhuPTU3ODcyKyhmPDwyKXwwKT4+Ml0pKXtpZighKGFyW24+PjJdPXQpKXthclsxNDM5M109YXJbMTQzOTNdJn4oMTw8Zik7YnJlYWt9fWVsc2UgaWYoIShhclthKzE2KygoKDB8YXJbYSsxNj4+Ml0pIT0oMHxyKSYxKTw8Mik+PjJdPXQpKWJyZWFrO2FyW3QrMjQ+PjJdPWEsMHwobj0wfGFyWyhmPTE2K3J8MCk+PjJdKSYmKGFyW3QrMTY+PjJdPW4sYXJbbisyND4+Ml09dCksMHwoZj0wfGFyW2YrND4+Ml0pJiYoYXJbdCsyMD4+Ml09ZixhcltmKzI0Pj4yXT10KX19d2hpbGUoMCk7cmV0dXJuIGY9MSZsLGM+Pj4wPDE2Pyhhclt1Pj4yXT1pfGZ8MixhclsodT1BK2krNHwwKT4+Ml09MXxhclt1Pj4yXSk6KGw9QStlfDAsYXJbdT4+Ml09ZnxlfDIsYXJbbCs0Pj4yXT0zfGMsYXJbKHU9bCtjKzR8MCk+PjJdPTF8YXJbdT4+Ml0sWGMobCxjKSksMHxBfShBKy04fDAsZT4+PjA8MTE/MTY6ZSsxMSYtOCkpPzB8KGU9cis4fDApOihyPTB8eWMoZSkpPyhoYigwfHIsMHxBLDB8KChpPSgtOCYoaT0wfGFyW0ErLTQ+PjJdKSktKDA9PSgzJml8MCk/ODo0KXwwKT4+PjA8ZT4+PjA/aTplKSksQmMoQSksMHwoZT1yKSk6KGU9MCl8ZTowfChlPTB8eWMoZSkpfWZ1bmN0aW9uIFhjKEEsZSl7dmFyIHI9MCxpPTAsZj0wLG49MCx0PTAsbz0wLGE9MDthPShBfD0wKSsoZXw9MCl8MCxyPTB8YXJbQSs0Pj4yXTtkb3tpZigxJnIpbz1BLHI9ZTtlbHNle2lmKGk9MHxhcltBPj4yXSwhKDMmcikpcmV0dXJuO2lmKHQ9aStlfDAsKDB8KG49QSsoMC1pKXwwKSk9PSgwfGFyWzE0Mzk3XSkpe2lmKDM9PSgzJihyPTB8YXJbKEE9YSs0fDApPj4yXSl8MCkpcmV0dXJuIGFyWzE0Mzk0XT10LGFyW0E+PjJdPS0yJnIsYXJbbis0Pj4yXT0xfHQsdm9pZChhcltuK3Q+PjJdPXQpO289bixyPXQ7YnJlYWt9aWYoZT1pPj4+MyxpPj4+MDwyNTYpe2lmKEE9MHxhcltuKzg+PjJdLCgwfChyPTB8YXJbbisxMj4+Ml0pKT09KDB8QSkpe2FyWzE0MzkyXT1hclsxNDM5Ml0mfigxPDxlKSxvPW4scj10O2JyZWFrfWFyW0ErMTI+PjJdPXIsYXJbcis4Pj4yXT1BLG89bixyPXQ7YnJlYWt9Zj0wfGFyW24rMjQ+PjJdLEE9MHxhcltuKzEyPj4yXTtkb3tpZigoMHxBKT09KDB8bikpe2lmKCEoQT0wfGFyWyhyPShlPW4rMTZ8MCkrNHwwKT4+Ml0pKXtpZighKEE9MHxhcltlPj4yXSkpe0E9MDticmVha31yPWV9Zm9yKDs7KWlmKDB8KGk9MHxhclsoZT1BKzIwfDApPj4yXSkpQT1pLHI9ZTtlbHNle2lmKCEoaT0wfGFyWyhlPUErMTZ8MCk+PjJdKSlicmVhaztBPWkscj1lfWFyW3I+PjJdPTB9ZWxzZSBvPTB8YXJbbis4Pj4yXSxhcltvKzEyPj4yXT1BLGFyW0ErOD4+Ml09b313aGlsZSgwKTtpZihmKXtpZihyPTB8YXJbbisyOD4+Ml0sKDB8bik9PSgwfGFyWyhlPTU3ODcyKyhyPDwyKXwwKT4+Ml0pKXtpZighKGFyW2U+PjJdPUEpKXthclsxNDM5M109YXJbMTQzOTNdJn4oMTw8ciksbz1uLHI9dDticmVha319ZWxzZSBpZighKGFyW2YrMTYrKCgoMHxhcltmKzE2Pj4yXSkhPSgwfG4pJjEpPDwyKT4+Ml09QSkpe289bixyPXQ7YnJlYWt9YXJbQSsyND4+Ml09ZiwwfChlPTB8YXJbKHI9bisxNnwwKT4+Ml0pJiYoYXJbQSsxNj4+Ml09ZSxhcltlKzI0Pj4yXT1BKSxyPShvPSgocj0wfGFyW3IrND4+Ml0pJiYoYXJbQSsyMD4+Ml09cixhcltyKzI0Pj4yXT1BKSxuKSx0KX1lbHNlIG89bixyPXR9fXdoaWxlKDApO2lmKDImKGk9MHxhclsoQT1hKzR8MCk+PjJdKSlhcltBPj4yXT0tMiZpLGFyW28rND4+Ml09MXxyLGFyW28rcj4+Ml09cjtlbHNle2lmKEE9MHxhclsxNDM5N10sKDB8YSk9PSgwfGFyWzE0Mzk4XSkpcmV0dXJuIGE9KDB8YXJbMTQzOTVdKStyfDAsYXJbMTQzOTVdPWEsYXJbMTQzOThdPW8sYXJbbys0Pj4yXT0xfGEsKDB8byk9PSgwfEEpJiYoYXJbMTQzOTddPTAsdm9pZChhclsxNDM5NF09MCkpO2lmKCgwfGEpPT0oMHxBKSlyZXR1cm4gYT0oMHxhclsxNDM5NF0pK3J8MCxhclsxNDM5NF09YSxhclsxNDM5N109byxhcltvKzQ+PjJdPTF8YSx2b2lkKGFyW28rYT4+Ml09YSk7bj0oLTgmaSkrcnwwLGU9aT4+PjM7ZG97aWYoaT4+PjA8MjU2KXtpZihyPTB8YXJbYSs4Pj4yXSwoMHwoQT0wfGFyW2ErMTI+PjJdKSk9PSgwfHIpKXthclsxNDM5Ml09YXJbMTQzOTJdJn4oMTw8ZSk7YnJlYWt9YXJbcisxMj4+Ml09QSxhcltBKzg+PjJdPXI7YnJlYWt9Zj0wfGFyW2ErMjQ+PjJdLEE9MHxhclthKzEyPj4yXTtkb3tpZigoMHxBKT09KDB8YSkpe2lmKCEoQT0wfGFyWyhyPShlPWErMTZ8MCkrNHwwKT4+Ml0pKXtpZighKEE9MHxhcltlPj4yXSkpe2U9MDticmVha31yPWV9Zm9yKDs7KWlmKDB8KGk9MHxhclsoZT1BKzIwfDApPj4yXSkpQT1pLHI9ZTtlbHNle2lmKCEoaT0wfGFyWyhlPUErMTZ8MCk+PjJdKSlicmVhaztBPWkscj1lfWFyW3I+PjJdPTAsZT1BfWVsc2UgZT0wfGFyW2ErOD4+Ml0sYXJbZSsxMj4+Ml09QSxhcltBKzg+PjJdPWUsZT1BfXdoaWxlKDApO2lmKDB8Zil7aWYoQT0wfGFyW2ErMjg+PjJdLCgwfGEpPT0oMHxhclsocj01Nzg3MisoQTw8Mil8MCk+PjJdKSl7aWYoIShhcltyPj4yXT1lKSl7YXJbMTQzOTNdPWFyWzE0MzkzXSZ+KDE8PEEpO2JyZWFrfX1lbHNlIGlmKCEoYXJbZisxNisoKCgwfGFyW2YrMTY+PjJdKSE9KDB8YSkmMSk8PDIpPj4yXT1lKSlicmVhazthcltlKzI0Pj4yXT1mLDB8KHI9MHxhclsoQT1hKzE2fDApPj4yXSkmJihhcltlKzE2Pj4yXT1yLGFyW3IrMjQ+PjJdPWUpLDB8KEE9MHxhcltBKzQ+PjJdKSYmKGFyW2UrMjA+PjJdPUEsYXJbQSsyND4+Ml09ZSl9fXdoaWxlKDApO2lmKGFyW28rND4+Ml09MXxuLGFyW28rbj4+Ml09biwoMHxvKT09KDB8YXJbMTQzOTddKSlyZXR1cm4gdm9pZChhclsxNDM5NF09bik7cj1ufWlmKEE9cj4+PjMscj4+PjA8MjU2KXJldHVybiBlPTU3NjA4KyhBPDwxPDwyKXwwLChyPTB8YXJbMTQzOTJdKSYoQT0xPDxBKT9BPTB8YXJbKHI9ZSs4fDApPj4yXTooYXJbMTQzOTJdPXJ8QSxyPShBPWUpKzh8MCksYXJbcj4+Ml09byxhcltBKzEyPj4yXT1vLGFyW28rOD4+Ml09QSx2b2lkKGFyW28rMTI+PjJdPWUpO2lmKGY9NTc4NzIrKChBPShBPXI+Pj44KT8xNjc3NzIxNTxyPj4+MD8zMTpyPj4+KChBPTE0LSgobj0oKGE9QTw8KHQ9KEErMTA0ODMyMHwwKT4+PjE2JjgpKSs1MjAxOTJ8MCk+Pj4xNiY0KXx0fChBPSgoYTw8PW4pKzI0NTc2MHwwKT4+PjE2JjIpKSsoYTw8QT4+PjE1KXwwKSs3fDApJjF8QTw8MTowKTw8Mil8MCxhcltvKzI4Pj4yXT1BLGFyW28rMjA+PjJdPTAsISgoZT0oYXJbbysxNj4+Ml09MCl8YXJbMTQzOTNdKSYoaT0xPDxBKSkpcmV0dXJuIGFyWzE0MzkzXT1lfGksYXJbZj4+Ml09byxhcltvKzI0Pj4yXT1mLGFyW28rMTI+PjJdPW8sdm9pZChhcltvKzg+PjJdPW8pO2ZvcihlPXI8PCgzMT09KDB8QSk/MDoyNS0oQT4+PjEpfDApLGk9MHxhcltmPj4yXTs7KXtpZigoLTgmYXJbaSs0Pj4yXXwwKT09KDB8cikpe0E9Njk7YnJlYWt9aWYoIShBPTB8YXJbKGY9aSsxNisoZT4+PjMxPDwyKXwwKT4+Ml0pKXtBPTY4O2JyZWFrfWU8PD0xLGk9QX1yZXR1cm4gNjg9PSgwfEEpPyhhcltmPj4yXT1vLGFyW28rMjQ+PjJdPWksYXJbbysxMj4+Ml09byx2b2lkKGFyW28rOD4+Ml09bykpOjY5PT0oMHxBKSYmKGE9MHxhclsodD1pKzh8MCk+PjJdLGFyW2ErMTI+PjJdPW8sYXJbdD4+Ml09byxhcltvKzg+PjJdPWEsYXJbbysxMj4+Ml09aSx2b2lkKGFyW28rMjQ+PjJdPTApKX1mdW5jdGlvbiBXYyhBLGUpe3JldHVybiBlfD0wLChBfD0wKT4+PjA8OT8wfChlPTB8eWMoZSkpOjB8KGU9MHxmdW5jdGlvbihBLGUpe2V8PTA7dmFyIHIsaT0wLGY9MCxuPTAsdD0wLG89MDtpZigoQT0xNjwoQXw9MCk+Pj4wP0E6MTYpKy0xJkEpZm9yKGk9MTY7Oyl7aWYoIShpPj4+MDxBPj4+MCkpe0E9aTticmVha31pPDw9MX1pZigoLTY0LUF8MCk+Pj4wPD1lPj4+MClyZXR1cm4gYXJbKHQ9MTAzNjQpPj4yXT0xMiwodD0wKXx0O2lmKCEoaT0wfHljKDEyKyhuPWU+Pj4wPDExPzE2OmUrMTEmLTgpK0F8MCkpKXJldHVybih0PTApfHQ7cj1pKy04fDA7ZG97aWYoaSZBKy0xKXtpZihlPShmPTE1PCgoZj0oaStBKy0xJjAtQSktOHwwKS0oZT1yKXwwKT4+PjA/ZjpmK0F8MCktZXwwLG89MHxhclsoQT1pKy00fDApPj4yXSxpPSgtOCZvKS1lfDAsMyZvKXthclsobz1mKzR8MCk+PjJdPWl8MSZhcltvPj4yXXwyLGFyWyhpPWYraSs0fDApPj4yXT0xfGFyW2k+PjJdLGFyW0E+PjJdPWV8MSZhcltBPj4yXXwyLGFyW28+PjJdPTF8YXJbbz4+Ml0sWGMocixlKSxlPUE9ZjticmVha31hcltmPj4yXT0oMHxhcltyPj4yXSkrZSxhcltmKzQ+PjJdPWksZT1BPWY7YnJlYWt9ZT1BPXJ9d2hpbGUoMCk7MyYoaT0wfGFyWyhBPUErNHwwKT4+Ml0pfDAmJih0PS04JmkpPj4+MD4obisxNnwwKT4+PjAmJihvPXQtbnwwLHQ9ZStufDAsYXJbQT4+Ml09bnwxJml8Mixhclt0KzQ+PjJdPTN8byxhclsobj10K28rNHwwKT4+Ml09MXxhcltuPj4yXSxYYyh0LG8pKTtyZXR1cm4gMHwobz1lKzh8MCl9KEEsZSkpfWZ1bmN0aW9uIEljKEEpe3JldHVybiA0Mjk0OTYzMjAwPChBfD0wKT4+PjAmJihhclsxMDM2ND4+Ml09MC1BLEE9LTEpLDB8QX1mdW5jdGlvbiBDYygpe3JldHVybiAxMDM2NH1mdW5jdGlvbiBHYyhBLGUscil7ZXw9MCxyfD0wO3ZhciBpLGYsbix0LG8sYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTA7Yz11cj0obz11cikrMzEmLTMyLHVyPXVyKzQ4fDAsdD1jKzE2fDAsYz0obD1jKSszMnwwLGE9MHxhclsoZj0oQXw9MCkrMjh8MCk+PjJdLGFyW2M+PjJdPWEsYT0oMHxhclsobj1BKzIwfDApPj4yXSktYXwwLGFyW2MrND4+Ml09YSxhcltjKzg+PjJdPWUsYT1hKyhhcltjKzEyPj4yXT1yKXwwLGk9QSs2MHwwLGFyW2w+PjJdPWFyW2k+PjJdLGFyW2wrND4+Ml09YyxhcltsKzg+PjJdPTIsbD0wfEljKDB8XygxNDYsMHxsKSk7QTpkb3tpZigoMHxhKSE9KDB8bCkpe2ZvcihlPTI7ISgoMHxsKTwwKTspaWYoYT1hLWx8MCxlPSgoYj0ocz0wfGFyW2MrND4+Ml0pPj4+MDxsPj4+MCk8PDMxPj4zMSkrZXwwLHM9bC0oYj9zOjApfDAsYXJbKGM9Yj9jKzh8MDpjKT4+Ml09KDB8YXJbYz4+Ml0pK3MsYXJbKGI9Yys0fDApPj4yXT0oMHxhcltiPj4yXSktcyxhclt0Pj4yXT1hcltpPj4yXSxhcls0K3Q+PjJdPWMsYXJbOCt0Pj4yXT1lLCgwfGEpPT0oMHwobD0wfEljKDB8XygxNDYsMHx0KSkpKSl7dT0zO2JyZWFrIEF9YXJbQSsxNj4+Ml09MCxhcltmPj4yXT0wLGFyW24+PjJdPTAsYXJbQT4+Ml09MzJ8YXJbQT4+Ml0scj0yPT0oMHxlKT8wOnItKDB8YXJbYys0Pj4yXSl8MH1lbHNlIHU9M313aGlsZSgwKTtyZXR1cm4gMz09KDB8dSkmJihzPTB8YXJbQSs0ND4+Ml0sYXJbQSsxNj4+Ml09cysoMHxhcltBKzQ4Pj4yXSksYXJbZj4+Ml09cyxhcltuPj4yXT1zKSx1cj1vLDB8cn1mdW5jdGlvbiBWYyhBKXt2YXIgZSxyPTAsaT0wO2U9QXw9MDtBOmRve2lmKDMmZSlmb3Iocj1lOzspe2lmKCEoMHx0cltBPj4wXSkpe0E9cjticmVhayBBfWlmKCEoMyYocj1BPUErMXwwKSkpe2k9NDticmVha319ZWxzZSBpPTR9d2hpbGUoMCk7aWYoND09KDB8aSkpe2Zvcig7ISgoLTIxMzkwNjIxNDQmKHI9MHxhcltBPj4yXSleLTIxMzkwNjIxNDQpJnIrLTE2ODQzMDA5KTspQT1BKzR8MDtpZigoMjU1JnIpPDwyND4+MjQpZm9yKDswIT0oMHx0clsoQT1BKzF8MCk+PjBdKTspO31yZXR1cm4gQS1lfDB9ZnVuY3Rpb24gRmMoQSxlKXtlfD0wO3ZhciByPTAsaT0wO2lmKHI9MHx0clsoQXw9MCk+PjBdLGk9MHx0cltlPj4wXSxyPDwyND4+MjQ9PTB8fHI8PDI0Pj4yNCE9aTw8MjQ+PjI0KUE9aTtlbHNle2Zvcig7ZT1lKzF8MCxyPTB8dHJbKEE9QSsxfDApPj4wXSxpPTB8dHJbZT4+MF0scjw8MjQ+PjI0IT0wJiZyPDwyND4+MjQ9PWk8PDI0Pj4yNDspO0E9aX1yZXR1cm4oMjU1JnIpLSgyNTUmQSl8MH1mdW5jdGlvbiBSYyhBLGUscil7QXw9MDt2YXIgaT0wLGY9MCxuPTAsdD0wO249MjU1JihlfD0wKSxpPTAhPSgwfChyfD0wKSk7QTpkb3tpZihpJjAhPSgzJkF8MCkpZm9yKGY9MjU1JmU7Oyl7aWYoKDB8dHJbQT4+MF0pPT1mPDwyND4+MjQpe3Q9NjticmVhayBBfWlmKCEoKGk9MCE9KDB8KHI9cistMXwwKSkpJjAhPSgzJihBPUErMXwwKXwwKSkpe3Q9NTticmVha319ZWxzZSB0PTV9d2hpbGUoMCk7NT09KDB8dCkmJihpP3Q9NjpyPTApO0E6ZG97aWYoNj09KDB8dCkmJihmPTI1NSZlLCgwfHRyW0E+PjBdKSE9Zjw8MjQ+PjI0KSl7aT0wfGJyKG4sMTY4NDMwMDkpO2U6ZG97aWYoMzxyPj4+MCl7Zm9yKDshKCgtMjEzOTA2MjE0NCYobj1hcltBPj4yXV5pKV4tMjEzOTA2MjE0NCkmbistMTY4NDMwMDl8MCk7KWlmKEE9QSs0fDAsKHI9cistNHwwKT4+PjA8PTMpe3Q9MTE7YnJlYWsgZX19ZWxzZSB0PTExfXdoaWxlKDApO2lmKDExPT0oMHx0KSYmIXIpe3I9MDticmVha31mb3IoOzspe2lmKCgwfHRyW0E+PjBdKT09Zjw8MjQ+PjI0KWJyZWFrIEE7aWYoQT1BKzF8MCwhKHI9cistMXwwKSl7cj0wO2JyZWFrfX19fXdoaWxlKDApO3JldHVybiAwfCgwfHI/QTowKX1mdW5jdGlvbiBOYyhBLGUpe0F8PTA7dmFyIHI9MCxpPTAsZj0wO2k9MjU1JihlfD0wKTtBOmRve2lmKGkpe2lmKDMmQSl7cj0yNTUmZTtkb3tpZigoZj0wfHRyW0E+PjBdKTw8MjQ+PjI0PT0wfHxmPDwyND4+MjQ9PXI8PDI0Pj4yNClicmVhayBBO0E9QSsxfDB9d2hpbGUoMCE9KDMmQXwwKSl9aT0wfGJyKGksMTY4NDMwMDkpLHI9MHxhcltBPj4yXTtlOmRve2lmKCEoKC0yMTM5MDYyMTQ0JnJeLTIxMzkwNjIxNDQpJnIrLTE2ODQzMDA5KSlkb3tpZigoLTIxMzkwNjIxNDQmKGY9cl5pKV4tMjEzOTA2MjE0NCkmZistMTY4NDMwMDl8MClicmVhayBlO3I9MHxhclsoQT1BKzR8MCk+PjJdfXdoaWxlKCEoKC0yMTM5MDYyMTQ0JnJeLTIxMzkwNjIxNDQpJnIrLTE2ODQzMDA5fDApKX13aGlsZSgwKTtmb3Iocj0yNTUmZTsoZj0wfHRyW0E+PjBdKTw8MjQ+PjI0IT0wJiZmPDwyND4+MjQhPXI8PDI0Pj4yNDspQT1BKzF8MH1lbHNlIEE9QSsoMHxWYyhBKSl8MH13aGlsZSgwKTtyZXR1cm4gMHxBfWZ1bmN0aW9uIF9jKEEsZSxyLGkpe0F8PTAsZXw9MCxyfD0wLGl8PTA7dmFyIGYsbjtyZXR1cm4gbj11cj0oZj11cikrMzEmLTMyLHVyPXVyKzE2fDAsYXJbbj4+Ml09aSxpPTB8WWMoQSxlLHIsbiksdXI9ZiwwfGl9ZnVuY3Rpb24gWWMoQSxlLHIsaSl7QXw9MCxlfD0wLHJ8PTAsaXw9MDt2YXIgZixuLHQ9MCxvPTAsYT0wLGM9MCxsPTA7Zm9yKGw9dXI9KG49dXIpKzMxJi0zMix1cj11cisxMjh8MCx0PWwrMTI0fDAsYT0xMDgwNCxmPShvPWwpKzEyNHwwO2FyW28+PjJdPWFyW2E+PjJdLGE9YSs0fDAsKDB8KG89bys0fDApKTwoMHxmKTspO3JldHVybiAyMTQ3NDgzNjQ2PChlKy0xfDApPj4+MD9lPyhhclsoZT0xMDM2NCk+PjJdPTc1LGU9LTEpOihBPXQsZT0xLGM9NCk6Yz00LDQ9PSgwfGMpJiYoYz0oYz0tMi1BfDApPj4+MDxlPj4+MD9jOmUsYXJbbCs0OD4+Ml09YyxhclsodD1sKzIwfDApPj4yXT1BLGU9KGFyW2wrNDQ+PjJdPUEpK2N8MCxhclsoQT1sKzE2fDApPj4yXT1lLGFyW2wrMjg+PjJdPWUsZT0wfFFjKGwscixpKSxjJiYobD0wfGFyW3Q+PjJdLHRyW2wrKCgoMHxsKT09KDB8YXJbQT4+Ml0pKTw8MzE+PjMxKT4+MF09MCkpLHVyPW4sMHxlfWZ1bmN0aW9uIFFjKEEsZSxyKXtBfD0wLGV8PTAscnw9MDt2YXIgaSxmLG4sdCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTAsZD0wLGs9MDtmb3Ioaz11cj0odD11cikrMzEmLTMyLHVyPXVyKzIyNHwwLGk9aysxMjB8MCxmPWsrODB8MCxrPShuPWspKzEzNnwwLGE9KG89ZikrNDB8MDsoMHwobz1vKzR8KGFyW28+PjJdPTApKSk8KDB8YSk7KTtyZXR1cm4gYXJbaT4+Ml09YXJbcj4+Ml0scj0oMHxEYygwLGUsaSxuLGYpKTwwPy0xOihkPS0xPCgwfGFyW0ErNzY+PjJdKT8wfEpjKCk6MCxzPTMyJihyPTB8YXJbQT4+Ml0pLCgwfHRyW0ErNzQ+PjBdKTwxJiYoYXJbQT4+Ml09LTMzJnIpLDB8YXJbKG89QSs0OHwwKT4+Ml0/cj0wfERjKEEsZSxpLG4sZik6KGM9MHxhclsoYT1BKzQ0fDApPj4yXSxhclthPj4yXT1rLGFyWyhsPUErMjh8MCk+PjJdPWssYXJbKHU9QSsyMHwwKT4+Ml09ayxhcltvPj4yXT04MCxhclsoYj1BKzE2fDApPj4yXT1rKzgwLHI9MHxEYyhBLGUsaSxuLGYpLGMmJih4Yls2MyZhcltBKzM2Pj4yXV0oQSwwLDApLHI9MD09KDB8YXJbdT4+Ml0pPy0xOnIsYXJbYT4+Ml09YyxhcltvPj4yXT0wLGFyW2I+PjJdPTAsYXJbbD4+Ml09MCxhclt1Pj4yXT0wKSksbz0wfGFyW0E+PjJdLGFyW0E+PjJdPW98cywwfGQmJk1jKCksMD09KDMyJm98MCk/cjotMSksdXI9dCwwfHJ9ZnVuY3Rpb24gRGMoQSxlLHIsaSxmKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTA7dmFyIG4sdCxvLGEsYyxsLHUsYixzPTAsZD0wLGs9MCxoPTAsdz0wLHY9MCxtPTAsZz0wLFo9MCxwPTAseT0wLEI9MCxFPTAsWD0wLFc9MDtXPXVyPShiPXVyKSszMSYtMzIsdXI9dXIrNjR8MCxjPVcrMTZ8MCxYPShsPVcpKzI0fDAsdT1XKzh8MCxXPVcrMjB8MCxhcltjPj4yXT1lLG49MCE9KDB8QSksbz10PVgrNDB8MCxYPVgrMzl8MCxhPTQrdXwwLHY9cz1kPTA7QTpmb3IoOzspe2Rve2lmKC0xPCgwfHMpKXtpZigoMjE0NzQ4MzY0Ny1zfDApPCgwfGQpKXthclsocz0xMDM2NCk+PjJdPTc1LHM9LTE7YnJlYWt9cz1kK3N8MDticmVha319d2hpbGUoMCk7aWYoISgoZD0wfHRyW2U+PjBdKTw8MjQ+PjI0KSl7RT04NzticmVha31rPWU7ZTpmb3IoOzspe3N3aXRjaChkPDwyND4+MjQpe2Nhc2UgMzc6ZD1rLEU9OTticmVhayBlO2Nhc2UgMDpkPWs7YnJlYWsgZX1CPWsrMXwwLGFyW2M+PjJdPUIsZD0wfHRyW0I+PjBdLGs9Qn1lOmRve2lmKDk9PSgwfEUpKWZvcig7Oyl7aWYoMzchPSgoRT0wKXx0cltrKzE+PjBdKSlicmVhayBlO2lmKGQ9ZCsxfDAsaz1rKzJ8MCxhcltjPj4yXT1rLDM3IT0oMHx0cltrPj4wXSkpYnJlYWs7RT05fX13aGlsZSgwKTtpZihkPWQtZXwwLG4mJlRjKEEsZSxkKSwwfGQpZT1rO2Vsc2V7KGQ9KDB8dHJbKGg9aysxfDApPj4wXSktNDh8MCk+Pj4wPDEwPyh5PShCPTM2PT0oMHx0cltrKzI+PjBdKSk/ZDotMSx2PUI/MTp2LGg9Qj9rKzN8MDpoKTp5PS0xLGFyW2M+PjJdPWgsaz0oKGQ9MHx0cltoPj4wXSk8PDI0Pj4yNCktMzJ8MDtlOmRve2lmKGs+Pj4wPDMyKWZvcih3PTAsbT1kOzspe2lmKCEoNzU5MTMmKGQ9MTw8aykpKXtkPW07YnJlYWsgZX1pZih3fD1kLGg9aCsxfDAsYXJbYz4+Ml09aCwzMjw9KGs9KChkPTB8dHJbaD4+MF0pPDwyND4+MjQpLTMyfDApPj4+MClicmVhazttPWR9ZWxzZSB3PTB9d2hpbGUoMCk7aWYoZDw8MjQ+PjI0PT00Mil7aWYoKGQ9KDB8dHJbKGs9aCsxfDApPj4wXSktNDh8MCk+Pj4wPDEwJiYzNj09KDB8dHJbaCsyPj4wXSkpYXJbZisoZDw8Mik+PjJdPTEwLGQ9MHxhcltpKygoMHx0cltrPj4wXSktNDg8PDMpPj4yXSx2PTEsaD1oKzN8MDtlbHNle2lmKDB8dil7cz0tMTticmVha31oPSh2PW4/KHY9MysoMHxhcltyPj4yXSkmLTQsZD0wfGFyW3Y+PjJdLGFyW3I+PjJdPXYrNCwwKTpkPTAsayl9YXJbYz4+Ml09aCxkPShCPSgwfGQpPDApPzAtZHwwOmQsdz1CPzgxOTJ8dzp3fWVsc2V7aWYoKDB8KGQ9MHxVYyhjKSkpPDApe3M9LTE7YnJlYWt9aD0wfGFyW2M+PjJdfWRve2lmKDQ2PT0oMHx0cltoPj4wXSkpe2lmKDQyIT0oMHx0cltoKzE+PjBdKSl7YXJbYz4+Ml09aCsxLGs9MHxVYyhjKSxoPTB8YXJbYz4+Ml07YnJlYWt9aWYoKGs9KDB8dHJbKG09aCsyfDApPj4wXSktNDh8MCk+Pj4wPDEwJiYzNj09KDB8dHJbaCszPj4wXSkpe2FyW2YrKGs8PDIpPj4yXT0xMCxrPTB8YXJbaSsoKDB8dHJbbT4+MF0pLTQ4PDwzKT4+Ml0saD1oKzR8MCxhcltjPj4yXT1oO2JyZWFrfWlmKDB8dil7cz0tMTticmVhayBBfW4/KEI9MysoMHxhcltyPj4yXSkmLTQsaz0wfGFyW0I+PjJdLGFyW3I+PjJdPUIrNCk6az0wLGg9YXJbYz4+Ml09bX1lbHNlIGs9LTF9d2hpbGUoMCk7Zm9yKHA9MDs7KXtpZig1NzwoKDB8dHJbaD4+MF0pLTY1fDApPj4+MCl7cz0tMTticmVhayBBfWlmKEI9aCsxfDAsYXJbYz4+Ml09QiwhKCgoZz0yNTUmKG09MHx0clsoMHx0cltoPj4wXSktNjUrKDUwMjAyKyg1OCpwfDApKT4+MF0pKSstMXwwKT4+PjA8OCkpYnJlYWs7cD1nLGg9Qn1pZighKG08PDI0Pj4yNCkpe3M9LTE7YnJlYWt9Wj0tMTwoMHx5KTtkb3tpZihtPDwyND4+MjQ9PTE5KXtpZihaKXtzPS0xO2JyZWFrIEF9RT00OX1lbHNle2lmKFope2FyW2YrKHk8PDIpPj4yXT1nLHk9MHxhclsoWj1pKyh5PDwzKXwwKSs0Pj4yXSxhclsoRT1sKT4+Ml09YXJbWj4+Ml0sYXJbRSs0Pj4yXT15LEU9NDk7YnJlYWt9aWYoIW4pe3M9MDticmVhayBBfVNjKGwsZyxyKX19d2hpbGUoMCk7aWYoNDkhPSgwfEUpfHwoRT0wLG4pKXtoPTAhPSgwfHApJjM9PSgxNSYoaD0wfHRyW2g+PjBdKXwwKT8tMzMmaDpoLFo9LTY1NTM3JncseT0wPT0oODE5MiZ3fDApP3c6WjtlOmRve3N3aXRjaCgwfGgpe2Nhc2UgMTEwOnN3aXRjaCgoMjU1JnApPDwyND4+MjQpe2Nhc2UgMDpjYXNlIDE6YXJbYXJbbD4+Ml0+PjJdPXMsZD0wLGU9Qjtjb250aW51ZSBBO2Nhc2UgMjpkPTB8YXJbbD4+Ml0sYXJbZD4+Ml09cyxhcltkKzQ+PjJdPSgoMHxzKTwwKTw8MzE+PjMxLGQ9MCxlPUI7Y29udGludWUgQTtjYXNlIDM6b3JbYXJbbD4+Ml0+PjFdPXMsZD0wLGU9Qjtjb250aW51ZSBBO2Nhc2UgNDp0clthcltsPj4yXT4+MF09cyxkPTAsZT1CO2NvbnRpbnVlIEE7Y2FzZSA2OmFyW2FyW2w+PjJdPj4yXT1zLGQ9MCxlPUI7Y29udGludWUgQTtjYXNlIDc6ZD0wfGFyW2w+PjJdLGFyW2Q+PjJdPXMsYXJbZCs0Pj4yXT0oKDB8cyk8MCk8PDMxPj4zMSxkPTAsZT1CO2NvbnRpbnVlIEE7ZGVmYXVsdDpkPTAsZT1CO2NvbnRpbnVlIEF9Y2FzZSAxMTI6aD0xMjAsaz04PGs+Pj4wP2s6OCxlPTh8eSxFPTYxO2JyZWFrO2Nhc2UgODg6Y2FzZSAxMjA6ZT15LEU9NjE7YnJlYWs7Y2FzZSAxMTE6bT01MDY2NixrPSh3PTApPT0oOCZ5fDApfCgwfChaPW8tKGc9MHx6YyhlPTB8YXJbKGg9bCk+PjJdLGg9MHxhcltoKzQ+PjJdLHQpKXwwKSk8KDB8ayk/azpaKzF8MCxaPXksRT02NzticmVhaztjYXNlIDEwNTpjYXNlIDEwMDppZihlPTB8YXJbKGg9bCk+PjJdLCgwfChoPTB8YXJbaCs0Pj4yXSkpPDApe2U9MHxvYigwLDAsMHxlLDB8aCksaD1ELGFyWyh3PWwpPj4yXT1lLGFyW3crND4+Ml09aCx3PTEsbT01MDY2NixFPTY2O2JyZWFrIGV9dz0wIT0oMjA0OSZ5fDApJjEsbT0wPT0oMjA0OCZ5fDApPzA9PSgxJnl8MCk/NTA2NjY6NTA2Njg6NTA2NjcsRT02NjticmVhayBlO2Nhc2UgMTE3Om09NTA2NjYsZT0odz0wKXxhclsoaD1sKT4+Ml0saD0wfGFyW2grND4+Ml0sRT02NjticmVhaztjYXNlIDk5OnRyW1g+PjBdPWFyW2w+PjJdLGU9WCx3PTAsbT01MDY2NixnPXQsaD0xLGs9WjticmVhaztjYXNlIDEwOTpoPTB8SGMoMHxhclsoaD0xMDM2NCk+PjJdKSxFPTcxO2JyZWFrO2Nhc2UgMTE1Omg9MHwoaD0wfGFyW2w+PjJdKT9oOjUwNjc2LEU9NzE7YnJlYWs7Y2FzZSA2Nzphclt1Pj4yXT1hcltsPj4yXSxhclthPj4yXT0wLGc9LTEsaD1hcltsPj4yXT11LEU9NzU7YnJlYWs7Y2FzZSA4MzplPTB8YXJbbD4+Ml0sRT1rPyhnPWssaD1lLDc1KTooeGMoQSwzMixkLDAseSksZT0wLDg0KTticmVhaztjYXNlIDY1OmNhc2UgNzE6Y2FzZSA3MDpjYXNlIDY5OmNhc2UgOTc6Y2FzZSAxMDM6Y2FzZSAxMDI6Y2FzZSAxMDE6ZD0wfExjKEEsK1FbbD4+M10sZCxrLHksaCksZT1CO2NvbnRpbnVlIEE7ZGVmYXVsdDp3PTAsbT01MDY2NixnPXQsaD1rLGs9eX19d2hpbGUoMCk7ZTpkb3tpZig2MT09KDB8RSkpZz0wfE9jKHA9MHxhclsoeT1sKT4+Ml0seT0wfGFyW3krND4+Ml0sdCwzMiZoKSx3PShtPTA9PSg4JmV8MCl8MD09KDB8cCkmMD09KDB8eSkpPzA6MixtPW0/NTA2NjY6NTA2NjYrKGg+PjQpfDAsWj1lLGU9cCxoPXksRT02NztlbHNlIGlmKDY2PT0oMHxFKSlnPTB8amMoZSxoLHQpLFo9eSxFPTY3O2Vsc2UgaWYoNzE9PSgwfEUpKXc9RT0wLG09NTA2NjYsZz0ocD0wPT0oMHwoeT0wfFJjKGU9aCwwLGspKSkpP2gra3wwOnksaD1wP2s6eS1ofDAsaz1aO2Vsc2UgaWYoNzU9PSgwfEUpKXtmb3IobT1oLGs9ZT1FPTA7KHc9MHxhclttPj4yXSkmJiEoKDB8KGs9MHxQYyhXLHcpKSk8MHwoZy1lfDApPj4+MDxrPj4+MCkmJihlPWsrZXwwKT4+PjA8Zz4+PjA7KW09bSs0fDA7aWYoKDB8ayk8MCl7cz0tMTticmVhayBBfWlmKHhjKEEsMzIsZCxlLHkpLGUpZm9yKHc9MDs7KXtpZighKGs9MHxhcltoPj4yXSkpe0U9ODQ7YnJlYWsgZX1pZigoMHxlKTwoMHwodz0oaz0wfFBjKFcsaykpK3d8MCkpKXtFPTg0O2JyZWFrIGV9aWYoVGMoQSxXLGspLGU+Pj4wPD13Pj4+MCl7RT04NDticmVha31oPWgrNHwwfWVsc2UgZT0wLEU9ODR9fXdoaWxlKDApO2lmKDY3PT0oMHxFKSl5PShFPTApIT0oMHxrKXwoaD0wIT0oMHxlKXwwIT0oMHxoKSksaD1vLWcrKDEmKDFeaCkpfDAsZT15P2c6dCxnPXQsaD0heXx8KDB8aCk8KDB8ayk/azpoLGs9LTE8KDB8ayk/LTY1NTM3Jlo6WjtlbHNlIGlmKDg0PT0oMHxFKSl7RT0wLHhjKEEsMzIsZCxlLDgxOTJeeSksZD0oMHxlKTwoMHxkKT9kOmUsZT1CO2NvbnRpbnVlfXhjKEEsMzIsZD0oMHxkKTwoMHwoeT0oWj0oMHxoKTwoMHwocD1nLWV8MCkpP3A6aCkrd3wwKSk/eTpkLHksayksVGMoQSxtLHcpLHhjKEEsNDgsZCx5LDY1NTM2XmspLHhjKEEsNDgsWixwLDApLFRjKEEsZSxwKSx4YyhBLDMyLGQseSw4MTkyXmspLGU9Qn1lbHNlIGQ9MCxlPUJ9fUE6ZG97aWYoODc9PSgwfEUpJiYhQSlpZih2KXtmb3Iocz0xO2U9MHxhcltmKyhzPDwyKT4+Ml07KWlmKFNjKGkrKHM8PDMpfDAsZSxyKSwxMDw9KDB8KHM9cysxfDApKSl7cz0xO2JyZWFrIEF9Zm9yKDs7KXtpZigwfGFyW2YrKHM8PDIpPj4yXSl7cz0tMTticmVhayBBfWlmKDEwPD0oMHwocz1zKzF8MCkpKXtzPTE7YnJlYWt9fX1lbHNlIHM9MH13aGlsZSgwKTtyZXR1cm4gdXI9YiwwfHN9ZnVuY3Rpb24gSmMoKXtyZXR1cm4gMH1mdW5jdGlvbiBNYygpezB9ZnVuY3Rpb24gVGMoQSxlLHIpe2V8PTAscnw9MCwzMiZhclsoQXw9MCk+PjJdfHxlbChlLHIsQSl9ZnVuY3Rpb24gVWMoQSl7dmFyIGU9MCxyPTAsaT0wO2lmKHI9MHxhclsoQXw9MCk+PjJdLChpPSgwfHRyW3I+PjBdKS00OHwwKT4+PjA8MTApZm9yKGU9MDtlPWkrKDEwKmV8MCl8MCxyPXIrMXwwLGFyW0E+PjJdPXIsKGk9KDB8dHJbcj4+MF0pLTQ4fDApPj4+MDwxMDspO2Vsc2UgZT0wO3JldHVybiAwfGV9ZnVuY3Rpb24gU2MoQSxlLHIpe0F8PTAsZXw9MCxyfD0wO3ZhciBpPTAsZj0wLG49MDtBOmRve2lmKGU+Pj4wPD0yMCl7c3dpdGNoKDB8ZSl7Y2FzZSA5Omk9MysoMHxhcltyPj4yXSkmLTQsZT0wfGFyW2k+PjJdLGFyW3I+PjJdPWkrNCxhcltBPj4yXT1lO2JyZWFrIEE7Y2FzZSAxMDppPTMrKDB8YXJbcj4+Ml0pJi00LGU9MHxhcltpPj4yXSxhcltyPj4yXT1pKzQsYXJbKGk9QSk+PjJdPWUsYXJbaSs0Pj4yXT0oKDB8ZSk8MCk8PDMxPj4zMTticmVhayBBO2Nhc2UgMTE6aT0zKygwfGFyW3I+PjJdKSYtNCxlPTB8YXJbaT4+Ml0sYXJbcj4+Ml09aSs0LGFyWyhpPUEpPj4yXT1lLGFyW2krND4+Ml09MDticmVhayBBO2Nhc2UgMTI6aT03KygwfGFyW3I+PjJdKSYtOCxmPTB8YXJbKGU9aSk+PjJdLGU9MHxhcltlKzQ+PjJdLGFyW3I+PjJdPWkrOCxhclsoaT1BKT4+Ml09ZixhcltpKzQ+PjJdPWU7YnJlYWsgQTtjYXNlIDEzOmY9MysoMHxhcltyPj4yXSkmLTQsaT0wfGFyW2Y+PjJdLGFyW3I+PjJdPWYrNCxpPSg2NTUzNSZpKTw8MTY+PjE2LGFyWyhmPUEpPj4yXT1pLGFyW2YrND4+Ml09KCgwfGkpPDApPDwzMT4+MzE7YnJlYWsgQTtjYXNlIDE0OmY9MysoMHxhcltyPj4yXSkmLTQsaT0wfGFyW2Y+PjJdLGFyW3I+PjJdPWYrNCxhclsoZj1BKT4+Ml09NjU1MzUmaSxhcltmKzQ+PjJdPTA7YnJlYWsgQTtjYXNlIDE1OmY9MysoMHxhcltyPj4yXSkmLTQsaT0wfGFyW2Y+PjJdLGFyW3I+PjJdPWYrNCxpPSgyNTUmaSk8PDI0Pj4yNCxhclsoZj1BKT4+Ml09aSxhcltmKzQ+PjJdPSgoMHxpKTwwKTw8MzE+PjMxO2JyZWFrIEE7Y2FzZSAxNjpmPTMrKDB8YXJbcj4+Ml0pJi00LGk9MHxhcltmPj4yXSxhcltyPj4yXT1mKzQsYXJbKGY9QSk+PjJdPTI1NSZpLGFyW2YrND4+Ml09MDticmVhayBBO2Nhc2UgMTc6Y2FzZSAxODpmPTcrKDB8YXJbcj4+Ml0pJi04LG49K1FbZj4+M10sYXJbcj4+Ml09Zis4LFFbQT4+M109bjticmVhayBBO2RlZmF1bHQ6YnJlYWsgQX19fXdoaWxlKDApfWZ1bmN0aW9uIE9jKEEsZSxyLGkpe2lmKHJ8PTAsaXw9MCwhKDA9PSgwfChBfD0wKSkmMD09KDB8KGV8PTApKSkpZm9yKDt0clsocj1yKy0xfDApPj4wXT0wfGNyWzUwNzE0KygxNSZBKT4+MF18aSwhKDA9PSgwfChBPTB8c2IoMHxBLDB8ZSw0KSkpJjA9PSgwfChlPUQpKSk7KTtyZXR1cm4gMHxyfWZ1bmN0aW9uIHpjKEEsZSxyKXtpZihyfD0wLCEoMD09KDB8KEF8PTApKSYwPT0oMHwoZXw9MCkpKSlmb3IoO3RyWyhyPXIrLTF8MCk+PjBdPTcmQXw0OCwhKDA9PSgwfChBPTB8c2IoMHxBLDB8ZSwzKSkpJjA9PSgwfChlPUQpKSk7KTtyZXR1cm4gMHxyfWZ1bmN0aW9uIGpjKEEsZSxyKXtyfD0wO3ZhciBpPTA7aWYoMDwoZXw9MCk+Pj4wfDA9PSgwfGUpJjQyOTQ5NjcyOTU8KEF8PTApPj4+MCl7Zm9yKDtpPTB8dWIoMHxBLDB8ZSwxMCwwKSx0clsocj1yKy0xfDApPj4wXT0yNTUmaXw0OCxBPTB8bGIoMHwoaT1BKSwwfGUsMTAsMCksOTxlPj4+MHw5PT0oMHxlKSY0Mjk0OTY3Mjk1PGk+Pj4wOyllPUQ7ZT1BfWVsc2UgZT1BO2lmKGUpZm9yKDt0clsocj1yKy0xfDApPj4wXT0oZT4+PjApJTEwfDQ4LCEoZT4+PjA8MTApOyllPShlPj4+MCkvMTB8MDtyZXR1cm4gMHxyfWZ1bmN0aW9uIEhjKEEpe3JldHVybiAwfGZ1bmN0aW9uKEEsZSl7QXw9MCxlfD0wO3ZhciByPTAsaT0wO2k9MDtmb3IoOzspe2lmKCgwfGNyWzUwNzMyK2k+PjBdKT09KDB8QSkpe0E9MjticmVha31pZig4Nz09KDB8KHI9aSsxfDApKSl7cj01MDgyMCxpPTg3LEE9NTticmVha31pPXJ9Mj09KDB8QSkmJihpPyhyPTUwODIwLEE9NSk6cj01MDgyMCk7aWYoNT09KDB8QSkpZm9yKDs7KXtmb3IoO3I9KEE9cikrMXwwLDAhPSgwfHRyW0E+PjBdKTspO2lmKCEoaT1pKy0xfDApKWJyZWFrO0E9NX1yZXR1cm4gMHxmdW5jdGlvbihBLGUpe3JldHVybiAwfGZ1bmN0aW9uKEEsZSl7QXw9MCxlPShlfD0wKT8wfGZ1bmN0aW9uKEEsZSxyKXtlfD0wLHJ8PTA7dmFyIGksZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTA7aT0xNzk0ODk1MTM4KygwfGFyWyhBfD0wKT4+Ml0pfDAsdD0wfEFsKDB8YXJbQSs4Pj4yXSxpKSxmPTB8QWwoMHxhcltBKzEyPj4yXSxpKSxuPTB8QWwoMHxhcltBKzE2Pj4yXSxpKTtBOmRve2lmKHQ+Pj4wPGU+Pj4yPj4+MCYmKGI9ZS0odDw8Mil8MCxmPj4+MDxiPj4+MCZuPj4+MDxiPj4+MCkmJjA9PSgzJihufGYpfDApKXtmb3IoYj1mPj4+Mix1PW4+Pj4yLGw9MDs7KXtpZihmPTB8QWwoMHxhcltBKygobj0obz0oYz1sKyhhPXQ+Pj4xKXwwKTw8MSkrYnwwKTw8Mik+PjJdLGkpLCEoKG49MHxBbCgwfGFyW0ErKG4rMTw8Mik+PjJdLGkpKT4+PjA8ZT4+PjAmZj4+PjA8KGUtbnwwKT4+PjApKXtmPTA7YnJlYWsgQX1pZigwfHRyW0ErKG4rZik+PjBdKXtmPTA7YnJlYWsgQX1pZighKGY9MHxGYyhyLEErbnwwKSkpYnJlYWs7aWYoZj0oMHxmKTwwLDE9PSgwfHQpKXtmPTA7YnJlYWsgQX1sPWY/bDpjLHQ9Zj9hOnQtYXwwfW49MHxBbCgwfGFyW0ErKChmPW8rdXwwKTw8Mik+PjJdLGkpLGY9KGY9MHxBbCgwfGFyW0ErKGYrMTw8Mik+PjJdLGkpKT4+PjA8ZT4+PjAmbj4+PjA8KGUtZnwwKT4+PjAmJjA9PSgwfHRyW0ErKGYrbik+PjBdKT9BK2Z8MDowfWVsc2UgZj0wfXdoaWxlKDApO3JldHVybiAwfGZ9KDB8YXJbZT4+Ml0sMHxhcltlKzQ+PjJdLEEpOjA7cmV0dXJuIDB8KDB8ZT9lOkEpfShBfD0wLGV8PTApfShyLDB8YXJbZSsyMD4+Ml0pfShBfD0wLDB8YXJbMjYyMl0pfWZ1bmN0aW9uIHhjKEEsZSxyLGksZil7QXw9MCxlfD0wO3ZhciBuLHQ7aWYobj11cj0odD11cikrMzEmLTMyLHVyPXVyKzI1NnwwLCgwfChpfD0wKSk8KDB8KHJ8PTApKSYwPT0oNzM3MjgmKGZ8PTApfDApKXtpZih2YigwfG4sMHxlLDB8KChmPXItaXwwKT4+PjA8MjU2P2Y6MjU2KSksMjU1PGY+Pj4wKXtmb3IoZT1yLWl8MDtUYyhBLG4sMjU2KSwyNTU8KGY9ZistMjU2fDApPj4+MDspO2Y9MjU1JmV9VGMoQSxuLGYpfXVyPXR9ZnVuY3Rpb24gUGMoQSxlKXtyZXR1cm4gZXw9MCwwfChBPShBfD0wKT8wfCRjKEEsZSk6MCl9ZnVuY3Rpb24gTGMoQSxlLHIsaSxmLG4pe0F8PTAsZT0rZSxyfD0wLGl8PTAsZnw9MCxufD0wO3ZhciB0LG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTAsQj0wLEU9MCxYPTAsVz0wLEk9MDtsPXVyPSh0PXVyKSszMSYtMzIsdXI9dXIrNTYwfDAsYz1sKzh8MCxXPUk9KHc9bCkrNTI0fDAsWD0obD1sKzUxMnwwKSsxMnwoYXJbdz4+Ml09MCksS2MoZSkseT0oMHxEKTwwPyhlPS1lLEI9MSw1MDY4Myk6KEI9MCE9KDIwNDkmZnwwKSYxLDA9PSgyMDQ4JmZ8MCk/MD09KDEmZnwwKT81MDY4NDo1MDY4OTo1MDY4NiksS2MoZSksRT0yMTQ2NDM1MDcyJkQ7ZG97aWYoRT4+PjA8MjE0NjQzNTA3MnwyMTQ2NDM1MDcyPT0oMHxFKSYhMSl7aWYoKG89MCE9KGQ9MipxYyhlLHcpKSkmJihhclt3Pj4yXT0oMHxhclt3Pj4yXSktMSksOTc9PSgwfChtPTMyfG4pKSl7cz0wPT0oMHwoaz0zMiZuKSk/eTp5Kzl8MCxiPTJ8QixvPTEyLWl8MDtkb3tpZighKDExPGk+Pj4wfDA9PSgwfG8pKSl7Zm9yKGU9ODtlKj0xNiwwIT0oMHwobz1vKy0xfDApKTspO2lmKDQ1PT0oMHx0cltzPj4wXSkpe2U9LShlKygtZC1lKSk7YnJlYWt9ZT1kK2UtZTticmVha31lPWR9d2hpbGUoMCk7Zm9yKCgwfChvPTB8amMobz0oMHwoYT0wfGFyW3c+PjJdKSk8MD8wLWF8MDphLCgoMHxvKTwwKTw8MzE+PjMxLFgpKSk9PSgwfFgpJiYodHJbKG89bCsxMXwwKT4+MF09NDgpLHRyW28rLTE+PjBdPTQzKyhhPj4zMSYyKSx0clsodT1vKy0yfDApPj4wXT1uKzE1LGw9KDB8aSk8MSxjPTA9PSg4JmZ8MCksbz1JO0U9fn5lLGE9bysxfDAsdHJbbz4+MF09Y3JbNTA3MTQrRT4+MF18ayxlPTE2KihlLSgwfEUpKSxvPTEhPShhLVd8MCl8fGMmbCYwPT1lP2E6KHRyW2E+PjBdPTQ2LG8rMnwwKSwwIT1lOyk7RT1vLVd8MCx4YyhBLDMyLHIsbz0oVz1YLXV8MCkrYisoWD0wIT0oMHxpKSYoRSstMnwwKTwoMHxpKT9pKzJ8MDpFKXwwLGYpLFRjKEEscyxiKSx4YyhBLDQ4LHIsbyw2NTUzNl5mKSxUYyhBLEksRSkseGMoQSw0OCxYLUV8MCwwLDApLFRjKEEsdSxXKSx4YyhBLDMyLHIsbyw4MTkyXmYpO2JyZWFrfWZvcihhPSgwfGkpPDA/NjppLG8/KG89KDB8YXJbdz4+Ml0pLTI4fDAsYXJbdz4+Ml09byxlPTI2ODQzNTQ1NipkKTooZT1kLG89MHxhclt3Pj4yXSksYz1FPSgwfG8pPDA/YzpjKzI4OHwwO1o9fn5lPj4+MCxhcltjPj4yXT1aLGM9Yys0fDAsMCE9KGU9MWU5KihlLShaPj4+MCkpKTspO2lmKDA8KDB8bykpZm9yKGw9RSxiPWM7Oyl7aWYodT0oMHxvKTwyOT9vOjI5LGw+Pj4wPD0obz1iKy00fDApPj4+MCl7Zm9yKGM9MDt2PTB8dWIoMHwoZz0wfHRiKDB8KGc9MHxkYigwfGFyW28+PjJdLDAsMHx1KSksMHxELDB8YywwKSksMHwoWj1EKSwxZTksMCksYXJbbz4+Ml09dixjPTB8bGIoMHxnLDB8WiwxZTksMCksbD4+PjA8PShvPW8rLTR8MCk+Pj4wOyk7YyYmKGFyWyhsPWwrLTR8MCk+PjJdPWMpfWZvcihjPWI7IShjPj4+MDw9bD4+PjB8fDB8YXJbKG89YystNHwwKT4+Ml0pOyljPW87aWYobz0oMHxhclt3Pj4yXSktdXwwLCEoMDwoMHwoYXJbdz4+Ml09bykpKSlicmVhaztiPWN9ZWxzZSBsPUU7aWYoKDB8byk8MCl7aT0xKygoYSsyNXwwKS85fDApfDAsaD0xMDI9PSgwfG0pO2Rve2lmKGs9KDB8KGs9MC1vfDApKTw5P2s6OSxsPj4+MDxjPj4+MCl7Zm9yKHU9KDE8PGspLTF8MCxiPTFlOT4+Pmsscz0wLG89bDtaPTB8YXJbbz4+Ml0sYXJbbz4+Ml09KFo+Pj5rKStzLHM9MHxicihaJnUsYiksKG89bys0fDApPj4+MDxjPj4+MDspO289MD09KDB8YXJbbD4+Ml0pP2wrNHwwOmwsbz1zPyhhcltjPj4yXT1zLGw9byxjKzR8MCk6KGw9byxjKX1lbHNlIGw9MD09KDB8YXJbbD4+Ml0pP2wrNHwwOmwsbz1jO2M9KDB8aSk8KG8tKGM9aD9FOmwpPj4yfDApP2MrKGk8PDIpfDA6byxvPSgwfGFyW3c+PjJdKStrfDAsYXJbdz4+Ml09b313aGlsZSgoMHxvKTwwKTtvPWwsaT1jfWVsc2Ugbz1sLGk9YztpZihaPUUsbz4+PjA8aT4+PjApe2lmKGM9OSooWi1vPj4yKXwwLDEwPD0odT0wfGFyW28+PjJdKT4+PjApZm9yKGw9MTA7Yz1jKzF8MCwobD0xMCpsfDApPj4+MDw9dT4+PjA7KTt9ZWxzZSBjPTA7aWYoKDB8KGw9YS0oMTAyIT0oMHxtKT9jOjApKygoKHY9MCE9KDB8YSkpJihoPTEwMz09KDB8bSkpKTw8MzE+PjMxKXwwKSk8KCg5KihpLVo+PjIpfDApLTl8MCkpe2lmKGs9RSs0KygoKDB8KGw9bCs5MjE2fDApKS85fDApLTEwMjQ8PDIpfDAsKDB8KGw9MSsoKDB8bCklOXwwKXwwKSk8OSlmb3IodT0xMDt1PTEwKnV8MCw5IT0oMHwobD1sKzF8MCkpOyk7ZWxzZSB1PTEwO2lmKChsPShrKzR8MCk9PSgwfGkpKSYwPT0oMHwocz0oKGI9MHxhcltrPj4yXSk+Pj4wKSUodT4+PjApfDApKSlsPWs7ZWxzZSBpZihkPTA9PSgxJigoYj4+PjApLyh1Pj4+MCl8MCl8MCk/OTAwNzE5OTI1NDc0MDk5Mjo5MDA3MTk5MjU0NzQwOTk0LGU9cz4+PjA8KGc9KDB8dSkvMnwwKT4+PjA/LjU6bCYoMHxzKT09KDB8Zyk/MToxLjUsQiYmKGU9KGc9NDU9PSgwfHRyW3k+PjBdKSk/LWU6ZSxkPWc/LWQ6ZCksbD1iLXN8MCxhcltrPj4yXT1sLGQrZSE9ZCl7aWYoZz1sK3V8MCw5OTk5OTk5OTk8KGFyW2s+PjJdPWcpPj4+MClmb3IoYz1rOyhsPWMrLTR8MCk+Pj4oYXJbYz4+Ml09MCk8bz4+PjAmJihhclsobz1vKy00fDApPj4yXT0wKSxnPTErKDB8YXJbbD4+Ml0pfDAsOTk5OTk5OTk5PChhcltsPj4yXT1nKT4+PjA7KWM9bDtlbHNlIGw9aztpZihjPTkqKFotbz4+Mil8MCwxMDw9KGI9MHxhcltvPj4yXSk+Pj4wKWZvcih1PTEwO2M9YysxfDAsKHU9MTAqdXwwKT4+PjA8PWI+Pj4wOyk7fWVsc2UgbD1rO2w9KGw9bCs0fDApPj4+MDxpPj4+MD9sOmksZz1vfWVsc2UgbD1pLGc9bztmb3IobT1sOzspe2lmKG0+Pj4wPD1nPj4+MCl7dz0wO2JyZWFrfWlmKDB8YXJbKG89bSstNHwwKT4+Ml0pe3c9MTticmVha31tPW99aT0wLWN8MDtkb3tpZihoKXtpZihhPSgwfGMpPCgwfChvPSgxJigxXnYpKSthfDApKSYtNTwoMHxjKT8odT1uKy0xfDAsbystMS1jfDApOih1PW4rLTJ8MCxvKy0xfDApLCEobz04JmYpKXtpZih3JiYwIT0oMHwocD0wfGFyW20rLTQ+PjJdKSkpaWYoKHA+Pj4wKSUxMHwwKWw9MDtlbHNlIGZvcihsPTAsbz0xMDtsPWwrMXwwLCEoKHA+Pj4wKSUoKG89MTAqb3wwKT4+PjApfDApOyk7ZWxzZSBsPTk7aWYobz0oOSoobS1aPj4yKXwwKS05fDAsMTAyPT0oMzJ8dSkpe2E9KDB8YSk8KDB8KGs9MDwoMHwoaz1vLWx8MCkpP2s6MCkpP2E6ayxrPTA7YnJlYWt9YT0oMHxhKTwoMHwoaz0wPCgwfChrPW8rYy1sfDApKT9rOjApKT9hOmssaz0wO2JyZWFrfWs9b31lbHNlIHU9bixrPTgmZn13aGlsZSgwKTtpZihiPTAhPSgwfChoPWF8aykpJjEscz0xMDI9PSgzMnx1KSlvPSh2PTApPCgwfGMpP2M6MDtlbHNle2lmKCgobD1YKS0obz0wfGpjKG89KDB8Yyk8MD9pOmMsKCgwfG8pPDApPDwzMT4+MzEsWCkpfDApPDIpZm9yKDt0clsobz1vKy0xfDApPj4wXT00OCwobC1vfDApPDI7KTt0cltvKy0xPj4wXT00MysoYz4+MzEmMiksdHJbKG89bystMnwwKT4+MF09dSxvPWwtKHY9byl8MH1pZih4YyhBLDMyLHIsbz1CKzErYStiK298MCxmKSxUYyhBLHksQikseGMoQSw0OCxyLG8sNjU1MzZeZikscyl7Yj1rPUkrOXwwLHM9SSs4fDAsbD11PUU+Pj4wPGc+Pj4wP0U6Zztkb3tpZihjPTB8amMoMHxhcltsPj4yXSwwLGspLCgwfGwpPT0oMHx1KSkoMHxjKT09KDB8aykmJih0cltzPj4wXT00OCxjPXMpO2Vsc2UgaWYoST4+PjA8Yz4+PjApZm9yKHZiKDB8SSw0OCxjLVd8MCk7ST4+PjA8KGM9YystMXwwKT4+PjA7KTtUYyhBLGMsYi1jfDApLGw9bCs0fDB9d2hpbGUobD4+PjA8PUU+Pj4wKTtpZigwfGgmJlRjKEEsNTA3MzAsMSksbD4+PjA8bT4+PjAmMDwoMHxhKSlmb3IoOzspe2lmKEk+Pj4wPChjPTB8amMoMHxhcltsPj4yXSwwLGspKT4+PjApZm9yKHZiKDB8SSw0OCxjLVd8MCk7ST4+PjA8KGM9YystMXwwKT4+PjA7KTtpZihUYyhBLGMsKDB8YSk8OT9hOjkpLGM9YSstOXwwLCEoKGw9bCs0fDApPj4+MDxtPj4+MCY5PCgwfGEpKSl7YT1jO2JyZWFrfWE9Y314YyhBLDQ4LGErOXwwLDksMCl9ZWxzZXtpZihoPXc/bTpnKzR8MCwtMTwoMHxhKSl7az0wPT0oMHxrKSxpPXc9SSs5fDAsYj0wLVd8MCxzPUkrOHwwLHU9Zztkb3soMHwoYz0wfGpjKDB8YXJbdT4+Ml0sMCx3KSkpPT0oMHx3KSYmKHRyW3M+PjBdPTQ4LGM9cyk7ZG97aWYoKDB8dSk9PSgwfGcpKXtpZihsPWMrMXwwLFRjKEEsYywxKSxrJigwfGEpPDEpe2M9bDticmVha31UYyhBLDUwNzMwLDEpLGM9bH1lbHNle2lmKGM+Pj4wPD1JPj4+MClicmVhaztmb3IodmIoMHxJLDQ4LGMrYnwwKTtJPj4+MDwoYz1jKy0xfDApPj4+MDspO319d2hpbGUoMCk7VGMoQSxjLCgwfChXPWktY3wwKSk8KDB8YSk/VzphKSxhPWEtV3wwLHU9dSs0fDB9d2hpbGUodT4+PjA8aD4+PjAmLTE8KDB8YSkpfXhjKEEsNDgsYSsxOHwwLDE4LDApLFRjKEEsdixYLXZ8MCl9eGMoQSwzMixyLG8sODE5Ml5mKX1lbHNlIEk9MCE9KDMyJm58MCkseGMoQSwzMixyLG89QiszfDAsLTY1NTM3JmYpLFRjKEEseSxCKSxUYyhBLGUhPWV8ITE/ST81Mjg5OTo1MDcxMDpJPzUwNzAyOjUwNzA2LDMpLHhjKEEsMzIscixvLDgxOTJeZil9d2hpbGUoMCk7cmV0dXJuIHVyPXQsMHwoKDB8byk8KDB8cik/cjpvKX1mdW5jdGlvbiBLYyhBKXtBPStBO3ZhciBlO3JldHVybiBRW2Q+PjNdPUEsZT0wfGFyW2Q+PjJdLEQ9MHxhcltkKzQ+PjJdLDB8ZX1mdW5jdGlvbiBxYyhBLGUpe3JldHVybisgK2Z1bmN0aW9uIEEoZSxyKXtlPStlO3J8PTA7dmFyIGk9MCxmPTAsbj0wO1FbZD4+M109ZTtpPTB8YXJbZD4+Ml07Zj0wfGFyW2QrND4+Ml07bj0wfHNiKDB8aSwwfGYsNTIpO3N3aXRjaCgyMDQ3Jm4pe2Nhc2UgMDppPTAhPWU/KGU9K0EoMHgxMDAwMDAwMDAwMDAwMDAwMCplLHIpLCgwfGFyW3I+PjJdKS02NHwwKTowLGFyW3I+PjJdPWk7YnJlYWs7Y2FzZSAyMDQ3OmJyZWFrO2RlZmF1bHQ6YXJbcj4+Ml09KDIwNDcmbiktMTAyMixhcltkPj4yXT1pLGFyW2QrND4+Ml09LTIxNDY0MzUwNzMmZnwxMDcxNjQ0NjcyLGU9K1FbZD4+M119cmV0dXJuK2V9KEE9K0EsZXw9MCl9ZnVuY3Rpb24gJGMoQSxlKXtBfD0wLGV8PTA7ZG97aWYoQSl7aWYoZT4+PjA8MTI4KXt0cltBPj4wXT1lLEE9MTticmVha31pZighKDB8YXJbYXJbMTA0ODg+PjJdPj4yXSkpe2lmKDU3MjE2PT0oLTEyOCZlfDApKXt0cltBPj4wXT1lLEE9MTticmVha31hclsoQT0xMDM2NCk+PjJdPTg0LEE9LTE7YnJlYWt9aWYoZT4+PjA8MjA0OCl7dHJbQT4+MF09ZT4+PjZ8MTkyLHRyW0ErMT4+MF09NjMmZXwxMjgsQT0yO2JyZWFrfWlmKGU+Pj4wPDU1Mjk2fDU3MzQ0PT0oLTgxOTImZXwwKSl7dHJbQT4+MF09ZT4+PjEyfDIyNCx0cltBKzE+PjBdPWU+Pj42JjYzfDEyOCx0cltBKzI+PjBdPTYzJmV8MTI4LEE9MzticmVha31pZigoZSstNjU1MzZ8MCk+Pj4wPDEwNDg1NzYpe3RyW0E+PjBdPWU+Pj4xOHwyNDAsdHJbQSsxPj4wXT1lPj4+MTImNjN8MTI4LHRyW0ErMj4+MF09ZT4+PjYmNjN8MTI4LHRyW0ErMz4+MF09NjMmZXwxMjgsQT00O2JyZWFrfWFyWyhBPTEwMzY0KT4+Ml09ODQsQT0tMTticmVha31BPTF9d2hpbGUoMCk7cmV0dXJuIDB8QX1mdW5jdGlvbiBBbChBLGUpe3ZhciByO3JldHVybiByPTB8a2IoMHwoQXw9MCkpLDB8KDA9PSgwfChlfD0wKSk/QTpyKX1mdW5jdGlvbiBlbChBLGUscil7QXw9MCxlfD0wO3ZhciBpPTAsZj0wLG49MCx0PTAsbz0wOyhmPTB8YXJbKGk9KHJ8PTApKzE2fDApPj4yXSk/bj01OjB8cmwocik/aT0wOihmPTB8YXJbaT4+Ml0sbj01KTtBOmRve2lmKDU9PSgwfG4pKXtpZigoZi0oaT10PTB8YXJbKG89cisyMHwwKT4+Ml0pfDApPj4+MDxlPj4+MCl7aT0wfHhiWzYzJmFyW3IrMzY+PjJdXShyLEEsZSk7YnJlYWt9ZTpkb3tpZigtMTwoMHx0cltyKzc1Pj4wXSkpe2Zvcih0PWU7Oyl7aWYoIXQpe249MCxmPUE7YnJlYWsgZX1pZigxMD09KDB8dHJbQSsoZj10Ky0xfDApPj4wXSkpYnJlYWs7dD1mfWlmKChpPTB8eGJbNjMmYXJbciszNj4+Ml1dKHIsQSx0KSk+Pj4wPHQ+Pj4wKWJyZWFrIEE7Zj1BKyhuPXQpfDAsZT1lLXR8MCxpPTB8YXJbbz4+Ml19ZWxzZSBuPTAsZj1BfXdoaWxlKDApO2hiKDB8aSwwfGYsMHxlKSxhcltvPj4yXT0oMHxhcltvPj4yXSkrZSxpPW4rZXwwfX13aGlsZSgwKTtyZXR1cm4gMHxpfWZ1bmN0aW9uIHJsKEEpe3ZhciBlPTAscj0wO3JldHVybiByPTB8dHJbKGU9KEF8PTApKzc0fDApPj4wXSx0cltlPj4wXT1yKzI1NXxyLDB8KEE9OCYoZT0wfGFyW0E+PjJdKT8oYXJbQT4+Ml09MzJ8ZSwtMSk6KGFyW0ErOD4+Ml09MCxyPShhcltBKzQ+PjJdPTApfGFyW0ErNDQ+PjJdLGFyW0ErMjg+PjJdPXIsYXJbQSsyMD4+Ml09cixhcltBKzE2Pj4yXT1yKygwfGFyW0ErNDg+PjJdKSwwKSl9ZnVuY3Rpb24gaWwoQSxlLHIpe3ZhciBpLGYsbjtyZXR1cm4gMHwoMHwoaT1BfD0wLGY9ZXw9MCxuPXJ8PTAsMHwobj0wfGZsKGl8PTAsZnw9MCxufD0wLC0xLC0xKSkpKX1mdW5jdGlvbiBmbChBLGUscixpLGYpe0F8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MDt2YXIgbix0LG8sYTtyZXR1cm4gdD11cj0oYT11cikrMzEmLTMyLHVyPXVyKzEyOHwwLGFyW3Q+PjJdPTAsYXJbKG89NCt0fDApPj4yXT1BLGFyWzQ0K3Q+PjJdPUEsYXJbKG49OCt0fDApPj4yXT0oMHxBKTwwPy0xOkErMjE0NzQ4MzY0N3wwLGFyWzc2K3Q+PjJdPS0xLG5sKHQsMCkscj0wfHdpKHQsciwxLGksZiksMHxlJiYoYXJbZT4+Ml09QSsoKDB8YXJbbz4+Ml0pKygwfGFyWzEwOCt0Pj4yXSktKDB8YXJbbj4+Ml0pKSksdXI9YSwwfHJ9ZnVuY3Rpb24gbmwoQSxlKXtlfD0wO3ZhciByLGksZjthclsoQXw9MCkrMTA0Pj4yXT1lLGY9KHI9MHxhcltBKzg+PjJdKS0oaT0wfGFyW0ErND4+Ml0pfDAsYXJbQSsxMDg+PjJdPWYsYXJbQSsxMDA+PjJdPTAhPSgwfGUpJigwfGUpPCgwfGYpP2krZXwwOnJ9ZnVuY3Rpb24gdGwoQSl7c3dpdGNoKDB8KEF8PTApKXtjYXNlIDE1OmNhc2UgMTM6Y2FzZSAxMTpyZXR1cm4gMHwoQT0xKTtjYXNlIDE0OmNhc2UgMTI6Y2FzZSAxMDpjYXNlIDM6Y2FzZSAyOmNhc2UgMTpjYXNlIDA6Y2FzZSA5OTpyZXR1cm4oQT0wKXxBO2RlZmF1bHQ6c3IoNTU3MzksMjU1OTcsNDk1LDI1ODAyKX1yZXR1cm4gMH1mdW5jdGlvbiBvbChBLGUscixpKXtBfD0wLGV8PTAsaXw9MDt2YXIgZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wLGQ9MCxrPTAsaD0wLHc9MCx2PTAsbT0wLGc9MCxaPTAscD0wO2lmKCEocnw9MCkpcmV0dXJuIHQ9MHxhcltlPj4yXSwoZj0wfGFyW2UrND4+Ml0pfHwoQT0wfFgoNCksYXJbQT4+Ml09MTc1MzYsSSgwfEEsMzkyMCw0MjEpKSwobj0wfGZ1bmN0aW9uKEEpe3ZhciBlLHI9MCxpPTA7cj0wfGFyWyhlPTQrKEF8PTApfDApPj4yXTtmb3IoOzspe2lmKC0xPT0oMHxyKSl7QT0wO2JyZWFrfWlmKCgwfChpPTB8YXJbZT4+Ml0pKT09KDB8cikmJihhcltlPj4yXT1yKzEpLCgwfGkpPT0oMHxyKSlicmVhaztyPWl9cmV0dXJuIDB8QX0oZikpfHwoQT0wfFgoNCksYXJbQT4+Ml09MTc1MzYsSSgwfEEsMzkyMCw0MjEpKSxhcltpPj4yXT10LGY9MHxhclsoZT1pKzR8MCk+PjJdLGFyW2U+PjJdPW4sMHxmJiZkdShmKSxaPTB8YXJbKGc9NTY1OTIpKzQ+PjJdLGFyWyhlPUEpPj4yXT1hcltnPj4yXSxhcltlKzQ+PjJdPVosdm9pZCB5dShBKzh8MCw1NjYwMCk7c3dpdGNoKGY9MHxhcltlKzI0Pj4yXSxuPTB8YXJbZSsyOD4+Ml0sZz05MD09KDB8ciksWj0yNzA9PSgwfHIpLDB8cil7Y2FzZSA5MDpjYXNlIDI3MDpsPW47YnJlYWs7ZGVmYXVsdDpsPWYsZj1ufW89MHxodSg4MCksYXJbbys0Pj4yXT0wLGFyW28rOD4+Ml09MCxhcltvPj4yXT02MjA4LGFyWyhuPW8rMTJ8MCk+PjJdPTAsYXJbbis0Pj4yXT0wLGFyW24rOD4+Ml09MCxhcltuKzEyPj4yXT0wLGFyW24rMTY+PjJdPTAsYXJbbyszMj4+Ml09MzIyMTUsYXJbbyszNj4+Ml09MCxhcltvKzQwPj4yXT0wLGFyW28rNDQ+PjJdPTk5LGFyW28rNDg+PjJdPTk5LGM9bys1MnwwLGFyWyhhPW8rNzJ8MCk+PjJdPTAsYXJbbys3Nj4+Ml09MCxhcltjPj4yXT0wLGFyW2MrND4+Ml09MCxhcltjKzg+PjJdPTAsYXJbYysxMj4+Ml09MCxhcltvKzY4Pj4yXT1hLGE9bixtPShjPW8pKzE2fDAsYnUobyksc3UobyksdD0wfGFyW20+PjJdLGFyW24+PjJdPWEsYXJbbT4+Ml09YywwfHQmJmt1KHQpLGR1KG8pLGFyW2k+PjJdPWEsdD0wfGFyWyhtPWkrNHwwKT4+Ml0sYXJbbT4+Ml09Yyx0PyhkdSh0KSxuPTB8YXJbKG09aSk+PjJdKTptPWksdj0wfGFyW2UrMzI+PjJdLHc9MHxhcltlKzM2Pj4yXSxhcltuKzI0Pj4yXT1sLGFyW24rMjg+PjJdPWYsYXJbbiszMj4+Ml09dixhcltuKzM2Pj4yXT13LGY9MHxhcltlKzU2Pj4yXSx3PWUrNjB8MDtBOmRve2lmKCgwfGYpIT0oMHx3KSlmb3Iodj0xODA9PSgwfHIpLGg9Zjs7KXtzd2l0Y2goYz0wfGFyW2grMTY+PjJdLGY9MHxhclsobz1oKzI0fDApPj4yXSxuPTB8YXJbKGE9aCsyOHwwKT4+Ml0sMHxyKXtjYXNlIDkwOmNhc2UgMjcwOnQ9ZixmPW47YnJlYWs7ZGVmYXVsdDp0PW59aWYobD1oKzIwfDAsQm8oMHxhclttPj4yXSxjLGYsdCwwfGNyW2w+PjBdKSxrPTB8YXJbbz4+Ml0sYj0wfGFyW2E+PjJdLHM9MHxhcltoKzQ4Pj4yXSxkPTB8YXJbaCs0MD4+Ml0sbz02MCsoMHxhclttPj4yXSl8MCxuPTB8YXJbbz4+Ml0pe2Y9bztlOmZvcig7Oyl7Zm9yKHQ9bjshKCgwfGFyW3QrMTY+PjJdKT49KDB8YykpOyl7aWYoIShuPTB8YXJbdCs0Pj4yXSkpYnJlYWsgZTt0PW59aWYoIShuPTB8YXJbdD4+Ml0pKXtmPXQ7YnJlYWt9Zj10fWk9KDB8ZikhPSgwfG8pJiYoMHxhcltmKzE2Pj4yXSk8PSgwfGMpPyh1PTB8YXJbZis0MD4+Ml0sMHxhcltmKzQ4Pj4yXSk6dT0wfWVsc2UgaT11PTA7Zj0wPCgwfGIpO2U6ZG97aWYoOD09KDB8dHJbbD4+MF0pKXtpZihaKXtpZighZilicmVhaztpZih0PWIrLTF8MCwhKDA8KDB8aykpKWJyZWFrO2ZvcihuPTA7Oyl7Zm9yKG89MHxicih0LW58MCxzKSxmPTA7bD11KygoMHxicihmLGkpKStuKXwwLHRyW2w+PjBdPTB8dHJbZCsoZitvKT4+MF0sKDB8KGY9ZisxfDApKSE9KDB8ayk7KTtpZigoMHwobj1uKzF8MCkpPT0oMHxiKSlicmVhayBlfX1pZih2KXtpZighZilicmVhaztpZih0PWIrLTF8MCxvPWsrLTF8MCwhKDA8KDB8aykpKWJyZWFrO249MDtkb3tmb3IoYT1vKygwfGJyKHQtbnwwLHMpKXwwLGM9MHxicihuLGkpLGY9MDt0clt1KyhmK2MpPj4wXT0wfHRyW2QrKGEtZik+PjBdLCgwfChmPWYrMXwwKSkhPSgwfGspOyk7bj1uKzF8MH13aGlsZSgoMHxuKSE9KDB8YikpfWVsc2V7aWYoIShnJmYpKWJyZWFrO2lmKHQ9aystMXwwLCEoMDwoMHxrKSkpYnJlYWs7bj0wO2Rve2ZvcihvPXQrKDB8YnIobixzKSl8MCxmPTA7bD11KygoMHxicihmLGkpKStuKXwwLHRyW2w+PjBdPTB8dHJbZCsoby1mKT4+MF0sKDB8KGY9ZisxfDApKSE9KDB8ayk7KTtuPW4rMXwwfXdoaWxlKCgwfG4pIT0oMHxiKSl9fWVsc2V7aWYoWil7aWYoIWYpYnJlYWs7aWYodD1iKy0xfDAsISgwPCgwfGspKSlicmVhaztmb3Iobj0wOzspe2ZvcihvPTB8YnIodC1ufDAscyksYT1uPDwxLGY9MDtjPShmPDwxKStvfDAsbD0oMHxicihmLGkpKSthfDAsdHJbdStsPj4wXT0wfHRyW2QrYz4+MF0sdHJbdSsobCsxKT4+MF09MHx0cltkKyhjKzEpPj4wXSwoMHwoZj1mKzF8MCkpIT0oMHxrKTspO2lmKCgwfChuPW4rMXwwKSk9PSgwfGIpKWJyZWFrIGV9fWlmKHYpe2lmKCFmKWJyZWFrO2lmKHQ9YistMXwwLG89aystMXwwLCEoMDwoMHxrKSkpYnJlYWs7bj0wO2Rve2ZvcihhPTB8YnIodC1ufDAscyksYz0wfGJyKG4saSksZj0wO3A9KG8tZjw8MSkrYXwwLHRyW3UrKGw9KGY8PDEpK2N8MCk+PjBdPTB8dHJbZCtwPj4wXSx0clt1KyhsKzEpPj4wXT0wfHRyW2QrKHArMSk+PjBdLCgwfChmPWYrMXwwKSkhPSgwfGspOyk7bj1uKzF8MH13aGlsZSgoMHxuKSE9KDB8YikpfWVsc2V7aWYoIShnJmYpKWJyZWFrO2lmKHQ9aystMXwwLCEoMDwoMHxrKSkpYnJlYWs7Zj0wO2Rve2ZvcihvPTB8YnIoZixzKSxhPWY8PDEsbj0wO2w9KHQtbjw8MSkrb3wwLHA9KDB8YnIobixpKSkrYXwwLHRyW3UrcD4+MF09MHx0cltkK2w+PjBdLHRyW3UrKHArMSk+PjBdPTB8dHJbZCsobCsxKT4+MF0sKDB8KG49bisxfDApKSE9KDB8ayk7KTtmPWYrMXwwfXdoaWxlKCgwfGYpIT0oMHxiKSl9fX13aGlsZSgwKTtpZihmPTB8YXJbaCs0Pj4yXSlmb3IoO249MHxhcltmPj4yXTspZj1uO2Vsc2UgaWYoZj0wfGFyWyhuPWgrOHwwKT4+Ml0sKDB8YXJbZj4+Ml0pIT0oMHxoKSlmb3IoO3A9MHxhcltuPj4yXSxmPTB8YXJbKG49cCs4fDApPj4yXSwoMHxhcltmPj4yXSkhPSgwfHApOyk7aWYoKDB8Zik9PSgwfHcpKWJyZWFrIEE7aD1mfX13aGlsZSgwKTtmPTB8YXJbbT4+Ml0sbj0wfGFyW2UrNDA+PjJdLChvPTA9PSgwfCh0PTB8YXJbZSs0ND4+Ml0pKSl8fChidSh0KSxidSh0KSksYXJbZis0MD4+Ml09bixmPTB8YXJbKHA9Zis0NHwwKT4+Ml0sYXJbcD4+Ml09dCwwfGYmJmR1KGYpLG98fGR1KHQpLGY9MHxhclttPj4yXSxuPTB8YXJbZSs0OD4+Ml0sKG89MD09KDB8KHQ9MHxhcltlKzUyPj4yXSkpKXx8KGJ1KHQpLGJ1KHQpKSxhcltmKzQ4Pj4yXT1uLGY9MHxhclsocD1mKzUyfDApPj4yXSxhcltwPj4yXT10LDB8ZiYmZHUoZiksb3x8ZHUodCksZT0wfGFyWyhaPTU2NTkyKSs0Pj4yXSxhclsocD1BKT4+Ml09YXJbWj4+Ml0sYXJbcCs0Pj4yXT1lLHl1KEErOHwwLDU2NjAwKX1mdW5jdGlvbiBhbChBLGUscil7QXw9MCxyfD0wO3ZhciBpLGYsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTAsZD0wLGs9MCxoPTAsdz0wLHY9MCxtPTA7dXI9KGY9dXIpKzE2fDAsdz1mLG49MHxhclsoZXw9MCkrNTY+PjJdLGk9ZSs2MHwwO0E6ZG97aWYoKDB8bikhPSgwfGkpKXtmb3IoOzg9PSgwfHRyW24rMjA+PjBdKTspe2lmKGM9MHxhcltuKzI0Pj4yXSxsPTB8YXJbbisyOD4+Ml0sYj0wfGFyW24rNDg+PjJdLHM9MHxhcltuKzQwPj4yXSxyKXtpZigwPCgwfGwpJiYoaz0oMHxjKS8yfDAsaD1jKy0xfDAsMTwoMHxjKSkpe3Q9MDtkb3tmb3IoYT1oKyhvPTB8YnIodCxiKSl8MCxlPTA7dT1zKyhhLWUpfDAsYz0wfHRyWyh2PXMrKGUrbyl8MCk+PjBdLHRyW3Y+PjBdPTB8dHJbdT4+MF0sdHJbdT4+MF09YywoMHwoZT1lKzF8MCkpPCgwfGspOyk7dD10KzF8MH13aGlsZSgoMHx0KSE9KDB8bCkpfX1lbHNlIGlmKHU9KDB8bCkvMnwwLDE8KDB8bCkmJihkPWwrLTF8MCwwPCgwfGMpKSl7ZT0wO2Rve2ZvcihvPTB8YnIoZSxiKSxhPTB8YnIoZC1lfDAsYiksdD0wO3Y9cysodCthKXwwLGw9MHx0clsobT1zKyh0K28pfDApPj4wXSx0clttPj4wXT0wfHRyW3Y+PjBdLHRyW3Y+PjBdPWwsKDB8KHQ9dCsxfDApKSE9KDB8Yyk7KTtlPWUrMXwwfXdoaWxlKCgwfGUpPCgwfHUpKX1pZihlPTB8YXJbbis0Pj4yXSlmb3IoO249MHxhcltlPj4yXTspZT1uO2Vsc2UgaWYoZT0wfGFyWyh0PW4rOHwwKT4+Ml0sKDB8YXJbZT4+Ml0pIT0oMHxuKSlmb3Iobj10O209MHxhcltuPj4yXSxlPTB8YXJbKG49bSs4fDApPj4yXSwoMHxhcltlPj4yXSkhPSgwfG0pOyk7aWYoKDB8ZSk9PSgwfGkpKWJyZWFrIEE7bj1lfWZvcihlPTB8aHUoNjQpLGFyW3c+PjJdPWUsYXJbdys4Pj4yXT0tMjE0NzQ4MzU4NCx0PTI1ODk4LG89KG49ZSkrKGFyW3crND4+Ml09NTQpfDA7dHJbbj4+MF09MHx0clt0Pj4wXSx0PXQrMXwwLCgwfChuPW4rMXwwKSk8KDB8byk7KTtyZXR1cm4ob28oQSw0LHRyW2UrNTQ+PjBdPTAsdyksMDw9KDB8dHJbdysxMT4+MF0pKT92b2lkKHVyPWYpOih2dSgwfGFyW3c+PjJdKSx2b2lkKHVyPWYpKX19d2hpbGUoMCk7dj0wfGFyWyh3PTU2NTkyKSs0Pj4yXSxhclsobT1BKT4+Ml09YXJbdz4+Ml0sYXJbbSs0Pj4yXT12LHl1KEErOHwwLDU2NjAwKSx1cj1mfWZ1bmN0aW9uIGNsKEEsZSxyLGksZixuLHQpe0F8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTA7dmFyIG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MDtpZihsPTB8aHUoODApLGFyW2wrND4+Ml09MCxhcltsKzg+PjJdPTAsYXJbbD4+Ml09NjIwOCxhclsobz1sKzEyfDApPj4yXT0wLGFyW28rND4+Ml09MCxhcltvKzg+PjJdPTAsYXJbbysxMj4+Ml09MCxhcltvKzE2Pj4yXT0wLGFyW2wrMzI+PjJdPTMyMjE1LGFyW2wrMzY+PjJdPTAsYXJbbCs0MD4+Ml09MCxhcltsKzQ0Pj4yXT05OSxhcltsKzQ4Pj4yXT05OSx1PWwrNTJ8MCxhclsoYz1sKzcyfDApPj4yXT0wLGFyW2wrNzY+PjJdPTAsYXJbdT4+Ml09MCxhclt1KzQ+PjJdPTAsYXJbdSs4Pj4yXT0wLGFyW3UrMTI+PjJdPTAsYXJbbCs2OD4+Ml09YyxjPW8scD0odT1sKSsxNnwwLGJ1KGwpLHN1KGwpLGE9MHxhcltwPj4yXSxhcltvPj4yXT1jLGFyW3A+PjJdPXUsMHxhJiZrdShhKSxkdShsKSxhclt0Pj4yXT1jLGE9MHxhclsocD10KzR8MCk+PjJdLGFyW3A+PjJdPXUsYT8oZHUoYSksbz0wfGFyWyhwPXQpPj4yXSk6cD10LFo9MHxhcltlKzMyPj4yXSxtPTB8YXJbZSszNj4+Ml0sYXJbbysyND4+Ml09MS1yK2ksYXJbbysyOD4+Ml09MS1mK24sYXJbbyszMj4+Ml09WixhcltvKzM2Pj4yXT1tLCgwfChvPTB8YXJbZSs1Nj4+Ml0pKSE9KDB8KG09ZSs2MHwwKSkpZm9yKGc9ZSsyNHwwLFo9ZSsyOHwwLHY9bzs7KXtpZih1PTB8YXJbdisxNj4+Ml0saD0wfGFyW3YrMjQ+PjJdLHQ9MHxhclt2KzI4Pj4yXSxiPSgwfChiPTB8YnIoaCxyKSkpLygwfChzPTB8YXJbZz4+Ml0pKXwwLHM9KDB8YnIoaCxpKSkvKDB8cyl8MCxoPSgwfChoPTB8YnIodCxmKSkpLygwfCh3PTB8YXJbWj4+Ml0pKXwwLHc9KDB8YnIodCxuKSkvKDB8dyl8MCxzPXMtYisxfDAsdD12KzIwfDAsQm8oMHxhcltwPj4yXSx1LHMsMS1oK3d8MCwwfGNyW3Q+PjBdKSxkPTB8YXJbdis0OD4+Ml0saz0wfGFyW3YrNDA+PjJdLGw9NjArKDB8YXJbcD4+Ml0pfDAsYT0wfGFyW2w+PjJdKXtvPWw7QTpmb3IoOzspe2ZvcihjPWE7ISgoMHxhcltjKzE2Pj4yXSk+PSgwfHUpKTspe2lmKCEoYT0wfGFyW2MrND4+Ml0pKWJyZWFrIEE7Yz1hfWlmKCEoYT0wfGFyW2M+PjJdKSl7bz1jO2JyZWFrfW89Y31sPSgwfG8pIT0oMHxsKSYmKDB8YXJbbysxNj4+Ml0pPD0oMHx1KT8odT0wfGFyW28rNDA+PjJdLDB8YXJbbys0OD4+Ml0pOnU9MH1lbHNlIGw9dT0wO2lmKG89KDB8dyk8KDB8aCksOD09KDB8dHJbdD4+MF0pKXtpZighbylmb3Iobz1oO2hiKHUrKDB8YnIoby1ofDAsbCkpfDAsaysoKDB8YnIobyxkKSkrYil8MCwwfHMpLCgwfG8pPCgwfHcpOylvPW8rMXwwfWVsc2UgaWYoIW8pZm9yKGM9Yjw8MSxhPXM8PDEsbz1oO2hiKHUrKDB8YnIoby1ofDAsbCkpfDAsaysoKDB8YnIobyxkKSkrYyl8MCwwfGEpLCgwfG8pPCgwfHcpOylvPW8rMXwwO2lmKG89MHxhclt2KzQ+PjJdKWZvcig7YT0wfGFyW28+PjJdOylvPWE7ZWxzZSBpZihvPTB8YXJbKGE9dis4fDApPj4yXSwoMHxhcltvPj4yXSkhPSgwfHYpKWZvcig7dj0wfGFyW2E+PjJdLG89MHxhclsoYT12Kzh8MCk+PjJdLCgwfGFyW28+PjJdKSE9KDB8dik7KTtpZigoMHxvKT09KDB8bSkpYnJlYWs7dj1vfWlmKG89MHxhcltwPj4yXSxhPTB8YXJbZSs0MD4+Ml0sKGw9MD09KDB8KGM9MHxhcltlKzQ0Pj4yXSkpKXx8KGJ1KGMpLGJ1KGMpKSxhcltvKzQwPj4yXT1hLG89MHxhclsobj1vKzQ0fDApPj4yXSxhcltuPj4yXT1jLDB8byYmZHUobyksbHx8ZHUoYyksbz0wfGFyW3A+PjJdLGE9MHxhcltlKzQ4Pj4yXSwobD0wPT0oMHwoYz0wfGFyW2UrNTI+PjJdKSkpfHwoYnUoYyksYnUoYykpLGFyW28rNDg+PjJdPWEsbz0wfGFyWyhlPW8rNTJ8MCk+PjJdLGFyW2U+PjJdPWMsMHxvJiZkdShvKSxsKXJldHVybiBpPTB8YXJbKGk9bj01NjU5Mik+PjJdLG49MHxhclsobj1uKzR8MCk+PjJdLGFyWyhmPWU9QSk+PjJdPWksYXJbKGU9ZSs0fDApPj4yXT1uLHZvaWQgeXUoQT1BKzh8MCw1NjYwMCk7ZHUoYyksaT0wfGFyWyhpPW49NTY1OTIpPj4yXSxuPTB8YXJbKG49bis0fDApPj4yXSxhclsoZj1lPUEpPj4yXT1pLGFyWyhlPWUrNHwwKT4+Ml09bix5dShBPUErOHwwLDU2NjAwKX1mdW5jdGlvbiBsbChBLGUscixpLGYsbil7QXw9MDt2YXIgdCxvLGEsYyxsLHUsYj0wLHM9MCxkPTAsaz0wO3VyPSh1PXVyKSszMnwwLHM9dSsxMnwwLGs9dSxsPShlfD0wKSs2MHwwLGM9KDY1NTM1JihpfD0wKSk+Pj44JjI1NSxhPSg2NTUzNSYocnw9MCkpPj4+OCYyNTUsbz0oNjU1MzUmKGZ8PTApKT4+PjgmMjU1LHQ9KDY1NTM1JihufD0wKSk+Pj44JjI1NSxuPTYyMjg7QTpmb3IoOzspe2lmKGU9MHxhcltsPj4yXSxiPTB8YXJbbj4+Ml0sZSl7cj1sLGk9ZTtlOmZvcig7Oyl7Zm9yKGU9aTshKCgwfGFyW2UrMTY+PjJdKT49KDB8YikpOylpZighKGU9MHxhcltlKzQ+PjJdKSl7ZT1yO2JyZWFrIGV9aWYoIShpPTB8YXJbZT4+Ml0pKWJyZWFrO3I9ZX1pZigoMHxlKSE9KDB8bCkmJigwfGIpPj0oMHxhcltlKzE2Pj4yXSkpe2lmKDghPSgwfHRyW2UrMjA+PjBdKSl7ZD0xMzticmVha31zd2l0Y2gocj0wfGFyW2UrMjg+PjJdLGY9MHxhcltlKzQ4Pj4yXSxpPTB8YXJbZSs0MD4+Ml0sMHxiKXtjYXNlIDM6ZT1hO2JyZWFrO2Nhc2UgNDplPWM7YnJlYWs7Y2FzZSA1OmU9bzticmVhaztjYXNlIDY6ZT10O2JyZWFrO2RlZmF1bHQ6ZD0xOTticmVhayBBfXZiKDB8aSwwfGUsMHxicihmLHIpKX1lbHNlIGQ9OX1lbHNlIGQ9OTtpZig5PT0oMHxkKSYmNiE9KChkPTApfGIpKXtkPTEwO2JyZWFrfWlmKDYyNDQ9PSgwfChuPW4rNHwwKSkpe2Q9MjI7YnJlYWt9fWlmKDEwPT0oMHxkKSlyZXR1cm4gYXJbcz4+Ml09MCxhcltzKzQ+PjJdPTAsYXJbcys4Pj4yXT0wLG9vKEEsNSwyMDAyLHMpLDA8PSgwfHRyW3MrMTE+PjBdKXx8dnUoMHxhcltzPj4yXSksdm9pZCh1cj11KTtpZigxMz09KDB8ZCkpe2ZvcihlPTB8aHUoNjQpLGFyW2s+PjJdPWUsYXJbays4Pj4yXT0tMjE0NzQ4MzU4NCxyPTI1OTUzLGY9KGk9ZSkrKGFyW2srND4+Ml09NTIpfDA7dHJbaT4+MF09MHx0cltyPj4wXSxyPXIrMXwwLCgwfChpPWkrMXwwKSk8KDB8Zik7KTtyZXR1cm4ob28oQSw0LHRyW2UrNTI+PjBdPTAsayksMDw9KDB8dHJbaysxMT4+MF0pKT92b2lkKHVyPXUpOih2dSgwfGFyW2s+PjJdKSx2b2lkKHVyPXUpKX1pZigxOT09KDB8ZCkpc3IoNTU3MzksMjU1OTcsNzU2LDI2MDA2KTtlbHNlIGlmKDIyPT0oMHxkKSlyZXR1cm4gZD0wfGFyWyhzPTU2NTkyKSs0Pj4yXSxhclsoaz1BKT4+Ml09YXJbcz4+Ml0sYXJbays0Pj4yXT1kLHl1KEErOHwwLDU2NjAwKSx2b2lkKHVyPXUpfWZ1bmN0aW9uIHVsKEEsZSxyLGksZil7QXw9MCxlfD0wLGl8PTAsZnw9MDt2YXIgbix0LG8sYSxjPTAsbD0wLHU9MCxiPTAscz0wLGQ9MCxrPTAsaD0wLHc9MCx2PTAsbT0wLGc9MCxaPTAscD0wLHk9MCxCPTAsRT0wLFg9MCxXPTAsST0wO2lmKHVyPShhPXVyKSs0OHwwLFc9YSsxMnwwLElvKG89KEk9YSkrMjR8MCwwfGFyWyhyfD0wKT4+Ml0pLGs9NjArKDB8YXJbcj4+Ml0pfDAscz0wPT0oMHwodT0wfGFyW2s+PjJdKSkpZD04O2Vsc2V7Yz1rLGI9dTtBOmZvcig7Oyl7Zm9yKGw9YjshKDY8PSgwfGFyW2wrMTY+PjJdKSk7KWlmKCEobD0wfGFyW2wrND4+Ml0pKWJyZWFrIEE7aWYoIShiPTB8YXJbbD4+Ml0pKXtjPWw7YnJlYWt9Yz1sfSgwfGMpIT0oMHxrKSYmKDB8YXJbYysxNj4+Ml0pPD02fHwoZD04KX1pZig4PT0oMHxkKSYmKGM9ayksdD0oMHxjKT09KDB8aykscylYPTA7ZWxzZXtjPWs7QTpmb3IoOzspe2ZvcihsPXU7ISg2PD0oMHxhcltsKzE2Pj4yXSkpOylpZighKGw9MHxhcltsKzQ+PjJdKSlicmVhayBBO2lmKCEodT0wfGFyW2w+PjJdKSl7Yz1sO2JyZWFrfWM9bH1YPSgwfGMpIT0oMHxrKSYmKDB8YXJbYysxNj4+Ml0pPD02PzB8YXJbYys0MD4+Ml06MH1jPTB8YXJbbz4+Ml0sbj00K298MDtBOmRve2lmKCgwfGMpIT0oMHxuKSl7RT1lKzYwfDAseT0oQj0oMHxpKTwwKT8wLWl8MDowLEI9Qj8wOmkscD0oMHxmKTwwPzAtZnwwOjAsWj1jO2U6Zm9yKDs7KXt2PTB8YXJbWisxNj4+Ml0saD0wfGFyW0U+PjJdO3I6ZG97aWYoMHxoKXtjPUUsdT1oO2k6Zm9yKDs7KXtmb3IobD11OyEoKDB8YXJbbCsxNj4+Ml0pPj0oMHx2KSk7KWlmKCEobD0wfGFyW2wrND4+Ml0pKWJyZWFrIGk7aWYoISh1PTB8YXJbbD4+Ml0pKXtjPWw7YnJlYWt9Yz1sfWlmKCgwfGMpIT0oMHxFKSYmKDB8YXJbYysxNj4+Ml0pPD0oMHx2KSl7aWYoaz02MCsoMHxhcltyPj4yXSl8MCxiPTA9PSgwfChzPTB8YXJbaz4+Ml0pKSlnPW09MDtlbHNle2M9ayx1PXM7aTpmb3IoOzspe2ZvcihsPXU7ISgoMHxhcltsKzE2Pj4yXSk+PSgwfHYpKTspaWYoIShsPTB8YXJbbCs0Pj4yXSkpYnJlYWsgaTtpZighKHU9MHxhcltsPj4yXSkpe2M9bDticmVha31jPWx9Zz0oMHxjKSE9KDB8aykmJigwfGFyW2MrMTY+PjJdKTw9KDB8dik/KG09MHxhcltjKzQwPj4yXSwwfGFyW2MrNDg+PjJdKTptPTB9Yz1FLHU9aDtpOmZvcig7Oyl7Zm9yKGw9dTshKCgwfGFyW2wrMTY+PjJdKT49KDB8dikpOylpZighKGw9MHxhcltsKzQ+PjJdKSlicmVhayBpO2lmKCEodT0wfGFyW2w+PjJdKSl7Yz1sO2JyZWFrfWM9bH1pZihlPSgwfGMpIT0oMHxFKSYmKDB8YXJbYysxNj4+Ml0pPD0oMHx2KT8odz0wfGFyW2MrNDg+PjJdLDB8YXJbYys0MD4+Ml0pOnc9MCxiKXtkPTU5O2JyZWFrIGV9Yz1rLHU9cztpOmZvcig7Oyl7Zm9yKGw9dTshKCgwfGFyW2wrMTY+PjJdKT49KDB8dikpOylpZighKGw9MHxhcltsKzQ+PjJdKSlicmVhayBpO2lmKCEodT0wfGFyW2w+PjJdKSl7Yz1sO2JyZWFrfWM9bH1pZihkPSgwfGMpIT0oMHxrKSYmKDB8YXJbYysxNj4+Ml0pPD0oMHx2KT8wfGFyW2MrMjQ+PjJdOi0xLGIpcz0tMTtlbHNle2M9ayx1PXM7aTpmb3IoOzspe2ZvcihsPXU7ISgoMHxhcltsKzE2Pj4yXSk+PSgwfHYpKTspaWYoIShsPTB8YXJbbCs0Pj4yXSkpYnJlYWsgaTtpZighKHU9MHxhcltsPj4yXSkpe2M9bDticmVha31jPWx9cz0oMHxjKSE9KDB8aykmJigwfGFyW2MrMTY+PjJdKTw9KDB8dik/MHxhcltjKzI4Pj4yXTotMX1pZigoMHxkKTw9LTEpe2Q9NTk7YnJlYWsgZX1pZighKC0xPCgwfHMpKSl7ZD02MTticmVhayBlfWM9RSx1PWg7aTpmb3IoOzspe2ZvcihsPXU7ISgoMHxhcltsKzE2Pj4yXSk+PSgwfHYpKTspaWYoIShsPTB8YXJbbCs0Pj4yXSkpYnJlYWsgaTtpZighKHU9MHxhcltsPj4yXSkpe2M9bDticmVha31jPWx9Yj0oMHxjKSE9KDB8RSkmJigwfGFyW2MrMTY+PjJdKTw9KDB8dik/MHxhcltjKzI0Pj4yXTotMSxjPUUsdT1oO2k6Zm9yKDs7KXtmb3IobD11OyEoKDB8YXJbbCsxNj4+Ml0pPj0oMHx2KSk7KWlmKCEobD0wfGFyW2wrND4+Ml0pKWJyZWFrIGk7aWYoISh1PTB8YXJbbD4+Ml0pKXtjPWw7YnJlYWt9Yz1sfWlmKGM9KDB8YykhPSgwfEUpJiYoMHxhcltjKzE2Pj4yXSk8PSgwfHYpPzB8YXJbYysyOD4+Ml06LTEsKDB8Yik8PS0xKXtkPTc4O2JyZWFrIGV9aWYoKDB8Yyk8PS0xKXtkPTgwO2JyZWFrIGV9aWYoKChzPSgwfGMpPChzK2Z8MCk/Yy1mfDA6cyl8KGQ9KDB8Yik8KGQraXwwKT9iLWl8MDpkKXwwKTwwKXtkPTgyO2JyZWFrIGV9aWYoISgoMHx5KTwoMHxkKSYoMHxwKTwoMHxzKSkpe2Q9OTA7YnJlYWsgZX1pZihsPWUrQnwwLHU9bSt5fDAsYj1kLXl8MCx0KXtmb3IoYz1wOzspaWYoaGIobCsoMHxicihjK2Z8MCx3KSl8MCx1KygwfGJyKGMsZykpfDAsMHxiKSwoMHxzKTw9KDB8KGM9YysxfDApKSlicmVhayByfWVsc2UgbD1wO2Rve2Zvcih1PSgwfGJyKGwrZnwwLHcpKStCfDAsYj0oMHxicihsLGcpKSt5fDAsYz15O3Y9ZSsodStjKXwwLGs9MHxjcltYKyhoPWIrY3wwKT4+MF0saD0wfGJyKGssMHxjclttK2g+PjBdKSxoPTI1NSYoKCgoMHxicigwfGNyW3Y+PjBdLDI1NV5rKSkraHwwKT4+PjApLzI1NXwwKSx0clt2Pj4wXT1oLCgwfChjPWMrMXwwKSk8KDB8ZCk7KTtsPWwrMXwwfXdoaWxlKCgwfGwpPCgwfHMpKX19fXdoaWxlKDApO2lmKGM9MHxhcltaKzQ+PjJdKWZvcig7bD0wfGFyW2M+PjJdOyljPWw7ZWxzZSBpZihjPTB8YXJbKGw9Wis4fDApPj4yXSwoMHxhcltjPj4yXSkhPSgwfFopKWZvcig7Wj0wfGFyW2w+PjJdLGM9MHxhclsobD1aKzh8MCk+PjJdLCgwfGFyW2M+PjJdKSE9KDB8Wik7KTtpZigoMHxjKT09KDB8bikpYnJlYWsgQTtaPWN9aWYoNTk9PSgwfGQpKXNyKDI2MDIxLDI1NTk3LDc5NSwyNjAzMSk7ZWxzZSBpZig2MT09KDB8ZCkpc3IoMjYwMzksMjU1OTcsNzk2LDI2MDMxKTtlbHNlIGlmKDc4PT0oMHxkKSlzcigyNjA0OSwyNTU5Nyw4MDAsMjYwMzEpO2Vsc2UgaWYoODA9PSgwfGQpKXNyKDI2MDYwLDI1NTk3LDgwMSwyNjAzMSk7ZWxzZXtpZig4Mj09KDB8ZCkpe2ZvcihhcltXPj4yXT0wLGFyW1crND4+Ml09MCxjPShhcltXKzg+PjJdPTApfGh1KDY0KSxhcltXPj4yXT1jLGFyW1crOD4+Ml09LTIxNDc0ODM1ODQsdT0yNjA3MSxiPShsPWMpKyhhcltXKzQ+PjJdPTU0KXwwO3RyW2w+PjBdPTB8dHJbdT4+MF0sdT11KzF8MCwoMHwobD1sKzF8MCkpPCgwfGIpOyk7cmV0dXJuKHRyW2MrNTQ+PjBdPTAsb28oQSwyLDEyMixXKSwwPD0oMHx0cltXKzExPj4wXSkpPyhDbyhvLEE9MHxhcltuPj4yXSksdm9pZCh1cj1hKSk6KHZ1KDB8YXJbVz4+Ml0pLENvKG8sQT0wfGFyW24+PjJdKSx2b2lkKHVyPWEpKX1pZig5MD09KDB8ZCkpe2ZvcihhcltJPj4yXT0wLGFyW0krND4+Ml09MCxjPShhcltJKzg+PjJdPTApfGh1KDY0KSxhcltJPj4yXT1jLGFyW0krOD4+Ml09LTIxNDc0ODM1ODQsdT0yNjEyNixiPShsPWMpKyhhcltJKzQ+PjJdPTUwKXwwO3RyW2w+PjBdPTB8dHJbdT4+MF0sdT11KzF8MCwoMHwobD1sKzF8MCkpPCgwfGIpOyk7cmV0dXJuKHRyW2MrNTA+PjBdPTAsb28oQSwyLDEyMixJKSwwPD0oMHx0cltJKzExPj4wXSkpPyhDbyhvLEE9MHxhcltuPj4yXSksdm9pZCh1cj1hKSk6KHZ1KDB8YXJbST4+Ml0pLENvKG8sQT0wfGFyW24+PjJdKSx2b2lkKHVyPWEpKX19fX13aGlsZSgwKTtXPTB8YXJbKGY9NTY1OTIpKzQ+PjJdLGFyWyhJPUEpPj4yXT1hcltmPj4yXSxhcltJKzQ+PjJdPVcseXUoQSs4fDAsNTY2MDApLENvKG8sQT0wfGFyW24+PjJdKSx1cj1hfWZ1bmN0aW9uIGJsKEEsZSxyKXtlfD0wLHJ8PTA7dmFyIGksZjt1cj0oaT11cikrMTZ8MCxmPWksQT0wfGFyWyhBfD0wKT4+Ml0sZT0wfHRBKDB8ZSksYXJbZj4+Ml09YXJbcj4+Ml0scj0wfGNBKDQxNDQsMHxmKSxhQSgwfEEsMHxlLDB8ciksaUEoMHxyKSxpQSgwfGUpLHVyPWl9ZnVuY3Rpb24gc2woQSxlKXtlfD0wO3ZhciByLGksZixuPTAsdD0wO2lmKGFyWyhBfD0wKT4+Ml09MCxhclsoZj1BKzR8MCk+PjJdPTAsKHI9KG49KChhcltBKzg+PjJdPTApfGFyWyhpPWUrNHwwKT4+Ml0pLSgwfGFyW2U+PjJdKXwwKT4+MykmJig1MzY4NzA5MTE8cj4+PjAmJnpsKCksdD0wfGh1KG4pLGFyW2Y+PjJdPXQsYXJbQT4+Ml09dCxhcltBKzg+PjJdPXQrKHI8PDMpLCgwfChuPTB8YXJbZT4+Ml0pKSE9KDB8KGU9MHxhcltpPj4yXSkpKSlmb3IoO2FyW3Q+PjJdPWFyW24+PjJdLEE9MHxhcltuKzQ+PjJdLDB8KGFyW3QrND4+Ml09QSkmJmJ1KEEpLG49bis4fDAsdD04KygwfGFyW2Y+PjJdKXwwLGFyW2Y+PjJdPXQsKDB8bikhPSgwfGUpOyk7fWZ1bmN0aW9uIGRsKEEsZSxyKXtlfD0wLHJ8PTA7dmFyIGksZjt1cj0oaT11cikrMTZ8MCxmPWksQT0wfGFyWyhBfD0wKT4+Ml0sYXJbZj4+Ml09YXJbZT4+Ml0sZT0wfGNBKDQxNDQsMHxmKSxhcltmPj4yXT1hcltyPj4yXSxyPTB8Y0EoNDE1MiwwfGYpLGFBKDB8QSwwfGUsMHxyKSxpQSgwfHIpLGlBKDB8ZSksdXI9aX1mdW5jdGlvbiBrbChBLGUpe2V8PTA7dmFyIHIsaSxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wO2Y9MHxhclsodT0oQXw9MCkrNHwwKT4+Ml0sYz1uPTB8YXJbQT4+Ml0sNTM2ODcwOTExPCh0PTErKHI9Zi1uPj4zKXwwKT4+PjAmJnpsKCksbz0obD0oMHxhclsoaT1BKzh8MCk+PjJdKS1ufDApPj4yLG89bD4+Mz4+PjA8MjY4NDM1NDU1P28+Pj4wPHQ+Pj4wP3Q6bzo1MzY4NzA5MTE7ZG97aWYobyl7aWYoISg1MzY4NzA5MTE8bz4+PjApKXthPTB8aHUobzw8Myk7YnJlYWt9WnUodT0wfFgoOCksNDQ1MTkpLGFyW3U+PjJdPTE3NjYwLEkoMHx1LDQwMTYsNDI4KX1lbHNlIGE9MH13aGlsZSgwKTtpZihsPWErKG88PDMpfDAsYXJbKHQ9bj1hKyhyPDwzKXwwKT4+Ml09YXJbZT4+Ml0sbz0wfGFyW2UrND4+Ml0sbz0oYXJbYSsocjw8MykrND4+Ml09byk/KGJ1KG8pLGY9MHxhclt1Pj4yXSwwfGFyW0E+PjJdKTpjLGE9bis4fDAsKDB8ZikhPSgwfG8pKXtmb3IoO2Y9KGM9ZikrLTh8MCxhcltuKy04Pj4yXT1hcltmPj4yXSxjPWMrLTR8MCxhcltuKy00Pj4yXT1hcltjPj4yXSxhcltmPj4yXT0wLHQ9bj10Ky04fChhcltjPj4yXT0wKSwoMHxmKSE9KDB8byk7KTtvPTB8YXJbQT4+Ml0sZj0wfGFyW3U+PjJdfWlmKGFyW0E+PjJdPXQsYXJbdT4+Ml09YSxhcltpPj4yXT1sLCgwfGYpIT0oMHwodD1vKSkpZm9yKDtuPTB8YXJbZistND4+Ml0sZj1mKy04fDAsMHxuJiZkdShuKSwoMHxmKSE9KDB8dCk7KTtvJiZ2dShvKX1mdW5jdGlvbiBobChBKXt2YXIgZTsoQXw9MCkmJigwfChlPTB8YXJbQSs0Pj4yXSkmJmR1KGUpLHZ1KEEpKX1mdW5jdGlvbiB3bChBLGUpe3ZhciByPTAsaT0wLGY9MCxuPTAsdD0wLG89MCxhPTA7aWYoKGV8PTApPj4+MDw9KGY9MHxhclsobz0oQXw9MCkrOHwwKT4+Ml0pLShyPTB8YXJbKGE9QSs0fDApPj4yXSk+PjM+Pj4wKWZvcig7YXJbKG89cik+PjJdPTAscj04KygoYXJbbys0Pj4yXT0wKXxhclthPj4yXSl8MCxhclthPj4yXT1yLDAhPSgwfChlPWUrLTF8MCkpOyk7ZWxzZXs1MzY4NzA5MTE8KHI9KG49ci0oaT0wfGFyW0E+PjJdKT4+MykrZXwwKT4+PjAmJnpsKCksdD0oZj1mLWl8MCk+PjIscj1mPj4zPj4+MDwyNjg0MzU0NTU/dD4+PjA8cj4+PjA/cjp0OjUzNjg3MDkxMTtkb3tpZihyKXtpZighKDUzNjg3MDkxMTxyPj4+MCkpe2k9MHxodShyPDwzKTticmVha31adShhPTB8WCg4KSw0NDUxOSksYXJbYT4+Ml09MTc2NjAsSSgwfGEsNDAxNiw0MjgpfWVsc2UgaT0wfXdoaWxlKDApO2Zvcih0PWkrKG48PDMpfDAsbj1pKyhyPDwzKXwwLGY9cj10O2FyWyhpPXIpPj4yXT0wLGY9cj1mKzh8KGFyW2krND4+Ml09MCksMCE9KDB8KGU9ZSstMXwwKSk7KTtlPTB8YXJbQT4+Ml0scj10KygwLSgoaT0oMHxhclthPj4yXSktZXwwKT4+Myk8PDMpfDAsMDwoMHxpKSYmaGIoMHxyLDB8ZSwwfGkpLGFyW0E+PjJdPXIsYXJbYT4+Ml09ZixhcltvPj4yXT1uLGUmJnZ1KGUpfX1mdW5jdGlvbiB2bChBLGUpe0F8PTAsKGV8PTApJiYodmwoQSwwfGFyW2U+PjJdKSx2bChBLDB8YXJbZSs0Pj4yXSksMHwoQT0wfGFyW2UrMjQ+PjJdKSYmZHUoQSksdnUoZSkpfWZ1bmN0aW9uIG1sKEEsZSl7cmV0dXJuIEF8PTAsKGV8PTApJiYobWwoQSwwfGFyW2U+PjJdKSxtbChBLDB8YXJbZSs0Pj4yXSksdm9pZCB2dShlKSl9ZnVuY3Rpb24gZ2woQSl7dmFyIGUscixpLGYsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTA7aWYodXI9KGY9dXIpKzE2fDAsZT1mLCgwfChuPTB8YXJbKHI9KEF8PTApKzI4fDApPj4yXSkpIT0oMHwoaT1BKzMyfDApKSlmb3Iocz1iPWUrNHwwLHU9bjs7KXtpZihhPTB8YXJbdSsyMD4+Ml0sKGw9MD09KDB8KGM9MHxhclt1KzI0Pj4yXSkpKXx8YnUoYyksc2woZSxhKzQ4fDApLG89MHxhcltlPj4yXSwoMHwobj0wfGFyW2I+PjJdKSk9PSgwfG8pKW49bztlbHNle2Zvcig7dD1uKy04fDAsYXJbYj4+Ml09dCwoMHwobj0obj0wfGFyW24rLTQ+PjJdKT8oZHUobiksMHxhcltiPj4yXSk6dCkpIT0oMHxvKTspO249MHxhcltlPj4yXX1pZigwfG4pe2lmKCgwfG8pIT0oMHxuKSl7Zm9yKDt0PW8rLTh8MCxhcltiPj4yXT10LChvPTB8YXJbbystND4+Ml0pJiYoZHUobyksdD0wfGFyW2I+PjJdKSwoMHx0KSE9KDB8bik7KW89dDtuPTB8YXJbZT4+Ml19dnUobil9aWYobj0oYXJbYSs2OD4+Ml09MCl8YXJbKG89YSs3MnwwKT4+Ml0sKGFyW28+PjJdPTApfG4mJmR1KG4pLG49KGFyW2ErODQ+PjJdPTApfGFyWyhvPWErODh8MCk+PjJdLChhcltvPj4yXT0wKXxuJiZkdShuKSxzbChlLGErMTcyfDApLG89MHxhcltlPj4yXSwoMHwobj0wfGFyW3M+PjJdKSk9PSgwfG8pKW49bztlbHNle2Zvcig7dD1uKy04fDAsYXJbcz4+Ml09dCwoMHwobj0obj0wfGFyW24rLTQ+PjJdKT8oZHUobiksMHxhcltzPj4yXSk6dCkpIT0oMHxvKTspO249MHxhcltlPj4yXX1pZigwfG4pe2lmKCgwfG8pIT0oMHxuKSl7Zm9yKDt0PW8rLTh8MCxhcltzPj4yXT10LChvPTB8YXJbbystND4+Ml0pJiYoZHUobyksdD0wfGFyW3M+PjJdKSwoMHx0KSE9KDB8bik7KW89dDtuPTB8YXJbZT4+Ml19dnUobil9aWYobHx8ZHUoYyksbj0wfGFyW3UrND4+Ml0pZm9yKDt0PTB8YXJbbj4+Ml07KW49dDtlbHNlIGlmKG49MHxhclsodD11Kzh8MCk+PjJdLCgwfGFyW24+PjJdKSE9KDB8dSkpZm9yKDt1PTB8YXJbdD4+Ml0sbj0wfGFyWyh0PXUrOHwwKT4+Ml0sKDB8YXJbbj4+Ml0pIT0oMHx1KTspO2lmKCgwfG4pPT0oMHxpKSlicmVhazt1PW59aWYoMHwobj0wfGFyW0ErNjQ+PjJdKSYmZHUobiksMHwobj0wfGFyW0ErNTY+PjJdKSYmZHUobiksMHwobj0wfGFyWyhhPUErNDB8MCk+PjJdKSl7aWYoKDB8KHQ9MHxhclsoYz1BKzQ0fDApPj4yXSkpIT0oMHxuKSl7Zm9yKDtvPXQrLTh8MCxhcltjPj4yXT1vLCgwfCh0PSh0PTB8YXJbdCstND4+Ml0pPyhkdSh0KSwwfGFyW2M+PjJdKTpvKSkhPSgwfG4pOyk7bj0wfGFyW2E+PjJdfXZ1KG4pfXZsKHIsMHxhcltpPj4yXSksbWwoQSsxNnwwLDB8YXJbQSsyMD4+Ml0pLHVyPSgwPD0oMHx0cltBKzExPj4wXSl8fHZ1KDB8YXJbQT4+Ml0pLGYpfWZ1bmN0aW9uIFpsKEEsZSl7QXw9MDt2YXIgcj0wLGk9MCxmPTAsbj0wLHQ9MDtpZihyPTB8YXJbKGV8PTApPj4yXSl7bj0ocj0wfHF1KHIsNDE2LDQwMCwwKSk/KDB8KGY9aT0wfGFyW2UrND4+Ml0pJiZidShpKSxyPyhhcltBKzIwND4+Ml09cixyPTB8YXJbKG49QSsyMDh8MCk+PjJdLGFyW24+PjJdPWYsciYmZHUociksMCk6Zik6MCxyPTB8YXJbZT4+Ml07ZG97aWYoMHxyJiYwfCh0PTB8cXUociw0MTYsNDQwLDApKSl7aWYoaT10LDB8KGY9cj0wfGFyW2UrND4+Ml0pJiZidShyKSx0KXtpZihhcltBKzE5Nj4+Ml09aSxyPTB8YXJbKHQ9QSsyMDB8MCk+PjJdLGFyW3Q+PjJdPWYsIXIpYnJlYWs7ZHUocik7YnJlYWt9aWYoIXIpYnJlYWs7ZHUocik7YnJlYWt9fXdoaWxlKDApO24mJmR1KG4pfX1mdW5jdGlvbiBwbChBLGUpe0F8PTAsZXw9MDt2YXIgcixpLGYsbix0LG8sYT0wLGM9MCxsPTAsdT0wO2lmKHVyPShvPXVyKSszMnwwLGFyWyhuPShpPW8pKzh8MCk+PjJdPTAsYXJbKHQ9NCtufDApPj4yXT0wLCgoYXJbOCtuPj4yXT0wKXwoYT0wfGFyWyhmPUErNDB8MCk+PjJdKSkhPSgwfChyPTB8YXJbQSs0ND4+Ml0pKSl7bD1pKzR8MCx1PTgrbnwwO2Rve2M9MHxhclthPj4yXSxhcltpPj4yXT1jLEE9MHxhclthKzQ+PjJdLEE9KGFyW2w+PjJdPUEpPyhidShBKSxjPTB8YXJbaT4+Ml0pOmM7ZG97aWYoKDB8QSkhPSgwfGFyW2U+PjJdKSl7aWYoKDB8KEE9MHxhclt0Pj4yXSkpPT0oMHxhclt1Pj4yXSkpe2tsKG4saSk7YnJlYWt9YXJbQT4+Ml09YyxjPTB8YXJbbD4+Ml0sKGFyW0ErND4+Ml09YykmJihidShjKSxBPTB8YXJbdD4+Ml0pLGFyW3Q+PjJdPUErOH19d2hpbGUoMCk7MHwoQT0wfGFyW2w+PjJdKSYmZHUoQSksYT1hKzh8MH13aGlsZSgoMHxhKSE9KDB8cikpfWlmKCgwfGYpIT0oMHxuKSYmZnVuY3Rpb24oQSxlLHIpe3ZhciBpPTAsZj0wLG49MCx0PTAsbz0wLGE9MCxjPTA7aWYobz0ocnw9MCktKGV8PTApPj4zLGk9MHxhclsoYT04KyhBfD0wKXwwKT4+Ml0sbj0wfGFyW0E+PjJdLG8+Pj4wPmktKGY9bik+PjM+Pj4wKXtpZihuKXtpZigoMHwoaT0wfGFyWyh0PUErNHwwKT4+Ml0pKT09KDB8ZikpaT1uO2Vsc2V7Zm9yKG49aTtpPW4rLTh8MCxhclt0Pj4yXT1pLChuPTB8YXJbbistND4+Ml0pJiYoZHUobiksaT0wfGFyW3Q+PjJdKSwoMHxpKSE9KDB8Zik7KW49aTtpPTB8YXJbQT4+Ml19dnUoaSksYXJbYT4+Ml09MCxhclt0Pj4yXT0wLGFyW0E+PjJdPTAsaT0wfWlmKDUzNjg3MDkxMTxvPj4+MCYmemwoKSxmPWk+PjIsNTM2ODcwOTExPChmPWk+PjM+Pj4wPDI2ODQzNTQ1NT9mPj4+MDxvPj4+MD9vOmY6NTM2ODcwOTExKT4+PjAmJnpsKCksaT0wfGh1KGY8PDMpLGFyWyhuPUErNHwwKT4+Ml09aSxhcltBPj4yXT1pLGFyW2E+PjJdPWkrKGY8PDMpLCgwfGUpPT0oMHxyKSlyZXR1cm47Zm9yKDthcltpPj4yXT1hcltlPj4yXSxmPTB8YXJbZSs0Pj4yXSwwfChhcltpKzQ+PjJdPWYpJiZidShmKSxlPWUrOHwwLGk9OCsoMHxhcltuPj4yXSl8MCxhcltuPj4yXT1pLCgwfGUpIT0oMHxyKTspO3JldHVybn1pZihpPSgwfGFyWyhhPUErNHwwKT4+Ml0pLW4+PjMsQT1pPj4+MDxvPj4+MCxpPWUrKGk8PDMpfDAsKDB8KG89QT9pOnIpKT09KDB8ZSkpZT1mO2Vsc2V7Zm9yKDtuPTB8YXJbZT4+Ml0sMHwodD0wfGFyW2UrND4+Ml0pJiZidSh0KSxhcltmPj4yXT1uLG49MHxhclsoYz1mKzR8MCk+PjJdLGFyW2M+PjJdPXQsMHxuJiZkdShuKSxmPWYrOHwwLCgwfChlPWUrOHwwKSkhPSgwfG8pOyk7ZT1mfWlmKCFBKXtpZigoMHwoaT0wfGFyW2E+PjJdKSk9PSgwfGUpKXJldHVybjtmb3IoO2Y9aSstOHwwLGFyW2E+PjJdPWYsKDB8KGk9KGk9MHxhcltpKy00Pj4yXSk/KGR1KGkpLDB8YXJbYT4+Ml0pOmYpKSE9KDB8ZSk7KTtyZXR1cm59aWYoKDB8byk9PSgwfHIpKXJldHVybjtmPTB8YXJbYT4+Ml07Zm9yKDthcltmPj4yXT1hcltpPj4yXSxlPTB8YXJbaSs0Pj4yXSwwfChhcltmKzQ+PjJdPWUpJiZidShlKSxpPWkrOHwwLGY9OCsoMHxhclthPj4yXSl8MCxhclthPj4yXT1mLCgwfGkpIT0oMHxyKTspO30oZiwwfGFyW24+PjJdLDB8YXJbdD4+Ml0pLEE9MHxhcltuPj4yXSl7aWYoKDB8KGE9MHxhclt0Pj4yXSkpIT0oMHxBKSl7Zm9yKDtjPWErLTh8MCxhclt0Pj4yXT1jLCgwfChhPShhPTB8YXJbYSstND4+Ml0pPyhkdShhKSwwfGFyW3Q+PjJdKTpjKSkhPSgwfEEpOyk7QT0wfGFyW24+PjJdfXZ1KEEpLHVyPW99ZWxzZSB1cj1vfWZ1bmN0aW9uIHlsKEEsZSl7ZXw9MDt2YXIgcixpLGY9MCxuPTAsdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wO3Q9MHxhclsoYj0oQXw9MCkrNHwwKT4+Ml0scj1vPTB8YXJbQT4+Ml0sNTM2ODcwOTExPChmPShsPXQtbz4+MykrMXwwKT4+PjAmJnpsKCksYT0odT0oMHxhclsoaT1BKzh8MCk+PjJdKS1vfDApPj4yLGE9dT4+Mz4+PjA8MjY4NDM1NDU1P2E+Pj4wPGY+Pj4wP2Y6YTo1MzY4NzA5MTE7ZG97aWYoYSl7aWYoISg1MzY4NzA5MTE8YT4+PjApKXtjPTB8aHUoYTw8Myk7YnJlYWt9WnUoYj0wfFgoOCksNDQ1MTkpLGFyW2I+PjJdPTE3NjYwLEkoMHxiLDQwMTYsNDI4KX1lbHNlIGM9MH13aGlsZSgwKTtpZih1PWMrKGE8PDMpfDAsYXJbKGY9bj1jKyhsPDwzKXwwKT4+Ml09YXJbZT4+Ml0sYT1lKzR8MCxhcltjKyhsPDwzKSs0Pj4yXT1hclthPj4yXSxhcltlPj4yXT0wLGE9bis4fChhclthPj4yXT0wKSwoMHx0KSE9KDB8cikpe2Zvcig7dD0obD10KSstOHwwLGFyW24rLTg+PjJdPWFyW3Q+PjJdLGw9bCstNHwwLGFyW24rLTQ+PjJdPWFyW2w+PjJdLGFyW3Q+PjJdPTAsZj1uPWYrLTh8KGFyW2w+PjJdPTApLCgwfHQpIT0oMHxyKTspO289MHxhcltBPj4yXX1pZihhcltBPj4yXT1mLGY9MHxhcltiPj4yXSxhcltiPj4yXT1hLGFyW2k+PjJdPXUsKDB8ZikhPSgwfCh0PW8pKSlmb3IoO249MHxhcltmKy00Pj4yXSxmPWYrLTh8MCwwfG4mJmR1KG4pLCgwfGYpIT0oMHx0KTspO28mJnZ1KG8pfWZ1bmN0aW9uIEJsKEEsZSl7ZXw9MDt2YXIgcixpLGY9MCxuPTAsdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wO3Q9MHxhclsoYj0oQXw9MCkrNHwwKT4+Ml0scj1vPTB8YXJbQT4+Ml0sNTM2ODcwOTExPChmPShsPXQtbz4+MykrMXwwKT4+PjAmJnpsKCksYT0odT0oMHxhclsoaT1BKzh8MCk+PjJdKS1vfDApPj4yLGE9dT4+Mz4+PjA8MjY4NDM1NDU1P2E+Pj4wPGY+Pj4wP2Y6YTo1MzY4NzA5MTE7ZG97aWYoYSl7aWYoISg1MzY4NzA5MTE8YT4+PjApKXtjPTB8aHUoYTw8Myk7YnJlYWt9WnUoYj0wfFgoOCksNDQ1MTkpLGFyW2I+PjJdPTE3NjYwLEkoMHxiLDQwMTYsNDI4KX1lbHNlIGM9MH13aGlsZSgwKTtpZih1PWMrKGE8PDMpfDAsYXJbKGY9bj1jKyhsPDwzKXwwKT4+Ml09YXJbZT4+Ml0sYT1lKzR8MCxhcltjKyhsPDwzKSs0Pj4yXT1hclthPj4yXSxhcltlPj4yXT0wLGE9bis4fChhclthPj4yXT0wKSwoMHx0KSE9KDB8cikpe2Zvcig7dD0obD10KSstOHwwLGFyW24rLTg+PjJdPWFyW3Q+PjJdLGw9bCstNHwwLGFyW24rLTQ+PjJdPWFyW2w+PjJdLGFyW3Q+PjJdPTAsZj1uPWYrLTh8KGFyW2w+PjJdPTApLCgwfHQpIT0oMHxyKTspO289MHxhcltBPj4yXX1pZihhcltBPj4yXT1mLGY9MHxhcltiPj4yXSxhcltiPj4yXT1hLGFyW2k+PjJdPXUsKDB8ZikhPSgwfCh0PW8pKSlmb3IoO249MHxhcltmKy00Pj4yXSxmPWYrLTh8MCwwfG4mJmR1KG4pLCgwfGYpIT0oMHx0KTspO28mJnZ1KG8pfWZ1bmN0aW9uIEVsKEEpe3ZhciBlPTAscj0wLGk9MCxmPTAsbj0wO2lmKDB8KGU9MHxhclsoQXw9MCkrMjA4Pj4yXSkmJmR1KGUpLDB8KGU9MHxhcltBKzIwMD4+Ml0pJiZkdShlKSwwfChlPTB8YXJbKG49QSsxODR8MCk+PjJdKSl7aWYoKDB8KHI9MHxhclsoZj1BKzE4OHwwKT4+Ml0pKSE9KDB8ZSkpe2Zvcig7aT1yKy04fDAsYXJbZj4+Ml09aSwoMHwocj0ocj0wfGFyW3IrLTQ+PjJdKT8oZHUociksMHxhcltmPj4yXSk6aSkpIT0oMHxlKTspO2U9MHxhcltuPj4yXX12dShlKX1pZigwfChlPTB8YXJbKGY9QSsxNzJ8MCk+PjJdKSl7aWYoKDB8KHI9MHxhclsobj1BKzE3NnwwKT4+Ml0pKSE9KDB8ZSkpe2Zvcig7aT1yKy04fDAsYXJbbj4+Ml09aSwoMHwocj0ocj0wfGFyW3IrLTQ+PjJdKT8oZHUociksMHxhcltuPj4yXSk6aSkpIT0oMHxlKTspO2U9MHxhcltmPj4yXX12dShlKX1pZigoMHx0clsoZT1BKzE2MHwwKSsxMT4+MF0pPDAmJnZ1KDB8YXJbZT4+Ml0pLDB8KGU9MHxhcltBKzg4Pj4yXSkmJmR1KGUpLDB8KGU9MHxhcltBKzcyPj4yXSkmJmR1KGUpLDB8KGU9MHxhclsoZj1BKzQ4fDApPj4yXSkpe2lmKCgwfChyPTB8YXJbKG49QSs1MnwwKT4+Ml0pKSE9KDB8ZSkpe2Zvcig7aT1yKy04fDAsYXJbbj4+Ml09aSwoMHwocj0ocj0wfGFyW3IrLTQ+PjJdKT8oZHUociksMHxhcltuPj4yXSk6aSkpIT0oMHxlKTspO2U9MHxhcltmPj4yXX12dShlKX0wPD0oMHx0cltBKzExPj4wXSl8fHZ1KDB8YXJbQT4+Ml0pfWZ1bmN0aW9uIFhsKEEsZSxyLGksZixuKXtBfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTA7dmFyIHQsbyxhLGMsbCx1LGIscyxkLGssaCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTAsQj0wLEU9MCxYPTAsVz0wLEk9MCxDPTAsRz0wLFY9MCxGPTAsUj0wLE49MCxfPTAsWT0wLFE9MCxEPTAsSj0wLE09MCxUPTAsVT0wLFM9MDt1cj0oaz11cikrMjcyfDAscz1rKzk2fDAsQj1rKzIzNnwwLFU9ays3MnwwLFM9ays0OHwwLHQ9aysyNHwwLEk9aysyMjR8MCxDPShvPWspKzIwMHwwLEY9aysyMTJ8MCxHPWsrMTg4fDAsVz1rKzE3NnwwLFY9aysxNjh8MCxSPWsrMTUyfDAseT1rKzE0MHwwLGE9aysxMjh8MCxiPWsrMTE2fDAsaG8oZD1rKzI0OHwwLDB8YXJbKE49KGV8PTApKzYwfDApPj4yXSxyKSwoWj0wfGFyWyhjPWUrMzJ8MCk+PjJdKT8odj1jLGc9Wik6c3IoMzEzNTQsMzAyMDMsMTA0NywzMTM2Mik7QTpmb3IoOzspe2ZvcihtPWc7ISgoMHxhclttKzE2Pj4yXSk+Pj4wPj1yPj4+MCk7KWlmKCEobT0wfGFyW20rND4+Ml0pKWJyZWFrIEE7aWYoIShnPTB8YXJbbT4+Ml0pKXt2PW07YnJlYWt9dj1tfSgwfHYpPT0oMHxjKSYmc3IoMzEzNTQsMzAyMDMsMTA0NywzMTM2MiksKDB8YXJbdisxNj4+Ml0pPj4+MD5yPj4+MD9zcigzMTM1NCwzMDIwMywxMDQ3LDMxMzYyKToodz1jLHA9Wik7QTpmb3IoOzspe2Zvcih2PXA7ISgoMHxhclt2KzE2Pj4yXSk+Pj4wPj1yPj4+MCk7KWlmKCEodj0wfGFyW3YrND4+Ml0pKWJyZWFrIEE7aWYoIShwPTB8YXJbdj4+Ml0pKXt3PXY7YnJlYWt9dz12fSgwfHcpIT0oMHxjKSYmKDB8YXJbdysxNj4+Ml0pPj4+MDw9cj4+PjB8fCh3PWMpLHY9MHxhclt3KzIwPj4yXSwwfCh1PTB8YXJbdysyND4+Ml0pJiZidSh1KSwoRT12KXx8c3IoMzEzNTQsMzAyMDMsMTA0NywzMTM2MiksaD1zLGFyWyhofD0wKT4+Ml09MCxhcltoKzQ+PjJdPTAsYXJbaCs4Pj4yXT0wLGFyW2grMTI+PjJdPTAsdj0oYXJbaCsxNj4+Ml09MCl8dHJbKGw9MTErZHwwKT4+MF0sdz0wfGFyWyhtPTQrZHwwKT4+Ml0sTT00PT0oMHwodjw8MjQ+PjI0PDA/dzoyNTUmdikpPzB8WXUoZCwwLC0xLDMwMjk4LDQpPyh2PTB8dHJbbD4+MF0sdz0wfGFyW20+PjJdLDIyKToyNToyMjtBOmRve2lmKDIyPT0oMHxNKSl7aWYoND09KDB8KHY8PDI0Pj4yNDwwP3c6MjU1JnYpKSl7aWYoISgwfFl1KGQsMCwtMSwzMDMxOCw0KSkpe009MjU7YnJlYWt9dj0wfHRyW2w+PjBdLHc9MHxhclttPj4yXX1kb3tpZig0PT0oMHwodjw8MjQ+PjI0PDA/dzoyNTUmdikpKXtpZigwfFl1KGQsMCwtMSwzMDMwMyw0KSl7dj0wfHRyW2w+PjBdLHc9MHxhclttPj4yXTticmVha31pZihhcltVPj4yXT0wLGFyWyhnPVUrNHwwKT4+Ml09MCxtbyhTLChhcltVKzg+PjJdPTApfGFyW04+PjJdLHIsVSksdz0wfGFyWyhtPVMpKzQ+PjJdLGFyWyh2PXMpPj4yXT1hclttPj4yXSxhclt2KzQ+PjJdPXcsdz1TKzh8MCwoMHx0clsobT0odj04K3N8MCkrMTF8MCk+PjBdKTwwPyh0clthclt2Pj4yXT4+MF09MCxhclsxMitzPj4yXT0wKToodHJbdj4+MF09MCx0clttPj4wXT0wKSxDdSh2LDApLGFyW3Y+PjJdPWFyW3c+PjJdLGFyW3YrND4+Ml09YXJbdys0Pj4yXSxhclt2Kzg+PjJdPWFyW3crOD4+Ml0sMHxhcltzPj4yXSl7Uz0wfGFyWyhpPXMpKzQ+PjJdLGFyWyh3PUEpPj4yXT1hcltpPj4yXSxhclt3KzQ+PjJdPVMsYXJbKHc9QSs4fDApPj4yXT1hclt2Pj4yXSxhclt3KzQ+PjJdPWFyW3YrND4+Ml0sYXJbdys4Pj4yXT1hclt2Kzg+PjJdLGFyW3Y+PjJdPTAsYXJbdis0Pj4yXT0wLChhclt2Kzg+PjJdPTApfCh3PTB8YXJbVT4+Ml0pJiYoKDB8YXJbZz4+Ml0pIT0oMHx3KSYmKGFyW2c+PjJdPXcpLHZ1KHcpKTticmVhayBBfWlmKFdsKFMsZSxyLGksVSksSj0wfGFyWyhEPVMpKzQ+PjJdLGFyWyh3PXMpPj4yXT1hcltEPj4yXSxhclt3KzQ+PjJdPUosdz1TKzh8MCwoMHx0clttPj4wXSk8MD8odHJbYXJbdj4+Ml0+PjBdPTAsYXJbMTIrcz4+Ml09MCk6KHRyW3Y+PjBdPTAsdHJbbT4+MF09MCksQ3UodiwwKSxhclt2Pj4yXT1hclt3Pj4yXSxhclt2KzQ+PjJdPWFyW3crND4+Ml0sYXJbdis4Pj4yXT1hclt3Kzg+PjJdLDB8YXJbcz4+Ml0pe1M9MHxhclsoaT1zKSs0Pj4yXSxhclsodz1BKT4+Ml09YXJbaT4+Ml0sYXJbdys0Pj4yXT1TLGFyWyh3PUErOHwwKT4+Ml09YXJbdj4+Ml0sYXJbdys0Pj4yXT1hclt2KzQ+PjJdLGFyW3crOD4+Ml09YXJbdis4Pj4yXSxhclt2Pj4yXT0wLGFyW3YrND4+Ml09MCwoYXJbdis4Pj4yXT0wKXwodz0wfGFyW1U+PjJdKSYmKCgwfGFyW2c+PjJdKSE9KDB8dykmJihhcltnPj4yXT13KSx2dSh3KSk7YnJlYWsgQX0wfCh3PTB8YXJbVT4+Ml0pJiYoKDB8YXJbZz4+Ml0pIT0oMHx3KSYmKGFyW2c+PjJdPXcpLHZ1KHcpKSxNPTE3ODticmVhayBBfX13aGlsZSgwKTtkb3tpZig0PT0oMHwodjw8MjQ+PjI0PDA/dzoyNTUmdikpKXtpZigwfFl1KGQsMCwtMSwzMDMwOCw0KSl7dj0wfHRyW2w+PjBdLHc9MHxhclttPj4yXTticmVha31pZihJbChVLGUscixpKSx2PTB8YXJbKG09VSkrND4+Ml0sYXJbKHc9cyk+PjJdPWFyW20+PjJdLGFyW3crND4+Ml09dix2PVUrOHwwLCgwfHRyWyhtPSh3PTgrc3wwKSsxMXwwKT4+MF0pPDA/KHRyW2FyW3c+PjJdPj4wXT0wLGFyWzEyK3M+PjJdPTApOih0clt3Pj4wXT0wLHRyW20+PjBdPTApLEN1KHcsMCksYXJbdz4+Ml09YXJbdj4+Ml0sYXJbdys0Pj4yXT1hclt2KzQ+PjJdLGFyW3crOD4+Ml09YXJbdis4Pj4yXSwhKDB8YXJbcz4+Ml0pKXtNPTE3ODticmVhayBBfVU9MHxhclsoaT1zKSs0Pj4yXSxhclsoUz1BKT4+Ml09YXJbaT4+Ml0sYXJbUys0Pj4yXT1VLGFyWyhBPUErOHwwKT4+Ml09YXJbdz4+Ml0sYXJbQSs0Pj4yXT1hclt3KzQ+PjJdLGFyW0ErOD4+Ml09YXJbdys4Pj4yXSxhclt3Pj4yXT0wLGFyW3crND4+Ml09MCxhclt3Kzg+PjJdPTA7YnJlYWsgQX19d2hpbGUoMCk7aWYoND09KDB8KHY8PDI0Pj4yNDwwP3c6MjU1JnYpKSYmMD09KDB8WXUoZCwwLC0xLDMwMzEzLDQpKSl7aWYoYXJbVT4+Ml09MCxhclsoZz1VKzR8MCk+PjJdPTAsbW8oUywoYXJbVSs4Pj4yXT0wKXxhcltOPj4yXSxyLFUpLHc9MHxhclsobT1TKSs0Pj4yXSxhclsodj1zKT4+Ml09YXJbbT4+Ml0sYXJbdis0Pj4yXT13LHc9Uys4fDAsKDB8dHJbKG09KHY9OCtzfDApKzExfDApPj4wXSk8MD8odHJbYXJbdj4+Ml0+PjBdPTAsYXJbMTIrcz4+Ml09MCk6KHRyW3Y+PjBdPTAsdHJbbT4+MF09MCksQ3UodiwwKSxhclt2Pj4yXT1hclt3Pj4yXSxhclt2KzQ+PjJdPWFyW3crND4+Ml0sYXJbdis4Pj4yXT1hclt3Kzg+PjJdLDB8YXJbcz4+Ml0pe1M9MHxhclsoaT1zKSs0Pj4yXSxhclsodz1BKT4+Ml09YXJbaT4+Ml0sYXJbdys0Pj4yXT1TLGFyWyh3PUErOHwwKT4+Ml09YXJbdj4+Ml0sYXJbdys0Pj4yXT1hclt2KzQ+PjJdLGFyW3crOD4+Ml09YXJbdis4Pj4yXSxhclt2Pj4yXT0wLGFyW3YrND4+Ml09MCwoYXJbdis4Pj4yXT0wKXwodz0wfGFyW1U+PjJdKSYmKCgwfGFyW2c+PjJdKSE9KDB8dykmJihhcltnPj4yXT13KSx2dSh3KSk7YnJlYWt9aWYoQ2woUyxlLHIsaSxVKSxKPTB8YXJbKEQ9UykrND4+Ml0sYXJbKHc9cyk+PjJdPWFyW0Q+PjJdLGFyW3crND4+Ml09Six3PVMrOHwwLCgwfHRyW20+PjBdKTwwPyh0clthclt2Pj4yXT4+MF09MCxhclsxMitzPj4yXT0wKToodHJbdj4+MF09MCx0clttPj4wXT0wKSxDdSh2LDApLGFyW3Y+PjJdPWFyW3c+PjJdLGFyW3YrND4+Ml09YXJbdys0Pj4yXSxhclt2Kzg+PjJdPWFyW3crOD4+Ml0sMHxhcltzPj4yXSl7Uz0wfGFyWyhpPXMpKzQ+PjJdLGFyWyh3PUEpPj4yXT1hcltpPj4yXSxhclt3KzQ+PjJdPVMsYXJbKHc9QSs4fDApPj4yXT1hclt2Pj4yXSxhclt3KzQ+PjJdPWFyW3YrND4+Ml0sYXJbdys4Pj4yXT1hclt2Kzg+PjJdLGFyW3Y+PjJdPTAsYXJbdis0Pj4yXT0wLChhclt2Kzg+PjJdPTApfCh3PTB8YXJbVT4+Ml0pJiYoKDB8YXJbZz4+Ml0pIT0oMHx3KSYmKGFyW2c+PjJdPXcpLHZ1KHcpKTticmVha30wfCh3PTB8YXJbVT4+Ml0pJiYoKDB8YXJbZz4+Ml0pIT0oMHx3KSYmKGFyW2c+PjJdPXcpLHZ1KHcpKSxNPTE3ODticmVha31hclt5Pj4yXT0wLGFyW3krND4+Ml09MCxhclt5Kzg+PjJdPTAsb28oQSw0LDMwMDEseSksKDB8dHJbeSsxMT4+MF0pPDAmJnZ1KDB8YXJbeT4+Ml0pfX13aGlsZSgwKTtkb3tpZigyNT09KDB8TSkpe2lmKHY9MHx0cltsPj4wXSx3PTB8YXJbbT4+Ml0sND09KDB8KHY8PDI0Pj4yNDwwP3c6MjU1JnYpKT8wfFl1KGQsMCwtMSwzMDI5OCw0KT8odj0wfHRyW2w+PjBdLHc9MHxhclttPj4yXSxNPTI4KTpwPTE6TT0yOCwyOD09KDB8TSkmJihwPTQ9PSgwfCh2PDwyND4+MjQ8MD93OjI1NSZ2KSkmJihwPTA9PSgwfFl1KGQsMCwtMSwzMDMxOCw0KSkpPzQ6MCksbT0odz0wfFJsKHApKT8wfGpiWzEyNyZhclt3KzE2Pj4yXV0ocCk6MCwoMHwodj0wfGFyW2UrMTY+PjJdKSk9PSgwfCh5PWUrMjB8MCkpKWc9dztlbHNle2Rve2lmKEQ9MHxhclt2KzE2Pj4yXSx3PShKPSgwfG0pPCgwfChnPTB8amJbMTI3JmFyW0QrMTY+PjJdXShwKSkpKT9EOncsbT1KP2c6bSxnPTB8YXJbdis0Pj4yXSlmb3Iodj1nO2c9MHxhclt2Pj4yXTspdj1nO2Vsc2UgaWYoWj0wfGFyWyhnPXYrOHwwKT4+Ml0sKDB8YXJbWj4+Ml0pPT0oMHx2KSl2PVo7ZWxzZSBmb3IoO0o9MHxhcltnPj4yXSx2PTB8YXJbKGc9Sis4fDApPj4yXSwoMHxhclt2Pj4yXSkhPSgwfEopOyk7fXdoaWxlKCgwfHYpIT0oMHx5KSk7Zz13fWlmKCFnKXtpZihhcltCPj4yXT0wLGFyW0IrND4+Ml09MCxhcltCKzg+PjJdPTAsb28oQSw0LDNlMyxCKSwwPD0oMHx0cltCKzExPj4wXSkpYnJlYWs7dnUoMHxhcltCPj4yXSk7YnJlYWt9aWYoYXJbVT4+Ml09MCxhclsoWD1VKzR8MCk+PjJdPTAsbW8oUywoYXJbVSs4Pj4yXT0wKXxhcltOPj4yXSxyLFUpLHY9MHxhclsobT1TKSs0Pj4yXSxhclsodz1zKT4+Ml09YXJbbT4+Ml0sYXJbdys0Pj4yXT12LHY9Uys4fDAsKDB8dHJbKG09KHc9OCtzfDApKzExfDApPj4wXSk8MD8odHJbYXJbdz4+Ml0+PjBdPTAsYXJbMTIrcz4+Ml09MCk6KHRyW3c+PjBdPTAsdHJbbT4+MF09MCksQ3UodywwKSxhclt3Pj4yXT1hclt2Pj4yXSxhclt3KzQ+PjJdPWFyW3YrND4+Ml0sYXJbdys4Pj4yXT1hclt2Kzg+PjJdLDB8YXJbcz4+Ml0pRD0wfGFyWyhRPXMpKzQ+PjJdLGFyWyhKPUEpPj4yXT1hcltRPj4yXSxhcltKKzQ+PjJdPUQsYXJbKEo9QSs4fDApPj4yXT1hclt3Pj4yXSxhcltKKzQ+PjJdPWFyW3crND4+Ml0sYXJbSis4Pj4yXT1hclt3Kzg+PjJdLGFyW3c+PjJdPTAsYXJbdys0Pj4yXT0wLGFyW3crOD4+Ml09MCx3PTE7ZWxzZXtmc1s2MyZhcltnKzIwPj4yXV0odCxTKSxaPTB8YXJbdD4+Ml07ZG97aWYoWiltPTB8YXJbNCt0Pj4yXSx2PTB8YXJbOCt0Pj4yXSxhcltJPj4yXT0wLGFyW0krND4+Ml09MCw0Mjk0OTY3Mjc5PChnPShhcltJKzg+PjJdPTApfFZjKHYpKT4+PjAmJnB1KCksZz4+PjA8MTE/KHRyW0krMTE+PjBdPWcpPyh3PUksTT01Myk6dz1JOih3PTB8aHUoTT1nKzE2Ji0xNiksYXJbST4+Ml09dyxhcltJKzg+PjJdPS0yMTQ3NDgzNjQ4fE0sYXJbSSs0Pj4yXT1nLE09NTMpLDUzPT0oMHxNKSYmaGIoMHx3LDB8diwwfGcpLHRyW3crZz4+MF09MCxvbyhBLFosbSxJKSx3PSgoMHx0cltJKzExPj4wXSk8MCYmdnUoMHxhcltJPj4yXSksMSk7ZWxzZXtpZihKPTB8YXJbVT4+Ml0sdHNbMzEmYXJbZysyOD4+Ml1dKG8sMHxhcltTPj4yXSxKLCgwfGFyW1g+PjJdKS1KfDApLGFyW3Q+PjJdPWFyW28+PjJdLGFyWzQrdD4+Ml09YXJbbys0Pj4yXSxhcls4K3Q+PjJdPWFyW28rOD4+Ml0sMHxhclt0Pj4yXSl7aWYoaXNbNTExJmFyW2crMjQ+PjJdXSgwfGFyW1M+PjJdKSxtPTB8YXJbdD4+Ml0sZz0wfGFyWzQrdD4+Ml0sdj0wfGFyWzgrdD4+Ml0sYXJbQz4+Ml09MCxhcltDKzQ+PjJdPTAsNDI5NDk2NzI3OTwoWj0oYXJbQys4Pj4yXT0wKXxWYyh2KSk+Pj4wJiZwdSgpLFo+Pj4wPDExPyh0cltDKzExPj4wXT1aKT8odz1DLE09NjIpOnc9Qzoodz0wfGh1KE09WisxNiYtMTYpLGFyW0M+PjJdPXcsYXJbQys4Pj4yXT0tMjE0NzQ4MzY0OHxNLGFyW0MrND4+Ml09WixNPTYyKSw2Mj09KDB8TSkmJmhiKDB8dywwfHYsMHxaKSx0clt3K1o+PjBdPTAsb28oQSxtLGcsQyksMDw9KDB8dHJbQysxMT4+MF0pKXt3PTE7YnJlYWt9dnUoMHxhcltDPj4yXSksdz0xO2JyZWFrfWFyW28+PjJdPTAsbnNbMTI3JmFyW2crMzI+PjJdXShGLDB8YXJbUz4+Ml0sbyksYXJbdD4+Ml09YXJbRj4+Ml0sYXJbNCt0Pj4yXT1hcltGKzQ+PjJdLGFyWzgrdD4+Ml09YXJbRis4Pj4yXTtkb3tpZigwfGFyW3Q+PjJdKXtpZihpc1s1MTEmYXJbZysyND4+Ml1dKDB8YXJbUz4+Ml0pLG09MHxhclt0Pj4yXSxnPTB8YXJbNCt0Pj4yXSx2PTB8YXJbOCt0Pj4yXSxhcltHPj4yXT0wLGFyW0crND4+Ml09MCw0Mjk0OTY3Mjc5PChaPShhcltHKzg+PjJdPTApfFZjKHYpKT4+PjAmJnB1KCksWj4+PjA8MTE/KHRyW0crMTE+PjBdPVopPyh3PUcsTT03MSk6dz1HOih3PTB8aHUoTT1aKzE2Ji0xNiksYXJbRz4+Ml09dyxhcltHKzg+PjJdPS0yMTQ3NDgzNjQ4fE0sYXJbRys0Pj4yXT1aLE09NzEpLDcxPT0oMHxNKSYmaGIoMHx3LDB8diwwfFopLHRyW3crWj4+MF09MCxvbyhBLG0sZyxHKSwwPD0oMHx0cltHKzExPj4wXSkpe3c9MTticmVha312dSgwfGFyW0c+PjJdKSx3PTF9ZWxzZXtpZighKHc9MHxhcltvPj4yXSkpe2lmKGlzWzUxMSZhcltnKzI0Pj4yXV0oMHxhcltTPj4yXSksYXJbVz4+Ml09MCxhcltXKzQ+PjJdPTAsb28oQSw3LGFyW1crOD4+Ml09MCxXKSwwPD0oMHx0cltXKzExPj4wXSkpe3c9MTticmVha312dSgwfGFyW1c+PjJdKSx3PTE7YnJlYWt9cD0wfGFyW3c+PjJdLEo9MHxhclsoRD13KzR8MCk+PjJdLGFyW3c+PjJdPTAsYXJbRD4+Ml09MCxhcltpPj4yXT1wLHc9MHxhclsocD1pKzR8MCk+PjJdLGFyW3A+PjJdPUosMHx3JiZkdSh3KSxobCgwfGFyW28+PjJdKSxpc1s1MTEmYXJbZysyND4+Ml1dKDB8YXJbUz4+Ml0pLHc9MHxhcltFKzE5Nj4+Ml0sKEI9MD09KDB8KHk9MHxhcltFKzIwMD4+Ml0pKSl8fGJ1KHkpO2Rve2lmKDB8dyl7aWYodj0wfGFyW2k+PjJdLEJ8fChidSh5KSxidSh5KSksYXJbdis0MD4+Ml09dyx3PTB8YXJbKEo9dis0NHwwKT4+Ml0sYXJbSj4+Ml09eSwwfHcmJmR1KHcpLEIpYnJlYWs7ZHUoeSl9fXdoaWxlKDApO3Y9MHxhcltFKzIwND4+Ml0sKFo9MD09KDB8KGc9MHxhcltFKzIwOD4+Ml0pKSl8fGJ1KGcpO2Rve2lmKDB8dil7aWYodz0wfGFyW2k+PjJdLFp8fChidShnKSxidShnKSksYXJbdys0OD4+Ml09dix3PTB8YXJbKEo9dys1MnwwKT4+Ml0sYXJbSj4+Ml09ZywwfHcmJmR1KHcpLFopYnJlYWs7ZHUoZyl9fXdoaWxlKDApO0o9MHxhcltpPj4yXSxEPTB8YXJbSiszMj4+Ml0sdj0yPT0oMHwodz0wPT0oMHwodz05OT09KDB8Zik/RDpmKSk/MTp3KSk/MDozO2Rve2lmKCgwfHcpPT0oMHxEKSYmKDB8dik9PSgwfGFyW0orMzY+PjJdKSl3PTA7ZWxzZXthcltWPj4yXT0wLG1lKEYsaSx3LHYsVixhclsobT1WKzR8MCk+PjJdPTApLHc9MHxhcltGPj4yXSxKPTB8YXJbKHY9Ris0fDApPj4yXSxhcltGPj4yXT0wLGFyW3Y+PjJdPTAsYXJbaT4+Ml09dyx3PTB8YXJbcD4+Ml0sYXJbcD4+Ml09Sjtkb3tpZigwfHcpe2lmKGR1KHcpLCEodz0wfGFyW3Y+PjJdKSlicmVhaztkdSh3KX19d2hpbGUoMCk7aWYoMHwodz0wfGFyW20+PjJdKSYmZHUodyksMHxhcltpPj4yXSl7dz0wO2JyZWFrfWlmKGFyW1I+PjJdPTAsYXJbUis0Pj4yXT0wLGFyW1IrOD4+Ml09MCxvbyhBLDQsMzAwMyxSKSwwPD0oMHx0cltSKzExPj4wXSkpe3c9MTticmVha312dSgwfGFyW1I+PjJdKSx3PTF9fXdoaWxlKDApO2lmKFp8fGR1KGcpLEIpYnJlYWs7ZHUoeSl9fXdoaWxlKDApfX13aGlsZSgwKX0wfCh2PTB8YXJbVT4+Ml0pJiYoKDB8YXJbWD4+Ml0pIT0oMHx2KSYmKGFyW1g+PjJdPXYpLHZ1KHYpKSx3fHwoTT0xNzgpfX13aGlsZSgwKTtkb3tpZigxNzg9PSgwfE0pKXtpZigwPT0oMHxuKXx8MD09KDB8dHJbbisxPj4wXSkpe2FyW1U+PjJdPTAsYXJbKEo9VSs0fDApPj4yXT0wLHc9KGFyW1UrOD4+Ml09MCl8YXJbTj4+Ml0sdj0wfGFyW3crNDQ+PjJdLChEPTA9PSgwfChRPTB8YXJbdys0OD4+Ml0pKSl8fChidShRKSx3PTB8YXJbTj4+Ml0pLGFyW1M+PjJdPWFyW3crNTI+PjJdLFk9Uys0fDAsdz0wfGFyW3crNTY+PjJdLDB8KGFyW1k+PjJdPXcpJiZidSh3KSxIdCh0LHYscixTLFUpLHc9MHxhclsoXz10KSs0Pj4yXSxhclsoTj1zKT4+Ml09YXJbXz4+Ml0sYXJbTis0Pj4yXT13LHc9OCt0fDAsKDB8dHJbKF89KE49OCtzfDApKzExfDApPj4wXSk8MD8odHJbYXJbTj4+Ml0+PjBdPTAsYXJbMTIrcz4+Ml09MCk6KHRyW04+PjBdPTAsdHJbXz4+MF09MCksQ3UoTiwwKSxhcltOPj4yXT1hclt3Pj4yXSxhcltOKzQ+PjJdPWFyW3crND4+Ml0sYXJbTis4Pj4yXT1hclt3Kzg+PjJdLHc9MHxhcltVPj4yXSxYPTB8YXJbSj4+Ml07QTpkb3tpZigoMHx3KSE9KDB8WCkpe1c9MTErYXwwLEc9MTIrc3wwLGY9aSs0fDAsVj1BKzh8MCxGPTgrdHwwLFI9ST00K3R8MCxuPUM9bys4fDA7ZTpmb3IoOzspe3Y9MHxhclsoWj13KzR8MCk+PjJdO3I6ZG97aWYodil7aWYobT0wfHF1KHYsMTI4LDgwOCwwKSl7KHY9MHxhclt3Kzg+PjJdKT9idSh2KTp2PTAsYXJbdD4+Ml09MCxvbChvLChhcltSPj4yXT0wKXxhcltpPj4yXSwwfGFyW20rNTY+PjJdLHQpLEI9MHxhclsoeT1vKSs0Pj4yXSxhclsoRT1zKT4+Ml09YXJbeT4+Ml0sYXJbRSs0Pj4yXT1CLCgwfHRyW18+PjBdKTwwPyh0clthcltOPj4yXT4+MF09MCxhcltHPj4yXT0wKToodHJbTj4+MF09MCx0cltfPj4wXT0wKSxDdShOLDApLGFyW04+PjJdPWFyW24+PjJdLGFyW04rND4+Ml09YXJbbis0Pj4yXSxhcltOKzg+PjJdPWFyW24rOD4+Ml07ZG97aWYoMHxhcltzPj4yXSlFPTB8YXJbKEI9cykrND4+Ml0sYXJbKG09QSk+PjJdPWFyW0I+PjJdLGFyW20rND4+Ml09RSxhcltWPj4yXT1hcltOPj4yXSxhcltWKzQ+PjJdPWFyW04rND4+Ml0sYXJbVis4Pj4yXT1hcltOKzg+PjJdLGFyW04+PjJdPTAsYXJbTis0Pj4yXT0wLGFyW04rOD4+Ml09MCxtPTE7ZWxzZXtpZihtPTB8YXJbdD4+Ml0sMHwoZz0wfGFyW1I+PjJdKSYmYnUoZyksYXJbaT4+Ml09bSxtPTB8YXJbZj4+Ml0sYXJbZj4+Ml09ZywhbSl7bT0wO2JyZWFrfWR1KG0pLG09MH19d2hpbGUoMCk7aWYoMHwoZz0wfGFyW1I+PjJdKSYmZHUoZyksbSl7bT0xO2JyZWFrfUU9dn1lbHNlIEU9MDtpZih2PTB8YXJbWj4+Ml0pe209MHxxdSh2LDEyOCw3NzYsMCk7ZG97aWYobSl7aWYoKHY9MHxhclt3Kzg+PjJdKT9idSh2KTp2PTAsYWwodCwwfGFyW2k+PjJdLDE9PSgwfHRyW20rNTY+PjBdKSksQj0wfGFyWyh5PXQpKzQ+PjJdLGFyWyhNPXMpPj4yXT1hclt5Pj4yXSxhcltNKzQ+PjJdPUIsKDB8dHJbXz4+MF0pPDA/KHRyW2FyW04+PjJdPj4wXT0wLGFyW0c+PjJdPTApOih0cltOPj4wXT0wLHRyW18+PjBdPTApLEN1KE4sMCksYXJbTj4+Ml09YXJbRj4+Ml0sYXJbTis0Pj4yXT1hcltGKzQ+PjJdLGFyW04rOD4+Ml09YXJbRis4Pj4yXSwhKDB8YXJbcz4+Ml0pKXtCPXY7YnJlYWt9Zz0wfGFyWyhNPXMpKzQ+PjJdLGFyWyhtPUEpPj4yXT1hcltNPj4yXSxhclttKzQ+PjJdPWcsYXJbVj4+Ml09YXJbTj4+Ml0sYXJbVis0Pj4yXT1hcltOKzQ+PjJdLGFyW1YrOD4+Ml09YXJbTis4Pj4yXSxhcltOPj4yXT0wLGFyW04rND4+Ml09MCxhcltOKzg+PjJdPTAsbT0xLGc9dix2PUUsTT0yNDE7YnJlYWsgcn1CPTB9d2hpbGUoMCk7aWYoISh2PTB8YXJbWj4+Ml0pKXtaPTAsZz1CLHY9RSxNPTIzODticmVha31pZighKG09MHxxdSh2LDEyOCw3NDQsMCkpKXtaPTAsZz1CLHY9RSxNPTIzODticmVha31pZigodj0wfGFyW3crOD4+Ml0pP2J1KHYpOnY9MCx5PTB8YXJbaT4+Ml0sZz0wfGFyW3krMjQ+PjJdLHk9MHxhclt5KzI4Pj4yXSwoMHxnKTw9LTEpe009MjIwO2JyZWFrIGV9aWYoKDB8eSk8PS0xKXtNPTIyMjticmVhayBlfWlmKHA9MHxLdChtLGcpLE09MHxxdChtLGcpLFo9MHwkdChtLHkpLCgwfChnPSgwfE0pPCgwfGcpP006ZystMXwwKSk8KDB8KHA9MDwoMHxwKT9wOjApKXwoMHwobT0oMHwobT0wfEFvKG0seSkpKTwoMHx5KT9tOnkrLTF8MCkpPCgwfChaPTA8KDB8Wik/WjowKSkpe2lmKGFyW2E+PjJdPTAsYXJbNCthPj4yXT0wLGFyWzgrYT4+Ml09MCxvbyhBLDIsMTIwLGEpLDA8PSgwfHRyW1c+PjBdKSl7bT0xLFo9dixnPUIsdj1FLE09MjM5O2JyZWFrfXZ1KDB8YXJbYT4+Ml0pLG09MSxaPXYsZz1CLHY9RSxNPTIzOTticmVha31hclt0Pj4yXT0wLGNsKG8sKGFyW0k+PjJdPTApfGFyW2k+PjJdLHAsZyxaLG0sdCkseT0wfGFyWyhwPW8pKzQ+PjJdLGFyWyhNPXMpPj4yXT1hcltwPj4yXSxhcltNKzQ+PjJdPXksKDB8dHJbXz4+MF0pPDA/KHRyW2FyW04+PjJdPj4wXT0wLGFyW0c+PjJdPTApOih0cltOPj4wXT0wLHRyW18+PjBdPTApLEN1KE4sMCksYXJbTj4+Ml09YXJbQz4+Ml0sYXJbTis0Pj4yXT1hcltDKzQ+PjJdLGFyW04rOD4+Ml09YXJbQys4Pj4yXTtkb3tpZigwfGFyW3M+PjJdKU09MHxhclsoeT1zKSs0Pj4yXSxhclsobT1BKT4+Ml09YXJbeT4+Ml0sYXJbbSs0Pj4yXT1NLGFyW1Y+PjJdPWFyW04+PjJdLGFyW1YrND4+Ml09YXJbTis0Pj4yXSxhcltWKzg+PjJdPWFyW04rOD4+Ml0sYXJbTj4+Ml09MCxhcltOKzQ+PjJdPTAsYXJbTis4Pj4yXT0wLG09MTtlbHNle2lmKG09MHxhclt0Pj4yXSwwfChnPTB8YXJbST4+Ml0pJiZidShnKSxhcltpPj4yXT1tLG09MHxhcltmPj4yXSxhcltmPj4yXT1nLCFtKXttPTA7YnJlYWt9ZHUobSksbT0wfX13aGlsZSgwKTswfChnPTB8YXJbST4+Ml0pJiZkdShnKSxNPW0/KG09MSxaPXYsZz1CLHY9RSwyMzkpOihaPXYsZz1CLHY9RSwyMzgpfWVsc2UgZz1aPTAsdj1FLE09MjM4fWVsc2Ugdj1nPVo9MCxNPTIzOH13aGlsZSgwKTtpZigyMzg9PSgwfE0pJiYobT0wLE09MjM5KSwyMzk9PSgwfE0pJiYoTT0oWiYmZHUoWiksMjQxKSksMjQxPT0oMHxNKSYmKE09MCxnJiZkdShnKSksMHx2JiZkdSh2KSx3PXcrMTJ8MCwwfG0pe1Q9bTticmVhayBBfWlmKCgwfHcpPT0oMHxYKSl7VD0yO2JyZWFrIEF9fTIyMD09KDB8TSk/c3IoMzEzODIsMzAyMDMsMTIyMSwzMTM2Mik6MjIyPT0oMHxNKSYmc3IoMzEzOTcsMzAyMDMsMTIyMiwzMTM2Mil9ZWxzZSBUPTJ9d2hpbGUoMCk7aWYoMHwodz0wfGFyW1k+PjJdKSYmZHUodyksRHx8ZHUoUSksMHwodz0wfGFyW1U+PjJdKSl7aWYoKDB8KHY9MHxhcltKPj4yXSkpIT0oMHx3KSl7Zm9yKDttPXYrLTEyfDAsYXJbSj4+Ml09bSwoMHwodj0odj0wfGFyW3YrLTQ+PjJdKT8oZHUodiksMHxhcltKPj4yXSk6bSkpIT0oMHx3KTspO3c9MHxhcltVPj4yXX12dSh3KX1pZigyIT0oMnxUKSlicmVha31pZigwfChtPTB8YXJbYz4+Ml0pKXt3PWMsZz1tO0E6Zm9yKDs7KXtmb3Iodj1nOyEoKDB8YXJbdisxNj4+Ml0pPj4+MD49cj4+PjApOylpZighKHY9MHxhclt2KzQ+PjJdKSlicmVhayBBO2lmKCEoZz0wfGFyW3Y+PjJdKSl7dz12O2JyZWFrfXc9dn1pZigoMHx3KSE9KDB8YykmJigwfGFyW3crMTY+PjJdKT4+PjA8PXI+Pj4wKXt3PWM7QTpmb3IoOzspe2Zvcih2PW07ISgoMHxhclt2KzE2Pj4yXSk+Pj4wPj1yPj4+MCk7KWlmKCEodj0wfGFyW3YrND4+Ml0pKWJyZWFrIEE7aWYoIShtPTB8YXJbdj4+Ml0pKXt3PXY7YnJlYWt9dz12fWlmKCgwfHcpIT0oMHxjKSYmKDB8YXJbdysxNj4+Ml0pPj4+MDw9cj4+PjB8fCh3PWMpLHY9MHxhclt3KzIwPj4yXSwoeT0wPT0oMHwocD0wfGFyW3crMjQ+PjJdKSkpfHxidShwKSx3PTB8YXJbdis2OD4+Ml0sKFo9MD09KDB8KGc9MHxhclt2KzcyPj4yXSkpKXx8YnUoZyksdyl7YXJbVT4+Ml09MCxYbChTLGUsKGFyWyhtPVUrNHwwKT4+Ml09MCl8YXJbdysyMD4+Ml0sVSw5OSwwKTtBOmRve2lmKDB8YXJbUz4+Ml0pdz0wfGFyWyhpPVMpKzQ+PjJdLGFyWyhVPUEpPj4yXT1hcltpPj4yXSxhcltVKzQ+PjJdPXcsdz1TKzh8MCxhclsoVT1BKzh8MCk+PjJdPWFyW3c+PjJdLGFyW1UrND4+Ml09YXJbdys0Pj4yXSxhcltVKzg+PjJdPWFyW3crOD4+Ml0sYXJbdz4+Ml09MCxhclt3KzQ+PjJdPTAsYXJbdys4Pj4yXT0wLHc9MTtlbHNle3N3aXRjaCgwfGFyWzMyKygwfGFyW1U+PjJdKT4+Ml0pe2Nhc2UgMjpjYXNlIDA6dz0wO2JyZWFrO2Nhc2UgMTp3PTM7YnJlYWs7ZGVmYXVsdDppZihhcltiPj4yXT0wLGFyWzQrYj4+Ml09MCxhcls4K2I+PjJdPTAsb28oQSwyLDMwMDMsYiksMDw9KDB8dHJbMTErYj4+MF0pKXt3PTE7YnJlYWsgQX12dSgwfGFyW2I+PjJdKSx3PTE7YnJlYWsgQX1fbygwfGFyW2k+PjJdLFUsdyw2KSx3PTB9fXdoaWxlKDApOygwfHRyWyh2PVMrOHwwKSsxMT4+MF0pPDAmJnZ1KDB8YXJbdj4+Ml0pLDB8KHY9MHxhclttPj4yXSkmJmR1KHYpLHd8fChNPTI4OSl9ZWxzZSBNPTI4OTtpZigyODk9PSgwfE0pJiYodz0wKSxafHxkdShnKSx5fHxkdShwKSwwfHcpYnJlYWt9fVU9MHxhclsoaT01NjU5MikrND4+Ml0sYXJbKFM9QSk+PjJdPWFyW2k+PjJdLGFyW1MrND4+Ml09VSx5dShBKzh8MCw1NjYwMCl9fXdoaWxlKDApOygwfHRyWyh3PTgrc3wwKSsxMT4+MF0pPDAmJnZ1KDB8YXJbdz4+Ml0pLDB8dSYmZHUodSksdXI9KDA8PSgwfHRyW2w+PjBdKXx8dnUoMHxhcltkPj4yXSksayl9ZnVuY3Rpb24gV2woQSxlLHIsaSxmKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTA7dmFyIG4sdCxvLGEsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTAsQj0wLEU9MCxYPTAsVz0wLEk9MCxDPTAsRz0wLFY9MCxGPTAsUj0wLE49MCxfPTAsWT0wLFE9MCxEPTAsSj0wLE09MCxUPTAsVT0wO2lmKHVyPShhPXVyKSs0ODB8MCxKPWErMjR8MCxzPShvPWEpKzQ2MHwwLGM9YSs0MzZ8MCxaPWErMjgwfDAsaz1hKzQyNHwwLHY9YSsyNjR8MCx0PWErMjU2fDAscD1hKzk2fDAseT1hKzI0MHwwLEI9YSs4MHwwLEU9YSs2OHwwLFE9YSs1NnwwLG49YSs0OHwwLGFyWyhnPWErNDQ4fDApPj4yXT0wLGFyW2crND4+Ml09MCxhcltnKzg+PjJdPTAsZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MDt2YXIgaSxmPTAsbj0wLHQ9MCxvPTA7aWYodXI9KGk9dXIpKzMyfDAsdD1pKzEyfDAsbz1pLG49MHxhclsocnw9MCk+PjJdLChyPSgwfGFyW3IrND4+Ml0pLW58MCk+Pj4wPDgpe2ZvcihyPTB8aHUoMzIpLGFyW3Q+PjJdPXIsYXJbdCs4Pj4yXT0tMjE0NzQ4MzYxNixuPTMwMDMzLGU9KGY9cikrKGFyW3QrND4+Ml09MjUpfDA7dHJbZj4+MF09MHx0cltuPj4wXSxuPW4rMXwwLCgwfChmPWYrMXwwKSk8KDB8ZSk7KTtyZXR1cm4odHJbcisyNT4+MF09MCxvbyhBLDIsMTE4LHQpLDA8PSgwfHRyW3QrMTE+PjBdKSk/dXI9aToodnUoMHxhclt0Pj4yXSksdXI9aSl9dD0wPT0oMSZ0cltuKzE+PjBdKSxvcltlPj4xXT0xKygwfGNyW24rMj4+MF0pLG9yW2UrMj4+MV09MSsoMHxjcltuKzM+PjBdKTtkb3tpZighdCl7aWYoMTI8PXI+Pj4wKXthcltlKzQ+PjJdPWNyW24rNT4+MF08PDE2fGNyW24rND4+MF08PDI0fGNyW24rNj4+MF08PDh8Y3Jbbis3Pj4wXSxyPTExLGY9Y3Jbbis5Pj4wXTw8MTZ8Y3Jbbis4Pj4wXTw8MjR8Y3JbbisxMD4+MF08PDg7YnJlYWt9Zm9yKHI9MHxodSgzMiksYXJbbz4+Ml09cixhcltvKzg+PjJdPS0yMTQ3NDgzNjE2LG49MzAwNTksZT0oZj1yKSsoYXJbbys0Pj4yXT0yNil8MDt0cltmPj4wXT0wfHRyW24+PjBdLG49bisxfDAsKDB8KGY9ZisxfDApKTwoMHxlKTspO3JldHVybih0cltyKzI2Pj4wXT0wLG9vKEEsMiwxMTgsbyksMDw9KDB8dHJbbysxMT4+MF0pKT91cj1pOih2dSgwfGFyW28+PjJdKSx1cj1pKX1hcltlKzQ+PjJdPWNyW24rND4+MF08PDh8Y3Jbbis1Pj4wXSxyPTcsZj1jcltuKzY+PjBdPDw4fXdoaWxlKDApO2FyW2UrOD4+Ml09Y3JbbityPj4wXXxmLHQ9MHxhclsoZT01NjU5MikrND4+Ml0sYXJbKG89QSk+PjJdPWFyW2U+PjJdLGFyW28rND4+Ml09dCx5dShBKzh8MCw1NjYwMCksdXI9aX0obyxnLGYpLDB8YXJbbz4+Ml0pVT0wfGFyWyhNPW8pKzQ+PjJdLGFyWyhUPUEpPj4yXT1hcltNPj4yXSxhcltUKzQ+PjJdPVUsVT1vKzh8MCxhclsoVD1BKzh8MCk+PjJdPWFyW1U+PjJdLGFyW1QrND4+Ml09YXJbVSs0Pj4yXSxhcltUKzg+PjJdPWFyW1UrOD4+Ml0sYXJbVT4+Ml09MCxhcltVKzQ+PjJdPTAsYXJbVSs4Pj4yXT0wO2Vsc2V7aWYoVD0wfGFyWyh3PWUrNjB8MCk+PjJdLGY9MHxhcltUKzc2Pj4yXSwoVT0wPT0oMHwoVD0wfGFyW1QrODA+PjJdKSkpfHxidShUKSxmKXtmbyhjLGYsciwxNjg0NjMwODg3KSxmPTB8YXJbKE09Yys0fDApPj4yXSx1PWw9MHxhcltjPj4yXSxoPWYsMjU3PD0oNjU1MzUmKEc9MHxvcltnPj4xXSkpJiZzcigzMTY3OCwzMDIwMywxMzMsMzE2OTIpLDI1Nzw9KDY1NTM1JihzPTB8b3JbZysyPj4xXSkpJiZzcigzMTcwMSwzMDIwMywxMzksMzE3MTgpLGQ9MHxicihZPTY1NTM1JnMsXz02NTUzNSZHKTtBOmRve2lmKChmLWw+PjJ8MCk9PSgwfGQpKXtlOmRve2lmKCgwfHUpIT0oMHxoKSl7ZD0wfGFyW2UrMjg+PjJdLGs9ZSszMnwwO3I6ZG97aWYoKDB8ZCk9PSgwfGspKXM9MHxhclt1Pj4yXTtlbHNlIGZvcihiPXU7Oyl7Zm9yKHM9MHxhcltiPj4yXSx1PWQ7KDB8YXJbdSsxNj4+Ml0pIT0oMHxzKTspe2lmKGY9MHxhclt1KzQ+PjJdKWZvcig7bD0wfGFyW2Y+PjJdOylmPWw7ZWxzZSBpZihmPTB8YXJbKGw9dSs4fDApPj4yXSwoMHxhcltmPj4yXSkhPSgwfHUpKWZvcig7Tj0wfGFyW2w+PjJdLGY9MHxhclsobD1OKzh8MCk+PjJdLCgwfGFyW2Y+PjJdKSE9KDB8Tik7KTtpZigoMHxmKT09KDB8aykpYnJlYWsgcjt1PWZ9aWYoKDB8KGI9Yis0fDApKT09KDB8aCkpYnJlYWsgZX19d2hpbGUoMCk7bD1aKzY0fDAsYXJbKGI9Wis4fDApPj4yXT00NTI0LHU9WisxMnwwLGFyW1o+PjJdPTE4OCxhcltsPj4yXT0yMDgsSmYoWis2NHwoYXJbWis0Pj4yXT0wKSx1KSxhcltaKzEzNj4+Ml09MCxhcltaKzE0MD4+Ml09LTEsYXJbWj4+Ml09NDUwNCxhcltsPj4yXT00NTQ0LGFyW2I+PjJdPTQ1MjQsU2YodSksYXJbdT4+Ml09NDM0MCxhclsoYj1aKzQ0fDApPj4yXT0wLGFyW2IrND4+Ml09MCxhcltiKzg+PjJdPTAsYXJbYisxMj4+Ml09MCxhcltaKzYwPj4yXT0yNCxhcltKPj4yXT0wLGFyW0orND4+Ml09MCxhcltKKzg+PjJdPTAsWGUodSxKKSwoMHx0cltKKzExPj4wXSk8MCYmdnUoMHxhcltKPj4yXSksV2UoMHxMZigwfFdlKGY9Wis4fDAsMzE3ODksMTQpLHMpLDMxODA0LDIzKSxJZSh2LHUpLG9vKEEsMiwxMTksdiksKDB8dHJbdisxMT4+MF0pPDAmJnZ1KDB8YXJbdj4+Ml0pLGFyW1o+PjJdPTQ1MDQsYXJbbD4+Ml09NDU0NCxhcltmPj4yXT00NTI0LGFyW3U+PjJdPTQzNDAsKDB8dHJbYisxMT4+MF0pPDAmJnZ1KDB8YXJbYj4+Ml0pLGtmKHUpLGJmKGwpO2JyZWFrIEF9fXdoaWxlKDApO2Y9MHxhclt3Pj4yXSxhcltaPj4yXT1hcltmKzUyPj4yXSxOPVorNHwwLGw9MHxhcltmKzU2Pj4yXSwoYXJbTj4+Ml09bCkmJihidShsKSxmPTB8YXJbdz4+Ml0pLGw9MHxhcltmKzQ0Pj4yXSwoUj0wPT0oMHwoRj0wfGFyW2YrNDg+PjJdKSkpfHxidShGKSxMdCh0LGwscixaLDE4ODU5NjAyOTcpLFY9MCE9KDB8KGY9MHxhclt0Pj4yXSkpJiYwIT0oMHwobT0wfHF1KGYsMTI4LDM1MiwwKSkpPyhmPTB8YXJbNCt0Pj4yXSk/KGJ1KGYpLGQ9bSxmKTooZD1tLDApOmQ9MCxoPTB8YXJbZys0Pj4yXSxrPTB8YXJbZys4Pj4yXSwoMHxhcltjPj4yXSk9PSgwfGFyW00+PjJdKSYmc3IoMzE4MjgsMzAyMDMsMTM1OSwzMTg1NCkscz1lKzcyfDA7ZTpkb3tpZihoPj4+MDwoMHxhcltzPj4yXSk+Pj4wJiZrPj4+MDwoMHxhcltlKzc2Pj4yXSk+Pj4wKXt1PTB8aHUoODApLGFyW3UrND4+Ml09MCxhclt1Kzg+PjJdPTAsYXJbdT4+Ml09NjIwOCxhclsoZj11KzEyfDApPj4yXT0wLGFyW2YrND4+Ml09MCxhcltmKzg+PjJdPTAsYXJbZisxMj4+Ml09MCxhcltmKzE2Pj4yXT0wLGFyW3UrMzI+PjJdPTMwMDI1LGFyW3UrMzY+PjJdPTAsYXJbdSs0MD4+Ml09MCxhclt1KzQ0Pj4yXT05OSxhclt1KzQ4Pj4yXT05OSxzPXUrNTJ8MCxhclsoYj11KzcyfDApPj4yXT0wLGFyW3UrNzY+PjJdPTAsYXJbcz4+Ml09MCxhcltzKzQ+PjJdPTAsYXJbcys4Pj4yXT0wLGFyW3MrMTI+PjJdPTAsYXJbdSs2OD4+Ml09YixiPWYsQz0ocz11KSsxNnwwLGJ1KHUpLHN1KHUpLGw9MHxhcltDPj4yXSxhcltmPj4yXT1iLGFyW0M+PjJdPXMsMHxsJiZrdShsKSxkdSh1KSxhcltpPj4yXT1iLGw9MHxhclsoQz1pKzR8MCk+PjJdLGFyW0M+PjJdPXMsbD8oZHUobCksZj0wfGFyWyhiPWkpPj4yXSk6Yj1pLHlvKGYsaCxrLDEsMyksdT0wIT0oMHxkKTtkb3tpZih1KXtpZihmPTB8YXJbZCs1Nj4+Ml0sMTw9KCgwfGFyW2QrNjA+PjJdKS1mfDApKXtsPTB8Y3JbZj4+MF07YnJlYWt9Zm9yKGFyW0I+PjJdPTAsYXJbQis0Pj4yXT0wLGY9KGFyW0IrOD4+Ml09MCl8aHUoNDgpLGFyW0I+PjJdPWYsYXJbQis4Pj4yXT0tMjE0NzQ4MzYwMCx1PTMxODc3LGI9KGw9ZikrKGFyW0IrND4+Ml09MzcpfDA7dHJbbD4+MF09MHx0clt1Pj4wXSx1PXUrMXwwLCgwfChsPWwrMXwwKSk8KDB8Yik7KTtpZih0cltmKzM3Pj4wXT0wLG9vKEEsMiwxMzAsQiksMDw9KDB8dHJbQisxMT4+MF0pKWJyZWFrIGU7dnUoMHxhcltCPj4yXSk7YnJlYWsgZX1sPTh9d2hpbGUoMCk7Qm8oMHxhcltiPj4yXSwzLGgsayxsKTtkb3tpZih1KXtpZihmPUk9MHxhcltkKzU2Pj4yXSwzIT0oKDB8YXJbZCs2MD4+Ml0pLUl8MCkpYnJlYWs7aWYoKDB8Y3JbZisxPj4wXSk9PSgwfGwpJiYoMHxjcltmKzI+PjBdKT09KDB8bCkpYnJlYWs7Zm9yKGFyW0U+PjJdPTAsYXJbRSs0Pj4yXT0wLGY9KGFyW0UrOD4+Ml09MCl8aHUoNjQpLGFyW0U+PjJdPWYsYXJbRSs4Pj4yXT0tMjE0NzQ4MzU4NCx1PTMxOTE1LGI9KGw9ZikrKGFyW0UrND4+Ml09NTEpfDA7dHJbbD4+MF09MHx0clt1Pj4wXSx1PXUrMXwwLCgwfChsPWwrMXwwKSk8KDB8Yik7KTtpZih0cltmKzUxPj4wXT0wLG9vKEEsMiwxMzAsRSksMDw9KDB8dHJbRSsxMT4+MF0pKWJyZWFrIGU7dnUoMHxhcltFPj4yXSk7YnJlYWsgZX19d2hpbGUoMCk7Qm8oMHxhcltiPj4yXSw0LGgsayxsKSxCbygwfGFyW2I+PjJdLDUsaCxrLGwpLFo9ZSszMnwwLHA9NCtufDAsQj0oeT1KKzh8MCkrMTF8MCxFPUErOHwwLFg9USs4fDAsVz1RKzR8MCxJPVErMTF8MDtyOmRve2lmKEc8PDE2Pj4xNil7Zz1mPW09MDtpOmZvcig7Oyl7Zm9yKHY9dz1yPTA7ISgoMHxZKTw9KDB8cikpOyl7aWYoZD0wfGFyWygwfGFyW2M+PjJdKSsoZjw8Mik+PjJdLCEodT0wfGFyW1o+PjJdKSlicmVhayBpO2w9WjtmOmZvcig7Oyl7Zm9yKGI9dTshKCgwfGFyW2IrMTY+PjJdKT4+PjA+PWQ+Pj4wKTspe2lmKCEodT0wfGFyW2IrND4+Ml0pKWJyZWFrIGY7Yj11fWlmKCEodT0wfGFyW2I+PjJdKSl7bD1iO2JyZWFrfWw9Yn1pZigoMHxsKT09KDB8WikpYnJlYWsgaTtpZihkPj4+MDwoMHxhcltsKzE2Pj4yXSk+Pj4wKWJyZWFrIGk7dT0wfGFyW2wrMjA+PjJdLChoPTA9PSgwfChrPTB8YXJbbCsyND4+Ml0pKSl8fGJ1KGspLHM9MHxhclt1KzI0Pj4yXSxiPTB8YXJbdSsyOD4+Ml0sYXJbbj4+Ml09YXJbaT4+Ml0sbD0wfGFyW0M+PjJdLChhcltwPj4yXT1sKT8oYnUobCksR2woSixlLGQsbix2LGcpLGR1KGwpKTpHbChKLGUsZCxuLHYsZyk7ZG97aWYoMHxhcltKPj4yXSl1PTB8YXJbKGw9SikrND4+Ml0sYXJbKGI9QSk+PjJdPWFyW2w+PjJdLGFyW2IrND4+Ml09dSxhcltFPj4yXT1hclt5Pj4yXSxhcltFKzQ+PjJdPWFyW3krND4+Ml0sYXJbRSs4Pj4yXT1hclt5Kzg+PjJdLGFyW3k+PjJdPTAsYXJbeSs0Pj4yXT0wLGFyW3krOD4+Ml09MCxiPXcsdT12LGw9MTtlbHNle2lmKGw9cyt2fDAsZj1mKzF8MCwwPD0oMHx0cltCPj4wXSkpe3U9bCxsPTA7YnJlYWt9dnUoMHxhclt5Pj4yXSksdT1sLGw9MH19d2hpbGUoMCk7aWYoaHx8ZHUoayksbClicmVhayBlO3I9cisxfDAsdz1iLHY9dX1pZigoMHxfKTw9KDB8KG09bSsxfDApKSlicmVhayByO2c9dytnfDB9Zm9yKGFyW1E+PjJdPTAsYXJbUSs0Pj4yXT0wLGY9KGFyW1ErOD4+Ml09MCl8aHUoNDgpLGFyW1E+PjJdPWYsYXJbWD4+Ml09LTIxNDc0ODM2MDAsdT0zMTk2NyxiPShsPWYpKyhhcltXPj4yXT0zMil8MDt0cltsPj4wXT0wfHRyW3U+PjBdLHU9dSsxfDAsKDB8KGw9bCsxfDApKTwoMHxiKTspO2lmKHRyW2YrMzI+PjBdPTAsb28oQSwyLDExOSxRKSwwPD0oMHx0cltJPj4wXSkpYnJlYWsgZTt2dSgwfGFyW1E+PjJdKTticmVhayBlfX13aGlsZSgwKTtKPTB8YXJbKFE9NTY1OTIpKzQ+PjJdLGFyW0E+PjJdPWFyW1E+PjJdLGFyW0ErND4+Ml09Six5dShFLDU2NjAwKX1lbHNlIEQ9NTF9d2hpbGUoMCk7NTE9PSgwfEQpJiYobD1wKzY0fDAsYXJbKGI9cCs4fDApPj4yXT00NTI0LHU9cCsxMnwwLGFyW3A+PjJdPTE4OCxhcltsPj4yXT0yMDgsSmYocCs2NHwoYXJbcCs0Pj4yXT0wKSx1KSxhcltwKzEzNj4+Ml09MCxhcltwKzE0MD4+Ml09LTEsYXJbcD4+Ml09NDUwNCxhcltsPj4yXT00NTQ0LGFyW2I+PjJdPTQ1MjQsU2YodSksYXJbdT4+Ml09NDM0MCxhclsoYj1wKzQ0fDApPj4yXT0wLGFyW2IrND4+Ml09MCxhcltiKzg+PjJdPTAsYXJbYisxMj4+Ml09MCxhcltwKzYwPj4yXT0yNCxhcltKPj4yXT0wLGFyW0orND4+Ml09MCxhcltKKzg+PjJdPTAsWGUodSxKKSwoMHx0cltKKzExPj4wXSk8MCYmdnUoMHxhcltKPj4yXSksSj0wfFdlKDB8TGYoMHxXZSgwfExmKDB8V2UoZj1wKzh8MCwzMDM2NiwxMSksaCksMzAxNzAsMSksayksMzAzNzgsMzIpLEo9MHxXZSgwfExmKEosMHxhcltzPj4yXSksMzAxNzAsMSksV2UoMHxMZihKLDB8YXJbZSs3Nj4+Ml0pLDMwMDg2LDEpLEllKHksdSksb28oQSw2LDFlMyx5KSwoMHx0clt5KzExPj4wXSk8MCYmdnUoMHxhclt5Pj4yXSksYXJbcD4+Ml09NDUwNCxhcltsPj4yXT00NTQ0LGFyW2Y+PjJdPTQ1MjQsYXJbdT4+Ml09NDM0MCwoMHx0cltiKzExPj4wXSk8MCYmdnUoMHxhcltiPj4yXSksa2YodSksYmYobCkpLDB8ViYmZHUoViksMHwoZj0wfGFyWzQrdD4+Ml0pJiZkdShmKSxSfHxkdShGKSwwfChmPTB8YXJbTj4+Ml0pJiZkdShmKX1lbHNlIGw9Wis2NHwwLGFyWyhiPVorOHwwKT4+Ml09NDUyNCx1PVorMTJ8MCxhcltaPj4yXT0xODgsYXJbbD4+Ml09MjA4LEpmKForNjR8KGFyW1orND4+Ml09MCksdSksYXJbWisxMzY+PjJdPTAsYXJbWisxNDA+PjJdPS0xLGFyW1o+PjJdPTQ1MDQsYXJbbD4+Ml09NDU0NCxhcltiPj4yXT00NTI0LFNmKHUpLGFyW3U+PjJdPTQzNDAsYXJbKGI9Wis0NHwwKT4+Ml09MCxhcltiKzQ+PjJdPTAsYXJbYis4Pj4yXT0wLGFyW2IrMTI+PjJdPTAsYXJbWis2MD4+Ml09MjQsYXJbSj4+Ml09MCxhcltKKzQ+PjJdPTAsYXJbSis4Pj4yXT0wLFhlKHUsSiksKDB8dHJbSisxMT4+MF0pPDAmJnZ1KDB8YXJbSj4+Ml0pLEo9MHxXZSgwfFBmKDB8V2UoMHx4ZigwfFdlKDB8eGYoMHxXZShmPVorOHwwLDMxNzMwLDE3KSxHKSwzMDE3MCwxKSxzKSwzMTc0OCwxKSxkKSwzMTc1MCwxNyksV2UoMHxMZihKLCgwfGFyW00+PjJdKS0oMHxhcltjPj4yXSk+PjIpLDMxNzY4LDIwKSxJZShrLHUpLG9vKEEsMiwxMTksayksKDB8dHJbaysxMT4+MF0pPDAmJnZ1KDB8YXJbaz4+Ml0pLGFyW1o+PjJdPTQ1MDQsYXJbbD4+Ml09NDU0NCxhcltmPj4yXT00NTI0LGFyW3U+PjJdPTQzNDAsKDB8dHJbYisxMT4+MF0pPDAmJnZ1KDB8YXJbYj4+Ml0pLGtmKHUpLGJmKGwpfXdoaWxlKDApOzB8KGM9MHxhcltjPj4yXSkmJigoMHwoZj0wfGFyW00+PjJdKSkhPSgwfGMpJiYoYXJbTT4+Ml09ZisofigoZistNC1jfDApPj4+Mik8PDIpKSx2dShjKSl9ZWxzZXtmb3IoYXJbcz4+Ml09MCxhcltzKzQ+PjJdPTAsYz0oYXJbcys4Pj4yXT0wKXxodSg2NCksYXJbcz4+Ml09YyxhcltzKzg+PjJdPS0yMTQ3NDgzNTg0LHU9MzE2MjksYj0obD1jKSsoYXJbcys0Pj4yXT00OCl8MDt0cltsPj4wXT0wfHRyW3U+PjBdLHU9dSsxfDAsKDB8KGw9bCsxfDApKTwoMHxiKTspO3RyW2MrNDg+PjBdPTAsb28oQSwyLDExMyxzKSwoMHx0cltzKzExPj4wXSk8MCYmdnUoMHxhcltzPj4yXSl9VXx8ZHUoVCl9dXI9KDA8PSgwfHRyWyhjPW8rOHwwKSsxMT4+MF0pfHx2dSgwfGFyW2M+PjJdKSxhKX1mdW5jdGlvbiBJbChBLGUscixpKXtBfD0wLHJ8PTAsaXw9MDt2YXIgZixuLHQsbyxhPTAsYz0wLGw9MCx1PTA7aWYodXI9KG89dXIpKzY0fDAsYz1vKzMyfDAsbj1vKzQ0fDAsbD1vKzIwfDAsZj1vLHU9MHxhclsoZXw9MCkrNjA+PjJdLGE9MHxhclt1Kzc2Pj4yXSwodD0wPT0oMHwodT0wfGFyW3UrODA+PjJdKSkpfHxidSh1KSxhKXtpZihmbyhuLGEsciwxNjg0NjMwODg3KSxjPTQrbnwwLGE9MHxhcltuPj4yXSw0IT0oKDB8YXJbYz4+Ml0pLWF8MCkpe2ZvcihhcltsPj4yXT0wLGFyW2wrND4+Ml09MCxhPShhcltsKzg+PjJdPTApfGh1KDQ4KSxhcltsPj4yXT1hLGFyW2wrOD4+Ml09LTIxNDc0ODM2MDAsZT0zMTU4MSxpPShyPWEpKyhhcltsKzQ+PjJdPTQ3KXwwO3RyW3I+PjBdPTB8dHJbZT4+MF0sZT1lKzF8MCwoMHwocj1yKzF8MCkpPCgwfGkpOyk7dHJbYSs0Nz4+MF09MCxvbyhBLDIsMTE5LGwpLCgwfHRyW2wrMTE+PjBdKTwwJiZ2dSgwfGFyW2w+PjJdKX1lbHNlIFhsKGYsZSwwfGFyW2E+PjJdLGksMSwwKSxpPTB8YXJbKGU9ZikrND4+Ml0sYXJbKGw9QSk+PjJdPWFyW2U+PjJdLGFyW2wrND4+Ml09aSxsPWYrOHwwLGFyWyhBPUErOHwwKT4+Ml09YXJbbD4+Ml0sYXJbQSs0Pj4yXT1hcltsKzQ+PjJdLGFyW0ErOD4+Ml09YXJbbCs4Pj4yXTswfChhPTB8YXJbbj4+Ml0pJiYoKDB8KHI9MHxhcltjPj4yXSkpIT0oMHxhKSYmKGFyW2M+PjJdPXIrKH4oKHIrLTQtYXwwKT4+PjIpPDwyKSksdnUoYSkpfWVsc2V7Zm9yKGFyW2M+PjJdPTAsYXJbYys0Pj4yXT0wLGE9KGFyW2MrOD4+Ml09MCl8aHUoNjQpLGFyW2M+PjJdPWEsYXJbYys4Pj4yXT0tMjE0NzQ4MzU4NCxlPTMxNTMyLGk9KHI9YSkrKGFyW2MrND4+Ml09NDgpfDA7dHJbcj4+MF09MHx0cltlPj4wXSxlPWUrMXwwLCgwfChyPXIrMXwwKSk8KDB8aSk7KTt0clthKzQ4Pj4wXT0wLG9vKEEsMiwxMTMsYyksKDB8dHJbYysxMT4+MF0pPDAmJnZ1KDB8YXJbYz4+Ml0pfXVyPSh0fHxkdSh1KSxvKX1mdW5jdGlvbiBDbChBLGUscixpLGYpe0F8PTAscnw9MCxpfD0wLGZ8PTA7dmFyIG4sdCxvLGEsYyxsLHU9MCxiPTAscz0wLGQ9MCxrPTAsaD0wLHc9MCx2PTAsbT0wLGc9MCxaPTAscD0wLHk9MCxCPTAsRT0wLFg9MCxXPTAsST0wLEM9MCxHPTAsVj0wLEY9MDtpZih1cj0obD11cikrMjg4fDAsWD1sKzE2OHwwLHM9bCsyNjR8MCxhPWwrMjc2fDAsdz1sKzIzMnwwLG89bCsxNDR8MCxkPWwrMjIwfDAsaz0oVz1sKSsyMDh8MCxuPWwrMjAwfDAsdD1sKzE4OHwwLFY9MHxhclsoZXw9MCkrNjA+PjJdLHU9MHxhcltWKzc2Pj4yXSwoYz0wPT0oMHwoVj0wfGFyW1YrODA+PjJdKSkpfHxidShWKSx1KXtmbyhhLHUsciwxNjg0NjMwODg3KSxhclsoST13KzIwfDApPj4yXT0wLGFyWyhDPXcrMjR8MCk+PjJdPTAsZnVuY3Rpb24oQSxlLHIsaSl7QXw9MCxlfD0wLHJ8PTAsaXw9MDt2YXIgZixuLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTAsZD0wLGs9MCxoPTAsdz0wO2Zvcih1cj0obj11cikrMjA4fDAsdT1uKzE5MnwwLHQ9KGY9bikrMzJ8MCxiPW4rNDh8MCxzPW4rMjB8MCxvPTB8aHUoMzIpLGFyW3Q+PjJdPW8sYXJbdCs4Pj4yXT0tMjE0NzQ4MzYxNixjPTMwMDg4LGw9KGE9bykrKGFyW3QrND4+Ml09MjkpfDA7dHJbYT4+MF09MHx0cltjPj4wXSxjPWMrMXwwLCgwfChhPWErMXwwKSk8KDB8bCk7KTt0cltvKzI5Pj4wXT0wLG9vKGYsMiwxMTgsdCksKDB8dHJbdCsxMT4+MF0pPDAmJnZ1KDB8YXJbdD4+Ml0pLGw9MHxhcltpPj4yXSxvPSgwfGFyW2krND4+Ml0pLWx8MDtkb3tpZihvPj4+MDwxMCl3PTB8YXJbKGk9ZikrND4+Ml0sYXJbKHI9QSk+PjJdPWFyW2k+PjJdLGFyW3IrND4+Ml09dyxyPUErOHwwLEE9Zis4fDAsYXJbcj4+Ml09YXJbQT4+Ml0sYXJbcis0Pj4yXT1hcltBKzQ+PjJdLGFyW3IrOD4+Ml09YXJbQSs4Pj4yXSxhcltBPj4yXT0wLGFyW0ErND4+Ml09MCxhcltBKzg+PjJdPTA7ZWxzZXtpZih3PTB8dHJbbD4+MF0sdHJbZT4+MF09dyx0PTB8dHJbbCsxPj4wXSx0cltlKzE+PjBdPXQsdzw8MjQ+PjI0KXtvPWIrNjR8MCxhclsoYz1iKzh8MCk+PjJdPTQ1MjQsYT1iKzEyfDAsYXJbYj4+Ml09MTg4LGFyW28+PjJdPTIwOCxKZihiKzY0fChhcltiKzQ+PjJdPTApLGEpLGFyW2IrMTM2Pj4yXT0wLGFyW2IrMTQwPj4yXT0tMSxhcltiPj4yXT00NTA0LGFyW28+PjJdPTQ1NDQsYXJbYz4+Ml09NDUyNCxTZihhKSxhclthPj4yXT00MzQwLGFyWyhjPWIrNDR8MCk+PjJdPTAsYXJbYys0Pj4yXT0wLGFyW2MrOD4+Ml09MCxhcltjKzEyPj4yXT0wLGFyW2IrNjA+PjJdPTI0LGFyW3U+PjJdPTAsYXJbdSs0Pj4yXT0wLGFyW3UrOD4+Ml09MCxYZShhLHUpLCgwfHRyW3UrMTE+PjBdKTwwJiZ2dSgwfGFyW3U+PjJdKSxyPTB8V2UodD1iKzh8MCwzMDExOCwyNyksV2UoMHxQZihyLDB8Y3JbZT4+MF0pLDMwMTQ2LDIzKSxJZShzLGEpLG9vKEEsNCwzMDAyLHMpLCgwfHRyW3MrMTE+PjBdKTwwJiZ2dSgwfGFyW3M+PjJdKSxhcltiPj4yXT00NTA0LGFyW28+PjJdPTQ1NDQsYXJbdD4+Ml09NDUyNCxhclthPj4yXT00MzQwLCgwfHRyW2MrMTE+PjBdKTwwJiZ2dSgwfGFyW2M+PjJdKSxrZihhKSxiZihvKTticmVha31pZigoKDEwKygodT0oYj10PDwxJjIpKzI8PDI0Pj4yNCk8PDEmMjU1KSYyNTUpKygwfGJyKHI8PDEsdz0yNTUmdSkpfDApPj4+MD5vPj4+MCl7dz0wfGFyWyhpPWYpKzQ+PjJdLGFyWyhyPUEpPj4yXT1hcltpPj4yXSxhcltyKzQ+PjJdPXcscj1BKzh8MCxBPWYrOHwwLGFyW3I+PjJdPWFyW0E+PjJdLGFyW3IrND4+Ml09YXJbQSs0Pj4yXSxhcltyKzg+PjJdPWFyW0ErOD4+Ml0sYXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsYXJbQSs4Pj4yXT0wO2JyZWFrfWZvcihvcltlKzI+PjFdPWNyW2wrMz4+MF18Y3JbbCsyPj4wXTw8OCxvcltlKzQ+PjFdPWNyW2wrNT4+MF18Y3JbbCs0Pj4wXTw8OCxvcltlKzY+PjFdPWNyW2wrNz4+MF18Y3JbbCs2Pj4wXTw8OCxvcltlKzg+PjFdPWNyW2wrOT4+MF18Y3JbbCs4Pj4wXTw8OCxhPTI1NSZiLHQ9MCxvPXcsYz0xMDtvPW8rLTF8MCx0PWNyW2wrYz4+MF18dDw8OCxvOyljPWMrMXwwO2ZvcihrPTEyfGEsYXJbZSsxMj4+Ml09dCxvPWsrYXwwLGM9MCx0PXcsYT1rO3Q9dCstMXwwLGM9Y3JbbCthPj4wXXxjPDw4LHQ7KWE9YSsxfDA7aWYobD1vKzJ8MCxhcltlKzE2Pj4yXT1jLGs9ZSsyMHwwLHI+Pj4wPD0obz0oYz0wfGFyWyh0PWUrMjR8MCk+PjJdKS0oYT0wfGFyW2s+PjJdKT4+Myk+Pj4wPyhyPj4+MDxvPj4+MCYmKDB8YykhPSgwfChkPWErKHI8PDMpfDApKSYmKGFyW3Q+PjJdPWMrKH4oKGMrLTgtZHwwKT4+PjMpPDwzKSksMHxyJiYoaD0yNSkpOih3bChrLHItb3wwKSxoPTI1KSwyNT09KDB8aCkpZm9yKGQ9fihlPTEyODw8KHU8PDMmMjU1KS04KSxzPTQrKGI8PDEmMjU1KSYyNTUsYj0wfGFyW2k+PjJdLHU9MDs7KXtmb3IoYT0wLHQ9dyxvPWw7dD10Ky0xfDAsYT1jcltiK28+PjBdfGE8PDgsdDspbz1vKzF8MDtmb3IoYz0wfGFyW2s+PjJdLGFyW2MrKHU8PDMpPj4yXT0oYSZkKS0oMD09KGEmZXwwKT8wOmUpLGE9KG89dykrbHwodD0wKTtvPW8rLTF8MCx0PWNyW2IrYT4+MF18dDw8OCxvOylhPWErMXwwO2lmKGFyW2MrKHU8PDMpKzQ+PjJdPSh0JmQpLSgwPT0odCZlfDApPzA6ZSksKDB8KHU9dSsxfDApKT09KDB8cikpYnJlYWs7bD1zK2x8MH13PTB8YXJbKGk9NTY1OTIpKzQ+PjJdLGFyWyhyPUEpPj4yXT1hcltpPj4yXSxhcltyKzQ+PjJdPXcseXUoQSs4fDAsNTY2MDApfX13aGlsZSgwKTt1cj0oMDw9KDB8dHJbKHQ9Zis4fDApKzExPj4wXSl8fHZ1KDB8YXJbdD4+Ml0pLG4pfShvLHcsKChhclt3KzI4Pj4yXT0wKXxhclsoRz00K2F8MCk+PjJdKS0oMHxhclthPj4yXSk+PjIsZik7QTpkb3tpZigwfGFyW28+PjJdKVc9MHxhclsoZT1vKSs0Pj4yXSxhclsoRj1BKT4+Ml09YXJbZT4+Ml0sYXJbRis0Pj4yXT1XLEY9OCtvfDAsYXJbKEE9QSs4fDApPj4yXT1hcltGPj4yXSxhcltBKzQ+PjJdPWFyW0YrND4+Ml0sYXJbQSs4Pj4yXT1hcltGKzg+PjJdLGFyW0Y+PjJdPTAsYXJbRis0Pj4yXT0wLGFyW0YrOD4+Ml09MDtlbHNle2lmKHk9dysyMHwwLCgoMHxhcltHPj4yXSktKDB8YXJbYT4+Ml0pPj4yfDApIT0oKDB8YXJbQz4+Ml0pLSgwfGFyW3k+PjJdKT4+M3wwKSl7Zm9yKGFyW2Q+PjJdPTAsYXJbZCs0Pj4yXT0wLHU9KGFyW2QrOD4+Ml09MCl8aHUoODApLGFyW2Q+PjJdPXUsYXJbZCs4Pj4yXT0tMjE0NzQ4MzU2OCxmPTMxNDYyLGI9KHI9dSkrKGFyW2QrND4+Ml09NjkpfDA7dHJbcj4+MF09MHx0cltmPj4wXSxmPWYrMXwwLCgwfChyPXIrMXwwKSk8KDB8Yik7KTtpZih0clt1KzY5Pj4wXT0wLG9vKEEsMiwxMjEsZCksMDw9KDB8dHJbZCsxMT4+MF0pKWJyZWFrO3Z1KDB8YXJbZD4+Ml0pO2JyZWFrfWlmKGQ9MHxhclt3KzEyPj4yXSxoPTB8YXJbdysxNj4+Ml0sZD4+PjA8KDB8YXJbKHM9ZSs3MnwwKT4+Ml0pPj4+MCYmaD4+PjA8KDB8YXJbZSs3Nj4+Ml0pPj4+MCl7aWYoZj0wfGh1KDgwKSxhcltmKzQ+PjJdPTAsYXJbZis4Pj4yXT0wLGFyW2Y+PjJdPTYyMDgsYXJbKHU9ZisxMnwwKT4+Ml09MCxhclt1KzQ+PjJdPTAsYXJbdSs4Pj4yXT0wLGFyW3UrMTI+PjJdPTAsYXJbdSsxNj4+Ml09MCxhcltmKzMyPj4yXT0zMDAyNSxhcltmKzM2Pj4yXT0wLGFyW2YrNDA+PjJdPTAsYXJbZis0ND4+Ml09OTksYXJbZis0OD4+Ml09OTkscz1mKzUyfDAsYXJbKGI9Zis3MnwwKT4+Ml09MCxhcltmKzc2Pj4yXT0wLGFyW3M+PjJdPTAsYXJbcys0Pj4yXT0wLGFyW3MrOD4+Ml09MCxhcltzKzEyPj4yXT0wLGFyW2YrNjg+PjJdPWIsYj11LHA9KHM9ZikrMTZ8MCxidShmKSxzdShmKSxyPTB8YXJbcD4+Ml0sYXJbdT4+Ml09YixhcltwPj4yXT1zLDB8ciYma3UociksZHUoZiksYXJbaT4+Ml09YixyPTB8YXJbKHA9aSs0fDApPj4yXSxhcltwPj4yXT1zLHI/KGR1KHIpLHU9MHxhclsocD1pKT4+Ml0pOnA9aSx5byh1LGQsaCwxLDMpLEJvKDB8YXJbcD4+Ml0sMyxkLGgsOCksQm8oMHxhcltwPj4yXSw0LGQsaCw4KSxCbygwfGFyW3A+PjJdLDUsZCxoLDgpLGxsKFgsMHxhcltwPj4yXSwwfG9yW3crMj4+MV0sMHxvclt3KzQ+PjFdLDB8b3Jbdys2Pj4xXSwwfG9yW3crOD4+MV0pLHU9MHxhclsoWj1YKSs0Pj4yXSxhclsoZz1vKT4+Ml09YXJbWj4+Ml0sYXJbZys0Pj4yXT11LHU9WCs4fDAsKDB8dHJbKFo9KGc9OCtvfDApKzExfDApPj4wXSk8MD8odHJbYXJbZz4+Ml0+PjBdPTAsYXJbMTIrbz4+Ml09MCk6KHRyW2c+PjBdPTAsdHJbWj4+MF09MCksQ3UoZywwKSxhcltnPj4yXT1hclt1Pj4yXSxhcltnKzQ+PjJdPWFyW3UrND4+Ml0sYXJbZys4Pj4yXT1hclt1Kzg+PjJdLDB8YXJbbz4+Ml0pe2U9MHxhclsoWD1vKSs0Pj4yXSxhclsoVz1BKT4+Ml09YXJbWD4+Ml0sYXJbVys0Pj4yXT1lLGFyWyhBPUErOHwwKT4+Ml09YXJbZz4+Ml0sYXJbQSs0Pj4yXT1hcltnKzQ+PjJdLGFyW0ErOD4+Ml09YXJbZys4Pj4yXSxhcltnPj4yXT0wLGFyW2crND4+Ml09MCxhcltnKzg+PjJdPTA7YnJlYWt9dT0wfGFyW2E+PjJdO2U6ZG97aWYoKDB8YXJbRz4+Ml0pPT0oMHx1KSlFPShCPUEpKzh8MDtlbHNle2I9WCs0fDAsZD0xMitvfDAsaz00K258MCxpPVcrNHwwLGg9MTErdHwwLHc9cz1XKzh8MCx2PUErOHwwLG09NCtvfDAsZj0wO3I6Zm9yKDs7KXthcltYPj4yXT0wLFhsKFcsZSwoYXJbYj4+Ml09MCl8YXJbdSsoZjw8Mik+PjJdLFgsMSwwKSx1PTB8YXJbKEY9VykrND4+Ml0sYXJbKHI9byk+PjJdPWFyW0Y+PjJdLGFyW3IrND4+Ml09dSwoMHx0cltaPj4wXSk8MD8odHJbYXJbZz4+Ml0+PjBdPTAsYXJbZD4+Ml09MCk6KHRyW2c+PjBdPTAsdHJbWj4+MF09MCksQ3UoZywwKSxhcltnPj4yXT1hcltzPj4yXSxhcltnKzQ+PjJdPWFyW3MrND4+Ml0sYXJbZys4Pj4yXT1hcltzKzg+PjJdO2k6ZG97aWYoKDB8YXJbbz4+Ml0pPT0oMHxhclsxNDE0OF0pKXthcltuPj4yXT0wLG1lKFcsWCwxLDMsbixhcltrPj4yXT0wKSx1PTB8YXJbVz4+Ml0sRj0wfGFyW2k+PjJdLGFyW1c+PjJdPTAsYXJbaT4+Ml09MCxhcltYPj4yXT11LHU9MHxhcltiPj4yXSxhcltiPj4yXT1GO2Rve2lmKDB8dSl7aWYoZHUodSksISh1PTB8YXJbaT4+Ml0pKWJyZWFrO2R1KHUpfX13aGlsZSgwKTtpZigwfCh1PTB8YXJbaz4+Ml0pJiZkdSh1KSwhKDB8YXJbWD4+Ml0pKXtpZihhclt0Pj4yXT0wLGFyWzQrdD4+Ml09MCxhcls4K3Q+PjJdPTAsb28oQSw0LDMwMDMsdCksMDw9KDB8dHJbaD4+MF0pKXt1PTE7YnJlYWt9dnUoMHxhclt0Pj4yXSksdT0xO2JyZWFrfWlmKHU9Rj0wfGFyW3k+PjJdLCgwfGFyW0M+PjJdKS1GPj4zPj4+MDw9Zj4+PjApYnJlYWsgcjt1bChXLDB8YXJbcD4+Ml0sWCwwfGFyW3UrKGY8PDMpPj4yXSwwfGFyW3UrKGY8PDMpKzQ+PjJdKSxyPTB8YXJbKHU9VykrND4+Ml0sYXJbKEY9byk+PjJdPWFyW3U+PjJdLGFyW0YrND4+Ml09ciwoMHx0cltaPj4wXSk8MD8odHJbYXJbZz4+Ml0+PjBdPTAsYXJbZD4+Ml09MCk6KHRyW2c+PjBdPTAsdHJbWj4+MF09MCksQ3UoZywwKSxhcltnPj4yXT1hclt3Pj4yXSxhcltnKzQ+PjJdPWFyW3crND4+Ml0sYXJbZys4Pj4yXT1hclt3Kzg+PjJdO2Y6ZG97c3dpdGNoKDB8YXJbbz4+Ml0pe2Nhc2UgMDp1PTA7YnJlYWsgaTtjYXNlIDI6aWYoMTIyIT0oMHxhclttPj4yXSkpYnJlYWsgZjtGPTB8YXJbKHI9NTY1OTIpKzQ+PjJdLGFyWyh1PW8pPj4yXT1hcltyPj4yXSxhclt1KzQ+PjJdPUYsRXUoZyw1NjYwMCksdT0wO2JyZWFrIGl9fXdoaWxlKDApO0Y9MHxhclsocj1vKSs0Pj4yXSxhclsodT1BKT4+Ml09YXJbcj4+Ml0sYXJbdSs0Pj4yXT1GLGFyW3Y+PjJdPWFyW2c+PjJdLGFyW3YrND4+Ml09YXJbZys0Pj4yXSxhclt2Kzg+PjJdPWFyW2crOD4+Ml0sYXJbZz4+Ml09MCxhcltnKzQ+PjJdPTAsYXJbZys4Pj4yXT0wLHU9MX1lbHNlIEY9MHxhclsocj1vKSs0Pj4yXSxhclsodT1BKT4+Ml09YXJbcj4+Ml0sYXJbdSs0Pj4yXT1GLGFyW3Y+PjJdPWFyW2c+PjJdLGFyW3YrND4+Ml09YXJbZys0Pj4yXSxhclt2Kzg+PjJdPWFyW2crOD4+Ml0sYXJbZz4+Ml09MCxhcltnKzQ+PjJdPTAsYXJbZys4Pj4yXT0wLHU9MX13aGlsZSgwKTtpZigwfChyPTB8YXJbYj4+Ml0pJiZkdShyKSxmPWYrMXwwLDB8dSlicmVhayBBO2lmKHU9MHxhclthPj4yXSxmPj4+MD49KDB8YXJbRz4+Ml0pLXU+PjI+Pj4wKXtCPUEsRT12O2JyZWFrIGV9fXNyKDMwMTcyLDMwMjAzLDM4MiwzMDIxOSl9fXdoaWxlKDApO0E9MHxhclsoVz1vKSs0Pj4yXSxhclsoRj1CKT4+Ml09YXJbVz4+Ml0sYXJbRis0Pj4yXT1BLGFyW0U+PjJdPWFyW2c+PjJdLGFyW0UrND4+Ml09YXJbZys0Pj4yXSxhcltFKzg+PjJdPWFyW2crOD4+Ml0sYXJbZz4+Ml09MCxhcltnKzQ+PjJdPTAsYXJbZys4Pj4yXT0wO2JyZWFrfXI9Vys2NHwwLGFyWyhiPVcrOHwwKT4+Ml09NDUyNCxmPVcrMTJ8MCxhcltXPj4yXT0xODgsYXJbcj4+Ml09MjA4LEpmKFcrNjR8KGFyW1crND4+Ml09MCksZiksYXJbVysxMzY+PjJdPTAsYXJbVysxNDA+PjJdPS0xLGFyW1c+PjJdPTQ1MDQsYXJbcj4+Ml09NDU0NCxhcltiPj4yXT00NTI0LFNmKGYpLGFyW2Y+PjJdPTQzNDAsYXJbKGI9Vys0NHwwKT4+Ml09MCxhcltiKzQ+PjJdPTAsYXJbYis4Pj4yXT0wLGFyW2IrMTI+PjJdPTAsYXJbVys2MD4+Ml09MjQsYXJbWD4+Ml09MCxhcltYKzQ+PjJdPTAsYXJbWCs4Pj4yXT0wLFhlKGYsWCksKDB8dHJbWCsxMT4+MF0pPDAmJnZ1KDB8YXJbWD4+Ml0pLEY9MHxXZSgwfExmKDB8V2UoMHxMZigwfFdlKHU9Vys4fDAsMzAzNjYsMTEpLGQpLDMwMTcwLDEpLGgpLDMwMzc4LDMyKSxGPTB8V2UoMHxMZihGLDB8YXJbcz4+Ml0pLDMwMTcwLDEpLFdlKDB8TGYoRiwwfGFyW2UrNzY+PjJdKSwzMDA4NiwxKSxJZShrLGYpLG9vKEEsNiwxZTMsayksKDB8dHJbaysxMT4+MF0pPDAmJnZ1KDB8YXJbaz4+Ml0pLGFyW1c+PjJdPTQ1MDQsYXJbcj4+Ml09NDU0NCxhclt1Pj4yXT00NTI0LGFyW2Y+PjJdPTQzNDAsKDB8dHJbYisxMT4+MF0pPDAmJnZ1KDB8YXJbYj4+Ml0pLGtmKGYpLGJmKHIpfX13aGlsZSgwKTsoMHx0clsodT04K298MCkrMTE+PjBdKTwwJiZ2dSgwfGFyW3U+PjJdKSwwfCh1PTB8YXJbST4+Ml0pJiYoKDB8KHI9MHxhcltDPj4yXSkpIT0oMHx1KSYmKGFyW0M+PjJdPXIrKH4oKHIrLTgtdXwwKT4+PjMpPDwzKSksdnUodSkpLDB8KHU9MHxhclthPj4yXSkmJigoMHwocj0wfGFyW0c+PjJdKSkhPSgwfHUpJiYoYXJbRz4+Ml09cisofigocistNC11fDApPj4+Mik8PDIpKSx2dSh1KSl9ZWxzZXtmb3IoYXJbcz4+Ml09MCxhcltzKzQ+PjJdPTAsdT0oYXJbcys4Pj4yXT0wKXxodSg2NCksYXJbcz4+Ml09dSxhcltzKzg+PjJdPS0yMTQ3NDgzNTg0LGY9MzE0MTMsYj0ocj11KSsoYXJbcys0Pj4yXT00OCl8MDt0cltyPj4wXT0wfHRyW2Y+PjBdLGY9ZisxfDAsKDB8KHI9cisxfDApKTwoMHxiKTspO3RyW3UrNDg+PjBdPTAsb28oQSwyLDExMyxzKSwoMHx0cltzKzExPj4wXSk8MCYmdnUoMHxhcltzPj4yXSl9dXI9KGN8fGR1KFYpLGwpfWZ1bmN0aW9uIEdsKEEsZSxyLGksZixuKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MDt2YXIgdCxvLGEsYyxsLHU9MCxiPTAscz0wLGQ9MCxrPTAsaD0wLHc9MCx2PTAsbT0wLGc9MCxaPTA7aWYodXI9KGw9dXIpKzgwfDAsWj0oYz1sKSs1MnwwLGs9bCszNnwwLHQ9bCs0OHwwLG89bCszMnwwLGg9bCsyMHwwLGFyWyhnPWwrNjR8MCk+PjJdPTAsWGwoYyxlLHIsZywoYXJbKGE9Zys0fDApPj4yXT0wKXxhclszMisoMHxhcltpPj4yXSk+PjJdLDApLCgwfGFyW2M+PjJdKT09KDB8YXJbMTQxNDhdKSl7ZT0wfGFyW2k+PjJdLHM9MHxhcltlKzI0Pj4yXSxkPTB8YXJbZSsyOD4+Ml0scj0wfGFyW2c+PjJdLHU9MHxhcltyKzI0Pj4yXSxyPTB8YXJbcisyOD4+Ml0sKDB8dSk8PS0xJiZzcigzMmUzLDMwMjAzLDE1NDAsMzIwMTUpLCgwfHIpPD0tMSYmc3IoMzIwNDMsMzAyMDMsMTU0MSwzMjAxNSksbT0wfGFyW2UrMzY+PjJdLElvKFosZSksZT0wfGFyW2c+PjJdO0E6ZG97aWYoKDB8bSkhPSgwfGFyW2UrMzY+PjJdKSl7Zm9yKGFyW2s+PjJdPTAsYXJbays0Pj4yXT0wLGU9KGFyW2srOD4+Ml09MCl8aHUoNjQpLGFyW2s+PjJdPWUsYXJbays4Pj4yXT0tMjE0NzQ4MzU4NCx1PTMyMDU5LGI9KHI9ZSkrKGFyW2srND4+Ml09NTgpfDA7dHJbcj4+MF09MHx0clt1Pj4wXSx1PXUrMXwwLCgwfChyPXIrMXwwKSk8KDB8Yik7KTt0cltlKzU4Pj4wXT0wLG9vKEEsMiwxMjcsayksKDB8dHJbaysxMT4+MF0pPDAmJnZ1KDB8YXJbaz4+Ml0pfWVsc2V7Yj0wfGFyW1o+PjJdLG09Wis0fDA7ZTpkb3tpZigoMHxiKSE9KDB8bSkpe2lmKGs9KDB8KGs9cy1mfDApKTwoMHx1KT9rOnUsdz0wPCgwfCh2PSgwfCh2PWQtbnwwKSk8KDB8cik/djpyKSksISgoMHxmKTwoMHxzKSYoMHxuKTwoMHxkKSkpe0ZvKGUsZz0wfGFyW2IrMTY+PjJdLHQpLEZvKDB8YXJbaT4+Ml0sZyxvKSxhcltoPj4yXT0wLGFyW2grND4+Ml09MCxhcltoKzg+PjJdPTAsb28oQSwyLDExOCxoKSwoMHx0cltoKzExPj4wXSk8MCYmdnUoMHxhcltoPj4yXSk7YnJlYWsgQX1mb3IoOzspe2lmKHU9MHxGbyhlLHM9MHxhcltiKzE2Pj4yXSx0KSxlPTB8Rm8oMHxhcltpPj4yXSxzLG8pLHM9MHxicigoMjU1JigwfEdvKDB8YXJbZz4+Ml0sMykpKT4+PjMmMjU1LGspLHI9MHxHbygwfGFyW2c+PjJdLDMpLHcpZm9yKHI9ZSsoMHxicigoMjU1JnIpPj4+MyYyNTUsZikpfDAsZT0wO2hiKDB8KGg9cisoMHxicigwfGFyW28+PjJdLGUrbnwwKSl8MCksdSsoMHxicigwfGFyW3Q+PjJdLGUpKXwwLDB8cyksKDB8KGU9ZSsxfDApKTwoMHx2KTspO2lmKGU9MHxhcltiKzQ+PjJdKWZvcig7cj0wfGFyW2U+PjJdOyllPXI7ZWxzZSBpZihlPTB8YXJbKHI9Yis4fDApPj4yXSwoMHxhcltlPj4yXSkhPSgwfGIpKWZvcig7aD0wfGFyW3I+PjJdLGU9MHxhclsocj1oKzh8MCk+PjJdLCgwfGFyW2U+PjJdKSE9KDB8aCk7KTtpZigoMHxlKT09KDB8bSkpYnJlYWsgZTtiPWUsZT0wfGFyW2c+PjJdfX19d2hpbGUoMCk7bj0wfGFyWyhmPTU2NTkyKSs0Pj4yXSxhclsoZz1BKT4+Ml09YXJbZj4+Ml0sYXJbZys0Pj4yXT1uLHl1KEErOHwwLDU2NjAwKX19d2hpbGUoMCk7Q28oWiwwfGFyW1orND4+Ml0pLCgwfHRyW2MrOCsxMT4+MF0pPDAmJnZ1KDB8YXJbYys4Pj4yXSl9ZWxzZSBnPTB8YXJbKG49YykrND4+Ml0sYXJbKFo9QSk+PjJdPWFyW24+PjJdLGFyW1orND4+Ml09ZyxaPWMrOHwwLGFyWyhBPUErOHwwKT4+Ml09YXJbWj4+Ml0sYXJbQSs0Pj4yXT1hcltaKzQ+PjJdLGFyW0ErOD4+Ml09YXJbWis4Pj4yXSxhcltaPj4yXT0wLGFyW1orND4+Ml09MCxhcltaKzg+PjJdPTA7dXI9KChlPTB8YXJbYT4+Ml0pJiZkdShlKSxsKX1mdW5jdGlvbiBWbChBLGUscil7QXw9MCxyfD0wO3ZhciBpLGYsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTAsZD0wLGs9MCxoPTA7aWYodXI9KGY9dXIpKzgwfDAsaT1mKzc2fDAsYj1mKzcyfDAsZD0ocz1mKSs2NHwwLFlBKG49ZiszMnwwLHU9MHxhclsoZXw9MCk+PjJdLCgwfGFyWyh0PWUrNHwwKT4+Ml0pLXV8MCksKDB8KHU9MHxRQShuLDMyKSkpPD0oMHwobj0oKDB8YXJbbisyND4+Ml0pLy04fDApKygoMHxhcltuKzQ+PjJdKS0oMHxhcltuKzg+PjJdKSl8MCkpKXJldHVybiBiPTB8YXJbKGI9cj01NjU5Mik+PjJdLHI9MHxhclsocj1yKzR8MCk+PjJdLGFyWyhzPWQ9QSk+PjJdPWIsYXJbKGQ9ZCs0fDApPj4yXT1yLHl1KEE9QSs4fDAsNTY2MDApLHZvaWQodXI9Zik7aWYoWUEocywodT0wfGFyW2U+PjJdKStufDAsKDB8YXJbdD4+Ml0pLSh1K24pfDApLFFBKHMsMzIpLHU9KDB8UUEocyw4KSk+Pj4xLGZ1bmN0aW9uKEEsZSl7ZXw9MDt2YXIgcixpPTAsZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wO2lmKCgwfChpPTB8YXJbKHI9KEF8PTApKzI0fDApPj4yXSkpPCgwfGUpKXtpPTY0LWl8MCxuPUErOHwwO0E6ZG97aWYoNzwoMHxpKSl7dD1BKzE2fDAsZj0wfGFyW24+PjJdO2Rve2lmKCFmKWJyZWFrIEE7Yz0wfGFyW0E+PjJdLGFyW0E+PjJdPWMrMSxjPTB8Y3JbYz4+MF0sZj1mKy0xfDAsYXJbbj4+Ml09ZixjPTB8ZGIoMHxjLDAsMHwoaT1pKy04fDApKSxhPWFyWyhsPXQpKzQ+PjJdfEQsYXJbKG89dCk+PjJdPWFyW2w+PjJdfGMsYXJbbys0Pj4yXT1hfXdoaWxlKDc8KDB8aSkpfX13aGlsZSgwKTtpPTY0LWl8MCxhcltyPj4yXT1pfWM9MHxkYigwfGFyWyhjPWw9QSsxNnwwKT4+Ml0sMHxhcltjKzQ+PjJdLDB8ZSksYXJbbD4+Ml09YyxhcltsKzQ+PjJdPUQsYXJbcj4+Ml09aS1lfShzLDgpLCgoMjU1JnUpLTM5fDApPj4+MDwyJiYodT0wfFFBKHMsOCksUUEocyw4KSwxNzc9PSgyNTUmdXwwKSkpe2Zvcih1PTB8aHUoODApLGFyW3UrND4+Ml09MCxhclt1Kzg+PjJdPTAsYXJbdT4+Ml09NjQ0OCx0PShuPWU9dSsxNnwwKSs2NHwwOygwfChuPW4rNHwoYXJbbj4+Ml09MCkpKTwoMHx0KTspO2FyW2U+PjJdPTY0NzYsbD1lLHRyWyhjPXUpKzI0Pj4wXT0xLGFyWyhlPXUrNjh8MCk+PjJdPTAsYXJbdSs3Mj4+Ml09MCxrPTI1NSYoKGFyW3UrNzY+PjJdPTApfFFBKHMsMSkpLHRyWyhuPXUrMjV8MCk+PjBdPWssaz0yNTUmKDB8UUEocywxKSksdHJbKHQ9dSsyNnwwKT4+MF09ayxrPTI1NSYoMHxRQShzLDEpKSx0clsobz11KzI3fDApPj4wXT1rLGs9MjU1JigwfFFBKHMsMSkpLHRyWyhhPXUrMjh8MCk+PjBdPWssREEocyxpKSxhclt1KzY0Pj4yXT1hcltpPj4yXSwoMCE9KDB8dHJbbz4+MF0pfHwwfHRyW2E+PjBdKSYmKERBKHMsYiksYXJbZT4+Ml09YXJbYj4+Ml0pLDB8dHJbbj4+MF0mJihoPStGbChzKSxRW3UrMzI+PjNdPWgpLDB8dHJbdD4+MF0mJihoPStGbChzKSxRW3UrNDA+PjNdPWgpLDB8dHJbbz4+MF0mJihoPStGbChzKSxRW3UrNDg+PjNdPWgpLDB8dHJbYT4+MF0mJihoPStGbChzKSxRW3UrNTY+PjNdPWgpLGFyW2Q+PjJdPWwsYXJbKHQ9ZCs0fDApPj4yXT1jLCgwfChuPTB8YXJbKGU9cis0fDApPj4yXSkpPT0oMHxhcltyKzg+PjJdKT9mdW5jdGlvbihBLGUpe2V8PTA7dmFyIHIsaSxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wO2Y9MHxhclsodT00KyhBfD0wKXwwKT4+Ml0sbj0wfGFyW0E+PjJdLDUzNjg3MDkxMTwodD0xKyhyPWYtKGM9bik+PjMpfDApPj4+MCYmemwoKTtsPSgwfGFyWyhpPUErOHwwKT4+Ml0pLW58MCxvPWw+PjIsbz1sPj4zPj4+MDwyNjg0MzU0NTU/bz4+PjA8dD4+PjA/dDpvOjUzNjg3MDkxMTtkb3tpZihvKXtpZighKDUzNjg3MDkxMTxvPj4+MCkpe2E9MHxodShvPDwzKTticmVha31adSh1PTB8WCg4KSw0NDUxOSksYXJbdT4+Ml09MTc2NjAsSSgwfHUsNDAxNiw0MjgpfWVsc2UgYT0wfXdoaWxlKDApO2w9YSsobzw8Myl8MCxhclsodD1uPWErKHI8PDMpfDApPj4yXT1hcltlPj4yXSxvPTB8YXJbZSs0Pj4yXSxvPShhclthKyhyPDwzKSs0Pj4yXT1vKT8oYnUobyksZj0wfGFyW3U+PjJdLDB8YXJbQT4+Ml0pOmM7aWYoYT1uKzh8MCwoMHxmKSE9KDB8bykpe2Zvcig7Zj0oYz1mKSstOHwwLGFyW24rLTg+PjJdPWFyW2Y+PjJdLGM9YystNHwwLGFyW24rLTQ+PjJdPWFyW2M+PjJdLGFyW2Y+PjJdPTAsYXJbYz4+Ml09MCx0PW49dCstOHwwLCgwfGYpIT0oMHxvKTspO289MHxhcltBPj4yXSxmPTB8YXJbdT4+Ml19aWYoYXJbQT4+Ml09dCxhclt1Pj4yXT1hLGFyW2k+PjJdPWwsKDB8ZikhPSgwfCh0PW8pKSlmb3IoO249MHxhcltmKy00Pj4yXSxmPWYrLTh8MCwwfG4mJmR1KG4pLCgwfGYpIT0oMHx0KTspO2lmKCFvKXJldHVybjt2dShvKX0ocixkKTooYXJbbj4+Ml09bCxidShhcltuKzQ+PjJdPXUpLGFyW2U+PjJdPTgrKDB8YXJbZT4+Ml0pKSwwfChlPTB8YXJbdD4+Ml0pJiZkdShlKX1zPTB8YXJbKHM9ZD01NjU5Mik+PjJdLGQ9MHxhclsoZD1kKzR8MCk+PjJdLGFyWyhyPWs9QSk+PjJdPXMsYXJbKGs9ays0fDApPj4yXT1kLHl1KGs9QSs4fDAsNTY2MDApLHVyPWZ9ZnVuY3Rpb24gRmwoQSl7dmFyIGUscixpLGY9MCxuPTAsdD0wO3JldHVybiBlPTB8UUEoQXw9MCwxKSxyPTB8UUEoQSw3KSxpPTB8UUEoQSw1KSxBPTB8UUEoQSxmPTEraXwwKSwwPCgwfHIpPyh0PStBZigxLHItMzF8MCksbj0tKHQqPSgwfEEpL0FmKDEsZikrMSksKyhuPShmPTA9PSgwfGUpKT90Om4pKToodD0tKG49KDB8QSkqQWYoMSwtMzEtaXwwKSksKyh0PShmPTA9PSgwfGUpKT9uOnQpKX1mdW5jdGlvbiBSbChBKXtBfD0wO3ZhciBlPTAscj0wLGk9MCxmPTAsbj0wLHQ9MDtpZig1NzI4ND09KDB8KHI9MHxhclsxNDMyMF0pKSlyZXR1cm4oQT0wKXxBO249ZT0wO2Rve2lmKHQ9MHxhcltyKzE2Pj4yXSxlPShmPSgwfG4pPCgwfChpPTB8amJbMTI3JmFyW3QrMTY+PjJdXShBKSkpKT90OmUsbj1mP2k6bixpPTB8YXJbcis0Pj4yXSlmb3Iocj1pO2k9MHxhcltyPj4yXTspcj1pO2Vsc2UgaWYoZj0wfGFyWyhpPXIrOHwwKT4+Ml0sKDB8YXJbZj4+Ml0pPT0oMHxyKSlyPWY7ZWxzZSBmb3IoO3Q9MHxhcltpPj4yXSxyPTB8YXJbKGk9dCs4fDApPj4yXSwoMHxhcltyPj4yXSkhPSgwfHQpOyk7fXdoaWxlKDU3Mjg0IT0oMHxyKSk7cmV0dXJuIDB8ZX1mdW5jdGlvbiBObChBLGUpe2V8PTA7dmFyIHIsaSxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTA7bz0wfGFyWyhiPShBfD0wKSs0fDApPj4yXSxyPWY9MHxhcltBPj4yXSwxMTkzMDQ2NDc8KG49KGw9KCh0PW8pLWZ8MCkvMzZ8MCkrMXwwKT4+PjAmJnpsKCksYT0odT0oKDB8YXJbKGk9QSs4fDApPj4yXSktZnwwKS8zNnwwKTw8MSxhPXU+Pj4wPDU5NjUyMzIzP2E+Pj4wPG4+Pj4wP246YToxMTkzMDQ2NDc7ZG97aWYoYSl7aWYoISgxMTkzMDQ2NDc8YT4+PjApKXtjPTB8aHUoMzYqYXwwKTticmVha31adShiPTB8WCg4KSw0NDUxOSksYXJbYj4+Ml09MTc2NjAsSSgwfGIsNDAxNiw0MjgpfWVsc2UgYz0wfXdoaWxlKDApO2lmKHU9YysoMzYqYXwwKXwwLGFyWyhmPW49YysoMzYqbHwwKXwwKT4+Ml09YXJbZT4+Ml0sYXJbbis0Pj4yXT1hcltlKzQ+PjJdLGFyW24rOD4+Ml09YXJbZSs4Pj4yXSxhcltuKzEyPj4yXT1hcltlKzEyPj4yXSxzPWUrMTZ8MCxhcltjKygzNipsfDApKzE2Pj4yXT1hcltzPj4yXSxhPWUrMjB8MCxhcltjKygzNipsfDApKzIwPj4yXT1hclthPj4yXSxhcltzPj4yXT0wLGE9YysoMzYqbHwoYXJbYT4+Ml09MCkpKzI0fDAsbD1lKzI0fDAsYXJbYT4+Ml09YXJbbD4+Ml0sYXJbYSs0Pj4yXT1hcltsKzQ+PjJdLGFyW2ErOD4+Ml09YXJbbCs4Pj4yXSxhPW4rMzZ8MCwoMHx0KSE9KDB8cikpe2Zvcig7dD0obD10KSstMzZ8MCxhclsoZT1uKy0zNnwwKT4+Ml09YXJbdD4+Ml0sYXJbZSs0Pj4yXT1hclt0KzQ+PjJdLGFyW2UrOD4+Ml09YXJbdCs4Pj4yXSxhcltlKzEyPj4yXT1hclt0KzEyPj4yXSxlPWwrLTIwfDAsYXJbbistMjA+PjJdPWFyW2U+PjJdLHM9bCstMTZ8MCxhcltuKy0xNj4+Ml09YXJbcz4+Ml0sYXJbZT4+Ml09MCxsPWwrLTEyfChhcltzPj4yXT0wKSxhclsocz1uKy0xMnwwKT4+Ml09YXJbbD4+Ml0sYXJbcys0Pj4yXT1hcltsKzQ+PjJdLGFyW3MrOD4+Ml09YXJbbCs4Pj4yXSxmPW49ZistMzZ8MCwoMHx0KSE9KDB8cik7KTtvPTB8YXJbQT4+Ml19aWYoYXJbQT4+Ml09ZixmPTB8YXJbYj4+Ml0sYXJbYj4+Ml09YSxhcltpPj4yXT11LCgwfGYpIT0oMHwodD1vKSkpZm9yKDtuPTB8YXJbZistMTY+PjJdLGY9ZistMzZ8MCwwfG4mJmR1KG4pLCgwfGYpIT0oMHx0KTspO28mJnZ1KG8pfWZ1bmN0aW9uIF9sKEEsZSxyLGksZixuLHQsbyxhLGMpe2V8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCx0fD0wLG98PTAsYXw9MCxjfD0wO3ZhciBsLHUsYjtpZih1PXVyPShiPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxsPTEyK3V8MCxBfD0wKXtpZihyPTB8dW4ociw2MDk2OCksZSl7Zm9yKGZzWzYzJmFyWzQ0KygwfGFyW3I+PjJdKT4+Ml1dKGwsciksQT0wfGFyW2w+PjJdLHRyW2k+PjBdPUEsdHJbaSsxPj4wXT1BPj44LHRyW2krMj4+MF09QT4+MTYsdHJbaSszPj4wXT1BPj4yNCxmc1s2MyZhclszMisoMHxhcltyPj4yXSk+PjJdXSh1LHIpLCgwfHRyWyhBPWErOCszfDApPj4wXSk8MD8oaT0wfGFyW2E+PjJdLGFyW2w+PjJdPTAsbG4oaSxsKSxhclthKzQ+PjJdPTApOihhcltsPj4yXT0wLGxuKGEsbCksdHJbQT4+MF09MCksTXUoYSwwKSxhclthPj4yXT1hclt1Pj4yXSxhclthKzQ+PjJdPWFyWzQrdT4+Ml0sYXJbYSs4Pj4yXT1hcls4K3U+PjJdLEE9MDszIT0oMHxBKTspQT1BKzF8KGFyW3UrKEE8PDIpPj4yXT0wKTtRdSh1KX1lbHNle2Zvcihmc1s2MyZhcls0MCsoMHxhcltyPj4yXSk+PjJdXShsLHIpLEE9MHxhcltsPj4yXSx0cltpPj4wXT1BLHRyW2krMT4+MF09QT4+OCx0cltpKzI+PjBdPUE+PjE2LHRyW2krMz4+MF09QT4+MjQsZnNbNjMmYXJbMjgrKDB8YXJbcj4+Ml0pPj4yXV0odSxyKSwoMHx0clsoQT1hKzgrM3wwKT4+MF0pPDA/KGk9MHxhclthPj4yXSxhcltsPj4yXT0wLGxuKGksbCksYXJbYSs0Pj4yXT0wKTooYXJbbD4+Ml09MCxsbihhLGwpLHRyW0E+PjBdPTApLE11KGEsMCksYXJbYT4+Ml09YXJbdT4+Ml0sYXJbYSs0Pj4yXT1hcls0K3U+PjJdLGFyW2ErOD4+Ml09YXJbOCt1Pj4yXSxBPTA7MyE9KDB8QSk7KUE9QSsxfChhclt1KyhBPDwyKT4+Ml09MCk7UXUodSl9Zm9yKEE9MHxqYlsxMjcmYXJbMTIrKDB8YXJbcj4+Ml0pPj4yXV0ociksYXJbZj4+Ml09QSxBPTB8amJbMTI3JmFyWzE2KygwfGFyW3I+PjJdKT4+Ml1dKHIpLGFyW24+PjJdPUEsZnNbNjMmYXJbMjArKDB8YXJbcj4+Ml0pPj4yXV0odSxyKSxBPSgoMHx0clsoQT10KzExfDApPj4wXSk8MD8oQT0wfGFyW3Q+PjJdLHRyW2w+PjBdPTAsUWYoQSxsKSxhclt0KzQ+PjJdPTApOih0cltsPj4wXT0wLFFmKHQsbCksdHJbQT4+MF09MCksdCksQ3UodCwwKSxhcltBPj4yXT1hclt1Pj4yXSxhcltBKzQ+PjJdPWFyWzQrdT4+Ml0sYXJbQSs4Pj4yXT1hcls4K3U+PjJdLEE9MDszIT0oMHxBKTspQT1BKzF8KGFyW3UrKEE8PDIpPj4yXT0wKTtmb3IoQnUodSksZnNbNjMmYXJbMjQrKDB8YXJbcj4+Ml0pPj4yXV0odSxyKSwoMHx0clsoQT1vKzgrM3wwKT4+MF0pPDA/KHQ9MHxhcltvPj4yXSxhcltsPj4yXT0wLGxuKHQsbCksYXJbbys0Pj4yXT0wKTooYXJbbD4+Ml09MCxsbihvLGwpLHRyW0E+PjBdPTApLE11KG8sMCksYXJbbz4+Ml09YXJbdT4+Ml0sYXJbbys0Pj4yXT1hcls0K3U+PjJdLGFyW28rOD4+Ml09YXJbOCt1Pj4yXSxBPTA7MyE9KDB8QSk7KUE9QSsxfChhclt1KyhBPDwyKT4+Ml09MCk7UXUodSksQT0wfGpiWzEyNyZhclszNisoMHxhcltyPj4yXSk+PjJdXShyKX1lbHNle2lmKHI9MHx1bihyLDYwOTYwKSxlKXtmb3IoZnNbNjMmYXJbNDQrKDB8YXJbcj4+Ml0pPj4yXV0obCxyKSxBPTB8YXJbbD4+Ml0sdHJbaT4+MF09QSx0cltpKzE+PjBdPUE+PjgsdHJbaSsyPj4wXT1BPj4xNix0cltpKzM+PjBdPUE+PjI0LGZzWzYzJmFyWzMyKygwfGFyW3I+PjJdKT4+Ml1dKHUsciksKDB8dHJbKEE9YSs4KzN8MCk+PjBdKTwwPyhpPTB8YXJbYT4+Ml0sYXJbbD4+Ml09MCxsbihpLGwpLGFyW2ErND4+Ml09MCk6KGFyW2w+PjJdPTAsbG4oYSxsKSx0cltBPj4wXT0wKSxNdShhLDApLGFyW2E+PjJdPWFyW3U+PjJdLGFyW2ErND4+Ml09YXJbNCt1Pj4yXSxhclthKzg+PjJdPWFyWzgrdT4+Ml0sQT0wOzMhPSgwfEEpOylBPUErMXwoYXJbdSsoQTw8Mik+PjJdPTApO1F1KHUpfWVsc2V7Zm9yKGZzWzYzJmFyWzQwKygwfGFyW3I+PjJdKT4+Ml1dKGwsciksQT0wfGFyW2w+PjJdLHRyW2k+PjBdPUEsdHJbaSsxPj4wXT1BPj44LHRyW2krMj4+MF09QT4+MTYsdHJbaSszPj4wXT1BPj4yNCxmc1s2MyZhclsyOCsoMHxhcltyPj4yXSk+PjJdXSh1LHIpLCgwfHRyWyhBPWErOCszfDApPj4wXSk8MD8oaT0wfGFyW2E+PjJdLGFyW2w+PjJdPTAsbG4oaSxsKSxhclthKzQ+PjJdPTApOihhcltsPj4yXT0wLGxuKGEsbCksdHJbQT4+MF09MCksTXUoYSwwKSxhclthPj4yXT1hclt1Pj4yXSxhclthKzQ+PjJdPWFyWzQrdT4+Ml0sYXJbYSs4Pj4yXT1hcls4K3U+PjJdLEE9MDszIT0oMHxBKTspQT1BKzF8KGFyW3UrKEE8PDIpPj4yXT0wKTtRdSh1KX1mb3IoQT0wfGpiWzEyNyZhclsxMisoMHxhcltyPj4yXSk+PjJdXShyKSxhcltmPj4yXT1BLEE9MHxqYlsxMjcmYXJbMTYrKDB8YXJbcj4+Ml0pPj4yXV0ociksYXJbbj4+Ml09QSxmc1s2MyZhclsyMCsoMHxhcltyPj4yXSk+PjJdXSh1LHIpLEE9KCgwfHRyWyhBPXQrMTF8MCk+PjBdKTwwPyhBPTB8YXJbdD4+Ml0sdHJbbD4+MF09MCxRZihBLGwpLGFyW3QrND4+Ml09MCk6KHRyW2w+PjBdPTAsUWYodCxsKSx0cltBPj4wXT0wKSx0KSxDdSh0LDApLGFyW0E+PjJdPWFyW3U+PjJdLGFyW0ErND4+Ml09YXJbNCt1Pj4yXSxhcltBKzg+PjJdPWFyWzgrdT4+Ml0sQT0wOzMhPSgwfEEpOylBPUErMXwoYXJbdSsoQTw8Mik+PjJdPTApO2ZvcihCdSh1KSxmc1s2MyZhclsyNCsoMHxhcltyPj4yXSk+PjJdXSh1LHIpLCgwfHRyWyhBPW8rOCszfDApPj4wXSk8MD8odD0wfGFyW28+PjJdLGFyW2w+PjJdPTAsbG4odCxsKSxhcltvKzQ+PjJdPTApOihhcltsPj4yXT0wLGxuKG8sbCksdHJbQT4+MF09MCksTXUobywwKSxhcltvPj4yXT1hclt1Pj4yXSxhcltvKzQ+PjJdPWFyWzQrdT4+Ml0sYXJbbys4Pj4yXT1hcls4K3U+PjJdLEE9MDszIT0oMHxBKTspQT1BKzF8KGFyW3UrKEE8PDIpPj4yXT0wKTtRdSh1KSxBPTB8amJbMTI3JmFyWzM2KygwfGFyW3I+PjJdKT4+Ml1dKHIpfWFyW2M+PjJdPUEsdXI9Yn1mdW5jdGlvbiBZbChBLGUscixpLGYsbix0LG8sYSxjLGwsdSxiLHMsZCl7QXw9MCxlfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsb3w9MCxhfD0wLGN8PTAsbHw9MCx1fD0wLGJ8PTAsc3w9MCxkfD0wO3ZhciBrLGgsdyx2LG0sZyxaLHAseT0wLEI9MCxFPTAsWD0wLFc9MCxJPTAsQz0wLEc9MCxWPTAsRj0wLFI9MDtmb3IoYXJbKHJ8PTApPj4yXT1BLGs9cys4KzN8MCxwPXMrNHwwLGg9Yis4KzN8MCx3PWIrNHwwLHY9MD09KDUxMiZpfDApLG09MDwoMHxkKSxnPXUrMTF8MCxaPXUrNHwwLEY9MDs0IT0oMHxGKTspe0E6ZG97c3dpdGNoKDB8dHJbYStGPj4wXSl7Y2FzZSAwOmFyW2U+PjJdPWFyW3I+PjJdO2JyZWFrO2Nhc2UgMTphcltlPj4yXT1hcltyPj4yXSxHPTB8SGJbMzEmYXJbNDQrKDB8YXJbdD4+Ml0pPj4yXV0odCwzMiksVj0wfGFyW3I+PjJdLGFyW3I+PjJdPVYrNCxhcltWPj4yXT1HO2JyZWFrO2Nhc2UgMzowfCgoeT0oVj0wfHRyW2s+PjBdKTw8MjQ+PjI0PDApPzB8YXJbcD4+Ml06MjU1JlYpJiYoRz0wfGFyWyh5PzB8YXJbcz4+Ml06cyk+PjJdLFY9MHxhcltyPj4yXSxhcltyPj4yXT1WKzQsYXJbVj4+Ml09Ryk7YnJlYWs7Y2FzZSAyOmlmKCEodnwwPT0oMHwoVz0oeT0oVz0wfHRyW2g+PjBdKTw8MjQ+PjI0PDApPzB8YXJbdz4+Ml06MjU1JlcpKSkpe2ZvcihCPShYPXk/MHxhcltiPj4yXTpiKSsoVzw8Mil8MCx5PUU9MHxhcltyPj4yXTsoMHxYKSE9KDB8Qik7KWFyW3k+PjJdPWFyW1g+PjJdLHk9eSs0fDAsWD1YKzR8MDthcltyPj4yXT1FKyhXPDwyKX1icmVhaztjYXNlIDQ6Zm9yKEI9MHxhcltyPj4yXSx5PWY9bz9mKzR8MDpmOyEobj4+PjA8PXk+Pj4wKSYmMHx4Yls2MyZhclsxMisoMHxhclt0Pj4yXSk+PjJdXSh0LDIwNDgsMHxhclt5Pj4yXSk7KXk9eSs0fDA7aWYobSl7Zm9yKFg9ZDtmPj4+MDx5Pj4+MCYoRT0wPCgwfFgpKTspQz0wfGFyWyhWPXkrLTR8MCk+PjJdLEc9MHxhcltyPj4yXSxhcltyPj4yXT1HKzQsYXJbRz4+Ml09QyxYPVgrLTF8MCx5PVY7Zm9yKEk9RT8wfEhiWzMxJmFyWzQ0KygwfGFyW3Q+PjJdKT4+Ml1dKHQsNDgpOjAsVz0wfGFyW3I+PjJdO0U9Vys0fDAsISgoMHxYKTw9MCk7KWFyW1c+PjJdPUksWD1YKy0xfDAsVz1FO2FyW3I+PjJdPUUsYXJbVz4+Ml09Y31pZigoMHx5KT09KDB8ZikpRz0wfEhiWzMxJmFyWzQ0KygwfGFyW3Q+PjJdKT4+Ml1dKHQsNDgpLHk9KFY9MHxhcltyPj4yXSkrNHwwLGFyW3I+PjJdPXksYXJbVj4+Ml09RztlbHNle2ZvcihHPShWPTB8dHJbZz4+MF0pPDwyND4+MjQ8MCxWJj0yNTUsST1FPShXPTB8KEc/MHxhcltaPj4yXTpWKT8wfHRyWyhHPzB8YXJbdT4+Ml06dSk+PjBdOi0xLDApOygwfHkpIT0oMHxmKTspWD0wfGFyW3I+PjJdLCgwfEkpPT0oMHxXKSYmKEM9WCs0fDAsYXJbcj4+Ml09QyxhcltYPj4yXT1sLFg9KEk9KFc9KEU9RSsxfDApPj4+MDwoRz8wfGFyW1o+PjJdOlYpPj4+MD8oVz0wfHRyWyhHPzB8YXJbdT4+Ml06dSkrRT4+MF0pPDwyND4+MjQ9PTEyNz8tMTpXPDwyND4+MjQ6SSwwKSxDKSksUj0wfGFyWyhDPXkrLTR8MCk+PjJdLGFyW3I+PjJdPVgrNCxhcltYPj4yXT1SLEk9SSsxfDAseT1DO3k9MHxhcltyPj4yXX1pZigoMHxCKSE9KDB8eSkpZm9yKDs7KXtpZigoeT15Ky00fDApPj4+MDw9Qj4+PjApYnJlYWsgQTtSPTB8YXJbQj4+Ml0sYXJbQj4+Ml09YXJbeT4+Ml0sYXJbeT4+Ml09UixCPUIrNHwwfX19d2hpbGUoMCk7Rj1GKzF8MH1pZigxPChmPSh5PShmPTB8dHJbaz4+MF0pPDwyND4+MjQ8MCk/MHxhcltwPj4yXToyNTUmZik+Pj4wKXtmb3IoWD0oeT15PzB8YXJbcz4+Ml06cykrNHwwLEU9KHk9eSsoZjw8Mil8MCktWHwwLGY9Qj0wfGFyW3I+PjJdOygwfFgpIT0oMHx5KTspYXJbZj4+Ml09YXJbWD4+Ml0sZj1mKzR8MCxYPVgrNHwwO2FyW3I+PjJdPUIrKEU+Pj4yPDwyKX1zd2l0Y2goKDE3NiZpKTw8MjQ+PjI0KXtjYXNlIDMyOmFyW2U+PjJdPWFyW3I+PjJdO2JyZWFrO2Nhc2UgMTY6YnJlYWs7ZGVmYXVsdDphcltlPj4yXT1BfX1mdW5jdGlvbiBRbChBKXt2YXIgZTthclsoQXw9MCk+PjJdPTE2OTg4LCgwfCgwfGFyWyhlPUErOHwwKT4+Ml0pKSE9KDB8ZG4oKSkmJm9mKDB8YXJbZT4+Ml0pLGFuKCl9ZnVuY3Rpb24gRGwoQSl7dmFyIGUscixpPTAsZj0wO2ZvcihhclsoQXw9MCk+PjJdPTE3MDM2LGU9QSs4fDAscj1BKzEyfDAsZj0wO2k9MHxhcltlPj4yXSwhKGY+Pj4wPj0oMHxhcltyPj4yXSktaT4+Mj4+PjApOykwfChpPTB8YXJbaSsoZjw8Mik+PjJdKSYmbHUoaSksZj1mKzF8MDtCdShBKzE0NHwwKSxmdW5jdGlvbihBKXt2YXIgZSxyPTAsaT0wLGY9MDtlPTB8YXJbKEF8PTApPj4yXTtkb3tpZigwfGUpe2ZvcihpPTB8YXJbKHI9QSs0fDApPj4yXTsoMHxpKSE9KDB8ZSk7KWY9aSstNHwwLGFyW3I+PjJdPWYsaT1mO2lmKChBKzE2fDApPT0oMHxlKSl7dHJbQSsxMjg+PjBdPTA7YnJlYWt9dnUoZSk7YnJlYWt9fXdoaWxlKDApfShlKSxhbigpfWZ1bmN0aW9uIEpsKEEpe3ZhciBlO2FyWyhBfD0wKT4+Ml09MTcwNTYsMHwoZT0wfGFyW0ErOD4+Ml0pJiYwfHRyW0ErMTI+PjBdJiZtdShlKSxhbigpfWZ1bmN0aW9uIE1sKCl7cmV0dXJuIDB8YXJbMzExOF19ZnVuY3Rpb24gVGwoKXtyZXR1cm4gMHxhclsyNzMzXX1mdW5jdGlvbiBVbCgpe3JldHVybiAwfGFyWzI3MzJdfWZ1bmN0aW9uIFNsKEEpe2FyWyhBfD0wKT4+Ml09MTcxMDgsQnUoQSsxMnwwKSxhbigpfWZ1bmN0aW9uIE9sKEEpe2FyWyhBfD0wKT4+Ml09MTcxNDgsQnUoQSsxNnwwKSxhbigpfWZ1bmN0aW9uIHpsKCl7bEEoKX1mdW5jdGlvbiBqbChBLGUpe2V8PTA7dmFyIHIsaSxmLG4sdCxvLGEsYyxsLHUsYixzLGQsayxoLHcsdixtLGcsWixwLHksQixFLFgsVyxJLEMsRyxWLEYsUixOLF8sWSxRLEQsSixNLFQsVSxTLE8seixqLEgseCxQLEwsSyxxLCQsQUEsZUEsckEsaUEsZkEsbkEsdEEsb0EsYUEsY0EsbEE9MCx1QT0wLGJBPTAsc0E9MDtmb3Iocj11cj0oaT11cikrMzEmLTMyLHVyPXVyKzE2fDAsYXJbKEF8PTApKzQ+PjJdPWUrLTEsYXJbQT4+Ml09MTcwMzYsZj1sQT1BKzh8MCxuPTI4LG58PTAsYXJbKGZ8PTApPj4yXT0wLGFyW2YrND4+Ml09MCxhcltmKzg+PjJdPTAsKHRyW2YrMTI4Pj4wXT0wKXxuJiYoZnVuY3Rpb24oQSxlKXt2YXIgcj0wOygwfExsKEF8PTApKT4+PjA8KGV8PTApPj4+MCYmemwoKTtyPWU+Pj4wPDI5JjA9PSgwfHRyWyhyPUErMTI4fDApPj4wXSk/KHRyW3I+PjBdPTEsQSsxNnwwKTowfGh1KGU8PDIpO2FyW0ErND4+Ml09cixhcltBPj4yXT1yLGFyW0ErOD4+Ml09cisoZTw8Mil9KGYsbiksUGwoZixuKSksYXJbKGU9QSsxNDR8MCk+PjJdPTAsYXJbZSs0Pj4yXT0wLDQyOTQ5NjcyNzk8KHVBPShhcltlKzg+PjJdPTApfFlmKDUzNjg0KSk+Pj4wJiZwdSgpLHVBPj4+MDwxMT90cltlKzExPj4wXT11QTooYkE9MHxodShzQT11QSsxNiYtMTYpLGFyW2U+PjJdPWJBLGFyW0ErMTUyPj4yXT0tMjE0NzQ4MzY0OHxzQSxhcltBKzE0OD4+Ml09dUEsZT1iQSksd2YoZSw1MzY4NCx1QSksUWYoZSt1QXwodHJbcj4+MF09MCksciksZT0wfGFyW2xBPj4yXSx1QT0wfGFyWyhsQT1BKzEyfDApPj4yXTsoMHx1QSkhPSgwfGUpOylzQT11QSstNHwwLHVBPWFyW2xBPj4yXT1zQTthclsxNDE5OV09MCxhclsxNDE5OF09MTQ3MDAsdD1BLG89NTY3OTIsSGwodHw9MCxvfD0wLDB8aG4oNTkyMTYpKSxhclsxNDIwMV09MCxhclsxNDIwMF09MTQ3MzIsYT1BLGM9NTY4MDAsSGwoYXw9MCxjfD0wLDB8aG4oNTkyMjQpKSxmdW5jdGlvbihBLGUscixpKXtlfD0wLHJ8PTAsaXw9MCxhcls0KyhBfD0wKT4+Ml09aSstMSxhcltBPj4yXT0xNzA1NixhclsoaT1BKzh8MCk+PjJdPWUsdHJbQSsxMj4+MF09MSZyLGV8fChyPTB8VWwoKSxhcltpPj4yXT1yKX0oNTY4MDgsMCwwLDEpLGw9QSx1PTU2ODA4LEhsKGx8PTAsdXw9MCwwfGhuKDU5MjMyKSksYXJbMTQyMDddPTAsYXJbMTQyMDZdPTE3MjUyLGI9QSxzPTU2ODI0LEhsKGJ8PTAsc3w9MCwwfGhuKDU5MjY0KSksYXJbMTQyMDldPTAsYXJbMTQyMDhdPTE3MzIwLGQ9QSxrPTU2ODMyLEhsKGR8PTAsa3w9MCwwfGhuKDYxMDI0KSksZnVuY3Rpb24oQSxlKXtlfD0wLGFyWzQrKEF8PTApPj4yXT1lKy0xLGFyW0E+PjJdPTE2OTg4LGU9MHxkbigpLGFyW0ErOD4+Ml09ZX0oNTY4NDAsMSksaD1BLHc9NTY4NDAsSGwoaHw9MCx3fD0wLDB8aG4oNjEwMzIpKSxhclsxNDIxNV09MCxhclsxNDIxNF09MTczNjgsdj1BLG09NTY4NTYsSGwodnw9MCxtfD0wLDB8aG4oNjEwNDApKSxhclsxNDIxN109MCxhclsxNDIxNl09MTc0MTYsZz1BLFo9NTY4NjQsSGwoZ3w9MCxafD0wLDB8aG4oNjEwNDgpKSxmdW5jdGlvbihBLGUpe2ZvcihlfD0wLGFyWzQrKEF8PTApPj4yXT1lKy0xLGFyW0E+PjJdPTE3MTA4LHRyW0ErOD4+MF09NDYsdHJbQSs5Pj4wXT00NCxhclsoZT1BKzEyfDApPj4yXT0wLGFyW2UrND4+Ml09MCxhcltlKzg+PjJdPTAsQT0wOzMhPSgwfEEpOylhcltlKyhBPDwyKT4+Ml09MCxBPUErMXwwfSg1Njg3MiwxKSxwPUEseT01Njg3MixIbChwfD0wLHl8PTAsMHxobig1OTI0OCkpLGZ1bmN0aW9uKEEsZSl7Zm9yKGV8PTAsYXJbNCsoQXw9MCk+PjJdPWUrLTEsYXJbQT4+Ml09MTcxNDgsYXJbQSs4Pj4yXT00NixhcltBKzEyPj4yXT00NCxhclsoZT1BKzE2fDApPj4yXT0wLGFyW2UrND4+Ml09MCxhcltlKzg+PjJdPTAsQT0wOzMhPSgwfEEpOylhcltlKyhBPDwyKT4+Ml09MCxBPUErMXwwfSg1Njg5NiwxKSxCPUEsRT01Njg5NixIbChCfD0wLEV8PTAsMHxobig1OTI3MikpLGFyWzE0MjMzXT0wLGFyWzE0MjMyXT0xNDc2NCxYPUEsVz01NjkyOCxIbChYfD0wLFd8PTAsMHxobig1OTI1NikpLGFyWzE0MjM1XT0wLGFyWzE0MjM0XT0xNDgyOCxJPUEsQz01NjkzNixIbChJfD0wLEN8PTAsMHxobig1OTI4MCkpLGFyWzE0MjM3XT0wLGFyWzE0MjM2XT0xNDg5MixHPUEsVj01Njk0NCxIbChHfD0wLFZ8PTAsMHxobig1OTI4OCkpLGFyWzE0MjM5XT0wLGFyWzE0MjM4XT0xNDk0NCxGPUEsUj01Njk1MixIbChGfD0wLFJ8PTAsMHxobig1OTI5NikpLGFyWzE0MjQxXT0wLGFyWzE0MjQwXT0xNjQ5MixOPUEsXz01Njk2MCxIbChOfD0wLF98PTAsMHxobig2MDk0NCkpLGFyWzE0MjQzXT0wLGFyWzE0MjQyXT0xNjU0OCxZPUEsUT01Njk2OCxIbChZfD0wLFF8PTAsMHxobig2MDk1MikpLGFyWzE0MjQ1XT0wLGFyWzE0MjQ0XT0xNjYwNCxEPUEsSj01Njk3NixIbChEfD0wLEp8PTAsMHxobig2MDk2MCkpLGFyWzE0MjQ3XT0wLGFyWzE0MjQ2XT0xNjY2MCxNPUEsVD01Njk4NCxIbChNfD0wLFR8PTAsMHxobig2MDk2OCkpLGFyWzE0MjQ5XT0wLGFyWzE0MjQ4XT0xNjcxNixVPUEsUz01Njk5MixIbChVfD0wLFN8PTAsMHxobig2MDk3NikpLGFyWzE0MjUxXT0wLGFyWzE0MjUwXT0xNjc0NCxPPUEsej01N2UzLEhsKE98PTAsenw9MCwwfGhuKDYwOTg0KSksYXJbMTQyNTNdPTAsYXJbMTQyNTJdPTE2NzcyLGo9QSxIPTU3MDA4LEhsKGp8PTAsSHw9MCwwfGhuKDYwOTkyKSksYXJbMTQyNTVdPTAsYXJbMTQyNTRdPTE2ODAwLHg9QSxQPTU3MDE2LEhsKHh8PTAsUHw9MCwwfGhuKDYxZTMpKSxhclsxNDI1N109MCxhclsxNDI1Nl09MTcyMzIsZnVuY3Rpb24oQSl7YXJbKEF8PTApPj4yXT0xNzQ2NH0oNTcwMzIpLGFyWzE0MjU2XT0xNDk5NixhclsxNDI1OF09MTUwNDQsTD1BLEs9NTcwMjQsSGwoTHw9MCxLfD0wLDB8aG4oNjAxMDgpKSxhclsxNDI2MV09MCxhclsxNDI2MF09MTcyMzIsZnVuY3Rpb24oQSl7YXJbKEF8PTApPj4yXT0xNzUwMH0oNTcwNDgpLGFyWzE0MjYwXT0xNTA4MCxhclsxNDI2Ml09MTUxMjgscT1BLCQ9NTcwNDAsSGwocXw9MCwkfD0wLDB8aG4oNjA5MjApKSxhclsxNDI2NV09MCxhclsxNDI2NF09MTcyMzIsQUE9MHxkbigpLGFyWzE0MjY2XT1BQSxhclsxNDI2NF09MTY0NDQsZUE9QSxyQT01NzA1NixIbChlQXw9MCxyQXw9MCwwfGhuKDYwOTI4KSksYXJbMTQyNjldPTAsYXJbMTQyNjhdPTE3MjMyLGlBPTB8ZG4oKSxhclsxNDI3MF09aUEsYXJbMTQyNjhdPTE2NDY4LGZBPUEsbkE9NTcwNzIsSGwoZkF8PTAsbkF8PTAsMHxobig2MDkzNikpLGFyWzE0MjczXT0wLGFyWzE0MjcyXT0xNjgyOCx0QT1BLG9BPTU3MDg4LEhsKHRBfD0wLG9BfD0wLDB8aG4oNjEwMDgpKSxhclsxNDI3NV09MCxhclsxNDI3NF09MTY4NjAsYUE9QSxjQT01NzA5NixIbChhQXw9MCxjQXw9MCwwfGhuKDYxMDE2KSksdXI9aX1mdW5jdGlvbiBIbChBLGUscil7QXw9MCxyfD0wO3ZhciBpLGY9MDthdShlfD0wKSxmPTB8YXJbKGk9QSs4fDApPj4yXSwoMHxhcltBKzEyPj4yXSktZj4+Mj4+PjA+cj4+PjA/QT1pOihmdW5jdGlvbihBLGUpe2V8PTA7dmFyIHIsaSxmPTAsbj0wO2Y9MHxhclsoaT00KyhBfD0wKXwwKT4+Ml0sbj0wfGFyW0E+PjJdLHI9Zi1uPj4yO0E6ZG97aWYoZT4+PjA8PXI+Pj4wKXtpZihlPj4+MDxyPj4+MClmb3IoQT1uKyhlPDwyKXwwOzspe2lmKCgwfGYpPT0oMHxBKSlicmVhayBBO249ZistNHwwLGFyW2k+PjJdPW4sZj1ufX1lbHNlIHhsKEEsZS1yfDApfXdoaWxlKDApfShpLHIrMXwwKSxmPTB8YXJbKEE9aSk+PjJdKSwwfChmPTB8YXJbZisocjw8Mik+PjJdKSYmbHUoZiksYXJbKDB8YXJbQT4+Ml0pKyhyPDwyKT4+Ml09ZX1mdW5jdGlvbiB4bChBLGUpe2V8PTA7dmFyIHIsaSxmLG49MCx0PTAsbz0wLGE9MCxjPTA7cj11cj0oZj11cikrMzEmLTMyLHVyPXVyKzMyfDAsbz0oQXw9MCkrOHwwLG49MHxhclsoaT1BKzR8MCk+PjJdO2Rve2lmKCgwfGFyW28+PjJdKS1uPj4yPj4+MDxlPj4+MCl7aWYobj0obi0oMHxhcltBPj4yXSk+PjIpK2V8MCwhKCh0PTB8TGwoKSk+Pj4wPG4+Pj4wKSl7YT0wfGFyW0E+PjJdLG89KGM9KDB8YXJbbz4+Ml0pLWF8MCk+PjEsS2wocixjPj4yPj4+MDx0Pj4+MT4+PjA/bz4+PjA8bj4+PjA/bjpvOnQsKDB8YXJbaT4+Ml0pLWE+PjIsQSsxNnwwKSxxbChyLGUpLCRsKEEsciksQXUocik7YnJlYWt9emwoKX1lbHNlIFBsKEEsZSl9d2hpbGUoMCk7dXI9Zn1mdW5jdGlvbiBQbChBLGUpe3ZhciByO2ZvcihyPShBfD0wKSs0fDAsQT1lfD0wLGU9MHxhcltyPj4yXTtlPTQrKChhcltlPj4yXT0wKXxhcltyPj4yXSl8MCxhcltyPj4yXT1lLDAhPSgwfChBPUErLTF8MCkpOyk7fWZ1bmN0aW9uIExsKCl7cmV0dXJuIDEwNzM3NDE4MjN9ZnVuY3Rpb24gS2woQSxlLHIsaSl7ZXw9MCxyfD0wLGl8PTA7dmFyIGY9MDthclsoQXw9MCkrMTI+PjJdPTAsYXJbQSsxNj4+Ml09aTtkb3tpZihlKXtpZihlPj4+MDwyOSYwPT0oMHx0clsoZj1pKzExMnwwKT4+MF0pKXt0cltmPj4wXT0xO2JyZWFrfWk9MHxodShlPDwyKTticmVha31pPTB9d2hpbGUoMCk7cj0oYXJbQT4+Ml09aSkrKHI8PDIpfDAsYXJbQSs4Pj4yXT1yLGFyW0ErND4+Ml09cixhcltBKzEyPj4yXT1pKyhlPDwyKX1mdW5jdGlvbiBxbChBLGUpe3ZhciByO2ZvcihyPShBfD0wKSs4fDAsQT1lfD0wLGU9MHxhcltyPj4yXTtlPTQrKChhcltlPj4yXT0wKXxhcltyPj4yXSl8MCxhcltyPj4yXT1lLDAhPSgwfChBPUErLTF8MCkpOyk7fWZ1bmN0aW9uICRsKEEsZSl7ZXw9MDt2YXIgcj0wLGk9MCxmPTAsbj0wLHQ9MDtpPTB8YXJbKEF8PTApPj4yXSxuPWUrNHwwLGY9KDB8YXJbKHQ9QSs0fDApPj4yXSktaXwwLHI9KDB8YXJbbj4+Ml0pKygwLShmPj4yKTw8Mil8MCxhcltuPj4yXT1yLDA8KDB8Zik/KGhiKDB8ciwwfGksMHxmKSxyPTB8YXJbKGk9bik+PjJdKTppPW4sbj0wfGFyW0E+PjJdLGFyW0E+PjJdPXIsYXJbaT4+Ml09bixuPWUrOHwwLGY9MHxhclt0Pj4yXSxhclt0Pj4yXT1hcltuPj4yXSxhcltuPj4yXT1mLHQ9ZSsxMnwwLEE9MHxhclsobj1BKzh8MCk+PjJdLGFyW24+PjJdPWFyW3Q+PjJdLGFyW3Q+PjJdPUEsYXJbZT4+Ml09YXJbaT4+Ml19ZnVuY3Rpb24gQXUoQSl7dmFyIGU9MCxyPTAsaT0wLGY9MDtmb3IoZT0wfGFyWyhBfD0wKSs0Pj4yXSxpPTB8YXJbKHI9QSs4fDApPj4yXTsoMHxpKSE9KDB8ZSk7KWY9aSstNHwwLGk9YXJbcj4+Ml09ZjtyPTB8YXJbQT4+Ml07ZG97aWYoMHxyKXtpZigoMHwoZT0wfGFyW0ErMTY+PjJdKSk9PSgwfHIpKXt0cltlKzExMj4+MF09MDticmVha312dShyKTticmVha319d2hpbGUoMCl9ZnVuY3Rpb24gZXUoKXtyZXR1cm4gMD09KDB8dHJbNTcxMDRdKSYmMHxpYig1NzEwNCkmJihqbCg1NzExMiwxKSxhclsxNTI2NF09NTcxMTIsYXJbMTUyNjVdPTYxMDU2KSwwfGFyWzE1MjY1XX1mdW5jdGlvbiBydShBLGUpe0F8PTAsZT0wfGFyWyhlfD0wKT4+Ml0sYXUoYXJbQT4+Ml09ZSl9ZnVuY3Rpb24gaXUoKXtyZXR1cm4gMD09KDB8dHJbNTcyNzJdKSYmMHxpYig1NzI3MikmJihydSg2MTA2NCwwfGV1KCkpLGFyWzE1MjY3XT02MTA2NCksMHxhclsxNTI2N119ZnVuY3Rpb24gZnUoQSl7QXw9MDt2YXIgZT0wO2U9MHxpdSgpLGU9MHxhcltlPj4yXSxhdShhcltBPj4yXT1lKX1mdW5jdGlvbiBudShBLGUscil7cmV0dXJuIEF8PTAsZXw9MCwwfChBPShyfD0wKT8wfGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTAscnw9MDt2YXIgaT0wLGY9MDtBOmRve2lmKHIpe2Zvcig7KGk9MHx0cltBPj4wXSk8PDI0Pj4yND09KGY9MHx0cltlPj4wXSk8PDI0Pj4yNDspe2lmKCEocj1yKy0xfDApKXtBPTA7YnJlYWsgQX1BPUErMXwwLGU9ZSsxfDB9QT0oMjU1JmkpLSgyNTUmZil8MH1lbHNlIEE9MH13aGlsZSgwKTtyZXR1cm4gMHxBfShBLGUscik6MCl9ZnVuY3Rpb24gdHUoKXswfWZ1bmN0aW9uIG91KEEpezB9ZnVuY3Rpb24gYXUoQSl7Y3UoKEF8PTApKzR8MCl9ZnVuY3Rpb24gY3UoQSl7YXJbKEF8PTApPj4yXT0xKygwfGFyW0E+PjJdKX1mdW5jdGlvbiBsdShBKXtyZXR1cm4gMHwoQT0tMT09KDB8dXUoKEF8PTApKzR8MCkpPyhpc1s1MTEmYXJbOCsoMHxhcltBPj4yXSk+PjJdXShBKSwxKTowKX1mdW5jdGlvbiB1dShBKXt2YXIgZTtyZXR1cm4gZT0wfGFyWyhBfD0wKT4+Ml0sYXJbQT4+Ml09ZS0xLGUtMXwwfWZ1bmN0aW9uIGJ1KEEpe2F1KEF8PTApfWZ1bmN0aW9uIHN1KEEpe2N1KChBfD0wKSs4fDApfWZ1bmN0aW9uIGR1KEEpezB8bHUoQXw9MCkmJmt1KEEpfWZ1bmN0aW9uIGt1KEEpe3ZhciBlOzAhPSgwfGFyWyhlPShBfD0wKSs4fDApPj4yXSkmJi0xIT0oMHx1dShlKSl8fGlzWzUxMSZhclsxNisoMHxhcltBPj4yXSk+PjJdXShBKX1mdW5jdGlvbiBodShBKXt2YXIgZTtmb3IoZT0wPT0oMHwoQXw9MCkpPzE6QTshKDB8KEE9MHx5YyhlKSkpOyl7aWYoIShBPTB8ZmIoKSkpe0E9MDticmVha31yc1s3JkFdKCl9cmV0dXJuIDB8QX1mdW5jdGlvbiB3dShBKXtyZXR1cm4gMHxodShBfD0wKX1mdW5jdGlvbiB2dShBKXtCYyhBfD0wKX1mdW5jdGlvbiBtdShBKXt2dShBfD0wKX1mdW5jdGlvbiBndSgpe2xBKCl9ZnVuY3Rpb24gWnUoQSxlKXtlfD0wLGFyWyhBfD0wKT4+Ml09MTc2NDAsZnVuY3Rpb24oQSxlKXtBfD0wO3ZhciByLGksZj0wO2Y9MHxodSgxMysocj0wfFZjKGV8PTApKXwwKSxhcltmPj4yXT1yLGFyW2YrND4+Ml09cixoYigoYXJbZis4Pj4yXT0wKXwoZj0wfChpPWYsMTIrKGl8PTApfDApKSwwfGUsMStyfDApLGFyW0E+PjJdPWZ9KEErNHwwLGUpfWZ1bmN0aW9uIHB1KCl7bEEoKX1mdW5jdGlvbiB5dShBLGUpe2V8PTA7dmFyIHIsaSxmPTAsbj0wLHQ9MDtyPXVyPShpPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxhclsoQXw9MCk+PjJdPTAsYXJbQSs0Pj4yXT0wLCgoYXJbQSs4Pj4yXT0wKXx0cltlKzExPj4wXSk8MD8oZj0wfGFyW2U+PjJdLDQyOTQ5NjcyNzk8KGU9MHxhcltlKzQ+PjJdKT4+PjAmJnB1KCksZT4+PjA8MTE/dHJbQSsxMT4+MF09ZToobj0wfGh1KHQ9ZSsxNiYtMTYpLGFyW0E+PjJdPW4sYXJbQSs4Pj4yXT0tMjE0NzQ4MzY0OHx0LGFyW0ErND4+Ml09ZSxBPW4pLHdmKEEsZixlKSxRZihBK2V8KHRyW3I+PjBdPTApLHIpKTooYXJbQT4+Ml09YXJbZT4+Ml0sYXJbQSs0Pj4yXT1hcltlKzQ+PjJdLGFyW0ErOD4+Ml09YXJbZSs4Pj4yXSksdXI9aX1mdW5jdGlvbiBCdShBKXsoMHx0clsoQXw9MCkrMTE+PjBdKTwwJiZ2dSgwfGFyW0E+PjJdKX1mdW5jdGlvbiBFdShBLGUpe3ZhciByPTAsaT0wO3JldHVybigwfChBfD0wKSkhPSgwfChlfD0wKSkmJlh1KEEsKGk9KHI9MHx0cltlKzExPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW2U+PjJdOmUsaT8wfGFyW2UrND4+Ml06MjU1JnIpLDB8QX1mdW5jdGlvbiBYdShBLGUscil7ZXw9MCxyfD0wO3ZhciBpLGYsbix0LG89MCxhPTA7Zj11cj0odD11cikrMzEmLTMyLHVyPXVyKzE2fDAsYT0oaT0obz0wfHRyWyhuPShBfD0wKSsxMXwwKT4+MF0pPDwyND4+MjQ8MCk/KDIxNDc0ODM2NDcmYXJbQSs4Pj4yXSktMXwwOjEwO2Rve2lmKHI+Pj4wPD1hPj4+MCl7aWYoV3Uobz1pPzB8YXJbQT4+Ml06QSxlLHIpLFFmKG8rcnwodHJbZj4+MF09MCksZiksKDB8dHJbbj4+MF0pPDApe2FyW0ErND4+Ml09cjticmVha310cltuPj4wXT1yO2JyZWFrfWk/bz0wfGFyW0ErND4+Ml06byY9MjU1LEl1KEEsYSxyLWF8MCxvLDAsbyxyLGUpfXdoaWxlKDApO3JldHVybiB1cj10LDB8QX1mdW5jdGlvbiBXdShBLGUscil7cmV0dXJuIEF8PTAsZXw9MCwwfChyfD0wKSYmd2IoMHxBLDB8ZSwwfHIpLDB8QX1mdW5jdGlvbiBJdShBLGUscixpLGYsbix0LG8pe0F8PTAsaXw9MCxmfD0wLG58PTAsdHw9MCxvfD0wO3ZhciBhLGMsbD0wLHU9MCxiPTA7YT11cj0oYz11cikrMzEmLTMyLHVyPXVyKzE2fDAsKC0xOC0oZXw9MCl8MCk+Pj4wPChyfD0wKT4+PjAmJnB1KCksYj0oMHx0cltBKzExPj4wXSk8MD8wfGFyW0E+PjJdOkEsdT0wfGh1KGw9ZT4+PjA8MjE0NzQ4MzYyMz8obD0obD1yK2V8MCk+Pj4wPCh1PWU8PDEpPj4+MD91OmwpPj4+MDwxMT8xMTpsKzE2Ji0xNjotMTcpLDB8ZiYmd2YodSxiLGYpLDB8dCYmd2YodStmfDAsbyx0KSwwfChpPShyPWktbnwwKS1mfDApJiZ3Zih1K2YrdHwwLGIrZitufDAsaSksMTAhPSgwfGUpJiZ2dShiKSxhcltBPj4yXT11LGFyW0ErOD4+Ml09LTIxNDc0ODM2NDh8bCx0PXIrdHwwLFFmKHUrKGFyW0ErND4+Ml09dCl8KHRyW2E+PjBdPTApLGEpLHVyPWN9ZnVuY3Rpb24gQ3UoQSxlKXtBfD0wO3ZhciByLGk9MCxmPTAsbj0wLHQ9MCxvPTA7NDI5NDk2NzI3OTwoZXw9MCk+Pj4wJiZwdSgpLGk9KG49KGY9MHx0clsocj1BKzExfDApPj4wXSk8PDI0Pj4yNDwwKT8obz0wfGFyW0ErND4+Ml0sKDIxNDc0ODM2NDcmYXJbQSs4Pj4yXSktMXwwKToobz0yNTUmZiwxMCksdD0oZT0odD1lPj4+MDxvPj4+MD9vOmUpPj4+MDwxMSk/MTA6KHQrMTYmLTE2KS0xfDA7ZG97aWYoKDB8dCkhPSgwfGkpKXtkb3tpZighZSl7aWYoZT0wfGh1KHQrMXwwKSxuKXtuPTEsaT0wfGFyW0E+PjJdLGY9MTM7YnJlYWt9d2YoZSxBLDErKDI1NSZmKXwwKSxmPTE0O2JyZWFrfWU9MHxhcltBPj4yXSxmPW4/KG49MCxpPWUsZT1BLDEzKTood2YoQSxlLDErKDI1NSZmKXwwKSx2dShlKSwxNSl9d2hpbGUoMCk7aWYoMTM9PSgwfGYpJiYod2YoZSxpLDErKDB8YXJbQSs0Pj4yXSl8MCksdnUoaSksZj1uPzE0OjE1KSwxND09KDB8Zikpe2FyW0ErOD4+Ml09dCsxfC0yMTQ3NDgzNjQ4LGFyW0ErND4+Ml09byxhcltBPj4yXT1lO2JyZWFrfWlmKDE1PT0oMHxmKSl7dHJbcj4+MF09bzticmVha319fXdoaWxlKDApfWZ1bmN0aW9uIEd1KEEsZSl7cmV0dXJuIDB8WHUoQXw9MCxlfD0wLDB8WWYoZSkpfWZ1bmN0aW9uIFZ1KEEsZSxyKXtlfD0wLHJ8PTA7dmFyIGksZixuLHQ9MCxvPTA7aT11cj0obj11cikrMzEmLTMyLHVyPXVyKzE2fDAsKG89KHQ9MHx0clsoZj0oQXw9MCkrMTF8MCk+PjBdKTw8MjQ+PjI0PDApP3Q9MHxhcltBKzQ+PjJdOnQmPTI1NTtkb3tpZihlPj4+MDw9dD4+PjApe2lmKG8pe289KDB8YXJbQT4+Ml0pK2V8MCx0cltpPj4wXT0wLFFmKG8saSksYXJbQSs0Pj4yXT1lO2JyZWFrfVFmKEErZXwodHJbaT4+MF09MCksaSksdHJbZj4+MF09ZTticmVha31GdShBLGUtdHwwLHIpfXdoaWxlKDApO3VyPW59ZnVuY3Rpb24gRnUoQSxlLHIpe0F8PTAscnw9MDt2YXIgaSxmLG49MCx0PTAsbz0wLGE9MCxjPTA7cmV0dXJuIGk9dXI9KGY9dXIpKzMxJi0zMix1cj11cisxNnwwLDB8KGV8PTApJiYodD0obj0wfHRyWyhjPUErMTF8MCk+PjBdKTw8MjQ+PjI0PDA/KG89MHxhcltBKzQ+PjJdLCgyMTQ3NDgzNjQ3JmFyW0ErOD4+Ml0pLTF8MCk6KG89MjU1Jm4sMTApLGE9bytlfDAsKHQtb3wwKT4+PjA8ZT4+PjAmJihSdShBLHQsYS10fDAsbyxvLDAsMCksbj0wfHRyW2M+PjBdKSxvaSgobj1uPDwyND4+MjQ8MD8wfGFyW0E+PjJdOkEpK298MCxlLHIpLCgwfHRyW2M+PjBdKTwwP2FyW0ErND4+Ml09YTp0cltjPj4wXT1hLFFmKG4rYXwodHJbaT4+MF09MCksaSkpLHVyPWYsMHxBfWZ1bmN0aW9uIFJ1KEEsZSxyLGksZixuLHQpe0F8PTAsaXw9MCxmfD0wLG58PTAsdHw9MDt2YXIgbz0wLGE9MCxjPTA7KC0xNy0oZXw9MCl8MCk+Pj4wPChyfD0wKT4+PjAmJnB1KCksYz0oMHx0cltBKzExPj4wXSk8MD8wfGFyW0E+PjJdOkEsYT0wfGh1KG89ZT4+PjA8MjE0NzQ4MzYyMz8obz0obz1yK2V8MCk+Pj4wPChhPWU8PDEpPj4+MD9hOm8pPj4+MDwxMT8xMTpvKzE2Ji0xNjotMTcpLDB8ZiYmd2YoYSxjLGYpLDB8KHI9aS1uLWZ8MCkmJndmKGErZit0fDAsYytmK258MCxyKSwxMCE9KDB8ZSkmJnZ1KGMpLGFyW0E+PjJdPWEsYXJbQSs4Pj4yXT0tMjE0NzQ4MzY0OHxvfWZ1bmN0aW9uIE51KEEsZSxyKXtlfD0wLHJ8PTA7dmFyIGksZixuLHQsbyxhPTAsYz0wO3JldHVybiBuPXVyPShvPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxhPShmPShhPTB8dHJbKHQ9KEF8PTApKzExfDApPj4wXSk8PDI0Pj4yNDwwKT8oYz0wfGFyW0ErND4+Ml0sKDIxNDc0ODM2NDcmYXJbQSs4Pj4yXSktMXwwKTooYz0yNTUmYSwxMCksaT1jK3J8MCxyPj4+MDw9KGEtY3wwKT4+PjA/MHxyJiYod2YoKGE9Zj8wfGFyW0E+PjJdOkEpK2N8MCxlLHIpLCgwfHRyW3Q+PjBdKTwwP2FyW0ErND4+Ml09aTp0clt0Pj4wXT1pLFFmKGEraXwodHJbbj4+MF09MCksbikpOkl1KEEsYSxpLWF8MCxjLGMsMCxyLGUpLHVyPW8sMHxBfWZ1bmN0aW9uIF91KEEsZSl7QXw9MCxlfD0wO3ZhciByLGksZj0wLG49MCx0PTAsbz0wO289dXI9KGk9dXIpKzMxJi0zMix1cj11cisxNnwwLG89KHI9bykrMXwwLHRyW3I+PjBdPWUsZT0oZj0oZT0wfHRyWyhuPUErMTF8MCk+PjBdKTw8MjQ+PjI0PDApPyh0PTB8YXJbQSs0Pj4yXSwoMjE0NzQ4MzY0NyZhcltBKzg+PjJdKS0xfDApOih0PTI1NSZlLDEwKSw3PT0oMHwoZj0oMHx0KT09KDB8ZSk/KFJ1KEEsZSwxLGUsZSwwLDApLGU9ZSsxfDAsKDB8dHJbbj4+MF0pPDA/ODo3KTooZT10KzF8MCxmPzg6NykpKT8odHJbbj4+MF09ZSxlPUEpOjg9PSgwfGYpJiYobj0wfGFyW0E+PjJdLGFyW0ErND4+Ml09ZSxlPW4pLFFmKEE9ZSt0fDAsciksUWYoQSsxfCh0cltvPj4wXT0wKSxvKSx1cj1pfWZ1bmN0aW9uIFl1KEEsZSxyLGksZil7ZXw9MCxyfD0wLGl8PTAsZnw9MDt2YXIgbix0PTA7cmV0dXJuKG49KHQ9MHx0clsoQXw9MCkrMTE+PjBdKTw8MjQ+PjI0PDApP3Q9MHxhcltBKzQ+PjJdOnQmPTI1NSwtMT09KDB8Zil8dD4+PjA8ZT4+PjAmJmxBKCkscj0odD10LWV8MCk+Pj4wPHI+Pj4wP3Q6cixuJiYoQT0wfGFyW0E+PjJdKSwoQT0wfG51KEErZXwwLGksKHQ9Zj4+PjA8cj4+PjApP2Y6cikpPzB8QTowfChyPj4+MDxmPj4+MD8tMToxJnQpfWZ1bmN0aW9uIFF1KEEpeygwfHRyWyhBfD0wKSs4KzM+PjBdKTwwJiZ2dSgwfGFyW0E+PjJdKX1mdW5jdGlvbiBEdShBLGUscil7cmV0dXJuIEF8PTAsZXw9MCwocnw9MCkmJmZ1bmN0aW9uKEEsZSxyKXt2YXIgaT0wO2lmKChyfD0wKT4+PjA8PShBfD0wKS0oZXw9MCk+PjI+Pj4wKXtpZigwfHIpZm9yKGk9QTtyPXIrLTF8MCxhcltpPj4yXT1hcltlPj4yXSxyOyllPWUrNHwwLGk9aSs0fDB9ZWxzZSBmb3IoO2FyW0ErKChyPXIrLTF8MCk8PDIpPj4yXT1hcltlKyhyPDwyKT4+Ml0sMCE9KDB8cik7KTt9KEEsZSxyKSwwfEF9ZnVuY3Rpb24gSnUoQSxlLHIsaSxmLG4sdCxvKXtBfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsb3w9MDt2YXIgYSxjLGwsdT0wLGI9MCxzPTA7Yz11cj0obD11cikrMzEmLTMyLHVyPXVyKzE2fDAsKDEwNzM3NDE4MDYtKGV8PTApfDApPj4+MDwocnw9MCk+Pj4wJiZwdSgpLHM9KDB8dHJbMysoYT1BKzh8MCk+PjBdKTwwPzB8YXJbQT4+Ml06QSxlPj4+MDw1MzY4NzA4ODc/MTA3Mzc0MTgyMzwocj0ocj0ocj1yK2V8MCk+Pj4wPCh1PWU8PDEpPj4+MD91OnIpPj4+MDwyPzI6cis0Ji00KT4+PjA/bEEoKTpiPXI6Yj0xMDczNzQxODA3LHU9MHxodShiPDwyKSwwfGYmJlpmKHUscyxmKSwwfHQmJlpmKHUrKGY8PDIpfDAsbyx0KSwwfChpPShyPWktbnwwKS1mfDApJiZaZih1KyhmPDwyKSsodDw8Mil8MCxzKyhmPDwyKSsobjw8Mil8MCxpKSwxIT0oMHxlKSYmdnUocyksYXJbQT4+Ml09dSxhclthPj4yXT0tMjE0NzQ4MzY0OHxiLHQ9cit0fDAsbG4odSsoKGFyW0ErND4+Ml09dCk8PDIpfChhcltjPj4yXT0wKSxjKSx1cj1sfWZ1bmN0aW9uIE11KEEsZSl7QXw9MDt2YXIgcixpLGY9MCxuPTAsdD0wLG89MCxhPTA7MTA3Mzc0MTgwNzwoZXw9MCk+Pj4wJiZwdSgpLGY9KHQ9KG49MHx0clsocj0zKyhpPUErOHwwKXwwKT4+MF0pPDwyND4+MjQ8MCk/KGE9MHxhcltBKzQ+PjJdLCgyMTQ3NDgzNjQ3JmFyW2k+PjJdKS0xfDApOihhPTI1NSZuLDEpLG89KGU9KG89ZT4+PjA8YT4+PjA/YTplKT4+PjA8Mik/MToobys0Ji00KS0xfDA7ZG97aWYoKDB8bykhPSgwfGYpKXtkb3tpZighZSl7aWYoMTA3Mzc0MTgyMzwoZT1vKzF8MCk+Pj4wJiZsQSgpLGU9MHxodShlPDwyKSx0KXt0PTEsZj0wfGFyW0E+PjJdLG49MTU7YnJlYWt9WmYoZSxBLDErKDI1NSZuKXwwKSxuPTE2O2JyZWFrfWU9MHxhcltBPj4yXSxuPXQ/KHQ9MCxmPWUsZT1BLDE1KTooWmYoQSxlLDErKDI1NSZuKXwwKSx2dShlKSwxNyl9d2hpbGUoMCk7aWYoMTU9PSgwfG4pJiYoWmYoZSxmLDErKDB8YXJbQSs0Pj4yXSl8MCksdnUoZiksbj10PzE2OjE3KSwxNj09KDB8bikpe2FyW2k+PjJdPW8rMXwtMjE0NzQ4MzY0OCxhcltBKzQ+PjJdPWEsYXJbQT4+Ml09ZTticmVha31pZigxNz09KDB8bikpe3RyW3I+PjBdPWE7YnJlYWt9fX13aGlsZSgwKX1mdW5jdGlvbiBUdShBLGUpe3JldHVybiAwfGZ1bmN0aW9uKEEsZSxyKXtlfD0wLHJ8PTA7dmFyIGksZixuLHQsbyxhPTAsYz0wO249dXI9KG89dXIpKzMxJi0zMix1cj11cisxNnwwLGM9KGY9KGk9MHx0clsodD0oYT0oQXw9MCkrOHwwKSszfDApPj4wXSk8PDI0Pj4yNDwwKT8oMjE0NzQ4MzY0NyZhclthPj4yXSktMXwwOjE7ZG97aWYocj4+PjA8PWM+Pj4wKXtpZihEdShhPWY/MHxhcltBPj4yXTpBLGUsciksbG4oYSsocjw8Mil8KGFyW24+PjJdPTApLG4pLCgwfHRyW3Q+PjBdKTwwKXthcltBKzQ+PjJdPXI7YnJlYWt9dHJbdD4+MF09cjticmVha31KdShBLGMsci1jfDAsYT1mPzB8YXJbQSs0Pj4yXToyNTUmaSwwLGEscixlKX13aGlsZSgwKTtyZXR1cm4gdXI9bywwfEF9KEF8PTAsZXw9MCwwfE1yKGUpKX1mdW5jdGlvbiBVdShBLGUscixpLGYsbix0KXtBfD0wLGl8PTAsZnw9MCxufD0wLHR8PTA7dmFyIG8sYT0wLGM9MCxsPTA7KDEwNzM3NDE4MDctKGV8PTApfDApPj4+MDwocnw9MCk+Pj4wJiZwdSgpLGw9KDB8dHJbMysobz1BKzh8MCk+PjBdKTwwPzB8YXJbQT4+Ml06QSxlPj4+MDw1MzY4NzA4ODc/MTA3Mzc0MTgyMzwocj0ocj0ocj1yK2V8MCk+Pj4wPChhPWU8PDEpPj4+MD9hOnIpPj4+MDwyPzI6cis0Ji00KT4+PjA/bEEoKTpjPXI6Yz0xMDczNzQxODA3LGE9MHxodShjPDwyKSwwfGYmJlpmKGEsbCxmKSwwfChyPWktbi1mfDApJiZaZihhKyhmPDwyKSsodDw8Mil8MCxsKyhmPDwyKSsobjw8Mil8MCxyKSwxIT0oMHxlKSYmdnUobCksYXJbQT4+Ml09YSxhcltvPj4yXT0tMjE0NzQ4MzY0OHxjfWZ1bmN0aW9uIFN1KEEsZSxyKXtlfD0wLHJ8PTA7dmFyIGksZixuLHQsbz0wLGE9MCxjPTA7cmV0dXJuIGY9dXI9KHQ9dXIpKzMxJi0zMix1cj11cisxNnwwLG89KGk9KG89MHx0clsobj0oYT0oQXw9MCkrOHwwKSszfDApPj4wXSk8PDI0Pj4yNDwwKT8oYz0wfGFyW0ErND4+Ml0sKDIxNDc0ODM2NDcmYXJbYT4+Ml0pLTF8MCk6KGM9MjU1Jm8sMSksYT1jK3J8MCxyPj4+MDw9KG8tY3wwKT4+PjA/MHxyJiYoWmYoKG89aT8wfGFyW0E+PjJdOkEpKyhjPDwyKXwwLGUsciksKDB8dHJbbj4+MF0pPDA/YXJbQSs0Pj4yXT1hOnRyW24+PjBdPWEsbG4obysoYTw8Mil8KGFyW2Y+PjJdPTApLGYpKTpKdShBLG8sYS1vfDAsYyxjLDAscixlKSx1cj10LDB8QX1mdW5jdGlvbiBPdShBLGUpe0F8PTAsZXw9MDt2YXIgcixpLGYsbj0wLHQ9MCxvPTAsYT0wO2E9dXI9KGY9dXIpKzMxJi0zMix1cj11cisxNnwwLGE9KGk9YSkrNHwwLGFyW2k+PjJdPWUsZT0ocj0oZT0wfHRyWyh0PShuPUErOHwwKSszfDApPj4wXSk8PDI0Pj4yNDwwKT8obz0wfGFyW0ErND4+Ml0sKDIxNDc0ODM2NDcmYXJbbj4+Ml0pLTF8MCk6KG89MjU1JmUsMSksNz09KDB8KG49KDB8byk9PSgwfGUpPyhVdShBLGUsMSxlLGUsMCwwKSxlPWUrMXwwLCgwfHRyW3Q+PjBdKTwwPzg6Nyk6KGU9bysxfDAscj84OjcpKSk/KHRyW3Q+PjBdPWUsZT1BKTo4PT0oMHxuKSYmKHQ9MHxhcltBPj4yXSxhcltBKzQ+PjJdPWUsZT10KSxsbihBPWUrKG88PDIpfDAsaSksbG4oQSs0fChhclthPj4yXT0wKSxhKSx1cj1mfWZ1bmN0aW9uIHp1KCl7dmFyIEEsZT0wO3JldHVybiBlPXVyPShBPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCwwfHlBKDYxMTQ4LDUpPyhqdSg1NjE1OCxlKSwwKTooZT0wfHdBKDB8YXJbMTUyODhdKSx1cj1BLDB8ZSl9ZnVuY3Rpb24ganUoQSxlKXtBfD0wLGV8PTA7dmFyIHI7cj11cj11ciszMSYtMzIsdXI9dXIrMTZ8MCxhcltyPj4yXT1lLFFjKGU9MHxhclsyNjY5XSxBLHIpLGZ1bmN0aW9uKEEsZSl7dmFyIHIsaT0wLGY9MCxuPTAsdD0wLG89MCxhPTA7aT1yPTI1NSYoQXw9MCksMDw9KDB8YXJbKGV8PTApKzc2Pj4yXSkmJjAhPSgwfEpjKCkpPygoMHxpKSE9KDB8dHJbZSs3NT4+MF0pJiYobz0wfGFyWyh0PWUrMjB8MCk+PjJdKT4+PjA8KDB8YXJbZSsxNj4+Ml0pPj4+MD8oYXJbdD4+Ml09bysxLHRyW28+PjBdPXIpOmk9MHxTaShlLEEpLE1jKCkpOmE9Mztkb3tpZigzPT0oMHxhKSl7aWYoKDB8aSkhPSgwfHRyW2UrNzU+PjBdKSYmKG49MHxhclsoZj1lKzIwfDApPj4yXSk+Pj4wPCgwfGFyW2UrMTY+PjJdKT4+PjApe2FyW2Y+PjJdPW4rMSx0cltuPj4wXT1yO2JyZWFrfWk9MHxTaShlLEEpfX13aGlsZSgwKX0oMTAsZSksbEEoKX1mdW5jdGlvbiBIdShBKXswfWZ1bmN0aW9uIHh1KEEsZSl7cmV0dXJuKDB8KEF8PTApKT09KDB8KGV8PTApKXwwfWZ1bmN0aW9uIFB1KEEsZSxyLGkpe0F8PTAscnw9MCxpfD0wO3ZhciBmLG4sdDtmPTB8YXJbKEE9KGV8PTApKzE2fDApPj4yXSxuPWUrMzZ8MCx0PWUrMjR8MDtkb3tpZihmKXtpZigoMHxmKSE9KDB8cikpe2FyW24+PjJdPTErKDB8YXJbbj4+Ml0pLGFyW3Q+PjJdPTIsdHJbZSs1ND4+MF09MTticmVha30yPT0oMHxhclt0Pj4yXSkmJihhclt0Pj4yXT1pKX1lbHNlIGFyW0E+PjJdPXIsYXJbdD4+Ml09aSxhcltuPj4yXT0xfXdoaWxlKDApfWZ1bmN0aW9uIEx1KEEsZSxyLGkpe3J8PTAsaXw9MDt2YXIgZj0wOygwfGFyWyhlfD0wKSs0Pj4yXSk9PSgwfHIpJiYxIT0oMHxhclsoZj1lKzI4fDApPj4yXSkmJihhcltmPj4yXT1pKX1mdW5jdGlvbiBLdShBLGUscixpLGYpe0F8PTAscnw9MCxpfD0wLGZ8PTA7dmFyIG49MCx0PTAsbz0wLGE9MDt0clsoZXw9MCkrNTM+PjBdPTE7ZG97aWYoKDB8YXJbZSs0Pj4yXSk9PSgwfGkpKXtpZih0cltlKzUyPj4wXT0xLG89ZSs1NHwwLGE9ZSs0OHwwLHQ9ZSsyNHwwLEE9ZSszNnwwLCEobj0wfGFyWyhpPWUrMTZ8MCk+PjJdKSl7aWYoYXJbaT4+Ml09cixhclt0Pj4yXT1mLCEoKGFyW0E+PjJdPTEpPT0oMHxhclthPj4yXSkmMT09KDB8ZikpKWJyZWFrO3RyW28+PjBdPTE7YnJlYWt9aWYoKDB8bikhPSgwfHIpKXthcltBPj4yXT0xKygwfGFyW0E+PjJdKSx0cltvPj4wXT0xO2JyZWFrfTI9PSgwfChBPTB8YXJbdD4+Ml0pKSYmKEE9YXJbdD4+Ml09ZiksMT09KDB8YXJbYT4+Ml0pJjE9PSgwfEEpJiYodHJbbz4+MF09MSl9fXdoaWxlKDApfWZ1bmN0aW9uIHF1KEEsZSxyLGkpe2V8PTAscnw9MCxpfD0wO3ZhciBmLG4sdCxvLGEsYyxsLHU9MCxiPTA7Zm9yKGE9dXI9KGw9dXIpKzMxJi0zMix1cj11cis2NHwwLGI9MHxhclsoQXw9MCk+PjJdLGM9QSsoMHxhcltiKy04Pj4yXSl8MCxiPTB8YXJbYistND4+Ml0sYXJbYT4+Ml09cixhcls0K2E+PjJdPUEsYXJbOCthPj4yXT1lLGFyWzEyK2E+PjJdPWksZT0yMCthfDAsaT0yNCthfDAsZj0yOCthfDAsbj0zMithfDAsdD00MCthfDAsbz0odT1BPTE2K2F8MCkrMzZ8MDsoMHwodT11KzR8KGFyW3U+PjJdPTApKSk8KDB8byk7KTtvcltBKzM2Pj4xXT0wLHRyW0ErMzg+PjBdPTA7QTpkb3tpZigwfHh1KGIscikpYXJbNDgrYT4+Ml09MSxhc1sxNSZhclsyMCsoMHxhcltiPj4yXSk+PjJdXShiLGEsYyxjLDEsMCksQT0xPT0oMHxhcltpPj4yXSk/YzowO2Vsc2V7c3dpdGNoKG9zWzYzJmFyWzI0KygwfGFyW2I+PjJdKT4+Ml1dKGIsYSxjLDEsMCksMHxhclszNithPj4yXSl7Y2FzZSAwOkE9MT09KDB8YXJbdD4+Ml0pJjE9PSgwfGFyW2Y+PjJdKSYxPT0oMHxhcltuPj4yXSk/MHxhcltlPj4yXTowO2JyZWFrIEE7Y2FzZSAxOmJyZWFrO2RlZmF1bHQ6QT0wO2JyZWFrIEF9aWYoMSE9KDB8YXJbaT4+Ml0pJiYhKDA9PSgwfGFyW3Q+PjJdKSYxPT0oMHxhcltmPj4yXSkmMT09KDB8YXJbbj4+Ml0pKSl7QT0wO2JyZWFrfUE9MHxhcltBPj4yXX19d2hpbGUoMCk7cmV0dXJuIHVyPWwsMHxBfWZ1bmN0aW9uICR1KEEpe3ZhciBlLHIsaTthclsoQXw9MCk+PjJdPTE3NjQwLGU9QSs0fDAsKGk9cj0wKXwoZXw9MCwxKSYmKHI9MHxmdW5jdGlvbihBKXtyZXR1cm4oQXw9MCkrLTEyfDB9KDB8YXJbZT4+Ml0pLGU9MHxhclsoaT1yKzh8MCk+PjJdLGFyW2k+PjJdPWUrLTEsKGUrLTF8MCk8MCkmJnZ1KHIpfWZ1bmN0aW9uIEFiKEEsZSxyLGkpe2V8PTAscnw9MCxpfD0wO3ZhciBmLG49MDtuPShmPTB8YXJbKEF8PTApKzQ+PjJdKT4+OCwxJmYmJihuPTB8YXJbKDB8YXJbcj4+Ml0pK24+PjJdKSxBPTB8YXJbQT4+Ml0sdHNbMzEmYXJbMjgrKDB8YXJbQT4+Ml0pPj4yXV0oQSxlLHIrbnwwLDImZnwwP2k6Mil9ZnVuY3Rpb24gZWIoQSxlLHIsaSxmLG4pe2V8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MDt2YXIgdCxvPTA7bz0odD0wfGFyWyhBfD0wKSs0Pj4yXSk+PjgsMSZ0JiYobz0wfGFyWygwfGFyW2k+PjJdKStvPj4yXSksQT0wfGFyW0E+PjJdLGFzWzE1JmFyWzIwKygwfGFyW0E+PjJdKT4+Ml1dKEEsZSxyLGkrb3wwLDImdHwwP2Y6MixuKX1mdW5jdGlvbiByYihBLGUscixpLGYpe2V8PTAscnw9MCxpfD0wLGZ8PTA7dmFyIG4sdD0wO3Q9KG49MHxhclsoQXw9MCkrND4+Ml0pPj44LDEmbiYmKHQ9MHxhclsoMHxhcltyPj4yXSkrdD4+Ml0pLEE9MHxhcltBPj4yXSxvc1s2MyZhclsyNCsoMHxhcltBPj4yXSk+PjJdXShBLGUscit0fDAsMiZufDA/aToyLGYpfWZ1bmN0aW9uIGliKEEpe3JldHVybiAwfChBPTE9PSgwfHRyWyhBfD0wKT4+MF0pPzA6dHJbQT4+MF09MSl9ZnVuY3Rpb24gZmIoKXt2YXIgQTtyZXR1cm4gQT0wfGFyWzE1Mjg5XSwwfChhclsxNTI4OV09QSl9ZnVuY3Rpb24gbmIoQSxlLHIsaSl7ZXw9MCxpfD0wO3ZhciBmLG4sdCxvLGEsYyxsLHU7cmV0dXJuIHI9MHwodD1mPUF8PTAsbz1uPXJ8PTAsdD0oKGE9KHU9MCl8YnIodT02NTUzNSYob3w9MCksbD02NTUzNSYodHw9MCkpKT4+PjE2KSsoMHxicih1LGM9dD4+PjE2KSl8MCxvPTB8YnIodT1vPj4+MTYsbCksMHwoRD0odD4+PjE2KSsoMHxicih1LGMpKSsoKCg2NTUzNSZ0KStvfDApPj4+MTYpfDAsdCtvPDwxNnw2NTUzNSZhfDApKSxBPUQsMHwoRD0oMHxicihlLG4pKSsoMHxicihpLGYpKStBfDAmQSwwfHIpfWZ1bmN0aW9uIHRiKEEsZSxyLGkpe3JldHVybiAwfChEPShlfD0wKSsoaXw9MCkrKChyPShBfD0wKSsocnw9MCk+Pj4wKT4+PjA8QT4+PjB8MCk+Pj4wLDB8cil9ZnVuY3Rpb24gb2IoQSxlLHIsaSl7cmV0dXJuIDB8KEQ9aT0oZXw9MCktKGl8PTApLSgoQXw9MCk+Pj4wPChyfD0wKT4+PjB8MCk+Pj4wLEEtcj4+PjB8MCl9ZnVuY3Rpb24gYWIoQSl7dmFyIGU9MDtyZXR1cm4oMHwoZT0wfHRyW3MrKDI1NSYoQXw9MCkpPj4wXSkpPDg/MHxlOigwfChlPTB8dHJbcysoQT4+OCYyNTUpPj4wXSkpPDg/ZSs4fDA6KDB8KGU9MHx0cltzKyhBPj4xNiYyNTUpPj4wXSkpPDg/ZSsxNnwwOjI0KygwfHRyW3MrKEE+Pj4yNCk+PjBdKXwwfWZ1bmN0aW9uIGNiKEEsZSxyLGksZil7Znw9MDt2YXIgbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTAsZD0wO2lmKGw9QXw9MCx0PXJ8PTAsbz1iPWl8PTAsIShjPWE9ZXw9MCkpcmV0dXJuIG49MCE9KDB8Ziksbz8obiYmKGFyW2Y+PjJdPTB8QSxhcltmKzQ+PjJdPTAmZSksKGY9Yj0wKXwoRD1iLGYpKToobiYmKGFyW2Y+PjJdPShsPj4+MCklKHQ+Pj4wKSxhcltmKzQ+PjJdPTApLChiPTApfChEPWIsZj0obD4+PjApLyh0Pj4+MCk+Pj4wKSk7bj0wPT0oMHxvKTtkb3tpZih0KXtpZighbil7aWYoKG49KDB8ZygwfG8pKS0oMHxnKDB8YykpfDApPj4+MDw9MzEpe0E9bD4+PigodD11PW4rMXwwKT4+PjApJihlPW4tMzE+PjMxKXxjPDwobz0zMS1ufDApLGUmPWM+Pj4odT4+PjApLG49MCxvPWw8PG87YnJlYWt9cmV0dXJuIGY/KGFyW2Y+PjJdPTB8QSxhcltmKzQ+PjJdPWF8MCZlLChmPWI9MCl8KEQ9YixmKSk6KGY9Yj0wKXwoRD1iLGYpfWlmKChuPXQtMXwwKSZ0fDApe0E9KHU9MzItKG89MzMrKDB8ZygwfHQpKS0oMHxnKDB8YykpfDApfDApLTE+PjMxJmM+Pj4oKHM9by0zMnwwKT4+PjApfChjPDx1fGw+Pj4oKHQ9byk+Pj4wKSkmKGU9cz4+MzEpLGUmPWM+Pj4obz4+PjApLG49bDw8KGQ9NjQtb3wwKSYoYT11Pj4zMSksbz0oYzw8ZHxsPj4+KHM+Pj4wKSkmYXxsPDx1Jm8tMzM+PjMxO2JyZWFrfXJldHVybiAwfGYmJihhcltmPj4yXT1uJmwsYXJbZis0Pj4yXT0wKSwxPT0oMHx0KT8wfChEPXM9YXwwJmUsZD0wfEEpOihkPTB8YWIoMHx0KSwwfChEPXM9Yz4+PihkPj4+MCl8MCxkPWM8PDMyLWR8bD4+PihkPj4+MCl8MCkpfWlmKG4pcmV0dXJuIDB8ZiYmKGFyW2Y+PjJdPShjPj4+MCklKHQ+Pj4wKSxhcltmKzQ+PjJdPTApLChzPTApfChEPXMsZD0oYz4+PjApLyh0Pj4+MCk+Pj4wKTtpZighbClyZXR1cm4gMHxmJiYoYXJbZj4+Ml09MCxhcltmKzQ+PjJdPShjPj4+MCklKG8+Pj4wKSksKHM9MCl8KEQ9cyxkPShjPj4+MCkvKG8+Pj4wKT4+PjApO2lmKCEoKG49by0xfDApJm8pKXJldHVybiAwfGYmJihhcltmPj4yXT0wfEEsYXJbZis0Pj4yXT1uJmN8MCZlKSxkPWM+Pj4oKChzPTApfGFiKDB8bykpPj4+MCksMHwoRD1zLGQpO2lmKChuPSgwfGcoMHxvKSktKDB8ZygwfGMpKXwwKT4+PjA8PTMwKXtBPWM8PChvPTMxLW58MCl8bD4+PigodD1lPW4rMXwwKT4+PjApLGU9Yz4+PihlPj4+MCksbj0wLG89bDw8bzticmVha31yZXR1cm4gZiYmKGFyW2Y+PjJdPTB8QSxhcltmKzQ+PjJdPWF8MCZlKSwoZD1zPTApfChEPXMsZCl9d2hpbGUoMCk7aWYodCl7Zm9yKGM9MHx0YigwfCh1PTB8ciksMHwobD1ifDAmaSksLTEsLTEpLHI9RCxhPW8sbz0wO2E9bj4+PjMxfChpPWEpPDwxLG49b3xuPDwxLG9iKDB8YywwfHIsMHwoaT1BPDwxfGk+Pj4zMXwwKSwwfChiPUE+Pj4zMXxlPDwxfDApKSxvPTEmKHM9KGQ9RCk+PjMxfCgoMHxkKTwwPy0xOjApPDwxKSxBPTB8b2IoMHxpLDB8YixzJnV8MCwoKCgwfGQpPDA/LTE6MCk+PjMxfCgoMHxkKTwwPy0xOjApPDwxKSZsfDApLGU9RCwwIT0oMHwodD10LTF8MCkpOyk7Yz1hLGE9MH1lbHNlIGM9byxvPWE9MDtyZXR1cm4odD0wKXxmJiYoYXJbZj4+Ml09QSxhcltmKzQ+PjJdPWUpLDB8KEQ9cz0oMHxuKT4+PjMxfChjfHQpPDwxfDAmKHQ8PDF8bj4+PjMxKXxhLGQ9LTImKG48PDF8MCl8byl9ZnVuY3Rpb24gbGIoQSxlLHIsaSl7cmV0dXJuIDB8Y2IoQXw9MCxlfD0wLHJ8PTAsaXw9MCwwKX1mdW5jdGlvbiB1YihBLGUscixpKXt2YXIgZixuO3JldHVybiB1cj0obj11cikrMTZ8MCxjYihBfD0wLGV8PTAscnw9MCxpfD0wLGY9MHxuKSx1cj1uLDB8KEQ9MHxhcls0K2Y+PjJdLDB8YXJbZj4+Ml0pfWZ1bmN0aW9uIGJiKEEsZSxyKXtyZXR1cm4gQXw9MCxlfD0wLCgwfChyfD0wKSk8MzI/KEQ9ZT4+cixBPj4+cnwoZSYoMTw8ciktMSk8PDMyLXIpOihEPSgwfGUpPDA/LTE6MCxlPj5yLTMyfDApfWZ1bmN0aW9uIHNiKEEsZSxyKXtyZXR1cm4gQXw9MCxlfD0wLCgwfChyfD0wKSk8MzI/KEQ9ZT4+PnIsQT4+PnJ8KGUmKDE8PHIpLTEpPDwzMi1yKTplPj4+ci0zMnwoRD0wKX1mdW5jdGlvbiBkYihBLGUscil7cmV0dXJuIEF8PTAsZXw9MCwoMHwocnw9MCkpPDMyPyhEPWU8PHJ8KEEmKDE8PHIpLTE8PDMyLXIpPj4+MzItcixBPDxyKTooRD1BPDxyLTMyLDApfWZ1bmN0aW9uIGtiKEEpe3JldHVybigyNTUmKEF8PTApKTw8MjR8KEE+PjgmMjU1KTw8MTZ8KEE+PjE2JjI1NSk8PDh8QT4+PjI0fDB9ZnVuY3Rpb24gaGIoQSxlLHIpe0F8PTAsZXw9MDt2YXIgaSxmLG49MDtpZig4MTkyPD0oMHwocnw9MCkpKXJldHVybiAwfHVBKDB8QSwwfGUsMHxyKTtpZihmPTB8QSxpPUErcnwwLCgzJkEpPT0oMyZlKSl7Zm9yKDszJkE7KXtpZighcilyZXR1cm4gMHxmO3RyW0E+PjBdPTB8dHJbZT4+MF0sQT1BKzF8MCxlPWUrMXwwLHI9ci0xfDB9Zm9yKG49KHI9LTQmaXwwKS02NHwwOygwfEEpPD0oMHxuKTspYXJbQT4+Ml09YXJbZT4+Ml0sYXJbQSs0Pj4yXT1hcltlKzQ+PjJdLGFyW0ErOD4+Ml09YXJbZSs4Pj4yXSxhcltBKzEyPj4yXT1hcltlKzEyPj4yXSxhcltBKzE2Pj4yXT1hcltlKzE2Pj4yXSxhcltBKzIwPj4yXT1hcltlKzIwPj4yXSxhcltBKzI0Pj4yXT1hcltlKzI0Pj4yXSxhcltBKzI4Pj4yXT1hcltlKzI4Pj4yXSxhcltBKzMyPj4yXT1hcltlKzMyPj4yXSxhcltBKzM2Pj4yXT1hcltlKzM2Pj4yXSxhcltBKzQwPj4yXT1hcltlKzQwPj4yXSxhcltBKzQ0Pj4yXT1hcltlKzQ0Pj4yXSxhcltBKzQ4Pj4yXT1hcltlKzQ4Pj4yXSxhcltBKzUyPj4yXT1hcltlKzUyPj4yXSxhcltBKzU2Pj4yXT1hcltlKzU2Pj4yXSxhcltBKzYwPj4yXT1hcltlKzYwPj4yXSxBPUErNjR8MCxlPWUrNjR8MDtmb3IoOygwfEEpPCgwfHIpOylhcltBPj4yXT1hcltlPj4yXSxBPUErNHwwLGU9ZSs0fDB9ZWxzZSBmb3Iocj1pLTR8MDsoMHxBKTwoMHxyKTspdHJbQT4+MF09MHx0cltlPj4wXSx0cltBKzE+PjBdPTB8dHJbZSsxPj4wXSx0cltBKzI+PjBdPTB8dHJbZSsyPj4wXSx0cltBKzM+PjBdPTB8dHJbZSszPj4wXSxBPUErNHwwLGU9ZSs0fDA7Zm9yKDsoMHxBKTwoMHxpKTspdHJbQT4+MF09MHx0cltlPj4wXSxBPUErMXwwLGU9ZSsxfDA7cmV0dXJuIDB8Zn1mdW5jdGlvbiB3YihBLGUscil7dmFyIGk9MDtpZigoMHwoZXw9MCkpPCgwfChBfD0wKSkmKDB8QSk8KGUrKHJ8PTApfDApKXtmb3IoZT1lK3J8MCxBPShpPUEpK3J8MDswPCgwfHIpOyllPWUtMXwwLHI9ci0xfDAsdHJbKEE9QS0xfDApPj4wXT0wfHRyW2U+PjBdO0E9aX1lbHNlIGhiKEEsZSxyKTtyZXR1cm4gMHxBfWZ1bmN0aW9uIHZiKEEsZSxyKXtlfD0wO3ZhciBpLGY9MCxuPTAsdD0wO2lmKGk9KEF8PTApKyhyfD0wKXwwLGUmPTI1NSw2Nzw9KDB8cikpe2Zvcig7MyZBOyl0cltBPj4wXT1lLEE9QSsxfDA7Zm9yKG49KGY9LTQmaXwwKS02NHwwLHQ9ZXxlPDw4fGU8PDE2fGU8PDI0OygwfEEpPD0oMHxuKTspYXJbQT4+Ml09dCxhcltBKzQ+PjJdPXQsYXJbQSs4Pj4yXT10LGFyW0ErMTI+PjJdPXQsYXJbQSsxNj4+Ml09dCxhcltBKzIwPj4yXT10LGFyW0ErMjQ+PjJdPXQsYXJbQSsyOD4+Ml09dCxhcltBKzMyPj4yXT10LGFyW0ErMzY+PjJdPXQsYXJbQSs0MD4+Ml09dCxhcltBKzQ0Pj4yXT10LGFyW0ErNDg+PjJdPXQsYXJbQSs1Mj4+Ml09dCxhcltBKzU2Pj4yXT10LGFyW0ErNjA+PjJdPXQsQT1BKzY0fDA7Zm9yKDsoMHxBKTwoMHxmKTspYXJbQT4+Ml09dCxBPUErNHwwfWZvcig7KDB8QSk8KDB8aSk7KXRyW0E+PjBdPWUsQT1BKzF8MDtyZXR1cm4gaS1yfDB9ZnVuY3Rpb24gbWIoQSl7cmV0dXJuIDB9ZnVuY3Rpb24gZ2IoQSl7cmV0dXJuIDB9ZnVuY3Rpb24gWmIoQSl7cmV0dXJuIDB9ZnVuY3Rpb24gcGIoQSl7cmV0dXJuIDA8PShBPStBKT8rdihBKy41KTorbShBLS41KX1mdW5jdGlvbiB5YihBKXt2YXIgZSxyO3JldHVybiAwPCgwfChyPShBfD0wKSsxNSYtMTZ8MCkpJigwfChBPShlPTB8YXJbYj4+Ml0pK3J8MCkpPCgwfGUpfCgwfEEpPDA/KEIoKSxGKDEyKSwtMSk6KDB8KGFyW2I+PjJdPUEpKT4oMHx5KCkpJiYwPT0oMHxwKCkpPyhhcltiPj4yXT1lLEYoMTIpLC0xKTowfGV9ZnVuY3Rpb24gQmIoKXtyZXR1cm4gWigwKSwwfWZ1bmN0aW9uIEViKEEpe3JldHVybiBaKDEpLDB9ZnVuY3Rpb24gWGIoQSxlKXtyZXR1cm4gWigyKSwwfWZ1bmN0aW9uIFdiKEEsZSxyKXtyZXR1cm4gWigzKSwwfWZ1bmN0aW9uIEliKEEsZSxyLGksZil7cmV0dXJuIFooNSksMH1mdW5jdGlvbiBDYihBLGUscixpLGYpe3JldHVybiBaKDYpLDB9ZnVuY3Rpb24gR2IoQSxlLHIsaSxmLG4pe3JldHVybiBaKDcpLDB9ZnVuY3Rpb24gVmIoQSxlLHIsaSxmLG4pe3JldHVybiBaKDgpLDB9ZnVuY3Rpb24gRmIoQSxlLHIsaSxmLG4sdCl7cmV0dXJuIFooOSksMH1mdW5jdGlvbiBSYihBLGUscixpLGYsbix0LG8pe3JldHVybiBaKDEwKSwwfWZ1bmN0aW9uIE5iKCl7WigxMSl9ZnVuY3Rpb24gX2IoQSl7WigxMil9ZnVuY3Rpb24gWWIoQSxlKXtaKDEzKX1mdW5jdGlvbiBRYihBLGUscil7WigxNCl9ZnVuY3Rpb24gRGIoQSxlLHIsaSl7WigxNSl9ZnVuY3Rpb24gSmIoQSxlLHIsaSxmKXtaKDE2KX1mdW5jdGlvbiBNYihBLGUscixpLGYsbil7WigxNyl9ZnVuY3Rpb24gVGIoQSxlLHIsaSxmLG4sdCl7WigxOCl9ZnVuY3Rpb24gVWIoQSxlLHIsaSxmLG4sdCxvKXtaKDE5KX1mdW5jdGlvbiBTYihBLGUscixpLGYsbix0LG8sYSl7WigyMCl9ZnVuY3Rpb24gT2IoQSxlLHIsaSxmLG4sdCxvLGEsYyl7WigyMSl9dmFyIHpiPVtCYixmdW5jdGlvbigpe3ZhciBBLGUscj0wLGk9MCxmPTA7Zm9yKGk9MzQ1MDksZj0ocj02MTE2MSkrMjJ8MDt0cltyPj4wXT0wfHRyW2k+PjBdLGk9aSsxfDAsKDB8KHI9cisxfDApKTwoMHxmKTspO2lmKDgwPD0oMTArKDB8VmMoMzQ1NDIpKXwwKT4+PjApcmV0dXJuIDYxMTYxO2ZvcihpPTM0NTMxLGY9KHI9NjExNjErKDB8VmMoNjExNjEpKXwwKSsxMXwwO3RyW3I+PjBdPTB8dHJbaT4+MF0saT1pKzF8MCwoMHwocj1yKzF8MCkpPCgwfGYpOyk7cmV0dXJuIEE9NjExNjEsZT0zNDU0MixlfD0wLGZ1bmN0aW9uKEEsZSl7IWZ1bmN0aW9uKEEsZSl7QXw9MDt2YXIgcj0wLGk9MDtyPWV8PTA7QTpkb3tpZigzJihyXkEpKWk9ODtlbHNle2lmKDMmcilkb3tpZihyPTB8dHJbZT4+MF0sISgodHJbQT4+MF09cik8PDI0Pj4yNCkpYnJlYWsgQTtlPWUrMXwwLEE9QSsxfDB9d2hpbGUoMCE9KDMmZXwwKSk7aWYoISgoLTIxMzkwNjIxNDQmKHI9MHxhcltlPj4yXSleLTIxMzkwNjIxNDQpJnIrLTE2ODQzMDA5KSlmb3IoaT1BO2U9ZSs0fDAsQT1pKzR8MCxhcltpPj4yXT1yLCEoKC0yMTM5MDYyMTQ0JihyPTB8YXJbZT4+Ml0pXi0yMTM5MDYyMTQ0KSZyKy0xNjg0MzAwOXwwKTspaT1BO2k9OH19d2hpbGUoMCk7aWYoOD09KDB8aSkmJihpPTB8dHJbZT4+MF0sKHRyW0E+PjBdPWkpPDwyND4+MjQpKWZvcig7QT1BKzF8MCxpPTB8dHJbKGU9ZSsxfDApPj4wXSwodHJbQT4+MF09aSk8PDI0Pj4yNCE9MDspO30oQXw9MCxlfD0wKX0oKEF8PTApKygwfFZjKEEpKXwwLGUpLDYxMTYxfSxmdW5jdGlvbigpe3JldHVybiAxNzQzMjU3Nn0sZnVuY3Rpb24oKXt2YXIgQSxlLHIsaSxmLG47cmV0dXJuIEE9MHxodSg4KSxhcltBPj4yXT0wLHI9KGFyWyhlPTQrQXwwKT4+Ml09MCl8aHUoOTIpLGFyWzQrcj4+Ml09MCxhcls4K3I+PjJdPTAsYXJbcj4+Ml09NjMzNixmPWk9MTIrcnwwLGFyWyhmfD0wKT4+Ml09MCxhcltmKzQ+PjJdPTAsYXJbZis4Pj4yXT0wLGFyW2YrMTI+PjJdPTMwMDI1LGFyW2YrMjA+PjJdPTAsYXJbZisyND4+Ml09MCxhcltmKzE2Pj4yXT1mKzIwLGFyW2YrMzI+PjJdPTAsYXJbZiszNj4+Ml09MCxhcltmKzI4Pj4yXT1mKzMyLGFyWyhuPWYrNDB8MCk+PjJdPTAsYXJbNCtuPj4yXT0wLGFyWzgrbj4+Ml09MCxhclsxMituPj4yXT0wLGFyWzE2K24+PjJdPTAsYXJbMjArbj4+Ml09MCxhclsyNCtuPj4yXT0wLGFyW2YrNjg+PjJdPTQsYXJbZis3Mj4+Ml09MzI3NjgsYXJbZis3Nj4+Ml09MzI3NjgsZnVuY3Rpb24oQSl7QXw9MDt2YXIgZT0wLHI9MCxpPTAsZj0wLG49MDtpZihuPTB8aHUoMTMyKSxhcltuKzQ+PjJdPTAsYXJbbis4Pj4yXT0wLGFyW24+PjJdPTYzNjQsY28oZT1uKzEyfDApLGFyWyhyPUErNjB8MCk+PjJdPWUsaT0wfGFyWyhmPUErNjR8MCk+PjJdLGFyW2Y+PjJdPW4saSYmKGR1KGkpLGU9MHxhcltyPj4yXSksZnVuY3Rpb24oQSl7dmFyIGUscixpLGYsbix0LG8sYSxjLGwsdSxiLHMsZCxrLGgsdyx2PTAsbT0wLGc9MCxaPTAscD0wLHk9MCxCPTAsRT0wLFg9MCxXPTAsST0wLEM9MCxHPTAsVj0wLEY9MCxSPTAsTj0wO2lmKHVyPSh3PXVyKSs2NHwwLGY9dys0OHwwLHQ9dys0MHwwLG89dyszMnwwLGE9dysyNHwwLGw9dysxNnwwLGI9dys4fDAsaD0oZD13KSs1NnwwLHY9KGFyWyhBfD0wKT4+Ml09MCl8YXJbKE49QSs0fDApPj4yXSwoYXJbTj4+Ml09MCl8diYmZHUodiksZz0wfGFyWyhrPUErOHwwKT4+Ml0sKDB8KHY9MHxhclsoTj1BKzEyfDApPj4yXSkpIT0oMHxnKSlmb3IoO209distOHwwLGFyW04+PjJdPW0sKDB8KHY9KHY9MHxhclt2Ky00Pj4yXSk/KGR1KHYpLDB8YXJbTj4+Ml0pOm0pKSE9KDB8Zyk7KTtSPTB8aHUoOTYpLGFyW1IrND4+Ml09MCxhcltSKzg+PjJdPTAsYXJbUj4+Ml09NDYwMCxNdChGPVIrMTZ8MCksYXJbUis2MD4+Ml09MCxhcltSKzY0Pj4yXT0wLGFyW1IrNjg+PjJdPTAsYXJbRj4+Ml09NDQzNixhclsoVj1SKzcyfDApPj4yXT0wLGFyW1YrND4+Ml09MCxhcltWKzg+PjJdPTAsYXJbVisxMj4+Ml09MCxhcltWKzE2Pj4yXT0wLGFyW1IrMzY+PjJdPTE3MTg5MDkyOTYsdHJbUis1Mj4+MF09MCxhclsoVj1BKzIwfDApPj4yXT1GLHY9MHxhclsoRj1BKzI0fDApPj4yXSxhcltGPj4yXT1SLDB8diYmZHUodiksUj0wfGh1KDEwNCksYXJbUis0Pj4yXT0wLGFyW1IrOD4+Ml09MCxhcltSPj4yXT00NjU2LE10KGc9UisxNnwwKSxhcltSKzYwPj4yXT0wLGFyW1IrNjQ+PjJdPTAsYXJbUis2OD4+Ml09MCxhcltnPj4yXT00Njg0LGFyW1IrNzI+PjJdPTAsYXJbUis3Nj4+Ml09MTg4NTk1NDkzMixhclsobT1SKzgwfDApPj4yXT0wLGFyW20rND4+Ml09MCxhclttKzg+PjJdPTAsYXJbbSsxMj4+Ml09MCxhclttKzE2Pj4yXT0wLGFyW20rMjA+PjJdPTAsYXJbUiszNj4+Ml09MTc1MTQxMTgyNix0cltSKzUyPj4wXT0xLGFyWyhtPUErMjh8MCk+PjJdPWcsdj0wfGFyWyhnPUErMzJ8MCk+PjJdLGFyW2c+PjJdPVIsMHx2JiZkdSh2KSxHPTB8aHUoNzIpLGFyW0crND4+Ml09MCxhcltHKzg+PjJdPTAsYXJbRz4+Ml09NDYyOCxNdChSPUcrMTZ8MCksYXJbRys2MD4+Ml09MCxhcltHKzY0Pj4yXT0wLGFyW0crNjg+PjJdPTAsYXJbUj4+Ml09NDQ2OCxhcltHKzM2Pj4yXT0xODM1MzY1NDczLHRyW0crNTI+PjBdPTEsYXJbKHM9QSszNnwwKT4+Ml09Uix2PTB8YXJbKFI9QSs0MHwwKT4+Ml0sYXJbUj4+Ml09RywwfHYmJmR1KHYpLEc9MHxodSg3MiksYXJbRys0Pj4yXT0wLGFyW0crOD4+Ml09MCxhcltHPj4yXT01MDE2LE10KEk9RysxNnwwKSxhcltHKzYwPj4yXT0wLGFyW0crNjQ+PjJdPTAsYXJbRys2OD4+Ml09MCxhcltJPj4yXT01MDQ0LGFyW0crMzY+PjJdPTE3Njg5NzMxNjcsdHJbRys1Mj4+MF09MCxhclsoYz1BKzQ0fDApPj4yXT1JLHY9MHxhclsoST1BKzQ4fDApPj4yXSxhcltJPj4yXT1HLDB8diYmZHUodiksQz0wfGh1KDg4KSxhcltDKzQ+PjJdPTAsYXJbQys4Pj4yXT0wLGFyW0M+PjJdPTUwNzYsTXQoRz1DKzE2fDApLGFyW0MrNjA+PjJdPTAsYXJbQys2ND4+Ml09MCxhcltDKzY4Pj4yXT0wLGFyW0c+PjJdPTUxMDQsYXJbQys3Mj4+Ml09MCxhcltDKzc2Pj4yXT0wLGFyW0MrODA+PjJdPTAsYXJbQyszNj4+Ml09MTc2ODk3NTcxMyx0cltDKzUyPj4wXT0xLGFyWyh1PUErNTJ8MCk+PjJdPUcsdj0wfGFyWyhHPUErNTZ8MCk+PjJdLGFyW0c+PjJdPUMsMHx2JiZkdSh2KSxDPTB8aHUoMTA0KSxhcltDKzQ+PjJdPTAsYXJbQys4Pj4yXT0wLGFyW0M+PjJdPTQ3NzYsTXQoRT1DKzE2fDApLGFyW0MrNjA+PjJdPTAsYXJbQys2ND4+Ml09MCxhcltDKzY4Pj4yXT0wLGFyW0U+PjJdPTQ4MDQsQj1DKzcyfDAsYXJbQys5Nj4+Ml09MCxhcltCPj4yXT0wLGFyW0IrND4+Ml09MCxhcltCKzg+PjJdPTAsYXJbQisxMj4+Ml09MCxhcltCKzE2Pj4yXT0wLHRyW0IrMjA+PjBdPTAsYXJbQyszNj4+Ml09MTc2ODcxNDA4Myx0cltDKzUyPj4wXT0xLGFyWyhCPUErNjB8MCk+PjJdPUUsdj0wfGFyWyhFPUErNjR8MCk+PjJdLGFyW0U+PjJdPUMsMHx2JiZkdSh2KSxDPTB8aHUoNzIpLGFyW0MrND4+Ml09MCxhcltDKzg+PjJdPTAsYXJbQz4+Ml09NDgzNixNdChYPUMrMTZ8MCksYXJbQys2MD4+Ml09MCxhcltDKzY0Pj4yXT0wLGFyW0MrNjg+PjJdPTAsYXJbWD4+Ml09NDg2NCxhcltDKzM2Pj4yXT0xNzY4NTE3MjIyLHRyW0MrNTI+PjBdPTEsYXJbKG49QSs5MnwwKT4+Ml09WCx2PTB8YXJbKFg9QSs5NnwwKT4+Ml0sYXJbWD4+Ml09QywwfHYmJmR1KHYpLHk9MHxodSg3MiksYXJbeSs0Pj4yXT0wLGFyW3krOD4+Ml09MCxhclt5Pj4yXT00OTU2LE10KFc9eSsxNnwwKSxhclt5KzYwPj4yXT0wLGFyW3krNjQ+PjJdPTAsYXJbeSs2OD4+Ml09MCxhcltXPj4yXT00OTg0LGFyW3krMzY+PjJdPTE3Njg5NzcwMDgsdHJbeSs1Mj4+MF09MCxhclsoQz1BKzEwMHwwKT4+Ml09Vyx2PTB8YXJbKFc9QSsxMDR8MCk+PjJdLGFyW1c+PjJdPXksMHx2JiZkdSh2KSxwPTB8aHUoODApLGFyW3ArND4+Ml09MCxhcltwKzg+PjJdPTAsYXJbcD4+Ml09NDcxNixNdCh5PXArMTZ8MCksYXJbcCs2MD4+Ml09MCxhcltwKzY0Pj4yXT0wLGFyW3ArNjg+PjJdPTAsYXJbeT4+Ml09NDc0NCxhcltwKzcyPj4yXT0wLGFyW3ArMzY+PjJdPTE4ODU5NTkyNzcsdHJbcCs1Mj4+MF09MSxhclsoaT1BKzg0fDApPj4yXT15LHY9MHxhclsoeT1BKzg4fDApPj4yXSxhclt5Pj4yXT1wLDB8diYmZHUodikscj0wfGFyW3M+PjJdLFo9MHxhclttPj4yXSxhcltmPj4yXT1aLHA9NCtmfDAsbT0wfGFyW2c+PjJdLChnPTA9PSgwfChhcltwPj4yXT1tKSkpfHxidShtKSwoMHwodj0wfGFyWyhlPTQ4K3J8MCk+PjJdKSk9PSgwfGFyWzUyK3I+PjJdKT9VdCg0NCtyfDAsZik6KGFyW3Y+PjJdPVosYXJbdis0Pj4yXT1tLGd8fChidShtKSx2PTB8YXJbZT4+Ml0pLGFyW2U+PjJdPXYrOCksMHwodj0wfGFyW3A+PjJdKSYmZHUodiksbT0wfGFyW3M+PjJdLGFyW3Q+PjJdPWFyW2k+PjJdLFo9NCt0fDAsdj0wfGFyW3k+PjJdLDB8KGFyW1o+PjJdPXYpJiZidSh2KSwoMHwodj0wfGFyWyhnPW0rNDh8MCk+PjJdKSk9PSgwfGFyW20rNTI+PjJdKT9VdChtKzQ0fDAsdCk6KGFyW3Y+PjJdPWFyW3Q+PjJdLG09MHxhcltaPj4yXSwoYXJbdis0Pj4yXT1tKSYmKGJ1KG0pLHY9MHxhcltnPj4yXSksYXJbZz4+Ml09dis4KSwwfCh2PTB8YXJbWj4+Ml0pJiZkdSh2KSxtPTB8YXJbcz4+Ml0sYXJbbz4+Ml09YXJbQj4+Ml0sWj00K298MCx2PTB8YXJbRT4+Ml0sMHwoYXJbWj4+Ml09dikmJmJ1KHYpLCgwfCh2PTB8YXJbKGc9bSs0OHwwKT4+Ml0pKT09KDB8YXJbbSs1Mj4+Ml0pP1V0KG0rNDR8MCxvKTooYXJbdj4+Ml09YXJbbz4+Ml0sbT0wfGFyW1o+PjJdLChhclt2KzQ+PjJdPW0pJiYoYnUobSksdj0wfGFyW2c+PjJdKSxhcltnPj4yXT12KzgpLDB8KHY9MHxhcltaPj4yXSkmJmR1KHYpLG09MHxhcltzPj4yXSxhclthPj4yXT1hcltuPj4yXSxaPTQrYXwwLHY9MHxhcltYPj4yXSwwfChhcltaPj4yXT12KSYmYnUodiksKDB8KHY9MHxhclsoZz1tKzQ4fDApPj4yXSkpPT0oMHxhclttKzUyPj4yXSk/VXQobSs0NHwwLGEpOihhclt2Pj4yXT1hclthPj4yXSxtPTB8YXJbWj4+Ml0sKGFyW3YrND4+Ml09bSkmJihidShtKSx2PTB8YXJbZz4+Ml0pLGFyW2c+PjJdPXYrOCksMHwodj0wfGFyW1o+PjJdKSYmZHUodiksbT0wfGFyW3M+PjJdLGFyW2w+PjJdPWFyW0M+PjJdLFo9NCtsfDAsdj0wfGFyW1c+PjJdLDB8KGFyW1o+PjJdPXYpJiZidSh2KSwoMHwodj0wfGFyWyhnPW0rNDh8MCk+PjJdKSk9PSgwfGFyW20rNTI+PjJdKT9VdChtKzQ0fDAsbCk6KGFyW3Y+PjJdPWFyW2w+PjJdLG09MHxhcltaPj4yXSwoYXJbdis0Pj4yXT1tKSYmKGJ1KG0pLHY9MHxhcltnPj4yXSksYXJbZz4+Ml09dis4KSwwfCh2PTB8YXJbWj4+Ml0pJiZkdSh2KSxtPTB8YXJbQz4+Ml0sYXJbYj4+Ml09YXJbYz4+Ml0sWj00K2J8MCx2PTB8YXJbST4+Ml0sMHwoYXJbWj4+Ml09dikmJmJ1KHYpLCgwfCh2PTB8YXJbKGc9bSs0OHwwKT4+Ml0pKT09KDB8YXJbbSs1Mj4+Ml0pP1V0KG0rNDR8MCxiKTooYXJbdj4+Ml09YXJbYj4+Ml0sbT0wfGFyW1o+PjJdLChhclt2KzQ+PjJdPW0pJiYoYnUobSksdj0wfGFyW2c+PjJdKSxhcltnPj4yXT12KzgpLDB8KHY9MHxhcltaPj4yXSkmJmR1KHYpLG09MHxhcltDPj4yXSxhcltkPj4yXT1hclt1Pj4yXSxaPWQrNHwwLHY9MHxhcltHPj4yXSwwfChhcltaPj4yXT12KSYmYnUodiksKDB8KHY9MHxhclsoZz1tKzQ4fDApPj4yXSkpPT0oMHxhclttKzUyPj4yXSk/VXQobSs0NHwwLGQpOihhclt2Pj4yXT1hcltkPj4yXSxtPTB8YXJbWj4+Ml0sKGFyW3YrND4+Ml09bSkmJihidShtKSx2PTB8YXJbZz4+Ml0pLGFyW2c+PjJdPXYrOCksMHwodj0wfGFyW1o+PjJdKSYmZHUodiksdW8odj1BKzEwOHwwLDB8YXJbKG09QSsxMTJ8MCk+PjJdKSxhcltBKzExNj4+Ml09MCxhclt2Pj4yXT1tLGFyW20+PjJdPTAsYXJbaD4+Ml09YXJbVj4+Ml0sbT00K2h8MCx2PTB8YXJbRj4+Ml0sMHwoYXJbbT4+Ml09dikmJmJ1KHYpLHY9MHxhcltOPj4yXSxnPUErMTZ8MDtkb3tpZih2Pj4+MDwoMHxhcltnPj4yXSk+Pj4wKWFyW3Y+PjJdPWFyW2g+PjJdLGFyW3YrND4+Ml09YXJbbT4+Ml0sYXJbaD4+Ml09MCxhclttPj4yXT0wLGFyW04+PjJdPXYrODtlbHNle2lmKGVlKGssaCksISh2PTB8YXJbbT4+Ml0pKWJyZWFrO2R1KHYpfX13aGlsZSgwKTtpZihhcltoPj4yXT1hcltzPj4yXSxtPTQraHwwLHY9MHxhcltSPj4yXSwwfChhclttPj4yXT12KSYmYnUodiksKHY9MHxhcltOPj4yXSk+Pj4wPCgwfGFyW2c+PjJdKT4+PjApcmV0dXJuIGFyW3Y+PjJdPWFyW2g+PjJdLGFyW3YrND4+Ml09YXJbbT4+Ml0sYXJbaD4+Ml09MCxhclttPj4yXT0wLGFyW04+PjJdPXYrOCx1cj13O2VlKGssaCksKHY9MHxhclttPj4yXSkmJmR1KHYpLHVyPXd9KGUpLHZsKGY9QSsyOHwwLDB8YXJbKGk9QSszMnwwKT4+Ml0pLGFyW0ErMzY+PjJdPTAsYXJbZj4+Ml09aSxhcltpPj4yXT0wLGk9MHxhcltBKzQwPj4yXSwoMHwoZT0wfGFyWyhmPUErNDR8MCk+PjJdKSkhPSgwfGkpKWZvcig7cj1lKy04fDAsYXJbZj4+Ml09ciwoMHwoZT0oZT0wfGFyW2UrLTQ+PjJdKT8oZHUoZSksMHxhcltmPj4yXSk6cikpIT0oMHxpKTspO2FyW0ErNTI+PjJdPTAsZT0wfGFyWyhuPUErNTZ8MCk+PjJdLGFyW24+PjJdPTAsZSYmZHUoZSl9KGYpLGFyW0E+PjJdPWksYXJbZT4+Ml09ciwwfEF9LGZ1bmN0aW9uKCl7dmFyIEE7cmV0dXJuIEE9MHxodSgxMiksYXJbQT4+Ml09MCxhcls0K0E+PjJdPTAsKGFyWzgrQT4+Ml09MCl8QX0sQmIsQmIsQmJdLGpiPVtFYixmdW5jdGlvbihBKXtyZXR1cm4gRD0wfGFyWyhBPShBfD0wKSsxNnwwKSs0Pj4yXSwwfGFyW0E+PjJdfSxmdW5jdGlvbihBKXtyZXR1cm4gMH0sZnVuY3Rpb24oQSl7cmV0dXJuIDB9LGZ1bmN0aW9uKEEpe3ZhciBlPTAscj0wLGk9MDtyZXR1cm4oaT0wfGFyWyhlPShBfD0wKSs0NHwwKT4+Ml0pPj4+MDwocj0wfGFyW0ErMjQ+PjJdKT4+PjAmJihpPWFyW2U+PjJdPXIpLDgmYXJbQSs0OD4+Ml0/KChyPTB8YXJbKGU9QSsxNnwwKT4+Ml0pPj4+MDxpPj4+MCYmKHI9YXJbZT4+Ml09aSkscj4+PjA8PShlPTB8YXJbQSsxMj4+Ml0pPj4+MD8wfChBPS0xKTowfChBPTB8Y3JbZT4+MF0pKTowfChBPS0xKX0sZnVuY3Rpb24oQSl7dmFyIGU9MDtyZXR1cm4gMHwoQT0tMT09KDB8KGU9MHxqYlsxMjcmYXJbMzYrKDB8YXJbKEF8PTApPj4yXSk+PjJdXShBKSkpPy0xOihBPTB8YXJbKGU9QSsxMnwwKT4+Ml0sYXJbZT4+Ml09QSsxLDB8aGYoMHx0cltBPj4wXSkpKX0sZnVuY3Rpb24oQSl7cmV0dXJuIDE4NTIwMDk1OTJ9LGZ1bmN0aW9uKEEpe3JldHVybiAwfGFyWyhBfD0wKSs0Pj4yXX0sZnVuY3Rpb24oQSl7cmV0dXJuIDB8KDE9PSgwfChBfD0wKSk/MTAwOjApfSxmdW5jdGlvbihBKXt2YXIgZSxyLGk7cmV0dXJuIHI9dXI9KGU9dXIpKzMxJi0zMix1cj11cisxNnwwLEE9MHwoaT0wfGFyWyhBfD0wKSs2MD4+Ml0sMHwoaXw9MCkpLGFyW3I+PjJdPUEsQT0wfEljKDB8Sig2LDB8cikpLHVyPWUsMHxBfSxmdW5jdGlvbihBKXtyZXR1cm4tMX0sZnVuY3Rpb24oQSl7cmV0dXJuIDB9LGZ1bmN0aW9uKEEpe3JldHVybiAwfSxmdW5jdGlvbihBKXtyZXR1cm4tMX0sZnVuY3Rpb24oQSl7dmFyIGU9MDtyZXR1cm4gMHwoQT0tMT09KDB8KGU9MHxqYlsxMjcmYXJbMzYrKDB8YXJbKEF8PTApPj4yXSk+PjJdXShBKSkpPy0xOihBPTB8YXJbKGU9QSsxMnwwKT4+Ml0sYXJbZT4+Ml09QSs0LDB8Z2YoMHxhcltBPj4yXSkpKX0sZnVuY3Rpb24oQSl7dmFyIGUscixpLGYsbix0LG8sYSxjPTAsbD0wO2k9dXI9KGE9dXIpKzMxJi0zMix1cj11cisxNnwwLGY9KEF8PTApKzM2fDAsbj1BKzQwfDAsdD04KyhyPTgraXwwKXwwLG89cixlPUErMzJ8MDtBOmZvcig7Oyl7aWYoQT0wfGFyW2Y+PjJdLEE9MHxLYlszMSZhclsyMCsoMHxhcltBPj4yXSk+PjJdXShBLDB8YXJbbj4+Ml0scix0LGkpLCgwfFVpKHIsMSxsPSgwfGFyW2k+PjJdKS1vfDAsMHxhcltlPj4yXSkpIT0oMHxsKSl7QT0tMTticmVha31zd2l0Y2goMHxBKXtjYXNlIDE6YnJlYWs7Y2FzZSAyOkE9LTE7YnJlYWsgQTtkZWZhdWx0OmM9NDticmVhayBBfX1yZXR1cm4gND09KDB8YykmJihBPSgwIT0oMHxPaSgwfGFyW2U+PjJdKSkpPDwzMT4+MzEpLHVyPWEsMHxBfSxmdW5jdGlvbihBKXt2YXIgZSxyLGksZixuLHQsbyxhLGM9MCxsPTA7aT11cj0oYT11cikrMzEmLTMyLHVyPXVyKzE2fDAsZj0oQXw9MCkrMzZ8MCxuPUErNDB8MCx0PTgrKHI9OCtpfDApfDAsbz1yLGU9QSszMnwwO0E6Zm9yKDs7KXtpZihBPTB8YXJbZj4+Ml0sQT0wfEtiWzMxJmFyWzIwKygwfGFyW0E+PjJdKT4+Ml1dKEEsMHxhcltuPj4yXSxyLHQsaSksKDB8VWkociwxLGw9KDB8YXJbaT4+Ml0pLW98MCwwfGFyW2U+PjJdKSkhPSgwfGwpKXtBPS0xO2JyZWFrfXN3aXRjaCgwfEEpe2Nhc2UgMTpicmVhaztjYXNlIDI6QT0tMTticmVhayBBO2RlZmF1bHQ6Yz00O2JyZWFrIEF9fXJldHVybiA0PT0oMHxjKSYmKEE9KDAhPSgwfE9pKDB8YXJbZT4+Ml0pKSk8PDMxPj4zMSksdXI9YSwwfEF9LGZ1bmN0aW9uKEEpe3JldHVybiAwfGZuKEF8PTAsMCl9LGZ1bmN0aW9uKEEpe3JldHVybiAwfGZuKEF8PTAsMSl9LGZ1bmN0aW9uKEEpe3JldHVybiAwfHRuKEF8PTAsMCl9LGZ1bmN0aW9uKEEpe3JldHVybiAwfHRuKEF8PTAsMSl9LGZ1bmN0aW9uKEEpe3JldHVybiAyfSxmdW5jdGlvbihBKXtyZXR1cm4gMD09KDB8dHJbNTY2OTZdKSYmMHxpYig1NjY5NikmJihmdW5jdGlvbigpe3ZhciBBPTAsZT0wO2lmKDA9PSgwfHRyWzU2NzA0XSkmJjB8aWIoNTY3MDQpKXtlPTU5OTM2O2Rve2ZvcihhcltlPj4yXT0wLGFyW2UrND4+Ml09MCxhcltlKzg+PjJdPTAsQT0wOzMhPSgwfEEpOylhcltlKyhBPDwyKT4+Ml09MCxBPUErMXwwO2U9ZSsxMnwwfXdoaWxlKDYwMTA0IT0oMHxlKSl9R3UoNTk5MzYsNTQzMDIpLEd1KDU5OTQ4LDU0MzA5KSxHdSg1OTk2MCw1NDMxNiksR3UoNTk5NzIsNTQzMjQpLEd1KDU5OTg0LDU0MzM0KSxHdSg1OTk5Niw1NDM0MyksR3UoNjAwMDgsNTQzNTApLEd1KDYwMDIwLDU0MzU5KSxHdSg2MDAzMiw1NDM2MyksR3UoNjAwNDQsNTQzNjcpLEd1KDYwMDU2LDU0MzcxKSxHdSg2MDA2OCw1NDM3NSksR3UoNjAwODAsNTQzNzkpLEd1KDYwMDkyLDU0MzgzKX0oKSxhclsxNTAyNl09NTk5MzYpLDB8YXJbMTUwMjZdfSxmdW5jdGlvbihBKXtyZXR1cm4gMD09KDB8dHJbNTY2ODBdKSYmMHxpYig1NjY4MCkmJihmdW5jdGlvbigpe3ZhciBBPTAsZT0wO2lmKDA9PSgwfHRyWzU2Njg4XSkmJjB8aWIoNTY2ODgpKXtlPTU5NjQ0O2Rve2ZvcihhcltlPj4yXT0wLGFyW2UrND4+Ml09MCxhcltlKzg+PjJdPTAsQT0wOzMhPSgwfEEpOylhcltlKyhBPDwyKT4+Ml09MCxBPUErMXwwO2U9ZSsxMnwwfXdoaWxlKDU5OTMyIT0oMHxlKSl9R3UoNTk2NDQsNTQxNzIpLEd1KDU5NjU2LDU0MTgwKSxHdSg1OTY2OCw1NDE4OSksR3UoNTk2ODAsNTQxOTUpLEd1KDU5NjkyLDU0MjAxKSxHdSg1OTcwNCw1NDIwNSksR3UoNTk3MTYsNTQyMTApLEd1KDU5NzI4LDU0MjE1KSxHdSg1OTc0MCw1NDIyMiksR3UoNTk3NTIsNTQyMzIpLEd1KDU5NzY0LDU0MjQwKSxHdSg1OTc3Niw1NDI0OSksR3UoNTk3ODgsNTQyNTgpLEd1KDU5ODAwLDU0MjYyKSxHdSg1OTgxMiw1NDI2NiksR3UoNTk4MjQsNTQyNzApLEd1KDU5ODM2LDU0MjAxKSxHdSg1OTg0OCw1NDI3NCksR3UoNTk4NjAsNTQyNzgpLEd1KDU5ODcyLDU0MjgyKSxHdSg1OTg4NCw1NDI4NiksR3UoNTk4OTYsNTQyOTApLEd1KDU5OTA4LDU0Mjk0KSxHdSg1OTkyMCw1NDI5OCl9KCksYXJbMTQ5ODNdPTU5NjQ0KSwwfGFyWzE0OTgzXX0sZnVuY3Rpb24oQSl7cmV0dXJuIDA9PSgwfHRyWzU2NjY0XSkmJjB8aWIoNTY2NjQpJiYoZnVuY3Rpb24oKXt2YXIgQT0wLGU9MDtpZigwPT0oMHx0cls1NjY3Ml0pJiYwfGliKDU2NjcyKSl7ZT01OTM1Mjtkb3tmb3IoYXJbZT4+Ml09MCxhcltlKzQ+PjJdPTAsYXJbZSs4Pj4yXT0wLEE9MDszIT0oMHxBKTspYXJbZSsoQTw8Mik+PjJdPTAsQT1BKzF8MDtlPWUrMTJ8MH13aGlsZSg1OTY0MCE9KDB8ZSkpfUd1KDU5MzUyLDU0MTY2KSxHdSg1OTM2NCw1NDE2OSl9KCksYXJbMTQ5MTBdPTU5MzUyKSwwfGFyWzE0OTEwXX0sZnVuY3Rpb24oQSl7QXw9MDt2YXIgZSxyLGk9MCxmPTA7cmV0dXJuIGU9dXI9KHI9dXIpKzMxJi0zMix1cj11cisxNnwwLDA9PSgwfHRyWzU2NjU2XSkmJjB8aWIoNTY2NTYpJiYoYXJbMTQ4MzVdPTAsYXJbMTQ4MzZdPTAsNDI5NDk2NzI3OTwoaT0oYXJbMTQ4MzddPTApfFlmKDU0MTQ1KSk+Pj4wJiZwdSgpLGk+Pj4wPDExPyh0cls1OTM1MV09aSxBPTU5MzQwKTooQT0wfGh1KGY9aSsxNiYtMTYpLGFyWzE0ODM1XT1BLGFyWzE0ODM3XT0tMjE0NzQ4MzY0OHxmLGFyWzE0ODM2XT1pKSx3ZihBLDU0MTQ1LGkpLFFmKEEraXwodHJbZT4+MF09MCksZSkpLHVyPXIsNTkzNDB9LGZ1bmN0aW9uKEEpe0F8PTA7dmFyIGUscixpPTAsZj0wO3JldHVybiBlPXVyPShyPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCwwPT0oMHx0cls1NjY0OF0pJiYwfGliKDU2NjQ4KSYmKGFyWzE0ODMyXT0wLGFyWzE0ODMzXT0wLDQyOTQ5NjcyNzk8KGk9KGFyWzE0ODM0XT0wKXxZZig1NDEzMykpPj4+MCYmcHUoKSxpPj4+MDwxMT8odHJbNTkzMzldPWksQT01OTMyOCk6KEE9MHxodShmPWkrMTYmLTE2KSxhclsxNDgzMl09QSxhclsxNDgzNF09LTIxNDc0ODM2NDh8ZixhclsxNDgzM109aSksd2YoQSw1NDEzMyxpKSxRZihBK2l8KHRyW2U+PjBdPTApLGUpKSx1cj1yLDU5MzI4fSxmdW5jdGlvbihBKXtBfD0wO3ZhciBlLHIsaT0wLGY9MDtyZXR1cm4gZT11cj0ocj11cikrMzEmLTMyLHVyPXVyKzE2fDAsMD09KDB8dHJbNTY2NDBdKSYmMHxpYig1NjY0MCkmJihhclsxNDgyOV09MCxhclsxNDgzMF09MCw0Mjk0OTY3Mjc5PChpPShhclsxNDgzMV09MCl8WWYoNTQxMjQpKT4+PjAmJnB1KCksaT4+PjA8MTE/KHRyWzU5MzI3XT1pLEE9NTkzMTYpOihBPTB8aHUoZj1pKzE2Ji0xNiksYXJbMTQ4MjldPUEsYXJbMTQ4MzFdPS0yMTQ3NDgzNjQ4fGYsYXJbMTQ4MzBdPWkpLHdmKEEsNTQxMjQsaSksUWYoQStpfCh0cltlPj4wXT0wKSxlKSksdXI9ciw1OTMxNn0sZnVuY3Rpb24oQSl7QXw9MDt2YXIgZSxyLGk9MCxmPTA7cmV0dXJuIGU9dXI9KHI9dXIpKzMxJi0zMix1cj11cisxNnwwLDA9PSgwfHRyWzU2NjMyXSkmJjB8aWIoNTY2MzIpJiYoYXJbMTQ4MjZdPTAsYXJbMTQ4MjddPTAsNDI5NDk2NzI3OTwoaT0oYXJbMTQ4MjhdPTApfFlmKDU0MTE1KSk+Pj4wJiZwdSgpLGk+Pj4wPDExPyh0cls1OTMxNV09aSxBPTU5MzA0KTooQT0wfGh1KGY9aSsxNiYtMTYpLGFyWzE0ODI2XT1BLGFyWzE0ODI4XT0tMjE0NzQ4MzY0OHxmLGFyWzE0ODI3XT1pKSx3ZihBLDU0MTE1LGkpLFFmKEEraXwodHJbZT4+MF09MCksZSkpLHVyPXIsNTkzMDR9LGZ1bmN0aW9uKEEpe3JldHVybiAyfSxmdW5jdGlvbihBKXtyZXR1cm4gMD09KDB8dHJbNTY3NzZdKSYmMHxpYig1Njc3NikmJihmdW5jdGlvbigpe3ZhciBBPTAsZT0wO2lmKDA9PSgwfHRyWzU2Nzg0XSkmJjB8aWIoNTY3ODQpKXtlPTYwNzQ4O2Rve2ZvcihhcltlPj4yXT0wLGFyW2UrND4+Ml09MCxhcltlKzg+PjJdPTAsQT0wOzMhPSgwfEEpOylhcltlKyhBPDwyKT4+Ml09MCxBPUErMXwwO2U9ZSsxMnwwfXdoaWxlKDYwOTE2IT0oMHxlKSl9VHUoNjA3NDgsMTU5MDQpLFR1KDYwNzYwLDE1OTMyKSxUdSg2MDc3MiwxNTk2MCksVHUoNjA3ODQsMTU5OTIpLFR1KDYwNzk2LDE2MDMyKSxUdSg2MDgwOCwxNjA2OCksVHUoNjA4MjAsMTYwOTYpLFR1KDYwODMyLDE2MTMyKSxUdSg2MDg0NCwxNjE0OCksVHUoNjA4NTYsMTYxNjQpLFR1KDYwODY4LDE2MTgwKSxUdSg2MDg4MCwxNjE5NiksVHUoNjA4OTIsMTYyMTIpLFR1KDYwOTA0LDE2MjI4KX0oKSxhclsxNTIyOV09NjA3NDgpLDB8YXJbMTUyMjldfSxmdW5jdGlvbihBKXtyZXR1cm4gMD09KDB8dHJbNTY3NjBdKSYmMHxpYig1Njc2MCkmJihmdW5jdGlvbigpe3ZhciBBPTAsZT0wO2lmKDA9PSgwfHRyWzU2NzY4XSkmJjB8aWIoNTY3NjgpKXtlPTYwNDU2O2Rve2ZvcihhcltlPj4yXT0wLGFyW2UrND4+Ml09MCxhcltlKzg+PjJdPTAsQT0wOzMhPSgwfEEpOylhcltlKyhBPDwyKT4+Ml09MCxBPUErMXwwO2U9ZSsxMnwwfXdoaWxlKDYwNzQ0IT0oMHxlKSl9VHUoNjA0NTYsMTUzODQpLFR1KDYwNDY4LDE1NDE2KSxUdSg2MDQ4MCwxNTQ1MiksVHUoNjA0OTIsMTU0NzYpLFR1KDYwNTA0LDE1NTAwKSxUdSg2MDUxNiwxNTUxNiksVHUoNjA1MjgsMTU1MzYpLFR1KDYwNTQwLDE1NTU2KSxUdSg2MDU1MiwxNTU4NCksVHUoNjA1NjQsMTU2MjQpLFR1KDYwNTc2LDE1NjU2KSxUdSg2MDU4OCwxNTY5MiksVHUoNjA2MDAsMTU3MjgpLFR1KDYwNjEyLDE1NzQ0KSxUdSg2MDYyNCwxNTc2MCksVHUoNjA2MzYsMTU3NzYpLFR1KDYwNjQ4LDE1NTAwKSxUdSg2MDY2MCwxNTc5MiksVHUoNjA2NzIsMTU4MDgpLFR1KDYwNjg0LDE1ODI0KSxUdSg2MDY5NiwxNTg0MCksVHUoNjA3MDgsMTU4NTYpLFR1KDYwNzIwLDE1ODcyKSxUdSg2MDczMiwxNTg4OCl9KCksYXJbMTUxODZdPTYwNDU2KSwwfGFyWzE1MTg2XX0sZnVuY3Rpb24oQSl7cmV0dXJuIDA9PSgwfHRyWzU2NzQ0XSkmJjB8aWIoNTY3NDQpJiYoZnVuY3Rpb24oKXt2YXIgQT0wLGU9MDtpZigwPT0oMHx0cls1Njc1Ml0pJiYwfGliKDU2NzUyKSl7ZT02MDE2NDtkb3tmb3IoYXJbZT4+Ml09MCxhcltlKzQ+PjJdPTAsYXJbZSs4Pj4yXT0wLEE9MDszIT0oMHxBKTspYXJbZSsoQTw8Mik+PjJdPTAsQT1BKzF8MDtlPWUrMTJ8MH13aGlsZSg2MDQ1MiE9KDB8ZSkpfVR1KDYwMTY0LDE1MzYwKSxUdSg2MDE3NiwxNTM3Mil9KCksYXJbMTUxMTNdPTYwMTY0KSwwfGFyWzE1MTEzXX0sZnVuY3Rpb24oQSl7QXw9MDt2YXIgZSxyPTAsaT0wLGY9MDtpZihBPXVyPShlPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCwwPT0oMHx0cls1NjczNl0pJiYwfGliKDU2NzM2KSl7YXJbMTUwMzhdPTAsYXJbMTUwMzldPTAsMTA3Mzc0MTgwNzwoaT0oYXJbMTUwNDBdPTApfE1yKDE1Mjc2KSk+Pj4wJiZwdSgpO2Rve2lmKDI8PWk+Pj4wKXtpZighKDEwNzM3NDE4MjM8KHI9aSs0Ji00KT4+PjApKXtmPTB8aHUocjw8MiksYXJbMTUwMzhdPWYsYXJbMTUwNDBdPS0yMTQ3NDgzNjQ4fHIsYXJbMTUwMzldPWk7YnJlYWt9bEEoKX1lbHNlIHRyWzYwMTYzXT1pLGY9NjAxNTJ9d2hpbGUoMCk7WmYoZiwxNTI3NixpKSxsbihmKyhpPDwyKXwoYXJbQT4+Ml09MCksQSl9cmV0dXJuIHVyPWUsNjAxNTJ9LGZ1bmN0aW9uKEEpe0F8PTA7dmFyIGUscj0wLGk9MCxmPTA7aWYoQT11cj0oZT11cikrMzEmLTMyLHVyPXVyKzE2fDAsMD09KDB8dHJbNTY3MjhdKSYmMHxpYig1NjcyOCkpe2FyWzE1MDM1XT0wLGFyWzE1MDM2XT0wLDEwNzM3NDE4MDc8KGk9KGFyWzE1MDM3XT0wKXxNcigxNTIyOCkpPj4+MCYmcHUoKTtkb3tpZigyPD1pPj4+MCl7aWYoISgxMDczNzQxODIzPChyPWkrNCYtNCk+Pj4wKSl7Zj0wfGh1KHI8PDIpLGFyWzE1MDM1XT1mLGFyWzE1MDM3XT0tMjE0NzQ4MzY0OHxyLGFyWzE1MDM2XT1pO2JyZWFrfWxBKCl9ZWxzZSB0cls2MDE1MV09aSxmPTYwMTQwfXdoaWxlKDApO1pmKGYsMTUyMjgsaSksbG4oZisoaTw8Mil8KGFyW0E+PjJdPTApLEEpfXJldHVybiB1cj1lLDYwMTQwfSxmdW5jdGlvbihBKXtBfD0wO3ZhciBlLHI9MCxpPTAsZj0wO2lmKEE9dXI9KGU9dXIpKzMxJi0zMix1cj11cisxNnwwLDA9PSgwfHRyWzU2NzIwXSkmJjB8aWIoNTY3MjApKXthclsxNTAzMl09MCxhclsxNTAzM109MCwxMDczNzQxODA3PChpPShhclsxNTAzNF09MCl8TXIoMTUxOTIpKT4+PjAmJnB1KCk7ZG97aWYoMjw9aT4+PjApe2lmKCEoMTA3Mzc0MTgyMzwocj1pKzQmLTQpPj4+MCkpe2Y9MHxodShyPDwyKSxhclsxNTAzMl09ZixhclsxNTAzNF09LTIxNDc0ODM2NDh8cixhclsxNTAzM109aTticmVha31sQSgpfWVsc2UgdHJbNjAxMzldPWksZj02MDEyOH13aGlsZSgwKTtaZihmLDE1MTkyLGkpLGxuKGYrKGk8PDIpfChhcltBPj4yXT0wKSxBKX1yZXR1cm4gdXI9ZSw2MDEyOH0sZnVuY3Rpb24oQSl7QXw9MDt2YXIgZSxyPTAsaT0wLGY9MDtpZihBPXVyPShlPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCwwPT0oMHx0cls1NjcxMl0pJiYwfGliKDU2NzEyKSl7YXJbMTUwMjldPTAsYXJbMTUwMzBdPTAsMTA3Mzc0MTgwNzwoaT0oYXJbMTUwMzFdPTApfE1yKDE1MTU2KSk+Pj4wJiZwdSgpO2Rve2lmKDI8PWk+Pj4wKXtpZighKDEwNzM3NDE4MjM8KHI9aSs0Ji00KT4+PjApKXtmPTB8aHUocjw8MiksYXJbMTUwMjldPWYsYXJbMTUwMzFdPS0yMTQ3NDgzNjQ4fHIsYXJbMTUwMzBdPWk7YnJlYWt9bEEoKX1lbHNlIHRyWzYwMTI3XT1pLGY9NjAxMTZ9d2hpbGUoMCk7WmYoZiwxNTE1NixpKSxsbihmKyhpPDwyKXwoYXJbQT4+Ml09MCksQSl9cmV0dXJuIHVyPWUsNjAxMTZ9LGZ1bmN0aW9uKEEpe3JldHVybiAxMjd9LGZ1bmN0aW9uKEEpe3JldHVybiAxMjd9LGZ1bmN0aW9uKEEpe3JldHVybiAwfSxmdW5jdGlvbihBKXtyZXR1cm4gMTI3fSxmdW5jdGlvbihBKXtyZXR1cm4gMTI3fSxmdW5jdGlvbihBKXtyZXR1cm4gMH0sZnVuY3Rpb24oQSl7cmV0dXJuIDIxNDc0ODM2NDd9LGZ1bmN0aW9uKEEpe3JldHVybiAyMTQ3NDgzNjQ3fSxmdW5jdGlvbihBKXtyZXR1cm4gMH0sZnVuY3Rpb24oQSl7cmV0dXJuIDIxNDc0ODM2NDd9LGZ1bmN0aW9uKEEpe3JldHVybiAyMTQ3NDgzNjQ3fSxmdW5jdGlvbihBKXtyZXR1cm4gMH0sZnVuY3Rpb24oQSl7cmV0dXJuIDB9LGZ1bmN0aW9uKEEpe3JldHVybiAwfSxmdW5jdGlvbihBKXtyZXR1cm4gNH0sZnVuY3Rpb24oQSl7dmFyIGUscj0wO2lmKHI9MHxyZigwfGFyWyhBPShBfD0wKSs4fDApPj4yXSksZT0wfGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTAscnw9MDt2YXIgaSxmPTAsbj0wLHQ9MDtmPXVyPShpPXVyKSszMSYtMzIsdXI9dXIrMTZ8MDtBOmRve2lmKGUpe2Rve2lmKDB8cil7aWYodD0wPT0oMHxBKT9mOkEsLTE8KEE9MHx0cltlPj4wXSk8PDI0Pj4yNCl7YXJbdD4+Ml09MjU1JkEsQT1BPDwyND4+MjQhPTAmMTticmVhayBBfWlmKG49MTA0ODgsQT0wfHRyW2U+PjBdLCEoMHxhclthcltuPj4yXT4+Ml0pKXthclt0Pj4yXT1BPDwyND4+MjQmNTczNDMsQT0xO2JyZWFrIEF9aWYoKEE9KDI1NSZBKS0xOTR8MCk+Pj4wPD01MCl7aWYoZj1lKzF8MCxuPTB8YXJbOTg5NisoQTw8Mik+PjJdLHI+Pj4wPDQmJm4mLTIxNDc0ODM2NDg+Pj4oKDYqcnwwKS02fDApfDApYnJlYWs7aWYoKChyPShBPTB8Y3JbZj4+MF0pPj4+MykrLTE2fHIrKG4+PjI2KSk+Pj4wPD03KXtpZigwPD0oMHwoQT1BKy0xMjh8bjw8NikpKXthclt0Pj4yXT1BLEE9MjticmVhayBBfWlmKChmPSgwfGNyW2UrMj4+MF0pLTEyOHwwKT4+PjA8PTYzKXtpZigwPD0oMHwoZnw9QTw8NikpKXthclt0Pj4yXT1mLEE9MzticmVhayBBfWlmKChBPSgwfGNyW2UrMz4+MF0pLTEyOHwwKT4+PjA8PTYzKXthclt0Pj4yXT1BfGY8PDYsQT00O2JyZWFrIEF9fX19fX13aGlsZSgwKTthclsoQT0xMDM2NCk+PjJdPTg0LEE9LTF9ZWxzZSBBPTB9d2hpbGUoMCk7cmV0dXJuIHVyPWksMHxBfSgwLDAsNCksMHxyJiZyZihyKSxlKUE9LTE7ZWxzZXtpZihBPTB8YXJbQT4+Ml0pcmV0dXJuIHI9MHxyZihBKSxBPTB8eWkoKSwwfHImJnJmKHIpLDE9PSgwfEEpfDA7QT0xfXJldHVybiAwfEF9LGZ1bmN0aW9uKEEpe3JldHVybiAwfSxmdW5jdGlvbihBKXt2YXIgZT0wO3JldHVybihBPTB8YXJbKEF8PTApKzg+PjJdKT8oZT0wfHJmKEEpLEE9MHx5aSgpLGUmJnJmKGUpKTpBPTEsMHxBfSxmdW5jdGlvbihBKXtyZXR1cm4gMHx0clsoQXw9MCkrOD4+MF19LGZ1bmN0aW9uKEEpe3JldHVybiAwfHRyWyhBfD0wKSs5Pj4wXX0sZnVuY3Rpb24oQSl7cmV0dXJuIDB8YXJbKEF8PTApKzg+PjJdfSxmdW5jdGlvbihBKXtyZXR1cm4gMHxhclsoQXw9MCkrMTI+PjJdfSxmdW5jdGlvbihBKXtyZXR1cm4gMX0sZnVuY3Rpb24oQSl7cmV0dXJuIDF9LGZ1bmN0aW9uKEEpe3JldHVybiAxfSxmdW5jdGlvbihBKXtyZXR1cm4gMH0sZnVuY3Rpb24oQSl7cmV0dXJuIDB9LGZ1bmN0aW9uKEEpe3JldHVybiA0fSxmdW5jdGlvbihBKXtyZXR1cm4gNTU4NDd9LGZ1bmN0aW9uKEEpe3JldHVybiAwfChlPShBfD0wKSs0fDAsMHxhclsoZXw9MCk+PjJdKTt2YXIgZX0sZnVuY3Rpb24oQSl7dmFyIGUscixpLGYsbj0wO3JldHVybiB1cj0ocj11cikrMTZ8MCxmPXIsaXNbNTExJihBfD0wKV0oZiksQT0wfHljKChuPShpPShuPTB8dHJbZisxMT4+MF0pPDwyND4+MjQ8MCk/MHxhcltmKzQ+PjJdOjI1NSZuKSs0fDApLGFyW0E+PjJdPW4sZT0wfGFyW2Y+PjJdLGhiKEErNHwwLDB8KGk/ZTpmKSwwfG4pLHVyPShpJiZ2dShlKSxyKSwwfEF9LGZ1bmN0aW9uKEEpe3JldHVybiAwfHpiWzcmKEF8PTApXSgpfSxmdW5jdGlvbihBKXtyZXR1cm4gMHx6Yls3JihBfD0wKV0oKX0sZnVuY3Rpb24oQSl7dmFyIGUscixpLGYsbix0PTA7aWYodXI9KG49dXIpKzE2fDAsc2woaT1uLDQwKygwfGFyWyhBfD0wKT4+Ml0pfDApLGY9KHQ9MHxhclsocj1pKzR8MCk+PjJdKS0oQT0wfGFyW2k+PjJdKT4+MywhKGU9QSkpcmV0dXJuIHVyPW4sMHxmO2lmKCgwfHQpIT0oMHxlKSl7Zm9yKDtBPXQrLTh8MCxhcltyPj4yXT1BLCh0PTB8YXJbdCstND4+Ml0pJiYoZHUodCksQT0wfGFyW3I+PjJdKSwoMHxBKSE9KDB8ZSk7KXQ9QTtBPTB8YXJbaT4+Ml19cmV0dXJuIHZ1KEEpLHVyPW4sMHxmfSxmdW5jdGlvbihBKXtyZXR1cm4gMTI3Mn0sZnVuY3Rpb24oQSl7cmV0dXJuIDEzMTJ9LGZ1bmN0aW9uKEEpe3JldHVybiAxMzUyfSxFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYl0sSGI9W1hiLGZ1bmN0aW9uKEEsZSl7ZXw9MDt2YXIgcixpPTAsZj0wLG49MDtpZigoaT0wfGFyWyhmPShBfD0wKSs0NHwwKT4+Ml0pPj4+MDwobj0wfGFyW0ErMjQ+PjJdKT4+PjAmJihpPWFyW2Y+PjJdPW4pLGY9MHxhclsocj1BKzEyfDApPj4yXSwoMHxhcltBKzg+PjJdKT4+PjA+PWY+Pj4wKXJldHVybiAwfChlPS0xKTtpZigtMT09KDB8ZSkpcmV0dXJuIGFyW3I+PjJdPWYrLTEsYXJbQSsxNj4+Ml09aSwoZT0wKXxlO2lmKDE2JmFyW0ErNDg+PjJdKW49MjU1JmUsZj1mKy0xfDA7ZWxzZSBpZigobj0yNTUmZSk8PDI0Pj4yNCE9KDB8dHJbKGY9ZistMXwwKT4+MF0pKXJldHVybiAwfChlPS0xKTtyZXR1cm4gYXJbcj4+Ml09ZixhcltBKzE2Pj4yXT1pLHRyW2Y+PjBdPW4sMHxlfSxmdW5jdGlvbihBLGUpe3ZhciByLGksZixuLHQsbyxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTA7aWYodXI9KG89dXIpKzE2fDAsaT1vLC0xPT0oMHwoZXw9MCkpKXJldHVybiB1cj1vLCh3PTApfHc7aWYobj0oQXw9MCkrOHwwLHQ9KDB8YXJbKGY9QSsxMnwwKT4+Ml0pLSgwfGFyW24+PjJdKXwwLCgwfChkPTB8YXJbKHc9QSsyNHwwKT4+Ml0pKT09KDB8KGE9MHxhclsocj1BKzI4fDApPj4yXSkpKXtpZighKDE2JmFyWyhzPUErNDh8MCk+PjJdKSlyZXR1cm4gdXI9bywwfCh3PS0xKTtiPTB8YXJbKHU9QSsyMHwwKT4+Ml0saz0oMHxhclsoaD1BKzQ0fDApPj4yXSktYnwwLF91KGw9QSszMnwwLDApLFZ1KGwsYz0oMHx0clsoYT1sKzExfDApPj4wXSk8MD8oMjE0NzQ4MzY0NyZhcltBKzQwPj4yXSktMXwwOjEwLDApLChhPTB8dHJbYT4+MF0pPDwyND4+MjQ8MD8oYz0wfGFyW2w+PjJdLGE9MHxhcltBKzM2Pj4yXSk6KGM9bCxhJj0yNTUpLGE9YythfDAsYXJbdT4+Ml09YyxhcltyPj4yXT1hLGQ9YysoZC1iKXwwLGFyW3c+PjJdPWQsYz1jK2t8MCxhcltoPj4yXT1jLGw9az1oLGI9YX1lbHNlIHM9QSs0OHwwLGM9MHxhclsobD1rPWM9QSs0NHwwKT4+Ml0sYj1hO3JldHVybiB1PWQrMXwwLGFyW2k+PjJdPXUsYz0wfGFyWyh1Pj4+MDxjPj4+MD9sOmkpPj4yXSxhcltrPj4yXT1jLDgmYXJbcz4+Ml18MCYmKCgwfHRyWyhhPUErMzJ8MCkrMTE+PjBdKTwwJiYoYT0wfGFyW2E+PjJdKSxhcltuPj4yXT1hLGFyW2Y+PjJdPWErdCxhcltBKzE2Pj4yXT1jKSwoMHxkKT09KDB8Yik/KHc9MHxIYlszMSZhcls1MisoMHxhcltBPj4yXSk+PjJdXShBLDI1NSZlKSx1cj1vLDB8dyk6KGFyW3c+PjJdPXUsdHJbZD4+MF09ZSx1cj1vLDB8KHc9MjU1JmUpKX0sZnVuY3Rpb24oQSxlKXtyZXR1cm4gMH0sZnVuY3Rpb24oQSxlKXtlfD0wO3ZhciByPTA7cmV0dXJuIHI9MHxhclsoQXw9MCkrMzc2MTU2Pj4yXSwoMHxhcltBKzM3NjE2MD4+Ml0pLXI+PjI+Pj4wPD1lPj4+MD8ocj0wKXxyOjB8KHI9MHxhcltyKyhlPDwyKT4+Ml0pfSxmdW5jdGlvbihBLGUpe3JldHVybigwfChlfD0wKSk8PS0xPyhlPTApfGU6MHwoZT0oKDB8YXJbKEF8PTApKzM3NjE2MD4+Ml0pLSgwfGFyW0ErMzc2MTU2Pj4yXSk+PjJ8MCk+KDB8ZSkpfSxmdW5jdGlvbihBLGUpe3JldHVybi0xfSxmdW5jdGlvbihBLGUpe3JldHVybi0xfSxmdW5jdGlvbihBLGUpe3JldHVybi0xfSxmdW5jdGlvbihBLGUpe3JldHVybi0xfSxmdW5jdGlvbihBLGUpe0F8PTAsZXw9MDt2YXIgcixpLGYsbix0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wO2Y9dXI9KG49dXIpKzMxJi0zMix1cj11ciszMnwwLHI9MTYrZnwwLG89OCtmfDAsaT00K2Z8MDtkb3tpZigwfFVmKGUsLTEpKXQ9MTU7ZWxzZXtpZihzPTB8cGYoZSksYXJbbz4+Ml09cyxzPUErMzJ8MCwwfHRyW0ErNDQ+PjBdKXtpZigxPT0oMHxVaShvLDQsMSwwfGFyW3M+PjJdKSkpe3Q9MTU7YnJlYWt9QT0tMTticmVha31mb3IodT1vKzR8MCxiPUErMzZ8MCxhPUErNDB8MCxjPTgrKGFyW2k+PjJdPXIpfDAsbD1yLEE9bzs7KXtpZih0PTB8YXJbYj4+Ml0sbz0xPT0oMHwodD0wfGVzWzE1JmFyWzEyKygwfGFyW3Q+PjJdKT4+Ml1dKHQsMHxhclthPj4yXSxBLHUsZixyLGMsaSkpKSwoMHxhcltmPj4yXSk9PSgwfEEpKXt0PTE0O2JyZWFrfWlmKDM9PSgwfHQpKXtpZigxIT0oMHxVaShBLDEsMSwwfGFyW3M+PjJdKSkpe3Q9MTQ7YnJlYWt9fWVsc2V7aWYoMSE9KDF8dCkpe3Q9MTQ7YnJlYWt9aWYoKDB8VWkociwxLHQ9KDB8YXJbaT4+Ml0pLWx8MCwwfGFyW3M+PjJdKSkhPSgwfHQpKXt0PTE0O2JyZWFrfUE9bz8wfGFyW2Y+PjJdOkF9aWYoIW8pe3Q9MTM7YnJlYWt9fWlmKDEzPT0oMHx0KSl7dD0xNTticmVha31pZigxND09KDB8dCkpe0E9LTE7YnJlYWt9fX13aGlsZSgwKTtyZXR1cm4gMTU9PSgwfHQpJiYoQT0wfGZ1bmN0aW9uKEEpezB8VWYoQXw9MCwtMSkmJihBPTApO3JldHVybiAwfEF9KGUpKSx1cj1uLDB8QX0sZnVuY3Rpb24oQSxlKXtBfD0wLGV8PTA7dmFyIHIsaSxmLG4sdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MDtmPXVyPShuPXVyKSszMSYtMzIsdXI9dXIrMzJ8MCxyPTE2K2Z8MCxvPTgrZnwwLGk9NCtmfDA7ZG97aWYoMHxNZihlLC0xKSl0PTE1O2Vsc2V7aWYocz0wfHZmKGUpLHRyW28+PjBdPXMscz1BKzMyfDAsMHx0cltBKzQ0Pj4wXSl7aWYoMT09KDB8VWkobywxLDEsMHxhcltzPj4yXSkpKXt0PTE1O2JyZWFrfUE9LTE7YnJlYWt9Zm9yKHU9bysxfDAsYj1BKzM2fDAsYT1BKzQwfDAsYz04KyhhcltpPj4yXT1yKXwwLGw9cixBPW87Oyl7aWYodD0wfGFyW2I+PjJdLG89MT09KDB8KHQ9MHxlc1sxNSZhclsxMisoMHxhclt0Pj4yXSk+PjJdXSh0LDB8YXJbYT4+Ml0sQSx1LGYscixjLGkpKSksKDB8YXJbZj4+Ml0pPT0oMHxBKSl7dD0xNDticmVha31pZigzPT0oMHx0KSl7aWYoMSE9KDB8VWkoQSwxLDEsMHxhcltzPj4yXSkpKXt0PTE0O2JyZWFrfX1lbHNle2lmKDEhPSgxfHQpKXt0PTE0O2JyZWFrfWlmKCgwfFVpKHIsMSx0PSgwfGFyW2k+PjJdKS1sfDAsMHxhcltzPj4yXSkpIT0oMHx0KSl7dD0xNDticmVha31BPW8/MHxhcltmPj4yXTpBfWlmKCFvKXt0PTEzO2JyZWFrfX1pZigxMz09KDB8dCkpe3Q9MTU7YnJlYWt9aWYoMTQ9PSgwfHQpKXtBPS0xO2JyZWFrfX19d2hpbGUoMCk7cmV0dXJuIDE1PT0oMHx0KSYmKEE9MHxmdW5jdGlvbihBKXswfE1mKEF8PTAsLTEpJiYoQT0wKTtyZXR1cm4gMHxBfShlKSksdXI9biwwfEF9LGZ1bmN0aW9uKEEsZSl7dmFyIHIsaSxmLG4sdCxvPTAsYT0wLGM9MCxsPTA7Yz11cj0odD11cikrMzEmLTMyLHVyPXVyKzMyfDAscj1jKzE2fDAsaT1jKzh8MCxhPWMrNHwwLGw9MHxVZihlfD0wLC0xKSxvPTAhPSgwfHRyWyhuPShBfD0wKSs1MnwwKT4+MF0pLGY9QSs0OHwwO2Rve2lmKGwpbz9vPWU6KGw9MSYoMV4oMHxVZihvPTB8YXJbZj4+Ml0sLTEpKSksdHJbbj4+MF09bCk7ZWxzZXtpZihvKXtzd2l0Y2gobD0wfHBmKDB8YXJbZj4+Ml0pLGFyW2E+PjJdPWwsbD0wfGFyW0ErMzY+PjJdLDB8ZXNbMTUmYXJbMTIrKDB8YXJbbD4+Ml0pPj4yXV0obCwwfGFyW0ErNDA+PjJdLGEsYSs0fDAsYyxyLDgrcnwwLGkpKXtjYXNlIDE6Y2FzZSAyOmM9MTA7YnJlYWs7Y2FzZSAzOnRyW3I+PjBdPWFyW2Y+PjJdLGFyW2k+PjJdPTErcixjPTc7YnJlYWs7ZGVmYXVsdDpjPTd9QTpkb3tpZig3PT0oMHxjKSlmb3Iobz1BKzMyfDA7Oyl7aWYoKGE9MHxhcltpPj4yXSk+Pj4wPD1yPj4+MCl7YT0xLG89MDticmVhayBBfWlmKGw9YSstMXwwLGFyW2k+PjJdPWwsLTE9PSgwfHVmKDB8dHJbbD4+MF0sMHxhcltvPj4yXSkpKXtjPTEwO2JyZWFrfX19d2hpbGUoMCk7aWYoMTA9PSgwfGMpJiYoYT0wLG89LTEpLCFhKWJyZWFrfWFyW2Y+PjJdPWUsdHJbbj4+MF09MSxvPWV9fXdoaWxlKDApO3JldHVybiB1cj10LDB8b30sZnVuY3Rpb24oQSxlKXt2YXIgcixpLGYsbix0LG89MCxhPTAsYz0wLGw9MDtjPXVyPSh0PXVyKSszMSYtMzIsdXI9dXIrMzJ8MCxyPWMrMTZ8MCxpPWMrNHwwLGE9Yys4fDAsbD0wfE1mKGV8PTAsLTEpLG89MCE9KDB8dHJbKG49KEF8PTApKzUyfDApPj4wXSksZj1BKzQ4fDA7ZG97aWYobClvP289ZToobD0xJigxXigwfE1mKG89MHxhcltmPj4yXSwtMSkpKSx0cltuPj4wXT1sKTtlbHNle2lmKG8pe3N3aXRjaChsPTB8dmYoMHxhcltmPj4yXSksdHJbYT4+MF09bCxsPTB8YXJbQSszNj4+Ml0sMHxlc1sxNSZhclsxMisoMHxhcltsPj4yXSk+PjJdXShsLDB8YXJbQSs0MD4+Ml0sYSxhKzF8MCxjLHIsOCtyfDAsaSkpe2Nhc2UgMTpjYXNlIDI6Yz0xMDticmVhaztjYXNlIDM6dHJbcj4+MF09YXJbZj4+Ml0sYXJbaT4+Ml09MStyLGM9NzticmVhaztkZWZhdWx0OmM9N31BOmRve2lmKDc9PSgwfGMpKWZvcihvPUErMzJ8MDs7KXtpZigoYT0wfGFyW2k+PjJdKT4+PjA8PXI+Pj4wKXthPTEsbz0wO2JyZWFrIEF9aWYobD1hKy0xfDAsYXJbaT4+Ml09bCwtMT09KDB8dWYoMHx0cltsPj4wXSwwfGFyW28+PjJdKSkpe2M9MTA7YnJlYWt9fX13aGlsZSgwKTtpZigxMD09KDB8YykmJihhPTAsbz0tMSksIWEpYnJlYWt9YXJbZj4+Ml09ZSx0cltuPj4wXT0xLG89ZX19d2hpbGUoMCk7cmV0dXJuIHVyPXQsMHxvfSxmdW5jdGlvbihBLGUpe3JldHVybi0xPChlfD0wKTw8MjQ+PjI0JiYoZT0oMHxUbCgpKSsoKDI1NSZlKTw8Mil8MCxlPTI1NSZhcltlPj4yXSksMHxlfSxmdW5jdGlvbihBLGUpe3JldHVybi0xPChlfD0wKTw8MjQ+PjI0JiYoZT0oMHxNbCgpKSsoZTw8MjQ+PjI0PDwyKXwwLGU9MjU1JmFyW2U+PjJdKSwwfGV9LGZ1bmN0aW9uKEEsZSl7cmV0dXJuIDB8KGV8PTApfSxmdW5jdGlvbihBLGUpe3JldHVybihlfD0wKT4+PjA8MTI4JiYoZT0oMHxUbCgpKSsoZTw8Mil8MCxlPTB8YXJbZT4+Ml0pLDB8ZX0sZnVuY3Rpb24oQSxlKXtyZXR1cm4oZXw9MCk+Pj4wPDEyOCYmKGU9KDB8TWwoKSkrKGU8PDIpfDAsZT0wfGFyW2U+PjJdKSwwfGV9LGZ1bmN0aW9uKEEsZSl7cmV0dXJuKGV8PTApPDwyND4+MjR8MH0sZnVuY3Rpb24oQSxlKXtyZXR1cm4gZXw9MCwwfGpiWzEyNyYoQXw9MCldKGUpfSxmdW5jdGlvbihBLGUpe3ZhciByLGk7cmV0dXJuIGV8PTAsdXI9KHI9dXIpKzE2fDAsaT1yLGZzWzYzJihBfD0wKV0oaSxlKSxmQSgwfGFyW2k+PjJdKSxlPTB8YXJbaT4+Ml0saUEoMHxlKSx1cj1yLDB8ZX0sZnVuY3Rpb24oQSxlKXtyZXR1cm4gMHxhclsoZXw9MCkrKDB8YXJbKEF8PTApPj4yXSk+PjJdfSxmdW5jdGlvbihBLGUpe3JldHVybiAwfGFyWyhlfD0wKSsoMHxhclsoQXw9MCk+PjJdKT4+Ml19LFhiLFhiLFhiLFhiLFhiLFhiLFhiLFhiXSx4Yj1bV2IsZnVuY3Rpb24oQSxlLHIpe3ZhciBpO3JldHVybiBlfD0wLHJ8PTAsMHwoKDB8KGk9MHxhclsoQT0oQXw9MCkrOHwwKSs0Pj4yXSkpPCgwfHIpfCgoMHxpKT09KDB8cik/KDB8YXJbQT4+Ml0pPj4+MDxlPj4+MDowKT8yOjApfSxmdW5jdGlvbihBLGUscil7ZXw9MCxyfD0wO3ZhciBpLGYsbix0PTAsbz0wLGE9MDtyZXR1cm4gdD0wfHRiKDB8KGY9MHxhclsodD1pPShBfD0wKSsxNnwwKT4+Ml0pLDB8YXJbdCs0Pj4yXSwwfHIsMCksYT1ELCgwfChvPTB8YXJbNCsobj1BKzh8MCk+PjJdKSk8KDB8YSl8KCgwfGEpPT0oMHxvKT90Pj4+MD4oMHxhcltuPj4yXSk+Pj4wOjApPyhhPTApfGE6KGhiKDB8ZSwoMHxhcltBKzQ+PjJdKStmfDAsMHxyKSxvPTB8dGIoMHxhclsobz1pKT4+Ml0sMHxhcltvKzQ+PjJdLDB8ciwwKSxhclsoYT1pKT4+Ml09byxhclthKzQ+PjJdPUQsMHwoYT0xKSl9LGZ1bmN0aW9uKEEsZSxyKXtlfD0wO3ZhciBpLGY9MDtyZXR1cm4oMHwocnw9MCkpPDB8KCgwfChmPTB8YXJbNCsoaT0oQXw9MCkrOHwwKT4+Ml0pKTwoMHxyKXwoKDB8Zik9PSgwfHIpPygwfGFyW2k+PjJdKT4+PjA8ZT4+PjA6MCkpPyhmPTApfGY6KGFyWyhmPUErMTZ8MCk+PjJdPWUsYXJbZis0Pj4yXT1yLDB8KGY9MSkpfSxmdW5jdGlvbihBLGUscil7cmV0dXJuIDB8KEF8PTApfSxmdW5jdGlvbihBLGUscil7ZXw9MCxyfD0wO3ZhciBpLGYsbj0wLHQ9MCxvPTAsYT0wO2ZvcihpPShBfD0wKSsxMnwwLGY9QSsxNnwwLG89MDshKCgwfHIpPD0oMHxvKSk7KWlmKChuPTB8YXJbaT4+Ml0pPj4+MDwodD0wfGFyW2Y+PjJdKT4+PjApd2YoZSxuLHQ9KDB8KGE9ci1vfDApKTwoMHwodD10LW58MCkpP2E6dCksYXJbaT4+Ml09KDB8YXJbaT4+Ml0pK3QsZT1lK3R8MCxvPXQrb3wwO2Vsc2V7aWYoLTE9PSgwfChuPTB8amJbMTI3JmFyWzQwKygwfGFyW0E+PjJdKT4+Ml1dKEEpKSkpYnJlYWs7YT0wfHZmKG4pLHRyW2U+PjBdPWEsZT1lKzF8MCxvPW8rMXwwfXJldHVybiAwfG99LGZ1bmN0aW9uKEEsZSxyKXtlfD0wLHJ8PTA7dmFyIGksZixuPTAsdD0wLG89MCxhPTA7Zm9yKGk9KEF8PTApKzI0fDAsZj1BKzI4fDAsbj0wOyEoKDB8cik8PSgwfG4pKTspaWYoKHQ9MHxhcltpPj4yXSk+Pj4wPChvPTB8YXJbZj4+Ml0pPj4+MCl3Zih0LGUsbz0oMHwoYT1yLW58MCkpPCgwfChvPW8tdHwwKSk/YTpvKSxhcltpPj4yXT0oMHxhcltpPj4yXSkrbyxlPWUrb3wwLG49bytufDA7ZWxzZXtpZihvPTB8YXJbNTIrKDB8YXJbQT4+Ml0pPj4yXSxhPTB8aGYoMHx0cltlPj4wXSksLTE9PSgwfEhiWzMxJm9dKEEsYSkpKWJyZWFrO2U9ZSsxfDAsbj1uKzF8MH1yZXR1cm4gMHxufSxmdW5jdGlvbihBLGUscil7ZXw9MCxyfD0wO3ZhciBpLGYsbj0wO3JldHVybiBuPXVyPShmPXVyKSszMSYtMzIsdXI9dXIrMzJ8MCxpPW4sYXJbKEF8PTApKzM2Pj4yXT0xMCwwPT0oNjQmYXJbQT4+Ml18MCkmJihhcltpPj4yXT1hcltBKzYwPj4yXSxhcltpKzQ+PjJdPTIxNTIzLGFyW2krOD4+Ml09bisxNiwwfFkoNTQsMHxpKSkmJih0cltBKzc1Pj4wXT0tMSksbj0wfEdjKEEsZSxyKSx1cj1mLDB8bn0sZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MCxyfD0wO3ZhciBpLGYsbj0wO3JldHVybiBuPXVyPShpPXVyKSszMSYtMzIsdXI9dXIrMzJ8MCxuPShmPW4pKzIwfDAsYXJbZj4+Ml09YXJbQSs2MD4+Ml0sYXJbZis0Pj4yXT0wLGFyW2YrOD4+Ml09ZSxhcltmKzEyPj4yXT1uLGFyW2YrMTY+PjJdPXIsQT0oMHxJYygwfFIoMTQwLDB8ZikpKTwwP2FyW24+PjJdPS0xOjB8YXJbbj4+Ml0sdXI9aSwwfEF9LGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTAscnw9MDt2YXIgaSxmLG4sdD0wLG89MCxhPTAsYz0wO3JldHVybiBjPXVyPShmPXVyKSszMSYtMzIsdXI9dXIrMzJ8MCxhclsoYz0odD1jKSsxNnwwKT4+Ml09ZSxvPWMrNHwwLG49MHxhclsoaT1BKzQ4fDApPj4yXSxhcltvPj4yXT1yLSgwIT0oMHxuKSYxKSxhPUErNDR8MCxhcltjKzg+PjJdPWFyW2E+PjJdLGFyW2MrMTI+PjJdPW4sYXJbdD4+Ml09YXJbQSs2MD4+Ml0sYXJbdCs0Pj4yXT1jLGFyW3QrOD4+Ml09MiwxPD0oMHwodD0wfEljKDB8TigxNDUsMHx0KSkpKT8oYz0wfGFyW28+PjJdKT4+PjA8dD4+PjAmJihvPTB8YXJbYT4+Ml0sYXJbKGE9QSs0fDApPj4yXT1vLGFyW0ErOD4+Ml09bysodC1jKSx0PSgwfGFyW2k+PjJdJiYoYXJbYT4+Ml09bysxLHRyW2UrKHIrLTEpPj4wXT0wfHRyW28+PjBdKSxyKSk6YXJbQT4+Ml09YXJbQT4+Ml18NDgmdF4xNix1cj1mLDB8dH0sR2MsZnVuY3Rpb24oQSxlLHIpe3ZhciBpLGY7cmV0dXJuIGV8PTAscnw9MCxoYigwfChmPTB8YXJbKGk9KEF8PTApKzIwfDApPj4yXSksMHxlLDB8KEE9cj4+PjA8KEE9KDB8YXJbQSsxNj4+Ml0pLWZ8MCk+Pj4wP3I6QSkpLGFyW2k+PjJdPSgwfGFyW2k+PjJdKStBLDB8cn0sZnVuY3Rpb24oQSxlLHIpe3JldHVybiAwfChBfD0wKX0sZnVuY3Rpb24oQSxlLHIpe2V8PTAscnw9MDt2YXIgaSxmLG49MCx0PTAsbz0wLGE9MDtmb3IoaT0oQXw9MCkrMTJ8MCxmPUErMTZ8MCxvPTA7ISgoMHxyKTw9KDB8bykpOylpZigobj0wfGFyW2k+PjJdKT4+PjA8KHQ9MHxhcltmPj4yXSk+Pj4wKVpmKGUsbix0PSgwfChhPXItb3wwKSk8KDB8KHQ9dC1uPj4yKSk/YTp0KSxhcltpPj4yXT0oMHxhcltpPj4yXSkrKHQ8PDIpLGU9ZSsodDw8Mil8MCxvPXQrb3wwO2Vsc2V7aWYoLTE9PSgwfChuPTB8amJbMTI3JmFyWzQwKygwfGFyW0E+PjJdKT4+Ml1dKEEpKSkpYnJlYWs7YT0wfHBmKG4pLGFyW2U+PjJdPWEsZT1lKzR8MCxvPW8rMXwwfXJldHVybiAwfG99LGZ1bmN0aW9uKEEsZSxyKXtlfD0wLHJ8PTA7dmFyIGksZixuPTAsdD0wLG89MCxhPTA7Zm9yKGk9KEF8PTApKzI0fDAsZj1BKzI4fDAsbj0wOyEoKDB8cik8PSgwfG4pKTspaWYoKHQ9MHxhcltpPj4yXSk+Pj4wPChvPTB8YXJbZj4+Ml0pPj4+MClaZih0LGUsbz0oMHwoYT1yLW58MCkpPCgwfChvPW8tdD4+MikpP2E6byksYXJbaT4+Ml09KDB8YXJbaT4+Ml0pKyhvPDwyKSxlPWUrKG88PDIpfDAsbj1vK258MDtlbHNle2lmKG89MHxhcls1MisoMHxhcltBPj4yXSk+PjJdLGE9MHxnZigwfGFyW2U+PjJdKSwtMT09KDB8SGJbMzEmb10oQSxhKSkpYnJlYWs7ZT1lKzR8MCxuPW4rMXwwfXJldHVybiAwfG59LGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTAscnw9MDt2YXIgaT0wLGY9MCxuPTA7QTpkb3tpZigwfHRyW0ErNDQ+PjBdKWk9MHxVaShlLDQsciwwfGFyW0ErMzI+PjJdKTtlbHNlIGZvcihpPTA7Oyl7aWYoKDB8cik8PSgwfGkpKWJyZWFrIEE7aWYobj0wfGFyWzUyKygwfGFyW0E+PjJdKT4+Ml0sZj0wfGdmKDB8YXJbZT4+Ml0pLC0xPT0oMHwoZj0wfEhiWzMxJm5dKEEsZikpKSlicmVhayBBO2k9aSsxfDAsZT1lKzR8MH19d2hpbGUoMCk7cmV0dXJuIDB8aX0sZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MCxyfD0wO3ZhciBpPTAsZj0wLG49MDtBOmRve2lmKDB8dHJbQSs0ND4+MF0paT0wfFVpKGUsMSxyLDB8YXJbQSszMj4+Ml0pO2Vsc2UgZm9yKGk9MDs7KXtpZigoMHxyKTw9KDB8aSkpYnJlYWsgQTtpZihuPTB8YXJbNTIrKDB8YXJbQT4+Ml0pPj4yXSxmPTB8aGYoMHx0cltlPj4wXSksLTE9PSgwfChmPTB8SGJbMzEmbl0oQSxmKSkpKWJyZWFrIEE7aT1pKzF8MCxlPWUrMXwwfX13aGlsZSgwKTtyZXR1cm4gMHxpfSxmdW5jdGlvbihBLGUscil7QXw9MCxlfD0wLHJ8PTA7dmFyIGk9MCxmPTA7Zm9yKEE9MDsoMHxlKSE9KDB8cik7KUE9KChmPS0yNjg0MzU0NTYmKGk9KDB8dHJbZT4+MF0pKyhBPDw0KXwwKSk+Pj4yNHxmKV5pLGU9ZSsxfDA7cmV0dXJuIDB8QX0sZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MCxyfD0wO3ZhciBpPTAsZj0wO2ZvcihBPTA7KDB8ZSkhPSgwfHIpOylBPSgoZj0tMjY4NDM1NDU2JihpPSgwfGFyW2U+PjJdKSsoQTw8NCl8MCkpPj4+MjR8ZileaSxlPWUrNHwwO3JldHVybiAwfEF9LGZ1bmN0aW9uKEEsZSxyKXtyZXR1cm4gcnw9MCwocj0wfGNmKCgwfHRyWyhlfD0wKSsxMT4+MF0pPDAmJmFyW2U+PjJdKSk+Pj4oLTEhPSgwfHIpJjEpfDB9LGZ1bmN0aW9uKEEsZSxyKXtyZXR1cm4gcnw9MCwocj0wfGNmKCgwfHRyWyhlfD0wKSsxMT4+MF0pPDAmJmFyW2U+PjJdKSk+Pj4oLTEhPSgwfHIpJjEpfDB9LGZ1bmN0aW9uKEEsZSxyKXtmb3IoQXw9MCxlfD0wLHJ8PTA7KDB8ZSkhPSgwfHIpOyktMTwoQT0wfHRyW2U+PjBdKTw8MjQ+PjI0JiYoQT0wfFRsKCksQT0yNTUmYXJbQSsodHJbZT4+MF08PDIpPj4yXSksdHJbZT4+MF09QSxlPWUrMXwwO3JldHVybiAwfHJ9LGZ1bmN0aW9uKEEsZSxyKXtmb3IoQXw9MCxlfD0wLHJ8PTA7KDB8ZSkhPSgwfHIpOyktMTwoQT0wfHRyW2U+PjBdKTw8MjQ+PjI0JiYoQT0wfE1sKCksQT0yNTUmYXJbQSsodHJbZT4+MF08PDIpPj4yXSksdHJbZT4+MF09QSxlPWUrMXwwO3JldHVybiAwfHJ9LGZ1bmN0aW9uKEEsZSxyKXtyZXR1cm4gcnw9MCwwfCgtMTwoZXw9MCk8PDI0Pj4yND9lOnIpfSxmdW5jdGlvbihBLGUscil7cmV0dXJuIEF8PTAsZXw9MCwwfChBPShyfD0wKT4+PjA8MTI4PyhBPSgwfFVsKCkpKyhyPDwxKXwwLChvcltBPj4xXSZlKTw8MTY+PjE2IT0wKTowKX0sZnVuY3Rpb24oQSxlLHIpe2ZvcihBfD0wLGV8PTAscnw9MDsoMHxlKSE9KDB8cik7KShBPTB8YXJbZT4+Ml0pPj4+MDwxMjgmJihBPTB8VGwoKSxBPTB8YXJbQSsoYXJbZT4+Ml08PDIpPj4yXSksYXJbZT4+Ml09QSxlPWUrNHwwO3JldHVybiAwfHJ9LGZ1bmN0aW9uKEEsZSxyKXtmb3IoQXw9MCxlfD0wLHJ8PTA7KDB8ZSkhPSgwfHIpOykoQT0wfGFyW2U+PjJdKT4+PjA8MTI4JiYoQT0wfE1sKCksQT0wfGFyW0ErKGFyW2U+PjJdPDwyKT4+Ml0pLGFyW2U+PjJdPUEsZT1lKzR8MDtyZXR1cm4gMHxyfSxmdW5jdGlvbihBLGUscil7cmV0dXJuIHJ8PTAsMHwoKGV8PTApPj4+MDwxMjg/MjU1JmU6cil9LGZ1bmN0aW9uKEEsZSxyKXtyfD0wO3ZhciBpLGYsbj0wLHQ9MDtpZihpPXVyPShmPXVyKSszMSYtMzIsdXI9dXIrNjR8MCwwfHh1KEF8PTAsZXw9MCkpZT0xO2Vsc2UgaWYoMCE9KDB8ZSkmJjAhPSgwfCh0PTB8cXUoZSwzOTYwLDM5NDQsMCkpKSl7Zm9yKG49KGU9NCtpfDApKzUyfDA7KDB8KGU9ZSs0fChhcltlPj4yXT0wKSkpPCgwfG4pOyk7YXJbaT4+Ml09dCxhcls4K2k+PjJdPUEsYXJbMTIraT4+Ml09LTEsYXJbNDgraT4+Ml09MSx0c1szMSZhclsyOCsoMHxhclt0Pj4yXSk+PjJdXSh0LGksMHxhcltyPj4yXSwxKSxlPTE9PSgwfGFyWzI0K2k+PjJdKT8oYXJbcj4+Ml09YXJbMTYraT4+Ml0sMSk6MH1lbHNlIGU9MDtyZXR1cm4gdXI9ZiwwfGV9LGZ1bmN0aW9uKEEsZSxyKXtyZXR1cm4gMHx4dShBfD0wLGV8PTApfSxmdW5jdGlvbihBLGUscil7QXw9MCxlfD0wO3ZhciBpLGYsbj0wLHQ9MCxvPTAsYT0wO2lmKGk9dXI9KGY9dXIpKzMxJi0zMix1cj11cis2NHwwLGFyWyhyfD0wKT4+Ml09YXJbYXJbcj4+Ml0+PjJdLDB8ZnVuY3Rpb24oQSxlKXtBPTB8eHUoQXw9MCxlfD0wKT8xOjB8eHUoZSw0MDg4KTtyZXR1cm4gMHxBfShBLGUpKUE9MTtlbHNlIGlmKDAhPSgwfGUpJiYwIT0oMHwobj0wfHF1KGUsMzk2MCw0MDQ4LDApKSkmJjA9PShhcltuKzg+PjJdJn5hcltBKzg+PjJdfDApKWlmKGU9bisxMnwwLDB8eHUoMHxhclsoQT1BKzEyfDApPj4yXSwwfGFyW2U+PjJdKXx8MHx4dSgwfGFyW0E+PjJdLDQwODApKUE9MTtlbHNlIGlmKDAhPSgwfChBPTB8YXJbQT4+Ml0pKSYmMCE9KDB8KG89MHxxdShBLDM5NjAsMzk0NCwwKSkpJiYwIT0oMHwodD0wfGFyW2U+PjJdKSkmJjAhPSgwfChhPTB8cXUodCwzOTYwLDM5NDQsMCkpKSl7Zm9yKGU9KEE9NCtpfDApKzUyfDA7KDB8KEE9QSs0fChhcltBPj4yXT0wKSkpPCgwfGUpOyk7YXJbaT4+Ml09YSxhcls4K2k+PjJdPW8sYXJbMTIraT4+Ml09LTEsYXJbNDgraT4+Ml09MSx0c1szMSZhclsyOCsoMHxhclthPj4yXSk+PjJdXShhLGksMHxhcltyPj4yXSwxKSxBPTE9PSgwfGFyWzI0K2k+PjJdKT8oYXJbcj4+Ml09YXJbMTYraT4+Ml0sMSk6MH1lbHNlIEE9MDtlbHNlIEE9MDtyZXR1cm4gdXI9ZiwwfEF9LGZ1bmN0aW9uKEEsZSxyKXtyZXR1cm4gMHx4dShBfD0wLGV8PTApfSxmdW5jdGlvbihBLGUscil7QXw9MCxlfD0wO3ZhciBpLGYsbix0LG8sYT0wO3JldHVybiB1cj0obz11cikrMzJ8MCxuPW8rMTJ8MCx0PW8saT0ocnw9MCkrNHwwLGY9MHxhcltyPj4yXSxhclt0Pj4yXT0wLGFyW3QrND4+Ml09MCw0Mjk0OTY3Mjc5PGY+Pj4oYXJbdCs4Pj4yXT0wKSYmcHUoKSxmPj4+MDwxMT8odHJbdCsxMT4+MF09Zik/KHI9dCxhPTYpOnI9dDoocj0wfGh1KGE9MTYrZiYtMTYpLGFyW3Q+PjJdPXIsYXJbdCs4Pj4yXT0tMjE0NzQ4MzY0OHxhLGFyW3QrND4+Ml09ZixhPTYpLDY9PSgwfGEpJiZoYigwfHIsMHxpLDB8ZiksdHJbcitmPj4wXT0wLG5zWzEyNyZBXShuLGUsdCkscj0wfGh1KDEyKSxhcltyPj4yXT1hcltuPj4yXSxhcltyKzQ+PjJdPWFyWzQrbj4+Ml0sYXJbcis4Pj4yXT1hcls4K24+PjJdLHVyPSgwPD0oMHx0clt0KzExPj4wXSl8fHZ1KDB8YXJbdD4+Ml0pLG8pLDB8cn0sZnVuY3Rpb24oQSxlLHIpe3ZhciBpLGY7cmV0dXJuIGV8PTAscnw9MCx1cj0oaT11cikrMTZ8MCxmPWksbnNbMTI3JihBfD0wKV0oZixlLHIpLGZBKDB8YXJbZj4+Ml0pLHI9MHxhcltmPj4yXSxpQSgwfHIpLHVyPWksMHxyfSxmdW5jdGlvbihBLGUscil7cmV0dXJuIDB8ZnVuY3Rpb24oQSxlLHIpe2V8PTAscnw9MDt2YXIgaSxmLG4sdD0wO3JldHVybiBmPTB8YXJbKGk9KEE9QXwwKSs4NHwwKT4+Ml0sdD0wfFJjKGYsMCxuPXIrMjU2fDApLGhiKDB8ZSwwfGYsMHwocj0odD0wPT0oMHx0KT9uOnQtZnwwKT4+PjA8cj4+PjA/dDpyKSksYXJbQSs0Pj4yXT1mK3IsZT1mK3R8MCxhcltBKzg+PjJdPWUsYXJbaT4+Ml09ZSwwfHJ9KEF8PTAsZXw9MCxyfD0wKX0sV2IsV2IsV2IsV2IsV2IsV2IsV2IsV2IsV2IsV2IsV2IsV2IsV2IsV2IsV2IsV2IsV2IsV2IsV2IsV2IsV2IsV2IsV2IsV2IsV2IsV2IsV2IsV2IsV2JdLFBiPVtmdW5jdGlvbihBLGUscixpKXtyZXR1cm4gWig0KSwwfSxmdW5jdGlvbihBLGUscixpKXtBfD0wLHJ8PTAsaXw9MDt2YXIgZixuLHQsbz0wLGE9MCxjPTA7aWYoQT0wfGFyWyhlfD0wKSs0Pj4yXSxhPSgwfChpPTB8YXJbZSs4Pj4yXSkpLygwfGFyW3IrNTc4ND4+Ml0pfDAsYz0oYz1BKy0xKyhlPTB8YXJbZSsxMj4+Ml0pfDApLSgoMHxjKSUoMHxlKXwwKXwwLGU9KEE9KCgwfEEpLygwfGFyW3IrNTc4MD4+Ml0pfDApLTErZXwwKS0oKDB8QSklKDB8ZSl8MCl8MCw5PD0oKEE9MHxhcltyKzU3NjA+PjJdKSstOHwwKT4+PjAmJnNyKDM2NjA5LDM2NjYzLDExNSwzNjY3MiksOTw9KChvPTB8YXJbcis1NzY4Pj4yXSkrLTh8MCk+Pj4wJiZzcigzNjY5NSwzNjY2MywxMTYsMzY2NzIpLG49MD09KDB8KGY9MHxXYygxNiwwfGJyKDB8YnIoYyxpKSwoQSs3fDApLzh8MCkpKSksdD1mLDB8YXJbcisyMD4+Ml0pe2lmKDA9PSgwfChpPW89MHxXYygxNixhPTB8YnIoMHxicihlLGEpLChvKzd8MCkvOHwwKSkpKXwwPT0oMHwoQT1hPTB8V2MoMTYsYSkpKXxuKXJldHVybiBufHxCYyhmKSwwfG8mJkJjKG8pLGEmJkJjKGEpLChyPTApfHJ9ZWxzZXtpZihuKXJldHVybihyPTApfHI7QT1pPWU9MH1yZXR1cm4gYXJbcis0Pj4yXT10LGFyW3IrMTA0OTI+PjJdPTAsYXJbcis0MD4+Ml09YyxhcltyKzg+PjJdPWksYXJbcisxMDQ5Nj4+Ml09MCxhcltyKzEyPj4yXT1BLGFyW3IrMTA1MDA+PjJdPTAsYXJbcis0ND4+Ml09ZSwwfChyPTEpfSxmdW5jdGlvbihBLGUscixpKXtmb3IoZXw9MCxyfD0wLGl8PTA7KDB8ZSkhPSgwfHIpOyl0cltpPj4wXT0wfHRyW2U+PjBdLGk9aSsxfDAsZT1lKzF8MDtyZXR1cm4gMHxyfSxmdW5jdGlvbihBLGUscixpKXtmb3IoQXw9MCxlfD0wLHJ8PTAsaXw9MDsoMHxlKSE9KDB8cik7KUE9KDB8YXJbZT4+Ml0pPj4+MDwxMjg/KEE9MHxVbCgpLDB8bHJbQSsoYXJbZT4+Ml08PDEpPj4xXSk6MCxvcltpPj4xXT1BLGk9aSsyfDAsZT1lKzR8MDtyZXR1cm4gMHxyfSxmdW5jdGlvbihBLGUscixpKXtmb3IoQXw9MCxlfD0wLHJ8PTAsaXw9MDs7KXtpZigoMHxyKT09KDB8aSkpe3I9aTticmVha31pZigoMHxhcltyPj4yXSk+Pj4wPDEyOCYmKEE9MHxVbCgpLChvcltBKyhhcltyPj4yXTw8MSk+PjFdJmUpPDwxNj4+MTYpKWJyZWFrO3I9cis0fDB9cmV0dXJuIDB8cn0sZnVuY3Rpb24oQSxlLHIsaSl7Zm9yKEF8PTAsZXw9MCxyfD0wLGl8PTA7Oyl7aWYoKDB8cik9PSgwfGkpKXtyPWk7YnJlYWt9aWYoMTI4PD0oMHxhcltyPj4yXSk+Pj4wKWJyZWFrO2lmKEE9MHxVbCgpLCEoKG9yW0ErKGFyW3I+PjJdPDwxKT4+MV0mZSk8PDE2Pj4xNikpYnJlYWs7cj1yKzR8MH1yZXR1cm4gMHxyfSxmdW5jdGlvbihBLGUscixpKXtmb3IoZXw9MCxyfD0wLGl8PTA7KDB8ZSkhPSgwfHIpOylhcltpPj4yXT10cltlPj4wXSxpPWkrNHwwLGU9ZSsxfDA7cmV0dXJuIDB8cn0sZnVuY3Rpb24oQSxlLHIsaSl7dmFyIGYsbjtyZXR1cm4gZXw9MCxyfD0wLGl8PTAsdXI9KGY9dXIpKzE2fDAsbj1mLHRzWzMxJihBfD0wKV0obixlLHIsaSksZkEoMHxhcltuPj4yXSksaT0wfGFyW24+PjJdLGlBKDB8aSksdXI9ZiwwfGl9XSxMYj1bSWIsZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLGV8PTAscnw9MCxpfD0wLGY9K2Y7dmFyIG4sdCxvLGEsYyxsLHUsYixzLGQsaz0wLGg9MCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTA7cmV0dXJuIG09dXI9KGQ9dXIpKzMxJi0zMix1cj11cisxNzZ8MCx1PW0rNzJ8MCxvPW0rNDh8MCx0PW0rMzJ8MCxoPW0rMjR8MCxrPW0rOHwwLGM9KG49bSkrMTM0fDAsYT1tKzY4fDAsbD1tKzc2fDAscz1tKzY0fDAsYj1tKzYwfDAsbT1tKzU2fDAsYXJbKHc9bik+PjJdPTM3LHc9KGFyW3crND4+Ml09MCl8ZHIobisxfDAsNzk2NTksMHxhcltyKzQ+PjJdKSxhclthPj4yXT1jLEE9MHxkbigpLDI5PCgwfChBPXc/KGFyW2s+PjJdPWFyW3IrOD4+Ml0sUVtrKzg+PjNdPWYsMHxmcihjLDMwLEEsbixrKSk6KFFbaD4+M109ZiwwfGZyKGMsMzAsQSxuLGgpKSkpPyhBPTB8ZG4oKSxrPXc/KGFyW3Q+PjJdPWFyW3IrOD4+Ml0sUVs4K3Q+PjNdPWYsMHxrcihhLEEsbix0KSk6KFFbbz4+M109ZiwwfGtyKGEsQSxuLG8pKSwoQT0wfGFyW2E+PjJdKT8odj1rLHk9cD1BKTpndSgpKToodj1BLHk9KHA9MCl8YXJbYT4+Ml0pLGg9MHxucih5LGs9eSt2fDAsciksKDB8eSkhPSgwfGMpPyhBPTB8eWModjw8MSkpP1o9Zz1BOmd1KCk6KGc9bCxaPTApLFRmKHUsciksaHIoeSxoLGssZyxzLGIsdSksYm4odSksYXJbbT4+Ml09YXJbZT4+Ml0sZT0wfGFyW3M+PjJdLHk9MHxhcltiPj4yXSxhclt1Pj4yXT1hclttPj4yXSx5PTB8UEEodSxnLGUseSxyLGkpLEJjKFopLEJjKHApLHVyPWQsMHx5fSxmdW5jdGlvbihBLGUscixpLGYpe0F8PTAsZXw9MCxyfD0wLGl8PTAsZj0rZjt2YXIgbix0LG8sYSxjLGwsdSxiLHMsZCxrPTAsaD0wLHc9MCx2PTAsbT0wLGc9MCxaPTAscD0wLHk9MDtyZXR1cm4gbT11cj0oZD11cikrMzEmLTMyLHVyPXVyKzE3NnwwLHU9bSs3MnwwLG89bSs0OHwwLHQ9bSszMnwwLGg9bSsyNHwwLGs9bSs4fDAsYz0obj1tKSsxMzR8MCxhPW0rNjh8MCxsPW0rNzZ8MCxzPW0rNjR8MCxiPW0rNjB8MCxtPW0rNTZ8MCxhclsodz1uKT4+Ml09Mzcsdz0oYXJbdys0Pj4yXT0wKXxkcihuKzF8MCw1Mzg5NywwfGFyW3IrND4+Ml0pLGFyW2E+PjJdPWMsQT0wfGRuKCksMjk8KDB8KEE9dz8oYXJbaz4+Ml09YXJbcis4Pj4yXSxRW2srOD4+M109ZiwwfGZyKGMsMzAsQSxuLGspKTooUVtoPj4zXT1mLDB8ZnIoYywzMCxBLG4saCkpKSk/KEE9MHxkbigpLGs9dz8oYXJbdD4+Ml09YXJbcis4Pj4yXSxRWzgrdD4+M109ZiwwfGtyKGEsQSxuLHQpKTooUVtvPj4zXT1mLDB8a3IoYSxBLG4sbykpLChBPTB8YXJbYT4+Ml0pPyh2PWsseT1wPUEpOmd1KCkpOih2PUEseT0ocD0wKXxhclthPj4yXSksaD0wfG5yKHksaz15K3Z8MCxyKSwoMHx5KSE9KDB8Yyk/KEE9MHx5Yyh2PDwxKSk/Wj1nPUE6Z3UoKTooZz1sLFo9MCksVGYodSxyKSxocih5LGgsayxnLHMsYix1KSxibih1KSxhclttPj4yXT1hcltlPj4yXSxlPTB8YXJbcz4+Ml0seT0wfGFyW2I+PjJdLGFyW3U+PjJdPWFyW20+PjJdLHk9MHxQQSh1LGcsZSx5LHIsaSksQmMoWiksQmMocCksdXI9ZCwwfHl9LGZ1bmN0aW9uKEEsZSxyLGksZil7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmPStmO3ZhciBuLHQsbyxhLGMsbCx1LGIscyxkLGs9MCxoPTAsdz0wLHY9MCxtPTAsZz0wLFo9MCxwPTAseT0wLEI9MDttPXVyPShkPXVyKSszMSYtMzIsdXI9dXIrMzM2fDAsdT1tKzMwMHwwLG89bSs0OHwwLHQ9bSszMnwwLGg9bSsyNHwwLGs9bSs4fDAsYz0obj1tKSszMDR8MCxhPW0rMjk2fDAsbD1tKzY4fDAscz1tKzY0fDAsYj1tKzYwfDAsbT1tKzU2fDAsYXJbKHc9bik+PjJdPTM3LHc9KGFyW3crND4+Ml09MCl8ZHIobisxfDAsNzk2NTksMHxhcltyKzQ+PjJdKSxhclthPj4yXT1jLEE9MHxkbigpLDI5PCgwfChBPXc/KGFyW2s+PjJdPWFyW3IrOD4+Ml0sUVtrKzg+PjNdPWYsMHxmcihjLDMwLEEsbixrKSk6KFFbaD4+M109ZiwwfGZyKGMsMzAsQSxuLGgpKSkpPyhBPTB8ZG4oKSxrPXc/KGFyW3Q+PjJdPWFyW3IrOD4+Ml0sUVs4K3Q+PjNdPWYsMHxrcihhLEEsbix0KSk6KFFbbz4+M109ZiwwfGtyKGEsQSxuLG8pKSwoQT0wfGFyW2E+PjJdKT8odj1rLFo9eT1BKTpndSgpKToodj1BLFo9KHk9MCl8YXJbYT4+Ml0pLGg9MHxucihaLGs9Wit2fDAscik7ZG97aWYoKDB8WikhPSgwfGMpKXtpZihBPTB8eWModjw8Mykpe3A9MCxCPWc9QTticmVha31ndSgpfWVsc2UgZz1sLHA9MSxCPTB9d2hpbGUoMCk7cmV0dXJuIFRmKHUsciksWnIoWixoLGssZyxzLGIsdSksYm4odSksYXJbbT4+Ml09YXJbZT4+Ml0sWj0wfGFyW3M+PjJdLEE9MHxhcltiPj4yXSxhclt1Pj4yXT1hclttPj4yXSxBPTB8bXIodSxnLFosQSxyLGkpLGFyW2U+PjJdPUEscHx8QmMoQiksQmMoeSksdXI9ZCwwfEF9LGZ1bmN0aW9uKEEsZSxyLGksZil7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmPStmO3ZhciBuLHQsbyxhLGMsbCx1LGIscyxkLGs9MCxoPTAsdz0wLHY9MCxtPTAsZz0wLFo9MCxwPTAseT0wLEI9MDttPXVyPShkPXVyKSszMSYtMzIsdXI9dXIrMzM2fDAsdT1tKzMwMHwwLG89bSs0OHwwLHQ9bSszMnwwLGg9bSsyNHwwLGs9bSs4fDAsYz0obj1tKSszMDR8MCxhPW0rMjk2fDAsbD1tKzY4fDAscz1tKzY0fDAsYj1tKzYwfDAsbT1tKzU2fDAsYXJbKHc9bik+PjJdPTM3LHc9KGFyW3crND4+Ml09MCl8ZHIobisxfDAsNTM4OTcsMHxhcltyKzQ+PjJdKSxhclthPj4yXT1jLEE9MHxkbigpLDI5PCgwfChBPXc/KGFyW2s+PjJdPWFyW3IrOD4+Ml0sUVtrKzg+PjNdPWYsMHxmcihjLDMwLEEsbixrKSk6KFFbaD4+M109ZiwwfGZyKGMsMzAsQSxuLGgpKSkpPyhBPTB8ZG4oKSxrPXc/KGFyW3Q+PjJdPWFyW3IrOD4+Ml0sUVs4K3Q+PjNdPWYsMHxrcihhLEEsbix0KSk6KFFbbz4+M109ZiwwfGtyKGEsQSxuLG8pKSwoQT0wfGFyW2E+PjJdKT8odj1rLFo9eT1BKTpndSgpKToodj1BLFo9KHk9MCl8YXJbYT4+Ml0pLGg9MHxucihaLGs9Wit2fDAscik7ZG97aWYoKDB8WikhPSgwfGMpKXtpZihBPTB8eWModjw8Mykpe3A9MCxCPWc9QTticmVha31ndSgpfWVsc2UgZz1sLHA9MSxCPTB9d2hpbGUoMCk7cmV0dXJuIFRmKHUsciksWnIoWixoLGssZyxzLGIsdSksYm4odSksYXJbbT4+Ml09YXJbZT4+Ml0sWj0wfGFyW3M+PjJdLEE9MHxhcltiPj4yXSxhclt1Pj4yXT1hclttPj4yXSxBPTB8bXIodSxnLFosQSxyLGkpLGFyW2U+PjJdPUEscHx8QmMoQiksQmMoeSksdXI9ZCwwfEF9LEliLEliLEliXSxLYj1bQ2IsZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLHJ8PTAsaXw9MCxmfD0wO3ZhciBuPTAsdD0wO2ZvcihBPWV8PTA7Oyl7aWYoKDB8aSk9PSgwfGYpKXt0PTc7YnJlYWt9aWYoKDB8QSk9PSgwfHIpKXtBPS0xO2JyZWFrfWlmKChlPTB8dHJbQT4+MF0pPDwyND4+MjQ8KG49MHx0cltpPj4wXSk8PDI0Pj4yNCl7QT0tMTticmVha31pZihuPDwyND4+MjQ8ZTw8MjQ+PjI0KXtBPTE7YnJlYWt9aT1pKzF8MCxBPUErMXwwfXJldHVybiA3PT0oMHx0KSYmKEE9KDB8QSkhPSgwfHIpJjEpLDB8QX0sZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLHJ8PTAsaXw9MCxmfD0wO3ZhciBuPTAsdD0wO2ZvcihBPWV8PTA7Oyl7aWYoKDB8aSk9PSgwfGYpKXt0PTc7YnJlYWt9aWYoKDB8QSk9PSgwfHIpKXtBPS0xO2JyZWFrfWlmKCgwfChlPTB8YXJbQT4+Ml0pKTwoMHwobj0wfGFyW2k+PjJdKSkpe0E9LTE7YnJlYWt9aWYoKDB8bik8KDB8ZSkpe0E9MTticmVha31pPWkrNHwwLEE9QSs0fDB9cmV0dXJuIDc9PSgwfHQpJiYoQT0oMHxBKSE9KDB8cikmMSksMHxBfSxmdW5jdGlvbihBLGUscixpLGYpe0F8PTAsZXw9MCxpfD0wLGZ8PTA7dmFyIG4sdCxvPTAsYT0wLGM9MDtpZihvPXVyPSh0PXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxuPW8rNHwwLDEmYXJbKHJ8PTApKzQ+PjJdKXtmb3IoVGYobixyKSxBPTB8dW4obiw1OTI0OCksYm4obikscj0wfGFyW0E+PjJdLGY/ZnNbNjMmYXJbcisyND4+Ml1dKG4sQSk6ZnNbNjMmYXJbcisyOD4+Ml1dKG4sQSksKEE9MHx0clsoYT0xMStufDApPj4wXSk8PDI0Pj4yNDwwPyhyPUEsQT0wfGFyW24+PjJdLGM9OCk6Zj1uOzg9PSgwfGMpJiYoZj1BLEE9ciksKDB8ZikhPSgoKGM9QTw8MjQ+PjI0PDApPzB8YXJbbj4+Ml06bikrKGM/MHxhcls0K24+PjJdOjI1NSZBKXwwKTspQT0wfHRyW2Y+PjBdLDB8KHI9MHxhcltlPj4yXSkmJjB8TWYoQT0oMHwobz0wfGFyWyhpPXIrMjR8MCk+PjJdKSk9PSgwfGFyW3IrMjg+PjJdKT8oYz0wfGFyWzUyKygwfGFyW3I+PjJdKT4+Ml0sQT0wfGhmKEEpLDB8SGJbMzEmY10ocixBKSk6KGFyW2k+PjJdPW8rMSwwfGhmKHRyW28+PjBdPUEpKSwtMSkmJihhcltlPj4yXT0wKSxyPTB8dHJbYT4+MF0sQT1mKzF8MCxjPTg7QT0wfGFyW2U+PjJdLEJ1KG4pfWVsc2UgYz0wfGFyWzI0KygwfGFyW0E+PjJdKT4+Ml0sYXJbbz4+Ml09YXJbZT4+Ml0sYXJbbj4+Ml09YXJbbz4+Ml0sQT0wfEtiWzMxJmNdKEEsbixyLGksMSZmKTtyZXR1cm4gdXI9dCwwfEF9LGZ1bmN0aW9uKEEsZSxyLGksZil7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wO3ZhciBuLHQsbyxhLGMsbCx1PTAsYj0wO3JldHVybiB1PXVyPShBPXVyKSszMSYtMzIsdXI9dXIrNjR8MCxiPSh0PXUpKzUyfDAsYz11KzM5fDAsbj11KzE2fDAsYT11KzEyfDAsbz11KzR8MCx1PXUrOHwwLHRyW2I+PjBdPTB8dHJbNTM5MDJdLHRyW2IrMT4+MF09MHx0cls1MzkwM10sdHJbYisyPj4wXT0wfHRyWzUzOTA0XSx0cltiKzM+PjBdPTB8dHJbNTM5MDVdLHRyW2IrND4+MF09MHx0cls1MzkwNl0sdHJbYis1Pj4wXT0wfHRyWzUzOTA3XSx3cihiKzF8MCw1MzkwOCwxLDB8YXJbcis0Pj4yXSksbD0wfGRuKCksYXJbdD4+Ml09ZixiPTB8bnIoYyxmPWMrKDB8ZnIoYywxMyxsLGIsdCkpfDAsciksVGYodCxyKSx2cihjLGIsZixuLGEsbyx0KSxibih0KSxhclt1Pj4yXT1hcltlPj4yXSxlPTB8YXJbYT4+Ml0sZj0wfGFyW28+PjJdLGFyW3Q+PjJdPWFyW3U+PjJdLGY9MHxQQSh0LG4sZSxmLHIsaSksdXI9QSwwfGZ9LGZ1bmN0aW9uKEEsZSxyLGksZil7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wO3ZhciBuLHQsbyxhLGMsbCx1PTAsYj0wO3JldHVybiB1PXVyPShBPXVyKSszMSYtMzIsdXI9dXIrNjR8MCxiPSh0PXUpKzUyfDAsYz11KzQwfDAsbj11KzE2fDAsYT11KzEyfDAsbz11KzR8MCx1PXUrOHwwLHRyW2I+PjBdPTB8dHJbNTM5MDJdLHRyW2IrMT4+MF09MHx0cls1MzkwM10sdHJbYisyPj4wXT0wfHRyWzUzOTA0XSx0cltiKzM+PjBdPTB8dHJbNTM5MDVdLHRyW2IrND4+MF09MHx0cls1MzkwNl0sdHJbYis1Pj4wXT0wfHRyWzUzOTA3XSx3cihiKzF8MCw1MzkwOCwwLDB8YXJbcis0Pj4yXSksbD0wfGRuKCksYXJbdD4+Ml09ZixiPTB8bnIoYyxmPWMrKDB8ZnIoYywxMixsLGIsdCkpfDAsciksVGYodCxyKSx2cihjLGIsZixuLGEsbyx0KSxibih0KSxhclt1Pj4yXT1hcltlPj4yXSxlPTB8YXJbYT4+Ml0sZj0wfGFyW28+PjJdLGFyW3Q+PjJdPWFyW3U+PjJdLGY9MHxQQSh0LG4sZSxmLHIsaSksdXI9QSwwfGZ9LGZ1bmN0aW9uKEEsZSxyLGksZil7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wO3ZhciBuLHQsbyxhLGM9MCxsPTAsdT0wO3JldHVybiB1PXVyPShBPXVyKSszMSYtMzIsdXI9dXIrODB8MCxsPShvPXUpKzY4fDAsbj11KzQ4fDAsdD11Kzh8MCx1PXUrNHwwLHRyW2w+PjBdPTB8dHJbNTM4OTFdLHRyW2wrMT4+MF09MHx0cls1Mzg5Ml0sdHJbbCsyPj4wXT0wfHRyWzUzODkzXSx0cltsKzM+PjBdPTB8dHJbNTM4OTRdLHRyW2wrND4+MF09MHx0cls1Mzg5NV0sdHJbbCs1Pj4wXT0wfHRyWzUzODk2XSxjPTB8ZG4oKSxhcltvPj4yXT1mLGM9MHxucihuLGw9bisoZj0wfGZyKG4sMjAsYyxsLG8pKXwwLHIpLFRmKG8sciksYT0wfHVuKG8sNTkyMzIpLGJuKG8pLFBiWzcmYXJbMzIrKDB8YXJbYT4+Ml0pPj4yXV0oYSxuLGwsdCksZj10K2Z8MCxhclt1Pj4yXT1hcltlPj4yXSxhcltvPj4yXT1hclt1Pj4yXSxmPTB8UEEobyx0LCgwfGMpPT0oMHxsKT9mOmMtbit0fDAsZixyLGkpLHVyPUEsMHxmfSxmdW5jdGlvbihBLGUscixpLGYpe0F8PTAsZXw9MCxpfD0wLGZ8PTA7dmFyIG4sdCxvPTAsYT0wLGM9MDtpZihvPXVyPSh0PXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxuPW8rNHwwLDEmYXJbKHJ8PTApKzQ+PjJdKXtmb3IoVGYobixyKSxBPTB8dW4obiw1OTI3MiksYm4obikscj0wfGFyW0E+PjJdLGY/ZnNbNjMmYXJbcisyND4+Ml1dKG4sQSk6ZnNbNjMmYXJbcisyOD4+Ml1dKG4sQSksQT0wfHRyWyhhPTgrbiszfDApPj4wXSxyPTB8YXJbbj4+Ml0sYz00K258MCxmPUE8PDI0Pj4yNDwwP3I6bjsoMHxmKSE9KCgobz1BPDwyND4+MjQ8MCk/cjpuKSsoKG8/MHxhcltjPj4yXToyNTUmQSk8PDIpfDApOylBPTB8YXJbZj4+Ml0sMHwocj0wfGFyW2U+PjJdKSYmMHxVZihBPSgwfChvPTB8YXJbKGk9cisyNHwwKT4+Ml0pKT09KDB8YXJbcisyOD4+Ml0pPyhvPTB8YXJbNTIrKDB8YXJbcj4+Ml0pPj4yXSxBPTB8Z2YoQSksMHxIYlszMSZvXShyLEEpKTooYXJbaT4+Ml09bys0LDB8Z2YoYXJbbz4+Ml09QSkpLC0xKSYmKGFyW2U+PjJdPTApLGY9Zis0fDAsQT0wfHRyW2E+PjBdLHI9MHxhcltuPj4yXTtBPTB8YXJbZT4+Ml0sUXUobil9ZWxzZSBjPTB8YXJbMjQrKDB8YXJbQT4+Ml0pPj4yXSxhcltvPj4yXT1hcltlPj4yXSxhcltuPj4yXT1hcltvPj4yXSxBPTB8S2JbMzEmY10oQSxuLHIsaSwxJmYpO3JldHVybiB1cj10LDB8QX0sZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTA7dmFyIG4sdCxvLGEsYyxsLHU9MCxiPTA7cmV0dXJuIHU9dXI9KEE9dXIpKzMxJi0zMix1cj11cisxMjh8MCxiPSh0PXUpKzEyMnwwLGM9dSsxMDh8MCxuPXUrMTZ8MCxhPXUrMTJ8MCxvPXUrNHwwLHU9dSs4fDAsdHJbYj4+MF09MHx0cls1MzkwMl0sdHJbYisxPj4wXT0wfHRyWzUzOTAzXSx0cltiKzI+PjBdPTB8dHJbNTM5MDRdLHRyW2IrMz4+MF09MHx0cls1MzkwNV0sdHJbYis0Pj4wXT0wfHRyWzUzOTA2XSx0cltiKzU+PjBdPTB8dHJbNTM5MDddLHdyKGIrMXwwLDUzOTA4LDEsMHxhcltyKzQ+PjJdKSxsPTB8ZG4oKSxhclt0Pj4yXT1mLGI9MHxucihjLGY9YysoMHxmcihjLDEzLGwsYix0KSl8MCxyKSxUZih0LHIpLHByKGMsYixmLG4sYSxvLHQpLGJuKHQpLGFyW3U+PjJdPWFyW2U+PjJdLGU9MHxhclthPj4yXSxmPTB8YXJbbz4+Ml0sYXJbdD4+Ml09YXJbdT4+Ml0sZj0wfG1yKHQsbixlLGYscixpKSx1cj1BLDB8Zn0sZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTA7dmFyIG4sdCxvLGEsYyxsLHU9MCxiPTA7cmV0dXJuIHU9dXI9KEE9dXIpKzMxJi0zMix1cj11cisxMjh8MCxiPSh0PXUpKzExMnwwLGM9dSsxMDB8MCxuPXUrMTZ8MCxhPXUrMTJ8MCxvPXUrNHwwLHU9dSs4fDAsdHJbYj4+MF09MHx0cls1MzkwMl0sdHJbYisxPj4wXT0wfHRyWzUzOTAzXSx0cltiKzI+PjBdPTB8dHJbNTM5MDRdLHRyW2IrMz4+MF09MHx0cls1MzkwNV0sdHJbYis0Pj4wXT0wfHRyWzUzOTA2XSx0cltiKzU+PjBdPTB8dHJbNTM5MDddLHdyKGIrMXwwLDUzOTA4LDAsMHxhcltyKzQ+PjJdKSxsPTB8ZG4oKSxhclt0Pj4yXT1mLGI9MHxucihjLGY9YysoMHxmcihjLDEyLGwsYix0KSl8MCxyKSxUZih0LHIpLHByKGMsYixmLG4sYSxvLHQpLGJuKHQpLGFyW3U+PjJdPWFyW2U+PjJdLGU9MHxhclthPj4yXSxmPTB8YXJbbz4+Ml0sYXJbdD4+Ml09YXJbdT4+Ml0sZj0wfG1yKHQsbixlLGYscixpKSx1cj1BLDB8Zn0sZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTA7dmFyIG4sdCxvLGEsYz0wLGw9MCx1PTA7cmV0dXJuIHU9dXI9KEE9dXIpKzMxJi0zMix1cj11cisxOTJ8MCxsPShvPXUpKzE3NnwwLG49dSsxNTZ8MCx0PXUrNHwwLHU9dSsxNTJ8MCx0cltsPj4wXT0wfHRyWzUzODkxXSx0cltsKzE+PjBdPTB8dHJbNTM4OTJdLHRyW2wrMj4+MF09MHx0cls1Mzg5M10sdHJbbCszPj4wXT0wfHRyWzUzODk0XSx0cltsKzQ+PjBdPTB8dHJbNTM4OTVdLHRyW2wrNT4+MF09MHx0cls1Mzg5Nl0sYz0wfGRuKCksYXJbbz4+Ml09ZixjPTB8bnIobixsPW4rKGY9MHxmcihuLDIwLGMsbCxvKSl8MCxyKSxUZihvLHIpLGE9MHx1bihvLDU5MjY0KSxibihvKSxQYls3JmFyWzQ4KygwfGFyW2E+PjJdKT4+Ml1dKGEsbixsLHQpLGY9dCsoZjw8Mil8MCxhclt1Pj4yXT1hcltlPj4yXSxhcltvPj4yXT1hclt1Pj4yXSxmPTB8bXIobyx0LCgwfGMpPT0oMHxsKT9mOnQrKGMtbjw8Mil8MCxmLHIsaSksdXI9QSwwfGZ9LGZ1bmN0aW9uKEEsZSxyLGksZil7cmV0dXJuIHJ8PTAsYXJbKGZ8PTApPj4yXT1yLDN9LGZ1bmN0aW9uKEEsZSxyLGksZil7cmV0dXJuIDB8ZnVuY3Rpb24oQSxlLHIsaSxmKXtyfD0wLGl8PTA7dmFyIG4sdCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTA7MjwoKG49ZXw9MCktKHQ9QXw9MCl8MCkmMCE9KDQmKGZ8PTApfDApJiYtMTc9PSgwfHRyW0E+PjBdKSYmLTY5PT0oMHx0cltBKzE+PjBdKT9BPS02NT09KChzPTApfHRyW0ErMj4+MF0pP0ErM3wwOkE6cz0wO0E6Zm9yKDs7KXtpZighKHM+Pj4wPHI+Pj4wJkE+Pj4wPGU+Pj4wKSl7MDticmVha31sPTB8dHJbQT4+MF0sYj0yNTUmbCxvPUErMXwwO2Rve2lmKC0xPGw8PDI0Pj4yNCl7aWYoaT4+PjA8Yj4+PjApezA7YnJlYWsgQX1BPW99ZWxzZXtpZigoMjU1JmwpPDE5NCl7MDticmVhayBBfWlmKGE9QSsyfDAsZj1uLSh1PUEpfDAsKDI1NSZsKTwyMjQpe2lmKCgwfGYpPDIpezA7YnJlYWsgQX1pZigxMjghPSgxOTImKGY9MHxjcltvPj4wXSl8MCkpezA7YnJlYWsgQX1pZihpPj4+MDwoNjMmZnxiPDw2JjE5ODQpPj4+MCl7MDticmVhayBBfUE9YTticmVha31pZihjPUErM3wwLCgyNTUmbCk8MjQwKXtpZigoMHxmKTwzKXswO2JyZWFrIEF9c3dpdGNoKGE9MHx0clthPj4wXSxvPTB8Y3Jbbz4+MF0sZj0yMjQmbyxsPDwyND4+MjQpe2Nhc2UtMzI6aWYoMTYwPT0oMHxmKSlicmVhaztBPXU7YnJlYWsgQTtjYXNlLTE5OmlmKDEyOD09KDB8ZikpYnJlYWs7QT11O2JyZWFrIEE7ZGVmYXVsdDppZigxMjghPSgxOTImb3wwKSl7QT11O2JyZWFrIEF9fWlmKDEyOCE9KDE5MiYoZj0yNTUmYSl8MCkpezA7YnJlYWsgQX1pZihpPj4+MDwobzw8NiY0MDMyfGI8PDEyJjYxNDQwfDYzJmYpPj4+MCl7MDticmVhayBBfUE9YzticmVha31pZigoMHxmKTw0fDI0NDwoMjU1JmwpKXswO2JyZWFrIEF9c3dpdGNoKG89MHx0cltvPj4wXSxmPTB8dHJbYT4+MF0sYT0wfHRyW2M+PjBdLGM9MjU1Jm8sbDw8MjQ+PjI0KXtjYXNlLTE2OmlmKDQ4PD0obysxMTImMjU1KSl7QT11O2JyZWFrIEF9YnJlYWs7Y2FzZS0xMjppZigxMjg9PSgyNDAmY3wwKSlicmVhaztBPXU7YnJlYWsgQTtkZWZhdWx0OmlmKDEyOCE9KDE5MiZjfDApKXtBPXU7YnJlYWsgQX19aWYoMTI4IT0oMTkyJihvPTI1NSZmKXwwKSl7MDticmVhayBBfWlmKDEyOCE9KDE5MiYoZj0yNTUmYSl8MCkpezA7YnJlYWsgQX1pZihpPj4+MDwoYzw8MTImMjU4MDQ4fGI8PDE4JjE4MzUwMDh8bzw8NiY0MDMyfDYzJmYpPj4+MCl7MDticmVhayBBfUE9QSs0fDB9fXdoaWxlKDApO3M9cysxfDB9cmV0dXJuIEEtdHwwfShyfD0wLGl8PTAsZnw9MCwxMTE0MTExLDApfSxmdW5jdGlvbihBLGUscixpLGYpe0F8PTAsZXw9MCxyfD0wLGl8PTA7dmFyIG4sdD0wO3Q9dXI9KG49dXIpKzMxJi0zMix1cj11cisxNnwwLGFyWyhmfD0wKT4+Ml09cixyPTB8cmYoMHxhcltBKzg+PjJdKSxBPTB8JGModCwwKSwwfHImJnJmKHIpO0E6ZG97c3dpdGNoKDB8QSl7Y2FzZSAwOmNhc2UtMTpBPTI7YnJlYWs7ZGVmYXVsdDppZigoQT1BKy0xfDApPj4+MD4oaS0oMHxhcltmPj4yXSl8MCk+Pj4wKUE9MTtlbHNlIGZvcig7Oyl7aWYoIUEpe0E9MDticmVhayBBfWU9MHx0clt0Pj4wXSxpPTB8YXJbZj4+Ml0sYXJbZj4+Ml09aSsxLHRyW2k+PjBdPWUsdD10KzF8MCxBPUErLTF8MH19fXdoaWxlKDApO3JldHVybiB1cj1uLDB8QX0sZnVuY3Rpb24oQSxlLHIsaSxmKXtlfD0wLHJ8PTAsZnw9MDt2YXIgbix0LG8sYSxjLGw9MCx1PTAsYj0wO3Q9aXw9MCxuPShBfD0wKSs4fDAsYj11PTA7QTpmb3IoOyEoKDB8cik9PSgwfGkpfGY+Pj4wPD11Pj4+MCk7KXtzd2l0Y2gobD0wfHJmKDB8YXJbbj4+Ml0pLEE9MHwoYT10LShvPXIpfDAsYz1lLDB8R2koMCxvfD0wLGF8PTAsMHwoY3w9MCk/Yzo1ODE1NikpLDB8bCYmcmYobCksMHxBKXtjYXNlLTI6Y2FzZS0xOmJyZWFrIEE7Y2FzZSAwOkE9MX11PXUrMXwwLGI9QStifDAscj1yK0F8MH1yZXR1cm4gMHxifSxmdW5jdGlvbihBLGUscixpLGYpe2ZvcihBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTA7KDB8ZSkhPSgwfHIpOylBPTB8dHJbZT4+MF0sdHJbZj4+MF09LTE8QTw8MjQ+PjI0P0E6aSxmPWYrMXwwLGU9ZSsxfDA7cmV0dXJuIDB8cn0sZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLGl8PTA7dmFyIG4sdD0wO2ZvcihuPSgocnw9MCktKGV8PTApfDApPj4+MixBPWZ8PTAsZj1lOygwfGYpIT0oMHxyKTspdD0wfGFyW2Y+PjJdLHRyW0E+PjBdPXQ+Pj4wPDEyOD8yNTUmdDppLEE9QSsxfDAsZj1mKzR8MDtyZXR1cm4gZSsobjw8Mil8MH0sZnVuY3Rpb24oQSxlLHIsaSxmKXtyZXR1cm4gcnw9MCxhclsoZnw9MCk+PjJdPXIsM30sZnVuY3Rpb24oQSxlLHIsaSxmKXtyZXR1cm4gMHwoKGk9KGl8PTApLShyfD0wKXwwKT4+PjA8KGZ8PTApPj4+MD9pOmYpfSxmdW5jdGlvbihBLGUscixpLGYpe3JldHVybiByfD0wLGFyWyhmfD0wKT4+Ml09ciwzfSxmdW5jdGlvbihBLGUscixpLGYpe3JldHVybiAwfGZ1bmN0aW9uKEEsZSxyLGksZil7cnw9MCxpfD0wO3ZhciBuLHQsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wLGQ9MDsyPCgobj1lfD0wKS0odD1BfD0wKXwwKSYwIT0oNCYoZnw9MCl8MCkmJi0xNz09KDB8dHJbQT4+MF0pJiYtNjk9PSgwfHRyW0ErMT4+MF0pP0E9LTY1PT0oKGQ9MCl8dHJbQSsyPj4wXSk/QSszfDA6QTpkPTA7QTpmb3IoOzspe2lmKCEoZD4+PjA8cj4+PjAmQT4+PjA8ZT4+PjApKXswO2JyZWFrfWlmKGw9MHx0cltBPj4wXSxpPj4+MDwocz0yNTUmbCk+Pj4wKXswO2JyZWFrfWE9QSsxfDA7ZG97aWYobDw8MjQ+PjI0PD0tMSl7aWYoKDI1NSZsKTwxOTQpezA7YnJlYWsgQX1pZihjPUErMnwwLGY9bi0odT1BKXwwLCgyNTUmbCk8MjI0KXtpZigoMHxmKTwyKXswO2JyZWFrIEF9aWYoMTI4IT0oMTkyJihmPTB8Y3JbYT4+MF0pfDApKXswO2JyZWFrIEF9aWYoaT4+PjA8KDYzJmZ8czw8NiYxOTg0KT4+PjApezA7YnJlYWsgQX1mPWQsQT1jO2JyZWFrfWlmKGI9QSszfDAsKDI1NSZsKTwyNDApe2lmKCgwfGYpPDMpezA7YnJlYWsgQX1zd2l0Y2gobz0wfHRyW2M+PjBdLGE9MHxjclthPj4wXSxmPTIyNCZhLGw8PDI0Pj4yNCl7Y2FzZS0zMjppZigxNjA9PSgwfGYpKWJyZWFrO0E9dTticmVhayBBO2Nhc2UtMTk6aWYoMTI4PT0oMHxmKSlicmVhaztBPXU7YnJlYWsgQTtkZWZhdWx0OmlmKDEyOCE9KDE5MiZhfDApKXtBPXU7YnJlYWsgQX19aWYoMTI4IT0oMTkyJihmPTI1NSZvKXwwKSl7MDticmVhayBBfWlmKGk+Pj4wPChhPDw2JjQwMzJ8czw8MTImNjE0NDB8NjMmZik+Pj4wKXswO2JyZWFrIEF9Zj1kLEE9YjticmVha31pZigyNDU8PSgyNTUmbCkpezA7YnJlYWsgQX1pZigoci1kfDApPj4+MDwyfCgwfGYpPDQpezA7YnJlYWsgQX1zd2l0Y2gobz0wfHRyW2E+PjBdLGY9MHx0cltjPj4wXSxhPTB8dHJbYj4+MF0sYz0yNTUmbyxsPDwyND4+MjQpe2Nhc2UtMTY6aWYoNDg8PShvKzExMiYyNTUpKXtBPXU7YnJlYWsgQX1icmVhaztjYXNlLTEyOmlmKDEyOD09KDI0MCZjfDApKWJyZWFrO0E9dTticmVhayBBO2RlZmF1bHQ6aWYoMTI4IT0oMTkyJmN8MCkpe0E9dTticmVhayBBfX1pZigxMjghPSgxOTImKG89MjU1JmYpfDApKXswO2JyZWFrIEF9aWYoMTI4IT0oMTkyJihmPTI1NSZhKXwwKSl7MDticmVhayBBfWlmKGk+Pj4wPChjPDwxMiYyNTgwNDh8czw8MTgmMTgzNTAwOHxvPDw2JjQwMzJ8NjMmZik+Pj4wKXswO2JyZWFrIEF9Zj1kKzF8MCxBPUErNHwwfWVsc2UgZj1kLEE9YX13aGlsZSgwKTtkPWYrMXwwfXJldHVybiBBLXR8MH0ocnw9MCxpfD0wLGZ8PTAsMTExNDExMSwwKX0sQ2IsQ2IsQ2IsQ2IsQ2IsQ2IsQ2IsQ2IsQ2IsQ2IsQ2JdLHFiPVtHYixmdW5jdGlvbihBLGUscixpLGYsbil7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG49K247dmFyIHQsbyxhLGMsbCx1LGIscyxkLGssaCx3LHYsbSxnPTAsWj0wLHA9MCx5PTAsQj0wLEU9MCxYPTAsVz0wLEk9MCxDPTAsRz0wO2ZvcihCPXVyPShtPXVyKSszMSYtMzIsdXI9dXIrMzg0fDAsYz1CKzh8MCxBPShaPUIpKzI4NHwwLHA9Qis3MnwwLGc9QisxODR8MCx2PUIrNjh8MCxsPUIrMTgwfDAsdT1CKzE3N3wwLGI9QisxNzZ8MCxrPUIrNTZ8MCxoPUIrNDR8MCx3PUIrMzJ8MCxvPUIrMjh8MCxhPUIrNzZ8MCxzPUIrMjR8MCxkPUIrMTZ8MCxCPUIrMjB8MCxhcltwPj4yXT1BLFFbYz4+M109biw5OTwoQT0wfF9jKEEsMTAwLDU1MTY4LGMpKT4+PjA/KEE9MHxkbigpLFFbWj4+M109bixBPTB8a3IocCxBLDU1MTY4LFopLChnPTB8YXJbcD4+Ml0pfHxndSgpLChaPTB8eWMoQSkpPyhXPUEsQz1FPVosRz1nKTpndSgpKTooRT1nLFc9QSxHPUM9MCksVGYodixpKSx0PTB8dW4odiw1OTIzMikseT0wfGFyW3A+PjJdLFBiWzcmYXJbMzIrKDB8YXJbdD4+Ml0pPj4yXV0odCx5LHkrV3wwLEUpLHk9Vz80NT09KDB8dHJbYXJbcD4+Ml0+PjBdKTowLGFyW2s+PjJdPTAsYXJbNCtrPj4yXT0wLEE9YXJbOCtrPj4yXT0wOzMhPSgwfEEpOylBPUErMXwoYXJbaysoQTw8Mik+PjJdPTApO2ZvcihhcltoPj4yXT0wLGFyWzQraD4+Ml09MCxBPWFyWzgraD4+Ml09MDszIT0oMHxBKTspQT1BKzF8KGFyW2grKEE8PDIpPj4yXT0wKTtmb3IoYXJbdz4+Ml09MCxhcls0K3c+PjJdPTAsQT1hcls4K3c+PjJdPTA7MyE9KDB8QSk7KUE9QSsxfChhclt3KyhBPDwyKT4+Ml09MCk7cmV0dXJuIGtpKHIseSx2LGwsdSxiLGssaCx3LG8pLDEwMDwoQT0oWj0oMHwocD0wfGFyW28+PjJdKSk8KDB8Vyk/KGc9MHx0clsxMSt3Pj4wXSxaPTB8dHJbMTEraD4+MF0sQT0xLGc9KGc8PDI0Pj4yNDwwPzB8YXJbNCt3Pj4yXToyNTUmZykrKFctcDw8MSl8MCxaPDwyND4+MjQ8MD8wfGFyWzQraD4+Ml06MjU1JlopOihaPTB8dHJbMTErdz4+MF0sQT0yLGc9KGc9MHx0clsxMStoPj4wXSk8PDI0Pj4yNDwwPzB8YXJbNCtoPj4yXToyNTUmZyxaPDwyND4+MjQ8MD8wfGFyWzQrdz4+Ml06MjU1JlopKStwK2crQXwwKT4+PjA/KEE9MHx5YyhBKSk/ST1YPUE6Z3UoKTooWD1hLEk9MCksaGkoWCxzLGQsMHxhcltpKzQ+PjJdLEUsRStXfDAsdCx5LGwsMHx0clt1Pj4wXSwwfHRyW2I+PjBdLGssaCx3LHApLGFyW0I+PjJdPWFyW2U+PjJdLGU9MHxhcltzPj4yXSxBPTB8YXJbZD4+Ml0sYXJbYz4+Ml09YXJbQj4+Ml0sQT0wfFBBKGMsWCxlLEEsaSxmKSwwfEkmJkJjKEkpLEJ1KHcpLEJ1KGgpLEJ1KGspLGJuKHYpLDB8QyYmQmMoQyksMHxHJiZCYyhHKSx1cj1tLDB8QX0sZnVuY3Rpb24oQSxlLHIsaSxmLG4pe0F8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxuPStuO3ZhciB0LG8sYSxjLGwsdSxiLHMsZCxrLGgsdyx2LG0sZz0wLFo9MCxwPTAseT0wLEI9MCxFPTAsWD0wLFc9MCxJPTAsQz0wLEc9MDtmb3IoQj11cj0obT11cikrMzEmLTMyLHVyPXVyKzEwMDh8MCxjPUIrOHwwLEE9KFo9QikrODk2fDAscD1CKzg4OHwwLGc9Qis0ODh8MCx2PUIrNDgwfDAsbD1CKzg5MnwwLHU9Qis0NzZ8MCxiPUIrNDcyfDAsaz1CKzQ2MHwwLGg9Qis0NDh8MCx3PUIrNDM2fDAsbz1CKzQzMnwwLGE9QiszMnwwLHM9QisyNHwwLGQ9QisxNnwwLEI9QisyMHwwLGFyW3A+PjJdPUEsUVtjPj4zXT1uLDk5PChBPTB8X2MoQSwxMDAsNTUxNjgsYykpPj4+MD8oQT0wfGRuKCksUVtaPj4zXT1uLEE9MHxrcihwLEEsNTUxNjgsWiksKGc9MHxhcltwPj4yXSl8fGd1KCksKFo9MHx5YyhBPDwyKSk/KFc9QSxDPUU9WixHPWcpOmd1KCkpOihFPWcsVz1BLEc9Qz0wKSxUZih2LGkpLHQ9MHx1bih2LDU5MjY0KSx5PTB8YXJbcD4+Ml0sUGJbNyZhcls0OCsoMHxhclt0Pj4yXSk+PjJdXSh0LHkseStXfDAsRSkseT1XPzQ1PT0oMHx0clthcltwPj4yXT4+MF0pOjAsYXJbaz4+Ml09MCxhcls0K2s+PjJdPTAsQT1hcls4K2s+PjJdPTA7MyE9KDB8QSk7KUE9QSsxfChhcltrKyhBPDwyKT4+Ml09MCk7Zm9yKGFyW2g+PjJdPTAsYXJbNCtoPj4yXT0wLEE9YXJbOCtoPj4yXT0wOzMhPSgwfEEpOylBPUErMXwoYXJbaCsoQTw8Mik+PjJdPTApO2Zvcihhclt3Pj4yXT0wLGFyWzQrdz4+Ml09MCxBPWFyWzgrdz4+Ml09MDszIT0oMHxBKTspQT1BKzF8KGFyW3crKEE8PDIpPj4yXT0wKTtyZXR1cm4gX2wocix5LHYsbCx1LGIsayxoLHcsbyksMTAwPChBPShaPSgwfChwPTB8YXJbbz4+Ml0pKTwoMHxXKT8oZz0wfHRyWzgrdyszPj4wXSxaPTB8dHJbOCtoKzM+PjBdLEE9MSxnPShnPDwyND4+MjQ8MD8wfGFyWzQrdz4+Ml06MjU1JmcpKyhXLXA8PDEpfDAsWjw8MjQ+PjI0PDA/MHxhcls0K2g+PjJdOjI1NSZaKTooWj0wfHRyWzgrdyszPj4wXSxBPTIsZz0oZz0wfHRyWzgraCszPj4wXSk8PDI0Pj4yNDwwPzB8YXJbNCtoPj4yXToyNTUmZyxaPDwyND4+MjQ8MD8wfGFyWzQrdz4+Ml06MjU1JlopKStwK2crQXwwKT4+PjA/KEE9MHx5YyhBPDwyKSk/ST1YPUE6Z3UoKTooWD1hLEk9MCksWWwoWCxzLGQsMHxhcltpKzQ+PjJdLEUsRSsoVzw8Mil8MCx0LHksbCwwfGFyW3U+PjJdLDB8YXJbYj4+Ml0sayxoLHcscCksYXJbQj4+Ml09YXJbZT4+Ml0sZT0wfGFyW3M+PjJdLEE9MHxhcltkPj4yXSxhcltjPj4yXT1hcltCPj4yXSxBPTB8bXIoYyxYLGUsQSxpLGYpLDB8SSYmQmMoSSksUXUodyksUXUoaCksQnUoayksYm4odiksMHxDJiZCYyhDKSwwfEcmJkJjKEcpLHVyPW0sMHxBfSxHYl0sJGI9W1ZiLGZ1bmN0aW9uKEEsZSxyLGksZixuKXtBfD0wLGV8PTAscnw9MCxmfD0wLG58PTA7dmFyIHQsbyxhLGM9MCxsPTAsdT0wLGI9MDtpZih1PXVyPShhPXVyKSszMSYtMzIsdXI9dXIrNDh8MCxjPXUrNDB8MCxiPXUrMTZ8MCx0PXUrOHwwLG89dSsxMnwwLGw9dSs0fDAsMSZhclsoaXw9MCkrND4+Ml0pZm9yKFRmKGMsaSksbD0wfHVuKGMsNTkyMzIpLGJuKGMpLFRmKGMsaSksQT0wfHVuKGMsNTkyNDgpLGJuKGMpLGZzWzYzJmFyWzI0KygwfGFyW0E+PjJdKT4+Ml1dKGIsQSksZnNbNjMmYXJbMjgrKDB8YXJbQT4+Ml0pPj4yXV0oYisxMnwwLEEpLGFyW3U+PjJdPWFyW3I+PjJdLEE9YisyNHwwLGFyW2M+PjJdPWFyW3U+PjJdLGM9KDB8Vm4oZSxjLGIsQSxsLGYsMSkpPT0oMHxiKSYxLHRyW24+PjBdPWMsYz0wfGFyW2U+PjJdO0J1KEE9QSstMTJ8MCksKDB8QSkhPSgwfGIpOyk7ZWxzZXtzd2l0Y2goYXJbdD4+Ml09LTEsdT0wfGFyWzE2KygwfGFyW0E+PjJdKT4+Ml0sYXJbbz4+Ml09YXJbZT4+Ml0sYXJbbD4+Ml09YXJbcj4+Ml0sYXJbYj4+Ml09YXJbbz4+Ml0sYXJbYz4+Ml09YXJbbD4+Ml0sYj0wfCRiWzYzJnVdKEEsYixjLGksZix0KSxhcltlPj4yXT1iLDB8YXJbdD4+Ml0pe2Nhc2UgMDp0cltuPj4wXT0wO2JyZWFrO2Nhc2UgMTp0cltuPj4wXT0xO2JyZWFrO2RlZmF1bHQ6dHJbbj4+MF09MSxhcltmPj4yXT00fWM9MHxhcltlPj4yXX1yZXR1cm4gdXI9YSwwfGN9LGZ1bmN0aW9uKEEsZSxyLGksZixuKXt2YXIgdCxvLGEsYyxsO3JldHVybiBBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCxjPXVyPSh0PXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxvPTEyK2N8MCxhPTgrY3wwLGFyWyhsPTQrY3wwKT4+Ml09YXJbZT4+Ml0sYXJbYz4+Ml09YXJbcj4+Ml0sYXJbYT4+Ml09YXJbbD4+Ml0sYXJbbz4+Ml09YXJbYz4+Ml0sbj0wfGZ1bmN0aW9uKEEsZSxyLGksZixuKXtBfD0wLGV8PTAscnw9MCxmfD0wLG58PTA7dmFyIHQsbyxhLGMsbCx1LGIscyxkLGssaCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTAsQj0wLEU9MDt5PXVyPShoPXVyKSszMSYtMzIsdXI9dXIrMjI0fDAsYz15KzE5OHwwLHA9eSsxOTZ8MCxkPXkrMTg0fDAsaz15KzE3MnwwLGw9eSsxNjh8MCx1PXkrOHwwLGI9eSs0fDAscz0wfHluKGl8PTApLEJuKGQsaSxjLHApLGFyW2s+PjJdPTAsYXJbNCtrPj4yXT0wLGFyWzgraz4+Ml09MCxBPTA7Zm9yKDszIT0oMHxBKTspYXJbaysoQTw8Mik+PjJdPTAsQT1BKzF8MDthPTgra3wwLEE9KDB8dHJbKG89MTEra3wwKT4+MF0pPDA/KDIxNDc0ODM2NDcmYXJbYT4+Ml0pLTF8MDoxMDtWdShrLEEsMCksQT0oMHx0cltvPj4wXSk8MD8wfGFyW2s+PjJdOmssYXJbbD4+Ml09QSxhcltiPj4yXT11LGFyW3k+PjJdPTAsdD00K2t8MCx2PTB8YXJbZT4+Ml0sdz12O0E6Zm9yKDs7KXttPXc/MHxNZihpPSgwfChpPTB8YXJbdysxMj4+Ml0pKT09KDB8YXJbdysxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3c+PjJdKT4+Ml1dKHcpOjB8aGYoMHx0cltpPj4wXSksLTEpPyhhcltlPj4yXT0wLHY9Wj0wLDEpOihaPXcsMCk6KHY9Wj0wLDEpLHc9MHxhcltyPj4yXTtkb3tpZih3KXtpZigwfE1mKGk9KDB8KGk9MHxhclt3KzEyPj4yXSkpPT0oMHxhclt3KzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbdz4+Ml0pPj4yXV0odyk6MHxoZigwfHRyW2k+PjBdKSwtMSkpe2FyW3I+PjJdPTAsRT0xOTticmVha31pZihtKWJyZWFrO2JyZWFrIEF9RT0xOX13aGlsZSgwKTtpZigxOT09KDB8RSkpe2lmKEU9MCxtKXt3PTA7YnJlYWt9dz0wfWlmKGk9KGk9MHx0cltvPj4wXSk8PDI0Pj4yNDwwPzB8YXJbdD4+Ml06MjU1JmksKDB8YXJbbD4+Ml0pPT0oQStpfDApJiYoVnUoayxpPDwxLDApLEE9KDB8dHJbbz4+MF0pPDA/KDIxNDc0ODM2NDcmYXJbYT4+Ml0pLTF8MDoxMCxWdShrLEEsMCksQT0oMHx0cltvPj4wXSk8MD8wfGFyW2s+PjJdOmssYXJbbD4+Ml09QStpKSwwfHNuKDI1NSYoaT0oMHwoaT0wfGFyWyhtPVorMTJ8MCk+PjJdKSk9PSgwfGFyWyhnPVorMTZ8MCk+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltaPj4yXSk+PjJdXShaKTowfGhmKDB8dHJbaT4+MF0pKSxzLEEsbCx5LDB8dHJbcD4+MF0sZCx1LGIsYykpYnJlYWs7KDB8KGk9MHxhclttPj4yXSkpIT0oMHxhcltnPj4yXSk/KGFyW20+PjJdPWkrMSxoZigwfHRyW2k+PjBdKSx3PVopOihqYlsxMjcmYXJbNDArKDB8YXJbWj4+Ml0pPj4yXV0oWiksdz1aKX0wfCgocD0wfHRyWzExK2Q+PjBdKTw8MjQ+PjI0PDA/MHxhcls0K2Q+PjJdOjI1NSZwKSYmKChCPTB8YXJbYj4+Ml0pLXV8MCk8MTYwJiYoeT0wfGFyW3k+PjJdLGFyW2I+PjJdPUIrNCxhcltCPj4yXT15KTtCPTB8R24oQSwwfGFyW2w+PjJdLGYscyksYXJbbj4+Ml09QixnbihkLHUsMHxhcltiPj4yXSxmKSxpPVo/KEE9KDB8KEE9MHxhcltaKzEyPj4yXSkpPT0oMHxhcltaKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbdj4+Ml0pPj4yXV0oWik6MHxoZigwfHRyW0E+PjBdKSwwfE1mKEEsLTEpPyhhcltlPj4yXT0wLDEpOjApOjE7ZG97aWYodyl7aWYoMHxNZihBPSgwfChBPTB8YXJbdysxMj4+Ml0pKT09KDB8YXJbdysxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3c+PjJdKT4+Ml1dKHcpOjB8aGYoMHx0cltBPj4wXSksLTEpKXthcltyPj4yXT0wLEU9NDc7YnJlYWt9aWYoaSlicmVhaztFPTQ5O2JyZWFrfUU9NDd9d2hpbGUoMCk7NDc9PSgwfEUpJiZpJiYoRT00OSk7NDk9PSgwfEUpJiYoYXJbZj4+Ml09MnxhcltmPj4yXSk7cmV0dXJuIEU9MHxhcltlPj4yXSxCdShrKSxCdShkKSx1cj1oLDB8RX0oQSxhLG8saSxmLG4pLHVyPXQsMHxufSxmdW5jdGlvbihBLGUscixpLGYsbil7dmFyIHQsbyxhLGMsbDtyZXR1cm4gQXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsYz11cj0odD11cikrMzEmLTMyLHVyPXVyKzE2fDAsbz0xMitjfDAsYT04K2N8MCxhclsobD00K2N8MCk+PjJdPWFyW2U+PjJdLGFyW2M+PjJdPWFyW3I+PjJdLGFyW2E+PjJdPWFyW2w+PjJdLGFyW28+PjJdPWFyW2M+PjJdLG49MHxmdW5jdGlvbihBLGUscixpLGYsbil7QXw9MCxlfD0wLHJ8PTAsZnw9MCxufD0wO3ZhciB0LG8sYSxjLGwsdSxiLHMsZCxrLGgsdz0wLHY9MCxtPTAsZz0wLFo9MCxwPTAseT0wLEI9MCxFPTA7eT11cj0oaD11cikrMzEmLTMyLHVyPXVyKzIyNHwwLGM9eSsxOTh8MCxwPXkrMTk2fDAsZD15KzE4NHwwLGs9eSsxNzJ8MCxsPXkrMTY4fDAsdT15Kzh8MCxiPXkrNHwwLHM9MHx5bihpfD0wKSxCbihkLGksYyxwKSxhcltrPj4yXT0wLGFyWzQraz4+Ml09MCxhcls4K2s+PjJdPTAsQT0wO2Zvcig7MyE9KDB8QSk7KWFyW2srKEE8PDIpPj4yXT0wLEE9QSsxfDA7YT04K2t8MCxBPSgwfHRyWyhvPTExK2t8MCk+PjBdKTwwPygyMTQ3NDgzNjQ3JmFyW2E+PjJdKS0xfDA6MTA7VnUoayxBLDApLEE9KDB8dHJbbz4+MF0pPDA/MHxhcltrPj4yXTprLGFyW2w+PjJdPUEsYXJbYj4+Ml09dSxhclt5Pj4yXT0wLHQ9NCtrfDAsdj0wfGFyW2U+PjJdLHc9djtBOmZvcig7Oyl7bT13PzB8TWYoaT0oMHwoaT0wfGFyW3crMTI+PjJdKSk9PSgwfGFyW3crMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt3Pj4yXSk+PjJdXSh3KTowfGhmKDB8dHJbaT4+MF0pLC0xKT8oYXJbZT4+Ml09MCx2PVo9MCwxKTooWj13LDApOih2PVo9MCwxKSx3PTB8YXJbcj4+Ml07ZG97aWYodyl7aWYoMHxNZihpPSgwfChpPTB8YXJbdysxMj4+Ml0pKT09KDB8YXJbdysxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3c+PjJdKT4+Ml1dKHcpOjB8aGYoMHx0cltpPj4wXSksLTEpKXthcltyPj4yXT0wLEU9MTk7YnJlYWt9aWYobSlicmVhazticmVhayBBfUU9MTl9d2hpbGUoMCk7aWYoMTk9PSgwfEUpKXtpZihFPTAsbSl7dz0wO2JyZWFrfXc9MH1pZihpPShpPTB8dHJbbz4+MF0pPDwyND4+MjQ8MD8wfGFyW3Q+PjJdOjI1NSZpLCgwfGFyW2w+PjJdKT09KEEraXwwKSYmKFZ1KGssaTw8MSwwKSxBPSgwfHRyW28+PjBdKTwwPygyMTQ3NDgzNjQ3JmFyW2E+PjJdKS0xfDA6MTAsVnUoayxBLDApLEE9KDB8dHJbbz4+MF0pPDA/MHxhcltrPj4yXTprLGFyW2w+PjJdPUEraSksMHxzbigyNTUmKGk9KDB8KGk9MHxhclsobT1aKzEyfDApPj4yXSkpPT0oMHxhclsoZz1aKzE2fDApPj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbWj4+Ml0pPj4yXV0oWik6MHxoZigwfHRyW2k+PjBdKSkscyxBLGwseSwwfHRyW3A+PjBdLGQsdSxiLGMpKWJyZWFrOygwfChpPTB8YXJbbT4+Ml0pKSE9KDB8YXJbZz4+Ml0pPyhhclttPj4yXT1pKzEsaGYoMHx0cltpPj4wXSksdz1aKTooamJbMTI3JmFyWzQwKygwfGFyW1o+PjJdKT4+Ml1dKFopLHc9Wil9MHwoKHA9MHx0clsxMStkPj4wXSk8PDI0Pj4yNDwwPzB8YXJbNCtkPj4yXToyNTUmcCkmJigoQj0wfGFyW2I+PjJdKS11fDApPDE2MCYmKHk9MHxhclt5Pj4yXSxhcltiPj4yXT1CKzQsYXJbQj4+Ml09eSk7Qj0wfENuKEEsMHxhcltsPj4yXSxmLHMpLGFyW24+PjJdPUIsYXJbbis0Pj4yXT1ELGduKGQsdSwwfGFyW2I+PjJdLGYpLGk9Wj8oQT0oMHwoQT0wfGFyW1orMTI+PjJdKSk9PSgwfGFyW1orMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt2Pj4yXSk+PjJdXShaKTowfGhmKDB8dHJbQT4+MF0pLDB8TWYoQSwtMSk/KGFyW2U+PjJdPTAsMSk6MCk6MTtkb3tpZih3KXtpZigwfE1mKEE9KDB8KEE9MHxhclt3KzEyPj4yXSkpPT0oMHxhclt3KzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbdz4+Ml0pPj4yXV0odyk6MHxoZigwfHRyW0E+PjBdKSwtMSkpe2FyW3I+PjJdPTAsRT00NzticmVha31pZihpKWJyZWFrO0U9NDk7YnJlYWt9RT00N313aGlsZSgwKTs0Nz09KDB8RSkmJmkmJihFPTQ5KTs0OT09KDB8RSkmJihhcltmPj4yXT0yfGFyW2Y+PjJdKTtyZXR1cm4gRT0wfGFyW2U+PjJdLEJ1KGspLEJ1KGQpLHVyPWgsMHxFfShBLGEsbyxpLGYsbiksdXI9dCwwfG59LGZ1bmN0aW9uKEEsZSxyLGksZixuKXt2YXIgdCxvLGEsYyxsO3JldHVybiBBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCxjPXVyPSh0PXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxvPTEyK2N8MCxhPTgrY3wwLGFyWyhsPTQrY3wwKT4+Ml09YXJbZT4+Ml0sYXJbYz4+Ml09YXJbcj4+Ml0sYXJbYT4+Ml09YXJbbD4+Ml0sYXJbbz4+Ml09YXJbYz4+Ml0sbj0wfGZ1bmN0aW9uKEEsZSxyLGksZixuKXtBfD0wLGV8PTAscnw9MCxmfD0wLG58PTA7dmFyIHQsbyxhLGMsbCx1LGIscyxkLGssaCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTAsQj0wLEU9MDt5PXVyPShoPXVyKSszMSYtMzIsdXI9dXIrMjI0fDAsYz15KzE5OHwwLHA9eSsxOTZ8MCxkPXkrMTg0fDAsaz15KzE3MnwwLGw9eSsxNjh8MCx1PXkrOHwwLGI9eSs0fDAscz0wfHluKGl8PTApLEJuKGQsaSxjLHApLGFyW2s+PjJdPTAsYXJbNCtrPj4yXT0wLGFyWzgraz4+Ml09MCxBPTA7Zm9yKDszIT0oMHxBKTspYXJbaysoQTw8Mik+PjJdPTAsQT1BKzF8MDthPTgra3wwLEE9KDB8dHJbKG89MTEra3wwKT4+MF0pPDA/KDIxNDc0ODM2NDcmYXJbYT4+Ml0pLTF8MDoxMDtWdShrLEEsMCksQT0oMHx0cltvPj4wXSk8MD8wfGFyW2s+PjJdOmssYXJbbD4+Ml09QSxhcltiPj4yXT11LGFyW3k+PjJdPTAsdD00K2t8MCx2PTB8YXJbZT4+Ml0sdz12O0E6Zm9yKDs7KXttPXc/MHxNZihpPSgwfChpPTB8YXJbdysxMj4+Ml0pKT09KDB8YXJbdysxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3c+PjJdKT4+Ml1dKHcpOjB8aGYoMHx0cltpPj4wXSksLTEpPyhhcltlPj4yXT0wLHY9Wj0wLDEpOihaPXcsMCk6KHY9Wj0wLDEpLHc9MHxhcltyPj4yXTtkb3tpZih3KXtpZigwfE1mKGk9KDB8KGk9MHxhclt3KzEyPj4yXSkpPT0oMHxhclt3KzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbdz4+Ml0pPj4yXV0odyk6MHxoZigwfHRyW2k+PjBdKSwtMSkpe2FyW3I+PjJdPTAsRT0xOTticmVha31pZihtKWJyZWFrO2JyZWFrIEF9RT0xOX13aGlsZSgwKTtpZigxOT09KDB8RSkpe2lmKEU9MCxtKXt3PTA7YnJlYWt9dz0wfWlmKGk9KGk9MHx0cltvPj4wXSk8PDI0Pj4yNDwwPzB8YXJbdD4+Ml06MjU1JmksKDB8YXJbbD4+Ml0pPT0oQStpfDApJiYoVnUoayxpPDwxLDApLEE9KDB8dHJbbz4+MF0pPDA/KDIxNDc0ODM2NDcmYXJbYT4+Ml0pLTF8MDoxMCxWdShrLEEsMCksQT0oMHx0cltvPj4wXSk8MD8wfGFyW2s+PjJdOmssYXJbbD4+Ml09QStpKSwwfHNuKDI1NSYoaT0oMHwoaT0wfGFyWyhtPVorMTJ8MCk+PjJdKSk9PSgwfGFyWyhnPVorMTZ8MCk+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltaPj4yXSk+PjJdXShaKTowfGhmKDB8dHJbaT4+MF0pKSxzLEEsbCx5LDB8dHJbcD4+MF0sZCx1LGIsYykpYnJlYWs7KDB8KGk9MHxhclttPj4yXSkpIT0oMHxhcltnPj4yXSk/KGFyW20+PjJdPWkrMSxoZigwfHRyW2k+PjBdKSx3PVopOihqYlsxMjcmYXJbNDArKDB8YXJbWj4+Ml0pPj4yXV0oWiksdz1aKX0wfCgocD0wfHRyWzExK2Q+PjBdKTw8MjQ+PjI0PDA/MHxhcls0K2Q+PjJdOjI1NSZwKSYmKChCPTB8YXJbYj4+Ml0pLXV8MCk8MTYwJiYoeT0wfGFyW3k+PjJdLGFyW2I+PjJdPUIrNCxhcltCPj4yXT15KTtCPTB8SW4oQSwwfGFyW2w+PjJdLGYscyksb3Jbbj4+MV09QixnbihkLHUsMHxhcltiPj4yXSxmKSxpPVo/KEE9KDB8KEE9MHxhcltaKzEyPj4yXSkpPT0oMHxhcltaKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbdj4+Ml0pPj4yXV0oWik6MHxoZigwfHRyW0E+PjBdKSwwfE1mKEEsLTEpPyhhcltlPj4yXT0wLDEpOjApOjE7ZG97aWYodyl7aWYoMHxNZihBPSgwfChBPTB8YXJbdysxMj4+Ml0pKT09KDB8YXJbdysxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3c+PjJdKT4+Ml1dKHcpOjB8aGYoMHx0cltBPj4wXSksLTEpKXthcltyPj4yXT0wLEU9NDc7YnJlYWt9aWYoaSlicmVhaztFPTQ5O2JyZWFrfUU9NDd9d2hpbGUoMCk7NDc9PSgwfEUpJiZpJiYoRT00OSk7NDk9PSgwfEUpJiYoYXJbZj4+Ml09MnxhcltmPj4yXSk7cmV0dXJuIEU9MHxhcltlPj4yXSxCdShrKSxCdShkKSx1cj1oLDB8RX0oQSxhLG8saSxmLG4pLHVyPXQsMHxufSxmdW5jdGlvbihBLGUscixpLGYsbil7dmFyIHQsbyxhLGMsbDtyZXR1cm4gQXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsYz11cj0odD11cikrMzEmLTMyLHVyPXVyKzE2fDAsbz0xMitjfDAsYT04K2N8MCxhclsobD00K2N8MCk+PjJdPWFyW2U+PjJdLGFyW2M+PjJdPWFyW3I+PjJdLGFyW2E+PjJdPWFyW2w+PjJdLGFyW28+PjJdPWFyW2M+PjJdLG49MHxmdW5jdGlvbihBLGUscixpLGYsbil7QXw9MCxlfD0wLHJ8PTAsZnw9MCxufD0wO3ZhciB0LG8sYSxjLGwsdSxiLHMsZCxrLGgsdz0wLHY9MCxtPTAsZz0wLFo9MCxwPTAseT0wLEI9MCxFPTA7eT11cj0oaD11cikrMzEmLTMyLHVyPXVyKzIyNHwwLGM9eSsxOTh8MCxwPXkrMTk2fDAsZD15KzE4NHwwLGs9eSsxNzJ8MCxsPXkrMTY4fDAsdT15Kzh8MCxiPXkrNHwwLHM9MHx5bihpfD0wKSxCbihkLGksYyxwKSxhcltrPj4yXT0wLGFyWzQraz4+Ml09MCxhcls4K2s+PjJdPTAsQT0wO2Zvcig7MyE9KDB8QSk7KWFyW2srKEE8PDIpPj4yXT0wLEE9QSsxfDA7YT04K2t8MCxBPSgwfHRyWyhvPTExK2t8MCk+PjBdKTwwPygyMTQ3NDgzNjQ3JmFyW2E+PjJdKS0xfDA6MTA7VnUoayxBLDApLEE9KDB8dHJbbz4+MF0pPDA/MHxhcltrPj4yXTprLGFyW2w+PjJdPUEsYXJbYj4+Ml09dSxhclt5Pj4yXT0wLHQ9NCtrfDAsdj0wfGFyW2U+PjJdLHc9djtBOmZvcig7Oyl7bT13PzB8TWYoaT0oMHwoaT0wfGFyW3crMTI+PjJdKSk9PSgwfGFyW3crMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt3Pj4yXSk+PjJdXSh3KTowfGhmKDB8dHJbaT4+MF0pLC0xKT8oYXJbZT4+Ml09MCx2PVo9MCwxKTooWj13LDApOih2PVo9MCwxKSx3PTB8YXJbcj4+Ml07ZG97aWYodyl7aWYoMHxNZihpPSgwfChpPTB8YXJbdysxMj4+Ml0pKT09KDB8YXJbdysxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3c+PjJdKT4+Ml1dKHcpOjB8aGYoMHx0cltpPj4wXSksLTEpKXthcltyPj4yXT0wLEU9MTk7YnJlYWt9aWYobSlicmVhazticmVhayBBfUU9MTl9d2hpbGUoMCk7aWYoMTk9PSgwfEUpKXtpZihFPTAsbSl7dz0wO2JyZWFrfXc9MH1pZihpPShpPTB8dHJbbz4+MF0pPDwyND4+MjQ8MD8wfGFyW3Q+PjJdOjI1NSZpLCgwfGFyW2w+PjJdKT09KEEraXwwKSYmKFZ1KGssaTw8MSwwKSxBPSgwfHRyW28+PjBdKTwwPygyMTQ3NDgzNjQ3JmFyW2E+PjJdKS0xfDA6MTAsVnUoayxBLDApLEE9KDB8dHJbbz4+MF0pPDA/MHxhcltrPj4yXTprLGFyW2w+PjJdPUEraSksMHxzbigyNTUmKGk9KDB8KGk9MHxhclsobT1aKzEyfDApPj4yXSkpPT0oMHxhclsoZz1aKzE2fDApPj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbWj4+Ml0pPj4yXV0oWik6MHxoZigwfHRyW2k+PjBdKSkscyxBLGwseSwwfHRyW3A+PjBdLGQsdSxiLGMpKWJyZWFrOygwfChpPTB8YXJbbT4+Ml0pKSE9KDB8YXJbZz4+Ml0pPyhhclttPj4yXT1pKzEsaGYoMHx0cltpPj4wXSksdz1aKTooamJbMTI3JmFyWzQwKygwfGFyW1o+PjJdKT4+Ml1dKFopLHc9Wil9MHwoKHA9MHx0clsxMStkPj4wXSk8PDI0Pj4yNDwwPzB8YXJbNCtkPj4yXToyNTUmcCkmJigoQj0wfGFyW2I+PjJdKS11fDApPDE2MCYmKHk9MHxhclt5Pj4yXSxhcltiPj4yXT1CKzQsYXJbQj4+Ml09eSk7Qj0wfFduKEEsMHxhcltsPj4yXSxmLHMpLGFyW24+PjJdPUIsZ24oZCx1LDB8YXJbYj4+Ml0sZiksaT1aPyhBPSgwfChBPTB8YXJbWisxMj4+Ml0pKT09KDB8YXJbWisxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3Y+PjJdKT4+Ml1dKFopOjB8aGYoMHx0cltBPj4wXSksMHxNZihBLC0xKT8oYXJbZT4+Ml09MCwxKTowKToxO2Rve2lmKHcpe2lmKDB8TWYoQT0oMHwoQT0wfGFyW3crMTI+PjJdKSk9PSgwfGFyW3crMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt3Pj4yXSk+PjJdXSh3KTowfGhmKDB8dHJbQT4+MF0pLC0xKSl7YXJbcj4+Ml09MCxFPTQ3O2JyZWFrfWlmKGkpYnJlYWs7RT00OTticmVha31FPTQ3fXdoaWxlKDApOzQ3PT0oMHxFKSYmaSYmKEU9NDkpOzQ5PT0oMHxFKSYmKGFyW2Y+PjJdPTJ8YXJbZj4+Ml0pO3JldHVybiBFPTB8YXJbZT4+Ml0sQnUoayksQnUoZCksdXI9aCwwfEV9KEEsYSxvLGksZixuKSx1cj10LDB8bn0sZnVuY3Rpb24oQSxlLHIsaSxmLG4pe3ZhciB0LG8sYSxjLGw7cmV0dXJuIEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLGM9dXI9KHQ9dXIpKzMxJi0zMix1cj11cisxNnwwLG89MTIrY3wwLGE9OCtjfDAsYXJbKGw9NCtjfDApPj4yXT1hcltlPj4yXSxhcltjPj4yXT1hcltyPj4yXSxhclthPj4yXT1hcltsPj4yXSxhcltvPj4yXT1hcltjPj4yXSxuPTB8ZnVuY3Rpb24oQSxlLHIsaSxmLG4pe0F8PTAsZXw9MCxyfD0wLGZ8PTAsbnw9MDt2YXIgdCxvLGEsYyxsLHUsYixzLGQsayxoLHc9MCx2PTAsbT0wLGc9MCxaPTAscD0wLHk9MCxCPTAsRT0wO3k9dXI9KGg9dXIpKzMxJi0zMix1cj11cisyMjR8MCxjPXkrMTk4fDAscD15KzE5NnwwLGQ9eSsxODR8MCxrPXkrMTcyfDAsbD15KzE2OHwwLHU9eSs4fDAsYj15KzR8MCxzPTB8eW4oaXw9MCksQm4oZCxpLGMscCksYXJbaz4+Ml09MCxhcls0K2s+PjJdPTAsYXJbOCtrPj4yXT0wLEE9MDtmb3IoOzMhPSgwfEEpOylhcltrKyhBPDwyKT4+Ml09MCxBPUErMXwwO2E9OCtrfDAsQT0oMHx0clsobz0xMStrfDApPj4wXSk8MD8oMjE0NzQ4MzY0NyZhclthPj4yXSktMXwwOjEwO1Z1KGssQSwwKSxBPSgwfHRyW28+PjBdKTwwPzB8YXJbaz4+Ml06ayxhcltsPj4yXT1BLGFyW2I+PjJdPXUsYXJbeT4+Ml09MCx0PTQra3wwLHY9MHxhcltlPj4yXSx3PXY7QTpmb3IoOzspe209dz8wfE1mKGk9KDB8KGk9MHxhclt3KzEyPj4yXSkpPT0oMHxhclt3KzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbdz4+Ml0pPj4yXV0odyk6MHxoZigwfHRyW2k+PjBdKSwtMSk/KGFyW2U+PjJdPTAsdj1aPTAsMSk6KFo9dywwKToodj1aPTAsMSksdz0wfGFyW3I+PjJdO2Rve2lmKHcpe2lmKDB8TWYoaT0oMHwoaT0wfGFyW3crMTI+PjJdKSk9PSgwfGFyW3crMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt3Pj4yXSk+PjJdXSh3KTowfGhmKDB8dHJbaT4+MF0pLC0xKSl7YXJbcj4+Ml09MCxFPTE5O2JyZWFrfWlmKG0pYnJlYWs7YnJlYWsgQX1FPTE5fXdoaWxlKDApO2lmKDE5PT0oMHxFKSl7aWYoRT0wLG0pe3c9MDticmVha313PTB9aWYoaT0oaT0wfHRyW28+PjBdKTw8MjQ+PjI0PDA/MHxhclt0Pj4yXToyNTUmaSwoMHxhcltsPj4yXSk9PShBK2l8MCkmJihWdShrLGk8PDEsMCksQT0oMHx0cltvPj4wXSk8MD8oMjE0NzQ4MzY0NyZhclthPj4yXSktMXwwOjEwLFZ1KGssQSwwKSxBPSgwfHRyW28+PjBdKTwwPzB8YXJbaz4+Ml06ayxhcltsPj4yXT1BK2kpLDB8c24oMjU1JihpPSgwfChpPTB8YXJbKG09WisxMnwwKT4+Ml0pKT09KDB8YXJbKGc9WisxNnwwKT4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW1o+PjJdKT4+Ml1dKFopOjB8aGYoMHx0cltpPj4wXSkpLHMsQSxsLHksMHx0cltwPj4wXSxkLHUsYixjKSlicmVhazsoMHwoaT0wfGFyW20+PjJdKSkhPSgwfGFyW2c+PjJdKT8oYXJbbT4+Ml09aSsxLGhmKDB8dHJbaT4+MF0pLHc9Wik6KGpiWzEyNyZhcls0MCsoMHxhcltaPj4yXSk+PjJdXShaKSx3PVopfTB8KChwPTB8dHJbMTErZD4+MF0pPDwyND4+MjQ8MD8wfGFyWzQrZD4+Ml06MjU1JnApJiYoKEI9MHxhcltiPj4yXSktdXwwKTwxNjAmJih5PTB8YXJbeT4+Ml0sYXJbYj4+Ml09Qis0LGFyW0I+PjJdPXkpO0I9MHxYbihBLDB8YXJbbD4+Ml0sZixzKSxhcltuPj4yXT1CLGduKGQsdSwwfGFyW2I+PjJdLGYpLGk9Wj8oQT0oMHwoQT0wfGFyW1orMTI+PjJdKSk9PSgwfGFyW1orMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt2Pj4yXSk+PjJdXShaKTowfGhmKDB8dHJbQT4+MF0pLDB8TWYoQSwtMSk/KGFyW2U+PjJdPTAsMSk6MCk6MTtkb3tpZih3KXtpZigwfE1mKEE9KDB8KEE9MHxhclt3KzEyPj4yXSkpPT0oMHxhclt3KzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbdz4+Ml0pPj4yXV0odyk6MHxoZigwfHRyW0E+PjBdKSwtMSkpe2FyW3I+PjJdPTAsRT00NzticmVha31pZihpKWJyZWFrO0U9NDk7YnJlYWt9RT00N313aGlsZSgwKTs0Nz09KDB8RSkmJmkmJihFPTQ5KTs0OT09KDB8RSkmJihhcltmPj4yXT0yfGFyW2Y+PjJdKTtyZXR1cm4gRT0wfGFyW2U+PjJdLEJ1KGspLEJ1KGQpLHVyPWgsMHxFfShBLGEsbyxpLGYsbiksdXI9dCwwfG59LGZ1bmN0aW9uKEEsZSxyLGksZixuKXt2YXIgdCxvLGEsYyxsO3JldHVybiBBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCxjPXVyPSh0PXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxvPTEyK2N8MCxhPTgrY3wwLGFyWyhsPTQrY3wwKT4+Ml09YXJbZT4+Ml0sYXJbYz4+Ml09YXJbcj4+Ml0sYXJbYT4+Ml09YXJbbD4+Ml0sYXJbbz4+Ml09YXJbYz4+Ml0sbj0wfGZ1bmN0aW9uKEEsZSxyLGksZixuKXtBfD0wLGV8PTAscnw9MCxmfD0wLG58PTA7dmFyIHQsbyxhLGMsbCx1LGIscyxkLGssaCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTAsQj0wLEU9MDt5PXVyPShoPXVyKSszMSYtMzIsdXI9dXIrMjI0fDAsYz15KzE5OHwwLHA9eSsxOTZ8MCxkPXkrMTg0fDAsaz15KzE3MnwwLGw9eSsxNjh8MCx1PXkrOHwwLGI9eSs0fDAscz0wfHluKGl8PTApLEJuKGQsaSxjLHApLGFyW2s+PjJdPTAsYXJbNCtrPj4yXT0wLGFyWzgraz4+Ml09MCxBPTA7Zm9yKDszIT0oMHxBKTspYXJbaysoQTw8Mik+PjJdPTAsQT1BKzF8MDthPTgra3wwLEE9KDB8dHJbKG89MTEra3wwKT4+MF0pPDA/KDIxNDc0ODM2NDcmYXJbYT4+Ml0pLTF8MDoxMDtWdShrLEEsMCksQT0oMHx0cltvPj4wXSk8MD8wfGFyW2s+PjJdOmssYXJbbD4+Ml09QSxhcltiPj4yXT11LGFyW3k+PjJdPTAsdD00K2t8MCx2PTB8YXJbZT4+Ml0sdz12O0E6Zm9yKDs7KXttPXc/MHxNZihpPSgwfChpPTB8YXJbdysxMj4+Ml0pKT09KDB8YXJbdysxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3c+PjJdKT4+Ml1dKHcpOjB8aGYoMHx0cltpPj4wXSksLTEpPyhhcltlPj4yXT0wLHY9Wj0wLDEpOihaPXcsMCk6KHY9Wj0wLDEpLHc9MHxhcltyPj4yXTtkb3tpZih3KXtpZigwfE1mKGk9KDB8KGk9MHxhclt3KzEyPj4yXSkpPT0oMHxhclt3KzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbdz4+Ml0pPj4yXV0odyk6MHxoZigwfHRyW2k+PjBdKSwtMSkpe2FyW3I+PjJdPTAsRT0xOTticmVha31pZihtKWJyZWFrO2JyZWFrIEF9RT0xOX13aGlsZSgwKTtpZigxOT09KDB8RSkpe2lmKEU9MCxtKXt3PTA7YnJlYWt9dz0wfWlmKGk9KGk9MHx0cltvPj4wXSk8PDI0Pj4yNDwwPzB8YXJbdD4+Ml06MjU1JmksKDB8YXJbbD4+Ml0pPT0oQStpfDApJiYoVnUoayxpPDwxLDApLEE9KDB8dHJbbz4+MF0pPDA/KDIxNDc0ODM2NDcmYXJbYT4+Ml0pLTF8MDoxMCxWdShrLEEsMCksQT0oMHx0cltvPj4wXSk8MD8wfGFyW2s+PjJdOmssYXJbbD4+Ml09QStpKSwwfHNuKDI1NSYoaT0oMHwoaT0wfGFyWyhtPVorMTJ8MCk+PjJdKSk9PSgwfGFyWyhnPVorMTZ8MCk+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltaPj4yXSk+PjJdXShaKTowfGhmKDB8dHJbaT4+MF0pKSxzLEEsbCx5LDB8dHJbcD4+MF0sZCx1LGIsYykpYnJlYWs7KDB8KGk9MHxhclttPj4yXSkpIT0oMHxhcltnPj4yXSk/KGFyW20+PjJdPWkrMSxoZigwfHRyW2k+PjBdKSx3PVopOihqYlsxMjcmYXJbNDArKDB8YXJbWj4+Ml0pPj4yXV0oWiksdz1aKX0wfCgocD0wfHRyWzExK2Q+PjBdKTw8MjQ+PjI0PDA/MHxhcls0K2Q+PjJdOjI1NSZwKSYmKChCPTB8YXJbYj4+Ml0pLXV8MCk8MTYwJiYoeT0wfGFyW3k+PjJdLGFyW2I+PjJdPUIrNCxhcltCPj4yXT15KTtCPTB8RW4oQSwwfGFyW2w+PjJdLGYscyksYXJbbj4+Ml09QixhcltuKzQ+PjJdPUQsZ24oZCx1LDB8YXJbYj4+Ml0sZiksaT1aPyhBPSgwfChBPTB8YXJbWisxMj4+Ml0pKT09KDB8YXJbWisxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3Y+PjJdKT4+Ml1dKFopOjB8aGYoMHx0cltBPj4wXSksMHxNZihBLC0xKT8oYXJbZT4+Ml09MCwxKTowKToxO2Rve2lmKHcpe2lmKDB8TWYoQT0oMHwoQT0wfGFyW3crMTI+PjJdKSk9PSgwfGFyW3crMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt3Pj4yXSk+PjJdXSh3KTowfGhmKDB8dHJbQT4+MF0pLC0xKSl7YXJbcj4+Ml09MCxFPTQ3O2JyZWFrfWlmKGkpYnJlYWs7RT00OTticmVha31FPTQ3fXdoaWxlKDApOzQ3PT0oMHxFKSYmaSYmKEU9NDkpOzQ5PT0oMHxFKSYmKGFyW2Y+PjJdPTJ8YXJbZj4+Ml0pO3JldHVybiBFPTB8YXJbZT4+Ml0sQnUoayksQnUoZCksdXI9aCwwfEV9KEEsYSxvLGksZixuKSx1cj10LDB8bn0sZnVuY3Rpb24oQSxlLHIsaSxmLG4pe3ZhciB0LG8sYSxjLGw7cmV0dXJuIEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLGM9dXI9KHQ9dXIpKzMxJi0zMix1cj11cisxNnwwLG89MTIrY3wwLGE9OCtjfDAsYXJbKGw9NCtjfDApPj4yXT1hcltlPj4yXSxhcltjPj4yXT1hcltyPj4yXSxhclthPj4yXT1hcltsPj4yXSxhcltvPj4yXT1hcltjPj4yXSxuPTB8ZnVuY3Rpb24oQSxlLHIsaSxmLG4pe0F8PTAsZXw9MCxyfD0wLGZ8PTAsbnw9MDt2YXIgdCxvLGEsYyxsLHUsYixzLGQsayxoLHcsdixtPTAsZz0wLFo9MCxwPTAseT0wLEI9MCxFPTAsWD0wLFc9MCxJPTA7Qj11cj0odz11cikrMzEmLTMyLHVyPXVyKzI0MHwwLGM9QisyMDB8MCxsPUIrMTk5fDAsRT1CKzE5OHwwLGg9QisxODR8MCxrPUIrMTcyfDAsdT1CKzE2OHwwLGI9Qis4fDAscz1CKzR8MCxYPShkPUIpKzE5N3wwLEI9QisxOTZ8MCx3bihoLGl8PTAsYyxsLEUpLGFyW2s+PjJdPTAsYXJbNCtrPj4yXT0wLGFyWzgraz4+Ml09MCxBPTA7Zm9yKDszIT0oMHxBKTspYXJbaysoQTw8Mik+PjJdPTAsQT1BKzF8MDthPTgra3wwLEE9KDB8dHJbKG89MTEra3wwKT4+MF0pPDA/KDIxNDc0ODM2NDcmYXJbYT4+Ml0pLTF8MDoxMDtWdShrLEEsMCksQT0oMHx0cltvPj4wXSk8MD8wfGFyW2s+PjJdOmssYXJbdT4+Ml09QSxhcltzPj4yXT1iLGFyW2Q+PjJdPTAsdHJbWD4+MF09MSx0cltCPj4wXT02OSx0PTQra3wwLGc9MHxhcltlPj4yXSxtPWc7QTpmb3IoOzspe1o9bT8wfE1mKGk9KDB8KGk9MHxhclttKzEyPj4yXSkpPT0oMHxhclttKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbT4+Ml0pPj4yXV0obSk6MHxoZigwfHRyW2k+PjBdKSwtMSk/KGFyW2U+PjJdPTAsZz15PTAsMSk6KHk9bSwwKTooZz15PTAsMSksbT0wfGFyW3I+PjJdO2Rve2lmKG0pe2lmKDB8TWYoaT0oMHwoaT0wfGFyW20rMTI+PjJdKSk9PSgwfGFyW20rMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclttPj4yXSk+PjJdXShtKTowfGhmKDB8dHJbaT4+MF0pLC0xKSl7YXJbcj4+Ml09MCxJPTE5O2JyZWFrfWlmKFopYnJlYWs7YnJlYWsgQX1JPTE5fXdoaWxlKDApO2lmKDE5PT0oMHxJKSl7aWYoST0wLFope209MDticmVha31tPTB9aWYoaT0oaT0wfHRyW28+PjBdKTw8MjQ+PjI0PDA/MHxhclt0Pj4yXToyNTUmaSwoMHxhclt1Pj4yXSk9PShBK2l8MCkmJihWdShrLGk8PDEsMCksQT0oMHx0cltvPj4wXSk8MD8oMjE0NzQ4MzY0NyZhclthPj4yXSktMXwwOjEwLFZ1KGssQSwwKSxBPSgwfHRyW28+PjBdKTwwPzB8YXJbaz4+Ml06ayxhclt1Pj4yXT1BK2kpLDB8dm4oMjU1JihpPSgwfChpPTB8YXJbKFo9eSsxMnwwKT4+Ml0pKT09KDB8YXJbKHA9eSsxNnwwKT4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3k+PjJdKT4+Ml1dKHkpOjB8aGYoMHx0cltpPj4wXSkpLFgsQixBLHUsMHx0cltsPj4wXSwwfHRyW0U+PjBdLGgsYixzLGQsYykpYnJlYWs7KDB8KGk9MHxhcltaPj4yXSkpIT0oMHxhcltwPj4yXSk/KGFyW1o+PjJdPWkrMSxoZigwfHRyW2k+PjBdKSxtPXkpOihqYlsxMjcmYXJbNDArKDB8YXJbeT4+Ml0pPj4yXV0oeSksbT15KX1FPTB8dHJbMTEraD4+MF0sMCE9KDB8dHJbWD4+MF0pJiYwIT0oMHwoRTw8MjQ+PjI0PDA/MHxhcls0K2g+PjJdOjI1NSZFKSkmJigoVz0wfGFyW3M+PjJdKS1ifDApPDE2MCYmKFg9MHxhcltkPj4yXSxhcltzPj4yXT1XKzQsYXJbVz4+Ml09WCk7dj0rcG4oQSwwfGFyW3U+PjJdLGYpLGdBW24+PjJdPXYsZ24oaCxiLDB8YXJbcz4+Ml0sZiksaT15PyhBPSgwfChBPTB8YXJbeSsxMj4+Ml0pKT09KDB8YXJbeSsxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW2c+PjJdKT4+Ml1dKHkpOjB8aGYoMHx0cltBPj4wXSksMHxNZihBLC0xKT8oYXJbZT4+Ml09MCwxKTowKToxO2Rve2lmKG0pe2lmKDB8TWYoQT0oMHwoQT0wfGFyW20rMTI+PjJdKSk9PSgwfGFyW20rMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclttPj4yXSk+PjJdXShtKTowfGhmKDB8dHJbQT4+MF0pLC0xKSl7YXJbcj4+Ml09MCxJPTQ3O2JyZWFrfWlmKGkpYnJlYWs7ST00OTticmVha31JPTQ3fXdoaWxlKDApOzQ3PT0oMHxJKSYmaSYmKEk9NDkpOzQ5PT0oMHxJKSYmKGFyW2Y+PjJdPTJ8YXJbZj4+Ml0pO3JldHVybiBJPTB8YXJbZT4+Ml0sQnUoayksQnUoaCksdXI9dywwfEl9KEEsYSxvLGksZixuKSx1cj10LDB8bn0sZnVuY3Rpb24oQSxlLHIsaSxmLG4pe3ZhciB0LG8sYSxjLGw7cmV0dXJuIEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLGM9dXI9KHQ9dXIpKzMxJi0zMix1cj11cisxNnwwLG89MTIrY3wwLGE9OCtjfDAsYXJbKGw9NCtjfDApPj4yXT1hcltlPj4yXSxhcltjPj4yXT1hcltyPj4yXSxhclthPj4yXT1hcltsPj4yXSxhcltvPj4yXT1hcltjPj4yXSxuPTB8ZnVuY3Rpb24oQSxlLHIsaSxmLG4pe0F8PTAsZXw9MCxyfD0wLGZ8PTAsbnw9MDt2YXIgdCxvLGEsYyxsLHUsYixzLGQsayxoLHcsdixtPTAsZz0wLFo9MCxwPTAseT0wLEI9MCxFPTAsWD0wLFc9MCxJPTA7Qj11cj0odz11cikrMzEmLTMyLHVyPXVyKzI0MHwwLGM9QisyMDB8MCxsPUIrMTk5fDAsRT1CKzE5OHwwLGg9QisxODR8MCxrPUIrMTcyfDAsdT1CKzE2OHwwLGI9Qis4fDAscz1CKzR8MCxYPShkPUIpKzE5N3wwLEI9QisxOTZ8MCx3bihoLGl8PTAsYyxsLEUpLGFyW2s+PjJdPTAsYXJbNCtrPj4yXT0wLGFyWzgraz4+Ml09MCxBPTA7Zm9yKDszIT0oMHxBKTspYXJbaysoQTw8Mik+PjJdPTAsQT1BKzF8MDthPTgra3wwLEE9KDB8dHJbKG89MTEra3wwKT4+MF0pPDA/KDIxNDc0ODM2NDcmYXJbYT4+Ml0pLTF8MDoxMDtWdShrLEEsMCksQT0oMHx0cltvPj4wXSk8MD8wfGFyW2s+PjJdOmssYXJbdT4+Ml09QSxhcltzPj4yXT1iLGFyW2Q+PjJdPTAsdHJbWD4+MF09MSx0cltCPj4wXT02OSx0PTQra3wwLGc9MHxhcltlPj4yXSxtPWc7QTpmb3IoOzspe1o9bT8wfE1mKGk9KDB8KGk9MHxhclttKzEyPj4yXSkpPT0oMHxhclttKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbT4+Ml0pPj4yXV0obSk6MHxoZigwfHRyW2k+PjBdKSwtMSk/KGFyW2U+PjJdPTAsZz15PTAsMSk6KHk9bSwwKTooZz15PTAsMSksbT0wfGFyW3I+PjJdO2Rve2lmKG0pe2lmKDB8TWYoaT0oMHwoaT0wfGFyW20rMTI+PjJdKSk9PSgwfGFyW20rMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclttPj4yXSk+PjJdXShtKTowfGhmKDB8dHJbaT4+MF0pLC0xKSl7YXJbcj4+Ml09MCxJPTE5O2JyZWFrfWlmKFopYnJlYWs7YnJlYWsgQX1JPTE5fXdoaWxlKDApO2lmKDE5PT0oMHxJKSl7aWYoST0wLFope209MDticmVha31tPTB9aWYoaT0oaT0wfHRyW28+PjBdKTw8MjQ+PjI0PDA/MHxhclt0Pj4yXToyNTUmaSwoMHxhclt1Pj4yXSk9PShBK2l8MCkmJihWdShrLGk8PDEsMCksQT0oMHx0cltvPj4wXSk8MD8oMjE0NzQ4MzY0NyZhclthPj4yXSktMXwwOjEwLFZ1KGssQSwwKSxBPSgwfHRyW28+PjBdKTwwPzB8YXJbaz4+Ml06ayxhclt1Pj4yXT1BK2kpLDB8dm4oMjU1JihpPSgwfChpPTB8YXJbKFo9eSsxMnwwKT4+Ml0pKT09KDB8YXJbKHA9eSsxNnwwKT4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3k+PjJdKT4+Ml1dKHkpOjB8aGYoMHx0cltpPj4wXSkpLFgsQixBLHUsMHx0cltsPj4wXSwwfHRyW0U+PjBdLGgsYixzLGQsYykpYnJlYWs7KDB8KGk9MHxhcltaPj4yXSkpIT0oMHxhcltwPj4yXSk/KGFyW1o+PjJdPWkrMSxoZigwfHRyW2k+PjBdKSxtPXkpOihqYlsxMjcmYXJbNDArKDB8YXJbeT4+Ml0pPj4yXV0oeSksbT15KX1FPTB8dHJbMTEraD4+MF0sMCE9KDB8dHJbWD4+MF0pJiYwIT0oMHwoRTw8MjQ+PjI0PDA/MHxhcls0K2g+PjJdOjI1NSZFKSkmJigoVz0wfGFyW3M+PjJdKS1ifDApPDE2MCYmKFg9MHxhcltkPj4yXSxhcltzPj4yXT1XKzQsYXJbVz4+Ml09WCk7dj0rWm4oQSwwfGFyW3U+PjJdLGYpLFFbbj4+M109dixnbihoLGIsMHxhcltzPj4yXSxmKSxpPXk/KEE9KDB8KEE9MHxhclt5KzEyPj4yXSkpPT0oMHxhclt5KzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbZz4+Ml0pPj4yXV0oeSk6MHxoZigwfHRyW0E+PjBdKSwwfE1mKEEsLTEpPyhhcltlPj4yXT0wLDEpOjApOjE7ZG97aWYobSl7aWYoMHxNZihBPSgwfChBPTB8YXJbbSsxMj4+Ml0pKT09KDB8YXJbbSsxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW20+PjJdKT4+Ml1dKG0pOjB8aGYoMHx0cltBPj4wXSksLTEpKXthcltyPj4yXT0wLEk9NDc7YnJlYWt9aWYoaSlicmVhaztJPTQ5O2JyZWFrfUk9NDd9d2hpbGUoMCk7NDc9PSgwfEkpJiZpJiYoST00OSk7NDk9PSgwfEkpJiYoYXJbZj4+Ml09MnxhcltmPj4yXSk7cmV0dXJuIEk9MHxhcltlPj4yXSxCdShrKSxCdShoKSx1cj13LDB8SX0oQSxhLG8saSxmLG4pLHVyPXQsMHxufSxmdW5jdGlvbihBLGUscixpLGYsbil7dmFyIHQsbyxhLGMsbDtyZXR1cm4gQXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsYz11cj0odD11cikrMzEmLTMyLHVyPXVyKzE2fDAsbz0xMitjfDAsYT04K2N8MCxhclsobD00K2N8MCk+PjJdPWFyW2U+PjJdLGFyW2M+PjJdPWFyW3I+PjJdLGFyW2E+PjJdPWFyW2w+PjJdLGFyW28+PjJdPWFyW2M+PjJdLG49MHxmdW5jdGlvbihBLGUscixpLGYsbil7QXw9MCxlfD0wLHJ8PTAsZnw9MCxufD0wO3ZhciB0LG8sYSxjLGwsdSxiLHMsZCxrLGgsdyx2LG09MCxnPTAsWj0wLHA9MCx5PTAsQj0wLEU9MCxYPTAsVz0wLEk9MDtCPXVyPSh3PXVyKSszMSYtMzIsdXI9dXIrMjQwfDAsYz1CKzIwMHwwLGw9QisxOTl8MCxFPUIrMTk4fDAsaD1CKzE4NHwwLGs9QisxNzJ8MCx1PUIrMTY4fDAsYj1CKzh8MCxzPUIrNHwwLFg9KGQ9QikrMTk3fDAsQj1CKzE5NnwwLHduKGgsaXw9MCxjLGwsRSksYXJbaz4+Ml09MCxhcls0K2s+PjJdPTAsYXJbOCtrPj4yXT0wLEE9MDtmb3IoOzMhPSgwfEEpOylhcltrKyhBPDwyKT4+Ml09MCxBPUErMXwwO2E9OCtrfDAsQT0oMHx0clsobz0xMStrfDApPj4wXSk8MD8oMjE0NzQ4MzY0NyZhclthPj4yXSktMXwwOjEwO1Z1KGssQSwwKSxBPSgwfHRyW28+PjBdKTwwPzB8YXJbaz4+Ml06ayxhclt1Pj4yXT1BLGFyW3M+PjJdPWIsYXJbZD4+Ml09MCx0cltYPj4wXT0xLHRyW0I+PjBdPTY5LHQ9NCtrfDAsZz0wfGFyW2U+PjJdLG09ZztBOmZvcig7Oyl7Wj1tPzB8TWYoaT0oMHwoaT0wfGFyW20rMTI+PjJdKSk9PSgwfGFyW20rMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclttPj4yXSk+PjJdXShtKTowfGhmKDB8dHJbaT4+MF0pLC0xKT8oYXJbZT4+Ml09MCxnPXk9MCwxKTooeT1tLDApOihnPXk9MCwxKSxtPTB8YXJbcj4+Ml07ZG97aWYobSl7aWYoMHxNZihpPSgwfChpPTB8YXJbbSsxMj4+Ml0pKT09KDB8YXJbbSsxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW20+PjJdKT4+Ml1dKG0pOjB8aGYoMHx0cltpPj4wXSksLTEpKXthcltyPj4yXT0wLEk9MTk7YnJlYWt9aWYoWilicmVhazticmVhayBBfUk9MTl9d2hpbGUoMCk7aWYoMTk9PSgwfEkpKXtpZihJPTAsWil7bT0wO2JyZWFrfW09MH1pZihpPShpPTB8dHJbbz4+MF0pPDwyND4+MjQ8MD8wfGFyW3Q+PjJdOjI1NSZpLCgwfGFyW3U+PjJdKT09KEEraXwwKSYmKFZ1KGssaTw8MSwwKSxBPSgwfHRyW28+PjBdKTwwPygyMTQ3NDgzNjQ3JmFyW2E+PjJdKS0xfDA6MTAsVnUoayxBLDApLEE9KDB8dHJbbz4+MF0pPDA/MHxhcltrPj4yXTprLGFyW3U+PjJdPUEraSksMHx2bigyNTUmKGk9KDB8KGk9MHxhclsoWj15KzEyfDApPj4yXSkpPT0oMHxhclsocD15KzE2fDApPj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbeT4+Ml0pPj4yXV0oeSk6MHxoZigwfHRyW2k+PjBdKSksWCxCLEEsdSwwfHRyW2w+PjBdLDB8dHJbRT4+MF0saCxiLHMsZCxjKSlicmVhazsoMHwoaT0wfGFyW1o+PjJdKSkhPSgwfGFyW3A+PjJdKT8oYXJbWj4+Ml09aSsxLGhmKDB8dHJbaT4+MF0pLG09eSk6KGpiWzEyNyZhcls0MCsoMHxhclt5Pj4yXSk+PjJdXSh5KSxtPXkpfUU9MHx0clsxMStoPj4wXSwwIT0oMHx0cltYPj4wXSkmJjAhPSgwfChFPDwyND4+MjQ8MD8wfGFyWzQraD4+Ml06MjU1JkUpKSYmKChXPTB8YXJbcz4+Ml0pLWJ8MCk8MTYwJiYoWD0wfGFyW2Q+PjJdLGFyW3M+PjJdPVcrNCxhcltXPj4yXT1YKTt2PSttbihBLDB8YXJbdT4+Ml0sZiksUVtuPj4zXT12LGduKGgsYiwwfGFyW3M+PjJdLGYpLGk9eT8oQT0oMHwoQT0wfGFyW3krMTI+PjJdKSk9PSgwfGFyW3krMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltnPj4yXSk+PjJdXSh5KTowfGhmKDB8dHJbQT4+MF0pLDB8TWYoQSwtMSk/KGFyW2U+PjJdPTAsMSk6MCk6MTtkb3tpZihtKXtpZigwfE1mKEE9KDB8KEE9MHxhclttKzEyPj4yXSkpPT0oMHxhclttKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbT4+Ml0pPj4yXV0obSk6MHxoZigwfHRyW0E+PjBdKSwtMSkpe2FyW3I+PjJdPTAsST00NzticmVha31pZihpKWJyZWFrO0k9NDk7YnJlYWt9ST00N313aGlsZSgwKTs0Nz09KDB8SSkmJmkmJihJPTQ5KTs0OT09KDB8SSkmJihhcltmPj4yXT0yfGFyW2Y+PjJdKTtyZXR1cm4gST0wfGFyW2U+PjJdLEJ1KGspLEJ1KGgpLHVyPXcsMHxJfShBLGEsbyxpLGYsbiksdXI9dCwwfG59LGZ1bmN0aW9uKEEsZSxyLGksZixuKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MDt2YXIgdCxvLGEsYyxsLHUsYixzLGQsaz0wLGg9MCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTA7Zm9yKGc9dXI9KGQ9dXIpKzMxJi0zMix1cj11cisyNDB8MCxaPSh1PWcpKzIwNHwwLGI9ZysxOTJ8MCxzPWcrMTgwfDAscD1nKzE3NnwwLGM9ZysxNnwwLGw9Zys4fDAsZz1nKzR8MCxhcltiPj4yXT0wLGFyWzQrYj4+Ml09MCxBPWFyWzgrYj4+Ml09MDszIT0oMHxBKTspQT1BKzF8KGFyW2IrKEE8PDIpPj4yXT0wKTtmb3IoVGYocyxpKSxBPTB8dW4ocyw1OTIzMiksUGJbNyZhclszMisoMHxhcltBPj4yXSk+PjJdXShBLDUzNjQ4LDUzNjc0LFopLGJuKHMpLGFyW3M+PjJdPTAsYXJbNCtzPj4yXT0wLEE9YXJbOCtzPj4yXT0wOzMhPSgwfEEpOylBPUErMXwoYXJbcysoQTw8Mik+PjJdPTApO289OCtzfDAsVnUocyxBPSgwfHRyWyhhPTExK3N8MCk+PjBdKTwwPygyMTQ3NDgzNjQ3JmFyW28+PjJdKS0xfDA6MTAsMCksQT0oMHx0clthPj4wXSk8MD8wfGFyW3M+PjJdOnMsYXJbcD4+Ml09QSxhcltsPj4yXT1jLHQ9NCtzfChhcltnPj4yXT0wKSxrPWg9MHxhcltlPj4yXTtBOmZvcig7Oyl7dz1rPzB8TWYoaT0oMHwoaT0wfGFyW2srMTI+PjJdKSk9PSgwfGFyW2srMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltrPj4yXSk+PjJdXShrKTowfGhmKDB8dHJbaT4+MF0pLC0xKT8oaD1tPWFyW2U+PjJdPTAsMSk6KG09aywwKTooaD1tPTAsMSksaz0wfGFyW3I+PjJdO2Rve2lmKGspe2lmKDB8TWYoaT0oMHwoaT0wfGFyW2srMTI+PjJdKSk9PSgwfGFyW2srMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltrPj4yXSk+PjJdXShrKTowfGhmKDB8dHJbaT4+MF0pLC0xKSl7YXJbcj4+Ml09MCx5PTIyO2JyZWFrfWlmKHcpYnJlYWs7YnJlYWsgQX15PTIyfXdoaWxlKDApO2lmKDIyPT0oMHx5KSl7aWYoeT0wLHcpe2s9MDticmVha31rPTB9aWYoaT0oaT0wfHRyW2E+PjBdKTw8MjQ+PjI0PDA/MHxhclt0Pj4yXToyNTUmaSwoMHxhcltwPj4yXSk9PShBK2l8MCkmJihWdShzLGk8PDEsMCksVnUocyxBPSgwfHRyW2E+PjBdKTwwPygyMTQ3NDgzNjQ3JmFyW28+PjJdKS0xfDA6MTAsMCksQT0oMHx0clthPj4wXSk8MD8wfGFyW3M+PjJdOnMsYXJbcD4+Ml09QStpKSwwfHNuKDI1NSYoaT0oMHwoaT0wfGFyWyh3PW0rMTJ8MCk+PjJdKSk9PSgwfGFyWyh2PW0rMTZ8MCk+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclttPj4yXSk+PjJdXShtKTowfGhmKDB8dHJbaT4+MF0pKSwxNixBLHAsZywwLGIsYyxsLFopKWJyZWFrOygwfChpPTB8YXJbdz4+Ml0pKSE9KDB8YXJbdj4+Ml0pPyhhclt3Pj4yXT1pKzEsaGYoMHx0cltpPj4wXSksaz1tKTooamJbMTI3JmFyWzQwKygwfGFyW20+PjJdKT4+Ml1dKG0pLGs9bSl9VnUocywoMHxhcltwPj4yXSktQXwwLDApLFo9KDB8dHJbYT4+MF0pPDA/MHxhcltzPj4yXTpzLHA9MHxkbigpLGFyW3U+PjJdPW4sMSE9KDB8a24oWixwLDUzNjgxLHUpKSYmKGFyW2Y+PjJdPTQpLGk9bT8wfE1mKEE9KDB8KEE9MHxhclttKzEyPj4yXSkpPT0oMHxhclttKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbaD4+Ml0pPj4yXV0obSk6MHxoZigwfHRyW0E+PjBdKSwtMSk/KGFyW2U+PjJdPTAsMSk6MDoxO2Rve2lmKGspe2lmKDB8TWYoQT0oMHwoQT0wfGFyW2srMTI+PjJdKSk9PSgwfGFyW2srMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltrPj4yXSk+PjJdXShrKTowfGhmKDB8dHJbQT4+MF0pLC0xKSl7YXJbcj4+Ml09MCx5PTQ5O2JyZWFrfWlmKGkpYnJlYWs7eT01MTticmVha315PTQ5fXdoaWxlKDApO3JldHVybiA0OT09KDB8eSkmJmkmJih5PTUxKSw1MT09KDB8eSkmJihhcltmPj4yXT0yfGFyW2Y+PjJdKSx5PTB8YXJbZT4+Ml0sQnUocyksQnUoYiksdXI9ZCwwfHl9LGZ1bmN0aW9uKEEsZSxyLGksZixuKXtBfD0wLGV8PTAscnw9MCxmfD0wLG58PTA7dmFyIHQsbyxhLGM9MCxsPTAsdT0wLGI9MDtpZih1PXVyPShhPXVyKSszMSYtMzIsdXI9dXIrNDh8MCxjPXUrNDB8MCxiPXUrMTZ8MCx0PXUrOHwwLG89dSsxMnwwLGw9dSs0fDAsMSZhclsoaXw9MCkrND4+Ml0pZm9yKFRmKGMsaSksbD0wfHVuKGMsNTkyNjQpLGJuKGMpLFRmKGMsaSksQT0wfHVuKGMsNTkyNzIpLGJuKGMpLGZzWzYzJmFyWzI0KygwfGFyW0E+PjJdKT4+Ml1dKGIsQSksZnNbNjMmYXJbMjgrKDB8YXJbQT4+Ml0pPj4yXV0oYisxMnwwLEEpLGFyW3U+PjJdPWFyW3I+PjJdLEE9YisyNHwwLGFyW2M+PjJdPWFyW3U+PjJdLGM9KDB8aXIoZSxjLGIsQSxsLGYsMSkpPT0oMHxiKSYxLHRyW24+PjBdPWMsYz0wfGFyW2U+PjJdO1F1KEE9QSstMTJ8MCksKDB8QSkhPSgwfGIpOyk7ZWxzZXtzd2l0Y2goYXJbdD4+Ml09LTEsdT0wfGFyWzE2KygwfGFyW0E+PjJdKT4+Ml0sYXJbbz4+Ml09YXJbZT4+Ml0sYXJbbD4+Ml09YXJbcj4+Ml0sYXJbYj4+Ml09YXJbbz4+Ml0sYXJbYz4+Ml09YXJbbD4+Ml0sYj0wfCRiWzYzJnVdKEEsYixjLGksZix0KSxhcltlPj4yXT1iLDB8YXJbdD4+Ml0pe2Nhc2UgMDp0cltuPj4wXT0wO2JyZWFrO2Nhc2UgMTp0cltuPj4wXT0xO2JyZWFrO2RlZmF1bHQ6dHJbbj4+MF09MSxhcltmPj4yXT00fWM9MHxhcltlPj4yXX1yZXR1cm4gdXI9YSwwfGN9LGZ1bmN0aW9uKEEsZSxyLGksZixuKXt2YXIgdCxvLGEsYyxsO3JldHVybiBBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCxjPXVyPSh0PXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxvPTEyK2N8MCxhPTgrY3wwLGFyWyhsPTQrY3wwKT4+Ml09YXJbZT4+Ml0sYXJbYz4+Ml09YXJbcj4+Ml0sYXJbYT4+Ml09YXJbbD4+Ml0sYXJbbz4+Ml09YXJbYz4+Ml0sbj0wfGZ1bmN0aW9uKEEsZSxyLGksZixuKXtBfD0wLGV8PTAscnw9MCxmfD0wLG58PTA7dmFyIHQsbyxhLGMsbCx1LGIscyxkLGssaCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTAsQj0wLEU9MDtmb3IoeT11cj0oaD11cikrMzEmLTMyLHVyPXVyKzMwNHwwLGM9eSsyMDB8MCxwPXkrMTk2fDAsZD15KzE4NHwwLGs9eSsxNzJ8MCxsPXkrMTY4fDAsdT15Kzh8MCxiPXkrNHwwLHM9MHx5bihpfD0wKSxfbihkLGksYyxwKSxhcltrPj4yXT0wLGFyWzQraz4+Ml09MCxBPWFyWzgraz4+Ml09MDszIT0oMHxBKTspQT1BKzF8KGFyW2srKEE8PDIpPj4yXT0wKTthPTgra3wwLFZ1KGssQT0oMHx0clsobz0xMStrfDApPj4wXSk8MD8oMjE0NzQ4MzY0NyZhclthPj4yXSktMXwwOjEwLDApLEE9KDB8dHJbbz4+MF0pPDA/MHxhcltrPj4yXTprLGFyW2w+PjJdPUEsYXJbYj4+Ml09dSx0PTQra3woYXJbeT4+Ml09MCksdz12PTB8YXJbZT4+Ml07QTpmb3IoOzspe209dz8wfFVmKGk9KDB8KGk9MHxhclt3KzEyPj4yXSkpPT0oMHxhclt3KzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbdz4+Ml0pPj4yXV0odyk6MHxnZigwfGFyW2k+PjJdKSwtMSk/KHY9Wj1hcltlPj4yXT0wLDEpOihaPXcsMCk6KHY9Wj0wLDEpLHc9MHxhcltyPj4yXTtkb3tpZih3KXtpZigwfFVmKGk9KDB8KGk9MHxhclt3KzEyPj4yXSkpPT0oMHxhclt3KzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbdz4+Ml0pPj4yXV0odyk6MHxnZigwfGFyW2k+PjJdKSwtMSkpe2FyW3I+PjJdPTAsRT0xOTticmVha31pZihtKWJyZWFrO2JyZWFrIEF9RT0xOX13aGlsZSgwKTtpZigxOT09KDB8RSkpe2lmKEU9MCxtKXt3PTA7YnJlYWt9dz0wfWlmKGk9KGk9MHx0cltvPj4wXSk8PDI0Pj4yNDwwPzB8YXJbdD4+Ml06MjU1JmksKDB8YXJbbD4+Ml0pPT0oQStpfDApJiYoVnUoayxpPDwxLDApLFZ1KGssQT0oMHx0cltvPj4wXSk8MD8oMjE0NzQ4MzY0NyZhclthPj4yXSktMXwwOjEwLDApLEE9KDB8dHJbbz4+MF0pPDA/MHxhcltrPj4yXTprLGFyW2w+PjJdPUEraSksMHxGbihpPSgwfChpPTB8YXJbKG09WisxMnwwKT4+Ml0pKT09KDB8YXJbKGc9WisxNnwwKT4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW1o+PjJdKT4+Ml1dKFopOjB8Z2YoMHxhcltpPj4yXSkscyxBLGwseSwwfGFyW3A+PjJdLGQsdSxiLGMpKWJyZWFrOygwfChpPTB8YXJbbT4+Ml0pKSE9KDB8YXJbZz4+Ml0pPyhhclttPj4yXT1pKzQsZ2YoMHxhcltpPj4yXSksdz1aKTooamJbMTI3JmFyWzQwKygwfGFyW1o+PjJdKT4+Ml1dKFopLHc9Wil9MHwoKHA9MHx0clsxMStkPj4wXSk8PDI0Pj4yNDwwPzB8YXJbNCtkPj4yXToyNTUmcCkmJigoQj0wfGFyW2I+PjJdKS11fDApPDE2MCYmKHk9MHxhclt5Pj4yXSxhcltiPj4yXT1CKzQsYXJbQj4+Ml09eSksQj0wfEduKEEsMHxhcltsPj4yXSxmLHMpLGFyW24+PjJdPUIsZ24oZCx1LDB8YXJbYj4+Ml0sZiksaT1aPzB8VWYoQT0oMHwoQT0wfGFyW1orMTI+PjJdKSk9PSgwfGFyW1orMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt2Pj4yXSk+PjJdXShaKTowfGdmKDB8YXJbQT4+Ml0pLC0xKT8oYXJbZT4+Ml09MCwxKTowOjE7ZG97aWYodyl7aWYoMHxVZihBPSgwfChBPTB8YXJbdysxMj4+Ml0pKT09KDB8YXJbdysxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3c+PjJdKT4+Ml1dKHcpOjB8Z2YoMHxhcltBPj4yXSksLTEpKXthcltyPj4yXT0wLEU9NDc7YnJlYWt9aWYoaSlicmVhaztFPTQ5O2JyZWFrfUU9NDd9d2hpbGUoMCk7cmV0dXJuIDQ3PT0oMHxFKSYmaSYmKEU9NDkpLDQ5PT0oMHxFKSYmKGFyW2Y+PjJdPTJ8YXJbZj4+Ml0pLEU9MHxhcltlPj4yXSxCdShrKSxCdShkKSx1cj1oLDB8RX0oQSxhLG8saSxmLG4pLHVyPXQsMHxufSxmdW5jdGlvbihBLGUscixpLGYsbil7dmFyIHQsbyxhLGMsbDtyZXR1cm4gQXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsYz11cj0odD11cikrMzEmLTMyLHVyPXVyKzE2fDAsbz0xMitjfDAsYT04K2N8MCxhclsobD00K2N8MCk+PjJdPWFyW2U+PjJdLGFyW2M+PjJdPWFyW3I+PjJdLGFyW2E+PjJdPWFyW2w+PjJdLGFyW28+PjJdPWFyW2M+PjJdLG49MHxmdW5jdGlvbihBLGUscixpLGYsbil7QXw9MCxlfD0wLHJ8PTAsZnw9MCxufD0wO3ZhciB0LG8sYSxjLGwsdSxiLHMsZCxrLGgsdz0wLHY9MCxtPTAsZz0wLFo9MCxwPTAseT0wLEI9MCxFPTA7Zm9yKHk9dXI9KGg9dXIpKzMxJi0zMix1cj11ciszMDR8MCxjPXkrMjAwfDAscD15KzE5NnwwLGQ9eSsxODR8MCxrPXkrMTcyfDAsbD15KzE2OHwwLHU9eSs4fDAsYj15KzR8MCxzPTB8eW4oaXw9MCksX24oZCxpLGMscCksYXJbaz4+Ml09MCxhcls0K2s+PjJdPTAsQT1hcls4K2s+PjJdPTA7MyE9KDB8QSk7KUE9QSsxfChhcltrKyhBPDwyKT4+Ml09MCk7YT04K2t8MCxWdShrLEE9KDB8dHJbKG89MTEra3wwKT4+MF0pPDA/KDIxNDc0ODM2NDcmYXJbYT4+Ml0pLTF8MDoxMCwwKSxBPSgwfHRyW28+PjBdKTwwPzB8YXJbaz4+Ml06ayxhcltsPj4yXT1BLGFyW2I+PjJdPXUsdD00K2t8KGFyW3k+PjJdPTApLHc9dj0wfGFyW2U+PjJdO0E6Zm9yKDs7KXttPXc/MHxVZihpPSgwfChpPTB8YXJbdysxMj4+Ml0pKT09KDB8YXJbdysxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3c+PjJdKT4+Ml1dKHcpOjB8Z2YoMHxhcltpPj4yXSksLTEpPyh2PVo9YXJbZT4+Ml09MCwxKTooWj13LDApOih2PVo9MCwxKSx3PTB8YXJbcj4+Ml07ZG97aWYodyl7aWYoMHxVZihpPSgwfChpPTB8YXJbdysxMj4+Ml0pKT09KDB8YXJbdysxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3c+PjJdKT4+Ml1dKHcpOjB8Z2YoMHxhcltpPj4yXSksLTEpKXthcltyPj4yXT0wLEU9MTk7YnJlYWt9aWYobSlicmVhazticmVhayBBfUU9MTl9d2hpbGUoMCk7aWYoMTk9PSgwfEUpKXtpZihFPTAsbSl7dz0wO2JyZWFrfXc9MH1pZihpPShpPTB8dHJbbz4+MF0pPDwyND4+MjQ8MD8wfGFyW3Q+PjJdOjI1NSZpLCgwfGFyW2w+PjJdKT09KEEraXwwKSYmKFZ1KGssaTw8MSwwKSxWdShrLEE9KDB8dHJbbz4+MF0pPDA/KDIxNDc0ODM2NDcmYXJbYT4+Ml0pLTF8MDoxMCwwKSxBPSgwfHRyW28+PjBdKTwwPzB8YXJbaz4+Ml06ayxhcltsPj4yXT1BK2kpLDB8Rm4oaT0oMHwoaT0wfGFyWyhtPVorMTJ8MCk+PjJdKSk9PSgwfGFyWyhnPVorMTZ8MCk+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltaPj4yXSk+PjJdXShaKTowfGdmKDB8YXJbaT4+Ml0pLHMsQSxsLHksMHxhcltwPj4yXSxkLHUsYixjKSlicmVhazsoMHwoaT0wfGFyW20+PjJdKSkhPSgwfGFyW2c+PjJdKT8oYXJbbT4+Ml09aSs0LGdmKDB8YXJbaT4+Ml0pLHc9Wik6KGpiWzEyNyZhcls0MCsoMHxhcltaPj4yXSk+PjJdXShaKSx3PVopfTB8KChwPTB8dHJbMTErZD4+MF0pPDwyND4+MjQ8MD8wfGFyWzQrZD4+Ml06MjU1JnApJiYoKEI9MHxhcltiPj4yXSktdXwwKTwxNjAmJih5PTB8YXJbeT4+Ml0sYXJbYj4+Ml09Qis0LGFyW0I+PjJdPXkpLEI9MHxDbihBLDB8YXJbbD4+Ml0sZixzKSxhcltuPj4yXT1CLGFyW24rND4+Ml09RCxnbihkLHUsMHxhcltiPj4yXSxmKSxpPVo/MHxVZihBPSgwfChBPTB8YXJbWisxMj4+Ml0pKT09KDB8YXJbWisxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3Y+PjJdKT4+Ml1dKFopOjB8Z2YoMHxhcltBPj4yXSksLTEpPyhhcltlPj4yXT0wLDEpOjA6MTtkb3tpZih3KXtpZigwfFVmKEE9KDB8KEE9MHxhclt3KzEyPj4yXSkpPT0oMHxhclt3KzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbdz4+Ml0pPj4yXV0odyk6MHxnZigwfGFyW0E+PjJdKSwtMSkpe2FyW3I+PjJdPTAsRT00NzticmVha31pZihpKWJyZWFrO0U9NDk7YnJlYWt9RT00N313aGlsZSgwKTtyZXR1cm4gNDc9PSgwfEUpJiZpJiYoRT00OSksNDk9PSgwfEUpJiYoYXJbZj4+Ml09MnxhcltmPj4yXSksRT0wfGFyW2U+PjJdLEJ1KGspLEJ1KGQpLHVyPWgsMHxFfShBLGEsbyxpLGYsbiksdXI9dCwwfG59LGZ1bmN0aW9uKEEsZSxyLGksZixuKXt2YXIgdCxvLGEsYyxsO3JldHVybiBBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCxjPXVyPSh0PXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxvPTEyK2N8MCxhPTgrY3wwLGFyWyhsPTQrY3wwKT4+Ml09YXJbZT4+Ml0sYXJbYz4+Ml09YXJbcj4+Ml0sYXJbYT4+Ml09YXJbbD4+Ml0sYXJbbz4+Ml09YXJbYz4+Ml0sbj0wfGZ1bmN0aW9uKEEsZSxyLGksZixuKXtBfD0wLGV8PTAscnw9MCxmfD0wLG58PTA7dmFyIHQsbyxhLGMsbCx1LGIscyxkLGssaCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTAsQj0wLEU9MDtmb3IoeT11cj0oaD11cikrMzEmLTMyLHVyPXVyKzMwNHwwLGM9eSsyMDB8MCxwPXkrMTk2fDAsZD15KzE4NHwwLGs9eSsxNzJ8MCxsPXkrMTY4fDAsdT15Kzh8MCxiPXkrNHwwLHM9MHx5bihpfD0wKSxfbihkLGksYyxwKSxhcltrPj4yXT0wLGFyWzQraz4+Ml09MCxBPWFyWzgraz4+Ml09MDszIT0oMHxBKTspQT1BKzF8KGFyW2srKEE8PDIpPj4yXT0wKTthPTgra3wwLFZ1KGssQT0oMHx0clsobz0xMStrfDApPj4wXSk8MD8oMjE0NzQ4MzY0NyZhclthPj4yXSktMXwwOjEwLDApLEE9KDB8dHJbbz4+MF0pPDA/MHxhcltrPj4yXTprLGFyW2w+PjJdPUEsYXJbYj4+Ml09dSx0PTQra3woYXJbeT4+Ml09MCksdz12PTB8YXJbZT4+Ml07QTpmb3IoOzspe209dz8wfFVmKGk9KDB8KGk9MHxhclt3KzEyPj4yXSkpPT0oMHxhclt3KzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbdz4+Ml0pPj4yXV0odyk6MHxnZigwfGFyW2k+PjJdKSwtMSk/KHY9Wj1hcltlPj4yXT0wLDEpOihaPXcsMCk6KHY9Wj0wLDEpLHc9MHxhcltyPj4yXTtkb3tpZih3KXtpZigwfFVmKGk9KDB8KGk9MHxhclt3KzEyPj4yXSkpPT0oMHxhclt3KzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbdz4+Ml0pPj4yXV0odyk6MHxnZigwfGFyW2k+PjJdKSwtMSkpe2FyW3I+PjJdPTAsRT0xOTticmVha31pZihtKWJyZWFrO2JyZWFrIEF9RT0xOX13aGlsZSgwKTtpZigxOT09KDB8RSkpe2lmKEU9MCxtKXt3PTA7YnJlYWt9dz0wfWlmKGk9KGk9MHx0cltvPj4wXSk8PDI0Pj4yNDwwPzB8YXJbdD4+Ml06MjU1JmksKDB8YXJbbD4+Ml0pPT0oQStpfDApJiYoVnUoayxpPDwxLDApLFZ1KGssQT0oMHx0cltvPj4wXSk8MD8oMjE0NzQ4MzY0NyZhclthPj4yXSktMXwwOjEwLDApLEE9KDB8dHJbbz4+MF0pPDA/MHxhcltrPj4yXTprLGFyW2w+PjJdPUEraSksMHxGbihpPSgwfChpPTB8YXJbKG09WisxMnwwKT4+Ml0pKT09KDB8YXJbKGc9WisxNnwwKT4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW1o+PjJdKT4+Ml1dKFopOjB8Z2YoMHxhcltpPj4yXSkscyxBLGwseSwwfGFyW3A+PjJdLGQsdSxiLGMpKWJyZWFrOygwfChpPTB8YXJbbT4+Ml0pKSE9KDB8YXJbZz4+Ml0pPyhhclttPj4yXT1pKzQsZ2YoMHxhcltpPj4yXSksdz1aKTooamJbMTI3JmFyWzQwKygwfGFyW1o+PjJdKT4+Ml1dKFopLHc9Wil9MHwoKHA9MHx0clsxMStkPj4wXSk8PDI0Pj4yNDwwPzB8YXJbNCtkPj4yXToyNTUmcCkmJigoQj0wfGFyW2I+PjJdKS11fDApPDE2MCYmKHk9MHxhclt5Pj4yXSxhcltiPj4yXT1CKzQsYXJbQj4+Ml09eSksQj0wfEluKEEsMHxhcltsPj4yXSxmLHMpLG9yW24+PjFdPUIsZ24oZCx1LDB8YXJbYj4+Ml0sZiksaT1aPzB8VWYoQT0oMHwoQT0wfGFyW1orMTI+PjJdKSk9PSgwfGFyW1orMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt2Pj4yXSk+PjJdXShaKTowfGdmKDB8YXJbQT4+Ml0pLC0xKT8oYXJbZT4+Ml09MCwxKTowOjE7ZG97aWYodyl7aWYoMHxVZihBPSgwfChBPTB8YXJbdysxMj4+Ml0pKT09KDB8YXJbdysxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3c+PjJdKT4+Ml1dKHcpOjB8Z2YoMHxhcltBPj4yXSksLTEpKXthcltyPj4yXT0wLEU9NDc7YnJlYWt9aWYoaSlicmVhaztFPTQ5O2JyZWFrfUU9NDd9d2hpbGUoMCk7cmV0dXJuIDQ3PT0oMHxFKSYmaSYmKEU9NDkpLDQ5PT0oMHxFKSYmKGFyW2Y+PjJdPTJ8YXJbZj4+Ml0pLEU9MHxhcltlPj4yXSxCdShrKSxCdShkKSx1cj1oLDB8RX0oQSxhLG8saSxmLG4pLHVyPXQsMHxufSxmdW5jdGlvbihBLGUscixpLGYsbil7dmFyIHQsbyxhLGMsbDtyZXR1cm4gQXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsYz11cj0odD11cikrMzEmLTMyLHVyPXVyKzE2fDAsbz0xMitjfDAsYT04K2N8MCxhclsobD00K2N8MCk+PjJdPWFyW2U+PjJdLGFyW2M+PjJdPWFyW3I+PjJdLGFyW2E+PjJdPWFyW2w+PjJdLGFyW28+PjJdPWFyW2M+PjJdLG49MHxmdW5jdGlvbihBLGUscixpLGYsbil7QXw9MCxlfD0wLHJ8PTAsZnw9MCxufD0wO3ZhciB0LG8sYSxjLGwsdSxiLHMsZCxrLGgsdz0wLHY9MCxtPTAsZz0wLFo9MCxwPTAseT0wLEI9MCxFPTA7eT11cj0oaD11cikrMzEmLTMyLHVyPXVyKzMwNHwwLGM9eSsyMDB8MCxwPXkrMTk2fDAsZD15KzE4NHwwLGs9eSsxNzJ8MCxsPXkrMTY4fDAsdT15Kzh8MCxiPXkrNHwwLHM9MHx5bihpfD0wKSxfbihkLGksYyxwKSxhcltrPj4yXT0wLGFyWzQraz4+Ml09MCxhcls4K2s+PjJdPTAsQT0wO2Zvcig7MyE9KDB8QSk7KWFyW2srKEE8PDIpPj4yXT0wLEE9QSsxfDA7YT04K2t8MCxBPSgwfHRyWyhvPTExK2t8MCk+PjBdKTwwPygyMTQ3NDgzNjQ3JmFyW2E+PjJdKS0xfDA6MTA7VnUoayxBLDApLEE9KDB8dHJbbz4+MF0pPDA/MHxhcltrPj4yXTprLGFyW2w+PjJdPUEsYXJbYj4+Ml09dSxhclt5Pj4yXT0wLHQ9NCtrfDAsdj0wfGFyW2U+PjJdLHc9djtBOmZvcig7Oyl7bT13PzB8VWYoaT0oMHwoaT0wfGFyW3crMTI+PjJdKSk9PSgwfGFyW3crMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt3Pj4yXSk+PjJdXSh3KTowfGdmKDB8YXJbaT4+Ml0pLC0xKT8oYXJbZT4+Ml09MCx2PVo9MCwxKTooWj13LDApOih2PVo9MCwxKSx3PTB8YXJbcj4+Ml07ZG97aWYodyl7aWYoMHxVZihpPSgwfChpPTB8YXJbdysxMj4+Ml0pKT09KDB8YXJbdysxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3c+PjJdKT4+Ml1dKHcpOjB8Z2YoMHxhcltpPj4yXSksLTEpKXthcltyPj4yXT0wLEU9MTk7YnJlYWt9aWYobSlicmVhazticmVhayBBfUU9MTl9d2hpbGUoMCk7aWYoMTk9PSgwfEUpKXtpZihFPTAsbSl7dz0wO2JyZWFrfXc9MH1pZihpPShpPTB8dHJbbz4+MF0pPDwyND4+MjQ8MD8wfGFyW3Q+PjJdOjI1NSZpLCgwfGFyW2w+PjJdKT09KEEraXwwKSYmKFZ1KGssaTw8MSwwKSxBPSgwfHRyW28+PjBdKTwwPygyMTQ3NDgzNjQ3JmFyW2E+PjJdKS0xfDA6MTAsVnUoayxBLDApLEE9KDB8dHJbbz4+MF0pPDA/MHxhcltrPj4yXTprLGFyW2w+PjJdPUEraSksMHxGbihpPSgwfChpPTB8YXJbKG09WisxMnwwKT4+Ml0pKT09KDB8YXJbKGc9WisxNnwwKT4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW1o+PjJdKT4+Ml1dKFopOjB8Z2YoMHxhcltpPj4yXSkscyxBLGwseSwwfGFyW3A+PjJdLGQsdSxiLGMpKWJyZWFrOygwfChpPTB8YXJbbT4+Ml0pKSE9KDB8YXJbZz4+Ml0pPyhhclttPj4yXT1pKzQsZ2YoMHxhcltpPj4yXSksdz1aKTooamJbMTI3JmFyWzQwKygwfGFyW1o+PjJdKT4+Ml1dKFopLHc9Wil9MHwoKHA9MHx0clsxMStkPj4wXSk8PDI0Pj4yNDwwPzB8YXJbNCtkPj4yXToyNTUmcCkmJigoQj0wfGFyW2I+PjJdKS11fDApPDE2MCYmKHk9MHxhclt5Pj4yXSxhcltiPj4yXT1CKzQsYXJbQj4+Ml09eSk7Qj0wfFduKEEsMHxhcltsPj4yXSxmLHMpLGFyW24+PjJdPUIsZ24oZCx1LDB8YXJbYj4+Ml0sZiksaT1aPyhBPSgwfChBPTB8YXJbWisxMj4+Ml0pKT09KDB8YXJbWisxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3Y+PjJdKT4+Ml1dKFopOjB8Z2YoMHxhcltBPj4yXSksMHxVZihBLC0xKT8oYXJbZT4+Ml09MCwxKTowKToxO2Rve2lmKHcpe2lmKDB8VWYoQT0oMHwoQT0wfGFyW3crMTI+PjJdKSk9PSgwfGFyW3crMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt3Pj4yXSk+PjJdXSh3KTowfGdmKDB8YXJbQT4+Ml0pLC0xKSl7YXJbcj4+Ml09MCxFPTQ3O2JyZWFrfWlmKGkpYnJlYWs7RT00OTticmVha31FPTQ3fXdoaWxlKDApOzQ3PT0oMHxFKSYmaSYmKEU9NDkpOzQ5PT0oMHxFKSYmKGFyW2Y+PjJdPTJ8YXJbZj4+Ml0pO3JldHVybiBFPTB8YXJbZT4+Ml0sQnUoayksQnUoZCksdXI9aCwwfEV9KEEsYSxvLGksZixuKSx1cj10LDB8bn0sZnVuY3Rpb24oQSxlLHIsaSxmLG4pe3ZhciB0LG8sYSxjLGw7cmV0dXJuIEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLGM9dXI9KHQ9dXIpKzMxJi0zMix1cj11cisxNnwwLG89MTIrY3wwLGE9OCtjfDAsYXJbKGw9NCtjfDApPj4yXT1hcltlPj4yXSxhcltjPj4yXT1hcltyPj4yXSxhclthPj4yXT1hcltsPj4yXSxhcltvPj4yXT1hcltjPj4yXSxuPTB8ZnVuY3Rpb24oQSxlLHIsaSxmLG4pe0F8PTAsZXw9MCxyfD0wLGZ8PTAsbnw9MDt2YXIgdCxvLGEsYyxsLHUsYixzLGQsayxoLHc9MCx2PTAsbT0wLGc9MCxaPTAscD0wLHk9MCxCPTAsRT0wO3k9dXI9KGg9dXIpKzMxJi0zMix1cj11ciszMDR8MCxjPXkrMjAwfDAscD15KzE5NnwwLGQ9eSsxODR8MCxrPXkrMTcyfDAsbD15KzE2OHwwLHU9eSs4fDAsYj15KzR8MCxzPTB8eW4oaXw9MCksX24oZCxpLGMscCksYXJbaz4+Ml09MCxhcls0K2s+PjJdPTAsYXJbOCtrPj4yXT0wLEE9MDtmb3IoOzMhPSgwfEEpOylhcltrKyhBPDwyKT4+Ml09MCxBPUErMXwwO2E9OCtrfDAsQT0oMHx0clsobz0xMStrfDApPj4wXSk8MD8oMjE0NzQ4MzY0NyZhclthPj4yXSktMXwwOjEwO1Z1KGssQSwwKSxBPSgwfHRyW28+PjBdKTwwPzB8YXJbaz4+Ml06ayxhcltsPj4yXT1BLGFyW2I+PjJdPXUsYXJbeT4+Ml09MCx0PTQra3wwLHY9MHxhcltlPj4yXSx3PXY7QTpmb3IoOzspe209dz8wfFVmKGk9KDB8KGk9MHxhclt3KzEyPj4yXSkpPT0oMHxhclt3KzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbdz4+Ml0pPj4yXV0odyk6MHxnZigwfGFyW2k+PjJdKSwtMSk/KGFyW2U+PjJdPTAsdj1aPTAsMSk6KFo9dywwKToodj1aPTAsMSksdz0wfGFyW3I+PjJdO2Rve2lmKHcpe2lmKDB8VWYoaT0oMHwoaT0wfGFyW3crMTI+PjJdKSk9PSgwfGFyW3crMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt3Pj4yXSk+PjJdXSh3KTowfGdmKDB8YXJbaT4+Ml0pLC0xKSl7YXJbcj4+Ml09MCxFPTE5O2JyZWFrfWlmKG0pYnJlYWs7YnJlYWsgQX1FPTE5fXdoaWxlKDApO2lmKDE5PT0oMHxFKSl7aWYoRT0wLG0pe3c9MDticmVha313PTB9aWYoaT0oaT0wfHRyW28+PjBdKTw8MjQ+PjI0PDA/MHxhclt0Pj4yXToyNTUmaSwoMHxhcltsPj4yXSk9PShBK2l8MCkmJihWdShrLGk8PDEsMCksQT0oMHx0cltvPj4wXSk8MD8oMjE0NzQ4MzY0NyZhclthPj4yXSktMXwwOjEwLFZ1KGssQSwwKSxBPSgwfHRyW28+PjBdKTwwPzB8YXJbaz4+Ml06ayxhcltsPj4yXT1BK2kpLDB8Rm4oaT0oMHwoaT0wfGFyWyhtPVorMTJ8MCk+PjJdKSk9PSgwfGFyWyhnPVorMTZ8MCk+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltaPj4yXSk+PjJdXShaKTowfGdmKDB8YXJbaT4+Ml0pLHMsQSxsLHksMHxhcltwPj4yXSxkLHUsYixjKSlicmVhazsoMHwoaT0wfGFyW20+PjJdKSkhPSgwfGFyW2c+PjJdKT8oYXJbbT4+Ml09aSs0LGdmKDB8YXJbaT4+Ml0pLHc9Wik6KGpiWzEyNyZhcls0MCsoMHxhcltaPj4yXSk+PjJdXShaKSx3PVopfTB8KChwPTB8dHJbMTErZD4+MF0pPDwyND4+MjQ8MD8wfGFyWzQrZD4+Ml06MjU1JnApJiYoKEI9MHxhcltiPj4yXSktdXwwKTwxNjAmJih5PTB8YXJbeT4+Ml0sYXJbYj4+Ml09Qis0LGFyW0I+PjJdPXkpO0I9MHxYbihBLDB8YXJbbD4+Ml0sZixzKSxhcltuPj4yXT1CLGduKGQsdSwwfGFyW2I+PjJdLGYpLGk9Wj8oQT0oMHwoQT0wfGFyW1orMTI+PjJdKSk9PSgwfGFyW1orMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt2Pj4yXSk+PjJdXShaKTowfGdmKDB8YXJbQT4+Ml0pLDB8VWYoQSwtMSk/KGFyW2U+PjJdPTAsMSk6MCk6MTtkb3tpZih3KXtpZigwfFVmKEE9KDB8KEE9MHxhclt3KzEyPj4yXSkpPT0oMHxhclt3KzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbdz4+Ml0pPj4yXV0odyk6MHxnZigwfGFyW0E+PjJdKSwtMSkpe2FyW3I+PjJdPTAsRT00NzticmVha31pZihpKWJyZWFrO0U9NDk7YnJlYWt9RT00N313aGlsZSgwKTs0Nz09KDB8RSkmJmkmJihFPTQ5KTs0OT09KDB8RSkmJihhcltmPj4yXT0yfGFyW2Y+PjJdKTtyZXR1cm4gRT0wfGFyW2U+PjJdLEJ1KGspLEJ1KGQpLHVyPWgsMHxFfShBLGEsbyxpLGYsbiksdXI9dCwwfG59LGZ1bmN0aW9uKEEsZSxyLGksZixuKXt2YXIgdCxvLGEsYyxsO3JldHVybiBBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCxjPXVyPSh0PXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxvPTEyK2N8MCxhPTgrY3wwLGFyWyhsPTQrY3wwKT4+Ml09YXJbZT4+Ml0sYXJbYz4+Ml09YXJbcj4+Ml0sYXJbYT4+Ml09YXJbbD4+Ml0sYXJbbz4+Ml09YXJbYz4+Ml0sbj0wfGZ1bmN0aW9uKEEsZSxyLGksZixuKXtBfD0wLGV8PTAscnw9MCxmfD0wLG58PTA7dmFyIHQsbyxhLGMsbCx1LGIscyxkLGssaCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTAsQj0wLEU9MDt5PXVyPShoPXVyKSszMSYtMzIsdXI9dXIrMzA0fDAsYz15KzIwMHwwLHA9eSsxOTZ8MCxkPXkrMTg0fDAsaz15KzE3MnwwLGw9eSsxNjh8MCx1PXkrOHwwLGI9eSs0fDAscz0wfHluKGl8PTApLF9uKGQsaSxjLHApLGFyW2s+PjJdPTAsYXJbNCtrPj4yXT0wLGFyWzgraz4+Ml09MCxBPTA7Zm9yKDszIT0oMHxBKTspYXJbaysoQTw8Mik+PjJdPTAsQT1BKzF8MDthPTgra3wwLEE9KDB8dHJbKG89MTEra3wwKT4+MF0pPDA/KDIxNDc0ODM2NDcmYXJbYT4+Ml0pLTF8MDoxMDtWdShrLEEsMCksQT0oMHx0cltvPj4wXSk8MD8wfGFyW2s+PjJdOmssYXJbbD4+Ml09QSxhcltiPj4yXT11LGFyW3k+PjJdPTAsdD00K2t8MCx2PTB8YXJbZT4+Ml0sdz12O0E6Zm9yKDs7KXttPXc/MHxVZihpPSgwfChpPTB8YXJbdysxMj4+Ml0pKT09KDB8YXJbdysxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3c+PjJdKT4+Ml1dKHcpOjB8Z2YoMHxhcltpPj4yXSksLTEpPyhhcltlPj4yXT0wLHY9Wj0wLDEpOihaPXcsMCk6KHY9Wj0wLDEpLHc9MHxhcltyPj4yXTtkb3tpZih3KXtpZigwfFVmKGk9KDB8KGk9MHxhclt3KzEyPj4yXSkpPT0oMHxhclt3KzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbdz4+Ml0pPj4yXV0odyk6MHxnZigwfGFyW2k+PjJdKSwtMSkpe2FyW3I+PjJdPTAsRT0xOTticmVha31pZihtKWJyZWFrO2JyZWFrIEF9RT0xOX13aGlsZSgwKTtpZigxOT09KDB8RSkpe2lmKEU9MCxtKXt3PTA7YnJlYWt9dz0wfWlmKGk9KGk9MHx0cltvPj4wXSk8PDI0Pj4yNDwwPzB8YXJbdD4+Ml06MjU1JmksKDB8YXJbbD4+Ml0pPT0oQStpfDApJiYoVnUoayxpPDwxLDApLEE9KDB8dHJbbz4+MF0pPDA/KDIxNDc0ODM2NDcmYXJbYT4+Ml0pLTF8MDoxMCxWdShrLEEsMCksQT0oMHx0cltvPj4wXSk8MD8wfGFyW2s+PjJdOmssYXJbbD4+Ml09QStpKSwwfEZuKGk9KDB8KGk9MHxhclsobT1aKzEyfDApPj4yXSkpPT0oMHxhclsoZz1aKzE2fDApPj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbWj4+Ml0pPj4yXV0oWik6MHxnZigwfGFyW2k+PjJdKSxzLEEsbCx5LDB8YXJbcD4+Ml0sZCx1LGIsYykpYnJlYWs7KDB8KGk9MHxhclttPj4yXSkpIT0oMHxhcltnPj4yXSk/KGFyW20+PjJdPWkrNCxnZigwfGFyW2k+PjJdKSx3PVopOihqYlsxMjcmYXJbNDArKDB8YXJbWj4+Ml0pPj4yXV0oWiksdz1aKX0wfCgocD0wfHRyWzExK2Q+PjBdKTw8MjQ+PjI0PDA/MHxhcls0K2Q+PjJdOjI1NSZwKSYmKChCPTB8YXJbYj4+Ml0pLXV8MCk8MTYwJiYoeT0wfGFyW3k+PjJdLGFyW2I+PjJdPUIrNCxhcltCPj4yXT15KTtCPTB8RW4oQSwwfGFyW2w+PjJdLGYscyksYXJbbj4+Ml09QixhcltuKzQ+PjJdPUQsZ24oZCx1LDB8YXJbYj4+Ml0sZiksaT1aPyhBPSgwfChBPTB8YXJbWisxMj4+Ml0pKT09KDB8YXJbWisxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3Y+PjJdKT4+Ml1dKFopOjB8Z2YoMHxhcltBPj4yXSksMHxVZihBLC0xKT8oYXJbZT4+Ml09MCwxKTowKToxO2Rve2lmKHcpe2lmKDB8VWYoQT0oMHwoQT0wfGFyW3crMTI+PjJdKSk9PSgwfGFyW3crMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt3Pj4yXSk+PjJdXSh3KTowfGdmKDB8YXJbQT4+Ml0pLC0xKSl7YXJbcj4+Ml09MCxFPTQ3O2JyZWFrfWlmKGkpYnJlYWs7RT00OTticmVha31FPTQ3fXdoaWxlKDApOzQ3PT0oMHxFKSYmaSYmKEU9NDkpOzQ5PT0oMHxFKSYmKGFyW2Y+PjJdPTJ8YXJbZj4+Ml0pO3JldHVybiBFPTB8YXJbZT4+Ml0sQnUoayksQnUoZCksdXI9aCwwfEV9KEEsYSxvLGksZixuKSx1cj10LDB8bn0sZnVuY3Rpb24oQSxlLHIsaSxmLG4pe3ZhciB0LG8sYSxjLGw7cmV0dXJuIEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLGM9dXI9KHQ9dXIpKzMxJi0zMix1cj11cisxNnwwLG89MTIrY3wwLGE9OCtjfDAsYXJbKGw9NCtjfDApPj4yXT1hcltlPj4yXSxhcltjPj4yXT1hcltyPj4yXSxhclthPj4yXT1hcltsPj4yXSxhcltvPj4yXT1hcltjPj4yXSxuPTB8ZnVuY3Rpb24oQSxlLHIsaSxmLG4pe0F8PTAsZXw9MCxyfD0wLGZ8PTAsbnw9MDt2YXIgdCxvLGEsYyxsLHUsYixzLGQsayxoLHcsdixtPTAsZz0wLFo9MCxwPTAseT0wLEI9MCxFPTAsWD0wLFc9MCxJPTA7Qj11cj0odz11cikrMzEmLTMyLHVyPXVyKzM1MnwwLGM9QisyMDh8MCxsPUIrMjAwfDAsRT1CKzE5NnwwLGg9QisxODR8MCxrPUIrMTcyfDAsdT1CKzE2OHwwLGI9Qis4fDAscz1CKzR8MCxYPShkPUIpKzMzN3wwLEI9QiszMzZ8MCxSbihoLGl8PTAsYyxsLEUpLGFyW2s+PjJdPTAsYXJbNCtrPj4yXT0wLGFyWzgraz4+Ml09MCxBPTA7Zm9yKDszIT0oMHxBKTspYXJbaysoQTw8Mik+PjJdPTAsQT1BKzF8MDthPTgra3wwLEE9KDB8dHJbKG89MTEra3wwKT4+MF0pPDA/KDIxNDc0ODM2NDcmYXJbYT4+Ml0pLTF8MDoxMDtWdShrLEEsMCksQT0oMHx0cltvPj4wXSk8MD8wfGFyW2s+PjJdOmssYXJbdT4+Ml09QSxhcltzPj4yXT1iLGFyW2Q+PjJdPTAsdHJbWD4+MF09MSx0cltCPj4wXT02OSx0PTQra3wwLGc9MHxhcltlPj4yXSxtPWc7QTpmb3IoOzspe1o9bT8wfFVmKGk9KDB8KGk9MHxhclttKzEyPj4yXSkpPT0oMHxhclttKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbT4+Ml0pPj4yXV0obSk6MHxnZigwfGFyW2k+PjJdKSwtMSk/KGFyW2U+PjJdPTAsZz15PTAsMSk6KHk9bSwwKTooZz15PTAsMSksbT0wfGFyW3I+PjJdO2Rve2lmKG0pe2lmKDB8VWYoaT0oMHwoaT0wfGFyW20rMTI+PjJdKSk9PSgwfGFyW20rMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclttPj4yXSk+PjJdXShtKTowfGdmKDB8YXJbaT4+Ml0pLC0xKSl7YXJbcj4+Ml09MCxJPTE5O2JyZWFrfWlmKFopYnJlYWs7YnJlYWsgQX1JPTE5fXdoaWxlKDApO2lmKDE5PT0oMHxJKSl7aWYoST0wLFope209MDticmVha31tPTB9aWYoaT0oaT0wfHRyW28+PjBdKTw8MjQ+PjI0PDA/MHxhclt0Pj4yXToyNTUmaSwoMHxhclt1Pj4yXSk9PShBK2l8MCkmJihWdShrLGk8PDEsMCksQT0oMHx0cltvPj4wXSk8MD8oMjE0NzQ4MzY0NyZhclthPj4yXSktMXwwOjEwLFZ1KGssQSwwKSxBPSgwfHRyW28+PjBdKTwwPzB8YXJbaz4+Ml06ayxhclt1Pj4yXT1BK2kpLDB8Tm4oaT0oMHwoaT0wfGFyWyhaPXkrMTJ8MCk+PjJdKSk9PSgwfGFyWyhwPXkrMTZ8MCk+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt5Pj4yXSk+PjJdXSh5KTowfGdmKDB8YXJbaT4+Ml0pLFgsQixBLHUsMHxhcltsPj4yXSwwfGFyW0U+PjJdLGgsYixzLGQsYykpYnJlYWs7KDB8KGk9MHxhcltaPj4yXSkpIT0oMHxhcltwPj4yXSk/KGFyW1o+PjJdPWkrNCxnZigwfGFyW2k+PjJdKSxtPXkpOihqYlsxMjcmYXJbNDArKDB8YXJbeT4+Ml0pPj4yXV0oeSksbT15KX1FPTB8dHJbMTEraD4+MF0sMCE9KDB8dHJbWD4+MF0pJiYwIT0oMHwoRTw8MjQ+PjI0PDA/MHxhcls0K2g+PjJdOjI1NSZFKSkmJigoVz0wfGFyW3M+PjJdKS1ifDApPDE2MCYmKFg9MHxhcltkPj4yXSxhcltzPj4yXT1XKzQsYXJbVz4+Ml09WCk7dj0rcG4oQSwwfGFyW3U+PjJdLGYpLGdBW24+PjJdPXYsZ24oaCxiLDB8YXJbcz4+Ml0sZiksaT15PyhBPSgwfChBPTB8YXJbeSsxMj4+Ml0pKT09KDB8YXJbeSsxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW2c+PjJdKT4+Ml1dKHkpOjB8Z2YoMHxhcltBPj4yXSksMHxVZihBLC0xKT8oYXJbZT4+Ml09MCwxKTowKToxO2Rve2lmKG0pe2lmKDB8VWYoQT0oMHwoQT0wfGFyW20rMTI+PjJdKSk9PSgwfGFyW20rMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclttPj4yXSk+PjJdXShtKTowfGdmKDB8YXJbQT4+Ml0pLC0xKSl7YXJbcj4+Ml09MCxJPTQ3O2JyZWFrfWlmKGkpYnJlYWs7ST00OTticmVha31JPTQ3fXdoaWxlKDApOzQ3PT0oMHxJKSYmaSYmKEk9NDkpOzQ5PT0oMHxJKSYmKGFyW2Y+PjJdPTJ8YXJbZj4+Ml0pO3JldHVybiBJPTB8YXJbZT4+Ml0sQnUoayksQnUoaCksdXI9dywwfEl9KEEsYSxvLGksZixuKSx1cj10LDB8bn0sZnVuY3Rpb24oQSxlLHIsaSxmLG4pe3ZhciB0LG8sYSxjLGw7cmV0dXJuIEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLGM9dXI9KHQ9dXIpKzMxJi0zMix1cj11cisxNnwwLG89MTIrY3wwLGE9OCtjfDAsYXJbKGw9NCtjfDApPj4yXT1hcltlPj4yXSxhcltjPj4yXT1hcltyPj4yXSxhclthPj4yXT1hcltsPj4yXSxhcltvPj4yXT1hcltjPj4yXSxuPTB8ZnVuY3Rpb24oQSxlLHIsaSxmLG4pe0F8PTAsZXw9MCxyfD0wLGZ8PTAsbnw9MDt2YXIgdCxvLGEsYyxsLHUsYixzLGQsayxoLHcsdixtPTAsZz0wLFo9MCxwPTAseT0wLEI9MCxFPTAsWD0wLFc9MCxJPTA7Qj11cj0odz11cikrMzEmLTMyLHVyPXVyKzM1MnwwLGM9QisyMDh8MCxsPUIrMjAwfDAsRT1CKzE5NnwwLGg9QisxODR8MCxrPUIrMTcyfDAsdT1CKzE2OHwwLGI9Qis4fDAscz1CKzR8MCxYPShkPUIpKzMzN3wwLEI9QiszMzZ8MCxSbihoLGl8PTAsYyxsLEUpLGFyW2s+PjJdPTAsYXJbNCtrPj4yXT0wLGFyWzgraz4+Ml09MCxBPTA7Zm9yKDszIT0oMHxBKTspYXJbaysoQTw8Mik+PjJdPTAsQT1BKzF8MDthPTgra3wwLEE9KDB8dHJbKG89MTEra3wwKT4+MF0pPDA/KDIxNDc0ODM2NDcmYXJbYT4+Ml0pLTF8MDoxMDtWdShrLEEsMCksQT0oMHx0cltvPj4wXSk8MD8wfGFyW2s+PjJdOmssYXJbdT4+Ml09QSxhcltzPj4yXT1iLGFyW2Q+PjJdPTAsdHJbWD4+MF09MSx0cltCPj4wXT02OSx0PTQra3wwLGc9MHxhcltlPj4yXSxtPWc7QTpmb3IoOzspe1o9bT8wfFVmKGk9KDB8KGk9MHxhclttKzEyPj4yXSkpPT0oMHxhclttKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbT4+Ml0pPj4yXV0obSk6MHxnZigwfGFyW2k+PjJdKSwtMSk/KGFyW2U+PjJdPTAsZz15PTAsMSk6KHk9bSwwKTooZz15PTAsMSksbT0wfGFyW3I+PjJdO2Rve2lmKG0pe2lmKDB8VWYoaT0oMHwoaT0wfGFyW20rMTI+PjJdKSk9PSgwfGFyW20rMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclttPj4yXSk+PjJdXShtKTowfGdmKDB8YXJbaT4+Ml0pLC0xKSl7YXJbcj4+Ml09MCxJPTE5O2JyZWFrfWlmKFopYnJlYWs7YnJlYWsgQX1JPTE5fXdoaWxlKDApO2lmKDE5PT0oMHxJKSl7aWYoST0wLFope209MDticmVha31tPTB9aWYoaT0oaT0wfHRyW28+PjBdKTw8MjQ+PjI0PDA/MHxhclt0Pj4yXToyNTUmaSwoMHxhclt1Pj4yXSk9PShBK2l8MCkmJihWdShrLGk8PDEsMCksQT0oMHx0cltvPj4wXSk8MD8oMjE0NzQ4MzY0NyZhclthPj4yXSktMXwwOjEwLFZ1KGssQSwwKSxBPSgwfHRyW28+PjBdKTwwPzB8YXJbaz4+Ml06ayxhclt1Pj4yXT1BK2kpLDB8Tm4oaT0oMHwoaT0wfGFyWyhaPXkrMTJ8MCk+PjJdKSk9PSgwfGFyWyhwPXkrMTZ8MCk+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt5Pj4yXSk+PjJdXSh5KTowfGdmKDB8YXJbaT4+Ml0pLFgsQixBLHUsMHxhcltsPj4yXSwwfGFyW0U+PjJdLGgsYixzLGQsYykpYnJlYWs7KDB8KGk9MHxhcltaPj4yXSkpIT0oMHxhcltwPj4yXSk/KGFyW1o+PjJdPWkrNCxnZigwfGFyW2k+PjJdKSxtPXkpOihqYlsxMjcmYXJbNDArKDB8YXJbeT4+Ml0pPj4yXV0oeSksbT15KX1FPTB8dHJbMTEraD4+MF0sMCE9KDB8dHJbWD4+MF0pJiYwIT0oMHwoRTw8MjQ+PjI0PDA/MHxhcls0K2g+PjJdOjI1NSZFKSkmJigoVz0wfGFyW3M+PjJdKS1ifDApPDE2MCYmKFg9MHxhcltkPj4yXSxhcltzPj4yXT1XKzQsYXJbVz4+Ml09WCk7dj0rWm4oQSwwfGFyW3U+PjJdLGYpLFFbbj4+M109dixnbihoLGIsMHxhcltzPj4yXSxmKSxpPXk/KEE9KDB8KEE9MHxhclt5KzEyPj4yXSkpPT0oMHxhclt5KzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbZz4+Ml0pPj4yXV0oeSk6MHxnZigwfGFyW0E+PjJdKSwwfFVmKEEsLTEpPyhhcltlPj4yXT0wLDEpOjApOjE7ZG97aWYobSl7aWYoMHxVZihBPSgwfChBPTB8YXJbbSsxMj4+Ml0pKT09KDB8YXJbbSsxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW20+PjJdKT4+Ml1dKG0pOjB8Z2YoMHxhcltBPj4yXSksLTEpKXthcltyPj4yXT0wLEk9NDc7YnJlYWt9aWYoaSlicmVhaztJPTQ5O2JyZWFrfUk9NDd9d2hpbGUoMCk7NDc9PSgwfEkpJiZpJiYoST00OSk7NDk9PSgwfEkpJiYoYXJbZj4+Ml09MnxhcltmPj4yXSk7cmV0dXJuIEk9MHxhcltlPj4yXSxCdShrKSxCdShoKSx1cj13LDB8SX0oQSxhLG8saSxmLG4pLHVyPXQsMHxufSxmdW5jdGlvbihBLGUscixpLGYsbil7dmFyIHQsbyxhLGMsbDtyZXR1cm4gQXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsYz11cj0odD11cikrMzEmLTMyLHVyPXVyKzE2fDAsbz0xMitjfDAsYT04K2N8MCxhclsobD00K2N8MCk+PjJdPWFyW2U+PjJdLGFyW2M+PjJdPWFyW3I+PjJdLGFyW2E+PjJdPWFyW2w+PjJdLGFyW28+PjJdPWFyW2M+PjJdLG49MHxmdW5jdGlvbihBLGUscixpLGYsbil7QXw9MCxlfD0wLHJ8PTAsZnw9MCxufD0wO3ZhciB0LG8sYSxjLGwsdSxiLHMsZCxrLGgsdyx2LG09MCxnPTAsWj0wLHA9MCx5PTAsQj0wLEU9MCxYPTAsVz0wLEk9MDtCPXVyPSh3PXVyKSszMSYtMzIsdXI9dXIrMzUyfDAsYz1CKzIwOHwwLGw9QisyMDB8MCxFPUIrMTk2fDAsaD1CKzE4NHwwLGs9QisxNzJ8MCx1PUIrMTY4fDAsYj1CKzh8MCxzPUIrNHwwLFg9KGQ9QikrMzM3fDAsQj1CKzMzNnwwLFJuKGgsaXw9MCxjLGwsRSksYXJbaz4+Ml09MCxhcls0K2s+PjJdPTAsYXJbOCtrPj4yXT0wLEE9MDtmb3IoOzMhPSgwfEEpOylhcltrKyhBPDwyKT4+Ml09MCxBPUErMXwwO2E9OCtrfDAsQT0oMHx0clsobz0xMStrfDApPj4wXSk8MD8oMjE0NzQ4MzY0NyZhclthPj4yXSktMXwwOjEwO1Z1KGssQSwwKSxBPSgwfHRyW28+PjBdKTwwPzB8YXJbaz4+Ml06ayxhclt1Pj4yXT1BLGFyW3M+PjJdPWIsYXJbZD4+Ml09MCx0cltYPj4wXT0xLHRyW0I+PjBdPTY5LHQ9NCtrfDAsZz0wfGFyW2U+PjJdLG09ZztBOmZvcig7Oyl7Wj1tPzB8VWYoaT0oMHwoaT0wfGFyW20rMTI+PjJdKSk9PSgwfGFyW20rMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclttPj4yXSk+PjJdXShtKTowfGdmKDB8YXJbaT4+Ml0pLC0xKT8oYXJbZT4+Ml09MCxnPXk9MCwxKTooeT1tLDApOihnPXk9MCwxKSxtPTB8YXJbcj4+Ml07ZG97aWYobSl7aWYoMHxVZihpPSgwfChpPTB8YXJbbSsxMj4+Ml0pKT09KDB8YXJbbSsxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW20+PjJdKT4+Ml1dKG0pOjB8Z2YoMHxhcltpPj4yXSksLTEpKXthcltyPj4yXT0wLEk9MTk7YnJlYWt9aWYoWilicmVhazticmVhayBBfUk9MTl9d2hpbGUoMCk7aWYoMTk9PSgwfEkpKXtpZihJPTAsWil7bT0wO2JyZWFrfW09MH1pZihpPShpPTB8dHJbbz4+MF0pPDwyND4+MjQ8MD8wfGFyW3Q+PjJdOjI1NSZpLCgwfGFyW3U+PjJdKT09KEEraXwwKSYmKFZ1KGssaTw8MSwwKSxBPSgwfHRyW28+PjBdKTwwPygyMTQ3NDgzNjQ3JmFyW2E+PjJdKS0xfDA6MTAsVnUoayxBLDApLEE9KDB8dHJbbz4+MF0pPDA/MHxhcltrPj4yXTprLGFyW3U+PjJdPUEraSksMHxObihpPSgwfChpPTB8YXJbKFo9eSsxMnwwKT4+Ml0pKT09KDB8YXJbKHA9eSsxNnwwKT4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3k+PjJdKT4+Ml1dKHkpOjB8Z2YoMHxhcltpPj4yXSksWCxCLEEsdSwwfGFyW2w+PjJdLDB8YXJbRT4+Ml0saCxiLHMsZCxjKSlicmVhazsoMHwoaT0wfGFyW1o+PjJdKSkhPSgwfGFyW3A+PjJdKT8oYXJbWj4+Ml09aSs0LGdmKDB8YXJbaT4+Ml0pLG09eSk6KGpiWzEyNyZhcls0MCsoMHxhclt5Pj4yXSk+PjJdXSh5KSxtPXkpfUU9MHx0clsxMStoPj4wXSwwIT0oMHx0cltYPj4wXSkmJjAhPSgwfChFPDwyND4+MjQ8MD8wfGFyWzQraD4+Ml06MjU1JkUpKSYmKChXPTB8YXJbcz4+Ml0pLWJ8MCk8MTYwJiYoWD0wfGFyW2Q+PjJdLGFyW3M+PjJdPVcrNCxhcltXPj4yXT1YKTt2PSttbihBLDB8YXJbdT4+Ml0sZiksUVtuPj4zXT12LGduKGgsYiwwfGFyW3M+PjJdLGYpLGk9eT8oQT0oMHwoQT0wfGFyW3krMTI+PjJdKSk9PSgwfGFyW3krMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltnPj4yXSk+PjJdXSh5KTowfGdmKDB8YXJbQT4+Ml0pLDB8VWYoQSwtMSk/KGFyW2U+PjJdPTAsMSk6MCk6MTtkb3tpZihtKXtpZigwfFVmKEE9KDB8KEE9MHxhclttKzEyPj4yXSkpPT0oMHxhclttKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbT4+Ml0pPj4yXV0obSk6MHxnZigwfGFyW0E+PjJdKSwtMSkpe2FyW3I+PjJdPTAsST00NzticmVha31pZihpKWJyZWFrO0k9NDk7YnJlYWt9ST00N313aGlsZSgwKTs0Nz09KDB8SSkmJmkmJihJPTQ5KTs0OT09KDB8SSkmJihhcltmPj4yXT0yfGFyW2Y+PjJdKTtyZXR1cm4gST0wfGFyW2U+PjJdLEJ1KGspLEJ1KGgpLHVyPXcsMHxJfShBLGEsbyxpLGYsbiksdXI9dCwwfG59LGZ1bmN0aW9uKEEsZSxyLGksZixuKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MDt2YXIgdCxvLGEsYyxsLHUsYixzLGQsaz0wLGg9MCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTA7Zm9yKGc9dXI9KGQ9dXIpKzMxJi0zMix1cj11ciszMjB8MCxaPSh1PWcpKzIwOHwwLGI9ZysxOTJ8MCxzPWcrMTgwfDAscD1nKzE3NnwwLGM9ZysxNnwwLGw9Zys4fDAsZz1nKzR8MCxhcltiPj4yXT0wLGFyWzQrYj4+Ml09MCxBPWFyWzgrYj4+Ml09MDszIT0oMHxBKTspQT1BKzF8KGFyW2IrKEE8PDIpPj4yXT0wKTtmb3IoVGYocyxpKSxBPTB8dW4ocyw1OTI2NCksUGJbNyZhcls0OCsoMHxhcltBPj4yXSk+PjJdXShBLDUzNjQ4LDUzNjc0LFopLGJuKHMpLGFyW3M+PjJdPTAsYXJbNCtzPj4yXT0wLEE9YXJbOCtzPj4yXT0wOzMhPSgwfEEpOylBPUErMXwoYXJbcysoQTw8Mik+PjJdPTApO289OCtzfDAsVnUocyxBPSgwfHRyWyhhPTExK3N8MCk+PjBdKTwwPygyMTQ3NDgzNjQ3JmFyW28+PjJdKS0xfDA6MTAsMCksQT0oMHx0clthPj4wXSk8MD8wfGFyW3M+PjJdOnMsYXJbcD4+Ml09QSxhcltsPj4yXT1jLHQ9NCtzfChhcltnPj4yXT0wKSxrPWg9MHxhcltlPj4yXTtBOmZvcig7Oyl7dz1rPzB8VWYoaT0oMHwoaT0wfGFyW2srMTI+PjJdKSk9PSgwfGFyW2srMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltrPj4yXSk+PjJdXShrKTowfGdmKDB8YXJbaT4+Ml0pLC0xKT8oaD1tPWFyW2U+PjJdPTAsMSk6KG09aywwKTooaD1tPTAsMSksaz0wfGFyW3I+PjJdO2Rve2lmKGspe2lmKDB8VWYoaT0oMHwoaT0wfGFyW2srMTI+PjJdKSk9PSgwfGFyW2srMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltrPj4yXSk+PjJdXShrKTowfGdmKDB8YXJbaT4+Ml0pLC0xKSl7YXJbcj4+Ml09MCx5PTIyO2JyZWFrfWlmKHcpYnJlYWs7YnJlYWsgQX15PTIyfXdoaWxlKDApO2lmKDIyPT0oMHx5KSl7aWYoeT0wLHcpe2s9MDticmVha31rPTB9aWYoaT0oaT0wfHRyW2E+PjBdKTw8MjQ+PjI0PDA/MHxhclt0Pj4yXToyNTUmaSwoMHxhcltwPj4yXSk9PShBK2l8MCkmJihWdShzLGk8PDEsMCksVnUocyxBPSgwfHRyW2E+PjBdKTwwPygyMTQ3NDgzNjQ3JmFyW28+PjJdKS0xfDA6MTAsMCksQT0oMHx0clthPj4wXSk8MD8wfGFyW3M+PjJdOnMsYXJbcD4+Ml09QStpKSwwfEZuKGk9KDB8KGk9MHxhclsodz1tKzEyfDApPj4yXSkpPT0oMHxhclsodj1tKzE2fDApPj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbT4+Ml0pPj4yXV0obSk6MHxnZigwfGFyW2k+PjJdKSwxNixBLHAsZywwLGIsYyxsLFopKWJyZWFrOygwfChpPTB8YXJbdz4+Ml0pKSE9KDB8YXJbdj4+Ml0pPyhhclt3Pj4yXT1pKzQsZ2YoMHxhcltpPj4yXSksaz1tKTooamJbMTI3JmFyWzQwKygwfGFyW20+PjJdKT4+Ml1dKG0pLGs9bSl9VnUocywoMHxhcltwPj4yXSktQXwwLDApLFo9KDB8dHJbYT4+MF0pPDA/MHxhcltzPj4yXTpzLHA9MHxkbigpLGFyW3U+PjJdPW4sMSE9KDB8a24oWixwLDUzNjgxLHUpKSYmKGFyW2Y+PjJdPTQpLGk9bT8wfFVmKEE9KDB8KEE9MHxhclttKzEyPj4yXSkpPT0oMHxhclttKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbaD4+Ml0pPj4yXV0obSk6MHxnZigwfGFyW0E+PjJdKSwtMSk/KGFyW2U+PjJdPTAsMSk6MDoxO2Rve2lmKGspe2lmKDB8VWYoQT0oMHwoQT0wfGFyW2srMTI+PjJdKSk9PSgwfGFyW2srMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltrPj4yXSk+PjJdXShrKTowfGdmKDB8YXJbQT4+Ml0pLC0xKSl7YXJbcj4+Ml09MCx5PTQ5O2JyZWFrfWlmKGkpYnJlYWs7eT01MTticmVha315PTQ5fXdoaWxlKDApO3JldHVybiA0OT09KDB8eSkmJmkmJih5PTUxKSw1MT09KDB8eSkmJihhcltmPj4yXT0yfGFyW2Y+PjJdKSx5PTB8YXJbZT4+Ml0sQnUocyksQnUoYiksdXI9ZCwwfHl9LGZ1bmN0aW9uKEEsZSxyLGksZixuKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MDt2YXIgdCxvLGEsYyxsLHUsYixzPTAsZD0wO3JldHVybiBzPXVyPShBPXVyKSszMSYtMzIsdXI9dXIrOTZ8MCxvPXMrOHwwLGw9KHU9cykrNzF8MCx0PXMrMjh8MCxjPXMrMjR8MCxhPXMrMTZ8MCxzPXMrMjB8MCxhclsoZD11KT4+Ml09Mzcsd3IodSsxfChhcltkKzQ+PjJdPTApLDUzODk5LDEsMHxhcltyKzQ+PjJdKSxkPTB8ZG4oKSxhclsoYj1vKT4+Ml09Zixhcls0K2I+PjJdPW4sbj0wfG5yKGwsZj1sKygwfGZyKGwsMjMsZCx1LG8pKXwwLHIpLFRmKG8sciksdnIobCxuLGYsdCxjLGEsbyksYm4obyksYXJbcz4+Ml09YXJbZT4+Ml0sZj0wfGFyW2M+PjJdLG49MHxhclthPj4yXSxhcltvPj4yXT1hcltzPj4yXSxuPTB8UEEobyx0LGYsbixyLGkpLHVyPUEsMHxufSxmdW5jdGlvbihBLGUscixpLGYsbil7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTA7dmFyIHQsbyxhLGMsbCx1LGIscz0wLGQ9MDtyZXR1cm4gcz11cj0oQT11cikrMzEmLTMyLHVyPXVyKzk2fDAsbz1zKzh8MCxsPSh1PXMpKzcxfDAsdD1zKzI4fDAsYz1zKzI0fDAsYT1zKzE2fDAscz1zKzIwfDAsYXJbKGQ9dSk+PjJdPTM3LHdyKHUrMXwoYXJbZCs0Pj4yXT0wKSw1Mzg5OSwwLDB8YXJbcis0Pj4yXSksZD0wfGRuKCksYXJbKGI9byk+PjJdPWYsYXJbNCtiPj4yXT1uLG49MHxucihsLGY9bCsoMHxmcihsLDIzLGQsdSxvKSl8MCxyKSxUZihvLHIpLHZyKGwsbixmLHQsYyxhLG8pLGJuKG8pLGFyW3M+PjJdPWFyW2U+PjJdLGY9MHxhcltjPj4yXSxuPTB8YXJbYT4+Ml0sYXJbbz4+Ml09YXJbcz4+Ml0sbj0wfFBBKG8sdCxmLG4scixpKSx1cj1BLDB8bn0sZnVuY3Rpb24oQSxlLHIsaSxmLG4pe0F8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wO3ZhciB0LG8sYSxjLGwsdSxiLHM9MCxkPTA7cmV0dXJuIHM9dXI9KEE9dXIpKzMxJi0zMix1cj11cisyMjR8MCxvPXMrOHwwLGw9KHU9cykrMjAwfDAsdD1zKzI4fDAsYz1zKzI0fDAsYT1zKzE2fDAscz1zKzIwfDAsYXJbKGQ9dSk+PjJdPTM3LHdyKHUrMXwoYXJbZCs0Pj4yXT0wKSw1Mzg5OSwxLDB8YXJbcis0Pj4yXSksZD0wfGRuKCksYXJbKGI9byk+PjJdPWYsYXJbNCtiPj4yXT1uLG49MHxucihsLGY9bCsoMHxmcihsLDIzLGQsdSxvKSl8MCxyKSxUZihvLHIpLHByKGwsbixmLHQsYyxhLG8pLGJuKG8pLGFyW3M+PjJdPWFyW2U+PjJdLGY9MHxhcltjPj4yXSxuPTB8YXJbYT4+Ml0sYXJbbz4+Ml09YXJbcz4+Ml0sbj0wfG1yKG8sdCxmLG4scixpKSx1cj1BLDB8bn0sZnVuY3Rpb24oQSxlLHIsaSxmLG4pe0F8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wO3ZhciB0LG8sYSxjLGwsdSxiLHM9MCxkPTA7cmV0dXJuIHM9dXI9KEE9dXIpKzMxJi0zMix1cj11cisyMjR8MCxvPXMrOHwwLGw9KHU9cykrMjAwfDAsdD1zKzI4fDAsYz1zKzI0fDAsYT1zKzE2fDAscz1zKzIwfDAsYXJbKGQ9dSk+PjJdPTM3LHdyKHUrMXwoYXJbZCs0Pj4yXT0wKSw1Mzg5OSwwLDB8YXJbcis0Pj4yXSksZD0wfGRuKCksYXJbKGI9byk+PjJdPWYsYXJbNCtiPj4yXT1uLG49MHxucihsLGY9bCsoMHxmcihsLDIzLGQsdSxvKSl8MCxyKSxUZihvLHIpLHByKGwsbixmLHQsYyxhLG8pLGJuKG8pLGFyW3M+PjJdPWFyW2U+PjJdLGY9MHxhcltjPj4yXSxuPTB8YXJbYT4+Ml0sYXJbbz4+Ml09YXJbcz4+Ml0sbj0wfG1yKG8sdCxmLG4scixpKSx1cj1BLDB8bn0sZnVuY3Rpb24oQSxlLHIsaSxmLG4pe3ZhciB0LG8sYSxjLGw7cmV0dXJuIEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLGM9dXI9KHQ9dXIpKzMxJi0zMix1cj11cisxNnwwLG89MTIrY3wwLGE9OCtjfDAsYXJbKGw9NCtjfDApPj4yXT1hcltlPj4yXSxhcltjPj4yXT1hcltyPj4yXSxhclthPj4yXT1hcltsPj4yXSxhcltvPj4yXT1hcltjPj4yXSxuPTB8RXIoQSxhLG8saSxmLG4sNTQ0MjcsNTQ0MzUpLHVyPXQsMHxufSxmdW5jdGlvbihBLGUscixpLGYsbil7ZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wO3ZhciB0LG8sYSxjLGwsdSxiPTA7cmV0dXJuIGM9dXI9KHQ9dXIpKzMxJi0zMix1cj11cisxNnwwLG89MTIrY3wwLGE9OCtjfDAsbD00K2N8MCxiPTB8amJbMTI3JmFyWzIwKygwfGFyWyhiPShBfD0wKSs4fDApPj4yXSk+PjJdXShiKSxhcltsPj4yXT1hcltlPj4yXSxhcltjPj4yXT1hcltyPj4yXSxyPShlPSh1PShyPTB8dHJbYisxMT4+MF0pPDwyND4+MjQ8MCk/MHxhcltiPj4yXTpiKSsodT8wfGFyW2IrND4+Ml06MjU1JnIpfDAsYXJbYT4+Ml09YXJbbD4+Ml0sYXJbbz4+Ml09YXJbYz4+Ml0sbj0wfEVyKEEsYSxvLGksZixuLGUsciksdXI9dCwwfG59LGZ1bmN0aW9uKEEsZSxyLGksZixuKXt2YXIgdCxvLGE7cmV0dXJuIEF8PTAsZXw9MCxyfD0wLGZ8PTAsbnw9MCxhPXVyPSh0PXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxUZihvPTQrYXwwLGl8PTApLGk9MHx1bihvLDU5MjMyKSxibihvKSxhclthPj4yXT1hcltyPj4yXSxhcltvPj4yXT1hclthPj4yXSx5cihBLG4rMjR8MCxlLG8sZixpKSx1cj10LDB8YXJbZT4+Ml19LGZ1bmN0aW9uKEEsZSxyLGksZixuKXt2YXIgdCxvLGE7cmV0dXJuIEF8PTAsZXw9MCxyfD0wLGZ8PTAsbnw9MCxhPXVyPSh0PXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxUZihvPTQrYXwwLGl8PTApLGk9MHx1bihvLDU5MjMyKSxibihvKSxhclthPj4yXT1hcltyPj4yXSxhcltvPj4yXT1hclthPj4yXSxCcihBLG4rMTZ8MCxlLG8sZixpKSx1cj10LDB8YXJbZT4+Ml19LGZ1bmN0aW9uKEEsZSxyLGksZixuKXt2YXIgdCxvLGE7cmV0dXJuIEF8PTAsZXw9MCxyfD0wLGZ8PTAsbnw9MCxhPXVyPSh0PXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxUZihvPTQrYXwwLGl8PTApLGk9MHx1bihvLDU5MjMyKSxibihvKSxhclthPj4yXT1hcltyPj4yXSxhcltvPj4yXT1hclthPj4yXSxZcihBLG4rMjB8MCxlLG8sZixpKSx1cj10LDB8YXJbZT4+Ml19LGZ1bmN0aW9uKEEsZSxyLGksZixuKXt2YXIgdCxvLGEsYyxsO3JldHVybiBBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCxjPXVyPSh0PXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxvPTEyK2N8MCxhPTgrY3wwLGFyWyhsPTQrY3wwKT4+Ml09YXJbZT4+Ml0sYXJbYz4+Ml09YXJbcj4+Ml0sYXJbYT4+Ml09YXJbbD4+Ml0sYXJbbz4+Ml09YXJbYz4+Ml0sbj0wfFNyKEEsYSxvLGksZixuLDE2NDA0LDE2NDM2KSx1cj10LDB8bn0sZnVuY3Rpb24oQSxlLHIsaSxmLG4pe2V8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MDt2YXIgdCxvLGEsYyxsLHUsYj0wO3JldHVybiBjPXVyPSh0PXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxvPTEyK2N8MCxhPTgrY3wwLGw9NCtjfDAsYj0wfGpiWzEyNyZhclsyMCsoMHxhclsoYj0oQXw9MCkrOHwwKT4+Ml0pPj4yXV0oYiksYXJbbD4+Ml09YXJbZT4+Ml0sYXJbYz4+Ml09YXJbcj4+Ml0scj0oZT0odT0ocj0wfHRyW2IrOCszPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW2I+PjJdOmIpKygodT8wfGFyW2IrND4+Ml06MjU1JnIpPDwyKXwwLGFyW2E+PjJdPWFyW2w+PjJdLGFyW28+PjJdPWFyW2M+PjJdLG49MHxTcihBLGEsbyxpLGYsbixlLHIpLHVyPXQsMHxufSxmdW5jdGlvbihBLGUscixpLGYsbil7dmFyIHQsbyxhO3JldHVybiBBfD0wLGV8PTAscnw9MCxmfD0wLG58PTAsYT11cj0odD11cikrMzEmLTMyLHVyPXVyKzE2fDAsVGYobz00K2F8MCxpfD0wKSxpPTB8dW4obyw1OTI2NCksYm4obyksYXJbYT4+Ml09YXJbcj4+Ml0sYXJbbz4+Ml09YXJbYT4+Ml0sVHIoQSxuKzI0fDAsZSxvLGYsaSksdXI9dCwwfGFyW2U+PjJdfSxmdW5jdGlvbihBLGUscixpLGYsbil7dmFyIHQsbyxhO3JldHVybiBBfD0wLGV8PTAscnw9MCxmfD0wLG58PTAsYT11cj0odD11cikrMzEmLTMyLHVyPXVyKzE2fDAsVGYobz00K2F8MCxpfD0wKSxpPTB8dW4obyw1OTI2NCksYm4obyksYXJbYT4+Ml09YXJbcj4+Ml0sYXJbbz4+Ml09YXJbYT4+Ml0sVXIoQSxuKzE2fDAsZSxvLGYsaSksdXI9dCwwfGFyW2U+PjJdfSxmdW5jdGlvbihBLGUscixpLGYsbil7dmFyIHQsbyxhO3JldHVybiBBfD0wLGV8PTAscnw9MCxmfD0wLG58PTAsYT11cj0odD11cikrMzEmLTMyLHVyPXVyKzE2fDAsVGYobz00K2F8MCxpfD0wKSxpPTB8dW4obyw1OTI2NCksYm4obyksYXJbYT4+Ml09YXJbcj4+Ml0sYXJbbz4+Ml09YXJbYT4+Ml0sQWkoQSxuKzIwfDAsZSxvLGYsaSksdXI9dCwwfGFyW2U+PjJdfSxmdW5jdGlvbihBLGUscixpLGYsbil7QXw9MCxlfD0wLHJ8PTAsZnw9MCxufD0wO3ZhciB0LG8sYSxjLGwsdSxiLHMsZCxrLGgsdyx2LG0sZyxaLHA9MCx5PTAsQj0wLEU9MCxYPTAsVz0wO2ZvcihiPXVyPShaPXVyKSszMSYtMzIsdXI9dXIrMTc2fDAsYz01NitifDAsZD0xNjQrYnwwLGs9MTYxK2J8MCxoPTE2MCtifDAsdz00MCtifDAsdj0yOCtifDAsbT0xNitifDAsdD0xMitifDAsYT02MCtifDAsbD04K2J8MCx1PTQrYnwwLFRmKGc9NTIrYnwwLGl8PTApLHM9MHx1bihnLDU5MjMyKSx5PW4rNHwwLEU9MHwoKEE9KEU9MHx0clsocD1uKzExfDApPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW3k+PjJdOjI1NSZFKT8oRT0wfHRyWyhBPzB8YXJbbj4+Ml06bik+PjBdKTw8MjQ+PjI0PT0oMHxIYlszMSZhclsyOCsoMHxhcltzPj4yXSk+PjJdXShzLDQ1KSk8PDI0Pj4yNDowLGFyW3c+PjJdPTAsYXJbNCt3Pj4yXT0wLEE9YXJbOCt3Pj4yXT0wOzMhPSgwfEEpOylBPUErMXwoYXJbdysoQTw8Mik+PjJdPTApO2Zvcihhclt2Pj4yXT0wLGFyWzQrdj4+Ml09MCxBPWFyWzgrdj4+Ml09MDszIT0oMHxBKTspQT1BKzF8KGFyW3YrKEE8PDIpPj4yXT0wKTtmb3IoYXJbbT4+Ml09MCxhcls0K20+PjJdPTAsQT1hcls4K20+PjJdPTA7MyE9KDB8QSk7KUE9QSsxfChhclttKyhBPDwyKT4+Ml09MCk7cmV0dXJuIGtpKHIsRSxnLGQsayxoLHcsdixtLHQpLEI9KG89KEI9MHx0cltwPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW3k+PjJdOjI1NSZCLDEwMDwoQT0ocj0oMHwoeT0wfGFyW3Q+PjJdKSk8KDB8Qik/KHA9MHx0clsxMSttPj4wXSxyPTB8dHJbMTErdj4+MF0sQT0xLHA9KHA8PDI0Pj4yNDwwPzB8YXJbNCttPj4yXToyNTUmcCkrKEIteTw8MSl8MCxyPDwyND4+MjQ8MD8wfGFyWzQrdj4+Ml06MjU1JnIpOihyPTB8dHJbMTErbT4+MF0sQT0yLHA9KHA9MHx0clsxMSt2Pj4wXSk8PDI0Pj4yNDwwPzB8YXJbNCt2Pj4yXToyNTUmcCxyPDwyND4+MjQ8MD8wfGFyWzQrbT4+Ml06MjU1JnIpKSt5K3ArQXwwKT4+PjA/KEE9MHx5YyhBKSk/Vz1YPUE6Z3UoKTooWD1hLFc9MCksbj1vPzB8YXJbbj4+Ml06bixoaShYLGwsdSwwfGFyW2krND4+Ml0sbixuK0J8MCxzLEUsZCwwfHRyW2s+PjBdLDB8dHJbaD4+MF0sdyx2LG0seSksYXJbYj4+Ml09YXJbZT4+Ml0sbj0wfGFyW2w+PjJdLEE9MHxhclt1Pj4yXSxhcltjPj4yXT1hcltiPj4yXSxBPTB8UEEoYyxYLG4sQSxpLGYpLDB8VyYmQmMoVyksQnUobSksQnUodiksQnUodyksYm4oZyksdXI9WiwwfEF9LGZ1bmN0aW9uKEEsZSxyLGksZixuKXtBfD0wLGV8PTAscnw9MCxmfD0wLG58PTA7dmFyIHQsbyxhLGMsbCx1LGIscyxkLGssaCx3LHYsbSxnLFoscD0wLHk9MCxCPTAsRT0wLFg9MCxXPTA7Zm9yKGI9dXI9KFo9dXIpKzMxJi0zMix1cj11cis0ODB8MCxjPTQ2OCtifDAsZD00NzIrYnwwLGs9NDYwK2J8MCxoPTQ1NitifDAsdz00NDQrYnwwLHY9NDMyK2J8MCxtPTQyMCtifDAsdD00MTYrYnwwLGE9MTYrYnwwLGw9OCtifDAsdT00K2J8MCxUZihnPTQ2NCtifDAsaXw9MCkscz0wfHVuKGcsNTkyNjQpLHk9bis0fDAsRT0wfCgoQT0oRT0wfHRyWyhwPW4rOCszfDApPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW3k+PjJdOjI1NSZFKT8oMHwoRT0wfGFyWyhBPzB8YXJbbj4+Ml06bik+PjJdKSk9PSgwfEhiWzMxJmFyWzQ0KygwfGFyW3M+PjJdKT4+Ml1dKHMsNDUpKTowLGFyW3c+PjJdPTAsYXJbNCt3Pj4yXT0wLEE9YXJbOCt3Pj4yXT0wOzMhPSgwfEEpOylBPUErMXwoYXJbdysoQTw8Mik+PjJdPTApO2Zvcihhclt2Pj4yXT0wLGFyWzQrdj4+Ml09MCxBPWFyWzgrdj4+Ml09MDszIT0oMHxBKTspQT1BKzF8KGFyW3YrKEE8PDIpPj4yXT0wKTtmb3IoYXJbbT4+Ml09MCxhcls0K20+PjJdPTAsQT1hcls4K20+PjJdPTA7MyE9KDB8QSk7KUE9QSsxfChhclttKyhBPDwyKT4+Ml09MCk7cmV0dXJuIF9sKHIsRSxnLGQsayxoLHcsdixtLHQpLEI9KG89KEI9MHx0cltwPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW3k+PjJdOjI1NSZCLDEwMDwoQT0ocj0oMHwoeT0wfGFyW3Q+PjJdKSk8KDB8Qik/KHA9MHx0cls4K20rMz4+MF0scj0wfHRyWzgrdiszPj4wXSxBPTEscD0ocDw8MjQ+PjI0PDA/MHxhcls0K20+PjJdOjI1NSZwKSsoQi15PDwxKXwwLHI8PDI0Pj4yNDwwPzB8YXJbNCt2Pj4yXToyNTUmcik6KHI9MHx0cls4K20rMz4+MF0sQT0yLHA9KHA9MHx0cls4K3YrMz4+MF0pPDwyND4+MjQ8MD8wfGFyWzQrdj4+Ml06MjU1JnAscjw8MjQ+PjI0PDA/MHxhcls0K20+PjJdOjI1NSZyKSkreStwK0F8MCk+Pj4wPyhBPTB8eWMoQTw8MikpP1c9WD1BOmd1KCk6KFg9YSxXPTApLG49bz8wfGFyW24+PjJdOm4sWWwoWCxsLHUsMHxhcltpKzQ+PjJdLG4sbisoQjw8Mil8MCxzLEUsZCwwfGFyW2s+PjJdLDB8YXJbaD4+Ml0sdyx2LG0seSksYXJbYj4+Ml09YXJbZT4+Ml0sbj0wfGFyW2w+PjJdLEE9MHxhclt1Pj4yXSxhcltjPj4yXT1hcltiPj4yXSxBPTB8bXIoYyxYLG4sQSxpLGYpLDB8VyYmQmMoVyksUXUobSksUXUodiksQnUodyksYm4oZyksdXI9WiwwfEF9LFZiLFZiLFZiLFZiLFZiLFZiLFZiLFZiLFZiLFZiLFZiLFZiLFZiLFZiLFZiLFZiLFZiLFZiLFZiLFZiLFZiLFZiLFZiLFZiLFZiXSxBcz1bRmIsZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCl7dmFyIG87Zm9yKEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsaT11cj0obz11cikrMzEmLTMyLHVyPXVyKzExMnwwLHI9aSs0fDAsYXJbaT4+Ml09cisxMDAsZmkoQSs4fDAscixpLGYsbix0KSx0PTB8YXJbaT4+Ml0sbj1yLHI9MHxhcltlPj4yXTsoMHxuKSE9KDB8dCk7KWk9MHx0cltuPj4wXSxyPSFyfHwoZT0wfE1mKGk9KDB8KGY9MHxhclsoQT1yKzI0fDApPj4yXSkpPT0oMHxhcltyKzI4Pj4yXSk/KGU9MHxhcls1MisoMHxhcltyPj4yXSk+PjJdLGk9MHxoZihpKSwwfEhiWzMxJmVdKHIsaSkpOihhcltBPj4yXT1mKzEsMHxoZih0cltmPj4wXT1pKSksLTEpKT8wOnIsbj1uKzF8MDtyZXR1cm4gdXI9bywwfHJ9LGZ1bmN0aW9uKEEsZSxyLGksZixuLHQpe3ZhciBvO2ZvcihBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCx0fD0wLGk9dXI9KG89dXIpKzMxJi0zMix1cj11cis0MTZ8MCxyPWkrOHwwLGFyW2k+PjJdPXIrNDAwLGZ1bmN0aW9uKEEsZSxyLGksZixuKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MDt2YXIgdCxvLGEsYyxsPTA7bD11cj0odD11cikrMzEmLTMyLHVyPXVyKzEyOHwwLGE9bCsxNnwwLGM9bCsxMnwwLGw9KG89bCkrOHwwLGFyW2M+PjJdPTEwMCthLGZpKEEsYSxjLGksZixuKSxhclsoaT1vKT4+Ml09MCxhcltpKzQ+PjJdPTAsYXJbbD4+Ml09YSxpPTB8ZnVuY3Rpb24oQSxlKXtyZXR1cm4oZXw9MCktKEF8PTApPj4yfDB9KGUsMHxhcltyPj4yXSksQT0wfHJmKDB8YXJbQT4+Ml0pLGk9MHxYaShlLGwsaSxvKSwwfEEmJnJmKEEpO3tpZigtMSE9KDB8aSkpcmV0dXJuIGFyW3I+PjJdPWUrKGk8PDIpLHVyPXQ7dGkoKX19KEErOHwwLHIsaSxmLG4sdCksdD0wfGFyW2k+PjJdLG49cixyPTB8YXJbZT4+Ml07KDB8bikhPSgwfHQpOylpPTB8YXJbbj4+Ml0scj0hcnx8KGU9MHxVZihpPSgwfChmPTB8YXJbKEE9cisyNHwwKT4+Ml0pKT09KDB8YXJbcisyOD4+Ml0pPyhlPTB8YXJbNTIrKDB8YXJbcj4+Ml0pPj4yXSxpPTB8Z2YoaSksMHxIYlszMSZlXShyLGkpKTooYXJbQT4+Ml09Zis0LDB8Z2YoYXJbZj4+Ml09aSkpLC0xKSk/MDpyLG49bis0fDA7cmV0dXJuIHVyPW8sMHxyfSxmdW5jdGlvbihBLGUscixpLGYsbix0KXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCx0fD0wO3ZhciBvLGEsYyxsLHUsYixzLGQsaz0wLGg9MCx3PTAsdj0wLG09MCxnPTAsWj0wO2lmKG09dXI9KHM9dXIpKzMxJi0zMix1cj11cisyNDB8MCxvPW0rMjR8MCx2PShjPW0pKzE0MHwwLGI9bSsxNnwwLGE9bSsxMnwwLGw9bSs4fDAsaz1tKzEzNnwwLGQ9bSs0fDAsbT1tKzM2fDAsYXJbYj4+Ml09dixhclsodT00K2J8MCk+PjJdPTQ0NCxUZihsLGYpLEE9MHx1bihsLDU5MjMyKSx0cltrPj4wXT0wLGFyW2Q+PjJdPWFyW3I+PjJdLHc9MHxhcltmKzQ+PjJdLGFyW28+PjJdPWFyW2Q+PjJdLDB8YWkoZSxvLGksbCx3LG4sayxBLGIsYSx2KzEwMHwwKSl7Zm9yKFBiWzcmYXJbMzIrKDB8YXJbQT4+Ml0pPj4yXV0oQSw1NDk1Miw1NDk2MixvKSw5ODwoMHwoQT0odz0wfGFyW2E+PjJdKS0oaT0wfGFyW2I+PjJdKXwwKSk/KEE9MHx5YyhBKzJ8MCkpP2c9aD1BOmd1KCk6KGg9bSxnPTApLEE9MHx0cltrPj4wXT8odHJbaD4+MF09NDUsaCsxfDApOmgsaD0xMCtvfDAsdj1vLGs9aSxmPUEsQT13OyEoQT4+PjA8PWs+Pj4wKTspe2ZvcihpPTB8dHJbaz4+MF0sQT1vOzspe2lmKCgwfEEpPT0oMHxoKSl7QT1oO2JyZWFrfWlmKCgwfHRyW0E+PjBdKT09aTw8MjQ+PjI0KWJyZWFrO0E9QSsxfDB9dHJbZj4+MF09MHx0cltBLXYrNTQ5NTI+PjBdLGs9aysxfDAsZj1mKzF8MCxBPTB8YXJbYT4+Ml19dHJbZj4+MF09MCxhcltjPj4yXT10LDEhPSgwfGppKG0sNTQ5NjMsYykpJiZ0aSgpLDB8ZyYmQmMoZyl9QT0wfGFyW2U+PjJdO2Rve2lmKEEpe2lmKDB8TWYoQT0oMHwoaT0wfGFyW0ErMTI+PjJdKSk9PSgwfGFyW0ErMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltBPj4yXSk+PjJdXShBKTowfGhmKDB8dHJbaT4+MF0pLC0xKSl7YXJbZT4+Ml09MCxmPTE7YnJlYWt9Zj0wPT0oMHxhcltlPj4yXSk7YnJlYWt9Zj0xfXdoaWxlKDApO0E9MHxhcltyPj4yXTtkb3tpZihBKXtpZigwfE1mKEE9KDB8KGk9MHxhcltBKzEyPj4yXSkpPT0oMHxhcltBKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbQT4+Ml0pPj4yXV0oQSk6MHxoZigwfHRyW2k+PjBdKSwtMSkpe2FyW3I+PjJdPTAsWj0zMjticmVha31pZihmKWJyZWFrO1o9MzQ7YnJlYWt9Wj0zMn13aGlsZSgwKTtyZXR1cm4gMzI9PSgwfFopJiZmJiYoWj0zNCksMzQ9PSgwfFopJiYoYXJbbj4+Ml09MnxhcltuPj4yXSksaT0wfGFyW2U+PjJdLGJuKGwpLEE9MHxhcltiPj4yXSwoYXJbYj4+Ml09MCl8QSYmaXNbNTExJmFyW3U+PjJdXShBKSx1cj1zLDB8aX0sZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCl7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsdHw9MDt2YXIgbyxhLGMsbCx1LGIscyxkPTAsaz0wLGg9MCx3PTA7aWYoaD11cj0ocz11cikrMzEmLTMyLHVyPXVyKzE0NHwwLGQ9aCsyNHwwLEE9aCszMnwwLGI9aCsxNnwwLGE9aCs4fDAsaz0obD1oKSsyOHwwLGg9aCs0fDAsYXJbYj4+Ml09QSxhclsodT00K2J8MCk+PjJdPTQ0NCxUZihsLGYpLG89MHx1bihsLDU5MjMyKSxjPSh0cltrPj4wXT0wKXxhcltyPj4yXSxhcltoPj4yXT1jLGY9MHxhcltmKzQ+PjJdLGFyW2Q+PjJdPWFyW2g+PjJdLGg9YywwfGFpKGUsZCxpLGwsZixuLGssbyxiLGEsQSsxMDB8MCkpe2ZvcigoMHx0clsoQT10KzExfDApPj4wXSk8MD8oaT0wfGFyW3Q+PjJdLHRyW2Q+PjBdPTAsUWYoaSxkKSxhclt0KzQ+PjJdPTApOih0cltkPj4wXT0wLFFmKHQsZCksdHJbQT4+MF09MCksMHx0cltrPj4wXSYmX3UodCwwfEhiWzMxJmFyWzI4KygwfGFyW28+PjJdKT4+Ml1dKG8sNDUpKSxrPTB8SGJbMzEmYXJbMjgrKDB8YXJbbz4+Ml0pPj4yXV0obyw0OCksZD0oZj0wfGFyW2E+PjJdKSstMXwwLEE9MHxhcltiPj4yXTshKGQ+Pj4wPD1BPj4+MCkmJigwfHRyW0E+PjBdKT09azw8MjQ+PjI0OylBPUErMXwwOyFmdW5jdGlvbihBLGUscil7cnw9MDt2YXIgaSxmLG4sdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MDtjPXVyPShuPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxpPWV8PTAscz1jKzEyfDAsbz0wfHRyWyhiPTExKyhBfD0wKXwwKT4+MF0sbD0odD1vPDwyND4+MjQ8MCk/KHU9MHxhcltBKzQ+PjJdLCgyMTQ3NDgzNjQ3JmFyW0ErOD4+Ml0pLTF8MCk6KHU9MjU1Jm8sMTApO2Y9ci1pfDA7ZG97aWYoMHxmKXtpZih0PyhvPTB8YXJbQT4+Ml0sYT1vLHQ9MHxhcltBKzQ+PjJdKToodD0yNTUmbyxvPWE9QSksMHxjaShlLG8sYSt0fDApKXtmb3IoYXJbYz4+Ml09MCxhcltjKzQ+PjJdPTAsYXJbYys4Pj4yXT0wLDQyOTQ5NjcyNzk8Zj4+PjAmJnB1KCksZj4+PjA8MTE/KHRyW2MrMTE+PjBdPWYsbz1jKToobz0wfGh1KGI9MTYrZiYtMTYpLGFyW2M+PjJdPW8sYXJbYys4Pj4yXT0tMjE0NzQ4MzY0OHxiLGFyW2MrND4+Ml09ZiksdD1vOygwfGUpIT0oMHxyKTspUWYodCxlKSxlPWUrMXwwLHQ9dCsxfDA7dHJbcz4+MF09MCxRZihvK2Z8MCxzKSxzPTB8dHJbYysxMT4+MF0sTnUoQSwocj1zPDwyND4+MjQ8MCk/MHxhcltjPj4yXTpjLHI/MHxhcltjKzQ+PjJdOjI1NSZzKSxCdShjKTticmVha31mb3IoYz11K2Z8MCwobC11fDApPj4+MDxmPj4+MCYmUnUoQSxsLGMtbHwwLHUsdSwwLDApLGE9KDB8dHJbYj4+MF0pPDA/MHxhcltBPj4yXTpBLG89cisodS1pKXwwLHQ9YSt1fDA7KDB8ZSkhPSgwfHIpOylRZih0LGUpLHQ9dCsxfDAsZT1lKzF8MDtpZih0cltzPj4wXT0wLFFmKGErb3wwLHMpLCgwfHRyW2I+PjBdKTwwKXthcltBKzQ+PjJdPWM7YnJlYWt9dHJbYj4+MF09YzticmVha319d2hpbGUoMCk7dXI9bn0odCxBLGYpfUE9MHxhcltlPj4yXTtkb3tpZihBKXtpZigwfE1mKEE9KDB8KGY9MHxhcltBKzEyPj4yXSkpPT0oMHxhcltBKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbQT4+Ml0pPj4yXV0oQSk6MHxoZigwfHRyW2Y+PjBdKSwtMSkpe2FyW2U+PjJdPTAsZj0xO2JyZWFrfWY9MD09KDB8YXJbZT4+Ml0pO2JyZWFrfWY9MX13aGlsZSgwKTtkb3tpZihjKXtpZigwfE1mKEE9KDB8KEE9MHxhcltoKzEyPj4yXSkpPT0oMHxhcltoKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbYz4+Ml0pPj4yXV0oaCk6MHxoZigwfHRyW0E+PjBdKSwtMSkpe2FyW3I+PjJdPTAsdz0yNTticmVha31pZihmKWJyZWFrO3c9Mjc7YnJlYWt9dz0yNX13aGlsZSgwKTtyZXR1cm4gMjU9PSgwfHcpJiZmJiYodz0yNyksMjc9PSgwfHcpJiYoYXJbbj4+Ml09MnxhcltuPj4yXSksZj0wfGFyW2U+PjJdLGJuKGwpLEE9MHxhcltiPj4yXSwoYXJbYj4+Ml09MCl8QSYmaXNbNTExJmFyW3U+PjJdXShBKSx1cj1zLDB8Zn0sZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCl7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsdHw9MDt2YXIgbyxhLGMsbCx1LGIscyxkLGs9MCxoPTAsdz0wLHY9MCxtPTAsZz0wLFo9MDtpZihtPXVyPShzPXVyKSszMSYtMzIsdXI9dXIrNTc2fDAsbz1tKzQyNHwwLHY9KGM9bSkrMjR8MCxiPW0rMTZ8MCxhPW0rMTJ8MCxsPW0rOHwwLGs9bSs1NjR8MCxkPW0rNHwwLG09bSs0NjR8MCxhcltiPj4yXT12LGFyWyh1PTQrYnwwKT4+Ml09NDQ0LFRmKGwsZiksQT0wfHVuKGwsNTkyNjQpLHRyW2s+PjBdPTAsYXJbZD4+Ml09YXJbcj4+Ml0sdz0wfGFyW2YrND4+Ml0sYXJbbz4+Ml09YXJbZD4+Ml0sMHxiaShlLG8saSxsLHcsbixrLEEsYixhLHYrNDAwfDApKXtmb3IoUGJbNyZhcls0OCsoMHxhcltBPj4yXSk+PjJdXShBLDU1MDYyLDU1MDcyLG8pLDM5MjwoMHwoQT0odz0wfGFyW2E+PjJdKS0oaT0wfGFyW2I+PjJdKXwwKSk/KEE9MHx5YygyKyhBPj4+Mil8MCkpP2c9aD1BOmd1KCk6KGg9bSxnPTApLEE9MHx0cltrPj4wXT8odHJbaD4+MF09NDUsaCsxfDApOmgsaD00MCtvfDAsdj1vLGs9aSxmPUEsQT13OyEoQT4+PjA8PWs+Pj4wKTspe2ZvcihpPTB8YXJbaz4+Ml0sQT1vOzspe2lmKCgwfEEpPT0oMHxoKSl7QT1oO2JyZWFrfWlmKCgwfGFyW0E+PjJdKT09KDB8aSkpYnJlYWs7QT1BKzR8MH10cltmPj4wXT0wfHRyWzU1MDYyKyhBLXY+PjIpPj4wXSxrPWsrNHwwLGY9ZisxfDAsQT0wfGFyW2E+PjJdfXRyW2Y+PjBdPTAsYXJbYz4+Ml09dCwxIT0oMHxqaShtLDU0OTYzLGMpKSYmdGkoKSwwfGcmJkJjKGcpfUE9MHxhcltlPj4yXTtkb3tpZihBKXtpZigwfFVmKEE9KDB8KGk9MHxhcltBKzEyPj4yXSkpPT0oMHxhcltBKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbQT4+Ml0pPj4yXV0oQSk6MHxnZigwfGFyW2k+PjJdKSwtMSkpe2FyW2U+PjJdPTAsZj0xO2JyZWFrfWY9MD09KDB8YXJbZT4+Ml0pO2JyZWFrfWY9MX13aGlsZSgwKTtBPTB8YXJbcj4+Ml07ZG97aWYoQSl7aWYoMHxVZihBPSgwfChpPTB8YXJbQSsxMj4+Ml0pKT09KDB8YXJbQSsxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW0E+PjJdKT4+Ml1dKEEpOjB8Z2YoMHxhcltpPj4yXSksLTEpKXthcltyPj4yXT0wLFo9MzI7YnJlYWt9aWYoZilicmVhaztaPTM0O2JyZWFrfVo9MzJ9d2hpbGUoMCk7cmV0dXJuIDMyPT0oMHxaKSYmZiYmKFo9MzQpLDM0PT0oMHxaKSYmKGFyW24+PjJdPTJ8YXJbbj4+Ml0pLGk9MHxhcltlPj4yXSxibihsKSxBPTB8YXJbYj4+Ml0sKGFyW2I+PjJdPTApfEEmJmlzWzUxMSZhclt1Pj4yXV0oQSksdXI9cywwfGl9LGZ1bmN0aW9uKEEsZSxyLGksZixuLHQpe0F8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTA7dmFyIG8sYSxjLGwsdSxiLHMsZD0wLGs9MCxoPTAsdz0wO2lmKGg9dXI9KHM9dXIpKzMxJi0zMix1cj11cis0MzJ8MCxkPWgrNDI0fDAsQT1oKzI0fDAsYj1oKzE2fDAsYT1oKzh8MCxrPShsPWgpKzQyOHwwLGg9aCs0fDAsYXJbYj4+Ml09QSxhclsodT00K2J8MCk+PjJdPTQ0NCxUZihsLGYpLG89MHx1bihsLDU5MjY0KSxjPSh0cltrPj4wXT0wKXxhcltyPj4yXSxhcltoPj4yXT1jLGY9MHxhcltmKzQ+PjJdLGFyW2Q+PjJdPWFyW2g+PjJdLGg9YywwfGJpKGUsZCxpLGwsZixuLGssbyxiLGEsQSs0MDB8MCkpe2ZvcigoMHx0clsoQT10KzgrM3wwKT4+MF0pPDA/KGk9MHxhclt0Pj4yXSxhcltkPj4yXT0wLGxuKGksZCksYXJbdCs0Pj4yXT0wKTooYXJbZD4+Ml09MCxsbih0LGQpLHRyW0E+PjBdPTApLDB8dHJbaz4+MF0mJk91KHQsMHxIYlszMSZhcls0NCsoMHxhcltvPj4yXSk+PjJdXShvLDQ1KSksaz0wfEhiWzMxJmFyWzQ0KygwfGFyW28+PjJdKT4+Ml1dKG8sNDgpLGQ9KGY9MHxhclthPj4yXSkrLTR8MCxBPTB8YXJbYj4+Ml07IShkPj4+MDw9QT4+PjApJiYoMHxhcltBPj4yXSk9PSgwfGspOylBPUErNHwwOyFmdW5jdGlvbihBLGUscil7ZXw9MCxyfD0wO3ZhciBpLGYsbix0LG8sYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTAsZD0wLGs9MDtuPXVyPShvPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxrPTEyK258MCxpPTB8dHJbKHQ9MysoYT04KyhBfD0wKXwwKXwwKT4+MF0sdT0oYz1pPDwyND4+MjQ8MCk/KGQ9MHxhcltBKzQ+PjJdLCgyMTQ3NDgzNjQ3JmFyW2E+PjJdKS0xfDApOihkPTI1NSZpLDEpO2Y9ci1lPj4yO2Rve2lmKDB8Zil7aWYoYz8oYz0wfGFyW0E+PjJdLGw9YyxhPTB8YXJbQSs0Pj4yXSk6KGE9MjU1JmksYz1sPUEpLDB8c2koZSxjLGwrKGE8PDIpfDApKXthcltuPj4yXT0wLGFyWzQrbj4+Ml09MCxhcls4K24+PjJdPTAsMTA3Mzc0MTgwNzxmPj4+MCYmcHUoKTtkb3tpZigyPD1mPj4+MCl7aWYoISgxMDczNzQxODIzPChhPTQrZiYtNCk+Pj4wKSl7cz0wfGh1KGE8PDIpLGFyW24+PjJdPXMsYXJbOCtuPj4yXT0tMjE0NzQ4MzY0OHxhLGFyWzQrbj4+Ml09ZixiPWU7YnJlYWt9bEEoKX1lbHNlIHRyWzgrbiszPj4wXT1mLGI9ZSxzPW59d2hpbGUoMCk7Zm9yKDsoMHxiKSE9KDB8cik7KWxuKHMsYiksYj1iKzR8MCxzPXMrNHwwO2FyW2s+PjJdPTAsbG4ocyxrKSxrPTB8dHJbOCtuKzM+PjBdLFN1KEEsKHI9azw8MjQ+PjI0PDApPzB8YXJbbj4+Ml06bixyPzB8YXJbNCtuPj4yXToyNTUmayksUXUobik7YnJlYWt9Zm9yKGM9ZCtmfDAsKHUtZHwwKT4+PjA8Zj4+PjAmJlV1KEEsdSxjLXV8MCxkLGQsMCwwKSxhPShhPSgwfHRyW3Q+PjBdKTwwPzB8YXJbQT4+Ml06QSkrKGQ8PDIpfDA7KDB8ZSkhPSgwfHIpOylsbihhLGUpLGE9YSs0fDAsZT1lKzR8MDtpZihhcltrPj4yXT0wLGxuKGEsayksKDB8dHJbdD4+MF0pPDApe2FyW0ErND4+Ml09YzticmVha310clt0Pj4wXT1jO2JyZWFrfX13aGlsZSgwKTt1cj1vfSh0LEEsZil9QT0wfGFyW2U+PjJdO2Rve2lmKEEpe2lmKDB8VWYoQT0oMHwoZj0wfGFyW0ErMTI+PjJdKSk9PSgwfGFyW0ErMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltBPj4yXSk+PjJdXShBKTowfGdmKDB8YXJbZj4+Ml0pLC0xKSl7YXJbZT4+Ml09MCxmPTE7YnJlYWt9Zj0wPT0oMHxhcltlPj4yXSk7YnJlYWt9Zj0xfXdoaWxlKDApO2Rve2lmKGMpe2lmKDB8VWYoQT0oMHwoQT0wfGFyW2grMTI+PjJdKSk9PSgwfGFyW2grMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltjPj4yXSk+PjJdXShoKTowfGdmKDB8YXJbQT4+Ml0pLC0xKSl7YXJbcj4+Ml09MCx3PTI1O2JyZWFrfWlmKGYpYnJlYWs7dz0yNzticmVha313PTI1fXdoaWxlKDApO3JldHVybiAyNT09KDB8dykmJmYmJih3PTI3KSwyNz09KDB8dykmJihhcltuPj4yXT0yfGFyW24+PjJdKSxmPTB8YXJbZT4+Ml0sYm4obCksQT0wfGFyW2I+PjJdLChhcltiPj4yXT0wKXxBJiZpc1s1MTEmYXJbdT4+Ml1dKEEpLHVyPXMsMHxmfSxGYl0sZXM9W1JiLGZ1bmN0aW9uKEEsZSxyLGksZixuLHQsbyl7QXw9MCxlfD0wLHJ8PTAsaXw9MCxufD0wLHR8PTAsb3w9MDt2YXIgYSxjLGwsdSxiLHMsZCxrLGgsdyx2LG0sZyxaLHAseSxCLEUsWCxXLEksQyxHLFYsRixSLE4sXyxZLFEsRCxKLE0sVCxVLFMsTyx6LGo9MCxIPTA7c3dpdGNoKFE9dXI9KHo9dXIpKzMxJi0zMix1cj11cisxNDR8MCxhPTEyOCtRfDAsbz0xMTIrUXwwLE89MTI0K1F8MCxqPTEyMCtRfDAsYz0xMTYrUXwwLGw9MTA4K1F8MCx1PTEwNCtRfDAsYj0xMDArUXwwLHM9OTYrUXwwLGQ9OTIrUXwwLGs9ODgrUXwwLGg9ODQrUXwwLHc9ODArUXwwLHY9NzYrUXwwLG09NzIrUXwwLGc9NjgrUXwwLFo9NjQrUXwwLHA9NjArUXwwLHk9NTYrUXwwLEI9NTIrUXwwLEU9NDgrUXwwLFg9NDQrUXwwLFc9NDArUXwwLEk9MzYrUXwwLEM9MzIrUXwwLEc9MjgrUXwwLFY9MjQrUXwwLEY9MjArUXwwLFI9MTYrUXwwLE49MTIrUXwwLF89OCtRfDAsWT00K1F8MCxhclsoZnw9MCk+PjJdPTAsVGYoYSxpKSxEPTB8dW4oYSw1OTIzMiksYm4oYSksSj1uKzh8MCxNPW4rMjB8MCxUPW4rMTZ8MCxVPW4rMjR8MCxTPUErOHwwLHQ8PDI0Pj4yNHwwKXtjYXNlIDY1OmNhc2UgOTc6YXJbTz4+Ml09YXJbcj4+Ml0sYXJbYT4+Ml09YXJbTz4+Ml0seXIoQSxVLGUsYSxmLEQpLEg9MjY7YnJlYWs7Y2FzZSAxMDQ6Y2FzZSA2NjpjYXNlIDk4OmFyW2o+PjJdPWFyW3I+PjJdLGFyW2E+PjJdPWFyW2o+PjJdLEJyKEEsVCxlLGEsZixEKSxIPTI2O2JyZWFrO2Nhc2UgOTk6aj0wfGpiWzEyNyZhclsxMisoMHxhcltTPj4yXSk+PjJdXShTKSxhcltjPj4yXT1hcltlPj4yXSxhcltsPj4yXT1hcltyPj4yXSxIPSh0PShyPShIPTB8dHJbaisxMT4+MF0pPDwyND4+MjQ8MCk/MHxhcltqPj4yXTpqKSsocj8wfGFyW2orND4+Ml06MjU1JkgpfDAsYXJbbz4+Ml09YXJbYz4+Ml0sYXJbYT4+Ml09YXJbbD4+Ml0sSD0wfEVyKEEsbyxhLGksZixuLHQsSCksYXJbZT4+Ml09SCxIPTI2O2JyZWFrO2Nhc2UgMTAxOmNhc2UgMTAwOmFyW3U+PjJdPWFyW3I+PjJdLGFyW2E+PjJdPWFyW3U+PjJdLFhyKEEsbisxMnwwLGUsYSxmLEQpLEg9MjY7YnJlYWs7Y2FzZSA2ODphcltiPj4yXT1hcltlPj4yXSxhcltzPj4yXT1hcltyPj4yXSxhcltvPj4yXT1hcltiPj4yXSxhclthPj4yXT1hcltzPj4yXSxIPTB8RXIoQSxvLGEsaSxmLG4sNTQzODcsNTQzOTUpLGFyW2U+PjJdPUgsSD0yNjticmVhaztjYXNlIDcwOmFyW2Q+PjJdPWFyW2U+PjJdLGFyW2s+PjJdPWFyW3I+PjJdLGFyW28+PjJdPWFyW2Q+PjJdLGFyW2E+PjJdPWFyW2s+PjJdLEg9MHxFcihBLG8sYSxpLGYsbiw1NDM5NSw1NDQwMyksYXJbZT4+Ml09SCxIPTI2O2JyZWFrO2Nhc2UgNzI6YXJbaD4+Ml09YXJbcj4+Ml0sYXJbYT4+Ml09YXJbaD4+Ml0sV3IoQSxKLGUsYSxmLEQpLEg9MjY7YnJlYWs7Y2FzZSA3Mzphclt3Pj4yXT1hcltyPj4yXSxhclthPj4yXT1hclt3Pj4yXSxJcihBLEosZSxhLGYsRCksSD0yNjticmVhaztjYXNlIDEwNjphclt2Pj4yXT1hcltyPj4yXSxhclthPj4yXT1hclt2Pj4yXSxDcihBLG4rMjh8MCxlLGEsZixEKSxIPTI2O2JyZWFrO2Nhc2UgMTA5OmFyW20+PjJdPWFyW3I+PjJdLGFyW2E+PjJdPWFyW20+PjJdLEdyKEEsVCxlLGEsZixEKSxIPTI2O2JyZWFrO2Nhc2UgNzc6YXJbZz4+Ml09YXJbcj4+Ml0sYXJbYT4+Ml09YXJbZz4+Ml0sVnIoQSxuKzR8MCxlLGEsZixEKSxIPTI2O2JyZWFrO2Nhc2UgMTE2OmNhc2UgMTEwOmFyW1o+PjJdPWFyW3I+PjJdLGFyW2E+PjJdPWFyW1o+PjJdLEZyKEEsZSxhLGYsRCksSD0yNjticmVhaztjYXNlIDExMjphcltwPj4yXT1hcltyPj4yXSxhclthPj4yXT1hcltwPj4yXSxScihBLEosZSxhLGYsRCksSD0yNjticmVhaztjYXNlIDExNDphclt5Pj4yXT1hcltlPj4yXSxhcltCPj4yXT1hcltyPj4yXSxhcltvPj4yXT1hclt5Pj4yXSxhclthPj4yXT1hcltCPj4yXSxIPTB8RXIoQSxvLGEsaSxmLG4sNTQ0MDMsNTQ0MTQpLGFyW2U+PjJdPUgsSD0yNjticmVhaztjYXNlIDgyOmFyW0U+PjJdPWFyW2U+PjJdLGFyW1g+PjJdPWFyW3I+PjJdLGFyW28+PjJdPWFyW0U+PjJdLGFyW2E+PjJdPWFyW1g+PjJdLEg9MHxFcihBLG8sYSxpLGYsbiw1NDQxNCw1NDQxOSksYXJbZT4+Ml09SCxIPTI2O2JyZWFrO2Nhc2UgODM6YXJbVz4+Ml09YXJbcj4+Ml0sYXJbYT4+Ml09YXJbVz4+Ml0sTnIoQSxuLGUsYSxmLEQpLEg9MjY7YnJlYWs7Y2FzZSA4NDphcltJPj4yXT1hcltlPj4yXSxhcltDPj4yXT1hcltyPj4yXSxhcltvPj4yXT1hcltJPj4yXSxhclthPj4yXT1hcltDPj4yXSxIPTB8RXIoQSxvLGEsaSxmLG4sNTQ0MTksNTQ0MjcpLGFyW2U+PjJdPUgsSD0yNjticmVhaztjYXNlIDExOTphcltHPj4yXT1hcltyPj4yXSxhclthPj4yXT1hcltHPj4yXSxfcihBLFUsZSxhLGYsRCksSD0yNjticmVhaztjYXNlIDEyMDp0PTB8YXJbMjArKDB8YXJbQT4+Ml0pPj4yXSxhcltWPj4yXT1hcltlPj4yXSxhcltGPj4yXT1hcltyPj4yXSxhcltvPj4yXT1hcltWPj4yXSxhclthPj4yXT1hcltGPj4yXSxvPTB8JGJbNjMmdF0oQSxvLGEsaSxmLG4pO2JyZWFrO2Nhc2UgODg6aj0wfGpiWzEyNyZhclsyNCsoMHxhcltTPj4yXSk+PjJdXShTKSxhcltSPj4yXT1hcltlPj4yXSxhcltOPj4yXT1hcltyPj4yXSxIPSh0PShyPShIPTB8dHJbaisxMT4+MF0pPDwyND4+MjQ8MCk/MHxhcltqPj4yXTpqKSsocj8wfGFyW2orND4+Ml06MjU1JkgpfDAsYXJbbz4+Ml09YXJbUj4+Ml0sYXJbYT4+Ml09YXJbTj4+Ml0sSD0wfEVyKEEsbyxhLGksZixuLHQsSCksYXJbZT4+Ml09SCxIPTI2O2JyZWFrO2Nhc2UgMTIxOmFyW18+PjJdPWFyW3I+PjJdLGFyW2E+PjJdPWFyW18+PjJdLFlyKEEsTSxlLGEsZixEKSxIPTI2O2JyZWFrO2Nhc2UgODk6YXJbWT4+Ml09YXJbcj4+Ml0sYXJbYT4+Ml09YXJbWT4+Ml0sUXIoQSxNLGUsYSxmLEQpLEg9MjY7YnJlYWs7Y2FzZSAzNzphcltRPj4yXT1hcltyPj4yXSxhclthPj4yXT1hcltRPj4yXSxEcihBLGUsYSxmLEQpLEg9MjY7YnJlYWs7ZGVmYXVsdDphcltmPj4yXT00fGFyW2Y+PjJdLEg9MjZ9cmV0dXJuIDI2PT0oMHxIKSYmKG89MHxhcltlPj4yXSksdXI9eiwwfG99LGZ1bmN0aW9uKEEsZSxyLGksZixuLHQsbyl7QXw9MCxlfD0wLHJ8PTAsaXw9MCxufD0wLHR8PTAsb3w9MDt2YXIgYSxjLGwsdSxiLHMsZCxrLGgsdyx2LG0sZyxaLHAseSxCLEUsWCxXLEksQyxHLFYsRixSLE4sXyxZLFEsRCxKLE0sVCxVLFMsTyx6LGo9MCxIPTA7c3dpdGNoKFE9dXI9KHo9dXIpKzMxJi0zMix1cj11cisxNDR8MCxhPTEyOCtRfDAsbz0xMTIrUXwwLE89MTI0K1F8MCxqPTEyMCtRfDAsYz0xMTYrUXwwLGw9MTA4K1F8MCx1PTEwNCtRfDAsYj0xMDArUXwwLHM9OTYrUXwwLGQ9OTIrUXwwLGs9ODgrUXwwLGg9ODQrUXwwLHc9ODArUXwwLHY9NzYrUXwwLG09NzIrUXwwLGc9NjgrUXwwLFo9NjQrUXwwLHA9NjArUXwwLHk9NTYrUXwwLEI9NTIrUXwwLEU9NDgrUXwwLFg9NDQrUXwwLFc9NDArUXwwLEk9MzYrUXwwLEM9MzIrUXwwLEc9MjgrUXwwLFY9MjQrUXwwLEY9MjArUXwwLFI9MTYrUXwwLE49MTIrUXwwLF89OCtRfDAsWT00K1F8MCxhclsoZnw9MCk+PjJdPTAsVGYoYSxpKSxEPTB8dW4oYSw1OTI2NCksYm4oYSksSj1uKzh8MCxNPW4rMjB8MCxUPW4rMTZ8MCxVPW4rMjR8MCxTPUErOHwwLHQ8PDI0Pj4yNHwwKXtjYXNlIDY1OmNhc2UgOTc6YXJbTz4+Ml09YXJbcj4+Ml0sYXJbYT4+Ml09YXJbTz4+Ml0sVHIoQSxVLGUsYSxmLEQpLEg9MjY7YnJlYWs7Y2FzZSAxMDQ6Y2FzZSA2NjpjYXNlIDk4OmFyW2o+PjJdPWFyW3I+PjJdLGFyW2E+PjJdPWFyW2o+PjJdLFVyKEEsVCxlLGEsZixEKSxIPTI2O2JyZWFrO2Nhc2UgOTk6aj0wfGpiWzEyNyZhclsxMisoMHxhcltTPj4yXSk+PjJdXShTKSxhcltjPj4yXT1hcltlPj4yXSxhcltsPj4yXT1hcltyPj4yXSxIPSh0PShyPShIPTB8dHJbais4KzM+PjBdKTw8MjQ+PjI0PDApPzB8YXJbaj4+Ml06aikrKChyPzB8YXJbais0Pj4yXToyNTUmSCk8PDIpfDAsYXJbbz4+Ml09YXJbYz4+Ml0sYXJbYT4+Ml09YXJbbD4+Ml0sSD0wfFNyKEEsbyxhLGksZixuLHQsSCksYXJbZT4+Ml09SCxIPTI2O2JyZWFrO2Nhc2UgMTAxOmNhc2UgMTAwOmFyW3U+PjJdPWFyW3I+PjJdLGFyW2E+PjJdPWFyW3U+PjJdLE9yKEEsbisxMnwwLGUsYSxmLEQpLEg9MjY7YnJlYWs7Y2FzZSA2ODphcltiPj4yXT1hcltlPj4yXSxhcltzPj4yXT1hcltyPj4yXSxhcltvPj4yXT1hcltiPj4yXSxhclthPj4yXT1hcltzPj4yXSxIPTB8U3IoQSxvLGEsaSxmLG4sMTYyNDQsMTYyNzYpLGFyW2U+PjJdPUgsSD0yNjticmVhaztjYXNlIDcwOmFyW2Q+PjJdPWFyW2U+PjJdLGFyW2s+PjJdPWFyW3I+PjJdLGFyW28+PjJdPWFyW2Q+PjJdLGFyW2E+PjJdPWFyW2s+PjJdLEg9MHxTcihBLG8sYSxpLGYsbiwxNjI3NiwxNjMwOCksYXJbZT4+Ml09SCxIPTI2O2JyZWFrO2Nhc2UgNzI6YXJbaD4+Ml09YXJbcj4+Ml0sYXJbYT4+Ml09YXJbaD4+Ml0senIoQSxKLGUsYSxmLEQpLEg9MjY7YnJlYWs7Y2FzZSA3Mzphclt3Pj4yXT1hcltyPj4yXSxhclthPj4yXT1hclt3Pj4yXSxqcihBLEosZSxhLGYsRCksSD0yNjticmVhaztjYXNlIDEwNjphclt2Pj4yXT1hcltyPj4yXSxhclthPj4yXT1hclt2Pj4yXSxIcihBLG4rMjh8MCxlLGEsZixEKSxIPTI2O2JyZWFrO2Nhc2UgMTA5OmFyW20+PjJdPWFyW3I+PjJdLGFyW2E+PjJdPWFyW20+PjJdLHhyKEEsVCxlLGEsZixEKSxIPTI2O2JyZWFrO2Nhc2UgNzc6YXJbZz4+Ml09YXJbcj4+Ml0sYXJbYT4+Ml09YXJbZz4+Ml0sUHIoQSxuKzR8MCxlLGEsZixEKSxIPTI2O2JyZWFrO2Nhc2UgMTE2OmNhc2UgMTEwOmFyW1o+PjJdPWFyW3I+PjJdLGFyW2E+PjJdPWFyW1o+PjJdLExyKEEsZSxhLGYsRCksSD0yNjticmVhaztjYXNlIDExMjphcltwPj4yXT1hcltyPj4yXSxhclthPj4yXT1hcltwPj4yXSxLcihBLEosZSxhLGYsRCksSD0yNjticmVhaztjYXNlIDExNDphclt5Pj4yXT1hcltlPj4yXSxhcltCPj4yXT1hcltyPj4yXSxhcltvPj4yXT1hclt5Pj4yXSxhclthPj4yXT1hcltCPj4yXSxIPTB8U3IoQSxvLGEsaSxmLG4sMTYzMDgsMTYzNTIpLGFyW2U+PjJdPUgsSD0yNjticmVhaztjYXNlIDgyOmFyW0U+PjJdPWFyW2U+PjJdLGFyW1g+PjJdPWFyW3I+PjJdLGFyW28+PjJdPWFyW0U+PjJdLGFyW2E+PjJdPWFyW1g+PjJdLEg9MHxTcihBLG8sYSxpLGYsbiwxNjM1MiwxNjM3MiksYXJbZT4+Ml09SCxIPTI2O2JyZWFrO2Nhc2UgODM6YXJbVz4+Ml09YXJbcj4+Ml0sYXJbYT4+Ml09YXJbVz4+Ml0scXIoQSxuLGUsYSxmLEQpLEg9MjY7YnJlYWs7Y2FzZSA4NDphcltJPj4yXT1hcltlPj4yXSxhcltDPj4yXT1hcltyPj4yXSxhcltvPj4yXT1hcltJPj4yXSxhclthPj4yXT1hcltDPj4yXSxIPTB8U3IoQSxvLGEsaSxmLG4sMTYzNzIsMTY0MDQpLGFyW2U+PjJdPUgsSD0yNjticmVhaztjYXNlIDExOTphcltHPj4yXT1hcltyPj4yXSxhclthPj4yXT1hcltHPj4yXSwkcihBLFUsZSxhLGYsRCksSD0yNjticmVhaztjYXNlIDEyMDp0PTB8YXJbMjArKDB8YXJbQT4+Ml0pPj4yXSxhcltWPj4yXT1hcltlPj4yXSxhcltGPj4yXT1hcltyPj4yXSxhcltvPj4yXT1hcltWPj4yXSxhclthPj4yXT1hcltGPj4yXSxvPTB8JGJbNjMmdF0oQSxvLGEsaSxmLG4pO2JyZWFrO2Nhc2UgODg6aj0wfGpiWzEyNyZhclsyNCsoMHxhcltTPj4yXSk+PjJdXShTKSxhcltSPj4yXT1hcltlPj4yXSxhcltOPj4yXT1hcltyPj4yXSxIPSh0PShyPShIPTB8dHJbais4KzM+PjBdKTw8MjQ+PjI0PDApPzB8YXJbaj4+Ml06aikrKChyPzB8YXJbais0Pj4yXToyNTUmSCk8PDIpfDAsYXJbbz4+Ml09YXJbUj4+Ml0sYXJbYT4+Ml09YXJbTj4+Ml0sSD0wfFNyKEEsbyxhLGksZixuLHQsSCksYXJbZT4+Ml09SCxIPTI2O2JyZWFrO2Nhc2UgMTIxOmFyW18+PjJdPWFyW3I+PjJdLGFyW2E+PjJdPWFyW18+PjJdLEFpKEEsTSxlLGEsZixEKSxIPTI2O2JyZWFrO2Nhc2UgODk6YXJbWT4+Ml09YXJbcj4+Ml0sYXJbYT4+Ml09YXJbWT4+Ml0sZWkoQSxNLGUsYSxmLEQpLEg9MjY7YnJlYWs7Y2FzZSAzNzphcltRPj4yXT1hcltyPj4yXSxhclthPj4yXT1hcltRPj4yXSxyaShBLGUsYSxmLEQpLEg9MjY7YnJlYWs7ZGVmYXVsdDphcltmPj4yXT00fGFyW2Y+PjJdLEg9MjZ9cmV0dXJuIDI2PT0oMHxIKSYmKG89MHxhcltlPj4yXSksdXI9eiwwfG99LGZ1bmN0aW9uKEEsZSxyLGksZixuLHQsbyl7dmFyIGE7cmV0dXJuIEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsb3w9MCxBPXVyPShlPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCx0PTB8ZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCxvKXtBfD0wLGV8PTAsaXw9MCxmfD0wLG58PTAsdHw9MCxvfD0wO3ZhciBhPTAsYz0wLGw9MDthclsocnw9MCk+PjJdPUEsYXJbbj4+Ml09aSwyJm8/KGYtaXwwKTwzP0E9MTooYXJbbj4+Ml09aSsxLHRyW2k+PjBdPS0xNyxhPTB8YXJbbj4+Ml0sYXJbbj4+Ml09YSsxLHRyW2E+PjBdPS02OSxhPTB8YXJbbj4+Ml0sYXJbbj4+Ml09YSsxLHRyW2E+PjBdPS02NSxhPTQpOmE9NDtBOmRve2lmKDQ9PSgwfGEpKWZvcihBPTB8YXJbcj4+Ml07Oyl7aWYoZT4+PjA8PUE+Pj4wKXtBPTA7YnJlYWsgQX1pZihsPTB8YXJbQT4+Ml0sdD4+PjA8bD4+PjB8NTUyOTY9PSgtMjA0OCZsfDApKXtBPTI7YnJlYWsgQX1kb3tpZigxMjg8PWw+Pj4wKXtpZihjPTI1NSYoNjMmbHwxMjgpLGw+Pj4wPDIwNDgpe2lmKEE9MHxhcltuPj4yXSwoZi1BfDApPDIpe0E9MTticmVhayBBfWFyW24+PjJdPUErMSx0cltBPj4wXT1sPj4+NnwxOTIsbD0wfGFyW24+PjJdLGFyW24+PjJdPWwrMSx0cltsPj4wXT1jO2JyZWFrfWlmKEE9MHxhcltuPj4yXSxpPWYtQXwwLG89QSsxfDAsYT0yNTUmKGw+Pj42JjYzfDEyOCksbD4+PjA8NjU1MzYpe2lmKCgwfGkpPDMpe0E9MTticmVhayBBfWFyW24+PjJdPW8sdHJbQT4+MF09bD4+PjEyfDIyNCxsPTB8YXJbbj4+Ml0sYXJbbj4+Ml09bCsxLHRyW2w+PjBdPWEsbD0wfGFyW24+PjJdLGFyW24+PjJdPWwrMSx0cltsPj4wXT1jO2JyZWFrfWlmKCgwfGkpPDQpe0E9MTticmVhayBBfWFyW24+PjJdPW8sdHJbQT4+MF09bD4+PjE4fDI0MCxvPTB8YXJbbj4+Ml0sYXJbbj4+Ml09bysxLHRyW28+PjBdPWw+Pj4xMiY2M3wxMjgsbD0wfGFyW24+PjJdLGFyW24+PjJdPWwrMSx0cltsPj4wXT1hLGw9MHxhcltuPj4yXSxhcltuPj4yXT1sKzEsdHJbbD4+MF09YzticmVha31pZihBPTB8YXJbbj4+Ml0sKGYtQXwwKTwxKXtBPTE7YnJlYWsgQX1hcltuPj4yXT1BKzEsdHJbQT4+MF09bH13aGlsZSgwKTtBPTQrKDB8YXJbcj4+Ml0pfDAsYXJbcj4+Ml09QX19d2hpbGUoMCk7cmV0dXJuIDB8QX0oYXJbKGE9QSs0fDApPj4yXT1yLGksYSxhcltBPj4yXT1uLHQsQSwxMTE0MTExLDApLGFyW2Y+PjJdPWFyW2E+PjJdLGFyW28+PjJdPWFyW0E+PjJdLHVyPWUsMHx0fSxmdW5jdGlvbihBLGUscixpLGYsbix0LG8pe3ZhciBhO3JldHVybiBBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCx0fD0wLG98PTAsQT11cj0oZT11cikrMzEmLTMyLHVyPXVyKzE2fDAsdD0wfGZ1bmN0aW9uKEEsZSxyLGksZixuLHQsbyl7QXw9MCxlfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsb3w9MDt2YXIgYSxjPTAsbD0wLHU9MCxiPTAscz0wO2FyWyhyfD0wKT4+Ml09QSxhcltuPj4yXT1pLGE9ZSw0Jm98MCYmKGM9MHxhcltyPj4yXSwyPChhLWN8MCkpJiYtMTc9PSgwfHRyW2M+PjBdKSYmLTY5PT0oMHx0cltjKzE+PjBdKSYmLTY1PT0oMHx0cltjKzI+PjBdKSYmKGFyW3I+PjJdPWMrMyk7QTpmb3IoOzspe2lmKGw9MHxhcltyPj4yXSxlPj4+MDw9bD4+PjApe0E9MDticmVha31pZihzPTB8YXJbbj4+Ml0sZj4+PjA8PXM+Pj4wKXtBPTE7YnJlYWt9dT0wfHRyW2w+PjBdLGI9MjU1JnUsQT1sKzF8MDtkb3tpZigtMTx1PDwyND4+MjQpe2lmKHQ+Pj4wPGI+Pj4wKXtBPTI7YnJlYWsgQX1hcltzPj4yXT1ifWVsc2V7aWYoKDI1NSZ1KTwxOTQpe0E9MjticmVhayBBfWlmKGM9bCsyfDAsaT1hLWx8MCwoMjU1JnUpPDIyNCl7aWYoKDB8aSk8Mil7QT0xO2JyZWFrIEF9aWYoMTI4IT0oMTkyJihBPTB8Y3JbQT4+MF0pfDApKXtBPTI7YnJlYWsgQX1pZih0Pj4+MDwoQT02MyZBfGI8PDYmMTk4NCk+Pj4wKXtBPTI7YnJlYWsgQX1hcltzPj4yXT1BLEE9YzticmVha31pZihvPWwrM3wwLCgyNTUmdSk8MjQwKXtpZigoMHxpKTwzKXtBPTE7YnJlYWsgQX1zd2l0Y2goaT0wfHRyW2M+PjBdLGM9MHxjcltBPj4wXSxBPTIyNCZjLHU8PDI0Pj4yNCl7Y2FzZS0zMjppZigxNjA9PSgwfEEpKWJyZWFrO0E9MjticmVhayBBO2Nhc2UtMTk6aWYoMTI4PT0oMHxBKSlicmVhaztBPTI7YnJlYWsgQTtkZWZhdWx0OmlmKDEyOCE9KDE5MiZjfDApKXtBPTI7YnJlYWsgQX19aWYoMTI4IT0oMTkyJihBPTI1NSZpKXwwKSl7QT0yO2JyZWFrIEF9aWYodD4+PjA8KEE9Yzw8NiY0MDMyfGI8PDEyJjYxNDQwfDYzJkEpPj4+MCl7QT0yO2JyZWFrIEF9YXJbcz4+Ml09QSxBPW87YnJlYWt9aWYoMjQ1PD0oMjU1JnUpKXtBPTI7YnJlYWsgQX1pZigoMHxpKTw0KXtBPTE7YnJlYWsgQX1zd2l0Y2goaT0wfHRyW0E+PjBdLEE9MHx0cltjPj4wXSxjPTB8dHJbbz4+MF0sbz0yNTUmaSx1PDwyND4+MjQpe2Nhc2UtMTY6aWYoNDg8PShpKzExMiYyNTUpKXtBPTI7YnJlYWsgQX1icmVhaztjYXNlLTEyOmlmKDEyOD09KDI0MCZvfDApKWJyZWFrO0E9MjticmVhayBBO2RlZmF1bHQ6aWYoMTI4IT0oMTkyJm98MCkpe0E9MjticmVhayBBfX1pZigxMjghPSgxOTImKGk9MjU1JkEpfDApKXtBPTI7YnJlYWsgQX1pZigxMjghPSgxOTImKEE9MjU1JmMpfDApKXtBPTI7YnJlYWsgQX1pZih0Pj4+MDwoQT1vPDwxMiYyNTgwNDh8Yjw8MTgmMTgzNTAwOHxpPDw2JjQwMzJ8NjMmQSk+Pj4wKXtBPTI7YnJlYWsgQX1hcltzPj4yXT1BLEE9bCs0fDB9fXdoaWxlKDApO2FyW3I+PjJdPUEsYXJbbj4+Ml09NCsoMHxhcltuPj4yXSl9cmV0dXJuIDB8QX0oYXJbKGE9QSs0fDApPj4yXT1yLGksYSxhcltBPj4yXT1uLHQsQSwxMTE0MTExLDApLGFyW2Y+PjJdPWFyW2E+PjJdLGFyW28+PjJdPWFyW0E+PjJdLHVyPWUsMHx0fSxmdW5jdGlvbihBLGUscixpLGYsbix0LG8pe0F8PTAsZXw9MCxpfD0wLGZ8PTAsbnw9MCx0fD0wLG98PTA7dmFyIGEsYyxsLHUsYj0wLHM9MCxkPTAsaz0wO2ZvcihkPXVyPSh1PXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxkPShsPWQpKzh8MCxiPXJ8PTA7Oyl7aWYoKDB8Yik9PSgwfGkpKXtiPWk7YnJlYWt9aWYoISgwfGFyW2I+PjJdKSlicmVhaztiPWIrNHwwfWFyW28+PjJdPW4sYXJbZj4+Ml09cixhPXQsYz1BKzh8MDtBOmZvcig7Oyl7aWYoKDB8bik9PSgwfHQpfCgwfHIpPT0oMHxpKSl7Yj0zNTticmVha31zd2l0Y2gocz0wfGFyWyhrPWUpKzQ+PjJdLGFyWyhBPWwpPj4yXT1hcltrPj4yXSxhcltBKzQ+PjJdPXMsQT0wfHJmKDB8YXJbYz4+Ml0pLHM9MHxGaShuLGYsYi1yPj4yLGEtbnwwLGUpLDB8QSYmcmYoQSksMHxzKXtjYXNlLTE6Yj0xMDticmVhayBBO2Nhc2UgMDpyPTEsYj0zMjticmVhayBBfWlmKG49KDB8YXJbbz4+Ml0pK3N8MCwoMHwoYXJbbz4+Ml09bikpPT0oMHx0KSl7Yj0zMzticmVha31pZigoMHxiKT09KDB8aSkpYj1pLHI9MHxhcltmPj4yXTtlbHNle2lmKG49MHxyZigwfGFyW2M+PjJdKSxyPTB8JGMoZCwwKSwwfG4mJnJmKG4pLC0xPT0oMHxyKSl7cj0yLGI9MzE7YnJlYWt9aWYocj4+PjA+KGEtKDB8YXJbbz4+Ml0pfDApPj4+MCl7cj0xLGI9MzE7YnJlYWt9Zm9yKG49ZDtyOylzPTB8dHJbbj4+MF0saz0wfGFyW28+PjJdLGFyW28+PjJdPWsrMSx0cltrPj4wXT1zLG49bisxfDAscj1yKy0xfDA7Zm9yKHI9NCsoMHxhcltmPj4yXSl8MCxiPWFyW2Y+PjJdPXI7Oyl7aWYoKDB8Yik9PSgwfGkpKXtiPWk7YnJlYWt9aWYoISgwfGFyW2I+PjJdKSlicmVhaztiPWIrNHwwfW49MHxhcltvPj4yXX19aWYoMTA9PSgwfGIpKXtmb3IoYXJbbz4+Ml09bjsoMHxyKSE9KDB8YXJbZj4+Ml0pJiYoaz0wfGFyW3I+PjJdLGI9MHxyZigwfGFyW2M+PjJdKSxuPTB8JGMobixrKSwwfGImJnJmKGIpLC0xIT0oMHxuKSk7KW49KDB8YXJbbz4+Ml0pK258MCxhcltvPj4yXT1uLHI9cis0fDA7YXJbZj4+Ml09cixyPTIsYj0zMn1lbHNlIDMxPT0oMHxiKT9iPTMyOjMzPT0oMHxiKSYmKHI9MHxhcltmPj4yXSxiPTM1KTtyZXR1cm4gMzIhPSgwfGIpJiYzNT09KDB8YikmJihyPSgwfHIpIT0oMHxpKSYxKSx1cj11LDB8cn0sZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCxvKXtBfD0wLGV8PTAsaXw9MCxmfD0wLG58PTAsdHw9MCxvfD0wO3ZhciBhLGMsbCx1LGI9MCxzPTAsZD0wO2ZvcihsPXVyPSh1PXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxiPXJ8PTA7Oyl7aWYoKDB8Yik9PSgwfGkpKXtiPWk7YnJlYWt9aWYoISgwfHRyW2I+PjBdKSlicmVhaztiPWIrMXwwfWZvcihhcltvPj4yXT1uLGFyW2Y+PjJdPXIsYT10LGM9QSs4fDAsQT1uOzspe2lmKCgwfEEpPT0oMHx0KXwoMHxyKT09KDB8aSkpe0E9MzI7YnJlYWt9aWYobj0wfGFyWyhzPWUpKzQ+PjJdLGFyWyhkPWwpPj4yXT1hcltzPj4yXSxhcltkKzQ+PjJdPW4sZD1iLG49MHxyZigwfGFyW2M+PjJdKSxzPTB8VmkoQSxmLGQtcnwwLGEtQT4+MixlKSwwfG4mJnJmKG4pLC0xPT0oMHxzKSl7Yj1BLEE9MTA7YnJlYWt9aWYoQT0oMHxhcltvPj4yXSkrKHM8PDIpfDAsKDB8KGFyW28+PjJdPUEpKT09KDB8dCkpe0E9Mjk7YnJlYWt9aWYocj0wfGFyW2Y+PjJdLCgwfGIpPT0oMHxpKSliPWk7ZWxzZXtpZihiPTB8cmYoMHxhcltjPj4yXSkscj0wfEdpKEEsciwxLGUpLDB8YiYmcmYoYiksMHxyKXtyPTIsQT0yODticmVha31mb3IoYXJbbz4+Ml09NCsoMHxhcltvPj4yXSkscj0xKygwfGFyW2Y+PjJdKXwwLGI9YXJbZj4+Ml09cjs7KXtpZigoMHxiKT09KDB8aSkpe2I9aTticmVha31pZighKDB8dHJbYj4+MF0pKWJyZWFrO2I9YisxfDB9QT0wfGFyW28+PjJdfX1kb3tpZigxMD09KDB8QSkpe0E6Zm9yKDs7KXtpZihhcltvPj4yXT1iLCgwfHIpPT0oMHxhcltmPj4yXSkpe0E9MTg7YnJlYWt9c3dpdGNoKEE9MHxyZigwfGFyW2M+PjJdKSxiPTB8R2koYixyLGQtcnwwLGwpLDB8QSYmcmYoQSksMHxiKXtjYXNlLTE6QT0xNTticmVhayBBO2Nhc2UtMjpBPTE2O2JyZWFrIEE7Y2FzZSAwOmI9MX1yPXIrYnwwLGI9NCsoMHxhcltvPj4yXSl8MCxBPTEwfWlmKDE1PT0oMHxBKSl7YXJbZj4+Ml09cixyPTIsQT0yODticmVha31pZigxNj09KDB8QSkpe2FyW2Y+PjJdPXIscj0xLEE9Mjg7YnJlYWt9aWYoMTg9PSgwfEEpKXtyPSgwfChhcltmPj4yXT1yKSkhPSgwfGkpJjEsQT0yODticmVha319ZWxzZSAyOT09KDB8QSkmJihyPTB8YXJbZj4+Ml0sQT0zMil9d2hpbGUoMCk7cmV0dXJuIDI4IT0oMHxBKSYmMzI9PSgwfEEpJiYocj0oMHxyKSE9KDB8aSkmMSksdXI9dSwwfHJ9LGZ1bmN0aW9uKEEsZSxyLGksZixuLHQsbyl7cmV0dXJuIHJ8PTAsbnw9MCxvfD0wLGFyWyhmfD0wKT4+Ml09cixhcltvPj4yXT1uLDN9LGZ1bmN0aW9uKEEsZSxyLGksZixuLHQsbyl7cmV0dXJuIHJ8PTAsbnw9MCxvfD0wLGFyWyhmfD0wKT4+Ml09cixhcltvPj4yXT1uLDN9LGZ1bmN0aW9uKEEsZSxyLGksZixuLHQsbyl7dmFyIGE7cmV0dXJuIEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsb3w9MCxBPXVyPShlPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCx0PTB8ZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCxvKXtBfD0wLGV8PTAsaXw9MCxmfD0wLG58PTAsdHw9MCxvfD0wO3ZhciBhPTAsYz0wLGw9MCx1PTAsYj0wO2FyWyhyfD0wKT4+Ml09QSxhcltuPj4yXT1pLDImbz8oZi1pfDApPDM/QT0xOihhcltuPj4yXT1pKzEsdHJbaT4+MF09LTE3LGE9MHxhcltuPj4yXSxhcltuPj4yXT1hKzEsdHJbYT4+MF09LTY5LGE9MHxhcltuPj4yXSxhcltuPj4yXT1hKzEsdHJbYT4+MF09LTY1LGE9NCk6YT00O0E6ZG97aWYoND09KDB8YSkpZm9yKGI9ZSxBPTB8YXJbcj4+Ml07Oyl7aWYoZT4+PjA8PUE+Pj4wKXtBPTA7YnJlYWsgQX1pZihpPTB8b3JbQT4+MV0sdD4+PjA8KHU9NjU1MzUmaSk+Pj4wKXtBPTI7YnJlYWsgQX1kb3tpZigoNjU1MzUmaSk8MTI4KXtpZihBPTB8YXJbbj4+Ml0sKGYtQXwwKTwxKXtBPTE7YnJlYWsgQX1hcltuPj4yXT1BKzEsdHJbQT4+MF09aX1lbHNle2lmKGw9MjU1JigxMjh8KGM9NjMmdSkpLCg2NTUzNSZpKTwyMDQ4KXtpZihBPTB8YXJbbj4+Ml0sKGYtQXwwKTwyKXtBPTE7YnJlYWsgQX1hcltuPj4yXT1BKzEsdHJbQT4+MF09dT4+PjZ8MTkyLHU9MHxhcltuPj4yXSxhcltuPj4yXT11KzEsdHJbdT4+MF09bDticmVha31pZihvPTI1NSYodT4+PjEyfDIyNCksYT0yNTUmKHU+Pj42JjYzfDEyOCksKDY1NTM1JmkpPDU1Mjk2KXtpZihBPTB8YXJbbj4+Ml0sKGYtQXwwKTwzKXtBPTE7YnJlYWsgQX1hcltuPj4yXT1BKzEsdHJbQT4+MF09byx1PTB8YXJbbj4+Ml0sYXJbbj4+Ml09dSsxLHRyW3U+PjBdPWEsdT0wfGFyW24+PjJdLGFyW24+PjJdPXUrMSx0clt1Pj4wXT1sO2JyZWFrfWlmKDU2MzIwPD0oNjU1MzUmaSkpe2lmKCg2NTUzNSZpKTw1NzM0NCl7QT0yO2JyZWFrIEF9aWYoQT0wfGFyW24+PjJdLChmLUF8MCk8Myl7QT0xO2JyZWFrIEF9YXJbbj4+Ml09QSsxLHRyW0E+PjBdPW8sdT0wfGFyW24+PjJdLGFyW24+PjJdPXUrMSx0clt1Pj4wXT1hLHU9MHxhcltuPj4yXSxhcltuPj4yXT11KzEsdHJbdT4+MF09bDticmVha31pZigoYi1BfDApPDQpe0E9MTticmVhayBBfWlmKDU2MzIwIT0oNjQ1MTImKGk9MHxsclsoQT1BKzJ8MCk+PjFdKXwwKSl7QT0yO2JyZWFrIEF9aWYoKGYtKDB8YXJbbj4+Ml0pfDApPDQpe0E9MTticmVhayBBfWlmKHQ+Pj4wPCg2NTUzNisoKG89OTYwJnUpPDwxMCl8Yzw8MTB8MTAyMyZpKT4+PjApe0E9MjticmVhayBBfWFyW3I+PjJdPUEsYz0xKyhvPj4+Nil8MCxsPTB8YXJbbj4+Ml0sYXJbbj4+Ml09bCsxLHRyW2w+PjBdPWM+Pj4yfDI0MCxsPTB8YXJbbj4+Ml0sYXJbbj4+Ml09bCsxLHRyW2w+PjBdPXU+Pj4yJjE1fGM8PDQmNDh8MTI4LGw9MHxhcltuPj4yXSxhcltuPj4yXT1sKzEsdHJbbD4+MF09dTw8NCY0OHxpPj4+NiYxNXwxMjgsdT0wfGFyW24+PjJdLGFyW24+PjJdPXUrMSx0clt1Pj4wXT02MyZpfDEyOH19d2hpbGUoMCk7QT0yKygwfGFyW3I+PjJdKXwwLGFyW3I+PjJdPUF9fXdoaWxlKDApO3JldHVybiAwfEF9KGFyWyhhPUErNHwwKT4+Ml09cixpLGEsYXJbQT4+Ml09bix0LEEsMTExNDExMSwwKSxhcltmPj4yXT1hclthPj4yXSxhcltvPj4yXT1hcltBPj4yXSx1cj1lLDB8dH0sZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCxvKXt2YXIgYTtyZXR1cm4gQXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsdHw9MCxvfD0wLEE9dXI9KGU9dXIpKzMxJi0zMix1cj11cisxNnwwLHQ9MHxmdW5jdGlvbihBLGUscixpLGYsbix0LG8pe0F8PTAsZXw9MCxpfD0wLGZ8PTAsbnw9MCx0fD0wLG98PTA7dmFyIGEsYyxsPTAsdT0wLGI9MCxzPTAsZD0wLGs9MDthclsocnw9MCk+PjJdPUEsYXJbbj4+Ml09aSxjPWUsNCZvfDAmJihsPTB8YXJbcj4+Ml0sMjwoYy1sfDApKSYmLTE3PT0oMHx0cltsPj4wXSkmJi02OT09KDB8dHJbbCsxPj4wXSkmJi02NT09KDB8dHJbbCsyPj4wXSkmJihhcltyPj4yXT1sKzMpO2E9ZjtBOmZvcig7Oyl7aWYoaT0wfGFyW3I+PjJdLCEoQT1pPj4+MDxlPj4+MCkpe2s9NDA7YnJlYWt9aWYoZD0wfGFyW24+PjJdLGY+Pj4wPD1kPj4+MCl7az00MDticmVha31pZihiPTB8dHJbaT4+MF0sdD4+PjA8KHM9MjU1JmIpPj4+MCl7QT0yO2JyZWFrfUE9aSsxfDA7ZG97aWYoLTE8Yjw8MjQ+PjI0KW9yW2Q+PjFdPTI1NSZiO2Vsc2V7aWYoKDI1NSZiKTwxOTQpe0E9MjticmVhayBBfWlmKGw9Yy1pfDAsbz1pKzJ8MCwoMjU1JmIpPDIyNCl7aWYoKDB8bCk8Mil7QT0xO2JyZWFrIEF9aWYoMTI4IT0oMTkyJihBPTB8Y3JbQT4+MF0pfDApKXtBPTI7YnJlYWsgQX1pZih0Pj4+MDwoQT02MyZBfHM8PDYmMTk4NCk+Pj4wKXtBPTI7YnJlYWsgQX1vcltkPj4xXT1BLEE9bzticmVha31pZih1PWkrM3wwLCgyNTUmYik8MjQwKXtpZigoMHxsKTwzKXtBPTE7YnJlYWsgQX1zd2l0Y2goaT0wfHRyW28+PjBdLGw9MHxjcltBPj4wXSxBPTIyNCZsLGI8PDI0Pj4yNCl7Y2FzZS0zMjppZigxNjA9PSgwfEEpKWJyZWFrO0E9MjticmVhayBBO2Nhc2UtMTk6aWYoMTI4PT0oMHxBKSlicmVhaztBPTI7YnJlYWsgQTtkZWZhdWx0OmlmKDEyOCE9KDE5MiZsfDApKXtBPTI7YnJlYWsgQX19aWYoMTI4IT0oMTkyJihBPTI1NSZpKXwwKSl7QT0yO2JyZWFrIEF9aWYodD4+PjA8KDY1NTM1JihBPWw8PDYmNDAzMnxzPDwxMnw2MyZBKSk+Pj4wKXtBPTI7YnJlYWsgQX1vcltkPj4xXT1BLEE9dTticmVha31pZigyNDU8PSgyNTUmYikpe0E9MjticmVhayBBfWlmKCgwfGwpPDQpe0E9MTticmVhayBBfXN3aXRjaChsPTB8dHJbQT4+MF0sQT0wfHRyW28+PjBdLGk9MHx0clt1Pj4wXSx1PTI1NSZsLGI8PDI0Pj4yNCl7Y2FzZS0xNjppZig0ODw9KGwrMTEyJjI1NSkpe0E9MjticmVhayBBfWJyZWFrO2Nhc2UtMTI6aWYoMTI4PT0oMjQwJnV8MCkpYnJlYWs7QT0yO2JyZWFrIEE7ZGVmYXVsdDppZigxMjghPSgxOTImdXwwKSl7QT0yO2JyZWFrIEF9fWlmKDEyOCE9KDE5MiYobz0yNTUmQSl8MCkpe0E9MjticmVhayBBfWlmKDEyOCE9KDE5MiYoQT0yNTUmaSl8MCkpe0E9MjticmVhayBBfWlmKChhLWR8MCk8NCl7QT0xO2JyZWFrIEF9aWYodD4+PjA8KHU8PDEyJjI1ODA0OHwoaT03JnMpPDwxOHw0MDMyJihsPW88PDYpfChBJj02MykpPj4+MCl7QT0yO2JyZWFrIEF9b3JbZD4+MV09dTw8MiY2MHxvPj4+NCYzfDE2MzIwKygodT4+PjQmM3xpPDwyKTw8Nil8NTUyOTYsZD1kKzJ8MCxhcltuPj4yXT1kLG9yW2Q+PjFdPUF8OTYwJmx8NTYzMjAsQT00KygwfGFyW3I+PjJdKXwwfX13aGlsZSgwKTthcltyPj4yXT1BLGFyW24+PjJdPTIrKDB8YXJbbj4+Ml0pfTQwPT0oMHxrKSYmKEEmPTEpO3JldHVybiAwfEF9KGFyWyhhPUErNHwwKT4+Ml09cixpLGEsYXJbQT4+Ml09bix0LEEsMTExNDExMSwwKSxhcltmPj4yXT1hclthPj4yXSxhcltvPj4yXT1hcltBPj4yXSx1cj1lLDB8dH0sUmIsUmIsUmIsUmIsUmJdLHJzPVtOYixmdW5jdGlvbigpeyFmdW5jdGlvbigpe3ZhciBBPTA7aWYoQT0wfGFyWzE0MTU0XSxhclsxNDE1NF09QSsxLDE8KEErMXwwKSlyZXR1cm4gQT0wO2lmKFlhKCksMHxLYSgpKXJldHVybiBBPTA7YXJbMTQxNTRdPSgwfGFyWzE0MTU0XSktMSxBPTExfSgpfSxmdW5jdGlvbigpeyFmdW5jdGlvbigpe3ZhciBBPTA7aWYoQT0wfGFyWzE0MTU0XSxhclsxNDE1NF09QS0xLCgwfChBPUErLTF8MCkpPDApcmV0dXJuIGFyWzE0MTU0XT0xKygwfGFyWzE0MTU0XSksQT0xMjtpZigwfEEpcmV0dXJuIEE9MDtxYSgpLEE9MH0oKX0sZnVuY3Rpb24oKXtXKCl9LGZ1bmN0aW9uKCl7dmFyIEEsZSxyLGk9MCxmPTAsbj0wLHQ9MCxvPTA7dD11cj11ciszMSYtMzIsdXI9dXIrNDh8MCxyPXQrMzJ8MCxBPXQrMjR8MCxvPXQrMTZ8MCx0PShlPXQpKzM2fDAsMHwoaT0wfHp1KCkpJiYwfChuPTB8YXJbaT4+Ml0pJiYoMTEyNjkwMjUyOD09KC0yNTYmKGY9MHxhclsoaT1uKzQ4fDApPj4yXSl8MCkmMTEyOTA3NDI0Nz09KDB8KGk9MHxhcltpKzQ+PjJdKSl8fChhcltBPj4yXT01NjAxOSxqdSg1NTk2OSxBKSksaT0xMTI2OTAyNTI5PT0oMHxmKSYxMTI5MDc0MjQ3PT0oMHxpKT8wfGFyW24rNDQ+PjJdOm4rODB8MCxhclt0Pj4yXT1pLG49MHxhcltuPj4yXSxpPTB8YXJbbis0Pj4yXSwwfHhiWzYzJmFyWzE2KygwfGFyWzk4NF0pPj4yXV0oMzkzNixuLHQpPyhvPTB8YXJbdD4+Ml0sbz0wfGpiWzEyNyZhcls4KygwfGFyW28+PjJdKT4+Ml1dKG8pLGFyW2U+PjJdPTU2MDE5LGFyW2UrND4+Ml09aSxhcltlKzg+PjJdPW8sanUoNTU4ODMsZSkpOihhcltvPj4yXT01NjAxOSxhcltvKzQ+PjJdPWksanUoNTU5MjgsbykpKSxqdSg1NjAwNyxyKX0sZnVuY3Rpb24oKXt2YXIgQSxlO2U9dXI9KEE9dXIpKzMxJi0zMix1cj11cisxNnwwLDB8bUEoNjExNTIsNDQ2KT9qdSg1NjIwNyxlKTp1cj1BfSxOYixOYl0saXM9W19iLFhBLGZ1bmN0aW9uKEEpe3ZhciBlO2FyWyhBfD0wKT4+Ml09NDIzMiwoZT0wfGFyW0ErMjQ+PjJdKSYmbXUoZSksdnUoQSl9LGZ1bmN0aW9uKEEpe3ZhciBlO2FyWyhBfD0wKT4+Ml09NDI2NCwoZT0wfGFyW0ErMjQ+PjJdKSYmKCgwfGFyWyhBPUErMjh8MCk+PjJdKSE9KDB8ZSkmJihhcltBPj4yXT1lKSx2dShlKSl9LGZ1bmN0aW9uKEEpe3ZhciBlLHI7YXJbKEF8PTApPj4yXT00MjY0LChlPTB8YXJbQSsyND4+Ml0pJiYoKDB8YXJbKHI9QSsyOHwwKT4+Ml0pIT0oMHxlKSYmKGFyW3I+PjJdPWUpLHZ1KGUpKSx2dShBKX0sZnVuY3Rpb24oQSl7dmFyIGUscixpO2FyWyhBfD0wKT4+Ml09NDMwNCxhclsoZT1BKzU2fDApPj4yXT00MzI0LGFyWyhyPUErNHwwKT4+Ml09NDM0MCwoMHx0clsxMSsoaT1BKzM2fDApPj4wXSk8MCYmdnUoMHxhcltpPj4yXSksa2YociksR2YoKSxiZihlKX0sZnVuY3Rpb24oQSl7dmFyIGUscixpO2FyWyhBfD0wKT4+Ml09NDMwNCxhclsoZT1BKzU2fDApPj4yXT00MzI0LGFyWyhyPUErNHwwKT4+Ml09NDM0MCwoMHx0clsxMSsoaT1BKzM2fDApPj4wXSk8MCYmdnUoMHxhcltpPj4yXSksa2YociksR2YoKSxiZihlKSx2dShBKX0sZnVuY3Rpb24oQSl7dmFyIGUscixpO0E9KEF8PTApKygwfGFyWygwfGFyW0E+PjJdKS0xMj4+Ml0pfDAsYXJbQT4+Ml09NDMwNCxhclsoZT1BKzU2fDApPj4yXT00MzI0LGFyWyhyPUErNHwwKT4+Ml09NDM0MCwoMHx0clsxMSsoaT1BKzM2fDApPj4wXSk8MCYmdnUoMHxhcltpPj4yXSksa2YociksR2YoKSxiZihlKX0sZnVuY3Rpb24oQSl7dmFyIGUscixpO0E9KEF8PTApKygwfGFyWygwfGFyW0E+PjJdKS0xMj4+Ml0pfDAsYXJbQT4+Ml09NDMwNCxhclsoZT1BKzU2fDApPj4yXT00MzI0LGFyWyhyPUErNHwwKT4+Ml09NDM0MCwoMHx0clsxMSsoaT1BKzM2fDApPj4wXSk8MCYmdnUoMHxhcltpPj4yXSksa2YociksR2YoKSxiZihlKSx2dShBKX0sZnVuY3Rpb24oQSl7dmFyIGU7YXJbKEF8PTApPj4yXT00MzQwLCgwfHRyWzExKyhlPUErMzJ8MCk+PjBdKTwwJiZ2dSgwfGFyW2U+PjJdKSxrZihBKX0sZnVuY3Rpb24oQSl7dmFyIGU7YXJbKEF8PTApPj4yXT00MzQwLCgwfHRyWzExKyhlPUErMzJ8MCk+PjBdKTwwJiZ2dSgwfGFyW2U+PjJdKSxrZihBKSx2dShBKX0sZnVuY3Rpb24oQSl7dmFyIGUscj0wLGk9MCxmPTAsbj0wO2lmKGFyWyhBfD0wKT4+Ml09NDQwNCwwfChyPTB8YXJbKGU9QSs0NHwwKT4+Ml0pKXtpZigoMHwoaT0wfGFyWyhuPUErNDh8MCk+PjJdKSkhPSgwfHIpKXtmb3IoZj1pO2k9ZistOHwwLGFyW24+PjJdPWksKGY9MHxhcltmKy00Pj4yXSkmJihkdShmKSxpPTB8YXJbbj4+Ml0pLCgwfGkpIT0oMHxyKTspZj1pO3I9MHxhcltlPj4yXX12dShyKX1hcltBPj4yXT00MjY0LChpPTB8YXJbQSsyND4+Ml0pJiYoKDB8YXJbKHI9QSsyOHwwKT4+Ml0pIT0oMHxpKSYmKGFyW3I+PjJdPWkpLHZ1KGkpKX0sZnVuY3Rpb24oQSl7dmFyIGUscj0wLGk9MCxmPTAsbj0wO2lmKGFyWyhBfD0wKT4+Ml09NDQwNCwwfChyPTB8YXJbKGU9QSs0NHwwKT4+Ml0pKXtpZigoMHwoaT0wfGFyWyhuPUErNDh8MCk+PjJdKSkhPSgwfHIpKXtmb3IoZj1pO2k9ZistOHwwLGFyW24+PjJdPWksKGY9MHxhcltmKy00Pj4yXSkmJihkdShmKSxpPTB8YXJbbj4+Ml0pLCgwfGkpIT0oMHxyKTspZj1pO3I9MHxhcltlPj4yXX12dShyKX1hcltBPj4yXT00MjY0LChyPTB8YXJbQSsyND4+Ml0pJiYoKDB8YXJbKGk9QSsyOHwwKT4+Ml0pIT0oMHxyKSYmKGFyW2k+PjJdPXIpLHZ1KHIpKSx2dShBKX0sZnVuY3Rpb24oQSl7dHJbKEF8PTApKzM3Pj4wXT0wfSxmdW5jdGlvbihBKXt2YXIgZSxyPTAsaT0wLGY9MCxuPTA7aWYoYXJbKEF8PTApPj4yXT00NDM2LDB8KHI9MHxhcltBKzY0Pj4yXSkmJigoMHwoZj0wfGFyWyhpPUErNjh8MCk+PjJdKSkhPSgwfHIpJiYoYXJbaT4+Ml09ZisofigoZistNC1yfDApPj4+Mik8PDIpKSx2dShyKSksYXJbQT4+Ml09NDQwNCwwfChyPTB8YXJbKGU9QSs0NHwwKT4+Ml0pKXtpZigoMHwoaT0wfGFyWyhuPUErNDh8MCk+PjJdKSkhPSgwfHIpKXtmb3IoO2Y9aSstOHwwLGFyW24+PjJdPWYsKDB8KGk9KGk9MHxhcltpKy00Pj4yXSk/KGR1KGkpLDB8YXJbbj4+Ml0pOmYpKSE9KDB8cik7KTtyPTB8YXJbZT4+Ml19dnUocil9YXJbQT4+Ml09NDI2NCwoaT0wfGFyW0ErMjQ+PjJdKSYmKCgwfGFyWyhyPUErMjh8MCk+PjJdKSE9KDB8aSkmJihhcltyPj4yXT1pKSx2dShpKSl9LGZ1bmN0aW9uKEEpe3ZhciBlLHI9MCxpPTAsZj0wLG49MDtpZihhclsoQXw9MCk+PjJdPTQ0MzYsMHwocj0wfGFyW0ErNjQ+PjJdKSYmKCgwfChmPTB8YXJbKGk9QSs2OHwwKT4+Ml0pKSE9KDB8cikmJihhcltpPj4yXT1mKyh+KChmKy00LXJ8MCk+Pj4yKTw8MikpLHZ1KHIpKSxhcltBPj4yXT00NDA0LDB8KHI9MHxhclsoZT1BKzQ0fDApPj4yXSkpe2lmKCgwfChpPTB8YXJbKG49QSs0OHwwKT4+Ml0pKSE9KDB8cikpe2Zvcig7Zj1pKy04fDAsYXJbbj4+Ml09ZiwoMHwoaT0oaT0wfGFyW2krLTQ+PjJdKT8oZHUoaSksMHxhcltuPj4yXSk6ZikpIT0oMHxyKTspO3I9MHxhcltlPj4yXX12dShyKX1hcltBPj4yXT00MjY0LChyPTB8YXJbQSsyND4+Ml0pJiYoKDB8YXJbKGk9QSsyOHwwKT4+Ml0pIT0oMHxyKSYmKGFyW2k+PjJdPXIpLHZ1KHIpKSx2dShBKX0sZnVuY3Rpb24oQSl7dmFyIGUscj0wLGk9MCxmPTAsbj0wO2lmKGFyWyhBfD0wKT4+Ml09NDQwNCwwfChyPTB8YXJbKGU9QSs0NHwwKT4+Ml0pKXtpZigoMHwoaT0wfGFyWyhuPUErNDh8MCk+PjJdKSkhPSgwfHIpKXtmb3IoZj1pO2k9ZistOHwwLGFyW24+PjJdPWksKGY9MHxhcltmKy00Pj4yXSkmJihkdShmKSxpPTB8YXJbbj4+Ml0pLCgwfGkpIT0oMHxyKTspZj1pO3I9MHxhcltlPj4yXX12dShyKX1hcltBPj4yXT00MjY0LChyPTB8YXJbQSsyND4+Ml0pJiYoKDB8YXJbKGk9QSsyOHwwKT4+Ml0pIT0oMHxyKSYmKGFyW2k+PjJdPXIpLHZ1KHIpKSx2dShBKX0sZnVuY3Rpb24oQSl7dmFyIGUscixpO2FyWyhBfD0wKT4+Ml09NDUwNCxhclsoZT1BKzY0fDApPj4yXT00NTQ0LGFyW0ErOD4+Ml09NDUyNCxhclsocj1BKzEyfDApPj4yXT00MzQwLCgwfHRyWzExKyhpPUErNDR8MCk+PjBdKTwwJiZ2dSgwfGFyW2k+PjJdKSxrZihyKSxfZigpLGJmKGUpfSxmdW5jdGlvbihBKXt2YXIgZSxyLGk7YXJbKEF8PTApPj4yXT00NTA0LGFyWyhlPUErNjR8MCk+PjJdPTQ1NDQsYXJbQSs4Pj4yXT00NTI0LGFyWyhyPUErMTJ8MCk+PjJdPTQzNDAsKDB8dHJbMTErKGk9QSs0NHwwKT4+MF0pPDAmJnZ1KDB8YXJbaT4+Ml0pLGtmKHIpLF9mKCksYmYoZSksdnUoQSl9LGZ1bmN0aW9uKEEpe3ZhciBlLHIsaTthclsoQT0oQXw9MCkrLTh8MCk+PjJdPTQ1MDQsYXJbKGU9QSs2NHwwKT4+Ml09NDU0NCxhcltBKzg+PjJdPTQ1MjQsYXJbKHI9QSsxMnwwKT4+Ml09NDM0MCwoMHx0clsxMSsoaT1BKzQ0fDApPj4wXSk8MCYmdnUoMHxhcltpPj4yXSksa2YociksX2YoKSxiZihlKX0sZnVuY3Rpb24oQSl7dmFyIGUscixpO2FyWyhBPShBfD0wKSstOHwwKT4+Ml09NDUwNCxhclsoZT1BKzY0fDApPj4yXT00NTQ0LGFyW0ErOD4+Ml09NDUyNCxhclsocj1BKzEyfDApPj4yXT00MzQwLCgwfHRyWzExKyhpPUErNDR8MCk+PjBdKTwwJiZ2dSgwfGFyW2k+PjJdKSxrZihyKSxfZigpLGJmKGUpLHZ1KEEpfSxmdW5jdGlvbihBKXt2YXIgZSxyLGk7QT0oQXw9MCkrKDB8YXJbKDB8YXJbQT4+Ml0pLTEyPj4yXSl8MCxhcltBPj4yXT00NTA0LGFyWyhlPUErNjR8MCk+PjJdPTQ1NDQsYXJbQSs4Pj4yXT00NTI0LGFyWyhyPUErMTJ8MCk+PjJdPTQzNDAsKDB8dHJbMTErKGk9QSs0NHwwKT4+MF0pPDAmJnZ1KDB8YXJbaT4+Ml0pLGtmKHIpLF9mKCksYmYoZSl9LGZ1bmN0aW9uKEEpe3ZhciBlLHIsaTtBPShBfD0wKSsoMHxhclsoMHxhcltBPj4yXSktMTI+PjJdKXwwLGFyW0E+PjJdPTQ1MDQsYXJbKGU9QSs2NHwwKT4+Ml09NDU0NCxhcltBKzg+PjJdPTQ1MjQsYXJbKHI9QSsxMnwwKT4+Ml09NDM0MCwoMHx0clsxMSsoaT1BKzQ0fDApPj4wXSk8MCYmdnUoMHxhcltpPj4yXSksa2YociksX2YoKSxiZihlKSx2dShBKX0seWYsQmYsZnVuY3Rpb24oQSl7eWYoKEF8PTApKygwfGFyWygwfGFyW0E+PjJdKS0xMj4+Ml0pfDApfSxmdW5jdGlvbihBKXtCZigoQXw9MCkrKDB8YXJbKDB8YXJbQT4+Ml0pLTEyPj4yXSl8MCl9LFJmLE5mLGZ1bmN0aW9uKEEpe1JmKChBfD0wKSstOHwwKX0sZnVuY3Rpb24oQSl7TmYoKEF8PTApKy04fDApfSxmdW5jdGlvbihBKXtSZigoQXw9MCkrKDB8YXJbKDB8YXJbQT4+Ml0pLTEyPj4yXSl8MCl9LGZ1bmN0aW9uKEEpe05mKChBfD0wKSsoMHxhclsoMHxhcltBPj4yXSktMTI+PjJdKXwwKX0sSWYsQ2YsZnVuY3Rpb24oQSl7SWYoKEF8PTApKygwfGFyWygwfGFyW0E+PjJdKS0xMj4+Ml0pfDApfSxmdW5jdGlvbihBKXtDZigoQXw9MCkrKDB8YXJbKDB8YXJbQT4+Ml0pLTEyPj4yXSl8MCl9LGZ1bmN0aW9uKEEpe3ZhciBlLHIsaT0wLGY9MCxuPTAsdD0wO2lmKGFyWyhBfD0wKT4+Ml09NDYwMCxhclsocj1BKzE2fDApPj4yXT00NDM2LDB8KGk9MHxhcltBKzgwPj4yXSkmJigoMHwobj0wfGFyWyhmPUErODR8MCk+PjJdKSkhPSgwfGkpJiYoYXJbZj4+Ml09bisofigobistNC1pfDApPj4+Mik8PDIpKSx2dShpKSksYXJbcj4+Ml09NDQwNCwwfChpPTB8YXJbKGU9QSs2MHwwKT4+Ml0pKXtpZigoMHwoZj0wfGFyWyh0PUErNjR8MCk+PjJdKSkhPSgwfGkpKXtmb3IoO249ZistOHwwLGFyW3Q+PjJdPW4sKDB8KGY9KGY9MHxhcltmKy00Pj4yXSk/KGR1KGYpLDB8YXJbdD4+Ml0pOm4pKSE9KDB8aSk7KTtpPTB8YXJbZT4+Ml19dnUoaSl9YXJbcj4+Ml09NDI2NCwoaT0wfGFyW0ErNDA+PjJdKSYmKCgwfGFyWyhmPUErNDR8MCk+PjJdKSE9KDB8aSkmJihhcltmPj4yXT1pKSx2dShpKSksdHUoKX0sZnVuY3Rpb24oQSl7dmFyIGUscixpPTAsZj0wLG49MCx0PTA7aWYoYXJbKEF8PTApPj4yXT00NjAwLGFyWyhyPUErMTZ8MCk+PjJdPTQ0MzYsMHwoaT0wfGFyW0ErODA+PjJdKSYmKCgwfChuPTB8YXJbKGY9QSs4NHwwKT4+Ml0pKSE9KDB8aSkmJihhcltmPj4yXT1uKyh+KChuKy00LWl8MCk+Pj4yKTw8MikpLHZ1KGkpKSxhcltyPj4yXT00NDA0LDB8KGk9MHxhclsoZT1BKzYwfDApPj4yXSkpe2lmKCgwfChmPTB8YXJbKHQ9QSs2NHwwKT4+Ml0pKSE9KDB8aSkpe2Zvcig7bj1mKy04fDAsYXJbdD4+Ml09biwoMHwoZj0oZj0wfGFyW2YrLTQ+PjJdKT8oZHUoZiksMHxhclt0Pj4yXSk6bikpIT0oMHxpKTspO2k9MHxhcltlPj4yXX12dShpKX1pZihhcltyPj4yXT00MjY0LCEoaT0wfGFyW0ErNDA+PjJdKSlyZXR1cm4gdHUoKSx2b2lkIHZ1KEEpOygwfGFyWyhmPUErNDR8MCk+PjJdKSE9KDB8aSkmJihhcltmPj4yXT1pKSx2dShpKSx0dSgpLHZ1KEEpfSxmdW5jdGlvbihBKXtpc1s1MTEmYXJbYXJbKEE9KEF8PTApKzE2fDApPj4yXT4+Ml1dKEEpfSxmdW5jdGlvbihBKXt2dShBfD0wKX0sZnVuY3Rpb24oQSl7dmFyIGUscixpPTAsZj0wLG49MCx0PTA7aWYoYXJbKEF8PTApPj4yXT00NjI4LGFyWyhyPUErMTZ8MCk+PjJdPTQ0MDQsMHwoaT0wfGFyWyhlPUErNjB8MCk+PjJdKSl7aWYoKDB8KGY9MHxhclsodD1BKzY0fDApPj4yXSkpIT0oMHxpKSl7Zm9yKG49ZjtmPW4rLTh8MCxhclt0Pj4yXT1mLChuPTB8YXJbbistND4+Ml0pJiYoZHUobiksZj0wfGFyW3Q+PjJdKSwoMHxmKSE9KDB8aSk7KW49ZjtpPTB8YXJbZT4+Ml19dnUoaSl9YXJbcj4+Ml09NDI2NCwoaT0wfGFyW0ErNDA+PjJdKSYmKCgwfGFyWyhmPUErNDR8MCk+PjJdKSE9KDB8aSkmJihhcltmPj4yXT1pKSx2dShpKSksdHUoKX0sZnVuY3Rpb24oQSl7dmFyIGUscixpPTAsZj0wLG49MCx0PTA7aWYoYXJbKEF8PTApPj4yXT00NjI4LGFyWyhyPUErMTZ8MCk+PjJdPTQ0MDQsMHwoaT0wfGFyWyhlPUErNjB8MCk+PjJdKSl7aWYoKDB8KGY9MHxhclsodD1BKzY0fDApPj4yXSkpIT0oMHxpKSl7Zm9yKG49ZjtmPW4rLTh8MCxhclt0Pj4yXT1mLChuPTB8YXJbbistND4+Ml0pJiYoZHUobiksZj0wfGFyW3Q+PjJdKSwoMHxmKSE9KDB8aSk7KW49ZjtpPTB8YXJbZT4+Ml19dnUoaSl9aWYoYXJbcj4+Ml09NDI2NCwhKGk9MHxhcltBKzQwPj4yXSkpcmV0dXJuIHR1KCksdm9pZCB2dShBKTsoMHxhclsoZj1BKzQ0fDApPj4yXSkhPSgwfGkpJiYoYXJbZj4+Ml09aSksdnUoaSksdHUoKSx2dShBKX0sZnVuY3Rpb24oQSl7aXNbNTExJmFyW2FyWyhBPShBfD0wKSsxNnwwKT4+Ml0+PjJdXShBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3ZhciBlLHIsaT0wLGY9MCxuPTAsdD0wO2lmKGFyWyhBfD0wKT4+Ml09NDY1Nixhclsocj1BKzE2fDApPj4yXT00Njg0LCgwfHRyWyhpPUErOTJ8MCkrMTE+PjBdKTwwJiZ2dSgwfGFyW2k+PjJdKSxhcltyPj4yXT00NDA0LDB8KGk9MHxhclsoZT1BKzYwfDApPj4yXSkpe2lmKCgwfChmPTB8YXJbKHQ9QSs2NHwwKT4+Ml0pKSE9KDB8aSkpe2Zvcig7bj1mKy04fDAsYXJbdD4+Ml09biwoMHwoZj0oZj0wfGFyW2YrLTQ+PjJdKT8oZHUoZiksMHxhclt0Pj4yXSk6bikpIT0oMHxpKTspO2k9MHxhcltlPj4yXX12dShpKX1hcltyPj4yXT00MjY0LChpPTB8YXJbQSs0MD4+Ml0pJiYoKDB8YXJbKGY9QSs0NHwwKT4+Ml0pIT0oMHxpKSYmKGFyW2Y+PjJdPWkpLHZ1KGkpKSx0dSgpfSxmdW5jdGlvbihBKXt2YXIgZSxyLGk9MCxmPTAsbj0wLHQ9MDtpZihhclsoQXw9MCk+PjJdPTQ2NTYsYXJbKHI9QSsxNnwwKT4+Ml09NDY4NCwoMHx0clsoaT1BKzkyfDApKzExPj4wXSk8MCYmdnUoMHxhcltpPj4yXSksYXJbcj4+Ml09NDQwNCwwfChpPTB8YXJbKGU9QSs2MHwwKT4+Ml0pKXtpZigoMHwoZj0wfGFyWyh0PUErNjR8MCk+PjJdKSkhPSgwfGkpKXtmb3IoO249ZistOHwwLGFyW3Q+PjJdPW4sKDB8KGY9KGY9MHxhcltmKy00Pj4yXSk/KGR1KGYpLDB8YXJbdD4+Ml0pOm4pKSE9KDB8aSk7KTtpPTB8YXJbZT4+Ml19dnUoaSl9aWYoYXJbcj4+Ml09NDI2NCwhKGk9MHxhcltBKzQwPj4yXSkpcmV0dXJuIHR1KCksdm9pZCB2dShBKTsoMHxhclsoZj1BKzQ0fDApPj4yXSkhPSgwfGkpJiYoYXJbZj4+Ml09aSksdnUoaSksdHUoKSx2dShBKX0sZnVuY3Rpb24oQSl7aXNbNTExJmFyW2FyWyhBPShBfD0wKSsxNnwwKT4+Ml0+PjJdXShBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3ZhciBlLHI9MCxpPTAsZj0wLG49MDtpZihhclsoQXw9MCk+PjJdPTQ2ODQsKDB8dHJbKHI9QSs3NnwwKSsxMT4+MF0pPDAmJnZ1KDB8YXJbcj4+Ml0pLGFyW0E+PjJdPTQ0MDQsMHwocj0wfGFyWyhlPUErNDR8MCk+PjJdKSl7aWYoKDB8KGk9MHxhclsobj1BKzQ4fDApPj4yXSkpIT0oMHxyKSl7Zm9yKDtmPWkrLTh8MCxhcltuPj4yXT1mLCgwfChpPShpPTB8YXJbaSstND4+Ml0pPyhkdShpKSwwfGFyW24+PjJdKTpmKSkhPSgwfHIpOyk7cj0wfGFyW2U+PjJdfXZ1KHIpfWFyW0E+PjJdPTQyNjQsKGk9MHxhcltBKzI0Pj4yXSkmJigoMHxhclsocj1BKzI4fDApPj4yXSkhPSgwfGkpJiYoYXJbcj4+Ml09aSksdnUoaSkpfSxmdW5jdGlvbihBKXt2YXIgZSxyPTAsaT0wLGY9MCxuPTA7aWYoYXJbKEF8PTApPj4yXT00Njg0LCgwfHRyWyhyPUErNzZ8MCkrMTE+PjBdKTwwJiZ2dSgwfGFyW3I+PjJdKSxhcltBPj4yXT00NDA0LDB8KHI9MHxhclsoZT1BKzQ0fDApPj4yXSkpe2lmKCgwfChpPTB8YXJbKG49QSs0OHwwKT4+Ml0pKSE9KDB8cikpe2Zvcig7Zj1pKy04fDAsYXJbbj4+Ml09ZiwoMHwoaT0oaT0wfGFyW2krLTQ+PjJdKT8oZHUoaSksMHxhcltuPj4yXSk6ZikpIT0oMHxyKTspO3I9MHxhcltlPj4yXX12dShyKX1hcltBPj4yXT00MjY0LChyPTB8YXJbQSsyND4+Ml0pJiYoKDB8YXJbKGk9QSsyOHwwKT4+Ml0pIT0oMHxyKSYmKGFyW2k+PjJdPXIpLHZ1KHIpKSx2dShBKX0sZnVuY3Rpb24oQSl7dmFyIGUscixpPTAsZj0wLG49MCx0PTA7aWYoYXJbKEF8PTApPj4yXT00NzE2LGFyWyhyPUErMTZ8MCk+PjJdPTQ0MDQsMHwoaT0wfGFyWyhlPUErNjB8MCk+PjJdKSl7aWYoKDB8KGY9MHxhclsodD1BKzY0fDApPj4yXSkpIT0oMHxpKSl7Zm9yKG49ZjtmPW4rLTh8MCxhclt0Pj4yXT1mLChuPTB8YXJbbistND4+Ml0pJiYoZHUobiksZj0wfGFyW3Q+PjJdKSwoMHxmKSE9KDB8aSk7KW49ZjtpPTB8YXJbZT4+Ml19dnUoaSl9YXJbcj4+Ml09NDI2NCwoaT0wfGFyW0ErNDA+PjJdKSYmKCgwfGFyWyhmPUErNDR8MCk+PjJdKSE9KDB8aSkmJihhcltmPj4yXT1pKSx2dShpKSksdHUoKX0sZnVuY3Rpb24oQSl7dmFyIGUscixpPTAsZj0wLG49MCx0PTA7aWYoYXJbKEF8PTApPj4yXT00NzE2LGFyWyhyPUErMTZ8MCk+PjJdPTQ0MDQsMHwoaT0wfGFyWyhlPUErNjB8MCk+PjJdKSl7aWYoKDB8KGY9MHxhclsodD1BKzY0fDApPj4yXSkpIT0oMHxpKSl7Zm9yKG49ZjtmPW4rLTh8MCxhclt0Pj4yXT1mLChuPTB8YXJbbistND4+Ml0pJiYoZHUobiksZj0wfGFyW3Q+PjJdKSwoMHxmKSE9KDB8aSk7KW49ZjtpPTB8YXJbZT4+Ml19dnUoaSl9aWYoYXJbcj4+Ml09NDI2NCwhKGk9MHxhcltBKzQwPj4yXSkpcmV0dXJuIHR1KCksdm9pZCB2dShBKTsoMHxhclsoZj1BKzQ0fDApPj4yXSkhPSgwfGkpJiYoYXJbZj4+Ml09aSksdnUoaSksdHUoKSx2dShBKX0sZnVuY3Rpb24oQSl7aXNbNTExJmFyW2FyWyhBPShBfD0wKSsxNnwwKT4+Ml0+PjJdXShBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3ZhciBlLHI9MCxpPTAsZj0wLG49MDtpZihhclsoQXw9MCk+PjJdPTQ0MDQsMHwocj0wfGFyWyhlPUErNDR8MCk+PjJdKSl7aWYoKDB8KGk9MHxhclsobj1BKzQ4fDApPj4yXSkpIT0oMHxyKSl7Zm9yKGY9aTtpPWYrLTh8MCxhcltuPj4yXT1pLChmPTB8YXJbZistND4+Ml0pJiYoZHUoZiksaT0wfGFyW24+PjJdKSwoMHxpKSE9KDB8cik7KWY9aTtyPTB8YXJbZT4+Ml19dnUocil9YXJbQT4+Ml09NDI2NCwocj0wfGFyW0ErMjQ+PjJdKSYmKCgwfGFyWyhpPUErMjh8MCk+PjJdKSE9KDB8cikmJihhcltpPj4yXT1yKSx2dShyKSksdnUoQSl9LGZ1bmN0aW9uKEEpe3RyWyhBfD0wKSszNz4+MF09NjU1MzU8KDB8YXJbQSs1Nj4+Ml0pPj4+MCYxfSxmdW5jdGlvbihBKXthclsoQXw9MCk+PjJdPTQ3NzYsWXQoQSsxNnwwKSx0dSgpfSxmdW5jdGlvbihBKXthclsoQXw9MCk+PjJdPTQ3NzYsWXQoQSsxNnwwKSx0dSgpLHZ1KEEpfSxmdW5jdGlvbihBKXtpc1s1MTEmYXJbYXJbKEE9KEF8PTApKzE2fDApPj4yXT4+Ml1dKEEpfSxmdW5jdGlvbihBKXt2dShBfD0wKX0sWXQsZnVuY3Rpb24oQSl7WXQoQXw9MCksdnUoQSl9LGZ1bmN0aW9uKEEpe3ZhciBlLHIsaT0wLGY9MCxuPTAsdD0wLG89MDtpZihpPTB8Y3JbKEF8PTApKzcyPj4wXSxpPSEoNjU1MzU8KG49MHxhcltBKzYwPj4yXSktKGY9MHxhcltBKzU2Pj4yXSk+PjU+Pj4wKXx8MjxpPj4+MD9pOjIscj1BKzc0fDAsdD1BKzc1fDAsbz1BKzc2fDAsdHJbKGU9QSs3M3wwKT4+MF09MCx0clsxK2U+PjBdPTAsdHJbMitlPj4wXT0wLCgodHJbMytlPj4wXT0wKXxmKT09KDB8bikpcmV0dXJuIG49aSx0cltlPj4wXT00LHRyW3I+PjBdPTQsdHJbdD4+MF09NCx0cltvPj4wXT0wLHQ9MjU1Jm4sdm9pZCh0clsobz1BKzM3fDApPj4wXT10KTtmb3IoO2k9ISg2NTUzNTwoMHxhcltmPj4yXSk+Pj4wKXx8MjwoMHxpKT9pOjIsaT0wPT0oMHx0cltmKzQ+PjBdKXwxPCgwfGkpP2k6MSwoMHwoZj1mKzMyfDApKSE9KDB8bik7KTt0cltlPj4wXT00LHRyW3I+PjBdPTQsdHJbdD4+MF09NCx0cltvPj4wXT0wLHQ9MjU1JmksdHJbKG89QSszN3wwKT4+MF09dH0sZnVuY3Rpb24oQSl7dmFyIGUscixpPTAsZj0wLG49MCx0PTA7aWYoYXJbKEF8PTApPj4yXT00ODM2LGFyWyhyPUErMTZ8MCk+PjJdPTQ0MDQsMHwoaT0wfGFyWyhlPUErNjB8MCk+PjJdKSl7aWYoKDB8KGY9MHxhclsodD1BKzY0fDApPj4yXSkpIT0oMHxpKSl7Zm9yKG49ZjtmPW4rLTh8MCxhclt0Pj4yXT1mLChuPTB8YXJbbistND4+Ml0pJiYoZHUobiksZj0wfGFyW3Q+PjJdKSwoMHxmKSE9KDB8aSk7KW49ZjtpPTB8YXJbZT4+Ml19dnUoaSl9YXJbcj4+Ml09NDI2NCwoaT0wfGFyW0ErNDA+PjJdKSYmKCgwfGFyWyhmPUErNDR8MCk+PjJdKSE9KDB8aSkmJihhcltmPj4yXT1pKSx2dShpKSksdHUoKX0sZnVuY3Rpb24oQSl7dmFyIGUscixpPTAsZj0wLG49MCx0PTA7aWYoYXJbKEF8PTApPj4yXT00ODM2LGFyWyhyPUErMTZ8MCk+PjJdPTQ0MDQsMHwoaT0wfGFyWyhlPUErNjB8MCk+PjJdKSl7aWYoKDB8KGY9MHxhclsodD1BKzY0fDApPj4yXSkpIT0oMHxpKSl7Zm9yKG49ZjtmPW4rLTh8MCxhclt0Pj4yXT1mLChuPTB8YXJbbistND4+Ml0pJiYoZHUobiksZj0wfGFyW3Q+PjJdKSwoMHxmKSE9KDB8aSk7KW49ZjtpPTB8YXJbZT4+Ml19dnUoaSl9aWYoYXJbcj4+Ml09NDI2NCwhKGk9MHxhcltBKzQwPj4yXSkpcmV0dXJuIHR1KCksdm9pZCB2dShBKTsoMHxhclsoZj1BKzQ0fDApPj4yXSkhPSgwfGkpJiYoYXJbZj4+Ml09aSksdnUoaSksdHUoKSx2dShBKX0sZnVuY3Rpb24oQSl7aXNbNTExJmFyW2FyWyhBPShBfD0wKSsxNnwwKT4+Ml0+PjJdXShBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3ZhciBlLHI9MCxpPTAsZj0wLG49MDtpZihhclsoQXw9MCk+PjJdPTQ0MDQsMHwocj0wfGFyWyhlPUErNDR8MCk+PjJdKSl7aWYoKDB8KGk9MHxhclsobj1BKzQ4fDApPj4yXSkpIT0oMHxyKSl7Zm9yKGY9aTtpPWYrLTh8MCxhcltuPj4yXT1pLChmPTB8YXJbZistND4+Ml0pJiYoZHUoZiksaT0wfGFyW24+PjJdKSwoMHxpKSE9KDB8cik7KWY9aTtyPTB8YXJbZT4+Ml19dnUocil9YXJbQT4+Ml09NDI2NCwocj0wfGFyW0ErMjQ+PjJdKSYmKCgwfGFyWyhpPUErMjh8MCk+PjJdKSE9KDB8cikmJihhcltpPj4yXT1yKSx2dShyKSksdnUoQSl9LGZ1bmN0aW9uKEEpe3RyWyhBfD0wKSszNz4+MF09NjU1MzU8KDB8YXJbQSs0OD4+Ml0pLSgwfGFyW0ErNDQ+PjJdKT4+Mz4+PjAmMX0sZnVuY3Rpb24oQSl7YXJbKEF8PTApPj4yXT00ODk2LF90KEErMTZ8MCksdHUoKX0sZnVuY3Rpb24oQSl7YXJbKEF8PTApPj4yXT00ODk2LF90KEErMTZ8MCksdHUoKSx2dShBKX0sZnVuY3Rpb24oQSl7aXNbNTExJmFyW2FyWyhBPShBfD0wKSsxNnwwKT4+Ml0+PjJdXShBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LF90LGZ1bmN0aW9uKEEpe190KEF8PTApLHZ1KEEpfSxmdW5jdGlvbihBKXt2YXIgZSxyPTAsaT0wLGY9MDtpZihyPShlPTY1NTM1PCgwfGFyWyhBfD0wKSs1Nj4+Ml0pPj4+MCk/MzowPT0oMHx0cltBKzEyND4+MF0pPzA6MiwwPT0oMHwoKGY9MHx0clsoaT1BKzY0fDApKzExPj4wXSk8PDI0Pj4yNDwwPzB8YXJbQSs2OD4+Ml06MjU1JmYpKSYmKGY9MD09KDB8WXUoaSwwLC0xLDc5NjU5LDApKSkpcmV0dXJuIGk9cixpJj0yNTUsdm9pZCh0clsoZj1BKzM3fDApPj4wXT1pKTtpPXI9ZT8zOjIsaSY9MjU1LHRyWyhmPUErMzd8MCk+PjBdPWl9LGZ1bmN0aW9uKEEpe3ZhciBlLHIsaT0wLGY9MCxuPTAsdD0wO2lmKGFyWyhBfD0wKT4+Ml09NDk1Nixhclsocj1BKzE2fDApPj4yXT00NDA0LDB8KGk9MHxhclsoZT1BKzYwfDApPj4yXSkpe2lmKCgwfChmPTB8YXJbKHQ9QSs2NHwwKT4+Ml0pKSE9KDB8aSkpe2ZvcihuPWY7Zj1uKy04fDAsYXJbdD4+Ml09Ziwobj0wfGFyW24rLTQ+PjJdKSYmKGR1KG4pLGY9MHxhclt0Pj4yXSksKDB8ZikhPSgwfGkpOyluPWY7aT0wfGFyW2U+PjJdfXZ1KGkpfWFyW3I+PjJdPTQyNjQsKGk9MHxhcltBKzQwPj4yXSkmJigoMHxhclsoZj1BKzQ0fDApPj4yXSkhPSgwfGkpJiYoYXJbZj4+Ml09aSksdnUoaSkpLHR1KCl9LGZ1bmN0aW9uKEEpe3ZhciBlLHIsaT0wLGY9MCxuPTAsdD0wO2lmKGFyWyhBfD0wKT4+Ml09NDk1Nixhclsocj1BKzE2fDApPj4yXT00NDA0LDB8KGk9MHxhclsoZT1BKzYwfDApPj4yXSkpe2lmKCgwfChmPTB8YXJbKHQ9QSs2NHwwKT4+Ml0pKSE9KDB8aSkpe2ZvcihuPWY7Zj1uKy04fDAsYXJbdD4+Ml09Ziwobj0wfGFyW24rLTQ+PjJdKSYmKGR1KG4pLGY9MHxhclt0Pj4yXSksKDB8ZikhPSgwfGkpOyluPWY7aT0wfGFyW2U+PjJdfXZ1KGkpfWlmKGFyW3I+PjJdPTQyNjQsIShpPTB8YXJbQSs0MD4+Ml0pKXJldHVybiB0dSgpLHZvaWQgdnUoQSk7KDB8YXJbKGY9QSs0NHwwKT4+Ml0pIT0oMHxpKSYmKGFyW2Y+PjJdPWkpLHZ1KGkpLHR1KCksdnUoQSl9LGZ1bmN0aW9uKEEpe2lzWzUxMSZhclthclsoQT0oQXw9MCkrMTZ8MCk+PjJdPj4yXV0oQSl9LGZ1bmN0aW9uKEEpe3Z1KEF8PTApfSxmdW5jdGlvbihBKXt2YXIgZSxyPTAsaT0wLGY9MCxuPTA7aWYoYXJbKEF8PTApPj4yXT00NDA0LDB8KHI9MHxhclsoZT1BKzQ0fDApPj4yXSkpe2lmKCgwfChpPTB8YXJbKG49QSs0OHwwKT4+Ml0pKSE9KDB8cikpe2ZvcihmPWk7aT1mKy04fDAsYXJbbj4+Ml09aSwoZj0wfGFyW2YrLTQ+PjJdKSYmKGR1KGYpLGk9MHxhcltuPj4yXSksKDB8aSkhPSgwfHIpOylmPWk7cj0wfGFyW2U+PjJdfXZ1KHIpfWFyW0E+PjJdPTQyNjQsKHI9MHxhcltBKzI0Pj4yXSkmJigoMHxhclsoaT1BKzI4fDApPj4yXSkhPSgwfHIpJiYoYXJbaT4+Ml09ciksdnUocikpLHZ1KEEpfSxmdW5jdGlvbihBKXt2YXIgZSxyLGk9MCxmPTAsbj0wLHQ9MDtpZihhclsoQXw9MCk+PjJdPTUwMTYsYXJbKHI9QSsxNnwwKT4+Ml09NDQwNCwwfChpPTB8YXJbKGU9QSs2MHwwKT4+Ml0pKXtpZigoMHwoZj0wfGFyWyh0PUErNjR8MCk+PjJdKSkhPSgwfGkpKXtmb3Iobj1mO2Y9bistOHwwLGFyW3Q+PjJdPWYsKG49MHxhcltuKy00Pj4yXSkmJihkdShuKSxmPTB8YXJbdD4+Ml0pLCgwfGYpIT0oMHxpKTspbj1mO2k9MHxhcltlPj4yXX12dShpKX1hcltyPj4yXT00MjY0LChpPTB8YXJbQSs0MD4+Ml0pJiYoKDB8YXJbKGY9QSs0NHwwKT4+Ml0pIT0oMHxpKSYmKGFyW2Y+PjJdPWkpLHZ1KGkpKSx0dSgpfSxmdW5jdGlvbihBKXt2YXIgZSxyLGk9MCxmPTAsbj0wLHQ9MDtpZihhclsoQXw9MCk+PjJdPTUwMTYsYXJbKHI9QSsxNnwwKT4+Ml09NDQwNCwwfChpPTB8YXJbKGU9QSs2MHwwKT4+Ml0pKXtpZigoMHwoZj0wfGFyWyh0PUErNjR8MCk+PjJdKSkhPSgwfGkpKXtmb3Iobj1mO2Y9bistOHwwLGFyW3Q+PjJdPWYsKG49MHxhcltuKy00Pj4yXSkmJihkdShuKSxmPTB8YXJbdD4+Ml0pLCgwfGYpIT0oMHxpKTspbj1mO2k9MHxhcltlPj4yXX12dShpKX1pZihhcltyPj4yXT00MjY0LCEoaT0wfGFyW0ErNDA+PjJdKSlyZXR1cm4gdHUoKSx2b2lkIHZ1KEEpOygwfGFyWyhmPUErNDR8MCk+PjJdKSE9KDB8aSkmJihhcltmPj4yXT1pKSx2dShpKSx0dSgpLHZ1KEEpfSxmdW5jdGlvbihBKXtpc1s1MTEmYXJbYXJbKEE9KEF8PTApKzE2fDApPj4yXT4+Ml1dKEEpfSxmdW5jdGlvbihBKXt2dShBfD0wKX0sZnVuY3Rpb24oQSl7dmFyIGUscj0wLGk9MCxmPTAsbj0wO2lmKGFyWyhBfD0wKT4+Ml09NDQwNCwwfChyPTB8YXJbKGU9QSs0NHwwKT4+Ml0pKXtpZigoMHwoaT0wfGFyWyhuPUErNDh8MCk+PjJdKSkhPSgwfHIpKXtmb3IoZj1pO2k9ZistOHwwLGFyW24+PjJdPWksKGY9MHxhcltmKy00Pj4yXSkmJihkdShmKSxpPTB8YXJbbj4+Ml0pLCgwfGkpIT0oMHxyKTspZj1pO3I9MHxhcltlPj4yXX12dShyKX1hcltBPj4yXT00MjY0LChyPTB8YXJbQSsyND4+Ml0pJiYoKDB8YXJbKGk9QSsyOHwwKT4+Ml0pIT0oMHxyKSYmKGFyW2k+PjJdPXIpLHZ1KHIpKSx2dShBKX0sZnVuY3Rpb24oQSl7YXJbKEF8PTApPj4yXT01MDc2LEZ0KEErMTZ8MCksdHUoKX0sZnVuY3Rpb24oQSl7YXJbKEF8PTApPj4yXT01MDc2LEZ0KEErMTZ8MCksdHUoKSx2dShBKX0sZnVuY3Rpb24oQSl7aXNbNTExJmFyW2FyWyhBPShBfD0wKSsxNnwwKT4+Ml0+PjJdXShBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LEZ0LGZ1bmN0aW9uKEEpe0Z0KEF8PTApLHZ1KEEpfSxmdW5jdGlvbihBKXt2YXIgZT0wLHI9MCxpPTAsZj0wLG49MCx0PTA7aWYoKDB8KHI9MHxhclsoQXw9MCkrNTY+PjJdKSk9PSgwfCh0PTB8YXJbQSs2MD4+Ml0pKSlyZXR1cm4gdHJbKHQ9QSszN3wobj1mPTApKT4+MF09ZixuJj0xLHZvaWQoYXJbKHQ9QSs0MHwwKT4+Ml09bik7bj1lPTA7ZG97aWYobj02NTUzNTwoMHxhcltyPj4yXSk+Pj4wPzE6biwoMHwoaT0wfGFyW3IrND4+Ml0pKSE9KDB8KGY9MHxhcltyKzg+PjJdKSkpZm9yKDtlfD0xMjc8KDB8bHJbaSsyPj4xXSksKDB8KGk9aSs0fDApKSE9KDB8Zik7KTtyPXIrMTZ8MH13aGlsZSgoMHxyKSE9KDB8dCkpO2Y9MjU1Jm4sbj1lLHRyWyh0PUErMzd8MCk+PjBdPWYsbiY9MSxhclsodD1BKzQwfDApPj4yXT1ufSxmdW5jdGlvbihBKXt2YXIgZSxyLGk9MCxmPTAsbj0wLHQ9MDtpZihhclsoQXw9MCk+PjJdPTUxMzYsYXJbKHI9QSsxNnwwKT4+Ml09NDQwNCwwfChpPTB8YXJbKGU9QSs2MHwwKT4+Ml0pKXtpZigoMHwoZj0wfGFyWyh0PUErNjR8MCk+PjJdKSkhPSgwfGkpKXtmb3Iobj1mO2Y9bistOHwwLGFyW3Q+PjJdPWYsKG49MHxhcltuKy00Pj4yXSkmJihkdShuKSxmPTB8YXJbdD4+Ml0pLCgwfGYpIT0oMHxpKTspbj1mO2k9MHxhcltlPj4yXX12dShpKX1hcltyPj4yXT00MjY0LChpPTB8YXJbQSs0MD4+Ml0pJiYoKDB8YXJbKGY9QSs0NHwwKT4+Ml0pIT0oMHxpKSYmKGFyW2Y+PjJdPWkpLHZ1KGkpKSx0dSgpfSxmdW5jdGlvbihBKXt2YXIgZSxyLGk9MCxmPTAsbj0wLHQ9MDtpZihhclsoQXw9MCk+PjJdPTUxMzYsYXJbKHI9QSsxNnwwKT4+Ml09NDQwNCwwfChpPTB8YXJbKGU9QSs2MHwwKT4+Ml0pKXtpZigoMHwoZj0wfGFyWyh0PUErNjR8MCk+PjJdKSkhPSgwfGkpKXtmb3Iobj1mO2Y9bistOHwwLGFyW3Q+PjJdPWYsKG49MHxhcltuKy00Pj4yXSkmJihkdShuKSxmPTB8YXJbdD4+Ml0pLCgwfGYpIT0oMHxpKTspbj1mO2k9MHxhcltlPj4yXX12dShpKX1pZihhcltyPj4yXT00MjY0LCEoaT0wfGFyW0ErNDA+PjJdKSlyZXR1cm4gdHUoKSx2b2lkIHZ1KEEpOygwfGFyWyhmPUErNDR8MCk+PjJdKSE9KDB8aSkmJihhcltmPj4yXT1pKSx2dShpKSx0dSgpLHZ1KEEpfSxmdW5jdGlvbihBKXtpc1s1MTEmYXJbYXJbKEE9KEF8PTApKzE2fDApPj4yXT4+Ml1dKEEpfSxmdW5jdGlvbihBKXt2dShBfD0wKX0sZnVuY3Rpb24oQSl7dmFyIGUscj0wLGk9MCxmPTAsbj0wO2lmKGFyWyhBfD0wKT4+Ml09NDQwNCwwfChyPTB8YXJbKGU9QSs0NHwwKT4+Ml0pKXtpZigoMHwoaT0wfGFyWyhuPUErNDh8MCk+PjJdKSkhPSgwfHIpKXtmb3IoZj1pO2k9ZistOHwwLGFyW24+PjJdPWksKGY9MHxhcltmKy00Pj4yXSkmJihkdShmKSxpPTB8YXJbbj4+Ml0pLCgwfGkpIT0oMHxyKTspZj1pO3I9MHxhcltlPj4yXX12dShyKX1hcltBPj4yXT00MjY0LChyPTB8YXJbQSsyND4+Ml0pJiYoKDB8YXJbKGk9QSsyOHwwKT4+Ml0pIT0oMHxyKSYmKGFyW2k+PjJdPXIpLHZ1KHIpKSx2dShBKX0sVnQsZnVuY3Rpb24oQSl7VnQoQXw9MCksdnUoQSl9LGZ1bmN0aW9uKEEpe2lzWzUxMSZhclthclsoQT0oQXw9MCkrMTZ8MCk+PjJdPj4yXV0oQSl9LGZ1bmN0aW9uKEEpe3Z1KEF8PTApfSxmdW5jdGlvbihBKXt2YXIgZSxyPTAsaT0wLGY9MCxuPTA7aWYoYXJbKEF8PTApPj4yXT01MjI0LDB8KHI9MHxhcltBKzY4Pj4yXSkmJigoMHxhclsoaT1BKzcyfDApPj4yXSkhPSgwfHIpJiYoYXJbaT4+Ml09ciksdnUocikpLCgwfHRyWyhyPUErNTZ8MCkrMTE+PjBdKTwwJiZ2dSgwfGFyW3I+PjJdKSxhcltBPj4yXT00NDA0LDB8KHI9MHxhclsoZT1BKzQ0fDApPj4yXSkpe2lmKCgwfChpPTB8YXJbKG49QSs0OHwwKT4+Ml0pKSE9KDB8cikpe2Zvcig7Zj1pKy04fDAsYXJbbj4+Ml09ZiwoMHwoaT0oaT0wfGFyW2krLTQ+PjJdKT8oZHUoaSksMHxhcltuPj4yXSk6ZikpIT0oMHxyKTspO3I9MHxhcltlPj4yXX12dShyKX1hcltBPj4yXT00MjY0LChpPTB8YXJbQSsyND4+Ml0pJiYoKDB8YXJbKHI9QSsyOHwwKT4+Ml0pIT0oMHxpKSYmKGFyW3I+PjJdPWkpLHZ1KGkpKX0sZnVuY3Rpb24oQSl7dmFyIGUscj0wLGk9MCxmPTAsbj0wO2lmKGFyWyhBfD0wKT4+Ml09NTIyNCwwfChyPTB8YXJbQSs2OD4+Ml0pJiYoKDB8YXJbKGk9QSs3MnwwKT4+Ml0pIT0oMHxyKSYmKGFyW2k+PjJdPXIpLHZ1KHIpKSwoMHx0clsocj1BKzU2fDApKzExPj4wXSk8MCYmdnUoMHxhcltyPj4yXSksYXJbQT4+Ml09NDQwNCwwfChyPTB8YXJbKGU9QSs0NHwwKT4+Ml0pKXtpZigoMHwoaT0wfGFyWyhuPUErNDh8MCk+PjJdKSkhPSgwfHIpKXtmb3IoO2Y9aSstOHwwLGFyW24+PjJdPWYsKDB8KGk9KGk9MHxhcltpKy00Pj4yXSk/KGR1KGkpLDB8YXJbbj4+Ml0pOmYpKSE9KDB8cik7KTtyPTB8YXJbZT4+Ml19dnUocil9YXJbQT4+Ml09NDI2NCwocj0wfGFyW0ErMjQ+PjJdKSYmKCgwfGFyWyhpPUErMjh8MCk+PjJdKSE9KDB8cikmJihhcltpPj4yXT1yKSx2dShyKSksdnUoQSl9LGZ1bmN0aW9uKEEpe3ZhciBlLHIsaT0wLGY9MCxuPTAsdD0wO2lmKGFyWyhBfD0wKT4+Ml09NTI1Nixhclsocj1BKzE2fDApPj4yXT00NDA0LDB8KGk9MHxhclsoZT1BKzYwfDApPj4yXSkpe2lmKCgwfChmPTB8YXJbKHQ9QSs2NHwwKT4+Ml0pKSE9KDB8aSkpe2ZvcihuPWY7Zj1uKy04fDAsYXJbdD4+Ml09Ziwobj0wfGFyW24rLTQ+PjJdKSYmKGR1KG4pLGY9MHxhclt0Pj4yXSksKDB8ZikhPSgwfGkpOyluPWY7aT0wfGFyW2U+PjJdfXZ1KGkpfWFyW3I+PjJdPTQyNjQsKGk9MHxhcltBKzQwPj4yXSkmJigoMHxhclsoZj1BKzQ0fDApPj4yXSkhPSgwfGkpJiYoYXJbZj4+Ml09aSksdnUoaSkpLHR1KCl9LGZ1bmN0aW9uKEEpe3ZhciBlLHIsaT0wLGY9MCxuPTAsdD0wO2lmKGFyWyhBfD0wKT4+Ml09NTI1Nixhclsocj1BKzE2fDApPj4yXT00NDA0LDB8KGk9MHxhclsoZT1BKzYwfDApPj4yXSkpe2lmKCgwfChmPTB8YXJbKHQ9QSs2NHwwKT4+Ml0pKSE9KDB8aSkpe2ZvcihuPWY7Zj1uKy04fDAsYXJbdD4+Ml09Ziwobj0wfGFyW24rLTQ+PjJdKSYmKGR1KG4pLGY9MHxhclt0Pj4yXSksKDB8ZikhPSgwfGkpOyluPWY7aT0wfGFyW2U+PjJdfXZ1KGkpfWlmKGFyW3I+PjJdPTQyNjQsIShpPTB8YXJbQSs0MD4+Ml0pKXJldHVybiB0dSgpLHZvaWQgdnUoQSk7KDB8YXJbKGY9QSs0NHwwKT4+Ml0pIT0oMHxpKSYmKGFyW2Y+PjJdPWkpLHZ1KGkpLHR1KCksdnUoQSl9LGZ1bmN0aW9uKEEpe2lzWzUxMSZhclthclsoQT0oQXw9MCkrMTZ8MCk+PjJdPj4yXV0oQSl9LGZ1bmN0aW9uKEEpe3Z1KEF8PTApfSxmdW5jdGlvbihBKXt2YXIgZSxyPTAsaT0wLGY9MCxuPTA7aWYoYXJbKEF8PTApPj4yXT00NDA0LDB8KHI9MHxhclsoZT1BKzQ0fDApPj4yXSkpe2lmKCgwfChpPTB8YXJbKG49QSs0OHwwKT4+Ml0pKSE9KDB8cikpe2ZvcihmPWk7aT1mKy04fDAsYXJbbj4+Ml09aSwoZj0wfGFyW2YrLTQ+PjJdKSYmKGR1KGYpLGk9MHxhcltuPj4yXSksKDB8aSkhPSgwfHIpOylmPWk7cj0wfGFyW2U+PjJdfXZ1KHIpfWFyW0E+PjJdPTQyNjQsKHI9MHxhcltBKzI0Pj4yXSkmJigoMHxhclsoaT1BKzI4fDApPj4yXSkhPSgwfHIpJiYoYXJbaT4+Ml09ciksdnUocikpLHZ1KEEpfSxmdW5jdGlvbihBKXt2YXIgZSxyLGk9MCxmPTAsbj0wLHQ9MDtpZihhclsoQXw9MCk+PjJdPTUzMTYsYXJbKHI9QSsxNnwwKT4+Ml09NDQwNCwwfChpPTB8YXJbKGU9QSs2MHwwKT4+Ml0pKXtpZigoMHwoZj0wfGFyWyh0PUErNjR8MCk+PjJdKSkhPSgwfGkpKXtmb3Iobj1mO2Y9bistOHwwLGFyW3Q+PjJdPWYsKG49MHxhcltuKy00Pj4yXSkmJihkdShuKSxmPTB8YXJbdD4+Ml0pLCgwfGYpIT0oMHxpKTspbj1mO2k9MHxhcltlPj4yXX12dShpKX1hcltyPj4yXT00MjY0LChpPTB8YXJbQSs0MD4+Ml0pJiYoKDB8YXJbKGY9QSs0NHwwKT4+Ml0pIT0oMHxpKSYmKGFyW2Y+PjJdPWkpLHZ1KGkpKSx0dSgpfSxmdW5jdGlvbihBKXt2YXIgZSxyLGk9MCxmPTAsbj0wLHQ9MDtpZihhclsoQXw9MCk+PjJdPTUzMTYsYXJbKHI9QSsxNnwwKT4+Ml09NDQwNCwwfChpPTB8YXJbKGU9QSs2MHwwKT4+Ml0pKXtpZigoMHwoZj0wfGFyWyh0PUErNjR8MCk+PjJdKSkhPSgwfGkpKXtmb3Iobj1mO2Y9bistOHwwLGFyW3Q+PjJdPWYsKG49MHxhcltuKy00Pj4yXSkmJihkdShuKSxmPTB8YXJbdD4+Ml0pLCgwfGYpIT0oMHxpKTspbj1mO2k9MHxhcltlPj4yXX12dShpKX1pZihhcltyPj4yXT00MjY0LCEoaT0wfGFyW0ErNDA+PjJdKSlyZXR1cm4gdHUoKSx2b2lkIHZ1KEEpOygwfGFyWyhmPUErNDR8MCk+PjJdKSE9KDB8aSkmJihhcltmPj4yXT1pKSx2dShpKSx0dSgpLHZ1KEEpfSxmdW5jdGlvbihBKXtpc1s1MTEmYXJbYXJbKEE9KEF8PTApKzE2fDApPj4yXT4+Ml1dKEEpfSxmdW5jdGlvbihBKXt2dShBfD0wKX0sZnVuY3Rpb24oQSl7dmFyIGUscj0wLGk9MCxmPTAsbj0wO2lmKGFyWyhBfD0wKT4+Ml09NDQwNCwwfChyPTB8YXJbKGU9QSs0NHwwKT4+Ml0pKXtpZigoMHwoaT0wfGFyWyhuPUErNDh8MCk+PjJdKSkhPSgwfHIpKXtmb3IoZj1pO2k9ZistOHwwLGFyW24+PjJdPWksKGY9MHxhcltmKy00Pj4yXSkmJihkdShmKSxpPTB8YXJbbj4+Ml0pLCgwfGkpIT0oMHxyKTspZj1pO3I9MHxhcltlPj4yXX12dShyKX1hcltBPj4yXT00MjY0LChyPTB8YXJbQSsyND4+Ml0pJiYoKDB8YXJbKGk9QSsyOHwwKT4+Ml0pIT0oMHxyKSYmKGFyW2k+PjJdPXIpLHZ1KHIpKSx2dShBKX0sZnVuY3Rpb24oQSl7dmFyIGUscixpPTAsZj0wLG49MCx0PTA7aWYoYXJbKEF8PTApPj4yXT01Mzc2LGFyWyhyPUErMTZ8MCk+PjJdPTQ0MDQsMHwoaT0wfGFyWyhlPUErNjB8MCk+PjJdKSl7aWYoKDB8KGY9MHxhclsodD1BKzY0fDApPj4yXSkpIT0oMHxpKSl7Zm9yKG49ZjtmPW4rLTh8MCxhclt0Pj4yXT1mLChuPTB8YXJbbistND4+Ml0pJiYoZHUobiksZj0wfGFyW3Q+PjJdKSwoMHxmKSE9KDB8aSk7KW49ZjtpPTB8YXJbZT4+Ml19dnUoaSl9YXJbcj4+Ml09NDI2NCwoaT0wfGFyW0ErNDA+PjJdKSYmKCgwfGFyWyhmPUErNDR8MCk+PjJdKSE9KDB8aSkmJihhcltmPj4yXT1pKSx2dShpKSksdHUoKX0sZnVuY3Rpb24oQSl7dmFyIGUscixpPTAsZj0wLG49MCx0PTA7aWYoYXJbKEF8PTApPj4yXT01Mzc2LGFyWyhyPUErMTZ8MCk+PjJdPTQ0MDQsMHwoaT0wfGFyWyhlPUErNjB8MCk+PjJdKSl7aWYoKDB8KGY9MHxhclsodD1BKzY0fDApPj4yXSkpIT0oMHxpKSl7Zm9yKG49ZjtmPW4rLTh8MCxhclt0Pj4yXT1mLChuPTB8YXJbbistND4+Ml0pJiYoZHUobiksZj0wfGFyW3Q+PjJdKSwoMHxmKSE9KDB8aSk7KW49ZjtpPTB8YXJbZT4+Ml19dnUoaSl9aWYoYXJbcj4+Ml09NDI2NCwhKGk9MHxhcltBKzQwPj4yXSkpcmV0dXJuIHR1KCksdm9pZCB2dShBKTsoMHxhclsoZj1BKzQ0fDApPj4yXSkhPSgwfGkpJiYoYXJbZj4+Ml09aSksdnUoaSksdHUoKSx2dShBKX0sZnVuY3Rpb24oQSl7aXNbNTExJmFyW2FyWyhBPShBfD0wKSsxNnwwKT4+Ml0+PjJdXShBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3ZhciBlLHI9MCxpPTAsZj0wLG49MDtpZihhclsoQXw9MCk+PjJdPTQ0MDQsMHwocj0wfGFyWyhlPUErNDR8MCk+PjJdKSl7aWYoKDB8KGk9MHxhclsobj1BKzQ4fDApPj4yXSkpIT0oMHxyKSl7Zm9yKGY9aTtpPWYrLTh8MCxhcltuPj4yXT1pLChmPTB8YXJbZistND4+Ml0pJiYoZHUoZiksaT0wfGFyW24+PjJdKSwoMHxpKSE9KDB8cik7KWY9aTtyPTB8YXJbZT4+Ml19dnUocil9YXJbQT4+Ml09NDI2NCwocj0wfGFyW0ErMjQ+PjJdKSYmKCgwfGFyWyhpPUErMjh8MCk+PjJdKSE9KDB8cikmJihhcltpPj4yXT1yKSx2dShyKSksdnUoQSl9LGZ1bmN0aW9uKEEpe2FyWyhBfD0wKT4+Ml09NTQzNixiZShBKzE2fDApLHR1KCl9LGZ1bmN0aW9uKEEpe2FyWyhBfD0wKT4+Ml09NTQzNixiZShBKzE2fDApLHR1KCksdnUoQSl9LGZ1bmN0aW9uKEEpe2lzWzUxMSZhclthclsoQT0oQXw9MCkrMTZ8MCk+PjJdPj4yXV0oQSl9LGZ1bmN0aW9uKEEpe3Z1KEF8PTApfSxiZSxmdW5jdGlvbihBKXtiZShBfD0wKSx2dShBKX0sZnVuY3Rpb24oQSl7dmFyIGU9MCxyPTAsaT0wLGY9MCxuPTAsdD0wO2lmKCgwfChyPTB8YXJbKEF8PTApKzU2Pj4yXSkpIT0oMHwobj0wfGFyW0ErNjA+PjJdKSkpe2ZvcihlPTA7Oyl7aWYoNjU1MzU8KDB8YXJbcis0OD4+Ml0pPj4+MCl7ZT0xLHI9NjticmVha31pZigoMHwoaT0wfGFyW3IrNTI+PjJdKSkhPSgwfChmPTB8YXJbcis1Nj4+Ml0pKSlmb3IoO2U9KHQ9NjU1MzU8KDB8YXJbaT4+Ml0pPj4+MCk/MTplLCEodHwoMHwoaT1pKzR8MCkpPT0oMHxmKSk7KTtpZigoMHwocj1yKzY0fDApKT09KDB8bikpe3I9NjticmVha319NiE9KDB8cil8fCh0clsodD1BKzM3fDApPj4wXT1lKX1lbHNlIHRyWyhBPUErMzd8KG49MCkpPj4wXT1ufSxmdW5jdGlvbihBKXthclsoQXw9MCk+PjJdPTU0OTYsY2UoQSsxNnwwKSx0dSgpfSxmdW5jdGlvbihBKXthclsoQXw9MCk+PjJdPTU0OTYsY2UoQSsxNnwwKSx0dSgpLHZ1KEEpfSxmdW5jdGlvbihBKXtpc1s1MTEmYXJbYXJbKEE9KEF8PTApKzE2fDApPj4yXT4+Ml1dKEEpfSxmdW5jdGlvbihBKXt2dShBfD0wKX0sY2UsZnVuY3Rpb24oQSl7Y2UoQXw9MCksdnUoQSl9LGZ1bmN0aW9uKEEpe3ZhciBlLHIsaT0wLGY9MCxuPTAsdD0wO2lmKGFyWyhBfD0wKT4+Ml09NTU1Nixhclsocj1BKzE2fDApPj4yXT01NTg0LDB8KGk9MHxhcltBKzg0Pj4yXSkmJigoMHxhclsoZj1BKzg4fDApPj4yXSkhPSgwfGkpJiYoYXJbZj4+Ml09aSksdnUoaSkpLGFyW3I+PjJdPTQ0MDQsMHwoaT0wfGFyWyhlPUErNjB8MCk+PjJdKSl7aWYoKDB8KGY9MHxhclsodD1BKzY0fDApPj4yXSkpIT0oMHxpKSl7Zm9yKDtuPWYrLTh8MCxhclt0Pj4yXT1uLCgwfChmPShmPTB8YXJbZistND4+Ml0pPyhkdShmKSwwfGFyW3Q+PjJdKTpuKSkhPSgwfGkpOyk7aT0wfGFyW2U+PjJdfXZ1KGkpfWFyW3I+PjJdPTQyNjQsKGk9MHxhcltBKzQwPj4yXSkmJigoMHxhclsoZj1BKzQ0fDApPj4yXSkhPSgwfGkpJiYoYXJbZj4+Ml09aSksdnUoaSkpLHR1KCl9LGZ1bmN0aW9uKEEpe3ZhciBlLHIsaT0wLGY9MCxuPTAsdD0wO2lmKGFyWyhBfD0wKT4+Ml09NTU1Nixhclsocj1BKzE2fDApPj4yXT01NTg0LDB8KGk9MHxhcltBKzg0Pj4yXSkmJigoMHxhclsoZj1BKzg4fDApPj4yXSkhPSgwfGkpJiYoYXJbZj4+Ml09aSksdnUoaSkpLGFyW3I+PjJdPTQ0MDQsMHwoaT0wfGFyWyhlPUErNjB8MCk+PjJdKSl7aWYoKDB8KGY9MHxhclsodD1BKzY0fDApPj4yXSkpIT0oMHxpKSl7Zm9yKDtuPWYrLTh8MCxhclt0Pj4yXT1uLCgwfChmPShmPTB8YXJbZistND4+Ml0pPyhkdShmKSwwfGFyW3Q+PjJdKTpuKSkhPSgwfGkpOyk7aT0wfGFyW2U+PjJdfXZ1KGkpfWlmKGFyW3I+PjJdPTQyNjQsIShpPTB8YXJbQSs0MD4+Ml0pKXJldHVybiB0dSgpLHZvaWQgdnUoQSk7KDB8YXJbKGY9QSs0NHwwKT4+Ml0pIT0oMHxpKSYmKGFyW2Y+PjJdPWkpLHZ1KGkpLHR1KCksdnUoQSl9LGZ1bmN0aW9uKEEpe2lzWzUxMSZhclthclsoQT0oQXw9MCkrMTZ8MCk+PjJdPj4yXV0oQSl9LGZ1bmN0aW9uKEEpe3Z1KEF8PTApfSxmdW5jdGlvbihBKXt2YXIgZSxyPTAsaT0wLGY9MCxuPTA7aWYoYXJbKEF8PTApPj4yXT01NTg0LDB8KHI9MHxhcltBKzY4Pj4yXSkmJigoMHxhclsoaT1BKzcyfDApPj4yXSkhPSgwfHIpJiYoYXJbaT4+Ml09ciksdnUocikpLGFyW0E+PjJdPTQ0MDQsMHwocj0wfGFyWyhlPUErNDR8MCk+PjJdKSl7aWYoKDB8KGk9MHxhclsobj1BKzQ4fDApPj4yXSkpIT0oMHxyKSl7Zm9yKDtmPWkrLTh8MCxhcltuPj4yXT1mLCgwfChpPShpPTB8YXJbaSstND4+Ml0pPyhkdShpKSwwfGFyW24+PjJdKTpmKSkhPSgwfHIpOyk7cj0wfGFyW2U+PjJdfXZ1KHIpfWFyW0E+PjJdPTQyNjQsKGk9MHxhcltBKzI0Pj4yXSkmJigoMHxhclsocj1BKzI4fDApPj4yXSkhPSgwfGkpJiYoYXJbcj4+Ml09aSksdnUoaSkpfSxmdW5jdGlvbihBKXt2YXIgZSxyPTAsaT0wLGY9MCxuPTA7aWYoYXJbKEF8PTApPj4yXT01NTg0LDB8KHI9MHxhcltBKzY4Pj4yXSkmJigoMHxhclsoaT1BKzcyfDApPj4yXSkhPSgwfHIpJiYoYXJbaT4+Ml09ciksdnUocikpLGFyW0E+PjJdPTQ0MDQsMHwocj0wfGFyWyhlPUErNDR8MCk+PjJdKSl7aWYoKDB8KGk9MHxhclsobj1BKzQ4fDApPj4yXSkpIT0oMHxyKSl7Zm9yKDtmPWkrLTh8MCxhcltuPj4yXT1mLCgwfChpPShpPTB8YXJbaSstND4+Ml0pPyhkdShpKSwwfGFyW24+PjJdKTpmKSkhPSgwfHIpOyk7cj0wfGFyW2U+PjJdfXZ1KHIpfWFyW0E+PjJdPTQyNjQsKHI9MHxhcltBKzI0Pj4yXSkmJigoMHxhclsoaT1BKzI4fDApPj4yXSkhPSgwfHIpJiYoYXJbaT4+Ml09ciksdnUocikpLHZ1KEEpfSxmdW5jdGlvbihBKXt2YXIgZSxyLGk9MCxmPTAsbj0wLHQ9MDtpZihhclsoQXw9MCk+PjJdPTU2MTYsYXJbKHI9QSsxNnwwKT4+Ml09NTY0NCwwfChpPTB8YXJbQSs4OD4+Ml0pJiYoKDB8YXJbKGY9QSs5MnwwKT4+Ml0pIT0oMHxpKSYmKGFyW2Y+PjJdPWkpLHZ1KGkpKSxhcltyPj4yXT00NDA0LDB8KGk9MHxhclsoZT1BKzYwfDApPj4yXSkpe2lmKCgwfChmPTB8YXJbKHQ9QSs2NHwwKT4+Ml0pKSE9KDB8aSkpe2Zvcig7bj1mKy04fDAsYXJbdD4+Ml09biwoMHwoZj0oZj0wfGFyW2YrLTQ+PjJdKT8oZHUoZiksMHxhclt0Pj4yXSk6bikpIT0oMHxpKTspO2k9MHxhcltlPj4yXX12dShpKX1hcltyPj4yXT00MjY0LChpPTB8YXJbQSs0MD4+Ml0pJiYoKDB8YXJbKGY9QSs0NHwwKT4+Ml0pIT0oMHxpKSYmKGFyW2Y+PjJdPWkpLHZ1KGkpKSx0dSgpfSxmdW5jdGlvbihBKXt2YXIgZSxyLGk9MCxmPTAsbj0wLHQ9MDtpZihhclsoQXw9MCk+PjJdPTU2MTYsYXJbKHI9QSsxNnwwKT4+Ml09NTY0NCwwfChpPTB8YXJbQSs4OD4+Ml0pJiYoKDB8YXJbKGY9QSs5MnwwKT4+Ml0pIT0oMHxpKSYmKGFyW2Y+PjJdPWkpLHZ1KGkpKSxhcltyPj4yXT00NDA0LDB8KGk9MHxhclsoZT1BKzYwfDApPj4yXSkpe2lmKCgwfChmPTB8YXJbKHQ9QSs2NHwwKT4+Ml0pKSE9KDB8aSkpe2Zvcig7bj1mKy04fDAsYXJbdD4+Ml09biwoMHwoZj0oZj0wfGFyW2YrLTQ+PjJdKT8oZHUoZiksMHxhclt0Pj4yXSk6bikpIT0oMHxpKTspO2k9MHxhcltlPj4yXX12dShpKX1pZihhcltyPj4yXT00MjY0LCEoaT0wfGFyW0ErNDA+PjJdKSlyZXR1cm4gdHUoKSx2b2lkIHZ1KEEpOygwfGFyWyhmPUErNDR8MCk+PjJdKSE9KDB8aSkmJihhcltmPj4yXT1pKSx2dShpKSx0dSgpLHZ1KEEpfSxmdW5jdGlvbihBKXtpc1s1MTEmYXJbYXJbKEE9KEF8PTApKzE2fDApPj4yXT4+Ml1dKEEpfSxmdW5jdGlvbihBKXt2dShBfD0wKX0sZnVuY3Rpb24oQSl7dmFyIGUscj0wLGk9MCxmPTAsbj0wO2lmKGFyWyhBfD0wKT4+Ml09NTY0NCwwfChyPTB8YXJbQSs3Mj4+Ml0pJiYoKDB8YXJbKGk9QSs3NnwwKT4+Ml0pIT0oMHxyKSYmKGFyW2k+PjJdPXIpLHZ1KHIpKSxhcltBPj4yXT00NDA0LDB8KHI9MHxhclsoZT1BKzQ0fDApPj4yXSkpe2lmKCgwfChpPTB8YXJbKG49QSs0OHwwKT4+Ml0pKSE9KDB8cikpe2Zvcig7Zj1pKy04fDAsYXJbbj4+Ml09ZiwoMHwoaT0oaT0wfGFyW2krLTQ+PjJdKT8oZHUoaSksMHxhcltuPj4yXSk6ZikpIT0oMHxyKTspO3I9MHxhcltlPj4yXX12dShyKX1hcltBPj4yXT00MjY0LChpPTB8YXJbQSsyND4+Ml0pJiYoKDB8YXJbKHI9QSsyOHwwKT4+Ml0pIT0oMHxpKSYmKGFyW3I+PjJdPWkpLHZ1KGkpKX0sZnVuY3Rpb24oQSl7dmFyIGUscj0wLGk9MCxmPTAsbj0wO2lmKGFyWyhBfD0wKT4+Ml09NTY0NCwwfChyPTB8YXJbQSs3Mj4+Ml0pJiYoKDB8YXJbKGk9QSs3NnwwKT4+Ml0pIT0oMHxyKSYmKGFyW2k+PjJdPXIpLHZ1KHIpKSxhcltBPj4yXT00NDA0LDB8KHI9MHxhclsoZT1BKzQ0fDApPj4yXSkpe2lmKCgwfChpPTB8YXJbKG49QSs0OHwwKT4+Ml0pKSE9KDB8cikpe2Zvcig7Zj1pKy04fDAsYXJbbj4+Ml09ZiwoMHwoaT0oaT0wfGFyW2krLTQ+PjJdKT8oZHUoaSksMHxhcltuPj4yXSk6ZikpIT0oMHxyKTspO3I9MHxhcltlPj4yXX12dShyKX1hcltBPj4yXT00MjY0LChyPTB8YXJbQSsyND4+Ml0pJiYoKDB8YXJbKGk9QSsyOHwwKT4+Ml0pIT0oMHxyKSYmKGFyW2k+PjJdPXIpLHZ1KHIpKSx2dShBKX0sZnVuY3Rpb24oQSl7YXJbKEF8PTApPj4yXT01Njc2LHRlKEErMTZ8MCksdHUoKX0sZnVuY3Rpb24oQSl7YXJbKEF8PTApPj4yXT01Njc2LHRlKEErMTZ8MCksdHUoKSx2dShBKX0sZnVuY3Rpb24oQSl7aXNbNTExJmFyW2FyWyhBPShBfD0wKSsxNnwwKT4+Ml0+PjJdXShBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LHRlLGZ1bmN0aW9uKEEpe3RlKEF8PTApLHZ1KEEpfSxmdW5jdGlvbihBKXt2YXIgZSxyLGk9MCxmPTAsbj0wLHQ9MDtpZihhclsoQXw9MCk+PjJdPTU3MzYsYXJbKHI9QSsxNnwwKT4+Ml09NDQwNCwwfChpPTB8YXJbKGU9QSs2MHwwKT4+Ml0pKXtpZigoMHwoZj0wfGFyWyh0PUErNjR8MCk+PjJdKSkhPSgwfGkpKXtmb3Iobj1mO2Y9bistOHwwLGFyW3Q+PjJdPWYsKG49MHxhcltuKy00Pj4yXSkmJihkdShuKSxmPTB8YXJbdD4+Ml0pLCgwfGYpIT0oMHxpKTspbj1mO2k9MHxhcltlPj4yXX12dShpKX1hcltyPj4yXT00MjY0LChpPTB8YXJbQSs0MD4+Ml0pJiYoKDB8YXJbKGY9QSs0NHwwKT4+Ml0pIT0oMHxpKSYmKGFyW2Y+PjJdPWkpLHZ1KGkpKSx0dSgpfSxmdW5jdGlvbihBKXt2YXIgZSxyLGk9MCxmPTAsbj0wLHQ9MDtpZihhclsoQXw9MCk+PjJdPTU3MzYsYXJbKHI9QSsxNnwwKT4+Ml09NDQwNCwwfChpPTB8YXJbKGU9QSs2MHwwKT4+Ml0pKXtpZigoMHwoZj0wfGFyWyh0PUErNjR8MCk+PjJdKSkhPSgwfGkpKXtmb3Iobj1mO2Y9bistOHwwLGFyW3Q+PjJdPWYsKG49MHxhcltuKy00Pj4yXSkmJihkdShuKSxmPTB8YXJbdD4+Ml0pLCgwfGYpIT0oMHxpKTspbj1mO2k9MHxhcltlPj4yXX12dShpKX1pZihhcltyPj4yXT00MjY0LCEoaT0wfGFyW0ErNDA+PjJdKSlyZXR1cm4gdHUoKSx2b2lkIHZ1KEEpOygwfGFyWyhmPUErNDR8MCk+PjJdKSE9KDB8aSkmJihhcltmPj4yXT1pKSx2dShpKSx0dSgpLHZ1KEEpfSxmdW5jdGlvbihBKXtpc1s1MTEmYXJbYXJbKEE9KEF8PTApKzE2fDApPj4yXT4+Ml1dKEEpfSxmdW5jdGlvbihBKXt2dShBfD0wKX0sZnVuY3Rpb24oQSl7dmFyIGUscj0wLGk9MCxmPTAsbj0wO2lmKGFyWyhBfD0wKT4+Ml09NDQwNCwwfChyPTB8YXJbKGU9QSs0NHwwKT4+Ml0pKXtpZigoMHwoaT0wfGFyWyhuPUErNDh8MCk+PjJdKSkhPSgwfHIpKXtmb3IoZj1pO2k9ZistOHwwLGFyW24+PjJdPWksKGY9MHxhcltmKy00Pj4yXSkmJihkdShmKSxpPTB8YXJbbj4+Ml0pLCgwfGkpIT0oMHxyKTspZj1pO3I9MHxhcltlPj4yXX12dShyKX1hcltBPj4yXT00MjY0LChyPTB8YXJbQSsyND4+Ml0pJiYoKDB8YXJbKGk9QSsyOHwwKT4+Ml0pIT0oMHxyKSYmKGFyW2k+PjJdPXIpLHZ1KHIpKSx2dShBKX0sZnVuY3Rpb24oQSl7dmFyIGUscixpPTAsZj0wLG49MCx0PTA7aWYoYXJbKEF8PTApPj4yXT01Nzk2LGFyWyhyPUErMTZ8MCk+PjJdPTQ0MDQsMHwoaT0wfGFyWyhlPUErNjB8MCk+PjJdKSl7aWYoKDB8KGY9MHxhclsodD1BKzY0fDApPj4yXSkpIT0oMHxpKSl7Zm9yKG49ZjtmPW4rLTh8MCxhclt0Pj4yXT1mLChuPTB8YXJbbistND4+Ml0pJiYoZHUobiksZj0wfGFyW3Q+PjJdKSwoMHxmKSE9KDB8aSk7KW49ZjtpPTB8YXJbZT4+Ml19dnUoaSl9YXJbcj4+Ml09NDI2NCwoaT0wfGFyW0ErNDA+PjJdKSYmKCgwfGFyWyhmPUErNDR8MCk+PjJdKSE9KDB8aSkmJihhcltmPj4yXT1pKSx2dShpKSksdHUoKX0sZnVuY3Rpb24oQSl7dmFyIGUscixpPTAsZj0wLG49MCx0PTA7aWYoYXJbKEF8PTApPj4yXT01Nzk2LGFyWyhyPUErMTZ8MCk+PjJdPTQ0MDQsMHwoaT0wfGFyWyhlPUErNjB8MCk+PjJdKSl7aWYoKDB8KGY9MHxhclsodD1BKzY0fDApPj4yXSkpIT0oMHxpKSl7Zm9yKG49ZjtmPW4rLTh8MCxhclt0Pj4yXT1mLChuPTB8YXJbbistND4+Ml0pJiYoZHUobiksZj0wfGFyW3Q+PjJdKSwoMHxmKSE9KDB8aSk7KW49ZjtpPTB8YXJbZT4+Ml19dnUoaSl9aWYoYXJbcj4+Ml09NDI2NCwhKGk9MHxhcltBKzQwPj4yXSkpcmV0dXJuIHR1KCksdm9pZCB2dShBKTsoMHxhclsoZj1BKzQ0fDApPj4yXSkhPSgwfGkpJiYoYXJbZj4+Ml09aSksdnUoaSksdHUoKSx2dShBKX0sZnVuY3Rpb24oQSl7aXNbNTExJmFyW2FyWyhBPShBfD0wKSsxNnwwKT4+Ml0+PjJdXShBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3ZhciBlLHI9MCxpPTAsZj0wLG49MDtpZihhclsoQXw9MCk+PjJdPTQ0MDQsMHwocj0wfGFyWyhlPUErNDR8MCk+PjJdKSl7aWYoKDB8KGk9MHxhclsobj1BKzQ4fDApPj4yXSkpIT0oMHxyKSl7Zm9yKGY9aTtpPWYrLTh8MCxhcltuPj4yXT1pLChmPTB8YXJbZistND4+Ml0pJiYoZHUoZiksaT0wfGFyW24+PjJdKSwoMHxpKSE9KDB8cik7KWY9aTtyPTB8YXJbZT4+Ml19dnUocil9YXJbQT4+Ml09NDI2NCwocj0wfGFyW0ErMjQ+PjJdKSYmKCgwfGFyWyhpPUErMjh8MCk+PjJdKSE9KDB8cikmJihhcltpPj4yXT1yKSx2dShyKSksdnUoQSl9LGZ1bmN0aW9uKEEpe3ZhciBlLHIsaT0wLGY9MCxuPTAsdD0wO2lmKGFyWyhBfD0wKT4+Ml09NTg1Nixhclsocj1BKzE2fDApPj4yXT01ODg0LCgwfHRyWyhpPUErNzJ8MCkrMTE+PjBdKTwwJiZ2dSgwfGFyW2k+PjJdKSxhcltyPj4yXT00NDA0LDB8KGk9MHxhclsoZT1BKzYwfDApPj4yXSkpe2lmKCgwfChmPTB8YXJbKHQ9QSs2NHwwKT4+Ml0pKSE9KDB8aSkpe2Zvcig7bj1mKy04fDAsYXJbdD4+Ml09biwoMHwoZj0oZj0wfGFyW2YrLTQ+PjJdKT8oZHUoZiksMHxhclt0Pj4yXSk6bikpIT0oMHxpKTspO2k9MHxhcltlPj4yXX12dShpKX1hcltyPj4yXT00MjY0LChpPTB8YXJbQSs0MD4+Ml0pJiYoKDB8YXJbKGY9QSs0NHwwKT4+Ml0pIT0oMHxpKSYmKGFyW2Y+PjJdPWkpLHZ1KGkpKSx0dSgpfSxmdW5jdGlvbihBKXt2YXIgZSxyLGk9MCxmPTAsbj0wLHQ9MDtpZihhclsoQXw9MCk+PjJdPTU4NTYsYXJbKHI9QSsxNnwwKT4+Ml09NTg4NCwoMHx0clsoaT1BKzcyfDApKzExPj4wXSk8MCYmdnUoMHxhcltpPj4yXSksYXJbcj4+Ml09NDQwNCwwfChpPTB8YXJbKGU9QSs2MHwwKT4+Ml0pKXtpZigoMHwoZj0wfGFyWyh0PUErNjR8MCk+PjJdKSkhPSgwfGkpKXtmb3IoO249ZistOHwwLGFyW3Q+PjJdPW4sKDB8KGY9KGY9MHxhcltmKy00Pj4yXSk/KGR1KGYpLDB8YXJbdD4+Ml0pOm4pKSE9KDB8aSk7KTtpPTB8YXJbZT4+Ml19dnUoaSl9aWYoYXJbcj4+Ml09NDI2NCwhKGk9MHxhcltBKzQwPj4yXSkpcmV0dXJuIHR1KCksdm9pZCB2dShBKTsoMHxhclsoZj1BKzQ0fDApPj4yXSkhPSgwfGkpJiYoYXJbZj4+Ml09aSksdnUoaSksdHUoKSx2dShBKX0sZnVuY3Rpb24oQSl7aXNbNTExJmFyW2FyWyhBPShBfD0wKSsxNnwwKT4+Ml0+PjJdXShBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3ZhciBlLHI9MCxpPTAsZj0wLG49MDtpZihhclsoQXw9MCk+PjJdPTU4ODQsKDB8dHJbKHI9QSs1NnwwKSsxMT4+MF0pPDAmJnZ1KDB8YXJbcj4+Ml0pLGFyW0E+PjJdPTQ0MDQsMHwocj0wfGFyWyhlPUErNDR8MCk+PjJdKSl7aWYoKDB8KGk9MHxhclsobj1BKzQ4fDApPj4yXSkpIT0oMHxyKSl7Zm9yKDtmPWkrLTh8MCxhcltuPj4yXT1mLCgwfChpPShpPTB8YXJbaSstND4+Ml0pPyhkdShpKSwwfGFyW24+PjJdKTpmKSkhPSgwfHIpOyk7cj0wfGFyW2U+PjJdfXZ1KHIpfWFyW0E+PjJdPTQyNjQsKGk9MHxhcltBKzI0Pj4yXSkmJigoMHxhclsocj1BKzI4fDApPj4yXSkhPSgwfGkpJiYoYXJbcj4+Ml09aSksdnUoaSkpfSxmdW5jdGlvbihBKXt2YXIgZSxyPTAsaT0wLGY9MCxuPTA7aWYoYXJbKEF8PTApPj4yXT01ODg0LCgwfHRyWyhyPUErNTZ8MCkrMTE+PjBdKTwwJiZ2dSgwfGFyW3I+PjJdKSxhcltBPj4yXT00NDA0LDB8KHI9MHxhclsoZT1BKzQ0fDApPj4yXSkpe2lmKCgwfChpPTB8YXJbKG49QSs0OHwwKT4+Ml0pKSE9KDB8cikpe2Zvcig7Zj1pKy04fDAsYXJbbj4+Ml09ZiwoMHwoaT0oaT0wfGFyW2krLTQ+PjJdKT8oZHUoaSksMHxhcltuPj4yXSk6ZikpIT0oMHxyKTspO3I9MHxhcltlPj4yXX12dShyKX1hcltBPj4yXT00MjY0LChyPTB8YXJbQSsyND4+Ml0pJiYoKDB8YXJbKGk9QSsyOHwwKT4+Ml0pIT0oMHxyKSYmKGFyW2k+PjJdPXIpLHZ1KHIpKSx2dShBKX0sZnVuY3Rpb24oQSl7dmFyIGUscixpPTAsZj0wLG49MCx0PTA7aWYoYXJbKEF8PTApPj4yXT01OTE2LGFyWyhyPUErMTZ8MCk+PjJdPTU5NDQsMHwoaT0wfGFyW0ErNzY+PjJdKSYmZHUoaSksYXJbcj4+Ml09NDQwNCwwfChpPTB8YXJbKGU9QSs2MHwwKT4+Ml0pKXtpZigoMHwoZj0wfGFyWyh0PUErNjR8MCk+PjJdKSkhPSgwfGkpKXtmb3Iobj1mO2Y9bistOHwwLGFyW3Q+PjJdPWYsKG49MHxhcltuKy00Pj4yXSkmJihkdShuKSxmPTB8YXJbdD4+Ml0pLCgwfGYpIT0oMHxpKTspbj1mO2k9MHxhcltlPj4yXX12dShpKX1hcltyPj4yXT00MjY0LChpPTB8YXJbQSs0MD4+Ml0pJiYoKDB8YXJbKGY9QSs0NHwwKT4+Ml0pIT0oMHxpKSYmKGFyW2Y+PjJdPWkpLHZ1KGkpKSx0dSgpfSxmdW5jdGlvbihBKXt2YXIgZSxyLGk9MCxmPTAsbj0wLHQ9MDtpZihhclsoQXw9MCk+PjJdPTU5MTYsYXJbKHI9QSsxNnwwKT4+Ml09NTk0NCwwfChpPTB8YXJbQSs3Nj4+Ml0pJiZkdShpKSxhcltyPj4yXT00NDA0LDB8KGk9MHxhclsoZT1BKzYwfDApPj4yXSkpe2lmKCgwfChmPTB8YXJbKHQ9QSs2NHwwKT4+Ml0pKSE9KDB8aSkpe2ZvcihuPWY7Zj1uKy04fDAsYXJbdD4+Ml09Ziwobj0wfGFyW24rLTQ+PjJdKSYmKGR1KG4pLGY9MHxhclt0Pj4yXSksKDB8ZikhPSgwfGkpOyluPWY7aT0wfGFyW2U+PjJdfXZ1KGkpfWlmKGFyW3I+PjJdPTQyNjQsIShpPTB8YXJbQSs0MD4+Ml0pKXJldHVybiB0dSgpLHZvaWQgdnUoQSk7KDB8YXJbKGY9QSs0NHwwKT4+Ml0pIT0oMHxpKSYmKGFyW2Y+PjJdPWkpLHZ1KGkpLHR1KCksdnUoQSl9LGZ1bmN0aW9uKEEpe2lzWzUxMSZhclthclsoQT0oQXw9MCkrMTZ8MCk+PjJdPj4yXV0oQSl9LGZ1bmN0aW9uKEEpe3Z1KEF8PTApfSxmdW5jdGlvbihBKXt2YXIgZSxyPTAsaT0wLGY9MCxuPTA7aWYoYXJbKEF8PTApPj4yXT01OTQ0LDB8KHI9MHxhcltBKzYwPj4yXSkmJmR1KHIpLGFyW0E+PjJdPTQ0MDQsMHwocj0wfGFyWyhlPUErNDR8MCk+PjJdKSl7aWYoKDB8KGk9MHxhclsobj1BKzQ4fDApPj4yXSkpIT0oMHxyKSl7Zm9yKGY9aTtpPWYrLTh8MCxhcltuPj4yXT1pLChmPTB8YXJbZistND4+Ml0pJiYoZHUoZiksaT0wfGFyW24+PjJdKSwoMHxpKSE9KDB8cik7KWY9aTtyPTB8YXJbZT4+Ml19dnUocil9YXJbQT4+Ml09NDI2NCwoaT0wfGFyW0ErMjQ+PjJdKSYmKCgwfGFyWyhyPUErMjh8MCk+PjJdKSE9KDB8aSkmJihhcltyPj4yXT1pKSx2dShpKSl9LGZ1bmN0aW9uKEEpe3ZhciBlLHI9MCxpPTAsZj0wLG49MDtpZihhclsoQXw9MCk+PjJdPTU5NDQsMHwocj0wfGFyW0ErNjA+PjJdKSYmZHUociksYXJbQT4+Ml09NDQwNCwwfChyPTB8YXJbKGU9QSs0NHwwKT4+Ml0pKXtpZigoMHwoaT0wfGFyWyhuPUErNDh8MCk+PjJdKSkhPSgwfHIpKXtmb3IoZj1pO2k9ZistOHwwLGFyW24+PjJdPWksKGY9MHxhcltmKy00Pj4yXSkmJihkdShmKSxpPTB8YXJbbj4+Ml0pLCgwfGkpIT0oMHxyKTspZj1pO3I9MHxhcltlPj4yXX12dShyKX1hcltBPj4yXT00MjY0LChyPTB8YXJbQSsyND4+Ml0pJiYoKDB8YXJbKGk9QSsyOHwwKT4+Ml0pIT0oMHxyKSYmKGFyW2k+PjJdPXIpLHZ1KHIpKSx2dShBKX0sZnVuY3Rpb24oQSl7dmFyIGUscixpPTAsZj0wLG49MCx0PTA7aWYoYXJbKEF8PTApPj4yXT01OTc2LGFyWyhyPUErMTZ8MCk+PjJdPTYwMDQsMHwoaT0wfGFyW0ErNzI+PjJdKSYmKCgwfGFyWyhmPUErNzZ8MCk+PjJdKSE9KDB8aSkmJihhcltmPj4yXT1pKSx2dShpKSksYXJbcj4+Ml09NDQwNCwwfChpPTB8YXJbKGU9QSs2MHwwKT4+Ml0pKXtpZigoMHwoZj0wfGFyWyh0PUErNjR8MCk+PjJdKSkhPSgwfGkpKXtmb3IoO249ZistOHwwLGFyW3Q+PjJdPW4sKDB8KGY9KGY9MHxhcltmKy00Pj4yXSk/KGR1KGYpLDB8YXJbdD4+Ml0pOm4pKSE9KDB8aSk7KTtpPTB8YXJbZT4+Ml19dnUoaSl9YXJbcj4+Ml09NDI2NCwoaT0wfGFyW0ErNDA+PjJdKSYmKCgwfGFyWyhmPUErNDR8MCk+PjJdKSE9KDB8aSkmJihhcltmPj4yXT1pKSx2dShpKSksdHUoKX0sZnVuY3Rpb24oQSl7dmFyIGUscixpPTAsZj0wLG49MCx0PTA7aWYoYXJbKEF8PTApPj4yXT01OTc2LGFyWyhyPUErMTZ8MCk+PjJdPTYwMDQsMHwoaT0wfGFyW0ErNzI+PjJdKSYmKCgwfGFyWyhmPUErNzZ8MCk+PjJdKSE9KDB8aSkmJihhcltmPj4yXT1pKSx2dShpKSksYXJbcj4+Ml09NDQwNCwwfChpPTB8YXJbKGU9QSs2MHwwKT4+Ml0pKXtpZigoMHwoZj0wfGFyWyh0PUErNjR8MCk+PjJdKSkhPSgwfGkpKXtmb3IoO249ZistOHwwLGFyW3Q+PjJdPW4sKDB8KGY9KGY9MHxhcltmKy00Pj4yXSk/KGR1KGYpLDB8YXJbdD4+Ml0pOm4pKSE9KDB8aSk7KTtpPTB8YXJbZT4+Ml19dnUoaSl9aWYoYXJbcj4+Ml09NDI2NCwhKGk9MHxhcltBKzQwPj4yXSkpcmV0dXJuIHR1KCksdm9pZCB2dShBKTsoMHxhclsoZj1BKzQ0fDApPj4yXSkhPSgwfGkpJiYoYXJbZj4+Ml09aSksdnUoaSksdHUoKSx2dShBKX0sZnVuY3Rpb24oQSl7aXNbNTExJmFyW2FyWyhBPShBfD0wKSsxNnwwKT4+Ml0+PjJdXShBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3ZhciBlLHI9MCxpPTAsZj0wLG49MDtpZihhclsoQXw9MCk+PjJdPTYwMDQsMHwocj0wfGFyW0ErNTY+PjJdKSYmKCgwfGFyWyhpPUErNjB8MCk+PjJdKSE9KDB8cikmJihhcltpPj4yXT1yKSx2dShyKSksYXJbQT4+Ml09NDQwNCwwfChyPTB8YXJbKGU9QSs0NHwwKT4+Ml0pKXtpZigoMHwoaT0wfGFyWyhuPUErNDh8MCk+PjJdKSkhPSgwfHIpKXtmb3IoO2Y9aSstOHwwLGFyW24+PjJdPWYsKDB8KGk9KGk9MHxhcltpKy00Pj4yXSk/KGR1KGkpLDB8YXJbbj4+Ml0pOmYpKSE9KDB8cik7KTtyPTB8YXJbZT4+Ml19dnUocil9YXJbQT4+Ml09NDI2NCwoaT0wfGFyW0ErMjQ+PjJdKSYmKCgwfGFyWyhyPUErMjh8MCk+PjJdKSE9KDB8aSkmJihhcltyPj4yXT1pKSx2dShpKSl9LGZ1bmN0aW9uKEEpe3ZhciBlLHI9MCxpPTAsZj0wLG49MDtpZihhclsoQXw9MCk+PjJdPTYwMDQsMHwocj0wfGFyW0ErNTY+PjJdKSYmKCgwfGFyWyhpPUErNjB8MCk+PjJdKSE9KDB8cikmJihhcltpPj4yXT1yKSx2dShyKSksYXJbQT4+Ml09NDQwNCwwfChyPTB8YXJbKGU9QSs0NHwwKT4+Ml0pKXtpZigoMHwoaT0wfGFyWyhuPUErNDh8MCk+PjJdKSkhPSgwfHIpKXtmb3IoO2Y9aSstOHwwLGFyW24+PjJdPWYsKDB8KGk9KGk9MHxhcltpKy00Pj4yXSk/KGR1KGkpLDB8YXJbbj4+Ml0pOmYpKSE9KDB8cik7KTtyPTB8YXJbZT4+Ml19dnUocil9YXJbQT4+Ml09NDI2NCwocj0wfGFyW0ErMjQ+PjJdKSYmKCgwfGFyWyhpPUErMjh8MCk+PjJdKSE9KDB8cikmJihhcltpPj4yXT1yKSx2dShyKSksdnUoQSl9LGZ1bmN0aW9uKEEpe3ZhciBlLHIsaT0wLGY9MCxuPTAsdD0wO2lmKGFyWyhBfD0wKT4+Ml09NjAzNixhclsocj1BKzE2fDApPj4yXT00NDA0LDB8KGk9MHxhclsoZT1BKzYwfDApPj4yXSkpe2lmKCgwfChmPTB8YXJbKHQ9QSs2NHwwKT4+Ml0pKSE9KDB8aSkpe2ZvcihuPWY7Zj1uKy04fDAsYXJbdD4+Ml09Ziwobj0wfGFyW24rLTQ+PjJdKSYmKGR1KG4pLGY9MHxhclt0Pj4yXSksKDB8ZikhPSgwfGkpOyluPWY7aT0wfGFyW2U+PjJdfXZ1KGkpfWFyW3I+PjJdPTQyNjQsKGk9MHxhcltBKzQwPj4yXSkmJigoMHxhclsoZj1BKzQ0fDApPj4yXSkhPSgwfGkpJiYoYXJbZj4+Ml09aSksdnUoaSkpLHR1KCl9LGZ1bmN0aW9uKEEpe3ZhciBlLHIsaT0wLGY9MCxuPTAsdD0wO2lmKGFyWyhBfD0wKT4+Ml09NjAzNixhclsocj1BKzE2fDApPj4yXT00NDA0LDB8KGk9MHxhclsoZT1BKzYwfDApPj4yXSkpe2lmKCgwfChmPTB8YXJbKHQ9QSs2NHwwKT4+Ml0pKSE9KDB8aSkpe2ZvcihuPWY7Zj1uKy04fDAsYXJbdD4+Ml09Ziwobj0wfGFyW24rLTQ+PjJdKSYmKGR1KG4pLGY9MHxhclt0Pj4yXSksKDB8ZikhPSgwfGkpOyluPWY7aT0wfGFyW2U+PjJdfXZ1KGkpfWlmKGFyW3I+PjJdPTQyNjQsIShpPTB8YXJbQSs0MD4+Ml0pKXJldHVybiB0dSgpLHZvaWQgdnUoQSk7KDB8YXJbKGY9QSs0NHwwKT4+Ml0pIT0oMHxpKSYmKGFyW2Y+PjJdPWkpLHZ1KGkpLHR1KCksdnUoQSl9LGZ1bmN0aW9uKEEpe2lzWzUxMSZhclthclsoQT0oQXw9MCkrMTZ8MCk+PjJdPj4yXV0oQSl9LGZ1bmN0aW9uKEEpe3Z1KEF8PTApfSxmdW5jdGlvbihBKXt0dShBfD0wKX0sZnVuY3Rpb24oQSl7dHUoQXw9MCksdnUoQSl9LGZ1bmN0aW9uKEEpe2lzWzUxMSZhclthclsoQT0oQXw9MCkrMTJ8MCk+PjJdPj4yXV0oQSl9LGZ1bmN0aW9uKEEpe3Z1KEF8PTApfSxmdW5jdGlvbihBKXswfSxmdW5jdGlvbihBKXt2dShBfD0wKX0sZnVuY3Rpb24oQSl7dmFyIGUscjthclsoQXw9MCk+PjJdPTYxMjAsYXJbQSsxMj4+Ml09NjE0OCwoZT0wfGFyW0ErMjA+PjJdKSYmKCgwfGFyWyhyPUErMjR8MCk+PjJdKSE9KDB8ZSkmJihhcltyPj4yXT1lKSx2dShlKSksdHUoKX0sZnVuY3Rpb24oQSl7dmFyIGUscjtpZihhclsoQXw9MCk+PjJdPTYxMjAsYXJbQSsxMj4+Ml09NjE0OCwhKGU9MHxhcltBKzIwPj4yXSkpcmV0dXJuIHR1KCksdm9pZCB2dShBKTsoMHxhclsocj1BKzI0fDApPj4yXSkhPSgwfGUpJiYoYXJbcj4+Ml09ZSksdnUoZSksdHUoKSx2dShBKX0sZnVuY3Rpb24oQSl7aXNbNTExJmFyW2FyWyhBPShBfD0wKSsxMnwwKT4+Ml0+PjJdXShBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3ZhciBlO2FyWyhBfD0wKT4+Ml09NjE0OCwoZT0wfGFyW0ErOD4+Ml0pJiYoKDB8YXJbKEE9QSsxMnwwKT4+Ml0pIT0oMHxlKSYmKGFyW0E+PjJdPWUpLHZ1KGUpKX0sZnVuY3Rpb24oQSl7dmFyIGUscjthclsoQXw9MCk+PjJdPTYxNDgsKGU9MHxhcltBKzg+PjJdKSYmKCgwfGFyWyhyPUErMTJ8MCk+PjJdKSE9KDB8ZSkmJihhcltyPj4yXT1lKSx2dShlKSksdnUoQSl9LGZ1bmN0aW9uKEEpe2FyWyhBfD0wKT4+Ml09NjE4MCxYQShBKzE2fDApLHR1KCl9LGZ1bmN0aW9uKEEpe2FyWyhBfD0wKT4+Ml09NjE4MCxYQShBKzE2fDApLHR1KCksdnUoQSl9LGZ1bmN0aW9uKEEpe2lzWzUxMSZhclthclsoQT0oQXw9MCkrMTZ8MCk+PjJdPj4yXV0oQSl9LGZ1bmN0aW9uKEEpe3Z1KEF8PTApfSxmdW5jdGlvbihBKXthclsoQXw9MCk+PjJdPTYyMDgscG8oQSsxMnwwKSx0dSgpfSxmdW5jdGlvbihBKXthclsoQXw9MCk+PjJdPTYyMDgscG8oQSsxMnwwKSx0dSgpLHZ1KEEpfSxmdW5jdGlvbihBKXtwbygoQXw9MCkrMTJ8MCl9LGZ1bmN0aW9uKEEpe3Z1KEF8PTApfSxmdW5jdGlvbihBKXthclsoQXw9MCk+PjJdPTYzMzYsZ2woQSsxMnwwKSx0dSgpfSxmdW5jdGlvbihBKXthclsoQXw9MCk+PjJdPTYzMzYsZ2woQSsxMnwwKSx0dSgpLHZ1KEEpfSxmdW5jdGlvbihBKXtnbCgoQXw9MCkrMTJ8MCl9LGZ1bmN0aW9uKEEpe3Z1KEF8PTApfSxmdW5jdGlvbihBKXthclsoQXw9MCk+PjJdPTYzNjQsbG8oQSsxMnwwKSx0dSgpfSxmdW5jdGlvbihBKXthclsoQXw9MCk+PjJdPTYzNjQsbG8oQSsxMnwwKSx0dSgpLHZ1KEEpfSxmdW5jdGlvbihBKXtsbygoQXw9MCkrMTJ8MCl9LGZ1bmN0aW9uKEEpe3Z1KEF8PTApfSxmdW5jdGlvbihBKXthclsoQXw9MCk+PjJdPTYzOTIsRWwoQSsxNnwwKSx0dSgpfSxmdW5jdGlvbihBKXthclsoQXw9MCk+PjJdPTYzOTIsRWwoQSsxNnwwKSx0dSgpLHZ1KEEpfSxmdW5jdGlvbihBKXtFbCgoQXw9MCkrMTZ8MCl9LGZ1bmN0aW9uKEEpe3Z1KEF8PTApfSxmdW5jdGlvbihBKXt2YXIgZT0wLHI9MDthclsoQXw9MCk+PjJdPTY0MjAsMHwoZT0wfGFyW0ErNDA+PjJdKSYmKCgwfGFyWyhyPUErNDR8MCk+PjJdKSE9KDB8ZSkmJihhcltyPj4yXT1lKSx2dShlKSksKDB8dHJbKGU9QSsyOHwwKSsxMT4+MF0pPDAmJnZ1KDB8YXJbZT4+Ml0pLDA8PSgwfHRyWyhlPUErMTZ8MCkrMTE+PjBdKXx8dnUoMHxhcltlPj4yXSksdHUoKX0sZnVuY3Rpb24oQSl7dmFyIGU9MCxyPTA7aWYoYXJbKEF8PTApPj4yXT02NDIwLDB8KGU9MHxhcltBKzQwPj4yXSkmJigoMHxhclsocj1BKzQ0fDApPj4yXSkhPSgwfGUpJiYoYXJbcj4+Ml09ZSksdnUoZSkpLCgwfHRyWyhlPUErMjh8MCkrMTE+PjBdKTwwJiZ2dSgwfGFyW2U+PjJdKSwwPD0oMHx0clsoZT1BKzE2fDApKzExPj4wXSkpcmV0dXJuIHR1KCksdm9pZCB2dShBKTt2dSgwfGFyW2U+PjJdKSx0dSgpLHZ1KEEpfSxmdW5jdGlvbihBKXt2YXIgZT0wLHI9MDswfChlPTB8YXJbKEF8PTApKzQwPj4yXSkmJigoMHxhclsocj1BKzQ0fDApPj4yXSkhPSgwfGUpJiYoYXJbcj4+Ml09ZSksdnUoZSkpLCgwfHRyWyhlPUErMjh8MCkrMTE+PjBdKTwwJiZ2dSgwfGFyW2U+PjJdKSwwPD0oMHx0clsoZT1BKzE2fDApKzExPj4wXSl8fHZ1KDB8YXJbZT4+Ml0pfSxmdW5jdGlvbihBKXt2dShBfD0wKX0sZnVuY3Rpb24oQSl7dHUoQXw9MCl9LGZ1bmN0aW9uKEEpe3R1KEF8PTApLHZ1KEEpfSxmdW5jdGlvbihBKXtpc1s1MTEmYXJbYXJbKEE9KEF8PTApKzE2fDApPj4yXT4+Ml1dKEEpfSxmdW5jdGlvbihBKXt2dShBfD0wKX0sZnVuY3Rpb24oQSl7MH0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpezB9LGZ1bmN0aW9uKEEpe3Z1KEF8PTApfSxmdW5jdGlvbihBKXt2dShBfD0wKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3Z1KEF8PTApfSxmdW5jdGlvbihBKXt2dShBfD0wKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3Z1KEF8PTApfSxmdW5jdGlvbihBKXt2dShBfD0wKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3Z1KEF8PTApfSxmdW5jdGlvbihBKXt2dShBfD0wKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3Z1KEF8PTApfSxmdW5jdGlvbihBKXt2dShBfD0wKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3Z1KEF8PTApfSxmdW5jdGlvbihBKXt0dShBfD0wKX0sZnVuY3Rpb24oQSl7dHUoQXw9MCksdnUoQSl9LGZ1bmN0aW9uKEEpe2lzWzUxMSZhclthclsoQT0oQXw9MCkrMTJ8MCk+PjJdPj4yXV0oQSl9LGZ1bmN0aW9uKEEpe3Z1KEF8PTApfSxmdW5jdGlvbihBKXt0dShBfD0wKX0sZnVuY3Rpb24oQSl7dHUoQXw9MCksdnUoQSl9LGZ1bmN0aW9uKEEpe2lzWzUxMSZhclthclsoQT0oQXw9MCkrMTJ8MCk+PjJdPj4yXV0oQSl9LGZ1bmN0aW9uKEEpe3Z1KEF8PTApfSxmdW5jdGlvbihBKXt2dShBfD0wKX0sZnVuY3Rpb24oQSl7dHUoQXw9MCl9LGZ1bmN0aW9uKEEpe3R1KEF8PTApLHZ1KEEpfSxmdW5jdGlvbihBKXtpc1s1MTEmYXJbYXJbKEE9KEF8PTApKzEyfDApPj4yXT4+Ml1dKEEpfSxmdW5jdGlvbihBKXt2dShBfD0wKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3R1KEF8PTApfSxmdW5jdGlvbihBKXt0dShBfD0wKSx2dShBKX0sZnVuY3Rpb24oQSl7aXNbNTExJmFyW2FyWyhBPShBfD0wKSsxMnwwKT4+Ml0+PjJdXShBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3R1KEF8PTApfSxmdW5jdGlvbihBKXt0dShBfD0wKSx2dShBKX0sZnVuY3Rpb24oQSl7aXNbNTExJmFyW2FyWyhBPShBfD0wKSsxMnwwKT4+Ml0+PjJdXShBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3R1KEF8PTApfSxmdW5jdGlvbihBKXt0dShBfD0wKSx2dShBKX0sZnVuY3Rpb24oQSl7aXNbNTExJmFyW2FyWyhBPShBfD0wKSsxMnwwKT4+Ml0+PjJdXShBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3R1KEF8PTApfSxmdW5jdGlvbihBKXt0dShBfD0wKSx2dShBKX0sZnVuY3Rpb24oQSl7aXNbNTExJmFyW2FyWyhBPShBfD0wKSsxMnwwKT4+Ml0+PjJdXShBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3R1KEF8PTApfSxmdW5jdGlvbihBKXt0dShBfD0wKSx2dShBKX0sZnVuY3Rpb24oQSl7aXNbNTExJmFyW2FyWyhBPShBfD0wKSsxMnwwKT4+Ml0+PjJdXShBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3R1KEF8PTApfSxmdW5jdGlvbihBKXt0dShBfD0wKSx2dShBKX0sZnVuY3Rpb24oQSl7aXNbNTExJmFyW2FyWyhBPShBfD0wKSsxMnwwKT4+Ml0+PjJdXShBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3R1KEF8PTApfSxmdW5jdGlvbihBKXt0dShBfD0wKSx2dShBKX0sZnVuY3Rpb24oQSl7aXNbNTExJmFyW2FyWyhBPShBfD0wKSsxMnwwKT4+Ml0+PjJdXShBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3R1KEF8PTApfSxmdW5jdGlvbihBKXt0dShBfD0wKSx2dShBKX0sZnVuY3Rpb24oQSl7aXNbNTExJmFyW2FyWyhBPShBfD0wKSsxMnwwKT4+Ml0+PjJdXShBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3R1KEF8PTApfSxmdW5jdGlvbihBKXt0dShBfD0wKSx2dShBKX0sZnVuY3Rpb24oQSl7aXNbNTExJmFyW2FyWyhBPShBfD0wKSsxMnwwKT4+Ml0+PjJdXShBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3R1KEF8PTApfSxmdW5jdGlvbihBKXt0dShBfD0wKSx2dShBKX0sZnVuY3Rpb24oQSl7aXNbNTExJmFyW2FyWyhBPShBfD0wKSsxMnwwKT4+Ml0+PjJdXShBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3R1KEF8PTApfSxmdW5jdGlvbihBKXt0dShBfD0wKSx2dShBKX0sZnVuY3Rpb24oQSl7aXNbNTExJmFyW2FyWyhBPShBfD0wKSsxMnwwKT4+Ml0+PjJdXShBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3R1KEF8PTApfSxmdW5jdGlvbihBKXt0dShBfD0wKSx2dShBKX0sZnVuY3Rpb24oQSl7aXNbNTExJmFyW2FyWyhBPShBfD0wKSsxMnwwKT4+Ml0+PjJdXShBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3Z1KEF8PTApfSxmdW5jdGlvbihBKXt0dShBfD0wKX0sZnVuY3Rpb24oQSl7dHUoQXw9MCksdnUoQSl9LGZ1bmN0aW9uKEEpe2lzWzUxMSZhclthclsoQT0oQXw9MCkrMTJ8MCk+PjJdPj4yXV0oQSl9LGZ1bmN0aW9uKEEpe3Z1KEF8PTApfSxmdW5jdGlvbihBKXt2dShBfD0wKX0sZnVuY3Rpb24oQSl7dHUoQXw9MCl9LGZ1bmN0aW9uKEEpe3R1KEF8PTApLHZ1KEEpfSxmdW5jdGlvbihBKXtpc1s1MTEmYXJbYXJbKEE9KEF8PTApKzEyfDApPj4yXT4+Ml1dKEEpfSxmdW5jdGlvbihBKXt2dShBfD0wKX0sZnVuY3Rpb24oQSl7dHUoQXw9MCl9LGZ1bmN0aW9uKEEpe3R1KEF8PTApLHZ1KEEpfSxmdW5jdGlvbihBKXtpc1s1MTEmYXJbYXJbKEE9KEF8PTApKzEyfDApPj4yXT4+Ml1dKEEpfSxmdW5jdGlvbihBKXt2dShBfD0wKX0sZnVuY3Rpb24oQSl7dHUoQXw9MCl9LGZ1bmN0aW9uKEEpe3R1KEF8PTApLHZ1KEEpfSxmdW5jdGlvbihBKXtpc1s1MTEmYXJbYXJbKEE9KEF8PTApKzEyfDApPj4yXT4+Ml1dKEEpfSxmdW5jdGlvbihBKXt2dShBfD0wKX0sZnVuY3Rpb24oQSl7dHUoQXw9MCl9LGZ1bmN0aW9uKEEpe3R1KEF8PTApLHZ1KEEpfSxmdW5jdGlvbihBKXtpc1s1MTEmYXJbYXJbKEE9KEF8PTApKzEyfDApPj4yXT4+Ml1dKEEpfSxmdW5jdGlvbihBKXt2dShBfD0wKX0sZnVuY3Rpb24oQSl7KGZ1bmN0aW9uKEEpeyhmdW5jdGlvbihBKXtpZigoMHxhclszNzU4OTIrKEF8PTApPj4yXSk8PTApcmV0dXJuOyFmdW5jdGlvbihBKXt2YXIgZSxyLGksZj0wO3tpZihnYihlPTQyMCsoQXw9MCl8MCksdHJbQT4+MF09MSxaYigpLG1iKHI9QSs0NDh8MCksISgwPCgwfGFyWyhpPUErMTU2fDApPj4yXSkpKXJldHVybiBaQSgwfGUpLHNBKDB8cik7Zj0wfWZvcig7dkEoMHxhcltBKzI4KyhmPDwyKT4+Ml0sMCksZj1mKzF8MCwoMHxmKTwoMHxhcltpPj4yXSk7KTtaQSgwfGUpLHNBKDB8cil9KEErMzc1Mzk2fDApfSkoQXw9MCksMHxBJiZpc1s1MTEmYXJbNCsoMHxhcltBPj4yXSk+PjJdXShBKTtpZihBPTB8YXJbMTQxNTRdLGFyWzE0MTU0XT1BLTEsKDB8KEE9QSstMXwwKSk8MClyZXR1cm4gYXJbMTQxNTRdPTErKDB8YXJbMTQxNTRdKSxBPTEyO2lmKDB8QSlyZXR1cm4gQT0wO3FhKCksQT0wfSkoMHxhclsoQXw9MCk+PjJdKSxBJiZ2dShBKX0sTWUsZnVuY3Rpb24oQSl7TWUoQXw9MCksdnUoQSl9LGZ1bmN0aW9uKEEpezB9LGZ1bmN0aW9uKEEpe3Z1KEF8PTApfSxmdW5jdGlvbihBKXswfSxmdW5jdGlvbihBKXt2dShBfD0wKX0sZnVuY3Rpb24oQSl7dmFyIGUscixpLGYsbix0LG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTA7YXJbKHQ9KEF8PTApKzR8MCk+PjJdPTEsbGEoMHxhclsobj1BKzEyfDApPj4yXSxBKSxvPTB8YXJbbj4+Ml0sdT0odz0wfGFyW28rNTgyMD4+Ml0pKy0xfDAsaT0xPDwoYj0wfGFyW28rNTgwND4+Ml0pLGw9QSsyNHwwLGJhKG8sQSx1LDB8YXJbKGY9QSs4fDApPj4yXSwwfGFyW2w+PjJdKSwwPCgwfChvPTB8YXJbZj4+Ml0pKSYmKGJhKDB8YXJbbj4+Ml0sQSx1LG8rLTF8MCwwfGFyW2w+PjJdKSxvPTB8YXJbZj4+Ml0pLGE9bysxfDAsYz0wfGFyW24+PjJdLCgwfGEpPCgwfGFyW2MrNTgyOD4+Ml0pJiYoYmEoYyxBLHUsYSwwfGFyW2w+PjJdKSxvPTB8YXJbZj4+Ml0pLHI9QSsxNnwwLGZ1bmN0aW9uKEEsZSxyLGkpe0F8PTAscnw9MCxpfD0wO3ZhciBmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTA7aWYoYz0oMHwoYz0wfGFyWyhlfD0wKSsyOD4+Ml0pKTwoMHxpKT9jOmksMSZyfDAmJnNyKDM2NzY1LDM2NjYzLDUzNSwzNjc4MCksMSZjfDAmJnNyKDM2Nzk2LDM2NjYzLDUzNiwzNjc4MCksbj0oNysoMHxhcltBKzU3NjA+PjJdKXwwKS84fDAscz0oNysoMHxhcltBKzU3Njg+PjJdKXwwKS84fDAsKDB8KGk9MHxhclsodD1lKzQwfDApPj4yXSkpIT0oMHwoZj0wfGFyWyhvPUErNDB8MCk+PjJdKSkpe2lmKCgwfHIpPCgwfGMpJiYobD1BKzR8MCx1PWUrNHwwLGI9ZSsyNHwwLGE9MHxicihuLHIpLGhiKDB8KGY9KDB8YXJbbD4+Ml0pKygwfGJyKGEsZikpfDApLDB8KGE9KDB8YXJbdT4+Ml0pKygwfGJyKGEsaSkpfDApLDB8YnIoMHxhcltiPj4yXSxuKSksKDB8KGE9cisxfDApKTwoMHxjKSkpZm9yKGk9YTthPTB8YnIoaSxuKSxoYigwfChmPSgwfGFyW2w+PjJdKSsoMHxicihhLDB8YXJbbz4+Ml0pKXwwKSwwfChhPSgwfGFyW3U+PjJdKSsoMHxicihhLDB8YXJbdD4+Ml0pKXwwKSwwfGJyKDB8YXJbYj4+Ml0sbikpLCgwfChpPWkrMXwwKSk8KDB8Yyk7KTt9ZWxzZSBoYigwfChiPSgwfGFyW0ErND4+Ml0pKygwfGJyKDB8YnIobixyKSxpKSl8MCksKDB8YXJbZSs0Pj4yXSkrKDB8YnIoMHxicihpLHIpLG4pKXwwLDB8YnIoMHxicihuLGMtcnwwKSxpKSk7aWYoaT0oMHxyKS8oMHwoYT0wfGFyW2UrNTc4ND4+Ml0pKXwwLGE9KDB8YykvKDB8YSl8MCwwfGFyW2UrMjA+PjJdKXtpZigoMHwoZj0wfGFyWyhjPWUrNDR8MCk+PjJdKSk9PSgwfChuPTB8YXJbKHI9QSs0NHwwKT4+Ml0pKSlyZXR1cm4gdT0wfGJyKGkscyksbD0wfGJyKHUsZiksYj0wfGJyKGEtaXwwLHMpLGhiKCgwfGFyW0ErOD4+Ml0pK2x8MCwoMHxhcltlKzg+PjJdKStsfDAsMHxicihiLGYpKSxzPTB8YXJbcj4+Ml0sdT0wfGJyKHUscyksaGIoKDB8YXJbQSsxMj4+Ml0pK3V8MCwoMHxhcltlKzEyPj4yXSkrdXwwLDB8YnIoYixzKSk7aWYoISgoMHxhKTw9KDB8aSkpKWZvcihsPUErOHwwLHU9ZSs4fDAsYj1lKzMyfDAsbz1BKzEyfDAsdD1lKzEyfDA7ZT0wfGJyKGkscyksaGIoMHwobj0oMHxhcltsPj4yXSkrKDB8YnIoZSxuKSl8MCksMHwoQT0oMHxhclt1Pj4yXSkrKDB8YnIoZSxmKSl8MCksMHxicigwfGFyW2I+PjJdLHMpKSxoYigwfChBPSgwfGFyW28+PjJdKSsoMHxicihlLDB8YXJbcj4+Ml0pKXwwKSwwfChlPSgwfGFyW3Q+PjJdKSsoMHxicihlLDB8YXJbYz4+Ml0pKXwwKSwwfGJyKDB8YXJbYj4+Ml0scykpLCgwfChpPWkrMXwwKSkhPSgwfGEpOyluPTB8YXJbcj4+Ml0sZj0wfGFyW2M+PjJdfX0oMHxhclsoZT1BKzIwfDApPj4yXSwwfGFyW3I+PjJdLG88PGIsbysxPDxiKSxvPTB8YXJbbj4+Ml07QTpkb3tpZigwPCgwfGFyW28rNTgyMD4+Ml0pKXtoPTA7ZG97aWYoYj0wfGFyW2Y+PjJdLGE9KDB8YnIoMHxhcltvKzEwMzUyPj4yXSxiKSkraHwwLGE9MHxsclsoMHxhcltvKzEwMzQwPj4yXSkrKDI0KmF8MCkrMj4+MV0sYz0wfGFyW28rNDg+PjJdLGE+Pj4wPj0oMHxhcltvKzUyPj4yXSktYz4+Mj4+PjApYnJlYWsgQTtpZighKGs9MHxhcltjKyhhPDwyKT4+Ml0pKWJyZWFrIEE7ZG97aWYoMHx0cltrKzMyNT4+MF0pe2lmKGE9MHxhcltyPj4yXSxsPTB8YXJbYSs0Pj4yXSxhPTB8YXJbYSs0MD4+Ml0sYz0wfGFyW2U+PjJdLHU9MHxhcltjKzQ+PjJdLGM9MHxhcltjKzQwPj4yXSw4PCgwfGFyW28rNTc2MD4+Ml0pKXtSYShvLGgsYixrLDAsaSxpLGwsYSx1LGMpO2JyZWFrfU5hKG8saCxiLGssMCxpLGksbCxhLHUsYyk7YnJlYWt9fXdoaWxlKDApO2Rve2lmKDB8dHJbayszMjY+PjBdKXtpZihjPTB8YXJbbj4+Ml0scz0oMHxpKS8oMHxhcltjKzU3ODA+PjJdKXwwLGQ9KDB8aSkvKDB8YXJbYys1Nzg0Pj4yXSl8MCxsPTB8YXJbZj4+Ml0sYT0wfGFyW3I+PjJdLHU9MHxhclthKzg+PjJdLGE9MHxhclthKzQ0Pj4yXSxvPTB8YXJbZT4+Ml0sYj0wfGFyW28rOD4+Ml0sbz0wfGFyW28rNDQ+PjJdLCg4PCgwfGFyW2MrNTc2OD4+Ml0pP1JhOk5hKShjLGgsbCxrLDEscyxkLHUsYSxiLG8pLHU9MHxhcltuPj4yXSxiPTB8YXJbZj4+Ml0sYT0wfGFyW3I+PjJdLGM9MHxhclthKzEyPj4yXSxhPTB8YXJbYSs0ND4+Ml0sbz0wfGFyW2U+PjJdLGw9MHxhcltvKzEyPj4yXSxvPTB8YXJbbys0ND4+Ml0sODwoMHxhclt1KzU3Njg+PjJdKSl7UmEodSxoLGIsaywyLHMsZCxjLGEsbCxvKTticmVha31OYSh1LGgsYixrLDIscyxkLGMsYSxsLG8pO2JyZWFrfX13aGlsZSgwKTtoPWgrMXwwLG89MHxhcltuPj4yXX13aGlsZSgoMHxoKTwoMHxhcltvKzU4MjA+PjJdKSl9fXdoaWxlKDApO2lmKCEoMDwoMHx3KSkpcmV0dXJuIHc9byxhclt0Pj4yXT0zLHZvaWQgdWEodyxBKTtmb3IoYT0wO1RuKCgwfGFyW28rMTA1MjQ+PjJdKSsoODAqKCgwfGJyKDB8YXJbZj4+Ml0sMHxhcltvKzU4MjA+PjJdKSkrYXwwKXwwKXwwLDQpLGE9YSsxfDAsbz0wfGFyW24+PjJdLCgwfGEpIT0oMHx3KTspO2FyW3Q+PjJdPTMsdWEobyxBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3ZhciBlLHIsaSxmPTAsbj0wLHQ9MCxvPTA7ZT0wfGFyWyhBfD0wKSsyMD4+Ml0scj0wfGFyWyhuPTE4NTk2K2V8MCk+PjJdLGFyWyhpPUErNHwwKT4+Ml09MSxsYShyLEEpLG49MHxhcltuPj4yXSx0PTB8YXJbNCtlPj4yXSxmPTB8YXJbbis1ODM2Pj4yXSxvPTB8YXJbbis1ODIwPj4yXSwoMHx0KTwoMHxmKSYmKGY9MHxhclsoMHxhcltuKzEwMjg0Pj4yXSkrKHQ8PDIpPj4yXSksYXJbZT4+Ml09Zixhcls4K2U+PjJdPSgwfGYpJSgwfG8pfDAsYXJbMTIrZT4+Ml09KDB8ZikvKDB8byl8MCxmPUErOHwwO2Rve2lmKDB8dHJbZj4+MF0pe2lmKCEoMHxEYShlKSkpcmV0dXJuIGFyW2k+PjJdPTMsVW4oNDQrKDB8YXJbMTg2MDgrZT4+Ml0pfDAsMSksdm9pZCB1YShyLEEpfWVsc2V7aWYobj0wfGFyWzE4NjAwK2U+PjJdLCh0PTB8YXJbbis3OTY+PjJdKT4+PjA8Myl7aHQoMTg1ODArZXwwLHQsMHxhcltuKzc5Mj4+Ml0pLHRyWyhvPTE4NTg4K2V8MCk+PjBdPTAsdHJbbysxPj4wXT0wLHRyW28rMj4+MF09MCx0cltvKzM+PjBdPTA7YnJlYWt9c3IoMzkyMTEsMzkyNDIsMTUwOCwzOTI1MSl9fXdoaWxlKDApO3R0KDE4NTU2K2V8MCksSmEoZSwwLDAhPSgwfHRyW2Y+PjBdKSksYXJbaT4+Ml09MyxVbig0NCsoMHxhclsxODYwOCtlPj4yXSl8MCwxKSx1YShyLEEpfSxmdW5jdGlvbihBKXt2dShBfD0wKX0sZnVuY3Rpb24oQSl7dmFyIGUscixpLGYsbix0LG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wO2lmKGY9MHxhclsoQXw9MCkrMTY+PjJdLG49MHxhclsobD0xODU5NitmfDApPj4yXSxyPTB8YXJbKGk9NTgyMCtufDApPj4yXSxhclsodD1BKzR8MCk+PjJdPTEsbGEobixBKSxsPTB8YXJbbD4+Ml0sYz0wfGFyWzQrZj4+Ml0sYT0wfGFyW2wrNTgzNj4+Ml0sdT0wfGFyW2wrNTgyMD4+Ml0sKDB8Yyk8KDB8YSkmJihhPTB8YXJbKDB8YXJbbCsxMDI4ND4+Ml0pKyhjPDwyKT4+Ml0pLGFyW2Y+PjJdPWEsYXJbKGM9OCtmfDApPj4yXT0oMHxhKSUoMHx1KXwwLGFyWyhsPTEyK2Z8MCk+PjJdPSgwfGEpLygwfHUpfDAsZT0oMHxhKS8oMHxyKXwwLDB8dHJbKGE9QSs4fDApPj4wXSYmISgwfERhKGYpKSl7aWYoMDwoMHxyKSlmb3IoYz0xMDUyNCtufDAsYT0wfGJyKGUsciksbz0wO1RuKCgwfGFyW2M+PjJdKSsoODAqKG8rYXwwKXwwKXwwLDEpLCgwfChvPW8rMXwwKSkhPSgwfHIpOyk7cmV0dXJuIGFyW3Q+PjJdPTMsVW4oNDQrKDB8YXJbMTg2MDgrZj4+Ml0pfDAsMSksdm9pZCB1YShuLEEpfXR0KDE4NTU2K2Z8MCksSmEoZiwxLGE9MHx0clthPj4wXT8wPT0oMHx0clsxMisoMHxhclsxODYwMCtmPj4yXSk+PjBdKTowKTtBOmRve2lmKCgwfGFyW2w+PjJdKT09KDB8ZSkmJihiPTB8YXJbaT4+Ml0sbz0wfGFyW2M+PjJdLCgwfG8pPCgwfGIpKSlmb3IodT01ODI4K258MCxjPTB8YnIoZSxyKSxsPTEwNTI0K258MCxhPWI7Oyl7aWYoKDB8byk8KDB8YSkmJigwfGUpPCgwfGFyW3U+PjJdKSYmVG4oKDB8YXJbbD4+Ml0pKyg4MCoobytjfDApfDApfDAsMSksKDB8KG89bysxfDApKT09KDB8YikpYnJlYWsgQTthPTB8YXJbaT4+Ml19fXdoaWxlKDApO2FyW3Q+PjJdPTMsVW4oNDQrKDB8YXJbMTg2MDgrZj4+Ml0pfDAsMSksdWEobixBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3ZhciBlLHIsaSxmLG4sdCxvLGEsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wO2FyWyhhPShBfD0wKSs0fDApPj4yXT0xLGxhKDB8YXJbKHQ9QSs4fDApPj4yXSxBKSxlPTB8YXJbdD4+Ml0saT0wfGFyWzEwNDcyK2U+PjJdLGQ9KDB8YXJbNTgxMitlPj4yXSkvNHwwLGM9MHxhclsobj1BKzEyfDApPj4yXSxyPTB8YnIoYyxkKSxkPTB8YnIobD1jKzF8MCxkKSxkPSgwfChzPTB8YXJbMTA0NzYrZT4+Ml0pKTwoMHxkKT9zOmQsZj0oaz0wIT0oMHx0clsocz1BKzE2fDApPj4wXSkpPzI6Myx1PShvPTB8YXJbNTgyMCtlPj4yXSktMXwwLGs/YmEoZSxBLHUsKDB8KGs9KDB8YXJbNTgyOCtlPj4yXSktMXwwKSk8KDB8bCk/azpsLDEpOigwPCgwfGMpPyhiYShlLEEsdSxjKy0xfDAsMiksbD0wfGFyW3Q+PjJdLGM9MHxhcltuPj4yXSk6bD1lLGJhKGwsQSx1LGMsMiksYz0xKygwfGFyW24+PjJdKXwwLGw9MHxhclt0Pj4yXSwoMHxjKTwoMHxhcltsKzU4Mjg+PjJdKSYmYmEobCxBLHUsYywyKSksYz0wfGFyW3Q+PjJdLGw9MHxhcltuPj4yXSwwfHRyW3M+PjBdPyhrPTB8WnQoYyxsKSxjPTB8YXJbdD4+Ml0sdT0wfGJyKDB8YXJbYysxMDM1Mj4+Ml0sMHxhcltuPj4yXSksdHJbKDB8YXJbYysxMDM0MD4+Ml0pKygyNCp1fDApKzIxPj4wXT0xJmssayYmKGw9MCE9KDB8dHJbcz4+MF0pLGI9MTEpKTooaz0wfGJyKDB8YXJbYysxMDM1Mj4+Ml0sbCksMHx0clsoMHxhcltjKzEwMzQwPj4yXSkrKDI0Kmt8MCkrMjE+PjBdJiYobD0wLGI9MTEpKTtkb3tpZigxMT09KDB8YikmJihwdChjLGwscixkLDAsaSksYz0wfGFyW3Q+PjJdLGw9MCE9KDB8dHJbcz4+MF0pLCg4PCgwfGFyW2MrNTc2MD4+Ml0pP3l0OkJ0KShjLGwscixkLDAsaSksbD0wfGFyW3Q+PjJdLDB8YXJbbCs1Nzc2Pj4yXSkpe2lmKGM9MCE9KDB8dHJbcz4+MF0pLDg8KDB8YXJbbCs1NzY4Pj4yXSkpe0V0KGwsYyxyLGQsMCxpKTticmVha31YdChsLGMscixkLDAsaSk7YnJlYWt9fXdoaWxlKDApO2lmKGM9MHxhclt0Pj4yXSwhKDA8KDB8bykpKXJldHVybiBrPWMsYXJbYT4+Ml09Myx2b2lkIHVhKGssQSk7Zm9yKGw9MDtUbigoMHxhcltjKzEwNTI0Pj4yXSkrKDgwKigoMHxicigwfGFyW24+PjJdLDB8YXJbYys1ODIwPj4yXSkpK2x8MCl8MCl8MCxmKSxsPWwrMXwwLGM9MHxhclt0Pj4yXSwoMHxsKSE9KDB8byk7KTthclthPj4yXT0zLHVhKGMsQSl9LHNmLGZ1bmN0aW9uKEEpe3NmKEF8PTApLHZ1KEEpfSxrZixmdW5jdGlvbihBKXtrZihBfD0wKSx2dShBKX0sbWYsZnVuY3Rpb24oQSl7bWYoQXw9MCksdnUoQSl9LFhmLFdmLGZ1bmN0aW9uKEEpe1hmKChBfD0wKSsoMHxhclsoMHxhcltBPj4yXSktMTI+PjJdKXwwKX0sZnVuY3Rpb24oQSl7V2YoKEF8PTApKygwfGFyWygwfGFyW0E+PjJdKS0xMj4+Ml0pfDApfSxWZixGZixmdW5jdGlvbihBKXtWZigoQXw9MCkrKDB8YXJbKDB8YXJbQT4+Ml0pLTEyPj4yXSl8MCl9LGZ1bmN0aW9uKEEpe0ZmKChBfD0wKSsoMHxhclsoMHxhcltBPj4yXSktMTI+PjJdKXwwKX0sQW4sZnVuY3Rpb24oQSl7QW4oQXw9MCksdnUoQSl9LGVuLGZ1bmN0aW9uKEEpe2VuKEF8PTApLHZ1KEEpfSxybixmdW5jdGlvbihBKXtybihBfD0wKSx2dShBKX0sbm4sZnVuY3Rpb24oQSl7bm4oQXw9MCksdnUoQSl9LG9uLGZ1bmN0aW9uKEEpe29uKEF8PTApLHZ1KEEpfSxmdW5jdGlvbihBKXswfChBfD0wKSYmaXNbNTExJmFyWzQrKDB8YXJbQT4+Ml0pPj4yXV0oQSl9LGNuLGZ1bmN0aW9uKEEpe2NuKCksdnUoQXw9MCl9LGZ1bmN0aW9uKEEpe2FuKCl9LGZ1bmN0aW9uKEEpe2FuKCksdnUoQXw9MCl9LGZ1bmN0aW9uKEEpe2FuKCl9LGZ1bmN0aW9uKEEpe2FuKCksdnUoQXw9MCl9LGZ1bmN0aW9uKEEpe2FuKEF8PTApfSxmdW5jdGlvbihBKXthbihBfD0wKSx2dShBKX0sZnVuY3Rpb24oQSl7YW4oQXw9MCl9LGZ1bmN0aW9uKEEpe2FuKEF8PTApLHZ1KEEpfSxmdW5jdGlvbihBKXthbihBfD0wKX0sZnVuY3Rpb24oQSl7YW4oQXw9MCksdnUoQSl9LGZ1bmN0aW9uKEEpe2FuKEF8PTApfSxmdW5jdGlvbihBKXthbihBfD0wKSx2dShBKX0sZnVuY3Rpb24oQSl7bmkoKEF8PTApKzh8MCksYW4oKX0sZnVuY3Rpb24oQSl7bmkoKEF8PTApKzh8MCksYW4oKSx2dShBKX0sZnVuY3Rpb24oQSl7bmkoKEF8PTApKzh8MCksYW4oKX0sZnVuY3Rpb24oQSl7bmkoKEF8PTApKzh8MCksYW4oKSx2dShBKX0sZnVuY3Rpb24oQSl7YW4oQXw9MCl9LGZ1bmN0aW9uKEEpe2FuKEF8PTApLHZ1KEEpfSxmdW5jdGlvbihBKXthbihBfD0wKX0sZnVuY3Rpb24oQSl7YW4oQXw9MCksdnUoQSl9LGZ1bmN0aW9uKEEpe2FuKEF8PTApfSxmdW5jdGlvbihBKXthbihBfD0wKSx2dShBKX0sZnVuY3Rpb24oQSl7YW4oQXw9MCl9LGZ1bmN0aW9uKEEpe2FuKEF8PTApLHZ1KEEpfSxmdW5jdGlvbihBKXthbihBfD0wKX0sZnVuY3Rpb24oQSl7YW4oQXw9MCksdnUoQSl9LGZ1bmN0aW9uKEEpe2FuKEF8PTApfSxmdW5jdGlvbihBKXthbihBfD0wKSx2dShBKX0sZnVuY3Rpb24oQSl7YW4oQXw9MCl9LGZ1bmN0aW9uKEEpe2FuKEF8PTApLHZ1KEEpfSxmdW5jdGlvbihBKXthbihBfD0wKX0sZnVuY3Rpb24oQSl7YW4oQXw9MCksdnUoQSl9LGZ1bmN0aW9uKEEpe2FuKCl9LGZ1bmN0aW9uKEEpe2FuKCksdnUoQXw9MCl9LGZ1bmN0aW9uKEEpe2FuKCl9LGZ1bmN0aW9uKEEpe2FuKCksdnUoQXw9MCl9LGFuLGZ1bmN0aW9uKEEpe2FuKCksdnUoQXw9MCl9LGZ1bmN0aW9uKEEpe2FuKCksdnUoQXw9MCl9LFFsLGZ1bmN0aW9uKEEpe1FsKEF8PTApLHZ1KEEpfSxEbCxmdW5jdGlvbihBKXtEbChBfD0wKSx2dShBKX0sSmwsZnVuY3Rpb24oQSl7SmwoQXw9MCksdnUoQSl9LFNsLGZ1bmN0aW9uKEEpe1NsKEF8PTApLHZ1KEEpfSxPbCxmdW5jdGlvbihBKXtPbChBfD0wKSx2dShBKX0sZnVuY3Rpb24oQSl7YW4oKSx2dShBfD0wKX0sZnVuY3Rpb24oQSl7YW4oKSx2dShBfD0wKX0sZnVuY3Rpb24oQSl7YW4oKSx2dShBfD0wKX0sZnVuY3Rpb24oQSl7YW4oKSx2dShBfD0wKX0sZnVuY3Rpb24oQSl7YW4oKSx2dShBfD0wKX0sb3UsZnVuY3Rpb24oQSl7b3UoKSx2dShBfD0wKX0sSHUsZnVuY3Rpb24oQSl7SHUoKSx2dShBfD0wKX0sZnVuY3Rpb24oQSl7MH0sZnVuY3Rpb24oQSl7MH0sZnVuY3Rpb24oQSl7SHUoKSx2dShBfD0wKX0sJHUsZnVuY3Rpb24oQSl7JHUoQXw9MCksdnUoQSl9LGZ1bmN0aW9uKEEpeyR1KEF8PTApLHZ1KEEpfSxmdW5jdGlvbihBKXtIdSgpLHZ1KEF8PTApfSxmdW5jdGlvbihBKXtIdSgpLHZ1KEF8PTApfSxmdW5jdGlvbihBKXtIdSgpLHZ1KEF8PTApfSxmdW5jdGlvbihBKXtIdSgpLHZ1KEF8PTApfSxmdW5jdGlvbihBKXthclsoQXw9MCk+PjJdPTAsYXJbQSs0Pj4yXT0wLGFyW0ErOD4+Ml09MCx0cltBKzExPj4wXT02LHRyW0E+PjBdPTB8dHJbMzAwMThdLHRyW0ErMT4+MF09MHx0clszMDAxOV0sdHJbQSsyPj4wXT0wfHRyWzMwMDIwXSx0cltBKzM+PjBdPTB8dHJbMzAwMjFdLHRyW0ErND4+MF09MHx0clszMDAyMl0sdHJbQSs1Pj4wXT0wfHRyWzMwMDIzXSx0cltBKzY+PjBdPTB9LGZ1bmN0aW9uKEEpe3ZhciBlOyhBfD0wKSYmKDB8KGU9MHxhcltBKzQ+PjJdKSYmZHUoZSksdnUoQSkpfSxmdW5jdGlvbihBKXt2YXIgZT0wOyhBfD0wKSYmKDB8KGU9MHxhcltBKzEyPj4yXSkmJmR1KGUpLDB8KGU9MHxhcltBKzQ+PjJdKSYmZHUoZSksdnUoQSkpfSxmdW5jdGlvbihBKXt2YXIgZTsoQXw9MCkmJigwfChlPTB8YXJbQSs0Pj4yXSkmJmR1KGUpLHZ1KEEpKX0sZnVuY3Rpb24oQSl7dmFyIGU9MDsoQXw9MCkmJigwfChlPTB8YXJbQSsxMj4+Ml0pJiZkdShlKSwwfChlPTB8YXJbQSs0Pj4yXSkmJmR1KGUpLHZ1KEEpKX0sZnVuY3Rpb24oQSl7dmFyIGU7KEF8PTApJiYoMHwoZT0wfGFyW0ErND4+Ml0pJiZkdShlKSx2dShBKSl9LGZ1bmN0aW9uKEEpeyhBfD0wKSYmdnUoQSl9LGZ1bmN0aW9uKEEpe3ZhciBlO0F8PTAsZT0wfGFyWzE0ODExXSxhclsxNDgxMV09MStlLGFyW0ErND4+Ml09MStlfSxmdW5jdGlvbihBKXshZnVuY3Rpb24oQSl7dmFyIGUscixpO2U9MHxhcls0KyhBfD0wKT4+Ml0saT0wfGFyW0ErOD4+Ml0scj0oMHxhcltBPj4yXSkrKGk+PjEpfDAsQT0xJmk/MHxhclsoMHxhcltyPj4yXSkrZT4+Ml06ZTtpc1s1MTEmQV0ocil9KDB8YXJbYXJbKEF8PTApPj4yXT4+Ml0pfSxmdW5jdGlvbihBKXswfSxCYyxmdW5jdGlvbihBKXt2YXIgZSxyO3I9dXI9KGU9dXIpKzMxJi0zMix1cj11cisxNnwwLEJjKEF8PTApLDB8QkEoMHxhclsxNTI4OF0sMCk/anUoNTYyNTcscik6dXI9ZX0sX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2JdLGZzPVtZYixmdW5jdGlvbihBLGUpe30sZnVuY3Rpb24oQSxlKXt2YXIgcixpO0F8PTAsZXw9MCxyPTB8aHUoNCksYXJbcj4+Ml09MCxhcltBPj4yXT1hclsxOTA0XSxhcltBKzQ+PjJdPWFyWzE5MDVdLGFyW0ErOD4+Ml09YXJbMTkwNl0sQT0wfChpPShpPTApfGFyWzE0MTU0XSxhclsxNDE1NF09aSsxLCEoKGkrMXwwKTw9MSl8fChZYSgpLDB8S2EoKSk/KGZ1bmN0aW9uKEEpe3ZhciBlPTAscj0wLGk9MCxmPTAsbj0wLHQ9MCxvPTAsYT0wO2Zvcihhcls4NCsoQXw9MCk+PjJdPTAsYXJbQSsxNjg+PjJdPTAsYXJbQT4+Ml09NzcyMCxmdW5jdGlvbihBKXthclsoQXw9MCk+PjJdPTEsYXJbQSs0Pj4yXT05LGFyW0ErOD4+Ml09MSxhcltBKzEyPj4yXT0xLGFyW0ErMTY+PjJdPTEsYXJbQSsyMD4+Ml09MixhcltBKzI0Pj4yXT0xLGFyW0ErMjg+PjJdPTEsYXJbQSszMj4+Ml09MixhcltBKzM2Pj4yXT0yLGFyW0ErNDA+PjJdPTIsYXJbQSs0ND4+Ml09MixhcltBKzQ4Pj4yXT0zLGFyW0ErNTI+PjJdPTQsYXJbQSs1Nj4+Ml09NSxhcltBKzYwPj4yXT02LGFyW0ErNjQ+PjJdPTcsYXJbQSs2OD4+Ml09OCxhcltBKzcyPj4yXT05LGFyW0ErNzY+PjJdPTEwLGFyW0ErODA+PjJdPTExLGFyW0ErODQ+PjJdPTEyLGFyW0ErODg+PjJdPTEzLGFyW0ErOTI+PjJdPTE0LGFyW0ErOTY+PjJdPTE1LGFyW0ErMTAwPj4yXT0xNixhcltBKzEwND4+Ml09MTcsYXJbQSsxMDg+PjJdPTE4LGFyW0ErMTEyPj4yXT0zLGFyW0ErMTE2Pj4yXT00LGFyW0ErMTIwPj4yXT00LGFyW0ErMTI0Pj4yXT00LGFyW0ErMTI4Pj4yXT0yLGFyW0ErMTMyPj4yXT0zLGFyW0ErMTM2Pj4yXT00LGFyW0ErMTQwPj4yXT01LGFyW0ErMTQ0Pj4yXT02LGFyW0ErMTQ4Pj4yXT03LGFyW0ErMTUyPj4yXT04LGFyW0ErMTU2Pj4yXT05LGFyW0ErMTYwPj4yXT0xMCxhcltBKzE2ND4+Ml09MTEsYXJbQSsxNjg+PjJdPTEyLGFyW0ErMTcyPj4yXT0xMyxhcltBKzE3Nj4+Ml09MTQsYXJbQSsxODA+PjJdPTE1LGFyW0ErMTg0Pj4yXT0xNixhcltBKzE4OD4+Ml09MTcsYXJbQSsyMDQ+PjJdPTgxLGFyW0ErMjEyPj4yXT0xMSxhcltBKzIwOD4+Ml09MTIsYXJbQSsxOTI+PjJdPTgyLGFyW0ErMjAwPj4yXT04MyxhcltBKzE5Nj4+Ml09ODQsYXJbQSsyMTY+PjJdPTg1LGFyW0ErMjIwPj4yXT04NixhcltBKzIyND4+Ml09ODcsYXJbQSsyMjg+PjJdPTg4LGFyW0ErMjMyPj4yXT04OSxhcltBKzIzNj4+Ml09MTMsYXJbQSsyNDA+PjJdPTE0LGFyW0ErMjQ0Pj4yXT0xNSxhcltBKzI0OD4+Ml09MTYsYXJbQSsyNTI+PjJdPTE3LGFyW0ErMjU2Pj4yXT0xOCxhcltBKzI2MD4+Ml09NDcsYXJbQSsyODQ+PjJdPTQ0LGFyW0ErMjg4Pj4yXT00NSxhcltBKzI5Nj4+Ml09NDYsYXJbQSsyOTI+PjJdPTQ3LGFyW0ErMzAwPj4yXT00OCxhcltBKzI2ND4+Ml09MTksYXJbQSsyNjg+PjJdPTIwLGFyW0ErMjcyPj4yXT0yMSxhcltBKzI3Nj4+Ml09MjIsYXJbQSsyODA+PjJdPTIzLGFyW0ErMzA0Pj4yXT05MCxhcltBKzMwOD4+Ml09OTEsYXJbQSszMTI+PjJdPTkyLGFyW0ErMzE2Pj4yXT05MyxhcltBKzMyMD4+Ml09OTQsYXJbQSszMjQ+PjJdPTk1LGFyW0ErMzI4Pj4yXT05NixhcltBKzMzMj4+Ml09OTcsYXJbQSszMzY+PjJdPTk4fShBKzE3MnwwKSxhcltBPj4yXT03Njk2LGZ1bmN0aW9uKEEpe3ZhciBlO2Zvcih0clsoQXw9MCk+PjBdPTAsdHJbQSsxPj4wXT0wLGU9NDgrKEE9QSs0fDApfDA7KChhcltBPj4yXT0wKXwoQT1BKzR8MCkpPCgwfGUpOyk7fShBKzU0OHwwKSxhcltBKzExOTI+PjJdPTAsYXJbQSsxMTk2Pj4yXT0wLGFyW0ErMTIwMD4+Ml09MCxhclsoZT1BKzEyMjh8MCk+PjJdPTAsYXJbZSs0Pj4yXT0wLGFyW2UrOD4+Ml09MCxhcltlKzEyPj4yXT0wLGFyW2UrMTY+PjJdPTAsYXJbZSsyMD4+Ml09MCxhcltBKzE4NDg+PjJdPTAsYXJbQSsxODUyPj4yXT0wLGFyW0ErMTg1Nj4+Ml09MCxhclsoZT1BKzE4ODR8MCk+PjJdPTAsYXJbZSs0Pj4yXT0wLGFyW2UrOD4+Ml09MCxhcltlKzEyPj4yXT0wLGFyW2UrMTY+PjJdPTAsYXJbZSsyMD4+Ml09MCxhcltBKzI1MDQ+PjJdPTAsYXJbQSsyNTA4Pj4yXT0wLGFyW0ErMjUxMj4+Ml09MCxhclsoZT1BKzI1NDB8MCk+PjJdPTAsYXJbZSs0Pj4yXT0wLGFyW2UrOD4+Ml09MCxhcltlKzEyPj4yXT0wLGFyW2UrMTY+PjJdPTAsYXJbZSsyMD4+Ml09MCxhcltBKzMxNjA+PjJdPTAsYXJbQSszMTY0Pj4yXT0wLGFyW0ErMzE2OD4+Ml09MCxhclsoZT1BKzMxOTZ8MCk+PjJdPTAsYXJbZSs0Pj4yXT0wLGFyW2UrOD4+Ml09MCxhcltlKzEyPj4yXT0wLGFyW2UrMTY+PjJdPTAsYXJbZSsyMD4+Ml09MCxhcltBKzM4MTY+PjJdPTAsYXJbQSszODIwPj4yXT0wLGFyW0ErMzgyND4+Ml09MCxhclsoZT1BKzM4NTJ8MCk+PjJdPTAsYXJbZSs0Pj4yXT0wLGFyW2UrOD4+Ml09MCxhcltlKzEyPj4yXT0wLGFyW2UrMTY+PjJdPTAsYXJbZSsyMD4+Ml09MCxhcltBKzQ0NzI+PjJdPTAsYXJbQSs0NDc2Pj4yXT0wLGFyW0ErNDQ4MD4+Ml09MCxhclsoZT1BKzQ1MDh8MCk+PjJdPTAsYXJbZSs0Pj4yXT0wLGFyW2UrOD4+Ml09MCxhcltlKzEyPj4yXT0wLGFyW2UrMTY+PjJdPTAsYXJbZSsyMD4+Ml09MCxhcltBKzUxMjg+PjJdPTAsYXJbQSs1MTMyPj4yXT0wLGFyW0ErNTEzNj4+Ml09MCxhclsoZT1BKzUxNjR8MCk+PjJdPTAsYXJbZSs0Pj4yXT0wLGFyW2UrOD4+Ml09MCxhcltlKzEyPj4yXT0wLGFyW2UrMTY+PjJdPTAsYXJbZSsyMD4+Ml09MCxhcltBKzU3ODQ+PjJdPTAsYXJbQSs1Nzg4Pj4yXT0wLGFyW0ErNTc5Mj4+Ml09MCxhclsoZT1BKzU4MjB8MCk+PjJdPTAsYXJbZSs0Pj4yXT0wLGFyW2UrOD4+Ml09MCxhcltlKzEyPj4yXT0wLGFyW2UrMTY+PjJdPTAsYXJbZSsyMD4+Ml09MCxhcltBKzY0NDA+PjJdPTAsYXJbQSs2NDQ0Pj4yXT0wLGFyW0ErNjQ0OD4+Ml09MCxhclsoZT1BKzY0NzZ8MCk+PjJdPTAsYXJbZSs0Pj4yXT0wLGFyW2UrOD4+Ml09MCxhcltlKzEyPj4yXT0wLGFyW2UrMTY+PjJdPTAsYXJbZSsyMD4+Ml09MCxhcltBKzcwOTY+PjJdPTAsYXJbQSs3MTAwPj4yXT0wLGFyW0ErNzEwND4+Ml09MCxhclsoZT1BKzcxMzJ8MCk+PjJdPTAsYXJbZSs0Pj4yXT0wLGFyW2UrOD4+Ml09MCxhcltlKzEyPj4yXT0wLGFyW2UrMTY+PjJdPTAsYXJbZSsyMD4+Ml09MCxhcltBKzc3NTI+PjJdPTAsYXJbQSs3NzU2Pj4yXT0wLGFyW0ErNzc2MD4+Ml09MCxhclsoZT1BKzc3ODh8MCk+PjJdPTAsYXJbZSs0Pj4yXT0wLGFyW2UrOD4+Ml09MCxhcltlKzEyPj4yXT0wLGFyW2UrMTY+PjJdPTAsYXJbZSsyMD4+Ml09MCxhcltBKzg0MDg+PjJdPTAsYXJbQSs4NDEyPj4yXT0wLGFyW0ErODQxNj4+Ml09MCxhclsoZT1BKzg0NDR8MCk+PjJdPTAsYXJbZSs0Pj4yXT0wLGFyW2UrOD4+Ml09MCxhcltlKzEyPj4yXT0wLGFyW2UrMTY+PjJdPTAsYXJbZSsyMD4+Ml09MCxhcltBKzkwNjQ+PjJdPTAsYXJbQSs5MDY4Pj4yXT0wLGFyW0ErOTA3Mj4+Ml09MCxhclsoZT1BKzkxMDB8MCk+PjJdPTAsYXJbZSs0Pj4yXT0wLGFyW2UrOD4+Ml09MCxhcltlKzEyPj4yXT0wLGFyW2UrMTY+PjJdPTAsYXJbZSsyMD4+Ml09MCxhcltBKzk3MjA+PjJdPTAsYXJbQSs5NzI0Pj4yXT0wLGFyW0ErOTcyOD4+Ml09MCxhclsoZT1BKzk3NTZ8MCk+PjJdPTAsYXJbZSs0Pj4yXT0wLGFyW2UrOD4+Ml09MCxhcltlKzEyPj4yXT0wLGFyW2UrMTY+PjJdPTAsYXJbZSsyMD4+Ml09MCxhcltBKzEwMzc2Pj4yXT0wLGFyW0ErMTAzODA+PjJdPTAsYXJbQSsxMDM4ND4+Ml09MCxhclsoZT1BKzEwNDEyfDApPj4yXT0wLGFyW2UrND4+Ml09MCxhcltlKzg+PjJdPTAsYXJbZSsxMj4+Ml09MCxhcltlKzE2Pj4yXT0wLGFyW2UrMjA+PjJdPTAsYXJbQSsxMTAzMj4+Ml09MCxhcltBKzExMDM2Pj4yXT0wLGFyW0ErMTEwNDA+PjJdPTAsYXJbKGU9QSsxMTA2OHwwKT4+Ml09MCxhcltlKzQ+PjJdPTAsYXJbZSs4Pj4yXT0wLGFyW2UrMTI+PjJdPTAsYXJbZSsxNj4+Ml09MCxhcltlKzIwPj4yXT0wLCRhKEErMTEwOTZ8MCksJGEoQSsxNjI2NHwwKSwkYShBKzIxNDMyfDApLCRhKEErMjY2MDB8MCksJGEoQSszMTc2OHwwKSwkYShBKzM2OTM2fDApLCRhKEErNDIxMDR8MCksJGEoQSs0NzI3MnwwKSwkYShBKzUyNDQwfDApLCRhKEErNTc2MDh8MCksJGEoQSs2Mjc3NnwwKSwkYShBKzY3OTQ0fDApLCRhKEErNzMxMTJ8MCksJGEoQSs3ODI4MHwwKSwkYShBKzgzNDQ4fDApLCRhKEErODg2MTZ8MCksZT0wO0lhKEErOTM3ODQrKDQ0MDAqZXwwKXwwKSw2NCE9KDB8KGU9ZSsxfDApKTspO2Zvcihhclsobj1BKzM3NTQwMHwwKT4+Ml09MCxhcltuKzQ+PjJdPTAsYXJbbis4Pj4yXT0wLGFyW24rMTI+PjJdPTAsYXJbbisxNj4+Ml09MCxhcltuKzIwPj4yXT0wLGZ1bmN0aW9uKEEpe3ZhciBlLHI9MDtmb3IoZT00OCsocj04KyhBfD0wKXwwKXwwOygoYXJbcj4+Ml09MCl8KHI9cis0fDApKTwoMHxlKTspO2FyW0E+PjJdPTMwLGFyW0ErND4+Ml09MzB9KEErMzc2MTQ4fDApLGFyW0ErMzc3MjE2Pj4yXT0wLGFyW0ErMzc3MjIwPj4yXT0wLGFyW0ErMzc3MjI0Pj4yXT0wLHRyW0ErNTEyPj4wXT0wLHRyW0ErNTEzPj4wXT0xLHRyW0ErNTE0Pj4wXT0wLHRyW0ErNTMyPj4wXT0wLHRyW0ErNTMzPj4wXT0wLGFyWyhuPUErNTE2fDApPj4yXT0tMSxhcltuKzQ+PjJdPS0xLGFyW24rOD4+Ml09LTEsYXJbbisxMj4+Ml09LTEsZT0wfGFyWzQrKG49NzczNik+PjJdLGFyWyh0PUErNTM2fDApPj4yXT1hcltuPj4yXSxhclt0KzQ+PjJdPWUsYXJbQSs1NDQ+PjJdPTAsYXJbQSszNzUzODQ+PjJdPTAsYXJbQSszNzUzODg+PjJdPTAsYXJbQSszNzUzOTI+PjJdPTAsYXJbQSszNzU4OTI+PjJdPTAsYXJbKHQ9QSszNzU4OTZ8MCk+PjJdPTYsYXJbQSszNzU5MDA+PjJdPTEwMCxhcltBKzM3NTkwND4+Ml09NixhcltBKzM3NTkxMj4+Ml09NixhcltBKzM3NTkwOD4+Ml09MTAwLGU9Njs7KXtpZigoMHwoaT0oMHwobj0xMDAqZXwwKSkvN3wwKSk8PSgwfChuPShuKzEwMHwwKS83fDApKSlmb3IoZj1uLWl8MCxyPWk7YT0wfGFyW3Q+PjJdLGU9KG89KDB8YSk8KDB8ZSkpP2E6ZSx0cltBKzM3NTkxNisocjw8MSk+PjBdPWUsdHJbQSszNzU5MTYrKHI8PDEpKzE+PjBdPW8/MTAwOjI1NSYoKDEwMCooci1pfDApfDApLygwfGYpfDApLCgwfHIpPCgwfG4pOylyPXIrMXwwO2lmKGFyW0ErMzc2MTIwKyhlPDwyKT4+Ml09biwhKDA8KDB8ZSkpKWJyZWFrO2U9ZSstMXwwfWFyWyhhPUErMzc2MjA0fDApPj4yXT0wLGFyW2ErND4+Ml09MCxhclthKzg+PjJdPTAsYXJbYSsxMj4+Ml09MCxhclthKzE2Pj4yXT0wLGFyW2ErMjA+PjJdPTAsdHJbQSszNzYyMDg+PjBdPTEsYXJbYT4+Ml09LTF9KGk9MHxodSgzNzcyMzIpKSwwfGkpOihhclsxNDE1NF09KDB8YXJbMTQxNTRdKS0xLChpPTApfGkpKSxOZShhcltyPj4yXT1BLDcsMSksTmUoQSw4LDEpLGFyW2U+PjJdPXJ9LGZ1bmN0aW9uKEEsZSl7QXw9MCxlfD0wO3ZhciByLGksZj0wLG49MDtpZih1cj0oaT11cikrMTEyfDAscj0oZj1pKSs0fDAsYXJbZj4+Ml09YXJbZSs4Pj4yXSxCaShyLDM5MDQ1LGYpLGFyW0E+PjJdPTAsYXJbQSs0Pj4yXT0wLDQyOTQ5NjcyNzk8KGU9KGFyW0ErOD4+Ml09MCl8VmMocikpPj4+MCYmcHUoKSxlPj4+MDwxMSl7aWYoISh0cltBKzExPj4wXT1lKSlyZXR1cm4gdHJbKGY9KGY9QSkrZXwwKT4+MF09MCx2b2lkKHVyPWkpfWVsc2UgZj0wfGh1KG49ZSsxNiYtMTYpLGFyW0E+PjJdPWYsYXJbQSs4Pj4yXT0tMjE0NzQ4MzY0OHxuLGFyW0ErND4+Ml09ZSxBPWY7aGIoMHxBLDB8ciwwfGUpLHRyWyhuPShuPUEpK2V8MCk+PjBdPTAsdXI9aX0sZnVuY3Rpb24oQSxlKXtBfD0wO3ZhciByLGksZj0wLG49MDtpZih1cj0oaT11cikrMTEyfDAscj0oZj1pKSs4fDAsbj0wfGFyWyhlfD0wKSsxNj4+Ml0sYXJbZj4+Ml09YXJbZSsxMj4+Ml0sYXJbZis0Pj4yXT1uLEJpKHIsMzkxOTEsZiksYXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsNDI5NDk2NzI3OTwoZT0oYXJbQSs4Pj4yXT0wKXxWYyhyKSk+Pj4wJiZwdSgpLGU+Pj4wPDExKXtpZighKHRyW0ErMTE+PjBdPWUpKXJldHVybiB0clsobj0obj1BKStlfDApPj4wXT0wLHZvaWQodXI9aSl9ZWxzZSBuPTB8aHUoZj1lKzE2Ji0xNiksYXJbQT4+Ml09bixhcltBKzg+PjJdPS0yMTQ3NDgzNjQ4fGYsYXJbQSs0Pj4yXT1lLEE9bjtoYigwfEEsMHxyLDB8ZSksdHJbKG49KG49QSkrZXwwKT4+MF09MCx1cj1pfSxmdW5jdGlvbihBLGUpe0F8PTAsZXw9MDt2YXIgcixpLGY9MCxuPTA7aWYodXI9KGk9dXIpKzExMnwwLHI9KGY9aSkrNHwwLGFyW2Y+PjJdPWFyW2UrMTI+PjJdLEJpKHIsMzk2NjUsZiksYXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsNDI5NDk2NzI3OTwoZT0oYXJbQSs4Pj4yXT0wKXxWYyhyKSk+Pj4wJiZwdSgpLGU+Pj4wPDExKXtpZighKHRyW0ErMTE+PjBdPWUpKXJldHVybiB0clsoZj0oZj1BKStlfDApPj4wXT0wLHZvaWQodXI9aSl9ZWxzZSBmPTB8aHUobj1lKzE2Ji0xNiksYXJbQT4+Ml09ZixhcltBKzg+PjJdPS0yMTQ3NDgzNjQ4fG4sYXJbQSs0Pj4yXT1lLEE9ZjtoYigwfEEsMHxyLDB8ZSksdHJbKG49KG49QSkrZXwwKT4+MF09MCx1cj1pfSxmdW5jdGlvbihBLGUpe0F8PTAsZXw9MDt2YXIgcixpLGY9MCxuPTA7aWYodXI9KGk9dXIpKzExMnwwLHI9KGY9aSkrNHwwLGFyW2Y+PjJdPWFyW2UrMTI+PjJdLEJpKHIsNDgwODksZiksYXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsNDI5NDk2NzI3OTwoZT0oYXJbQSs4Pj4yXT0wKXxWYyhyKSk+Pj4wJiZwdSgpLGU+Pj4wPDExKXtpZighKHRyW0ErMTE+PjBdPWUpKXJldHVybiB0clsoZj0oZj1BKStlfDApPj4wXT0wLHZvaWQodXI9aSl9ZWxzZSBmPTB8aHUobj1lKzE2Ji0xNiksYXJbQT4+Ml09ZixhcltBKzg+PjJdPS0yMTQ3NDgzNjQ4fG4sYXJbQSs0Pj4yXT1lLEE9ZjtoYigwfEEsMHxyLDB8ZSksdHJbKG49KG49QSkrZXwwKT4+MF09MCx1cj1pfSxmdW5jdGlvbihBLGUpe30sZnVuY3Rpb24oQSxlKXtlfD0wLGpiWzEyNyZhclsyNCsoMHxhclsoQXw9MCk+PjJdKT4+Ml1dKEEpLGU9MHx1bihlLDYxMDMyKSxhcltBKzM2Pj4yXT1lLGU9MSYoMHxqYlsxMjcmYXJbMjgrKDB8YXJbZT4+Ml0pPj4yXV0oZSkpLHRyW0ErNDQ+PjBdPWV9LGZ1bmN0aW9uKEEsZSl7ZXw9MCxqYlsxMjcmYXJbMjQrKDB8YXJbKEF8PTApPj4yXSk+PjJdXShBKSxlPTB8dW4oZSw2MTAyNCksYXJbQSszNj4+Ml09ZSxlPTEmKDB8amJbMTI3JmFyWzI4KygwfGFyW2U+PjJdKT4+Ml1dKGUpKSx0cltBKzQ0Pj4wXT1lfSxmdW5jdGlvbihBLGUpe0F8PTA7dmFyIHI9MCxpPTA7aT0wfHVuKGV8PTAsNjEwMzIpLGFyWyhyPUErMzZ8MCk+PjJdPWksaT0wfGpiWzEyNyZhclsyNCsoMHxhcltpPj4yXSk+PjJdXShpKSxhclsoZT1BKzQ0fDApPj4yXT1pLHI9MHxhcltyPj4yXSxyPTEmKDB8amJbMTI3JmFyWzI4KygwfGFyW3I+PjJdKT4+Ml1dKHIpKSx0cltBKzUzPj4wXT1yLDg8KDB8YXJbZT4+Ml0pJiZ0aSgpfSxmdW5jdGlvbihBLGUpe0F8PTA7dmFyIHI9MCxpPTA7aT0wfHVuKGV8PTAsNjEwMjQpLGFyWyhyPUErMzZ8MCk+PjJdPWksaT0wfGpiWzEyNyZhclsyNCsoMHxhcltpPj4yXSk+PjJdXShpKSxhclsoZT1BKzQ0fDApPj4yXT1pLHI9MHxhcltyPj4yXSxyPTEmKDB8amJbMTI3JmFyWzI4KygwfGFyW3I+PjJdKT4+Ml1dKHIpKSx0cltBKzUzPj4wXT1yLDg8KDB8YXJbZT4+Ml0pJiZ0aSgpfSxmdW5jdGlvbihBLGUpe2ZvcihlfD0wLGFyWyhBfD0wKT4+Ml09MCxhcltBKzQ+PjJdPTAsZT1hcltBKzg+PjJdPTA7MyE9KDB8ZSk7KWU9ZSsxfChhcltBKyhlPDwyKT4+Ml09MCl9LGZ1bmN0aW9uKEEsZSl7Zm9yKGV8PTAsYXJbKEF8PTApPj4yXT0wLGFyW0ErND4+Ml09MCxlPWFyW0ErOD4+Ml09MDszIT0oMHxlKTspZT1lKzF8KGFyW0ErKGU8PDIpPj4yXT0wKX0sZnVuY3Rpb24oQSxlKXtmb3IoZXw9MCxhclsoQXw9MCk+PjJdPTAsYXJbQSs0Pj4yXT0wLGU9YXJbQSs4Pj4yXT0wOzMhPSgwfGUpOyllPWUrMXwoYXJbQSsoZTw8Mik+PjJdPTApfSxmdW5jdGlvbihBLGUpe3ZhciByO2V8PTAscj11cj0oZT11cikrMzEmLTMyLHVyPXVyKzE2fDAsYXJbKEF8PTApPj4yXT0wLGFyW0ErND4+Ml09MCxhcltBKzg+PjJdPTAsb2koQSx0cltBKzExPj4wXT0xLDQ1KSxRZihBKzF8KHRyW3I+PjBdPTApLHIpLHVyPWV9LGZ1bmN0aW9uKEEsZSl7dHJbKEF8PTApPj4wXT0yLHRyW0ErMT4+MF09Myx0cltBKzI+PjBdPTAsdHJbQSszPj4wXT00fSxmdW5jdGlvbihBLGUpe3RyWyhBfD0wKT4+MF09Mix0cltBKzE+PjBdPTMsdHJbQSsyPj4wXT0wLHRyW0ErMz4+MF09NH0sZnVuY3Rpb24oQSxlKXtmb3IoZXw9MCxhclsoQXw9MCk+PjJdPTAsYXJbQSs0Pj4yXT0wLGU9YXJbQSs4Pj4yXT0wOzMhPSgwfGUpOyllPWUrMXwoYXJbQSsoZTw8Mik+PjJdPTApfSxmdW5jdGlvbihBLGUpe2ZvcihlfD0wLGFyWyhBfD0wKT4+Ml09MCxhcltBKzQ+PjJdPTAsZT1hcltBKzg+PjJdPTA7MyE9KDB8ZSk7KWU9ZSsxfChhcltBKyhlPDwyKT4+Ml09MCl9LGZ1bmN0aW9uKEEsZSl7Zm9yKGV8PTAsYXJbKEF8PTApPj4yXT0wLGFyW0ErND4+Ml09MCxlPWFyW0ErOD4+Ml09MDszIT0oMHxlKTspZT1lKzF8KGFyW0ErKGU8PDIpPj4yXT0wKX0sZnVuY3Rpb24oQSxlKXt2YXIgcjtlfD0wLHI9dXI9KGU9dXIpKzMxJi0zMix1cj11cisxNnwwLGFyWyhBfD0wKT4+Ml09MCxhcltBKzQ+PjJdPTAsYXJbQSs4Pj4yXT0wLG9pKEEsdHJbQSsxMT4+MF09MSw0NSksUWYoQSsxfCh0cltyPj4wXT0wKSxyKSx1cj1lfSxmdW5jdGlvbihBLGUpe3RyWyhBfD0wKT4+MF09Mix0cltBKzE+PjBdPTMsdHJbQSsyPj4wXT0wLHRyW0ErMz4+MF09NH0sZnVuY3Rpb24oQSxlKXt0clsoQXw9MCk+PjBdPTIsdHJbQSsxPj4wXT0zLHRyW0ErMj4+MF09MCx0cltBKzM+PjBdPTR9LGZ1bmN0aW9uKEEsZSl7Zm9yKGV8PTAsYXJbKEF8PTApPj4yXT0wLGFyW0ErND4+Ml09MCxlPWFyW0ErOD4+Ml09MDszIT0oMHxlKTspZT1lKzF8KGFyW0ErKGU8PDIpPj4yXT0wKX0sZnVuY3Rpb24oQSxlKXtmb3IoZXw9MCxhclsoQXw9MCk+PjJdPTAsYXJbQSs0Pj4yXT0wLGU9YXJbQSs4Pj4yXT0wOzMhPSgwfGUpOyllPWUrMXwoYXJbQSsoZTw8Mik+PjJdPTApfSxmdW5jdGlvbihBLGUpe2ZvcihlfD0wLGFyWyhBfD0wKT4+Ml09MCxhcltBKzQ+PjJdPTAsZT1hcltBKzg+PjJdPTA7MyE9KDB8ZSk7KWU9ZSsxfChhcltBKyhlPDwyKT4+Ml09MCl9LGZ1bmN0aW9uKEEsZSl7dmFyIHI7ZXw9MCxyPXVyPShlPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxhclsoQXw9MCk+PjJdPTAsYXJbQSs0Pj4yXT0wLGFyW0ErOD4+Ml09MCxncihBLHRyW0ErOCszPj4wXT0xLDQ1KSxsbihBKzR8KGFyW3I+PjJdPTApLHIpLHVyPWV9LGZ1bmN0aW9uKEEsZSl7dHJbKEF8PTApPj4wXT0yLHRyW0ErMT4+MF09Myx0cltBKzI+PjBdPTAsdHJbQSszPj4wXT00fSxmdW5jdGlvbihBLGUpe3RyWyhBfD0wKT4+MF09Mix0cltBKzE+PjBdPTMsdHJbQSsyPj4wXT0wLHRyW0ErMz4+MF09NH0sZnVuY3Rpb24oQSxlKXtmb3IoZXw9MCxhclsoQXw9MCk+PjJdPTAsYXJbQSs0Pj4yXT0wLGU9YXJbQSs4Pj4yXT0wOzMhPSgwfGUpOyllPWUrMXwoYXJbQSsoZTw8Mik+PjJdPTApfSxmdW5jdGlvbihBLGUpe2ZvcihlfD0wLGFyWyhBfD0wKT4+Ml09MCxhcltBKzQ+PjJdPTAsZT1hcltBKzg+PjJdPTA7MyE9KDB8ZSk7KWU9ZSsxfChhcltBKyhlPDwyKT4+Ml09MCl9LGZ1bmN0aW9uKEEsZSl7Zm9yKGV8PTAsYXJbKEF8PTApPj4yXT0wLGFyW0ErND4+Ml09MCxlPWFyW0ErOD4+Ml09MDszIT0oMHxlKTspZT1lKzF8KGFyW0ErKGU8PDIpPj4yXT0wKX0sZnVuY3Rpb24oQSxlKXt2YXIgcjtlfD0wLHI9dXI9KGU9dXIpKzMxJi0zMix1cj11cisxNnwwLGFyWyhBfD0wKT4+Ml09MCxhcltBKzQ+PjJdPTAsYXJbQSs4Pj4yXT0wLGdyKEEsdHJbQSs4KzM+PjBdPTEsNDUpLGxuKEErNHwoYXJbcj4+Ml09MCksciksdXI9ZX0sZnVuY3Rpb24oQSxlKXt0clsoQXw9MCk+PjBdPTIsdHJbQSsxPj4wXT0zLHRyW0ErMj4+MF09MCx0cltBKzM+PjBdPTR9LGZ1bmN0aW9uKEEsZSl7dHJbKEF8PTApPj4wXT0yLHRyW0ErMT4+MF09Myx0cltBKzI+PjBdPTAsdHJbQSszPj4wXT00fSxmdW5jdGlvbihBLGUpe30sZnVuY3Rpb24oQSxlKXt9LGZ1bmN0aW9uKEEsZSl7eXUoQXw9MCwoZXw9MCkrMTJ8MCl9LGZ1bmN0aW9uKEEsZSl7ZXw9MDt2YXIgcixpLGYsbj0wO3I9dXI9KGY9dXIpKzMxJi0zMix1cj11cisxNnwwLGFyWyhBfD0wKT4+Ml09MCxhcltBKzQ+PjJdPTAsNDI5NDk2NzI3OTwoaT0oYXJbQSs4Pj4yXT0wKXxZZig1NTc0NSkpPj4+MCYmcHUoKSxpPj4+MDwxMT8odHJbQSsxMT4+MF09aSxlPUEpOihlPTB8aHUobj0xNitpJi0xNiksYXJbQT4+Ml09ZSxhcltBKzg+PjJdPS0yMTQ3NDgzNjQ4fG4sYXJbQSs0Pj4yXT1pKSx3ZihlLDU1NzQ1LGkpLFFmKGUraXwodHJbcj4+MF09MCksciksdXI9Zn0sZnVuY3Rpb24oQSxlKXtlfD0wO3ZhciByLGksZixuPTA7cj11cj0oZj11cikrMzEmLTMyLHVyPXVyKzE2fDAsYXJbKEF8PTApPj4yXT0wLGFyW0ErND4+Ml09MCw0Mjk0OTY3Mjc5PChpPShhcltBKzg+PjJdPTApfFlmKDU1NzM5KSk+Pj4wJiZwdSgpLGk+Pj4wPDExPyh0cltBKzExPj4wXT1pLGU9QSk6KGU9MHxodShuPTE2K2kmLTE2KSxhcltBPj4yXT1lLGFyW0ErOD4+Ml09LTIxNDc0ODM2NDh8bixhcltBKzQ+PjJdPWkpLHdmKGUsNTU3MzksaSksUWYoZStpfCh0cltyPj4wXT0wKSxyKSx1cj1mfSxmdW5jdGlvbihBLGUpe3l1KEF8PTAsKGV8PTApKzE2fDApfSxmdW5jdGlvbihBLGUpe2V8PTA7dmFyIHIsaSxmLG49MDtyPXVyPShmPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxhclsoQXw9MCk+PjJdPTAsYXJbQSs0Pj4yXT0wLDEwNzM3NDE4MDc8KGk9KGFyW0ErOD4+Ml09MCl8TXIoMTcyMDQpKT4+PjAmJnB1KCk7ZG97aWYoMjw9aT4+PjApe2lmKCEoMTA3Mzc0MTgyMzwoZT00K2kmLTQpPj4+MCkpe249MHxodShlPDwyKSxhcltBPj4yXT1uLGFyW0ErOD4+Ml09LTIxNDc0ODM2NDh8ZSxhcltBKzQ+PjJdPWk7YnJlYWt9bEEoKX1lbHNlIHRyW0ErOCszPj4wXT1pLG49QX13aGlsZSgwKTtaZihuLDE3MjA0LGkpLGxuKG4rKGk8PDIpfChhcltyPj4yXT0wKSxyKSx1cj1mfSxmdW5jdGlvbihBLGUpe2V8PTA7dmFyIHIsaSxmLG49MDtyPXVyPShmPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxhclsoQXw9MCk+PjJdPTAsYXJbQSs0Pj4yXT0wLDEwNzM3NDE4MDc8KGk9KGFyW0ErOD4+Ml09MCl8TXIoMTcxODApKT4+PjAmJnB1KCk7ZG97aWYoMjw9aT4+PjApe2lmKCEoMTA3Mzc0MTgyMzwoZT00K2kmLTQpPj4+MCkpe249MHxodShlPDwyKSxhcltBPj4yXT1uLGFyW0ErOD4+Ml09LTIxNDc0ODM2NDh8ZSxhcltBKzQ+PjJdPWk7YnJlYWt9bEEoKX1lbHNlIHRyW0ErOCszPj4wXT1pLG49QX13aGlsZSgwKTtaZihuLDE3MTgwLGkpLGxuKG4rKGk8PDIpfChhcltyPj4yXT0wKSxyKSx1cj1mfSxmdW5jdGlvbihBLGUpe2V8PTAsaXNbNTExJihBfD0wKV0oZSl9LGZ1bmN0aW9uKEEsZSl7QXw9MCxlfD0wO3ZhciByLGk9MCxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wO2lmKHVyPShyPXVyKSsxNnwwLHU9KGw9cikrMTJ8MCxpPTB8bkEoKSxhclt1Pj4yXT1pLCFlKXJldHVybiBhcltBPj4yXT1pLGFyW3U+PjJdPTAsaUEoKHU9MCl8dSksdm9pZCh1cj1yKTtpZihzbChsLDQwKygwfGFyW2U+PjJdKXwwKSxhPShvPShmPTB8YXJbKHQ9bCs0fDApPj4yXSktKGk9MHxhcltsPj4yXSl8MCk+PjMsMHwobj1pKSl7aWYoKDB8ZikhPSgwfG4pKXtmb3IoO2k9ZistOHwwLGFyW3Q+PjJdPWksKGY9MHxhcltmKy00Pj4yXSkmJihkdShmKSxpPTB8YXJbdD4+Ml0pLCgwfGkpIT0oMHxuKTspZj1pO2k9MHxhcltsPj4yXX12dShpKX1pZigoMHxvKTw4KXJldHVybiBhcltBPj4yXT1hclt1Pj4yXSxhclt1Pj4yXT0wLGlBKCh1PTApfHUpLHZvaWQodXI9cik7aWYoIShjPTB8eWMobz4+PjEpKSlyZXR1cm4gYz0wfGh1KDEyKSxhcltjPj4yXT02LGFyW2MrND4+Ml09MWUzLGFyW2w+PjJdPWMsbD0wfGNBKDEzOTIsMHxsKSxhcltBPj4yXT1sLHU9MHxhclt1Pj4yXSxpQSgwfHUpLHZvaWQodXI9cik7aWYoc2wobCw0MCsoMHxhcltlPj4yXSl8MCksZj0wfGFyWyhvPWwrNHwwKT4+Ml0sdD1pPTB8YXJbbD4+Ml0sZT0wPCgwfChhPSgwfChlPWYtaT4+MykpPCgwfGEpP2U6YSkpKWZvcihuPTA7YXJbYysobjw8Mik+PjJdPWFyWzIwKygwfGFyW3QrKG48PDMpPj4yXSk+PjJdLCgwfChuPW4rMXwwKSk8KDB8YSk7KTtpZigwfGkpe2lmKCgwfGYpIT0oMHx0KSl7Zm9yKDtpPWYrLTh8MCxhcltvPj4yXT1pLChmPTB8YXJbZistND4+Ml0pJiYoZHUoZiksaT0wfGFyW28+PjJdKSwoMHxpKSE9KDB8dCk7KWY9aTtpPTB8YXJbbD4+Ml19dnUoaSl9aWYoIWEpcmV0dXJuIEJjKGMpLGFyW0E+PjJdPWFyW3U+PjJdLGFyW3U+PjJdPTAsaUEoKHU9MCl8dSksdm9pZCh1cj1yKTtpZihhcltsPj4yXT0wLGUpZm9yKGk9MDtkbCh1LGwsYysoaTw8Mil8MCksaT0xKygwfGFyW2w+PjJdKXwwLCgwfChhcltsPj4yXT1pKSk8KDB8YSk7KTtCYyhjKSxhcltBPj4yXT1hclt1Pj4yXSxhclt1Pj4yXT0wLGlBKCh1PTApfHUpLHVyPXJ9LGZ1bmN0aW9uKEEsZSl7ZXw9MCxpc1s1MTEmKEF8PTApXShlKX0sZnVuY3Rpb24oQSxlKXtBfD0wO3ZhciByLGksZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wO2lmKHI9KDB8KGV8PTApKS8yfDAsISgoMHxlKTw9MSkpe2k9ZSstMXwwLGY9MDtkb3tmb3IodD0wfGJyKGYsZSksbz1pKygwfGJyKGktZnwwLGUpKXwwLG49MDthPUErKG8tbjw8MSl8MCxjPTB8b3JbKGw9QSsobit0PDwxKXwwKT4+MV0sb3JbbD4+MV09MHxvclthPj4xXSxvclthPj4xXT1jLCgwfChuPW4rMXwwKSkhPSgwfGUpOyk7Zj1mKzF8MH13aGlsZSgoMHxmKTwoMHxyKSl9fSxZYixZYixZYixZYixZYixZYixZYixZYixZYixZYixZYixZYixZYixZYixZYixZYl0sbnM9W1FiLEhBLExBLGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTA7dmFyIGksZixuLHQsbz0wLGE9MCxjPTAsbD0wLHU9MDt1cj0odD11cikrMzJ8MCxmPXQsbj0wfGFyWyhyfD0wKSsxMj4+Ml0sakEociwwfHRyW2UrMzY+PjBdPzEyOjgpLGE9MHxhcltlKzQ0Pj4yXSxpPTB8YXJbZSs0OD4+Ml07QTpkb3tpZigoMHxhKT09KDB8aSkpbz1BKzh8MCxsPTg7ZWxzZSBmb3IoYz0obz1BKzh8MCkrMTF8MDs7KXtpZih1PTB8YXJbYT4+Ml0sbnNbMTI3JmFyWzEyKygwfGFyW3U+PjJdKT4+Ml1dKEEsdSxyKSwwfGFyW0E+PjJdKWJyZWFrIEE7aWYoKDB8dHJbYz4+MF0pPDAmJnZ1KDB8YXJbbz4+Ml0pLCgwfChhPWErOHwwKSk9PSgwfGkpKXtsPTg7YnJlYWt9fX13aGlsZSgwKTs4PT0oMHxsKSYmKGw9MHxhclsoYz01NjU5MikrND4+Ml0sYXJbKHU9QSk+PjJdPWFyW2M+PjJdLGFyW3UrND4+Ml09bCx5dShvLDU2NjAwKSksS0EoZixlLHIsbiksdXI9KDA8PSgwfHRyWyhvPWYrOHwwKSsxMT4+MF0pfHx2dSgwfGFyW28+PjJdKSx0KX0sZnVuY3Rpb24oQSxlLHIpe0F8PTAscnw9MDt2YXIgaSxmLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTA7dXI9KGY9dXIpKzMyfDAsaT1mKzEyfDAsbz1mLHQ9MHxhclsobj1jPShlfD0wKSs4fDApPj4yXSxuPTB8YXJbbis0Pj4yXTtkb3tpZigwPT0oMHx0KSYwPT0oMHxuKSlmb3IoZT1yOyhhclsoYj1lKzE2fDApPj4yXT0wKSE9KDB8KGU9KGFyW2IrND4+Ml09MCl8YXJbZSs4Pj4yXSkpOyk7ZWxzZSBpZigwfENBKHIsZT0wfG9iKDB8dCwwfG4sMHxhclsoYT1lKzE2fDApPj4yXSwwKSxuPUQpKXtpZigwPG4+Pj4wfDA9PSgwfG4pJjIxNDc0ODM2NDc8ZT4+PjApcmV0dXJuIGFyW28+PjJdPTAsYXJbbys0Pj4yXT0wLGFyW28rOD4+Ml09MCxvbyhBLDIsMTAxLG8pLDA8PSgwfHRyW28rMTE+PjBdKXx8dnUoMHxhcltvPj4yXSksdm9pZCh1cj1mKTtpZihlPTB8YXJbcj4+Ml0sKHQ9MD09KDB8KG49MHxhcltyKzQ+PjJdKSkpfHxidShuKSxiPTB8YXJbKHU9Yyk+PjJdLHU9MHxhclt1KzQ+PjJdLGw9MHxhclthPj4yXSxvPTB8YXJbZT4+Ml0sYT0wfGFyW28rMjA+PjJdLG89MHxqYlsxMjcmYXJbbys4Pj4yXV0oZSksYz1ELGM9MHx0YigwfChsPTB8b2IoMHxiLDB8dSwwfGwsMCkpLDB8RCwwfG8sMHxjKSx4Yls2MyZhXShlLGMsRCksdClicmVhaztkdShuKTticmVha319d2hpbGUoMCk7MHx0cltyKzI0Pj4wXT8oYXJbaT4+Ml09MCxhcls0K2k+PjJdPTAsYXJbOCtpPj4yXT0wLG9vKEEsMiwxMDAsaSksKDB8dHJbMTEraT4+MF0pPDAmJnZ1KDB8YXJbaT4+Ml0pKToodT0wfGFyWyhsPTU2NTkyKSs0Pj4yXSxhclsoYj1BKT4+Ml09YXJbbD4+Ml0sYXJbYis0Pj4yXT11LHl1KEErOHwwLDU2NjAwKSksdXI9Zn0sZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MCxyfD0wO3ZhciBpLGYsbix0LG8sYSxjPTAsbD0wLHU9MCxiPTAscz0wLGQ9MCxrPTA7aWYodXI9KGE9dXIpKzE2MHwwLGY9YSsxMzZ8MCx0PShuPWEpKzU2fDAsbz1uKzR8MCxhcltuPj4yXT0yOTIsYXJbdD4+Ml09MzEyLEpmKG4rNTZ8MCxvKSxhcltuKzEyOD4+Ml09MCxhcltuKzEzMj4+Ml09LTEsYXJbbj4+Ml09NDMwNCxhclt0Pj4yXT00MzI0LFNmKG8pLGFyW28+PjJdPTQzNDAsYXJbKGk9biszNnwwKT4+Ml09MCxhcls0K2k+PjJdPTAsYXJbOCtpPj4yXT0wLGFyWzEyK2k+PjJdPTAsYXJbbis1Mj4+Ml09MTYsYXJbZj4+Ml09MCxhcls0K2Y+PjJdPTAsYXJbOCtmPj4yXT0wLFhlKG8sZiksKDB8dHJbMTErZj4+MF0pPDAmJnZ1KDB8YXJbZj4+Ml0pLEhBKGYsZSxyKSxXZShuLChzPShkPTB8dHJbKGs9MTErZnwwKT4+MF0pPDwyND4+MjQ8MCk/MHxhcltmPj4yXTpmLHM/MHxhcls0K2Y+PjJdOjI1NSZkKSwoMHx0cltrPj4wXSk8MCYmdnUoMHxhcltmPj4yXSksMDwoMHxhcltyPj4yXSkpZm9yKGM9MDtXZShuLDE4ODYyLDIpLCgwfChjPWMrMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYobD0wfFdlKG4sMTkyMDYsMTMpLGs9MHxhcltlKzU2Pj4yXSxhcltmPj4yXT0wLGFyWzQrZj4+Ml09MCxhcls4K2Y+PjJdPTAsdHJbKHU9MTErZnwwKT4+MF09NCx0cls0K2Y+PjBdPTAsdHJbZj4+MF09az4+PjI0LHRyWzErZj4+MF09az4+PjE2LHRyWzIrZj4+MF09az4+PjgsdHJbMytmPj4wXT1rLGw9MHxXZSgwfFdlKGwsZiw0KSwzMDA4NiwxKSwwPCgwfGFyW3I+PjJdKSlmb3IoYz0wO1dlKGwsMTg4NjIsMiksKDB8KGM9YysxfDApKTwoMHxhcltyPj4yXSk7KTtpZihsPTB8V2UobCwxOTIyMCwxNSksbD0wfFdlKDB8TGYobCwwfGFyW2UrNjA+PjJdKSwzMDA4NiwxKSwwPCgwfGFyW3I+PjJdKSlmb3IoYz0wO1dlKGwsMTg4NjIsMiksKDB8KGM9YysxfDApKTwoMHxhcltyPj4yXSk7KTtpZihXZShsLDE5MjM2LDE5KSwoMHx0clt1Pj4wXSk8MCYmdnUoMHxhcltmPj4yXSksKDB8KGM9MHxhcltlKzY0Pj4yXSkpIT0oMHwocj0wfGFyW2UrNjg+PjJdKSkpZm9yKGU9MTErZnwwLGI9NCtmfDAscz0xK2Z8MCxkPTIrZnwwLGs9MytmfDAsdT0xO2w9MHxhcltjPj4yXSx1fHwodHJbZj4+MF09NDQsV2UobixmLDEpKSxhcltmPj4yXT0wLGFyWzQrZj4+Ml09MCxhcls4K2Y+PjJdPTAsdHJbZT4+MF09NCx0cltiPj4wXT0wLHRyW2Y+PjBdPWw+Pj4yNCx0cltzPj4wXT1sPj4+MTYsdHJbZD4+MF09bD4+PjgsdHJbaz4+MF09bCxXZShuLGYsNCksKDB8dHJbZT4+MF0pPDAmJnZ1KDB8YXJbZj4+Ml0pLCgwfChjPWMrNHwwKSkhPSgwfHIpOyl1PTA7aWYoV2UobiwzMDA4NiwxKSxJZShBLG8pLGFyW24+PjJdPTQzMDQsYXJbdD4+Ml09NDMyNCxhcltvPj4yXT00MzQwLDA8PSgwfHRyWzExK2k+PjBdKSlyZXR1cm4ga2YobyksR2YoKSxiZih0KSx2b2lkKHVyPWEpO3Z1KDB8YXJbaT4+Ml0pLGtmKG8pLEdmKCksYmYodCksdXI9YX0sZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MDt2YXIgaSxmLG49MCx0PTAsbz0wO2lmKHVyPShmPXVyKSszMnwwLHQ9ZixvPTB8YXJbKHJ8PTApKzEyPj4yXSxqQShyLDB8dHJbZSszNj4+MF0/MTI6OCksVUEociwwfGFyW2UrNTY+PjJdKSxVQShyLDB8YXJbZSs2MD4+Ml0pLCgwfChuPTB8YXJbZSs2ND4+Ml0pKSE9KDB8KGk9MHxhcltlKzY4Pj4yXSkpKWZvcig7VUEociwwfGFyW24+PjJdKSwoMHwobj1uKzR8MCkpIT0oMHxpKTspO0tBKHQsZSxyLG8pLCgwfHRyWyhuPXQrOHwwKSsxMT4+MF0pPDAmJnZ1KDB8YXJbbj4+Ml0pLHQ9MHxhclsocj01NjU5MikrND4+Ml0sYXJbKG89QSk+PjJdPWFyW3I+PjJdLGFyW28rND4+Ml09dCx5dShBKzh8MCw1NjYwMCksdXI9Zn0sZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MDt2YXIgaSxmLG4sdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MDtpZih1cj0obj11cikrMzJ8MCxzPW4rMTJ8MCxjPW4sbz0wfEZBKHJ8PTApLGFyW2UrNTY+PjJdPW8sbz0wfEZBKHIpLGFyW2UrNjA+PjJdPW8sdD0wfGFyWyhvPWUrOHwwKT4+Ml0sISgwPChvPTB8YXJbbys0Pj4yXSk+Pj4wfDA9PSgwfG8pJigoYT0wfGFyW2UrMTY+PjJdKSs4fDApPj4+MDx0Pj4+MCkpe2Zvcih0PTB8aHUoNDgpLGFyW2M+PjJdPXQsYXJbYys4Pj4yXT0tMjE0NzQ4MzYwMCxhPTE5MTY3LGU9KG89dCkrKGFyW2MrND4+Ml09MzgpfDA7dHJbbz4+MF09MHx0clthPj4wXSxhPWErMXwwLCgwfChvPW8rMXwwKSk8KDB8ZSk7KTtyZXR1cm4odHJbdCszOD4+MF09MCxvbyhBLDIsMTAxLGMpLDA8PSgwfHRyW2MrMTE+PjBdKSk/dm9pZCh1cj1uKToodnUoMHxhcltjPj4yXSksdm9pZCh1cj1uKSl9bD0wfHNiKDB8KGw9MHxvYigwfChsPTB8dGIoMHx0LDB8bywtOCwtMSkpLDB8RCwwfGEsMCkpLDB8RCwyKSxpPUQsZj1yKzI0fDA7QTpkb3tpZighKDA9PSgwfGwpJjA9PSgwfGkpKSl7dT1lKzY4fDAsYj1lKzcyfDAsdD1lKzY0fDAsYz1lPTA7ZG97aWYoMHx0cltmPj4wXSlicmVhayBBO289MHxGQShyKSxhcltzPj4yXT1vLChhPTB8YXJbdT4+Ml0pPj4+MDwoMHxhcltiPj4yXSk+Pj4wPyhhclthPj4yXT1vLGFyW3U+PjJdPWErNCk6Q2UodCxzKSxlPTB8dGIoMHxlLDB8YywxLDApLGM9RH13aGlsZShjPj4+MDxpPj4+MHwoMHxjKT09KDB8aSkmZT4+PjA8bD4+PjApfX13aGlsZSgwKTswfHRyW2Y+PjBdPyhhcltzPj4yXT0wLGFyW3MrND4+Ml09MCxhcltzKzg+PjJdPTAsb28oQSwyLDEwMCxzKSwoMHx0cltzKzExPj4wXSk8MCYmdnUoMHxhcltzPj4yXSkpOihyPTB8YXJbKGI9NTY1OTIpKzQ+PjJdLGFyWyhzPUEpPj4yXT1hcltiPj4yXSxhcltzKzQ+PjJdPXIseXUoQSs4fDAsNTY2MDApKSx1cj1ufSxmdW5jdGlvbihBLGUscil7QXw9MCxlfD0wLHJ8PTA7dmFyIGksZixuLHQsbyxhLGM9MCxsPTAsdT0wO2lmKHVyPShhPXVyKSsxNjB8MCxmPWErMTM2fDAsdD0obj1hKSs1NnwwLG89bis0fDAsYXJbbj4+Ml09MjkyLGFyW3Q+PjJdPTMxMixKZihuKzU2fDAsbyksYXJbbisxMjg+PjJdPTAsYXJbbisxMzI+PjJdPS0xLGFyW24+PjJdPTQzMDQsYXJbdD4+Ml09NDMyNCxTZihvKSxhcltvPj4yXT00MzQwLGFyWyhpPW4rMzZ8MCk+PjJdPTAsYXJbNCtpPj4yXT0wLGFyWzgraT4+Ml09MCxhclsxMitpPj4yXT0wLGFyW24rNTI+PjJdPTE2LGFyW2Y+PjJdPTAsYXJbNCtmPj4yXT0wLGFyWzgrZj4+Ml09MCxYZShvLGYpLCgwfHRyWzExK2Y+PjBdKTwwJiZ2dSgwfGFyW2Y+PjJdKSxMQShmLGUsciksV2UobiwodT0obD0wfHRyWyhjPTExK2Z8MCk+PjBdKTw8MjQ+PjI0PDApPzB8YXJbZj4+Ml06Zix1PzB8YXJbNCtmPj4yXToyNTUmbCksKDB8dHJbYz4+MF0pPDAmJnZ1KDB8YXJbZj4+Ml0pLG5lKGYsZSxyKSxXZShuLChjPShsPTB8dHJbKHU9MTErZnwwKT4+MF0pPDwyND4+MjQ8MCk/MHxhcltmPj4yXTpmLGM/MHxhcls0K2Y+PjJdOjI1NSZsKSwoMHx0clt1Pj4wXSk8MCYmdnUoMHxhcltmPj4yXSksSWUoQSxvKSxhcltuPj4yXT00MzA0LGFyW3Q+PjJdPTQzMjQsYXJbbz4+Ml09NDM0MCwwPD0oMHx0clsxMStpPj4wXSkpcmV0dXJuIGtmKG8pLEdmKCksYmYodCksdm9pZCh1cj1hKTt2dSgwfGFyW2k+PjJdKSxrZihvKSxHZigpLGJmKHQpLHVyPWF9LGZ1bmN0aW9uKEEsZSxyKXtBfD0wO3ZhciBpLGY9MDt1cj0oaT11cikrMzJ8MCxxQShmPWksZXw9MCxyfD0wKSwoMHx0clsoZj1mKzh8MCkrMTE+PjBdKTwwJiZ2dSgwfGFyW2Y+PjJdKSwkQShBLGUsciwtMSksdXI9aX0sZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MCxyfD0wO3ZhciBpLGYsbix0LG8sYSxjLGw9MCx1PTAsYj0wO2lmKHVyPShhPXVyKSsxNjB8MCxmPWErMTM2fDAsdD0obj1hKSs1NnwwLG89bis0fDAsYXJbbj4+Ml09MjkyLGFyW3Q+PjJdPTMxMixKZihuKzU2fDAsbyksYXJbbisxMjg+PjJdPTAsYXJbbisxMzI+PjJdPS0xLGFyW24+PjJdPTQzMDQsYXJbdD4+Ml09NDMyNCxTZihvKSxhcltvPj4yXT00MzQwLGFyWyhpPW4rMzZ8MCk+PjJdPTAsYXJbNCtpPj4yXT0wLGFyWzgraT4+Ml09MCxhclsxMitpPj4yXT0wLGFyW24rNTI+PjJdPTE2LGFyW2Y+PjJdPTAsYXJbNCtmPj4yXT0wLGFyWzgrZj4+Ml09MCxYZShvLGYpLCgwfHRyWzExK2Y+PjBdKTwwJiZ2dSgwfGFyW2Y+PjJdKSxMQShmLGUsciksV2UobiwobD0odT0wfHRyWyhiPTExK2Z8MCk+PjBdKTw8MjQ+PjI0PDApPzB8YXJbZj4+Ml06ZixsPzB8YXJbNCtmPj4yXToyNTUmdSksKDB8dHJbYj4+MF0pPDAmJnZ1KDB8YXJbZj4+Ml0pLDA8KDB8YXJbcj4+Ml0pKWZvcihsPTA7V2UobiwxODg2MiwyKSwoMHwobD1sKzF8MCkpPCgwfGFyW3I+PjJdKTspO2lmKHU9MHxXZShuLDIzMTcwLDEzKSx1PTB8V2UoMHxMZih1LDB8YXJbZSs1Nj4+Ml0pLDMwMDg2LDEpLDA8KDB8YXJbcj4+Ml0pKWZvcihsPTA7V2UodSwxODg2MiwyKSwoMHwobD1sKzF8MCkpPCgwfGFyW3I+PjJdKTspO2lmKGI9MHxXZSh1LDIzMTg0LDE0KSxsPTB8YXJbZSs2MD4+Ml0sYXJbZj4+Ml09MCxhcls0K2Y+PjJdPTAsYXJbOCtmPj4yXT0wLHRyWyh1PTExK2Z8MCk+PjBdPTQsdHJbNCtmPj4wXT0wLHRyW2Y+PjBdPWw+Pj4yNCx0clsxK2Y+PjBdPWw+Pj4xNix0clsyK2Y+PjBdPWw+Pj44LHRyWzMrZj4+MF09bCxiPTB8V2UoMHxXZShiLGYsNCksMzAwODYsMSksMDwoMHxhcltyPj4yXSkpZm9yKGw9MDtXZShiLDE4ODYyLDIpLCgwfChsPWwrMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYoYz0wfFdlKGIsMjMxOTksNiksV2UoMHxXZShjLChiPShyPTB8dHJbKGw9ZSs3NnwwKSsxMT4+MF0pPDwyND4+MjQ8MCk/MHxhcltsPj4yXTpsLGI/MHxhcltlKzgwPj4yXToyNTUmciksMzAwODYsMSksKDB8dHJbdT4+MF0pPDAmJnZ1KDB8YXJbZj4+Ml0pLEllKEEsbyksYXJbbj4+Ml09NDMwNCxhclt0Pj4yXT00MzI0LGFyW28+PjJdPTQzNDAsMDw9KDB8dHJbMTEraT4+MF0pKXJldHVybiBrZihvKSxiZih0KSx2b2lkKHVyPWEpO3Z1KDB8YXJbaT4+Ml0pLGtmKG8pLGJmKHQpLHVyPWF9LGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTA7dmFyIGksZj0wLG49MDt1cj0oaT11cikrMzJ8MCxmPWksbj0wfGFyWyhyfD0wKSsxMj4+Ml0sakEociwwfHRyW2UrMzY+PjBdPzEyOjgpLFVBKHIsMHxhcltlKzU2Pj4yXSksVUEociwwfGFyW2UrNjA+PjJdKSxVQShyLDB8YXJbZSs2ND4+Ml0pLFVBKHIsMHxhcltlKzY4Pj4yXSksVUEociwwfGFyW2UrNzI+PjJdKSxPQShyLGUrNzZ8MCksS0EoZixlLHIsbiksKDB8dHJbKGU9Zis4fDApKzExPj4wXSk8MCYmdnUoMHxhcltlPj4yXSksZj0wfGFyWyhyPTU2NTkyKSs0Pj4yXSxhclsobj1BKT4+Ml09YXJbcj4+Ml0sYXJbbis0Pj4yXT1mLHl1KEErOHwwLDU2NjAwKSx1cj1pfSxmdW5jdGlvbihBLGUscil7QXw9MDt2YXIgaSxmLG49MCx0PTA7aWYodXI9KGY9dXIpKzMyfDAsdD1mKzIwfDAscUEobj1mLGV8PTAscnw9MCksKDB8dHJbKG49bis4fDApKzExPj4wXSk8MCYmdnUoMHxhcltuPj4yXSksbj0wfEZBKHIpLGFyW2UrNTY+PjJdPW4sbj0wfEZBKHIpLGFyW2UrNjA+PjJdPW4sbj0wfEZBKHIpLGFyW2UrNjQ+PjJdPW4sbj0wfEZBKHIpLGFyW2UrNjg+PjJdPW4sbj0wfEZBKHIpLGFyW2UrNzI+PjJdPW4sUkEodCxyKSwoMHx0clsoaT0obj1lKzc2fDApKzExfDApPj4wXSk8MD8odHJbYXJbbj4+Ml0+PjBdPTAsYXJbZSs4MD4+Ml09MCk6KHRyW24+PjBdPTAsdHJbaT4+MF09MCksQ3UobiwwKSxhcltuPj4yXT1hclt0Pj4yXSxhcltuKzQ+PjJdPWFyW3QrND4+Ml0sYXJbbis4Pj4yXT1hclt0Kzg+PjJdLCEoMHx0cltyKzI0Pj4wXSkpcmV0dXJuIHI9MHxhclsoZT01NjU5MikrND4+Ml0sYXJbKHQ9QSk+PjJdPWFyW2U+PjJdLGFyW3QrND4+Ml09cix5dShBKzh8MCw1NjYwMCksdm9pZCh1cj1mKTthclt0Pj4yXT0wLGFyW3QrND4+Ml09MCxhclt0Kzg+PjJdPTAsb28oQSwyLDEwMCx0KSx1cj0oMDw9KDB8dHJbdCsxMT4+MF0pfHx2dSgwfGFyW3Q+PjJdKSxmKX0sZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MCxyfD0wO3ZhciBpLGYsbix0LG8sYSxjLGw9MCx1PTA7aWYodXI9KG89dXIpKzE2MHwwLGw9bysxMzZ8MCxuPShmPW8pKzU2fDAsdD1mKzR8MCxhcltmPj4yXT0yOTIsYXJbbj4+Ml09MzEyLEpmKGYrNTZ8MCx0KSxhcltmKzEyOD4+Ml09MCxhcltmKzEzMj4+Ml09LTEsYXJbZj4+Ml09NDMwNCxhcltuPj4yXT00MzI0LFNmKHQpLGFyW3Q+PjJdPTQzNDAsYXJbKGk9ZiszNnwwKT4+Ml09MCxhcls0K2k+PjJdPTAsYXJbOCtpPj4yXT0wLGFyWzEyK2k+PjJdPTAsYXJbZis1Mj4+Ml09MTYsYXJbbD4+Ml09MCxhcltsKzQ+PjJdPTAsYXJbbCs4Pj4yXT0wLFhlKHQsbCksKDB8dHJbbCsxMT4+MF0pPDAmJnZ1KDB8YXJbbD4+Ml0pLExBKGwsZSxyKSxXZShmLCh1PShjPTB8dHJbKGE9bCsxMXwwKT4+MF0pPDwyND4+MjQ8MCk/MHxhcltsPj4yXTpsLHU/MHxhcltsKzQ+PjJdOjI1NSZjKSwoMHx0clthPj4wXSk8MCYmdnUoMHxhcltsPj4yXSksMDwoMHxhcltyPj4yXSkpZm9yKGw9MDtXZShmLDE4ODYyLDIpLCgwfChsPWwrMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYodT0wfFdlKGYsMjI0NjIsOSksV2UoMHxMZih1LDB8YXJbZSs1Nj4+Ml0pLDMwMDg2LDEpLEllKEEsdCksYXJbZj4+Ml09NDMwNCxhcltuPj4yXT00MzI0LGFyW3Q+PjJdPTQzNDAsMDw9KDB8dHJbMTEraT4+MF0pKXJldHVybiBrZih0KSxiZihuKSx2b2lkKHVyPW8pO3Z1KDB8YXJbaT4+Ml0pLGtmKHQpLGJmKG4pLHVyPW99LGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTA7dmFyIGksZixuPTAsdD0wO3VyPShmPXVyKSszMnwwLG49Zix0PTB8YXJbKHJ8PTApKzEyPj4yXSxqQShyLDB8dHJbZSszNj4+MF0/MTI6OCksaT0wfGFyW2UrNTY+PjJdO2Rve2lmKDB8dHJbZSszNz4+MF0pVUEocixpKTtlbHNle2lmKGk+Pj4wPDY1NTM2KXtNQShyLDY1NTM1JmkpO2JyZWFrfXNyKDIzMDY1LDE5MTA0LDg5MSwxOTU2Myl9fXdoaWxlKDApO0tBKG4sZSxyLHQpLCgwfHRyWyhlPW4rOHwwKSsxMT4+MF0pPDAmJnZ1KDB8YXJbZT4+Ml0pLG49MHxhclsocj01NjU5MikrND4+Ml0sYXJbKHQ9QSk+PjJdPWFyW3I+PjJdLGFyW3QrND4+Ml09bix5dShBKzh8MCw1NjYwMCksdXI9Zn0sZnVuY3Rpb24oQSxlLHIpe0F8PTA7dmFyIGksZj0wLG49MDtpZih1cj0oaT11cikrMzJ8MCxuPWkrMjB8MCxxQShmPWksZXw9MCxyfD0wKSwoMHx0clsoZj1mKzh8MCkrMTE+PjBdKTwwJiZ2dSgwfGFyW2Y+PjJdKSxmPTB8dHJbZSszNz4+MF0/MHxGQShyKTo2NTUzNSYoMHxWQShyKSksYXJbZSs1Nj4+Ml09ZiwhKDB8dHJbcisyND4+MF0pKXJldHVybiByPTB8YXJbKGU9NTY1OTIpKzQ+PjJdLGFyWyhuPUEpPj4yXT1hcltlPj4yXSxhcltuKzQ+PjJdPXIseXUoQSs4fDAsNTY2MDApLHZvaWQodXI9aSk7YXJbbj4+Ml09MCxhcltuKzQ+PjJdPTAsYXJbbis4Pj4yXT0wLG9vKEEsMiwxMDAsbiksdXI9KDA8PSgwfHRyW24rMTE+PjBdKXx8dnUoMHxhcltuPj4yXSksaSl9LGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTAscnw9MDt2YXIgaSxmLG4sdCxvLGE9MCxjPTAsbD0wLHU9MCxiPTA7aWYodXI9KG89dXIpKzE2MHwwLGE9bysxMzZ8MCxuPShmPW8pKzU2fDAsdD1mKzR8MCxhcltmPj4yXT0yOTIsYXJbbj4+Ml09MzEyLEpmKGYrNTZ8MCx0KSxhcltmKzEyOD4+Ml09MCxhcltmKzEzMj4+Ml09LTEsYXJbZj4+Ml09NDMwNCxhcltuPj4yXT00MzI0LFNmKHQpLGFyW3Q+PjJdPTQzNDAsYXJbKGk9ZiszNnwwKT4+Ml09MCxhcls0K2k+PjJdPTAsYXJbOCtpPj4yXT0wLGFyWzEyK2k+PjJdPTAsYXJbZis1Mj4+Ml09MTYsYXJbYT4+Ml09MCxhclthKzQ+PjJdPTAsYXJbYSs4Pj4yXT0wLFhlKHQsYSksKDB8dHJbYSsxMT4+MF0pPDAmJnZ1KDB8YXJbYT4+Ml0pLExBKGEsZSxyKSxXZShmLCh1PShjPTB8dHJbKGw9YSsxMXwwKT4+MF0pPDwyND4+MjQ8MCk/MHxhclthPj4yXTphLHU/MHxhclthKzQ+PjJdOjI1NSZjKSwoMHx0cltsPj4wXSk8MCYmdnUoMHxhclthPj4yXSksKDB8KGE9MHxhcltlKzU2Pj4yXSkpIT0oMHwobD0wfGFyW2UrNjA+PjJdKSkpe2M9YTtkb3tpZigwPCgwfGFyW3I+PjJdKSlmb3IoYT0wO1dlKGYsMTg4NjIsMiksKDB8KGE9YSsxfDApKTwoMHxhcltyPj4yXSk7KTtpZihlPTB8V2UoZiwyMjg4NSw5KSxlPTB8V2UoMHxMZihlLDB8YXJbYz4+Ml0pLDMwMDg2LDEpLDA8KDB8YXJbcj4+Ml0pKWZvcihhPTA7V2UoZSwxODg2MiwyKSwoMHwoYT1hKzF8MCkpPCgwfGFyW3I+PjJdKTspO2lmKGU9MHxXZShlLDIyODk1LDIzKSxlPTB8V2UoMHxQZihlLDB8Y3JbYys0Pj4wXSksMzAwODYsMSksMDwoMHxhcltyPj4yXSkpZm9yKGE9MDtXZShlLDE4ODYyLDIpLCgwfChhPWErMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYodT0oZT0wfFdlKGUsMjI5MTksMjQpKSsoMHxhclsoMHxhcltlPj4yXSktMTI+PjJdKSs0fDAsYXJbdT4+Ml09LTc1JmFyW3U+PjJdfDgsdT0oZT0wfHhmKGUsMHxvcltjKzY+PjFdKSkrKDB8YXJbKDB8YXJbZT4+Ml0pLTEyPj4yXSkrNHwwLGFyW3U+PjJdPS03NSZhclt1Pj4yXXwyLGU9MHxXZShlLDMwMDg2LDEpLDA8KDB8YXJbcj4+Ml0pKWZvcihhPTA7V2UoZSwxODg2MiwyKSwoMHwoYT1hKzF8MCkpPCgwfGFyW3I+PjJdKTspO2lmKGU9MHxXZShlLDIyOTQ0LDE1KSxXZSgwfEtmKGUsMHxhclsodT1jKzh8MCk+PjJdLDB8YXJbdSs0Pj4yXSksMzAwODYsMSksMDwoMHxhcltyPj4yXSkpZm9yKGE9MDtXZShmLDE4ODYyLDIpLCgwfChhPWErMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYoV2UoZiwyMjk2MCwxMSksKDB8KGE9MHxhcltjKzE2Pj4yXSkpIT0oMHwoZT0wfGFyW2MrMjA+PjJdKSkpZm9yKDtiPTB8V2UoMHxLZihmLDB8YXJbKGI9YSs4fDApPj4yXSwwfGFyW2IrND4+Ml0pLDE5NTg4LDEpLEtmKGIsMHxhclsodT1hKzE2fDApPj4yXSwwfGFyW3UrND4+Ml0pLDA9PSgwfGFyWyh1PWEpPj4yXSkmMD09KDB8YXJbdSs0Pj4yXSl8fEtmKHU9MHxXZShmLDIyOTcyLDcpLDB8YXJbKGI9YSk+PjJdLDB8YXJbYis0Pj4yXSksV2UoZiwyMDQ0OSwxKSwoMHwoYT1hKzQwfDApKSE9KDB8ZSk7KTtXZShmLDMwMDg2LDEpLGM9YyszMnwwfXdoaWxlKCgwfGMpIT0oMHxsKSl9aWYoSWUoQSx0KSxhcltmPj4yXT00MzA0LGFyW24+PjJdPTQzMjQsYXJbdD4+Ml09NDM0MCwwPD0oMHx0clsxMStpPj4wXSkpcmV0dXJuIGtmKHQpLGJmKG4pLHZvaWQodXI9byk7dnUoMHxhcltpPj4yXSksa2YodCksYmYobiksdXI9b30sZnVuY3Rpb24oQSxlLHIpe0F8PTAscnw9MDt2YXIgaSxmLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wLGQ9MCxrPTAsaD0wLHc9MCx2PTAsbT0wLGc9MCxaPTAscD0wO2lmKHVyPShmPXVyKSszMnwwLHA9ZiwoMHwobz0wfGFyWyhrPShlfD0wKSs1NnwwKT4+Ml0pKSE9KDB8KHU9MHxhclsoaD1lKzYwfDApPj4yXSkpKXtuPTA7ZG97aWYoMT09KDB8dHJbbys0Pj4wXSkmJigwfChjPTB8YXJbbysxNj4+Ml0pKSE9KDB8KGw9MHxhcltvKzIwPj4yXSkpKWZvcihhPWM7bj0oMHxhclthKzI4Pj4yXSkrbi0oMHxhclthKzI0Pj4yXSl8MCwoMHwoYT1hKzQwfDApKSE9KDB8bCk7KTtvPW8rMzJ8MH13aGlsZSgoMHxvKSE9KDB8dSkpO2lmKDB8biYmKFVBKHIsbis4fDApLFVBKHIsMTc2ODE4NjIyOCksKDB8KHQ9MHxhcltrPj4yXSkpIT0oMHwoYj0wfGFyW2g+PjJdKSkpKWRve2lmKDE9PSgwfHRyW3QrND4+MF0pJiYoMHwocz0wfGFyW3QrMTY+PjJdKSkhPSgwfChkPTB8YXJbdCsyMD4+Ml0pKSlmb3Iobj1zO3pBKHIsbisyNHwwKSwoMHwobj1uKzQwfDApKSE9KDB8ZCk7KTt0PXQrMzJ8MH13aGlsZSgoMHx0KSE9KDB8YikpfWlmKFo9MHxhclsoYT1yKzEyfDApPj4yXSxqQShyLDB8dHJbZSszNj4+MF0/MTI6OCksYXJbZSs2OD4+Ml09YXJbYT4+Ml0sbj0odD0oMjU1JihhPTB8dHJbZSszNz4+MF0pKTwyKT80OjYsKDB8KG89MHxhcltrPj4yXSkpIT0oMHwoaT0wfGFyW2g+PjJdKSkpe3c9ZSs3M3wwLHY9ZSs3NHwwLG09ZSs3NnwwLGc9KGQ9dD8yOjQpKyhrPWE8PDI0Pj4yND8yOjApKyhoPTB8Y3JbZSs3NT4+MF0pKzR8MCx0PWE7ZG97bD1uKzQraCtkK2t8MCxjPWE9MHxhcltvKzE2Pj4yXSxzPTB8YXJbbysyMD4+Ml07ZG97aWYoKDB8YSk9PSgwfHMpKW49bDtlbHNle2lmKHU9MHxjclt3Pj4wXSxiPTB8Y3Jbdj4+MF0sISh0PDwyND4+MjQpKXtuPWcrbisoMHxicigoKHMrLTQwLWN8MCk+Pj4wKS80MHwwLHUrYnwwKSkrdStifDAsdD0wO2JyZWFrfWZvcihjPTB8Y3JbbT4+MF0sbj1sO249dSsoYytuKStifDAsKDB8KGE9YSs0MHwwKSkhPSgwfHMpOyk7fX13aGlsZSgwKTtvPW8rMzJ8MH13aGlsZSgoMHxvKSE9KDB8aSkpfWlmKGpBKHIsbiksS0EocCxlLHIsWiksMDw9KDB8dHJbKG49cCs4fDApKzExPj4wXSkpcmV0dXJuIFo9MHxhclsoWj1yPTU2NTkyKT4+Ml0scj0wfGFyWyhyPXIrNHwwKT4+Ml0sYXJbKGU9cD1BKT4+Ml09WixhclsocD1wKzR8MCk+PjJdPXIseXUoQT1BKzh8MCw1NjYwMCksdm9pZCh1cj1mKTt2dSgwfGFyW24+PjJdKSxaPTB8YXJbKFo9cj01NjU5Mik+PjJdLHI9MHxhclsocj1yKzR8MCk+PjJdLGFyWyhlPXA9QSk+PjJdPVosYXJbKHA9cCs0fDApPj4yXT1yLHl1KEE9QSs4fDAsNTY2MDApLHVyPWZ9LGZ1bmN0aW9uKEEsZSxyKXtBfD0wO3ZhciBpLGYsbix0LG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTAsQj0wLEU9MCxYPTAsVz0wLEk9MCxDPTAsRz0wLFY9MCxGPTAsUj0wLE49MCxfPTAsWT0wLFE9MCxEPTAsSj0wLE09MCxUPTAsVT0wLFM9MCxPPTAsej0wLGo9MCxIPTAseD0wLFA9MCxMPTAsSz0wLHE9MCwkPTA7aWYodXI9KHQ9dXIpKzM4NHwwLHE9dCsxNDR8MCxsPSgkPXQpKzM0MHwwLGY9dCsxODR8MCxuPXQrMzI4fDAscUEobz10KzM1MnwwLGV8PTAscnw9MCksKDB8dHJbKG89bys4fDApKzExPj4wXSk8MCYmdnUoMHxhcltvPj4yXSksYT0wfFZBKHIpLG89MTwoMjU1JihLPTB8dHJbKGk9ZSszN3wwKT4+MF0pKT8xNSZhOjAsMmU0PCgwfChLPSgyNTUmSyk8Mj82NTUzNSYoMHxWQShyKSk6MHxGQShyKSkpKXJldHVybiBlPSQrNjR8MCxhclsoYz0kKzh8MCk+PjJdPTQ1MjQsYT0kKzEyfDAsYXJbJD4+Ml09MTg4LGFyW2U+PjJdPTIwOCxKZigkKzY0fChhclskKzQ+PjJdPTApLGEpLGFyWyQrMTM2Pj4yXT0wLGFyWyQrMTQwPj4yXT0tMSxhclskPj4yXT00NTA0LGFyW2U+PjJdPTQ1NDQsYXJbYz4+Ml09NDUyNCxTZihhKSxhclthPj4yXT00MzQwLGFyWyhjPSQrNDR8MCk+PjJdPTAsYXJbYys0Pj4yXT0wLGFyW2MrOD4+Ml09MCxhcltjKzEyPj4yXT0wLGFyWyQrNjA+PjJdPTI0LGFyW3E+PjJdPTAsYXJbcSs0Pj4yXT0wLGFyW3ErOD4+Ml09MCxYZShhLHEpLCgwfHRyW3ErMTE+PjBdKTwwJiZ2dSgwfGFyW3E+PjJdKSxXZSgwfFBmKDB8V2UoMHxQZigwfFdlKG89JCs4fDAsMjI3NTQsMTgpLEspLDIyNzczLDQ0KSwyZTQpLDIyODE4LDcpLEllKGwsYSksb28oQSw2LDFlMyxsKSwoMHx0cltsKzExPj4wXSk8MCYmdnUoMHxhcltsPj4yXSksYXJbJD4+Ml09NDUwNCxhcltlPj4yXT00NTQ0LGFyW28+PjJdPTQ1MjQsYXJbYT4+Ml09NDM0MCwoMHx0cltjKzExPj4wXSk8MCYmdnUoMHxhcltjPj4yXSksa2YoYSksYmYoZSksdm9pZCh1cj10KTtBOmRve2lmKDA8KDB8Sykpe1c9JCs0fDAsST0kKzZ8MCxDPSQrOHwwLHg9KDY1NTM1JmEpPj4+NCYyNTUsRj0xMitmfDAsUj00K2Z8MCxOPUc9NjQrZnwwLF89MTM2K2Z8MCxZPTE0MCtmfDAsRD02MCtmfDAsSj1xKzExfDAsTT1WPTgrZnwwLFQ9MTErbnwwLFU9KFE9NDQrZnwwKSsxMXwwLE89JCsyMHwwLHo9cisyNHwwLGo9ZSs2MHwwLEg9ZSs2NHwwLEI9ZSs1NnwwLEU9Uz0kKzE2fDAsWD0wIT0oMHxvKSx5PTI1NSZvLGc9cSs4fDAscD0oNjU1MzUmYSk+Pj4xMiYyNTUsWj1xKzE2fDAsbT0oNjU1MzUmYSk+Pj44JjI1NSxrPSQrMjR8MCx3PXErMjh8MCx2PWg9cSsyNHwwLGQ9MDtlOmZvcig7Oyl7Zm9yKGFyWyQ+PjJdPTAsZT0obz1JKSsyMnwodHJbVz4+MF09MCk7KDB8KG89bysyfChvcltvPj4xXT0wKSkpPCgwfGUpOyk7c3dpdGNoKG89KDB8Y3JbaT4+MF0pPDI/NjU1MzUmKDB8VkEocikpOjB8RkEociksYXJbJD4+Ml09bywwfHRyW2k+PjBdJiYocz0xNSYoMHxWQShyKSksdHJbVz4+MF09cykscz0wfFZBKHIpLG9yW0k+PjFdPXMsYXJbKHM9Qyk+PjJdPTAsYXJbcys0Pj4yXT0wLDE1Jngpe2Nhc2UgNDpvPTB8RkEociksZT0wLEw9MjY7YnJlYWs7Y2FzZSA4Om89MHxGQShyKSxhclsoZT1DKT4+Ml09MCxhcltlKzQ+PjJdPW8sZT1DLG89MHxGQShyKXxhcltlPj4yXSxlPTB8YXJbZSs0Pj4yXSxMPTI2fTI2PT0oMHxMKSYmKEw9MCxhclsocz1DKT4+Ml09byxhcltzKzQ+PjJdPWUpLHM9NjU1MzUmKG89MHxWQShyKSk7ZG97aWYoKDY1NTM1Jm8pPD0zMil7cjpkb3tpZihvPDwxNj4+MTYpZm9yKGI9MDs7KXtmb3IoZT0obz1xKSszNnwwOygwfChvPW8rNHwoYXJbbz4+Ml09MCkpKTwoMHxlKTspO2k6ZG97aWYoWCYxPCgwfGNyW2k+PjBdKSlzd2l0Y2goMTUmeSl7Y2FzZSA0Omw9MHxGQShyKSxhclsodT1xKT4+Ml09bCxhclt1KzQ+PjJdPTA7YnJlYWsgaTtjYXNlIDg6YT0wfEZBKHIpLGFyWyhjPXEpPj4yXT0wLGFyW2MrND4+Ml09YSxjPTB8RkEociksbD0wfGFyWyhhPXEpKzQ+PjJdLGFyWyh1PXEpPj4yXT1hclthPj4yXXxjLGFyW3UrND4+Ml09bDticmVhayBpO2RlZmF1bHQ6YnJlYWsgaX19d2hpbGUoMCk7c3dpdGNoKGFyWyh1PWcpPj4yXT0wLGFyW3UrND4+Ml09MCwxNSZwKXtjYXNlIDQ6bz0wfEZBKHIpLGU9MCxMPTQ0O2JyZWFrO2Nhc2UgODpvPTB8RkEociksYXJbKGU9Zyk+PjJdPTAsYXJbZSs0Pj4yXT1vLGU9ZyxvPTB8RkEocil8YXJbZT4+Ml0sZT0wfGFyW2UrND4+Ml0sTD00NH1zd2l0Y2goNDQ9PSgwfEwpJiYoTD0wLGFyWyh1PWcpPj4yXT1vLGFyW3UrND4+Ml09ZSksYXJbKHU9Wik+PjJdPTAsYXJbdSs0Pj4yXT0wLDE1Jm0pe2Nhc2UgNDpvPTB8RkEociksZT0wLEw9NDg7YnJlYWs7Y2FzZSA4Om89MHxGQShyKSxhclsoZT1aKT4+Ml09MCxhcltlKzQ+PjJdPW8sZT1aLG89MHxGQShyKXxhcltlPj4yXSxlPTB8YXJbZSs0Pj4yXSxMPTQ4fWlmKDQ4PT0oMHxMKSYmKEw9MCxhclsodT1aKT4+Ml09byxhclt1KzQ+PjJdPWUpLCgwfChlPTB8YXJbTz4+Ml0pKT09KDB8YXJbaz4+Ml0pKVF0KEUscSksbz0wfGFyW2g+PjJdO2Vsc2V7aWYoYXJbZT4+Ml09YXJbcT4+Ml0sYXJbZSs0Pj4yXT1hcltxKzQ+PjJdLGFyW2UrOD4+Ml09YXJbcSs4Pj4yXSxhcltlKzEyPj4yXT1hcltxKzEyPj4yXSxhcltlKzE2Pj4yXT1hcltxKzE2Pj4yXSxhcltlKzIwPj4yXT1hcltxKzIwPj4yXSxhclsoYT1lKzI0fDApPj4yXT0wLGFyWyh1PWUrMjh8MCk+PjJdPTAsbz0oYXJbZSszMj4+Ml09MCl8YXJbdj4+Ml0sYz0oMHxhclt3Pj4yXSktb3wwKXtpZigoMHxjKTwwKXtMPTUyO2JyZWFrIGV9bD0wfGh1KGMpLGFyW3U+PjJdPWwsYXJbYT4+Ml09bCxhcltlKzMyPj4yXT1sK2Msbz0wfGFyW3Y+PjJdLDA8KDB8KGU9KDB8YXJbdz4+Ml0pLW98MCkpJiYoaGIoMHxsLDB8bywwfGUpLGFyW3U+PjJdPWwrZSl9YXJbTz4+Ml09NDArKDB8YXJbTz4+Ml0pfWlmKDB8byYmKCgwfGFyW3c+PjJdKSE9KDB8bykmJihhclt3Pj4yXT1vKSx2dShvKSksKDB8cyk8PSgwfChiPWIrMXwwKSkpYnJlYWsgcn19d2hpbGUoMCk7aWYoISgwfHRyW3o+PjBdKSl7aWYoKDB8KG89MHxhcltqPj4yXSkpPT0oMHxhcltIPj4yXSkpe0p0KEIsJCksbD0wO2JyZWFrfWFyW28+PjJdPWFyWyQ+PjJdLGFyW28rND4+Ml09YXJbJCs0Pj4yXSxhcltvKzg+PjJdPWFyWyQrOD4+Ml0sYXJbbysxMj4+Ml09YXJbJCsxMj4+Ml0sRHQobysxNnwwLEUpLGFyW2o+PjJdPTMyKygwfGFyW2o+PjJdKSxsPTA7YnJlYWt9bD0wfWVsc2UgYXJbVj4+Ml09NDUyNCxhcltmPj4yXT0xODgsYXJbRz4+Ml09MjA4LGFyW1I+PjJdPTAsSmYoTixGKSxhcltfPj4yXT0wLGFyW1k+PjJdPS0xLGFyW2Y+PjJdPTQ1MDQsYXJbRz4+Ml09NDU0NCxhcltWPj4yXT00NTI0LFNmKEYpLGFyW0Y+PjJdPTQzNDAsYXJbUT4+Ml09MCxhcltRKzQ+PjJdPTAsYXJbUSs4Pj4yXT0wLGFyW1ErMTI+PjJdPTAsYXJbRD4+Ml09MjQsYXJbcT4+Ml09MCxhcltxKzQ+PjJdPTAsYXJbcSs4Pj4yXT0wLFhlKEYscSksKDB8dHJbSj4+MF0pPDAmJnZ1KDB8YXJbcT4+Ml0pLFdlKDB8UGYoMHxXZSgwfFBmKDB8V2UoTSwyMjgyNiwzMSkscyksMjI4NTgsMjYpLDMyKSwxODkwNCwyKSxJZShuLEYpLG9vKEEsNiwxZTMsbiksKDB8dHJbVD4+MF0pPDAmJnZ1KDB8YXJbbj4+Ml0pLGFyW2Y+PjJdPTQ1MDQsYXJbRz4+Ml09NDU0NCxhcltNPj4yXT00NTI0LGFyW0Y+PjJdPTQzNDAsKDB8dHJbVT4+MF0pPDAmJnZ1KDB8YXJbUT4+Ml0pLGtmKEYpLGJmKEcpLGw9MX13aGlsZSgwKTtpZigwfChvPTB8YXJbUz4+Ml0pKXtpZigoMHwoZT0wfGFyW08+PjJdKSkhPSgwfG8pKXtmb3IoO2E9ZSstNDB8MCxhcltPPj4yXT1hLCgwfChlPShjPTB8YXJbZSstMTY+PjJdKT8oKDB8YXJbKGU9ZSstMTJ8MCk+PjJdKSE9KDB8YykmJihhcltlPj4yXT1jKSx2dShjKSwwfGFyW08+PjJdKTphKSkhPSgwfG8pOyk7bz0wfGFyW1M+PjJdfXZ1KG8pfWlmKGQ9ZCsxfDAsMHxsKXtMPTgwO2JyZWFrfWlmKCgwfEspPD0oMHxkKSl7UD16O2JyZWFrIEF9fWlmKDUyPT0oMHxMKSl6bCgpO2Vsc2UgaWYoODA9PSgwfEwpKXJldHVybiB2b2lkKHVyPXQpfWVsc2UgUD1yKzI0fDB9d2hpbGUoMCk7MHx0cltQPj4wXT8oYXJbcT4+Ml09MCxhcltxKzQ+PjJdPTAsYXJbcSs4Pj4yXT0wLG9vKEEsMiwxMDAscSksKDB8dHJbcSsxMT4+MF0pPDAmJnZ1KDB8YXJbcT4+Ml0pKToocT0wfGFyWyhLPTU2NTkyKSs0Pj4yXSxhclsoJD1BKT4+Ml09YXJbSz4+Ml0sYXJbJCs0Pj4yXT1xLHl1KEErOHwwLDU2NjAwKSksdXI9dH0sZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MCxyfD0wO3ZhciBpLGYsbix0LG8sYSxjPTAsbD0wLHU9MDtpZih1cj0oYT11cikrMTYwfDAsZj1hKzEzNnwwLHQ9KG49YSkrNTZ8MCxvPW4rNHwwLGFyW24+PjJdPTI5Mixhclt0Pj4yXT0zMTIsSmYobis1NnwwLG8pLGFyW24rMTI4Pj4yXT0wLGFyW24rMTMyPj4yXT0tMSxhcltuPj4yXT00MzA0LGFyW3Q+PjJdPTQzMjQsU2YobyksYXJbbz4+Ml09NDM0MCxhclsoaT1uKzM2fDApPj4yXT0wLGFyWzQraT4+Ml09MCxhcls4K2k+PjJdPTAsYXJbMTIraT4+Ml09MCxhcltuKzUyPj4yXT0xNixhcltmPj4yXT0wLGFyWzQrZj4+Ml09MCxhcls4K2Y+PjJdPTAsWGUobyxmKSwoMHx0clsxMStmPj4wXSk8MCYmdnUoMHxhcltmPj4yXSksTEEoZixlLHIpLFdlKG4sKHU9KGw9MHx0clsoYz0xMStmfDApPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW2Y+PjJdOmYsdT8wfGFyWzQrZj4+Ml06MjU1JmwpLCgwfHRyW2M+PjBdKTwwJiZ2dSgwfGFyW2Y+PjJdKSxuZShmLGUsciksV2UobiwoYz0obD0wfHRyWyh1PTExK2Z8MCk+PjBdKTw8MjQ+PjI0PDApPzB8YXJbZj4+Ml06ZixjPzB8YXJbNCtmPj4yXToyNTUmbCksKDB8dHJbdT4+MF0pPDAmJnZ1KDB8YXJbZj4+Ml0pLEllKEEsbyksYXJbbj4+Ml09NDMwNCxhclt0Pj4yXT00MzI0LGFyW28+PjJdPTQzNDAsMDw9KDB8dHJbMTEraT4+MF0pKXJldHVybiBrZihvKSxiZih0KSx2b2lkKHVyPWEpO3Z1KDB8YXJbaT4+Ml0pLGtmKG8pLGJmKHQpLHVyPWF9LGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTA7dmFyIGksZixuLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wO3VyPShuPXVyKSszMnwwLGk9bixmPTB8YXJbKHJ8PTApKzEyPj4yXSxqQShyLDB8dHJbZSszNj4+MF0/MTI6OCksYT1lKzQ4fDAsU0EociwwfHRyW2UrMzc+PjBdPzQ6MiwoMHxhclthPj4yXSktKDB8YXJbZSs0ND4+Ml0pPj4zLDApLG89MHxhcltlKzQ0Pj4yXSxhPTB8YXJbYT4+Ml07QTpkb3tpZigoMHxvKT09KDB8YSkpdD1BKzh8MCxsPTg7ZWxzZSBmb3IoYz0odD1BKzh8MCkrMTF8MDs7KXtpZih1PTB8YXJbbz4+Ml0sbnNbMTI3JmFyWzEyKygwfGFyW3U+PjJdKT4+Ml1dKEEsdSxyKSwwfGFyW0E+PjJdKWJyZWFrIEE7aWYoKDB8dHJbYz4+MF0pPDAmJnZ1KDB8YXJbdD4+Ml0pLCgwfChvPW8rOHwwKSk9PSgwfGEpKXtsPTg7YnJlYWt9fX13aGlsZSgwKTs4PT0oMHxsKSYmKGw9MHxhclsoYz01NjU5MikrND4+Ml0sYXJbKHU9QSk+PjJdPWFyW2M+PjJdLGFyW3UrND4+Ml09bCx5dSh0LDU2NjAwKSksS0EoaSxlLHIsZiksdXI9KDA8PSgwfHRyWyh0PWkrOHwwKSsxMT4+MF0pfHx2dSgwfGFyW3Q+PjJdKSxuKX0sZnVuY3Rpb24oQSxlLHIpe0F8PTA7dmFyIGksZj0wO3JldHVybiB1cj0oaT11cikrMzJ8MCxxQShmPWksZXw9MCxyfD0wKSwoMHx0clsoZj1mKzh8MCkrMTE+PjBdKTwwJiZ2dSgwfGFyW2Y+PjJdKSwoZj0wfHRyW2UrMzc+PjBdPzB8RkEocik6NjU1MzUmKDB8VkEocikpKT8kQShBLGUsciwtMSk6KGU9MHxhclsoZj01NjU5MikrND4+Ml0sYXJbKHI9QSk+PjJdPWFyW2Y+PjJdLGFyW3IrND4+Ml09ZSx5dShBKzh8MCw1NjYwMCkpLHZvaWQodXI9aSl9LGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTAscnw9MDt2YXIgaSxmLG4sdCxvLGE9MCxjPTAsbD0wLHU9MDtpZih1cj0obz11cikrMTYwfDAsYT1vKzEzNnwwLG49KGY9bykrNTZ8MCx0PWYrNHwwLGFyW2Y+PjJdPTI5MixhcltuPj4yXT0zMTIsSmYoZis1NnwwLHQpLGFyW2YrMTI4Pj4yXT0wLGFyW2YrMTMyPj4yXT0tMSxhcltmPj4yXT00MzA0LGFyW24+PjJdPTQzMjQsU2YodCksYXJbdD4+Ml09NDM0MCxhclsoaT1mKzM2fDApPj4yXT0wLGFyWzQraT4+Ml09MCxhcls4K2k+PjJdPTAsYXJbMTIraT4+Ml09MCxhcltmKzUyPj4yXT0xNixhclthPj4yXT0wLGFyW2ErND4+Ml09MCxhclthKzg+PjJdPTAsWGUodCxhKSwoMHx0clthKzExPj4wXSk8MCYmdnUoMHxhclthPj4yXSksTEEoYSxlLHIpLFdlKGYsKHU9KGw9MHx0clsoYz1hKzExfDApPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW2E+PjJdOmEsdT8wfGFyW2ErND4+Ml06MjU1JmwpLCgwfHRyW2M+PjBdKTwwJiZ2dSgwfGFyW2E+PjJdKSwwPCgwfGFyW3I+PjJdKSlmb3IoYT0wO1dlKGYsMTg4NjIsMiksKDB8KGE9YSsxfDApKTwoMHxhcltyPj4yXSk7KTtpZihjPTB8V2UoZiwyMjQ2Miw5KSxjPTB8V2UoMHxMZihjLDB8YXJbZSs1Nj4+Ml0pLDMwMDg2LDEpLDA8KDB8YXJbcj4+Ml0pKWZvcihhPTA7V2UoYywxODg2MiwyKSwoMHwoYT1hKzF8MCkpPCgwfGFyW3I+PjJdKTspO2lmKGM9MHxXZShjLDIyNDcyLDIzKSxjPTB8V2UoMHx4ZihjLDB8b3JbZSs2MD4+MV0pLDMwMDg2LDEpLDA8KDB8YXJbcj4+Ml0pKWZvcihhPTA7V2UoYywxODg2MiwyKSwoMHwoYT1hKzF8MCkpPCgwfGFyW3I+PjJdKTspO2lmKGE9MHxXZShjLDIyNDk2LDExKSxjPTB8V2UoMHxXZShhLCh1PShjPTB8dHJbKGw9ZSs2NHwwKSsxMT4+MF0pPDwyND4+MjQ8MCk/MHxhcltsPj4yXTpsLHU/MHxhcltlKzY4Pj4yXToyNTUmYyksMzAwODYsMSksMDwoMHxhcltyPj4yXSkpZm9yKGE9MDtXZShjLDE4ODYyLDIpLCgwfChhPWErMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYoYT0wfFdlKGMsMjI1MDgsMTEpLGM9MHxXZSgwfFdlKGEsKHU9KGM9MHx0clsobD1lKzc2fDApKzExPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW2w+PjJdOmwsdT8wfGFyW2UrODA+PjJdOjI1NSZjKSwzMDA4NiwxKSwwPCgwfGFyW3I+PjJdKSlmb3IoYT0wO1dlKGMsMTg4NjIsMiksKDB8KGE9YSsxfDApKTwoMHxhcltyPj4yXSk7KTtpZihhPTB8V2UoYywyMjUyMCwxNCksYz0wfFdlKDB8V2UoYSwodT0oYz0wfHRyWyhsPWUrODh8MCkrMTE+PjBdKTw8MjQ+PjI0PDApPzB8YXJbbD4+Ml06bCx1PzB8YXJbZSs5Mj4+Ml06MjU1JmMpLDMwMDg2LDEpLDA8KDB8YXJbcj4+Ml0pKWZvcihhPTA7V2UoYywxODg2MiwyKSwoMHwoYT1hKzF8MCkpPCgwfGFyW3I+PjJdKTspO2lmKGE9MHxXZShjLDIyNTM1LDE4KSxjPTB8V2UoMHxXZShhLCh1PShjPTB8dHJbKGw9ZSsxMDB8MCkrMTE+PjBdKTw8MjQ+PjI0PDApPzB8YXJbbD4+Ml06bCx1PzB8YXJbZSsxMDQ+PjJdOjI1NSZjKSwzMDA4NiwxKSwwPCgwfGFyW3I+PjJdKSlmb3IoYT0wO1dlKGMsMTg4NjIsMiksKDB8KGE9YSsxfDApKTwoMHxhcltyPj4yXSk7KTtpZihhPTB8V2UoYywyMjU1NCwxNSksYz0wfFdlKDB8V2UoYSwodT0oYz0wfHRyWyhsPWUrMTEyfDApKzExPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW2w+PjJdOmwsdT8wfGFyW2UrMTE2Pj4yXToyNTUmYyksMzAwODYsMSksMDwoMHxhcltyPj4yXSkpZm9yKGE9MDtXZShjLDE4ODYyLDIpLCgwfChhPWErMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYobD0odT0wfFdlKGMsMjI1NzAsMTMpKSsoMHxhclsoMHxhclt1Pj4yXSktMTI+PjJdKSs0fDAsYXJbbD4+Ml09MXxhcltsPj4yXSxXZSgwfEhmKHUsMCE9KDB8dHJbZSsxMjQ+PjBdKSksMzAwODYsMSksSWUoQSx0KSxhcltmPj4yXT00MzA0LGFyW24+PjJdPTQzMjQsYXJbdD4+Ml09NDM0MCwwPD0oMHx0clsxMStpPj4wXSkpcmV0dXJuIGtmKHQpLGJmKG4pLHZvaWQodXI9byk7dnUoMHxhcltpPj4yXSksa2YodCksYmYobiksdXI9b30sZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MDt2YXIgaSxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTA7dXI9KGk9dXIpKzMyfDAsYz1pLGw9MHxhclsocnw9MCkrMTI+PjJdLGpBKHIsMHx0cltlKzM2Pj4wXT8xMjo4KSwoMjU1JihmPTB8dHJbKG49ZSszN3wwKT4+MF0pKTwyPyhNQShyLDY1NTM1JmFyW2UrNTY+PjJdKSxNQShyLDB8b3JbZSs2MD4+MV0pLE9BKHIsZSs3NnwwKSxPQShyLGUrODh8MCksT0EocixlKzEwMHwwKSwxPCgyNTUmKGY9MHx0cltuPj4wXSkpJiYodD0zKSk6dD0zO0E6ZG97aWYoMz09KDB8dCkpe3N3aXRjaChmPDwyND4+MjQpe2Nhc2UgMjpNQShyLDY1NTM1JmFyW2UrNTY+PjJdKTticmVhaztjYXNlIDM6VUEociwwfGFyW2UrNTY+PjJdKX1NQShyLDB8b3JbZSs2MD4+MV0pLChuPShmPTB8dHJbKG89KGE9ZSs2NHwwKSsxMXwwKT4+MF0pPDwyND4+MjQ8MCk/Zj0wfGFyW2UrNjg+PjJdOmYmPTI1NSxmPyhmPW4/MHxhclthPj4yXTphLFVBKHIsdHJbZisxPj4wXTw8MTZ8Y3JbZj4+MF08PDI0fHRyW2YrMj4+MF08PDh8dHJbZiszPj4wXSkpOlVBKHIsMCksT0EocixlKzc2fDApLG49MHx0cltvPj4wXSxmPTB8YXJbKHQ9ZSs2OHwwKT4+Ml07ZG97aWYoND09KDB8KG48PDI0Pj4yNDwwP2Y6MjU1Jm4pKSl7aWYoMHxZdShhLDAsLTEsMjI0NTIsNCkpe249MHx0cltvPj4wXSxmPTB8YXJbdD4+Ml07YnJlYWt9T0EocixlKzg4fDApLE9BKHIsZSsxMDB8MCk7YnJlYWsgQX19d2hpbGUoMCk7ND09KDB8KG48PDI0Pj4yNDwwP2Y6MjU1Jm4pKSYmMD09KDB8WXUoYSwwLC0xLDIyNDU3LDQpKSYmT0EocixlKzExMnwwKX19d2hpbGUoMCk7aWYoS0EoYyxlLHIsbCksMDw9KDB8dHJbKGY9Yys4fDApKzExPj4wXSkpcmV0dXJuIGU9MHxhclsoZT1jPTU2NTkyKT4+Ml0sYz0wfGFyWyhjPWMrNHwwKT4+Ml0sYXJbKHI9bD1BKT4+Ml09ZSxhclsobD1sKzR8MCk+PjJdPWMseXUoQT1BKzh8MCw1NjYwMCksdm9pZCh1cj1pKTt2dSgwfGFyW2Y+PjJdKSxlPTB8YXJbKGU9Yz01NjU5Mik+PjJdLGM9MHxhclsoYz1jKzR8MCk+PjJdLGFyWyhyPWw9QSk+PjJdPWUsYXJbKGw9bCs0fDApPj4yXT1jLHl1KEE9QSs4fDAsNTY2MDApLHVyPWl9LGZ1bmN0aW9uKEEsZSxyKXtBfD0wO3ZhciBpLGY9MCxuPTAsdD0wLG89MCxhPTA7dXI9KGk9dXIpKzMyfDAsYT1pKzIwfDAscUEoZj1pLGV8PTAscnw9MCksKDB8dHJbKGY9Zis4fDApKzExPj4wXSk8MCYmdnUoMHxhcltmPj4yXSksKDI1NSYoZj0wfHRyWyh0PWUrMzd8MCk+PjBdKSk8Mj8oZj02NTUzNSYoMHxWQShyKSksYXJbZSs1Nj4+Ml09ZixmPTB8VkEociksb3JbZSs2MD4+MV09ZixSQShhLHIpLCgwfHRyWyhuPShmPWUrNzZ8MCkrMTF8MCk+PjBdKTwwPyh0clthcltmPj4yXT4+MF09MCxhcltlKzgwPj4yXT0wKToodHJbZj4+MF09MCx0cltuPj4wXT0wKSxDdShmLDApLGFyW2Y+PjJdPWFyW2E+PjJdLGFyW2YrND4+Ml09YXJbYSs0Pj4yXSxhcltmKzg+PjJdPWFyW2ErOD4+Ml0sUkEoYSxyKSwoMHx0clsobj0oZj1lKzg4fDApKzExfDApPj4wXSk8MD8odHJbYXJbZj4+Ml0+PjBdPTAsYXJbZSs5Mj4+Ml09MCk6KHRyW2Y+PjBdPTAsdHJbbj4+MF09MCksQ3UoZiwwKSxhcltmPj4yXT1hclthPj4yXSxhcltmKzQ+PjJdPWFyW2ErND4+Ml0sYXJbZis4Pj4yXT1hclthKzg+PjJdLFJBKGEsciksKDB8dHJbKG49KGY9ZSsxMDB8MCkrMTF8MCk+PjBdKTwwPyh0clthcltmPj4yXT4+MF09MCxhcltlKzEwND4+Ml09MCk6KHRyW2Y+PjBdPTAsdHJbbj4+MF09MCksQ3UoZiwwKSxhcltmPj4yXT1hclthPj4yXSxhcltmKzQ+PjJdPWFyW2ErND4+Ml0sYXJbZis4Pj4yXT1hclthKzg+PjJdLDE8KDI1NSYoZj0wfHRyW3Q+PjBdKSkmJihvPTE0KSk6bz0xNDtBOmRve2lmKDE0PT0oMHxvKSl7aWYodHJbZSsxMjQ+PjBdPTEmYXJbZSs0MD4+Ml0sZj1mPDwyND4+MjQ9PTI/NjU1MzUmKDB8VkEocikpOjB8RkEociksYXJbZSs1Nj4+Ml09ZixvPTB8VkEociksb3JbZSs2MD4+MV09bywwfChvPTB8RkEocikpJiYodHJbYT4+MF09MCx0clthKzE+PjBdPTAsdHJbYSsyPj4wXT0wLHRyW2ErMz4+MF09MCx0clthKzQ+PjBdPTAsZj0odHJbYSs1Pj4wXT0wKXxrYigwfG8pLCgwfHRyWyh0PShuPWUrNjR8MCkrMTF8MCk+PjBdKTwwPyh0clthcltuPj4yXT4+MF09MCxhcltlKzY4Pj4yXT0wKToodHJbbj4+MF09MCx0clt0Pj4wXT0wKSxDdShuLDApLGFyW2UrNjQ+PjJdPWYsdHJbZSs2OD4+MF09MCx0clsodD1lKzY5fDApPj4wXT0wfHRyW2E+PjBdLHRyW3QrMT4+MF09MHx0clthKzE+PjBdLHRyW3QrMj4+MF09MHx0clthKzI+PjBdLHRyW3QrMz4+MF09MHx0clthKzM+PjBdLHRyW3QrND4+MF09MHx0clthKzQ+PjBdLHRyW3QrNT4+MF09MHx0clthKzU+PjBdLHRyW2UrNzU+PjBdPTQpLFJBKGEsciksKDB8dHJbKG49KGY9ZSs3NnwwKSsxMXwwKT4+MF0pPDA/KHRyW2FyW2Y+PjJdPj4wXT0wLGFyW2UrODA+PjJdPTApOih0cltmPj4wXT0wLHRyW24+PjBdPTApLEN1KGYsMCksYXJbZj4+Ml09YXJbYT4+Ml0sYXJbZis0Pj4yXT1hclthKzQ+PjJdLGFyW2YrOD4+Ml09YXJbYSs4Pj4yXSwxOTcwNDMyMjg4PD0oMHxvKSl7c3dpdGNoKDB8byl7Y2FzZSAxOTcwNDMyMjg4OmJyZWFrO2RlZmF1bHQ6YnJlYWsgQX1SQShhLHIpLCgwfHRyWyhuPShmPWUrMTEyfDApKzExfDApPj4wXSk8MD8odHJbYXJbZj4+Ml0+PjBdPTAsYXJbZSsxMTY+PjJdPTApOih0cltmPj4wXT0wLHRyW24+PjBdPTApLEN1KGYsMCksYXJbZj4+Ml09YXJbYT4+Ml0sYXJbZis0Pj4yXT1hclthKzQ+PjJdLGFyW2YrOD4+Ml09YXJbYSs4Pj4yXTticmVha31zd2l0Y2goMHxvKXtjYXNlIDE4MzU2MjU4Mjk6YnJlYWs7ZGVmYXVsdDpicmVhayBBfVJBKGEsciksKDB8dHJbKG49KGY9ZSs4OHwwKSsxMXwwKT4+MF0pPDA/KHRyW2FyW2Y+PjJdPj4wXT0wLGFyW2UrOTI+PjJdPTApOih0cltmPj4wXT0wLHRyW24+PjBdPTApLEN1KGYsMCksYXJbZj4+Ml09YXJbYT4+Ml0sYXJbZis0Pj4yXT1hclthKzQ+PjJdLGFyW2YrOD4+Ml09YXJbYSs4Pj4yXSxSQShhLHIpLCgwfHRyWyhuPShmPWUrMTAwfDApKzExfDApPj4wXSk8MD8odHJbYXJbZj4+Ml0+PjBdPTAsYXJbZSsxMDQ+PjJdPTApOih0cltmPj4wXT0wLHRyW24+PjBdPTApLEN1KGYsMCksYXJbZj4+Ml09YXJbYT4+Ml0sYXJbZis0Pj4yXT1hclthKzQ+PjJdLGFyW2YrOD4+Ml09YXJbYSs4Pj4yXX19d2hpbGUoMCk7aWYoISgwfHRyW3IrMjQ+PjBdKSlyZXR1cm4gcj0wfGFyWyhlPTU2NTkyKSs0Pj4yXSxhclsoYT1BKT4+Ml09YXJbZT4+Ml0sYXJbYSs0Pj4yXT1yLHl1KEErOHwwLDU2NjAwKSx2b2lkKHVyPWkpO2FyW2E+PjJdPTAsYXJbYSs0Pj4yXT0wLGFyW2ErOD4+Ml09MCxvbyhBLDIsMTAwLGEpLHVyPSgwPD0oMHx0clthKzExPj4wXSl8fHZ1KDB8YXJbYT4+Ml0pLGkpfSxmdW5jdGlvbihBLGUscil7QXw9MCxlfD0wLHJ8PTA7dmFyIGksZixuLHQsbyxhLGM9MCxsPTAsdT0wO2lmKHVyPShhPXVyKSsxNjB8MCxmPWErMTM2fDAsdD0obj1hKSs1NnwwLG89bis0fDAsYXJbbj4+Ml09MjkyLGFyW3Q+PjJdPTMxMixKZihuKzU2fDAsbyksYXJbbisxMjg+PjJdPTAsYXJbbisxMzI+PjJdPS0xLGFyW24+PjJdPTQzMDQsYXJbdD4+Ml09NDMyNCxTZihvKSxhcltvPj4yXT00MzQwLGFyWyhpPW4rMzZ8MCk+PjJdPTAsYXJbNCtpPj4yXT0wLGFyWzgraT4+Ml09MCxhclsxMitpPj4yXT0wLGFyW24rNTI+PjJdPTE2LGFyW2Y+PjJdPTAsYXJbNCtmPj4yXT0wLGFyWzgrZj4+Ml09MCxYZShvLGYpLCgwfHRyWzExK2Y+PjBdKTwwJiZ2dSgwfGFyW2Y+PjJdKSxMQShmLGUsciksV2UobiwodT0obD0wfHRyWyhjPTExK2Z8MCk+PjBdKTw8MjQ+PjI0PDApPzB8YXJbZj4+Ml06Zix1PzB8YXJbNCtmPj4yXToyNTUmbCksKDB8dHJbYz4+MF0pPDAmJnZ1KDB8YXJbZj4+Ml0pLG5lKGYsZSxyKSxXZShuLChjPShsPTB8dHJbKHU9MTErZnwwKT4+MF0pPDwyND4+MjQ8MCk/MHxhcltmPj4yXTpmLGM/MHxhcls0K2Y+PjJdOjI1NSZsKSwoMHx0clt1Pj4wXSk8MCYmdnUoMHxhcltmPj4yXSksSWUoQSxvKSxhcltuPj4yXT00MzA0LGFyW3Q+PjJdPTQzMjQsYXJbbz4+Ml09NDM0MCwwPD0oMHx0clsxMStpPj4wXSkpcmV0dXJuIGtmKG8pLGJmKHQpLHZvaWQodXI9YSk7dnUoMHxhcltpPj4yXSksa2YobyksYmYodCksdXI9YX0sZnVuY3Rpb24oQSxlLHIpeyRBKEF8PTAsZXw9MCxyfD0wLC0xKX0sZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MCxyfD0wO3ZhciBpLGYsbix0LG8sYSxjPTAsbD0wLHU9MDtpZih1cj0oYT11cikrMTYwfDAsZj1hKzEzNnwwLHQ9KG49YSkrNTZ8MCxvPW4rNHwwLGFyW24+PjJdPTI5Mixhclt0Pj4yXT0zMTIsSmYobis1NnwwLG8pLGFyW24rMTI4Pj4yXT0wLGFyW24rMTMyPj4yXT0tMSxhcltuPj4yXT00MzA0LGFyW3Q+PjJdPTQzMjQsU2YobyksYXJbbz4+Ml09NDM0MCxhclsoaT1uKzM2fDApPj4yXT0wLGFyWzQraT4+Ml09MCxhcls4K2k+PjJdPTAsYXJbMTIraT4+Ml09MCxhcltuKzUyPj4yXT0xNixhcltmPj4yXT0wLGFyWzQrZj4+Ml09MCxhcls4K2Y+PjJdPTAsWGUobyxmKSwoMHx0clsxMStmPj4wXSk8MCYmdnUoMHxhcltmPj4yXSksTEEoZixlLHIpLFdlKG4sKHU9KGw9MHx0clsoYz0xMStmfDApPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW2Y+PjJdOmYsdT8wfGFyWzQrZj4+Ml06MjU1JmwpLCgwfHRyW2M+PjBdKTwwJiZ2dSgwfGFyW2Y+PjJdKSxuZShmLGUsciksV2UobiwoYz0obD0wfHRyWyh1PTExK2Z8MCk+PjBdKTw8MjQ+PjI0PDApPzB8YXJbZj4+Ml06ZixjPzB8YXJbNCtmPj4yXToyNTUmbCksKDB8dHJbdT4+MF0pPDAmJnZ1KDB8YXJbZj4+Ml0pLEllKEEsbyksYXJbbj4+Ml09NDMwNCxhclt0Pj4yXT00MzI0LGFyW28+PjJdPTQzNDAsMDw9KDB8dHJbMTEraT4+MF0pKXJldHVybiBrZihvKSxiZih0KSx2b2lkKHVyPWEpO3Z1KDB8YXJbaT4+Ml0pLGtmKG8pLGJmKHQpLHVyPWF9LGZ1bmN0aW9uKEEsZSxyKXskQShBfD0wLGV8PTAscnw9MCwtMSl9LGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTAscnw9MDt2YXIgaSxmLG4sdCxvLGE9MCxjPTAsbD0wLHU9MCxiPTA7aWYodXI9KG89dXIpKzE2MHwwLGE9bysxMzZ8MCxuPShmPW8pKzU2fDAsdD1mKzR8MCxhcltmPj4yXT0yOTIsYXJbbj4+Ml09MzEyLEpmKGYrNTZ8MCx0KSxhcltmKzEyOD4+Ml09MCxhcltmKzEzMj4+Ml09LTEsYXJbZj4+Ml09NDMwNCxhcltuPj4yXT00MzI0LFNmKHQpLGFyW3Q+PjJdPTQzNDAsYXJbKGk9ZiszNnwwKT4+Ml09MCxhcls0K2k+PjJdPTAsYXJbOCtpPj4yXT0wLGFyWzEyK2k+PjJdPTAsYXJbZis1Mj4+Ml09MTYsYXJbYT4+Ml09MCxhclthKzQ+PjJdPTAsYXJbYSs4Pj4yXT0wLFhlKHQsYSksKDB8dHJbYSsxMT4+MF0pPDAmJnZ1KDB8YXJbYT4+Ml0pLExBKGEsZSxyKSxXZShmLChjPShsPTB8dHJbKHU9YSsxMXwwKT4+MF0pPDwyND4+MjQ8MCk/MHxhclthPj4yXTphLGM/MHxhclthKzQ+PjJdOjI1NSZsKSwoMHx0clt1Pj4wXSk8MCYmdnUoMHxhclthPj4yXSksKDB8KGE9MHxhcltlKzU2Pj4yXSkpIT0oMHwodT0wfGFyW2UrNjA+PjJdKSkpe2w9YSxhPTB8YXJbcj4+Ml07ZG97aWYoMDwoMHxhKSlmb3IoYT0wO1dlKGYsMTg4NjIsMiksKDB8KGE9YSsxfDApKTwoMHxhcltyPj4yXSk7KTtpZihhPTB8V2UoZiwyMjEzOSwyNiksV2UoMHxMZihhLDB8YXJbbD4+Ml0pLDMwMDg2LDEpLGE9MSsoMHxhcltyPj4yXSl8MCxhcltyPj4yXT1hLCgwfChlPTB8YXJbbCs0Pj4yXSkpIT0oMHwoYz0wfGFyW2wrOD4+Ml0pKSlkb3tpZigwPCgwfGEpKWZvcihhPTA7V2UoZiwxODg2MiwyKSwoMHwoYT1hKzF8MCkpPCgwfGFyW3I+PjJdKTspO2E9MHxXZShmLDIyMTY2LDE2KSxiPShhPTB8V2UoMHx4ZihhLDB8b3JbZSsyPj4xXSksMjIxODMsMTMpKSsoMHxhclsoMHxhclthPj4yXSktMTI+PjJdKSs0fDAsYXJbYj4+Ml09MXxhcltiPj4yXSxXZSgwfEhmKGEsMCE9KDB8dHJbZT4+MF0pKSwxODkwNCwyKSxlPWUrNHwwLGE9MHxhcltyPj4yXX13aGlsZSgoMHxlKSE9KDB8YykpO2E9KDB8YSk8MT8wOmErLTF8MCxhcltyPj4yXT1hLGw9bCsxNnwwfXdoaWxlKCgwfGwpIT0oMHx1KSl9aWYoSWUoQSx0KSxhcltmPj4yXT00MzA0LGFyW24+PjJdPTQzMjQsYXJbdD4+Ml09NDM0MCwwPD0oMHx0clsxMStpPj4wXSkpcmV0dXJuIGtmKHQpLGJmKG4pLHZvaWQodXI9byk7dnUoMHxhcltpPj4yXSksa2YodCksYmYobiksdXI9b30sZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MDt2YXIgaSxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTA7aWYodXI9KGk9dXIpKzMyfDAsYj1pLHM9MHxhclsocnw9MCkrMTI+PjJdLGpBKHIsMHx0cltlKzM2Pj4wXT8xMjo4KSxmPWUrNTZ8MCxVQShyLCgwfGFyWyhjPWUrNjB8MCk+PjJdKS0oMHxhcltmPj4yXSk+PjQpLCgwfChmPTB8YXJbZj4+Ml0pKSE9KDB8KGM9MHxhcltjPj4yXSkpKXtsPWUrMzd8MCx1PWUrNDB8MDtkb3tpZihuPTB8YXJbZj4+Ml0sMHx0cltsPj4wXT9VQShyLG4pOk1BKHIsNjU1MzUmbiksbj1mKzR8MCxKQShyLCgoMHxhclsoYT1mKzh8MCk+PjJdKS0oMHxhcltuPj4yXSl8MCk+Pj4yJjI1NSksKDB8KG49MHxhcltuPj4yXSkpIT0oMHwoYT0wfGFyW2E+PjJdKSkpZm9yKDt0PTAhPSgwfHRyW24+PjBdKSxvPTB8bHJbbisyPj4xXSwxJmFyW3U+PjJdP01BKHIsNjU1MzUmKDMyNzY3Jm98KHQ/MzI3Njg6MCkpKTpKQShyLDI1NSYoMTI3Jm98KHQ/MTI4OjApKSksKDB8KG49bis0fDApKSE9KDB8YSk7KTtmPWYrMTZ8MH13aGlsZSgoMHxmKSE9KDB8YykpfWlmKEtBKGIsZSxyLHMpLDA8PSgwfHRyWyhmPWIrOHwwKSsxMT4+MF0pKXJldHVybiByPTB8YXJbKHI9Yj01NjU5Mik+PjJdLGI9MHxhclsoYj1iKzR8MCk+PjJdLGFyWyh1PXM9QSk+PjJdPXIsYXJbKHM9cys0fDApPj4yXT1iLHl1KEE9QSs4fDAsNTY2MDApLHZvaWQodXI9aSk7dnUoMHxhcltmPj4yXSkscj0wfGFyWyhyPWI9NTY1OTIpPj4yXSxiPTB8YXJbKGI9Yis0fDApPj4yXSxhclsodT1zPUEpPj4yXT1yLGFyWyhzPXMrNHwwKT4+Ml09Yix5dShBPUErOHwwLDU2NjAwKSx1cj1pfSxmdW5jdGlvbihBLGUscil7QXw9MDt2YXIgaSxmLG4sdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTAsQj0wLEU9MCxYPTA7dXI9KG49dXIpKzQ4fDAsRT1uKzI0fDAscUEodD0oWD1uKSs0fDAsZXw9MCxyfD0wKSwoMHx0clsodD10Kzh8MCkrMTE+PjBdKTwwJiZ2dSgwfGFyW3Q+PjJdKSxpPTB8RkEociksZj1yKzI0fDA7QTpkb3tpZigwPCgwfGkpKXtmb3IoaD1yKzE2fDAsdj1FKzh8MCxnPWUrMzd8MCxaPWUrNjB8MCxwPWUrNjR8MCx5PWUrNTZ8MCxCPXc9RSs0fDAscz1lKzQwfDAsZD1YKzJ8MCxrPW09RSsxMnwwLGI9MDs7KXtpZigwfHRyW2Y+PjBdKWJyZWFrIEE7aWYoMD09KDB8YXJbKHU9aCk+PjJdKSYwPT0oMHxhclt1KzQ+PjJdKSlicmVhayBBO2lmKGFyW3c+PjJdPTAsYXJbdj4+Ml09MCx0PShhclttPj4yXT0wKXx0cltnPj4wXT8wfEZBKHIpOjY1NTM1JigwfFZBKHIpKSxhcltFPj4yXT10LGM9MjU1Jih1PTB8SUEocikpLHU8PDI0Pj4yNClmb3IoYT0wOzEmYXJbcz4+Ml0/KHQ9KDY1NTM1JihvPTB8VkEocikpKT4+PjE1JjI1NSxlPTMyNzY3KToodD0oMjU1JihvPTB8SUEocikpKT4+PjcsZT0xMjcsbyY9MjU1KSx0cltYPj4wXT10LG9yW2Q+PjFdPTY1NTM1Jm8mZSwoMHwodD0wfGFyW3Y+PjJdKSk9PSgwfGFyW2s+PjJdKT9OdChCLFgpOih1PTB8YXJbWD4+Ml0sb3JbdD4+MV09dSxvclt0KzI+PjFdPXU+Pj4xNixhclt2Pj4yXT00KygwfGFyW3Y+PjJdKSksKDB8KGE9YSsxfDApKTwoMHxjKTspO2lmKCgwfChvPTB8YXJbWj4+Ml0pKT09KDB8YXJbcD4+Ml0pKVJ0KHksRSksdD0wfGFyW3c+PjJdO2Vsc2V7aWYoYXJbbz4+Ml09YXJbRT4+Ml0sYXJbKGE9bys0fDApPj4yXT0wLGFyWyh1PW8rOHwwKT4+Ml09MCx0PShhcltvKzEyPj4yXT0wKXxhcltCPj4yXSxjPShlPSgwfGFyW3Y+PjJdKS10fDApPj4yKXtpZigxMDczNzQxODIzPGM+Pj4wKWJyZWFrO2w9MHxodShlKSxhclt1Pj4yXT1sLGFyW2E+PjJdPWwsYXJbbysxMj4+Ml09bCsoYzw8MiksdD0wfGFyW0I+PjJdLDA8KDB8KGU9KDB8YXJbdj4+Ml0pLXR8MCkpJiYoaGIoMHxsLDB8dCwwfGUpLGFyW3U+PjJdPWwrKGU+Pj4yPDwyKSl9YXJbWj4+Ml09MTYrKDB8YXJbWj4+Ml0pfWlmKDB8dCYmKCgwfChlPTB8YXJbdj4+Ml0pKSE9KDB8dCkmJihhclt2Pj4yXT1lKyh+KChlKy00LXR8MCk+Pj4yKTw8MikpLHZ1KHQpKSwoMHxpKTw9KDB8KGI9YisxfDApKSlicmVhayBBfXpsKCl9fXdoaWxlKDApO2lmKCEoMHx0cltmPj4wXSkpcmV0dXJuIEU9MHxhclsocj01NjU5MikrND4+Ml0sYXJbKFg9QSk+PjJdPWFyW3I+PjJdLGFyW1grND4+Ml09RSx5dShBKzh8MCw1NjYwMCksdm9pZCh1cj1uKTthcltFPj4yXT0wLGFyW0UrND4+Ml09MCxhcltFKzg+PjJdPTAsb28oQSwyLDEwMCxFKSx1cj0oMDw9KDB8dHJbRSsxMT4+MF0pfHx2dSgwfGFyW0U+PjJdKSxuKX0sZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MCxyfD0wO3ZhciBpLGYsbix0LG8sYSxjPTAsbD0wLHU9MDtpZih1cj0obz11cikrMTYwfDAsYz1vKzEzNnwwLG49KGY9bykrNTZ8MCx0PWYrNHwwLGFyW2Y+PjJdPTI5MixhcltuPj4yXT0zMTIsSmYoZis1NnwwLHQpLGFyW2YrMTI4Pj4yXT0wLGFyW2YrMTMyPj4yXT0tMSxhcltmPj4yXT00MzA0LGFyW24+PjJdPTQzMjQsU2YodCksYXJbdD4+Ml09NDM0MCxhclsoaT1mKzM2fDApPj4yXT0wLGFyWzQraT4+Ml09MCxhcls4K2k+PjJdPTAsYXJbMTIraT4+Ml09MCxhcltmKzUyPj4yXT0xNixhcltjPj4yXT0wLGFyW2MrND4+Ml09MCxhcltjKzg+PjJdPTAsWGUodCxjKSwoMHx0cltjKzExPj4wXSk8MCYmdnUoMHxhcltjPj4yXSksTEEoYyxlLHIpLFdlKGYsKHU9KGE9MHx0clsobD1jKzExfDApPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW2M+PjJdOmMsdT8wfGFyW2MrND4+Ml06MjU1JmEpLCgwfHRyW2w+PjBdKTwwJiZ2dSgwfGFyW2M+PjJdKSwwPCgwfGFyW3I+PjJdKSlmb3IoYz0wO1dlKGYsMTg4NjIsMiksKDB8KGM9YysxfDApKTwoMHxhcltyPj4yXSk7KTtpZihsPTB8V2UoZiwyMjAyNSwxMyksbD0wfFdlKDB8TGYobCwwfGFyW2UrNTY+PjJdKSwzMDA4NiwxKSwwPCgwfGFyW3I+PjJdKSlmb3IoYz0wO1dlKGwsMTg4NjIsMiksKDB8KGM9YysxfDApKTwoMHxhcltyPj4yXSk7KTtpZih1PTB8V2UobCwyMjAzOSwxNCksV2UoMHxMZih1LDB8YXJbZSs2MD4+Ml0pLDMwMDg2LDEpLEllKEEsdCksYXJbZj4+Ml09NDMwNCxhcltuPj4yXT00MzI0LGFyW3Q+PjJdPTQzNDAsMDw9KDB8dHJbMTEraT4+MF0pKXJldHVybiBrZih0KSxiZihuKSx2b2lkKHVyPW8pO3Z1KDB8YXJbaT4+Ml0pLGtmKHQpLGJmKG4pLHVyPW99LGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTA7dmFyIGksZj0wLG49MDt1cj0oaT11cikrMzJ8MCxmPWksbj0wfGFyWyhyfD0wKSsxMj4+Ml0sakEociwwfHRyW2UrMzY+PjBdPzEyOjgpLFVBKHIsMHxhcltlKzU2Pj4yXSksVUEociwwfGFyW2UrNjA+PjJdKSxLQShmLGUscixuKSwoMHx0clsoZT1mKzh8MCkrMTE+PjBdKTwwJiZ2dSgwfGFyW2U+PjJdKSxmPTB8YXJbKHI9NTY1OTIpKzQ+PjJdLGFyWyhuPUEpPj4yXT1hcltyPj4yXSxhcltuKzQ+PjJdPWYseXUoQSs4fDAsNTY2MDApLHVyPWl9LGZ1bmN0aW9uKEEsZSxyKXtBfD0wO3ZhciBpLGY9MCxuPTA7aWYodXI9KGk9dXIpKzMyfDAsZj1pKzIwfDAscUEobj1pLGV8PTAscnw9MCksKDB8dHJbKG49bis4fDApKzExPj4wXSk8MCYmdnUoMHxhcltuPj4yXSksbj0wfEZBKHIpLGFyW2UrNTY+PjJdPW4sbj0wfEZBKHIpLGFyW2UrNjA+PjJdPW4sISgwfHRyW3IrMjQ+PjBdKSlyZXR1cm4gZj0wfGFyWyhyPTU2NTkyKSs0Pj4yXSxhclsobj1BKT4+Ml09YXJbcj4+Ml0sYXJbbis0Pj4yXT1mLHl1KEErOHwwLDU2NjAwKSx2b2lkKHVyPWkpO2FyW2Y+PjJdPTAsYXJbZis0Pj4yXT0wLGFyW2YrOD4+Ml09MCxvbyhBLDIsMTAwLGYpLHVyPSgwPD0oMHx0cltmKzExPj4wXSl8fHZ1KDB8YXJbZj4+Ml0pLGkpfSxmdW5jdGlvbihBLGUscil7QXw9MCxlfD0wLHJ8PTA7dmFyIGksZixuLHQsbyxhPTAsYz0wLGw9MCx1PTA7aWYodXI9KG89dXIpKzE2MHwwLGE9bysxMzZ8MCxuPShmPW8pKzU2fDAsdD1mKzR8MCxhcltmPj4yXT0yOTIsYXJbbj4+Ml09MzEyLEpmKGYrNTZ8MCx0KSxhcltmKzEyOD4+Ml09MCxhcltmKzEzMj4+Ml09LTEsYXJbZj4+Ml09NDMwNCxhcltuPj4yXT00MzI0LFNmKHQpLGFyW3Q+PjJdPTQzNDAsYXJbKGk9ZiszNnwwKT4+Ml09MCxhcls0K2k+PjJdPTAsYXJbOCtpPj4yXT0wLGFyWzEyK2k+PjJdPTAsYXJbZis1Mj4+Ml09MTYsYXJbYT4+Ml09MCxhclthKzQ+PjJdPTAsYXJbYSs4Pj4yXT0wLFhlKHQsYSksKDB8dHJbYSsxMT4+MF0pPDAmJnZ1KDB8YXJbYT4+Ml0pLExBKGEsZSxyKSxXZShmLCh1PShsPTB8dHJbKGM9YSsxMXwwKT4+MF0pPDwyND4+MjQ8MCk/MHxhclthPj4yXTphLHU/MHxhclthKzQ+PjJdOjI1NSZsKSwoMHx0cltjPj4wXSk8MCYmdnUoMHxhclthPj4yXSksMDwoMHxhcltyPj4yXSkpZm9yKGE9MDtXZShmLDE4ODYyLDIpLCgwfChhPWErMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYoYT0wfFdlKGYsMjE5MTQsMTApLGM9MHxXZSgwfFdlKGEsKHU9KGM9MHx0clsobD1lKzU2fDApKzExPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW2w+PjJdOmwsdT8wfGFyW2UrNjA+PjJdOjI1NSZjKSwzMDA4NiwxKSwwPCgwfGFyW3I+PjJdKSlmb3IoYT0wO1dlKGMsMTg4NjIsMiksKDB8KGE9YSsxfDApKTwoMHxhcltyPj4yXSk7KTtpZihXZShjLDIxOTI1LDE0KSwoMHwoYT0wfGFyW2UrNjg+PjJdKSkhPSgwfChjPTB8YXJbZSs3Mj4+Ml0pKSlmb3IoO3U9MHx0clthPj4wXSxsPWYrKDB8YXJbKDB8YXJbZj4+Ml0pLTEyPj4yXSkrNHwwLGFyW2w+PjJdPS03NSZhcltsPj4yXXw4LGFyW2YrKDB8YXJbKDB8YXJbZj4+Ml0pLTEyPj4yXSkrMTI+PjJdPTIsYXJbZisoMHxhclsoMHxhcltmPj4yXSktMTI+PjJdKSs3Nj4+Ml09NDgsV2UoMHxQZihmLDI1NSZ1KSwyMDQ0OSwxKSwoMHwoYT1hKzF8MCkpIT0oMHxjKTspO2lmKFdlKGYsMzAwODYsMSksSWUoQSx0KSxhcltmPj4yXT00MzA0LGFyW24+PjJdPTQzMjQsYXJbdD4+Ml09NDM0MCwwPD0oMHx0clsxMStpPj4wXSkpcmV0dXJuIGtmKHQpLGJmKG4pLHZvaWQodXI9byk7dnUoMHxhcltpPj4yXSksa2YodCksYmYobiksdXI9b30sZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MDt2YXIgaSxmLG49MCx0PTAsbz0wO2lmKHVyPShmPXVyKSszMnwwLHQ9ZixvPTB8YXJbKHJ8PTApKzEyPj4yXSxqQShyLDB8dHJbZSszNj4+MF0/MTI6OCksT0EocixlKzU2fDApLCgwfChuPTB8YXJbZSs2OD4+Ml0pKSE9KDB8KGk9MHxhcltlKzcyPj4yXSkpKWZvcig7SkEociwwfHRyW24+PjBdKSwoMHwobj1uKzF8MCkpIT0oMHxpKTspO0tBKHQsZSxyLG8pLCgwfHRyWyhuPXQrOHwwKSsxMT4+MF0pPDAmJnZ1KDB8YXJbbj4+Ml0pLHQ9MHxhclsocj01NjU5MikrND4+Ml0sYXJbKG89QSk+PjJdPWFyW3I+PjJdLGFyW28rND4+Ml09dCx5dShBKzh8MCw1NjYwMCksdXI9Zn0sZnVuY3Rpb24oQSxlLHIpe0F8PTA7dmFyIGksZixuPTAsdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wO3VyPShmPXVyKSszMnwwLGs9ZisyMHwwLHFBKG49ZixlfD0wLHJ8PTApLCgwfHRyWyhuPW4rOHwwKSsxMT4+MF0pPDAmJnZ1KDB8YXJbbj4+Ml0pLFJBKGssciksKDB8dHJbKHQ9KG49ZSs1NnwwKSsxMXwwKT4+MF0pPDA/KHRyW2FyW24+PjJdPj4wXT0wLGFyW2UrNjA+PjJdPTApOih0cltuPj4wXT0wLHRyW3Q+PjBdPTApLEN1KG4sMCksYXJbbj4+Ml09YXJbaz4+Ml0sYXJbbis0Pj4yXT1hcltrKzQ+PjJdLGFyW24rOD4+Ml09YXJbays4Pj4yXSxkPWk9cisxNnwwO0E6ZG97aWYoISgwPT0oMHxhcltkPj4yXSkmMD09KDB8YXJbZCs0Pj4yXSkpKXtmb3Iocz1lKzY4fDAsZD1lKzcyfDAsdT1lKzc2fDA7Oyl7aWYoYT0wfElBKHIpLG49MHxhcltkPj4yXSwodD1iPTB8YXJbdT4+Ml0pPj4+MDw9bj4+PjApe2lmKGw9Yj0wfGFyW3M+PjJdLCgwfChuPShjPW4tYnwwKSsxfDApKTwwKWJyZWFrO3Q9KG89dC1ifDApPDwxLG89KHQ9bz4+PjA8MTA3Mzc0MTgyMz90Pj4+MDxuPj4+MD9uOnQ6MjE0NzQ4MzY0Nyk/MHxodSh0KTowLHRyWyhlPW8rY3wwKT4+MF09YSxuPWUrKDAtYyl8MCwwPCgwfGMpJiZoYigwfG4sMHxsLDB8YyksYXJbcz4+Ml09bixhcltkPj4yXT1lKzEsYXJbdT4+Ml09byt0LDB8YiYmdnUobCl9ZWxzZSB0cltuPj4wXT1hLGFyW2Q+PjJdPTErKDB8YXJbZD4+Ml0pO2lmKDA9PSgwfGFyWyhiPWkpPj4yXSkmMD09KDB8YXJbYis0Pj4yXSkpYnJlYWsgQX16bCgpfX13aGlsZSgwKTtpZighKDB8dHJbcisyND4+MF0pKXJldHVybiByPTB8YXJbKGQ9NTY1OTIpKzQ+PjJdLGFyWyhrPUEpPj4yXT1hcltkPj4yXSxhcltrKzQ+PjJdPXIseXUoQSs4fDAsNTY2MDApLHZvaWQodXI9Zik7YXJbaz4+Ml09MCxhcltrKzQ+PjJdPTAsYXJbays4Pj4yXT0wLG9vKEEsMiwxMDAsayksdXI9KDA8PSgwfHRyW2srMTE+PjBdKXx8dnUoMHxhcltrPj4yXSksZil9LGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTAscnw9MDt2YXIgaSxmLG4sdCxvLGEsYyxsPTAsdT0wO2lmKHVyPShvPXVyKSsxNjB8MCxsPW8rMTM2fDAsbj0oZj1vKSs1NnwwLHQ9Zis0fDAsYXJbZj4+Ml09MjkyLGFyW24+PjJdPTMxMixKZihmKzU2fDAsdCksYXJbZisxMjg+PjJdPTAsYXJbZisxMzI+PjJdPS0xLGFyW2Y+PjJdPTQzMDQsYXJbbj4+Ml09NDMyNCxTZih0KSxhclt0Pj4yXT00MzQwLGFyWyhpPWYrMzZ8MCk+PjJdPTAsYXJbNCtpPj4yXT0wLGFyWzgraT4+Ml09MCxhclsxMitpPj4yXT0wLGFyW2YrNTI+PjJdPTE2LGFyW2w+PjJdPTAsYXJbbCs0Pj4yXT0wLGFyW2wrOD4+Ml09MCxYZSh0LGwpLCgwfHRyW2wrMTE+PjBdKTwwJiZ2dSgwfGFyW2w+PjJdKSxMQShsLGUsciksV2UoZiwodT0oYz0wfHRyWyhhPWwrMTF8MCk+PjBdKTw8MjQ+PjI0PDApPzB8YXJbbD4+Ml06bCx1PzB8YXJbbCs0Pj4yXToyNTUmYyksKDB8dHJbYT4+MF0pPDAmJnZ1KDB8YXJbbD4+Ml0pLDA8KDB8YXJbcj4+Ml0pKWZvcihsPTA7V2UoZiwxODg2MiwyKSwoMHwobD1sKzF8MCkpPCgwfGFyW3I+PjJdKTspO2lmKHU9MHxXZShmLDIxODAyLDEwKSxXZSgwfFBmKHUsMHxhcltlKzU2Pj4yXSksMjE4MTMsMTUpLEllKEEsdCksYXJbZj4+Ml09NDMwNCxhcltuPj4yXT00MzI0LGFyW3Q+PjJdPTQzNDAsMDw9KDB8dHJbMTEraT4+MF0pKXJldHVybiBrZih0KSxiZihuKSx2b2lkKHVyPW8pO3Z1KDB8YXJbaT4+Ml0pLGtmKHQpLGJmKG4pLHVyPW99LGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTA7dmFyIGksZj0wLG49MDtpZih1cj0oaT11cikrMTZ8MCxmPWksbj05MCooMyYoMHxJQShyfD0wKSkpfDAsYXJbZSs1Nj4+Ml09biwhKDB8dHJbcisyND4+MF0pKXJldHVybiBmPTB8YXJbKHI9NTY1OTIpKzQ+PjJdLGFyWyhuPUEpPj4yXT1hcltyPj4yXSxhcltuKzQ+PjJdPWYseXUoQSs4fDAsNTY2MDApLHZvaWQodXI9aSk7YXJbZj4+Ml09MCxhcltmKzQ+PjJdPTAsYXJbZis4Pj4yXT0wLG9vKEEsMiwxMDAsZiksdXI9KDA8PSgwfHRyW2YrMTE+PjBdKXx8dnUoMHxhcltmPj4yXSksaSl9LGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTAscnw9MDt2YXIgaSxmLG4sdCxvLGEsYyxsLHU9MDtpZih1cj0obz11cikrMTYwfDAsdT1vKzEzNnwwLG49KGY9bykrNTZ8MCx0PWYrNHwwLGFyW2Y+PjJdPTI5MixhcltuPj4yXT0zMTIsSmYoZis1NnwwLHQpLGFyW2YrMTI4Pj4yXT0wLGFyW2YrMTMyPj4yXT0tMSxhcltmPj4yXT00MzA0LGFyW24+PjJdPTQzMjQsU2YodCksYXJbdD4+Ml09NDM0MCxhclsoaT1mKzM2fDApPj4yXT0wLGFyWzQraT4+Ml09MCxhcls4K2k+PjJdPTAsYXJbMTIraT4+Ml09MCxhcltmKzUyPj4yXT0xNixhclt1Pj4yXT0wLGFyW3UrND4+Ml09MCxhclt1Kzg+PjJdPTAsWGUodCx1KSwoMHx0clt1KzExPj4wXSk8MCYmdnUoMHxhclt1Pj4yXSksTEEodSxlLHIpLFdlKGYsKGw9KGM9MHx0clsoYT11KzExfDApPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW3U+PjJdOnUsbD8wfGFyW3UrND4+Ml06MjU1JmMpLCgwfHRyW2E+PjBdKTwwJiZ2dSgwfGFyW3U+PjJdKSwwPCgwfGFyW3I+PjJdKSlmb3IodT0wO1dlKGYsMTg4NjIsMiksKDB8KHU9dSsxfDApKTwoMHxhcltyPj4yXSk7KTtzd2l0Y2goV2UoZiwyMTY4MSwxMyksMHx0cltlKzU2Pj4wXSl7Y2FzZSAwOldlKGYsMjE2OTUsOSk7YnJlYWs7Y2FzZSAxOldlKGYsMjE3MDUsMTEpfWlmKEllKEEsdCksYXJbZj4+Ml09NDMwNCxhcltuPj4yXT00MzI0LGFyW3Q+PjJdPTQzNDAsMDw9KDB8dHJbMTEraT4+MF0pKXJldHVybiBrZih0KSxHZigpLGJmKG4pLHZvaWQodXI9byk7dnUoMHxhcltpPj4yXSksa2YodCksR2YoKSxiZihuKSx1cj1vfSxmdW5jdGlvbihBLGUscil7QXw9MCxlfD0wO3ZhciBpLGY9MCxuPTA7aWYodXI9KGk9dXIpKzE2fDAsZj1pLG49MSYoMHxJQShyfD0wKSksdHJbZSs1Nj4+MF09biwhKDB8dHJbcisyND4+MF0pKXJldHVybiBmPTB8YXJbKHI9NTY1OTIpKzQ+PjJdLGFyWyhuPUEpPj4yXT1hcltyPj4yXSxhcltuKzQ+PjJdPWYseXUoQSs4fDAsNTY2MDApLHZvaWQodXI9aSk7YXJbZj4+Ml09MCxhcltmKzQ+PjJdPTAsYXJbZis4Pj4yXT0wLG9vKEEsMiwxMDAsZiksdXI9KDA8PSgwfHRyW2YrMTE+PjBdKXx8dnUoMHxhcltmPj4yXSksaSl9LGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTAscnw9MDt2YXIgaSxmLG4sdCxvLGEsYyxsPTAsdT0wO2lmKHVyPShvPXVyKSsxNjB8MCxsPW8rMTM2fDAsbj0oZj1vKSs1NnwwLHQ9Zis0fDAsYXJbZj4+Ml09MjkyLGFyW24+PjJdPTMxMixKZihmKzU2fDAsdCksYXJbZisxMjg+PjJdPTAsYXJbZisxMzI+PjJdPS0xLGFyW2Y+PjJdPTQzMDQsYXJbbj4+Ml09NDMyNCxTZih0KSxhclt0Pj4yXT00MzQwLGFyWyhpPWYrMzZ8MCk+PjJdPTAsYXJbNCtpPj4yXT0wLGFyWzgraT4+Ml09MCxhclsxMitpPj4yXT0wLGFyW2YrNTI+PjJdPTE2LGFyW2w+PjJdPTAsYXJbbCs0Pj4yXT0wLGFyW2wrOD4+Ml09MCxYZSh0LGwpLCgwfHRyW2wrMTE+PjBdKTwwJiZ2dSgwfGFyW2w+PjJdKSxMQShsLGUsciksV2UoZiwodT0oYz0wfHRyWyhhPWwrMTF8MCk+PjBdKTw8MjQ+PjI0PDApPzB8YXJbbD4+Ml06bCx1PzB8YXJbbCs0Pj4yXToyNTUmYyksKDB8dHJbYT4+MF0pPDAmJnZ1KDB8YXJbbD4+Ml0pLDA8KDB8YXJbcj4+Ml0pKWZvcihsPTA7V2UoZiwxODg2MiwyKSwoMHwobD1sKzF8MCkpPCgwfGFyW3I+PjJdKTspO2lmKHU9MHxXZShmLDIxNTYwLDE2KSx1PTB8V2UoMHxQZih1LDB8YXJbZSs1Nj4+Ml0pLDIxNTc3LDEpLHU9MHxXZSgwfFBmKHUsMHxhcltlKzYwPj4yXSksMjE1NzksMyksdT0wfFdlKDB8UGYodSwwfGFyW2UrNjQ+PjJdKSwyMTU3NywxKSxXZSgwfFBmKHUsMHxhcltlKzY4Pj4yXSksMzAwODYsMSksMDwoMHxhcltyPj4yXSkpZm9yKGw9MDtXZShmLDE4ODYyLDIpLCgwfChsPWwrMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYodT0wfFdlKGYsMjE1ODMsOCksdT0wfFdlKDB8UGYodSwwfGFyW2UrNzI+PjJdKSwyMTU3NywxKSx1PTB8V2UoMHxQZih1LDB8YXJbZSs3Nj4+Ml0pLDIxNTkyLDMpLHU9MHxXZSgwfFBmKHUsMHxhcltlKzgwPj4yXSksMjE1NzcsMSksV2UoMHxQZih1LDB8YXJbZSs4ND4+Ml0pLDMwMDg2LDEpLEllKEEsdCksYXJbZj4+Ml09NDMwNCxhcltuPj4yXT00MzI0LGFyW3Q+PjJdPTQzNDAsMDw9KDB8dHJbMTEraT4+MF0pKXJldHVybiBrZih0KSxHZigpLGJmKG4pLHZvaWQodXI9byk7dnUoMHxhcltpPj4yXSksa2YodCksR2YoKSxiZihuKSx1cj1vfSxmdW5jdGlvbihBLGUscil7QXw9MCxlfD0wO3ZhciBpLGY9MCxuPTA7dXI9KGk9dXIpKzMyfDAsZj1pLG49MHxhclsocnw9MCkrMTI+PjJdLGpBKHIsMHx0cltlKzM2Pj4wXT8xMjo4KSxVQShyLDB8YXJbZSs1Nj4+Ml0pLFVBKHIsMHxhcltlKzYwPj4yXSksVUEociwwfGFyW2UrNjQ+PjJdKSxVQShyLDB8YXJbZSs2OD4+Ml0pLFVBKHIsMHxhcltlKzcyPj4yXSksVUEociwwfGFyW2UrNzY+PjJdKSxVQShyLDB8YXJbZSs4MD4+Ml0pLFVBKHIsMHxhcltlKzg0Pj4yXSksS0EoZixlLHIsbiksKDB8dHJbKGU9Zis4fDApKzExPj4wXSk8MCYmdnUoMHxhcltlPj4yXSksZj0wfGFyWyhyPTU2NTkyKSs0Pj4yXSxhclsobj1BKT4+Ml09YXJbcj4+Ml0sYXJbbis0Pj4yXT1mLHl1KEErOHwwLDU2NjAwKSx1cj1pfSxmdW5jdGlvbihBLGUscil7QXw9MCxlfD0wO3ZhciBpLGY9MCxuPTAsdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTA7aWYodXI9KGk9dXIpKzMyfDAsYj1pKzEyfDAscz1pLGw9MHxGQShyfD0wKSx1PTB8RkEociksYT0wfEZBKHIpLGM9MHxGQShyKSx0PTB8RkEociksbz0wfEZBKHIpLG49MHxGQShyKSxmPTB8RkEociksMTMxMDcyPCh1KzY1NTM2fDApPj4+MClmb3IoO2w9KDB8bCkvMnwwLDEzMTA3MjwoKHU9KDB8dSkvMnwwKSs2NTUzNnwwKT4+PjA7KTtpZigxMzEwNzI8KGwrNjU1MzZ8MCk+Pj4wKWZvcig7dT0oMHx1KS8yfDAsMTMxMDcyPCgobD0oMHxsKS8yfDApKzY1NTM2fDApPj4+MDspO2lmKGFyWyhkPWUrNTZ8MCk+PjJdPWwsYXJbZCs0Pj4yXT11LDEzMTA3MjwoYys2NTUzNnwwKT4+PjApZm9yKDthPSgwfGEpLzJ8MCwxMzEwNzI8KChjPSgwfGMpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7aWYoMTMxMDcyPChhKzY1NTM2fDApPj4+MClmb3IoO2M9KDB8YykvMnwwLDEzMTA3MjwoKGE9KDB8YSkvMnwwKSs2NTUzNnwwKT4+PjA7KTtpZihhclsoZD1lKzY0fDApPj4yXT1hLGFyW2QrND4+Ml09YywxMzEwNzI8KG8rNjU1MzZ8MCk+Pj4wKWZvcig7dD0oMHx0KS8yfDAsMTMxMDcyPCgobz0oMHxvKS8yfDApKzY1NTM2fDApPj4+MDspO2lmKDEzMTA3MjwodCs2NTUzNnwwKT4+PjApZm9yKDtvPSgwfG8pLzJ8MCwxMzEwNzI8KCh0PSgwfHQpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7aWYoYXJbKGQ9ZSs3MnwwKT4+Ml09dCxhcltkKzQ+PjJdPW8sMTMxMDcyPChmKzY1NTM2fDApPj4+MClmb3IoO249KDB8bikvMnwwLDEzMTA3MjwoKGY9KDB8ZikvMnwwKSs2NTUzNnwwKT4+PjA7KTtpZigxMzEwNzI8KG4rNjU1MzZ8MCk+Pj4wKWZvcig7Zj0oMHxmKS8yfDAsMTMxMDcyPCgobj0oMHxuKS8yfDApKzY1NTM2fDApPj4+MDspO2lmKGFyWyhkPWUrODB8MCk+PjJdPW4sMD09KDB8dSl8MD09KDB8Yyl8MD09KDB8byl8MD09KDB8KGFyW2QrND4+Ml09ZikpKXJldHVybiBhcltzPj4yXT0wLGFyW3MrND4+Ml09MCxhcltzKzg+PjJdPTAsb28oQSwyLDEyOCxzKSwwPD0oMHx0cltzKzExPj4wXSl8fHZ1KDB8YXJbcz4+Ml0pLHZvaWQodXI9aSk7MHx0cltyKzI0Pj4wXT8oYXJbYj4+Ml09MCxhcltiKzQ+PjJdPTAsYXJbYis4Pj4yXT0wLG9vKEEsMiwxMDAsYiksKDB8dHJbYisxMT4+MF0pPDAmJnZ1KDB8YXJbYj4+Ml0pKToocz0wfGFyWyhiPTU2NTkyKSs0Pj4yXSxhclsoZD1BKT4+Ml09YXJbYj4+Ml0sYXJbZCs0Pj4yXT1zLHl1KEErOHwwLDU2NjAwKSksdXI9aX0sZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MCxyfD0wO3ZhciBpLGYsbix0LG8sYSxjPTAsbD0wLHU9MCxiPTAscz0wLGQ9MDtpZih1cj0oYT11cikrMTYwfDAsZj1hKzEzNnwwLHQ9KG49YSkrNTZ8MCxvPW4rNHwwLGFyW24+PjJdPTI5Mixhclt0Pj4yXT0zMTIsSmYobis1NnwwLG8pLGFyW24rMTI4Pj4yXT0wLGFyW24rMTMyPj4yXT0tMSxhcltuPj4yXT00MzA0LGFyW3Q+PjJdPTQzMjQsU2YobyksYXJbbz4+Ml09NDM0MCxhclsoaT1uKzM2fDApPj4yXT0wLGFyWzQraT4+Ml09MCxhcls4K2k+PjJdPTAsYXJbMTIraT4+Ml09MCxhcltuKzUyPj4yXT0xNixhcltmPj4yXT0wLGFyWzQrZj4+Ml09MCxhcls4K2Y+PjJdPTAsWGUobyxmKSwoMHx0clsxMStmPj4wXSk8MCYmdnUoMHxhcltmPj4yXSksTEEoZixlLHIpLFdlKG4sKHU9KGI9MHx0clsocz0xMStmfDApPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW2Y+PjJdOmYsdT8wfGFyWzQrZj4+Ml06MjU1JmIpLCgwfHRyW3M+PjBdKTwwJiZ2dSgwfGFyW2Y+PjJdKSwoMHwoYz0wfGFyW2UrNTY+PjJdKSkhPSgwfCh1PTB8YXJbZSs2MD4+Ml0pKSl7Yj0xMStmfDAscz00K2Z8MDtkb3tpZigwPCgwfGFyW3I+PjJdKSlmb3IoZT0wO1dlKG4sMTg4NjIsMiksKDB8KGU9ZSsxfDApKTwoMHxhcltyPj4yXSk7KTtpZihkPTB8V2UobiwyMTQzMCwyMSkseEEoZixjKSxsPTB8V2UoMHxXZSgwfFdlKGQsKGU9KGw9MHx0cltiPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW2Y+PjJdOmYsZT8wfGFyW3M+PjJdOjI1NSZsKSwyMTQ1MiwxKSwyMTQ1NCwxMCksV2UoMHxMZihsLDB8YXJbYys0OD4+Ml0pLDIxNDY1LDkpLCgwfHRyW2I+PjBdKTwwJiZ2dSgwfGFyW2Y+PjJdKSwoMHwoZT0wfGFyW2MrNTI+PjJdKSkhPSgwfChsPTB8YXJbYys1Nj4+Ml0pKSlmb3IoO1dlKDB8TGYobiwwfGFyW2U+PjJdKSwyMDQ0OSwxKSwoMHwoZT1lKzR8MCkpIT0oMHxsKTspO1dlKG4sMzAwODYsMSksYz1jKzY0fDB9d2hpbGUoKDB8YykhPSgwfHUpKX1pZihJZShBLG8pLGFyW24+PjJdPTQzMDQsYXJbdD4+Ml09NDMyNCxhcltvPj4yXT00MzQwLDA8PSgwfHRyWzExK2k+PjBdKSlyZXR1cm4ga2YobyksR2YoKSxiZih0KSx2b2lkKHVyPWEpO3Z1KDB8YXJbaT4+Ml0pLGtmKG8pLEdmKCksYmYodCksdXI9YX0sZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MDt2YXIgaSxmLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wO2lmKHVyPShmPXVyKSszMnwwLGM9ZixsPTB8YXJbKHJ8PTApKzEyPj4yXSxqQShyLDB8dHJbZSszNj4+MF0/MTI6OCksaT0wPT0oMHx0cltlKzM3Pj4wXSk/Mjo0LCgwfChuPTB8YXJbZSs1Nj4+Ml0pKSE9KDB8KGE9MHxhcltlKzYwPj4yXSkpKWRve2lmKHQ9bis1MnwwLFVBKHIsMTArKDB8YnIoMSsoKDB8YXJbKG89bis1NnwwKT4+Ml0pLSgwfGFyW3Q+PjJdKT4+Mil8MCxpKSl8MCksVUEociwwfGFyW24rMjA+PjJdKSxTQShyLGksMHxhcltuKzQ4Pj4yXSwwKSxNQShyLCgoMHxhcltvPj4yXSktKDB8YXJbdD4+Ml0pfDApPj4+MiY2NTUzNSksKDB8KHQ9MHxhclt0Pj4yXSkpIT0oMHwobz0wfGFyW28+PjJdKSkpZm9yKDtTQShyLGksMHxhclt0Pj4yXSwwKSwoMHwodD10KzR8MCkpIT0oMHxvKTspO249bis2NHwwfXdoaWxlKCgwfG4pIT0oMHxhKSk7aWYoS0EoYyxlLHIsbCksMDw9KDB8dHJbKG49Yys4fDApKzExPj4wXSkpcmV0dXJuIGE9MHxhclsoYT1jPTU2NTkyKT4+Ml0sYz0wfGFyWyhjPWMrNHwwKT4+Ml0sYXJbKHI9bD1BKT4+Ml09YSxhclsobD1sKzR8MCk+PjJdPWMseXUoQT1BKzh8MCw1NjYwMCksdm9pZCh1cj1mKTt2dSgwfGFyW24+PjJdKSxhPTB8YXJbKGE9Yz01NjU5Mik+PjJdLGM9MHxhclsoYz1jKzR8MCk+PjJdLGFyWyhyPWw9QSk+PjJdPWEsYXJbKGw9bCs0fDApPj4yXT1jLHl1KEE9QSs4fDAsNTY2MDApLHVyPWZ9LGZ1bmN0aW9uKEEsZSxyKXtBfD0wO3ZhciBpLGYsbix0LG8sYSxjLGwsdSxiLHMsZCxrLGgsdyx2LG0sZyxaPTAscD0wLHk9MCxCPTAsRT0wLFg9MDtmb3IodXI9KGc9dXIpKzk2fDAsRT0oQj1nKSs2NHwwLHFBKFo9Zys2OHwwLGV8PTAscnw9MCksKDB8dHJbKFo9Wis4fDApKzExPj4wXSk8MCYmdnUoMHxhcltaPj4yXSksYT1yKzE2fDAsYz1CKzh8MCxsPUIrNDB8MCxiPUIrNTZ8MCxkPWUrMzd8MCxrPUIrNDh8MCxoPXM9Qis2MHwwLHc9dT1CKzUyfDAsdj1lKzYwfDAsbT1lKzY0fDAsaT1lKzU2fDAsbj0xMSsoZj1BKzh8MCl8MCx0PUIrMjR8MCxvPUIrMjh8MDshKDA9PSgwfGFyWyh5PWEpPj4yXSkmMD09KDB8YXJbeSs0Pj4yXSkpOyl7aWYoYXJbQj4+Ml09NDI2NCxhcltsPj4yXT0wLGFyW2M+PjJdPTAsYXJbNCtjPj4yXT0wLGFyWzgrYz4+Ml09MCxhclsxMitjPj4yXT0wLGFyWzE2K2M+PjJdPTAsYXJbMjArYz4+Ml09MCxhclsyNCtjPj4yXT0wLG9yWzI4K2M+PjFdPTAsYXJbdT4+Ml09MCxhcltiPj4yXT0wLGFyW3M+PjJdPTAscmUoQSxCLHIpLCgwfGFyW0E+PjJdKT09KDB8YXJbMTQxNDhdKSl7aWYoMHx0cltkPj4wXSl7aWYoeT0wfEZBKHIpLGFyW2s+PjJdPXksZT02NTUzNSYoeT0wfFZBKHIpKSx5PDwxNj4+MTYpZm9yKFo9MDtwPTB8RkEociksYXJbRT4+Ml09cCwoeT0wfGFyW2I+PjJdKT4+PjA8KDB8YXJbaD4+Ml0pPj4+MD8oYXJbeT4+Ml09cCxhcltiPj4yXT15KzQpOkNlKHcsRSksWj1aKzF8MCwoMCE9KDB8YXJbKHk9YSk+PjJdKXwwIT0oMHxhclt5KzQ+PjJdKSkmKDB8Wik8KDB8ZSk7KTt9ZWxzZSBpZih5PTY1NTM1JigwfFZBKHIpKSxhcltrPj4yXT15LGU9NjU1MzUmKHk9MHxWQShyKSkseTw8MTY+PjE2KWZvcihaPTA7cD02NTUzNSYoMHxWQShyKSksYXJbRT4+Ml09cCwoeT0wfGFyW2I+PjJdKT4+PjA8KDB8YXJbaD4+Ml0pPj4+MD8oYXJbeT4+Ml09cCxhcltiPj4yXT15KzQpOkNlKHcsRSksWj1aKzF8MCwoMCE9KDB8YXJbKHk9YSk+PjJdKXwwIT0oMHxhclt5KzQ+PjJdKSkmKDB8Wik8KDB8ZSk7KTsoMHwoWj0wfGFyW3Y+PjJdKSk9PSgwfGFyW20+PjJdKT9kZShpLEIpOihzZShaLEIpLGFyW3Y+PjJdPTY0KygwfGFyW3Y+PjJdKSkscD0oKDB8dHJbbj4+MF0pPDAmJnZ1KDB8YXJbZj4+Ml0pLDApfWVsc2UgcD0xO2lmKDB8KFo9MHxhclt1Pj4yXSkmJigoMHwoZT0wfGFyW2I+PjJdKSkhPSgwfFopJiYoYXJbYj4+Ml09ZSsofigoZSstNC1afDApPj4+Mik8PDIpKSx2dShaKSksYXJbQj4+Ml09NDI2NCwwfChaPTB8YXJbdD4+Ml0pJiYoKDB8YXJbbz4+Ml0pIT0oMHxaKSYmKGFyW28+PjJdPVopLHZ1KFopKSwxPT0oMHxwKSl7WD0zNjticmVha319dXI9KDM2IT0oMHxYKSYmKDB8dHJbcisyND4+MF0/KGFyW0I+PjJdPTAsYXJbQis0Pj4yXT0wLGFyW0IrOD4+Ml09MCxvbyhBLDIsMTAwLEIpLCgwfHRyW0IrMTE+PjBdKTwwJiZ2dSgwfGFyW0I+PjJdKSk6KEU9MHxhclsoQj01NjU5MikrND4+Ml0sYXJbKFg9QSk+PjJdPWFyW0I+PjJdLGFyW1grND4+Ml09RSx5dShmLDU2NjAwKSkpLGcpfSxmdW5jdGlvbihBLGUscil7QXw9MCxlfD0wLHJ8PTA7dmFyIGksZixuLHQsbyxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTA7aWYodXI9KG89dXIpKzE2MHwwLGw9bysxMzZ8MCxuPShmPW8pKzU2fDAsdD1mKzR8MCxhcltmPj4yXT0yOTIsYXJbbj4+Ml09MzEyLEpmKGYrNTZ8MCx0KSxhcltmKzEyOD4+Ml09MCxhcltmKzEzMj4+Ml09LTEsYXJbZj4+Ml09NDMwNCxhcltuPj4yXT00MzI0LFNmKHQpLGFyW3Q+PjJdPTQzNDAsYXJbKGk9ZiszNnwwKT4+Ml09MCxhcls0K2k+PjJdPTAsYXJbOCtpPj4yXT0wLGFyWzEyK2k+PjJdPTAsYXJbZis1Mj4+Ml09MTYsYXJbbD4+Ml09MCxhcltsKzQ+PjJdPTAsYXJbbCs4Pj4yXT0wLFhlKHQsbCksKDB8dHJbbCsxMT4+MF0pPDAmJnZ1KDB8YXJbbD4+Ml0pLExBKGwsZSxyKSxXZShmLChjPSh1PTB8dHJbKGI9bCsxMXwwKT4+MF0pPDwyND4+MjQ8MCk/MHxhcltsPj4yXTpsLGM/MHxhcltsKzQ+PjJdOjI1NSZ1KSwoMHx0cltiPj4wXSk8MCYmdnUoMHxhcltsPj4yXSksMDwoMHxhcltyPj4yXSkpZm9yKGE9MDtXZShmLDE4ODYyLDIpLCgwfChhPWErMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYoYz0wfFdlKGYsMjA5MTYsMjMpLGM9MHxXZSgwfFBmKGMsMHxjcltlKzU2Pj4wXSksMzAwODYsMSksMDwoMHxhcltyPj4yXSkpZm9yKGE9MDtXZShjLDE4ODYyLDIpLCgwfChhPWErMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYoYz0wfFdlKGMsMjA5NDAsMjMpLGM9MHxXZSgwfFBmKGMsMHxjcltlKzU3Pj4wXSksMzAwODYsMSksMDwoMHxhcltyPj4yXSkpZm9yKGE9MDtXZShjLDE4ODYyLDIpLCgwfChhPWErMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYoYz0wfFdlKGMsMjA5NjQsMTkpLGM9MHxXZSgwfEhmKGMsMCE9KDB8dHJbZSs1OD4+MF0pKSwzMDA4NiwxKSwwPCgwfGFyW3I+PjJdKSlmb3IoYT0wO1dlKGMsMTg4NjIsMiksKDB8KGE9YSsxfDApKTwoMHxhcltyPj4yXSk7KTtpZihiPTB8V2UoYywyMDk4NCwyMSksV2UoMHxQZihiLDB8Y3JbZSs1OT4+MF0pLDMwMDg2LDEpLDA8KDB8YXJbcj4+Ml0pKWZvcihhPTA7V2UoZiwxODg2MiwyKSwoMHwoYT1hKzF8MCkpPCgwfGFyW3I+PjJdKTspO2ZvcihXZShmLDIxMDA2LDM3KSxjPWUrNjB8MCxhPTA7TGYoZiwoMHxhcltjPj4yXSk+Pj4oMzEtYXwwKSYxKSw3IT0oKDB8YSklOHwwKT8zPT0oKDB8YSklNHwwKSYmKHRyW2w+PjBdPTQ2LFdlKGYsbCwxKSk6KHRyW2w+PjBdPTMyLFdlKGYsbCwxKSksKDB8KGE9YSsxfDApKTwzMjspO2lmKFdlKGYsMzAwODYsMSksMDwoMHxhcltyPj4yXSkpZm9yKGE9MDtXZShmLDE4ODYyLDIpLCgwfChhPWErMXwwKSk8KDB8YXJbcj4+Ml0pOyk7Zm9yKFdlKGYsMjEwNDQsMzYpLGE9MDtQZihmLDAhPShhcltlKzY0KyhhPj4+NTw8Mik+PjJdJjE8PCgzMSZhKXwwKSYxKSw3JihhPWErMXwwKXx8KHRyW2w+PjBdPTMyLFdlKGYsbCwxKSksKDB8YSk8NDg7KTtpZihXZShmLDMwMDg2LDEpLDA8KDB8YXJbcj4+Ml0pKWZvcihhPTA7V2UoZiwxODg2MiwyKSwoMHwoYT1hKzF8MCkpPCgwfGFyW3I+PjJdKTspO2lmKGM9MHxXZShmLDIxMDgxLDE5KSxjPTB8V2UoMHxQZihjLDB8Y3JbZSs3Mj4+MF0pLDMwMDg2LDEpLDA8KDB8YXJbcj4+Ml0pKWZvcihhPTA7V2UoYywxODg2MiwyKSwoMHwoYT1hKzF8MCkpPCgwfGFyW3I+PjJdKTspO2lmKGM9MHxXZShjLDIxMTAxLDMwKSxjPTB8V2UoMHx4ZihjLDB8b3JbZSs3ND4+MV0pLDMwMDg2LDEpLDA8KDB8YXJbcj4+Ml0pKWZvcihhPTA7V2UoYywxODg2MiwyKSwoMHwoYT1hKzF8MCkpPCgwfGFyW3I+PjJdKTspO2lmKGM9MHxXZShjLDIxMTMyLDE4KSxjPTB8V2UoMHxQZihjLDB8Y3JbZSs3Nj4+MF0pLDMwMDg2LDEpLDA8KDB8YXJbcj4+Ml0pKWZvcihhPTA7V2UoYywxODg2MiwyKSwoMHwoYT1hKzF8MCkpPCgwfGFyW3I+PjJdKTspO2lmKGM9MHxXZShjLDIxMTUxLDE1KSxjPTB8V2UoMHxQZihjLDB8Y3JbZSs3Nz4+MF0pLDMwMDg2LDEpLDA8KDB8YXJbcj4+Ml0pKWZvcihhPTA7V2UoYywxODg2MiwyKSwoMHwoYT1hKzF8MCkpPCgwfGFyW3I+PjJdKTspO2lmKGM9MHxXZShjLDIxMTY3LDE2KSxjPTB8V2UoMHxQZihjLDB8Y3JbZSs3OD4+MF0pLDMwMDg2LDEpLDA8KDB8YXJbcj4+Ml0pKWZvcihhPTA7V2UoYywxODg2MiwyKSwoMHwoYT1hKzF8MCkpPCgwfGFyW3I+PjJdKTspO2lmKGM9MHxXZShjLDIxMTg0LDE4KSxjPTB8V2UoMHxQZihjLDB8Y3JbZSs3OT4+MF0pLDMwMDg2LDEpLDA8KDB8YXJbcj4+Ml0pKWZvcihhPTA7V2UoYywxODg2MiwyKSwoMHwoYT1hKzF8MCkpPCgwfGFyW3I+PjJdKTspO2lmKGM9MHxXZShjLDIxMjAzLDE2KSxjPTB8V2UoMHx4ZihjLDB8b3JbZSs4MD4+MV0pLDMwMDg2LDEpLDA8KDB8YXJbcj4+Ml0pKWZvcihhPTA7V2UoYywxODg2MiwyKSwoMHwoYT1hKzF8MCkpPCgwfGFyW3I+PjJdKTspO2lmKGM9MHxXZShjLDIxMjIwLDIxKSxjPTB8V2UoMHxQZihjLDB8Y3JbZSs4Mj4+MF0pLDMwMDg2LDEpLDA8KDB8YXJbcj4+Ml0pKWZvcihhPTA7V2UoYywxODg2MiwyKSwoMHwoYT1hKzF8MCkpPCgwfGFyW3I+PjJdKTspO2lmKGM9MHxXZShjLDIxMjQyLDIxKSxjPTB8V2UoMHxQZihjLDB8Y3JbZSs4Mz4+MF0pLDMwMDg2LDEpLDA8KDB8YXJbcj4+Ml0pKWZvcihhPTA7V2UoYywxODg2MiwyKSwoMHwoYT1hKzF8MCkpPCgwfGFyW3I+PjJdKTspO2lmKGM9MHxXZShjLDIxMjY0LDIwKSxjPTB8V2UoMHxQZihjLDB8Y3JbZSs4ND4+MF0pLDMwMDg2LDEpLDA8KDB8YXJbcj4+Ml0pKWZvcihhPTA7V2UoYywxODg2MiwyKSwoMHwoYT1hKzF8MCkpPCgwfGFyW3I+PjJdKTspO2lmKGE9MHxXZShjLDIxMjg1LDEzKSxXZSgwfFBmKGEsMHxjcltlKzg4Pj4wXSksMzAwODYsMSksKDB8KGE9MHxhcltlKzkyPj4yXSkpIT0oMHwoYj0wfGFyW2UrOTY+PjJdKSkpe3U9YSxhPTB8YXJbcj4+Ml07ZG97aWYoMDwoMHxhKSlmb3IoYT0wO1dlKGYsMTg4NjIsMiksKDB8KGE9YSsxfDApKTwoMHxhcltyPj4yXSk7KTtpZihXZShmLDIxMjk5LDgpLGU9MHxhcltyPj4yXSxhcltyPj4yXT1lKzEsLTE8KDB8ZSkpZm9yKGE9MDtXZShmLDE4ODYyLDIpLCgwfChhPWErMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYoYz0wfFdlKGYsMjEzMDgsMjApLGM9MHxXZSgwfFBmKGMsMHxjclt1Pj4wXSksMzAwODYsMSksMDwoMHxhcltyPj4yXSkpZm9yKGE9MDtXZShjLDE4ODYyLDIpLCgwfChhPWErMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYoYz0wfFdlKGMsMjEzMjksMTUpLFdlKDB8UGYoYywwfGNyW3UrMT4+MF0pLDMwMDg2LDEpLGM9MHxhclt1KzQ+PjJdLGU9MHxhclt1Kzg+PjJdLGE9MHxhcltyPj4yXSwoMHxjKSE9KDB8ZSkpZG97aWYoMDwoMHxhKSlmb3IoYT0wO1dlKGYsMTg4NjIsMiksKDB8KGE9YSsxfDApKTwoMHxhcltyPj4yXSk7KTtpZigoMHwoYT0wfGFyW2M+PjJdKSkhPSgwfChsPTB8YXJbYys0Pj4yXSkpKWZvcig7cz0wfHRyW2E+PjBdLGFyW2YrKDB8YXJbKDB8YXJbZj4+Ml0pLTEyPj4yXSkrNzY+PjJdPTQ4LGFyW2YrKDB8YXJbKDB8YXJbZj4+Ml0pLTEyPj4yXSkrMTI+PjJdPTIsZD1mKygwfGFyWygwfGFyW2Y+PjJdKS0xMj4+Ml0pKzR8MCxhcltkPj4yXT0tNzUmYXJbZD4+Ml18OCxXZSgwfFBmKGYsMjU1JnMpLDIwNDQ5LDEpLCgwfChhPWErMXwwKSkhPSgwfGwpOyk7V2UoZiwzMDA4NiwxKSxhPWYrKDB8YXJbKDB8YXJbZj4+Ml0pLTEyPj4yXSkrNHwwLGFyW2E+PjJdPS03NSZhclthPj4yXXwyLGM9YysxMnwwLGE9MHxhcltyPj4yXX13aGlsZSgoMHxjKSE9KDB8ZSkpO2E9KDB8YSk8MT8wOmErLTF8MCxhcltyPj4yXT1hLHU9dSsxNnwwfXdoaWxlKCgwfHUpIT0oMHxiKSl9aWYoSWUoQSx0KSxhcltmPj4yXT00MzA0LGFyW24+PjJdPTQzMjQsYXJbdD4+Ml09NDM0MCwwPD0oMHx0clsxMStpPj4wXSkpcmV0dXJuIGtmKHQpLEdmKCksYmYobiksdm9pZCh1cj1vKTt2dSgwfGFyW2k+PjJdKSxrZih0KSxHZigpLGJmKG4pLHVyPW99LGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTA7dmFyIGksZj0wLG49MCx0PTAsbz0wLGE9MCxjPTA7Zm9yKHVyPShpPXVyKSszMnwwLGE9aSxjPTB8YXJbKHJ8PTApKzEyPj4yXSxqQShyLDB8dHJbZSszNj4+MF0/MTI6OCksSkEociwwfHRyW2UrNTY+PjBdKSxKQShyLHRyW2UrNTg+PjBdPDw1JjI1NXx0cltlKzU3Pj4wXTw8NiYyNTV8MzEmdHJbZSs1OT4+MF0pLFVBKHIsMHxhcltlKzYwPj4yXSksZj0wO289Zjw8MyxKQShyLCgwIT0oYXJbZSs2NCsoKGY+Pj4yJjEzNDIxNzcyNyk8PDIpPj4yXSYxPDwoMjQmb3w3KXwwKXwoMCE9KGFyW2UrNjQrKChmPj4+MiYxMzQyMTc3MjcpPDwyKT4+Ml0mMTw8KDI0Jm98Nil8MCl8KDAhPShhcltlKzY0KygoZj4+PjImMTM0MjE3NzI3KTw8Mik+PjJdJjE8PCgyNCZvfDUpfDApfCgwIT0oYXJbZSs2NCsoKGY+Pj4yJjEzNDIxNzcyNyk8PDIpPj4yXSYxPDwoMjQmb3w0KXwwKXwoMCE9KGFyW2UrNjQrKChmPj4+MiYxMzQyMTc3MjcpPDwyKT4+Ml0mMTw8KDI0Jm98Myl8MCl8KDAhPShhcltlKzY0KygoZj4+PjImMTM0MjE3NzI3KTw8Mik+PjJdJjE8PCgyNCZvfDIpfDApfCgwIT0oYXJbZSs2NCsoKGY+Pj4yJjEzNDIxNzcyNyk8PDIpPj4yXSYxPDwoMjQmb3wxKXwwKSYxKTw8MSk8PDEpPDwxJjE0KTw8MSYzMCk8PDEmNjIpPDwxJjEyNik8PDEmMjU1KSw2IT0oMHwoZj1mKzF8MCkpOyk7aWYoSkEociwwfHRyW2UrNzI+PjBdKSxNQShyLC00MDk2fG9yW2UrNzQ+PjFdKSxKQShyLC00fHRyW2UrNzY+PjBdKSxKQShyLC00fHRyW2UrNzc+PjBdKSxKQShyLC04fHRyW2UrNzg+PjBdKSxKQShyLC04fHRyW2UrNzk+PjBdKSxNQShyLDB8b3JbZSs4MD4+MV0pLEpBKHIsMjU1JigyNTUmKHRyW2UrODM+PjBdPDwzJjU2fHRyW2UrODI+PjBdPDw2JjI1NXx0cltlKzg0Pj4wXTw8MiY0KXwzKygwfGNyW2UrODg+PjBdKSYzKSksZj1lKzkyfDAsSkEociwoKDB8YXJbKG89ZSs5NnwwKT4+Ml0pLSgwfGFyW2Y+PjJdKXwwKT4+PjQmMjU1KSwoMHwoZj0wfGFyW2Y+PjJdKSkhPSgwfChvPTB8YXJbbz4+Ml0pKSlkb3tpZihKQShyLHRyW2Y+PjBdPDw2JjY0fDYzJnRyW2YrMT4+MF0pLG49Zis0fDAsTUEociw2NTUzNSYoKCgwfGFyWyh0PWYrOHwwKT4+Ml0pLSgwfGFyW24+PjJdKXwwKS8xMnwwKSksKDB8KG49MHxhcltuPj4yXSkpIT0oMHwodD0wfGFyW3Q+PjJdKSkpZm9yKDtNQShyLCgwfGFyW24rND4+Ml0pLSgwfGFyW24+PjJdKSY2NTUzNSksekEocixuKSwoMHwobj1uKzEyfDApKSE9KDB8dCk7KTtmPWYrMTZ8MH13aGlsZSgoMHxmKSE9KDB8bykpO2lmKEtBKGEsZSxyLGMpLDA8PSgwfHRyWyhmPWErOHwwKSsxMT4+MF0pKXJldHVybiBlPTB8YXJbKGU9YT01NjU5Mik+PjJdLGE9MHxhclsoYT1hKzR8MCk+PjJdLGFyWyhyPWM9QSk+PjJdPWUsYXJbKGM9Yys0fDApPj4yXT1hLHl1KEE9QSs4fDAsNTY2MDApLHZvaWQodXI9aSk7dnUoMHxhcltmPj4yXSksZT0wfGFyWyhlPWE9NTY1OTIpPj4yXSxhPTB8YXJbKGE9YSs0fDApPj4yXSxhclsocj1jPUEpPj4yXT1lLGFyWyhjPWMrNHwwKT4+Ml09YSx5dShBPUErOHwwLDU2NjAwKSx1cj1pfSxmdW5jdGlvbihBLGUscil7QXw9MCxlfD0wO3ZhciBpLGY9MCxuPTAsdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTAsQj0wLEU9MCxYPTAsVz0wLEk9MDtmb3IodXI9KGk9dXIpKzMyfDAsST1pKzE2fDAsVz1pLG49MHxJQShyfD0wKSx0cltlKzU2Pj4wXT1uLGY9MjU1JihuPTB8SUEocikpLHRyW2UrNTc+PjBdPSgyNTUmbik+Pj42LHRyW2UrNTg+PjBdPWY+Pj41JjEsdHJbZSs1OT4+MF09MzEmZixmPTB8RkEociksYXJbZSs2MD4+Ml09ZixuPShmPTApfElBKHIpO3A9MjU1Jm4seT0xPDwoMjQmKEI9Zjw8MykpLFo9MHxhclsoRT1lKzY0KygoZj4+PjImMTM0MjE3NzI3KTw8Mil8MCk+PjJdLGFyW0U+PjJdPTEyOCZwfDA/Wnx5OlomfnkseT0xPDwoMjQmQnwxKSxaPTB8YXJbKEU9ZSs2NCsoKGY+Pj4yJjEzNDIxNzcyNyk8PDIpfDApPj4yXSxhcltFPj4yXT02NCZwfDA/Wnx5OlomfnkseT0xPDwoMjQmQnwyKSxaPTB8YXJbKEU9ZSs2NCsoKGY+Pj4yJjEzNDIxNzcyNyk8PDIpfDApPj4yXSxhcltFPj4yXT0zMiZwfDA/Wnx5OlomfnkseT0xPDwoMjQmQnwzKSxaPTB8YXJbKEU9ZSs2NCsoKGY+Pj4yJjEzNDIxNzcyNyk8PDIpfDApPj4yXSxhcltFPj4yXT0xNiZwfDA/Wnx5OlomfnkseT0xPDwoMjQmQnw0KSxaPTB8YXJbKEU9ZSs2NCsoKGY+Pj4yJjEzNDIxNzcyNyk8PDIpfDApPj4yXSxhcltFPj4yXT04JnB8MD9afHk6WiZ+eSx5PTE8PCgyNCZCfDUpLFo9MHxhclsoRT1lKzY0KygoZj4+PjImMTM0MjE3NzI3KTw8Mil8MCk+PjJdLGFyW0U+PjJdPTQmcHwwP1p8eTpaJn55LHk9MTw8KDI0JkJ8NiksWj0wfGFyWyhFPWUrNjQrKChmPj4+MiYxMzQyMTc3MjcpPDwyKXwwKT4+Ml0sYXJbRT4+Ml09MiZwfDA/Wnx5OlomfnksQj0xPDwoMjQmQnw3KSx5PTB8YXJbKEU9ZSs2NCsoKGY+Pj4yJjEzNDIxNzcyNyk8PDIpfDApPj4yXSxhcltFPj4yXT0xJnB8MD95fEI6eSZ+QixmPWYrMXwwLG49MHxJQShyKSw2IT0oMHxmKTspO3RyW2UrNzI+PjBdPW4saz00MDk1JigwfFZBKHIpKSxvcltlKzc0Pj4xXT1rLGs9MyYoMHxJQShyKSksdHJbZSs3Nj4+MF09ayxrPTMmKDB8SUEocikpLHRyW2UrNzc+PjBdPWssaz03JigwfElBKHIpKXw4LHRyW2UrNzg+PjBdPWssaz03JigwfElBKHIpKXw4LHRyW2UrNzk+PjBdPWssaz0wfFZBKHIpLG9yW2UrODA+PjFdPWssRT0yNTUmKGs9MHxJQShyKSksdHJbZSs4Mj4+MF09KDI1NSZrKT4+PjYsdHJbZSs4Mz4+MF09RT4+PjMmNyx0cltlKzg0Pj4wXT1FPj4+MiYxLHRyW2UrODg+PjBdPTErKDMmRSksaz0yNTUmKEU9MHxJQShyKSk7QTpkb3tpZihFPDwyND4+MjQpe2g9cisyNHwwLHY9SSs4fDAsZz1JKzF8MCxaPWUrOTZ8MCxwPWUrMTAwfDAsQj1tPUkrMTJ8MCxFPXk9dz1JKzR8MCxsPWUrOTJ8MCx1PVcrNHwwLHM9cis0fDAsZD1iPVcrOHwwLGM9MDtkb3tpZigwfHRyW2g+PjBdKWJyZWFrIEE7bz0wfElBKHIpLGFyW3c+PjJdPTAsYXJbdj4+Ml09MCxhclttPj4yXT0wLG8mPTI1NSx0cltJPj4wXT1vPj4+NiYxLHRyW2c+PjBdPTYzJm8sYT02NTUzNSYobz0wfFZBKHIpKTtlOmRve2lmKG88PDE2Pj4xNil7bz0wO2Rve2lmKDB8dHJbaD4+MF0pYnJlYWsgZTthcltXPj4yXT0wLGFyW3U+PjJdPTAsdD02NTUzNSYoZj0oYXJbYj4+Ml09MCl8VkEocikpO2Rve2lmKGY8PDE2Pj4xNil7ZG97aWYoMHxDQShyLDY1NTM1JmYsMCkpe2lmKHQ+Pj4wPD0oZj0oZT0wfGFyW3U+PjJdKS0obj0wfGFyW1c+PjJdKXwwKT4+PjA/dD4+PjA8Zj4+PjAmJigwfGUpIT0oMHwoWD1uK3R8MCkpJiYoYXJbdT4+Ml09WCk6VEEoVyx0LWZ8MCksZj0wfGFyW3I+PjJdLG49MHxhcltzPj4yXSl7YnUobikseGJbNjMmYXJbMTYrKDB8YXJbZj4+Ml0pPj4yXV0oZiwwfGFyW1c+PjJdLHQpLGR1KG4pO2JyZWFrfXhiWzYzJmFyWzE2KygwfGFyW2Y+PjJdKT4+Ml1dKGYsMHxhcltXPj4yXSx0KTticmVha319d2hpbGUoMCk7aWYoKGY9MHxhclt2Pj4yXSk+Pj4wPCgwfGFyW0I+PjJdKT4+PjApe2FyW2Y+PjJdPTAsYXJbKHQ9Zis0fDApPj4yXT0wLGFyW2YrOD4+Ml09MCxhcltmPj4yXT1hcltXPj4yXSxhclt0Pj4yXT1hclt1Pj4yXSxhcltmKzg+PjJdPWFyW2Q+PjJdLGFyW2Q+PjJdPTAsYXJbdT4+Ml09MCxhcltXPj4yXT0wLGFyW3Y+PjJdPTEyKygwfGFyW3Y+PjJdKTticmVha311ZSh5LFcpO2JyZWFrfX13aGlsZSgwKTswfChmPTB8YXJbVz4+Ml0pJiYoKDB8YXJbdT4+Ml0pIT0oMHxmKSYmKGFyW3U+PjJdPWYpLHZ1KGYpKSxvPW8rMXwwfXdoaWxlKCgwfG8pPCgwfGEpKX19d2hpbGUoMCk7aWYoKGY9MHxhcltaPj4yXSk+Pj4wPj0oMHxhcltwPj4yXSk+Pj4wKXtpZihsZShsLEkpLDB8KGY9MHxhcltFPj4yXSkpe2lmKCgwfChuPTB8YXJbdj4+Ml0pKSE9KDB8Zikpe2Zvcig7ZT1uKy0xMnwwLGFyW3Y+PjJdPWUsKDB8KG49KHQ9MHxhcltlPj4yXSk/KCgwfGFyWyhuPW4rLTh8MCk+PjJdKSE9KDB8dCkmJihhcltuPj4yXT10KSx2dSh0KSwwfGFyW3Y+PjJdKTplKSkhPSgwfGYpOyk7Zj0wfGFyW0U+PjJdfXZ1KGYpfX1lbHNlIG9yW2Y+PjFdPTB8b3JbST4+MV0sYXJbKG89Zis0fDApPj4yXT0wLGFyWyhhPWYrOHwwKT4+Ml09MCxhcltmKzEyPj4yXT0wLGFyW28+PjJdPWFyW3k+PjJdLGFyW2E+PjJdPWFyW3Y+PjJdLGFyW2YrMTI+PjJdPWFyW0I+PjJdLGFyW0I+PjJdPTAsYXJbdj4+Ml09MCxhclt5Pj4yXT0wLGFyW1o+PjJdPTE2KygwfGFyW1o+PjJdKTtjPWMrMXwwfXdoaWxlKCgwfGMpPCgwfGspKX19d2hpbGUoMCk7aWYobj0wfGFyWyhmPXQ9cisxNnwwKT4+Ml0sMDwoMHwoZj0wfGFyW2YrND4+Ml0pKXwwPT0oMHxmKSYwPG4+Pj4wJiYoKGU9MHxhcltyKzg+PjJdKSYmKF9BKGUsbixmKSxuPTB8YXJbKGY9dCk+PjJdLGY9MHxhcltmKzQ+PjJdKSxYPTB8YXJbcj4+Ml0sVz0wfGFyW1g+PjJdLEU9MHxhcltXKzIwPj4yXSxXPTB8dGIoMHwoVz0wfGpiWzEyNyZhcltXKzg+PjJdXShYKSksMHxELDB8biwwfGYpLHhiWzYzJkVdKFgsVyxEKSxhclsoVz10KT4+Ml09MCxhcltXKzQ+PjJdPTApLCEoMHx0cltyKzI0Pj4wXSkpcmV0dXJuIHI9MHxhclsoVz01NjU5MikrND4+Ml0sYXJbKEk9QSk+PjJdPWFyW1c+PjJdLGFyW0krND4+Ml09cix5dShBKzh8MCw1NjYwMCksdm9pZCh1cj1pKTthcltJPj4yXT0wLGFyW0krND4+Ml09MCxhcltJKzg+PjJdPTAsb28oQSwyLDEwMCxJKSx1cj0oMDw9KDB8dHJbSSsxMT4+MF0pfHx2dSgwfGFyW0k+PjJdKSxpKX0sZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MCxyfD0wO3ZhciBpLGYsbix0LG8sYT0wLGM9MCxsPTAsdT0wO2lmKHVyPShvPXVyKSsxNjB8MCxhPW8rMTM2fDAsbj0oZj1vKSs1NnwwLHQ9Zis0fDAsYXJbZj4+Ml09MjkyLGFyW24+PjJdPTMxMixKZihmKzU2fDAsdCksYXJbZisxMjg+PjJdPTAsYXJbZisxMzI+PjJdPS0xLGFyW2Y+PjJdPTQzMDQsYXJbbj4+Ml09NDMyNCxTZih0KSxhclt0Pj4yXT00MzQwLGFyWyhpPWYrMzZ8MCk+PjJdPTAsYXJbNCtpPj4yXT0wLGFyWzgraT4+Ml09MCxhclsxMitpPj4yXT0wLGFyW2YrNTI+PjJdPTE2LGFyW2E+PjJdPTAsYXJbYSs0Pj4yXT0wLGFyW2ErOD4+Ml09MCxYZSh0LGEpLCgwfHRyW2ErMTE+PjBdKTwwJiZ2dSgwfGFyW2E+PjJdKSxMQShhLGUsciksV2UoZiwodT0obD0wfHRyWyhjPWErMTF8MCk+PjBdKTw8MjQ+PjI0PDApPzB8YXJbYT4+Ml06YSx1PzB8YXJbYSs0Pj4yXToyNTUmbCksKDB8dHJbYz4+MF0pPDAmJnZ1KDB8YXJbYT4+Ml0pLDA8KDB8YXJbcj4+Ml0pKWZvcihhPTA7V2UoZiwxODg2MiwyKSwoMHwoYT1hKzF8MCkpPCgwfGFyW3I+PjJdKTspO2lmKGM9MHxXZShmLDE4OTA3LDkpLGM9MHxXZSgwfFBmKGMsMHxjcltlKzU2Pj4wXSksMzAwODYsMSksMDwoMHxhcltyPj4yXSkpZm9yKGE9MDtXZShjLDE4ODYyLDIpLCgwfChhPWErMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYoYz0wfFdlKGMsMjA2NDQsMTMpLGM9MHxXZSgwfFBmKGMsMHxjcltlKzU3Pj4wXSksMzAwODYsMSksMDwoMHxhcltyPj4yXSkpZm9yKGE9MDtXZShjLDE4ODYyLDIpLCgwfChhPWErMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYoYz0wfFdlKGMsMjA2NTgsMTcpLGM9MHxXZSgwfFBmKGMsMHxjcltlKzU4Pj4wXSksMzAwODYsMSksMDwoMHxhcltyPj4yXSkpZm9yKGE9MDtXZShjLDE4ODYyLDIpLCgwfChhPWErMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYoYz0wfFdlKGMsMjA2NzYsMTUpLGM9MHxXZSgwfFBmKGMsMHxjcltlKzYwPj4wXSksMzAwODYsMSksMDwoMHxhcltyPj4yXSkpZm9yKGE9MDtXZShjLDE4ODYyLDIpLCgwfChhPWErMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYoYz0wfFdlKGMsMjA2OTIsMTIpLGM9MHxXZSgwfFBmKGMsMHxjcltlKzYxPj4wXSksMzAwODYsMSksMDwoMHxhcltyPj4yXSkpZm9yKGE9MDtXZShjLDE4ODYyLDIpLCgwfChhPWErMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYoYz0wfFdlKGMsMjA3MDUsMjIpLGM9MHxXZSgwfFBmKGMsMHxjcltlKzYzPj4wXSksMzAwODYsMSksMDwoMHxhcltyPj4yXSkpZm9yKGE9MDtXZShjLDE4ODYyLDIpLCgwfChhPWErMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYoYz0wfFdlKGMsMjA3MjgsMjIpLGM9MHxXZSgwfFBmKGMsMHxjcltlKzY0Pj4wXSksMzAwODYsMSksMDwoMHxhcltyPj4yXSkpZm9yKGE9MDtXZShjLDE4ODYyLDIpLCgwfChhPWErMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYoYz0wfFdlKGMsMjA3NTEsMjQpLGM9MHxXZSgwfFBmKGMsMHxjcltlKzY1Pj4wXSksMzAwODYsMSksMDwoMHxhcltyPj4yXSkpZm9yKGE9MDtXZShjLDE4ODYyLDIpLCgwfChhPWErMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYoV2UoYywyMDc3NiwyOCksMHx0cltlKzY2Pj4wXT9XZSgwfFBmKGYsMSsoMHxjcltlKzY3Pj4wXSl8MCksMzAwODYsMSk6V2UoZiwyMDgwNSwxMiksMDwoMHxhcltyPj4yXSkpZm9yKGE9MDtXZShmLDE4ODYyLDIpLCgwfChhPWErMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYoV2UoZiwyMDgxOCwxMikscj1lKzY4fDAsKDB8YXJbKGM9ZSs3MnwwKT4+Ml0pIT0oMHxhcltyPj4yXSkpZm9yKGE9MDtsPSh1PTB8V2UoZiwyMDQ0OSwxKSkrKDB8YXJbKDB8YXJbdT4+Ml0pLTEyPj4yXSkrNHwwLGFyW2w+PjJdPS03NSZhcltsPj4yXXw4LGFyW3UrKDB8YXJbKDB8YXJbdT4+Ml0pLTEyPj4yXSkrNzY+PjJdPTQ4LGFyW3UrKDB8YXJbKDB8YXJbdT4+Ml0pLTEyPj4yXSkrMTI+PjJdPTIsUGYodSwwfGNyWygwfGFyW3I+PjJdKSthPj4wXSksKGE9YSsxfDApPj4+MDwoKDB8YXJbYz4+Ml0pLSgwfGFyW3I+PjJdKXwwKT4+PjA7KTtpZih1PWYrKDB8YXJbKDB8YXJbZj4+Ml0pLTEyPj4yXSkrNHwwLGFyW3U+PjJdPS03NSZhclt1Pj4yXXwyLFdlKGYsMzAwODYsMSksSWUoQSx0KSxhcltmPj4yXT00MzA0LGFyW24+PjJdPTQzMjQsYXJbdD4+Ml09NDM0MCwwPD0oMHx0clsxMStpPj4wXSkpcmV0dXJuIGtmKHQpLEdmKCksYmYobiksdm9pZCh1cj1vKTt2dSgwfGFyW2k+PjJdKSxrZih0KSxHZigpLGJmKG4pLHVyPW99LGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTA7dmFyIGksZj0wLG49MDtpZih1cj0oaT11cikrMzJ8MCxmPWksbj0wfGFyWyhyfD0wKSsxMj4+Ml0sakEociwwfHRyW2UrMzY+PjBdPzEyOjgpLEpBKHIsLTEyOHx0cltlKzU2Pj4wXSksSkEociwzMSZ0cltlKzU4Pj4wXXx0cltlKzU3Pj4wXTw8NSYyNTUpLEpBKHIsMjU1JigoMHx0cltlKzYwPj4wXT82NDowKXwoMHx0cltlKzU5Pj4wXT8xMjg6MCl8KDB8dHJbZSs2MT4+MF0/MzI6MCl8KDB8dHJbZSs2Mj4+MF0/MTY6MCl8KDB8dHJbZSs2Mz4+MF0/ODowKXwoMHx0cltlKzY0Pj4wXT80OjApfDMmdHJbZSs2NT4+MF0pKSxKQShyLDApLEtBKGYsZSxyLG4pLDA8PSgwfHRyWyhlPWYrOHwwKSsxMT4+MF0pKXJldHVybiBlPTB8YXJbKGU9Zj01NjU5Mik+PjJdLGY9MHxhclsoZj1mKzR8MCk+PjJdLGFyWyhyPW49QSk+PjJdPWUsYXJbKG49bis0fDApPj4yXT1mLHl1KG49QSs4fDAsNTY2MDApLHZvaWQodXI9aSk7dnUoMHxhcltlPj4yXSksZT0wfGFyWyhlPWY9NTY1OTIpPj4yXSxmPTB8YXJbKGY9Zis0fDApPj4yXSxhclsocj1uPUEpPj4yXT1lLGFyWyhuPW4rNHwwKT4+Ml09Zix5dShuPUErOHwwLDU2NjAwKSx1cj1pfSxmdW5jdGlvbihBLGUscil7QXw9MCxlfD0wO3ZhciBpLGYsbix0LG8sYSxjLGwsdSxiLHMsZD0wLGs9MCxoPTAsdz0wO2lmKHVyPShvPXVyKSsxNnwwLHc9byxrPTEyNyYoMHxJQShyfD0wKSksdHJbZSs1Nj4+MF09ayxrPTB8SUEociksdHJbZSs1Nz4+MF09KDI1NSZrKT4+PjUsdHJbZSs1OD4+MF09MzEmayxkPTI1NSYoaz0wfElBKHIpKSx0cltlKzU5Pj4wXT0oMjU1JmspPj4+Nyx0cltlKzYwPj4wXT1kPj4+NiYxLHRyW2UrNjE+PjBdPWQ+Pj41JjEsdHJbZSs2Mj4+MF09ZD4+PjQmMSx0cltlKzYzPj4wXT1kPj4+MyYxLHRyW2UrNjQ+PjBdPWQ+Pj4yJjEsdHJbZSs2NT4+MF09MyZkLGs9KGQ9MjU1JigwfElBKHIpKSk+Pj40JjEsKHRyW2UrNjY+PjBdPWspPDwyND4+MjQmJih0cltlKzY3Pj4wXT0xNSZkKSx0PTB8YXJbKGs9cisxNnwwKT4+Ml0saz0wfGFyW2srND4+Ml0sbj1lKzY4fDAsdD4+PjA8PShpPShmPTB8YXJbKGU9ZSs3MnwwKT4+Ml0pLShkPTB8YXJbbj4+Ml0pfDApPj4+MD90Pj4+MDxpPj4+MCYmKDB8ZikhPSgwfChoPWQrdHwwKSkmJihhcltlPj4yXT1oKTooVEEobix0LWl8MCksZD0wfGFyW24+PjJdKSxhPXIsYz1kLGw9dCx1PWssY3w9MCxhPTB8Q0EoYXw9MCxsfD0wLHV8PTApPyh1PTB8YXJbYT4+Ml0sKHM9MD09KDB8KGI9MHxhclthKzQ+PjJdKSkpfHxidShiKSwodT0wfHhiWzYzJmFyWzE2KygwfGFyW3U+PjJdKT4+Ml1dKHUsYyxsKSl8fEdBKGEpLHN8fGR1KGIpLHUpOjAsISgwfHRyW3IrMjQ+PjBdKSlyZXR1cm4gcj0wfGFyWyhoPTU2NTkyKSs0Pj4yXSxhclsodz1BKT4+Ml09YXJbaD4+Ml0sYXJbdys0Pj4yXT1yLHl1KEErOHwwLDU2NjAwKSx2b2lkKHVyPW8pO2FyW3c+PjJdPTAsYXJbdys0Pj4yXT0wLGFyW3crOD4+Ml09MCxvbyhBLDIsMTAwLHcpLHVyPSgwPD0oMHx0clt3KzExPj4wXSl8fHZ1KDB8YXJbdz4+Ml0pLG8pfSxmdW5jdGlvbihBLGUscil7QXw9MCxlfD0wLHJ8PTA7dmFyIGksZixuLHQsbyxhLGM9MCxsPTAsdT0wO2lmKHVyPShvPXVyKSsxNjB8MCxjPW8rMTM2fDAsbj0oZj1vKSs1NnwwLHQ9Zis0fDAsYXJbZj4+Ml09MjkyLGFyW24+PjJdPTMxMixKZihmKzU2fDAsdCksYXJbZisxMjg+PjJdPTAsYXJbZisxMzI+PjJdPS0xLGFyW2Y+PjJdPTQzMDQsYXJbbj4+Ml09NDMyNCxTZih0KSxhclt0Pj4yXT00MzQwLGFyWyhpPWYrMzZ8MCk+PjJdPTAsYXJbNCtpPj4yXT0wLGFyWzgraT4+Ml09MCxhclsxMitpPj4yXT0wLGFyW2YrNTI+PjJdPTE2LGFyW2M+PjJdPTAsYXJbYys0Pj4yXT0wLGFyW2MrOD4+Ml09MCxYZSh0LGMpLCgwfHRyW2MrMTE+PjBdKTwwJiZ2dSgwfGFyW2M+PjJdKSxMQShjLGUsciksV2UoZiwodT0obD0wfHRyWyhhPWMrMTF8MCk+PjBdKTw8MjQ+PjI0PDApPzB8YXJbYz4+Ml06Yyx1PzB8YXJbYys0Pj4yXToyNTUmbCksKDB8dHJbYT4+MF0pPDAmJnZ1KDB8YXJbYz4+Ml0pLDA8KDB8YXJbcj4+Ml0pKWZvcihjPTA7V2UoZiwxODg2MiwyKSwoMHwoYz1jKzF8MCkpPCgwfGFyW3I+PjJdKTspO2lmKGw9MHxXZShmLDIwNTM2LDIyKSxXZSgwfEtmKGwsdT0wfG9iKDB8YXJbKHU9ZSs4fDApPj4yXSwwfGFyW3UrND4+Ml0sMHxhcltlKzE2Pj4yXSwwKSxEKSwzMDA4NiwxKSxJZShBLHQpLGFyW2Y+PjJdPTQzMDQsYXJbbj4+Ml09NDMyNCxhclt0Pj4yXT00MzQwLDA8PSgwfHRyWzExK2k+PjBdKSlyZXR1cm4ga2YodCksR2YoKSxiZihuKSx2b2lkKHVyPW8pO3Z1KDB8YXJbaT4+Ml0pLGtmKHQpLEdmKCksYmYobiksdXI9b30sZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MDt2YXIgaSxmPTAsbj0wO3VyPShpPXVyKSszMnwwLGY9aSxuPTB8YXJbKHJ8PTApKzEyPj4yXSxqQShyLDB8dHJbZSszNj4+MF0/MTI6OCksekEocixlKzcyfDApLEtBKGYsZSxyLG4pLCgwfHRyWyhlPWYrOHwwKSsxMT4+MF0pPDAmJnZ1KDB8YXJbZT4+Ml0pLGY9MHxhclsocj01NjU5MikrND4+Ml0sYXJbKG49QSk+PjJdPWFyW3I+PjJdLGFyW24rND4+Ml09Zix5dShBKzh8MCw1NjYwMCksdXI9aX0sZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MDt2YXIgaSxmLG49MCx0PTAsbz0wO2lmKHVyPShmPXVyKSsxNnwwLGk9ZixuPTB8YXJbKHJ8PTApPj4yXSwodD0wfGFyW3IrND4+Ml0pPyhidSh0KSxvPTB8amJbMTI3JmFyWzgrKDB8YXJbbj4+Ml0pPj4yXV0obiksYXJbKG49ZSs1NnwwKT4+Ml09MCxhcltuKzQ+PjJdPTAsYXJbKG49ZSs2NHwwKT4+Ml09byxhcltuKzQ+PjJdPUQsZHUodCkpOihuPTB8amJbMTI3JmFyWzgrKDB8YXJbbj4+Ml0pPj4yXV0obiksYXJbKHQ9ZSs1NnwwKT4+Ml09MCxhclt0KzQ+PjJdPTAsYXJbKHQ9ZSs2NHwwKT4+Ml09bixhclt0KzQ+PjJdPUQpLCEoMHx0cltyKzI0Pj4wXSkpcmV0dXJuIHQ9MHxhclsobj01NjU5MikrND4+Ml0sYXJbKG89QSk+PjJdPWFyW24+PjJdLGFyW28rND4+Ml09dCx5dShBKzh8MCw1NjYwMCksdm9pZCh1cj1mKTthcltpPj4yXT0wLGFyW2krND4+Ml09MCxhcltpKzg+PjJdPTAsb28oQSwyLDEwMCxpKSx1cj0oMDw9KDB8dHJbaSsxMT4+MF0pfHx2dSgwfGFyW2k+PjJdKSxmKX0sZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MCxyfD0wO3ZhciBpLGYsbix0LG8sYSxjPTAsbD0wLHU9MCxiPTAscz0wLGQ9MDtpZih1cj0oYT11cikrMTYwfDAsZj1hKzEzNnwwLHQ9KG49YSkrNTZ8MCxvPW4rNHwwLGFyW24+PjJdPTI5Mixhclt0Pj4yXT0zMTIsSmYobis1NnwwLG8pLGFyW24rMTI4Pj4yXT0wLGFyW24rMTMyPj4yXT0tMSxhcltuPj4yXT00MzA0LGFyW3Q+PjJdPTQzMjQsU2YobyksYXJbbz4+Ml09NDM0MCxhclsoaT1uKzM2fDApPj4yXT0wLGFyWzQraT4+Ml09MCxhcls4K2k+PjJdPTAsYXJbMTIraT4+Ml09MCxhcltuKzUyPj4yXT0xNixhcltmPj4yXT0wLGFyWzQrZj4+Ml09MCxhcls4K2Y+PjJdPTAsWGUobyxmKSwoMHx0clsxMStmPj4wXSk8MCYmdnUoMHxhcltmPj4yXSksTEEoZixlLHIpLFdlKG4sKHU9KGI9MHx0clsocz0xMStmfDApPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW2Y+PjJdOmYsdT8wfGFyWzQrZj4+Ml06MjU1JmIpLCgwfHRyW3M+PjBdKTwwJiZ2dSgwfGFyW2Y+PjJdKSwoMHwoYz0wfGFyW2UrNTY+PjJdKSkhPSgwfCh1PTB8YXJbZSs2MD4+Ml0pKSl7Yj0xMStmfDAscz00K2Z8MDtkb3tpZigwPCgwfGFyW3I+PjJdKSlmb3IoZT0wO1dlKG4sMTg4NjIsMiksKDB8KGU9ZSsxfDApKTwoMHxhcltyPj4yXSk7KTtpZihkPTB8V2UobiwyMDQwOCwxMikseEEoZixjKSxsPTB8V2UoMHxXZShkLChlPShsPTB8dHJbYj4+MF0pPDwyND4+MjQ8MCk/MHxhcltmPj4yXTpmLGU/MHxhcltzPj4yXToyNTUmbCksMzAwODYsMSksMDwoMHxhcltyPj4yXSkpZm9yKGU9MDtXZShsLDE4ODYyLDIpLCgwfChlPWUrMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYobD0wfFdlKGwsMjA0MjEsMTIpLGw9MHxXZSgwfExmKGwsMHxhcltjKzQ4Pj4yXSksMzAwODYsMSksMDwoMHxhcltyPj4yXSkpZm9yKGU9MDtXZShsLDE4ODYyLDIpLCgwfChlPWUrMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYoV2UobCwyMDQzNCwxNCksKDB8dHJbYj4+MF0pPDAmJnZ1KDB8YXJbZj4+Ml0pLCgwfChlPTB8YXJbYys1Mj4+Ml0pKSE9KDB8KGw9MHxhcltjKzU2Pj4yXSkpKWZvcig7V2UoMHxMZihuLDB8YXJbZT4+Ml0pLDIwNDQ5LDEpLCgwfChlPWUrNHwwKSkhPSgwfGwpOyk7V2UobiwzMDA4NiwxKSxjPWMrNjR8MH13aGlsZSgoMHxjKSE9KDB8dSkpfWlmKEllKEEsbyksYXJbbj4+Ml09NDMwNCxhclt0Pj4yXT00MzI0LGFyW28+PjJdPTQzNDAsMDw9KDB8dHJbMTEraT4+MF0pKXJldHVybiBrZihvKSxHZigpLGJmKHQpLHZvaWQodXI9YSk7dnUoMHxhcltpPj4yXSksa2YobyksR2YoKSxiZih0KSx1cj1hfSxmdW5jdGlvbihBLGUscil7dmFyIGksZixuLHQsbyxhLGMsbCx1LGIscyxkLGssaCx3LHYsbSxnLFoscD0wLHk9MCxCPTAsRT0wLFg9MCxXPTA7Zm9yKHVyPShaPXVyKSs5NnwwLHY9KHJ8PTApKzE2fDAsbT04KyhoPVorMjR8MCl8MCxnPTQwK2h8MCxYPTU2K2h8MCxsPSh3PVopKzh8MCx1PTExKyhjPShBfD0wKSs4fDApfDAsYj1BKzEyfDAscz00OCtofDAsZD0oZXw9MCkrNjB8MCxrPWUrNjR8MCxpPWUrNTZ8MCxmPWE9NjAraHwwLG49RT01MitofDAsdD0yNCtofDAsbz0yOCtofDA7ISgwPT0oMHxhclsoQj12KT4+Ml0pJjA9PSgwfGFyW0IrND4+Ml0pKTspe2lmKGFyW2g+PjJdPTQyNjQsYXJbZz4+Ml09MCxhclttPj4yXT0wLGFyWzQrbT4+Ml09MCxhcls4K20+PjJdPTAsYXJbMTIrbT4+Ml09MCxhclsxNittPj4yXT0wLGFyWzIwK20+PjJdPTAsYXJbMjQrbT4+Ml09MCxvclsyOCttPj4xXT0wLGFyW0U+PjJdPTAsYXJbWD4+Ml09MCxhclthPj4yXT0wLHJlKEEsaCxyKSwoMHxhcltBPj4yXSk9PSgwfGFyWzE0MTQ4XSkpaWYocUEodyxoLHIpLHk9MHxhclsocD13KSs0Pj4yXSxhclsoQj1BKT4+Ml09YXJbcD4+Ml0sYXJbQis0Pj4yXT15LCgwfHRyW3U+PjBdKTwwPyh0clthcltjPj4yXT4+MF09MCxhcltiPj4yXT0wKToodHJbYz4+MF09MCx0clt1Pj4wXT0wKSxDdShjLDApLGFyW2M+PjJdPWFyW2w+PjJdLGFyWzQrYz4+Ml09YXJbNCtsPj4yXSxhcls4K2M+PjJdPWFyWzgrbD4+Ml0sKDB8YXJbQT4+Ml0pPT0oMHxhclsxNDE0OF0pKXtwPTB8RkEociksYXJbcz4+Ml09cCxwPTB8RkEocik7QTpkb3tpZigwPCgwfHApKXtlPTA7ZG97aWYoMD09KDB8YXJbKEI9dik+PjJdKSYwPT0oMHxhcltCKzQ+PjJdKSlicmVhayBBO3k9MHxGQShyKSxhclt3Pj4yXT15LChCPTB8YXJbWD4+Ml0pPj4+MDwoMHxhcltmPj4yXSk+Pj4wPyhhcltCPj4yXT15LGFyW1g+PjJdPUIrNCk6Q2Uobix3KSxlPWUrMXwwfXdoaWxlKCgwfGUpPCgwfHApKX19d2hpbGUoMCk7KDB8KGU9MHxhcltkPj4yXSkpPT0oMHxhcltrPj4yXSk/YWUoaSxoKToob2UoZSxoKSxhcltkPj4yXT02NCsoMHxhcltkPj4yXSkpLHk9KCgwfHRyW3U+PjBdKTwwJiZ2dSgwfGFyW2M+PjJdKSwwKX1lbHNlIHk9MTtlbHNlIHk9MTtpZigwfChlPTB8YXJbRT4+Ml0pJiYoKDB8KHA9MHxhcltYPj4yXSkpIT0oMHxlKSYmKGFyW1g+PjJdPXArKH4oKHArLTQtZXwwKT4+PjIpPDwyKSksdnUoZSkpLGFyW2g+PjJdPTQyNjQsMHwoZT0wfGFyW3Q+PjJdKSYmKCgwfGFyW28+PjJdKSE9KDB8ZSkmJihhcltvPj4yXT1lKSx2dShlKSksMT09KDB8eSkpe1c9MzM7YnJlYWt9fXVyPSgzMyE9KDB8VykmJigwfHRyW3IrMjQ+PjBdPyhhcltoPj4yXT0wLGFyWzQraD4+Ml09MCxhcls4K2g+PjJdPTAsb28oQSwyLDEwMCxoKSwoMHx0clsxMStoPj4wXSk8MCYmdnUoMHxhcltoPj4yXSkpOihYPTB8YXJbKEU9NTY1OTIpKzQ+PjJdLGFyWyhXPUEpPj4yXT1hcltFPj4yXSxhcltXKzQ+PjJdPVgseXUoYyw1NjYwMCkpKSxaKX0sZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MCxyfD0wO3ZhciBpLGYsbix0LG8sYSxjPTAsbD0wLHU9MDtpZih1cj0oYT11cikrMTYwfDAsZj1hKzEzNnwwLHQ9KG49YSkrNTZ8MCxvPW4rNHwwLGFyW24+PjJdPTI5Mixhclt0Pj4yXT0zMTIsSmYobis1NnwwLG8pLGFyW24rMTI4Pj4yXT0wLGFyW24rMTMyPj4yXT0tMSxhcltuPj4yXT00MzA0LGFyW3Q+PjJdPTQzMjQsU2YobyksYXJbbz4+Ml09NDM0MCxhclsoaT1uKzM2fDApPj4yXT0wLGFyWzQraT4+Ml09MCxhcls4K2k+PjJdPTAsYXJbMTIraT4+Ml09MCxhcltuKzUyPj4yXT0xNixhcltmPj4yXT0wLGFyWzQrZj4+Ml09MCxhcls4K2Y+PjJdPTAsWGUobyxmKSwoMHx0clsxMStmPj4wXSk8MCYmdnUoMHxhcltmPj4yXSksTEEoZixlLHIpLFdlKG4sKHU9KGw9MHx0clsoYz0xMStmfDApPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW2Y+PjJdOmYsdT8wfGFyWzQrZj4+Ml06MjU1JmwpLCgwfHRyW2M+PjBdKTwwJiZ2dSgwfGFyW2Y+PjJdKSxuZShmLGUsciksV2UobiwoYz0obD0wfHRyWyh1PTExK2Z8MCk+PjBdKTw8MjQ+PjI0PDApPzB8YXJbZj4+Ml06ZixjPzB8YXJbNCtmPj4yXToyNTUmbCksKDB8dHJbdT4+MF0pPDAmJnZ1KDB8YXJbZj4+Ml0pLEllKEEsbyksYXJbbj4+Ml09NDMwNCxhclt0Pj4yXT00MzI0LGFyW28+PjJdPTQzNDAsMDw9KDB8dHJbMTEraT4+MF0pKXJldHVybiBrZihvKSxHZigpLGJmKHQpLHZvaWQodXI9YSk7dnUoMHxhcltpPj4yXSksa2YobyksR2YoKSxiZih0KSx1cj1hfSxmdW5jdGlvbihBLGUscil7JEEoQXw9MCxlfD0wLHJ8PTAsLTEpfSxmdW5jdGlvbihBLGUscil7QXw9MCxlfD0wLHJ8PTA7dmFyIGksZixuLHQsbyxhLGM9MCxsPTAsdT0wO2lmKHVyPShhPXVyKSsxNjB8MCxmPWErMTM2fDAsdD0obj1hKSs1NnwwLG89bis0fDAsYXJbbj4+Ml09MjkyLGFyW3Q+PjJdPTMxMixKZihuKzU2fDAsbyksYXJbbisxMjg+PjJdPTAsYXJbbisxMzI+PjJdPS0xLGFyW24+PjJdPTQzMDQsYXJbdD4+Ml09NDMyNCxTZihvKSxhcltvPj4yXT00MzQwLGFyWyhpPW4rMzZ8MCk+PjJdPTAsYXJbNCtpPj4yXT0wLGFyWzgraT4+Ml09MCxhclsxMitpPj4yXT0wLGFyW24rNTI+PjJdPTE2LGFyW2Y+PjJdPTAsYXJbNCtmPj4yXT0wLGFyWzgrZj4+Ml09MCxYZShvLGYpLCgwfHRyWzExK2Y+PjBdKTwwJiZ2dSgwfGFyW2Y+PjJdKSxMQShmLGUsciksV2UobiwodT0obD0wfHRyWyhjPTExK2Z8MCk+PjBdKTw8MjQ+PjI0PDApPzB8YXJbZj4+Ml06Zix1PzB8YXJbNCtmPj4yXToyNTUmbCksKDB8dHJbYz4+MF0pPDAmJnZ1KDB8YXJbZj4+Ml0pLG5lKGYsZSxyKSxXZShuLChjPShsPTB8dHJbKHU9MTErZnwwKT4+MF0pPDwyND4+MjQ8MCk/MHxhcltmPj4yXTpmLGM/MHxhcls0K2Y+PjJdOjI1NSZsKSwoMHx0clt1Pj4wXSk8MCYmdnUoMHxhcltmPj4yXSksSWUoQSxvKSxhcltuPj4yXT00MzA0LGFyW3Q+PjJdPTQzMjQsYXJbbz4+Ml09NDM0MCwwPD0oMHx0clsxMStpPj4wXSkpcmV0dXJuIGtmKG8pLEdmKCksYmYodCksdm9pZCh1cj1hKTt2dSgwfGFyW2k+PjJdKSxrZihvKSxHZigpLGJmKHQpLHVyPWF9LGZ1bmN0aW9uKEEsZSxyKXtBfD0wO3ZhciBpLGY9MDt1cj0oaT11cikrMzJ8MCxxQShmPWksZXw9MCxyfD0wKSwoMHx0clsoZj1mKzh8MCkrMTE+PjBdKTwwJiZ2dSgwfGFyW2Y+PjJdKSwkQShBLGUsciwwfEZBKHIpKSx1cj1pfSxmdW5jdGlvbihBLGUscil7QXw9MCxlfD0wLHJ8PTA7dmFyIGksZixuLHQsbyxhPTAsYz0wLGw9MCx1PTA7aWYodXI9KG89dXIpKzE2MHwwLGE9bysxMzZ8MCxuPShmPW8pKzU2fDAsdD1mKzR8MCxhcltmPj4yXT0yOTIsYXJbbj4+Ml09MzEyLEpmKGYrNTZ8MCx0KSxhcltmKzEyOD4+Ml09MCxhcltmKzEzMj4+Ml09LTEsYXJbZj4+Ml09NDMwNCxhcltuPj4yXT00MzI0LFNmKHQpLGFyW3Q+PjJdPTQzNDAsYXJbKGk9ZiszNnwwKT4+Ml09MCxhcls0K2k+PjJdPTAsYXJbOCtpPj4yXT0wLGFyWzEyK2k+PjJdPTAsYXJbZis1Mj4+Ml09MTYsYXJbYT4+Ml09MCxhclthKzQ+PjJdPTAsYXJbYSs4Pj4yXT0wLFhlKHQsYSksKDB8dHJbYSsxMT4+MF0pPDAmJnZ1KDB8YXJbYT4+Ml0pLExBKGEsZSxyKSxXZShmLCh1PShsPTB8dHJbKGM9YSsxMXwwKT4+MF0pPDwyND4+MjQ8MCk/MHxhclthPj4yXTphLHU/MHxhclthKzQ+PjJdOjI1NSZsKSwoMHx0cltjPj4wXSk8MCYmdnUoMHxhclthPj4yXSksMDwoMHxhcltyPj4yXSkpZm9yKGE9MDtXZShmLDE4ODYyLDIpLCgwfChhPWErMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYocj0wfFdlKGYsMjAxNDQsMTApLFdlKDB8V2UociwobD0odT0wfHRyWyhjPWUrNTZ8MCkrMTE+PjBdKTw8MjQ+PjI0PDApPzB8YXJbYz4+Ml06YyxsPzB8YXJbZSs2MD4+Ml06MjU1JnUpLDMwMDg2LDEpLEllKEEsdCksYXJbZj4+Ml09NDMwNCxhcltuPj4yXT00MzI0LGFyW3Q+PjJdPTQzNDAsMDw9KDB8dHJbMTEraT4+MF0pKXJldHVybiBrZih0KSxHZigpLGJmKG4pLHZvaWQodXI9byk7dnUoMHxhcltpPj4yXSksa2YodCksR2YoKSxiZihuKSx1cj1vfSxmdW5jdGlvbihBLGUscil7QXw9MDt2YXIgaSxmLG49MCx0PTA7aWYodXI9KGY9dXIpKzMyfDAsdD1mKzIwfDAscUEobj1mLGV8PTAscnw9MCksKDB8dHJbKG49bis4fDApKzExPj4wXSk8MCYmdnUoMHxhcltuPj4yXSksUkEodCxyKSwoMHx0clsoaT0obj1lKzU2fDApKzExfDApPj4wXSk8MD8odHJbYXJbbj4+Ml0+PjBdPTAsYXJbZSs2MD4+Ml09MCk6KHRyW24+PjBdPTAsdHJbaT4+MF09MCksQ3UobiwwKSxhcltuPj4yXT1hclt0Pj4yXSxhcltuKzQ+PjJdPWFyW3QrND4+Ml0sYXJbbis4Pj4yXT1hclt0Kzg+PjJdLCEoMHx0cltyKzI0Pj4wXSkpcmV0dXJuIHI9MHxhclsoZT01NjU5MikrND4+Ml0sYXJbKHQ9QSk+PjJdPWFyW2U+PjJdLGFyW3QrND4+Ml09cix5dShBKzh8MCw1NjYwMCksdm9pZCh1cj1mKTthclt0Pj4yXT0wLGFyW3QrND4+Ml09MCxhclt0Kzg+PjJdPTAsb28oQSwyLDEwMCx0KSx1cj0oMDw9KDB8dHJbdCsxMT4+MF0pfHx2dSgwfGFyW3Q+PjJdKSxmKX0sZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MCxyfD0wO3ZhciBpLGYsbix0LG8sYSxjPTAsbD0wLHU9MDtpZih1cj0oYT11cikrMTYwfDAsZj1hKzEzNnwwLHQ9KG49YSkrNTZ8MCxvPW4rNHwwLGFyW24+PjJdPTI5Mixhclt0Pj4yXT0zMTIsSmYobis1NnwwLG8pLGFyW24rMTI4Pj4yXT0wLGFyW24rMTMyPj4yXT0tMSxhcltuPj4yXT00MzA0LGFyW3Q+PjJdPTQzMjQsU2YobyksYXJbbz4+Ml09NDM0MCxhclsoaT1uKzM2fDApPj4yXT0wLGFyWzQraT4+Ml09MCxhcls4K2k+PjJdPTAsYXJbMTIraT4+Ml09MCxhcltuKzUyPj4yXT0xNixhcltmPj4yXT0wLGFyWzQrZj4+Ml09MCxhcls4K2Y+PjJdPTAsWGUobyxmKSwoMHx0clsxMStmPj4wXSk8MCYmdnUoMHxhcltmPj4yXSksTEEoZixlLHIpLFdlKG4sKHU9KGw9MHx0clsoYz0xMStmfDApPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW2Y+PjJdOmYsdT8wfGFyWzQrZj4+Ml06MjU1JmwpLCgwfHRyW2M+PjBdKTwwJiZ2dSgwfGFyW2Y+PjJdKSwwPCgwfGFyW3I+PjJdKSlmb3IoYz0wO1dlKG4sMTg4NjIsMiksKDB8KGM9YysxfDApKTwoMHxhcltyPj4yXSk7KTtpZihsPTB8V2UobiwyMDAyNywxMyksZT0wfGFyWyhjPWUrNTZ8MCk+PjJdLGU9MHxqYlsxMjcmYXJbOCsoMHxhcltlPj4yXSk+PjJdXShlKSxhcltmPj4yXT0wLGFyWzQrZj4+Ml09MCxhcls4K2Y+PjJdPTAsdHJbKHU9MTErZnwwKT4+MF09NCx0cls0K2Y+PjBdPTAsdHJbZj4+MF09ZT4+PjI0LHRyWzErZj4+MF09ZT4+PjE2LHRyWzIrZj4+MF09ZT4+PjgsdHJbMytmPj4wXT1lLFdlKDB8V2UobCxmLDQpLDMwMDg2LDEpLCgwfHRyW3U+PjBdKTwwJiZ2dSgwfGFyW2Y+PjJdKSwoYz0wfGFyW2M+PjJdKT8obnNbMTI3JmFyWzEyKygwfGFyW2M+PjJdKT4+Ml1dKGYsYyxyKSxXZShuLChyPShsPTB8dHJbKHU9MTErZnwwKT4+MF0pPDwyND4+MjQ8MCk/MHxhcltmPj4yXTpmLHI/MHxhcls0K2Y+PjJdOjI1NSZsKSwoMHx0clt1Pj4wXSk8MCYmdnUoMHxhcltmPj4yXSkpOldlKG4sMjAwNDEsMTcpLEllKEEsbyksYXJbbj4+Ml09NDMwNCxhclt0Pj4yXT00MzI0LGFyW28+PjJdPTQzNDAsMDw9KDB8dHJbMTEraT4+MF0pKXJldHVybiBrZihvKSxHZigpLGJmKHQpLHZvaWQodXI9YSk7dnUoMHxhcltpPj4yXSksa2YobyksR2YoKSxiZih0KSx1cj1hfSxmdW5jdGlvbihBLGUscil7QXw9MCxlfD0wO3ZhciBpLGYsbj0wLHQ9MCxvPTAsYT0wO2lmKHVyPShmPXVyKSs0OHwwLHQ9KGE9ZikrMjB8MCxvPTB8YXJbKHJ8PTApKzEyPj4yXSxqQShyLDB8dHJbZSszNj4+MF0/MTI6OCksKG49MHxhclsoaT1lKzU2fDApPj4yXSl8fHNyKDIwMDExLDE5MTA0LDE4NTcsMTk1NjMpLFVBKHIsMHxqYlsxMjcmYXJbOCsoMHxhcltuPj4yXSk+PjJdXShuKSksbj0wfGFyW2k+PjJdLG5zWzEyNyZhclsxNisoMHxhcltuPj4yXSk+PjJdXShhLG4sciksMHxhclthPj4yXSlyZXR1cm4gdD0wfGFyWyhyPWEpKzQ+PjJdLGFyWyhvPUEpPj4yXT1hcltyPj4yXSxhcltvKzQ+PjJdPXQsYT1hKzh8MCxhclsoQT1BKzh8MCk+PjJdPWFyW2E+PjJdLGFyW0ErND4+Ml09YXJbYSs0Pj4yXSxhcltBKzg+PjJdPWFyW2ErOD4+Ml0sYXJbYT4+Ml09MCxhclthKzQ+PjJdPTAsYXJbYSs4Pj4yXT0wLHZvaWQodXI9Zik7S0EodCxlLHIsbyksKDB8dHJbKGU9dCs4fDApKzExPj4wXSk8MCYmdnUoMHxhcltlPj4yXSksdD0wfGFyWyhyPTU2NTkyKSs0Pj4yXSxhclsobz1BKT4+Ml09YXJbcj4+Ml0sYXJbbys0Pj4yXT10LHl1KEErOHwwLDU2NjAwKSx1cj0oMDw9KDB8dHJbYSs4KzExPj4wXSl8fHZ1KDB8YXJbYSs4Pj4yXSksZil9LGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTA7dmFyIGksZixuPTAsdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MDt1cj0oZj11cikrNjR8MCxiPWYrNDB8MCxsPWYrMzZ8MCxvPWYrMjR8MCxpPWYrMTZ8MCxuPWYsdD0wfEZBKHJ8PTApLGFyW2w+PjJdPXQ7QTpkb3tpZigxODg2NTQ3ODE0PD0oMHx0KSl7aWYoKDB8dCk8MTkxNzQwMzk3MSlzd2l0Y2goMHx0KXtjYXNlIDE4ODY1NDc4MTQ6YnJlYWs7ZGVmYXVsdDpzPTI2O2JyZWFrIEF9ZWxzZSBzd2l0Y2goMHx0KXtjYXNlIDE5MTc0MDM5NzE6YnJlYWs7ZGVmYXVsdDpzPTI2O2JyZWFrIEF9aWYoMHxOQShyLGE9MHx0YigwfChhPTB8b2IoMHxhclsoYT1lKzh8MCk+PjJdLDB8YXJbYSs0Pj4yXSwwfGFyW2UrMTY+PjJdLDApKSwwfEQsLTQsLTEpLGM9RCkpcmV0dXJuIGFyW28+PjJdPTAsYXJbbys0Pj4yXT0wLGFyW28rOD4+Ml09MCxvbyhBLDIsMTAwLG8pLDA8PSgwfHRyW28rMTE+PjBdKXx8dnUoMHxhcltvPj4yXSksdm9pZCh1cj1mKTtpZihhcltiPj4yXT0wLGFyWyhvPWIrNHwwKT4+Ml09MCwoYXJbYis4Pj4yXT0wKXxhKWZvcigoMHxhKTwwJiZ6bCgpLHQ9MHxodShhKSxhcltvPj4yXT10LGFyW2I+PjJdPXQsYXJbYis4Pj4yXT10K2Esbj1hO3Q9MSsoKHRyW3Q+PjBdPTApfGFyW28+PjJdKXwwLGFyW28+PjJdPXQsMCE9KDB8KG49bistMXwwKSk7KTtpZighKDA9PSgwfGEpJjA9PSgwfGMpKSlmb3Iobj0wO3Q9MHxJQShyKSx0clsoMHxhcltiPj4yXSkrbj4+MF09dCwwPGM+Pj4wfDA9PSgwfGMpJihuPW4rMXwwKT4+PjA8YT4+PjA7KTtmZShpLGwsYiksbj0wfGFyW2k+PjJdLGw9MHxhclsodD00K2l8MCk+PjJdLGFyW2k+PjJdPTAsYXJbdD4+Ml09MCxhcltlKzU2Pj4yXT1uLG49MHxhclsoZT1lKzYwfDApPj4yXSxhcltlPj4yXT1sLDB8biYmKGR1KG4pLDB8KHU9MHxhclt0Pj4yXSkpJiZkdSh1KSwwfChuPTB8YXJbYj4+Ml0pJiYoKDB8YXJbbz4+Ml0pIT0oMHxuKSYmKGFyW28+PjJdPW4pLHZ1KG4pKX1lbHNle3N3aXRjaCgwfHQpe2Nhc2UgMTg1MjAwOTU5MjpicmVhaztkZWZhdWx0OnM9MjY7YnJlYWsgQX1pZihvPTB8aHUoMjQpLGFyW28rND4+Ml09MCxhcltvKzg+PjJdPTAsYXJbbz4+Ml09NjA2NCxhclsodD1vKzEyfDApPj4yXT02MDkyLG9yW28rMTY+PjFdPTIsb3JbbysxOD4+MV09MixvcltvKzIwPj4xXT02LHRyW28rMjI+PjBdPTEsYnUobyksYXJbZSs1Nj4+Ml09dCxuPTB8YXJbKGU9ZSs2MHwwKT4+Ml0sYXJbZT4+Ml09bywwfG4mJmR1KG4pLGllKEEsdCxyKSwwfGFyW0E+PjJdKXJldHVybiBkdShvKSx2b2lkKHVyPWYpOygwfHRyWyhuPUErOHwwKSsxMT4+MF0pPDAmJnZ1KDB8YXJbbj4+Ml0pLGR1KG8pfX13aGlsZSgwKTtpZigyNj09KDB8cykpcmV0dXJuIGFyW24+PjJdPTAsYXJbbis0Pj4yXT0wLGFyW24rOD4+Ml09MCxvbyhBLDIsMTI2LG4pLDA8PSgwfHRyW24rMTE+PjBdKXx8dnUoMHxhcltuPj4yXSksdm9pZCh1cj1mKTswfHRyW3IrMjQ+PjBdPyhhcltiPj4yXT0wLGFyW2IrND4+Ml09MCxhcltiKzg+PjJdPTAsb28oQSwyLDEwMCxiKSwoMHx0cltiKzExPj4wXSk8MCYmdnUoMHxhcltiPj4yXSkpOihiPTB8YXJbKHI9NTY1OTIpKzQ+PjJdLGFyWyhzPUEpPj4yXT1hcltyPj4yXSxhcltzKzQ+PjJdPWIseXUoQSs4fDAsNTY2MDApKSx1cj1mfSxmdW5jdGlvbihBLGUscil7QXw9MCxlfD0wLHJ8PTA7dmFyIGksZixuLHQsbyxhLGMsbD0wLHU9MDtpZih1cj0obz11cikrMTYwfDAsbD1vKzEzNnwwLG49KGY9bykrNTZ8MCx0PWYrNHwwLGFyW2Y+PjJdPTI5MixhcltuPj4yXT0zMTIsSmYoZis1NnwwLHQpLGFyW2YrMTI4Pj4yXT0wLGFyW2YrMTMyPj4yXT0tMSxhcltmPj4yXT00MzA0LGFyW24+PjJdPTQzMjQsU2YodCksYXJbdD4+Ml09NDM0MCxhclsoaT1mKzM2fDApPj4yXT0wLGFyWzQraT4+Ml09MCxhcls4K2k+PjJdPTAsYXJbMTIraT4+Ml09MCxhcltmKzUyPj4yXT0xNixhcltsPj4yXT0wLGFyW2wrND4+Ml09MCxhcltsKzg+PjJdPTAsWGUodCxsKSwoMHx0cltsKzExPj4wXSk8MCYmdnUoMHxhcltsPj4yXSksTEEobCxlLHIpLFdlKGYsKGM9KGE9MHx0clsodT1sKzExfDApPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW2w+PjJdOmwsYz8wfGFyW2wrND4+Ml06MjU1JmEpLCgwfHRyW3U+PjBdKTwwJiZ2dSgwfGFyW2w+PjJdKSwwPCgwfGFyW3I+PjJdKSlmb3IobD0wO1dlKGYsMTg4NjIsMiksKDB8KGw9bCsxfDApKTwoMHxhcltyPj4yXSk7KTtpZihXZShmLDE5NTY5LDE4KSx1PWUrNTZ8MCxlPWUrNjB8MCxsPTB8YXJbdT4+Ml0sKDB8YXJbZT4+Ml0pIT0oMHxsKSlmb3Iocj0wO3ImJihXZShmLDE5NTg4LDEpLGw9MHxhclt1Pj4yXSksUGYoZiwwfGNyW2wrcj4+MF0pLHI9cisxfDAsbD0wfGFyW3U+PjJdLHI+Pj4wPCgoMHxhcltlPj4yXSktbHwwKT4+PjA7KTtpZihXZShmLDMwMDg2LDEpLEllKEEsdCksYXJbZj4+Ml09NDMwNCxhcltuPj4yXT00MzI0LGFyW3Q+PjJdPTQzNDAsMDw9KDB8dHJbMTEraT4+MF0pKXJldHVybiBrZih0KSxHZigpLGJmKG4pLHZvaWQodXI9byk7dnUoMHxhcltpPj4yXSksa2YodCksR2YoKSxiZihuKSx1cj1vfSxmdW5jdGlvbihBLGUscil7QXw9MCxlfD0wO3ZhciBpLGYsbix0LG89MCxhPTAsYz0wLGw9MDtpZih1cj0odD11cikrMzJ8MCxjPXQsbD0wfGFyWyhyfD0wKSsxMj4+Ml0sakEociwwfHRyW2UrMzY+PjBdPzEyOjgpLGY9ZSs1NnwwLDI1NTwoaT0obz0wfGFyWyhuPWUrNjB8MCk+PjJdKS0oYT0wfGFyW2Y+PjJdKXwwKT4+PjAmJnNyKDU1NzM5LDE5MTA0LDE5MTksMTk1NjMpLCgwfGEpPT0oMHxvKSYmc3IoNTU3MzksMTkxMDQsMTkxOSwxOTU2MyksSkEociwyNTUmaSksbz0wfGFyW2Y+PjJdLCgwfGFyW24+PjJdKSE9KDB8bykpZm9yKGE9MDtKQShyLDB8dHJbbythPj4wXSksYT1hKzF8MCxvPTB8YXJbZj4+Ml0sYT4+PjA8KCgwfGFyW24+PjJdKS1vfDApPj4+MDspO0tBKGMsZSxyLGwpLCgwfHRyWyhvPWMrOHwwKSsxMT4+MF0pPDAmJnZ1KDB8YXJbbz4+Ml0pLGM9MHxhclsocj01NjU5MikrND4+Ml0sYXJbKGw9QSk+PjJdPWFyW3I+PjJdLGFyW2wrND4+Ml09Yyx5dShBKzh8MCw1NjYwMCksdXI9dH0sZnVuY3Rpb24oQSxlLHIpe0F8PTA7dmFyIGksZixuLHQsbyxhPTAsYz0wLGw9MCx1PTA7aWYodXI9KG89dXIpKzQ4fDAsdT1vKzMyfDAscUEoYT0oYz1vKSsxMnwwLGV8PTAscnw9MCksKDB8dHJbKGE9YSs4fDApKzExPj4wXSk8MCYmdnUoMHxhclthPj4yXSksMHxOQShyLDI1NSYoZj0wfElBKHIpKSwwKSlyZXR1cm4gYXJbYz4+Ml09MCxhcltjKzQ+PjJdPTAsYXJbYys4Pj4yXT0wLG9vKEEsMiwxMDAsYyksMDw9KDB8dHJbYysxMT4+MF0pfHx2dSgwfGFyW2M+PjJdKSx2b2lkKHVyPW8pO2lmKG49ZSs1NnwwLCh0PTI1NSZmKT4+PjA8PShjPShpPTB8YXJbKGE9ZSs2MHwwKT4+Ml0pLShlPTB8YXJbbj4+Ml0pfDApPj4+MD90Pj4+MDxjPj4+MCYmKDB8aSkhPSgwfChsPWUrdHwwKSkmJihhclthPj4yXT1sKTpUQShuLHQtY3wwKSxmPDwyND4+MjQpZm9yKGE9MDtsPTB8SUEociksdHJbKDB8YXJbbj4+Ml0pK2E+PjBdPWwsKDB8KGE9YSsxfDApKSE9KDB8dCk7KTswfHRyW3IrMjQ+PjBdPyhhclt1Pj4yXT0wLGFyW3UrND4+Ml09MCxhclt1Kzg+PjJdPTAsb28oQSwyLDEwMCx1KSwoMHx0clt1KzExPj4wXSk8MCYmdnUoMHxhclt1Pj4yXSkpOihyPTB8YXJbKGw9NTY1OTIpKzQ+PjJdLGFyWyh1PUEpPj4yXT1hcltsPj4yXSxhclt1KzQ+PjJdPXIseXUoQSs4fDAsNTY2MDApKSx1cj1vfSxmdW5jdGlvbihBLGUscil7QXw9MCxlfD0wLHJ8PTA7dmFyIGksZixuLHQsbyxhPTAsYz0wO2lmKHVyPShvPXVyKSsxNjB8MCxhPW8rMTM2fDAsbj0oZj1vKSs1NnwwLHQ9Zis0fDAsYXJbZj4+Ml09MjkyLGFyW24+PjJdPTMxMixKZihmKzU2fDAsdCksYXJbZisxMjg+PjJdPTAsYXJbZisxMzI+PjJdPS0xLGFyW2Y+PjJdPTQzMDQsYXJbbj4+Ml09NDMyNCxTZih0KSxhclt0Pj4yXT00MzQwLGFyWyhpPWYrMzZ8MCk+PjJdPTAsYXJbNCtpPj4yXT0wLGFyWzgraT4+Ml09MCxhclsxMitpPj4yXT0wLGFyW2YrNTI+PjJdPTE2LGFyW2E+PjJdPTAsYXJbYSs0Pj4yXT0wLGFyW2ErOD4+Ml09MCxYZSh0LGEpLCgwfHRyW2ErMTE+PjBdKTwwJiZ2dSgwfGFyW2E+PjJdKSwwPCgwfGFyW3I+PjJdKSlmb3IoYT0wO1dlKGYsMTg4NjIsMiksKDB8KGE9YSsxfDApKTwoMHxhcltyPj4yXSk7KTtpZihjPTB8V2UoZiwxOTgxOCwxOCksYz0wfFdlKDB8eGYoYywwfG9yW2UrND4+MV0pLDMwMDg2LDEpLDA8KDB8YXJbcj4+Ml0pKWZvcihhPTA7V2UoYywxODg2MiwyKSwoMHwoYT1hKzF8MCkpPCgwfGFyW3I+PjJdKTspO2lmKGM9MHxXZShjLDE5ODM3LDI2KSxjPTB8V2UoMHx4ZihjLDB8b3JbZSs2Pj4xXSksMzAwODYsMSksMDwoMHxhcltyPj4yXSkpZm9yKGE9MDtXZShjLDE4ODYyLDIpLCgwfChhPWErMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYoYz0wfFdlKGMsMTk4NjQsMjEpLGM9MHxXZSgwfHhmKGMsMHxvcltlKzg+PjFdKSwzMDA4NiwxKSwwPCgwfGFyW3I+PjJdKSlmb3IoYT0wO1dlKGMsMTg4NjIsMiksKDB8KGE9YSsxfDApKTwoMHxhcltyPj4yXSk7KTtpZihyPTB8V2UoYywxOTg4NiwxNyksV2UoMHxIZihyLDAhPSgwfHRyW2UrMTA+PjBdKSksMzAwODYsMSksSWUoQSx0KSxhcltmPj4yXT00MzA0LGFyW24+PjJdPTQzMjQsYXJbdD4+Ml09NDM0MCwwPD0oMHx0clsxMStpPj4wXSkpcmV0dXJuIGtmKHQpLEdmKCksYmYobiksdm9pZCh1cj1vKTt2dSgwfGFyW2k+PjJdKSxrZih0KSxHZigpLGJmKG4pLHVyPW99LGZ1bmN0aW9uKEEsZSxyKXtBfD0wLE1BKHJ8PTAsMHxvclsoZXw9MCkrND4+MV0pLE1BKHIsMHxvcltlKzY+PjFdKSxNQShyLDB8b3JbZSs4Pj4xXSksSkEociwwfHRyW2UrMTA+PjBdPy0xMjg6MCksZT0wfGFyWzE0MTQ5XSxhclsocj1BKT4+Ml09YXJbMTQxNDhdLGFyW3IrND4+Ml09ZSx5dShBKzh8MCw1NjYwMCl9LGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTAscnw9MDt2YXIgaSxmLG4sdCxvLGE9MDtpZih1cj0obz11cikrMTYwfDAsYT1vKzEzNnwwLG49KGY9bykrNTZ8MCx0PWYrNHwwLGFyW2Y+PjJdPTI5MixhcltuPj4yXT0zMTIsSmYoZis1NnwwLHQpLGFyW2YrMTI4Pj4yXT0wLGFyW2YrMTMyPj4yXT0tMSxhcltmPj4yXT00MzA0LGFyW24+PjJdPTQzMjQsU2YodCksYXJbdD4+Ml09NDM0MCxhclsoaT1mKzM2fDApPj4yXT0wLGFyWzQraT4+Ml09MCxhcls4K2k+PjJdPTAsYXJbMTIraT4+Ml09MCxhcltmKzUyPj4yXT0xNixhclthPj4yXT0wLGFyW2ErND4+Ml09MCxhclthKzg+PjJdPTAsWGUodCxhKSwoMHx0clthKzExPj4wXSk8MCYmdnUoMHxhclthPj4yXSksMDwoMHxhcltyPj4yXSkpZm9yKGE9MDtXZShmLDE4ODYyLDIpLCgwfChhPWErMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYocj0wfFdlKGYsMTk2NzUsMTQpLFdlKDB8TGYociwoMHxhcltlKzEyPj4yXSktKDB8YXJbZSs4Pj4yXSl8MCksMzAwODYsMSksSWUoQSx0KSxhcltmPj4yXT00MzA0LGFyW24+PjJdPTQzMjQsYXJbdD4+Ml09NDM0MCwwPD0oMHx0clsxMStpPj4wXSkpcmV0dXJuIGtmKHQpLEdmKCksYmYobiksdm9pZCh1cj1vKTt2dSgwfGFyW2k+PjJdKSxrZih0KSxHZigpLGJmKG4pLHVyPW99LGZ1bmN0aW9uKEEsZSxyKXtBfD0wLHpBKHJ8PTAsKGV8PTApKzh8MCksZT0wfGFyWzE0MTQ5XSxhclsocj1BKT4+Ml09YXJbMTQxNDhdLGFyW3IrND4+Ml09ZSx5dShBKzh8MCw1NjYwMCl9LGZ1bmN0aW9uKEEsZSxyKXtlfD0wLHJ8PTA7dmFyIGksZixuLHQsbyxhLGM9MCxsPTAsdT0wLGI9MCxzPTAsZD0wLGs9MCxoPTAsdz0wLHY9MCxtPTAsZz0wLFo9MCxwPTAseT0wO2Zvcih1cj0obz11cikrMzJ8MCxpPW8rMjB8MCxmPW8rMTZ8MCxuPW8rMTJ8MCx0PW8sYXJbKEF8PTApPj4yXT1hclsxOTA0XSxhcltBKzQ+PjJdPWFyWzE5MDVdLGFyW0ErOD4+Ml09YXJbMTkwNl0sYT0wfGFyW2U+PjJdLFdhKGE9NTQ4KyhhfD0wKXwwKSxXYShhKSx0clthPj4wXT0xLGFyW3I+PjJdPTA7Oyl7aWYoKGFyW24+PjJdPTApfEVlKDB8YXJbZT4+Ml0sbikpe2w9Mjg7YnJlYWt9aWYoMHwobT0wfEZlKDB8YXJbZT4+Ml0pKSl7Zm9yKDB8KGM9MHxhcltyPj4yXSkmJmhsKGMpLGw9MD09KDB8RGUobSkpLFo9MHxodSg4MCksYXJbWis0Pj4yXT0wLGFyW1orOD4+Ml09MCxhcltaPj4yXT02MjA4LGFyWyh2PVorMTJ8MCk+PjJdPTAsYXJbdis0Pj4yXT0wLGFyW3YrOD4+Ml09MCxhclt2KzEyPj4yXT0wLGFyW3YrMTY+PjJdPTAsYXJbWiszMj4+Ml09MzQzOTUsYXJbWiszNj4+Ml09MCxhcltaKzQwPj4yXT0wLGFyW1orNDQ+PjJdPTk5LGFyW1orNDg+PjJdPTk5LHc9Wis1MnwwLGFyWyhnPVorNzJ8MCk+PjJdPTAsYXJbWis3Nj4+Ml09MCxhclt3Pj4yXT0wLGFyW3crND4+Ml09MCxhclt3Kzg+PjJdPTAsYXJbdysxMj4+Ml09MCxhcltaKzY4Pj4yXT1nLGc9dix3PVorMTZ8MCxidShwPVopLHN1KFopLGM9MHxhclt3Pj4yXSxhclt2Pj4yXT1nLGFyW3c+PjJdPXAsMHxjJiZrdShjKSxkdShaKSx5byh2LGQ9MHxfZShtLDApLHM9MHxZZShtLDApLGw/MjowLHc9MHxEZShtKSkscz1sPzE6MyxkPSgodz0wfFFlKG0sMCkpKzd8MCkvOHwwLGI9MDs7KXtpZigoMHxRZShtLGIpKSE9KDB8dykpe2w9MTA7YnJlYWt9aWYoaz0wfEplKG0sYixpKSwoMHwobD0wfF9lKG0sYikpKTwxfCgwfChoPTB8WWUobSxiKSkpPDEpe2w9MTI7YnJlYWt9aWYoISgwfEJvKHYsYz0wfGFyWzc2MjgrKGI8PDIpPj4yXSxsLGgsdykpKXtsPTE0O2JyZWFrfWlmKHU9MHxGbyh2LGMsZiksMDwoMHxoKSlmb3IobD0wfGJyKGwsZCksYz0wO2hiKDB8KHk9dSsoMHxicigwfGFyW2Y+PjJdLGMpKXwwKSxrKygwfGJyKDB8YXJbaT4+Ml0sYykpfDAsMHxsKSwoMHwoYz1jKzF8MCkpIT0oMHxoKTspO2lmKCgwfHMpPD0oMHwoYj1iKzF8MCkpKXtsPTIwO2JyZWFrfX1pZigxMD09KDB8bCk/KGw9MCxhclt0Pj4yXT1hclsxOTEwXSxhclt0KzQ+PjJdPWFyWzE5MTFdLGFyW3QrOD4+Ml09YXJbMTkxMl0pOjEyPT0oMHxsKT8oYXJbdD4+Ml09YXJbMTkxM10sYXJbdCs0Pj4yXT1hclsxOTE0XSxhclt0Kzg+PjJdPWFyWzE5MTVdLGw9MTgpOjE0PT0oMHxsKT8oYXJbdD4+Ml09YXJbMTkxNl0sYXJbdCs0Pj4yXT1hclsxOTE3XSxhclt0Kzg+PjJdPWFyWzE5MThdLGw9MTgpOjIwPT0oMHxsKSYmKGM9KGw9MCl8aHUoOCksYXJbYz4+Ml09MCxhclsoeT1jKzR8MCk+PjJdPTAsYXJbcj4+Ml09YyxidShaKSxhcltjPj4yXT1nLGM9MHxhclt5Pj4yXSxhclt5Pj4yXT1wLDB8YyYmZHUoYyksYXJbdD4+Ml09YXJbMTkwNF0sYXJbdCs0Pj4yXT1hclsxOTA1XSxhclt0Kzg+PjJdPWFyWzE5MDZdKSxkdShaKSxhcltBPj4yXT1hclt0Pj4yXSxhcltBKzQ+PjJdPWFyW3QrND4+Ml0sYXJbQSs4Pj4yXT1hclt0Kzg+PjJdLDB8YXJbQT4+Ml0pe2w9Mjg7YnJlYWt9Yz0wfGh1KDI0KSxhcltjKzQ+PjJdPTAsYXJbYys4Pj4yXT0wLGFyW2M+PjJdPTYwNjQsYXJbKGw9YysxMnwwKT4+Ml09NjA5MixvcltjKzE2Pj4xXT0wLG9yW2MrMTg+PjFdPTAsb3JbYysyMD4+MV09MCx0cltjKzIyPj4wXT0xLGp0KGwpLHk9MHxhclthcltyPj4yXT4+Ml0sYnUoYyksYnUoYyksYXJbeSs0MD4+Ml09bCxsPTB8YXJbKHk9eSs0NHwwKT4+Ml0sYXJbeT4+Ml09YywwfGwmJmR1KGwpLGR1KGMpLFJlKDB8YXJbZT4+Ml0pLGR1KGMpfWlmKCEoMHxhcltuPj4yXSkpe2w9Mjg7YnJlYWt9fTI4IT0oMHxsKXx8KHVyPW8pfSxmdW5jdGlvbihBLGUscil7QXw9MCwwfChBPTB8YXJbKGV8PTApKzQ+PjJdKSYmQmMoQSksMHwoQT0wfGFyW2UrOD4+Ml0pJiZCYyhBKSwoQT0wfGFyW2UrMTI+PjJdKSYmQmMoQSl9LGZ1bmN0aW9uKEEsZSxyKXt2YXIgaSxmLG4sdDtBfD0wLGV8PTAsdXI9KGk9dXIpKzMyfDAsZj1pLHQ9KG49MHx0clsocnw9MCkrMTE+PjBdKTw8MjQ+PjI0PDAsZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTA7dmFyIG4sdCxvLGEsYz0wLGw9MCx1PTA7dXI9KGE9dXIpKzMyfDAsbz1hLHU9MHxodSgxMzIpLGFyW3UrND4+Ml09MCxhclt1Kzg+PjJdPTAsYXJbdT4+Ml09NjM2NCxjbyhjPXUrMTJ8MCksYXJbKG49ZSs2MHwwKT4+Ml09Yyx0PTB8YXJbKGw9ZSs2NHwwKT4+Ml0sYXJbbD4+Ml09dSx0JiYoZHUodCksYz0wfGFyW24+PjJdKTtpZihrbyhvLGMscixpLGYpLDB8YXJbbz4+Ml0pcmV0dXJuIHU9MHxhclsoZj1vKSs0Pj4yXSxhclsobD1BKT4+Ml09YXJbZj4+Ml0sYXJbbCs0Pj4yXT11LHU9bys4fDAsYXJbKGw9QSs4fDApPj4yXT1hclt1Pj4yXSxhcltsKzQ+PjJdPWFyW3UrND4+Ml0sYXJbbCs4Pj4yXT1hclt1Kzg+PjJdLGFyW3U+PjJdPTAsYXJbdSs0Pj4yXT0wLGFyW3UrOD4+Ml09MCx1cj1hO2lmKGZ1bmN0aW9uKEEsZSl7QXw9MDt2YXIgcixpLGYsbix0LG8sYSxjLGwsdSxiLHMsZCxrLGgsdyx2LG0sZyxaLHAseSxCLEUsWCxXLEksQyxHPTAsVj0wLEY9MCxSPTAsTj0wLF89MCxZPTAsUT0wLEQ9MCxKPTAsTT0wLFQ9MCxVPTAsUz0wLE89MCx6PTAsaj0wLEg9MCx4PTAsUD0wLEw9MCxLPTAscT0wLCQ9MCxBQT0wLGVBPTAsckE9MCxpQT0wLGZBPTAsbkE9MCx0QT0wLG9BPTAsYUE9MCxjQT0wLGxBPTAsdUE9MCxiQT0wLHNBPTAsZEE9MCxrQT0wLGhBPTAsd0E9MCx2QT0wLG1BPTAsZ0E9MCxaQT0wLHBBPTAseUE9MCxCQT0wLEVBPTAsWEE9MCxXQT0wLElBPTAsQ0E9MCxHQT0wLFZBPTAsRkE9MCxSQT0wLE5BPTAsX0E9MCxZQT0wLFFBPTAsREE9MCxKQT0wLE1BPTAsVEE9MCxVQT0wLFNBPTAsT0E9MCx6QT0wLGpBPTAsSEE9MCx4QT0wLFBBPTAsTEE9MCxLQT0wLHFBPTAsJEE9MCxBZT0wLGVlPTAscmU9MCxpZT0wLGZlPTAsbmU9MCx0ZT0wLG9lPTAsYWU9MCxjZT0wLGxlPTAsdWU9MCxiZT0wLHNlPTAsZGU9MCxrZT0wLGhlPTAsd2U9MCx2ZT0wLG1lPTAsZ2U9MCxaZT0wLHBlPTAseWU9MCxCZT0wLEVlPTA7aWYodXI9KEM9dXIpKzY1NnwwLHk9Qys2NDB8MCxJPUMrNjE2fDAscT1DKzYyOHwwLHllPUMrNjA0fDAsQmU9QysxNDR8MCxsQT0oRWU9QykrNTkyfDAsdUE9Qys1ODR8MCxyPUMrNTcyfDAsaT1DKzU2MHwwLGY9Qys1NDh8MCxuPUMrNTM2fDAsdD1DKzM4NHwwLHA9QyszOTJ8MCxvPUMrMzcyfDAsYT1DKzM0OHwwLGM9QyszNjB8MCxsPUMrMzI4fDAsdT1DKzMxNnwwLGI9QyszMDR8MCxzPUMrMjkyfDAsZD1DKzI4MHwwLGs9QysyNjh8MCxoPUMrMjU2fDAsdz1DKzI0OHwwLGRlPUMrMjQwfDAsdj1DKzIzMnwwLG09QysyMTZ8MCxaZT1DKzIwOHwwLHBlPUMrMjAwfDAsQj1DKzE4OHwwLEU9QysxNzZ8MCxYPUMrMTY4fDAsdmwoZ2U9MjgrKGV8PTApfDAsMHxhclsoVz1lKzMyfDApPj4yXSksYXJbKFA9ZSszNnwwKT4+Ml09MCxhcltnZT4+Ml09VyxhcltXPj4yXT0wLEY9MHxhclsoTD1lKzQwfDApPj4yXSwoMHwoRz0wfGFyWyhLPWUrNDR8MCk+PjJdKSkhPSgwfEYpKWZvcig7Vj1HKy04fDAsYXJbSz4+Ml09VixHPShHPTB8YXJbRystND4+Ml0pPyhkdShHKSwwfGFyW0s+PjJdKTpWLCgwfEcpIT0oMHxGKTspO2FyWyhIPWUrNTJ8MCk+PjJdPTAsRz0wfGFyWyh4PWUrNTZ8MCk+PjJdLGFyW3g+PjJdPTAsMHxHJiZkdShHKTtpZihmdW5jdGlvbihBLGUpe2V8PTA7dmFyIHIsaSxmLG4sdCxvPTAsYT0wLGM9MDtpZih1cj0odD11cikrMTZ8MCxmPXQsYXJbKEF8PTApPj4yXT0wLGFyWyhuPUErNHwwKT4+Ml09MCwoKGFyW0ErOD4+Ml09MCl8KG89MHxhcltlKzEwOD4+Ml0pKSE9KDB8KHI9ZSsxMTJ8MCkpKXtmb3IoaT1BKzh8MCxjPW8sYT1vPTA7Oyl7aWYoZT0wfGFyWzU2KygwfGFyW2MrMjA+PjJdKT4+Ml0sYXJbZj4+Ml09ZSxvPj4+MDxhPj4+MD8oYXJbbz4+Ml09ZSxhcltuPj4yXT1vKzQpOkNlKEEsZiksZT0wfGFyW2MrND4+Ml0pZm9yKDtvPTB8YXJbZT4+Ml07KWU9bztlbHNlIGlmKGU9MHxhclsobz1jKzh8MCk+PjJdLCgwfGFyW2U+PjJdKSE9KDB8YykpZm9yKDtjPTB8YXJbbz4+Ml0sZT0wfGFyWyhvPWMrOHwwKT4+Ml0sKDB8YXJbZT4+Ml0pIT0oMHxjKTspO2lmKCgwfGUpPT0oMHxyKSlicmVhaztjPWUsbz0wfGFyW24+PjJdLGE9MHxhcltpPj4yXX11cj10fWVsc2UgdXI9dH0oSSwwfGFyWyhnPWUrNjB8MCk+PjJdKSxHPTB8YXJbST4+Ml0sTT0wfGFyWyhaPTQrSXwwKT4+Ml0sKDB8RykhPSgwfE0pKXtUPTExK3l8MCxPPVU9NCt5fDAsej0oUz1lKSszMnwwLGo9ZSs0OHwwO2Rve0o9MHxhcltHPj4yXSxOPTExMisoMHxhcltnPj4yXSl8MCxGPTB8YXJbTj4+Ml07ZG97aWYoMHxGKXtWPU47QTpmb3IoOzspe2ZvcihSPUY7ISgoMHxhcltSKzE2Pj4yXSk+Pj4wPj1KPj4+MCk7KXtpZighKEY9MHxhcltSKzQ+PjJdKSlicmVhayBBO1I9Rn1pZighKEY9MHxhcltSPj4yXSkpe1Y9UjticmVha31WPVJ9aWYoKDB8VikhPSgwfE4pJiYoMHxhcltWKzE2Pj4yXSk+Pj4wPD1KPj4+MCl7aWYoRj0wfGFyW1YrMjA+PjJdLFY9MHxhcltWKzI0Pj4yXSxEPVY/KGJ1KFYpLFYpOjAsIShRPUYpKXtpZighRClicmVhaztkdShEKTticmVha315dSh5LFErNjR8MCksRj0wfHRyW1Q+PjBdLFY9MHxhcltVPj4yXSw0PT0oMHwoRjw8MjQ+PjI0PDA/VjoyNTUmRikpPzB8WXUoeSwwLC0xLDMwMjk4LDQpPyhGPTB8dHJbVD4+MF0sVj0wfGFyW1U+PjJdLG1lPTIzKTpWPTE6bWU9MjM7ZG97aWYoMjM9PSgwfG1lKSl7aWYoND09KChtZT0wKXwoRjw8MjQ+PjI0PDA/VjoyNTUmRikpKXtpZighKDB8WXUoeSwwLC0xLDMwMzAzLDQpKSl7Vj0xO2JyZWFrfUY9MHx0cltUPj4wXSxWPTB8YXJbVT4+Ml19aWYoND09KDB8KEY8PDI0Pj4yNDwwP1Y6MjU1JkYpKSl7aWYoISgwfFl1KHksMCwtMSwzMDMwOCw0KSkpe1Y9MTticmVha31GPTB8dHJbVD4+MF0sVj0wfGFyW1U+PjJdfWlmKDQ9PSgwfChGPDwyND4+MjQ8MD9WOjI1NSZGKSkpe2lmKCEoMHxZdSh5LDAsLTEsMzAzMTMsNCkpKXtWPTE7YnJlYWt9Rj0wfHRyW1Q+PjBdLFY9MHxhcltVPj4yXX1WPTQ9PSgwfChGPDwyND4+MjQ8MD9WOjI1NSZGKSk/MD09KDB8WXUoeSwwLC0xLDMwMzE4LDQpKTowfX13aGlsZSgwKTtpZigoMHx0cltUPj4wXSk8MCYmdnUoMHxhclt5Pj4yXSksVil7Zm9yKFk9MHxodSgyMzIpLGFyW1krND4+Ml09MCxhcltZKzg+PjJdPTAsYXJbWT4+Ml09NjM5MixhclsoVj1ZKzE2fDApPj4yXT0wLGFyW1YrND4+Ml09MCxhcltWKzg+PjJdPTAsYXJbWSsyOD4+Ml09MzAwMjUsYXJbWSszMj4+Ml09UyxhcltZKzM2Pj4yXT1KLHZlPVkrNjB8MCxyQT1ZKzgwfDAsaUE9WSs5NnwwLEY9WSsxNzZ8MCxSPVkrMTEyfDAsYXJbKHdlPVkrNDB8MCk+PjJdPTAsYXJbd2UrND4+Ml09MCxhclt3ZSs4Pj4yXT0wLGFyW3dlKzEyPj4yXT0wLG9yW3dlKzE2Pj4xXT0wLGFyW3ZlPj4yXT0wLGFyW3ZlKzQ+PjJdPTAsYXJbdmUrOD4+Ml09MCxhclt2ZSsxMj4+Ml09MCxvclt2ZSsxNj4+MV09MCxhcltyQT4+Ml09MCxhcltyQSs0Pj4yXT0wLGFyW3JBKzg+PjJdPTAsdHJbckErMTI+PjBdPTAsYXJbaUE+PjJdPTAsYXJbaUErND4+Ml09MCxhcltpQSs4Pj4yXT0wLHRyW2lBKzEyPj4wXT0wLHJBPShpQT1SKSs2MHwwOygoYXJbaUE+PjJdPTApfChpQT1pQSs0fDApKTwoMHxyQSk7KTtmb3IodHJbUis2MD4+MF09MCxyQT0oaUE9RikrNTJ8MDsoKGFyW2lBPj4yXT0wKXwoaUE9aUErNHwwKSk8KDB8ckEpOyk7YXJbeT4+Ml09VixhcltPPj4yXT1ZLE49VixidShfPVkpLFY9MHxhcltXPj4yXTtkb3tpZihWKXtmb3IoUj16OzspaWYoRj0wfGFyW1YrMTY+PjJdLEo+Pj4wPEY+Pj4wKXtpZighKEY9MHxhcltWPj4yXSkpe21lPTQxO2JyZWFrfVI9VixWPUZ9ZWxzZXtpZihKPj4+MDw9Rj4+PjApe21lPTQ1O2JyZWFrfWlmKCEoRj0wfGFyWyhSPVYrNHwwKT4+Ml0pKXttZT00NDticmVha31WPUZ9aWYoNDE9PSgwfG1lKSl7bWU9MCxSPUY9VjticmVha31pZig0ND09KDB8bWUpKXttZT0wLEY9VjticmVha31pZig0NT09KDB8bWUpKXttZT0wLEY9VjticmVha319ZWxzZSBSPUY9V313aGlsZSgwKTswfGFyW1I+PjJdP2R1KFkpOihWPTB8aHUoMjgpLGFyW1YrMTY+PjJdPUosYXJbVisyMD4+Ml09TixhcltWKzI0Pj4yXT1fLGFyW1Y+PjJdPTAsYXJbVis0Pj4yXT0wLGFyW1YrOD4+Ml09RixhcltSPj4yXT1WLChGPTB8YXJbYXJbZ2U+PjJdPj4yXSkmJihhcltnZT4+Ml09RixWPTB8YXJbUj4+Ml0pLHNvKDB8YXJbej4+Ml0sViksYXJbUD4+Ml09MSsoMHxhcltQPj4yXSkpO2Rve2lmKCEoMHx0cltRKzEyND4+MF0pKXtkb3tpZigoMHxKKT09KDB8YXJbNTYrKDB8YXJbODQrKDB8YXJbZz4+Ml0pPj4yXSk+PjJdKSl7aWYoVj0wfGFyW3k+PjJdLHRyW1YrNDA+PjBdPTEsMHwoRj0wfGFyW08+PjJdKSYmYnUoRiksYXJbSD4+Ml09VixWPTB8YXJbeD4+Ml0sYXJbeD4+Ml09RiwhVilicmVhaztkdShWKX19d2hpbGUoMCk7aWYoKDB8KFY9MHxhcltLPj4yXSkpPT0oMHxhcltqPj4yXSkpe2tsKEwseSk7YnJlYWt9YXJbVj4+Ml09YXJbeT4+Ml0sRj0wfGFyW08+PjJdLChhcltWKzQ+PjJdPUYpJiYoYnUoRiksVj0wfGFyW0s+PjJdKSxhcltLPj4yXT1WKzh9fXdoaWxlKDApOzB8KFY9MHxhcltPPj4yXSkmJmR1KFYpfTB8RCYmZHUoRCl9fX13aGlsZSgwKTtHPUcrNHwwfXdoaWxlKCgwfEcpIT0oMHxNKSl9QTpkb3tpZigwfGFyW0g+PjJdKXtpZigoMHwoRz0wfGFyW2dlPj4yXSkpIT0oMHxXKSlmb3IoTT15ZSs0fDAsVD15ZSs4fDAsVT11QSs0fDAsUz1lKzcyfDAsaj1FZSsxMnwwLEg9RWUrNHwwLHg9Tz1FZSs2NHwwLFA9RWUrMTM2fDAsTD1FZSsxNDB8MCxxPUVlKzYwfDAsJD0xMSt5fDAsQUE9ej1FZSs4fDAsZUE9ZSs3NnwwLHJBPWxBKzExfDAsaUE9KEs9RWUrNDR8MCkrMTF8MCxuQT0oZkE9QmUrOHwwKSsxMXwwLHRBPUErOHwwLEo9Rzs7KXtpZihRPUorMjB8MCxhclt5ZT4+Ml09MCxhcltNPj4yXT0wLGFyW1Q+PjJdPTAsdm8oQmUsMHxhcltnPj4yXSwwfGFyW0orMTY+PjJdLHllKSwwfGFyW0JlPj4yXSl2ZT0wfGFyWyh3ZT1CZSkrND4+Ml0sYXJbKEc9QSk+PjJdPWFyW3dlPj4yXSxhcltHKzQ+PjJdPXZlLGFyW3RBPj4yXT1hcltmQT4+Ml0sYXJbdEErND4+Ml09YXJbZkErND4+Ml0sYXJbdEErOD4+Ml09YXJbZkErOD4+Ml0sYXJbZkE+PjJdPTAsYXJbZkErND4+Ml09MCxhcltmQSs4Pj4yXT0wLEc9MTtlbHNle0c9MHxhclt5ZT4+Ml0sRD0wfGFyW00+PjJdO2U6ZG97aWYoKDB8Ryk9PSgwfEQpKUc9NjtlbHNlIGZvcihOPTA7Oyl7Vj0wfGFyWyhfPUcrNHwwKT4+Ml07ZG97aWYoMCE9KDB8VikmJjAhPSgwfChvQT0wfHF1KFYsMTI4LDg3MiwwKSkpKXtpZigoVj0wfGFyW0crOD4+Ml0pP2J1KFYpOlY9MCxGPTB8YXJbb0ErNTY+PjJdLFI9MHxhcltvQSs2MD4+Ml0sRj4+PjA8PSgwfGFyW1M+PjJdKT4+PjAmJlI+Pj4wPD0oMHxhcltlQT4+Ml0pPj4+MCl7WT0wfGFyW1E+PjJdLGFyW1krMjQ+PjJdPUYsYXJbWSsyOD4+Ml09UixhcltZKzMyPj4yXT1GLGFyW1krMzY+PjJdPVIsWT1WLG1lPTk0O2JyZWFrfWFyW3o+PjJdPTQ1MjQsYXJbRWU+PjJdPTE4OCxhcltPPj4yXT0yMDgsYXJbSD4+Ml09MCxKZih4LGopLGFyW1A+PjJdPTAsYXJbTD4+Ml09LTEsYXJbRWU+PjJdPTQ1MDQsYXJbTz4+Ml09NDU0NCxhclt6Pj4yXT00NTI0LFNmKGopLGFyW2o+PjJdPTQzNDAsYXJbSz4+Ml09MCxhcltLKzQ+PjJdPTAsYXJbSys4Pj4yXT0wLGFyW0srMTI+PjJdPTAsYXJbcT4+Ml09MjQsYXJbeT4+Ml09MCxhcls0K3k+PjJdPTAsYXJbOCt5Pj4yXT0wLFhlKGoseSksKDB8dHJbJD4+MF0pPDAmJnZ1KDB8YXJbeT4+Ml0pLHZlPTB8V2UoMHxMZigwfFdlKDB8TGYoMHxXZShBQSwzMDM2NiwxMSksRiksMzAxNzAsMSksUiksMzAzNzgsMzIpLHZlPTB8V2UoMHxMZih2ZSwwfGFyW1M+PjJdKSwzMDE3MCwxKSxXZSgwfExmKHZlLDB8YXJbZUE+PjJdKSwzMDA4NiwxKSxJZShsQSxqKSxvbyhBLDYsMWUzLGxBKSwoMHx0cltyQT4+MF0pPDAmJnZ1KDB8YXJbbEE+PjJdKSxhcltFZT4+Ml09NDUwNCxhcltPPj4yXT00NTQ0LGFyW0FBPj4yXT00NTI0LGFyW2o+PjJdPTQzNDAsKDB8dHJbaUE+PjBdKTwwJiZ2dSgwfGFyW0s+PjJdKSxrZihqKSxiZihPKSxSPTEsRj1OfWVsc2UgbWU9ODN9d2hpbGUoMCk7aWYoODM9PSgwfG1lKSYmKG1lPU4/KFk9MCw5NCk6KFk9Rj0wLDEwOSkpLDk0PT0oMHxtZSkpaWYoVj0obWU9MCl8YXJbXz4+Ml0pe0Y9KEY9MHxxdShWLDEyOCw3NDQsMCkpPygoVj0wfGFyW0crOD4+Ml0pP2J1KFYpOlY9MCxtZT0wfGFyW1E+PjJdLHZlPTB8ZW8oRiksRj0wfHJvKEYpLGFyW21lKzI0Pj4yXT12ZSxhclttZSsyOD4+Ml09RixWKTowLFY9MHxhcltfPj4yXTtkb3tpZigwfFYmJjB8KGFBPTB8cXUoViwxMjgsODA4LDApKSl7c3dpdGNoKChWPTB8YXJbRys4Pj4yXSk/YnUoVik6Vj0wLDB8YXJbYUErNTY+PjJdKXtjYXNlIDI3MDpjYXNlIDkwOndlPTB8YXJbUT4+Ml0sbWU9d2UrMjh8MCx2ZT0wfGFyWyh3ZT13ZSsyNHwwKT4+Ml0sYXJbd2U+PjJdPWFyW21lPj4yXSxhclttZT4+Ml09dmV9aWYoIVYpYnJlYWs7ZHUoVil9fXdoaWxlKDApO21lPShGPShGJiZkdShGKSwxKSwxMDkpfWVsc2UgUj0wLEY9MSxWPVk7ZG97aWYoMTA5PT0oMHxtZSkpaWYoKG1lPTApIT0oMHwoVj0wfGFyW18+PjJdKSkmJjAhPSgwfChjQT0wfHF1KFYsMTI4LDM4NCwwKSkpKXtpZigoVj0wfGFyW0crOD4+Ml0pP2J1KFYpOlY9MCxSPTB8YXJbY0ErNTY+PjJdLE49MHxhcltjQSs2MD4+Ml0sWmwoUj0oKF89MD09KDB8TikpPyh2ZT0wfGFyW1E+PjJdLGFyW3VBPj4yXT1SLGFyW1U+PjJdPTApOihidShOKSx2ZT0wfGFyW1E+PjJdLGFyW3VBPj4yXT1SLGJ1KGFyW1U+PjJdPU4pKSx2ZSksdUEpLDB8KFI9MHxhcltVPj4yXSkmJmR1KFIpLF98fGR1KE4pLCFWKXtSPTAsVj1ZO2JyZWFrfWR1KFYpLFI9MCxWPVl9ZWxzZSBSPTAsVj1ZfXdoaWxlKDApO2lmKDB8ViYmZHUoViksRz1HKzEyfDAsMHxSKXtHPTE7YnJlYWsgZX1pZigoMHxHKT09KDB8RCkpe0c9NjticmVha31OPUZ9fXdoaWxlKDApO0c9Nj09KDB8Ryk/MDpHLCgwfHRyW25BPj4wXSk8MCYmdnUoMHxhcltmQT4+Ml0pfWlmKDB8KFY9MHxhclt5ZT4+Ml0pKXtpZigoMHwoRj0wfGFyW00+PjJdKSkhPSgwfFYpKXtmb3IoO1I9RistMTJ8MCxhcltNPj4yXT1SLCgwfChGPShGPTB8YXJbRistND4+Ml0pPyhkdShGKSwwfGFyW00+PjJdKTpSKSkhPSgwfFYpOyk7Vj0wfGFyW3llPj4yXX12dShWKX1pZigwfEcpYnJlYWsgQTtpZihHPTB8YXJbSis0Pj4yXSlmb3IoO1Y9MHxhcltHPj4yXTspRz1WO2Vsc2UgaWYoRz0wfGFyWyhWPUorOHwwKT4+Ml0sKDB8YXJbRz4+Ml0pIT0oMHxKKSlmb3IoO3ZlPTB8YXJbVj4+Ml0sRz0wfGFyWyhWPXZlKzh8MCk+PjJdLCgwfGFyW0c+PjJdKSE9KDB8dmUpOyk7aWYoKDB8Ryk9PSgwfFcpKWJyZWFrO0o9R313ZT0wfGFyW2c+PjJdLGtlPTB8YXJbd2UrNzY+PjJdLHdlPTB8YXJbd2UrODA+PjJdLCh2ZT0wPT0oMHx3ZSkpfHxidSh3ZSksaGU9MCE9KDB8a2UpO2U6ZG97aWYoaGUmJihiQT0wfGFyW2dlPj4yXSwoMHxiQSkhPSgwfFcpKSl7Uz15ZSs0fDAsej04K2l8MCxqPTQraXwwLEg9MTEraXwwLHg9OCtufDAsUD00K258MCxMPTExK258MCxLPTQrdHwwLHE9OCtmfDAsJD00K2Z8MCxBQT0xMStmfDAsZkE9OCtyfDAsbkE9NCtyfDAsdEE9MTErcnwwLG9BPUJlKzR8MCxhQT1CZSs4fDAsdUE9MTIrcHwwLGRBPWNBPTY0K3B8MCxrQT0xMzYrcHwwLGhBPTE0MCtwfDAsdkE9NjArcHwwLG1BPTExK3l8MCxaQT0xMStvfDAscEE9KHdBPTQ0K3B8MCkrMTF8MCx5QT1PPTQreXwwLFhBPTgrdXwwLFdBPTQrdXwwLElBPTExK3V8MCxDQT04K2J8MCxHQT00K2J8MCxWQT0xMStifDAsTkE9OCtzfDAsX0E9NCtzfDAsWUE9MTErc3wwLFFBPTgrZHwwLERBPTQrZHwwLEpBPTExK2R8MCxNQT1SQT1FQT1zQT00K3B8MCxTQT04K2N8MCx6QT0oT0E9OCtsfDApKzExfDAsakE9VEE9Z0E9bEE9OCtwfDAsSEE9RkE9QkE9MTErcHwwLHhBPTgra3wwLFBBPTQra3wwLExBPTExK2t8MCxLQT04K2h8MCxxQT00K2h8MCwkQT0xMStofDAsQWU9NCt3fDAsZWU9ZGUrNHwwLGZlPXJlPTExK2N8MCxuZT1pZT1VQT00K2N8MCx0ZT0xMStsfDAsb2U9NCtsfDAsYWU9OCthfDAsY2U9NCthfDAsbGU9MTErYXwwLGJlPSh1ZT1FZSs4fDApKzExfDAsc2U9QSs4fDA7cjpmb3IoOzspe2lmKGlvKHllLGtlLDB8YXJbMjArKDB8YXJbKE09YkErMjB8MCk+PjJdKT4+Ml0pLFY9MHxhclt5ZT4+Ml0sVD0wfGFyW1M+PjJdLCgwfFYpPT0oMHxUKSlHPTEwO2Vsc2V7VT1iQSsyNHwwO2k6Zm9yKDs7KXtHPTB8YXJbVisyMD4+Ml07Zjpkb3tpZigoMHxHKTwxOTUzMDAwODAyKXtzd2l0Y2goMHxHKXtjYXNlIDE2MzUwODg0OTI6YnJlYWs7ZGVmYXVsdDpicmVhayBmfWlmKGFyW0JlPj4yXT0wLGFyW29BPj4yXT0wLGFyW2FBPj4yXT0wLHZvKEVlLDB8YXJbZz4+Ml0sMHxhclsyMCsoMHxhcltNPj4yXSk+PjJdLEJlKSwwfGFyW0VlPj4yXSlpQT0wfGFyWyhyQT1FZSkrND4+Ml0sYXJbKEc9QSk+PjJdPWFyW3JBPj4yXSxhcltHKzQ+PjJdPWlBLGFyW3NlPj4yXT1hclt1ZT4+Ml0sYXJbc2UrND4+Ml09YXJbdWUrND4+Ml0sYXJbc2UrOD4+Ml09YXJbdWUrOD4+Ml0sYXJbdWU+PjJdPTAsYXJbdWUrND4+Ml09MCxhclt1ZSs4Pj4yXT0wLEc9MTtlbHNle0c9MHxhcltCZT4+Ml0sUT0wfGFyW29BPj4yXTtkb3tpZigoMHxHKT09KDB8USkpRj0wLG1lPTE5NztlbHNle2ZvcihGPVk9MDs7KXtSPTB8YXJbRys0Pj4yXTtkb3tpZihSKXtpZighKF89MHxxdShSLDEyOCw4NDAsMCkpKXtSPVk7YnJlYWt9Uj1fLChOPTB8YXJbRys4Pj4yXSk/YnUoTik6Tj0wO2Rve2lmKF8pe2lmKDB8KF89TikmJmJ1KE4pLCFGKXtGPV87YnJlYWt9ZHUoRiksRj1ffWVsc2UgUj1ZfXdoaWxlKDApO2lmKCFOKWJyZWFrO2R1KE4pfWVsc2UgUj1ZfXdoaWxlKDApO2lmKCgwfChHPUcrMTJ8MCkpPT0oMHxRKSlicmVhaztZPVJ9aWYoIShEPVIpKXttZT0xOTc7YnJlYWt9R2UoeSxWKzUyfDApO246ZG97aWYoND09KCgwfGFyW3lBPj4yXSktKDB8YXJbeT4+Ml0pfDApKXt5dShwLEo9RCs1NnwwKSwyNT09KDB8KChpQT0wfHRyW0JBPj4wXSk8PDI0Pj4yNDwwPzB8YXJbRUE+PjJdOjI1NSZpQSkpJiYwPT0oMHxZdShwLDAsLTEsMzA2MjEsMjUpKT9HPTE6KHl1KGMsSiksMjY9PSgwfCgoaUE9MHx0cltmZT4+MF0pPDwyND4+MjQ8MD8wfGFyW25lPj4yXToyNTUmaUEpKSYmMD09KDB8WXUoYywwLC0xLDMwNjQ3LDI2KSk/Rz0xOih5dShsLEopLDQzPT0oMHwoKFI9MHx0clt0ZT4+MF0pPDwyND4+MjQ8MD8wfGFyW29lPj4yXToyNTUmUikpPyhHPTA9PSgwfFl1KGwsMCwtMSwzMDY3NCw0MykpLFI9MHx0clt0ZT4+MF0pOkc9MCxSPDwyND4+MjQ8MCYmdnUoMHxhcltsPj4yXSkpLCgwfHRyW2ZlPj4wXSk8MCYmdnUoMHxhcltjPj4yXSkpLCgwfHRyW0JBPj4wXSk8MCYmdnUoMHxhcltwPj4yXSk7dDpkb3tpZihHKXtSPTB8YXJbVz4+Ml07ZG97aWYoMHxSKXtfPTB8YXJbYXJbeT4+Ml0+PjJdLEc9VztvOmZvcig7Oyl7Zm9yKE49UjshKCgwfGFyW04rMTY+PjJdKT4+PjA+PV8+Pj4wKTspe2lmKCEoUj0wfGFyW04rND4+Ml0pKWJyZWFrIG87Tj1SfWlmKCEoUj0wfGFyW04+PjJdKSl7Rz1OO2JyZWFrfUc9Tn1pZigoMHxHKT09KDB8VykpYnJlYWs7aWYoXz4+PjA8KDB8YXJbRysxNj4+Ml0pPj4+MClicmVhaztfPTB8YXJbRysyMD4+Ml0sWT0wfGFyW0crMjQ+PjJdLChRPTA9PSgwfFkpKXx8YnUoWSksRz0wfGFyW00+PjJdLFI9Rztkb3tpZigoMHxHKT09KDB8Xykpe2ZvcihhcltiPj4yXT0wLGFyWzQrYj4+Ml09MCxhcls4K2I+PjJdPTAsRz0wfGh1KDMyKSxhcltiPj4yXT1HLGFyW0NBPj4yXT0tMjE0NzQ4MzYxNixhcltHQT4+Ml09MzAsZUE9MzA3NTQsckE9KGlBPUcpKzMwfDA7dHJbaUE+PjBdPTB8dHJbZUE+PjBdLGVBPWVBKzF8MCwoMHwoaUE9aUErMXwwKSk8KDB8ckEpOyk7aWYodHJbRyszMD4+MF09MCxvbyhBLDIsMmUzLGIpLDA8PSgwfHRyW1ZBPj4wXSkpe0c9MTticmVha312dSgwfGFyW2I+PjJdKSxHPTF9ZWxzZXtpZigoMHxhcltHKzI0Pj4yXSkhPSgwfGFyW18rMjQ+PjJdKSl7Rz0wO2JyZWFrfWlmKCgwfGFyW0crMjg+PjJdKSE9KDB8YXJbXysyOD4+Ml0pKXtHPTA7YnJlYWt9aWYoTj0wfGFyW2FyW3k+PjJdPj4yXSx0cltHKzYwPj4wXT0xLGFyW0crNjQ+PjJdPU4sdHJbRys2MT4+MF09MSwwfChOPTB8YXJbVT4+Ml0pJiZidShOKSxhcltfKzY4Pj4yXT1SLEc9MHxhclsoaUE9Xys3MnwwKT4+Ml0sYXJbaUE+PjJdPU4sIUcpe0c9MDticmVha31kdShHKSxHPTB9fXdoaWxlKDApO2lmKFF8fGR1KFkpLEcpe0c9MTticmVhayBufWJyZWFrIHR9fXdoaWxlKDApO2Zvcihhclt1Pj4yXT0wLGFyWzQrdT4+Ml09MCxhcls4K3U+PjJdPTAsRz0wfGh1KDQ4KSxhclt1Pj4yXT1HLGFyW1hBPj4yXT0tMjE0NzQ4MzYwMCxhcltXQT4+Ml09MzUsZUE9MzA3MTgsckE9KGlBPUcpKzM1fDA7dHJbaUE+PjBdPTB8dHJbZUE+PjBdLGVBPWVBKzF8MCwoMHwoaUE9aUErMXwwKSk8KDB8ckEpOyk7aWYodHJbRyszNT4+MF09MCxvbyhBLDIsMmUzLHUpLDA8PSgwfHRyW0lBPj4wXSkpe0c9MTticmVhayBufXZ1KDB8YXJbdT4+Ml0pLEc9MTticmVhayBufX13aGlsZSgwKTt5dShwLEopLDI2PT0oMHwoKGlBPTB8dHJbRkE+PjBdKTw8MjQ+PjI0PDA/MHxhcltSQT4+Ml06MjU1JmlBKSkmJjA9PSgwfFl1KHAsMCwtMSwzMDc4NSwyNikpP0c9MTooeXUoYyxKKSw0Mz09KDB8KChSPTB8dHJbcmU+PjBdKTw8MjQ+PjI0PDA/MHxhcltpZT4+Ml06MjU1JlIpKT8oRz0wPT0oMHxZdShjLDAsLTEsMzA4MTIsNDMpKSxSPTB8dHJbcmU+PjBdKTpHPTAsUjw8MjQ+PjI0PDAmJnZ1KDB8YXJbYz4+Ml0pKSwoMHx0cltGQT4+MF0pPDAmJnZ1KDB8YXJbcD4+Ml0pO3Q6ZG97aWYoRyl7WT0wfGFyW00+PjJdLEc9MHxhclt5Pj4yXSxOPTB8YXJbRz4+Ml0sdHJbWSs3Nj4+MF09MSxhcltZKzgwPj4yXT1OLE49MHxhcltXPj4yXSxRPVk7ZG97aWYoMHxOKXtfPTB8YXJbRz4+Ml0sRz1XO286Zm9yKDs7KXtmb3IoUj1OOyEoKDB8YXJbUisxNj4+Ml0pPj4+MD49Xz4+PjApOylpZighKFI9MHxhcltSKzQ+PjJdKSlicmVhayBvO2lmKCEoTj0wfGFyW1I+PjJdKSl7Rz1SO2JyZWFrfUc9Un1pZigoMHxHKT09KDB8VykpYnJlYWs7aWYoXz4+PjA8KDB8YXJbRysxNj4+Ml0pPj4+MClicmVhaztpZihHPTB8YXJbRysyMD4+Ml0sKDB8WSk9PSgwfEcpKXtmb3IoYXJbZD4+Ml09MCxhcls0K2Q+PjJdPTAsYXJbOCtkPj4yXT0wLEc9MHxodSgzMiksYXJbZD4+Ml09RyxhcltRQT4+Ml09LTIxNDc0ODM2MTYsYXJbREE+PjJdPTMwLGVBPTMwODkyLHJBPShpQT1HKSszMHwwO3RyW2lBPj4wXT0wfHRyW2VBPj4wXSxlQT1lQSsxfDAsKDB8KGlBPWlBKzF8MCkpPCgwfHJBKTspO2lmKHRyW0crMzA+PjBdPTAsb28oQSwyLDJlMyxkKSwwPD0oMHx0cltKQT4+MF0pKXtHPTE7YnJlYWsgbn12dSgwfGFyW2Q+PjJdKSxHPTE7YnJlYWsgbn1pZigwfChSPTB8YXJbVT4+Ml0pJiZidShSKSxhcltHKzg0Pj4yXT1RLEc9MHxhclsoaUE9Rys4OHwwKT4+Ml0sYXJbaUE+PjJdPVIsMHxHJiZkdShHKSxhcltwPj4yXT0wLGFyW01BPj4yXT0wLGFyW1RBPj4yXT0wLFI9MHxhcltEKzY4Pj4yXSwwfChHPSgwfGFyW0QrNzI+PjJdKS1SfDApKXtpZigoMHxHKTwwKWJyZWFrIHI7ckE9MHxodShHKSxhcltNQT4+Ml09ckEsYXJbcD4+Ml09ckEsaUE9ckErR3wwLGFyW2pBPj4yXT1pQSxoYigwfHJBLDB8UiwwfEcpLGFyW01BPj4yXT1pQX1pZihhcltjPj4yXT0wLGFyW1VBPj4yXT0wLGFyW1NBPj4yXT0wLFZsKGwscCxjKSxHPTB8YXJbYz4+Ml0sXz0wfGFyW1VBPj4yXSwoMHxHKSE9KDB8XykpZG97Uj0wfGFyW0c+PjJdO2Rve2lmKDB8Uil7aWYoIShOPTB8cXUoUiwxNDcyLDE0ODAsMCkpKWJyZWFrO2ZvcigoUj0wfGFyW0crND4+Ml0pP2J1KFIpOlI9MCxpQT0wfGFyW00+PjJdLHRyW2lBKzkyPj4wXT0xLGVBPU4rOHwwLHJBPShpQT1pQSs5NnwwKSs1NnwwO2FyW2lBPj4yXT1hcltlQT4+Ml0sZUE9ZUErNHwwLCgwfChpQT1pQSs0fDApKTwoMHxyQSk7KTtpZighUilicmVhaztkdShSKX19d2hpbGUoMCk7Rz1HKzh8MH13aGlsZSgoMHxHKSE9KDB8XykpO2lmKCgwfHRyW3pBPj4wXSk8MCYmdnUoMHxhcltPQT4+Ml0pLDB8KEc9MHxhcltjPj4yXSkpe2lmKCgwfChSPTB8YXJbVUE+PjJdKSkhPSgwfEcpKXtmb3IoO049UistOHwwLGFyW1VBPj4yXT1OLCgwfChSPShSPTB8YXJbUistND4+Ml0pPyhkdShSKSwwfGFyW1VBPj4yXSk6TikpIT0oMHxHKTspO0c9MHxhcltjPj4yXX12dShHKX0wfChHPTB8YXJbcD4+Ml0pJiYoKDB8YXJbTUE+PjJdKSE9KDB8RykmJihhcltNQT4+Ml09RyksdnUoRykpO2JyZWFrIHR9fXdoaWxlKDApO2ZvcihhcltzPj4yXT0wLGFyWzQrcz4+Ml09MCxhcls4K3M+PjJdPTAsRz0wfGh1KDQ4KSxhcltzPj4yXT1HLGFyW05BPj4yXT0tMjE0NzQ4MzYwMCxhcltfQT4+Ml09MzUsZUE9MzA4NTYsckE9KGlBPUcpKzM1fDA7dHJbaUE+PjBdPTB8dHJbZUE+PjBdLGVBPWVBKzF8MCwoMHwoaUE9aUErMXwwKSk8KDB8ckEpOyk7aWYodHJbRyszNT4+MF09MCxvbyhBLDIsMmUzLHMpLDA8PSgwfHRyW1lBPj4wXSkpe0c9MTticmVhayBufXZ1KDB8YXJbcz4+Ml0pLEc9MTticmVhayBufX13aGlsZSgwKTtpQT0wfGFyW00+PjJdLHJBPTB8YXJbYXJbeT4+Ml0+PjJdLHl1KHAsSiksdHJbaUErMTU2Pj4wXT0xLGFyW2lBKzE1Mj4+Ml09ckEsRXUoaUErMTYwfDAscCksKDB8dHJbSEE+PjBdKTwwJiZ2dSgwfGFyW3A+PjJdKSxSPTB8YXJbVz4+Ml07ZG97aWYoMHxSKXtfPTB8YXJbYXJbeT4+Ml0+PjJdLEc9Vzt0OmZvcig7Oyl7Zm9yKE49UjshKCgwfGFyW04rMTY+PjJdKT4+PjA+PV8+Pj4wKTspe2lmKCEoUj0wfGFyW04rND4+Ml0pKWJyZWFrIHQ7Tj1SfWlmKCEoUj0wfGFyW04+PjJdKSl7Rz1OO2JyZWFrfUc9Tn1pZigoMHxHKT09KDB8VykpYnJlYWs7aWYoXz4+PjA8KDB8YXJbRysxNj4+Ml0pPj4+MClicmVhaztpZihSPTB8YXJbTT4+Ml0sTj0wfGFyW0crMjA+PjJdLCgwfFIpPT0oMHxOKSl7Zm9yKGFyW2g+PjJdPTAsYXJbNCtoPj4yXT0wLGFyWzgraD4+Ml09MCxHPTB8aHUoMzIpLGFyW2g+PjJdPUcsYXJbS0E+PjJdPS0yMTQ3NDgzNjE2LGFyW3FBPj4yXT0yOCxlQT0zMDk1NyxyQT0oaUE9RykrMjh8MDt0cltpQT4+MF09MHx0cltlQT4+MF0sZUE9ZUErMXwwLCgwfChpQT1pQSsxfDApKTwoMHxyQSk7KTtpZih0cltHKzI4Pj4wXT0wLG9vKEEsMiwyZTMsaCksMDw9KDB8dHJbJEE+PjBdKSl7Rz0xO2JyZWFrIG59dnUoMHxhcltoPj4yXSksRz0xO2JyZWFrIG59YXJbdz4+Ml09UixHPTB8YXJbVT4+Ml0sMHwoYXJbQWU+PjJdPUcpJiZidShHKSxSPTB8YXJbKEc9TisxNzZ8MCk+PjJdO2Rve2lmKFI+Pj4wPCgwfGFyW04rMTgwPj4yXSk+Pj4wKWFyW1I+PjJdPWFyW3c+PjJdLGFyW1IrND4+Ml09YXJbQWU+PjJdLGFyW3c+PjJdPTAsYXJbQWU+PjJdPTAsYXJbRz4+Ml09Uis4O2Vsc2V7aWYoeWwoTisxNzJ8MCx3KSwhKEc9MHxhcltBZT4+Ml0pKWJyZWFrO2R1KEcpfX13aGlsZSgwKTtpZihhcltkZT4+Ml09YXJbTT4+Ml0sRz0wfGFyW1U+PjJdLGFyW2VlPj4yXT1HKXtidShHKSxwbChlLGRlKSxkdShHKSxHPTA7YnJlYWsgbn1wbChlLGRlKSxHPTA7YnJlYWsgbn19d2hpbGUoMCk7Zm9yKGFyW2s+PjJdPTAsYXJbNCtrPj4yXT0wLGFyWzgraz4+Ml09MCxHPTB8aHUoNDgpLGFyW2s+PjJdPUcsYXJbeEE+PjJdPS0yMTQ3NDgzNjAwLGFyW1BBPj4yXT0zMyxlQT0zMDkyMyxyQT0oaUE9RykrMzN8MDt0cltpQT4+MF09MHx0cltlQT4+MF0sZUE9ZUErMXwwLCgwfChpQT1pQSsxfDApKTwoMHxyQSk7KTtpZih0cltHKzMzPj4wXT0wLG9vKEEsMiwyZTMsayksMDw9KDB8dHJbTEE+PjBdKSl7Rz0xO2JyZWFrfXZ1KDB8YXJbaz4+Ml0pLEc9MX1lbHNle2ZvcihhclthPj4yXT0wLGFyWzQrYT4+Ml09MCxhcls4K2E+PjJdPTAsRz0wfGh1KDQ4KSxhclthPj4yXT1HLGFyW2FlPj4yXT0tMjE0NzQ4MzYwMCxhcltjZT4+Ml09MzUsZUE9MzA1ODUsckE9KGlBPUcpKzM1fDA7dHJbaUE+PjBdPTB8dHJbZUE+PjBdLGVBPWVBKzF8MCwoMHwoaUE9aUErMXwwKSk8KDB8ckEpOyk7aWYodHJbRyszNT4+MF09MCxvbyhBLDIsMCxhKSwwPD0oMHx0cltsZT4+MF0pKXtHPTE7YnJlYWt9dnUoMHxhclthPj4yXSksRz0xfX13aGlsZSgwKTswfChSPTB8YXJbeT4+Ml0pJiYoKDB8KE49MHxhclt5QT4+Ml0pKSE9KDB8UikmJihhclt5QT4+Ml09TisofigoTistNC1SfDApPj4+Mik8PDIpKSx2dShSKSl9fXdoaWxlKDApOzE5Nz09KDB8bWUpJiYobWU9MCxhcltsQT4+Ml09NDUyNCxhcltwPj4yXT0xODgsYXJbY0E+PjJdPTIwOCxhcltzQT4+Ml09MCxKZihkQSx1QSksYXJba0E+PjJdPTAsYXJbaEE+PjJdPS0xLGFyW3A+PjJdPTQ1MDQsYXJbY0E+PjJdPTQ1NDQsYXJbbEE+PjJdPTQ1MjQsU2YodUEpLGFyW3VBPj4yXT00MzQwLGFyW3dBPj4yXT0wLGFyW3dBKzQ+PjJdPTAsYXJbd0ErOD4+Ml09MCxhclt3QSsxMj4+Ml09MCxhclt2QT4+Ml09MjQsYXJbeT4+Ml09MCxhcls0K3k+PjJdPTAsYXJbOCt5Pj4yXT0wLFhlKHVBLHkpLCgwfHRyW21BPj4wXSk8MCYmdnUoMHxhclt5Pj4yXSksTGYoaUE9MHxXZShnQSwzMDU1NywyNyksMHxhclsyMCsoMHxhcltNPj4yXSk+PjJdKSxJZShvLHVBKSxvbyhBLDIsMTIzLG8pLCgwfHRyW1pBPj4wXSk8MCYmdnUoMHxhcltvPj4yXSksYXJbcD4+Ml09NDUwNCxhcltjQT4+Ml09NDU0NCxhcltnQT4+Ml09NDUyNCxhclt1QT4+Ml09NDM0MCwoMHx0cltwQT4+MF0pPDAmJnZ1KDB8YXJbd0E+PjJdKSxrZih1QSksYmYoY0EpLEc9MSksRiYmZHUoRil9aWYoKDB8dHJbYmU+PjBdKTwwJiZ2dSgwfGFyW3VlPj4yXSksMHwoRj0wfGFyW0JlPj4yXSkpe2lmKCgwfChSPTB8YXJbb0E+PjJdKSkhPSgwfEYpKXtmb3IoO049UistMTJ8MCxhcltvQT4+Ml09TiwoMHwoUj0oUj0wfGFyW1IrLTQ+PjJdKT8oZHUoUiksMHxhcltvQT4+Ml0pOk4pKSE9KDB8Rik7KTtGPTB8YXJbQmU+PjJdfXZ1KEYpfWlmKDB8RylicmVhayBpfWVsc2V7c3dpdGNoKDB8Ryl7Y2FzZSAxOTUzMDAwODAyOmJyZWFrO2RlZmF1bHQ6YnJlYWsgZn1HZSh5LFYrNTJ8MCksaUE9MHxhclt5Pj4yXSxHPWlBO246ZG97aWYoND09KCgwfGFyW08+PjJdKS1pQXwwKSl7Xz0wfGFyW00+PjJdLFI9MHxhcltHPj4yXSx0cltfKzQxPj4wXT0xLGFyW18rNDQ+PjJdPVIsUj0wfGFyW1c+PjJdLFk9Xztkb3tpZigwfFIpe049MHxhcltHPj4yXSxHPVc7dDpmb3IoOzspe2ZvcihGPVI7ISgoMHxhcltGKzE2Pj4yXSk+Pj4wPj1OPj4+MCk7KWlmKCEoRj0wfGFyW0YrND4+Ml0pKWJyZWFrIHQ7aWYoIShSPTB8YXJbRj4+Ml0pKXtHPUY7YnJlYWt9Rz1GfWlmKCgwfEcpPT0oMHxXKSlicmVhaztpZihOPj4+MDwoMHxhcltHKzE2Pj4yXSk+Pj4wKWJyZWFrO2lmKEY9MHxhcltHKzIwPj4yXSwwfHRyW0YrNDE+PjBdKXtmb3IoYXJbZj4+Ml09MCxhcls0K2Y+PjJdPTAsYXJbOCtmPj4yXT0wLEc9MHxodSg0OCksYXJbZj4+Ml09RyxhcltxPj4yXT0tMjE0NzQ4MzYwMCxhclskPj4yXT0zOCxlQT0zMDQ4MyxyQT0oaUE9RykrMzh8MDt0cltpQT4+MF09MHx0cltlQT4+MF0sZUE9ZUErMXwwLCgwfChpQT1pQSsxfDApKTwoMHxyQSk7KTtpZih0cltHKzM4Pj4wXT0wLG9vKEEsMiwyZTMsZiksMDw9KDB8dHJbQUE+PjBdKSl7Rz0xO2JyZWFrIG59dnUoMHxhcltmPj4yXSksRz0xO2JyZWFrIG59aWYoKDB8Xyk9PSgwfEYpKXtmb3IoYXJbbj4+Ml09MCxhcls0K24+PjJdPTAsYXJbOCtuPj4yXT0wLEc9MHxodSg0OCksYXJbbj4+Ml09Ryxhclt4Pj4yXT0tMjE0NzQ4MzYwMCxhcltQPj4yXT0zNCxlQT0zMDUyMixyQT0oaUE9RykrMzR8MDt0cltpQT4+MF09MHx0cltlQT4+MF0sZUE9ZUErMXwwLCgwfChpQT1pQSsxfDApKTwoMHxyQSk7KTtpZih0cltHKzM0Pj4wXT0wLG9vKEEsMiwyZTMsbiksMDw9KDB8dHJbTD4+MF0pKXtHPTE7YnJlYWsgbn12dSgwfGFyW24+PjJdKSxHPTE7YnJlYWsgbn1pZigoMHwoRz0wfGFyWyhSPUYrNTJ8MCk+PjJdKSk9PSgwfGFyW0YrNTY+PjJdKT9rbChGKzQ4fDAsTSk6KGFyW0c+PjJdPVksRj0wfGFyW1U+PjJdLChhcltHKzQ+PjJdPUYpJiYoYnUoRiksRz0wfGFyW1I+PjJdKSxhcltSPj4yXT1HKzgpLGFyW3Q+PjJdPWFyW00+PjJdLEc9MHxhcltVPj4yXSxhcltLPj4yXT1HKXtidShHKSxwbChlLHQpLGR1KEcpLEc9MDticmVhayBufXBsKGUsdCksRz0wO2JyZWFrIG59fXdoaWxlKDApO2ZvcihhcltpPj4yXT0wLGFyWzQraT4+Ml09MCxhcls4K2k+PjJdPTAsRz0wfGh1KDQ4KSxhcltpPj4yXT1HLGFyW3o+PjJdPS0yMTQ3NDgzNjAwLGFyW2o+PjJdPTQxLGVBPTMwNDQxLHJBPShpQT1HKSs0MXwwO3RyW2lBPj4wXT0wfHRyW2VBPj4wXSxlQT1lQSsxfDAsKDB8KGlBPWlBKzF8MCkpPCgwfHJBKTspO3RyW0crNDE+PjBdPTAsb28oQSwyLDJlMyxpKSxHPSgoMHx0cltIPj4wXSk8MCYmdnUoMHxhcltpPj4yXSksMSl9ZWxzZXtmb3IoYXJbcj4+Ml09MCxhcls0K3I+PjJdPTAsYXJbOCtyPj4yXT0wLEc9MHxodSgzMiksYXJbcj4+Ml09RyxhcltmQT4+Ml09LTIxNDc0ODM2MTYsYXJbbkE+PjJdPTI5LGVBPTMwNDExLHJBPShpQT1HKSsyOXwwO3RyW2lBPj4wXT0wfHRyW2VBPj4wXSxlQT1lQSsxfDAsKDB8KGlBPWlBKzF8MCkpPCgwfHJBKTspO3RyW0crMjk+PjBdPTAsb28oQSwyLDAsciksRz0oKDB8dHJbdEE+PjBdKTwwJiZ2dSgwfGFyW3I+PjJdKSwxKX19d2hpbGUoMCk7aWYoMHwoRj0wfGFyW3k+PjJdKSYmKCgwfChSPTB8YXJbTz4+Ml0pKSE9KDB8RikmJihhcltPPj4yXT1SKyh+KChSKy00LUZ8MCk+Pj4yKTw8MikpLHZ1KEYpKSwwfEcpe0c9MTticmVhayBpfX19d2hpbGUoMCk7aWYoKDB8KFY9Vis2NHwwKSk9PSgwfFQpKXtHPTEwO2JyZWFrfX1WPTB8YXJbeWU+PjJdfWlmKFk9MTA9PSgwfEcpPzA6RywwfFYpe2lmKCgwfChHPTB8YXJbUz4+Ml0pKT09KDB8VikpRz1WO2Vsc2V7Zm9yKDtGPUcrLTY0fDAsYXJbUz4+Ml09RiwwfChSPTB8YXJbRystMTI+PjJdKSYmKCgwfChfPTB8YXJbKE49RystOHwwKT4+Ml0pKSE9KDB8UikmJihhcltOPj4yXT1fKyh+KChfKy00LVJ8MCk+Pj4yKTw8MikpLHZ1KFIpKSxhcltGPj4yXT00MjY0LDB8KEY9MHxhcltHKy00MD4+Ml0pJiYoKDB8YXJbKEc9RystMzZ8MCk+PjJdKSE9KDB8RikmJihhcltHPj4yXT1GKSx2dShGKSksKDB8KEc9MHxhcltTPj4yXSkpIT0oMHxWKTspO0c9MHxhclt5ZT4+Ml19dnUoRyl9c3dpdGNoKDB8WSl7Y2FzZSA4Om1lPTM2MjticmVhayBlO2Nhc2UgMDpicmVhaztkZWZhdWx0OmJyZWFrIGV9aWYoRz0wfGFyW2JBKzQ+PjJdKWZvcig7Vj0wfGFyW0c+PjJdOylHPVY7ZWxzZSBpZihHPTB8YXJbKFY9YkErOHwwKT4+Ml0sKDB8YXJbRz4+Ml0pIT0oMHxiQSkpZm9yKDtiQT0wfGFyW1Y+PjJdLEc9MHxhclsoVj1iQSs4fDApPj4yXSwoMHxhcltHPj4yXSkhPSgwfGJBKTspO2lmKCgwfEcpPT0oMHxXKSl7bWU9MzYyO2JyZWFrIGV9YkE9R316bCgpfWVsc2UgbWU9MzYyfXdoaWxlKDApO2U6ZG97aWYoMzYyPT0oMHxtZSkpe0c9MHxhcltnZT4+Ml07cjpkb3tpZigoMHxHKSE9KDB8Vykpe2ZvcihRPTExK3l8MCxKPUQ9NCt5fDAsTT00K3Z8MCxUPTgrbXwwLFU9NCttfDAsUz0xMSttfDAsWT1HOzspe2lmKFI9MHxhclsyMCsoMHxhclsoXz1ZKzIwfDApPj4yXSk+PjJdLE49MTEyKygwfGFyW2c+PjJdKXwwLEc9MHxhcltOPj4yXSl7Vj1OO2k6Zm9yKDs7KXtmb3IoRj1HOyEoKDB8YXJbRisxNj4+Ml0pPj4+MD49Uj4+PjApOyl7aWYoIShHPTB8YXJbRis0Pj4yXSkpYnJlYWsgaTtGPUd9aWYoIShHPTB8YXJbRj4+Ml0pKXtWPUY7YnJlYWt9Vj1GfU49KDB8VikhPSgwfE4pJiYoMHxhcltWKzE2Pj4yXSk+Pj4wPD1SPj4+MD8oRz0wfGFyW1YrMjA+PjJdLChWPTB8YXJbVisyND4+Ml0pPyhidShWKSxWKTowKTpHPTB9ZWxzZSBOPUc9MDtpZih5dSh5LEcrNjR8MCksND09KDB8KChHPTB8dHJbUT4+MF0pPDwyND4+MjQ8MD8wfGFyW0Q+PjJdOjI1NSZHKSk/KFY9MD09KDB8WXUoeSwwLC0xLDMwMjk4LDQpKSxHPTB8dHJbUT4+MF0pOlY9MCxHPDwyND4+MjQ8MCYmdnUoMHxhclt5Pj4yXSksVil7Rz0wfGFyW2c+PjJdLGFyW3k+PjJdPWFyW0crNTI+PjJdLFY9MHxhcltHKzU2Pj4yXSwoYXJbSj4+Ml09VikmJihidShWKSxHPTB8YXJbZz4+Ml0pLFY9MHxhcltHKzQ0Pj4yXSxGPTB8YXJbRys0OD4+Ml0sKFI9MD09KDB8RikpfHxidShGKSxMdCh2LFYsMHxhclsyMCsoMHxhcltfPj4yXSk+PjJdLHksMTc1MjU4OTEyMyksRz0wPT0oMHxhclt2Pj4yXSksMHwoVj0wfGFyW00+PjJdKSYmZHUoVik7ZG97aWYoRyl7Zm9yKGFyW20+PjJdPTAsYXJbNCttPj4yXT0wLGFyWzgrbT4+Ml09MCxHPTB8aHUoNDgpLGFyW20+PjJdPUcsYXJbVD4+Ml09LTIxNDc0ODM2MDAsYXJbVT4+Ml09MzUsZUE9MzA5ODYsckE9KGlBPUcpKzM1fDA7dHJbaUE+PjBdPTB8dHJbZUE+PjBdLGVBPWVBKzF8MCwoMHwoaUE9aUErMXwwKSk8KDB8ckEpOyk7aWYodHJbRyszNT4+MF09MCxvbyhBLDIsMTA2LG0pLDA8PSgwfHRyW1M+PjBdKSl7Rz0xO2JyZWFrfXZ1KDB8YXJbbT4+Ml0pLEc9MX1lbHNlIEc9MH13aGlsZSgwKTtSfHxkdShGKSwwfChWPTB8YXJbSj4+Ml0pJiZkdShWKSxHfHwobWU9MzkyKX1lbHNlIG1lPTM5MjtpZigzOTI9PSgwfG1lKSYmKEc9bWU9MCksMHxOJiZkdShOKSwwfEcpYnJlYWsgZTtHPTB8YXJbWSs0Pj4yXTtkb3tpZihHKWZvcig7Vj0wfGFyW0c+PjJdOylHPVY7ZWxzZXtpZihHPTB8YXJbKFY9WSs4fDApPj4yXSwoMHxhcltHPj4yXSk9PSgwfFkpKWJyZWFrO2Zvcig7ZGU9MHxhcltWPj4yXSxHPTB8YXJbKFY9ZGUrOHwwKT4+Ml0sKDB8YXJbRz4+Ml0pIT0oMHxkZSk7KTt9fXdoaWxlKDApO2lmKCgwfEcpPT0oMHxXKSlicmVhaztZPUd9aWYoKDB8KEc9MHxhcltnZT4+Ml0pKSE9KDB8Vykpe009MV5oZSxUPTExK3l8MCxTPVU9NCt5fDAsTz1aZSs0fDAsej1wZSs0fDA7ZG97aWYoRD1HKzIwfDAsXz0wfGFyW0crMTY+PjJdLE49MTEyKygwfGFyW2c+PjJdKXwwLDB8KEY9MHxhcltOPj4yXSkpe1Y9TjtpOmZvcig7Oyl7Zm9yKFI9RjshKCgwfGFyW1IrMTY+PjJdKT4+PjA+PV8+Pj4wKTspe2lmKCEoRj0wfGFyW1IrND4+Ml0pKWJyZWFrIGk7Uj1GfWlmKCEoRj0wfGFyW1I+PjJdKSl7Vj1SO2JyZWFrfVY9Un1pZigoMHxWKSE9KDB8TikmJigwfGFyW1YrMTY+PjJdKT4+PjA8PV8+Pj4wKXtGPTB8YXJbVisyMD4+Ml0sVj0wfGFyW1YrMjQ+PjJdLEo9Vj8oYnUoViksVik6MCxWPTA9PSgwfEYpO2Rve2lmKFZ8TSlWPVY/MTk6MTg7ZWxzZXtpZih5dSh5LEYrNjR8MCksND09KDB8KChWPTB8dHJbVD4+MF0pPDwyND4+MjQ8MD8wfGFyW1U+PjJdOjI1NSZWKSk/KEY9MD09KDB8WXUoeSwwLC0xLDMwMzAzLDQpKSxWPTB8dHJbVD4+MF0pOkY9MCxWPDwyND4+MjQ8MCYmdnUoMHxhclt5Pj4yXSksRil7aWYoZm8oeSxrZSxfLDE2ODQ2MzA4ODcpLCgwfChGPTB8YXJbeT4+Ml0pKT09KDB8YXJbUz4+Ml0pKVY9MTk7ZWxzZXtOPTB8YXJbRj4+Ml0sRj0wfGFyW1c+PjJdO2Rve2lmKEYpe1Y9VztpOmZvcig7Oyl7Zm9yKFI9RjshKCgwfGFyW1IrMTY+PjJdKT4+PjA+PU4+Pj4wKTspe2lmKCEoRj0wfGFyW1IrND4+Ml0pKWJyZWFrIGk7Uj1GfWlmKCEoRj0wfGFyW1I+PjJdKSl7Vj1SO2JyZWFrfVY9Un1pZigoMHxWKT09KDB8Vykpe1Y9MTk7YnJlYWt9aWYoTj4+PjA8KDB8YXJbVisxNj4+Ml0pPj4+MCl7Vj0xOTticmVha31fPTB8YXJbVisyMD4+Ml0sWT0wfGFyW1YrMjQ+PjJdLChRPTA9PSgwfFkpKXx8YnUoWSksUj0wfGFyW0Q+PjJdLFY9MHxhcltSKzIwND4+Ml0sUj0wfGFyW1IrMjA4Pj4yXSwoTj0wPT0oMHxSKSl8fGJ1KFIpO2Rve2lmKCFWKXtpZihWPTB8YXJbKEY9XykrMjA0Pj4yXSxGPTB8YXJbRisyMDg+PjJdKXtidShGKSxkdShGKSxWPTAhPSgwfFYpO2JyZWFrfVY9MCE9KDB8Vik7YnJlYWt9Vj0wfXdoaWxlKDApO058fGR1KFIpO2Rve2lmKFYpe2lmKFY9MHxhcltEPj4yXSxGPTB8YXJbKFI9XykrMjA0Pj4yXSwwfChSPTB8YXJbUisyMDg+PjJdKSYmYnUoUiksYXJbWmU+PjJdPUYsYXJbTz4+Ml09UixabChWLFplKSwhKFY9MHxhcltPPj4yXSkpYnJlYWs7ZHUoVil9fXdoaWxlKDApO1I9MHxhcltEPj4yXSxWPTB8YXJbUisxOTY+PjJdLFI9MHxhcltSKzIwMD4+Ml0sKE49MD09KDB8UikpfHxidShSKTtkb3tpZighVil7aWYoVj0wfGFyWyhGPV8pKzE5Nj4+Ml0sRj0wfGFyW0YrMjAwPj4yXSl7YnUoRiksZHUoRiksVj0wIT0oMHxWKTticmVha31WPTAhPSgwfFYpO2JyZWFrfVY9MH13aGlsZSgwKTtOfHxkdShSKTtkb3tpZihWKXtpZihSPTB8YXJbRD4+Ml0sVj0wfGFyWyhGPV8pKzE5Nj4+Ml0sMHwoRj0wfGFyW0YrMjAwPj4yXSkmJmJ1KEYpLGFyW3BlPj4yXT1WLGFyW3o+PjJdPUYsWmwoUixwZSksIShWPTB8YXJbej4+Ml0pKWJyZWFrO2R1KFYpfX13aGlsZSgwKTtpZihRKXtWPTA7YnJlYWt9ZHUoWSksVj0wfWVsc2UgVj0xOX13aGlsZSgwKTtGPTB8YXJbeT4+Ml19aWYoMHxGJiYoKDB8KFI9MHxhcltTPj4yXSkpIT0oMHxGKSYmKGFyW1M+PjJdPVIrKH4oKFIrLTQtRnwwKT4+PjIpPDwyKSksdnUoRikpLDB8VilicmVha31WPTB9fXdoaWxlKDApO3N3aXRjaCgwfEomJmR1KEopLDB8Vil7Y2FzZSAxOTpjYXNlIDA6YnJlYWs7ZGVmYXVsdDpicmVhayByfX19aWYoVj0wfGFyW0crND4+Ml0pZm9yKEc9VjtWPTB8YXJbRz4+Ml07KUc9VjtlbHNlIGlmKEY9MHxhclsoVj1HKzh8MCk+PjJdLCgwfGFyW0Y+PjJdKT09KDB8RykpRz1GO2Vsc2UgZm9yKDtnZT0wfGFyW1Y+PjJdLEc9MHxhclsoVj1nZSs4fDApPj4yXSwoMHxhcltHPj4yXSkhPSgwfGdlKTspO313aGlsZSgoMHxHKSE9KDB8VykpfX19d2hpbGUoMCk7aWYoVj0wfGFyW0k+PjJdLFQ9MHxhcltaPj4yXSwoMHxWKT09KDB8VCkpRz1BKzh8MDtlbHNle1U9RWUrNHwwLFM9NCtwfDAsTz04K0V8MCx6PTQrRXwwLGo9MTErRXwwLEg9NCtYfDAseD04K0J8MCxQPTQrQnwwLEw9MTErQnwwLHE9KEs9QmUrOHwwKSsxMXwwLCQ9eWUrMTF8MCxBQT0xMSt5fDAsRz1BKzh8MDtkb3tmb3IoRj0wfGFyW1Y+PjJdLGhvKHksMHxhcltnPj4yXSxGKSx3byh5ZSwwfGFyW2c+PjJdLEYpLE09MHxodSg1MiksYXJbTSs0Pj4yXT0wLGFyW00rOD4+Ml09MCxhcltNPj4yXT02NDIwLFI9TSsxMnwwLHJBPShpQT1NKzE2fDApKzM2fDA7KChhcltpQT4+Ml09MCl8KGlBPWlBKzR8MCkpPCgwfHJBKTspO2FyWyhEPVIpPj4yXT1GLEV1KE0rMTZ8MCx5KSxFdShNKzI4fDAseWUpLG1vKEJlLDB8YXJbZz4+Ml0sRixNKzQwfDApO2Rve2lmKDB8YXJbQmU+PjJdKXBlPTB8YXJbKFplPUJlKSs0Pj4yXSxhclsoRj1BKT4+Ml09YXJbWmU+PjJdLGFyW0YrND4+Ml09cGUsYXJbRz4+Ml09YXJbSz4+Ml0sYXJbRys0Pj4yXT1hcltLKzQ+PjJdLGFyW0crOD4+Ml09YXJbSys4Pj4yXSxhcltLPj4yXT0wLGFyW0srND4+Ml09MCxhcltLKzg+PjJdPTAsRj0xO2Vsc2V7aWYoaGUpe2lmKGlvKEVlLGtlLEYpLFI9MHxhcltFZT4+Ml0sUT0wfGFyW1U+PjJdLCgwfFIpPT0oMHxRKSlGPTIyO2Vsc2V7Zm9yKDs7KXtpZigxNjY3NTI3NTIzPT0oMHxhcltSKzIwPj4yXSkpe0dlKHAsUis1MnwwKSxGPTB8YXJbcD4+Ml07cjpkb3tpZig0PT0oKDB8YXJbUz4+Ml0pLUZ8MCkpe1k9MHxhcltGPj4yXSxOPTB8YXJbVz4+Ml07ZG97aWYoMHxOKXtGPVc7aTpmb3IoOzspe2ZvcihfPU47ISgoMHxhcltfKzE2Pj4yXSk+Pj4wPj1ZPj4+MCk7KXtpZighKE49MHxhcltfKzQ+PjJdKSlicmVhayBpO189Tn1pZighKE49MHxhcltfPj4yXSkpe0Y9XzticmVha31GPV99aWYoKDB8Rik9PSgwfFcpKWJyZWFrO2lmKFk+Pj4wPCgwfGFyW0YrMTY+PjJdKT4+PjApYnJlYWs7aWYoRj0wfGFyW0YrMjA+PjJdLGFyW1g+PjJdPUQsYnUoYXJbSD4+Ml09TSksKF89MHxhclsoTj1GKzE4OHwwKT4+Ml0pPj4+MDwoMHxhcltGKzE5Mj4+Ml0pPj4+MCl7YXJbXz4+Ml09YXJbWD4+Ml0sYXJbXys0Pj4yXT1hcltIPj4yXSxhcltYPj4yXT0wLGFyW0g+PjJdPTAsYXJbTj4+Ml09Xys4LEY9MDticmVhayByfWlmKEJsKEYrMTg0fDAsWCksIShGPTB8YXJbSD4+Ml0pKXtGPTA7YnJlYWsgcn1kdShGKSxGPTA7YnJlYWsgcn19d2hpbGUoMCk7Zm9yKGFyW0U+PjJdPTAsYXJbNCtFPj4yXT0wLGFyWzgrRT4+Ml09MCxGPTB8aHUoNDgpLGFyW0U+PjJdPUYsYXJbTz4+Ml09LTIxNDc0ODM2MDAsYXJbej4+Ml09MzksZUE9MzEwNjMsckE9KGlBPUYpKzM5fDA7dHJbaUE+PjBdPTB8dHJbZUE+PjBdLGVBPWVBKzF8MCwoMHwoaUE9aUErMXwwKSk8KDB8ckEpOyk7aWYodHJbRiszOT4+MF09MCxvbyhBLDIsMmUzLEUpLDA8PSgwfHRyW2o+PjBdKSl7Rj0xO2JyZWFrfXZ1KDB8YXJbRT4+Ml0pLEY9MX1lbHNle2ZvcihhcltCPj4yXT0wLGFyWzQrQj4+Ml09MCxhcls4K0I+PjJdPTAsRj0wfGh1KDQ4KSxhcltCPj4yXT1GLGFyW3g+PjJdPS0yMTQ3NDgzNjAwLGFyW1A+PjJdPTQwLGVBPTMxMDIyLHJBPShpQT1GKSs0MHwwO3RyW2lBPj4wXT0wfHRyW2VBPj4wXSxlQT1lQSsxfDAsKDB8KGlBPWlBKzF8MCkpPCgwfHJBKTspO2lmKHRyW0YrNDA+PjBdPTAsb28oQSwyLDAsQiksMDw9KDB8dHJbTD4+MF0pKXtGPTE7YnJlYWt9dnUoMHxhcltCPj4yXSksRj0xfX13aGlsZSgwKTtpZigwfChOPTB8YXJbcD4+Ml0pJiYoKDB8KF89MHxhcltTPj4yXSkpIT0oMHxOKSYmKGFyW1M+PjJdPV8rKH4oKF8rLTQtTnwwKT4+PjIpPDwyKSksdnUoTikpLDB8Ril7Rj0xO2JyZWFrfX1pZigoMHwoUj1SKzY0fDApKT09KDB8USkpe0Y9MjI7YnJlYWt9fVI9MHxhcltFZT4+Ml19aWYoSj0yMj09KDB8RiksMHxSKXtpZigoMHwoTj0wfGFyW1U+PjJdKSkhPSgwfFIpKXtmb3IoO189TistNjR8MCxhcltVPj4yXT1fLDB8KFk9MHxhcltOKy0xMj4+Ml0pJiYoKDB8KEQ9MHxhclsoUT1OKy04fDApPj4yXSkpIT0oMHxZKSYmKGFyW1E+PjJdPUQrKH4oKEQrLTQtWXwwKT4+PjIpPDwyKSksdnUoWSkpLGFyW18+PjJdPTQyNjQsMHwoXz0wfGFyW04rLTQwPj4yXSkmJigoMHxhclsoTj1OKy0zNnwwKT4+Ml0pIT0oMHxfKSYmKGFyW04+PjJdPV8pLHZ1KF8pKSwoMHwoTj0wfGFyW1U+PjJdKSkhPSgwfFIpOyk7Uj0wfGFyW0VlPj4yXX12dShSKX1pZighSilicmVha31GPTB9fXdoaWxlKDApO2lmKCgwfHRyW3E+PjBdKTwwJiZ2dSgwfGFyW0s+PjJdKSxkdShNKSwoMHx0clskPj4wXSk8MCYmdnUoMHxhclt5ZT4+Ml0pLCgwfHRyW0FBPj4wXSk8MCYmdnUoMHxhclt5Pj4yXSksVj1WKzR8MCwwfEYpYnJlYWsgZX13aGlsZSgoMHxWKSE9KDB8VCkpfUJlPTB8YXJbKHllPTU2NTkyKSs0Pj4yXSxhclsoRWU9QSk+PjJdPWFyW3llPj4yXSxhcltFZSs0Pj4yXT1CZSx5dShHLDU2NjAwKX19d2hpbGUoMCk7dmV8fGR1KHdlKX1lbHNle2ZvcihhcltxPj4yXT0wLGFyW3ErND4+Ml09MCxhcltxKzg+PjJdPTAsRz0wfGh1KDQ4KSxhcltxPj4yXT1HLGFyW3ErOD4+Ml09LTIxNDc0ODM2MDAsYXJbcSs0Pj4yXT00MixlQT0zMDMyMyxyQT0oaUE9RykrNDJ8MDt0cltpQT4+MF09MHx0cltlQT4+MF0sZUE9ZUErMXwwLCgwfChpQT1pQSsxfDApKTwoMHxyQSk7KTt0cltHKzQyPj4wXT0wLG9vKEEsMiwyZTMscSksKDB8dHJbcSsxMT4+MF0pPDAmJnZ1KDB8YXJbcT4+Ml0pfX13aGlsZSgwKTtpZighKEE9MHxhcltJPj4yXSkpcmV0dXJuIHVyPUM7KDB8KEc9MHxhcltaPj4yXSkpIT0oMHxBKSYmKGFyW1o+PjJdPUcrKH4oKEcrLTQtQXwwKT4+PjIpPDwyKSk7dnUoQSksdXI9Q30oQSxlKSwwPD0oMHx0cltvKzgrMTE+PjBdKSlyZXR1cm4gdXI9YTt2dSgwfGFyW28rOD4+Ml0pLHVyPWF9KGYsMHxhcltlPj4yXSx0PzB8YXJbcj4+Ml06cix0PzB8YXJbcis0Pj4yXToyNTUmbiwxKSxhbyhBLGYsMHxhcltlPj4yXSksdXI9KDA8PSgwfHRyWyhBPWYrOHwwKSsxMT4+MF0pfHx2dSgwfGFyW0E+PjJdKSxpKX0sZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MCxyfD0wO3ZhciBpLGYsbj0wLHQ9MCxvPTA7aWYodXI9KGY9dXIpKzMyfDAsbj0oaT1mKSsyMHwwLHQ9Zis4fDAsbz0wfG9BKCksIWUpcmV0dXJuIGFyW0E+PjJdPW8saUEoKG89MCl8byksdm9pZCh1cj1mKTshZnVuY3Rpb24oQSxlLHIsaSl7QXw9MCxlfD0wLHJ8PTA7dmFyIGYsbix0LG8sYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTA7aWYodXI9KG89dXIpKzY0fDAsdD1vKzQ0fDAsYT1vKzMyfDAsZj1vKzEyfDAsYj1vLCEoaXw9MCkpcmV0dXJuIGFyW2E+PjJdPTAsYXJbYSs0Pj4yXT0wLGFyW2ErOD4+Ml09MCxvbyh0LDUsMjAwMSxhKSwoMHx0clthKzExPj4wXSk8MCYmdnUoMHxhclthPj4yXSksYW8oQSx0LDB8YXJbZT4+Ml0pLCgwfHRyWyhhPTgrdHwwKSsxMT4+MF0pPDAmJnZ1KDB8YXJbYT4+Ml0pLHVyPW87c2wodCw0MCsoMHxhcltlPj4yXSl8MCksYT0wfGFyW3Q+PjJdLGM9MHxhclsobj00K3R8MCk+PjJdO0E6ZG97aWYoKDB8YSkhPSgwfGMpKXtmb3IoO2w9MHxhclthPj4yXSwoMHxhcltsKzIwPj4yXSkhPSgwfHIpOylpZigoMHwoYT1hKzh8MCkpPT0oMHxjKSl7YT0wLHM9MTM7YnJlYWsgQX11PWwsYz0wfGFyW2ErND4+Ml0sMHwoYT1jKSYmYnUoYyksbD8ocj0wfGh1KDE2KSxhcltyPj4yXT0wLGFyW3IrND4+Ml09MCxhcltyKzg+PjJdPTAsYXJbcisxMj4+Ml09MCxhcltpPj4yXT1yLGM/KGJ1KGMpLGM9MHxhclsoYj1yKzR8MCk+PjJdLGFyW3I+PjJdPXUsYXJbYj4+Ml09YSwwfGMmJmR1KGMpKTooYXJbcj4+Ml09dSxhcltyKzQ+PjJdPWEpLGM9MHxhcltpPj4yXSxyPTB8YXJbZT4+Ml0sMHwobD0wfGFyW2UrND4+Ml0pJiZidShsKSxhcltjKzg+PjJdPXIsYz0wfGFyWyhpPWMrMTJ8MCk+PjJdLGFyW2k+PjJdPWwsMHxjJiZkdShjKSxhbyhBLDU2NTkyLDB8YXJbZT4+Ml0pKTpzPTEzfWVsc2UgYT0wLHM9MTN9d2hpbGUoMCk7MTM9PSgwfHMpJiYoYXJbYj4+Ml09MCxhcltiKzQ+PjJdPTAsYXJbYis4Pj4yXT0wLG9vKGYsNSwyZTMsYiksKDB8dHJbYisxMT4+MF0pPDAmJnZ1KDB8YXJbYj4+Ml0pLGFvKEEsZiwwfGFyW2U+PjJdKSwoMHx0clsoYz04K2Z8MCkrMTE+PjBdKTwwJiZ2dSgwfGFyW2M+PjJdKSk7MHxhJiZkdShhKTtpZigwfChhPTB8YXJbdD4+Ml0pKXtpZigoMHwoYz0wfGFyW24+PjJdKSkhPSgwfGEpKXtmb3IoO3I9YystOHwwLGFyW24+PjJdPXIsKDB8KGM9KGM9MHxhcltjKy00Pj4yXSk/KGR1KGMpLDB8YXJbbj4+Ml0pOnIpKSE9KDB8YSk7KTthPTB8YXJbdD4+Ml19dnUoYSl9dXI9b30odCxlLHIsbiksdD0wfGFyW3Q+PjJdPyhuPTB8aHUoMTIpLGFyW24+PjJdPWFyW3Q+PjJdLGFyW24rND4+Ml09YXJbdCs0Pj4yXSxhcltuKzg+PjJdPWFyW3QrOD4+Ml0sYXJbaT4+Ml09biwwfGNBKDEzOTIsMHxpKSk6KGFyW2k+PjJdPWFyW24+PjJdLDB8Y0EoMTMyMCwwfGkpKSxhcltBPj4yXT10LGlBKDB8byksdXI9Zn0sZnVuY3Rpb24oQSxlLHIpe3J8PTAsYXJbKGV8PTApKygwfGFyWyhBfD0wKT4+Ml0pPj4yXT1yfSxmdW5jdGlvbihBLGUscil7cnw9MCxhclsoZXw9MCkrKDB8YXJbKEF8PTApPj4yXSk+PjJdPXJ9LGZ1bmN0aW9uKEEsZSxyKXtzcig0NDQ1NiwzNTEzNyw1MSwzNTE1Myl9LGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTA7dmFyIGk9MCxmPTAsbj0wLHQ9MDtpZigwPCgwfChyfD0wKSkpe2Y9MDtkb3tmb3Iobj0wfGJyKGYsciksaT0wO2FyW0ErKCh0PWkrbnwwKTw8Mik+PjJdPW9yW2UrKHQ8PDEpPj4xXSwoMHwoaT1pKzF8MCkpIT0oMHxyKTspO2Y9ZisxfDB9d2hpbGUoKDB8ZikhPSgwfHIpKX19LGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTA7dmFyIGk9MCxmPTAsbj0wLHQ9MCxvPTA7aWYoMDwoMHwocnw9MCkpKXtmPTA7ZG97Zm9yKHQ9MHxicihmLHIpLG49aT0wO2k9KDB8b3JbZSsoKG89bit0fDApPDwxKT4+MV0pK2l8MCxhcltBKyhvPDwyKT4+Ml09aSwoMHwobj1uKzF8MCkpIT0oMHxyKTspO2Y9ZisxfDB9d2hpbGUoKDB8ZikhPSgwfHIpKX19LGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTA7dmFyIGk9MCxmPTAsbj0wLHQ9MDtpZigwPCgwfChyfD0wKSkpe2Y9MDtkb3tmb3Iobj1pPTA7dD0oMHxicihuLHIpKStmfDAsaT0oMHxvcltlKyh0PDwxKT4+MV0pK2l8MCxhcltBKyh0PDwyKT4+Ml09aSwoMHwobj1uKzF8MCkpIT0oMHxyKTspO2Y9ZisxfDB9d2hpbGUoKDB8ZikhPSgwfHIpKX19LGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTAscnw9MDt2YXIgaSxmLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MDtmb3IodXI9KGY9dXIpKzMyfDAsaT1mLG49MDt0PTB8b3JbZSsobjw8MSk+PjFdLGw9KDc0KihvPTB8b3JbZSsobis0PDwxKT4+MV0pfDApKygyOSp0fDApKyg4NCooYT0wfG9yW2UrKG4rODw8MSk+PjFdKXwwKSsoNTUqKGM9MHxvcltlKyhuKzEyPDwxKT4+MV0pfDApKzY0Pj43LG9yW2krKG48PDEpPj4xXT0oMHxsKTwtMzI3Njg/LTMyNzY4OjY1NTM1JigoMHxsKTwzMjc2Nz9sOjMyNzY3KSxsPSgwfGJyKGMsLTg0KSkrKCgwfGJyKGEsLTI5KSkrKCg3NCpvfDApKyg1NSp0fDApKSkrNjQ+Pjcsb3JbaSs4KyhuPDwxKT4+MV09KDB8bCk8LTMyNzY4Py0zMjc2ODo2NTUzNSYoKDB8bCk8MzI3Njc/bDozMjc2NyksbD0oNzQqY3wwKSsoKDB8YnIoYSwtNzQpKSsoNzQqdHwwKSkrNjQ+Pjcsb3JbaSsxNisobjw8MSk+PjFdPSgwfGwpPC0zMjc2OD8tMzI3Njg6NjU1MzUmKCgwfGwpPDMyNzY3P2w6MzI3NjcpLHQ9KDB8YnIoYywtMjkpKSsoKDU1KmF8MCkrKCgwfGJyKG8sLTc0KSkrKDg0KnR8MCkpKSs2ND4+NyxvcltpKzI0KyhuPDwxKT4+MV09KDB8dCk8LTMyNzY4Py0zMjc2ODo2NTUzNSYoKDB8dCk8MzI3Njc/dDozMjc2NyksNCE9KDB8KG49bisxfDApKTspO2ZvcihuPTA7bD0wfGJyKG4sciksYz0wfG9yW2krKG48PDMpPj4xXSx1PSg3NCooYT0wfG9yW2krKG48PDMpKzI+PjFdKXwwKSsoMjkqY3wwKSsoODQqKG89MHxvcltpKyhuPDwzKSs0Pj4xXSl8MCkrKDU1Kih0PTB8b3JbaSsobjw8MykrNj4+MV0pfDApKzIwNDg+PjEyLHU9KDB8Y3JbKGU9QStsfDApPj4wXSkrKCgwfHUpPC0zMjc2OD8tMzI3Njg6KDB8dSk8MzI3Njc/dTozMjc2Nyl8MCx0cltlPj4wXT0oMHx1KTwwPzA6MjU1JigoMHx1KTwyNTU/dToyNTUpLGU9KDB8YnIodCwtODQpKSsoKDB8YnIobywtMjkpKSsoKDc0KmF8MCkrKDU1KmN8MCkpKSsyMDQ4Pj4xMixlPSgwfGNyWyh1PUErKGwrMSl8MCk+PjBdKSsoKDB8ZSk8LTMyNzY4Py0zMjc2ODooMHxlKTwzMjc2Nz9lOjMyNzY3KXwwLHRyW3U+PjBdPSgwfGUpPDA/MDoyNTUmKCgwfGUpPDI1NT9lOjI1NSksdT0oNzQqdHwwKSsoKDB8YnIobywtNzQpKSsoNzQqY3wwKSkrMjA0OD4+MTIsdT0oMHxjclsoZT1BKyhsKzIpfDApPj4wXSkrKCgwfHUpPC0zMjc2OD8tMzI3Njg6KDB8dSk8MzI3Njc/dTozMjc2Nyl8MCx0cltlPj4wXT0oMHx1KTwwPzA6MjU1JigoMHx1KTwyNTU/dToyNTUpLGM9KDB8YnIodCwtMjkpKSsoKDU1Km98MCkrKCgwfGJyKGEsLTc0KSkrKDg0KmN8MCkpKSsyMDQ4Pj4xMixjPSgwfGNyWyhsPUErKGwrMyl8MCk+PjBdKSsoKDB8Yyk8LTMyNzY4Py0zMjc2ODooMHxjKTwzMjc2Nz9jOjMyNzY3KXwwLHRyW2w+PjBdPSgwfGMpPDA/MDoyNTUmKCgwfGMpPDI1NT9jOjI1NSksNCE9KDB8KG49bisxfDApKTspO3VyPWZ9LGZ1bmN0aW9uKEEsZSxyKXtPbyhBfD0wLHJ8PTAsNCxlfD0wLDgpfSxmdW5jdGlvbihBLGUscil7T28oQXw9MCxyfD0wLDgsZXw9MCw4KX0sZnVuY3Rpb24oQSxlLHIpe09vKEF8PTAscnw9MCwxNixlfD0wLDgpfSxmdW5jdGlvbihBLGUscil7T28oQXw9MCxyfD0wLDMyLGV8PTAsOCl9LGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTA7dmFyIGksZixuLHQsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wO2Zvcih1cj0odD11cikrMzJ8MCxuPXQsaT0ocnw9MCk8PDEsZj0zKnJ8MCxvPTA7YT0wfG9yW2UrKG88PDEpPj4xXSxzPSg1NSooYz0wfG9yW2UrKG8rcjw8MSk+PjFdKXwwKSsoMjkqYXwwKSsoNzQqKGw9MHxvcltlKyhpK288PDEpPj4xXSl8MCkrKDg0Kih1PTB8b3JbZSsoZitvPDwxKT4+MV0pfDApKzE+PjEsb3Jbbisobzw8MSk+PjFdPSgwfHMpPC0zMjc2OD8tMzI3Njg6NjU1MzUmKCgwfHMpPDMyNzY3P3M6MzI3NjcpLGI9KHM9KDB8YnIodSwtNzQpKSsoNzQqKGMrYXwwKXwwKXwwKT4+MSxvcltuKyhvKzQ8PDEpPj4xXT0oMHxzKTwtNjU1MzY/LTMyNzY4OjY1NTM1JigoMHxiKTwzMjc2Nz9iOjMyNzY3KSxiPSg1NSp1fDApKygoMHxicihsLC03NCkpKygoMHxicihjLC0yOSkpKyg4NCphfDApKSkrMT4+MSxvcltuKyhvKzg8PDEpPj4xXT0oMHxiKTwtMzI3Njg/LTMyNzY4OjY1NTM1JigoMHxiKTwzMjc2Nz9iOjMyNzY3KSxhPSgwfGJyKHUsLTI5KSkrKCg3NCpsfDApKygoMHxicihjLC04NCkpKyg1NSphfDApKSkrMT4+MSxvcltuKyhvKzEyPDwxKT4+MV09KDB8YSk8LTMyNzY4Py0zMjc2ODo2NTUzNSYoKDB8YSk8MzI3Njc/YTozMjc2NyksNCE9KDB8KG89bysxfDApKTspO2ZvcihvPTA7Yj0wfG9yW24rKChzPW88PDIpPDwxKT4+MV0sdT0wfG9yW24rKCgxfHMpPDwxKT4+MV0sbD0wfG9yW24rKCgyfHMpPDwxKT4+MV0sYz0wfG9yW24rKCgzfHMpPDwxKT4+MV0sb3JbQSsoczw8MSk+PjFdPSgoNTUqdXwwKSsoMjkqYnwwKSsoNzQqbHwwKSsoODQqY3wwKSsxMjh8MCk+Pj44LGE9KCgwfGJyKGMsLTc0KSkrKDc0Kih1K2J8MCl8MCkrMTI4fDApPj4+OCY2NTUzNSxvcltBKygoMXxzKTw8MSk+PjFdPWEsYT0oKDU1KmN8MCkrKCgwfGJyKGwsLTc0KSkrKCgwfGJyKHUsLTI5KSkrKDg0KmJ8MCkpKSsxMjh8MCk+Pj44JjY1NTM1LG9yW0ErKCgyfHMpPDwxKT4+MV09YSxiPSgoMHxicihjLC0yOSkpKygoNzQqbHwwKSsoKDB8YnIodSwtODQpKSsoNTUqYnwwKSkpKzEyOHwwKT4+PjgmNjU1MzUsb3JbQSsoKDN8cyk8PDEpPj4xXT1iLDQhPSgwfChvPW8rMXwwKSk7KTt1cj10fSxmdW5jdGlvbihBLGUscil7am8oQXw9MCw0LGV8PTAscnw9MCl9LGZ1bmN0aW9uKEEsZSxyKXtqbyhBfD0wLDgsZXw9MCxyfD0wKX0sZnVuY3Rpb24oQSxlLHIpe2pvKEF8PTAsMTYsZXw9MCxyfD0wKX0sZnVuY3Rpb24oQSxlLHIpe2pvKEF8PTAsMzIsZXw9MCxyfD0wKX0sZnVuY3Rpb24oQSxlLHIpe0F8PTAscnw9MDt2YXIgaSxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTAsZD0wLGs9MCxoPTAsdz0wLHY9MCxtPTAsZz0wO3VyPShpPXVyKSszMnwwLHc9aSxuPTB8b3JbKGV8PTApPj4xXSxvPTB8b3JbZSs0Pj4xXSxjPTB8b3JbZSsyPj4xXSxtPW8rbjw8MTY+PjE2LGE9KGY9MHxvcltlKzY+PjFdKStjPDwxNj4+MTYsb3Jbdz4+MV09YSttLG9yWyhzPXcrMnwwKT4+MV09bS1hLG89bi1vPDwxNj4+MTYsZj1jLWY8PDE2Pj4xNixvclsoYz13KzR8MCk+PjFdPWYrbyxvclsobj13KzZ8MCk+PjFdPW8tZixmPTB8b3JbZSsocjw8MSk+PjFdLG89MHxvcltlKyhyKzI8PDEpPj4xXSxhPTB8b3JbZSsocisxPDwxKT4+MV0sdD1vK2Y8PDE2Pj4xNixnPShtPTB8b3JbZSsociszPDwxKT4+MV0pK2E8PDE2Pj4xNixvclsoaD13Kzh8MCk+PjFdPWcrdCxvclsoYj13KzEwfDApPj4xXT10LWcsbz1mLW88PDE2Pj4xNixtPWEtbTw8MTY+PjE2LG9yWyhhPXcrMTJ8MCk+PjFdPW0rbyxvclsoZj13KzE0fDApPj4xXT1vLW0sbz0wfG9yW2UrKChtPXI8PDEpPDwxKT4+MV0sZz0wfG9yW2UrKG0rMjw8MSk+PjFdLHQ9MHxvcltlKygoMXxtKTw8MSk+PjFdLGQ9KGw9KG09MHxvcltlKyhtKzM8PDEpPj4xXSkrdDw8MTY+PjE2KSsodj1nK288PDE2Pj4xNil8MCxvclt3KzE2Pj4xXT1kLGw9di1sfDAsb3JbdysxOD4+MV09bCxnPW8tZzw8MTY+PjE2LG09dC1tPDwxNj4+MTYsb3JbKHQ9dysyMHwwKT4+MV09bStnLG9yWyhvPXcrMjJ8MCk+PjFdPWctbSxnPTB8b3JbZSsoKG09MypyfDApPDwxKT4+MV0sdj0wfG9yW2UrKG0rMjw8MSk+PjFdLHI9MHxvcltlKyhtKzE8PDEpPj4xXSxrPSh1PShtPTB8b3JbZSsobSszPDwxKT4+MV0pK3I8PDE2Pj4xNikrKGU9ditnPDwxNj4+MTYpfDAsb3JbdysyND4+MV09ayx1PWUtdXwwLG9yW3crMjY+PjFdPXUsZT0obT1yLW08PDE2Pj4xNikrKHY9Zy12PDwxNj4+MTYpfDAsb3JbdysyOD4+MV09ZSxvclsocj13KzMwfDApPj4xXT12LW0sbT0oZD1kPDwxNj4+MTYpKyh3PTB8b3Jbdz4+MV0pPDwxNj4+MTYsdj0oaz1rPDwxNj4+MTYpKyhoPTB8b3JbaD4+MV0pPDwxNj4+MTYsb3JbQT4+MV09dittLG9yW0ErOD4+MV09bS12LGQ9dy1kPDwxNj4+MTYsaz1oLWs8PDE2Pj4xNixvcltBKzE2Pj4xXT1rK2Qsb3JbQSsyND4+MV09ZC1rLGs9KGw9bDw8MTY+PjE2KSsocz0wfG9yW3M+PjFdKTw8MTY+PjE2LGQ9KHU9dTw8MTY+PjE2KSsoYj0wfG9yW2I+PjFdKTw8MTY+PjE2LG9yW0ErMj4+MV09ZCtrLG9yW0ErMTA+PjFdPWstZCxsPXMtbDw8MTY+PjE2LHU9Yi11PDwxNj4+MTYsb3JbQSsxOD4+MV09dStsLG9yW0ErMjY+PjFdPWwtdSxjPTB8b3JbYz4+MV0sdT0odD0wfG9yW3Q+PjFdKStjPDwxNj4+MTYsbD0oZT1lPDwxNj4+MTYpKyhhPTB8b3JbYT4+MV0pPDwxNj4+MTYsb3JbQSs0Pj4xXT1sK3Usb3JbQSsxMj4+MV09dS1sLHQ9Yy10PDwxNj4+MTYsZT1hLWU8PDE2Pj4xNixvcltBKzIwPj4xXT1lK3Qsb3JbQSsyOD4+MV09dC1lLG49MHxvcltuPj4xXSxlPTB8b3Jbbz4+MV0sZj0wfG9yW2Y+PjFdLG89ZStuPDwxNj4+MTYsdD0ocj0wfG9yW3I+PjFdKStmPDwxNj4+MTYsb3JbQSs2Pj4xXT10K28sb3JbQSsxND4+MV09by10LGU9bi1lPDwxNj4+MTYscj1mLXI8PDE2Pj4xNixvcltBKzIyPj4xXT1yK2Usb3JbQSszMD4+MV09ZS1yLHVyPWl9LGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTAscnw9MDt2YXIgaSxmLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wLGQ9MCxrPTAsaD0wLHc9MCx2PTAsbT0wLGc9MCxaPTAscD0wO2Zvcih1cj0oZj11cikrMTI4fDAsaT1mLG49MDtvPTB8YnIobixyKSx3PTB8b3JbZSsobzw8MSk+PjFdLGw9MHxvcltlKyhvKzQ8PDEpPj4xXSxrPTB8b3JbZSsobysxPDwxKT4+MV0sYz0wfG9yW2UrKG8rNTw8MSk+PjFdLHQ9MHxvcltlKyhvKzI8PDEpPj4xXSxhPTB8b3JbZSsobys2PDwxKT4+MV0saD0wfG9yW2UrKG8rMzw8MSk+PjFdLGQ9bCt3PDwxNj4+MTYsdT1hK3Q8PDE2Pj4xNixzPWMrazw8MTY+PjE2LGI9KG89MHxvcltlKyhvKzc8PDEpPj4xXSkraDw8MTY+PjE2LGw9dy1sPDwxNj4+MTYsYT10LWE8PDE2Pj4xNixjPWstYzw8MTY+PjE2LG89aC1vPDwxNj4+MTYsaD11K2Q8PDE2Pj4xNixrPWIrczw8MTY+PjE2LG9yW2krKCh0PW48PDMpPDwxKT4+MV09aytoLG9yW2krKCgxfHQpPDwxKT4+MV09aC1rLHU9ZC11PDwxNj4+MTYsYj1zLWI8PDE2Pj4xNixvcltpKygoMnx0KTw8MSk+PjFdPWIrdSxvcltpKygoM3x0KTw8MSk+PjFdPXUtYixiPWErbDw8MTY+PjE2LHU9bytjPDwxNj4+MTYsb3JbaSsoKDR8dCk8PDEpPj4xXT11K2Isb3JbaSsoKDV8dCk8PDEpPj4xXT1iLXUsYT1sLWE8PDE2Pj4xNixvPWMtbzw8MTY+PjE2LG9yW2krKCg2fHQpPDwxKT4+MV09bythLG9yW2krKCg3fHQpPDwxKT4+MV09YS1vLDghPSgwfChuPW4rMXwwKSk7KTtmb3Iobj0wO3A9MHxvcltpKyhuPDwxKT4+MV0sYj0wfG9yW2krKChhPW4rMzJ8MCk8PDEpPj4xXSxtPTB8b3JbaSsoKHY9bis4fDApPDwxKT4+MV0scz0wfG9yW2krKCh1PW4rNDB8MCk8PDEpPj4xXSxaPTB8b3JbaSsoKHQ9bisxNnwwKTw8MSk+PjFdLGs9MHxvcltpKygoZD1uKzQ4fDApPDwxKT4+MV0sZz0wfG9yW2krKChjPW4rMjR8MCk8PDEpPj4xXSxlPWIrcDw8MTY+PjE2LG89aytaPDwxNj4+MTYscj1zK208PDE2Pj4xNixsPShoPTB8b3JbaSsoKHc9bis1NnwwKTw8MSk+PjFdKStnPDwxNj4+MTYsYj1wLWI8PDE2Pj4xNixrPVotazw8MTY+PjE2LHM9bS1zPDwxNj4+MTYsaD1nLWg8PDE2Pj4xNixnPW8rZTw8MTY+PjE2LG09bCtyPDwxNj4+MTYsb3JbQSsobjw8MSk+PjFdPW0rZyxvcltBKyh2PDwxKT4+MV09Zy1tLG89ZS1vPDwxNj4+MTYsbD1yLWw8PDE2Pj4xNixvcltBKyh0PDwxKT4+MV09bCtvLG9yW0ErKGM8PDEpPj4xXT1vLWwsYz1rK2I8PDE2Pj4xNixsPWgrczw8MTY+PjE2LG9yW0ErKGE8PDEpPj4xXT1sK2Msb3JbQSsodTw8MSk+PjFdPWMtbCxrPWItazw8MTY+PjE2LGg9cy1oPDwxNj4+MTYsb3JbQSsoZDw8MSk+PjFdPWgrayxvcltBKyh3PDwxKT4+MV09ay1oLDghPSgwfChuPW4rMXwwKSk7KTt1cj1mfSxmdW5jdGlvbihBLGUscil7SG8oQXw9MCwxNixlfD0wLHJ8PTApfSxmdW5jdGlvbihBLGUscil7SG8oQXw9MCwzMixlfD0wLHJ8PTApfSxRYixRYixRYixRYixRYixRYixRYixRYixRYixRYixRYixRYixRYixRYixRYixRYixRYixRYixRYixRYixRYixRYixRYixRYixRYixRYixRYixRYixRYl0sdHM9W0RiLGZ1bmN0aW9uKEEsZSxyLGkpe0F8PTAsaXw9MCxyPShyfD0wKSs4fDAsYXNbMTUmYXJbMTYrKDB8YXJbKGV8PTApPj4yXSk+PjJdXShBLGUsMHxhcltyPj4yXSwwfGFyW3IrND4+Ml0sMCxpKX0sZnVuY3Rpb24oQSxlLHIsaSl7QXw9MCxlfD0wLHJ8PTAsaXw9MDt2YXIgZj0wLG49MDtBOmRve2lmKDB8aSl7Zm9yKGY9MDs7KXtpZigoaS1mfDApPj4+MDw0KXtmPTQ7YnJlYWt9aWYobj0oMHxjcltyKyhmKzEpPj4wXSk8PDE2fCgwfGNyW3IrZj4+MF0pPDwyNHwoMHxjcltyKyhmKzIpPj4wXSk8PDh8MHxjcltyKyhmKzMpPj4wXSwoaS0oZj1mKzR8MCl8MCk+Pj4wPG4+Pj4wKXtmPTc7YnJlYWt9aWYoVmUoMHxhcltlPj4yXSxyK2Z8MCxuLDAsMCwwKSxpPj4+MDw9KGY9bitmfDApPj4+MClicmVhayBBfWlmKDQ9PSgwfGYpKXJldHVybiBhcltBPj4yXT1hclsxOTE5XSxhcltBKzQ+PjJdPWFyWzE5MjBdLHZvaWQoYXJbQSs4Pj4yXT1hclsxOTIxXSk7aWYoNz09KDB8ZikpcmV0dXJuIGFyW0E+PjJdPWFyWzE5MTldLGFyW0ErND4+Ml09YXJbMTkyMF0sdm9pZChhcltBKzg+PjJdPWFyWzE5MjFdKX19d2hpbGUoMCk7YXJbQT4+Ml09YXJbMTkwNF0sYXJbQSs0Pj4yXT1hclsxOTA1XSxhcltBKzg+PjJdPWFyWzE5MDZdfSxmdW5jdGlvbihBLGUscixpKXtpfD0wLGFyWyhpPUF8PTApPj4yXT0wLGFyW2krND4+Ml09MCxhclsoaT1BKzh8MCk+PjJdPS0xLGFyW2krND4+Ml09LTF9LGZ1bmN0aW9uKEEsZSxyLGkpe2l8PTAsYXJbKGk9QXw9MCk+PjJdPTAsYXJbaSs0Pj4yXT0wLGFyWyhpPUErOHwwKT4+Ml09LTEsYXJbaSs0Pj4yXT0tMX0sZnVuY3Rpb24oQSxlLHIsaSl7ZXw9MCxyfD0wLGl8PTA7dmFyIGYsbix0LG89MDtmb3IoZj11cj0odD11cikrMzEmLTMyLHVyPXVyKzE2fDAsYXJbKEF8PTApPj4yXT0wLGFyW0ErND4+Ml09MCw0Mjk0OTY3Mjc5PChuPWktcnwoYXJbQSs4Pj4yXT0wKSk+Pj4wJiZwdSgpLG4+Pj4wPDExPyh0cltBKzExPj4wXT1uLG89QSk6KG89MHxodShlPTE2K24mLTE2KSxhcltBPj4yXT1vLGFyW0ErOD4+Ml09LTIxNDc0ODM2NDh8ZSxhcltBKzQ+PjJdPW4pLGU9cixBPW87KDB8ZSkhPSgwfGkpOylRZihBLGUpLGU9ZSsxfDAsQT1BKzF8MDtRZihvK258KHRyW2Y+PjBdPTApLGYpLHVyPXR9LGZ1bmN0aW9uKEEsZSxyLGkpe2V8PTAscnw9MCxpfD0wO3ZhciBmLG4sdCxvPTAsYT0wO2Y9dXI9KHQ9dXIpKzMxJi0zMix1cj11cisxNnwwLGFyWyhBfD0wKT4+Ml09MCxhcltBKzQ+PjJdPTAsMTA3Mzc0MTgwNzwobj1pLXI+PjIpPj4+KGFyW0ErOD4+Ml09MCkmJnB1KCk7ZG97aWYoMjw9bj4+PjApe2lmKCEoMTA3Mzc0MTgyMzwoZT00K24mLTQpPj4+MCkpe2E9MHxodShlPDwyKSxhcltBPj4yXT1hLGFyW0ErOD4+Ml09LTIxNDc0ODM2NDh8ZSxhcltBKzQ+PjJdPW4sbz1yO2JyZWFrfWxBKCl9ZWxzZSB0cltBKzgrMz4+MF09bixvPXIsYT1BfXdoaWxlKDApO2Zvcig7KDB8bykhPSgwfGkpOylsbihhLG8pLG89bys0fDAsYT1hKzR8MDthcltmPj4yXT0wLGxuKGEsZiksdXI9dH0sZnVuY3Rpb24oQSxlLHIsaSl7cnw9MCxpfD0wLDB8eHUoQXw9MCwwfGFyWyhlfD0wKSs4Pj4yXSkmJlB1KDAsZSxyLGkpfSxmdW5jdGlvbihBLGUscixpKXtyfD0wLGl8PTAsMHx4dShBfD0wLDB8YXJbKGV8PTApKzg+PjJdKT9QdSgwLGUscixpKTooQT0wfGFyW0ErOD4+Ml0sdHNbMzEmYXJbMjgrKDB8YXJbQT4+Ml0pPj4yXV0oQSxlLHIsaSkpfSxmdW5jdGlvbihBLGUscixpKXtBfD0wLGV8PTAscnw9MCxpfD0wO3ZhciBmPTAsbj0wO0E6ZG97aWYoMHx4dShBLDB8YXJbZSs4Pj4yXSkpUHUoMCxlLHIsaSk7ZWxzZSBpZihmPUErMTYrKChuPTB8YXJbQSsxMj4+Ml0pPDwzKXwwLEFiKEErMTZ8MCxlLHIsaSksMTwoMHxuKSl7bj1lKzU0fDAsQT1BKzI0fDA7ZG97aWYoQWIoQSxlLHIsaSksMHx0cltuPj4wXSlicmVhayBBO0E9QSs4fDB9d2hpbGUoQT4+PjA8Zj4+PjApfX13aGlsZSgwKX0sZnVuY3Rpb24oQSxlLHIsaSl7QXw9MCxlfD0wLHJ8PTAsaXw9MDt2YXIgZixuLHQsbyxhLGMsbCx1LGI9MCxzPTAsZD0wLGs9MCxoPTAsdz0wLHY9MDtpZih1cj0odT11cikrNjR8MCxsPShvPXUpKzU2fDAsYz11KzUyfDAscz11KzQwfDAsYT11KzM2fDAsdj11KzI0fDAsbj11KzIwfDAsZj11KzE2fDAsdD11KzEyfDAsYj0wfG9BKCksYXJbbD4+Ml09YiwhZSlyZXR1cm4gYXJbQT4+Ml09YixhcltsPj4yXT0wLGlBKCh2PTApfHYpLHZvaWQodXI9dSk7aWYoIWZ1bmN0aW9uKEEsZSxyLGksZixuKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MDt2YXIgdCxvLGEsYzt1cj0oYz11cikrMzJ8MCxhclsodD0obz1jKSsyNHwwKT4+Ml09MCxhclsoYT00K3R8MCk+PjJdPTAsZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCl7QXw9MCxufD0wLHR8PTA7dmFyIG8sYSxjPTAsbD0wLHU9MCxiPTAscz0wLGQ9MDt1cj0oYT11cikrNDh8MCxiPShvPWEpKzQwfDAsdT1hKzMyfDAsZD1hKzIwfDAsWGwobyxlfD0wLHJ8PTAsaXw9MCxmfD0wLDApO2Rve2lmKDB8YXJbbz4+Ml0paT0wfGFyWyhzPW8pKzQ+PjJdLGFyWyhkPUEpPj4yXT1hcltzPj4yXSxhcltkKzQ+PjJdPWksaT1vKzh8MCxhclsoZD1BKzh8MCk+PjJdPWFyW2k+PjJdLGFyW2QrND4+Ml09YXJbaSs0Pj4yXSxhcltkKzg+PjJdPWFyW2krOD4+Ml0sYXJbaT4+Ml09MCxhcltpKzQ+PjJdPTAsYXJbaSs4Pj4yXT0wO2Vsc2V7aWYoOTk9PSgwfGYpJiYoZj0wfGFyWzMyKygwfGFyW2k+PjJdKT4+Ml0pLGM9MHxhcltpPj4yXSxsPTB8YXJbYyszNj4+Ml0scj05OT09KDB8bik/bDpuLGU9dCYmMHx0clt0KzIwPj4wXT84OjAsISgoMHxyKT09KDB8bCkmJigwfGYpPT0oMHxhcltjKzMyPj4yXSl8fChhclt1Pj4yXT0wLGFyWyhjPXUrNHwwKT4+Ml09MCxtZShiLGksZixyLHUsZSksZT0wfGFyW2I+PjJdLHU9MHxhclsocj1iKzR8MCk+PjJdLGFyW2I+PjJdPTAsYXJbcj4+Ml09MCxhcltpPj4yXT1lLGU9MHxhclsoYj1pKzR8MCk+PjJdLGFyW2I+PjJdPXUsMHxlJiYoZHUoZSksMHwocz0wfGFyW3I+PjJdKSkmJmR1KHMpLDB8KGU9MHxhcltjPj4yXSkmJmR1KGUpLDB8YXJbaT4+Ml0pKSl7aWYoYXJbZD4+Ml09MCxhcltkKzQ+PjJdPTAsYXJbZCs4Pj4yXT0wLG9vKEEsNCwzMDAzLGQpLDA8PSgwfHRyW2QrMTE+PjBdKSlicmVhazt2dSgwfGFyW2Q+PjJdKTticmVha31kPTB8YXJbKHM9NTY1OTIpKzQ+PjJdLGFyWyhpPUEpPj4yXT1hcltzPj4yXSxhcltpKzQ+PjJdPWQseXUoQSs4fDAsNTY2MDApfX13aGlsZSgwKTtpZigwPD0oMHx0clsxMSsoZT1vKzh8MCk+PjBdKSlyZXR1cm4gdXI9YTt2dSgwfGFyW2U+PjJdKSx1cj1hfShvLDB8YXJbZSs4Pj4yXSwwfGFyWzIwKygwfGFyW2U+PjJdKT4+Ml0sdCxpLGYsbiksMHxhcltvPj4yXT9hbyhBLG8sMHxhcltlPj4yXSk6KG49MHxodSg4KSxhcltyPj4yXT1uLGk9MHxhclt0Pj4yXSxmPTB8YXJbYT4+Ml0sYXJbdD4+Ml09MCxhclthPj4yXT0wLGFyW24+PjJdPWksYXJbbis0Pj4yXT1mLGFvKEEsNTY1OTIsMHxhcltlPj4yXSkpOygwfHRyWzExKyhBPW8rOHwwKT4+MF0pPDAmJnZ1KDB8YXJbQT4+Ml0pOyhBPTB8YXJbYT4+Ml0pJiZkdShBKSx1cj1jfShzLGUsYyxyLGksMCksMHxhcltzPj4yXSl2PTB8aHUoMTIpLGFyW3Y+PjJdPWFyW3M+PjJdLGFyW3YrND4+Ml09YXJbcys0Pj4yXSxhclt2Kzg+PjJdPWFyW3MrOD4+Ml0sYXJbbz4+Ml09dix2PTB8Y0EoMTM5MiwwfG8pLGFyW0E+PjJdPXY7ZWxzZXtpZihhcltvPj4yXT1jcls0MCsoMHxhcltlPj4yXSk+PjBdLGJsKGwsMjk2MzYsbyksc2wobyw0OCsoMHxhcltlPj4yXSl8MCkscz0oYj0wfGFyWyhpPW8rNHwwKT4+Ml0pLShlPTB8YXJbbz4+Ml0pPj4zLDB8KHI9ZSkpe2lmKCgwfGIpIT0oMHxyKSl7Zm9yKDtlPWIrLTh8MCxhcltpPj4yXT1lLChiPTB8YXJbYistND4+Ml0pJiYoZHUoYiksZT0wfGFyW2k+PjJdKSwoMHxlKSE9KDB8cik7KWI9ZTtlPTB8YXJbbz4+Ml19dnUoZSl9c3dpdGNoKGFyW2E+PjJdPXMsYmwobCwyOTY0NyxhKSxiPTB8YXJbYz4+Ml0sZT0wfFhvKDB8YXJbYj4+Ml0sMCksYXJbbz4+Ml09ZSxmdW5jdGlvbihBLGUscil7ZXw9MCxyfD0wO3ZhciBpLGY7dXI9KGk9dXIpKzE2fDAsZj1pLEE9MHxhclsoQT1BfDApPj4yXSxlPTB8dEEoMHxlKSxhcltmPj4yXT1hcltyPj4yXSxyPTB8Y0EoNDE0NCwwfGYpLGFBKDB8QSwwfGUsMHxyKSxpQSgwfHIpLGlBKDB8ZSksdXI9aX0obCwyOTY1OCxvKSxlPTB8V28oMHxhcltiPj4yXSwwKSxhclthPj4yXT1lLGZ1bmN0aW9uKEEsZSxyKXtlfD0wLHJ8PTA7dmFyIGksZjt1cj0oaT11cikrMTZ8MCxmPWksQT0wfGFyWyhBPUF8MCk+PjJdLGU9MHx0QSgwfGUpLGFyW2Y+PjJdPWFyW3I+PjJdLHI9MHxjQSg0MTQ0LDB8ZiksYUEoMHxBLDB8ZSwwfHIpLGlBKDB8ciksaUEoMHxlKSx1cj1pfShsLDI5NjY0LGEpLGFyW3Y+PjJdPTAsYXJbdis0Pj4yXT0wLGFyW3YrOD4+Ml09MCxhcltuPj4yXT1hclszNisoMHxhcltiPj4yXSk+PjJdLGZ1bmN0aW9uKEEsZSxyKXtlfD0wLHJ8PTA7dmFyIGksZjt1cj0oaT11cikrMTZ8MCxmPWksQT0wfGFyWyhBPUF8MCk+PjJdLGU9MHx0QSgwfGUpLGFyW2Y+PjJdPWFyW3I+PjJdLHI9MHxjQSgxMjQ4LDB8ZiksYUEoMHxBLDB8ZSwwfHIpLGlBKDB8ciksaUEoMHxlKSx1cj1pfShsLDI5NjcxLG4pLGFyW24+PjJdPWFyWzMyKygwfGFyW2I+PjJdKT4+Ml0sZnVuY3Rpb24oQSxlLHIpe2V8PTAscnw9MDt2YXIgaSxmO3VyPShpPXVyKSsxNnwwLGY9aSxBPTB8YXJbKEE9QXwwKT4+Ml0sZT0wfHRBKDB8ZSksYXJbZj4+Ml09YXJbcj4+Ml0scj0wfGNBKDEyNTYsMHxmKSxhQSgwfEEsMHxlLDB8ciksaUEoMHxyKSxpQSgwfGUpLHVyPWl9KGwsMjk2NzgsbiksZT0wfGFyW2I+PjJdLDB8YXJbZSszMj4+Ml0pe2Nhc2UgMDppZihyPWU/MHxGbyhlLDAsbik6YXJbbj4+Ml09MCxoPShlPTB8YXJbYj4+Ml0pPzB8Rm8oZSwxLGYpOmFyW2Y+PjJdPTAsZT0oZT0wfGFyW2I+PjJdKT8wfEZvKGUsMix0KTphclt0Pj4yXT0wLHc9MHxhcltvPj4yXSxkPTB8YXJbYT4+Ml0sVnUodiwoMHxicih+figuNSooMHx3KSsuNSk8PDEsfn4oLjUqKDB8ZCkrLjUpKSkrKDB8YnIoZCx3KSl8MCwwKSx3PSgwfHRyW3YrMTE+PjBdKTwwPzB8YXJbdj4+Ml06dixkPTB8YXJbbz4+Ml0saz0wfGFyW2E+PjJdLCgwfGQpIT0oMHwocz0wfGFyW24+PjJdKSkpe2lmKDA8KDB8aykpZm9yKGk9dyxiPXIscj0wO2hiKDB8aSwwfGIsMHxzKSwoMHwocj1yKzF8MCkpIT0oMHxrKTspaT1pK2R8MCxiPWIrc3wwfWVsc2UgaGIoMHx3LDB8ciwwfGJyKGssZCkpO2lmKGQ9MHxhcltvPj4yXSxrPTB8YXJbYT4+Ml0sYj13KygwfGJyKGssZCkpfDAsaz1+figuNSooMHxrKSsuNSksKDB8KGQ9fn4oLjUqKDB8ZCkrLjUpKSkhPSgwfChzPTB8YXJbZj4+Ml0pKSl7aWYoMDwoMHxrKSlmb3IoaT1iLGI9aCxyPTA7aGIoMHxpLDB8YiwwfHMpLCgwfChyPXIrMXwwKSkhPSgwfGspOylpPWkrZHwwLGI9YitzfDB9ZWxzZSBoYigwfGIsMHxoLDB8YnIoayxkKSk7aWYocj0wfGFyW28+PjJdLGk9MHxhclthPj4yXSxiPTB8YnIoZD1+figuNSooMHxpKSsuNSkscz1+figuNSooMHxyKSsuNSkpLHI9dysoMHxicihpLHIpKStifDAsKDB8cykhPSgwfChpPTB8YXJbdD4+Ml0pKSl7aWYoMDwoMHxkKSlmb3IoYj0wO2hiKDB8ciwwfGUsMHxpKSwoMHwoYj1iKzF8MCkpIT0oMHxkKTspcj1yK3N8MCxlPWUraXwwfWVsc2UgaGIoMHxyLDB8ZSwwfGIpO2JyZWFrO2Nhc2UgMTppZigxMCE9KDB8YXJbZSszNj4+Ml0pJiZzcigyOTY4OSwyOTc1OCwxNDAsMjY0MjYpLGU9MHxGbyhlLDEwLG4pLFZ1KHYsMHxicigzKigwfGFyW28+PjJdKXwwLDB8YXJbYT4+Ml0pLDApLHI9KDB8dHJbdisxMT4+MF0pPDA/MHxhclt2Pj4yXTp2LGQ9MyooMHxhcltvPj4yXSl8MCxzPTB8YXJbYT4+Ml0sKDB8ZCkhPSgwfChpPTB8YXJbbj4+Ml0pKSl7aWYoMDwoMHxzKSlmb3IoYj0wO2hiKDB8ciwwfGUsMHxpKSwoMHwoYj1iKzF8MCkpIT0oMHxzKTspcj1yK2R8MCxlPWUraXwwfWVsc2UgaGIoMHxyLDB8ZSwwfGJyKHMsZCkpO2JyZWFrO2Nhc2UgMjppZigwfGFyW2UrMzY+PjJdJiZzcigyOTc3OCwyOTc1OCwxNTEsMjY0MjYpLGU9MHxGbyhlLDAsbiksVnUodiwwfGJyKDB8YXJbYT4+Ml0sMHxhcltvPj4yXSksMCkscj0oMHx0clt2KzExPj4wXSk8MD8wfGFyW3Y+PjJdOnYsZD0wfGFyW28+PjJdLHM9MHxhclthPj4yXSwoMHxkKSE9KDB8KGk9MHxhcltuPj4yXSkpKXtpZigwPCgwfHMpKWZvcihiPTA7aGIoMHxyLDB8ZSwwfGkpLCgwfChiPWIrMXwwKSkhPSgwfHMpOylyPXIrZHwwLGU9ZStpfDB9ZWxzZSBoYigwfHIsMHxlLDB8YnIocyxkKSl9IWZ1bmN0aW9uKEEsZSxyKXtlfD0wLHJ8PTA7dmFyIGksZixuLHQsbz0wO3VyPShpPXVyKSsxNnwwLGY9aSxBPTB8YXJbKEE9QXwwKT4+Ml0sZT0wfHRBKDB8ZSksbz0wfHRyW3IrMTE+PjBdLG89KHQ9bzw8MjQ+PjI0PDApPzB8YXJbcis0Pj4yXToyNTUmbyxuPTB8eWMobys0fDApLGFyW24+PjJdPW8saGIoNCtufDAsMHwodD8wfGFyW3I+PjJdOnIpLDB8byksYXJbZj4+Ml09bixyPTB8Y0EoMTQwOCwwfGYpLGFBKDB8QSwwfGUsMHxyKSxpQSgwfHIpLGlBKDB8ZSksdXI9aX0obCwyOTg0MCx2KSwwfChlPTB8YXJbYz4+Ml0pJiYoMHwoYj0wfGFyW2UrND4+Ml0pJiZkdShiKSx2dShlKSksYXJbQT4+Ml09YXJbbD4+Ml0sKChhcltsPj4yXT0wKXx0clt2KzExPj4wXSk8MCYmdnUoMHxhclt2Pj4yXSl9dj0wfGFyW2w+PjJdLGlBKDB8diksdXI9dX0sZnVuY3Rpb24oQSxlLHIsaSl7QXw9MCxlfD0wLGl8PTA7dmFyIGYsbix0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTA7aWYoZj0ocnw9MCkrNXwwLG49MTw8ciwzMSE9KDB8cikpe2E9MDtkb3tmb3IoYz1hPDxyLGw9MHxicihhLGkpLG89dD0wO2I9KG89KDIwNDgrKG9yW2UrKHQrYzw8MSk+PjFdPDxmKT4+MTIpK298MCkrKDB8Y3JbKHU9QSsodCtsKXwwKT4+MF0pfDAsdHJbdT4+MF09KDB8Yik8MD8wOjI1NSYoKDB8Yik8MjU1P2I6MjU1KSwoMHwodD10KzF8MCkpPCgwfG4pOyk7YT1hKzF8MH13aGlsZSgoMHxhKTwoMHxuKSl9fSxmdW5jdGlvbihBLGUscixpKXtBfD0wLGV8PTAsaXw9MDt2YXIgZixuLHQ9MCxvPTAsYT0wLGM9MCxsPTA7aWYoZj0ocnw9MCkrNXwwLG49MTw8ciwzMSE9KDB8cikpe2E9MDtkb3tmb3Iobz10PTA7bz0oMjA0OCsob3JbZSsoKHQ8PHIpK2E8PDEpPj4xXTw8Zik+PjEyKStvfDAsYz1BKygoMHxicih0LGkpKSthKXwwLGw9bysoMHxjcltjPj4wXSl8MCx0cltjPj4wXT0oMHxsKTwwPzA6MjU1JigoMHxsKTwyNTU/bDoyNTUpLCgwfCh0PXQrMXwwKSk8KDB8bik7KTthPWErMXwwfXdoaWxlKCgwfGEpPCgwfG4pKX19LGZ1bmN0aW9uKEEsZSxyLGkpe3NyKDQ0NDU2LDM1MTM3LDY4LDM1MTc5KX0sZnVuY3Rpb24oQSxlLHIsaSl7QXw9MCxlfD0wLHJ8PTA7dmFyIGYsbix0LG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wO2Zvcih1cj0odD11cikrMzJ8MCxmPXQsYT0obj0yMC0oaXw9MCl8MCktMXwwLG89MDtjPTB8b3JbZSsobzw8MSk+PjFdLHM9KDc0KihsPTB8b3JbZSsobys0PDwxKT4+MV0pfDApKygyOSpjfDApKyg4NCoodT0wfG9yW2UrKG8rODw8MSk+PjFdKXwwKSsoNTUqKGI9MHxvcltlKyhvKzEyPDwxKT4+MV0pfDApKzY0Pj43LG9yW2YrKG88PDEpPj4xXT0oMHxzKTwtMzI3Njg/LTMyNzY4OjY1NTM1JigoMHxzKTwzMjc2Nz9zOjMyNzY3KSxzPSgwfGJyKGIsLTg0KSkrKCgwfGJyKHUsLTI5KSkrKCg3NCpsfDApKyg1NSpjfDApKSkrNjQ+Pjcsb3JbZis4KyhvPDwxKT4+MV09KDB8cyk8LTMyNzY4Py0zMjc2ODo2NTUzNSYoKDB8cyk8MzI3Njc/czozMjc2Nykscz0oNzQqYnwwKSsoKDB8YnIodSwtNzQpKSsoNzQqY3wwKSkrNjQ+Pjcsb3JbZisxNisobzw8MSk+PjFdPSgwfHMpPC0zMjc2OD8tMzI3Njg6NjU1MzUmKCgwfHMpPDMyNzY3P3M6MzI3NjcpLGM9KDB8YnIoYiwtMjkpKSsoKDU1KnV8MCkrKCgwfGJyKGwsLTc0KSkrKDg0KmN8MCkpKSs2ND4+NyxvcltmKzI0KyhvPDwxKT4+MV09KDB8Yyk8LTMyNzY4Py0zMjc2ODo2NTUzNSYoKDB8Yyk8MzI3Njc/YzozMjc2NyksNCE9KDB8KG89bysxfDApKTspO2ZvcihjPTE8PGEsYT0oZT0xPDxpKSs2NTUzNXwwLG89MDtzPTB8YnIobyxyKSxiPTB8b3JbZisobzw8Myk+PjFdLGs9KDc0Kih1PTB8b3JbZisobzw8MykrMj4+MV0pfDApKygyOSpifDApKyg4NCoobD0wfG9yW2YrKG88PDMpKzQ+PjFdKXwwKSsoNTUqKGk9MHxvcltmKyhvPDwzKSs2Pj4xXSl8MCkrYz4+bixrPSgwfGxyWyhkPUErKHM8PDEpfDApPj4xXSkrKCgwfGspPC0zMjc2OD8tMzI3Njg6KDB8ayk8MzI3Njc/azozMjc2Nyl8MCxvcltkPj4xXT0oMHxrKTwwPzA6NjU1MzUmKCgwfGspPCgwfGUpP2s6YSksZD0oMHxicihpLC04NCkpKygoMHxicihsLC0yOSkpKygoNzQqdXwwKSsoNTUqYnwwKSkpK2M+Pm4sZD0oMHxsclsoaz1BKyhzKzE8PDEpfDApPj4xXSkrKCgwfGQpPC0zMjc2OD8tMzI3Njg6KDB8ZCk8MzI3Njc/ZDozMjc2Nyl8MCxvcltrPj4xXT0oMHxkKTwwPzA6NjU1MzUmKCgwfGQpPCgwfGUpP2Q6YSksaz0oNzQqaXwwKSsoKDB8YnIobCwtNzQpKSsoNzQqYnwwKSkrYz4+bixrPSgwfGxyWyhkPUErKHMrMjw8MSl8MCk+PjFdKSsoKDB8ayk8LTMyNzY4Py0zMjc2ODooMHxrKTwzMjc2Nz9rOjMyNzY3KXwwLG9yW2Q+PjFdPSgwfGspPDA/MDo2NTUzNSYoKDB8ayk8KDB8ZSk/azphKSxiPSgwfGJyKGksLTI5KSkrKCg1NSpsfDApKygoMHxicih1LC03NCkpKyg4NCpifDApKSkrYz4+bixiPSgwfGxyWyhzPUErKHMrMzw8MSl8MCk+PjFdKSsoKDB8Yik8LTMyNzY4Py0zMjc2ODooMHxiKTwzMjc2Nz9iOjMyNzY3KXwwLG9yW3M+PjFdPSgwfGIpPDA/MDo2NTUzNSYoKDB8Yik8KDB8ZSk/YjphKSw0IT0oMHwobz1vKzF8MCkpOyk7dXI9dH0sZnVuY3Rpb24oQSxlLHIsaSl7em8oQXw9MCxyfD0wLDQsZXw9MCxpfD0wKX0sZnVuY3Rpb24oQSxlLHIsaSl7em8oQXw9MCxyfD0wLDgsZXw9MCxpfD0wKX0sZnVuY3Rpb24oQSxlLHIsaSl7em8oQXw9MCxyfD0wLDE2LGV8PTAsaXw9MCl9LGZ1bmN0aW9uKEEsZSxyLGkpe3pvKEF8PTAscnw9MCwzMixlfD0wLGl8PTApfSxmdW5jdGlvbihBLGUscixpKXtBfD0wLGV8PTA7dmFyIGYsbix0LG8sYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTAsZD0wO2Zvcih1cj0obz11cikrMzJ8MCx0PW8sYz0ocnw9MCkrLTF8MCxmPShhPTE8PChpfD0wKSkrNjU1MzV8MCxuPTAtYXwwLGk9MDtsPTB8b3JbZSsoaTw8MSk+PjFdLGQ9KDc0Kih1PTB8b3JbZSsoaSs0PDwxKT4+MV0pfDApKygyOSpsfDApKyg4NCooYj0wfG9yW2UrKGkrODw8MSk+PjFdKXwwKSsoNTUqKHM9MHxvcltlKyhpKzEyPDwxKT4+MV0pfDApKzY0Pj43LG9yW3QrKGk8PDEpPj4xXT0oMHxkKTwoMHxuKT9uOigwfGQpPCgwfGEpP2Q6ZixkPSgwfGJyKHMsLTg0KSkrKCgwfGJyKGIsLTI5KSkrKCg3NCp1fDApKyg1NSpsfDApKSkrNjQ+Pjcsb3JbdCs4KyhpPDwxKT4+MV09KDB8ZCk8KDB8bik/bjooMHxkKTwoMHxhKT9kOmYsZD0oNzQqc3wwKSsoKDB8YnIoYiwtNzQpKSsoNzQqbHwwKSkrNjQ+Pjcsb3JbdCsxNisoaTw8MSk+PjFdPSgwfGQpPCgwfG4pP246KDB8ZCk8KDB8YSk/ZDpmLGw9KDB8YnIocywtMjkpKSsoKDU1KmJ8MCkrKCgwfGJyKHUsLTc0KSkrKDg0Kmx8MCkpKSs2ND4+Nyxvclt0KzI0KyhpPDwxKT4+MV09KDB8bCk8KDB8bik/bjooMHxsKTwoMHxhKT9sOmYsNCE9KDB8KGk9aSsxfDApKTspO2ZvcihhPTE8PGMsaT0wO2Q9aTw8MixzPTB8b3JbdCsoaTw8Myk+PjFdLGM9NzQqKGI9MHxvclt0KyhpPDwzKSsyPj4xXSl8MCx1PTB8b3JbdCsoaTw8MykrND4+MV0sbD0wfG9yW3QrKGk8PDMpKzY+PjFdLGFyW0ErKGQ8PDIpPj4yXT0oNTUqbHwwKSsoKDg0KnV8MCkrKGMrKDI5KnN8MCkpKSthPj5yLGM9KDB8YnIobCwtODQpKSsoKDB8YnIodSwtMjkpKSsoYysoNTUqc3wwKSkpK2E+PnIsYXJbQSsoKDF8ZCk8PDIpPj4yXT1jLGM9KDc0Kmx8MCkrKCgwfGJyKHUsLTc0KSkrKDc0KnN8MCkpK2E+PnIsYXJbQSsoKDJ8ZCk8PDIpPj4yXT1jLHM9KDB8YnIobCwtMjkpKSsoKDU1KnV8MCkrKCgwfGJyKGIsLTc0KSkrKDg0KnN8MCkpKSthPj5yLGFyW0ErKCgzfGQpPDwyKT4+Ml09cyw0IT0oMHwoaT1pKzF8MCkpOyk7dXI9b30sZnVuY3Rpb24oQSxlLHIsaSl7U28oQXw9MCw0LGV8PTAscnw9MCxpfD0wKX0sZnVuY3Rpb24oQSxlLHIsaSl7U28oQXw9MCw4LGV8PTAscnw9MCxpfD0wKX0sZnVuY3Rpb24oQSxlLHIsaSl7U28oQXw9MCwxNixlfD0wLHJ8PTAsaXw9MCl9LGZ1bmN0aW9uKEEsZSxyLGkpe1NvKEF8PTAsMzIsZXw9MCxyfD0wLGl8PTApfSxEYixEYixEYixEYixEYixEYixEYixEYl0sb3M9W0piLGZ1bmN0aW9uKEEsZSxyLGksZil7QXw9MCxlfD0wLGl8PTAsZnw9MDt2YXIgbix0LG8sYT0wLGM9MCxsPTAsdT0wLGI9MDtpZih1cj0obz11cikrNjR8MCx0PW8rMzZ8MCxuPW8rNDh8MCx1PW8sMT09KDB8YXJbKHJ8PTApPj4yXSkmJjM9PSgwfGFyW3IrND4+Ml0pJiY4PT0oMHxhcltyKzEyPj4yXSkpcmV0dXJuIGFyW3Q+PjJdPTAsYXJbKGI9NCt0fDApPj4yXT0wLGE9KGFyWzgrdD4+Ml09MCk9PSgwfHRyWyhmPXIrOHwwKT4+MF0pJiYwPT0oMHx0cltpKzg+PjBdKT8uMjU6MCxhclt1Pj4yXT0xLGFyW3UrND4+Ml09MTEsdHJbdSs4Pj4wXT0xLHRyWyhlPXUrOXwwKT4+MF09MHx0cltuPj4wXSx0cltlKzE+PjBdPTB8dHJbMStuPj4wXSx0cltlKzI+PjBdPTB8dHJbMituPj4wXSxhclt1KzEyPj4yXT04LGFyW3UrMTY+PjJdPTAsYXJbKGU9dSsyMHwwKT4+Ml09MCxnQVt1KzI0Pj4yXT0uMTAwMDAwMDAxNDkwMTE2MTIsZ0FbdSsyOD4+Ml09MCxnQVt1KzMyPj4yXT1hLGw9OCt0fDAsTmwodCx1KSwwfChlPTB8YXJbZT4+Ml0pJiZkdShlKSwwIT0oMHx0cltmPj4wXSkmJjAhPSgwfHRyW2krOD4+MF0pP2M9LjEwMDAwMDAwMTQ5MDExNjEyOihjPS4yMDAwMDAwMDI5ODAyMzIyNCxhPTApLGFyW3U+PjJdPTEsYXJbdSs0Pj4yXT0xMCx0clt1Kzg+PjBdPTAsdHJbKGY9dSs5fDApPj4wXT0wfHRyW24+PjBdLHRyW2YrMT4+MF09MHx0clsxK24+PjBdLHRyW2YrMj4+MF09MHx0clsyK24+PjBdLGFyW3UrMTI+PjJdPTgsYXJbKGY9dSsxNnwwKT4+Ml09MCxhclsocj11KzIwfDApPj4yXT0wLGdBW3UrMjQ+PjJdPWMsZ0FbdSsyOD4+Ml09MCxnQVt1KzMyPj4yXT1hLChlPTB8YXJbYj4+Ml0pPj4+MD49KDB8YXJbbD4+Ml0pPj4+MD8oTmwodCx1KSwwfChlPTB8YXJbcj4+Ml0pJiZkdShlKSk6KGFyW2U+PjJdPWFyW3U+PjJdLGFyW2UrND4+Ml09YXJbdSs0Pj4yXSxhcltlKzg+PjJdPWFyW3UrOD4+Ml0sYXJbZSsxMj4+Ml09YXJbdSsxMj4+Ml0sYXJbZSsxNj4+Ml09YXJbZj4+Ml0sYXJbZSsyMD4+Ml09YXJbcj4+Ml0sYXJbZj4+Ml09MCx1PXUrMjR8KGFyW3I+PjJdPTApLGFyWyhpPWUrMjR8MCk+PjJdPWFyW3U+PjJdLGFyW2krND4+Ml09YXJbdSs0Pj4yXSxhcltpKzg+PjJdPWFyW3UrOD4+Ml0sYXJbYj4+Ml09ZSszNiksYXJbQT4+Ml09YXJbdD4+Ml0sYXJbQSs0Pj4yXT1hcltiPj4yXSxhcltBKzg+PjJdPWFyW2w+PjJdLHZvaWQodXI9byk7YXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsYXJbQSs4Pj4yXT0wLHVyPW99LGZ1bmN0aW9uKEEsZSxyLGksZil7QXw9MCxlfD0wLGl8PTAsZnw9MDt2YXIgbix0LG8sYSxjLGwsdSxiLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTAsQj0wO2lmKHVyPShiPXVyKSszMnwwLG89YisxNnwwLGE9YisxMnwwLGM9Yis4fDAsbD1iKzR8MCx1PWIsdD0wfEVvKDB8YXJbKHJ8PTApPj4yXSw2KSxuPTAhPSgwfHRyW2krOD4+MF0pLCgwfFZvKDB8YXJbcj4+Ml0sMykpPDwyND4+MjQ9PTgmJigwfFZvKDB8YXJbcj4+Ml0sNCkpPDwyND4+MjQ9PTgmJigwfFZvKDB8YXJbcj4+Ml0sNSkpPDwyND4+MjQ9PTgpe2lmKHQmJigwfFZvKDB8YXJbcj4+Ml0sNikpPDwyND4+MjQhPTgpcmV0dXJuIGFyW0E+PjJdPTAsYXJbQSs0Pj4yXT0wLHZvaWQodXI9Yik7Zj0wfGh1KDgwKSxhcltmKzQ+PjJdPTAsYXJbZis4Pj4yXT0wLGFyW2Y+PjJdPTYyMDgsYXJbKGk9ZisxMnwwKT4+Ml09MCxhcltpKzQ+PjJdPTAsYXJbaSs4Pj4yXT0wLGFyW2krMTI+PjJdPTAsYXJbaSsxNj4+Ml09MCxhcltmKzMyPj4yXT0zMjIxNSxhcltmKzM2Pj4yXT0wLGFyW2YrNDA+PjJdPTAsYXJbZis0ND4+Ml09OTksYXJbZis0OD4+Ml09OTksWj1mKzUyfDAsYXJbKGc9Zis3MnwwKT4+Ml09MCxhcltmKzc2Pj4yXT0wLGFyW1o+PjJdPTAsYXJbWis0Pj4yXT0wLGFyW1orOD4+Ml09MCxhcltaKzEyPj4yXT0wLGFyW2YrNjg+PjJdPWcsZz1pLG09KFo9ZikrMTZ8MCxidShmKSxzdShmKSxlPTB8YXJbbT4+Ml0sYXJbaT4+Ml09ZyxhclttPj4yXT1aLDB8ZSYma3UoZSksZHUoZiksaD0wfGFyW3I+PjJdLHlvKGksaz0wfGFyW2grMjQ+PjJdLGg9MHxhcltoKzI4Pj4yXSwxLG4/MTE6MTApLEJvKGksMTAsayxoLDgpLGFyW28+PjJdPTAsYXJbYT4+Ml09MCxhcltjPj4yXT0wLGFyW2w+PjJdPTAsdz0oYXJbdT4+Ml09MCl8Um8oMHxhcltyPj4yXSwzLG8pLHY9MHxSbygwfGFyW3I+PjJdLDQsYSksbT0wfFJvKDB8YXJbcj4+Ml0sNSxjKSxkPTB8Rm8oaSwxMCx1KSxmPXQ/MHxSbygwfGFyW3I+PjJdLDYsbCk6MDtBOmRve2lmKDA8KDB8aCkpe3M9dCZuLHI9MDwoMHxrKSxpPTA7ZTpmb3IoOzspe3I6ZG97aWYocyl7aWYocilmb3IoZT0wO0I9dysoKDB8YnIoMHxhcltvPj4yXSxpKSkrZSl8MCxwPWU8PDIseT1kKygoMHxicigwfGFyW3U+PjJdLGkpKStwKXwwLHRyW3k+PjBdPTB8dHJbQj4+MF0seT12KygoMHxicigwfGFyW2E+PjJdLGkpKStlKXwwLEI9ZCsoKDF8cCkrKDB8YnIoMHxhclt1Pj4yXSxpKSkpfDAsdHJbQj4+MF09MHx0clt5Pj4wXSxCPW0rKCgwfGJyKDB8YXJbYz4+Ml0saSkpK2UpfDAseT1kKygoMnxwKSsoMHxicigwfGFyW3U+PjJdLGkpKSl8MCx0clt5Pj4wXT0wfHRyW0I+PjBdLHk9ZisoKDB8YnIoMHxhcltsPj4yXSxpKSkrZSl8MCxwPWQrKCgzfHApKygwfGJyKDB8YXJbdT4+Ml0saSkpKXwwLHRyW3A+PjBdPTB8dHJbeT4+MF0sKDB8KGU9ZSsxfDApKSE9KDB8ayk7KTt9ZWxzZXtpZighbil7aWYoIXIpYnJlYWs7Zm9yKGU9MDs7KWlmKHk9dysoKDB8YnIoMHxhcltvPj4yXSxpKSkrZSl8MCxCPTMqZXwwLHA9ZCsoKDB8YnIoMHxhclt1Pj4yXSxpKSkrQil8MCx0cltwPj4wXT0wfHRyW3k+PjBdLHA9disoKDB8YnIoMHxhclthPj4yXSxpKSkrZSl8MCx5PWQrKEIrMSsoMHxicigwfGFyW3U+PjJdLGkpKSl8MCx0clt5Pj4wXT0wfHRyW3A+PjBdLHk9bSsoKDB8YnIoMHxhcltjPj4yXSxpKSkrZSl8MCxCPWQrKEIrMisoMHxicigwfGFyW3U+PjJdLGkpKSl8MCx0cltCPj4wXT0wfHRyW3k+PjBdLCgwfChlPWUrMXwwKSk9PSgwfGspKWJyZWFrIHJ9aWYodClicmVhayBlO2lmKHIpZm9yKGU9MDtwPXcrKCgwfGJyKDB8YXJbbz4+Ml0saSkpK2UpfDAsQj1lPDwyLHk9ZCsoKDB8YnIoMHxhclt1Pj4yXSxpKSkrQil8MCx0clt5Pj4wXT0wfHRyW3A+PjBdLHk9disoKDB8YnIoMHxhclthPj4yXSxpKSkrZSl8MCxwPWQrKCgxfEIpKygwfGJyKDB8YXJbdT4+Ml0saSkpKXwwLHRyW3A+PjBdPTB8dHJbeT4+MF0scD1tKygoMHxicigwfGFyW2M+PjJdLGkpKStlKXwwLHk9ZCsoKDJ8QikrKDB8YnIoMHxhclt1Pj4yXSxpKSkpfDAsdHJbeT4+MF09MHx0cltwPj4wXSxCPWQrKCgzfEIpKygwfGJyKDB8YXJbdT4+Ml0saSkpKXwwLHRyW0I+PjBdPS0xLCgwfChlPWUrMXwwKSkhPSgwfGspOyk7fX13aGlsZSgwKTtpZigoMHxoKTw9KDB8KGk9aSsxfDApKSlicmVhayBBfXNyKDMyMjIzLDMyMjQ4LDI4MSwzMjI3Mil9fXdoaWxlKDApO3JldHVybiBhcltBPj4yXT1nLGFyW0ErND4+Ml09Wix2b2lkKHVyPWIpfWFyW0E+PjJdPTAsYXJbQSs0Pj4yXT0wLHVyPWJ9LGZ1bmN0aW9uKEEsZSxyLGksZil7dmFyIG4sdDtpZihBfD0wLGV8PTAsaXw9MCxmfD0wLHVyPSh0PXVyKSs0OHwwLG49dCszNnwwLGY9dCwwPT0oMHxhclsocnw9MCk+PjJdKSYmMT09KDB8YXJbcis0Pj4yXSkmJjg9PSgwfGFyW3IrMTI+PjJdKSYmMD09KDB8dHJbcis4Pj4wXSkpe2lmKDB8KGU9MHxhcltyKzE2Pj4yXSkpe3N3aXRjaCgwfG9yW2UrOD4+MV0pe2Nhc2UgMDpjYXNlIDg6Y2FzZSAxMTpjYXNlIDE0OnJldHVybiBhcltBPj4yXT0wLGFyW0ErND4+Ml09MCxhcltBKzg+PjJdPTAsdm9pZCh1cj10KX1pZighKDB8dHJbZSsxMD4+MF0pKXJldHVybiBhcltBPj4yXT0wLGFyW0ErND4+Ml09MCxhcltBKzg+PjJdPTAsdm9pZCh1cj10KX1yZXR1cm4gYXJbbj4+Ml09MCxhclsoaT00K258MCk+PjJdPTAsYXJbOCtuPj4yXT0wLGFyW2Y+PjJdPTEsYXJbZis0Pj4yXT0xMCx0cltmKzg+PjBdPTAsYXJbZisxMj4+Ml09OCxhcltmKzE2Pj4yXT0wLGFyWyhlPWYrMjB8MCk+PjJdPTAsZ0FbZisyND4+Ml09LjUsZ0FbZisyOD4+Ml09MCxnQVtmKzMyPj4yXT0wLE5sKG4sZiksMHwoZT0wfGFyW2U+PjJdKSYmZHUoZSksYXJbQT4+Ml09YXJbbj4+Ml0sYXJbQSs0Pj4yXT1hcltpPj4yXSxhcltBKzg+PjJdPWFyWzgrbj4+Ml0sdm9pZCh1cj10KX1hcltBPj4yXT0wLGFyW0ErND4+Ml09MCxhcltBKzg+PjJdPTAsdXI9dH0sZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLGV8PTAsaXw9MCxmfD0wO3ZhciBuLHQsbyxhLGMsbD0wLHU9MCxiPTAscz0wLGQ9MCxrPTAsaD0wLHc9MCx2PTAsbT0wLGc9MCxaPTAscD0wLHk9MCxCPTAsRT0wLFg9MCxXPTAsST0wO2lmKHVyPShjPXVyKSs2NHwwLGY9YyszMnwwLG49YysxMnwwLHQ9Yys4fDAsbz1jKzR8MCxhPWMsKDB8Vm8oMHxhclsocnw9MCk+PjJdLDApKTw8MjQ+PjI0PT04JiYoMHxWbygwfGFyW3I+PjJdLDEpKTw8MjQ+PjI0PT04JiYoMHxWbygwfGFyW3I+PjJdLDIpKTw8MjQ+PjI0PT04KXtpZihpPTB8aHUoODApLGFyW2krND4+Ml09MCxhcltpKzg+PjJdPTAsYXJbaT4+Ml09NjIwOCxhclsobD1pKzEyfDApPj4yXT0wLGFyW2wrND4+Ml09MCxhcltsKzg+PjJdPTAsYXJbbCsxMj4+Ml09MCxhcltsKzE2Pj4yXT0wLGFyW2krMzI+PjJdPTMyMjE1LGFyW2krMzY+PjJdPTAsYXJbaSs0MD4+Ml09MCxhcltpKzQ0Pj4yXT05OSxhcltpKzQ4Pj4yXT05OSxwPWkrNTJ8MCxhclsoWj1pKzcyfDApPj4yXT0wLGFyW2krNzY+PjJdPTAsYXJbcD4+Ml09MCxhcltwKzQ+PjJdPTAsYXJbcCs4Pj4yXT0wLGFyW3ArMTI+PjJdPTAsYXJbaSs2OD4+Ml09WixaPWwsZz0ocD1pKSsxNnwwLGJ1KGkpLHN1KGkpLGU9MHxhcltnPj4yXSxhcltsPj4yXT1aLGFyW2c+PjJdPXAsMHxlJiZrdShlKSxkdShpKSx2PTB8YXJbcj4+Ml0seW8obCx3PTB8YXJbdisyND4+Ml0sdj0wfGFyW3YrMjg+PjJdLDEsMTApLEJvKGwsMTAsdyx2LDgpLG09MHxhcltyPj4yXSxlPTB8YXJbbSs0MD4+Ml0sKGc9MD09KDB8KG09MHxhclttKzQ0Pj4yXSkpKXx8YnUobSksWmUoZiksMHxlJiYocGUobiwwfG9yW2UrOD4+MV0sMHxvcltlKzQ+PjFdKSxhcltmPj4yXT1hcltuPj4yXSxhcltmKzQ+PjJdPWFyWzQrbj4+Ml0sYXJbZis4Pj4yXT1hcls4K24+PjJdLGFyW2YrMTI+PjJdPWFyWzEyK24+PjJdLGFyW2YrMTY+PjJdPWFyWzE2K24+PjJdKSxkPTB8ZWYoMjU2KmdBW2YrND4+Ml0pLGs9MHxlZigyNTYqZ0FbZisxMj4+Ml0pLGg9MHxlZigyNTYqZ0FbZis4Pj4yXSksdT0wfGVmKDI1NipnQVtmKzE2Pj4yXSksYXJbbj4+Ml09MCxhclt0Pj4yXT0wLGFyW28+PjJdPTAsYj0oYXJbYT4+Ml09MCl8Um8oMHxhcltyPj4yXSwwLG4pLHM9MHxSbygwfGFyW3I+PjJdLDEsdCkscj0wfFJvKDB8YXJbcj4+Ml0sMixvKSxmPTB8Rm8obCwxMCxhKSwwPCgwfHYpJjA8KDB8dykpe2k9MDtkb3tmb3IobD0oMHxpKS8yfDAsZT0wO0I9YisoKDB8YnIoMHxhcltuPj4yXSxpKSkrZSl8MCxCPTB8Y3JbQj4+MF0sVz0oMHxlKS8yfDAsRT1zKygoMHxicigwfGFyW3Q+PjJdLGwpKStXKXwwLEU9KDB8Y3JbRT4+MF0pLTEyOHwwLFc9cisoKDB8YnIoMHxhcltvPj4yXSxsKSkrVyl8MCxXPSgwfGNyW1c+PjBdKS0xMjh8MCxJPSgxMjgrKDB8YnIoVyxkKSk+PjgpK0J8MCx5PTMqZXwwLFg9ZisoKDB8YnIoMHxhclthPj4yXSxpKSkreSl8MCx0cltYPj4wXT0oMHxJKTwwPzA6MjU1PCgwfEkpPy0xOjI1NSZJLFc9KDEyOCsoMHxicihFLGgpKSsoMHxicihXLGspKT4+OCkrQnwwLFg9ZisoeSsxKygwfGJyKDB8YXJbYT4+Ml0saSkpKXwwLHRyW1g+PjBdPSgwfFcpPDA/MDoyNTU8KDB8Vyk/LTE6MjU1JlcsQj0oMTI4KygwfGJyKEUsdSkpPj44KStCfDAseT1mKyh5KzIrKDB8YnIoMHxhclthPj4yXSxpKSkpfDAsdHJbeT4+MF09KDB8Qik8MD8wOjI1NTwoMHxCKT8tMToyNTUmQiwoMHwoZT1lKzF8MCkpIT0oMHx3KTspO2k9aSsxfDB9d2hpbGUoKDB8aSkhPSgwfHYpKX1yZXR1cm4oYXJbQT4+Ml09WixhcltBKzQ+PjJdPXAsZyk/dm9pZCh1cj1jKTooZHUobSksdm9pZCh1cj1jKSl9YXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsdXI9Y30sZnVuY3Rpb24oQSxlLHIsaSxmKXt2YXIgbix0O2lmKEF8PTAsZXw9MCxpfD0wLGZ8PTAsdXI9KHQ9dXIpKzQ4fDAsbj10KzM2fDAsZj10LDA9PSgwfGFyWyhyfD0wKT4+Ml0pJiYxPT0oMHxhcltyKzQ+PjJdKSYmOD09KDB8YXJbcisxMj4+Ml0pKXtpZigwfChlPTB8YXJbcisxNj4+Ml0pKXtzd2l0Y2goMHxvcltlKzg+PjFdKXtjYXNlIDA6Y2FzZSA4OmNhc2UgMTE6Y2FzZSAxNDpyZXR1cm4gYXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsYXJbQSs4Pj4yXT0wLHZvaWQodXI9dCl9aWYoISgwfHRyW2UrMTA+PjBdKSlyZXR1cm4gYXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsYXJbQSs4Pj4yXT0wLHZvaWQodXI9dCl9cmV0dXJuIGFyW24+PjJdPTAsYXJbKGk9NCtufDApPj4yXT0wLGFyWzgrbj4+Ml09MCxhcltmPj4yXT0xLGFyW2YrND4+Ml09MTEsdHJbZis4Pj4wXT0xLGFyW2YrMTI+PjJdPTgsYXJbZisxNj4+Ml09MCxhclsoZT1mKzIwfDApPj4yXT0wLGdBW2YrMjQ+PjJdPS41LGdBW2YrMjg+PjJdPTAsZ0FbZiszMj4+Ml09MCxObChuLGYpLDB8KGU9MHxhcltlPj4yXSkmJmR1KGUpLGFyW0E+PjJdPWFyW24+PjJdLGFyW0ErND4+Ml09YXJbaT4+Ml0sYXJbQSs4Pj4yXT1hcls4K24+PjJdLHZvaWQodXI9dCl9YXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsYXJbQSs4Pj4yXT0wLHVyPXR9LGZ1bmN0aW9uKEEsZSxyLGksZil7QXw9MCxlfD0wLGl8PTAsZnw9MDt2YXIgbix0LG8sYSxjLGwsdT0wLGI9MCxzPTAsZD0wLGs9MCxoPTAsdz0wLHY9MCxtPTAsZz0wLFo9MCxwPTAseT0wLEI9MCxFPTAsWD0wLFc9MCxJPTAsQz0wLEc9MCxWPTAsRj0wO2lmKHVyPShsPXVyKSs2NHwwLGY9bCszNnwwLHQ9bCsxNnwwLG89bCsxMnwwLGE9bCs4fDAsYz1sKzR8MCxuPWwsKDB8Vm8oMHxhclsocnw9MCk+PjJdLDApKTw8MjQ+PjI0PT04JiYoMHxWbygwfGFyW3I+PjJdLDEpKTw8MjQ+PjI0PT04JiYoMHxWbygwfGFyW3I+PjJdLDIpKTw8MjQ+PjI0PT04KXtpZihpPTB8aHUoODApLGFyW2krND4+Ml09MCxhcltpKzg+PjJdPTAsYXJbaT4+Ml09NjIwOCxhclsodT1pKzEyfDApPj4yXT0wLGFyW3UrND4+Ml09MCxhclt1Kzg+PjJdPTAsYXJbdSsxMj4+Ml09MCxhclt1KzE2Pj4yXT0wLGFyW2krMzI+PjJdPTMyMjE1LGFyW2krMzY+PjJdPTAsYXJbaSs0MD4+Ml09MCxhcltpKzQ0Pj4yXT05OSxhcltpKzQ4Pj4yXT05OSxYPWkrNTJ8MCxhclsoRT1pKzcyfDApPj4yXT0wLGFyW2krNzY+PjJdPTAsYXJbWD4+Ml09MCxhcltYKzQ+PjJdPTAsYXJbWCs4Pj4yXT0wLGFyW1grMTI+PjJdPTAsYXJbaSs2OD4+Ml09RSxFPXUsQj0oWD1pKSsxNnwwLGJ1KGkpLHN1KGkpLGU9MHxhcltCPj4yXSxhclt1Pj4yXT1FLGFyW0I+PjJdPVgsMHxlJiZrdShlKSxkdShpKSxwPTB8YXJbcj4+Ml0seW8odSxaPTB8YXJbcCsyND4+Ml0scD0wfGFyW3ArMjg+PjJdLDEsMTEpLEJvKHUsMTAsWixwLDgpLHk9MHxhcltyPj4yXSxlPTB8YXJbeSs0MD4+Ml0sKEI9MD09KDB8KHk9MHxhclt5KzQ0Pj4yXSkpKXx8YnUoeSksWmUoZiksMHxlJiYocGUodCwwfG9yW2UrOD4+MV0sMHxvcltlKzQ+PjFdKSxhcltmPj4yXT1hclt0Pj4yXSxhcltmKzQ+PjJdPWFyWzQrdD4+Ml0sYXJbZis4Pj4yXT1hcls4K3Q+PjJdLGFyW2YrMTI+PjJdPWFyWzEyK3Q+PjJdLGFyW2YrMTY+PjJdPWFyWzE2K3Q+PjJdKSx2PTB8ZWYoMjU2KmdBW2YrND4+Ml0pLG09MHxlZigyNTYqZ0FbZisxMj4+Ml0pLGc9MHxlZigyNTYqZ0FbZis4Pj4yXSkscz0wfGVmKDI1NipnQVtmKzE2Pj4yXSksZD0wfEVvKDB8YXJbcj4+Ml0sNiksYXJbdD4+Ml09MCxhcltvPj4yXT0wLGFyW2E+PjJdPTAsYXJbYz4+Ml09MCxrPShhcltuPj4yXT0wKXxSbygwfGFyW3I+PjJdLDAsdCksaD0wfFJvKDB8YXJbcj4+Ml0sMSxvKSx3PTB8Um8oMHxhcltyPj4yXSwyLGEpLGI9ZD8wfFJvKDB8YXJbcj4+Ml0sNixjKTowLGY9MHxGbyh1LDEwLG4pLDA8KDB8cCkpe3U9MDwoMHxaKSxpPTA7ZG97aWYodSlpZihyPSgwfGkpLzJ8MCxkKWZvcihlPTA7Qz1rKygoMHxicigwfGFyW3Q+PjJdLGkpKStlKXwwLEM9MHxjcltDPj4wXSxWPSgwfGUpLzJ8MCxXPWgrKCgwfGJyKDB8YXJbbz4+Ml0scikpK1YpfDAsVz0oMHxjcltXPj4wXSktMTI4fDAsVj13KygoMHxicigwfGFyW2E+PjJdLHIpKStWKXwwLFY9KDB8Y3JbVj4+MF0pLTEyOHwwLEY9KDEyOCsoMHxicihWLHYpKT4+OCkrQ3wwLEk9ZTw8MixHPWYrKCgwfGJyKDB8YXJbbj4+Ml0saSkpK0kpfDAsdHJbRz4+MF09KDB8Rik8MD8wOjI1NTwoMHxGKT8tMToyNTUmRixWPSgxMjgrKDB8YnIoVyxnKSkrKDB8YnIoVixtKSk+PjgpK0N8MCxHPWYrKCgxfEkpKygwfGJyKDB8YXJbbj4+Ml0saSkpKXwwLHRyW0c+PjBdPSgwfFYpPDA/MDoyNTU8KDB8Vik/LTE6MjU1JlYsQz0oMTI4KygwfGJyKFcscykpPj44KStDfDAsVz1mKygoMnxJKSsoMHxicigwfGFyW24+PjJdLGkpKSl8MCx0cltXPj4wXT0oMHxDKTwwPzA6MjU1PCgwfEMpPy0xOjI1NSZDLFc9MHxicigwfGFyW24+PjJdLGkpLEM9YisoKDB8YnIoMHxhcltjPj4yXSxpKSkrZSl8MCx0cltmKygoM3xJKStXKT4+MF09MHx0cltDPj4wXSwoMHwoZT1lKzF8MCkpIT0oMHxaKTspO2Vsc2UgZm9yKGU9MDtHPWsrKCgwfGJyKDB8YXJbdD4+Ml0saSkpK2UpfDAsRz0wfGNyW0c+PjBdLEk9KDB8ZSkvMnwwLFY9aCsoKDB8YnIoMHxhcltvPj4yXSxyKSkrSSl8MCxWPSgwfGNyW1Y+PjBdKS0xMjh8MCxJPXcrKCgwfGJyKDB8YXJbYT4+Ml0scikpK0kpfDAsST0oMHxjcltJPj4wXSktMTI4fDAsVz0oMTI4KygwfGJyKEksdikpPj44KStHfDAsRj1lPDwyLEM9ZisoKDB8YnIoMHxhcltuPj4yXSxpKSkrRil8MCx0cltDPj4wXT0oMHxXKTwwPzA6MjU1PCgwfFcpPy0xOjI1NSZXLEk9KDEyOCsoMHxicihWLGcpKSsoMHxicihJLG0pKT4+OCkrR3wwLEM9ZisoKDF8RikrKDB8YnIoMHxhcltuPj4yXSxpKSkpfDAsdHJbQz4+MF09KDB8SSk8MD8wOjI1NTwoMHxJKT8tMToyNTUmSSxHPSgxMjgrKDB8YnIoVixzKSk+PjgpK0d8MCxWPWYrKCgyfEYpKygwfGJyKDB8YXJbbj4+Ml0saSkpKXwwLHRyW1Y+PjBdPSgwfEcpPDA/MDoyNTU8KDB8Ryk/LTE6MjU1JkcsRj1mKygoM3xGKSsoMHxicigwfGFyW24+PjJdLGkpKSl8MCx0cltGPj4wXT0tMSwoMHwoZT1lKzF8MCkpIT0oMHxaKTspO2k9aSsxfDB9d2hpbGUoKDB8aSkhPSgwfHApKX1yZXR1cm4oYXJbQT4+Ml09RSxhcltBKzQ+PjJdPVgsQik/dm9pZCh1cj1sKTooZHUoeSksdm9pZCh1cj1sKSl9YXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsdXI9bH0sZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLGV8PTAsaXw9MCxmfD0wO3ZhciBuLHQsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTA7aWYodXI9KHQ9dXIpKzY0fDAsbj10KzM2fDAsYz10KzQ4fDAsdT10LDE9PSgwfGFyWyhyfD0wKT4+Ml0pJiYzPT0oMHxhcltyKzQ+PjJdKSYmOCE9KDB8KG89MHxhclsoYT1yKzEyfDApPj4yXSkpKXJldHVybiBhcltuPj4yXT0wLGFyWyhiPTQrbnwwKT4+Ml09MCwoYXJbOCtuPj4yXT0wKXx0cltyKzg+PjBdPyhsPTgrbnwwLGU9byxyPWY9bz0wKTooYXJbdT4+Ml09MSxhclt1KzQ+PjJdPTEyLHRyW3UrOD4+MF09MCx0clsoZT11Kzl8MCk+PjBdPTB8dHJbYz4+MF0sdHJbZSsxPj4wXT0wfHRyW2MrMT4+MF0sdHJbZSsyPj4wXT0wfHRyW2MrMj4+MF0sYXJbdSsxMj4+Ml09byxhclt1KzE2Pj4yXT0wLGFyWyhlPXUrMjB8MCk+PjJdPTAsZ0FbdSsyND4+Ml09LjUsZ0FbdSsyOD4+Ml09MCxpPTgrbnwoZ0FbdSszMj4+Ml09MCksTmwobix1KSwwfChlPTB8YXJbZT4+Ml0pJiZkdShlKSxyPTB8YXJbYj4+Ml0sbD1pLGU9MHxhclthPj4yXSxvPXIsZj0wfGFyW2k+PjJdKSxhclt1Pj4yXT0xLGFyW3UrND4+Ml09MTMsdHJbdSs4Pj4wXT0xLHRyWyhpPXUrOXwwKT4+MF09MHx0cltjPj4wXSx0cltpKzE+PjBdPTB8dHJbYysxPj4wXSx0cltpKzI+PjBdPTB8dHJbYysyPj4wXSxhclt1KzEyPj4yXT1lLGFyWyhlPXUrMTZ8MCk+PjJdPTAsYXJbKGk9dSsyMHwwKT4+Ml09MCxnQVt1KzI0Pj4yXT0uNSxnQVt1KzI4Pj4yXT0wLGY+Pj4oZ0FbdSszMj4+Ml09MCk8PW8+Pj4wPyhObChuLHUpLDB8KGU9MHxhcltpPj4yXSkmJmR1KGUpKTooYXJbcj4+Ml09YXJbdT4+Ml0sYXJbcis0Pj4yXT1hclt1KzQ+PjJdLGFyW3IrOD4+Ml09YXJbdSs4Pj4yXSxhcltyKzEyPj4yXT1hclt1KzEyPj4yXSxhcltvKzE2Pj4yXT1hcltlPj4yXSxhcltvKzIwPj4yXT1hcltpPj4yXSxhcltlPj4yXT0wLHU9dSsyNHwoYXJbaT4+Ml09MCksYXJbKGM9bysyNHwwKT4+Ml09YXJbdT4+Ml0sYXJbYys0Pj4yXT1hclt1KzQ+PjJdLGFyW2MrOD4+Ml09YXJbdSs4Pj4yXSxhcltiPj4yXT1vKzM2KSxhcltBPj4yXT1hcltuPj4yXSxhcltBKzQ+PjJdPWFyW2I+PjJdLGFyW0ErOD4+Ml09YXJbbD4+Ml0sYXJbbD4+Ml09MCx2b2lkKHVyPXQpO2FyW0E+PjJdPTAsYXJbQSs0Pj4yXT0wLGFyW0ErOD4+Ml09MCx1cj10fSxmdW5jdGlvbihBLGUscixpLGYpe0F8PTAsZXw9MCxpfD0wLGZ8PTA7dmFyIG4sdCxvLGEsYyxsLHU9MCxiPTAscz0wLGQ9MCxrPTAsaD0wLHc9MCx2PTAsbT0wLGc9MCxaPTAscD0wLHk9MCxCPTAsRT0wO2lmKHVyPShsPXVyKSszMnwwLG49bCsxNnwwLHQ9bCsxMnwwLG89bCs4fDAsYT1sKzR8MCxjPWwsKDB8Vm8oMHxhclsocnw9MCk+PjJdLDMpKTw8MjQ+PjI0IT04JiYoMHxWbygwfGFyW3I+PjJdLDQpKTw8MjQ+PjI0IT04JiYoMHxWbygwfGFyW3I+PjJdLDUpKTw8MjQ+PjI0IT04KXt2PTB8RW8oMHxhcltyPj4yXSw2KTtkb3tpZih2KXtpZigoMHxWbygwfGFyW3I+PjJdLDYpKTw8MjQ+PjI0PT04KXJldHVybiBhcltBPj4yXT0wLGFyW0ErND4+Ml09MCx2b2lkKHVyPWwpO2lmKCgwfChnPTB8WG8oMHxhcltyPj4yXSw2KSkpPT0oMHxYbygwfGFyW3I+PjJdLDQpKSYmKDB8KGc9MHxXbygwfGFyW3I+PjJdLDYpKSk9PSgwfFdvKDB8YXJbcj4+Ml0sNCkpKWJyZWFrO3JldHVybiBhcltBPj4yXT0wLGFyW0ErND4+Ml09MCx2b2lkKHVyPWwpfX13aGlsZSgwKTtpZihmPTB8aHUoODApLGFyW2YrND4+Ml09MCxhcltmKzg+PjJdPTAsYXJbZj4+Ml09NjIwOCxhclsodT1mKzEyfDApPj4yXT0wLGFyW3UrND4+Ml09MCxhclt1Kzg+PjJdPTAsYXJbdSsxMj4+Ml09MCxhclt1KzE2Pj4yXT0wLGFyW2YrMzI+PjJdPTMyMjE1LGFyW2YrMzY+PjJdPTAsYXJbZis0MD4+Ml09MCxhcltmKzQ0Pj4yXT05OSxhcltmKzQ4Pj4yXT05OSxnPWYrNTJ8MCxhclsobT1mKzcyfDApPj4yXT0wLGFyW2YrNzY+PjJdPTAsYXJbZz4+Ml09MCxhcltnKzQ+PjJdPTAsYXJbZys4Pj4yXT0wLGFyW2crMTI+PjJdPTAsYXJbZis2OD4+Ml09bSxtPXUsdz0oZz1mKSsxNnwwLGJ1KGYpLHN1KGYpLGU9MHxhclt3Pj4yXSxhclt1Pj4yXT1tLGFyW3c+PjJdPWcsMHxlJiZrdShlKSxkdShmKSx3PTB8YXJbcj4+Ml0seW8odSxoPTB8YXJbdysyND4+Ml0sdz0wfGFyW3crMjg+PjJdLDEsMHx0cltpKzg+PjBdPzEzOjEyKSxCbyh1LDEwLGgsdywyNTUmKDB8Vm8oMHxhcltyPj4yXSwzKSkpLGFyW24+PjJdPTAsYXJbdD4+Ml09MCxhcltvPj4yXT0wLGFyW2E+PjJdPTAscz0oYXJbYz4+Ml09MCl8Um8oMHxhcltyPj4yXSwzLG4pLGQ9MHxSbygwfGFyW3I+PjJdLDQsdCksaz0wfFJvKDB8YXJbcj4+Ml0sNSxvKSxiPTB8Rm8odSwxMCxjKSxlPXY/KHU9MHxSbygwfGFyW3I+PjJdLDYsYSksKDB8YXJbYT4+Ml0pLzJ8MCk6dT0wLGFyW24+PjJdPSgwfGFyW24+PjJdKS8yfDAsYXJbdD4+Ml09KDB8YXJbdD4+Ml0pLzJ8MCxhcltvPj4yXT0oMHxhcltvPj4yXSkvMnwwLGFyW2E+PjJdPWUsMDwoMHx3KSl7aT0wPCgwfGgpLGY9MDtkb3tpZih2KXtpZihpKWZvcihlPTA7RT1zKygoMHxicigwfGFyW24+PjJdLGYpKStlPDwxKXwwLEU9MHxvcltFPj4xXSxCPWQrKCgwfGJyKDB8YXJbdD4+Ml0sZikpK2U8PDEpfDAsQj0wfG9yW0I+PjFdLHk9aysoKDB8YnIoMHxhcltvPj4yXSxmKSkrZTw8MSl8MCx5PTB8b3JbeT4+MV0sWj11KygoMHxicigwfGFyW2E+PjJdLGYpKStlPDwxKXwwLFo9MHxvcltaPj4xXSxyPWU8PDMscD1iKygoMHxicigwfGFyW2M+PjJdLGYpKStyKXwwLHRyW3A+PjBdPSg2NTUzNSZFKT4+PjgscD1iKygoMXxyKSsoMHxicigwfGFyW2M+PjJdLGYpKSl8MCx0cltwPj4wXT1FLHA9YisoKDJ8cikrKDB8YnIoMHxhcltjPj4yXSxmKSkpfDAsdHJbcD4+MF09KDY1NTM1JkIpPj4+OCxwPWIrKCgzfHIpKygwfGJyKDB8YXJbYz4+Ml0sZikpKXwwLHRyW3A+PjBdPUIscD1iKygoNHxyKSsoMHxicigwfGFyW2M+PjJdLGYpKSl8MCx0cltwPj4wXT0oNjU1MzUmeSk+Pj44LHA9YisoKDV8cikrKDB8YnIoMHxhcltjPj4yXSxmKSkpfDAsdHJbcD4+MF09eSxwPWIrKCg2fHIpKygwfGJyKDB8YXJbYz4+Ml0sZikpKXwwLHRyW3A+PjBdPSg2NTUzNSZaKT4+Pjgscj1iKygoN3xyKSsoMHxicigwfGFyW2M+PjJdLGYpKSl8MCx0cltyPj4wXT1aLCgwfChlPWUrMXwwKSkhPSgwfGgpOyk7fWVsc2UgaWYoaSlmb3IoZT0wO1o9cysoKDB8YnIoMHxhcltuPj4yXSxmKSkrZTw8MSl8MCxaPTB8b3JbWj4+MV0scD1kKygoMHxicigwfGFyW3Q+PjJdLGYpKStlPDwxKXwwLHA9MHxvcltwPj4xXSxCPWsrKCgwfGJyKDB8YXJbbz4+Ml0sZikpK2U8PDEpfDAsQj0wfG9yW0I+PjFdLEU9NiplfDAseT1iKygoMHxicigwfGFyW2M+PjJdLGYpKStFKXwwLHRyW3k+PjBdPSg2NTUzNSZaKT4+PjgseT1iKygoMXxFKSsoMHxicigwfGFyW2M+PjJdLGYpKSl8MCx0clt5Pj4wXT1aLHk9YisoRSsyKygwfGJyKDB8YXJbYz4+Ml0sZikpKXwwLHRyW3k+PjBdPSg2NTUzNSZwKT4+PjgseT1iKyhFKzMrKDB8YnIoMHxhcltjPj4yXSxmKSkpfDAsdHJbeT4+MF09cCx5PWIrKEUrNCsoMHxicigwfGFyW2M+PjJdLGYpKSl8MCx0clt5Pj4wXT0oNjU1MzUmQik+Pj44LEU9YisoRSs1KygwfGJyKDB8YXJbYz4+Ml0sZikpKXwwLHRyW0U+PjBdPUIsKDB8KGU9ZSsxfDApKSE9KDB8aCk7KTtmPWYrMXwwfXdoaWxlKCgwfGYpIT0oMHx3KSl9cmV0dXJuIGFyW0E+PjJdPW0sYXJbQSs0Pj4yXT1nLHZvaWQodXI9bCl9YXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsdXI9bH0sZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLGV8PTAsaXw9MCxmfD0wO3ZhciBuLHQsbz0wLGE9MCxjPTAsbD0wLHU9MDtpZih1cj0odD11cikrNjR8MCxuPXQrMzZ8MCxhPXQrNDh8MCxsPXQsMT09KDB8YXJbKHJ8PTApPj4yXSkmJjM9PSgwfGFyW3IrND4+Ml0pJiY4PT0oMHxhclsobz1yKzEyfDApPj4yXSkpcmV0dXJuIGFyW24+PjJdPTAsYXJbKHU9NCtufDApPj4yXT0wLChhcls4K24+PjJdPTApfHRyW3IrOD4+MF0/KGM9OCtufDAsZT04LHI9Zj1vPTApOihhcltsPj4yXT0xLGFyW2wrND4+Ml09MTIsdHJbbCs4Pj4wXT0wLHRyWyhlPWwrOXwwKT4+MF09MHx0clthPj4wXSx0cltlKzE+PjBdPTB8dHJbYSsxPj4wXSx0cltlKzI+PjBdPTB8dHJbYSsyPj4wXSxhcltsKzEyPj4yXT04LGFyW2wrMTY+PjJdPTAsYXJbKGU9bCsyMHwwKT4+Ml09MCxnQVtsKzI0Pj4yXT0uNSxnQVtsKzI4Pj4yXT0wLGk9OCtufChnQVtsKzMyPj4yXT0wKSxObChuLGwpLDB8KGU9MHxhcltlPj4yXSkmJmR1KGUpLHI9MHxhclt1Pj4yXSxjPWksZT0wfGFyW28+PjJdLG89cixmPTB8YXJbaT4+Ml0pLGFyW2w+PjJdPTEsYXJbbCs0Pj4yXT0xMyx0cltsKzg+PjBdPTEsdHJbKGk9bCs5fDApPj4wXT0wfHRyW2E+PjBdLHRyW2krMT4+MF09MHx0clthKzE+PjBdLHRyW2krMj4+MF09MHx0clthKzI+PjBdLGFyW2wrMTI+PjJdPWUsYXJbKGU9bCsxNnwwKT4+Ml09MCxhclsoaT1sKzIwfDApPj4yXT0wLGdBW2wrMjQ+PjJdPS41LGdBW2wrMjg+PjJdPTAsZj4+PihnQVtsKzMyPj4yXT0wKTw9bz4+PjA/KE5sKG4sbCksMHwoZT0wfGFyW2k+PjJdKSYmZHUoZSkpOihhcltyPj4yXT1hcltsPj4yXSxhcltyKzQ+PjJdPWFyW2wrND4+Ml0sYXJbcis4Pj4yXT1hcltsKzg+PjJdLGFyW3IrMTI+PjJdPWFyW2wrMTI+PjJdLGFyW28rMTY+PjJdPWFyW2U+PjJdLGFyW28rMjA+PjJdPWFyW2k+PjJdLGFyW2U+PjJdPTAsbD1sKzI0fChhcltpPj4yXT0wKSxhclsoYT1vKzI0fDApPj4yXT1hcltsPj4yXSxhclthKzQ+PjJdPWFyW2wrND4+Ml0sYXJbYSs4Pj4yXT1hcltsKzg+PjJdLGFyW3U+PjJdPW8rMzYpLGFyW0E+PjJdPWFyW24+PjJdLGFyW0ErND4+Ml09YXJbdT4+Ml0sYXJbQSs4Pj4yXT1hcltjPj4yXSxhcltjPj4yXT0wLHZvaWQodXI9dCk7YXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsYXJbQSs4Pj4yXT0wLHVyPXR9LGZ1bmN0aW9uKEEsZSxyLGksZil7QXw9MCxlfD0wLGl8PTAsZnw9MDt2YXIgbix0LG8sYSxjLGwsdT0wLGI9MCxzPTAsZD0wLGs9MCxoPTAsdz0wLHY9MCxtPTAsZz0wLFo9MCxwPTA7aWYodXI9KGw9dXIpKzMyfDAsbj1sKzE2fDAsdD1sKzEyfDAsbz1sKzh8MCxhPWwrNHwwLGM9bCwoMHxWbygwfGFyWyhyfD0wKT4+Ml0sMykpPDwyND4+MjQ9PTgmJigwfFZvKDB8YXJbcj4+Ml0sNCkpPDwyND4+MjQ9PTgmJigwfFZvKDB8YXJbcj4+Ml0sNSkpPDwyND4+MjQ9PTgpe2lmKCh2PTB8RW8oMHxhcltyPj4yXSw2KSkmJigwfFZvKDB8YXJbcj4+Ml0sNikpPDwyND4+MjQhPTgpcmV0dXJuIGFyW0E+PjJdPTAsYXJbQSs0Pj4yXT0wLHZvaWQodXI9bCk7aWYoZj0wfGh1KDgwKSxhcltmKzQ+PjJdPTAsYXJbZis4Pj4yXT0wLGFyW2Y+PjJdPTYyMDgsYXJbKHU9ZisxMnwwKT4+Ml09MCxhclt1KzQ+PjJdPTAsYXJbdSs4Pj4yXT0wLGFyW3UrMTI+PjJdPTAsYXJbdSsxNj4+Ml09MCxhcltmKzMyPj4yXT0zMjIxNSxhcltmKzM2Pj4yXT0wLGFyW2YrNDA+PjJdPTAsYXJbZis0ND4+Ml09OTksYXJbZis0OD4+Ml09OTksZz1mKzUyfDAsYXJbKG09Zis3MnwwKT4+Ml09MCxhcltmKzc2Pj4yXT0wLGFyW2c+PjJdPTAsYXJbZys0Pj4yXT0wLGFyW2crOD4+Ml09MCxhcltnKzEyPj4yXT0wLGFyW2YrNjg+PjJdPW0sbT11LHc9KGc9ZikrMTZ8MCxidShmKSxzdShmKSxlPTB8YXJbdz4+Ml0sYXJbdT4+Ml09bSxhclt3Pj4yXT1nLDB8ZSYma3UoZSksZHUoZiksdz0wfGFyW3I+PjJdLHlvKHUsaD0wfGFyW3crMjQ+PjJdLHc9MHxhclt3KzI4Pj4yXSwxLDB8dHJbaSs4Pj4wXT8xMzoxMiksQm8odSwxMCxoLHcsMjU1JigwfFZvKDB8YXJbcj4+Ml0sMykpKSxhcltuPj4yXT0wLGFyW3Q+PjJdPTAsYXJbbz4+Ml09MCxhclthPj4yXT0wLHM9KGFyW2M+PjJdPTApfFJvKDB8YXJbcj4+Ml0sMyxuKSxkPTB8Um8oMHxhcltyPj4yXSw0LHQpLGs9MHxSbygwfGFyW3I+PjJdLDUsbyksYj0wfEZvKHUsMTAsYyksZj12PzB8Um8oMHxhcltyPj4yXSw2LGEpOjAsMDwoMHx3KSl7dT0wPCgwfGgpLGk9MDtkb3tpZih2KXtpZih1KWZvcihlPTA7cj1lPDwzLHA9YisoKDB8YnIoMHxhcltjPj4yXSxpKSkrcil8MCxwPXMrKCgodHJbcD4+MF09MCl8YnIoMHxhcltuPj4yXSxpKSkrZSl8MCxaPWIrKCgxfHIpKygwfGJyKDB8YXJbYz4+Ml0saSkpKXwwLHRyW1o+PjBdPTB8dHJbcD4+MF0sWj1iKygoMnxyKSsoMHxicigwfGFyW2M+PjJdLGkpKSl8MCxaPWQrKCgodHJbWj4+MF09MCl8YnIoMHxhclt0Pj4yXSxpKSkrZSl8MCxwPWIrKCgzfHIpKygwfGJyKDB8YXJbYz4+Ml0saSkpKXwwLHRyW3A+PjBdPTB8dHJbWj4+MF0scD1iKygoNHxyKSsoMHxicigwfGFyW2M+PjJdLGkpKSl8MCxwPWsrKCgodHJbcD4+MF09MCl8YnIoMHxhcltvPj4yXSxpKSkrZSl8MCxaPWIrKCg1fHIpKygwfGJyKDB8YXJbYz4+Ml0saSkpKXwwLHRyW1o+PjBdPTB8dHJbcD4+MF0sWj1iKygoNnxyKSsoMHxicigwfGFyW2M+PjJdLGkpKSl8MCxaPWYrKCgodHJbWj4+MF09MCl8YnIoMHxhclthPj4yXSxpKSkrZSl8MCxyPWIrKCg3fHIpKygwfGJyKDB8YXJbYz4+Ml0saSkpKXwwLHRyW3I+PjBdPTB8dHJbWj4+MF0sKDB8KGU9ZSsxfDApKSE9KDB8aCk7KTt9ZWxzZSBpZih1KWZvcihlPTA7cD1lPDwzLFo9YisoKDB8YnIoMHxhcltjPj4yXSxpKSkrcCl8MCxaPXMrKCgodHJbWj4+MF09MCl8YnIoMHxhcltuPj4yXSxpKSkrZSl8MCxyPWIrKCgxfHApKygwfGJyKDB8YXJbYz4+Ml0saSkpKXwwLHRyW3I+PjBdPTB8dHJbWj4+MF0scj1iKygoMnxwKSsoMHxicigwfGFyW2M+PjJdLGkpKSl8MCxyPWQrKCgodHJbcj4+MF09MCl8YnIoMHxhclt0Pj4yXSxpKSkrZSl8MCxaPWIrKCgzfHApKygwfGJyKDB8YXJbYz4+Ml0saSkpKXwwLHRyW1o+PjBdPTB8dHJbcj4+MF0sWj1iKygoNHxwKSsoMHxicigwfGFyW2M+PjJdLGkpKSl8MCxaPWsrKCgodHJbWj4+MF09MCl8YnIoMHxhcltvPj4yXSxpKSkrZSl8MCxwPWIrKCg1fHApKygwfGJyKDB8YXJbYz4+Ml0saSkpKXwwLHRyW3A+PjBdPTB8dHJbWj4+MF0sKDB8KGU9ZSsxfDApKSE9KDB8aCk7KTtpPWkrMXwwfXdoaWxlKCgwfGkpIT0oMHx3KSl9cmV0dXJuIGFyW0E+PjJdPW0sYXJbQSs0Pj4yXT1nLHZvaWQodXI9bCl9YXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsdXI9bH0sZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLGV8PTAsaXw9MCxmfD0wO3ZhciBuLHQ9MCxvPTA7aWYodXI9KG49dXIpKzQ4fDAsZj1uKzM2fDAsZT1uLDE9PSgwfGFyWyhyfD0wKT4+Ml0pJiYxMj09KC0yJih0PTB8YXJbcis0Pj4yXSl8MCkmJjghPSgwfChvPTB8YXJbcisxMj4+Ml0pKSlyZXR1cm4gYXJbZj4+Ml09MCxhclsoaT1mKzR8MCk+PjJdPTAsYXJbZis4Pj4yXT0wLGFyW2U+PjJdPTEsYXJbZSs0Pj4yXT0zLHRyW2UrOD4+MF09MTU9PSgyfHQpJjEsYXJbZSsxMj4+Ml09byxhcltlKzE2Pj4yXT0wLGFyWyhvPWUrMjB8MCk+PjJdPTAsZ0FbZSsyND4+Ml09LjIwMDAwMDAwMjk4MDIzMjI0LGdBW2UrMjg+PjJdPTAsZ0FbZSszMj4+Ml09MCxObChmLGUpLDB8KGU9MHxhcltvPj4yXSkmJmR1KGUpLGFyW0E+PjJdPWFyW2Y+PjJdLGFyW0ErND4+Ml09YXJbaT4+Ml0sYXJbQSs4Pj4yXT1hcltmKzg+PjJdLHZvaWQodXI9bik7YXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsYXJbQSs4Pj4yXT0wLHVyPW59LGZ1bmN0aW9uKEEsZSxyLGksZil7QXw9MCxlfD0wLGl8PTAsZnw9MDt2YXIgbix0LG8sYSxjLGwsdSxiLHMsZCxrLGg9MCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTAsQj0wLEU9MDtpZih1cj0oaz11cikrMzJ8MCxkPWsrMTZ8MCxoPWsrMTJ8MCx3PWsrOHwwLHY9ays0fDAsbT1rLHM9MTU9PSgyfGFyWzM2KygwfGFyWyhyfD0wKT4+Ml0pPj4yXSksaT0wfGh1KDgwKSxhcltpKzQ+PjJdPTAsYXJbaSs4Pj4yXT0wLGFyW2k+PjJdPTYyMDgsYXJbKGY9aSsxMnwwKT4+Ml09MCxhcltmKzQ+PjJdPTAsYXJbZis4Pj4yXT0wLGFyW2YrMTI+PjJdPTAsYXJbZisxNj4+Ml09MCxhcltpKzMyPj4yXT0zMjIxNSxhcltpKzM2Pj4yXT0wLGFyW2krNDA+PjJdPTAsYXJbaSs0ND4+Ml09OTksYXJbaSs0OD4+Ml09OTksZT1pKzUyfDAsYXJbKHk9aSs3MnwwKT4+Ml09MCxhcltpKzc2Pj4yXT0wLGFyW2U+PjJdPTAsYXJbZSs0Pj4yXT0wLGFyW2UrOD4+Ml09MCxhcltlKzEyPj4yXT0wLGFyW2krNjg+PjJdPXksYXJbQT4+Ml09Zix5PShhcltBKzQ+PjJdPWkpKzE2fDAsYnUoaSksc3UoaSksZT0wfGFyW3k+PjJdLGFyW2Y+PjJdPWYsYXJbeT4+Ml09aSwwfGUmJmt1KGUpLGR1KGkpLHA9MHxhcltyPj4yXSx5byhmLGI9MHxhcltwKzI0Pj4yXSxwPTB8YXJbcCsyOD4+Ml0sMSwzKSxCbyhmLDMsYixwLDI1NSYoMHxWbygwfGFyW3I+PjJdLDEwKSkpLEJvKGYsNCxiLHAsMjU1JigwfFZvKDB8YXJbcj4+Ml0sMTApKSksQm8oZiw1LGIscCwyNTUmKDB8Vm8oMHxhcltyPj4yXSwxMCkpKSxzJiZCbyhmLDYsYixwLDI1NSYoMHxWbygwfGFyW3I+PjJdLDEwKSkpLGFyW2Q+PjJdPTAseT1zPzg6NixhcltoPj4yXT0wLGFyW3c+PjJdPTAsYXJbdj4+Ml09MCxhPShhclttPj4yXT0wKXxSbygwfGFyW3I+PjJdLDEwLGQpLGM9MHxGbyhmLDMsaCksbD0wfEZvKGYsNCx3KSx1PTB8Rm8oZiw1LHYpLFo9cz8oZz0wfEZvKGYsNixtKSwoMHxhclttPj4yXSkvMnwwKTpnPTAsbz0oMHxhcltoPj4yXSkvMnwwLGFyW2g+PjJdPW8sdD0oMHxhclt3Pj4yXSkvMnwwLGFyW3c+PjJdPXQsbj0oMHxhclt2Pj4yXSkvMnwwLGFyW3Y+PjJdPW4sYXJbbT4+Ml09WiwoMHxwKTw9MCl1cj1rO2Vsc2V7QT0wPCgwfGIpLGY9MDtkb3tBOmRve2lmKEEpe2lmKHI9MHxicigwfGFyW2Q+PjJdLGYpLGg9MHxicihvLGYpLHc9MHxicih0LGYpLHY9MHxicihuLGYpLCFzKWZvcihlPTA7OylpZihCPXIrKDB8YnIoZSx5KSl8MCxpPTY1NTM1JigoMHxjclthKyhCKzIpPj4wXSk8PDh8MHxjclthKyhCKzMpPj4wXSksbT02NTUzNSYoKDB8Y3JbYSsoQis0KT4+MF0pPDw4fDB8Y3JbYSsoQis1KT4+MF0pLG9yW2MrKGgrZTw8MSk+PjFdPSgwfGNyW2ErQj4+MF0pPDw4fDB8Y3JbYSsoQisxKT4+MF0sb3JbbCsodytlPDwxKT4+MV09aSxvclt1Kyh2K2U8PDEpPj4xXT1tLCgwfChlPWUrMXwwKSk9PSgwfGIpKWJyZWFrIEE7Zm9yKGk9MHxicihaLGYpLGU9MDtFPXIrKDB8YnIoZSx5KSl8MCxtPTY1NTM1JigoMHxjclthKyhFKzIpPj4wXSk8PDh8MHxjclthKyhFKzMpPj4wXSksQj02NTUzNSYoKDB8Y3JbYSsoRSs0KT4+MF0pPDw4fDB8Y3JbYSsoRSs1KT4+MF0pLG9yW2MrKGgrZTw8MSk+PjFdPSgwfGNyW2ErRT4+MF0pPDw4fDB8Y3JbYSsoRSsxKT4+MF0sb3JbbCsodytlPDwxKT4+MV09bSxvclt1Kyh2K2U8PDEpPj4xXT1CLEI9cisoZTw8Myl8MCxvcltnKyhpK2U8PDEpPj4xXT0oMHxjclthKyhCKzYpPj4wXSk8PDh8MHxjclthKyhCKzcpPj4wXSwoMHwoZT1lKzF8MCkpIT0oMHxiKTspO319d2hpbGUoMCk7Zj1mKzF8MH13aGlsZSgoMHxmKSE9KDB8cCkpO3VyPWt9fSxmdW5jdGlvbihBLGUscixpLGYpe0F8PTAsZXw9MCxpfD0wLGZ8PTA7dmFyIG4sdCxvPTAsYT0wLGM9MCxsPTA7aWYodXI9KHQ9dXIpKzY0fDAsbj10KzM2fDAsaT10KzQ4fDAsYz10LDE9PSgwfGFyWyhyfD0wKT4+Ml0pJiYxMj09KC00JihvPTB8YXJbKGE9cis0fDApPj4yXSl8MCkpe3N3aXRjaChhcltuPj4yXT0wLGFyWyhsPTQrbnwwKT4+Ml09MCwoYXJbOCtuPj4yXT0wKXxvKXtjYXNlIDEyOmNhc2UgMTQ6ZT0wfGFyW3IrMTI+PjJdLGFyW2M+PjJdPTEsYXJbYys0Pj4yXT0xND09KDB8byk/MTI6MTQsdHJbYys4Pj4wXT0wLHRyWyhvPWMrOXwwKT4+MF09MHx0cltpPj4wXSx0cltvKzE+PjBdPTB8dHJbaSsxPj4wXSx0cltvKzI+PjBdPTB8dHJbaSsyPj4wXSxhcltjKzEyPj4yXT1lLGFyW2MrMTY+PjJdPTAsYXJbKGU9YysyMHwwKT4+Ml09MCxnQVtjKzI0Pj4yXT0uMTAwMDAwMDAxNDkwMTE2MTIsZ0FbYysyOD4+Ml09MCxnQVtjKzMyPj4yXT0wLE5sKG4sYyksMHwoZT0wfGFyW2U+PjJdKSYmZHUoZSksZT0wfGFyW2E+PjJdO2JyZWFrO2RlZmF1bHQ6ZT1vfXN3aXRjaCgwfGUpe2Nhc2UgMTM6Y2FzZSAxNTpmPTB8YXJbcisxMj4+Ml0sYXJbYz4+Ml09MSxhcltjKzQ+PjJdPTE1PT0oMHxlKT8xMzoxNSx0cltjKzg+PjBdPTEsdHJbKG89Yys5fDApPj4wXT0wfHRyW2k+PjBdLHRyW28rMT4+MF09MHx0cltpKzE+PjBdLHRyW28rMj4+MF09MHx0cltpKzI+PjBdLGFyW2MrMTI+PjJdPWYsYXJbKGk9YysxNnwwKT4+Ml09MCxhclsoZj1jKzIwfDApPj4yXT0wLGdBW2MrMjQ+PjJdPS4xMDAwMDAwMDE0OTAxMTYxMixnQVtjKzI4Pj4yXT0wLChvPShnQVtjKzMyPj4yXT0wKXxhcltsPj4yXSk+Pj4wPj0oMHxhclsoZT04K258MCk+PjJdKT4+PjA/KE5sKG4sYyksMHwoaT0wfGFyW2Y+PjJdKSYmZHUoaSkpOihhcltvPj4yXT1hcltjPj4yXSxhcltvKzQ+PjJdPWFyW2MrND4+Ml0sYXJbbys4Pj4yXT1hcltjKzg+PjJdLGFyW28rMTI+PjJdPWFyW2MrMTI+PjJdLGFyW28rMTY+PjJdPWFyW2k+PjJdLGFyW28rMjA+PjJdPWFyW2Y+PjJdLGFyW2k+PjJdPTAsYz1jKzI0fChhcltmPj4yXT0wKSxhclsocj1vKzI0fDApPj4yXT1hcltjPj4yXSxhcltyKzQ+PjJdPWFyW2MrND4+Ml0sYXJbcis4Pj4yXT1hcltjKzg+PjJdLGFyW2w+PjJdPW8rMzYpO2JyZWFrO2RlZmF1bHQ6ZT04K258MH1yZXR1cm4gYXJbQT4+Ml09YXJbbj4+Ml0sYXJbQSs0Pj4yXT1hcltsPj4yXSxhcltBKzg+PjJdPWFyW2U+PjJdLGFyW2U+PjJdPTAsdm9pZCh1cj10KX1hcltBPj4yXT0wLGFyW0ErND4+Ml09MCxhcltBKzg+PjJdPTAsdXI9dH0sZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTA7dmFyIG4sdCxvLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wLGQ9MDtzd2l0Y2godXI9KG89dXIpKzE2fDAsbj1vKzR8MCx0PW8sYT0wfGh1KDgwKSxhclthKzQ+PjJdPTAsYXJbYSs4Pj4yXT0wLGFyW2E+PjJdPTYyMDgsYXJbKGk9YSsxMnwwKT4+Ml09MCxhcltpKzQ+PjJdPTAsYXJbaSs4Pj4yXT0wLGFyW2krMTI+PjJdPTAsYXJbaSsxNj4+Ml09MCxhclthKzMyPj4yXT0zMjIxNSxhclthKzM2Pj4yXT0wLGFyW2ErNDA+PjJdPTAsYXJbYSs0ND4+Ml09OTksYXJbYSs0OD4+Ml09OTksdT1hKzUyfDAsYXJbKGw9YSs3MnwwKT4+Ml09MCxhclthKzc2Pj4yXT0wLGFyW3U+PjJdPTAsYXJbdSs0Pj4yXT0wLGFyW3UrOD4+Ml09MCxhclt1KzEyPj4yXT0wLGFyW2ErNjg+PjJdPWwsbD1pLGM9KHU9YSkrMTZ8MCxidShhKSxzdShhKSxlPTB8YXJbYz4+Ml0sYXJbaT4+Ml09bCxhcltjPj4yXT11LDB8ZSYma3UoZSksZHUoYSksZT0wfGFyW3I+PjJdLGY9MHxhcltlKzI0Pj4yXSxjPTB8YXJbZSsyOD4+Ml0sMHxhcltlKzM2Pj4yXSl7Y2FzZSAxNDp5byhpLGYsYywxLDEyKSxlPWk7YnJlYWs7Y2FzZSAxMjp5byhpLGYsYywxLDE0KSxlPWk7YnJlYWs7Y2FzZSAxNTp5byhpLGYsYywxLDEzKSxlPWk7YnJlYWs7Y2FzZSAxMzp5byhpLGYsYywxLDE1KSxlPWk7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gYXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsZHUoYSksdm9pZCh1cj1vKX1pZihCbyhlLDEwLGYsYywyNTUmKDB8Vm8oMHxhcltyPj4yXSwxMCkpKSxhcltuPj4yXT0wLHI9KGFyW3Q+PjJdPTApfFJvKDB8YXJbcj4+Ml0sMTAsbiksZj0wfEZvKGUsMTAsdCksMDwoMHxjKSYwPCgwfChhPSgwfChpPTB8YXJbdD4+Ml0pKTwoMHwoYT0wfGFyW24+PjJdKSk/aTphKSkpe2k9MDtkb3tmb3IoZT0wO2Q9cisoKGI9MXxlKSsoMHxicigwfGFyW24+PjJdLGkpKSl8MCxzPWYrKCgwfGJyKDB8YXJbdD4+Ml0saSkpK2UpfDAsdHJbcz4+MF09MHx0cltkPj4wXSxzPXIrKCgwfGJyKDB8YXJbbj4+Ml0saSkpK2UpfDAsYj1mKyhiKygwfGJyKDB8YXJbdD4+Ml0saSkpKXwwLHRyW2I+PjBdPTB8dHJbcz4+MF0sKDB8KGU9ZSsyfDApKTwoMHxhKTspO2k9aSsxfDB9d2hpbGUoKDB8aSkhPSgwfGMpKX1hcltBPj4yXT1sLGFyW0ErND4+Ml09dSx1cj1vfSxmdW5jdGlvbihBLGUscixpLGYpe0F8PTAsZXw9MCxpfD0wLGZ8PTA7dmFyIG4sdD0wO2lmKHVyPShuPXVyKSs0OHwwLGY9biszNnwwLGU9biwyPT0oMHxhclsocnw9MCk+PjJdKSYmMD09KDB8YXJbcis0Pj4yXSkpcmV0dXJuIGFyW2Y+PjJdPTAsYXJbKGk9Zis0fDApPj4yXT0wLHQ9KGFyW2YrOD4+Ml09MCl8dHJbcis4Pj4wXSxyPTB8YXJbcisxMj4+Ml0sYXJbZT4+Ml09MCxhcltlKzQ+PjJdPTEsdHJbZSs4Pj4wXT10LGFyW2UrMTI+PjJdPXIsYXJbZSsxNj4+Ml09MCxhclsocj1lKzIwfDApPj4yXT0wLGdBW2UrMjQ+PjJdPS4xMDAwMDAwMDE0OTAxMTYxMixnQVtlKzI4Pj4yXT0wLGdBW2UrMzI+PjJdPTAsTmwoZixlKSwwfChlPTB8YXJbcj4+Ml0pJiZkdShlKSxhcltBPj4yXT1hcltmPj4yXSxhcltBKzQ+PjJdPWFyW2k+PjJdLGFyW0ErOD4+Ml09YXJbZis4Pj4yXSx2b2lkKHVyPW4pO2FyW0E+PjJdPTAsYXJbQSs0Pj4yXT0wLGFyW0ErOD4+Ml09MCx1cj1ufSxmdW5jdGlvbihBLGUscixpLGYpe0F8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MDt2YXIgbix0LG8sYSxjLGwsdSxiLHMsZD0wLGs9MCxoPTAsdz0wLHY9MCxtPTAsZz0wLFo9MCxwPTAseT0wLEI9MDtpZih1cj0ocz11cikrMTZ8MCx1PXMrMTJ8MCxiPXMrOHwwLGE9cys0fDAsYz1zLGk9MHxodSg4MCksYXJbaSs0Pj4yXT0wLGFyW2krOD4+Ml09MCxhcltpPj4yXT02MjA4LGFyWyhsPWkrMTJ8MCk+PjJdPTAsYXJbNCtsPj4yXT0wLGFyWzgrbD4+Ml09MCxhclsxMitsPj4yXT0wLGFyWzE2K2w+PjJdPTAsYXJbaSszMj4+Ml09MzIyMTUsYXJbaSszNj4+Ml09MCxhcltpKzQwPj4yXT0wLGFyW2krNDQ+PjJdPTk5LGFyW2krNDg+PjJdPTk5LGU9aSs1MnwwLGFyWyhCPWkrNzJ8MCk+PjJdPTAsYXJbaSs3Nj4+Ml09MCxhcltlPj4yXT0wLGFyW2UrND4+Ml09MCxhcltlKzg+PjJdPTAsYXJbZSsxMj4+Ml09MCxhcltpKzY4Pj4yXT1CLGFyW0E+PjJdPWwsQj0oYXJbQSs0Pj4yXT1pKSsxNnwwLGJ1KGkpLHN1KGkpLGU9MHxhcltCPj4yXSxhcltsPj4yXT1sLGFyW0I+PjJdPWksMHxlJiZrdShlKSxkdShpKSxCPTB8YXJbcj4+Ml0seW8obCxvPTB8YXJbQisyND4+Ml0sQj0wfGFyW0IrMjg+PjJdLDAsMSksbj0oMStvfDApLzJ8MCxwPShCKzF8MCkvMnwwLEJvKGwsMCxvLEIsaT0yNTUmKGU9MHxWbygwfGFyW3I+PjJdLDApKSksQm8obCwxLG4scCxpKSxCbyhsLDIsbixwLGkpLCh0PTB8RW8oMHxhcltyPj4yXSw2KSk/Qm8obCw2LG8sQix5PTI1NSYoMHxWbygwfGFyW3I+PjJdLDYpKSk6eT0wLGU8PDI0Pj4yND09OCl7aWYoYXJbdT4+Ml09MCxhcltiPj4yXT0wLGFyW2E+PjJdPTAsaT0oYXJbYz4+Ml09MCl8Um8oMHxhcltyPj4yXSwwLGMpLGY9MHxGbyhsLDAsYSksZz0wfEZvKGwsMSx1KSxaPTB8Rm8obCwyLGIpLHZiKDB8ZywtMTI4LDB8YnIoMHxhclt1Pj4yXSxwKSksdmIoMHxaLC0xMjgsMHxicigwfGFyW2I+PjJdLHApKSwwPCgwfEIpKWZvcihlPTA7aGIoMHwocD1mKygwfGJyKDB8YXJbYT4+Ml0sZSkpfDApLGkrKDB8YnIoMHxhcltjPj4yXSxlKSl8MCwwfG8pLCgwfChlPWUrMXwwKSkhPSgwfEIpOyk7fWVsc2V7YXJbdT4+Ml09MCxhcltiPj4yXT0wLGFyW2E+PjJdPTAsZz0oYXJbYz4+Ml09MCl8Um8oMHxhcltyPj4yXSwwLGMpLFo9MHxGbyhsLDAsYSksaz0wfEZvKGwsMSx1KSxoPTB8Rm8obCwyLGIpLGFyW2M+PjJdPSgwfGFyW2M+PjJdKS8yfDAsYXJbYT4+Ml09KDB8YXJbYT4+Ml0pLzJ8MCx3PSgwfGFyW3U+PjJdKS8yfDAsYXJbdT4+Ml09dyx2PSgwfGFyW2I+PjJdKS8yfDAsYXJbYj4+Ml09dixtPTA8KDB8Qik7ZG97aWYobSl7aWYoZj0xMjg8PGkrLTgmNjU1MzUsMDwoMHxvKSl7aT0wO2Rve2ZvcihBPTB8YnIodyxpKSxkPTB8YnIodixpKSxlPTA7b3JbaysoQStlPDwxKT4+MV09ZixvcltoKyhkK2U8PDEpPj4xXT1mLCgwfChlPWUrMXwwKSk8KDB8bik7KTtpPWkrMXwwfXdoaWxlKCgwfGkpPCgwfHApKTtpZighbSlicmVha31pZihoYigwfFosMHxnLDB8KGU9bzw8MSkpLDEhPSgwfEIpKWZvcihpPTE7aGIoWisoKDB8YnIoMHxhclthPj4yXSxpKSk8PDEpfDAsZysoKDB8YnIoMHxhcltjPj4yXSxpKSk8PDEpfDAsMHxlKSwoMHwoaT1pKzF8MCkpIT0oMHxCKTspO319d2hpbGUoMCl9aWYodCl7aWYoYXJbdT4+Ml09MCxBPShhcltiPj4yXT0wKXxSbygwfGFyW3I+PjJdLDYsdSksZj0wfEZvKGwsNixiKSxpPW88PCg4PHk+Pj4wJjEpLDA8KDB8QikpZm9yKGU9MDtoYigwfChyPWYrKDB8YnIoMHxhcltiPj4yXSxlKSl8MCksQSsoMHxicigwfGFyW3U+PjJdLGUpKXwwLDB8aSksKDB8KGU9ZSsxfDApKSE9KDB8Qik7KTt1cj1zfWVsc2UgdXI9c30sZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLGV8PTAsaXw9MCxmfD0wO3ZhciBuLHQsbz0wLGE9MCxjPTAsbD0wLHU9MDtzd2l0Y2godXI9KHQ9dXIpKzY0fDAsbj10KzM2fDAsbz10KzQ4fDAsbD10LDB8YXJbKHJ8PTApPj4yXSl7Y2FzZSAwOmNhc2UgMjppZigwPT0oMHxhcltyKzQ+PjJdKSYmOD09KDB8YXJbcisxMj4+Ml0pKXJldHVybiBhcltuPj4yXT0wLGFyWyh1PTQrbnwwKT4+Ml09MCwoYXJbOCtuPj4yXT0wKXx0cltyKzg+PjBdPyhjPTgrbnwwLHI9Zj1hPTApOihhcltsPj4yXT0xLGFyW2wrND4+Ml09MTAsdHJbbCs4Pj4wXT0wLHRyWyhlPWwrOXwwKT4+MF09MHx0cltvPj4wXSx0cltlKzE+PjBdPTB8dHJbbysxPj4wXSx0cltlKzI+PjBdPTB8dHJbbysyPj4wXSxhcltsKzEyPj4yXT04LGFyW2wrMTY+PjJdPTAsYXJbKGU9bCsyMHwwKT4+Ml09MCxnQVtsKzI0Pj4yXT0uMTAwMDAwMDAxNDkwMTE2MTIsZ0FbbCsyOD4+Ml09MCxpPTgrbnwoZ0FbbCszMj4+Ml09MCksTmwobixsKSwwfChlPTB8YXJbZT4+Ml0pJiZkdShlKSxhPXI9MHxhclt1Pj4yXSxmPTB8YXJbKGM9aSk+PjJdKSxhcltsPj4yXT0xLGFyW2wrND4+Ml09MTEsdHJbbCs4Pj4wXT0xLHRyWyhlPWwrOXwwKT4+MF09MHx0cltvPj4wXSx0cltlKzE+PjBdPTB8dHJbbysxPj4wXSx0cltlKzI+PjBdPTB8dHJbbysyPj4wXSxhcltsKzEyPj4yXT04LGFyWyhlPWwrMTZ8MCk+PjJdPTAsYXJbKGk9bCsyMHwwKT4+Ml09MCxnQVtsKzI0Pj4yXT0uMTUwMDAwMDA1OTYwNDY0NDgsZ0FbbCsyOD4+Ml09MCxmPj4+KGdBW2wrMzI+PjJdPTApPD1hPj4+MD8oTmwobixsKSwwfChlPTB8YXJbaT4+Ml0pJiZkdShlKSk6KGFyW3I+PjJdPWFyW2w+PjJdLGFyW3IrND4+Ml09YXJbbCs0Pj4yXSxhcltyKzg+PjJdPWFyW2wrOD4+Ml0sYXJbcisxMj4+Ml09YXJbbCsxMj4+Ml0sYXJbYSsxNj4+Ml09YXJbZT4+Ml0sYXJbYSsyMD4+Ml09YXJbaT4+Ml0sYXJbZT4+Ml09MCxsPWwrMjR8KGFyW2k+PjJdPTApLGFyWyhvPWErMjR8MCk+PjJdPWFyW2w+PjJdLGFyW28rND4+Ml09YXJbbCs0Pj4yXSxhcltvKzg+PjJdPWFyW2wrOD4+Ml0sYXJbdT4+Ml09YSszNiksYXJbQT4+Ml09YXJbbj4+Ml0sYXJbQSs0Pj4yXT1hclt1Pj4yXSxhcltBKzg+PjJdPWFyW2M+PjJdLGFyW2M+PjJdPTAsdm9pZCh1cj10KX1hcltBPj4yXT0wLGFyW0ErND4+Ml09MCxhcltBKzg+PjJdPTAsdXI9dH0sZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLGV8PTAsaXw9MCxmfD0wO3ZhciBuLHQsbyxhLGMsbCx1LGI9MCxzPTAsZD0wLGs9MCxoPTAsdz0wLHY9MDtpZih1cj0odT11cikrMTZ8MCxjPXUrOHwwLHQ9dSs0fDAsbD11LGs9MHxhclsocnw9MCk+PjJdLG89MHxhcltrKzI0Pj4yXSxhPTB8YXJbaysyOD4+Ml0sKDB8Vm8oaywwKSk8PDI0Pj4yNCE9OClyZXR1cm4gYXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsdm9pZCh1cj11KTtpZihmPTB8aHUoODApLGFyW2YrND4+Ml09MCxhcltmKzg+PjJdPTAsYXJbZj4+Ml09NjIwOCxhclsoYj1mKzEyfDApPj4yXT0wLGFyW2IrND4+Ml09MCxhcltiKzg+PjJdPTAsYXJbYisxMj4+Ml09MCxhcltiKzE2Pj4yXT0wLGFyW2YrMzI+PjJdPTMyMjE1LGFyW2YrMzY+PjJdPTAsYXJbZis0MD4+Ml09MCxhcltmKzQ0Pj4yXT05OSxhcltmKzQ4Pj4yXT05OSxrPWYrNTJ8MCxhclsoZD1mKzcyfDApPj4yXT0wLGFyW2YrNzY+PjJdPTAsYXJbaz4+Ml09MCxhcltrKzQ+PjJdPTAsYXJbays4Pj4yXT0wLGFyW2srMTI+PjJdPTAsYXJbZis2OD4+Ml09ZCxkPWIscz0oaz1mKSsxNnwwLGJ1KGYpLHN1KGYpLGU9MHxhcltzPj4yXSxhcltiPj4yXT1kLGFyW3M+PjJdPWssMHxlJiZrdShlKSxkdShmKSxlPTB8RW8oMHxhcltyPj4yXSw2KSwwfHRyWyhuPWkrOHwwKT4+MF0/eW8oYixvLGEsMSwxMSk6eW8oYixvLGEsMSwxMCksQm8oYiwxMCxvLGEsOCksYXJbYz4+Ml09MCxzPShhcltsPj4yXT0wKXxSbygwfGFyW3I+PjJdLDAsYyksaT1lPzB8Um8oMHxhcltyPj4yXSw2LHQpOjAsYj0wfEZvKGIsMTAsbCksMDwoMHxhKSlpZihyPTA8KDB8byksZSl7Zj0wO2Rve2lmKDB8dHJbbj4+MF0pe2lmKHIpZm9yKGU9MDtoPXMrKCgwfGJyKDB8YXJbYz4+Ml0sZikpK2UpfDAsaD0wfHRyW2g+PjBdLHY9ZTw8Mix3PWIrKCgwfGJyKDB8YXJbbD4+Ml0sZikpK3YpfDAsdHJbdz4+MF09aCx3PWIrKCgxfHYpKygwfGJyKDB8YXJbbD4+Ml0sZikpKXwwLHRyW3c+PjBdPWgsdz1iKygoMnx2KSsoMHxicigwfGFyW2w+PjJdLGYpKSl8MCx0clt3Pj4wXT1oLHc9aSsoKDB8YnIoMHxhclt0Pj4yXSxmKSkrZSl8MCx2PWIrKCgzfHYpKygwfGJyKDB8YXJbbD4+Ml0sZikpKXwwLHRyW3Y+PjBdPTB8dHJbdz4+MF0sKDB8KGU9ZSsxfDApKSE9KDB8byk7KTt9ZWxzZSBpZihyKWZvcihlPTA7dz1zKygoMHxicigwfGFyW2M+PjJdLGYpKStlKXwwLHc9MHx0clt3Pj4wXSxoPTMqZXwwLHY9YisoKDB8YnIoMHxhcltsPj4yXSxmKSkraCl8MCx0clt2Pj4wXT13LHY9YisoaCsxKygwfGJyKDB8YXJbbD4+Ml0sZikpKXwwLHRyW3Y+PjBdPXcsaD1iKyhoKzIrKDB8YnIoMHxhcltsPj4yXSxmKSkpfDAsdHJbaD4+MF09dywoMHwoZT1lKzF8MCkpIT0oMHxvKTspO2Y9ZisxfDB9d2hpbGUoKDB8ZikhPSgwfGEpKX1lbHNle2Y9MDtkb3tpZigwfHRyW24+PjBdKXtpZihyKWZvcihlPTA7aD1zKygoMHxicigwfGFyW2M+PjJdLGYpKStlKXwwLGg9MHx0cltoPj4wXSx2PWU8PDIsdz1iKygoMHxicigwfGFyW2w+PjJdLGYpKSt2KXwwLHRyW3c+PjBdPWgsdz1iKygoMXx2KSsoMHxicigwfGFyW2w+PjJdLGYpKSl8MCx0clt3Pj4wXT1oLHc9YisoKDJ8dikrKDB8YnIoMHxhcltsPj4yXSxmKSkpfDAsdHJbdz4+MF09aCx2PWIrKCgzfHYpKygwfGJyKDB8YXJbbD4+Ml0sZikpKXwwLHRyW3Y+PjBdPS0xLCgwfChlPWUrMXwwKSkhPSgwfG8pOyk7fWVsc2UgaWYocilmb3IoZT0wO3c9cysoKDB8YnIoMHxhcltjPj4yXSxmKSkrZSl8MCx3PTB8dHJbdz4+MF0sdj0zKmV8MCxoPWIrKCgwfGJyKDB8YXJbbD4+Ml0sZikpK3YpfDAsdHJbaD4+MF09dyxoPWIrKHYrMSsoMHxicigwfGFyW2w+PjJdLGYpKSl8MCx0cltoPj4wXT13LHY9YisodisyKygwfGJyKDB8YXJbbD4+Ml0sZikpKXwwLHRyW3Y+PjBdPXcsKDB8KGU9ZSsxfDApKSE9KDB8byk7KTtmPWYrMXwwfXdoaWxlKCgwfGYpIT0oMHxhKSl9YXJbQT4+Ml09ZCxhcltBKzQ+PjJdPWssdXI9dX0sZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLGV8PTAsaXw9MCxmfD0wO3ZhciBuLHQsbyxhPTAsYz0wLGw9MCx1PTA7aWYodXI9KG89dXIpKzY0fDAsdD1vKzM2fDAsbj1vKzQ4fDAsdT1vLDE9PSgwfGFyWyhyfD0wKT4+Ml0pJiYxMD09KC0yJihhPTB8YXJbKGM9cis0fDApPj4yXSl8MCkpcmV0dXJuIDM8PSgoZT0wfGFyWyhmPWkrNHwwKT4+Ml0pKy0xfDApPj4+MHx8MHwobD0wfGFyW2krMTY+PjJdKSYmMD09KDB8b3JbbCs4Pj4xXSk/KGFyW0E+PjJdPTAsYXJbQSs0Pj4yXT0wLGFyW0ErOD4+Ml09MCk6KGFyW3Q+PjJdPTAsYXJbKGw9NCt0fDApPj4yXT0wLDExPT0oKGFyWzgrdD4+Ml09MCl8KGU9MTA9PSgwfGEpPyhhclt1Pj4yXT0wLGFyW3UrND4+Ml09ZSx0clt1Kzg+PjBdPTAsdHJbKGU9dSs5fDApPj4wXT0wfHRyW24+PjBdLHRyW2UrMT4+MF09MHx0clsxK24+PjBdLHRyW2UrMj4+MF09MHx0clsyK24+PjBdLGFyW3UrMTI+PjJdPTgsYXJbdSsxNj4+Ml09MCxhclsoZT11KzIwfDApPj4yXT0wLGdBW3UrMjQ+PjJdPS43NSxnQVt1KzI4Pj4yXT0uNSxnQVt1KzMyPj4yXT0wLE5sKHQsdSksMHwoZT0wfGFyW2U+PjJdKSYmZHUoZSksMHxhcltjPj4yXSk6YSkpPyhmPTB8YXJbZj4+Ml0sYXJbdT4+Ml09MCxhclt1KzQ+PjJdPWYsdHJbdSs4Pj4wXT0xLHRyWyhmPXUrOXwwKT4+MF09MHx0cltuPj4wXSx0cltmKzE+PjBdPTB8dHJbMStuPj4wXSx0cltmKzI+PjBdPTB8dHJbMituPj4wXSxhclt1KzEyPj4yXT04LGFyWyhmPXUrMTZ8MCk+PjJdPTAsYXJbKHI9dSsyMHwwKT4+Ml09MCxnQVt1KzI0Pj4yXT0uNzUsZ0FbdSsyOD4+Ml09LjUsKGk9KGdBW3UrMzI+PjJdPTApfGFyW2w+PjJdKT4+PjA+PSgwfGFyWyhlPTgrdHwwKT4+Ml0pPj4+MD8oTmwodCx1KSwwfChmPTB8YXJbcj4+Ml0pJiZkdShmKSk6KGFyW2k+PjJdPWFyW3U+PjJdLGFyW2krND4+Ml09YXJbdSs0Pj4yXSxhcltpKzg+PjJdPWFyW3UrOD4+Ml0sYXJbaSsxMj4+Ml09YXJbdSsxMj4+Ml0sYXJbaSsxNj4+Ml09YXJbZj4+Ml0sYXJbaSsyMD4+Ml09YXJbcj4+Ml0sYXJbZj4+Ml09MCx1PXUrMjR8KGFyW3I+PjJdPTApLGFyWyhjPWkrMjR8MCk+PjJdPWFyW3U+PjJdLGFyW2MrND4+Ml09YXJbdSs0Pj4yXSxhcltjKzg+PjJdPWFyW3UrOD4+Ml0sYXJbbD4+Ml09aSszNikpOmU9OCt0fDAsYXJbQT4+Ml09YXJbdD4+Ml0sYXJbQSs0Pj4yXT1hcltsPj4yXSxhcltBKzg+PjJdPWFyW2U+PjJdLGFyW2U+PjJdPTApLHZvaWQodXI9byk7YXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsYXJbQSs4Pj4yXT0wLHVyPW99LGZ1bmN0aW9uKEEsZSxyLGksZil7QXw9MCxlfD0wLGl8PTAsZnw9MDt2YXIgbix0LG8sYSxjLGwsdSxiLHMsZD0wLGs9MCxoPTAsdz0wLHY9MCxtPTAsZz0wLFo9MCxwPTAseT0wLEI9MCxFPTAsWD0wLFc9MCxJPTAsQz0wLEc9MCxWPTAsRj0wLFI9MCxOPTA7aWYodXI9KHM9dXIpKzExMnwwLEc9cys5NnwwLFY9cys5MnwwLHA9cys4OHwwLHU9cys4NHwwLGI9cys4MHwwLEU9cys0MHwwLGs9cyxGPTB8YXJbKHJ8PTApPj4yXSxsPTB8YXJbRisyND4+Ml0sRj0wfGFyW0YrMjg+PjJdLGY9MHxodSg4MCksYXJbZis0Pj4yXT0wLGFyW2YrOD4+Ml09MCxhcltmPj4yXT02MjA4LGFyWyhkPWYrMTJ8MCk+PjJdPTAsYXJbZCs0Pj4yXT0wLGFyW2QrOD4+Ml09MCxhcltkKzEyPj4yXT0wLGFyW2QrMTY+PjJdPTAsYXJbZiszMj4+Ml09MzIyMTUsYXJbZiszNj4+Ml09MCxhcltmKzQwPj4yXT0wLGFyW2YrNDQ+PjJdPTk5LGFyW2YrNDg+PjJdPTk5LGU9Zis1MnwwLGFyWyhDPWYrNzJ8MCk+PjJdPTAsYXJbZis3Nj4+Ml09MCxhcltlPj4yXT0wLGFyW2UrND4+Ml09MCxhcltlKzg+PjJdPTAsYXJbZSsxMj4+Ml09MCxhcltmKzY4Pj4yXT1DLGFyW0E+PjJdPWQsQz0oYXJbQSs0Pj4yXT1mKSsxNnwwLGJ1KGYpLHN1KGYpLGU9MHxhcltDPj4yXSxhcltkPj4yXT1kLGFyW0M+PjJdPWYsMHxlJiZrdShlKSxkdShmKSxXPTB8Z28oWD0wfGFyW2krND4+Ml0pLEk9MHxabyhYKSx5byhkLGwsRiwwLFgpLFg9KGwtMSsoVyY9MjU1KXwwKS8oMHxXKXwwLEM9KEYrLTErKEkmPTI1NSl8MCkvKDB8SSl8MCxjPTExPT0oMHxhclszNisoMHxhcltyPj4yXSk+PjJdKSxCbyhkLDAsbCxGLDgpLEJvKGQsMSxYLEMsOCksQm8oZCwyLFgsQyw4KSxjJiZCbyhkLDYsbCxGLDgpLGFyW0c+PjJdPTAsYXJbVj4+Ml09MCxhcltwPj4yXT0wLGFyW3U+PjJdPTAsQz0oYXJbYj4+Ml09MCl8Um8oMHxhcltyPj4yXSwxMCxiKSxaPTB8Rm8oZCwwLHApLG89MHxGbyhkLDEsRyksYT0wfEZvKGQsMixWKSxYPWM/MHxGbyhkLDYsdSk6MCxCZShFKSxlPTB8YXJbaSsxNj4+Ml0pZm9yKEE9MHx0cltlKzEwPj4wXSx5ZShrLDB8b3JbZSs4Pj4xXSwwfG9yW2UrND4+MV0pLEE9QTw8MjQ+PjI0IT0wLGU9ayxmPShyPUUpKzQwfDA7YXJbcj4+Ml09YXJbZT4+Ml0sZT1lKzR8MCwoMHwocj1yKzR8MCkpPCgwfGYpOyk7ZWxzZSBBPTE7aWYoZz1jPzQ6Myx0PTA8KDB8Rikpe2k9MDwoMHxsKSxrPUUrNHwwLHY9RSs4fDAsbT1FKzEyfDAsZD0wO2Rve2U9QysoMHxicigwfGFyW2I+PjJdLGQpKXwwO0E6ZG97aWYoaSl7aWYoQSlyPTA7ZWxzZSBmb3IoZj0wOzspe2lmKHk9MHxlZiguODU1NDcwMDAxNjk3NTQwMyooKDB8Y3JbZT4+MF0pKmdBW2s+PjJdKygwfGNyW2UrMT4+MF0pKmdBW3Y+PjJdKygwfGNyW2UrMj4+MF0pKmdBW20+PjJdKSksQj1aKygoMHxicigwfGFyW3A+PjJdLGQpKStmKXwwLHRyW0I+PjBdPSgwfHkpPDA/MTY6KCgwfHkpPDIxOT95OjIxOSkrMTYmMjU1LCgwfChmPWYrMXwwKSk9PSgwfGwpKWJyZWFrIEE7ZT1lK2d8MH1mb3IoO2Y9KDB8KGY9MHxlZigoMHxjcltlPj4wXSkqZ0Fbaz4+Ml0rKDB8Y3JbZSsxPj4wXSkqZ0Fbdj4+Ml0rKDB8Y3JbZSsyPj4wXSkqZ0FbbT4+Ml0pKSk8MD8wOjI1NTwoMHxmKT8tMToyNTUmZixCPVorKCgwfGJyKDB8YXJbcD4+Ml0sZCkpK3IpfDAsdHJbQj4+MF09ZiwoMHwocj1yKzF8MCkpIT0oMHxsKTspZT1lK2d8MH19d2hpbGUoMCk7ZD1kKzF8MH13aGlsZSgoMHxkKSE9KDB8RikpO2lmKHQpe0I9MDwoMHxsKSxtPTB8YnIoZyxXKSxnPUUrMTZ8MCxaPUUrMjB8MCxwPUUrMjR8MCxuPUUrMjh8MCx5PUUrMzJ8MCx2PUUrMzZ8MCxrPTA7ZG97aWYoQilmb3IoaT1DKygoZD0wKXxicigwfGFyW2I+PjJdLGspKXwwO049KygwfGNyW2k+PjBdKSxSPSsoMHxjcltpKzE+PjBdKSx3PSsoMHxjcltpKzI+PjBdKSxoPU4qZ0FbZz4+Ml0rUipnQVtaPj4yXSt3KmdBW3A+PjJdLHc9TipnQVtuPj4yXStSKmdBW3k+PjJdK3cqZ0Fbdj4+Ml0scj0oZj1BPyhFPTB8ZWYoaCsxMjgpLHI9KDB8aykvKDB8SSl8MCxlPSgwfGQpLygwfFcpfDAsZj1vKygoMHxicigwfGFyW0c+PjJdLHIpKStlKXwwLHRyW2Y+PjBdPSgwfEUpPDA/MDoyNTU8KDB8RSk/LTE6MjU1JkUsKDB8KGY9MHxlZih3KzEyOCkpKTwwPzA6MjU1PCgwfGYpPy0xOjI1NSZmKTooRT0wfGVmKC44NzUqaCsxMjgpLHI9KDB8aykvKDB8SSl8MCxlPSgwfGQpLygwfFcpfDAsZj1vKygoMHxicigwfGFyW0c+PjJdLHIpKStlKXwwLHRyW2Y+PjBdPSgwfEUpPDA/MDoyNTU8KDB8RSk/LTE6MjU1JkUsKDB8KGY9MHxlZiguODc1KncrMTI4KSkpPDA/MDoyNTU8KDB8Zik/LTE6MjU1JmYpLDB8YnIoMHxhcltWPj4yXSxyKSksdHJbYSsoZStyKT4+MF09ZiwhKCgwfGwpPD0oMHwoZD1kK1d8MCkpKTspaT1pK218MDtrPWsrSXwwfXdoaWxlKCgwfGspPCgwfEYpKTtpZihjJnQmMDwoMHxsKSl7ZT0wO2Rve2ZvcihmPTA7Rz1DKygoZjw8MnwzKSsoMHxicigwfGFyW2I+PjJdLGUpKSl8MCxWPVgrKCgwfGJyKDB8YXJbdT4+Ml0sZSkpK2YpfDAsdHJbVj4+MF09MHx0cltHPj4wXSwoMHwoZj1mKzF8MCkpIT0oMHxsKTspO2U9ZSsxfDB9d2hpbGUoKDB8ZSkhPSgwfEYpKTt1cj1zfWVsc2UgdXI9c31lbHNlIHVyPXN9ZWxzZSB1cj1zfSxmdW5jdGlvbihBLGUscixpLGYpe0F8PTAsZXw9MCxpfD0wLGZ8PTA7dmFyIG4sdCxvPTAsYT0wLGM9MCxsPTA7aWYodXI9KHQ9dXIpKzY0fDAsbj10KzM2fDAsZj10KzQ4fDAsbD10LDE9PSgwfGFyWyhyfD0wKT4+Ml0pJiYxMD09KC0yJihvPTB8YXJbKGE9cis0fDApPj4yXSl8MCkpcmV0dXJuIShlPTB8YXJbaSsxNj4+Ml0pfHwwfG9yW2UrOD4+MV18fDB8KGM9MHxhcltyKzE2Pj4yXSkmJjA9PSgwfHRyW2MrMTA+PjBdKT8oYXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsYXJbQSs4Pj4yXT0wKTooYXJbbj4+Ml09MCxhclsoYz00K258MCk+PjJdPTAsMTE9PSgoYXJbOCtuPj4yXT0wKXwoZT0xMD09KDB8byk/KGFyW2w+PjJdPTAsYXJbbCs0Pj4yXT0zLHRyW2wrOD4+MF09MCx0clsoZT1sKzl8MCk+PjBdPTB8dHJbZj4+MF0sdHJbZSsxPj4wXT0wfHRyW2YrMT4+MF0sdHJbZSsyPj4wXT0wfHRyW2YrMj4+MF0sYXJbbCsxMj4+Ml09OCxhcltsKzE2Pj4yXT0wLGFyWyhlPWwrMjB8MCk+PjJdPTAsZ0FbbCsyND4+Ml09Ljc1LGdBW2wrMjg+PjJdPS41LGdBW2wrMzI+PjJdPTAsTmwobixsKSwwfChlPTB8YXJbZT4+Ml0pJiZkdShlKSwwfGFyW2E+PjJdKTpvKSk/KGFyW2w+PjJdPTAsYXJbbCs0Pj4yXT0zLHRyW2wrOD4+MF09MSx0clsoaT1sKzl8MCk+PjBdPTB8dHJbZj4+MF0sdHJbaSsxPj4wXT0wfHRyW2YrMT4+MF0sdHJbaSsyPj4wXT0wfHRyW2YrMj4+MF0sYXJbbCsxMj4+Ml09OCxhclsoZj1sKzE2fDApPj4yXT0wLGFyWyhpPWwrMjB8MCk+PjJdPTAsZ0FbbCsyND4+Ml09Ljc1LGdBW2wrMjg+PjJdPS41LChyPShnQVtsKzMyPj4yXT0wKXxhcltjPj4yXSk+Pj4wPj0oMHxhclsoZT04K258MCk+PjJdKT4+PjA/KE5sKG4sbCksMHwoZj0wfGFyW2k+PjJdKSYmZHUoZikpOihhcltyPj4yXT1hcltsPj4yXSxhcltyKzQ+PjJdPWFyW2wrND4+Ml0sYXJbcis4Pj4yXT1hcltsKzg+PjJdLGFyW3IrMTI+PjJdPWFyW2wrMTI+PjJdLGFyW3IrMTY+PjJdPWFyW2Y+PjJdLGFyW3IrMjA+PjJdPWFyW2k+PjJdLGFyW2Y+PjJdPTAsbD1sKzI0fChhcltpPj4yXT0wKSxhclsoYT1yKzI0fDApPj4yXT1hcltsPj4yXSxhclthKzQ+PjJdPWFyW2wrND4+Ml0sYXJbYSs4Pj4yXT1hcltsKzg+PjJdLGFyW2M+PjJdPXIrMzYpKTplPTgrbnwwLGFyW0E+PjJdPWFyW24+PjJdLGFyW0ErND4+Ml09YXJbYz4+Ml0sYXJbQSs4Pj4yXT1hcltlPj4yXSxhcltlPj4yXT0wKSx2b2lkKHVyPXQpO2FyW0E+PjJdPTAsYXJbQSs0Pj4yXT0wLGFyW0ErOD4+Ml09MCx1cj10fSxmdW5jdGlvbihBLGUscixpLGYpe0F8PTAsZXw9MCxpfD0wLGZ8PTA7dmFyIG4sdCxvLGEsYyxsLHUsYixzPTAsZD0wLGs9MCxoPTAsdz0wLHY9MCxtPTA7aWYodXI9KGI9dXIpKzMyfDAsYT1iKzE2fDAsYz1iKzEyfDAsbD1iKzh8MCxrPWIrNHwwLHU9YixoPTB8YXJbKHJ8PTApPj4yXSxvPTB8YXJbaCsyND4+Ml0saD0wfGFyW2grMjg+PjJdLGY9MHxodSg4MCksYXJbZis0Pj4yXT0wLGFyW2YrOD4+Ml09MCxhcltmPj4yXT02MjA4LGFyWyhzPWYrMTJ8MCk+PjJdPTAsYXJbcys0Pj4yXT0wLGFyW3MrOD4+Ml09MCxhcltzKzEyPj4yXT0wLGFyW3MrMTY+PjJdPTAsYXJbZiszMj4+Ml09MzIyMTUsYXJbZiszNj4+Ml09MCxhcltmKzQwPj4yXT0wLGFyW2YrNDQ+PjJdPTk5LGFyW2YrNDg+PjJdPTk5LGU9Zis1MnwwLGFyWyhkPWYrNzJ8MCk+PjJdPTAsYXJbZis3Nj4+Ml09MCxhcltlPj4yXT0wLGFyW2UrND4+Ml09MCxhcltlKzg+PjJdPTAsYXJbZSsxMj4+Ml09MCxhcltmKzY4Pj4yXT1kLGFyW0E+PjJdPXMsZD0oYXJbQSs0Pj4yXT1mKSsxNnwwLGJ1KGYpLHN1KGYpLGU9MHxhcltkPj4yXSxhcltzPj4yXT1zLGFyW2Q+PjJdPWYsMHxlJiZrdShlKSxkdShmKSx5byhzLG8saCwwLDMpLGY9MTE9PSgwfGFyWzM2KygwfGFyW3I+PjJdKT4+Ml0pLEJvKHMsMCxvLGgsOCksQm8ocywxLG8saCw4KSxCbyhzLDIsbyxoLDgpLGYmJkJvKHMsNixvLGgsOCksYXJbYT4+Ml09MCxhcltjPj4yXT0wLGFyW2w+PjJdPTAsYXJbaz4+Ml09MCxyPShhclt1Pj4yXT0wKXxSbygwfGFyW3I+PjJdLDEwLHUpLG49MHxGbyhzLDAsbCksdD0wfEZvKHMsMSxhKSxkPTB8Rm8ocywyLGMpLEE9Zj8wfEZvKHMsNixrKTowLChlPTB8YXJbaSsxNj4+Ml0pfHxzcigzMjU2OSwzMjI0OCwyMTYxLDMyMjcyKSwwfG9yW2UrOD4+MV0mJnNyKDMyNTk1LDMyMjQ4LDIxNjIsMzIyNzIpLGU9MDwoMHxoKSYwPCgwfG8pLGYpe2lmKCFlKXJldHVybiB2b2lkKHVyPWIpO2Y9MDtkb3tmb3IoZT0wO209KDB8YnIoMHxhclt1Pj4yXSxmKSkrKGU8PDIpfDAsdz0wfHRyW3IrbT4+MF0sdj0wfHRyW3IrKG0rMik+PjBdLHM9MHx0cltyKyhtKzMpPj4wXSxpPW4rKCgwfGJyKDB8YXJbbD4+Ml0sZikpK2UpfDAsdHJbaT4+MF09MHx0cltyKyhtKzEpPj4wXSxpPXQrKCgwfGJyKDB8YXJbYT4+Ml0sZikpK2UpfDAsdHJbaT4+MF09dixpPWQrKCgwfGJyKDB8YXJbYz4+Ml0sZikpK2UpfDAsdHJbaT4+MF09dyxpPUErKCgwfGJyKDB8YXJbaz4+Ml0sZikpK2UpfDAsdHJbaT4+MF09cywoMHwoZT1lKzF8MCkpIT0oMHxvKTspO2Y9ZisxfDB9d2hpbGUoKDB8ZikhPSgwfGgpKTt1cj1ifWVsc2UgaWYoZSl7ZT0wO2Rve2ZvcihmPTA7az0oMHxicigwfGFyW3U+PjJdLGUpKSsoMypmfDApfDAsdj0wfHRyW3Iraz4+MF0sdz0wfHRyW3IrKGsrMik+PjBdLG09bisoKDB8YnIoMHxhcltsPj4yXSxlKSkrZil8MCx0clttPj4wXT0wfHRyW3IrKGsrMSk+PjBdLG09dCsoKDB8YnIoMHxhclthPj4yXSxlKSkrZil8MCx0clttPj4wXT13LG09ZCsoKDB8YnIoMHxhcltjPj4yXSxlKSkrZil8MCx0clttPj4wXT12LCgwfChmPWYrMXwwKSkhPSgwfG8pOyk7ZT1lKzF8MH13aGlsZSgoMHxlKSE9KDB8aCkpO3VyPWJ9ZWxzZSB1cj1ifSxmdW5jdGlvbihBLGUscixpLGYpe0F8PTAsZXw9MCxpfD0wLGZ8PTA7dmFyIG4sdCxvLGEsYyxsPTAsdT0wO2lmKHVyPShjPXVyKSs2NHwwLGE9YyszNnwwLG49Yys0OHwwLG89YywodD0wfGFyWyhyfD0wKSs0Pj4yXSk+Pj4wPDQmJjB8dHJbcis4Pj4wXSYmMD09KDB8dHJbaSs4Pj4wXSkpe2lmKGFyW2E+PjJdPTAsYXJbKHU9NCthfDApPj4yXT0wLGU9KGFyWzgrYT4+Ml09MCl8YXJbcj4+Ml0sZj1yKzl8MCx0cltuPj4wXT0wfHRyW2Y+PjBdLHRyWzErbj4+MF09MHx0cltmKzE+PjBdLHRyWzIrbj4+MF09MHx0cltmKzI+PjBdLGY9MHxhcltyKzEyPj4yXSxpPTB8YXJbcisxNj4+Ml0sKGw9MD09KDB8KHI9MHxhcltyKzIwPj4yXSkpKXx8YnUociksYXJbbz4+Ml09ZSxhcltvKzQ+PjJdPXQsdHJbbys4Pj4wXT0wLHRyWyhlPW8rOXwwKT4+MF09MHx0cltuPj4wXSx0cltlKzE+PjBdPTB8dHJbMStuPj4wXSx0cltlKzI+PjBdPTB8dHJbMituPj4wXSxhcltvKzEyPj4yXT1mLGFyW28rMTY+PjJdPWksYXJbKGU9bysyMHwwKT4+Ml09cixsfHxidShyKSxnQVtvKzI0Pj4yXT0uMTAwMDAwMDAxNDkwMTE2MTIsZ0FbbysyOD4+Ml09MCxmPTgrYXwoZ0FbbyszMj4+Ml09MCksTmwoYSxvKSwwfChlPTB8YXJbZT4+Ml0pJiZkdShlKSxhcltBPj4yXT1hclthPj4yXSxhcltBKzQ+PjJdPWFyW3U+PjJdLGFyW0ErOD4+Ml09YXJbZj4+Ml0sYXJbZj4+Ml09MCxhclt1Pj4yXT0wLGFyW2E+PjJdPTAsIWwmJihkdShyKSwwfChlPTB8YXJbYT4+Ml0pKSl7aWYoKDB8KGY9MHxhclt1Pj4yXSkpIT0oMHxlKSl7Zm9yKDtpPWYrLTM2fDAsYXJbdT4+Ml09aSwoMHwoZj0oZj0wfGFyW2YrLTE2Pj4yXSk/KGR1KGYpLDB8YXJbdT4+Ml0pOmkpKSE9KDB8ZSk7KTtlPTB8YXJbYT4+Ml19dnUoZSl9dXI9Y31lbHNlIGFyW0E+PjJdPTAsYXJbQSs0Pj4yXT0wLGFyW0ErOD4+Ml09MCx1cj1jfSxmdW5jdGlvbihBLGUscixpLGYpe0F8PTAsZXw9MCxpfD0wLGZ8PTA7dmFyIG4sdD0wLG89MDt0PTB8YXJbKHJ8PTApPj4yXSxuPTB8YXJbdCsyND4+Ml0sdD0wfGFyW3QrMjg+PjJdLGk9MHxodSg4MCksYXJbaSs0Pj4yXT0wLGFyW2krOD4+Ml09MCxhcltpPj4yXT02MjA4LGFyWyhmPWkrMTJ8MCk+PjJdPTAsYXJbZis0Pj4yXT0wLGFyW2YrOD4+Ml09MCxhcltmKzEyPj4yXT0wLGFyW2YrMTY+PjJdPTAsYXJbaSszMj4+Ml09MzIyMTUsYXJbaSszNj4+Ml09MCxhcltpKzQwPj4yXT0wLGFyW2krNDQ+PjJdPTk5LGFyW2krNDg+PjJdPTk5LG89aSs1MnwwLGFyWyhlPWkrNzJ8MCk+PjJdPTAsYXJbaSs3Nj4+Ml09MCxhcltvPj4yXT0wLGFyW28rND4+Ml09MCxhcltvKzg+PjJdPTAsYXJbbysxMj4+Ml09MCxhcltpKzY4Pj4yXT1lLGFyW0E+PjJdPWYsQT0oYXJbQSs0Pj4yXT1pKSsxNnwwLGJ1KGkpLHN1KGkpLGU9MHxhcltBPj4yXSxhcltmPj4yXT1mLGFyW0E+PjJdPWksMHxlJiZrdShlKSxkdShpKSxvPTB8YXJbcj4+Ml0seW8oZixuLHQsMHxhcltvKzMyPj4yXSwwfGFyW28rMzY+PjJdKSwwfEVvKDB8YXJbcj4+Ml0sMCkmJk5vKGYsciwwLDApLDB8RW8oMHxhcltyPj4yXSwxKSYmTm8oZixyLDEsMSksMHxFbygwfGFyW3I+PjJdLDIpJiZObyhmLHIsMiwyKSwwfEVvKDB8YXJbcj4+Ml0sMykmJk5vKGYsciwzLDMpLDB8RW8oMHxhcltyPj4yXSw0KSYmTm8oZixyLDQsNCksMHxFbygwfGFyW3I+PjJdLDUpJiZObyhmLHIsNSw1KX0sZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLGV8PTAsaXw9MCxmfD0wO3ZhciBuLHQsbyxhLGM9MCxsPTAsdT0wLGI9MDtpZih1cj0oYT11cikrNjR8MCxvPWErMzZ8MCxjPWErNDh8MCx0PWEsKG49MHxhclsocnw9MCkrND4+Ml0pPj4+MDw0JiY4PT0oMHxhcltyKzEyPj4yXSkpe2lmKGFyW28+PjJdPTAsYXJbKGI9NCtvfDApPj4yXT0wLGU9KGFyWzgrbz4+Ml09MCl8YXJbcj4+Ml0sZj0wfHRyW3IrOD4+MF0sbD1yKzl8MCx0cltjPj4wXT0wfHRyW2w+PjBdLHRyW2MrMT4+MF09MHx0cltsKzE+PjBdLHRyW2MrMj4+MF09MHx0cltsKzI+PjBdLGw9MHxhcltyKzE2Pj4yXSwodT0wPT0oMHwocj0wfGFyW3IrMjA+PjJdKSkpfHxidShyKSxpPTB8YXJbaSsxMj4+Ml0sYXJbdD4+Ml09ZSxhclt0KzQ+PjJdPW4sdHJbdCs4Pj4wXT1mLHRyWyhlPXQrOXwwKT4+MF09MHx0cltjPj4wXSx0cltlKzE+PjBdPTB8dHJbYysxPj4wXSx0cltlKzI+PjBdPTB8dHJbYysyPj4wXSxhclt0KzEyPj4yXT1pLGFyW3QrMTY+PjJdPWwsYXJbKGU9dCsyMHwwKT4+Ml09cix1fHxidShyKSxnQVt0KzI0Pj4yXT0uMjAwMDAwMDAyOTgwMjMyMjQsZ0FbdCsyOD4+Ml09MCxnQVt0KzMyPj4yXT0uNSxmPTgrb3wwLE5sKG8sdCksMHwoZT0wfGFyW2U+PjJdKSYmZHUoZSksYXJbQT4+Ml09YXJbbz4+Ml0sYXJbQSs0Pj4yXT1hcltiPj4yXSxhcltBKzg+PjJdPWFyW2Y+PjJdLGFyW2Y+PjJdPTAsYXJbYj4+Ml09MCxhcltvPj4yXT0wLCF1JiYoZHUociksMHwoZT0wfGFyW28+PjJdKSkpe2lmKCgwfChmPTB8YXJbYj4+Ml0pKSE9KDB8ZSkpe2Zvcig7Yz1mKy0zNnwwLGFyW2I+PjJdPWMsKDB8KGY9KGY9MHxhcltmKy0xNj4+Ml0pPyhkdShmKSwwfGFyW2I+PjJdKTpjKSkhPSgwfGUpOyk7ZT0wfGFyW28+PjJdfXZ1KGUpfXVyPWF9ZWxzZSBhcltBPj4yXT0wLGFyW0ErND4+Ml09MCxhcltBKzg+PjJdPTAsdXI9YX0sZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTA7dmFyIG4sdCxvLGEsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wLG09MDt1cj0oYT11cikrMTZ8MCx0PWErNHwwLG89YSxmPTB8aHUoODApLGFyW2YrND4+Ml09MCxhcltmKzg+PjJdPTAsYXJbZj4+Ml09NjIwOCxhclsobj1mKzEyfDApPj4yXT0wLGFyWzQrbj4+Ml09MCxhcls4K24+PjJdPTAsYXJbMTIrbj4+Ml09MCxhclsxNituPj4yXT0wLGFyW2YrMzI+PjJdPTMyMjE1LGFyW2YrMzY+PjJdPTAsYXJbZis0MD4+Ml09MCxhcltmKzQ0Pj4yXT05OSxhcltmKzQ4Pj4yXT05OSxlPWYrNTJ8MCxhclsodT1mKzcyfDApPj4yXT0wLGFyW2YrNzY+PjJdPTAsYXJbZT4+Ml09MCxhcltlKzQ+PjJdPTAsYXJbZSs4Pj4yXT0wLGFyW2UrMTI+PjJdPTAsYXJbZis2OD4+Ml09dSxhcltBPj4yXT1uLHU9KGFyW0ErND4+Ml09ZikrMTZ8MCxidShmKSxzdShmKSxlPTB8YXJbdT4+Ml0sYXJbbj4+Ml09bixhclt1Pj4yXT1mLDB8ZSYma3UoZSksZHUoZiksdT0wfGFyW3I+PjJdLHlvKG4sMHxhclt1KzI0Pj4yXSwwfGFyW3UrMjg+PjJdLDB8YXJbdSszMj4+Ml0sMHxhclt1KzM2Pj4yXSksdT1pKzEyfDAsbD02Nzk2O2Rve2lmKGU9MHxhcltsPj4yXSwwfEVvKDB8YXJbcj4+Ml0sZSkmJihCbyhuLGUsYj0wfFhvKDB8YXJbcj4+Ml0sZSkscz0wfFdvKDB8YXJbcj4+Ml0sZSksMHxhclt1Pj4yXSksZD0yNTUmKDB8Vm8oMHxhcltyPj4yXSxlKSksaz04LShkPSgwfGFyW3U+PjJdKS1kfDApfDAsaD0wfFJvKDB8YXJbcj4+Ml0sZSx0KSx3PTB8Rm8obixlLG8pLHY9KDB8YXJbbz4+Ml0pLzJ8MCxhcltvPj4yXT12LDA8KDB8cykmMDwoMHxiKSkpe0E9MHxhclt0Pj4yXSxmPTA7ZG97Zm9yKGk9MHxicihBLGYpLGM9MHxicih2LGYpLGU9MDttPTB8Y3JbaCsoaStlKT4+MF0sb3JbdysoYytlPDwxKT4+MV09bTw8ZHxtPj4+aywoMHwoZT1lKzF8MCkpIT0oMHxiKTspO2Y9ZisxfDB9d2hpbGUoKDB8ZikhPSgwfHMpKX1sPWwrNHwwfXdoaWxlKDY4MjQhPSgwfGwpKTt1cj1hfSxmdW5jdGlvbihBLGUscixpLGYpe0F8PTAsZXw9MCxpfD0wLGZ8PTA7dmFyIG4sdCxvLGEsYz0wLGw9MCx1PTA7aWYodXI9KGE9dXIpKzY0fDAsbz1hKzM2fDAsZj1hKzQ4fDAsdD1hLChuPTB8YXJbKHJ8PTApKzQ+PjJdKT4+PjA8NCYmOCE9KDB8YXJbcisxMj4+Ml0pKXtpZihhcltvPj4yXT0wLGFyWyh1PTQrb3wwKT4+Ml09MCxlPShhcls4K28+PjJdPTApfGFyW3I+PjJdLGk9MHx0cltyKzg+PjBdLGM9cis5fDAsdHJbZj4+MF09MHx0cltjPj4wXSx0cltmKzE+PjBdPTB8dHJbYysxPj4wXSx0cltmKzI+PjBdPTB8dHJbYysyPj4wXSxjPTB8YXJbcisxNj4+Ml0sKGw9MD09KDB8KHI9MHxhcltyKzIwPj4yXSkpKXx8YnUociksYXJbdD4+Ml09ZSxhclt0KzQ+PjJdPW4sdHJbdCs4Pj4wXT1pLHRyWyhlPXQrOXwwKT4+MF09MHx0cltmPj4wXSx0cltlKzE+PjBdPTB8dHJbZisxPj4wXSx0cltlKzI+PjBdPTB8dHJbZisyPj4wXSxhclt0KzEyPj4yXT04LGFyW3QrMTY+PjJdPWMsYXJbKGU9dCsyMHwwKT4+Ml09cixsfHxidShyKSxnQVt0KzI0Pj4yXT0uMjAwMDAwMDAyOTgwMjMyMjQsZ0FbdCsyOD4+Ml09MCxnQVt0KzMyPj4yXT0uNSxpPTgrb3wwLE5sKG8sdCksMHwoZT0wfGFyW2U+PjJdKSYmZHUoZSksYXJbQT4+Ml09YXJbbz4+Ml0sYXJbQSs0Pj4yXT1hclt1Pj4yXSxhcltBKzg+PjJdPWFyW2k+PjJdLGFyW2k+PjJdPTAsYXJbdT4+Ml09MCxhcltvPj4yXT0wLCFsJiYoZHUociksMHwoZT0wfGFyW28+PjJdKSkpe2lmKCgwfChpPTB8YXJbdT4+Ml0pKSE9KDB8ZSkpe2Zvcig7Zj1pKy0zNnwwLGFyW3U+PjJdPWYsKDB8KGk9KGk9MHxhcltpKy0xNj4+Ml0pPyhkdShpKSwwfGFyW3U+PjJdKTpmKSkhPSgwfGUpOyk7ZT0wfGFyW28+PjJdfXZ1KGUpfXVyPWF9ZWxzZSBhcltBPj4yXT0wLGFyW0ErND4+Ml09MCxhcltBKzg+PjJdPTAsdXI9YX0sZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTA7dmFyIG4sdCxvLGEsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTA7dXI9KGE9dXIpKzE2fDAsdD1hKzR8MCxvPWEsaT0wfGh1KDgwKSxhcltpKzQ+PjJdPTAsYXJbaSs4Pj4yXT0wLGFyW2k+PjJdPTYyMDgsYXJbKG49aSsxMnwwKT4+Ml09MCxhcls0K24+PjJdPTAsYXJbOCtuPj4yXT0wLGFyWzEyK24+PjJdPTAsYXJbMTYrbj4+Ml09MCxhcltpKzMyPj4yXT0zMjIxNSxhcltpKzM2Pj4yXT0wLGFyW2krNDA+PjJdPTAsYXJbaSs0ND4+Ml09OTksYXJbaSs0OD4+Ml09OTksZj1pKzUyfDAsYXJbKGU9aSs3MnwwKT4+Ml09MCxhcltpKzc2Pj4yXT0wLGFyW2Y+PjJdPTAsYXJbZis0Pj4yXT0wLGFyW2YrOD4+Ml09MCxhcltmKzEyPj4yXT0wLGFyW2krNjg+PjJdPWUsYXJbQT4+Ml09bixBPShhcltBKzQ+PjJdPWkpKzE2fDAsYnUoaSksc3UoaSksZT0wfGFyW0E+PjJdLGFyW24+PjJdPW4sYXJbQT4+Ml09aSwwfGUmJmt1KGUpLGR1KGkpLGY9MHxhcltyPj4yXSx5byhuLDB8YXJbZisyND4+Ml0sMHxhcltmKzI4Pj4yXSwwfGFyW2YrMzI+PjJdLDB8YXJbZiszNj4+Ml0pLGY9Njg0ODtkb3tpZihlPTB8YXJbZj4+Ml0sMHxFbygwfGFyW3I+PjJdLGUpJiYoQm8obixlLGM9MHxYbygwfGFyW3I+PjJdLGUpLGw9MHxXbygwfGFyW3I+PjJdLGUpLDgpLHU9KDI1NSYoMHxWbygwfGFyW3I+PjJdLGUpKSktOHwwLGI9MHxSbygwfGFyW3I+PjJdLGUsdCksYXJbdD4+Ml09KDB8YXJbdD4+Ml0pLzJ8MCxzPTB8Rm8obixlLG8pLDA8KDB8bCkmMDwoMHxjKSkpe2U9MDtkb3tmb3IoaT0wO2Q9YisoKDB8YnIoMHxhclt0Pj4yXSxlKSkraTw8MSl8MCxBPXMrKCgwfGJyKDB8YXJbbz4+Ml0sZSkpK2kpfDAsdHJbQT4+MF09KDB8bHJbZD4+MV0pPj4+dSwoMHwoaT1pKzF8MCkpIT0oMHxjKTspO2U9ZSsxfDB9d2hpbGUoKDB8ZSkhPSgwfGwpKX1mPWYrNHwwfXdoaWxlKDY4NzYhPSgwfGYpKTt1cj1hfSxmdW5jdGlvbihBLGUscixpLGYpe0F8PTAsZXw9MCxpfD0wLGZ8PTA7dmFyIG4sdCxvPTA7aWYodXI9KHQ9dXIpKzQ4fDAsbj10KzM2fDAsZj10LDE9PSgwfGFyWyhyfD0wKT4+Ml0pJiYxMj09KC00JmFyW3IrND4+Ml18MCkmJjghPSgwfChvPTB8YXJbcisxMj4+Ml0pKSl7aWYoMHwoZT0wfGFyW3IrMTY+PjJdKSl7c3dpdGNoKDB8b3JbZSs4Pj4xXSl7Y2FzZSAwOmNhc2UgODpjYXNlIDExOmNhc2UgMTQ6cmV0dXJuIGFyW0E+PjJdPTAsYXJbQSs0Pj4yXT0wLGFyW0ErOD4+Ml09MCx2b2lkKHVyPXQpfWlmKCEoMHx0cltlKzEwPj4wXSkpcmV0dXJuIGFyW0E+PjJdPTAsYXJbQSs0Pj4yXT0wLGFyW0ErOD4+Ml09MCx2b2lkKHVyPXQpfXJldHVybiBhcltuPj4yXT0wLGFyWyhpPTQrbnwwKT4+Ml09MCxlPShhcls4K24+PjJdPTApfHRyW3IrOD4+MF0sYXJbZj4+Ml09MCxhcltmKzQ+PjJdPTEsdHJbZis4Pj4wXT1lLGFyW2YrMTI+PjJdPW8sYXJbZisxNj4+Ml09MCxhclsoZT1mKzIwfDApPj4yXT0wLGdBW2YrMjQ+PjJdPS41LGdBW2YrMjg+PjJdPTAsZ0FbZiszMj4+Ml09MCxObChuLGYpLDB8KGU9MHxhcltlPj4yXSkmJmR1KGUpLGFyW0E+PjJdPWFyW24+PjJdLGFyW0ErND4+Ml09YXJbaT4+Ml0sYXJbQSs4Pj4yXT1hcls4K24+PjJdLHZvaWQodXI9dCl9YXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsYXJbQSs4Pj4yXT0wLHVyPXR9LGZ1bmN0aW9uKEEsZSxyLGksZil7QXw9MCxlfD0wLGl8PTAsZnw9MDt2YXIgbix0LG8sYSxjLGwsdSxiLHMsZCxrLGgsdyx2LG0sZyxaLHAseSxCPTAsRT0wLFg9MCxXPTAsST0wLEM9MCxHPTAsVj0wLEY9MCxSPTAsTj0wLF89MCxZPTAsUT0wLEQ9MCxKPTAsTT0wLFQ9MCxVPTAsUz0wLE89MCx6PTAsaj0wLEg9MCx4PTAsUD0wLEw9MCxLPTAscT0wO2lmKHVyPSh5PXVyKSsxMTJ8MCxnPXkrOTZ8MCxhPXkrOTJ8MCxaPXkrODh8MCxwPXkrODR8MCxjPXkrODB8MCxiPXkrNDB8MCxYPXksRT0wfGFyWyhyfD0wKT4+Ml0sdj0wfGFyW0UrMjQ+PjJdLG09MHxhcltFKzI4Pj4yXSxFPTI1NSYoMHxWbyhFLDEwKSksbz0xNT09KDJ8YXJbMzYrKDB8YXJbcj4+Ml0pPj4yXSksZj0wfGh1KDgwKSxhcltmKzQ+PjJdPTAsYXJbZis4Pj4yXT0wLGFyW2Y+PjJdPTYyMDgsYXJbKEI9ZisxMnwwKT4+Ml09MCxhcltCKzQ+PjJdPTAsYXJbQis4Pj4yXT0wLGFyW0IrMTI+PjJdPTAsYXJbQisxNj4+Ml09MCxhcltmKzMyPj4yXT0zMjIxNSxhcltmKzM2Pj4yXT0wLGFyW2YrNDA+PjJdPTAsYXJbZis0ND4+Ml09OTksYXJbZis0OD4+Ml09OTksZT1mKzUyfDAsYXJbKEs9Zis3MnwwKT4+Ml09MCxhcltmKzc2Pj4yXT0wLGFyW2U+PjJdPTAsYXJbZSs0Pj4yXT0wLGFyW2UrOD4+Ml09MCxhcltlKzEyPj4yXT0wLGFyW2YrNjg+PjJdPUssYXJbQT4+Ml09QixLPShhcltBKzQ+PjJdPWYpKzE2fDAsYnUoZiksc3UoZiksZT0wfGFyW0s+PjJdLGFyW0I+PjJdPUIsYXJbSz4+Ml09ZiwwfGUmJmt1KGUpLGR1KGYpLHlvKEIsdixtLDAsMSksaD1vPzg6NixMPSgxK3Z8MCkvMnwwLEs9KDErbXwwKS8yfDAsQm8oQiwwLHYsbSxFKSxCbyhCLDEsTCxLLEUpLEJvKEIsMixMLEssRSksbyYmQm8oQiw2LHYsbSxFKSxhcltnPj4yXT0wLGFyW2E+PjJdPTAsYXJbWj4+Ml09MCxhcltwPj4yXT0wLHc9KGFyW2M+PjJdPTApfFJvKDB8YXJbcj4+Ml0sMTAsZyksbj0wfEZvKEIsMCxhKSxMPTB8Rm8oQiwxLFopLEs9MHxGbyhCLDIscCkseD1vPzB8Rm8oQiw2LGMpOjAsYXJbYT4+Ml09KDB8YXJbYT4+Ml0pLzJ8MCxhcltaPj4yXT0oMHxhcltaPj4yXSkvMnwwLGFyW3A+PjJdPSgwfGFyW3A+PjJdKS8yfDAsYXJbYz4+Ml09KDB8YXJbYz4+Ml0pLzJ8MCxsPTE8PEUrLTEsdT0oaz0xPDxFKS0xfDAsUD0wfGFyW3I+PjJdLHM9MSYodD0xNT09KDF8YXJbUCszNj4+Ml0pKSxlPTB8YXJbUCs0MD4+Ml0sKGQ9MD09KDB8KFA9MHxhcltQKzQ0Pj4yXSkpKXx8YnUoUCksQmUoYiksZSlmb3IoQT0wfHRyWzEwKygwfGFyW2krMTY+PjJdKT4+MF0seWUoWCwwfG9yW2UrOD4+MV0sMHxvcltlKzQ+PjFdKSxBPUE8PDI0Pj4yNCE9MCxlPVgsZj0oQj1iKSs0MHwwO2FyW0I+PjJdPWFyW2U+PjJdLGU9ZSs0fDAsKDB8KEI9Qis0fDApKTwoMHxmKTspO2Vsc2UgQT0xO2lmKHI9MDwoMHxtKSl7WD0wPCgwfHYpLGk9MV5zLEc9dD8zOjIsVj0zXnMsRj10PzU6NCxSPTUtc3wwLE49NCtifDAsXz04K2J8MCxZPTEyK2J8MCxRPXQ/Nzo2LEQ9N15zLEo9NjU1MzUmdSxFPTA7ZG97aWYoWClpZihXPStnQVtOPj4yXSxJPStnQVtfPj4yXSxDPStnQVtZPj4yXSxNPTB8YnIoMHxhcltnPj4yXSxFKSxBKWZvcihmPTA7Qj13KyhNKygwfGJyKGYsaCkpKXwwLGU9KDB8KGU9MHxlZigoKDB8Y3JbQitzPj4wXSk8PDh8MHxjcltCK2k+PjBdfDApKlcrKCgwfGNyW0IrRz4+MF0pPDw4fDB8Y3JbQitWPj4wXXwwKSpJKygoMHxjcltCK0Y+PjBdKTw8OHwwfGNyW0IrUj4+MF18MCkqQykpKTwwPzA6KDB8ZSk8KDB8ayk/NjU1MzUmZTpKLHE9bisoKDB8YnIoMHxhclthPj4yXSxFKSkrZjw8MSl8MCxvcltxPj4xXT1lLG8mJihxPXgrKCgwfGJyKDB8YXJbYz4+Ml0sRSkpK2Y8PDEpfDAsb3JbcT4+MV09KDB8Y3JbQitRPj4wXSk8PDh8MHxjcltCK0Q+PjBdKSwoMHwoZj1mKzF8MCkpIT0oMHx2KTspO2Vsc2UgZm9yKGY9MDtCPXcrKE0rKDB8YnIoZixoKSkpfDAsZT0oMHwoZT0wfGVmKC44NTU0NzAwMDE2OTc1NDAzKigoKDB8Y3JbQitzPj4wXSk8PDh8MHxjcltCK2k+PjBdfDApKlcrKCgwfGNyW0IrRz4+MF0pPDw4fDB8Y3JbQitWPj4wXXwwKSpJKygoMHxjcltCK0Y+PjBdKTw8OHwwfGNyW0IrUj4+MF18MCkqQykrMTYpKSk8MD8wOigwfGUpPCgwfGspPzY1NTM1JmU6SixxPW4rKCgwfGJyKDB8YXJbYT4+Ml0sRSkpK2Y8PDEpfDAsb3JbcT4+MV09ZSxvJiYocT14KygoMHxicigwfGFyW2M+PjJdLEUpKStmPDwxKXwwLG9yW3E+PjFdPSgwfGNyW0IrUT4+MF0pPDw4fDB8Y3JbQitEPj4wXSksKDB8KGY9ZisxfDApKSE9KDB8dik7KTtFPUUrMXwwfXdoaWxlKCgwfEUpIT0oMHxtKSk7aWYocil7RD0wPCgwfHYpLEo9MV5zLE09dD8zOjIseD0zXnMsVj10PzU6NCxGPTUtc3wwLFI9MTYrYnwwLE49MjArYnwwLF89MjQrYnwwLFk9MjgrYnwwLFE9MzIrYnwwLEc9MzYrYnwwLEg9Kyg2NTUzNSZsfDApLHI9NjU1MzUmdSxFPTA7ZG97aWYoRClpZihYPSgwfEUpLzJ8MCxUPStnQVtSPj4yXSxVPStnQVtOPj4yXSxTPStnQVtfPj4yXSxPPStnQVtZPj4yXSx6PStnQVtRPj4yXSxqPStnQVtHPj4yXSxpPTB8YnIoMHxhcltnPj4yXSxFKSxBKWZvcihCPTA7ZT13KyhpKygwfGJyKEIsaCkpKXwwLGU9KDB8KGU9MHxlZihIKygoVz0rKCgwfGNyW2Urcz4+MF0pPDw4fDB8Y3JbZStKPj4wXXwwKSkqVCsoST0rKCgwfGNyW2UrTT4+MF0pPDw4fDB8Y3JbZSt4Pj4wXXwwKSkqVSsoQz0rKCgwfGNyW2UrVj4+MF0pPDw4fDB8Y3JbZStGPj4wXXwwKSkqUykpKSk8MD8wOigwfGUpPCgwfGspPzY1NTM1JmU6cixmPSgwfEIpLzJ8MCxxPUwrKCgwfGJyKDB8YXJbWj4+Ml0sWCkpK2Y8PDEpfDAsb3JbcT4+MV09ZSxlPSgwfChlPTB8ZWYoSCsoVypPK0kqeitDKmopKSkpPDA/MDooMHxlKTwoMHxrKT82NTUzNSZlOnIscT1LKygoMHxicigwfGFyW3A+PjJdLFgpKStmPDwxKXwwLG9yW3E+PjFdPWUsKDB8KEI9QisyfDApKTwoMHx2KTspO2Vsc2UgZm9yKEI9MDtlPXcrKGkrKDB8YnIoQixoKSkpfDAsZT0oMHwoZT0wfGVmKEgrLjg1NTQ3MDAwMTY5NzU0MDMqKChXPSsoKDB8Y3JbZStzPj4wXSk8PDh8MHxjcltlK0o+PjBdfDApKSpUKyhJPSsoKDB8Y3JbZStNPj4wXSk8PDh8MHxjcltlK3g+PjBdfDApKSpVKyhDPSsoKDB8Y3JbZStWPj4wXSk8PDh8MHxjcltlK0Y+PjBdfDApKSpTKSkpKTwwPzA6KDB8ZSk8KDB8ayk/NjU1MzUmZTpyLGY9KDB8QikvMnwwLHE9TCsoKDB8YnIoMHxhcltaPj4yXSxYKSkrZjw8MSl8MCxvcltxPj4xXT1lLGU9KDB8KGU9MHxlZihIKy44NTU0NzAwMDE2OTc1NDAzKihXKk8rSSp6K0MqaikpKSk8MD8wOigwfGUpPCgwfGspPzY1NTM1JmU6cixxPUsrKCgwfGJyKDB8YXJbcD4+Ml0sWCkpK2Y8PDEpfDAsb3JbcT4+MV09ZSwoMHwoQj1CKzJ8MCkpPCgwfHYpOyk7RT1FKzJ8MH13aGlsZSgoMHxFKTwoMHxtKSl9fXVyPShkfHxkdShQKSx5KX0sZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLGV8PTAsaXw9MCxmfD0wO3ZhciBuLHQsbz0wLGE9MCxjPTAsbD0wO2lmKHVyPSh0PXVyKSs2NHwwLG49dCszNnwwLGY9dCs0OHwwLGw9dCwwPT0oMHxhclsocnw9MCk+PjJdKSYmMT09KDB8YXJbcis0Pj4yXSkmJjghPSgwfChvPTB8YXJbKGE9cisxMnwwKT4+Ml0pKSl7ZT0wfGFyW3IrMTY+PjJdO0E6ZG97aWYoMHxlKXtzd2l0Y2goMHxvcltlKzg+PjFdKXtjYXNlIDA6Y2FzZSA4OmNhc2UgMTE6Y2FzZSAxNDpicmVhaztkZWZhdWx0OmJyZWFrIEF9cmV0dXJuIGFyW0E+PjJdPTAsYXJbQSs0Pj4yXT0wLGFyW0ErOD4+Ml09MCx2b2lkKHVyPXQpfX13aGlsZSgwKTtyZXR1cm4gYXJbbj4+Ml09MCxhclsoYz00K258MCk+PjJdPTAsZT0oYXJbOCtuPj4yXT0wKXx0clsoaT1yKzh8MCk+PjBdLGFyW2w+PjJdPTEsYXJbbCs0Pj4yXT1lPDwyND4+MjQ/MTU6MTQsdHJbbCs4Pj4wXT1lLGFyW2wrMTI+PjJdPW8sYXJbbCsxNj4+Ml09MCxhclsoZT1sKzIwfDApPj4yXT0wLGdBW2wrMjQ+PjJdPS41LGdBW2wrMjg+PjJdPTAscj04K258KGdBW2wrMzI+PjJdPTApLE5sKG4sbCksMHwoZT0wfGFyW2U+PjJdKSYmZHUoZSksaT0wfHRyW2k+PjBdLGU9MHxhclthPj4yXSxhcltsPj4yXT0xLGFyW2wrND4+Ml09aTw8MjQ+PjI0PzEzOjEyLHRyW2wrOD4+MF09aSx0clsoaT1sKzl8MCk+PjBdPTB8dHJbZj4+MF0sdHJbaSsxPj4wXT0wfHRyW2YrMT4+MF0sdHJbaSsyPj4wXT0wfHRyW2YrMj4+MF0sYXJbbCsxMj4+Ml09ZSxhclsoZT1sKzE2fDApPj4yXT0wLGFyWyhpPWwrMjB8MCk+PjJdPTAsZ0FbbCsyND4+Ml09LjUsZ0FbbCsyOD4+Ml09MCwoZj0oZ0FbbCszMj4+Ml09MCl8YXJbYz4+Ml0pPj4+MD49KDB8YXJbcj4+Ml0pPj4+MD8oTmwobixsKSwwfChlPTB8YXJbaT4+Ml0pJiZkdShlKSk6KGFyW2Y+PjJdPWFyW2w+PjJdLGFyW2YrND4+Ml09YXJbbCs0Pj4yXSxhcltmKzg+PjJdPWFyW2wrOD4+Ml0sYXJbZisxMj4+Ml09YXJbbCsxMj4+Ml0sYXJbZisxNj4+Ml09YXJbZT4+Ml0sYXJbZisyMD4+Ml09YXJbaT4+Ml0sYXJbZT4+Ml09MCxsPWwrMjR8KGFyW2k+PjJdPTApLGFyWyhhPWYrMjR8MCk+PjJdPWFyW2w+PjJdLGFyW2ErND4+Ml09YXJbbCs0Pj4yXSxhclthKzg+PjJdPWFyW2wrOD4+Ml0sYXJbYz4+Ml09ZiszNiksYXJbQT4+Ml09YXJbbj4+Ml0sYXJbQSs0Pj4yXT1hcltjPj4yXSxhcltBKzg+PjJdPWFyW3I+PjJdLHZvaWQodXI9dCl9YXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsYXJbQSs4Pj4yXT0wLHVyPXR9LGZ1bmN0aW9uKEEsZSxyLGksZil7QXw9MCxlfD0wLGl8PTAsZnw9MDt2YXIgbix0LG8sYSxjLGwsdSxiLHMsZCxrLGgsdyx2LG0sZyxaPTAscD0wLHk9MCxCPTAsRT0wLFg9MCxXPTAsST0wLEM9MCxHPTAsVj0wLEY9MCxSPTAsTj0wLF89MCxZPTAsUT0wLEQ9MCxKPTAsTT0wLFQ9MCxVPTAsUz0wLE89MCx6PTAsaj0wLEg9MCx4PTA7aWYodXI9KGc9dXIpKzY0fDAsaz1nKzU2fDAsaD1nKzUyfDAsdz1nKzQ4fDAsdj1nKzQ0fDAsbT1nKzQwfDAsQj1nKzIwfDAscD1nLHk9MHxhclsocnw9MCk+PjJdLGI9MHxhclt5KzI0Pj4yXSxzPTB8YXJbeSsyOD4+Ml0seT0yNTUmKDB8Vm8oeSwwKSksZD0wfEVvKDB8YXJbcj4+Ml0sNiksdT0xJihYPTE1PT0oMXxhclsoZj1pKzR8MCk+PjJdKSksVz1YPDwzMT4+MzEsaT0wfGh1KDgwKSxhcltpKzQ+PjJdPTAsYXJbaSs4Pj4yXT0wLGFyW2k+PjJdPTYyMDgsYXJbKFo9aSsxMnwwKT4+Ml09MCxhcltaKzQ+PjJdPTAsYXJbWis4Pj4yXT0wLGFyW1orMTI+PjJdPTAsYXJbWisxNj4+Ml09MCxhcltpKzMyPj4yXT0zMjIxNSxhcltpKzM2Pj4yXT0wLGFyW2krNDA+PjJdPTAsYXJbaSs0ND4+Ml09OTksYXJbaSs0OD4+Ml09OTksZT1pKzUyfDAsYXJbKGo9aSs3MnwwKT4+Ml09MCxhcltpKzc2Pj4yXT0wLGFyW2U+PjJdPTAsYXJbZSs0Pj4yXT0wLGFyW2UrOD4+Ml09MCxhcltlKzEyPj4yXT0wLGFyW2krNjg+PjJdPWosYXJbQT4+Ml09WixqPShhcltBKzQ+PjJdPWkpKzE2fDAsYnUoaSksc3UoaSksZT0wfGFyW2o+PjJdLGFyW1o+PjJdPVosYXJbaj4+Ml09aSwwfGUmJmt1KGUpLGR1KGkpLHlvKFosYixzLDEsMHxhcltmPj4yXSksaj1kPzg6NixCbyhaLDEwLGIscyx5KSxkJiZCbyhaLDYsYixzLHkpLGFyW2s+PjJdPTAsYXJbaD4+Ml09MCxhclt3Pj4yXT0wLGFyW3Y+PjJdPTAsdD0oYXJbbT4+Ml09MCl8Rm8oWiwxMCxrKSxvPTB8Um8oMHxhcltyPj4yXSwwLGgpLGE9MHxSbygwfGFyW3I+PjJdLDEsdyksYz0wfFJvKDB8YXJbcj4+Ml0sMix2KSx6PWQ/MHxSbygwfGFyW3I+PjJdLDYsbSk6MCxmPShsPTE8PHkpLTF8MCxaZShCKSxPPTB8YXJbcj4+Ml0sZT0wfGFyW08rNDA+PjJdLChuPTA9PSgwfChPPTB8YXJbTys0ND4+Ml0pKSl8fGJ1KE8pLFU9ZT8oVT0wfHRyW2UrMTA+PjBdLHBlKHAsMHxvcltlKzg+PjFdLDB8b3JbZSs0Pj4xXSksYXJbQj4+Ml09YXJbcD4+Ml0sYXJbQis0Pj4yXT1hcltwKzQ+PjJdLGFyW0IrOD4+Ml09YXJbcCs4Pj4yXSxhcltCKzEyPj4yXT1hcltwKzEyPj4yXSxhcltCKzE2Pj4yXT1hcltwKzE2Pj4yXSxVPDwyND4+MjQhPTApOjEsMDwoMHxzKSl7Uz0wPCgwfGIpLEQ9MTw8eSstMSxKPUIrNHwwLE09Qis4fDAsVD1CKzEyfDAsRj1CKzE2fDAsUj1YPzM6MixOPVg/NTo0LF89VysxfDAsWT1XKzN8MCxRPVcrNXwwLFY9WD83OjYsVz1XKzd8MCxHPTI1NSZmLFg9KDY1NTM1JmYpPj4+OCYyNTUseT0wO2Rve2lmKFMpZm9yKEI9KDB8eSkvMnwwLHA9MDtlPW8rKCgoMHxicigwfGFyW2g+PjJdLHkpKS8yfDApK3A8PDEpfDAsST0rKDB8bHJbZT4+MV0pLGU9KDB8cCkvMnwwLHI9YSsoKCgwfGJyKDB8YXJbdz4+Ml0sQikpLzJ8MCkrZTw8MSl8MCxDPSsoKDB8bHJbcj4+MV0pLUR8MCksZT1jKygoKDB8YnIoMHxhclt2Pj4yXSxCKSkvMnwwKStlPDwxKXwwLEU9KygoMHxscltlPj4xXSktRHwwKSxDPVU/QzoxLjE0Mjg5OTk5MDA4MTc4NypDLEU9VT9FOjEuMTQyODk5OTkwMDgxNzg3KkUsQT0wPD0oMHwoZT0wfGVmKChJPVU/SToxLjE2ODkwMDAxMjk2OTk3MDcqKEkrLTE2KSkrZ0FbSj4+Ml0qRSkpKT8oMHxlKTwoMHxsKT8ocj0yNTUmZSwoNjU1MzUmZSk+Pj44JjI1NSk6KHI9RyxYKTpyPTAsaT0wPD0oMHwoZT0wfGVmKEkrQypnQVtNPj4yXS1FKmdBW1Q+PjJdKSkpPygwfGUpPCgwfGwpPyhaPTI1NSZlLCg2NTUzNSZlKT4+PjgmMjU1KTooWj1HLFgpOlo9MCxlPTA8PSgwfChlPTB8ZWYoSStDKmdBW0Y+PjJdKSkpPygwfGUpPCgwfGwpPyhmPTI1NSZlLCg2NTUzNSZlKT4+PjgmMjU1KTooZj1HLFgpOmY9MCx4PXQrKCgoSD0wfGJyKHAsaikpfHUpKygwfGJyKDB8YXJbaz4+Ml0seSkpKXwwLHRyW3g+PjBdPUEsQT10KyhSK0grKDB8YnIoMHxhcltrPj4yXSx5KSkpfDAsdHJbQT4+MF09aSxBPXQrKE4rSCsoMHxicigwfGFyW2s+PjJdLHkpKSl8MCx0cltBPj4wXT1lLEE9dCsoXytIKygwfGJyKDB8YXJbaz4+Ml0seSkpKXwwLHRyW0E+PjBdPXIscj10KyhZK0grKDB8YnIoMHxhcltrPj4yXSx5KSkpfDAsdHJbcj4+MF09WixyPXQrKFErSCsoMHxicigwfGFyW2s+PjJdLHkpKSl8MCx0cltyPj4wXT1mLGQmJihyPXorKCgoMHxicigwfGFyW20+PjJdLHkpKS8yfDApK3A8PDEpfDAsSD10KygoVnwoeD1wPDwzKSkrKDB8YnIoMHxhcltrPj4yXSx5KSkpfDAsdHJbSD4+MF09KDB8bHJbcj4+MV0pPj4+OCxIPXorKCgoMHxicigwfGFyW20+PjJdLHkpKS8yfDApK3A8PDEpfDAseD10KyhXK3grKDB8YnIoMHxhcltrPj4yXSx5KSkpfDAsdHJbeD4+MF09b3JbSD4+MV0pLCgwfChwPXArMXwwKSkhPSgwfGIpOyk7eT15KzF8MH13aGlsZSgoMHx5KSE9KDB8cykpfXVyPShufHxkdShPKSxnKX0sZnVuY3Rpb24oQSxlLHIsaSxmKXt2YXIgbix0O3JldHVybiBBfD0wLGV8PTAsaXw9MCxmfD0wLHVyPSh0PXVyKSs0OHwwLG49dCszNnwwLGU9dCw4PT0oMHwoaT0wfGFyWyhyfD0wKSsxMj4+Ml0pKXx8MHxhcltyPj4yXT8oYXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsYXJbQSs4Pj4yXT0wKTooYXJbbj4+Ml09MCxhclsoZj00K258MCk+PjJdPTAscj0oYXJbOCtuPj4yXT0wKXx0cltyKzg+PjBdLGFyW2U+PjJdPTEsYXJbZSs0Pj4yXT0zLHRyW2UrOD4+MF09cixhcltlKzEyPj4yXT1pLGFyW2UrMTY+PjJdPTAsYXJbKHI9ZSsyMHwwKT4+Ml09MCxnQVtlKzI0Pj4yXT0uNSxnQVtlKzI4Pj4yXT0wLGdBW2UrMzI+PjJdPTAsTmwobixlKSwwfChlPTB8YXJbcj4+Ml0pJiZkdShlKSxhcltBPj4yXT1hcltuPj4yXSxhcltBKzQ+PjJdPWFyW2Y+PjJdLGFyW0ErOD4+Ml09YXJbOCtuPj4yXSksdm9pZCh1cj10KX0sZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLGV8PTAsaXw9MCxmfD0wO3ZhciBuLHQsbyxhLGMsbCx1LGIscyxkLGssaCx3LHYsbSxnLFoscCx5LEIsRSxYLFcsST0wLEM9MCxHPTAsVj0wLEY9MCxSPTAsTj0wLF89MCxZPTAsUT0wLEQ9MCxKPTAsTT0wLFQ9MCxVPTAsUz0wLE89MCx6PTAsaj0wLEg9MCx4PTAsUD0wLEw9MCxLPTAscT0wLCQ9MCxBQT0wLGVBPTAsckE9MCxpQT0wLGZBPTAsbkE9MDtpZih1cj0oVz11cikrODB8MCxwPVcrNjh8MCx5PVcrNjR8MCxCPVcrNjB8MCxFPVcrNTZ8MCxYPVcrNTJ8MCx2PVcrNDh8MCxtPVcrNDR8MCxnPVcrNDB8MCxSPVcrMjB8MCxWPVcsZT0wfGFyWyhyfD0wKT4+Ml0sRz0wfGFyW2UrMzY+PjJdLEY9MjU1JihlPTB8Vm8oZSwwKSksaT0wfFZvKDB8YXJbcj4+Ml0sMSksZj0wfFZvKDB8YXJbcj4+Ml0sMiksST0oWj0wfEVvKDB8YXJbcj4+Ml0sNikpPzI1NSYoMHxWbygwfGFyW3I+PjJdLDYpKTowLGU8PDI0Pj4yND09OHxpPDwyND4+MjQ9PTh8Zjw8MjQ+PjI0PT04KXJldHVybiBhcltBPj4yXT0wLGFyW0ErND4+Ml09MCx2b2lkKHVyPVcpO2lmKGU8PDI0Pj4yNCE9aTw8MjQ+PjI0fHxlPDwyND4+MjQhPWY8PDI0Pj4yNClyZXR1cm4gYXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsdm9pZCh1cj1XKTtpZihlPTB8YXJbcj4+Ml0sQz0wfGFyW2UrNDA+PjJdLCh3PTA9PSgwfChoPTB8YXJbZSs0ND4+Ml0pKSl8fChidShoKSxlPTB8YXJbcj4+Ml0pLGs9MHxhcltlKzI0Pj4yXSxkPTB8YXJbZSsyOD4+Ml0saT0wfGh1KDgwKSxhcltpKzQ+PjJdPTAsYXJbaSs4Pj4yXT0wLGFyW2k+PjJdPTYyMDgsYXJbKGY9aSsxMnwwKT4+Ml09MCxhcltmKzQ+PjJdPTAsYXJbZis4Pj4yXT0wLGFyW2YrMTI+PjJdPTAsYXJbZisxNj4+Ml09MCxhcltpKzMyPj4yXT0zMjIxNSxhcltpKzM2Pj4yXT0wLGFyW2krNDA+PjJdPTAsYXJbaSs0ND4+Ml09OTksYXJbaSs0OD4+Ml09OTksbkE9aSs1MnwwLGFyWyhmQT1pKzcyfDApPj4yXT0wLGFyW2krNzY+PjJdPTAsYXJbbkE+PjJdPTAsYXJbbkErND4+Ml09MCxhcltuQSs4Pj4yXT0wLGFyW25BKzEyPj4yXT0wLGFyW2krNjg+PjJdPWZBLGZBPWYsaUE9KG5BPWkpKzE2fDAsYnUoaSksc3UoaSksZT0wfGFyW2lBPj4yXSxhcltmPj4yXT1mQSxhcltpQT4+Ml09bkEsMHxlJiZrdShlKSxkdShpKSx5byhmLGssZCwxLDMpLEJvKGYsMyxrLGQsRiksQm8oZiw0LGssZCxGKSxCbyhmLDUsayxkLEYpLFomJkJvKGYsNixrLGQsSSksYXJbcD4+Ml09MCxhclt5Pj4yXT0wLGFyW0I+PjJdPTAsYXJbRT4+Ml09MCxhcltYPj4yXT0wLGFyW3Y+PjJdPTAsYXJbbT4+Ml09MCxjPShhcltnPj4yXT0wKXxSbygwfGFyW3I+PjJdLDAscCksbD0wfFJvKDB8YXJbcj4+Ml0sMSx5KSx1PTB8Um8oMHxhcltyPj4yXSwyLEIpLGI9MHxGbyhmLDMsWCkscz0wfEZvKGYsNCx2KSxpQT0wfEZvKGYsNSxtKSxlQT1aPyhyQT0wfFJvKDB8YXJbcj4+Ml0sNixFKSwwfEZvKGYsNixnKSk6ckE9MCxvPSh0PTE8PEYpLTF8MCxhPSgyNTUmKDB8Z28oRykpKS0xfDAsbj0oMjU1JigwfFpvKEcpKSktMXwwLGFyW3A+PjJdPSgwfGFyW3A+PjJdKS8yfDAsYXJbeT4+Ml09KDB8YXJbeT4+Ml0pLzJ8MCxhcltCPj4yXT0oMHxhcltCPj4yXSkvMnwwLGFyW0U+PjJdPSgwfGFyW0U+PjJdKS8yfDAsYXJbWD4+Ml09KDB8YXJbWD4+Ml0pLzJ8MCxhclt2Pj4yXT0oMHxhclt2Pj4yXSkvMnwwLGFyW20+PjJdPSgwfGFyW20+PjJdKS8yfDAsYXJbZz4+Ml09KDB8YXJbZz4+Ml0pLzJ8MCxaZShSKSxDPyhlPTB8b3JbQys4Pj4xXSxLPTB8dHJbQysxMD4+MF0scGUoVixlLDB8b3JbQys0Pj4xXSksYXJbUj4+Ml09YXJbVj4+Ml0sYXJbUis0Pj4yXT1hcltWKzQ+PjJdLGFyW1IrOD4+Ml09YXJbVis4Pj4yXSxhcltSKzEyPj4yXT1hcltWKzEyPj4yXSxhcltSKzE2Pj4yXT1hcltWKzE2Pj4yXSxLPUs8PDI0Pj4yNCE9MCxlJj02NTUzNSk6KEs9MSxlPTIpLDA8KDB8ZCkpe3E9MDwoMHxrKSwkPWs8PDEsQUE9MD09KDB8ZSksTD04PT0oMHxlKSxqPTE8PEYrLTEmNjU1MzUsSD1SKzR8MCx4PVIrOHwwLFA9UisxMnwwLEY9UisxNnwwLEc9MDtkb3tpZihxKXtEPUc+Pm4sUj0wfGJyKDB8YXJbeT4+Ml0sRCksUT0wfGJyKDB8YXJbcD4+Ml0sRyksRD0wfGJyKDB8YXJbQj4+Ml0sRCksSj0wfGJyKDB8YXJbWD4+Ml0sRyksTT0wfGJyKDB8YXJbbT4+Ml0sRyksVD0wfGJyKDB8YXJbdj4+Ml0sRyksVT0rZ0FbSD4+Ml0sUz0rZ0FbeD4+Ml0sTz0rZ0FbUD4+Ml0sej0rZ0FbRj4+Ml0sVj0wO2Rve0M9UisoZT1WPj5hKXwwLHI9UStWfDAsZT0wfG9yW3UrKEQrZTw8MSk+PjFdO2Rve2lmKEFBKXtpZihpPU0rVnwwLGY9SitWfDAsST1UK1Z8MCxLKXtvcltiKyhmPDwxKT4+MV09ZSxvcltzKyhJPDwxKT4+MV09MHxvcltjKyhyPDwxKT4+MV0sZT0wfG9yW2wrKEM8PDEpPj4xXTticmVha31vcltiKyhmPDwxKT4+MV09MTYrKCgxMjgrKDIxOSooNjU1MzUmZSl8MCl8MCk+Pj44KSxvcltzKyhJPDwxKT4+MV09MTYrKCgxMjgrKDIxOSooMHxscltjKyhyPDwxKT4+MV0pfDApfDApPj4+OCksZT0xNisoKDEyOCsoMjE5KigwfGxyW2wrKEM8PDEpPj4xXSl8MCl8MCk+Pj44KSY2NTUzNTticmVha31pZihmPSg2NTUzNSZlKS1qfDAsaT0wfG9yW2MrKHI8PDEpPj4xXSxlPSgwfGxyW2wrKEM8PDEpPj4xXSktanwwLEwpe3I9KGk9KEM9NjU1MzUmaSktZXwwKStmfDAsb3JbYisoSitWPDwxKT4+MV09KDB8cik8MD8wOjI1NTwoMHxyKT8yNTU6MjU1JnIsZT1DK2V8MCxvcltzKyhUK1Y8PDEpPj4xXT0oMHxlKTwwPzA6MjU1PCgwfGUpPzI1NToyNTUmZSxlPSgwfChlPWktZnwwKSk8MD8wOjI1NTwoMHxlKT8yNTU6MjU1JmUsaT1NK1Z8MDticmVha31fPSsoNjU1MzUmaSksWT0rKDB8ZSksTj0rKDB8ZiksWT1LP1k6MS4xNDI4OTk5OTAwODE3ODcqWSxlPSgwfChlPTB8ZWYoKF89Sz9fOjEuMTY4OTAwMDEyOTY5OTcwNyooXystMTYpKSsoTj1LP046MS4xNDI4OTk5OTAwODE3ODcqTikqVSkpKTwwPzA6NjU1MzUmKCgwfGUpPCgwfHQpP2U6byksb3JbYisoSitWPDwxKT4+MV09ZSxlPSgwfChlPTB8ZWYoXytZKlMrTipPKSkpPDA/MDo2NTUzNSYoKDB8ZSk8KDB8dCk/ZTpvKSxvcltzKyhUK1Y8PDEpPj4xXT1lLGU9KDB8KGU9MHxlZihfK1kqeikpKTwwPzA6NjU1MzUmKCgwfGUpPCgwfHQpP2U6byksaT1NK1Z8MH13aGlsZSgwKTtvcltpQSsoaTw8MSk+PjFdPWUsVj1WKzF8MH13aGlsZSgoMHxWKSE9KDB8aykpfVomJmhiKDB8KFQ9ZUErKCgwfGJyKDB8YXJbZz4+Ml0sRykpPDwxKXwwKSxyQSsoKDB8YnIoMHxhcltFPj4yXSxHKSk8PDEpfDAsMHwkKSxHPUcrMXwwfXdoaWxlKCgwfEcpIT0oMHxkKSl9YXJbQT4+Ml09ZkEsYXJbQSs0Pj4yXT1uQSx1cj0od3x8ZHUoaCksVyl9LGZ1bmN0aW9uKEEsZSxyLGksZil7dmFyIG47cmV0dXJuIEF8PTAsZXw9MCxpfD0wLGZ8PTAsdXI9KG49dXIpKzQ4fDAsZj1uKzM2fDAsZT1uLDghPSgwfGFyWyhyfD0wKSsxMj4+Ml0pfHwwfGFyW3I+PjJdPyhhcltBPj4yXT0wLGFyW0ErND4+Ml09MCxhcltBKzg+PjJdPTApOihhcltmPj4yXT0wLGFyWyhpPWYrNHwwKT4+Ml09MCxyPShhcltmKzg+PjJdPTApfHRyW3IrOD4+MF0sYXJbZT4+Ml09MSxhcltlKzQ+PjJdPTMsdHJbZSs4Pj4wXT1yLGFyW2UrMTI+PjJdPTgsYXJbZSsxNj4+Ml09MCxhclsocj1lKzIwfDApPj4yXT0wLGdBW2UrMjQ+PjJdPS41LGdBW2UrMjg+PjJdPTAsZ0FbZSszMj4+Ml09MCxObChmLGUpLDB8KGU9MHxhcltyPj4yXSkmJmR1KGUpLGFyW0E+PjJdPWFyW2Y+PjJdLGFyW0ErND4+Ml09YXJbaT4+Ml0sYXJbQSs4Pj4yXT1hcltmKzg+PjJdKSx2b2lkKHVyPW4pfSxmdW5jdGlvbihBLGUscixpLGYpe0F8PTAsZXw9MCxpfD0wLGZ8PTA7dmFyIG4sdCxvLGEsYyxsLHUsYixzLGQsayxoLHcsdixtLGcsWixwLHksQixFLFgsVyxJPTAsQz0wLEc9MCxWPTAsRj0wLFI9MCxOPTAsXz0wLFk9MCxRPTAsRD0wLEo9MCxNPTAsVD0wLFU9MCxTPTAsTz0wLHo9MCxqPTAsSD0wLHg9MCxQPTAsTD0wO2lmKHVyPShXPXVyKSs4MHwwLHA9Vys2OHwwLHk9Vys2NHwwLEI9Vys2MHwwLEU9Vys1NnwwLFg9Vys1MnwwLHY9Vys0OHwwLG09Vys0NHwwLGc9Vys0MHwwLFk9VysyMHwwLFY9VyxlPTB8YXJbKHJ8PTApPj4yXSxHPTB8YXJbZSszNj4+Ml0sXz0yNTUmKGU9MHxWbyhlLDApKSxpPTB8Vm8oMHxhcltyPj4yXSwxKSxmPTB8Vm8oMHxhcltyPj4yXSwyKSxJPShaPTB8RW8oMHxhcltyPj4yXSw2KSk/MjU1JigwfFZvKDB8YXJbcj4+Ml0sNikpOjAsZTw8MjQ+PjI0IT04fGk8PDI0Pj4yNCE9OHxmPDwyND4+MjQhPTgpcmV0dXJuIGFyW0E+PjJdPTAsYXJbQSs0Pj4yXT0wLHZvaWQodXI9Vyk7aWYoZT0wfGFyW3I+PjJdLEM9MHxhcltlKzQwPj4yXSwodz0wPT0oMHwoaD0wfGFyW2UrNDQ+PjJdKSkpfHwoYnUoaCksZT0wfGFyW3I+PjJdKSxrPTB8YXJbZSsyND4+Ml0sZD0wfGFyW2UrMjg+PjJdLGk9MHxodSg4MCksYXJbaSs0Pj4yXT0wLGFyW2krOD4+Ml09MCxhcltpPj4yXT02MjA4LGFyWyhmPWkrMTJ8MCk+PjJdPTAsYXJbZis0Pj4yXT0wLGFyW2YrOD4+Ml09MCxhcltmKzEyPj4yXT0wLGFyW2YrMTY+PjJdPTAsYXJbaSszMj4+Ml09MzIyMTUsYXJbaSszNj4+Ml09MCxhcltpKzQwPj4yXT0wLGFyW2krNDQ+PjJdPTk5LGFyW2krNDg+PjJdPTk5LFA9aSs1MnwwLGFyWyh4PWkrNzJ8MCk+PjJdPTAsYXJbaSs3Nj4+Ml09MCxhcltQPj4yXT0wLGFyW1ArND4+Ml09MCxhcltQKzg+PjJdPTAsYXJbUCsxMj4+Ml09MCxhcltpKzY4Pj4yXT14LHg9ZixIPShQPWkpKzE2fDAsYnUoaSksc3UoaSksZT0wfGFyW0g+PjJdLGFyW2Y+PjJdPXgsYXJbSD4+Ml09UCwwfGUmJmt1KGUpLGR1KGkpLHlvKGYsayxkLDEsMyksQm8oZiwzLGssZCxfKSxCbyhmLDQsayxkLF8pLEJvKGYsNSxrLGQsXyksWiYmQm8oZiw2LGssZCxJKSxhcltwPj4yXT0wLGFyW3k+PjJdPTAsYXJbQj4+Ml09MCxhcltFPj4yXT0wLGFyW1g+PjJdPTAsYXJbdj4+Ml09MCxhclttPj4yXT0wLGM9KGFyW2c+PjJdPTApfFJvKDB8YXJbcj4+Ml0sMCxwKSxsPTB8Um8oMHxhcltyPj4yXSwxLHkpLHU9MHxSbygwfGFyW3I+PjJdLDIsQiksYj0wfEZvKGYsMyxYKSxzPTB8Rm8oZiw0LHYpLEg9MHxGbyhmLDUsbSksej1aPyhqPTB8Um8oMHxhcltyPj4yXSw2LEUpLDB8Rm8oZiw2LGcpKTpqPTAsbz0odD0xPDxfKS0xfDAsYT0oMjU1JigwfGdvKEcpKSktMXwwLG49KDI1NSYoMHxabyhHKSkpLTF8MCxaZShZKSxDPyhlPTB8b3JbQys4Pj4xXSxUPTB8dHJbQysxMD4+MF0scGUoVixlLDB8b3JbQys0Pj4xXSksYXJbWT4+Ml09YXJbVj4+Ml0sYXJbWSs0Pj4yXT1hcltWKzQ+PjJdLGFyW1krOD4+Ml09YXJbVis4Pj4yXSxhcltZKzEyPj4yXT1hcltWKzEyPj4yXSxhcltZKzE2Pj4yXT1hcltWKzE2Pj4yXSxUPVQ8PDI0Pj4yNCE9MCxlJj02NTUzNSk6KFQ9MSxlPTIpLDA8KDB8ZCkpe1U9MDwoMHxrKSxTPWs8PDEsTz0wPT0oMHxlKSxNPTg9PSgwfGUpLFE9MTw8XystMSY2NTUzNSxEPVkrNHwwLEo9WSs4fDAsXz1ZKzEyfDAsRz1ZKzE2fDAscj0wO2Rve2lmKFUpe1Y9cj4+bixDPTA7ZG97aT1DPj5hLGY9dSsoKDB8YnIoMHxhcltCPj4yXSxWKSkraSl8MCxmPTB8dHJbZj4+MF07ZG97aWYoTyl7aWYoZT0oMHxicigwfGFyW1g+PjJdLHIpKStDfDAsVCl7dHJbYitlPj4wXT1mLFk9YysoKDB8YnIoMHxhcltwPj4yXSxyKSkrQyl8MCxlPXMrKCgwfGJyKDB8YXJbdj4+Ml0scikpK0MpfDAsdHJbZT4+MF09MHx0cltZPj4wXSxlPWwrKCgwfGJyKDB8YXJbeT4+Ml0sVikpK2kpfDAsZT0wfHRyW2U+PjBdO2JyZWFrfXRyW2IrZT4+MF09MTYrKCgxMjgrKDIxOSooMjU1JmYpfDApfDApPj4+OCksWT1jKygoMHxicigwfGFyW3A+PjJdLHIpKStDKXwwLGU9cysoKDB8YnIoMHxhclt2Pj4yXSxyKSkrQyl8MCx0cltlPj4wXT0xNisoKDEyOCsoMjE5KigwfGNyW1k+PjBdKXwwKXwwKT4+PjgpLGU9bCsoKDB8YnIoMHxhclt5Pj4yXSxWKSkraSl8MCxlPTE2KygoMTI4KygyMTkqKDB8Y3JbZT4+MF0pfDApfDApPj4+OCkmMjU1O2JyZWFrfWlmKGU9MHxicigwfGFyW3k+PjJdLFYpLEk9YysoKDB8YnIoMHxhcltwPj4yXSxyKSkrQyl8MCxJPTB8dHJbST4+MF0saT0oMHxjcltsKyhlK2kpPj4wXSktUXwwLGU9KDI1NSZmKS1RfDAsTSl7TD0oWT0oZj0yNTUmSSktaXwwKStlfDAsST1iKygoMHxicigwfGFyW1g+PjJdLHIpKStDKXwwLHRyW0k+PjBdPSgwfEwpPDA/MDoyNTU8KDB8TCk/LTE6MjU1JkwsZj1pK2Z8MCxJPXMrKCgwfGJyKDB8YXJbdj4+Ml0scikpK0MpfDAsdHJbST4+MF09KDB8Zik8MD8wOjI1NTwoMHxmKT8tMToyNTUmZixlPSgwfChlPVktZXwwKSk8MD8wOjI1NTwoMHxlKT8tMToyNTUmZTticmVha31SPSsoMjU1JkkpLE49KygwfGkpLEY9KygwfGUpLE49VD9OOjEuMTQyODk5OTkwMDgxNzg3Kk4sZT0oMHwoZT0wfGVmKChSPVQ/UjoxLjE2ODkwMDAxMjk2OTk3MDcqKFIrLTE2KSkrKEY9VD9GOjEuMTQyODk5OTkwMDgxNzg3KkYpKmdBW0Q+PjJdKSkpPDA/MDoyNTUmKCgwfGUpPCgwfHQpP2U6byksTD1iKygoMHxicigwfGFyW1g+PjJdLHIpKStDKXwwLHRyW0w+PjBdPWUsZT0oMHwoZT0wfGVmKFIrTipnQVtKPj4yXStGKmdBW18+PjJdKSkpPDA/MDoyNTUmKCgwfGUpPCgwfHQpP2U6byksTD1zKygoMHxicigwfGFyW3Y+PjJdLHIpKStDKXwwLHRyW0w+PjBdPWUsZT0oMHwoZT0wfGVmKFIrTipnQVtHPj4yXSkpKTwwPzA6MjU1JigoMHxlKTwoMHx0KT9lOm8pfXdoaWxlKDApO0w9SCsoKDB8YnIoMHxhclttPj4yXSxyKSkrQyl8MCx0cltMPj4wXT1lLEM9QysxfDB9d2hpbGUoKDB8QykhPSgwfGspKX1aJiZoYigwfChMPXorKDB8YnIoMHxhcltnPj4yXSxyKSl8MCksaisoMHxicigwfGFyW0U+PjJdLHIpKXwwLDB8Uykscj1yKzF8MH13aGlsZSgoMHxyKSE9KDB8ZCkpfWFyW0E+PjJdPXgsYXJbQSs0Pj4yXT1QLHVyPSh3fHxkdShoKSxXKX0sZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLGV8PTAsaXw9MCxmfD0wO3ZhciBuLHQsbz0wO3JldHVybiB1cj0odD11cikrNDh8MCxuPXQrMzZ8MCxlPXQsOD09KDB8YXJbKHJ8PTApKzEyPj4yXSkmJjE9PSgwfGFyW3I+PjJdKSYmMz09KDB8YXJbcis0Pj4yXSk/KGFyW24+PjJdPTAsYXJbKGY9NCtufDApPj4yXT0wLG89KGFyWzgrbj4+Ml09MCl8YXJbaSs0Pj4yXSxpPTB8dHJbcis4Pj4wXSxhcltlPj4yXT0wLGFyW2UrND4+Ml09byx0cltlKzg+PjBdPWksYXJbZSsxMj4+Ml09OCxhcltlKzE2Pj4yXT0wLGFyWyhpPWUrMjB8MCk+PjJdPTAsZ0FbZSsyND4+Ml09Ljc1LGdBW2UrMjg+PjJdPS41LGdBW2UrMzI+PjJdPTAsTmwobixlKSwwfChlPTB8YXJbaT4+Ml0pJiZkdShlKSxhcltBPj4yXT1hcltuPj4yXSxhcltBKzQ+PjJdPWFyW2Y+PjJdLGFyW0ErOD4+Ml09YXJbOCtuPj4yXSk6KGFyW0E+PjJdPTAsYXJbQSs0Pj4yXT0wLGFyW0ErOD4+Ml09MCksdm9pZCh1cj10KX0sZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLGV8PTAsaXw9MCxmfD0wO3ZhciBuLHQsbyxhLGMsbCx1LGIscyxkLGssaCx3LHYsbSxnLFoscCx5PTAsQj0wLEU9MCxYPTAsVz0wLEk9MCxDPTAsRz0wLFY9MCxGPTAsUj0wLE49MCxfPTAsWT0wLFE9MCxEPTAsSj0wLE09MCxUPTAsVT0wLFM9MCxPPTAsej0wLGo9MCxIPTAseD0wO2lmKHVyPShwPXVyKSsxMTJ8MCx3PXArMTA4fDAsdj1wKzEwNHwwLFQ9cCsxMDB8MCxaPXArOTZ8MCxGPXArOTJ8MCxiPXArODh8MCxzPXArODR8MCxtPXArODB8MCxZPXArNDB8MCxYPXAsVT0wfGFyWyhyfD0wKT4+Ml0sZz0wfGFyW1UrMjQ+PjJdLFU9MHxhcltVKzI4Pj4yXSxkPTI1NSYoMHxnbyhmPTB8YXJbaSs0Pj4yXSkpLGs9MjU1JigwfFpvKGYpKSxFPTI1NSYoTz0wfFZvKDB8YXJbcj4+Ml0sMykpLE88PDI0Pj4yNCE9OClyZXR1cm4gYXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsdm9pZCh1cj1wKTtpZigoaD0wfEVvKDB8YXJbcj4+Ml0sNikpJiYoMHxWbygwfGFyW3I+PjJdLDYpKTw8MjQ+PjI0IT04KXJldHVybiBhcltBPj4yXT0wLGFyW0ErND4+Ml09MCx2b2lkKHVyPXApO2lmKHk9MHxodSg4MCksYXJbeSs0Pj4yXT0wLGFyW3krOD4+Ml09MCxhclt5Pj4yXT02MjA4LGFyWyhCPXkrMTJ8MCk+PjJdPTAsYXJbQis0Pj4yXT0wLGFyW0IrOD4+Ml09MCxhcltCKzEyPj4yXT0wLGFyW0IrMTY+PjJdPTAsYXJbeSszMj4+Ml09MzIyMTUsYXJbeSszNj4+Ml09MCxhclt5KzQwPj4yXT0wLGFyW3krNDQ+PjJdPTk5LGFyW3krNDg+PjJdPTk5LE89eSs1MnwwLGFyWyhTPXkrNzJ8MCk+PjJdPTAsYXJbeSs3Nj4+Ml09MCxhcltPPj4yXT0wLGFyW08rND4+Ml09MCxhcltPKzg+PjJdPTAsYXJbTysxMj4+Ml09MCxhclt5KzY4Pj4yXT1TLFM9QixNPShPPXkpKzE2fDAsYnUoeSksc3UoeSksZT0wfGFyW00+PjJdLGFyW0I+PjJdPVMsYXJbTT4+Ml09TywwfGUmJmt1KGUpLGR1KHkpLHlvKEIsZyxVLDAsZiksSj0oZy0xK2R8MCkvKDB8ZCl8MCxNPShVKy0xK2t8MCkvKDB8ayl8MCxCbyhCLDAsZyxVLEUpLEJvKEIsMSxKLE0sRSksQm8oQiwyLEosTSxFKSxoJiZCbyhCLDYsZyxVLEUpLGFyW3c+PjJdPTAsYXJbdj4+Ml09MCxhcltUPj4yXT0wLGFyW1o+PjJdPTAsYXJbRj4+Ml09MCxhcltiPj4yXT0wLGFyW3M+PjJdPTAsYz0oYXJbbT4+Ml09MCl8Um8oMHxhcltyPj4yXSwzLHcpLGw9MHxSbygwfGFyW3I+PjJdLDQsdiksdT0wfFJvKDB8YXJbcj4+Ml0sNSxUKSxHPTB8Rm8oQiwwLEYpLEo9MHxGbyhCLDEsYiksTT0wfEZvKEIsMixzKSxRPWg/KEQ9MHxSbygwfGFyW3I+PjJdLDYsWiksMHxGbyhCLDYsbSkpOkQ9MCxuPTE8PEUrLTEsYT0obz0xPDxFKS0xfDAsQmUoWSksZT0wfGFyW2krMTY+PjJdKWZvcihyPTB8dHJbZSsxMD4+MF0seWUoWCx5PTB8b3JbZSs4Pj4xXSwwfG9yW2UrND4+MV0pLHI9cjw8MjQ+PjI0IT0wLHkmPTY1NTM1LGU9WCxmPShCPVkpKzQwfDA7YXJbQj4+Ml09YXJbZT4+Ml0sZT1lKzR8MCwoMHwoQj1CKzR8MCkpPCgwfGYpOyk7ZWxzZSB5PTIscj0xO2lmKHQ9MDwoMHxVKSl7RT0wPCgwfGcpLGk9MD09KDB8eSksWD1ZKzR8MCxJPVkrOHwwLEM9WSsxMnwwLEI9MDtkb3tBOmRve2lmKEUpe2lmKGkpZj0wO2Vsc2UgZm9yKGY9MDs7KWlmKF89bCsoKDB8YnIoMHxhclt2Pj4yXSxCKSkrZil8MCxOPWMrKCgwfGJyKDB8YXJbdz4+Ml0sQikpK2YpfDAsZT11KygoMHxicigwfGFyW1Q+PjJdLEIpKStmKXwwLFY9KDB8Y3JbTj4+MF0pKmdBW1g+PjJdKygwfGNyW18+PjBdKSpnQVtJPj4yXSsoMHxjcltlPj4wXSkqZ0FbQz4+Ml0sZT0oMHwoZT0wfGVmKHI/VjoyMTkqViouMDAzOTA2MjUrMTYpKSk8MD8wOjI1NSYoKDB8ZSk8KDB8byk/ZTphKSxfPUcrKCgwfGJyKDB8YXJbRj4+Ml0sQikpK2YpfDAsdHJbXz4+MF09ZSwoMHwoZj1mKzF8MCkpPT0oMHxnKSlicmVhayBBO2Zvcig7ZT1sKygoMHxicigwfGFyW3Y+PjJdLEIpKStmKXwwLGU9MHx0cltlPj4wXSxyfHwoZT0oMHwoZT0wfGVmKDIxOSooMjU1JmUpKi4wMDM5MDYyNSsxNikpKTwwPzA6MjU1JigoMHxlKTwoMHxvKT9lOmEpKSxfPUcrKCgwfGJyKDB8YXJbRj4+Ml0sQikpK2YpfDAsdHJbXz4+MF09ZSwoMHwoZj1mKzF8MCkpIT0oMHxnKTspO319d2hpbGUoMCk7Qj1CKzF8MH13aGlsZSgoMHxCKSE9KDB8VSkpO2lmKHQpe189MDwoMHxnKSxJPTA9PSgwfHkpLEM9WSsxNnwwLEc9WSsyMHwwLEY9WSsyNHwwLFI9WSsyOHwwLE49WSszMnwwLFg9WSszNnwwLFY9Kyg2NTUzNSZufDApLGk9MDtkb3tpZihfKWZvcihFPTA7ZT1JPyhlPXUrKCgwfGJyKDB8YXJbVD4+Ml0saSkpK0UpfDAsZT0wfHRyW2U+PjBdLHk9KGU9cj8oeT0oMHxpKS8oMHxrKXwwLGY9KDB8RSkvKDB8ZCl8MCxZPUorKCgwfGJyKDB8YXJbYj4+Ml0seSkpK2YpfDAsdHJbWT4+MF09ZSxlPWMrKCgwfGJyKDB8YXJbVD4+Ml0saSkpK0UpfDAsMHx0cltlPj4wXSk6KGU9KDB8KGU9MHxlZigyMTkqKDI1NSZlKSouMDAzOTA2MjUrMTYpKSk8MD8wOjI1NSYoKDB8ZSk8KDB8byk/ZTphKSx5PSgwfGkpLygwfGspfDAsZj0oMHxFKS8oMHxkKXwwLFk9SisoKDB8YnIoMHxhcltiPj4yXSx5KSkrZil8MCx0cltZPj4wXT1lLGU9YysoKDB8YnIoMHxhcltUPj4yXSxpKSkrRSl8MCwoMHwoZT0wfGVmKDIxOSooMHxjcltlPj4wXSkqLjAwMzkwNjI1KzE2KSkpPDA/MDoyNTUmKCgwfGUpPCgwfG8pP2U6YSkpLDB8YnIoMHxhcltiPj4yXSx5KSksQj1lLHkrZnwwKTooZT1jKygoMHxicigwfGFyW3c+PjJdLGkpKStFKXwwLHg9KygwfGNyW2U+PjBdKSxlPWwrKCgwfGJyKDB8YXJbdj4+Ml0saSkpK0UpfDAsSD0rKDB8Y3JbZT4+MF0pLGU9dSsoKDB8YnIoMHxhcltUPj4yXSxpKSkrRSl8MCxXPSsoMHxjcltlPj4wXSksej0yMjQqKGo9eCpnQVtDPj4yXStIKmdBW0c+PjJdK1cqZ0FbRj4+Ml0pKi4wMDM5MDYyNSxXPXI/eCpnQVtSPj4yXStIKmdBW04+PjJdK1cqZ0FbWD4+Ml06MjI0KnoqLjAwMzkwNjI1LGU9KDB8KGU9MHxlZihWKyhyP2o6eikpKSk8MD8wOjI1NSYoKDB8ZSk8KDB8byk/ZTphKSxmPSgwfGkpLygwfGspfDAseT0oMHxFKS8oMHxkKXwwLFk9SisoKDB8YnIoMHxhcltiPj4yXSxmKSkreSl8MCx0cltZPj4wXT1lLEI9ZT0oMHwoZT0wfGVmKFYrVykpKTwwPzA6MjU1JigoMHxlKTwoMHxvKT9lOmEpLCgwfGJyKDB8YXJbcz4+Ml0sZikpK3l8MCksdHJbTStlPj4wXT1CLCgwfChFPUUrZHwwKSk8KDB8Zyk7KTtpPWkra3wwfXdoaWxlKCgwfGkpPCgwfFUpKTtpZihoJnQpZm9yKGU9MDtoYigwfChUPVErKDB8YnIoMHxhclttPj4yXSxlKSl8MCksRCsoMHxicigwfGFyW1o+PjJdLGUpKXwwLDB8ZyksKDB8KGU9ZSsxfDApKSE9KDB8VSk7KTt9fWFyW0E+PjJdPVMsYXJbQSs0Pj4yXT1PLHVyPXB9LGZ1bmN0aW9uKEEsZSxyLGksZil7QXw9MCxlfD0wLGl8PTAsZnw9MDt2YXIgbix0LG89MCxhPTA7cmV0dXJuIHVyPSh0PXVyKSs0OHwwLG49dCszNnwwLGU9dCw4IT0oMHwoZj0wfGFyWyhyfD0wKSsxMj4+Ml0pKSYmMT09KDB8YXJbcj4+Ml0pJiYzPT0oMHxhcltyKzQ+PjJdKT8oYXJbbj4+Ml09MCxhclsobz00K258MCk+PjJdPTAsYT0oYXJbOCtuPj4yXT0wKXxhcltpKzQ+PjJdLGk9MHx0cltyKzg+PjBdLGFyW2U+PjJdPTAsYXJbZSs0Pj4yXT1hLHRyW2UrOD4+MF09aSxhcltlKzEyPj4yXT1mLGFyW2UrMTY+PjJdPTAsYXJbKGk9ZSsyMHwwKT4+Ml09MCxnQVtlKzI0Pj4yXT0uNzUsZ0FbZSsyOD4+Ml09LjUsZ0FbZSszMj4+Ml09MCxObChuLGUpLDB8KGU9MHxhcltpPj4yXSkmJmR1KGUpLGFyW0E+PjJdPWFyW24+PjJdLGFyW0ErND4+Ml09YXJbbz4+Ml0sYXJbQSs4Pj4yXT1hcls4K24+PjJdKTooYXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsYXJbQSs4Pj4yXT0wKSx2b2lkKHVyPXQpfSxmdW5jdGlvbihBLGUscixpLGYpe0F8PTAsZXw9MCxpfD0wLGZ8PTA7dmFyIG4sdCxvLGEsYyxsLHUsYixzLGQsayxoLHcsdixtLGcsWixwLHk9MCxCPTAsRT0wLFg9MCxXPTAsST0wLEM9MCxHPTAsVj0wLEY9MCxSPTAsTj0wLF89MCxZPTAsUT0wLEQ9MCxKPTAsTT0wLFQ9MCxVPTAsUz0wLE89MCx6PTAsaj0wLEg9MCx4PTAsUD0wLEw9MCxLPTAscT0wLCQ9MCxBQT0wLGVBPTAsckE9MCxpQT0wO2lmKHVyPShwPXVyKSsxMTJ8MCxvPXArMTA4fDAsYT1wKzEwNHwwLG49cCsxMDB8MCxaPXArOTZ8MCxWPXArOTJ8MCx0PXArODh8MCxIPXArODR8MCxnPXArODB8MCxsPXArNDB8MCxYPXAsZUE9MHxhclsocnw9MCk+PjJdLHc9MHxhcltlQSsyND4+Ml0sZUE9MHxhcltlQSsyOD4+Ml0sdj0yNTUmKDB8Z28oeT0wfGFyW2krND4+Ml0pKSxtPTI1NSYoMHxabyh5KSksRT0yNTUmKGU9MHxWbygwfGFyW3I+PjJdLDMpKSxlPDwyND4+MjQ9PTgpcmV0dXJuIGFyW0E+PjJdPTAsYXJbQSs0Pj4yXT0wLHZvaWQodXI9cCk7aWYoKHE9MHxFbygwfGFyW3I+PjJdLDYpKSYmKDB8Vm8oMHxhcltyPj4yXSw2KSk8PDI0Pj4yNCE9ZTw8MjQ+PjI0KXJldHVybiBhcltBPj4yXT0wLGFyW0ErND4+Ml09MCx2b2lkKHVyPXApO2lmKGY9MHxodSg4MCksYXJbZis0Pj4yXT0wLGFyW2YrOD4+Ml09MCxhcltmPj4yXT02MjA4LGFyWyhCPWYrMTJ8MCk+PjJdPTAsYXJbQis0Pj4yXT0wLGFyW0IrOD4+Ml09MCxhcltCKzEyPj4yXT0wLGFyW0IrMTY+PjJdPTAsYXJbZiszMj4+Ml09MzIyMTUsYXJbZiszNj4+Ml09MCxhcltmKzQwPj4yXT0wLGFyW2YrNDQ+PjJdPTk5LGFyW2YrNDg+PjJdPTk5LEFBPWYrNTJ8MCxhclsoJD1mKzcyfDApPj4yXT0wLGFyW2YrNzY+PjJdPTAsYXJbQUE+PjJdPTAsYXJbQUErND4+Ml09MCxhcltBQSs4Pj4yXT0wLGFyW0FBKzEyPj4yXT0wLGFyW2YrNjg+PjJdPSQsJD1CLEs9KEFBPWYpKzE2fDAsYnUoZiksc3UoZiksZT0wfGFyW0s+PjJdLGFyW0I+PjJdPSQsYXJbSz4+Ml09QUEsMHxlJiZrdShlKSxkdShmKSx5byhCLHcsZUEsMCx5KSxMPSh3LTErdnwwKS8oMHx2KXwwLEs9KGVBKy0xK218MCkvKDB8bSl8MCxCbyhCLDAsdyxlQSxFKSxCbyhCLDEsTCxLLEUpLEJvKEIsMixMLEssRSkscSYmQm8oQiw2LHcsZUEsRSksYXJbbz4+Ml09MCxhclthPj4yXT0wLGFyW24+PjJdPTAsYXJbWj4+Ml09MCxhcltWPj4yXT0wLGFyW3Q+PjJdPTAsYXJbSD4+Ml09MCxkPShhcltnPj4yXT0wKXxSbygwfGFyW3I+PjJdLDMsbyksaz0wfFJvKDB8YXJbcj4+Ml0sNCxhKSxoPTB8Um8oMHxhcltyPj4yXSw1LG4pLEo9MHxGbyhCLDAsViksTD0wfEZvKEIsMSx0KSxLPTB8Rm8oQiwyLEgpLHg9cT8oUD0wfFJvKDB8YXJbcj4+Ml0sNixaKSwwfEZvKEIsNixnKSk6UD0wLGFyW28+PjJdPSgwfGFyW28+PjJdKS8yfDAsYXJbYT4+Ml09KDB8YXJbYT4+Ml0pLzJ8MCxhcltuPj4yXT0oMHxhcltuPj4yXSkvMnwwLGFyW1o+PjJdPSgwfGFyW1o+PjJdKS8yfDAsYXJbVj4+Ml09KDB8YXJbVj4+Ml0pLzJ8MCxhclt0Pj4yXT0oMHxhclt0Pj4yXSkvMnwwLGFyW0g+PjJdPSgwfGFyW0g+PjJdKS8yfDAsYXJbZz4+Ml09KDB8YXJbZz4+Ml0pLzJ8MCxjPTE8PEUrLTEscz0oYj0xPDxFKS0xfDAsQmUobCksZT0wfGFyW2krMTY+PjJdKWZvcihyPTB8dHJbZSsxMD4+MF0seWUoWCx5PTB8b3JbZSs4Pj4xXSwwfG9yW2UrND4+MV0pLHI9cjw8MjQ+PjI0IT0wLHkmPTY1NTM1LGU9WCxmPShCPWwpKzQwfDA7YXJbQj4+Ml09YXJbZT4+Ml0sZT1lKzR8MCwoMHwoQj1CKzR8MCkpPCgwfGYpOyk7ZWxzZSB5PTIscj0xO2lmKHU9MDwoMHxlQSkpe189MDwoMHx3KSxZPTA9PSgwfHkpLFE9MHxhclthPj4yXSxYPTB8YXJbVj4+Ml0sVj0wfGFyW28+PjJdLEY9MHxhcltuPj4yXSxXPStnQVs0K2w+PjJdLEk9K2dBWzgrbD4+Ml0sQz0rZ0FbMTIrbD4+Ml0saT0wO2Rve0E6ZG97aWYoXyl7aWYoUj0wfGJyKFEsaSksTj0wfGJyKFgsaSksQj0wfGJyKFYsaSksRT0wfGJyKEYsaSksWSlmPTA7ZWxzZSBmb3IoZj0wOzspaWYoej0oMHxscltkKyhCK2Y8PDEpPj4xXSkqVysoMHxscltrKyhSK2Y8PDEpPj4xXSkqSSsoMHxscltoKyhFK2Y8PDEpPj4xXSkqQyxlPSgwfChlPTB8ZWYocj96OjIxOSp6Ki4wMDM5MDYyNSsxNikpKTwwPzA6NjU1MzUmKCgwfGUpPCgwfGIpP2U6cyksb3JbSisoTitmPDwxKT4+MV09ZSwoMHwoZj1mKzF8MCkpPT0oMHx3KSlicmVhayBBO2Zvcig7ZT0wfG9yW2srKFIrZjw8MSk+PjFdLHJ8fChlPSgwfChlPTB8ZWYoMjE5Kig2NTUzNSZlKSouMDAzOTA2MjUrMTYpKSk8MD8wOjY1NTM1JigoMHxlKTwoMHxiKT9lOnMpKSxvcltKKyhOK2Y8PDEpPj4xXT1lLCgwfChmPWYrMXwwKSkhPSgwfHcpOyk7fX13aGlsZSgwKTtpPWkrMXwwfXdoaWxlKCgwfGkpIT0oMHxlQSkpO2lmKHUpe2o9MDwoMHx3KSxKPTA9PSgwfHkpLFE9MHxhcltuPj4yXSxZPTB8YXJbdD4+Ml0sXz0wfGFyW28+PjJdLE49MHxhclthPj4yXSxUPStnQVsxNitsPj4yXSxVPStnQVsyMCtsPj4yXSxTPStnQVsyNCtsPj4yXSxPPStnQVsyOCtsPj4yXSx6PStnQVszMitsPj4yXSxNPStnQVszNitsPj4yXSxEPSsoNjU1MzUmY3wwKSxYPTB8YXJbSD4+Ml0saT0wO2Rve2lmKGopZm9yKFY9MHxicihRLGkpLEY9MHxicihfLGkpLFI9MHxicihOLGkpLEU9MDtlPTB8b3JbaCsoKGY9VitFfDApPDwxKT4+MV0sZT1KPyhlPXI/KHk9MHxicihZLCgwfGkpLygwfG0pfDApLG9yW0wrKHkrKEg9KDB8RSkvKDB8dil8MCk8PDEpPj4xXT1lLGY9MHxvcltkKyhmPDwxKT4+MV0sSCk6KGU9KDB8KGU9MHxlZigyMTkqKDY1NTM1JmUpKi4wMDM5MDYyNSsxNikpKTwwPzA6NjU1MzUmKCgwfGUpPCgwfGIpP2U6cykseT0wfGJyKFksKDB8aSkvKDB8bSl8MCksb3JbTCsoeSsoQj0oMHxFKS8oMHx2KXwwKTw8MSk+PjFdPWUsZj0oMHwoZT0wfGVmKDIxOSooMHxscltkKyhmPDwxKT4+MV0pKi4wMDM5MDYyNSsxNikpKTwwPzA6NjU1MzUmKCgwfGUpPCgwfGIpP2U6cyksQikseStlfDApOihJPTIyNCooaUE9KEM9KygwfGxyW2QrKEYrRTw8MSk+PjFdKSkqVCsoRz0rKDB8bHJbaysoUitFPDwxKT4+MV0pKSpVKyhXPSsoNjU1MzUmZSkpKlMpKi4wMDM5MDYyNSxlPSgwfChlPTB8ZWYoRCsocj9pQTpJKSkpKTwwPzA6NjU1MzUmKCgwfGUpPCgwfGIpP2U6cyksQj0oMHxFKS8oMHx2KXwwLEg9TCsoKDB8YnIoWSx5PSgwfGkpLygwfG0pfDApKStCPDwxKXwwLG9yW0g+PjFdPWUsZj1lPSgwfChlPTB8ZWYoRCsocj9DKk8rRyp6K1cqTToyMjQqSSouMDAzOTA2MjUpKSkpPDA/MDo2NTUzNSYoKDB8ZSk8KDB8Yik/ZTpzKSwoMHxicihYLHkpKStCfDApLG9yW0srKGU8PDEpPj4xXT1mLCgwfChFPUUrdnwwKSk8KDB8dyk7KTtpPWkrbXwwfXdoaWxlKCgwfGkpPCgwfGVBKSl9fWlmKHEmJihyQT13PDwxLHUpKWZvcihlPTA7aGIoMHwocT14KygoMHxicigwfGFyW2c+PjJdLGUpKTw8MSl8MCksUCsoKDB8YnIoMHxhcltaPj4yXSxlKSk8PDEpfDAsMHxyQSksKDB8KGU9ZSsxfDApKSE9KDB8ZUEpOyk7YXJbQT4+Ml09JCxhcltBKzQ+PjJdPUFBLHVyPXB9LGZ1bmN0aW9uKEEsZSxyLGksZil7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wO3ZhciBuPTA7ZG97aWYoMHx4dShBLDB8YXJbZSs4Pj4yXSkpTHUoMCxlLHIsaSk7ZWxzZSBpZigwfHh1KEEsMHxhcltlPj4yXSkpe2lmKEE9ZSszMnwwLCgwfGFyW2UrMTY+PjJdKSE9KDB8cikmJigwfGFyWyhuPWUrMjB8MCk+PjJdKSE9KDB8cikpe2FyW0E+PjJdPWksYXJbbj4+Ml09cixhclsoaT1lKzQwfDApPj4yXT0xKygwfGFyW2k+PjJdKSwxPT0oMHxhcltlKzM2Pj4yXSkmJjI9PSgwfGFyW2UrMjQ+PjJdKSYmKHRyW2UrNTQ+PjBdPTEpLGFyW2UrNDQ+PjJdPTQ7YnJlYWt9MT09KDB8aSkmJihhcltBPj4yXT0xKX19d2hpbGUoMCl9LGZ1bmN0aW9uKEEsZSxyLGksZil7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wO3ZhciBuPTAsdD0wLG89MCxhPTA7ZG97aWYoMHx4dShBLDB8YXJbZSs4Pj4yXSkpTHUoMCxlLHIsaSk7ZWxzZXtpZihuPUErOHwwLCEoMHx4dShBLDB8YXJbZT4+Ml0pKSl7bz0wfGFyW24+PjJdLG9zWzYzJmFyWzI0KygwfGFyW28+PjJdKT4+Ml1dKG8sZSxyLGksZik7YnJlYWt9aWYoQT1lKzMyfDAsKDB8YXJbZSsxNj4+Ml0pIT0oMHxyKSYmKDB8YXJbKHQ9ZSsyMHwwKT4+Ml0pIT0oMHxyKSl7aWYoYXJbQT4+Ml09aSw0PT0oMHxhclsoaT1lKzQ0fDApPj4yXSkpYnJlYWs7dHJbKEE9ZSs1MnwwKT4+MF09MCxuPSh0clsoYT1lKzUzfDApPj4wXT0wKXxhcltuPj4yXSxhc1sxNSZhclsyMCsoMHxhcltuPj4yXSk+PjJdXShuLGUscixyLDEsZiksMHx0clthPj4wXT8wfHRyW0E+PjBdP0E9MzooQT0zLG89MTEpOihBPTQsbz0xMSksMTE9PSgwfG8pJiYoYXJbdD4+Ml09cixhclsoYT1lKzQwfDApPj4yXT0xKygwfGFyW2E+PjJdKSwxPT0oMHxhcltlKzM2Pj4yXSkmJjI9PSgwfGFyW2UrMjQ+PjJdKSYmKHRyW2UrNTQ+PjBdPTEpKSxhcltpPj4yXT1BO2JyZWFrfTE9PSgwfGkpJiYoYXJbQT4+Ml09MSl9fXdoaWxlKDApfSxmdW5jdGlvbihBLGUscixpLGYpe0F8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MDt2YXIgbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTAsZD0wLGs9MCxoPTA7QTpkb3tpZigwfHh1KEEsMHxhcltlKzg+PjJdKSlMdSgwLGUscixpKTtlbHNle2lmKHQ9QSsxMnwwLGQ9ZSsyNHwwLGs9ZSszNnwwLGg9ZSs1NHwwLGI9QSs4fDAsbD1BKzE2fDAsISgwfHh1KEEsMHxhcltlPj4yXSkpKXtpZihvPUErMTYrKChzPTB8YXJbdD4+Ml0pPDwzKXwwLHJiKGwsZSxyLGksZiksbj1BKzI0fDAsKDB8cyk8PTEpYnJlYWs7aWYoMD09KDImKHQ9MHxhcltiPj4yXSl8MCkmJjEhPSgwfGFyW2s+PjJdKSl7aWYoISgxJnQpKWZvcig7Oyl7aWYoMHx0cltoPj4wXSlicmVhayBBO2lmKDE9PSgwfGFyW2s+PjJdKSlicmVhayBBO2lmKHJiKG4sZSxyLGksZiksbz4+PjA8PShuPW4rOHwwKT4+PjApYnJlYWsgQX1mb3IoOzspe2lmKDB8dHJbaD4+MF0pYnJlYWsgQTtpZigxPT0oMHxhcltrPj4yXSkmJjE9PSgwfGFyW2Q+PjJdKSlicmVhayBBO2lmKHJiKG4sZSxyLGksZiksbz4+PjA8PShuPW4rOHwwKT4+PjApYnJlYWsgQX19Zm9yKDs7KXtpZigwfHRyW2g+PjBdKWJyZWFrIEE7aWYocmIobixlLHIsaSxmKSxvPj4+MDw9KG49bis4fDApPj4+MClicmVhayBBfX1pZihuPWUrMzJ8MCwoMHxhcltlKzE2Pj4yXSkhPSgwfHIpJiYoMHxhclsocz1lKzIwfDApPj4yXSkhPSgwfHIpKXtpZihhcltuPj4yXT1pLDQ9PSgwfGFyWyh1PWUrNDR8MCk+PjJdKSlicmVhaztpPUErMTYrKGFyW3Q+PjJdPDwzKXwwLGE9ZSs1MnwwLGM9ZSs1M3wwLEE9bCxvPW49MDtlOmZvcig7Oyl7aWYoaT4+PjA8PUE+Pj4wKXt0PTE4O2JyZWFrfWlmKHRyW2E+PjBdPTAsdHJbYz4+MF09MCxlYihBLGUscixyLDEsZiksMHx0cltoPj4wXSl7dD0xODticmVha31kb3tpZigwfHRyW2M+PjBdKXtpZighKDB8dHJbYT4+MF0pKXtpZigxJmFyW2I+PjJdKXtuPTEsdD1vO2JyZWFrfW49MSx0PTE4O2JyZWFrIGV9aWYoMT09KDB8YXJbZD4+Ml0pKXt0PTIzO2JyZWFrIGV9aWYoISgyJmFyW2I+PjJdKSl7dD0yMzticmVhayBlfXQ9bj0xfWVsc2UgdD1vfXdoaWxlKDApO0E9QSs4fDAsbz10fWRve2lmKDE4PT0oMHx0KSl7aWYoIW8mJihhcltzPj4yXT1yLGFyWyhyPWUrNDB8MCk+PjJdPTErKDB8YXJbcj4+Ml0pLDE9PSgwfGFyW2s+PjJdKSkmJjI9PSgwfGFyW2Q+PjJdKSl7aWYodHJbaD4+MF09MSxuKXt0PTIzO2JyZWFrfW49NDticmVha31uP3Q9MjM6bj00fX13aGlsZSgwKTsyMz09KDB8dCkmJihuPTMpLGFyW3U+PjJdPW47YnJlYWt9MT09KDB8aSkmJihhcltuPj4yXT0xKX19d2hpbGUoMCl9LGZ1bmN0aW9uKEEsZSxyLGksZil7QXw9MCxlfD0wLHJ8PTAsZnw9MDt2YXIgbix0LG89MCxhPTAsYz0wLGw9MCx1PTA7aWYoISgoMHwoaXw9MCkpPD0wKSl7dD0yNTUrKG49MTw8Zil8MCxmPTA7ZG97Zm9yKGE9MHxicihmLGUpLGM9MHxicihmLGkpLG89MDt1PSgwfGNyWyhsPUErKG8rYSl8MCk+PjBdKSsoMHxhcltyKyhvK2M8PDIpPj4yXSl8MCx0cltsPj4wXT0oMHx1KTwwPzA6MjU1JigoMHx1KTwoMHxuKT91OnQpLCgwfChvPW8rMXwwKSkhPSgwfGkpOyk7Zj1mKzF8MH13aGlsZSgoMHxmKSE9KDB8aSkpfX0sZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLGV8PTAscnw9MCxmfD0wO3ZhciBuLHQsbz0wLGE9MCxjPTAsbD0wLHU9MDtpZighKCgwfChpfD0wKSk8PTApKXt0PTY1NTM1KyhuPTE8PGYpfDAsZj0wO2Rve2ZvcihhPTB8YnIoZixlKSxjPTB8YnIoZixpKSxvPTA7dT0oMHxsclsobD1BKyhvK2E8PDEpfDApPj4xXSkrKDB8YXJbcisobytjPDwyKT4+Ml0pfDAsb3JbbD4+MV09KDB8dSk8MD8wOjY1NTM1JigoMHx1KTwoMHxuKT91OnQpLCgwfChvPW8rMXwwKSkhPSgwfGkpOyk7Zj1mKzF8MH13aGlsZSgoMHxmKSE9KDB8aSkpfX0sZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLGV8PTAsaXw9MDt2YXIgbix0PTAsbz0wLGE9MCxjPTAsbD0wO2lmKG49MTw8KGZ8PTApKy0xLDA8KDB8KHJ8PTApKSl7YT0wO2Rve2ZvcihjPTB8YnIoYSxyKSxvPXQ9MDtvPSgob3JbZSsoKGw9dCtjfDApPDwxKT4+MV08PGkpK24+PmYpK298MCxhcltBKyhsPDwyKT4+Ml09bywoMHwodD10KzF8MCkpIT0oMHxyKTspO2E9YSsxfDB9d2hpbGUoKDB8YSkhPSgwfHIpKX19LGZ1bmN0aW9uKEEsZSxyLGksZil7QXw9MCxlfD0wLGl8PTA7dmFyIG4sdD0wLG89MCxhPTAsYz0wO2lmKG49MTw8KGZ8PTApKy0xLDA8KDB8KHJ8PTApKSl7YT0wO2Rve2ZvcihvPXQ9MDtjPSgwfGJyKHQscikpK2F8MCxvPSgob3JbZSsoYzw8MSk+PjFdPDxpKStuPj5mKStvfDAsYXJbQSsoYzw8Mik+PjJdPW8sKDB8KHQ9dCsxfDApKSE9KDB8cik7KTthPWErMXwwfXdoaWxlKCgwfGEpIT0oMHxyKSl9fSxmdW5jdGlvbihBLGUscixpLGYpe0F8PTAsZXw9MCxpfD0wO3ZhciBuLHQ9MCxvPTAsYT0wLGM9MDtpZihuPTE8PChmfD0wKSstMSwwPCgwfChyfD0wKSkpe289MDtkb3tmb3IoYT0wfGJyKG8sciksdD0wO2FyW0ErKChjPXQrYXwwKTw8Mik+PjJdPShvcltlKyhjPDwxKT4+MV08PGkpK24+PmYsKDB8KHQ9dCsxfDApKSE9KDB8cik7KTtvPW8rMXwwfXdoaWxlKCgwfG8pIT0oMHxyKSl9fSxKYixKYixKYixKYixKYixKYixKYixKYixKYixKYixKYixKYixKYixKYixKYl0sYXM9W01iLGZ1bmN0aW9uKEEsZSxyLGksZixuKXtBfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTA7dmFyIHQsbz0wLGE9MCxjPTAsbD0wLHU9MDtsPShhPTB8YXJbKG89KGV8PTApKzQ0fDApPj4yXSk+Pj4wPChjPXU9MHxhclsodD1lKzI0fDApPj4yXSk+Pj4wPyhhcltvPj4yXT11LGMpOmEsYT0yNCZuO0E6ZG97aWYoMD09KDB8YSl8fDE9PSgwfGYpJjI0PT0oMHxhKSlvPWE9LTE7ZWxzZXtlOmRve3N3aXRjaCgwfGYpe2Nhc2UgMDphPW89MDticmVhaztjYXNlIDE6aWYoOCZuKXthPSgoMHwobz1hPSgwfGFyW2UrMTI+PjJdKS0oMHxhcltlKzg+PjJdKXwwKSk8MCk8PDMxPj4zMTticmVhayBlfWE9KCgwfChvPWE9Yy0oMHxhcltlKzIwPj4yXSl8MCkpPDApPDwzMT4+MzE7YnJlYWsgZTtjYXNlIDI6KDB8dHJbKG89ZSszMnwwKSsxMT4+MF0pPDAmJihvPTB8YXJbbz4+Ml0pLGE9KCgwfChvPWE9bC1vfDApKTwwKTw8MzE+PjMxO2JyZWFrO2RlZmF1bHQ6bz1hPS0xO2JyZWFrIEF9fXdoaWxlKDApO2lmKGE9MHx0YigwfG8sMHxhLDB8ciwwfGkpLDA8PSgwfChvPUQpKSlpZigoMHx0clsoYz1lKzMyfDApKzExPj4wXSk8MCYmKGM9MHxhcltjPj4yXSksKDB8KHI9KCgwfChpPWwtY3wwKSk8MCk8PDMxPj4zMSkpPCgwfG8pfCgwfHIpPT0oMHxvKSZpPj4+MDxhPj4+MClvPWE9LTE7ZWxzZXtpZihjPTgmbiwhKDA9PSgwfGEpJjA9PSgwfG8pKSl7aWYoMHxjJiYwPT0oMHxhcltlKzEyPj4yXSkpe289YT0tMTticmVha31pZigwIT0oMTYmbnwwKSYwPT0oMHx1KSl7bz1hPS0xO2JyZWFrfX0wfGMmJihhcltlKzEyPj4yXT0oMHxhcltlKzg+PjJdKSthLGFyW2UrMTY+PjJdPWwpLDE2Jm4mJihhclt0Pj4yXT0oMHxhcltlKzIwPj4yXSkrYSl9ZWxzZSBvPWE9LTF9fXdoaWxlKDApO2FyWyh1PUEpPj4yXT0wLGFyW3UrND4+Ml09MCxhclsoQT1BKzh8MCk+PjJdPWEsYXJbQSs0Pj4yXT1vfSxmdW5jdGlvbihBLGUscixpLGYsbil7bnw9MCxhclsobj1BfD0wKT4+Ml09MCxhcltuKzQ+PjJdPTAsYXJbKG49QSs4fDApPj4yXT0tMSxhcltuKzQ+PjJdPS0xfSxmdW5jdGlvbihBLGUscixpLGYsbil7bnw9MCxhclsobj1BfD0wKT4+Ml09MCxhcltuKzQ+PjJdPTAsYXJbKG49QSs4fDApPj4yXT0tMSxhcltuKzQ+PjJdPS0xfSxmdW5jdGlvbihBLGUscixpLGYsbil7dmFyIHQsbyxhLGM7Zm9yKEF8PTAsZXw9MCxyfD0wLG58PTAsdD11cj0obz11cikrMzEmLTMyLHVyPXVyKzE2fDAsYXJbdD4+Ml09MCxhcls0K3Q+PjJdPTAsZT1hcls4K3Q+PjJdPTA7MyE9KDB8ZSk7KWU9ZSsxfChhclt0KyhlPDwyKT4+Ml09MCk7Zm9yKG49KGU9KGM9KGE9MHx0cltuKzExPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW24+PjJdOm4pKyhjPzB8YXJbbis0Pj4yXToyNTUmYSl8MDshKG4+Pj4wPD1lPj4+MCk7KV91KHQsMHx0cltlPj4wXSksZT1lKzF8MDtmb3Iocj0wfHRmKDAsMCwwLGU9KDB8dHJbMTErdD4+MF0pPDA/MHxhclt0Pj4yXTp0KSxhcltBPj4yXT0wLGFyW0ErND4+Ml09MCxuPWFyW0ErOD4+Ml09MDszIT0oMHxuKTspbj1uKzF8KGFyW0ErKG48PDIpPj4yXT0wKTtmb3Iobj1lKygwfFZjKHIpKXwwOyEobj4+PjA8PWU+Pj4wKTspX3UoQSwwfHRyW2U+PjBdKSxlPWUrMXwwO0J1KHQpLHVyPW99LGZ1bmN0aW9uKEEsZSxyLGksZixuKXtBfD0wLGV8PTAsbnw9MDt2YXIgdCxvLGEsYyxsLHUsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTA7Zm9yKHc9dXI9KHU9dXIpKzMxJi0zMix1cj11cisxNzZ8MCxvPXcrMTY4fDAsYT13KzQwfDAsYz13KzM2fDAsbD13KzMyfDAsaz0odD13KSsyNHwwLHc9dysxNnwwLGFyW3Q+PjJdPTAsYXJbdCs0Pj4yXT0wLGU9YXJbdCs4Pj4yXT0wOzMhPSgwfGUpOyllPWUrMXwoYXJbdCsoZTw8Mik+PjJdPTApO2ZvcihhcltrKzQ+PjJdPTAsYXJbaz4+Ml09MTY4OTIscz0oZT0oZD0ocz0wfHRyW24rOCszPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW24+PjJdOm4pKygoZD8wfGFyW24rND4+Ml06MjU1JnMpPDwyKXwwLGQ9MzIrYXwwLG49ZSxlPTA7MiE9KDB8ZSkmbj4+PjA8cz4+PjA7KXtpZihhcltsPj4yXT1uLDI9PSgwfChiPTB8ZXNbMTUmYXJbMTIrKDB8YXJbaz4+Ml0pPj4yXV0oayxvLG4scyxsLGEsZCxjKSkpfHwoMHxhcltsPj4yXSk9PSgwfG4pKXtoPTc7YnJlYWt9Zm9yKGU9YTshKGU+Pj4wPj0oMHxhcltjPj4yXSk+Pj4wKTspX3UodCwwfHRyW2U+PjBdKSxlPWUrMXwwO249MHxhcltsPj4yXSxlPWJ9Zm9yKDc9PSgwfGgpJiZ0aSgpLGFuKCksbj0wfHRmKDAsMCwwLGI9KDB8dHJbdCsxMT4+MF0pPDA/MHxhclt0Pj4yXTp0KSxhcltBPj4yXT0wLGFyW0ErND4+Ml09MCxlPWFyW0ErOD4+Ml09MDszIT0oMHxlKTspZT1lKzF8KGFyW0ErKGU8PDIpPj4yXT0wKTtmb3IoYXJbdys0Pj4yXT0wLGFyW3c+PjJdPTE2OTQwLGQ9cz1iKygwfFZjKG4pKXwwLGs9MTI4K2F8MCxuPWIsZT0wOzspe2lmKCEoMiE9KDB8ZSkmbj4+PjA8cz4+PjApKXtoPTIxO2JyZWFrfWlmKGFyW2w+PjJdPW4sMj09KDB8KGI9MHxlc1sxNSZhclsxNisoMHxhclt3Pj4yXSk+PjJdXSh3LG8sbiwzMjwoZC1ufDApP24rMzJ8MDpzLGwsYSxrLGMpKSl8fCgwfGFyW2w+PjJdKT09KDB8bikpe2g9MTc7YnJlYWt9Zm9yKGU9YTshKGU+Pj4wPj0oMHxhcltjPj4yXSk+Pj4wKTspT3UoQSwwfGFyW2U+PjJdKSxlPWUrNHwwO249MHxhcltsPj4yXSxlPWJ9aWYoMTc9PSgwfGgpKXRpKCk7ZWxzZSBpZigyMT09KDB8aCkpcmV0dXJuIGFuKCksQnUodCksdm9pZCh1cj11KX0sZnVuY3Rpb24oQSxlLHIsaSxmLG4pe3J8PTAsaXw9MCxmfD0wLG58PTAsMHx4dShBfD0wLDB8YXJbKGV8PTApKzg+PjJdKSYmS3UoMCxlLHIsaSxmKX0sZnVuY3Rpb24oQSxlLHIsaSxmLG4pe3J8PTAsaXw9MCxmfD0wLG58PTAsMHx4dShBfD0wLDB8YXJbKGV8PTApKzg+PjJdKT9LdSgwLGUscixpLGYpOihBPTB8YXJbQSs4Pj4yXSxhc1sxNSZhclsyMCsoMHxhcltBPj4yXSk+PjJdXShBLGUscixpLGYsbikpfSxmdW5jdGlvbihBLGUscixpLGYsbil7cnw9MCxpfD0wLGZ8PTAsbnw9MDt2YXIgdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MDtpZigwfHh1KEF8PTAsMHxhclsoZXw9MCkrOD4+Ml0pKUt1KDAsZSxyLGksZik7ZWxzZXt0PTB8dHJbKHM9ZSs1MnwwKT4+MF0sYT0wfHRyWyhvPWUrNTN8MCk+PjBdLGM9QSsxNisoKGI9MHxhcltBKzEyPj4yXSk8PDMpfDAsdHJbcz4+MF09MCxlYihBKzE2fCh0cltvPj4wXT0wKSxlLHIsaSxmLG4pO0E6ZG97aWYoMTwoMHxiKSl7bD1lKzI0fDAsdT1lKzU0fDAsYj1BKzh8MCxBPUErMjR8MDtkb3tpZigwfHRyW3U+PjBdKWJyZWFrIEE7aWYoMHx0cltzPj4wXSl7aWYoMT09KDB8YXJbbD4+Ml0pKWJyZWFrIEE7aWYoISgyJmFyW2I+PjJdKSlicmVhayBBfWVsc2UgaWYoMHx0cltvPj4wXSYmMD09KDEmYXJbYj4+Ml18MCkpYnJlYWsgQTt0cltzPj4wXT0wLHRyW28+PjBdPTAsZWIoQSxlLHIsaSxmLG4pLEE9QSs4fDB9d2hpbGUoQT4+PjA8Yz4+PjApfX13aGlsZSgwKTt0cltzPj4wXT10LHRyW28+PjBdPWF9fSxmdW5jdGlvbihBLGUscixpLGYsbil7QXw9MCxlfD0wLHJ8PTAsaXw9MCxufD0wO3ZhciB0PTAsbz0wLGE9MCxjPTAsbD0wO2lmKDEmKGZ8PTApfDAmJnNyKDM2MjMwLDM2MjQzLDQwLDM2MjYyKSwwPCgwfG4pJjA8KDB8Zikpe2E9MDtkb3tmb3IodD1BKygwfGJyKGEsZSkpfDAsbz1yKygoMHxicihhLGkpKTw8MSl8MCxjPTA7bD0zMisoMHxvcltvPj4xXSk+PjYsdHJbdD4+MF09KDB8bCk8MD8wOjI1NSYoKDB8bCk8MjU1P2w6MjU1KSxsPTMyKygwfG9yW28rMj4+MV0pPj42LHRyW3QrMT4+MF09KDB8bCk8MD8wOjI1NSYoKDB8bCk8MjU1P2w6MjU1KSwhKCgwfGYpPD0oMHwoYz1jKzJ8MCkpKTspdD10KzJ8MCxvPW8rNHwwO2E9YSsxfDB9d2hpbGUoKDB8YSkhPSgwfG4pKX19LE1iLE1iLE1iLE1iLE1iLE1iXSxjcz1bVGIsZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCl7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLHR8PTA7dmFyIG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wO2lmKDEmKG58PTApfDAmJnNyKDM2MjMwLDM2MjQzLDEwNSwzNjM2MyksMDwoMHx0KSYwPCgwfG4pKXtsPTA7ZG97Zm9yKGM9MHxicihsLGYpLG89QSsoMHxicihsLGUpKXwwLGE9aSsoYzw8MSl8MCxjPXIrKGM8PDEpfDAsdT0wO2I9NjQrKDB8b3JbYz4+MV0pKygwfG9yW2E+PjFdKT4+Nyx0cltvPj4wXT0oMHxiKTwwPzA6MjU1JigoMHxiKTwyNTU/YjoyNTUpLGI9NjQrKDB8b3JbYysyPj4xXSkrKDB8b3JbYSsyPj4xXSk+PjcsdHJbbysxPj4wXT0oMHxiKTwwPzA6MjU1JigoMHxiKTwyNTU/YjoyNTUpLCEoKDB8bik8PSgwfCh1PXUrMnwwKSkpOylvPW8rMnwwLGE9YSs0fDAsYz1jKzR8MDtsPWwrMXwwfXdoaWxlKCgwfGwpIT0oMHx0KSl9fSxmdW5jdGlvbihBLGUscixpLGYsbix0KXtBfD0wLGV8PTAscnw9MCxpfD0wLG58PTA7dmFyIG8sYSxjLGwsdT0wLGI9MCxzPTAsZD0wO2lmKGM9MDwoMHwobD0xNC0odHw9MCl8MCkpPzE8PGwtMTowLDEmKGZ8PTApfDAmJnNyKDM2MjMwLDM2MjQzLDE3MiwzNjM5NiksISgoMHxuKTw9MCkmJihhPTY1NTM1KyhvPTE8PHQpfDAsMDwoMHxmKSkpe2I9MDtkb3tmb3IodD1BKygoMHxicihiLGUpKTw8MSl8MCx1PXIrKCgwfGJyKGIsaSkpPDwxKXwwLHM9MDtkPSgwfG9yW3U+PjFdKStjPj5sLG9yW3Q+PjFdPSgwfGQpPDA/MDo2NTUzNSYoKDB8ZCk8KDB8byk/ZDphKSxkPSgwfG9yW3UrMj4+MV0pK2M+Pmwsb3JbdCsyPj4xXT0oMHxkKTwwPzA6NjU1MzUmKCgwfGQpPCgwfG8pP2Q6YSksISgoMHxmKTw9KDB8KHM9cysyfDApKSk7KXQ9dCs0fDAsdT11KzR8MDtiPWIrMXwwfXdoaWxlKCgwfGIpIT0oMHxuKSl9fSxmdW5jdGlvbihBLGUscixpLGYsbix0KXtBfD0wLGV8PTAscnw9MCxpfD0wLHR8PTA7dmFyIG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wO2lmKDA8KDB8KG58PTApKSYwPCgwfChmfD0wKSkpe2M9MDtkb3tmb3IodD1yKygwfGJyKGMsaSkpfDAsbz1BKygoMHxicihjLGUpKTw8MSl8MCxhPTA7Yj0oMHxjclt0KzE+PjBdKTw8NiY2NTUzNSx1PSgwfGNyW3QrMj4+MF0pPDw2JjY1NTM1LGw9KDB8Y3JbdCszPj4wXSk8PDYmNjU1MzUsb3Jbbz4+MV09KDB8Y3JbdD4+MF0pPDw2LG9yW28rMj4+MV09YixvcltvKzQ+PjFdPXUsb3Jbbys2Pj4xXT1sLCEoKDB8Zik8PSgwfChhPWErNHwwKSkpOyl0PXQrNHwwLG89bys4fDA7Yz1jKzF8MH13aGlsZSgoMHxjKSE9KDB8bikpfX0sZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCl7eG8oQXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsdHw9MCwwLDEsOCl9LGZ1bmN0aW9uKEEsZSxyLGksZixuLHQpe3hvKEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsMCwyLDgpfSxmdW5jdGlvbihBLGUscixpLGYsbix0KXt4byhBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCx0fD0wLDAsMyw4KX0sZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCl7eG8oQXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsdHw9MCwxLDAsOCl9LGZ1bmN0aW9uKEEsZSxyLGksZixuLHQpe3hvKEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsMSwxLDgpfSxmdW5jdGlvbihBLGUscixpLGYsbix0KXt4byhBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCx0fD0wLDEsMiw4KX0sZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCl7eG8oQXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsdHw9MCwxLDMsOCl9LGZ1bmN0aW9uKEEsZSxyLGksZixuLHQpe3hvKEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsMiwwLDgpfSxmdW5jdGlvbihBLGUscixpLGYsbix0KXt4byhBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCx0fD0wLDIsMSw4KX0sZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCl7eG8oQXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsdHw9MCwyLDIsOCl9LGZ1bmN0aW9uKEEsZSxyLGksZixuLHQpe3hvKEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsMiwzLDgpfSxmdW5jdGlvbihBLGUscixpLGYsbix0KXt4byhBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCx0fD0wLDMsMCw4KX0sZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCl7eG8oQXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsdHw9MCwzLDEsOCl9LGZ1bmN0aW9uKEEsZSxyLGksZixuLHQpe3hvKEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsMywyLDgpfSxmdW5jdGlvbihBLGUscixpLGYsbix0KXt4byhBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCx0fD0wLDMsMyw4KX0sVGIsVGIsVGIsVGIsVGIsVGIsVGIsVGIsVGIsVGIsVGIsVGIsVGJdLGxzPVtVYixmdW5jdGlvbihBLGUscixpLGYsbix0LG8pe0F8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCx0fD0wO3ZhciBhLGMsbCx1LGI9MCxzPTAsZD0wLGs9MCxoPTA7aWYobD0xPDwodT0xNS0ob3w9MCl8MCktMSwxJihufD0wKXwwJiZzcigzNjIzMCwzNjI0MywyMzgsMzY0OTApLCEoKDB8dCk8PTApJiYoYz02NTUzNSsoYT0xPDxvKXwwLDA8KDB8bikpKXtkPTA7ZG97Zm9yKHM9MHxicihkLGYpLG89QSsoKDB8YnIoZCxlKSk8PDEpfDAsYj1pKyhzPDwxKXwwLHM9cisoczw8MSl8MCxrPTA7aD0oMHxvcltzPj4xXSkrbCsoMHxvcltiPj4xXSk+PnUsb3Jbbz4+MV09KDB8aCk8MD8wOjY1NTM1JigoMHxoKTwoMHxhKT9oOmMpLGg9KDB8b3JbcysyPj4xXSkrbCsoMHxvcltiKzI+PjFdKT4+dSxvcltvKzI+PjFdPSgwfGgpPDA/MDo2NTUzNSYoKDB8aCk8KDB8YSk/aDpjKSwhKCgwfG4pPD0oMHwoaz1rKzJ8MCkpKTspbz1vKzR8MCxiPWIrNHwwLHM9cys0fDA7ZD1kKzF8MH13aGlsZSgoMHxkKSE9KDB8dCkpfX0sZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCxvKXtBfD0wLGV8PTAscnw9MCxpfD0wLHR8PTA7dmFyIGEsYz0wLGw9MDtpZihhPTE0LShvfD0wKXwwLDA8KDB8KG58PTApKSYwPCgwfChmfD0wKSkpe2M9MDtkb3tmb3IodD1BKygoMHxicihjLGUpKTw8MSl8MCxvPXIrKCgwfGJyKGMsaSkpPDwxKXwwLGw9MDtvclt0Pj4xXT0oMHxscltvPj4xXSk8PGEsKDB8KGw9bCsxfDApKSE9KDB8Zik7KXQ9dCsyfDAsbz1vKzJ8MDtjPWMrMXwwfXdoaWxlKCgwfGMpIT0oMHxuKSl9fSxmdW5jdGlvbihBLGUscixpLGYsbix0LG8pe1BvKEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsMCwxLG98PTApfSxmdW5jdGlvbihBLGUscixpLGYsbix0LG8pe1BvKEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsMCwyLG98PTApfSxmdW5jdGlvbihBLGUscixpLGYsbix0LG8pe1BvKEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsMCwzLG98PTApfSxmdW5jdGlvbihBLGUscixpLGYsbix0LG8pe1BvKEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsMSwwLG98PTApfSxmdW5jdGlvbihBLGUscixpLGYsbix0LG8pe1BvKEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsMSwxLG98PTApfSxmdW5jdGlvbihBLGUscixpLGYsbix0LG8pe1BvKEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsMSwyLG98PTApfSxmdW5jdGlvbihBLGUscixpLGYsbix0LG8pe1BvKEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsMSwzLG98PTApfSxmdW5jdGlvbihBLGUscixpLGYsbix0LG8pe1BvKEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsMiwwLG98PTApfSxmdW5jdGlvbihBLGUscixpLGYsbix0LG8pe1BvKEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsMiwxLG98PTApfSxmdW5jdGlvbihBLGUscixpLGYsbix0LG8pe1BvKEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsMiwyLG98PTApfSxmdW5jdGlvbihBLGUscixpLGYsbix0LG8pe1BvKEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsMiwzLG98PTApfSxmdW5jdGlvbihBLGUscixpLGYsbix0LG8pe1BvKEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsMywwLG98PTApfSxmdW5jdGlvbihBLGUscixpLGYsbix0LG8pe1BvKEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsMywxLG98PTApfSxmdW5jdGlvbihBLGUscixpLGYsbix0LG8pe1BvKEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsMywyLG98PTApfSxmdW5jdGlvbihBLGUscixpLGYsbix0LG8pe1BvKEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsMywzLG98PTApfSxVYixVYixVYixVYixVYixVYixVYixVYixVYixVYixVYixVYixVYixVYl0sdXM9W1NiLGZ1bmN0aW9uKEEsZSxyLGksZixuLHQsbyxhKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCx0fD0wLG98PTA7dmFyIGMsbD0wLHU9MCxiPTAscz0wLGQ9MDtpZigoMHwoYXw9MCkpPD0wJiZzcigzNjI5MywzNjI0Myw2MCwzNjMwMyksYz0xPDxhKy0xLDA8KDB8bikmMDwoMHxmKSl7Yj0wO2Rve2ZvcihsPUErKDB8YnIoYixlKSl8MCx1PXIrKCgwfGJyKGIsaSkpPDwxKXwwLHM9MDtkPSgoMHxicigwfG9yW3U+PjFdLHQpKStjPj5hKStvfDAsdHJbbD4+MF09KDB8ZCk8MD8wOjI1NSYoKDB8ZCk8MjU1P2Q6MjU1KSwoMHwocz1zKzF8MCkpIT0oMHxmKTspbD1sKzF8MCx1PXUrMnwwO2I9YisxfDB9d2hpbGUoKDB8YikhPSgwfG4pKX19LGZ1bmN0aW9uKEEsZSxyLGksZixuLHQsbyxhKXtBfD0wLGV8PTAscnw9MCxpfD0wLHR8PTAsb3w9MCxhfD0wO3ZhciBjPTA7aWYoMDwoMHwobnw9MCkpJjA8KDB8KGZ8PTApKSl7YT0wO2Rve2Zvcih0PXIrKDB8YnIoYSxpKSl8MCxvPUErKCgwfGJyKGEsZSkpPDwxKXwwLGM9MDtvcltvPj4xXT0oMHxjclt0Pj4wXSk8PDYsKDB8KGM9YysxfDApKSE9KDB8Zik7KXQ9dCsxfDAsbz1vKzJ8MDthPWErMXwwfXdoaWxlKCgwfGEpIT0oMHxuKSl9fSxTYl0sYnM9W09iLGZ1bmN0aW9uKEEsZSxyLGksZixuLHQsbyxhLGMpe0F8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsb3w9MCxjfD0wO3ZhciBsLHUsYixzPTAsZD0wLGs9MCxoPTA7aWYoKDB8KGF8PTApKTw9MCYmc3IoMzYyOTMsMzYyNDMsMTkzLDM2NDI4KSxiPTE8PGErLTEsISgoMHxuKTw9MCkmJih1PTY1NTM1KyhsPTE8PGMpfDAsMDwoMHxmKSkpe2Q9MDtkb3tmb3IoYz1BKygoMHxicihkLGUpKTw8MSl8MCxzPXIrKCgwfGJyKGQsaSkpPDwxKXwwLGs9MDtoPSgoMHxicigwfG9yW3M+PjFdLHQpKStiPj5hKStvfDAsb3JbYz4+MV09KDB8aCk8MD8wOjY1NTM1JigoMHxoKTwoMHxsKT9oOnUpLCgwfChrPWsrMXwwKSkhPSgwfGYpOyljPWMrMnwwLHM9cysyfDA7ZD1kKzF8MH13aGlsZSgoMHxkKSE9KDB8bikpfX0sZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCxvLGEsYyl7QXw9MCxlfD0wLHJ8PTAsaXw9MCx0fD0wLG98PTAsYXw9MDt2YXIgbCx1LGIscz0wLGQ9MCxrPTAsaD0wLHc9MCx2PTA7aWYoYj11cixrPShjfD0wKSstOHwwLGg9MHxicigoZnw9MCk8PDEsbD0obnw9MCkrM3wwKSx1cj0odT11cikrKDE1KygwfCtoKSYtMTYpfDAsLTE8KDB8KGg9bisyfDApKSl7dz0wPCgwfGYpLGE9LTE7ZG97QTpkb3tpZih3KWZvcihkPWErMXwwLGE9cisoKChzPTApfGJyKGEsaSkpLTEpfDA7Oyl7c3dpdGNoKDB8dCl7Y2FzZSAwOmM9MHxjclsoYT1hKzF8MCk+PjBdO2JyZWFrO2Nhc2UgMTp2PWErMXwwLGM9KDB8YnIoMHxjclthPj4wXSwtMikpKyg1OCooMHxjclt2Pj4wXSl8MCkrKDEwKigwfGNyW2ErMj4+MF0pfDApLShjclthKzM+PjBdPDwxKT4+ayY2NTUzNSxhPXY7YnJlYWs7Y2FzZSAyOnY9YSsxfDAsYz0oMHxicigwfGNyW2E+PjBdLC00KSkrKDU0KigwfGNyW3Y+PjBdKXwwKSsoY3JbYSsyPj4wXTw8NCktKGNyW2ErMz4+MF08PDEpPj5rJjY1NTM1LGE9djticmVhaztjYXNlIDM6dj1hKzF8MCxjPSgwfGJyKDB8Y3JbYT4+MF0sLTYpKSsoNDYqKDB8Y3Jbdj4+MF0pfDApKygyOCooMHxjclthKzI+PjBdKXwwKS0oY3JbYSszPj4wXTw8Mik+PmsmNjU1MzUsYT12O2JyZWFrO2Nhc2UgNDp2PWErMXwwLGM9KDB8YnIoMHxjclthPj4wXSwtNCkpLShjclthKzM+PjBdPDwyKSsoMzYqKCgwfGNyW2ErMj4+MF0pKygwfGNyW3Y+PjBdKXwwKXwwKT4+ayY2NTUzNSxhPXY7YnJlYWs7Y2FzZSA1OnY9YSsxfDAsYz0oMHxicigwfGNyW2E+PjBdLC00KSkrKDI4KigwfGNyW3Y+PjBdKXwwKSsoNDYqKDB8Y3JbYSsyPj4wXSl8MCkrKDB8YnIoMHxjclthKzM+PjBdLC02KSk+PmsmNjU1MzUsYT12O2JyZWFrO2Nhc2UgNjp2PWErMXwwLGM9KDB8YnIoMHxjclthPj4wXSwtMikpKyhjclt2Pj4wXTw8NCkrKDU0KigwfGNyW2ErMj4+MF0pfDApLShjclthKzM+PjBdPDwyKT4+ayY2NTUzNSxhPXY7YnJlYWs7ZGVmYXVsdDp2PWErMXwwLGM9KDB8YnIoMHxjclthPj4wXSwtMikpKygxMCooMHxjclt2Pj4wXSl8MCkrKDU4KigwfGNyW2ErMj4+MF0pfDApLShjclthKzM+PjBdPDwxKT4+ayY2NTUzNSxhPXZ9aWYodj11KyhkKygwfGJyKHMsbCkpPDwxKXwwLG9yW3Y+PjFdPWMsKDB8KHM9cysxfDApKT09KDB8Zikpe2E9ZDticmVhayBBfX1lbHNlIGE9YSsxfDB9d2hpbGUoMCl9d2hpbGUoKDB8YSkhPSgwfGgpKX1pZihrPTA9PSgwfHQpP2s6NiwoMHxmKTw9MCl1cj1iO2Vsc2V7aD0wPCgwfG4pLGQ9MDtkb3tBOmRve2lmKGgpZm9yKGE9dSsoKChzPTApfGJyKGQsbCkpPDwxKXwwOzspe3N3aXRjaCgwfG8pe2Nhc2UgMDpjPTB8b3JbKGE9YSsyfDApPj4xXTticmVhaztjYXNlIDE6dj1hKzJ8MCxjPSgwfGJyKDB8b3JbYT4+MV0sLTIpKSsoNTgqKDB8b3Jbdj4+MV0pfDApKygxMCooMHxvclthKzQ+PjFdKXwwKS0ob3JbYSs2Pj4xXTw8MSk+PmsmNjU1MzUsYT12O2JyZWFrO2Nhc2UgMjp2PWErMnwwLGM9KDB8YnIoMHxvclthPj4xXSwtNCkpKyg1NCooMHxvclt2Pj4xXSl8MCkrKG9yW2ErND4+MV08PDQpLShvclthKzY+PjFdPDwxKT4+ayY2NTUzNSxhPXY7YnJlYWs7Y2FzZSAzOnY9YSsyfDAsYz0oMHxicigwfG9yW2E+PjFdLC02KSkrKDQ2KigwfG9yW3Y+PjFdKXwwKSsoMjgqKDB8b3JbYSs0Pj4xXSl8MCktKG9yW2ErNj4+MV08PDIpPj5rJjY1NTM1LGE9djticmVhaztjYXNlIDQ6dj1hKzJ8MCxjPSgwfGJyKDB8b3JbYT4+MV0sLTQpKS0ob3JbYSs2Pj4xXTw8MikrKDM2KigoMHxvclthKzQ+PjFdKSsoMHxvclt2Pj4xXSl8MCl8MCk+PmsmNjU1MzUsYT12O2JyZWFrO2Nhc2UgNTp2PWErMnwwLGM9KDB8YnIoMHxvclthPj4xXSwtNCkpKygyOCooMHxvclt2Pj4xXSl8MCkrKDQ2KigwfG9yW2ErND4+MV0pfDApKygwfGJyKDB8b3JbYSs2Pj4xXSwtNikpPj5rJjY1NTM1LGE9djticmVhaztjYXNlIDY6dj1hKzJ8MCxjPSgwfGJyKDB8b3JbYT4+MV0sLTIpKSsob3Jbdj4+MV08PDQpKyg1NCooMHxvclthKzQ+PjFdKXwwKS0ob3JbYSs2Pj4xXTw8Mik+PmsmNjU1MzUsYT12O2JyZWFrO2RlZmF1bHQ6dj1hKzJ8MCxjPSgwfGJyKDB8b3JbYT4+MV0sLTIpKSsoMTAqKDB8b3Jbdj4+MV0pfDApKyg1OCooMHxvclthKzQ+PjFdKXwwKS0ob3JbYSs2Pj4xXTw8MSk+PmsmNjU1MzUsYT12fWlmKHY9QSsoKDB8YnIocyxlKSkrZDw8MSl8MCxvclt2Pj4xXT1jLCgwfChzPXMrMXwwKSk9PSgwfG4pKWJyZWFrIEF9fXdoaWxlKDApO2Q9ZCsxfDB9d2hpbGUoKDB8ZCkhPSgwfGYpKTt1cj1ifX0sZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCxvLGEsYyl7dmFyIGw7aWYoQXw9MCxlfD0wLHJ8PTAsaXw9MCx0fD0wLG98PTAsYXw9MCxsPTE0LShjfD0wKXwwLDA8KDB8KG58PTApKSYwPCgwfChmfD0wKSkpe2E9MDtkb3tmb3IodD1yKygoMHxicihhLGkpKTw8MSl8MCxvPUErKCgwfGJyKGEsZSkpPDwxKXwwLGM9MDtvcltvPj4xXT0oMHxsclt0Pj4xXSk8PGwsKDB8KGM9YysxfDApKSE9KDB8Zik7KXQ9dCsyfDAsbz1vKzJ8MDthPWErMXwwfXdoaWxlKCgwfGEpIT0oMHxuKSl9fSxmdW5jdGlvbihBLGUscixpLGYsbix0LG8sYSxjKXtBfD0wLGV8PTAscnw9MCxpfD0wLHR8PTAsb3w9MCxhfD0wO3ZhciBsLHUsYixzPTAsZD0wLGs9MCxoPTAsdz0wLHY9MDtpZihiPXVyLGs9KGN8PTApKy04fDAsaD0wfGJyKChmfD0wKTw8MSxsPShufD0wKSszfDApLHVyPSh1PXVyKSsoMTUrKDB8K2gpJi0xNil8MCwtMTwoMHwoaD1uKzJ8MCkpKXt3PTA8KDB8ZiksYT0tMTtkb3tBOmRve2lmKHcpZm9yKGQ9YSsxfDAsYT1yKygoKHM9MCl8YnIoYSxpKSktMTw8MSl8MDs7KXtzd2l0Y2goMHx0KXtjYXNlIDA6Yz0wfG9yWyhhPWErMnwwKT4+MV07YnJlYWs7Y2FzZSAxOnY9YSsyfDAsYz0oMHxicigwfGxyW2E+PjFdLC0yKSkrKDU4KigwfGxyW3Y+PjFdKXwwKSsoMTAqKDB8bHJbYSs0Pj4xXSl8MCktKGxyW2ErNj4+MV08PDEpPj5rJjY1NTM1LGE9djticmVhaztjYXNlIDI6dj1hKzJ8MCxjPSgwfGJyKDB8bHJbYT4+MV0sLTQpKSsoNTQqKDB8bHJbdj4+MV0pfDApKyhsclthKzQ+PjFdPDw0KS0obHJbYSs2Pj4xXTw8MSk+PmsmNjU1MzUsYT12O2JyZWFrO2Nhc2UgMzp2PWErMnwwLGM9KDB8YnIoMHxsclthPj4xXSwtNikpKyg0NiooMHxsclt2Pj4xXSl8MCkrKDI4KigwfGxyW2ErND4+MV0pfDApLShsclthKzY+PjFdPDwyKT4+ayY2NTUzNSxhPXY7YnJlYWs7Y2FzZSA0OnY9YSsyfDAsYz0oMHxicigwfGxyW2E+PjFdLC00KSktKGxyW2ErNj4+MV08PDIpKygzNiooKDB8bHJbYSs0Pj4xXSkrKDB8bHJbdj4+MV0pfDApfDApPj5rJjY1NTM1LGE9djticmVhaztjYXNlIDU6dj1hKzJ8MCxjPSgwfGJyKDB8bHJbYT4+MV0sLTQpKSsoMjgqKDB8bHJbdj4+MV0pfDApKyg0NiooMHxsclthKzQ+PjFdKXwwKSsoMHxicigwfGxyW2ErNj4+MV0sLTYpKT4+ayY2NTUzNSxhPXY7YnJlYWs7Y2FzZSA2OnY9YSsyfDAsYz0oMHxicigwfGxyW2E+PjFdLC0yKSkrKGxyW3Y+PjFdPDw0KSsoNTQqKDB8bHJbYSs0Pj4xXSl8MCktKGxyW2ErNj4+MV08PDIpPj5rJjY1NTM1LGE9djticmVhaztkZWZhdWx0OnY9YSsyfDAsYz0oMHxicigwfGxyW2E+PjFdLC0yKSkrKDEwKigwfGxyW3Y+PjFdKXwwKSsoNTgqKDB8bHJbYSs0Pj4xXSl8MCktKGxyW2ErNj4+MV08PDEpPj5rJjY1NTM1LGE9dn1pZih2PXUrKGQrKDB8YnIocyxsKSk8PDEpfDAsb3Jbdj4+MV09YywoMHwocz1zKzF8MCkpPT0oMHxmKSl7YT1kO2JyZWFrIEF9fWVsc2UgYT1hKzF8MH13aGlsZSgwKX13aGlsZSgoMHxhKSE9KDB8aCkpfWlmKGs9MD09KDB8dCk/azo2LCgwfGYpPD0wKXVyPWI7ZWxzZXtoPTA8KDB8biksZD0wO2Rve0E6ZG97aWYoaClmb3IoYT11KygoKHM9MCl8YnIoZCxsKSk8PDEpfDA7Oyl7c3dpdGNoKDB8byl7Y2FzZSAwOmM9MHxvclsoYT1hKzJ8MCk+PjFdO2JyZWFrO2Nhc2UgMTp2PWErMnwwLGM9KDB8YnIoMHxvclthPj4xXSwtMikpKyg1OCooMHxvclt2Pj4xXSl8MCkrKDEwKigwfG9yW2ErND4+MV0pfDApLShvclthKzY+PjFdPDwxKT4+ayY2NTUzNSxhPXY7YnJlYWs7Y2FzZSAyOnY9YSsyfDAsYz0oMHxicigwfG9yW2E+PjFdLC00KSkrKDU0KigwfG9yW3Y+PjFdKXwwKSsob3JbYSs0Pj4xXTw8NCktKG9yW2ErNj4+MV08PDEpPj5rJjY1NTM1LGE9djticmVhaztjYXNlIDM6dj1hKzJ8MCxjPSgwfGJyKDB8b3JbYT4+MV0sLTYpKSsoNDYqKDB8b3Jbdj4+MV0pfDApKygyOCooMHxvclthKzQ+PjFdKXwwKS0ob3JbYSs2Pj4xXTw8Mik+PmsmNjU1MzUsYT12O2JyZWFrO2Nhc2UgNDp2PWErMnwwLGM9KDB8YnIoMHxvclthPj4xXSwtNCkpLShvclthKzY+PjFdPDwyKSsoMzYqKCgwfG9yW2ErND4+MV0pKygwfG9yW3Y+PjFdKXwwKXwwKT4+ayY2NTUzNSxhPXY7YnJlYWs7Y2FzZSA1OnY9YSsyfDAsYz0oMHxicigwfG9yW2E+PjFdLC00KSkrKDI4KigwfG9yW3Y+PjFdKXwwKSsoNDYqKDB8b3JbYSs0Pj4xXSl8MCkrKDB8YnIoMHxvclthKzY+PjFdLC02KSk+PmsmNjU1MzUsYT12O2JyZWFrO2Nhc2UgNjp2PWErMnwwLGM9KDB8YnIoMHxvclthPj4xXSwtMikpKyhvclt2Pj4xXTw8NCkrKDU0KigwfG9yW2ErND4+MV0pfDApLShvclthKzY+PjFdPDwyKT4+ayY2NTUzNSxhPXY7YnJlYWs7ZGVmYXVsdDp2PWErMnwwLGM9KDB8YnIoMHxvclthPj4xXSwtMikpKygxMCooMHxvclt2Pj4xXSl8MCkrKDU4KigwfG9yW2ErND4+MV0pfDApLShvclthKzY+PjFdPDwxKT4+ayY2NTUzNSxhPXZ9aWYodj1BKygoMHxicihzLGUpKStkPDwxKXwwLG9yW3Y+PjFdPWMsKDB8KHM9cysxfDApKT09KDB8bikpYnJlYWsgQX19d2hpbGUoMCk7ZD1kKzF8MH13aGlsZSgoMHxkKSE9KDB8ZikpO3VyPWJ9fSxPYixPYixPYl0sc3M9W2Z1bmN0aW9uKEEsZSxyLGksZixuLHQsbyxhLGMsbCx1KXtaKDIyKX0sZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCxvLGEsYyxsLHUpe0F8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsb3w9MCxhfD0wLGN8PTAsbHw9MDt2YXIgYixzLGQ9MCxrPTAsaD0wO2lmKCgwfCh1fD0wKSk8PTAmJnNyKDM2MjkzLDM2MjQzLDgwLDM2MzMyKSxzPWErMStsPDx1LCEoKDB8dCk8PTApJiYoYj11KzF8MCwwPCgwfG4pKSl7ZD0wO2Rve2Zvcih1PTB8YnIoZCxmKSxsPUErKDB8YnIoZCxlKSl8MCxhPWkrKHU8PDEpfDAsdT1yKyh1PDwxKXwwLGs9MDtoPShoPTB8YnIoMHxvclt1Pj4xXSxvKSkrcysoMHxicigwfG9yW2E+PjFdLGMpKT4+Yix0cltsPj4wXT0oMHxoKTwwPzA6MjU1JigoMHxoKTwyNTU/aDoyNTUpLCgwfChrPWsrMXwwKSkhPSgwfG4pOylsPWwrMXwwLGE9YSsyfDAsdT11KzJ8MDtkPWQrMXwwfXdoaWxlKCgwfGQpIT0oMHx0KSl9fV0sZHM9W2Z1bmN0aW9uKEEsZSxyLGksZixuLHQsbyxhLGMsbCx1LGIpe1ooMjMpfSxmdW5jdGlvbihBLGUscixpLGYsbix0LG8sYSxjLGwsdSxiKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCx0fD0wLG98PTAsYXw9MCxjfD0wLGx8PTAsYnw9MDt2YXIgcyxkLGssaCx3PTAsdj0wO2lmKCgwfCh1fD0wKSk8PTAmJnNyKDM2MjkzLDM2MjQzLDIxMywzNjQ1OCksaD1hKzErbDw8dSwhKCgwfHQpPD0wKSYmKGs9dSsxfDAsZD02NTUzNSsocz0xPDxiKXwwLDA8KDB8bikpKXtiPTA7ZG97Zm9yKHU9MHxicihiLGYpLGw9QSsoKDB8YnIoYixlKSk8PDEpfDAsYT1pKyh1PDwxKXwwLHU9cisodTw8MSl8MCx3PTA7dj0odj0wfGJyKDB8b3JbdT4+MV0sbykpK2grKDB8YnIoMHxvclthPj4xXSxjKSk+Pmssb3JbbD4+MV09KDB8dik8MD8wOjY1NTM1JigoMHx2KTwoMHxzKT92OmQpLCgwfCh3PXcrMXwwKSkhPSgwfG4pOylsPWwrMnwwLGE9YSsyfDAsdT11KzJ8MDtiPWIrMXwwfXdoaWxlKCgwfGIpIT0oMHx0KSl9fV07cmV0dXJue19fR0xPQkFMX19JXzAwMDEwMTpmdW5jdGlvbigpeyFmdW5jdGlvbihBKXtBfD0wO3ZhciBlPTA7KGZ1bmN0aW9uKEEsZSxyKXt2YXIgaSxmO2V8PTAscnw9MCxmPXVyPShpPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxTZihBfD0wKSxhcltBPj4yXT0xNDYzNixhcltBKzMyPj4yXT1lLGFyW0ErNDA+PjJdPXIscj0tMSxhcltBKzQ4Pj4yXT1yLHRyW0ErNTI+PjBdPTAscj0wfGFyWzgrKDB8YXJbQT4+Ml0pPj4yXSxydShmLEErNHwwKSxmc1s2MyZyXShBLGYpLGJuKGYpLHVyPWl9KSg1ODg2NCxBPTB8YXJbMjYzN10sNTg5MjApLGFyWzE0NTQ2XT0xNDIwOCxhclsxNDU0OF09MTQyMjgsYXJbMTQ1NDddPTAsSmYoNTgxOTIsNTg4NjQpLGFyWzE0NTY2XT0wLGU9LTEsYXJbMTQ1NjddPWUsZnVuY3Rpb24oQSxlLHIpe3ZhciBpLGY7ZXw9MCxyfD0wLGY9dXI9KGk9dXIpKzMxJi0zMix1cj11cisxNnwwLE9mKEF8PTApLGFyW0E+PjJdPTE0NTcyLGFyW0ErMzI+PjJdPWUsYXJbQSs0MD4+Ml09cixyPS0xLGFyW0ErNDg+PjJdPXIsdHJbQSs1Mj4+MF09MCxyPTB8YXJbOCsoMHxhcltBPj4yXSk+PjJdLHJ1KGYsQSs0fDApLGZzWzYzJnJdKEEsZiksYm4oZiksdXI9aX0oNTg5MjgsQSw1ODk4NCksYXJbMTQ1NjhdPTE0MjU2LGFyWzE0NTcwXT0xNDI3NixhclsxNDU2OV09MCxKZig1ODI4MCw1ODkyOCksYXJbMTQ1ODhdPTAsQT0tMSxhclsxNDU4OV09QSxxZig1ODk5MixBPTB8YXJbMjU0M10sNTkwNDApLGFyWzE0NTkwXT0yOCxhclsxNDU5MV09NDgsSmYoNTgzNjQsNTg5OTIpLGFyWzE0NjA5XT0wLGU9LTEsYXJbMTQ2MTBdPWUsJGYoNTkwNDgsQSw1OTA5NiksYXJbMTQ2MTFdPTE0MzEyLGFyWzE0NjEyXT0xNDMzMixKZig1ODQ0OCw1OTA0OCksYXJbMTQ2MzBdPTAsQT0tMSxhclsxNDYzMV09QSxxZig1OTEwNCxBPTB8YXJbMjY2OV0sNTkxNTIpLGFyWzE0NjMyXT0yOCxhclsxNDYzM109NDgsSmYoNTg1MzIsNTkxMDQpLGFyWzE0NjUxXT0wLGU9LTEsYXJbMTQ2NTJdPWUsZT0wfGFyWzU4NTI4KygwfGFyWygwfGFyWzE0NjMyXSktMTI+PjJdKSsyND4+Ml0sYXJbMTQ2NzRdPTI4LGFyWzE0Njc1XT00OCxKZig1ODcwMCxlKSxhclsxNDY5M109MCxlPS0xLGFyWzE0Njk0XT1lLCRmKDU5MTYwLEEsNTkyMDgpLGFyWzE0NjUzXT0xNDMxMixhclsxNDY1NF09MTQzMzIsSmYoNTg2MTYsNTkxNjApLGFyWzE0NjcyXT0wLEE9LTEsYXJbMTQ2NzNdPUEsQT0wfGFyWzU4NjEyKygwfGFyWygwfGFyWzE0NjUzXSktMTI+PjJdKSsyND4+Ml0sYXJbMTQ2OTVdPTE0MzEyLGFyWzE0Njk2XT0xNDMzMixKZig1ODc4NCxBKSxhclsxNDcxNF09MCxBPS0xLGFyWzE0NzE1XT1BLGFyWzU4MTg0KygwfGFyWygwfGFyWzE0NTQ2XSktMTI+PjJdKSs3Mj4+Ml09NTgzNjAsYXJbNTgyNzIrKDB8YXJbKDB8YXJbMTQ1NjhdKS0xMj4+Ml0pKzcyPj4yXT01ODQ0NCxBPTU4NTI4KygwfGFyWygwfGFyWzE0NjMyXSktMTI+PjJdKSs0fDAsYXJbQT4+Ml09ODE5MnxhcltBPj4yXSxBPTU4NjEyKygwfGFyWygwfGFyWzE0NjUzXSktMTI+PjJdKSs0fDAsYXJbQT4+Ml09ODE5MnxhcltBPj4yXSxhcls1ODUyOCsoMHxhclsoMHxhclsxNDYzMl0pLTEyPj4yXSkrNzI+PjJdPTU4MzYwLGFyWzU4NjEyKygwfGFyWygwfGFyWzE0NjUzXSktMTI+PjJdKSs3Mj4+Ml09NTg0NDR9KDApfSxfX0dMT0JBTF9fc3ViX0lfYmluZF9jcHA6ZnVuY3Rpb24oKXtyQSg0MDgwLDQ4OTA3KSxTKDQwOTYsNDg5MTIsMSwxLDApLEwoNDEwNCw0ODkxNywxLC0xMjgsMTI3KSxMKDQxMjAsNDg5MjIsMSwtMTI4LDEyNyksTCg0MTEyLDQ4OTM0LDEsMCwyNTUpLEwoNDEyOCw0ODk0OCwyLC0zMjc2OCwzMjc2NyksTCg0MTM2LDQ4OTU0LDIsMCw2NTUzNSksTCg0MTQ0LDQ4OTY5LDQsLTIxNDc0ODM2NDgsMjE0NzQ4MzY0NyksTCg0MTUyLDQ4OTczLDQsMCwtMSksTCg0MTYwLDQ4OTg2LDQsLTIxNDc0ODM2NDgsMjE0NzQ4MzY0NyksTCg0MTY4LDQ4OTkxLDQsMCwtMSkseCg0MTc2LDQ5MDA1LDQpLHgoNDE4NCw0OTAxMSw4KSxxKDE0MDgsNDkwMTgpLHEoMjMzNiw0OTAzMCksJCgyMzYwLDQsNDkwNjMpLHooMTQwMCw0OTA3NiksSygyMzg0LDAsNDkwOTIpLEsoMjM5MiwwLDQ5MTIyKSxLKDI0MDAsMSw0OTE1OSksSygyNDA4LDIsNDkxOTgpLEsoMjQxNiwzLDQ5MjI5KSxLKDI0MjQsNCw0OTI2OSksSygyNDMyLDUsNDkyOTgpLEsoMjQ0MCw0LDQ5MzM2KSxLKDI0NDgsNSw0OTM2NiksSygyMzkyLDAsNDk0MDUpLEsoMjQwMCwxLDQ5NDM3KSxLKDI0MDgsMiw0OTQ3MCksSygyNDE2LDMsNDk1MDMpLEsoMjQyNCw0LDQ5NTM3KSxLKDI0MzIsNSw0OTU3MCksSygyNDU2LDYsNDk2MDQpLEsoMjQ2NCw3LDQ5NjM1KSxLKDI0NzIsNyw0OTY2Nyl9LF9fR0xPQkFMX19zdWJfSV9ib3hfY2M6ZnVuY3Rpb24oKXt2YXIgQSxlO3VyPShlPXVyKSsxNnwwLGFyWyhBPWUpPj4yXT0wLGFyW0ErND4+Ml09MCxvbyg1NjU5MixhcltBKzg+PjJdPTAsMCxBKSx1cj0oMDw9KDB8dHJbQSsxMT4+MF0pfHx2dSgwfGFyW0E+PjJdKSxlKX0sX19HTE9CQUxfX3N1Yl9JX2hlaWZfY2M6ZnVuY3Rpb24oKXshZnVuY3Rpb24oQSl7QXw9MDt2YXIgZT0wO1AoMjYxNzcsMSw2MjQ0LDI2MTk0LDY3LDQzNSksUCgyNjE5NywxLDYyNDgsMjYxOTQsNjgsMiksUCgyNjIyMSwxLDYyNTIsMjYxOTQsNjksMyksUCgyNjI0MCwyLDYyNTYsMjYyNTgsNDQsNDM2KSxQKDI2MjYyLDMsNjI2NCwyNjI5MiwzMiw3NyksUCgyNjI5NywyLDYyNzYsMjYzNDEsMjAsNzApLFAoMjYzNDUsMiw2Mjg0LDI2MzQxLDIxLDQ1KSxQKDI2MzkzLDMsNjI5MiwyNjI5MiwzMyw3OCksUCgyNjQyNiw0LDYzMDQsMjY0NDcsNywxMCksUCgyNjQ1MywyLDYzMjAsMjYyNTgsNDYsNDM3KSxqKDEyMjQsMjY0NzksNCwwKSxIKDEyMjQsMjY0OTUsMCksSCgxMjI0LDI2NTA5LDEpLEgoMTIyNCwyNjU0MSwyKSxIKDEyMjQsMjY1NjYsMyksSCgxMjI0LDI2NTk4LDQpLEgoMTIyNCwyNjYyOSw1KSxIKDEyMjQsMjY2NTIsNiksSCgxMjI0LDI2Njg3LDcpLEgoMTIyNCwyNjcxOSw4KSxIKDEyMjQsMjY3NTEsOSksSCgxMjI0LDI2Nzc3LDEwKSxqKDEyMzIsMjY4MTcsNCwwKSxIKDEyMzIsMjY4MzYsMCksSCgxMjMyLDI2ODYyLDVlMyksSCgxMjMyLDI2OTAxLDEwMCksSCgxMjMyLDI2OTI3LDEwMSksSCgxMjMyLDI2OTU4LDEwMiksSCgxMjMyLDI2OTg0LDEwMyksSCgxMjMyLDI3MDEwLDEwNCksSCgxMjMyLDI3MDM2LDEwNSksSCgxMjMyLDI3MDYyLDEwNiksSCgxMjMyLDI3MDg4LDEwNyksSCgxMjMyLDI3MTE0LDEwOCksSCgxMjMyLDI3MTQwLDEwOSksSCgxMjMyLDI3MTY2LDExMCksSCgxMjMyLDI3MTkyLDExMSksSCgxMjMyLDI3MjE4LDExMiksSCgxMjMyLDI3MjQ0LDExMyksSCgxMjMyLDI3MjcwLDExNCksSCgxMjMyLDI3MzAwLDExNSksSCgxMjMyLDI3MzU1LDExNiksSCgxMjMyLDI3NDAwLDExNyksSCgxMjMyLDI3NDI3LDExOCksSCgxMjMyLDI3NDU5LDExOSksSCgxMjMyLDI3NDkzLDEzMSksSCgxMjMyLDI3NTE5LDEyMCksSCgxMjMyLDI3NTU2LDEyMSksSCgxMjMyLDI3NTkxLDEyMiksSCgxMjMyLDI3NjM3LDEyMyksSCgxMjMyLDI3Njg0LDEyNCksSCgxMjMyLDI3NzI1LDEyNSksSCgxMjMyLDI3NzUxLDFlMyksSCgxMjMyLDI3Nzg5LDEyNiksSCgxMjMyLDI3ODMwLDEyNyksSCgxMjMyLDI3ODc1LDEyOCksSCgxMjMyLDI3OTE1LDEyOSksSCgxMjMyLDI3OTQ4LDJlMyksSCgxMjMyLDI3OTkwLDIwMDEpLEgoMTIzMiwyODAyNiwyMDAyKSxIKDEyMzIsMjgwNzcsMjAwMyksSCgxMjMyLDI4MTE4LDIwMDQpLEgoMTIzMiwyODE1OSwyMDA1KSxIKDEyMzIsMjgxOTUsMjAwNiksSCgxMjMyLDI4MjMzLDEzMCksSCgxMjMyLDI4MjY0LDNlMyksSCgxMjMyLDI4Mjk2LDMwMDEpLEgoMTIzMiwyODMzMywzMDAyKSxIKDEyMzIsMjgzNzIsMzAwMyksSCgxMjMyLDI4NDE1LDMwMDQpLEgoMTIzMiwyODQ2Niw0ZTMpLGooMTI0MCwyODUwMiw0LDApLEgoMTI0MCwyODUyNiwwKSxIKDEyNDAsMjg1NTMsMSksSCgxMjQwLDI4NTc1LDIpLEgoMTI0MCwyODU5NiwzKSxIKDEyNDAsMjg2MTgsNCksaigxMjQ4LDI4NjM5LDQsMCksSCgxMjQ4LDI4NjUxLDk5KSxIKDEyNDgsMjg2NzMsMCksSCgxMjQ4LDI4Njk2LDEpLEgoMTI0OCwyODcxMiwyKSxIKDEyNDgsMjg3MjgsMyksSCgxMjQ4LDI4NzQ0LDEwKSxIKDEyNDgsMjg3NzIsMTEpLEgoMTI0OCwyODgwMSwxMiksSCgxMjQ4LDI4ODM1LDEzKSxIKDEyNDgsMjg4NzEsMTQpLEgoMTI0OCwyODkwNSwxNSksSCgxMjQ4LDI4OTQxLDEwKSxIKDEyNDgsMjg5NzEsMTEpLGooMTI1NiwyOTAwMSw0LDApLEgoMTI1NiwyOTAxNyw5OSksSCgxMjU2LDI5MDQzLDApLEgoMTI1NiwyOTA2NSwxKSxIKDEyNTYsMjkwODUsMiksaigxMjY0LDI5MTEyLDQsMCksSCgxMjY0LDI5MTI1LDApLEgoMTI2NCwyOTE0MCwyKSxIKDEyNjQsMjkxNTYsMSksSCgxMjY0LDI5MTcyLDMpLEgoMTI2NCwyOTE4Nyw0KSxIKDEyNjQsMjkyMDIsNSksSCgxMjY0LDI5MjE3LDYpLEgoMTI2NCwyOTIzNiwxMCksTygxMjcyLDEyODAsMTI5NiwwLDI2MTk0LDcxLDI5Mjc0LDAsMjkyNzQsMCwyOTI2MSwyOTI3Niw0MzgpLE8oMTMxMiwxMzIwLDEzMzYsMCwyNjE5NCw3MiwyOTI3NCwwLDI5Mjc0LDAsMjkyNzksMjkyNzYsNDM5KSxPKDEzNTIsMTM2MCwxMzc2LDAsMjYxOTQsNzMsMjkyNzQsMCwyOTI3NCwwLDI5Mjk3LDI5Mjc2LDQ0MCksQUEoMTM5MiwyOTMwOCwyOTMxOSw0LDI5Mjc2LDQ0MSksQT0wfGh1KDQpLGFyW0E+PjJdPTAsZT0wfGh1KDQpLGFyW2U+PjJdPTAsZUEoMTM5MiwyOTMyMSwxMjI0LDI2MzQxLDIyLDB8QSwxMjI0LDI5MzI2LDc5LDB8ZSksZT0wfGh1KDQpLGFyW2U+PjJdPTQsQT0wfGh1KDQpLGFyW0E+PjJdPTQsZUEoMTM5MiwyOTMzMSwxMjMyLDI2MzQxLDIzLDB8ZSwxMjMyLDI5MzI2LDgwLDB8QSksVSgxMzkyKX0oMCl9LF9fR0xPQkFMX19zdWJfSV9oZWlmX3BsdWdpbl9yZWdpc3RyeV9jYzpmdW5jdGlvbigpe2FyWzE0MzIxXT0wLGFyWzE0MzIyXT0wLGFyWzE0MzIwXT01NzI4NCxhclsxNDMyNF09MCxhclsxNDMyNV09MCxhclsxNDMyM109NTcyOTYsZnVuY3Rpb24oQSl7QXw9MDt2YXIgZSxyPTAsaT0wLGY9MDtmPTc1ODAsMHwoQT0wfGFyWyhlPWYpKzg+PjJdKSYmcnNbNyZBXSgpO0E9MHxhclsxNDMyMV07ZG97aWYoQSl7Zm9yKGk9NTcyODQ7Oyl7aWYocj0wfGFyW0ErMTY+PjJdLGY+Pj4wPHI+Pj4wKXtpZighKHI9MHxhcltBPj4yXSkpe3I9NzticmVha319ZWxzZXtpZihmPj4+MDw9cj4+PjApe3I9MTE7YnJlYWt9aWYoIShyPTB8YXJbKGk9QSs0fDApPj4yXSkpe3I9MTA7YnJlYWt9QT1pfWk9QSxBPXJ9aWYoNz09KDB8cikpe2k9Zj1BO2JyZWFrfWlmKDEwPT0oMHxyKSl7Zj1BO2JyZWFrfWlmKDExPT0oMHxyKSl7Zj1BO2JyZWFrfX1lbHNlIGk9Zj01NzI4NH13aGlsZSgwKTtpZigwfGFyW2k+PjJdKXJldHVybjtBPTB8aHUoMjApLGFyW0ErMTY+PjJdPWUsYXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsYXJbQSs4Pj4yXT1mLGFyW2k+PjJdPUEsKHI9MHxhclthclsxNDMyMF0+PjJdKSYmKGFyWzE0MzIwXT1yLEE9MHxhcltpPj4yXSk7c28oMHxhclsxNDMyMV0sQSksYXJbMTQzMjJdPTErKDB8YXJbMTQzMjJdKX0oNjExNjApfSxfX0dMT0JBTF9fc3ViX0lfaW9zdHJlYW1fY3BwOmZ1bmN0aW9uKCl7fSxfX19jeGFfY2FuX2NhdGNoOmZ1bmN0aW9uKEEsZSxyKXt2YXIgaSxmO3JldHVybiBBfD0wLGV8PTAscnw9MCxpPXVyPShmPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxhcltpPj4yXT1hcltyPj4yXSwoQT0wfHhiWzYzJmFyWzE2KygwfGFyW0E+PjJdKT4+Ml1dKEEsZSxpKSkmJihhcltyPj4yXT1hcltpPj4yXSksdXI9ZiwxJkF8MH0sX19fY3hhX2lzX3BvaW50ZXJfdHlwZTpmdW5jdGlvbihBKXtyZXR1cm4gMSYoQT0oQXw9MCk/MCE9KDB8cXUoQSwzOTYwLDQwNDgsMCkpOjApfDB9LF9fX2Vycm5vX2xvY2F0aW9uOkNjLF9fX2dldFR5cGVOYW1lOmZ1bmN0aW9uKEEpe3JldHVybiAwfChlPTB8YXJbKEF8PTApKzQ+PjJdLChpPShpPTApfHljKHI9MSsoMHxWYyhlfD0wKSl8MCkpP2hiKDB8aSwwfGUsMHxyKTppPTAsMHxpKTt2YXIgZSxyLGl9LF9fX211bGRpMzpuYixfX191ZGl2ZGkzOmxiLF9fX3VyZW1kaTM6dWIsX2JpdHNoaWZ0NjRBc2hyOmJiLF9iaXRzaGlmdDY0THNocjpzYixfYml0c2hpZnQ2NFNobDpkYixfZW1zY3JpcHRlbl9nZXRfZ2xvYmFsX2xpYmM6ZnVuY3Rpb24oKXtyZXR1cm4gNTgwNjR9LF9lbXNjcmlwdGVuX3JlcGxhY2VfbWVtb3J5OmZ1bmN0aW9uKEEpe3JldHVybiEoMTY3NzcyMTUmdShBKXx8dShBKTw9MTY3NzcyMTV8fDIxNDc0ODM2NDg8dShBKSkmJih0cj1uZXcgaShBKSxvcj1uZXcgZihBKSxhcj1uZXcgbihBKSxjcj1uZXcgdChBKSxscj1uZXcgbyhBKSxuZXcgYShBKSxnQT1uZXcgYyhBKSxRPW5ldyBsKEEpLHI9QSwhMCl9LF9mcmVlOkJjLF9pNjRBZGQ6dGIsX2k2NFN1YnRyYWN0Om9iLF9sbHZtX2Jzd2FwX2kzMjprYixfbWFsbG9jOnljLF9tZW1jcHk6aGIsX21lbW1vdmU6d2IsX21lbXNldDp2YixfcHRocmVhZF9jb25kX2Jyb2FkY2FzdDptYixfcHRocmVhZF9tdXRleF9sb2NrOmdiLF9wdGhyZWFkX211dGV4X3VubG9jazpaYixfcm91bmRmOnBiLF9zYnJrOnliLGR5bkNhbGxfaTpmdW5jdGlvbihBKXtyZXR1cm4gMHx6Yls3JihBfD0wKV0oKX0sZHluQ2FsbF9paTpmdW5jdGlvbihBLGUpe3JldHVybiBlfD0wLDB8amJbMTI3JihBfD0wKV0oMHxlKX0sZHluQ2FsbF9paWk6ZnVuY3Rpb24oQSxlLHIpe3JldHVybiBlfD0wLHJ8PTAsMHxIYlszMSYoQXw9MCldKDB8ZSwwfHIpfSxkeW5DYWxsX2lpaWk6ZnVuY3Rpb24oQSxlLHIsaSl7cmV0dXJuIGV8PTAscnw9MCxpfD0wLDB8eGJbNjMmKEF8PTApXSgwfGUsMHxyLDB8aSl9LGR5bkNhbGxfaWlpaWk6ZnVuY3Rpb24oQSxlLHIsaSxmKXtyZXR1cm4gZXw9MCxyfD0wLGl8PTAsZnw9MCwwfFBiWzcmKEF8PTApXSgwfGUsMHxyLDB8aSwwfGYpfSxkeW5DYWxsX2lpaWlpZDpmdW5jdGlvbihBLGUscixpLGYsbil7cmV0dXJuIGV8PTAscnw9MCxpfD0wLGZ8PTAsbj0rbiwwfExiWzcmKEF8PTApXSgwfGUsMHxyLDB8aSwwfGYsK24pfSxkeW5DYWxsX2lpaWlpaTpmdW5jdGlvbihBLGUscixpLGYsbil7cmV0dXJuIGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCwwfEtiWzMxJihBfD0wKV0oMHxlLDB8ciwwfGksMHxmLDB8bil9LGR5bkNhbGxfaWlpaWlpZDpmdW5jdGlvbihBLGUscixpLGYsbix0KXtyZXR1cm4gZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHQ9K3QsMHxxYlszJihBfD0wKV0oMHxlLDB8ciwwfGksMHxmLDB8biwrdCl9LGR5bkNhbGxfaWlpaWlpaTpmdW5jdGlvbihBLGUscixpLGYsbix0KXtyZXR1cm4gZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsMHwkYls2MyYoQXw9MCldKDB8ZSwwfHIsMHxpLDB8ZiwwfG4sMHx0KX0sZHluQ2FsbF9paWlpaWlpaTpmdW5jdGlvbihBLGUscixpLGYsbix0LG8pe3JldHVybiBlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsdHw9MCxvfD0wLDB8QXNbNyYoQXw9MCldKDB8ZSwwfHIsMHxpLDB8ZiwwfG4sMHx0LDB8byl9LGR5bkNhbGxfaWlpaWlpaWlpOmZ1bmN0aW9uKEEsZSxyLGksZixuLHQsbyxhKXtyZXR1cm4gZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsb3w9MCxhfD0wLDB8ZXNbMTUmKEF8PTApXSgwfGUsMHxyLDB8aSwwfGYsMHxuLDB8dCwwfG8sMHxhKX0sZHluQ2FsbF92OmZ1bmN0aW9uKEEpe3JzWzcmKEF8PTApXSgpfSxkeW5DYWxsX3ZpOmZ1bmN0aW9uKEEsZSl7ZXw9MCxpc1s1MTEmKEF8PTApXSgwfGUpfSxkeW5DYWxsX3ZpaTpmdW5jdGlvbihBLGUscil7ZXw9MCxyfD0wLGZzWzYzJihBfD0wKV0oMHxlLDB8cil9LGR5bkNhbGxfdmlpaTpmdW5jdGlvbihBLGUscixpKXtlfD0wLHJ8PTAsaXw9MCxuc1sxMjcmKEF8PTApXSgwfGUsMHxyLDB8aSl9LGR5bkNhbGxfdmlpaWk6ZnVuY3Rpb24oQSxlLHIsaSxmKXtlfD0wLHJ8PTAsaXw9MCxmfD0wLHRzWzMxJihBfD0wKV0oMHxlLDB8ciwwfGksMHxmKX0sZHluQ2FsbF92aWlpaWk6ZnVuY3Rpb24oQSxlLHIsaSxmLG4pe2V8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCxvc1s2MyYoQXw9MCldKDB8ZSwwfHIsMHxpLDB8ZiwwfG4pfSxkeW5DYWxsX3ZpaWlpaWk6ZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCl7ZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsYXNbMTUmKEF8PTApXSgwfGUsMHxyLDB8aSwwfGYsMHxuLDB8dCl9LGR5bkNhbGxfdmlpaWlpaWk6ZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCxvKXtlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsdHw9MCxvfD0wLGNzWzMxJihBfD0wKV0oMHxlLDB8ciwwfGksMHxmLDB8biwwfHQsMHxvKX0sZHluQ2FsbF92aWlpaWlpaWk6ZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCxvLGEpe2V8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCx0fD0wLG98PTAsYXw9MCxsc1szMSYoQXw9MCldKDB8ZSwwfHIsMHxpLDB8ZiwwfG4sMHx0LDB8bywwfGEpfSxkeW5DYWxsX3ZpaWlpaWlpaWk6ZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCxvLGEsYyl7ZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsb3w9MCxhfD0wLGN8PTAsdXNbMyYoQXw9MCldKDB8ZSwwfHIsMHxpLDB8ZiwwfG4sMHx0LDB8bywwfGEsMHxjKX0sZHluQ2FsbF92aWlpaWlpaWlpaTpmdW5jdGlvbihBLGUscixpLGYsbix0LG8sYSxjLGwpe2V8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCx0fD0wLG98PTAsYXw9MCxjfD0wLGx8PTAsYnNbNyYoQXw9MCldKDB8ZSwwfHIsMHxpLDB8ZiwwfG4sMHx0LDB8bywwfGEsMHxjLDB8bCl9LGR5bkNhbGxfdmlpaWlpaWlpaWlpaTpmdW5jdGlvbihBLGUscixpLGYsbix0LG8sYSxjLGwsdSxiKXtlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsdHw9MCxvfD0wLGF8PTAsY3w9MCxsfD0wLHV8PTAsYnw9MCxzc1sxJihBfD0wKV0oMHxlLDB8ciwwfGksMHxmLDB8biwwfHQsMHxvLDB8YSwwfGMsMHxsLDB8dSwwfGIpfSxkeW5DYWxsX3ZpaWlpaWlpaWlpaWlpOmZ1bmN0aW9uKEEsZSxyLGksZixuLHQsbyxhLGMsbCx1LGIscyl7ZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsb3w9MCxhfD0wLGN8PTAsbHw9MCx1fD0wLGJ8PTAsc3w9MCxkc1sxJihBfD0wKV0oMHxlLDB8ciwwfGksMHxmLDB8biwwfHQsMHxvLDB8YSwwfGMsMHxsLDB8dSwwfGIsMHxzKX0sZXN0YWJsaXNoU3RhY2tTcGFjZTpmdW5jdGlvbihBLGUpe3VyPUF8PTAsZXw9MH0sZ2V0VGVtcFJldDA6ZnVuY3Rpb24oKXtyZXR1cm4gMHxEfSxydW5Qb3N0U2V0czpmdW5jdGlvbigpe30sc2V0VGVtcFJldDA6ZnVuY3Rpb24oQSl7RD1BfD0wfSxzZXRUaHJldzpmdW5jdGlvbihBLGUpe0F8PTAsZXw9MCxrfHwoaz1BLDApfSxzdGFja0FsbG9jOmZ1bmN0aW9uKEEpe3ZhciBlO3JldHVybiB1cj0odXI9KGU9dXIpKyhBfD0wKXwwKSsxNSYtMTYsMHxlfSxzdGFja1Jlc3RvcmU6ZnVuY3Rpb24oQSl7dXI9QXw9MH0sc3RhY2tTYXZlOmZ1bmN0aW9uKCl7cmV0dXJuIDB8dXJ9fX0oZC5hc21HbG9iYWxBcmcsZC5hc21MaWJyYXJ5QXJnLHkpLFpyPWQuX19HTE9CQUxfX0lfMDAwMTAxPWdyLl9fR0xPQkFMX19JXzAwMDEwMSxwcj1kLl9fR0xPQkFMX19zdWJfSV9iaW5kX2NwcD1nci5fX0dMT0JBTF9fc3ViX0lfYmluZF9jcHAseXI9ZC5fX0dMT0JBTF9fc3ViX0lfYm94X2NjPWdyLl9fR0xPQkFMX19zdWJfSV9ib3hfY2MsQnI9ZC5fX0dMT0JBTF9fc3ViX0lfaGVpZl9jYz1nci5fX0dMT0JBTF9fc3ViX0lfaGVpZl9jYyxFcj1kLl9fR0xPQkFMX19zdWJfSV9oZWlmX3BsdWdpbl9yZWdpc3RyeV9jYz1nci5fX0dMT0JBTF9fc3ViX0lfaGVpZl9wbHVnaW5fcmVnaXN0cnlfY2MsWHI9ZC5fX0dMT0JBTF9fc3ViX0lfaW9zdHJlYW1fY3BwPWdyLl9fR0xPQkFMX19zdWJfSV9pb3N0cmVhbV9jcHAsV3I9KGQuX19fY3hhX2Nhbl9jYXRjaD1nci5fX19jeGFfY2FuX2NhdGNoLGQuX19fY3hhX2lzX3BvaW50ZXJfdHlwZT1nci5fX19jeGFfaXNfcG9pbnRlcl90eXBlLGQuX19fZXJybm9fbG9jYXRpb249Z3IuX19fZXJybm9fbG9jYXRpb24sZC5fX19nZXRUeXBlTmFtZT1nci5fX19nZXRUeXBlTmFtZSksSXI9KGQuX19fbXVsZGkzPWdyLl9fX211bGRpMyxkLl9fX3VkaXZkaTM9Z3IuX19fdWRpdmRpMyxkLl9fX3VyZW1kaTM9Z3IuX19fdXJlbWRpMyxkLl9iaXRzaGlmdDY0QXNocj1nci5fYml0c2hpZnQ2NEFzaHIsZC5fYml0c2hpZnQ2NExzaHI9Z3IuX2JpdHNoaWZ0NjRMc2hyLGQuX2JpdHNoaWZ0NjRTaGw9Z3IuX2JpdHNoaWZ0NjRTaGwsZC5fZW1zY3JpcHRlbl9nZXRfZ2xvYmFsX2xpYmM9Z3IuX2Vtc2NyaXB0ZW5fZ2V0X2dsb2JhbF9saWJjLGQuX2Vtc2NyaXB0ZW5fcmVwbGFjZV9tZW1vcnk9Z3IuX2Vtc2NyaXB0ZW5fcmVwbGFjZV9tZW1vcnkpLENyPWQuX2ZyZWU9Z3IuX2ZyZWUsR3I9KGQuX2k2NEFkZD1nci5faTY0QWRkLGQuX2k2NFN1YnRyYWN0PWdyLl9pNjRTdWJ0cmFjdCxkLl9sbHZtX2Jzd2FwX2kzMj1nci5fbGx2bV9ic3dhcF9pMzIsZC5fbWFsbG9jPWdyLl9tYWxsb2MpO2QuX21lbWNweT1nci5fbWVtY3B5LGQuX21lbW1vdmU9Z3IuX21lbW1vdmUsZC5fbWVtc2V0PWdyLl9tZW1zZXQsZC5fcHRocmVhZF9jb25kX2Jyb2FkY2FzdD1nci5fcHRocmVhZF9jb25kX2Jyb2FkY2FzdCxkLl9wdGhyZWFkX211dGV4X2xvY2s9Z3IuX3B0aHJlYWRfbXV0ZXhfbG9jayxkLl9wdGhyZWFkX211dGV4X3VubG9jaz1nci5fcHRocmVhZF9tdXRleF91bmxvY2ssZC5fcm91bmRmPWdyLl9yb3VuZGYsZC5fc2Jyaz1nci5fc2JyayxkLmVzdGFibGlzaFN0YWNrU3BhY2U9Z3IuZXN0YWJsaXNoU3RhY2tTcGFjZSxkLmdldFRlbXBSZXQwPWdyLmdldFRlbXBSZXQwLGQucnVuUG9zdFNldHM9Z3IucnVuUG9zdFNldHMsZC5zZXRUZW1wUmV0MD1nci5zZXRUZW1wUmV0MCxkLnNldFRocmV3PWdyLnNldFRocmV3LGQuc3RhY2tBbGxvYz1nci5zdGFja0FsbG9jLGQuc3RhY2tSZXN0b3JlPWdyLnN0YWNrUmVzdG9yZSxkLnN0YWNrU2F2ZT1nci5zdGFja1NhdmUsZC5keW5DYWxsX2k9Z3IuZHluQ2FsbF9pLGQuZHluQ2FsbF9paT1nci5keW5DYWxsX2lpLGQuZHluQ2FsbF9paWk9Z3IuZHluQ2FsbF9paWksZC5keW5DYWxsX2lpaWk9Z3IuZHluQ2FsbF9paWlpLGQuZHluQ2FsbF9paWlpaT1nci5keW5DYWxsX2lpaWlpLGQuZHluQ2FsbF9paWlpaWQ9Z3IuZHluQ2FsbF9paWlpaWQsZC5keW5DYWxsX2lpaWlpaT1nci5keW5DYWxsX2lpaWlpaSxkLmR5bkNhbGxfaWlpaWlpZD1nci5keW5DYWxsX2lpaWlpaWQsZC5keW5DYWxsX2lpaWlpaWk9Z3IuZHluQ2FsbF9paWlpaWlpLGQuZHluQ2FsbF9paWlpaWlpaT1nci5keW5DYWxsX2lpaWlpaWlpLGQuZHluQ2FsbF9paWlpaWlpaWk9Z3IuZHluQ2FsbF9paWlpaWlpaWksZC5keW5DYWxsX3Y9Z3IuZHluQ2FsbF92LGQuZHluQ2FsbF92aT1nci5keW5DYWxsX3ZpLGQuZHluQ2FsbF92aWk9Z3IuZHluQ2FsbF92aWksZC5keW5DYWxsX3ZpaWk9Z3IuZHluQ2FsbF92aWlpLGQuZHluQ2FsbF92aWlpaT1nci5keW5DYWxsX3ZpaWlpLGQuZHluQ2FsbF92aWlpaWk9Z3IuZHluQ2FsbF92aWlpaWksZC5keW5DYWxsX3ZpaWlpaWk9Z3IuZHluQ2FsbF92aWlpaWlpLGQuZHluQ2FsbF92aWlpaWlpaT1nci5keW5DYWxsX3ZpaWlpaWlpLGQuZHluQ2FsbF92aWlpaWlpaWk9Z3IuZHluQ2FsbF92aWlpaWlpaWksZC5keW5DYWxsX3ZpaWlpaWlpaWk9Z3IuZHluQ2FsbF92aWlpaWlpaWlpLGQuZHluQ2FsbF92aWlpaWlpaWlpaT1nci5keW5DYWxsX3ZpaWlpaWlpaWlpLGQuZHluQ2FsbF92aWlpaWlpaWlpaWlpPWdyLmR5bkNhbGxfdmlpaWlpaWlpaWlpaSxkLmR5bkNhbGxfdmlpaWlpaWlpaWlpaWk9Z3IuZHluQ2FsbF92aWlpaWlpaWlpaWlpaTtpZihrLnN0YWNrQWxsb2M9ZC5zdGFja0FsbG9jLGsuc3RhY2tTYXZlPWQuc3RhY2tTYXZlLGsuc3RhY2tSZXN0b3JlPWQuc3RhY2tSZXN0b3JlLGsuZXN0YWJsaXNoU3RhY2tTcGFjZT1kLmVzdGFibGlzaFN0YWNrU3BhY2Usay5zZXRUZW1wUmV0MD1kLnNldFRlbXBSZXQwLGsuZ2V0VGVtcFJldDA9ZC5nZXRUZW1wUmV0MCxkLmFzbT1ncixiQSlpZigiZnVuY3Rpb24iPT10eXBlb2YgZC5sb2NhdGVGaWxlP2JBPWQubG9jYXRlRmlsZShiQSk6ZC5tZW1vcnlJbml0aWFsaXplclByZWZpeFVSTCYmKGJBPWQubWVtb3J5SW5pdGlhbGl6ZXJQcmVmaXhVUkwrYkEpLG98fHIpe3ZhciBWcj1kLnJlYWRCaW5hcnkoYkEpO0Uuc2V0KFZyLGsuR0xPQkFMX0JBU0UpfWVsc2V7bEEoKTt2YXIgRnI9ZnVuY3Rpb24oQSl7QS5ieXRlTGVuZ3RoJiYoQT1uZXcgVWludDhBcnJheShBKSksRS5zZXQoQSxrLkdMT0JBTF9CQVNFKSxkLm1lbW9yeUluaXRpYWxpemVyUmVxdWVzdCYmZGVsZXRlIGQubWVtb3J5SW5pdGlhbGl6ZXJSZXF1ZXN0LnJlc3BvbnNlLHVBKCl9O2Z1bmN0aW9uIFJyKCl7ZC5yZWFkQXN5bmMoYkEsRnIsZnVuY3Rpb24oKXt0aHJvdyJjb3VsZCBub3QgbG9hZCBtZW1vcnkgaW5pdGlhbGl6ZXIgIitiQX0pfXZhciBOcj12cihiQSk7aWYoTnIpRnIoTnIuYnVmZmVyKTtlbHNlIGlmKGQubWVtb3J5SW5pdGlhbGl6ZXJSZXF1ZXN0KXtmdW5jdGlvbiBfcigpe3ZhciBBPWQubWVtb3J5SW5pdGlhbGl6ZXJSZXF1ZXN0LGU9QS5yZXNwb25zZTtpZigyMDAhPT1BLnN0YXR1cyYmMCE9PUEuc3RhdHVzKXt2YXIgcj12cihkLm1lbW9yeUluaXRpYWxpemVyUmVxdWVzdFVSTCk7aWYoIXIpcmV0dXJuIGNvbnNvbGUud2FybigiYSBwcm9ibGVtIHNlZW1zIHRvIGhhdmUgaGFwcGVuZWQgd2l0aCBNb2R1bGUubWVtb3J5SW5pdGlhbGl6ZXJSZXF1ZXN0LCBzdGF0dXM6ICIrQS5zdGF0dXMrIiwgcmV0cnlpbmcgIitiQSksdm9pZCBScigpO2U9ci5idWZmZXJ9RnIoZSl9ZC5tZW1vcnlJbml0aWFsaXplclJlcXVlc3QucmVzcG9uc2U/c2V0VGltZW91dChfciwwKTpkLm1lbW9yeUluaXRpYWxpemVyUmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixfcil9ZWxzZSBScigpfWZ1bmN0aW9uIFlyKEEpe3RoaXMubmFtZT0iRXhpdFN0YXR1cyIsdGhpcy5tZXNzYWdlPSJQcm9ncmFtIHRlcm1pbmF0ZWQgd2l0aCBleGl0KCIrQSsiKSIsdGhpcy5zdGF0dXM9QX0oWXIucHJvdG90eXBlPW5ldyBFcnJvcikuY29uc3RydWN0b3I9WXI7dmFyIFFyPW51bGw7ZnVuY3Rpb24gRHIoQSl7ZnVuY3Rpb24gZSgpe2QuY2FsbGVkUnVufHwoZC5jYWxsZWRSdW49ITAsbnx8KEFBfHwoQUE9ITAseChMKSkseChLKSxkLm9uUnVudGltZUluaXRpYWxpemVkJiZkLm9uUnVudGltZUluaXRpYWxpemVkKCksZnVuY3Rpb24oKXtpZihkLnBvc3RSdW4pZm9yKCJmdW5jdGlvbiI9PXR5cGVvZiBkLnBvc3RSdW4mJihkLnBvc3RSdW49W2QucG9zdFJ1bl0pO2QucG9zdFJ1bi5sZW5ndGg7KUE9ZC5wb3N0UnVuLnNoaWZ0KCksJC51bnNoaWZ0KEEpO3ZhciBBO3goJCl9KCkpKX1BPUF8fGQuYXJndW1lbnRzLG51bGw9PT1RciYmKFFyPURhdGUubm93KCkpLDA8b0F8fChmdW5jdGlvbigpe2lmKGQucHJlUnVuKWZvcigiZnVuY3Rpb24iPT10eXBlb2YgZC5wcmVSdW4mJihkLnByZVJ1bj1bZC5wcmVSdW5dKTtkLnByZVJ1bi5sZW5ndGg7KUE9ZC5wcmVSdW4uc2hpZnQoKSxQLnVuc2hpZnQoQSk7dmFyIEE7eChQKX0oKSwwPG9BfHxkLmNhbGxlZFJ1bnx8KGQuc2V0U3RhdHVzPyhkLnNldFN0YXR1cygiUnVubmluZy4uLiIpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZC5zZXRTdGF0dXMoIiIpfSwxKSxlKCl9LDEpKTplKCkpKX1jQT1mdW5jdGlvbiBBKCl7ZC5jYWxsZWRSdW58fERyKCksZC5jYWxsZWRSdW58fChjQT1BKX0sZC5ydW49RHIsZC5leGl0PWZ1bmN0aW9uKEEsZSl7ZSYmZC5ub0V4aXRSdW50aW1lJiYwPT09QXx8KGQubm9FeGl0UnVudGltZXx8KG49ITAsXz1tcix4KHEpLGQub25FeGl0JiZkLm9uRXhpdChBKSksbyYmcHJvY2Vzcy5leGl0KEEpLGQucXVpdChBLG5ldyBZcihBKSkpfTt2YXIgSnI9W107ZnVuY3Rpb24gTXIoZSl7ZC5vbkFib3J0JiZkLm9uQWJvcnQoZSksZT12b2lkIDAhPT1lPyhkLnByaW50KGUpLGQucHJpbnRFcnIoZSksSlNPTi5zdHJpbmdpZnkoZSkpOiIiLG49ITAsMDt2YXIgcj0iYWJvcnQoIitlKyIpIGF0ICIrcCgpKyJcXG5JZiB0aGlzIGFib3J0KCkgaXMgdW5leHBlY3RlZCwgYnVpbGQgd2l0aCAtcyBBU1NFUlRJT05TPTEgd2hpY2ggY2FuIGdpdmUgbW9yZSBpbmZvcm1hdGlvbi4iO3Rocm93IEpyJiZKci5mb3JFYWNoKGZ1bmN0aW9uKEEpe3I9QShyLGUpfSkscn1pZihkLmFib3J0PU1yLGQucHJlSW5pdClmb3IoImZ1bmN0aW9uIj09dHlwZW9mIGQucHJlSW5pdCYmKGQucHJlSW5pdD1bZC5wcmVJbml0XSk7MDxkLnByZUluaXQubGVuZ3RoOylkLnByZUluaXQucG9wKCkoKTtkLm5vRXhpdFJ1bnRpbWU9ITAsRHIoKTtmdW5jdGlvbiBUcihBKXt0aGlzLmhhbmRsZT1BLHRoaXMuaW1nPW51bGx9VHIucHJvdG90eXBlLmZyZWU9ZnVuY3Rpb24oKXt0aGlzLmhhbmRsZSYmKHpyLmhlaWZfaW1hZ2VfaGFuZGxlX3JlbGVhc2UodGhpcy5oYW5kbGUpLHRoaXMuaGFuZGxlPW51bGwpfSxUci5wcm90b3R5cGUuX2Vuc3VyZUltYWdlPWZ1bmN0aW9uKCl7aWYoIXRoaXMuaW1nKXt2YXIgQT16ci5oZWlmX2pzX2RlY29kZV9pbWFnZSh0aGlzLmhhbmRsZSx6ci5oZWlmX2NvbG9yc3BhY2VfWUNiQ3IsenIuaGVpZl9jaHJvbWFfNDIwKTtBJiYhQS5jb2RlPyh0aGlzLmRhdGE9bmV3IFVpbnQ4QXJyYXkoZnVuY3Rpb24oQSl7Zm9yKHZhciBlPW5ldyBBcnJheUJ1ZmZlcihBLmxlbmd0aCkscj1uZXcgVWludDhBcnJheShlKSxpPTAsZj1BLmxlbmd0aDtpPGY7aSsrKXJbaV09QS5jaGFyQ29kZUF0KGkpO3JldHVybiBlfShBLmRhdGEpKSxkZWxldGUgQS5kYXRhLHRoaXMuaW1nPUEpOmNvbnNvbGUubG9nKCJEZWNvZGluZyBpbWFnZSBmYWlsZWQiLHRoaXMuaGFuZGxlLEEpfX0sVHIucHJvdG90eXBlLmdldF93aWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbnN1cmVJbWFnZSgpLHRoaXMuaW1nLndpZHRofSxUci5wcm90b3R5cGUuZ2V0X2hlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbnN1cmVJbWFnZSgpLHRoaXMuaW1nLmhlaWdodH0sVHIucHJvdG90eXBlLmlzX3ByaW1hcnk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5zdXJlSW1hZ2UoKSwhIXRoaXMuaW1nLmlzX3ByaW1hcnl9LFRyLnByb3RvdHlwZS5kaXNwbGF5PWZ1bmN0aW9uKG0sZyl7dmFyIFo9dGhpcy5nZXRfd2lkdGgoKSxwPXRoaXMuZ2V0X2hlaWdodCgpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtpZih0aGlzLl9lbnN1cmVJbWFnZSgpLHRoaXMuaW1nKXtmb3IodmFyIEEsZSxyLGksZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD1aKnAsdT1aLGI9TWF0aC5jZWlsKFovMikscz1NYXRoLmNlaWwoWi8yKSxkPU1hdGguY2VpbChwLzIpLGs9dGhpcy5kYXRhLGg9dGhpcy5kYXRhLnN1YmFycmF5KHUqcCx1KnArYipkKSx3PXRoaXMuZGF0YS5zdWJhcnJheSh1KnArYipkLHUqcCtiKmQrcypkKSx2PW0uZGF0YTtjPGw7KWk9Zj4+MSxBPTEuMTY0KihrW3QrZl0tMTYpLGU9aFtvK2ldLTEyOCxyPXdbYStpXS0xMjgsdltjPDwyXT1BKzEuNTk2KnIsdlsxKyhjPDwyKV09QS0uODEzKnItLjM5MSplLHZbMisoYzw8MildPUErMi4wMTgqZSx2WzMrKGM8PDIpXT0yNTUsYysrLCsrZjxaJiYoQT0xLjE2NCooa1t0K2ZdLTE2KSx2W2M8PDJdPUErMS41OTYqcix2WzErKGM8PDIpXT1BLS44MTMqci0uMzkxKmUsdlsyKyhjPDwyKV09QSsyLjAxOCplLHZbMysoYzw8MildPTI1NSxjKyssZisrKSxmPT09WiYmKGY9MCx0Kz11LG89KCsrbj4+MSkqYixhPShuPj4xKSpzKTtnKG0pfWVsc2UgZyhudWxsKX0uYmluZCh0aGlzKSwwKX07ZnVuY3Rpb24gVXIoKXt0aGlzLmRlY29kZXI9bnVsbH1Vci5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKEEpe2lmKHRoaXMuZGVjb2RlciYmenIuaGVpZl9jb250ZXh0X2ZyZWUodGhpcy5kZWNvZGVyKSx0aGlzLmRlY29kZXI9enIuaGVpZl9jb250ZXh0X2FsbG9jKCksIXRoaXMuZGVjb2RlcilyZXR1cm4gY29uc29sZS5sb2coIkNvdWxkIG5vdCBjcmVhdGUgSEVJRiBjb250ZXh0IiksW107dmFyIGU9enIuaGVpZl9jb250ZXh0X3JlYWRfZnJvbV9tZW1vcnkodGhpcy5kZWNvZGVyLEEpO2lmKGUuY29kZSE9PXpyLmhlaWZfZXJyb3JfT2spcmV0dXJuIGNvbnNvbGUubG9nKCJDb3VsZCBub3QgcGFyc2UgSEVJRiBmaWxlIixlKSxbXTt2YXIgcj16ci5oZWlmX2pzX2NvbnRleHRfZ2V0X2xpc3Rfb2ZfdG9wX2xldmVsX2ltYWdlX0lEcyh0aGlzLmRlY29kZXIpO2lmKCFyfHxyLmNvZGUpcmV0dXJuIGNvbnNvbGUubG9nKCJFcnJvciBsb2FkaW5nIGltYWdlIGlkcyIsciksW107aWYoIXIubGVuZ3RoKXJldHVybiBjb25zb2xlLmxvZygiTm8gaW1hZ2VzIGZvdW5kIiksW107Zm9yKHZhciBpPVtdLGY9MDtmPHIubGVuZ3RoO2YrKyl7dmFyIG49enIuaGVpZl9qc19jb250ZXh0X2dldF9pbWFnZV9oYW5kbGUodGhpcy5kZWNvZGVyLHJbZl0pO24mJiFuLmNvZGU/aS5wdXNoKG5ldyBUcihuKSk6Y29uc29sZS5sb2coIkNvdWxkIG5vdCBnZXQgaW1hZ2UgZGF0YSBmb3IgaWQiLHJbZl0sbil9cmV0dXJuIGl9O3ZhciBTcixPcix6cj17SGVpZkRlY29kZXI6VXIsZm91cmNjOmZ1bmN0aW9uKEEpe3JldHVybiBBLmNoYXJDb2RlQXQoMCk8PDI0fEEuY2hhckNvZGVBdCgxKTw8MTZ8QS5jaGFyQ29kZUF0KDIpPDw4fEEuY2hhckNvZGVBdCgzKX19LGpyPXtoZWlmX2Vycm9yX2NvZGU6ITAsaGVpZl9zdWJlcnJvcl9jb2RlOiEwLGhlaWZfY29tcHJlc3Npb25fZm9ybWF0OiEwLGhlaWZfY2hyb21hOiEwLGhlaWZfY29sb3JzcGFjZTohMCxoZWlmX2NoYW5uZWw6ITB9O2ZvcihPciBpbiBqcilpZihqci5oYXNPd25Qcm9wZXJ0eShPcikpZm9yKFNyIGluIGRbT3JdKWRbT3JdLmhhc093blByb3BlcnR5KFNyKSYmInZhbHVlcyIhPT1TciYmKHpyW1NyXT1kW09yXVtTcl0pO2ZvcihTciBpbiBkKWpyLmhhc093blByb3BlcnR5KFNyKXx8MCE9PVNyLmluZGV4T2YoImhlaWZfIil8fCh6cltTcl09ZFtTcl0pO2Z1bmN0aW9uIFFBKEEsZSl7cmV0dXJuIEE9WUEoQT1BfHwiZnVuY3Rpb25fIituZXcgRGF0ZSksbmV3IEZ1bmN0aW9uKCJib2R5IiwicmV0dXJuIGZ1bmN0aW9uICIrQSsnKCkge1xcbiAgICAidXNlIHN0cmljdCI7ICAgIHJldHVybiBib2R5LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XFxufTtcXG4nKShlKX1kZWxldGUgdGhpcy5Nb2R1bGU7InVuZGVmaW5lZCIhPXR5cGVvZiBleHBvcnRzPygidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZSYmbW9kdWxlLmV4cG9ydHMmJihleHBvcnRzPW1vZHVsZS5leHBvcnRzPXpyKSxleHBvcnRzLmxpYmhlaWY9enIpOnRoaXMubGliaGVpZj16ciwiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kJiZkZWZpbmUoW10sZnVuY3Rpb24oKXtyZXR1cm4genJ9KX0pLmNhbGwodGhpcyk7CjsKZnVuY3Rpb24gcHJvY2Vzc1NpbmdsZUltYWdlKGltYWdlKSB7CiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gewogICAgICAgIGNvbnN0IHcgPSBpbWFnZS5nZXRfd2lkdGgoKTsKICAgICAgICBjb25zdCBoID0gaW1hZ2UuZ2V0X2hlaWdodCgpOwogICAgICAgIGNvbnN0IHdoaXRlSW1hZ2UgPSBuZXcgSW1hZ2VEYXRhKHcsIGgpOwogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdyAqIGg7IGkrKykgewogICAgICAgICAgICB3aGl0ZUltYWdlLmRhdGFbaSAqIDQgKyAzXSA9IDI1NTsKICAgICAgICB9CiAgICAgICAgaW1hZ2UuZGlzcGxheSh3aGl0ZUltYWdlLCAoaW1hZ2VEYXRhKSA9PiB7CiAgICAgICAgICAgIGlmICghaW1hZ2VEYXRhKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KCJFUlJfTElCSEVJRiBFcnJvciB3aGlsZSBwcm9jZXNzaW5nIHNpbmdsZSBpbWFnZSBhbmQgZ2VuZXJhdGluZyBpbWFnZSBkYXRhLCBjb3VsZCBub3QgZW5zdXJlIGltYWdlIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmVzb2x2ZShpbWFnZURhdGEpOwogICAgICAgIH0pOwogICAgfSk7Cn0Kb25tZXNzYWdlID0gKG1lc3NhZ2UpID0+IHsKICAgIGNvbnN0IGlkID0gbWVzc2FnZS5kYXRhLmlkOwogICAgdHJ5IHsKICAgICAgICBjb25zdCBkZWNvZGVyID0gbmV3IGxpYmhlaWYuSGVpZkRlY29kZXIoKTsKICAgICAgICBsZXQgaW1hZ2VzQXJyID0gZGVjb2Rlci5kZWNvZGUobWVzc2FnZS5kYXRhLmJ1ZmZlcik7CiAgICAgICAgaWYgKCFpbWFnZXNBcnIgfHwgIWltYWdlc0Fyci5sZW5ndGgpIHsKICAgICAgICAgICAgdGhyb3cgIkVSUl9MSUJIRUlGIGZvcm1hdCBub3Qgc3VwcG9ydGVkIjsKICAgICAgICB9CiAgICAgICAgaW1hZ2VzQXJyID0gaW1hZ2VzQXJyLmZpbHRlcigoeCkgPT4gewogICAgICAgICAgICBsZXQgdmFsaWQgPSB0cnVlOwogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgIHNvbWV0aW1lcyB0aGUgaGVpYyBjb250YWluZXIgaXMgdmFsaWQKICAgICAgICAgICAgICAgIHlldCB0aGUgaW1hZ2VzIHRoZW1zZWx2ZXMgYXJlIGNvcnJ1cHQKICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICB4LmdldF9oZWlnaHQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gdmFsaWQ7CiAgICAgICAgfSk7CiAgICAgICAgaWYgKCFpbWFnZXNBcnIubGVuZ3RoKSB7CiAgICAgICAgICAgIHRocm93ICJFUlJfTElCSEVJRiBIZWljIGRvZXNuJ3QgY29udGFpbiB2YWxpZCBpbWFnZXMiOwogICAgICAgIH0KICAgICAgICBQcm9taXNlLmFsbChpbWFnZXNBcnIubWFwKChpbWFnZSkgPT4gcHJvY2Vzc1NpbmdsZUltYWdlKGltYWdlKSkpCiAgICAgICAgICAgIC50aGVuKChpbWFnZURhdGFBcnIpID0+IHsKICAgICAgICAgICAgcG9zdE1lc3NhZ2UoeyBpZCwgaW1hZ2VEYXRhQXJyLCBlcnJvcjogIiIgfSk7CiAgICAgICAgfSkKICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7CiAgICAgICAgICAgIHBvc3RNZXNzYWdlKHsKICAgICAgICAgICAgICAgIGlkLAogICAgICAgICAgICAgICAgaW1hZ2VEYXRhQXJyOiBbXSwKICAgICAgICAgICAgICAgIGVycm9yOiBlICYmIGUudG9TdHJpbmcgPyBlLnRvU3RyaW5nKCkgOiBlLAogICAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgIH0KICAgIGNhdGNoIChlKSB7CiAgICAgICAgcG9zdE1lc3NhZ2UoewogICAgICAgICAgICBpZCwKICAgICAgICAgICAgaW1hZ2VEYXRhQXJyOiBbXSwKICAgICAgICAgICAgZXJyb3I6IGUgJiYgZS50b1N0cmluZyA/IGUudG9TdHJpbmcoKSA6IGUsCiAgICAgICAgfSk7CiAgICB9Cn07CgpgLCBBID0gbmV3IEJsb2IoW2FdLCB7IHR5cGU6ICJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IiB9KTsKICAgIHdpbmRvdy5fX2hlaWMyYW55X193b3JrZXIgPSBuZXcgV29ya2VyKFVSTC5jcmVhdGVPYmplY3RVUkwoQSkpOwogICAgdmFyIHQgPSBbImltYWdlL3BuZyIsICJpbWFnZS9qcGVnIiwgImltYWdlL2dpZiJdLCBpID0gewogICAgICBibG9iVG9EYXRhVVJMOiBmdW5jdGlvbih1KSB7CiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG8sIGwpIHsKICAgICAgICAgIHZhciBzID0gbmV3IEZpbGVSZWFkZXIoKTsKICAgICAgICAgIHMub25lcnJvciA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICBsKCJFUlJfRE9NIEVycm9yIG9uIGNvbnZlcnRpbmcgYmxvYiB0byBkYXRhIFVSTCIpOwogICAgICAgICAgfSwgcy5vbmxvYWQgPSBmdW5jdGlvbihjKSB7CiAgICAgICAgICAgIG8ocy5yZXN1bHQpOwogICAgICAgICAgfSwgcy5yZWFkQXNEYXRhVVJMKHUpOwogICAgICAgIH0pOwogICAgICB9LAogICAgICBkYXRhVVJJdG9CbG9iOiBmdW5jdGlvbih1KSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGZvciAodmFyIG8gPSBhdG9iKHUuc3BsaXQoIiwiKVsxXSksIGwgPSB1LnNwbGl0KCIsIilbMF0uc3BsaXQoIjoiKVsxXS5zcGxpdCgiOyIpWzBdLCBzID0gbmV3IEFycmF5QnVmZmVyKG8ubGVuZ3RoKSwgYyA9IG5ldyBVaW50OEFycmF5KHMpLCBkID0gMDsgZCA8IG8ubGVuZ3RoOyBkKyspCiAgICAgICAgICAgIGNbZF0gPSBvLmNoYXJDb2RlQXQoZCk7CiAgICAgICAgICB2YXIgdiA9IG5ldyBCbG9iKFtzXSwgeyB0eXBlOiBsIH0pOwogICAgICAgICAgcmV0dXJuIHY7CiAgICAgICAgfSBjYXRjaCAoaykgewogICAgICAgICAgcmV0dXJuICJFUlJfRE9NIEVycm9yIG9uIGNvbnZlcnRpbmcgZGF0YSBVUkkgdG8gYmxvYiAiICsgayAmJiBrLnRvU3RyaW5nID8gay50b1N0cmluZygpIDogazsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGltYWdlRGF0YVRvQmxvYjogZnVuY3Rpb24odSkgewogICAgICAgIHZhciBvID0gdS5pbWFnZURhdGEsIGwgPSB1LnRvVHlwZTsKICAgICAgICBsID09PSB2b2lkIDAgJiYgKGwgPSAiaW1hZ2UvcG5nIik7CiAgICAgICAgdmFyIHMgPSB1LnF1YWxpdHk7CiAgICAgICAgcmV0dXJuIHMgPT09IHZvaWQgMCAmJiAocyA9IDAuOTIpLCAocyA+IDEgfHwgcyA8IDApICYmIChzID0gMC45MiksIHQuaW5kZXhPZihsKSA9PT0gLTEgJiYgKGwgPSAiaW1hZ2UvcG5nIiksIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGMsIGQpIHsKICAgICAgICAgIHZhciB2ID0gbnVsbDsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIHYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTsKICAgICAgICAgIH0gY2F0Y2ggewogICAgICAgICAgfQogICAgICAgICAgaWYgKCF2KQogICAgICAgICAgICByZXR1cm4gZCgiRVJSX0NBTlZBUyBFcnJvciBvbiBjb252ZXJ0aW5nIGltYWdlZGF0YSB0byBibG9iOiBDb3VsZCBub3QgY3JlYXRlIGNhbnZhcyBlbGVtZW50Iik7CiAgICAgICAgICB2LndpZHRoID0gby53aWR0aCwgdi5oZWlnaHQgPSBvLmhlaWdodDsKICAgICAgICAgIHZhciBrID0gdi5nZXRDb250ZXh0KCIyZCIpOwogICAgICAgICAgaWYgKCFrKQogICAgICAgICAgICByZXR1cm4gZCgiRVJSX0NBTlZBUyBFcnJvciBvbiBjb252ZXJ0aW5nIGltYWdlZGF0YSB0byBibG9iOiBDb3VsZCBub3QgZ2V0IGNhbnZhcyBjb250ZXh0Iik7CiAgICAgICAgICBrLnB1dEltYWdlRGF0YShvLCAwLCAwKSwgdi50b0Jsb2IoZnVuY3Rpb24oRSkgewogICAgICAgICAgICByZXR1cm4gRSA/IGMoRSkgOiBkKCJFUlJfQ0FOVkFTIEVycm9yIG9uIGNvbnZlcnRpbmcgaW1hZ2VkYXRhIHRvIGJsb2I6IENvdWxkIG5vdCBnZXQgYmxvYiBmcm9tIGNhbnZhcyIpOwogICAgICAgICAgfSwgbCwgcyk7CiAgICAgICAgfSk7CiAgICAgIH0sCiAgICAgIGltYWdlc1RvR2lmOiBmdW5jdGlvbih1KSB7CiAgICAgICAgdmFyIG8gPSB1LmltYWdlcywgbCA9IHUuaW50ZXJ2YWwsIHMgPSB1LmdpZkhlaWdodCwgYyA9IHUuZ2lmV2lkdGg7CiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGQsIHYpIHsKICAgICAgICAgIGdpZnNob3QuY3JlYXRlR0lGKHsKICAgICAgICAgICAgaW1hZ2VzOiBvLAogICAgICAgICAgICBpbnRlcnZhbDogbCwKICAgICAgICAgICAgZ2lmSGVpZ2h0OiBzLAogICAgICAgICAgICBnaWZXaWR0aDogYwogICAgICAgICAgfSwgZnVuY3Rpb24oaykgewogICAgICAgICAgICByZXR1cm4gay5lcnJvciAmJiB2KCJFUlJfR0lGICIgKyBrLmVycm9yQ29kZSArICIgIiArIGsuZXJyb3JNZXNzYWdlKSwgZChrLmltYWdlKTsKICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICB9LAogICAgICBvdGhlckltYWdlVHlwZTogZnVuY3Rpb24odSkgewogICAgICAgIGZvciAodmFyIG8gPSBuZXcgVWludDhBcnJheSh1KS5zdWJhcnJheSgwLCA0KSwgbCA9ICIiLCBzID0gMDsgcyA8IG8ubGVuZ3RoOyBzKyspCiAgICAgICAgICBsID0gbCArIG9bc10udG9TdHJpbmcoMTYpOwogICAgICAgIHN3aXRjaCAobCkgewogICAgICAgICAgY2FzZSAiODk1MDRlNDciOgogICAgICAgICAgICByZXR1cm4gImltYWdlL3BuZyI7CiAgICAgICAgICBjYXNlICI0NzQ5NDYzOCI6CiAgICAgICAgICAgIHJldHVybiAiaW1hZ2UvZ2lmIjsKICAgICAgICAgIGNhc2UgImZmZDhmZmUwIjoKICAgICAgICAgIGNhc2UgImZmZDhmZmUxIjoKICAgICAgICAgIGNhc2UgImZmZDhmZmUyIjoKICAgICAgICAgIGNhc2UgImZmZDhmZmUzIjoKICAgICAgICAgIGNhc2UgImZmZDhmZmU4IjoKICAgICAgICAgICAgcmV0dXJuICJpbWFnZS9qcGVnIjsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiAhMTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGVycm9yOiBmdW5jdGlvbih1KSB7CiAgICAgICAgdmFyIG8gPSAwOwogICAgICAgIHUgPyB0eXBlb2YgdSAhPSAic3RyaW5nIiAmJiAodS50b1N0cmluZyA/IHUgPSB1LnRvU3RyaW5nKCkgOiB1ID0gSlNPTi5zdHJpbmdpZnkodSkpIDogdSA9ICJFUlJfVU5LTk9XTiI7CiAgICAgICAgZm9yICh2YXIgbCA9IFsKICAgICAgICAgICJFUlJfVVNFUiIsCiAgICAgICAgICAiRVJSX0xJQkhFSUYiLAogICAgICAgICAgIkVSUl9HSUYiLAogICAgICAgICAgIkVSUl9ET00iLAogICAgICAgICAgIkVSUl9DQU5WQVMiCiAgICAgICAgXSwgcyA9IDA7IHMgPCBsLmxlbmd0aDsgcysrKSB7CiAgICAgICAgICB2YXIgYyA9IGxbc107CiAgICAgICAgICB1LmluZGV4T2YoYykgPT09IDAgJiYgKG8gPSBzICsgMSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB7CiAgICAgICAgICBjb2RlOiBvLAogICAgICAgICAgbWVzc2FnZTogdQogICAgICAgIH07CiAgICAgIH0KICAgIH07CiAgICBmdW5jdGlvbiBuKHUpIHsKICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG8sIGwpIHsKICAgICAgICB2YXIgcyA9IChNYXRoLnJhbmRvbSgpICogKC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKS5nZXRUaW1lKCkpLnRvU3RyaW5nKCksIGMgPSB7IGlkOiBzLCBidWZmZXI6IHUgfTsKICAgICAgICB3aW5kb3cuX19oZWljMmFueV9fd29ya2VyLnBvc3RNZXNzYWdlKGMpLCB3aW5kb3cuX19oZWljMmFueV9fd29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCBmdW5jdGlvbihkKSB7CiAgICAgICAgICBpZiAoZC5kYXRhLmlkID09PSBzKQogICAgICAgICAgICByZXR1cm4gZC5kYXRhLmVycm9yID8gbChkLmRhdGEuZXJyb3IpIDogbyhkLmRhdGEuaW1hZ2VEYXRhQXJyKTsKICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9CiAgICBmdW5jdGlvbiBmKHUpIHsKICAgICAgdmFyIG8gPSB1LmJsb2IsIGwgPSB1LnRvVHlwZTsKICAgICAgbCA9PT0gdm9pZCAwICYmIChsID0gImltYWdlL3BuZyIpOwogICAgICB2YXIgcyA9IHUucXVhbGl0eTsKICAgICAgcyA9PT0gdm9pZCAwICYmIChzID0gMC45Mik7CiAgICAgIHZhciBjID0gdS5naWZJbnRlcnZhbDsKICAgICAgYyA9PT0gdm9pZCAwICYmIChjID0gMC40KTsKICAgICAgdmFyIGQgPSB1Lm11bHRpcGxlOwogICAgICByZXR1cm4gZCA9PT0gdm9pZCAwICYmIChkID0gdm9pZCAwKSwgbmV3IFByb21pc2UoZnVuY3Rpb24odiwgaykgewogICAgICAgIG8gaW5zdGFuY2VvZiBCbG9iIHx8IGkuZXJyb3IoIkVSUl9VU0VSIGxpYnJhcnkgb25seSBhY2NlcHRzIEJMT0JzIGFzIGlucHV0IiksIHR5cGVvZiBkICE9ICJib29sZWFuIiAmJiBpLmVycm9yKCdFUlJfVVNFUiAibXVsdGlwbGUiIHBhcmFtZXRlciBzaG91bGQgYmUgb2YgdHlwZSAiYm9vbGVhbiInKSwgdHlwZW9mIHMgIT0gIm51bWJlciIgJiYgaS5lcnJvcignRVJSX1VTRVIgInF1YWxpdHkiIHBhcmFtZXRlciBzaG91bGQgYmUgb2YgdHlwZSAibnVtYmVyIicpLCB0eXBlb2YgYyAhPSAibnVtYmVyIiAmJiBpLmVycm9yKCdFUlJfVVNFUiAiZ2lmSW50ZXJ2YWwiIHBhcmFtZXRlciBzaG91bGQgYmUgb2YgdHlwZSAibnVtYmVyIicpOwogICAgICAgIHZhciBFID0gbmV3IEZpbGVSZWFkZXIoKTsKICAgICAgICBFLm9ubG9hZCA9IGZ1bmN0aW9uKGcpIHsKICAgICAgICAgIHZhciB3ID0gMCwgQiA9IDAsIG0gPSBnLnRhcmdldC5yZXN1bHQsIHAgPSBpLm90aGVySW1hZ2VUeXBlKG0pOwogICAgICAgICAgaWYgKHApCiAgICAgICAgICAgIHJldHVybiBrKGkuZXJyb3IoIkVSUl9VU0VSIEltYWdlIGlzIGFscmVhZHkgYnJvd3NlciByZWFkYWJsZTogIiArIHApKTsKICAgICAgICAgIG4obSkudGhlbihmdW5jdGlvbihXKSB7CiAgICAgICAgICAgIHJldHVybiB3ID0gV1swXS53aWR0aCwgQiA9IFdbMF0uaGVpZ2h0LCBQcm9taXNlLmFsbChXLm1hcChmdW5jdGlvbihDKSB7CiAgICAgICAgICAgICAgcmV0dXJuIGkuaW1hZ2VEYXRhVG9CbG9iKHsKICAgICAgICAgICAgICAgIGltYWdlRGF0YTogQywKICAgICAgICAgICAgICAgIHRvVHlwZTogbCwKICAgICAgICAgICAgICAgIHF1YWxpdHk6IHMKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSkpOwogICAgICAgICAgfSkudGhlbihmdW5jdGlvbihXKSB7CiAgICAgICAgICAgIHJldHVybiBsID09PSAiaW1hZ2UvZ2lmIiA/IFByb21pc2UuYWxsKFcubWFwKGZ1bmN0aW9uKEMpIHsKICAgICAgICAgICAgICByZXR1cm4gaS5ibG9iVG9EYXRhVVJMKEMpOwogICAgICAgICAgICB9KSkgOiBkID8gKHYoVyksIFsiIl0pIDogKHYoV1swXSksIFsiIl0pOwogICAgICAgICAgfSkudGhlbihmdW5jdGlvbihXKSB7CiAgICAgICAgICAgIHJldHVybiBsID09PSAiaW1hZ2UvZ2lmIiAmJiBXID8gaS5pbWFnZXNUb0dpZih7CiAgICAgICAgICAgICAgaW1hZ2VzOiBXLAogICAgICAgICAgICAgIGludGVydmFsOiBjLAogICAgICAgICAgICAgIGdpZldpZHRoOiB3LAogICAgICAgICAgICAgIGdpZkhlaWdodDogQgogICAgICAgICAgICB9KSA6ICIiOwogICAgICAgICAgfSkudGhlbihmdW5jdGlvbihXKSB7CiAgICAgICAgICAgIGlmIChsID09PSAiaW1hZ2UvZ2lmIiAmJiBXKSB7CiAgICAgICAgICAgICAgdmFyIEMgPSBpLmRhdGFVUkl0b0Jsb2IoVyk7CiAgICAgICAgICAgICAgdHlwZW9mIEMgPT0gInN0cmluZyIgPyBrKGkuZXJyb3IoQykpIDogdihDKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oVykgewogICAgICAgICAgICBrKGkuZXJyb3IoVykpOwogICAgICAgICAgfSk7CiAgICAgICAgfSwgRS5yZWFkQXNBcnJheUJ1ZmZlcihvKTsKICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gZjsKICB9KTsKfSkoSGkpOwp2YXIgemkgPSBIaS5leHBvcnRzLCBXZiA9IC8qIEBfX1BVUkVfXyAqLyBDZih6aSksIF9mID0gLyogQF9fUFVSRV9fICovIGRmKHsKICBfX3Byb3RvX186IG51bGwsCiAgZGVmYXVsdDogV2YKfSwgW3ppXSk7Ci8qISBwYWtvIDIuMS4wIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlY2EvcGFrbyBAbGljZW5zZSAoTUlUIEFORCBabGliKSAqLwpjb25zdCBHZiA9IDQsICRBID0gMCwgcnQgPSAxLCBYZiA9IDI7CmZ1bmN0aW9uIHFhKHIpIHsKICBsZXQgZSA9IHIubGVuZ3RoOwogIGZvciAoOyAtLWUgPj0gMDsgKQogICAgcltlXSA9IDA7Cn0KY29uc3QgUmYgPSAwLCBMaSA9IDEsIFZmID0gMiwgU2YgPSAzLCBEZiA9IDI1OCwgVkEgPSAyOSwgWDIgPSAyNTYsIFoyID0gWDIgKyAxICsgVkEsIFlhID0gMzAsIFNBID0gMTksIEtpID0gMiAqIFoyICsgMSwgRWEgPSAxNSwgTmUgPSAxNiwgeGYgPSA3LCBEQSA9IDI1NiwgcWkgPSAxNiwgJGkgPSAxNywgcm4gPSAxOCwgYkEgPSAoCiAgLyogZXh0cmEgYml0cyBmb3IgZWFjaCBsZW5ndGggY29kZSAqLwogIG5ldyBVaW50OEFycmF5KFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAyLCAyLCAyLCAyLCAzLCAzLCAzLCAzLCA0LCA0LCA0LCA0LCA1LCA1LCA1LCA1LCAwXSkKKSwgZGUgPSAoCiAgLyogZXh0cmEgYml0cyBmb3IgZWFjaCBkaXN0YW5jZSBjb2RlICovCiAgbmV3IFVpbnQ4QXJyYXkoWzAsIDAsIDAsIDAsIDEsIDEsIDIsIDIsIDMsIDMsIDQsIDQsIDUsIDUsIDYsIDYsIDcsIDcsIDgsIDgsIDksIDksIDEwLCAxMCwgMTEsIDExLCAxMiwgMTIsIDEzLCAxM10pCiksIE5mID0gKAogIC8qIGV4dHJhIGJpdHMgZm9yIGVhY2ggYml0IGxlbmd0aCBjb2RlICovCiAgbmV3IFVpbnQ4QXJyYXkoWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIsIDMsIDddKQopLCBhbiA9IG5ldyBVaW50OEFycmF5KFsxNiwgMTcsIDE4LCAwLCA4LCA3LCA5LCA2LCAxMCwgNSwgMTEsIDQsIDEyLCAzLCAxMywgMiwgMTQsIDEsIDE1XSksIE1mID0gNTEyLCBxciA9IG5ldyBBcnJheSgoWjIgKyAyKSAqIDIpOwpxYShxcik7CmNvbnN0IGgyID0gbmV3IEFycmF5KFlhICogMik7CnFhKGgyKTsKY29uc3QgQjIgPSBuZXcgQXJyYXkoTWYpOwpxYShCMik7CmNvbnN0IEkyID0gbmV3IEFycmF5KERmIC0gU2YgKyAxKTsKcWEoSTIpOwpjb25zdCB4QSA9IG5ldyBBcnJheShWQSk7CnFhKHhBKTsKY29uc3QgdmUgPSBuZXcgQXJyYXkoWWEpOwpxYSh2ZSk7CmZ1bmN0aW9uIE1lKHIsIGUsIGEsIEEsIHQpIHsKICB0aGlzLnN0YXRpY190cmVlID0gciwgdGhpcy5leHRyYV9iaXRzID0gZSwgdGhpcy5leHRyYV9iYXNlID0gYSwgdGhpcy5lbGVtcyA9IEEsIHRoaXMubWF4X2xlbmd0aCA9IHQsIHRoaXMuaGFzX3N0cmVlID0gciAmJiByLmxlbmd0aDsKfQpsZXQgZW4sIEFuLCB0bjsKZnVuY3Rpb24gVGUociwgZSkgewogIHRoaXMuZHluX3RyZWUgPSByLCB0aGlzLm1heF9jb2RlID0gMCwgdGhpcy5zdGF0X2Rlc2MgPSBlOwp9CmNvbnN0IG5uID0gKHIpID0+IHIgPCAyNTYgPyBCMltyXSA6IEIyWzI1NiArIChyID4+PiA3KV0sIEYyID0gKHIsIGUpID0+IHsKICByLnBlbmRpbmdfYnVmW3IucGVuZGluZysrXSA9IGUgJiAyNTUsIHIucGVuZGluZ19idWZbci5wZW5kaW5nKytdID0gZSA+Pj4gOCAmIDI1NTsKfSwgbHIgPSAociwgZSwgYSkgPT4gewogIHIuYmlfdmFsaWQgPiBOZSAtIGEgPyAoci5iaV9idWYgfD0gZSA8PCByLmJpX3ZhbGlkICYgNjU1MzUsIEYyKHIsIHIuYmlfYnVmKSwgci5iaV9idWYgPSBlID4+IE5lIC0gci5iaV92YWxpZCwgci5iaV92YWxpZCArPSBhIC0gTmUpIDogKHIuYmlfYnVmIHw9IGUgPDwgci5iaV92YWxpZCAmIDY1NTM1LCByLmJpX3ZhbGlkICs9IGEpOwp9LCBPciA9IChyLCBlLCBhKSA9PiB7CiAgbHIoCiAgICByLAogICAgYVtlICogMl0sCiAgICBhW2UgKiAyICsgMV0KICAgIC8qLkxlbiovCiAgKTsKfSwgZm4gPSAociwgZSkgPT4gewogIGxldCBhID0gMDsKICBkbwogICAgYSB8PSByICYgMSwgciA+Pj49IDEsIGEgPDw9IDE7CiAgd2hpbGUgKC0tZSA+IDApOwogIHJldHVybiBhID4+PiAxOwp9LCBUZiA9IChyKSA9PiB7CiAgci5iaV92YWxpZCA9PT0gMTYgPyAoRjIociwgci5iaV9idWYpLCByLmJpX2J1ZiA9IDAsIHIuYmlfdmFsaWQgPSAwKSA6IHIuYmlfdmFsaWQgPj0gOCAmJiAoci5wZW5kaW5nX2J1ZltyLnBlbmRpbmcrK10gPSByLmJpX2J1ZiAmIDI1NSwgci5iaV9idWYgPj49IDgsIHIuYmlfdmFsaWQgLT0gOCk7Cn0sIFBmID0gKHIsIGUpID0+IHsKICBjb25zdCBhID0gZS5keW5fdHJlZSwgQSA9IGUubWF4X2NvZGUsIHQgPSBlLnN0YXRfZGVzYy5zdGF0aWNfdHJlZSwgaSA9IGUuc3RhdF9kZXNjLmhhc19zdHJlZSwgbiA9IGUuc3RhdF9kZXNjLmV4dHJhX2JpdHMsIGYgPSBlLnN0YXRfZGVzYy5leHRyYV9iYXNlLCB1ID0gZS5zdGF0X2Rlc2MubWF4X2xlbmd0aDsKICBsZXQgbywgbCwgcywgYywgZCwgdiwgayA9IDA7CiAgZm9yIChjID0gMDsgYyA8PSBFYTsgYysrKQogICAgci5ibF9jb3VudFtjXSA9IDA7CiAgZm9yIChhW3IuaGVhcFtyLmhlYXBfbWF4XSAqIDIgKyAxXSA9IDAsIG8gPSByLmhlYXBfbWF4ICsgMTsgbyA8IEtpOyBvKyspCiAgICBsID0gci5oZWFwW29dLCBjID0gYVthW2wgKiAyICsgMV0gKiAyICsgMV0gKyAxLCBjID4gdSAmJiAoYyA9IHUsIGsrKyksIGFbbCAqIDIgKyAxXSA9IGMsICEobCA+IEEpICYmIChyLmJsX2NvdW50W2NdKyssIGQgPSAwLCBsID49IGYgJiYgKGQgPSBuW2wgLSBmXSksIHYgPSBhW2wgKiAyXSwgci5vcHRfbGVuICs9IHYgKiAoYyArIGQpLCBpICYmIChyLnN0YXRpY19sZW4gKz0gdiAqICh0W2wgKiAyICsgMV0gKyBkKSkpOwogIGlmIChrICE9PSAwKSB7CiAgICBkbyB7CiAgICAgIGZvciAoYyA9IHUgLSAxOyByLmJsX2NvdW50W2NdID09PSAwOyApCiAgICAgICAgYy0tOwogICAgICByLmJsX2NvdW50W2NdLS0sIHIuYmxfY291bnRbYyArIDFdICs9IDIsIHIuYmxfY291bnRbdV0tLSwgayAtPSAyOwogICAgfSB3aGlsZSAoayA+IDApOwogICAgZm9yIChjID0gdTsgYyAhPT0gMDsgYy0tKQogICAgICBmb3IgKGwgPSByLmJsX2NvdW50W2NdOyBsICE9PSAwOyApCiAgICAgICAgcyA9IHIuaGVhcFstLW9dLCAhKHMgPiBBKSAmJiAoYVtzICogMiArIDFdICE9PSBjICYmIChyLm9wdF9sZW4gKz0gKGMgLSBhW3MgKiAyICsgMV0pICogYVtzICogMl0sIGFbcyAqIDIgKyAxXSA9IGMpLCBsLS0pOwogIH0KfSwgb24gPSAociwgZSwgYSkgPT4gewogIGNvbnN0IEEgPSBuZXcgQXJyYXkoRWEgKyAxKTsKICBsZXQgdCA9IDAsIGksIG47CiAgZm9yIChpID0gMTsgaSA8PSBFYTsgaSsrKQogICAgdCA9IHQgKyBhW2kgLSAxXSA8PCAxLCBBW2ldID0gdDsKICBmb3IgKG4gPSAwOyBuIDw9IGU7IG4rKykgewogICAgbGV0IGYgPSByW24gKiAyICsgMV07CiAgICBmICE9PSAwICYmIChyW24gKiAyXSA9IGZuKEFbZl0rKywgZikpOwogIH0KfSwgWWYgPSAoKSA9PiB7CiAgbGV0IHIsIGUsIGEsIEEsIHQ7CiAgY29uc3QgaSA9IG5ldyBBcnJheShFYSArIDEpOwogIGZvciAoYSA9IDAsIEEgPSAwOyBBIDwgVkEgLSAxOyBBKyspCiAgICBmb3IgKHhBW0FdID0gYSwgciA9IDA7IHIgPCAxIDw8IGJBW0FdOyByKyspCiAgICAgIEkyW2ErK10gPSBBOwogIGZvciAoSTJbYSAtIDFdID0gQSwgdCA9IDAsIEEgPSAwOyBBIDwgMTY7IEErKykKICAgIGZvciAodmVbQV0gPSB0LCByID0gMDsgciA8IDEgPDwgZGVbQV07IHIrKykKICAgICAgQjJbdCsrXSA9IEE7CiAgZm9yICh0ID4+PSA3OyBBIDwgWWE7IEErKykKICAgIGZvciAodmVbQV0gPSB0IDw8IDcsIHIgPSAwOyByIDwgMSA8PCBkZVtBXSAtIDc7IHIrKykKICAgICAgQjJbMjU2ICsgdCsrXSA9IEE7CiAgZm9yIChlID0gMDsgZSA8PSBFYTsgZSsrKQogICAgaVtlXSA9IDA7CiAgZm9yIChyID0gMDsgciA8PSAxNDM7ICkKICAgIHFyW3IgKiAyICsgMV0gPSA4LCByKyssIGlbOF0rKzsKICBmb3IgKDsgciA8PSAyNTU7ICkKICAgIHFyW3IgKiAyICsgMV0gPSA5LCByKyssIGlbOV0rKzsKICBmb3IgKDsgciA8PSAyNzk7ICkKICAgIHFyW3IgKiAyICsgMV0gPSA3LCByKyssIGlbN10rKzsKICBmb3IgKDsgciA8PSAyODc7ICkKICAgIHFyW3IgKiAyICsgMV0gPSA4LCByKyssIGlbOF0rKzsKICBmb3IgKG9uKHFyLCBaMiArIDEsIGkpLCByID0gMDsgciA8IFlhOyByKyspCiAgICBoMltyICogMiArIDFdID0gNSwgaDJbciAqIDJdID0gZm4ociwgNSk7CiAgZW4gPSBuZXcgTWUocXIsIGJBLCBYMiArIDEsIFoyLCBFYSksIEFuID0gbmV3IE1lKGgyLCBkZSwgMCwgWWEsIEVhKSwgdG4gPSBuZXcgTWUobmV3IEFycmF5KDApLCBOZiwgMCwgU0EsIHhmKTsKfSwgdW4gPSAocikgPT4gewogIGxldCBlOwogIGZvciAoZSA9IDA7IGUgPCBaMjsgZSsrKQogICAgci5keW5fbHRyZWVbZSAqIDJdID0gMDsKICBmb3IgKGUgPSAwOyBlIDwgWWE7IGUrKykKICAgIHIuZHluX2R0cmVlW2UgKiAyXSA9IDA7CiAgZm9yIChlID0gMDsgZSA8IFNBOyBlKyspCiAgICByLmJsX3RyZWVbZSAqIDJdID0gMDsKICByLmR5bl9sdHJlZVtEQSAqIDJdID0gMSwgci5vcHRfbGVuID0gci5zdGF0aWNfbGVuID0gMCwgci5zeW1fbmV4dCA9IHIubWF0Y2hlcyA9IDA7Cn0sIGxuID0gKHIpID0+IHsKICByLmJpX3ZhbGlkID4gOCA/IEYyKHIsIHIuYmlfYnVmKSA6IHIuYmlfdmFsaWQgPiAwICYmIChyLnBlbmRpbmdfYnVmW3IucGVuZGluZysrXSA9IHIuYmlfYnVmKSwgci5iaV9idWYgPSAwLCByLmJpX3ZhbGlkID0gMDsKfSwgYXQgPSAociwgZSwgYSwgQSkgPT4gewogIGNvbnN0IHQgPSBlICogMiwgaSA9IGEgKiAyOwogIHJldHVybiByW3RdIDwgcltpXSB8fCByW3RdID09PSByW2ldICYmIEFbZV0gPD0gQVthXTsKfSwgUGUgPSAociwgZSwgYSkgPT4gewogIGNvbnN0IEEgPSByLmhlYXBbYV07CiAgbGV0IHQgPSBhIDw8IDE7CiAgZm9yICg7IHQgPD0gci5oZWFwX2xlbiAmJiAodCA8IHIuaGVhcF9sZW4gJiYgYXQoZSwgci5oZWFwW3QgKyAxXSwgci5oZWFwW3RdLCByLmRlcHRoKSAmJiB0KyssICFhdChlLCBBLCByLmhlYXBbdF0sIHIuZGVwdGgpKTsgKQogICAgci5oZWFwW2FdID0gci5oZWFwW3RdLCBhID0gdCwgdCA8PD0gMTsKICByLmhlYXBbYV0gPSBBOwp9LCBldCA9IChyLCBlLCBhKSA9PiB7CiAgbGV0IEEsIHQsIGkgPSAwLCBuLCBmOwogIGlmIChyLnN5bV9uZXh0ICE9PSAwKQogICAgZG8KICAgICAgQSA9IHIucGVuZGluZ19idWZbci5zeW1fYnVmICsgaSsrXSAmIDI1NSwgQSArPSAoci5wZW5kaW5nX2J1ZltyLnN5bV9idWYgKyBpKytdICYgMjU1KSA8PCA4LCB0ID0gci5wZW5kaW5nX2J1ZltyLnN5bV9idWYgKyBpKytdLCBBID09PSAwID8gT3IociwgdCwgZSkgOiAobiA9IEkyW3RdLCBPcihyLCBuICsgWDIgKyAxLCBlKSwgZiA9IGJBW25dLCBmICE9PSAwICYmICh0IC09IHhBW25dLCBscihyLCB0LCBmKSksIEEtLSwgbiA9IG5uKEEpLCBPcihyLCBuLCBhKSwgZiA9IGRlW25dLCBmICE9PSAwICYmIChBIC09IHZlW25dLCBscihyLCBBLCBmKSkpOwogICAgd2hpbGUgKGkgPCByLnN5bV9uZXh0KTsKICBPcihyLCBEQSwgZSk7Cn0sIGRBID0gKHIsIGUpID0+IHsKICBjb25zdCBhID0gZS5keW5fdHJlZSwgQSA9IGUuc3RhdF9kZXNjLnN0YXRpY190cmVlLCB0ID0gZS5zdGF0X2Rlc2MuaGFzX3N0cmVlLCBpID0gZS5zdGF0X2Rlc2MuZWxlbXM7CiAgbGV0IG4sIGYsIHUgPSAtMSwgbzsKICBmb3IgKHIuaGVhcF9sZW4gPSAwLCByLmhlYXBfbWF4ID0gS2ksIG4gPSAwOyBuIDwgaTsgbisrKQogICAgYVtuICogMl0gIT09IDAgPyAoci5oZWFwWysrci5oZWFwX2xlbl0gPSB1ID0gbiwgci5kZXB0aFtuXSA9IDApIDogYVtuICogMiArIDFdID0gMDsKICBmb3IgKDsgci5oZWFwX2xlbiA8IDI7ICkKICAgIG8gPSByLmhlYXBbKytyLmhlYXBfbGVuXSA9IHUgPCAyID8gKyt1IDogMCwgYVtvICogMl0gPSAxLCByLmRlcHRoW29dID0gMCwgci5vcHRfbGVuLS0sIHQgJiYgKHIuc3RhdGljX2xlbiAtPSBBW28gKiAyICsgMV0pOwogIGZvciAoZS5tYXhfY29kZSA9IHUsIG4gPSByLmhlYXBfbGVuID4+IDE7IG4gPj0gMTsgbi0tKQogICAgUGUociwgYSwgbik7CiAgbyA9IGk7CiAgZG8KICAgIG4gPSByLmhlYXBbCiAgICAgIDEKICAgICAgLypTTUFMTEVTVCovCiAgICBdLCByLmhlYXBbCiAgICAgIDEKICAgICAgLypTTUFMTEVTVCovCiAgICBdID0gci5oZWFwW3IuaGVhcF9sZW4tLV0sIFBlKAogICAgICByLAogICAgICBhLAogICAgICAxCiAgICAgIC8qU01BTExFU1QqLwogICAgKSwgZiA9IHIuaGVhcFsKICAgICAgMQogICAgICAvKlNNQUxMRVNUKi8KICAgIF0sIHIuaGVhcFstLXIuaGVhcF9tYXhdID0gbiwgci5oZWFwWy0tci5oZWFwX21heF0gPSBmLCBhW28gKiAyXSA9IGFbbiAqIDJdICsgYVtmICogMl0sIHIuZGVwdGhbb10gPSAoci5kZXB0aFtuXSA+PSByLmRlcHRoW2ZdID8gci5kZXB0aFtuXSA6IHIuZGVwdGhbZl0pICsgMSwgYVtuICogMiArIDFdID0gYVtmICogMiArIDFdID0gbywgci5oZWFwWwogICAgICAxCiAgICAgIC8qU01BTExFU1QqLwogICAgXSA9IG8rKywgUGUoCiAgICAgIHIsCiAgICAgIGEsCiAgICAgIDEKICAgICAgLypTTUFMTEVTVCovCiAgICApOwogIHdoaWxlIChyLmhlYXBfbGVuID49IDIpOwogIHIuaGVhcFstLXIuaGVhcF9tYXhdID0gci5oZWFwWwogICAgMQogICAgLypTTUFMTEVTVCovCiAgXSwgUGYociwgZSksIG9uKGEsIHUsIHIuYmxfY291bnQpOwp9LCBBdCA9IChyLCBlLCBhKSA9PiB7CiAgbGV0IEEsIHQgPSAtMSwgaSwgbiA9IGVbMCAqIDIgKyAxXSwgZiA9IDAsIHUgPSA3LCBvID0gNDsKICBmb3IgKG4gPT09IDAgJiYgKHUgPSAxMzgsIG8gPSAzKSwgZVsoYSArIDEpICogMiArIDFdID0gNjU1MzUsIEEgPSAwOyBBIDw9IGE7IEErKykKICAgIGkgPSBuLCBuID0gZVsoQSArIDEpICogMiArIDFdLCAhKCsrZiA8IHUgJiYgaSA9PT0gbikgJiYgKGYgPCBvID8gci5ibF90cmVlW2kgKiAyXSArPSBmIDogaSAhPT0gMCA/IChpICE9PSB0ICYmIHIuYmxfdHJlZVtpICogMl0rKywgci5ibF90cmVlW3FpICogMl0rKykgOiBmIDw9IDEwID8gci5ibF90cmVlWyRpICogMl0rKyA6IHIuYmxfdHJlZVtybiAqIDJdKyssIGYgPSAwLCB0ID0gaSwgbiA9PT0gMCA/ICh1ID0gMTM4LCBvID0gMykgOiBpID09PSBuID8gKHUgPSA2LCBvID0gMykgOiAodSA9IDcsIG8gPSA0KSk7Cn0sIHR0ID0gKHIsIGUsIGEpID0+IHsKICBsZXQgQSwgdCA9IC0xLCBpLCBuID0gZVswICogMiArIDFdLCBmID0gMCwgdSA9IDcsIG8gPSA0OwogIGZvciAobiA9PT0gMCAmJiAodSA9IDEzOCwgbyA9IDMpLCBBID0gMDsgQSA8PSBhOyBBKyspCiAgICBpZiAoaSA9IG4sIG4gPSBlWyhBICsgMSkgKiAyICsgMV0sICEoKytmIDwgdSAmJiBpID09PSBuKSkgewogICAgICBpZiAoZiA8IG8pCiAgICAgICAgZG8KICAgICAgICAgIE9yKHIsIGksIHIuYmxfdHJlZSk7CiAgICAgICAgd2hpbGUgKC0tZiAhPT0gMCk7CiAgICAgIGVsc2UgaSAhPT0gMCA/IChpICE9PSB0ICYmIChPcihyLCBpLCByLmJsX3RyZWUpLCBmLS0pLCBPcihyLCBxaSwgci5ibF90cmVlKSwgbHIociwgZiAtIDMsIDIpKSA6IGYgPD0gMTAgPyAoT3IociwgJGksIHIuYmxfdHJlZSksIGxyKHIsIGYgLSAzLCAzKSkgOiAoT3Iociwgcm4sIHIuYmxfdHJlZSksIGxyKHIsIGYgLSAxMSwgNykpOwogICAgICBmID0gMCwgdCA9IGksIG4gPT09IDAgPyAodSA9IDEzOCwgbyA9IDMpIDogaSA9PT0gbiA/ICh1ID0gNiwgbyA9IDMpIDogKHUgPSA3LCBvID0gNCk7CiAgICB9Cn0sIE9mID0gKHIpID0+IHsKICBsZXQgZTsKICBmb3IgKEF0KHIsIHIuZHluX2x0cmVlLCByLmxfZGVzYy5tYXhfY29kZSksIEF0KHIsIHIuZHluX2R0cmVlLCByLmRfZGVzYy5tYXhfY29kZSksIGRBKHIsIHIuYmxfZGVzYyksIGUgPSBTQSAtIDE7IGUgPj0gMyAmJiByLmJsX3RyZWVbYW5bZV0gKiAyICsgMV0gPT09IDA7IGUtLSkKICAgIDsKICByZXR1cm4gci5vcHRfbGVuICs9IDMgKiAoZSArIDEpICsgNSArIDUgKyA0LCBlOwp9LCBVZiA9IChyLCBlLCBhLCBBKSA9PiB7CiAgbGV0IHQ7CiAgZm9yIChscihyLCBlIC0gMjU3LCA1KSwgbHIociwgYSAtIDEsIDUpLCBscihyLCBBIC0gNCwgNCksIHQgPSAwOyB0IDwgQTsgdCsrKQogICAgbHIociwgci5ibF90cmVlW2FuW3RdICogMiArIDFdLCAzKTsKICB0dChyLCByLmR5bl9sdHJlZSwgZSAtIDEpLCB0dChyLCByLmR5bl9kdHJlZSwgYSAtIDEpOwp9LCBqZiA9IChyKSA9PiB7CiAgbGV0IGUgPSA0MDkzNjI0NDQ3LCBhOwogIGZvciAoYSA9IDA7IGEgPD0gMzE7IGErKywgZSA+Pj49IDEpCiAgICBpZiAoZSAmIDEgJiYgci5keW5fbHRyZWVbYSAqIDJdICE9PSAwKQogICAgICByZXR1cm4gJEE7CiAgaWYgKHIuZHluX2x0cmVlWzkgKiAyXSAhPT0gMCB8fCByLmR5bl9sdHJlZVsxMCAqIDJdICE9PSAwIHx8IHIuZHluX2x0cmVlWzEzICogMl0gIT09IDApCiAgICByZXR1cm4gcnQ7CiAgZm9yIChhID0gMzI7IGEgPCBYMjsgYSsrKQogICAgaWYgKHIuZHluX2x0cmVlW2EgKiAyXSAhPT0gMCkKICAgICAgcmV0dXJuIHJ0OwogIHJldHVybiAkQTsKfTsKbGV0IGl0ID0gITE7CmNvbnN0IFFmID0gKHIpID0+IHsKICBpdCB8fCAoWWYoKSwgaXQgPSAhMCksIHIubF9kZXNjID0gbmV3IFRlKHIuZHluX2x0cmVlLCBlbiksIHIuZF9kZXNjID0gbmV3IFRlKHIuZHluX2R0cmVlLCBBbiksIHIuYmxfZGVzYyA9IG5ldyBUZShyLmJsX3RyZWUsIHRuKSwgci5iaV9idWYgPSAwLCByLmJpX3ZhbGlkID0gMCwgdW4ocik7Cn0sIGNuID0gKHIsIGUsIGEsIEEpID0+IHsKICBscihyLCAoUmYgPDwgMSkgKyAoQSA/IDEgOiAwKSwgMyksIGxuKHIpLCBGMihyLCBhKSwgRjIociwgfmEpLCBhICYmIHIucGVuZGluZ19idWYuc2V0KHIud2luZG93LnN1YmFycmF5KGUsIGUgKyBhKSwgci5wZW5kaW5nKSwgci5wZW5kaW5nICs9IGE7Cn0sIEpmID0gKHIpID0+IHsKICBscihyLCBMaSA8PCAxLCAzKSwgT3IociwgREEsIHFyKSwgVGYocik7Cn0sIEhmID0gKHIsIGUsIGEsIEEpID0+IHsKICBsZXQgdCwgaSwgbiA9IDA7CiAgci5sZXZlbCA+IDAgPyAoci5zdHJtLmRhdGFfdHlwZSA9PT0gWGYgJiYgKHIuc3RybS5kYXRhX3R5cGUgPSBqZihyKSksIGRBKHIsIHIubF9kZXNjKSwgZEEociwgci5kX2Rlc2MpLCBuID0gT2YociksIHQgPSByLm9wdF9sZW4gKyAzICsgNyA+Pj4gMywgaSA9IHIuc3RhdGljX2xlbiArIDMgKyA3ID4+PiAzLCBpIDw9IHQgJiYgKHQgPSBpKSkgOiB0ID0gaSA9IGEgKyA1LCBhICsgNCA8PSB0ICYmIGUgIT09IC0xID8gY24ociwgZSwgYSwgQSkgOiByLnN0cmF0ZWd5ID09PSBHZiB8fCBpID09PSB0ID8gKGxyKHIsIChMaSA8PCAxKSArIChBID8gMSA6IDApLCAzKSwgZXQociwgcXIsIGgyKSkgOiAobHIociwgKFZmIDw8IDEpICsgKEEgPyAxIDogMCksIDMpLCBVZihyLCByLmxfZGVzYy5tYXhfY29kZSArIDEsIHIuZF9kZXNjLm1heF9jb2RlICsgMSwgbiArIDEpLCBldChyLCByLmR5bl9sdHJlZSwgci5keW5fZHRyZWUpKSwgdW4ociksIEEgJiYgbG4ocik7Cn0sIHpmID0gKHIsIGUsIGEpID0+IChyLnBlbmRpbmdfYnVmW3Iuc3ltX2J1ZiArIHIuc3ltX25leHQrK10gPSBlLCByLnBlbmRpbmdfYnVmW3Iuc3ltX2J1ZiArIHIuc3ltX25leHQrK10gPSBlID4+IDgsIHIucGVuZGluZ19idWZbci5zeW1fYnVmICsgci5zeW1fbmV4dCsrXSA9IGEsIGUgPT09IDAgPyByLmR5bl9sdHJlZVthICogMl0rKyA6IChyLm1hdGNoZXMrKywgZS0tLCByLmR5bl9sdHJlZVsoSTJbYV0gKyBYMiArIDEpICogMl0rKywgci5keW5fZHRyZWVbbm4oZSkgKiAyXSsrKSwgci5zeW1fbmV4dCA9PT0gci5zeW1fZW5kKTsKdmFyIExmID0gUWYsIEtmID0gY24sIHFmID0gSGYsICRmID0gemYsIHJvID0gSmYsIGFvID0gewogIF90cl9pbml0OiBMZiwKICBfdHJfc3RvcmVkX2Jsb2NrOiBLZiwKICBfdHJfZmx1c2hfYmxvY2s6IHFmLAogIF90cl90YWxseTogJGYsCiAgX3RyX2FsaWduOiBybwp9Owpjb25zdCBlbyA9IChyLCBlLCBhLCBBKSA9PiB7CiAgbGV0IHQgPSByICYgNjU1MzUgfCAwLCBpID0gciA+Pj4gMTYgJiA2NTUzNSB8IDAsIG4gPSAwOwogIGZvciAoOyBhICE9PSAwOyApIHsKICAgIG4gPSBhID4gMmUzID8gMmUzIDogYSwgYSAtPSBuOwogICAgZG8KICAgICAgdCA9IHQgKyBlW0ErK10gfCAwLCBpID0gaSArIHQgfCAwOwogICAgd2hpbGUgKC0tbik7CiAgICB0ICU9IDY1NTIxLCBpICU9IDY1NTIxOwogIH0KICByZXR1cm4gdCB8IGkgPDwgMTYgfCAwOwp9Owp2YXIgQzIgPSBlbzsKY29uc3QgQW8gPSAoKSA9PiB7CiAgbGV0IHIsIGUgPSBbXTsKICBmb3IgKHZhciBhID0gMDsgYSA8IDI1NjsgYSsrKSB7CiAgICByID0gYTsKICAgIGZvciAodmFyIEEgPSAwOyBBIDwgODsgQSsrKQogICAgICByID0gciAmIDEgPyAzOTg4MjkyMzg0IF4gciA+Pj4gMSA6IHIgPj4+IDE7CiAgICBlW2FdID0gcjsKICB9CiAgcmV0dXJuIGU7Cn0sIHRvID0gbmV3IFVpbnQzMkFycmF5KEFvKCkpLCBpbyA9IChyLCBlLCBhLCBBKSA9PiB7CiAgY29uc3QgdCA9IHRvLCBpID0gQSArIGE7CiAgciBePSAtMTsKICBmb3IgKGxldCBuID0gQTsgbiA8IGk7IG4rKykKICAgIHIgPSByID4+PiA4IF4gdFsociBeIGVbbl0pICYgMjU1XTsKICByZXR1cm4gciBeIC0xOwp9Owp2YXIgcTAgPSBpbywgSWEgPSB7CiAgMjogIm5lZWQgZGljdGlvbmFyeSIsCiAgLyogWl9ORUVEX0RJQ1QgICAgICAgMiAgKi8KICAxOiAic3RyZWFtIGVuZCIsCiAgLyogWl9TVFJFQU1fRU5EICAgICAgMSAgKi8KICAwOiAiIiwKICAvKiBaX09LICAgICAgICAgICAgICAwICAqLwogICItMSI6ICJmaWxlIGVycm9yIiwKICAvKiBaX0VSUk5PICAgICAgICAgKC0xKSAqLwogICItMiI6ICJzdHJlYW0gZXJyb3IiLAogIC8qIFpfU1RSRUFNX0VSUk9SICAoLTIpICovCiAgIi0zIjogImRhdGEgZXJyb3IiLAogIC8qIFpfREFUQV9FUlJPUiAgICAoLTMpICovCiAgIi00IjogImluc3VmZmljaWVudCBtZW1vcnkiLAogIC8qIFpfTUVNX0VSUk9SICAgICAoLTQpICovCiAgIi01IjogImJ1ZmZlciBlcnJvciIsCiAgLyogWl9CVUZfRVJST1IgICAgICgtNSkgKi8KICAiLTYiOiAiaW5jb21wYXRpYmxlIHZlcnNpb24iCiAgLyogWl9WRVJTSU9OX0VSUk9SICgtNikgKi8KfSwgSWUgPSB7CiAgLyogQWxsb3dlZCBmbHVzaCB2YWx1ZXM7IHNlZSBkZWZsYXRlKCkgYW5kIGluZmxhdGUoKSBiZWxvdyBmb3IgZGV0YWlscyAqLwogIFpfTk9fRkxVU0g6IDAsCiAgWl9QQVJUSUFMX0ZMVVNIOiAxLAogIFpfU1lOQ19GTFVTSDogMiwKICBaX0ZVTExfRkxVU0g6IDMsCiAgWl9GSU5JU0g6IDQsCiAgWl9CTE9DSzogNSwKICBaX1RSRUVTOiA2LAogIC8qIFJldHVybiBjb2RlcyBmb3IgdGhlIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gZnVuY3Rpb25zLiBOZWdhdGl2ZSB2YWx1ZXMKICAqIGFyZSBlcnJvcnMsIHBvc2l0aXZlIHZhbHVlcyBhcmUgdXNlZCBmb3Igc3BlY2lhbCBidXQgbm9ybWFsIGV2ZW50cy4KICAqLwogIFpfT0s6IDAsCiAgWl9TVFJFQU1fRU5EOiAxLAogIFpfTkVFRF9ESUNUOiAyLAogIFpfU1RSRUFNX0VSUk9SOiAtMiwKICBaX0RBVEFfRVJST1I6IC0zLAogIFpfTUVNX0VSUk9SOiAtNCwKICBaX0JVRl9FUlJPUjogLTUsCiAgWl9ERUZBVUxUX0NPTVBSRVNTSU9OOiAtMSwKICBaX0ZJTFRFUkVEOiAxLAogIFpfSFVGRk1BTl9PTkxZOiAyLAogIFpfUkxFOiAzLAogIFpfRklYRUQ6IDQsCiAgWl9ERUZBVUxUX1NUUkFURUdZOiAwLAogIC8vWl9BU0NJSTogICAgICAgICAgICAgICAgMSwgLy8gPSBaX1RFWFQgKGRlcHJlY2F0ZWQpCiAgWl9VTktOT1dOOiAyLAogIC8qIFRoZSBkZWZsYXRlIGNvbXByZXNzaW9uIG1ldGhvZCAqLwogIFpfREVGTEFURUQ6IDgKICAvL1pfTlVMTDogICAgICAgICAgICAgICAgIG51bGwgLy8gVXNlIC0xIG9yIG51bGwgaW5saW5lLCBkZXBlbmRpbmcgb24gdmFyIHR5cGUKfTsKY29uc3QgeyBfdHJfaW5pdDogbm8sIF90cl9zdG9yZWRfYmxvY2s6IGhBLCBfdHJfZmx1c2hfYmxvY2s6IGZvLCBfdHJfdGFsbHk6IGJhLCBfdHJfYWxpZ246IG9vIH0gPSBhbywgewogIFpfTk9fRkxVU0g6IGRhLAogIFpfUEFSVElBTF9GTFVTSDogdW8sCiAgWl9GVUxMX0ZMVVNIOiBsbywKICBaX0ZJTklTSDogQnIsCiAgWl9CTE9DSzogbnQsCiAgWl9PSzogYXIsCiAgWl9TVFJFQU1fRU5EOiBmdCwKICBaX1NUUkVBTV9FUlJPUjoganIsCiAgWl9EQVRBX0VSUk9SOiBjbywKICBaX0JVRl9FUlJPUjogWWUsCiAgWl9ERUZBVUxUX0NPTVBSRVNTSU9OOiBzbywKICBaX0ZJTFRFUkVEOiBibywKICBaX0hVRkZNQU5fT05MWTogUDIsCiAgWl9STEU6IGhvLAogIFpfRklYRUQ6IHZvLAogIFpfREVGQVVMVF9TVFJBVEVHWToga28sCiAgWl9VTktOT1dOOiBnbywKICBaX0RFRkxBVEVEOiBGZQp9ID0gSWUsIG1vID0gOSwgcG8gPSAxNSwgd28gPSA4LCB5byA9IDI5LCBFbyA9IDI1NiwgdkEgPSBFbyArIDEgKyB5bywgWm8gPSAzMCwgQm8gPSAxOSwgSW8gPSAyICogdkEgKyAxLCBGbyA9IDE1LCB5MCA9IDMsIHVhID0gMjU4LCBRciA9IHVhICsgeTAgKyAxLCBDbyA9IDMyLCBqYSA9IDQyLCBOQSA9IDU3LCBrQSA9IDY5LCBnQSA9IDczLCBtQSA9IDkxLCBwQSA9IDEwMywgWmEgPSAxMTMsIGMyID0gNjY2LCBmciA9IDEsICRhID0gMiwgRmEgPSAzLCByMiA9IDQsIFdvID0gMywgQmEgPSAociwgZSkgPT4gKHIubXNnID0gSWFbZV0sIGUpLCBvdCA9IChyKSA9PiByICogMiAtIChyID4gNCA/IDkgOiAwKSwgb2EgPSAocikgPT4gewogIGxldCBlID0gci5sZW5ndGg7CiAgZm9yICg7IC0tZSA+PSAwOyApCiAgICByW2VdID0gMDsKfSwgX28gPSAocikgPT4gewogIGxldCBlLCBhLCBBLCB0ID0gci53X3NpemU7CiAgZSA9IHIuaGFzaF9zaXplLCBBID0gZTsKICBkbwogICAgYSA9IHIuaGVhZFstLUFdLCByLmhlYWRbQV0gPSBhID49IHQgPyBhIC0gdCA6IDA7CiAgd2hpbGUgKC0tZSk7CiAgZSA9IHQsIEEgPSBlOwogIGRvCiAgICBhID0gci5wcmV2Wy0tQV0sIHIucHJldltBXSA9IGEgPj0gdCA/IGEgLSB0IDogMDsKICB3aGlsZSAoLS1lKTsKfTsKbGV0IEdvID0gKHIsIGUsIGEpID0+IChlIDw8IHIuaGFzaF9zaGlmdCBeIGEpICYgci5oYXNoX21hc2ssIGhhID0gR287CmNvbnN0IHZyID0gKHIpID0+IHsKICBjb25zdCBlID0gci5zdGF0ZTsKICBsZXQgYSA9IGUucGVuZGluZzsKICBhID4gci5hdmFpbF9vdXQgJiYgKGEgPSByLmF2YWlsX291dCksIGEgIT09IDAgJiYgKHIub3V0cHV0LnNldChlLnBlbmRpbmdfYnVmLnN1YmFycmF5KGUucGVuZGluZ19vdXQsIGUucGVuZGluZ19vdXQgKyBhKSwgci5uZXh0X291dCksIHIubmV4dF9vdXQgKz0gYSwgZS5wZW5kaW5nX291dCArPSBhLCByLnRvdGFsX291dCArPSBhLCByLmF2YWlsX291dCAtPSBhLCBlLnBlbmRpbmcgLT0gYSwgZS5wZW5kaW5nID09PSAwICYmIChlLnBlbmRpbmdfb3V0ID0gMCkpOwp9LCB3ciA9IChyLCBlKSA9PiB7CiAgZm8ociwgci5ibG9ja19zdGFydCA+PSAwID8gci5ibG9ja19zdGFydCA6IC0xLCByLnN0cnN0YXJ0IC0gci5ibG9ja19zdGFydCwgZSksIHIuYmxvY2tfc3RhcnQgPSByLnN0cnN0YXJ0LCB2cihyLnN0cm0pOwp9LCBHMCA9IChyLCBlKSA9PiB7CiAgci5wZW5kaW5nX2J1ZltyLnBlbmRpbmcrK10gPSBlOwp9LCBpMiA9IChyLCBlKSA9PiB7CiAgci5wZW5kaW5nX2J1ZltyLnBlbmRpbmcrK10gPSBlID4+PiA4ICYgMjU1LCByLnBlbmRpbmdfYnVmW3IucGVuZGluZysrXSA9IGUgJiAyNTU7Cn0sIHdBID0gKHIsIGUsIGEsIEEpID0+IHsKICBsZXQgdCA9IHIuYXZhaWxfaW47CiAgcmV0dXJuIHQgPiBBICYmICh0ID0gQSksIHQgPT09IDAgPyAwIDogKHIuYXZhaWxfaW4gLT0gdCwgZS5zZXQoci5pbnB1dC5zdWJhcnJheShyLm5leHRfaW4sIHIubmV4dF9pbiArIHQpLCBhKSwgci5zdGF0ZS53cmFwID09PSAxID8gci5hZGxlciA9IEMyKHIuYWRsZXIsIGUsIHQsIGEpIDogci5zdGF0ZS53cmFwID09PSAyICYmIChyLmFkbGVyID0gcTAoci5hZGxlciwgZSwgdCwgYSkpLCByLm5leHRfaW4gKz0gdCwgci50b3RhbF9pbiArPSB0LCB0KTsKfSwgc24gPSAociwgZSkgPT4gewogIGxldCBhID0gci5tYXhfY2hhaW5fbGVuZ3RoLCBBID0gci5zdHJzdGFydCwgdCwgaSwgbiA9IHIucHJldl9sZW5ndGgsIGYgPSByLm5pY2VfbWF0Y2g7CiAgY29uc3QgdSA9IHIuc3Ryc3RhcnQgPiByLndfc2l6ZSAtIFFyID8gci5zdHJzdGFydCAtIChyLndfc2l6ZSAtIFFyKSA6IDAsIG8gPSByLndpbmRvdywgbCA9IHIud19tYXNrLCBzID0gci5wcmV2LCBjID0gci5zdHJzdGFydCArIHVhOwogIGxldCBkID0gb1tBICsgbiAtIDFdLCB2ID0gb1tBICsgbl07CiAgci5wcmV2X2xlbmd0aCA+PSByLmdvb2RfbWF0Y2ggJiYgKGEgPj49IDIpLCBmID4gci5sb29rYWhlYWQgJiYgKGYgPSByLmxvb2thaGVhZCk7CiAgZG8KICAgIGlmICh0ID0gZSwgIShvW3QgKyBuXSAhPT0gdiB8fCBvW3QgKyBuIC0gMV0gIT09IGQgfHwgb1t0XSAhPT0gb1tBXSB8fCBvWysrdF0gIT09IG9bQSArIDFdKSkgewogICAgICBBICs9IDIsIHQrKzsKICAgICAgZG8KICAgICAgICA7CiAgICAgIHdoaWxlIChvWysrQV0gPT09IG9bKyt0XSAmJiBvWysrQV0gPT09IG9bKyt0XSAmJiBvWysrQV0gPT09IG9bKyt0XSAmJiBvWysrQV0gPT09IG9bKyt0XSAmJiBvWysrQV0gPT09IG9bKyt0XSAmJiBvWysrQV0gPT09IG9bKyt0XSAmJiBvWysrQV0gPT09IG9bKyt0XSAmJiBvWysrQV0gPT09IG9bKyt0XSAmJiBBIDwgYyk7CiAgICAgIGlmIChpID0gdWEgLSAoYyAtIEEpLCBBID0gYyAtIHVhLCBpID4gbikgewogICAgICAgIGlmIChyLm1hdGNoX3N0YXJ0ID0gZSwgbiA9IGksIGkgPj0gZikKICAgICAgICAgIGJyZWFrOwogICAgICAgIGQgPSBvW0EgKyBuIC0gMV0sIHYgPSBvW0EgKyBuXTsKICAgICAgfQogICAgfQogIHdoaWxlICgoZSA9IHNbZSAmIGxdKSA+IHUgJiYgLS1hICE9PSAwKTsKICByZXR1cm4gbiA8PSByLmxvb2thaGVhZCA/IG4gOiByLmxvb2thaGVhZDsKfSwgUWEgPSAocikgPT4gewogIGNvbnN0IGUgPSByLndfc2l6ZTsKICBsZXQgYSwgQSwgdDsKICBkbyB7CiAgICBpZiAoQSA9IHIud2luZG93X3NpemUgLSByLmxvb2thaGVhZCAtIHIuc3Ryc3RhcnQsIHIuc3Ryc3RhcnQgPj0gZSArIChlIC0gUXIpICYmIChyLndpbmRvdy5zZXQoci53aW5kb3cuc3ViYXJyYXkoZSwgZSArIGUgLSBBKSwgMCksIHIubWF0Y2hfc3RhcnQgLT0gZSwgci5zdHJzdGFydCAtPSBlLCByLmJsb2NrX3N0YXJ0IC09IGUsIHIuaW5zZXJ0ID4gci5zdHJzdGFydCAmJiAoci5pbnNlcnQgPSByLnN0cnN0YXJ0KSwgX28ociksIEEgKz0gZSksIHIuc3RybS5hdmFpbF9pbiA9PT0gMCkKICAgICAgYnJlYWs7CiAgICBpZiAoYSA9IHdBKHIuc3RybSwgci53aW5kb3csIHIuc3Ryc3RhcnQgKyByLmxvb2thaGVhZCwgQSksIHIubG9va2FoZWFkICs9IGEsIHIubG9va2FoZWFkICsgci5pbnNlcnQgPj0geTApCiAgICAgIGZvciAodCA9IHIuc3Ryc3RhcnQgLSByLmluc2VydCwgci5pbnNfaCA9IHIud2luZG93W3RdLCByLmluc19oID0gaGEociwgci5pbnNfaCwgci53aW5kb3dbdCArIDFdKTsgci5pbnNlcnQgJiYgKHIuaW5zX2ggPSBoYShyLCByLmluc19oLCByLndpbmRvd1t0ICsgeTAgLSAxXSksIHIucHJldlt0ICYgci53X21hc2tdID0gci5oZWFkW3IuaW5zX2hdLCByLmhlYWRbci5pbnNfaF0gPSB0LCB0KyssIHIuaW5zZXJ0LS0sICEoci5sb29rYWhlYWQgKyByLmluc2VydCA8IHkwKSk7ICkKICAgICAgICA7CiAgfSB3aGlsZSAoci5sb29rYWhlYWQgPCBRciAmJiByLnN0cm0uYXZhaWxfaW4gIT09IDApOwp9LCBibiA9IChyLCBlKSA9PiB7CiAgbGV0IGEgPSByLnBlbmRpbmdfYnVmX3NpemUgLSA1ID4gci53X3NpemUgPyByLndfc2l6ZSA6IHIucGVuZGluZ19idWZfc2l6ZSAtIDUsIEEsIHQsIGksIG4gPSAwLCBmID0gci5zdHJtLmF2YWlsX2luOwogIGRvIHsKICAgIGlmIChBID0gNjU1MzUsIGkgPSByLmJpX3ZhbGlkICsgNDIgPj4gMywgci5zdHJtLmF2YWlsX291dCA8IGkgfHwgKGkgPSByLnN0cm0uYXZhaWxfb3V0IC0gaSwgdCA9IHIuc3Ryc3RhcnQgLSByLmJsb2NrX3N0YXJ0LCBBID4gdCArIHIuc3RybS5hdmFpbF9pbiAmJiAoQSA9IHQgKyByLnN0cm0uYXZhaWxfaW4pLCBBID4gaSAmJiAoQSA9IGkpLCBBIDwgYSAmJiAoQSA9PT0gMCAmJiBlICE9PSBCciB8fCBlID09PSBkYSB8fCBBICE9PSB0ICsgci5zdHJtLmF2YWlsX2luKSkpCiAgICAgIGJyZWFrOwogICAgbiA9IGUgPT09IEJyICYmIEEgPT09IHQgKyByLnN0cm0uYXZhaWxfaW4gPyAxIDogMCwgaEEociwgMCwgMCwgbiksIHIucGVuZGluZ19idWZbci5wZW5kaW5nIC0gNF0gPSBBLCByLnBlbmRpbmdfYnVmW3IucGVuZGluZyAtIDNdID0gQSA+PiA4LCByLnBlbmRpbmdfYnVmW3IucGVuZGluZyAtIDJdID0gfkEsIHIucGVuZGluZ19idWZbci5wZW5kaW5nIC0gMV0gPSB+QSA+PiA4LCB2cihyLnN0cm0pLCB0ICYmICh0ID4gQSAmJiAodCA9IEEpLCByLnN0cm0ub3V0cHV0LnNldChyLndpbmRvdy5zdWJhcnJheShyLmJsb2NrX3N0YXJ0LCByLmJsb2NrX3N0YXJ0ICsgdCksIHIuc3RybS5uZXh0X291dCksIHIuc3RybS5uZXh0X291dCArPSB0LCByLnN0cm0uYXZhaWxfb3V0IC09IHQsIHIuc3RybS50b3RhbF9vdXQgKz0gdCwgci5ibG9ja19zdGFydCArPSB0LCBBIC09IHQpLCBBICYmICh3QShyLnN0cm0sIHIuc3RybS5vdXRwdXQsIHIuc3RybS5uZXh0X291dCwgQSksIHIuc3RybS5uZXh0X291dCArPSBBLCByLnN0cm0uYXZhaWxfb3V0IC09IEEsIHIuc3RybS50b3RhbF9vdXQgKz0gQSk7CiAgfSB3aGlsZSAobiA9PT0gMCk7CiAgcmV0dXJuIGYgLT0gci5zdHJtLmF2YWlsX2luLCBmICYmIChmID49IHIud19zaXplID8gKHIubWF0Y2hlcyA9IDIsIHIud2luZG93LnNldChyLnN0cm0uaW5wdXQuc3ViYXJyYXkoci5zdHJtLm5leHRfaW4gLSByLndfc2l6ZSwgci5zdHJtLm5leHRfaW4pLCAwKSwgci5zdHJzdGFydCA9IHIud19zaXplLCByLmluc2VydCA9IHIuc3Ryc3RhcnQpIDogKHIud2luZG93X3NpemUgLSByLnN0cnN0YXJ0IDw9IGYgJiYgKHIuc3Ryc3RhcnQgLT0gci53X3NpemUsIHIud2luZG93LnNldChyLndpbmRvdy5zdWJhcnJheShyLndfc2l6ZSwgci53X3NpemUgKyByLnN0cnN0YXJ0KSwgMCksIHIubWF0Y2hlcyA8IDIgJiYgci5tYXRjaGVzKyssIHIuaW5zZXJ0ID4gci5zdHJzdGFydCAmJiAoci5pbnNlcnQgPSByLnN0cnN0YXJ0KSksIHIud2luZG93LnNldChyLnN0cm0uaW5wdXQuc3ViYXJyYXkoci5zdHJtLm5leHRfaW4gLSBmLCByLnN0cm0ubmV4dF9pbiksIHIuc3Ryc3RhcnQpLCByLnN0cnN0YXJ0ICs9IGYsIHIuaW5zZXJ0ICs9IGYgPiByLndfc2l6ZSAtIHIuaW5zZXJ0ID8gci53X3NpemUgLSByLmluc2VydCA6IGYpLCByLmJsb2NrX3N0YXJ0ID0gci5zdHJzdGFydCksIHIuaGlnaF93YXRlciA8IHIuc3Ryc3RhcnQgJiYgKHIuaGlnaF93YXRlciA9IHIuc3Ryc3RhcnQpLCBuID8gcjIgOiBlICE9PSBkYSAmJiBlICE9PSBCciAmJiByLnN0cm0uYXZhaWxfaW4gPT09IDAgJiYgci5zdHJzdGFydCA9PT0gci5ibG9ja19zdGFydCA/ICRhIDogKGkgPSByLndpbmRvd19zaXplIC0gci5zdHJzdGFydCwgci5zdHJtLmF2YWlsX2luID4gaSAmJiByLmJsb2NrX3N0YXJ0ID49IHIud19zaXplICYmIChyLmJsb2NrX3N0YXJ0IC09IHIud19zaXplLCByLnN0cnN0YXJ0IC09IHIud19zaXplLCByLndpbmRvdy5zZXQoci53aW5kb3cuc3ViYXJyYXkoci53X3NpemUsIHIud19zaXplICsgci5zdHJzdGFydCksIDApLCByLm1hdGNoZXMgPCAyICYmIHIubWF0Y2hlcysrLCBpICs9IHIud19zaXplLCByLmluc2VydCA+IHIuc3Ryc3RhcnQgJiYgKHIuaW5zZXJ0ID0gci5zdHJzdGFydCkpLCBpID4gci5zdHJtLmF2YWlsX2luICYmIChpID0gci5zdHJtLmF2YWlsX2luKSwgaSAmJiAod0Eoci5zdHJtLCByLndpbmRvdywgci5zdHJzdGFydCwgaSksIHIuc3Ryc3RhcnQgKz0gaSwgci5pbnNlcnQgKz0gaSA+IHIud19zaXplIC0gci5pbnNlcnQgPyByLndfc2l6ZSAtIHIuaW5zZXJ0IDogaSksIHIuaGlnaF93YXRlciA8IHIuc3Ryc3RhcnQgJiYgKHIuaGlnaF93YXRlciA9IHIuc3Ryc3RhcnQpLCBpID0gci5iaV92YWxpZCArIDQyID4+IDMsIGkgPSByLnBlbmRpbmdfYnVmX3NpemUgLSBpID4gNjU1MzUgPyA2NTUzNSA6IHIucGVuZGluZ19idWZfc2l6ZSAtIGksIGEgPSBpID4gci53X3NpemUgPyByLndfc2l6ZSA6IGksIHQgPSByLnN0cnN0YXJ0IC0gci5ibG9ja19zdGFydCwgKHQgPj0gYSB8fCAodCB8fCBlID09PSBCcikgJiYgZSAhPT0gZGEgJiYgci5zdHJtLmF2YWlsX2luID09PSAwICYmIHQgPD0gaSkgJiYgKEEgPSB0ID4gaSA/IGkgOiB0LCBuID0gZSA9PT0gQnIgJiYgci5zdHJtLmF2YWlsX2luID09PSAwICYmIEEgPT09IHQgPyAxIDogMCwgaEEociwgci5ibG9ja19zdGFydCwgQSwgbiksIHIuYmxvY2tfc3RhcnQgKz0gQSwgdnIoci5zdHJtKSksIG4gPyBGYSA6IGZyKTsKfSwgT2UgPSAociwgZSkgPT4gewogIGxldCBhLCBBOwogIGZvciAoOyA7ICkgewogICAgaWYgKHIubG9va2FoZWFkIDwgUXIpIHsKICAgICAgaWYgKFFhKHIpLCByLmxvb2thaGVhZCA8IFFyICYmIGUgPT09IGRhKQogICAgICAgIHJldHVybiBmcjsKICAgICAgaWYgKHIubG9va2FoZWFkID09PSAwKQogICAgICAgIGJyZWFrOwogICAgfQogICAgaWYgKGEgPSAwLCByLmxvb2thaGVhZCA+PSB5MCAmJiAoci5pbnNfaCA9IGhhKHIsIHIuaW5zX2gsIHIud2luZG93W3Iuc3Ryc3RhcnQgKyB5MCAtIDFdKSwgYSA9IHIucHJldltyLnN0cnN0YXJ0ICYgci53X21hc2tdID0gci5oZWFkW3IuaW5zX2hdLCByLmhlYWRbci5pbnNfaF0gPSByLnN0cnN0YXJ0KSwgYSAhPT0gMCAmJiByLnN0cnN0YXJ0IC0gYSA8PSByLndfc2l6ZSAtIFFyICYmIChyLm1hdGNoX2xlbmd0aCA9IHNuKHIsIGEpKSwgci5tYXRjaF9sZW5ndGggPj0geTApCiAgICAgIGlmIChBID0gYmEociwgci5zdHJzdGFydCAtIHIubWF0Y2hfc3RhcnQsIHIubWF0Y2hfbGVuZ3RoIC0geTApLCByLmxvb2thaGVhZCAtPSByLm1hdGNoX2xlbmd0aCwgci5tYXRjaF9sZW5ndGggPD0gci5tYXhfbGF6eV9tYXRjaCAmJiByLmxvb2thaGVhZCA+PSB5MCkgewogICAgICAgIHIubWF0Y2hfbGVuZ3RoLS07CiAgICAgICAgZG8KICAgICAgICAgIHIuc3Ryc3RhcnQrKywgci5pbnNfaCA9IGhhKHIsIHIuaW5zX2gsIHIud2luZG93W3Iuc3Ryc3RhcnQgKyB5MCAtIDFdKSwgYSA9IHIucHJldltyLnN0cnN0YXJ0ICYgci53X21hc2tdID0gci5oZWFkW3IuaW5zX2hdLCByLmhlYWRbci5pbnNfaF0gPSByLnN0cnN0YXJ0OwogICAgICAgIHdoaWxlICgtLXIubWF0Y2hfbGVuZ3RoICE9PSAwKTsKICAgICAgICByLnN0cnN0YXJ0Kys7CiAgICAgIH0gZWxzZQogICAgICAgIHIuc3Ryc3RhcnQgKz0gci5tYXRjaF9sZW5ndGgsIHIubWF0Y2hfbGVuZ3RoID0gMCwgci5pbnNfaCA9IHIud2luZG93W3Iuc3Ryc3RhcnRdLCByLmluc19oID0gaGEociwgci5pbnNfaCwgci53aW5kb3dbci5zdHJzdGFydCArIDFdKTsKICAgIGVsc2UKICAgICAgQSA9IGJhKHIsIDAsIHIud2luZG93W3Iuc3Ryc3RhcnRdKSwgci5sb29rYWhlYWQtLSwgci5zdHJzdGFydCsrOwogICAgaWYgKEEgJiYgKHdyKHIsICExKSwgci5zdHJtLmF2YWlsX291dCA9PT0gMCkpCiAgICAgIHJldHVybiBmcjsKICB9CiAgcmV0dXJuIHIuaW5zZXJ0ID0gci5zdHJzdGFydCA8IHkwIC0gMSA/IHIuc3Ryc3RhcnQgOiB5MCAtIDEsIGUgPT09IEJyID8gKHdyKHIsICEwKSwgci5zdHJtLmF2YWlsX291dCA9PT0gMCA/IEZhIDogcjIpIDogci5zeW1fbmV4dCAmJiAod3IociwgITEpLCByLnN0cm0uYXZhaWxfb3V0ID09PSAwKSA/IGZyIDogJGE7Cn0sIEdhID0gKHIsIGUpID0+IHsKICBsZXQgYSwgQSwgdDsKICBmb3IgKDsgOyApIHsKICAgIGlmIChyLmxvb2thaGVhZCA8IFFyKSB7CiAgICAgIGlmIChRYShyKSwgci5sb29rYWhlYWQgPCBRciAmJiBlID09PSBkYSkKICAgICAgICByZXR1cm4gZnI7CiAgICAgIGlmIChyLmxvb2thaGVhZCA9PT0gMCkKICAgICAgICBicmVhazsKICAgIH0KICAgIGlmIChhID0gMCwgci5sb29rYWhlYWQgPj0geTAgJiYgKHIuaW5zX2ggPSBoYShyLCByLmluc19oLCByLndpbmRvd1tyLnN0cnN0YXJ0ICsgeTAgLSAxXSksIGEgPSByLnByZXZbci5zdHJzdGFydCAmIHIud19tYXNrXSA9IHIuaGVhZFtyLmluc19oXSwgci5oZWFkW3IuaW5zX2hdID0gci5zdHJzdGFydCksIHIucHJldl9sZW5ndGggPSByLm1hdGNoX2xlbmd0aCwgci5wcmV2X21hdGNoID0gci5tYXRjaF9zdGFydCwgci5tYXRjaF9sZW5ndGggPSB5MCAtIDEsIGEgIT09IDAgJiYgci5wcmV2X2xlbmd0aCA8IHIubWF4X2xhenlfbWF0Y2ggJiYgci5zdHJzdGFydCAtIGEgPD0gci53X3NpemUgLSBRciAmJiAoci5tYXRjaF9sZW5ndGggPSBzbihyLCBhKSwgci5tYXRjaF9sZW5ndGggPD0gNSAmJiAoci5zdHJhdGVneSA9PT0gYm8gfHwgci5tYXRjaF9sZW5ndGggPT09IHkwICYmIHIuc3Ryc3RhcnQgLSByLm1hdGNoX3N0YXJ0ID4gNDA5NikgJiYgKHIubWF0Y2hfbGVuZ3RoID0geTAgLSAxKSksIHIucHJldl9sZW5ndGggPj0geTAgJiYgci5tYXRjaF9sZW5ndGggPD0gci5wcmV2X2xlbmd0aCkgewogICAgICB0ID0gci5zdHJzdGFydCArIHIubG9va2FoZWFkIC0geTAsIEEgPSBiYShyLCByLnN0cnN0YXJ0IC0gMSAtIHIucHJldl9tYXRjaCwgci5wcmV2X2xlbmd0aCAtIHkwKSwgci5sb29rYWhlYWQgLT0gci5wcmV2X2xlbmd0aCAtIDEsIHIucHJldl9sZW5ndGggLT0gMjsKICAgICAgZG8KICAgICAgICArK3Iuc3Ryc3RhcnQgPD0gdCAmJiAoci5pbnNfaCA9IGhhKHIsIHIuaW5zX2gsIHIud2luZG93W3Iuc3Ryc3RhcnQgKyB5MCAtIDFdKSwgYSA9IHIucHJldltyLnN0cnN0YXJ0ICYgci53X21hc2tdID0gci5oZWFkW3IuaW5zX2hdLCByLmhlYWRbci5pbnNfaF0gPSByLnN0cnN0YXJ0KTsKICAgICAgd2hpbGUgKC0tci5wcmV2X2xlbmd0aCAhPT0gMCk7CiAgICAgIGlmIChyLm1hdGNoX2F2YWlsYWJsZSA9IDAsIHIubWF0Y2hfbGVuZ3RoID0geTAgLSAxLCByLnN0cnN0YXJ0KyssIEEgJiYgKHdyKHIsICExKSwgci5zdHJtLmF2YWlsX291dCA9PT0gMCkpCiAgICAgICAgcmV0dXJuIGZyOwogICAgfSBlbHNlIGlmIChyLm1hdGNoX2F2YWlsYWJsZSkgewogICAgICBpZiAoQSA9IGJhKHIsIDAsIHIud2luZG93W3Iuc3Ryc3RhcnQgLSAxXSksIEEgJiYgd3IociwgITEpLCByLnN0cnN0YXJ0KyssIHIubG9va2FoZWFkLS0sIHIuc3RybS5hdmFpbF9vdXQgPT09IDApCiAgICAgICAgcmV0dXJuIGZyOwogICAgfSBlbHNlCiAgICAgIHIubWF0Y2hfYXZhaWxhYmxlID0gMSwgci5zdHJzdGFydCsrLCByLmxvb2thaGVhZC0tOwogIH0KICByZXR1cm4gci5tYXRjaF9hdmFpbGFibGUgJiYgKEEgPSBiYShyLCAwLCByLndpbmRvd1tyLnN0cnN0YXJ0IC0gMV0pLCByLm1hdGNoX2F2YWlsYWJsZSA9IDApLCByLmluc2VydCA9IHIuc3Ryc3RhcnQgPCB5MCAtIDEgPyByLnN0cnN0YXJ0IDogeTAgLSAxLCBlID09PSBCciA/ICh3cihyLCAhMCksIHIuc3RybS5hdmFpbF9vdXQgPT09IDAgPyBGYSA6IHIyKSA6IHIuc3ltX25leHQgJiYgKHdyKHIsICExKSwgci5zdHJtLmF2YWlsX291dCA9PT0gMCkgPyBmciA6ICRhOwp9LCBYbyA9IChyLCBlKSA9PiB7CiAgbGV0IGEsIEEsIHQsIGk7CiAgY29uc3QgbiA9IHIud2luZG93OwogIGZvciAoOyA7ICkgewogICAgaWYgKHIubG9va2FoZWFkIDw9IHVhKSB7CiAgICAgIGlmIChRYShyKSwgci5sb29rYWhlYWQgPD0gdWEgJiYgZSA9PT0gZGEpCiAgICAgICAgcmV0dXJuIGZyOwogICAgICBpZiAoci5sb29rYWhlYWQgPT09IDApCiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBpZiAoci5tYXRjaF9sZW5ndGggPSAwLCByLmxvb2thaGVhZCA+PSB5MCAmJiByLnN0cnN0YXJ0ID4gMCAmJiAodCA9IHIuc3Ryc3RhcnQgLSAxLCBBID0gblt0XSwgQSA9PT0gblsrK3RdICYmIEEgPT09IG5bKyt0XSAmJiBBID09PSBuWysrdF0pKSB7CiAgICAgIGkgPSByLnN0cnN0YXJ0ICsgdWE7CiAgICAgIGRvCiAgICAgICAgOwogICAgICB3aGlsZSAoQSA9PT0gblsrK3RdICYmIEEgPT09IG5bKyt0XSAmJiBBID09PSBuWysrdF0gJiYgQSA9PT0gblsrK3RdICYmIEEgPT09IG5bKyt0XSAmJiBBID09PSBuWysrdF0gJiYgQSA9PT0gblsrK3RdICYmIEEgPT09IG5bKyt0XSAmJiB0IDwgaSk7CiAgICAgIHIubWF0Y2hfbGVuZ3RoID0gdWEgLSAoaSAtIHQpLCByLm1hdGNoX2xlbmd0aCA+IHIubG9va2FoZWFkICYmIChyLm1hdGNoX2xlbmd0aCA9IHIubG9va2FoZWFkKTsKICAgIH0KICAgIGlmIChyLm1hdGNoX2xlbmd0aCA+PSB5MCA/IChhID0gYmEociwgMSwgci5tYXRjaF9sZW5ndGggLSB5MCksIHIubG9va2FoZWFkIC09IHIubWF0Y2hfbGVuZ3RoLCByLnN0cnN0YXJ0ICs9IHIubWF0Y2hfbGVuZ3RoLCByLm1hdGNoX2xlbmd0aCA9IDApIDogKGEgPSBiYShyLCAwLCByLndpbmRvd1tyLnN0cnN0YXJ0XSksIHIubG9va2FoZWFkLS0sIHIuc3Ryc3RhcnQrKyksIGEgJiYgKHdyKHIsICExKSwgci5zdHJtLmF2YWlsX291dCA9PT0gMCkpCiAgICAgIHJldHVybiBmcjsKICB9CiAgcmV0dXJuIHIuaW5zZXJ0ID0gMCwgZSA9PT0gQnIgPyAod3IociwgITApLCByLnN0cm0uYXZhaWxfb3V0ID09PSAwID8gRmEgOiByMikgOiByLnN5bV9uZXh0ICYmICh3cihyLCAhMSksIHIuc3RybS5hdmFpbF9vdXQgPT09IDApID8gZnIgOiAkYTsKfSwgUm8gPSAociwgZSkgPT4gewogIGxldCBhOwogIGZvciAoOyA7ICkgewogICAgaWYgKHIubG9va2FoZWFkID09PSAwICYmIChRYShyKSwgci5sb29rYWhlYWQgPT09IDApKSB7CiAgICAgIGlmIChlID09PSBkYSkKICAgICAgICByZXR1cm4gZnI7CiAgICAgIGJyZWFrOwogICAgfQogICAgaWYgKHIubWF0Y2hfbGVuZ3RoID0gMCwgYSA9IGJhKHIsIDAsIHIud2luZG93W3Iuc3Ryc3RhcnRdKSwgci5sb29rYWhlYWQtLSwgci5zdHJzdGFydCsrLCBhICYmICh3cihyLCAhMSksIHIuc3RybS5hdmFpbF9vdXQgPT09IDApKQogICAgICByZXR1cm4gZnI7CiAgfQogIHJldHVybiByLmluc2VydCA9IDAsIGUgPT09IEJyID8gKHdyKHIsICEwKSwgci5zdHJtLmF2YWlsX291dCA9PT0gMCA/IEZhIDogcjIpIDogci5zeW1fbmV4dCAmJiAod3IociwgITEpLCByLnN0cm0uYXZhaWxfb3V0ID09PSAwKSA/IGZyIDogJGE7Cn07CmZ1bmN0aW9uIFByKHIsIGUsIGEsIEEsIHQpIHsKICB0aGlzLmdvb2RfbGVuZ3RoID0gciwgdGhpcy5tYXhfbGF6eSA9IGUsIHRoaXMubmljZV9sZW5ndGggPSBhLCB0aGlzLm1heF9jaGFpbiA9IEEsIHRoaXMuZnVuYyA9IHQ7Cn0KY29uc3QgczIgPSBbCiAgLyogICAgICBnb29kIGxhenkgbmljZSBjaGFpbiAqLwogIG5ldyBQcigwLCAwLCAwLCAwLCBibiksCiAgLyogMCBzdG9yZSBvbmx5ICovCiAgbmV3IFByKDQsIDQsIDgsIDQsIE9lKSwKICAvKiAxIG1heCBzcGVlZCwgbm8gbGF6eSBtYXRjaGVzICovCiAgbmV3IFByKDQsIDUsIDE2LCA4LCBPZSksCiAgLyogMiAqLwogIG5ldyBQcig0LCA2LCAzMiwgMzIsIE9lKSwKICAvKiAzICovCiAgbmV3IFByKDQsIDQsIDE2LCAxNiwgR2EpLAogIC8qIDQgbGF6eSBtYXRjaGVzICovCiAgbmV3IFByKDgsIDE2LCAzMiwgMzIsIEdhKSwKICAvKiA1ICovCiAgbmV3IFByKDgsIDE2LCAxMjgsIDEyOCwgR2EpLAogIC8qIDYgKi8KICBuZXcgUHIoOCwgMzIsIDEyOCwgMjU2LCBHYSksCiAgLyogNyAqLwogIG5ldyBQcigzMiwgMTI4LCAyNTgsIDEwMjQsIEdhKSwKICAvKiA4ICovCiAgbmV3IFByKDMyLCAyNTgsIDI1OCwgNDA5NiwgR2EpCiAgLyogOSBtYXggY29tcHJlc3Npb24gKi8KXSwgVm8gPSAocikgPT4gewogIHIud2luZG93X3NpemUgPSAyICogci53X3NpemUsIG9hKHIuaGVhZCksIHIubWF4X2xhenlfbWF0Y2ggPSBzMltyLmxldmVsXS5tYXhfbGF6eSwgci5nb29kX21hdGNoID0gczJbci5sZXZlbF0uZ29vZF9sZW5ndGgsIHIubmljZV9tYXRjaCA9IHMyW3IubGV2ZWxdLm5pY2VfbGVuZ3RoLCByLm1heF9jaGFpbl9sZW5ndGggPSBzMltyLmxldmVsXS5tYXhfY2hhaW4sIHIuc3Ryc3RhcnQgPSAwLCByLmJsb2NrX3N0YXJ0ID0gMCwgci5sb29rYWhlYWQgPSAwLCByLmluc2VydCA9IDAsIHIubWF0Y2hfbGVuZ3RoID0gci5wcmV2X2xlbmd0aCA9IHkwIC0gMSwgci5tYXRjaF9hdmFpbGFibGUgPSAwLCByLmluc19oID0gMDsKfTsKZnVuY3Rpb24gU28oKSB7CiAgdGhpcy5zdHJtID0gbnVsbCwgdGhpcy5zdGF0dXMgPSAwLCB0aGlzLnBlbmRpbmdfYnVmID0gbnVsbCwgdGhpcy5wZW5kaW5nX2J1Zl9zaXplID0gMCwgdGhpcy5wZW5kaW5nX291dCA9IDAsIHRoaXMucGVuZGluZyA9IDAsIHRoaXMud3JhcCA9IDAsIHRoaXMuZ3poZWFkID0gbnVsbCwgdGhpcy5nemluZGV4ID0gMCwgdGhpcy5tZXRob2QgPSBGZSwgdGhpcy5sYXN0X2ZsdXNoID0gLTEsIHRoaXMud19zaXplID0gMCwgdGhpcy53X2JpdHMgPSAwLCB0aGlzLndfbWFzayA9IDAsIHRoaXMud2luZG93ID0gbnVsbCwgdGhpcy53aW5kb3dfc2l6ZSA9IDAsIHRoaXMucHJldiA9IG51bGwsIHRoaXMuaGVhZCA9IG51bGwsIHRoaXMuaW5zX2ggPSAwLCB0aGlzLmhhc2hfc2l6ZSA9IDAsIHRoaXMuaGFzaF9iaXRzID0gMCwgdGhpcy5oYXNoX21hc2sgPSAwLCB0aGlzLmhhc2hfc2hpZnQgPSAwLCB0aGlzLmJsb2NrX3N0YXJ0ID0gMCwgdGhpcy5tYXRjaF9sZW5ndGggPSAwLCB0aGlzLnByZXZfbWF0Y2ggPSAwLCB0aGlzLm1hdGNoX2F2YWlsYWJsZSA9IDAsIHRoaXMuc3Ryc3RhcnQgPSAwLCB0aGlzLm1hdGNoX3N0YXJ0ID0gMCwgdGhpcy5sb29rYWhlYWQgPSAwLCB0aGlzLnByZXZfbGVuZ3RoID0gMCwgdGhpcy5tYXhfY2hhaW5fbGVuZ3RoID0gMCwgdGhpcy5tYXhfbGF6eV9tYXRjaCA9IDAsIHRoaXMubGV2ZWwgPSAwLCB0aGlzLnN0cmF0ZWd5ID0gMCwgdGhpcy5nb29kX21hdGNoID0gMCwgdGhpcy5uaWNlX21hdGNoID0gMCwgdGhpcy5keW5fbHRyZWUgPSBuZXcgVWludDE2QXJyYXkoSW8gKiAyKSwgdGhpcy5keW5fZHRyZWUgPSBuZXcgVWludDE2QXJyYXkoKDIgKiBabyArIDEpICogMiksIHRoaXMuYmxfdHJlZSA9IG5ldyBVaW50MTZBcnJheSgoMiAqIEJvICsgMSkgKiAyKSwgb2EodGhpcy5keW5fbHRyZWUpLCBvYSh0aGlzLmR5bl9kdHJlZSksIG9hKHRoaXMuYmxfdHJlZSksIHRoaXMubF9kZXNjID0gbnVsbCwgdGhpcy5kX2Rlc2MgPSBudWxsLCB0aGlzLmJsX2Rlc2MgPSBudWxsLCB0aGlzLmJsX2NvdW50ID0gbmV3IFVpbnQxNkFycmF5KEZvICsgMSksIHRoaXMuaGVhcCA9IG5ldyBVaW50MTZBcnJheSgyICogdkEgKyAxKSwgb2EodGhpcy5oZWFwKSwgdGhpcy5oZWFwX2xlbiA9IDAsIHRoaXMuaGVhcF9tYXggPSAwLCB0aGlzLmRlcHRoID0gbmV3IFVpbnQxNkFycmF5KDIgKiB2QSArIDEpLCBvYSh0aGlzLmRlcHRoKSwgdGhpcy5zeW1fYnVmID0gMCwgdGhpcy5saXRfYnVmc2l6ZSA9IDAsIHRoaXMuc3ltX25leHQgPSAwLCB0aGlzLnN5bV9lbmQgPSAwLCB0aGlzLm9wdF9sZW4gPSAwLCB0aGlzLnN0YXRpY19sZW4gPSAwLCB0aGlzLm1hdGNoZXMgPSAwLCB0aGlzLmluc2VydCA9IDAsIHRoaXMuYmlfYnVmID0gMCwgdGhpcy5iaV92YWxpZCA9IDA7Cn0KY29uc3QgUjIgPSAocikgPT4gewogIGlmICghcikKICAgIHJldHVybiAxOwogIGNvbnN0IGUgPSByLnN0YXRlOwogIHJldHVybiAhZSB8fCBlLnN0cm0gIT09IHIgfHwgZS5zdGF0dXMgIT09IGphICYmIC8vI2lmZGVmIEdaSVAKICBlLnN0YXR1cyAhPT0gTkEgJiYgLy8jZW5kaWYKICBlLnN0YXR1cyAhPT0ga0EgJiYgZS5zdGF0dXMgIT09IGdBICYmIGUuc3RhdHVzICE9PSBtQSAmJiBlLnN0YXR1cyAhPT0gcEEgJiYgZS5zdGF0dXMgIT09IFphICYmIGUuc3RhdHVzICE9PSBjMiA/IDEgOiAwOwp9LCBkbiA9IChyKSA9PiB7CiAgaWYgKFIyKHIpKQogICAgcmV0dXJuIEJhKHIsIGpyKTsKICByLnRvdGFsX2luID0gci50b3RhbF9vdXQgPSAwLCByLmRhdGFfdHlwZSA9IGdvOwogIGNvbnN0IGUgPSByLnN0YXRlOwogIHJldHVybiBlLnBlbmRpbmcgPSAwLCBlLnBlbmRpbmdfb3V0ID0gMCwgZS53cmFwIDwgMCAmJiAoZS53cmFwID0gLWUud3JhcCksIGUuc3RhdHVzID0gLy8jaWZkZWYgR1pJUAogIGUud3JhcCA9PT0gMiA/IE5BIDogKAogICAgLy8jZW5kaWYKICAgIGUud3JhcCA/IGphIDogWmEKICApLCByLmFkbGVyID0gZS53cmFwID09PSAyID8gMCA6IDEsIGUubGFzdF9mbHVzaCA9IC0yLCBubyhlKSwgYXI7Cn0sIGhuID0gKHIpID0+IHsKICBjb25zdCBlID0gZG4ocik7CiAgcmV0dXJuIGUgPT09IGFyICYmIFZvKHIuc3RhdGUpLCBlOwp9LCBEbyA9IChyLCBlKSA9PiBSMihyKSB8fCByLnN0YXRlLndyYXAgIT09IDIgPyBqciA6IChyLnN0YXRlLmd6aGVhZCA9IGUsIGFyKSwgdm4gPSAociwgZSwgYSwgQSwgdCwgaSkgPT4gewogIGlmICghcikKICAgIHJldHVybiBqcjsKICBsZXQgbiA9IDE7CiAgaWYgKGUgPT09IHNvICYmIChlID0gNiksIEEgPCAwID8gKG4gPSAwLCBBID0gLUEpIDogQSA+IDE1ICYmIChuID0gMiwgQSAtPSAxNiksIHQgPCAxIHx8IHQgPiBtbyB8fCBhICE9PSBGZSB8fCBBIDwgOCB8fCBBID4gMTUgfHwgZSA8IDAgfHwgZSA+IDkgfHwgaSA8IDAgfHwgaSA+IHZvIHx8IEEgPT09IDggJiYgbiAhPT0gMSkKICAgIHJldHVybiBCYShyLCBqcik7CiAgQSA9PT0gOCAmJiAoQSA9IDkpOwogIGNvbnN0IGYgPSBuZXcgU28oKTsKICByZXR1cm4gci5zdGF0ZSA9IGYsIGYuc3RybSA9IHIsIGYuc3RhdHVzID0gamEsIGYud3JhcCA9IG4sIGYuZ3poZWFkID0gbnVsbCwgZi53X2JpdHMgPSBBLCBmLndfc2l6ZSA9IDEgPDwgZi53X2JpdHMsIGYud19tYXNrID0gZi53X3NpemUgLSAxLCBmLmhhc2hfYml0cyA9IHQgKyA3LCBmLmhhc2hfc2l6ZSA9IDEgPDwgZi5oYXNoX2JpdHMsIGYuaGFzaF9tYXNrID0gZi5oYXNoX3NpemUgLSAxLCBmLmhhc2hfc2hpZnQgPSB+figoZi5oYXNoX2JpdHMgKyB5MCAtIDEpIC8geTApLCBmLndpbmRvdyA9IG5ldyBVaW50OEFycmF5KGYud19zaXplICogMiksIGYuaGVhZCA9IG5ldyBVaW50MTZBcnJheShmLmhhc2hfc2l6ZSksIGYucHJldiA9IG5ldyBVaW50MTZBcnJheShmLndfc2l6ZSksIGYubGl0X2J1ZnNpemUgPSAxIDw8IHQgKyA2LCBmLnBlbmRpbmdfYnVmX3NpemUgPSBmLmxpdF9idWZzaXplICogNCwgZi5wZW5kaW5nX2J1ZiA9IG5ldyBVaW50OEFycmF5KGYucGVuZGluZ19idWZfc2l6ZSksIGYuc3ltX2J1ZiA9IGYubGl0X2J1ZnNpemUsIGYuc3ltX2VuZCA9IChmLmxpdF9idWZzaXplIC0gMSkgKiAzLCBmLmxldmVsID0gZSwgZi5zdHJhdGVneSA9IGksIGYubWV0aG9kID0gYSwgaG4ocik7Cn0sIHhvID0gKHIsIGUpID0+IHZuKHIsIGUsIEZlLCBwbywgd28sIGtvKSwgTm8gPSAociwgZSkgPT4gewogIGlmIChSMihyKSB8fCBlID4gbnQgfHwgZSA8IDApCiAgICByZXR1cm4gciA/IEJhKHIsIGpyKSA6IGpyOwogIGNvbnN0IGEgPSByLnN0YXRlOwogIGlmICghci5vdXRwdXQgfHwgci5hdmFpbF9pbiAhPT0gMCAmJiAhci5pbnB1dCB8fCBhLnN0YXR1cyA9PT0gYzIgJiYgZSAhPT0gQnIpCiAgICByZXR1cm4gQmEociwgci5hdmFpbF9vdXQgPT09IDAgPyBZZSA6IGpyKTsKICBjb25zdCBBID0gYS5sYXN0X2ZsdXNoOwogIGlmIChhLmxhc3RfZmx1c2ggPSBlLCBhLnBlbmRpbmcgIT09IDApIHsKICAgIGlmICh2cihyKSwgci5hdmFpbF9vdXQgPT09IDApCiAgICAgIHJldHVybiBhLmxhc3RfZmx1c2ggPSAtMSwgYXI7CiAgfSBlbHNlIGlmIChyLmF2YWlsX2luID09PSAwICYmIG90KGUpIDw9IG90KEEpICYmIGUgIT09IEJyKQogICAgcmV0dXJuIEJhKHIsIFllKTsKICBpZiAoYS5zdGF0dXMgPT09IGMyICYmIHIuYXZhaWxfaW4gIT09IDApCiAgICByZXR1cm4gQmEociwgWWUpOwogIGlmIChhLnN0YXR1cyA9PT0gamEgJiYgYS53cmFwID09PSAwICYmIChhLnN0YXR1cyA9IFphKSwgYS5zdGF0dXMgPT09IGphKSB7CiAgICBsZXQgdCA9IEZlICsgKGEud19iaXRzIC0gOCA8PCA0KSA8PCA4LCBpID0gLTE7CiAgICBpZiAoYS5zdHJhdGVneSA+PSBQMiB8fCBhLmxldmVsIDwgMiA/IGkgPSAwIDogYS5sZXZlbCA8IDYgPyBpID0gMSA6IGEubGV2ZWwgPT09IDYgPyBpID0gMiA6IGkgPSAzLCB0IHw9IGkgPDwgNiwgYS5zdHJzdGFydCAhPT0gMCAmJiAodCB8PSBDbyksIHQgKz0gMzEgLSB0ICUgMzEsIGkyKGEsIHQpLCBhLnN0cnN0YXJ0ICE9PSAwICYmIChpMihhLCByLmFkbGVyID4+PiAxNiksIGkyKGEsIHIuYWRsZXIgJiA2NTUzNSkpLCByLmFkbGVyID0gMSwgYS5zdGF0dXMgPSBaYSwgdnIociksIGEucGVuZGluZyAhPT0gMCkKICAgICAgcmV0dXJuIGEubGFzdF9mbHVzaCA9IC0xLCBhcjsKICB9CiAgaWYgKGEuc3RhdHVzID09PSBOQSkgewogICAgaWYgKHIuYWRsZXIgPSAwLCBHMChhLCAzMSksIEcwKGEsIDEzOSksIEcwKGEsIDgpLCBhLmd6aGVhZCkKICAgICAgRzAoCiAgICAgICAgYSwKICAgICAgICAoYS5nemhlYWQudGV4dCA/IDEgOiAwKSArIChhLmd6aGVhZC5oY3JjID8gMiA6IDApICsgKGEuZ3poZWFkLmV4dHJhID8gNCA6IDApICsgKGEuZ3poZWFkLm5hbWUgPyA4IDogMCkgKyAoYS5nemhlYWQuY29tbWVudCA/IDE2IDogMCkKICAgICAgKSwgRzAoYSwgYS5nemhlYWQudGltZSAmIDI1NSksIEcwKGEsIGEuZ3poZWFkLnRpbWUgPj4gOCAmIDI1NSksIEcwKGEsIGEuZ3poZWFkLnRpbWUgPj4gMTYgJiAyNTUpLCBHMChhLCBhLmd6aGVhZC50aW1lID4+IDI0ICYgMjU1KSwgRzAoYSwgYS5sZXZlbCA9PT0gOSA/IDIgOiBhLnN0cmF0ZWd5ID49IFAyIHx8IGEubGV2ZWwgPCAyID8gNCA6IDApLCBHMChhLCBhLmd6aGVhZC5vcyAmIDI1NSksIGEuZ3poZWFkLmV4dHJhICYmIGEuZ3poZWFkLmV4dHJhLmxlbmd0aCAmJiAoRzAoYSwgYS5nemhlYWQuZXh0cmEubGVuZ3RoICYgMjU1KSwgRzAoYSwgYS5nemhlYWQuZXh0cmEubGVuZ3RoID4+IDggJiAyNTUpKSwgYS5nemhlYWQuaGNyYyAmJiAoci5hZGxlciA9IHEwKHIuYWRsZXIsIGEucGVuZGluZ19idWYsIGEucGVuZGluZywgMCkpLCBhLmd6aW5kZXggPSAwLCBhLnN0YXR1cyA9IGtBOwogICAgZWxzZSBpZiAoRzAoYSwgMCksIEcwKGEsIDApLCBHMChhLCAwKSwgRzAoYSwgMCksIEcwKGEsIDApLCBHMChhLCBhLmxldmVsID09PSA5ID8gMiA6IGEuc3RyYXRlZ3kgPj0gUDIgfHwgYS5sZXZlbCA8IDIgPyA0IDogMCksIEcwKGEsIFdvKSwgYS5zdGF0dXMgPSBaYSwgdnIociksIGEucGVuZGluZyAhPT0gMCkKICAgICAgcmV0dXJuIGEubGFzdF9mbHVzaCA9IC0xLCBhcjsKICB9CiAgaWYgKGEuc3RhdHVzID09PSBrQSkgewogICAgaWYgKGEuZ3poZWFkLmV4dHJhKSB7CiAgICAgIGxldCB0ID0gYS5wZW5kaW5nLCBpID0gKGEuZ3poZWFkLmV4dHJhLmxlbmd0aCAmIDY1NTM1KSAtIGEuZ3ppbmRleDsKICAgICAgZm9yICg7IGEucGVuZGluZyArIGkgPiBhLnBlbmRpbmdfYnVmX3NpemU7ICkgewogICAgICAgIGxldCBmID0gYS5wZW5kaW5nX2J1Zl9zaXplIC0gYS5wZW5kaW5nOwogICAgICAgIGlmIChhLnBlbmRpbmdfYnVmLnNldChhLmd6aGVhZC5leHRyYS5zdWJhcnJheShhLmd6aW5kZXgsIGEuZ3ppbmRleCArIGYpLCBhLnBlbmRpbmcpLCBhLnBlbmRpbmcgPSBhLnBlbmRpbmdfYnVmX3NpemUsIGEuZ3poZWFkLmhjcmMgJiYgYS5wZW5kaW5nID4gdCAmJiAoci5hZGxlciA9IHEwKHIuYWRsZXIsIGEucGVuZGluZ19idWYsIGEucGVuZGluZyAtIHQsIHQpKSwgYS5nemluZGV4ICs9IGYsIHZyKHIpLCBhLnBlbmRpbmcgIT09IDApCiAgICAgICAgICByZXR1cm4gYS5sYXN0X2ZsdXNoID0gLTEsIGFyOwogICAgICAgIHQgPSAwLCBpIC09IGY7CiAgICAgIH0KICAgICAgbGV0IG4gPSBuZXcgVWludDhBcnJheShhLmd6aGVhZC5leHRyYSk7CiAgICAgIGEucGVuZGluZ19idWYuc2V0KG4uc3ViYXJyYXkoYS5nemluZGV4LCBhLmd6aW5kZXggKyBpKSwgYS5wZW5kaW5nKSwgYS5wZW5kaW5nICs9IGksIGEuZ3poZWFkLmhjcmMgJiYgYS5wZW5kaW5nID4gdCAmJiAoci5hZGxlciA9IHEwKHIuYWRsZXIsIGEucGVuZGluZ19idWYsIGEucGVuZGluZyAtIHQsIHQpKSwgYS5nemluZGV4ID0gMDsKICAgIH0KICAgIGEuc3RhdHVzID0gZ0E7CiAgfQogIGlmIChhLnN0YXR1cyA9PT0gZ0EpIHsKICAgIGlmIChhLmd6aGVhZC5uYW1lKSB7CiAgICAgIGxldCB0ID0gYS5wZW5kaW5nLCBpOwogICAgICBkbyB7CiAgICAgICAgaWYgKGEucGVuZGluZyA9PT0gYS5wZW5kaW5nX2J1Zl9zaXplKSB7CiAgICAgICAgICBpZiAoYS5nemhlYWQuaGNyYyAmJiBhLnBlbmRpbmcgPiB0ICYmIChyLmFkbGVyID0gcTAoci5hZGxlciwgYS5wZW5kaW5nX2J1ZiwgYS5wZW5kaW5nIC0gdCwgdCkpLCB2cihyKSwgYS5wZW5kaW5nICE9PSAwKQogICAgICAgICAgICByZXR1cm4gYS5sYXN0X2ZsdXNoID0gLTEsIGFyOwogICAgICAgICAgdCA9IDA7CiAgICAgICAgfQogICAgICAgIGEuZ3ppbmRleCA8IGEuZ3poZWFkLm5hbWUubGVuZ3RoID8gaSA9IGEuZ3poZWFkLm5hbWUuY2hhckNvZGVBdChhLmd6aW5kZXgrKykgJiAyNTUgOiBpID0gMCwgRzAoYSwgaSk7CiAgICAgIH0gd2hpbGUgKGkgIT09IDApOwogICAgICBhLmd6aGVhZC5oY3JjICYmIGEucGVuZGluZyA+IHQgJiYgKHIuYWRsZXIgPSBxMChyLmFkbGVyLCBhLnBlbmRpbmdfYnVmLCBhLnBlbmRpbmcgLSB0LCB0KSksIGEuZ3ppbmRleCA9IDA7CiAgICB9CiAgICBhLnN0YXR1cyA9IG1BOwogIH0KICBpZiAoYS5zdGF0dXMgPT09IG1BKSB7CiAgICBpZiAoYS5nemhlYWQuY29tbWVudCkgewogICAgICBsZXQgdCA9IGEucGVuZGluZywgaTsKICAgICAgZG8gewogICAgICAgIGlmIChhLnBlbmRpbmcgPT09IGEucGVuZGluZ19idWZfc2l6ZSkgewogICAgICAgICAgaWYgKGEuZ3poZWFkLmhjcmMgJiYgYS5wZW5kaW5nID4gdCAmJiAoci5hZGxlciA9IHEwKHIuYWRsZXIsIGEucGVuZGluZ19idWYsIGEucGVuZGluZyAtIHQsIHQpKSwgdnIociksIGEucGVuZGluZyAhPT0gMCkKICAgICAgICAgICAgcmV0dXJuIGEubGFzdF9mbHVzaCA9IC0xLCBhcjsKICAgICAgICAgIHQgPSAwOwogICAgICAgIH0KICAgICAgICBhLmd6aW5kZXggPCBhLmd6aGVhZC5jb21tZW50Lmxlbmd0aCA/IGkgPSBhLmd6aGVhZC5jb21tZW50LmNoYXJDb2RlQXQoYS5nemluZGV4KyspICYgMjU1IDogaSA9IDAsIEcwKGEsIGkpOwogICAgICB9IHdoaWxlIChpICE9PSAwKTsKICAgICAgYS5nemhlYWQuaGNyYyAmJiBhLnBlbmRpbmcgPiB0ICYmIChyLmFkbGVyID0gcTAoci5hZGxlciwgYS5wZW5kaW5nX2J1ZiwgYS5wZW5kaW5nIC0gdCwgdCkpOwogICAgfQogICAgYS5zdGF0dXMgPSBwQTsKICB9CiAgaWYgKGEuc3RhdHVzID09PSBwQSkgewogICAgaWYgKGEuZ3poZWFkLmhjcmMpIHsKICAgICAgaWYgKGEucGVuZGluZyArIDIgPiBhLnBlbmRpbmdfYnVmX3NpemUgJiYgKHZyKHIpLCBhLnBlbmRpbmcgIT09IDApKQogICAgICAgIHJldHVybiBhLmxhc3RfZmx1c2ggPSAtMSwgYXI7CiAgICAgIEcwKGEsIHIuYWRsZXIgJiAyNTUpLCBHMChhLCByLmFkbGVyID4+IDggJiAyNTUpLCByLmFkbGVyID0gMDsKICAgIH0KICAgIGlmIChhLnN0YXR1cyA9IFphLCB2cihyKSwgYS5wZW5kaW5nICE9PSAwKQogICAgICByZXR1cm4gYS5sYXN0X2ZsdXNoID0gLTEsIGFyOwogIH0KICBpZiAoci5hdmFpbF9pbiAhPT0gMCB8fCBhLmxvb2thaGVhZCAhPT0gMCB8fCBlICE9PSBkYSAmJiBhLnN0YXR1cyAhPT0gYzIpIHsKICAgIGxldCB0ID0gYS5sZXZlbCA9PT0gMCA/IGJuKGEsIGUpIDogYS5zdHJhdGVneSA9PT0gUDIgPyBSbyhhLCBlKSA6IGEuc3RyYXRlZ3kgPT09IGhvID8gWG8oYSwgZSkgOiBzMlthLmxldmVsXS5mdW5jKGEsIGUpOwogICAgaWYgKCh0ID09PSBGYSB8fCB0ID09PSByMikgJiYgKGEuc3RhdHVzID0gYzIpLCB0ID09PSBmciB8fCB0ID09PSBGYSkKICAgICAgcmV0dXJuIHIuYXZhaWxfb3V0ID09PSAwICYmIChhLmxhc3RfZmx1c2ggPSAtMSksIGFyOwogICAgaWYgKHQgPT09ICRhICYmIChlID09PSB1byA/IG9vKGEpIDogZSAhPT0gbnQgJiYgKGhBKGEsIDAsIDAsICExKSwgZSA9PT0gbG8gJiYgKG9hKGEuaGVhZCksIGEubG9va2FoZWFkID09PSAwICYmIChhLnN0cnN0YXJ0ID0gMCwgYS5ibG9ja19zdGFydCA9IDAsIGEuaW5zZXJ0ID0gMCkpKSwgdnIociksIHIuYXZhaWxfb3V0ID09PSAwKSkKICAgICAgcmV0dXJuIGEubGFzdF9mbHVzaCA9IC0xLCBhcjsKICB9CiAgcmV0dXJuIGUgIT09IEJyID8gYXIgOiBhLndyYXAgPD0gMCA/IGZ0IDogKGEud3JhcCA9PT0gMiA/IChHMChhLCByLmFkbGVyICYgMjU1KSwgRzAoYSwgci5hZGxlciA+PiA4ICYgMjU1KSwgRzAoYSwgci5hZGxlciA+PiAxNiAmIDI1NSksIEcwKGEsIHIuYWRsZXIgPj4gMjQgJiAyNTUpLCBHMChhLCByLnRvdGFsX2luICYgMjU1KSwgRzAoYSwgci50b3RhbF9pbiA+PiA4ICYgMjU1KSwgRzAoYSwgci50b3RhbF9pbiA+PiAxNiAmIDI1NSksIEcwKGEsIHIudG90YWxfaW4gPj4gMjQgJiAyNTUpKSA6IChpMihhLCByLmFkbGVyID4+PiAxNiksIGkyKGEsIHIuYWRsZXIgJiA2NTUzNSkpLCB2cihyKSwgYS53cmFwID4gMCAmJiAoYS53cmFwID0gLWEud3JhcCksIGEucGVuZGluZyAhPT0gMCA/IGFyIDogZnQpOwp9LCBNbyA9IChyKSA9PiB7CiAgaWYgKFIyKHIpKQogICAgcmV0dXJuIGpyOwogIGNvbnN0IGUgPSByLnN0YXRlLnN0YXR1czsKICByZXR1cm4gci5zdGF0ZSA9IG51bGwsIGUgPT09IFphID8gQmEociwgY28pIDogYXI7Cn0sIFRvID0gKHIsIGUpID0+IHsKICBsZXQgYSA9IGUubGVuZ3RoOwogIGlmIChSMihyKSkKICAgIHJldHVybiBqcjsKICBjb25zdCBBID0gci5zdGF0ZSwgdCA9IEEud3JhcDsKICBpZiAodCA9PT0gMiB8fCB0ID09PSAxICYmIEEuc3RhdHVzICE9PSBqYSB8fCBBLmxvb2thaGVhZCkKICAgIHJldHVybiBqcjsKICBpZiAodCA9PT0gMSAmJiAoci5hZGxlciA9IEMyKHIuYWRsZXIsIGUsIGEsIDApKSwgQS53cmFwID0gMCwgYSA+PSBBLndfc2l6ZSkgewogICAgdCA9PT0gMCAmJiAob2EoQS5oZWFkKSwgQS5zdHJzdGFydCA9IDAsIEEuYmxvY2tfc3RhcnQgPSAwLCBBLmluc2VydCA9IDApOwogICAgbGV0IHUgPSBuZXcgVWludDhBcnJheShBLndfc2l6ZSk7CiAgICB1LnNldChlLnN1YmFycmF5KGEgLSBBLndfc2l6ZSwgYSksIDApLCBlID0gdSwgYSA9IEEud19zaXplOwogIH0KICBjb25zdCBpID0gci5hdmFpbF9pbiwgbiA9IHIubmV4dF9pbiwgZiA9IHIuaW5wdXQ7CiAgZm9yIChyLmF2YWlsX2luID0gYSwgci5uZXh0X2luID0gMCwgci5pbnB1dCA9IGUsIFFhKEEpOyBBLmxvb2thaGVhZCA+PSB5MDsgKSB7CiAgICBsZXQgdSA9IEEuc3Ryc3RhcnQsIG8gPSBBLmxvb2thaGVhZCAtICh5MCAtIDEpOwogICAgZG8KICAgICAgQS5pbnNfaCA9IGhhKEEsIEEuaW5zX2gsIEEud2luZG93W3UgKyB5MCAtIDFdKSwgQS5wcmV2W3UgJiBBLndfbWFza10gPSBBLmhlYWRbQS5pbnNfaF0sIEEuaGVhZFtBLmluc19oXSA9IHUsIHUrKzsKICAgIHdoaWxlICgtLW8pOwogICAgQS5zdHJzdGFydCA9IHUsIEEubG9va2FoZWFkID0geTAgLSAxLCBRYShBKTsKICB9CiAgcmV0dXJuIEEuc3Ryc3RhcnQgKz0gQS5sb29rYWhlYWQsIEEuYmxvY2tfc3RhcnQgPSBBLnN0cnN0YXJ0LCBBLmluc2VydCA9IEEubG9va2FoZWFkLCBBLmxvb2thaGVhZCA9IDAsIEEubWF0Y2hfbGVuZ3RoID0gQS5wcmV2X2xlbmd0aCA9IHkwIC0gMSwgQS5tYXRjaF9hdmFpbGFibGUgPSAwLCByLm5leHRfaW4gPSBuLCByLmlucHV0ID0gZiwgci5hdmFpbF9pbiA9IGksIEEud3JhcCA9IHQsIGFyOwp9Owp2YXIgUG8gPSB4bywgWW8gPSB2biwgT28gPSBobiwgVW8gPSBkbiwgam8gPSBEbywgUW8gPSBObywgSm8gPSBNbywgSG8gPSBUbywgem8gPSAicGFrbyBkZWZsYXRlIChmcm9tIE5vZGVjYSBwcm9qZWN0KSIsIHYyID0gewogIGRlZmxhdGVJbml0OiBQbywKICBkZWZsYXRlSW5pdDI6IFlvLAogIGRlZmxhdGVSZXNldDogT28sCiAgZGVmbGF0ZVJlc2V0S2VlcDogVW8sCiAgZGVmbGF0ZVNldEhlYWRlcjogam8sCiAgZGVmbGF0ZTogUW8sCiAgZGVmbGF0ZUVuZDogSm8sCiAgZGVmbGF0ZVNldERpY3Rpb25hcnk6IEhvLAogIGRlZmxhdGVJbmZvOiB6bwp9Owpjb25zdCBMbyA9IChyLCBlKSA9PiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwociwgZSk7CnZhciBLbyA9IGZ1bmN0aW9uKHIpIHsKICBjb25zdCBlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsKICBmb3IgKDsgZS5sZW5ndGg7ICkgewogICAgY29uc3QgYSA9IGUuc2hpZnQoKTsKICAgIGlmIChhKSB7CiAgICAgIGlmICh0eXBlb2YgYSAhPSAib2JqZWN0IikKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGEgKyAibXVzdCBiZSBub24tb2JqZWN0Iik7CiAgICAgIGZvciAoY29uc3QgQSBpbiBhKQogICAgICAgIExvKGEsIEEpICYmIChyW0FdID0gYVtBXSk7CiAgICB9CiAgfQogIHJldHVybiByOwp9LCBxbyA9IChyKSA9PiB7CiAgbGV0IGUgPSAwOwogIGZvciAobGV0IEEgPSAwLCB0ID0gci5sZW5ndGg7IEEgPCB0OyBBKyspCiAgICBlICs9IHJbQV0ubGVuZ3RoOwogIGNvbnN0IGEgPSBuZXcgVWludDhBcnJheShlKTsKICBmb3IgKGxldCBBID0gMCwgdCA9IDAsIGkgPSByLmxlbmd0aDsgQSA8IGk7IEErKykgewogICAgbGV0IG4gPSByW0FdOwogICAgYS5zZXQobiwgdCksIHQgKz0gbi5sZW5ndGg7CiAgfQogIHJldHVybiBhOwp9LCBDZSA9IHsKICBhc3NpZ246IEtvLAogIGZsYXR0ZW5DaHVua3M6IHFvCn07CmxldCBrbiA9ICEwOwp0cnkgewogIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgbmV3IFVpbnQ4QXJyYXkoMSkpOwp9IGNhdGNoIHsKICBrbiA9ICExOwp9CmNvbnN0IFcyID0gbmV3IFVpbnQ4QXJyYXkoMjU2KTsKZm9yIChsZXQgciA9IDA7IHIgPCAyNTY7IHIrKykKICBXMltyXSA9IHIgPj0gMjUyID8gNiA6IHIgPj0gMjQ4ID8gNSA6IHIgPj0gMjQwID8gNCA6IHIgPj0gMjI0ID8gMyA6IHIgPj0gMTkyID8gMiA6IDE7ClcyWzI1NF0gPSBXMlsyNTRdID0gMTsKdmFyICRvID0gKHIpID0+IHsKICBpZiAodHlwZW9mIFRleHRFbmNvZGVyID09ICJmdW5jdGlvbiIgJiYgVGV4dEVuY29kZXIucHJvdG90eXBlLmVuY29kZSkKICAgIHJldHVybiBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUocik7CiAgbGV0IGUsIGEsIEEsIHQsIGksIG4gPSByLmxlbmd0aCwgZiA9IDA7CiAgZm9yICh0ID0gMDsgdCA8IG47IHQrKykKICAgIGEgPSByLmNoYXJDb2RlQXQodCksIChhICYgNjQ1MTIpID09PSA1NTI5NiAmJiB0ICsgMSA8IG4gJiYgKEEgPSByLmNoYXJDb2RlQXQodCArIDEpLCAoQSAmIDY0NTEyKSA9PT0gNTYzMjAgJiYgKGEgPSA2NTUzNiArIChhIC0gNTUyOTYgPDwgMTApICsgKEEgLSA1NjMyMCksIHQrKykpLCBmICs9IGEgPCAxMjggPyAxIDogYSA8IDIwNDggPyAyIDogYSA8IDY1NTM2ID8gMyA6IDQ7CiAgZm9yIChlID0gbmV3IFVpbnQ4QXJyYXkoZiksIGkgPSAwLCB0ID0gMDsgaSA8IGY7IHQrKykKICAgIGEgPSByLmNoYXJDb2RlQXQodCksIChhICYgNjQ1MTIpID09PSA1NTI5NiAmJiB0ICsgMSA8IG4gJiYgKEEgPSByLmNoYXJDb2RlQXQodCArIDEpLCAoQSAmIDY0NTEyKSA9PT0gNTYzMjAgJiYgKGEgPSA2NTUzNiArIChhIC0gNTUyOTYgPDwgMTApICsgKEEgLSA1NjMyMCksIHQrKykpLCBhIDwgMTI4ID8gZVtpKytdID0gYSA6IGEgPCAyMDQ4ID8gKGVbaSsrXSA9IDE5MiB8IGEgPj4+IDYsIGVbaSsrXSA9IDEyOCB8IGEgJiA2MykgOiBhIDwgNjU1MzYgPyAoZVtpKytdID0gMjI0IHwgYSA+Pj4gMTIsIGVbaSsrXSA9IDEyOCB8IGEgPj4+IDYgJiA2MywgZVtpKytdID0gMTI4IHwgYSAmIDYzKSA6IChlW2krK10gPSAyNDAgfCBhID4+PiAxOCwgZVtpKytdID0gMTI4IHwgYSA+Pj4gMTIgJiA2MywgZVtpKytdID0gMTI4IHwgYSA+Pj4gNiAmIDYzLCBlW2krK10gPSAxMjggfCBhICYgNjMpOwogIHJldHVybiBlOwp9Owpjb25zdCBydSA9IChyLCBlKSA9PiB7CiAgaWYgKGUgPCA2NTUzNCAmJiByLnN1YmFycmF5ICYmIGtuKQogICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgci5sZW5ndGggPT09IGUgPyByIDogci5zdWJhcnJheSgwLCBlKSk7CiAgbGV0IGEgPSAiIjsKICBmb3IgKGxldCBBID0gMDsgQSA8IGU7IEErKykKICAgIGEgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShyW0FdKTsKICByZXR1cm4gYTsKfTsKdmFyIGF1ID0gKHIsIGUpID0+IHsKICBjb25zdCBhID0gZSB8fCByLmxlbmd0aDsKICBpZiAodHlwZW9mIFRleHREZWNvZGVyID09ICJmdW5jdGlvbiIgJiYgVGV4dERlY29kZXIucHJvdG90eXBlLmRlY29kZSkKICAgIHJldHVybiBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoci5zdWJhcnJheSgwLCBlKSk7CiAgbGV0IEEsIHQ7CiAgY29uc3QgaSA9IG5ldyBBcnJheShhICogMik7CiAgZm9yICh0ID0gMCwgQSA9IDA7IEEgPCBhOyApIHsKICAgIGxldCBuID0gcltBKytdOwogICAgaWYgKG4gPCAxMjgpIHsKICAgICAgaVt0KytdID0gbjsKICAgICAgY29udGludWU7CiAgICB9CiAgICBsZXQgZiA9IFcyW25dOwogICAgaWYgKGYgPiA0KSB7CiAgICAgIGlbdCsrXSA9IDY1NTMzLCBBICs9IGYgLSAxOwogICAgICBjb250aW51ZTsKICAgIH0KICAgIGZvciAobiAmPSBmID09PSAyID8gMzEgOiBmID09PSAzID8gMTUgOiA3OyBmID4gMSAmJiBBIDwgYTsgKQogICAgICBuID0gbiA8PCA2IHwgcltBKytdICYgNjMsIGYtLTsKICAgIGlmIChmID4gMSkgewogICAgICBpW3QrK10gPSA2NTUzMzsKICAgICAgY29udGludWU7CiAgICB9CiAgICBuIDwgNjU1MzYgPyBpW3QrK10gPSBuIDogKG4gLT0gNjU1MzYsIGlbdCsrXSA9IDU1Mjk2IHwgbiA+PiAxMCAmIDEwMjMsIGlbdCsrXSA9IDU2MzIwIHwgbiAmIDEwMjMpOwogIH0KICByZXR1cm4gcnUoaSwgdCk7Cn0sIGV1ID0gKHIsIGUpID0+IHsKICBlID0gZSB8fCByLmxlbmd0aCwgZSA+IHIubGVuZ3RoICYmIChlID0gci5sZW5ndGgpOwogIGxldCBhID0gZSAtIDE7CiAgZm9yICg7IGEgPj0gMCAmJiAoclthXSAmIDE5MikgPT09IDEyODsgKQogICAgYS0tOwogIHJldHVybiBhIDwgMCB8fCBhID09PSAwID8gZSA6IGEgKyBXMltyW2FdXSA+IGUgPyBhIDogZTsKfSwgXzIgPSB7CiAgc3RyaW5nMmJ1ZjogJG8sCiAgYnVmMnN0cmluZzogYXUsCiAgdXRmOGJvcmRlcjogZXUKfTsKZnVuY3Rpb24gQXUoKSB7CiAgdGhpcy5pbnB1dCA9IG51bGwsIHRoaXMubmV4dF9pbiA9IDAsIHRoaXMuYXZhaWxfaW4gPSAwLCB0aGlzLnRvdGFsX2luID0gMCwgdGhpcy5vdXRwdXQgPSBudWxsLCB0aGlzLm5leHRfb3V0ID0gMCwgdGhpcy5hdmFpbF9vdXQgPSAwLCB0aGlzLnRvdGFsX291dCA9IDAsIHRoaXMubXNnID0gIiIsIHRoaXMuc3RhdGUgPSBudWxsLCB0aGlzLmRhdGFfdHlwZSA9IDIsIHRoaXMuYWRsZXIgPSAwOwp9CnZhciBnbiA9IEF1Owpjb25zdCBtbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsIHsKICBaX05PX0ZMVVNIOiB0dSwKICBaX1NZTkNfRkxVU0g6IGl1LAogIFpfRlVMTF9GTFVTSDogbnUsCiAgWl9GSU5JU0g6IGZ1LAogIFpfT0s6IGtlLAogIFpfU1RSRUFNX0VORDogb3UsCiAgWl9ERUZBVUxUX0NPTVBSRVNTSU9OOiB1dSwKICBaX0RFRkFVTFRfU1RSQVRFR1k6IGx1LAogIFpfREVGTEFURUQ6IGN1Cn0gPSBJZTsKZnVuY3Rpb24gV2UocikgewogIHRoaXMub3B0aW9ucyA9IENlLmFzc2lnbih7CiAgICBsZXZlbDogdXUsCiAgICBtZXRob2Q6IGN1LAogICAgY2h1bmtTaXplOiAxNjM4NCwKICAgIHdpbmRvd0JpdHM6IDE1LAogICAgbWVtTGV2ZWw6IDgsCiAgICBzdHJhdGVneTogbHUKICB9LCByIHx8IHt9KTsKICBsZXQgZSA9IHRoaXMub3B0aW9uczsKICBlLnJhdyAmJiBlLndpbmRvd0JpdHMgPiAwID8gZS53aW5kb3dCaXRzID0gLWUud2luZG93Qml0cyA6IGUuZ3ppcCAmJiBlLndpbmRvd0JpdHMgPiAwICYmIGUud2luZG93Qml0cyA8IDE2ICYmIChlLndpbmRvd0JpdHMgKz0gMTYpLCB0aGlzLmVyciA9IDAsIHRoaXMubXNnID0gIiIsIHRoaXMuZW5kZWQgPSAhMSwgdGhpcy5jaHVua3MgPSBbXSwgdGhpcy5zdHJtID0gbmV3IGduKCksIHRoaXMuc3RybS5hdmFpbF9vdXQgPSAwOwogIGxldCBhID0gdjIuZGVmbGF0ZUluaXQyKAogICAgdGhpcy5zdHJtLAogICAgZS5sZXZlbCwKICAgIGUubWV0aG9kLAogICAgZS53aW5kb3dCaXRzLAogICAgZS5tZW1MZXZlbCwKICAgIGUuc3RyYXRlZ3kKICApOwogIGlmIChhICE9PSBrZSkKICAgIHRocm93IG5ldyBFcnJvcihJYVthXSk7CiAgaWYgKGUuaGVhZGVyICYmIHYyLmRlZmxhdGVTZXRIZWFkZXIodGhpcy5zdHJtLCBlLmhlYWRlciksIGUuZGljdGlvbmFyeSkgewogICAgbGV0IEE7CiAgICBpZiAodHlwZW9mIGUuZGljdGlvbmFyeSA9PSAic3RyaW5nIiA/IEEgPSBfMi5zdHJpbmcyYnVmKGUuZGljdGlvbmFyeSkgOiBtbi5jYWxsKGUuZGljdGlvbmFyeSkgPT09ICJbb2JqZWN0IEFycmF5QnVmZmVyXSIgPyBBID0gbmV3IFVpbnQ4QXJyYXkoZS5kaWN0aW9uYXJ5KSA6IEEgPSBlLmRpY3Rpb25hcnksIGEgPSB2Mi5kZWZsYXRlU2V0RGljdGlvbmFyeSh0aGlzLnN0cm0sIEEpLCBhICE9PSBrZSkKICAgICAgdGhyb3cgbmV3IEVycm9yKElhW2FdKTsKICAgIHRoaXMuX2RpY3Rfc2V0ID0gITA7CiAgfQp9CldlLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24ociwgZSkgewogIGNvbnN0IGEgPSB0aGlzLnN0cm0sIEEgPSB0aGlzLm9wdGlvbnMuY2h1bmtTaXplOwogIGxldCB0LCBpOwogIGlmICh0aGlzLmVuZGVkKQogICAgcmV0dXJuICExOwogIGZvciAoZSA9PT0gfn5lID8gaSA9IGUgOiBpID0gZSA9PT0gITAgPyBmdSA6IHR1LCB0eXBlb2YgciA9PSAic3RyaW5nIiA/IGEuaW5wdXQgPSBfMi5zdHJpbmcyYnVmKHIpIDogbW4uY2FsbChyKSA9PT0gIltvYmplY3QgQXJyYXlCdWZmZXJdIiA/IGEuaW5wdXQgPSBuZXcgVWludDhBcnJheShyKSA6IGEuaW5wdXQgPSByLCBhLm5leHRfaW4gPSAwLCBhLmF2YWlsX2luID0gYS5pbnB1dC5sZW5ndGg7IDsgKSB7CiAgICBpZiAoYS5hdmFpbF9vdXQgPT09IDAgJiYgKGEub3V0cHV0ID0gbmV3IFVpbnQ4QXJyYXkoQSksIGEubmV4dF9vdXQgPSAwLCBhLmF2YWlsX291dCA9IEEpLCAoaSA9PT0gaXUgfHwgaSA9PT0gbnUpICYmIGEuYXZhaWxfb3V0IDw9IDYpIHsKICAgICAgdGhpcy5vbkRhdGEoYS5vdXRwdXQuc3ViYXJyYXkoMCwgYS5uZXh0X291dCkpLCBhLmF2YWlsX291dCA9IDA7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgaWYgKHQgPSB2Mi5kZWZsYXRlKGEsIGkpLCB0ID09PSBvdSkKICAgICAgcmV0dXJuIGEubmV4dF9vdXQgPiAwICYmIHRoaXMub25EYXRhKGEub3V0cHV0LnN1YmFycmF5KDAsIGEubmV4dF9vdXQpKSwgdCA9IHYyLmRlZmxhdGVFbmQodGhpcy5zdHJtKSwgdGhpcy5vbkVuZCh0KSwgdGhpcy5lbmRlZCA9ICEwLCB0ID09PSBrZTsKICAgIGlmIChhLmF2YWlsX291dCA9PT0gMCkgewogICAgICB0aGlzLm9uRGF0YShhLm91dHB1dCk7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgaWYgKGkgPiAwICYmIGEubmV4dF9vdXQgPiAwKSB7CiAgICAgIHRoaXMub25EYXRhKGEub3V0cHV0LnN1YmFycmF5KDAsIGEubmV4dF9vdXQpKSwgYS5hdmFpbF9vdXQgPSAwOwogICAgICBjb250aW51ZTsKICAgIH0KICAgIGlmIChhLmF2YWlsX2luID09PSAwKSBicmVhazsKICB9CiAgcmV0dXJuICEwOwp9OwpXZS5wcm90b3R5cGUub25EYXRhID0gZnVuY3Rpb24ocikgewogIHRoaXMuY2h1bmtzLnB1c2gocik7Cn07CldlLnByb3RvdHlwZS5vbkVuZCA9IGZ1bmN0aW9uKHIpIHsKICByID09PSBrZSAmJiAodGhpcy5yZXN1bHQgPSBDZS5mbGF0dGVuQ2h1bmtzKHRoaXMuY2h1bmtzKSksIHRoaXMuY2h1bmtzID0gW10sIHRoaXMuZXJyID0gciwgdGhpcy5tc2cgPSB0aGlzLnN0cm0ubXNnOwp9OwpmdW5jdGlvbiBzdShyLCBlKSB7CiAgY29uc3QgYSA9IG5ldyBXZShlKTsKICBpZiAoYS5wdXNoKHIsICEwKSwgYS5lcnIpCiAgICB0aHJvdyBhLm1zZyB8fCBJYVthLmVycl07CiAgcmV0dXJuIGEucmVzdWx0Owp9CnZhciBidSA9IHN1LCBkdSA9IHsKICBkZWZsYXRlOiBidQp9Owpjb25zdCBZMiA9IDE2MjA5LCBodSA9IDE2MTkxOwp2YXIgdnUgPSBmdW5jdGlvbihlLCBhKSB7CiAgbGV0IEEsIHQsIGksIG4sIGYsIHUsIG8sIGwsIHMsIGMsIGQsIHYsIGssIEUsIGcsIHcsIEIsIG0sIHAsIFcsIEMsIF8sIE4sIEQ7CiAgY29uc3QgWSA9IGUuc3RhdGU7CiAgQSA9IGUubmV4dF9pbiwgTiA9IGUuaW5wdXQsIHQgPSBBICsgKGUuYXZhaWxfaW4gLSA1KSwgaSA9IGUubmV4dF9vdXQsIEQgPSBlLm91dHB1dCwgbiA9IGkgLSAoYSAtIGUuYXZhaWxfb3V0KSwgZiA9IGkgKyAoZS5hdmFpbF9vdXQgLSAyNTcpLCB1ID0gWS5kbWF4LCBvID0gWS53c2l6ZSwgbCA9IFkud2hhdmUsIHMgPSBZLnduZXh0LCBjID0gWS53aW5kb3csIGQgPSBZLmhvbGQsIHYgPSBZLmJpdHMsIGsgPSBZLmxlbmNvZGUsIEUgPSBZLmRpc3Rjb2RlLCBnID0gKDEgPDwgWS5sZW5iaXRzKSAtIDEsIHcgPSAoMSA8PCBZLmRpc3RiaXRzKSAtIDE7CiAgcjoKICAgIGRvIHsKICAgICAgdiA8IDE1ICYmIChkICs9IE5bQSsrXSA8PCB2LCB2ICs9IDgsIGQgKz0gTltBKytdIDw8IHYsIHYgKz0gOCksIEIgPSBrW2QgJiBnXTsKICAgICAgYToKICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgIGlmIChtID0gQiA+Pj4gMjQsIGQgPj4+PSBtLCB2IC09IG0sIG0gPSBCID4+PiAxNiAmIDI1NSwgbSA9PT0gMCkKICAgICAgICAgICAgRFtpKytdID0gQiAmIDY1NTM1OwogICAgICAgICAgZWxzZSBpZiAobSAmIDE2KSB7CiAgICAgICAgICAgIHAgPSBCICYgNjU1MzUsIG0gJj0gMTUsIG0gJiYgKHYgPCBtICYmIChkICs9IE5bQSsrXSA8PCB2LCB2ICs9IDgpLCBwICs9IGQgJiAoMSA8PCBtKSAtIDEsIGQgPj4+PSBtLCB2IC09IG0pLCB2IDwgMTUgJiYgKGQgKz0gTltBKytdIDw8IHYsIHYgKz0gOCwgZCArPSBOW0ErK10gPDwgdiwgdiArPSA4KSwgQiA9IEVbZCAmIHddOwogICAgICAgICAgICBlOgogICAgICAgICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgaWYgKG0gPSBCID4+PiAyNCwgZCA+Pj49IG0sIHYgLT0gbSwgbSA9IEIgPj4+IDE2ICYgMjU1LCBtICYgMTYpIHsKICAgICAgICAgICAgICAgICAgaWYgKFcgPSBCICYgNjU1MzUsIG0gJj0gMTUsIHYgPCBtICYmIChkICs9IE5bQSsrXSA8PCB2LCB2ICs9IDgsIHYgPCBtICYmIChkICs9IE5bQSsrXSA8PCB2LCB2ICs9IDgpKSwgVyArPSBkICYgKDEgPDwgbSkgLSAxLCBXID4gdSkgewogICAgICAgICAgICAgICAgICAgIGUubXNnID0gImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIiwgWS5tb2RlID0gWTI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoZCA+Pj49IG0sIHYgLT0gbSwgbSA9IGkgLSBuLCBXID4gbSkgewogICAgICAgICAgICAgICAgICAgIGlmIChtID0gVyAtIG0sIG0gPiBsICYmIFkuc2FuZSkgewogICAgICAgICAgICAgICAgICAgICAgZS5tc2cgPSAiaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLCBZLm1vZGUgPSBZMjsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChDID0gMCwgXyA9IGMsIHMgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChDICs9IG8gLSBtLCBtIDwgcCkgewogICAgICAgICAgICAgICAgICAgICAgICBwIC09IG07CiAgICAgICAgICAgICAgICAgICAgICAgIGRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgRFtpKytdID0gY1tDKytdOwogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoLS1tKTsKICAgICAgICAgICAgICAgICAgICAgICAgQyA9IGkgLSBXLCBfID0gRDsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHMgPCBtKSB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoQyArPSBvICsgcyAtIG0sIG0gLT0gcywgbSA8IHApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcCAtPSBtOwogICAgICAgICAgICAgICAgICAgICAgICBkbwogICAgICAgICAgICAgICAgICAgICAgICAgIERbaSsrXSA9IGNbQysrXTsKICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKC0tbSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChDID0gMCwgcyA8IHApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBtID0gcywgcCAtPSBtOwogICAgICAgICAgICAgICAgICAgICAgICAgIGRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEW2krK10gPSBjW0MrK107CiAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKC0tbSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgQyA9IGkgLSBXLCBfID0gRDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoQyArPSBzIC0gbSwgbSA8IHApIHsKICAgICAgICAgICAgICAgICAgICAgIHAgLT0gbTsKICAgICAgICAgICAgICAgICAgICAgIGRvCiAgICAgICAgICAgICAgICAgICAgICAgIERbaSsrXSA9IGNbQysrXTsKICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgtLW0pOwogICAgICAgICAgICAgICAgICAgICAgQyA9IGkgLSBXLCBfID0gRDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZm9yICg7IHAgPiAyOyApCiAgICAgICAgICAgICAgICAgICAgICBEW2krK10gPSBfW0MrK10sIERbaSsrXSA9IF9bQysrXSwgRFtpKytdID0gX1tDKytdLCBwIC09IDM7CiAgICAgICAgICAgICAgICAgICAgcCAmJiAoRFtpKytdID0gX1tDKytdLCBwID4gMSAmJiAoRFtpKytdID0gX1tDKytdKSk7CiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgQyA9IGkgLSBXOwogICAgICAgICAgICAgICAgICAgIGRvCiAgICAgICAgICAgICAgICAgICAgICBEW2krK10gPSBEW0MrK10sIERbaSsrXSA9IERbQysrXSwgRFtpKytdID0gRFtDKytdLCBwIC09IDM7CiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHAgPiAyKTsKICAgICAgICAgICAgICAgICAgICBwICYmIChEW2krK10gPSBEW0MrK10sIHAgPiAxICYmIChEW2krK10gPSBEW0MrK10pKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtICYgNjQpIHsKICAgICAgICAgICAgICAgICAgZS5tc2cgPSAiaW52YWxpZCBkaXN0YW5jZSBjb2RlIiwgWS5tb2RlID0gWTI7CiAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICBCID0gRVsoQiAmIDY1NTM1KSArIChkICYgKDEgPDwgbSkgLSAxKV07CiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgaWYgKG0gJiA2NCkKICAgICAgICAgICAgaWYgKG0gJiAzMikgewogICAgICAgICAgICAgIFkubW9kZSA9IGh1OwogICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgZS5tc2cgPSAiaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIiwgWS5tb2RlID0gWTI7CiAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIEIgPSBrWyhCICYgNjU1MzUpICsgKGQgJiAoMSA8PCBtKSAtIDEpXTsKICAgICAgICAgICAgY29udGludWUgYTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0gd2hpbGUgKEEgPCB0ICYmIGkgPCBmKTsKICBwID0gdiA+PiAzLCBBIC09IHAsIHYgLT0gcCA8PCAzLCBkICY9ICgxIDw8IHYpIC0gMSwgZS5uZXh0X2luID0gQSwgZS5uZXh0X291dCA9IGksIGUuYXZhaWxfaW4gPSBBIDwgdCA/IDUgKyAodCAtIEEpIDogNSAtIChBIC0gdCksIGUuYXZhaWxfb3V0ID0gaSA8IGYgPyAyNTcgKyAoZiAtIGkpIDogMjU3IC0gKGkgLSBmKSwgWS5ob2xkID0gZCwgWS5iaXRzID0gdjsKfTsKY29uc3QgWGEgPSAxNSwgdXQgPSA4NTIsIGx0ID0gNTkyLCBjdCA9IDAsIFVlID0gMSwgc3QgPSAyLCBrdSA9IG5ldyBVaW50MTZBcnJheShbCiAgLyogTGVuZ3RoIGNvZGVzIDI1Ny4uMjg1IGJhc2UgKi8KICAzLAogIDQsCiAgNSwKICA2LAogIDcsCiAgOCwKICA5LAogIDEwLAogIDExLAogIDEzLAogIDE1LAogIDE3LAogIDE5LAogIDIzLAogIDI3LAogIDMxLAogIDM1LAogIDQzLAogIDUxLAogIDU5LAogIDY3LAogIDgzLAogIDk5LAogIDExNSwKICAxMzEsCiAgMTYzLAogIDE5NSwKICAyMjcsCiAgMjU4LAogIDAsCiAgMApdKSwgZ3UgPSBuZXcgVWludDhBcnJheShbCiAgLyogTGVuZ3RoIGNvZGVzIDI1Ny4uMjg1IGV4dHJhICovCiAgMTYsCiAgMTYsCiAgMTYsCiAgMTYsCiAgMTYsCiAgMTYsCiAgMTYsCiAgMTYsCiAgMTcsCiAgMTcsCiAgMTcsCiAgMTcsCiAgMTgsCiAgMTgsCiAgMTgsCiAgMTgsCiAgMTksCiAgMTksCiAgMTksCiAgMTksCiAgMjAsCiAgMjAsCiAgMjAsCiAgMjAsCiAgMjEsCiAgMjEsCiAgMjEsCiAgMjEsCiAgMTYsCiAgNzIsCiAgNzgKXSksIG11ID0gbmV3IFVpbnQxNkFycmF5KFsKICAvKiBEaXN0YW5jZSBjb2RlcyAwLi4yOSBiYXNlICovCiAgMSwKICAyLAogIDMsCiAgNCwKICA1LAogIDcsCiAgOSwKICAxMywKICAxNywKICAyNSwKICAzMywKICA0OSwKICA2NSwKICA5NywKICAxMjksCiAgMTkzLAogIDI1NywKICAzODUsCiAgNTEzLAogIDc2OSwKICAxMDI1LAogIDE1MzcsCiAgMjA0OSwKICAzMDczLAogIDQwOTcsCiAgNjE0NSwKICA4MTkzLAogIDEyMjg5LAogIDE2Mzg1LAogIDI0NTc3LAogIDAsCiAgMApdKSwgcHUgPSBuZXcgVWludDhBcnJheShbCiAgLyogRGlzdGFuY2UgY29kZXMgMC4uMjkgZXh0cmEgKi8KICAxNiwKICAxNiwKICAxNiwKICAxNiwKICAxNywKICAxNywKICAxOCwKICAxOCwKICAxOSwKICAxOSwKICAyMCwKICAyMCwKICAyMSwKICAyMSwKICAyMiwKICAyMiwKICAyMywKICAyMywKICAyNCwKICAyNCwKICAyNSwKICAyNSwKICAyNiwKICAyNiwKICAyNywKICAyNywKICAyOCwKICAyOCwKICAyOSwKICAyOSwKICA2NCwKICA2NApdKSwgd3UgPSAociwgZSwgYSwgQSwgdCwgaSwgbiwgZikgPT4gewogIGNvbnN0IHUgPSBmLmJpdHM7CiAgbGV0IG8gPSAwLCBsID0gMCwgcyA9IDAsIGMgPSAwLCBkID0gMCwgdiA9IDAsIGsgPSAwLCBFID0gMCwgZyA9IDAsIHcgPSAwLCBCLCBtLCBwLCBXLCBDLCBfID0gbnVsbCwgTjsKICBjb25zdCBEID0gbmV3IFVpbnQxNkFycmF5KFhhICsgMSksIFkgPSBuZXcgVWludDE2QXJyYXkoWGEgKyAxKTsKICBsZXQgZjAgPSBudWxsLCBHLCBKLCBLOwogIGZvciAobyA9IDA7IG8gPD0gWGE7IG8rKykKICAgIERbb10gPSAwOwogIGZvciAobCA9IDA7IGwgPCBBOyBsKyspCiAgICBEW2VbYSArIGxdXSsrOwogIGZvciAoZCA9IHUsIGMgPSBYYTsgYyA+PSAxICYmIERbY10gPT09IDA7IGMtLSkKICAgIDsKICBpZiAoZCA+IGMgJiYgKGQgPSBjKSwgYyA9PT0gMCkKICAgIHJldHVybiB0W2krK10gPSAxIDw8IDI0IHwgNjQgPDwgMTYgfCAwLCB0W2krK10gPSAxIDw8IDI0IHwgNjQgPDwgMTYgfCAwLCBmLmJpdHMgPSAxLCAwOwogIGZvciAocyA9IDE7IHMgPCBjICYmIERbc10gPT09IDA7IHMrKykKICAgIDsKICBmb3IgKGQgPCBzICYmIChkID0gcyksIEUgPSAxLCBvID0gMTsgbyA8PSBYYTsgbysrKQogICAgaWYgKEUgPDw9IDEsIEUgLT0gRFtvXSwgRSA8IDApCiAgICAgIHJldHVybiAtMTsKICBpZiAoRSA+IDAgJiYgKHIgPT09IGN0IHx8IGMgIT09IDEpKQogICAgcmV0dXJuIC0xOwogIGZvciAoWVsxXSA9IDAsIG8gPSAxOyBvIDwgWGE7IG8rKykKICAgIFlbbyArIDFdID0gWVtvXSArIERbb107CiAgZm9yIChsID0gMDsgbCA8IEE7IGwrKykKICAgIGVbYSArIGxdICE9PSAwICYmIChuW1lbZVthICsgbF1dKytdID0gbCk7CiAgaWYgKHIgPT09IGN0ID8gKF8gPSBmMCA9IG4sIE4gPSAyMCkgOiByID09PSBVZSA/IChfID0ga3UsIGYwID0gZ3UsIE4gPSAyNTcpIDogKF8gPSBtdSwgZjAgPSBwdSwgTiA9IDApLCB3ID0gMCwgbCA9IDAsIG8gPSBzLCBDID0gaSwgdiA9IGQsIGsgPSAwLCBwID0gLTEsIGcgPSAxIDw8IGQsIFcgPSBnIC0gMSwgciA9PT0gVWUgJiYgZyA+IHV0IHx8IHIgPT09IHN0ICYmIGcgPiBsdCkKICAgIHJldHVybiAxOwogIGZvciAoOyA7ICkgewogICAgRyA9IG8gLSBrLCBuW2xdICsgMSA8IE4gPyAoSiA9IDAsIEsgPSBuW2xdKSA6IG5bbF0gPj0gTiA/IChKID0gZjBbbltsXSAtIE5dLCBLID0gX1tuW2xdIC0gTl0pIDogKEogPSA5NiwgSyA9IDApLCBCID0gMSA8PCBvIC0gaywgbSA9IDEgPDwgdiwgcyA9IG07CiAgICBkbwogICAgICBtIC09IEIsIHRbQyArICh3ID4+IGspICsgbV0gPSBHIDw8IDI0IHwgSiA8PCAxNiB8IEsgfCAwOwogICAgd2hpbGUgKG0gIT09IDApOwogICAgZm9yIChCID0gMSA8PCBvIC0gMTsgdyAmIEI7ICkKICAgICAgQiA+Pj0gMTsKICAgIGlmIChCICE9PSAwID8gKHcgJj0gQiAtIDEsIHcgKz0gQikgOiB3ID0gMCwgbCsrLCAtLURbb10gPT09IDApIHsKICAgICAgaWYgKG8gPT09IGMpCiAgICAgICAgYnJlYWs7CiAgICAgIG8gPSBlW2EgKyBuW2xdXTsKICAgIH0KICAgIGlmIChvID4gZCAmJiAodyAmIFcpICE9PSBwKSB7CiAgICAgIGZvciAoayA9PT0gMCAmJiAoayA9IGQpLCBDICs9IHMsIHYgPSBvIC0gaywgRSA9IDEgPDwgdjsgdiArIGsgPCBjICYmIChFIC09IERbdiArIGtdLCAhKEUgPD0gMCkpOyApCiAgICAgICAgdisrLCBFIDw8PSAxOwogICAgICBpZiAoZyArPSAxIDw8IHYsIHIgPT09IFVlICYmIGcgPiB1dCB8fCByID09PSBzdCAmJiBnID4gbHQpCiAgICAgICAgcmV0dXJuIDE7CiAgICAgIHAgPSB3ICYgVywgdFtwXSA9IGQgPDwgMjQgfCB2IDw8IDE2IHwgQyAtIGkgfCAwOwogICAgfQogIH0KICByZXR1cm4gdyAhPT0gMCAmJiAodFtDICsgd10gPSBvIC0gayA8PCAyNCB8IDY0IDw8IDE2IHwgMCksIGYuYml0cyA9IGQsIDA7Cn07CnZhciBrMiA9IHd1Owpjb25zdCB5dSA9IDAsIHBuID0gMSwgd24gPSAyLCB7CiAgWl9GSU5JU0g6IGJ0LAogIFpfQkxPQ0s6IEV1LAogIFpfVFJFRVM6IE8yLAogIFpfT0s6IENhLAogIFpfU1RSRUFNX0VORDogWnUsCiAgWl9ORUVEX0RJQ1Q6IEJ1LAogIFpfU1RSRUFNX0VSUk9SOiBDciwKICBaX0RBVEFfRVJST1I6IHluLAogIFpfTUVNX0VSUk9SOiBFbiwKICBaX0JVRl9FUlJPUjogSXUsCiAgWl9ERUZMQVRFRDogZHQKfSA9IEllLCBfZSA9IDE2MTgwLCBodCA9IDE2MTgxLCB2dCA9IDE2MTgyLCBrdCA9IDE2MTgzLCBndCA9IDE2MTg0LCBtdCA9IDE2MTg1LCBwdCA9IDE2MTg2LCB3dCA9IDE2MTg3LCB5dCA9IDE2MTg4LCBFdCA9IDE2MTg5LCBnZSA9IDE2MTkwLCB6ciA9IDE2MTkxLCBqZSA9IDE2MTkyLCBadCA9IDE2MTkzLCBRZSA9IDE2MTk0LCBCdCA9IDE2MTk1LCBJdCA9IDE2MTk2LCBGdCA9IDE2MTk3LCBDdCA9IDE2MTk4LCBVMiA9IDE2MTk5LCBqMiA9IDE2MjAwLCBXdCA9IDE2MjAxLCBfdCA9IDE2MjAyLCBHdCA9IDE2MjAzLCBYdCA9IDE2MjA0LCBSdCA9IDE2MjA1LCBKZSA9IDE2MjA2LCBWdCA9IDE2MjA3LCBTdCA9IDE2MjA4LCBNMCA9IDE2MjA5LCBabiA9IDE2MjEwLCBCbiA9IDE2MjExLCBGdSA9IDg1MiwgQ3UgPSA1OTIsIFd1ID0gMTUsIF91ID0gV3UsIER0ID0gKHIpID0+IChyID4+PiAyNCAmIDI1NSkgKyAociA+Pj4gOCAmIDY1MjgwKSArICgociAmIDY1MjgwKSA8PCA4KSArICgociAmIDI1NSkgPDwgMjQpOwpmdW5jdGlvbiBHdSgpIHsKICB0aGlzLnN0cm0gPSBudWxsLCB0aGlzLm1vZGUgPSAwLCB0aGlzLmxhc3QgPSAhMSwgdGhpcy53cmFwID0gMCwgdGhpcy5oYXZlZGljdCA9ICExLCB0aGlzLmZsYWdzID0gMCwgdGhpcy5kbWF4ID0gMCwgdGhpcy5jaGVjayA9IDAsIHRoaXMudG90YWwgPSAwLCB0aGlzLmhlYWQgPSBudWxsLCB0aGlzLndiaXRzID0gMCwgdGhpcy53c2l6ZSA9IDAsIHRoaXMud2hhdmUgPSAwLCB0aGlzLnduZXh0ID0gMCwgdGhpcy53aW5kb3cgPSBudWxsLCB0aGlzLmhvbGQgPSAwLCB0aGlzLmJpdHMgPSAwLCB0aGlzLmxlbmd0aCA9IDAsIHRoaXMub2Zmc2V0ID0gMCwgdGhpcy5leHRyYSA9IDAsIHRoaXMubGVuY29kZSA9IG51bGwsIHRoaXMuZGlzdGNvZGUgPSBudWxsLCB0aGlzLmxlbmJpdHMgPSAwLCB0aGlzLmRpc3RiaXRzID0gMCwgdGhpcy5uY29kZSA9IDAsIHRoaXMubmxlbiA9IDAsIHRoaXMubmRpc3QgPSAwLCB0aGlzLmhhdmUgPSAwLCB0aGlzLm5leHQgPSBudWxsLCB0aGlzLmxlbnMgPSBuZXcgVWludDE2QXJyYXkoMzIwKSwgdGhpcy53b3JrID0gbmV3IFVpbnQxNkFycmF5KDI4OCksIHRoaXMubGVuZHluID0gbnVsbCwgdGhpcy5kaXN0ZHluID0gbnVsbCwgdGhpcy5zYW5lID0gMCwgdGhpcy5iYWNrID0gMCwgdGhpcy53YXMgPSAwOwp9CmNvbnN0IF9hID0gKHIpID0+IHsKICBpZiAoIXIpCiAgICByZXR1cm4gMTsKICBjb25zdCBlID0gci5zdGF0ZTsKICByZXR1cm4gIWUgfHwgZS5zdHJtICE9PSByIHx8IGUubW9kZSA8IF9lIHx8IGUubW9kZSA+IEJuID8gMSA6IDA7Cn0sIEluID0gKHIpID0+IHsKICBpZiAoX2EocikpCiAgICByZXR1cm4gQ3I7CiAgY29uc3QgZSA9IHIuc3RhdGU7CiAgcmV0dXJuIHIudG90YWxfaW4gPSByLnRvdGFsX291dCA9IGUudG90YWwgPSAwLCByLm1zZyA9ICIiLCBlLndyYXAgJiYgKHIuYWRsZXIgPSBlLndyYXAgJiAxKSwgZS5tb2RlID0gX2UsIGUubGFzdCA9IDAsIGUuaGF2ZWRpY3QgPSAwLCBlLmZsYWdzID0gLTEsIGUuZG1heCA9IDMyNzY4LCBlLmhlYWQgPSBudWxsLCBlLmhvbGQgPSAwLCBlLmJpdHMgPSAwLCBlLmxlbmNvZGUgPSBlLmxlbmR5biA9IG5ldyBJbnQzMkFycmF5KEZ1KSwgZS5kaXN0Y29kZSA9IGUuZGlzdGR5biA9IG5ldyBJbnQzMkFycmF5KEN1KSwgZS5zYW5lID0gMSwgZS5iYWNrID0gLTEsIENhOwp9LCBGbiA9IChyKSA9PiB7CiAgaWYgKF9hKHIpKQogICAgcmV0dXJuIENyOwogIGNvbnN0IGUgPSByLnN0YXRlOwogIHJldHVybiBlLndzaXplID0gMCwgZS53aGF2ZSA9IDAsIGUud25leHQgPSAwLCBJbihyKTsKfSwgQ24gPSAociwgZSkgPT4gewogIGxldCBhOwogIGlmIChfYShyKSkKICAgIHJldHVybiBDcjsKICBjb25zdCBBID0gci5zdGF0ZTsKICByZXR1cm4gZSA8IDAgPyAoYSA9IDAsIGUgPSAtZSkgOiAoYSA9IChlID4+IDQpICsgNSwgZSA8IDQ4ICYmIChlICY9IDE1KSksIGUgJiYgKGUgPCA4IHx8IGUgPiAxNSkgPyBDciA6IChBLndpbmRvdyAhPT0gbnVsbCAmJiBBLndiaXRzICE9PSBlICYmIChBLndpbmRvdyA9IG51bGwpLCBBLndyYXAgPSBhLCBBLndiaXRzID0gZSwgRm4ocikpOwp9LCBXbiA9IChyLCBlKSA9PiB7CiAgaWYgKCFyKQogICAgcmV0dXJuIENyOwogIGNvbnN0IGEgPSBuZXcgR3UoKTsKICByLnN0YXRlID0gYSwgYS5zdHJtID0gciwgYS53aW5kb3cgPSBudWxsLCBhLm1vZGUgPSBfZTsKICBjb25zdCBBID0gQ24ociwgZSk7CiAgcmV0dXJuIEEgIT09IENhICYmIChyLnN0YXRlID0gbnVsbCksIEE7Cn0sIFh1ID0gKHIpID0+IFduKHIsIF91KTsKbGV0IHh0ID0gITAsIEhlLCB6ZTsKY29uc3QgUnUgPSAocikgPT4gewogIGlmICh4dCkgewogICAgSGUgPSBuZXcgSW50MzJBcnJheSg1MTIpLCB6ZSA9IG5ldyBJbnQzMkFycmF5KDMyKTsKICAgIGxldCBlID0gMDsKICAgIGZvciAoOyBlIDwgMTQ0OyApCiAgICAgIHIubGVuc1tlKytdID0gODsKICAgIGZvciAoOyBlIDwgMjU2OyApCiAgICAgIHIubGVuc1tlKytdID0gOTsKICAgIGZvciAoOyBlIDwgMjgwOyApCiAgICAgIHIubGVuc1tlKytdID0gNzsKICAgIGZvciAoOyBlIDwgMjg4OyApCiAgICAgIHIubGVuc1tlKytdID0gODsKICAgIGZvciAoazIocG4sIHIubGVucywgMCwgMjg4LCBIZSwgMCwgci53b3JrLCB7IGJpdHM6IDkgfSksIGUgPSAwOyBlIDwgMzI7ICkKICAgICAgci5sZW5zW2UrK10gPSA1OwogICAgazIod24sIHIubGVucywgMCwgMzIsIHplLCAwLCByLndvcmssIHsgYml0czogNSB9KSwgeHQgPSAhMTsKICB9CiAgci5sZW5jb2RlID0gSGUsIHIubGVuYml0cyA9IDksIHIuZGlzdGNvZGUgPSB6ZSwgci5kaXN0Yml0cyA9IDU7Cn0sIF9uID0gKHIsIGUsIGEsIEEpID0+IHsKICBsZXQgdDsKICBjb25zdCBpID0gci5zdGF0ZTsKICByZXR1cm4gaS53aW5kb3cgPT09IG51bGwgJiYgKGkud3NpemUgPSAxIDw8IGkud2JpdHMsIGkud25leHQgPSAwLCBpLndoYXZlID0gMCwgaS53aW5kb3cgPSBuZXcgVWludDhBcnJheShpLndzaXplKSksIEEgPj0gaS53c2l6ZSA/IChpLndpbmRvdy5zZXQoZS5zdWJhcnJheShhIC0gaS53c2l6ZSwgYSksIDApLCBpLnduZXh0ID0gMCwgaS53aGF2ZSA9IGkud3NpemUpIDogKHQgPSBpLndzaXplIC0gaS53bmV4dCwgdCA+IEEgJiYgKHQgPSBBKSwgaS53aW5kb3cuc2V0KGUuc3ViYXJyYXkoYSAtIEEsIGEgLSBBICsgdCksIGkud25leHQpLCBBIC09IHQsIEEgPyAoaS53aW5kb3cuc2V0KGUuc3ViYXJyYXkoYSAtIEEsIGEpLCAwKSwgaS53bmV4dCA9IEEsIGkud2hhdmUgPSBpLndzaXplKSA6IChpLnduZXh0ICs9IHQsIGkud25leHQgPT09IGkud3NpemUgJiYgKGkud25leHQgPSAwKSwgaS53aGF2ZSA8IGkud3NpemUgJiYgKGkud2hhdmUgKz0gdCkpKSwgMDsKfSwgVnUgPSAociwgZSkgPT4gewogIGxldCBhLCBBLCB0LCBpLCBuLCBmLCB1LCBvLCBsLCBzLCBjLCBkLCB2LCBrLCBFID0gMCwgZywgdywgQiwgbSwgcCwgVywgQywgXzsKICBjb25zdCBOID0gbmV3IFVpbnQ4QXJyYXkoNCk7CiAgbGV0IEQsIFk7CiAgY29uc3QgZjAgPSAoCiAgICAvKiBwZXJtdXRhdGlvbiBvZiBjb2RlIGxlbmd0aHMgKi8KICAgIG5ldyBVaW50OEFycmF5KFsxNiwgMTcsIDE4LCAwLCA4LCA3LCA5LCA2LCAxMCwgNSwgMTEsIDQsIDEyLCAzLCAxMywgMiwgMTQsIDEsIDE1XSkKICApOwogIGlmIChfYShyKSB8fCAhci5vdXRwdXQgfHwgIXIuaW5wdXQgJiYgci5hdmFpbF9pbiAhPT0gMCkKICAgIHJldHVybiBDcjsKICBhID0gci5zdGF0ZSwgYS5tb2RlID09PSB6ciAmJiAoYS5tb2RlID0gamUpLCBuID0gci5uZXh0X291dCwgdCA9IHIub3V0cHV0LCB1ID0gci5hdmFpbF9vdXQsIGkgPSByLm5leHRfaW4sIEEgPSByLmlucHV0LCBmID0gci5hdmFpbF9pbiwgbyA9IGEuaG9sZCwgbCA9IGEuYml0cywgcyA9IGYsIGMgPSB1LCBfID0gQ2E7CiAgcjoKICAgIGZvciAoOyA7ICkKICAgICAgc3dpdGNoIChhLm1vZGUpIHsKICAgICAgICBjYXNlIF9lOgogICAgICAgICAgaWYgKGEud3JhcCA9PT0gMCkgewogICAgICAgICAgICBhLm1vZGUgPSBqZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBmb3IgKDsgbCA8IDE2OyApIHsKICAgICAgICAgICAgaWYgKGYgPT09IDApCiAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgZi0tLCBvICs9IEFbaSsrXSA8PCBsLCBsICs9IDg7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoYS53cmFwICYgMiAmJiBvID09PSAzNTYxNSkgewogICAgICAgICAgICBhLndiaXRzID09PSAwICYmIChhLndiaXRzID0gMTUpLCBhLmNoZWNrID0gMCwgTlswXSA9IG8gJiAyNTUsIE5bMV0gPSBvID4+PiA4ICYgMjU1LCBhLmNoZWNrID0gcTAoYS5jaGVjaywgTiwgMiwgMCksIG8gPSAwLCBsID0gMCwgYS5tb2RlID0gaHQ7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGEuaGVhZCAmJiAoYS5oZWFkLmRvbmUgPSAhMSksICEoYS53cmFwICYgMSkgfHwgLyogY2hlY2sgaWYgemxpYiBoZWFkZXIgYWxsb3dlZCAqLwogICAgICAgICAgKCgobyAmIDI1NSkgPDwgOCkgKyAobyA+PiA4KSkgJSAzMSkgewogICAgICAgICAgICByLm1zZyA9ICJpbmNvcnJlY3QgaGVhZGVyIGNoZWNrIiwgYS5tb2RlID0gTTA7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgaWYgKChvICYgMTUpICE9PSBkdCkgewogICAgICAgICAgICByLm1zZyA9ICJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCIsIGEubW9kZSA9IE0wOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChvID4+Pj0gNCwgbCAtPSA0LCBDID0gKG8gJiAxNSkgKyA4LCBhLndiaXRzID09PSAwICYmIChhLndiaXRzID0gQyksIEMgPiAxNSB8fCBDID4gYS53Yml0cykgewogICAgICAgICAgICByLm1zZyA9ICJpbnZhbGlkIHdpbmRvdyBzaXplIiwgYS5tb2RlID0gTTA7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgYS5kbWF4ID0gMSA8PCBhLndiaXRzLCBhLmZsYWdzID0gMCwgci5hZGxlciA9IGEuY2hlY2sgPSAxLCBhLm1vZGUgPSBvICYgNTEyID8gRXQgOiB6ciwgbyA9IDAsIGwgPSAwOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBodDoKICAgICAgICAgIGZvciAoOyBsIDwgMTY7ICkgewogICAgICAgICAgICBpZiAoZiA9PT0gMCkKICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICBmLS0sIG8gKz0gQVtpKytdIDw8IGwsIGwgKz0gODsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChhLmZsYWdzID0gbywgKGEuZmxhZ3MgJiAyNTUpICE9PSBkdCkgewogICAgICAgICAgICByLm1zZyA9ICJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCIsIGEubW9kZSA9IE0wOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChhLmZsYWdzICYgNTczNDQpIHsKICAgICAgICAgICAgci5tc2cgPSAidW5rbm93biBoZWFkZXIgZmxhZ3Mgc2V0IiwgYS5tb2RlID0gTTA7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgYS5oZWFkICYmIChhLmhlYWQudGV4dCA9IG8gPj4gOCAmIDEpLCBhLmZsYWdzICYgNTEyICYmIGEud3JhcCAmIDQgJiYgKE5bMF0gPSBvICYgMjU1LCBOWzFdID0gbyA+Pj4gOCAmIDI1NSwgYS5jaGVjayA9IHEwKGEuY2hlY2ssIE4sIDIsIDApKSwgbyA9IDAsIGwgPSAwLCBhLm1vZGUgPSB2dDsKICAgICAgICBjYXNlIHZ0OgogICAgICAgICAgZm9yICg7IGwgPCAzMjsgKSB7CiAgICAgICAgICAgIGlmIChmID09PSAwKQogICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgIGYtLSwgbyArPSBBW2krK10gPDwgbCwgbCArPSA4OwogICAgICAgICAgfQogICAgICAgICAgYS5oZWFkICYmIChhLmhlYWQudGltZSA9IG8pLCBhLmZsYWdzICYgNTEyICYmIGEud3JhcCAmIDQgJiYgKE5bMF0gPSBvICYgMjU1LCBOWzFdID0gbyA+Pj4gOCAmIDI1NSwgTlsyXSA9IG8gPj4+IDE2ICYgMjU1LCBOWzNdID0gbyA+Pj4gMjQgJiAyNTUsIGEuY2hlY2sgPSBxMChhLmNoZWNrLCBOLCA0LCAwKSksIG8gPSAwLCBsID0gMCwgYS5tb2RlID0ga3Q7CiAgICAgICAgY2FzZSBrdDoKICAgICAgICAgIGZvciAoOyBsIDwgMTY7ICkgewogICAgICAgICAgICBpZiAoZiA9PT0gMCkKICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICBmLS0sIG8gKz0gQVtpKytdIDw8IGwsIGwgKz0gODsKICAgICAgICAgIH0KICAgICAgICAgIGEuaGVhZCAmJiAoYS5oZWFkLnhmbGFncyA9IG8gJiAyNTUsIGEuaGVhZC5vcyA9IG8gPj4gOCksIGEuZmxhZ3MgJiA1MTIgJiYgYS53cmFwICYgNCAmJiAoTlswXSA9IG8gJiAyNTUsIE5bMV0gPSBvID4+PiA4ICYgMjU1LCBhLmNoZWNrID0gcTAoYS5jaGVjaywgTiwgMiwgMCkpLCBvID0gMCwgbCA9IDAsIGEubW9kZSA9IGd0OwogICAgICAgIGNhc2UgZ3Q6CiAgICAgICAgICBpZiAoYS5mbGFncyAmIDEwMjQpIHsKICAgICAgICAgICAgZm9yICg7IGwgPCAxNjsgKSB7CiAgICAgICAgICAgICAgaWYgKGYgPT09IDApCiAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgIGYtLSwgbyArPSBBW2krK10gPDwgbCwgbCArPSA4OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGEubGVuZ3RoID0gbywgYS5oZWFkICYmIChhLmhlYWQuZXh0cmFfbGVuID0gbyksIGEuZmxhZ3MgJiA1MTIgJiYgYS53cmFwICYgNCAmJiAoTlswXSA9IG8gJiAyNTUsIE5bMV0gPSBvID4+PiA4ICYgMjU1LCBhLmNoZWNrID0gcTAoYS5jaGVjaywgTiwgMiwgMCkpLCBvID0gMCwgbCA9IDA7CiAgICAgICAgICB9IGVsc2UgYS5oZWFkICYmIChhLmhlYWQuZXh0cmEgPSBudWxsKTsKICAgICAgICAgIGEubW9kZSA9IG10OwogICAgICAgIGNhc2UgbXQ6CiAgICAgICAgICBpZiAoYS5mbGFncyAmIDEwMjQgJiYgKGQgPSBhLmxlbmd0aCwgZCA+IGYgJiYgKGQgPSBmKSwgZCAmJiAoYS5oZWFkICYmIChDID0gYS5oZWFkLmV4dHJhX2xlbiAtIGEubGVuZ3RoLCBhLmhlYWQuZXh0cmEgfHwgKGEuaGVhZC5leHRyYSA9IG5ldyBVaW50OEFycmF5KGEuaGVhZC5leHRyYV9sZW4pKSwgYS5oZWFkLmV4dHJhLnNldCgKICAgICAgICAgICAgQS5zdWJhcnJheSgKICAgICAgICAgICAgICBpLAogICAgICAgICAgICAgIC8vIGV4dHJhIGZpZWxkIGlzIGxpbWl0ZWQgdG8gNjU1MzYgYnl0ZXMKICAgICAgICAgICAgICAvLyAtIG5vIG5lZWQgZm9yIGFkZGl0aW9uYWwgc2l6ZSBjaGVjawogICAgICAgICAgICAgIGkgKyBkCiAgICAgICAgICAgICksCiAgICAgICAgICAgIC8qbGVuICsgY29weSA+IHN0YXRlLmhlYWQuZXh0cmFfbWF4IC0gbGVuID8gc3RhdGUuaGVhZC5leHRyYV9tYXggOiBjb3B5LCovCiAgICAgICAgICAgIEMKICAgICAgICAgICkpLCBhLmZsYWdzICYgNTEyICYmIGEud3JhcCAmIDQgJiYgKGEuY2hlY2sgPSBxMChhLmNoZWNrLCBBLCBkLCBpKSksIGYgLT0gZCwgaSArPSBkLCBhLmxlbmd0aCAtPSBkKSwgYS5sZW5ndGgpKQogICAgICAgICAgICBicmVhayByOwogICAgICAgICAgYS5sZW5ndGggPSAwLCBhLm1vZGUgPSBwdDsKICAgICAgICBjYXNlIHB0OgogICAgICAgICAgaWYgKGEuZmxhZ3MgJiAyMDQ4KSB7CiAgICAgICAgICAgIGlmIChmID09PSAwKQogICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgIGQgPSAwOwogICAgICAgICAgICBkbwogICAgICAgICAgICAgIEMgPSBBW2kgKyBkKytdLCBhLmhlYWQgJiYgQyAmJiBhLmxlbmd0aCA8IDY1NTM2ICYmIChhLmhlYWQubmFtZSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKEMpKTsKICAgICAgICAgICAgd2hpbGUgKEMgJiYgZCA8IGYpOwogICAgICAgICAgICBpZiAoYS5mbGFncyAmIDUxMiAmJiBhLndyYXAgJiA0ICYmIChhLmNoZWNrID0gcTAoYS5jaGVjaywgQSwgZCwgaSkpLCBmIC09IGQsIGkgKz0gZCwgQykKICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgfSBlbHNlIGEuaGVhZCAmJiAoYS5oZWFkLm5hbWUgPSBudWxsKTsKICAgICAgICAgIGEubGVuZ3RoID0gMCwgYS5tb2RlID0gd3Q7CiAgICAgICAgY2FzZSB3dDoKICAgICAgICAgIGlmIChhLmZsYWdzICYgNDA5NikgewogICAgICAgICAgICBpZiAoZiA9PT0gMCkKICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICBkID0gMDsKICAgICAgICAgICAgZG8KICAgICAgICAgICAgICBDID0gQVtpICsgZCsrXSwgYS5oZWFkICYmIEMgJiYgYS5sZW5ndGggPCA2NTUzNiAmJiAoYS5oZWFkLmNvbW1lbnQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShDKSk7CiAgICAgICAgICAgIHdoaWxlIChDICYmIGQgPCBmKTsKICAgICAgICAgICAgaWYgKGEuZmxhZ3MgJiA1MTIgJiYgYS53cmFwICYgNCAmJiAoYS5jaGVjayA9IHEwKGEuY2hlY2ssIEEsIGQsIGkpKSwgZiAtPSBkLCBpICs9IGQsIEMpCiAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgIH0gZWxzZSBhLmhlYWQgJiYgKGEuaGVhZC5jb21tZW50ID0gbnVsbCk7CiAgICAgICAgICBhLm1vZGUgPSB5dDsKICAgICAgICBjYXNlIHl0OgogICAgICAgICAgaWYgKGEuZmxhZ3MgJiA1MTIpIHsKICAgICAgICAgICAgZm9yICg7IGwgPCAxNjsgKSB7CiAgICAgICAgICAgICAgaWYgKGYgPT09IDApCiAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgIGYtLSwgbyArPSBBW2krK10gPDwgbCwgbCArPSA4OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChhLndyYXAgJiA0ICYmIG8gIT09IChhLmNoZWNrICYgNjU1MzUpKSB7CiAgICAgICAgICAgICAgci5tc2cgPSAiaGVhZGVyIGNyYyBtaXNtYXRjaCIsIGEubW9kZSA9IE0wOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG8gPSAwLCBsID0gMDsKICAgICAgICAgIH0KICAgICAgICAgIGEuaGVhZCAmJiAoYS5oZWFkLmhjcmMgPSBhLmZsYWdzID4+IDkgJiAxLCBhLmhlYWQuZG9uZSA9ICEwKSwgci5hZGxlciA9IGEuY2hlY2sgPSAwLCBhLm1vZGUgPSB6cjsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgRXQ6CiAgICAgICAgICBmb3IgKDsgbCA8IDMyOyApIHsKICAgICAgICAgICAgaWYgKGYgPT09IDApCiAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgZi0tLCBvICs9IEFbaSsrXSA8PCBsLCBsICs9IDg7CiAgICAgICAgICB9CiAgICAgICAgICByLmFkbGVyID0gYS5jaGVjayA9IER0KG8pLCBvID0gMCwgbCA9IDAsIGEubW9kZSA9IGdlOwogICAgICAgIGNhc2UgZ2U6CiAgICAgICAgICBpZiAoYS5oYXZlZGljdCA9PT0gMCkKICAgICAgICAgICAgcmV0dXJuIHIubmV4dF9vdXQgPSBuLCByLmF2YWlsX291dCA9IHUsIHIubmV4dF9pbiA9IGksIHIuYXZhaWxfaW4gPSBmLCBhLmhvbGQgPSBvLCBhLmJpdHMgPSBsLCBCdTsKICAgICAgICAgIHIuYWRsZXIgPSBhLmNoZWNrID0gMSwgYS5tb2RlID0genI7CiAgICAgICAgY2FzZSB6cjoKICAgICAgICAgIGlmIChlID09PSBFdSB8fCBlID09PSBPMikKICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICBjYXNlIGplOgogICAgICAgICAgaWYgKGEubGFzdCkgewogICAgICAgICAgICBvID4+Pj0gbCAmIDcsIGwgLT0gbCAmIDcsIGEubW9kZSA9IEplOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGZvciAoOyBsIDwgMzsgKSB7CiAgICAgICAgICAgIGlmIChmID09PSAwKQogICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgIGYtLSwgbyArPSBBW2krK10gPDwgbCwgbCArPSA4OwogICAgICAgICAgfQogICAgICAgICAgc3dpdGNoIChhLmxhc3QgPSBvICYgMSwgbyA+Pj49IDEsIGwgLT0gMSwgbyAmIDMpIHsKICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgIGEubW9kZSA9IFp0OwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgaWYgKFJ1KGEpLCBhLm1vZGUgPSBVMiwgZSA9PT0gTzIpIHsKICAgICAgICAgICAgICAgIG8gPj4+PSAyLCBsIC09IDI7CiAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgIGEubW9kZSA9IEl0OwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgci5tc2cgPSAiaW52YWxpZCBibG9jayB0eXBlIiwgYS5tb2RlID0gTTA7CiAgICAgICAgICB9CiAgICAgICAgICBvID4+Pj0gMiwgbCAtPSAyOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBadDoKICAgICAgICAgIGZvciAobyA+Pj49IGwgJiA3LCBsIC09IGwgJiA3OyBsIDwgMzI7ICkgewogICAgICAgICAgICBpZiAoZiA9PT0gMCkKICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICBmLS0sIG8gKz0gQVtpKytdIDw8IGwsIGwgKz0gODsKICAgICAgICAgIH0KICAgICAgICAgIGlmICgobyAmIDY1NTM1KSAhPT0gKG8gPj4+IDE2IF4gNjU1MzUpKSB7CiAgICAgICAgICAgIHIubXNnID0gImludmFsaWQgc3RvcmVkIGJsb2NrIGxlbmd0aHMiLCBhLm1vZGUgPSBNMDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoYS5sZW5ndGggPSBvICYgNjU1MzUsIG8gPSAwLCBsID0gMCwgYS5tb2RlID0gUWUsIGUgPT09IE8yKQogICAgICAgICAgICBicmVhayByOwogICAgICAgIGNhc2UgUWU6CiAgICAgICAgICBhLm1vZGUgPSBCdDsKICAgICAgICBjYXNlIEJ0OgogICAgICAgICAgaWYgKGQgPSBhLmxlbmd0aCwgZCkgewogICAgICAgICAgICBpZiAoZCA+IGYgJiYgKGQgPSBmKSwgZCA+IHUgJiYgKGQgPSB1KSwgZCA9PT0gMCkKICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICB0LnNldChBLnN1YmFycmF5KGksIGkgKyBkKSwgbiksIGYgLT0gZCwgaSArPSBkLCB1IC09IGQsIG4gKz0gZCwgYS5sZW5ndGggLT0gZDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBhLm1vZGUgPSB6cjsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgSXQ6CiAgICAgICAgICBmb3IgKDsgbCA8IDE0OyApIHsKICAgICAgICAgICAgaWYgKGYgPT09IDApCiAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgZi0tLCBvICs9IEFbaSsrXSA8PCBsLCBsICs9IDg7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoYS5ubGVuID0gKG8gJiAzMSkgKyAyNTcsIG8gPj4+PSA1LCBsIC09IDUsIGEubmRpc3QgPSAobyAmIDMxKSArIDEsIG8gPj4+PSA1LCBsIC09IDUsIGEubmNvZGUgPSAobyAmIDE1KSArIDQsIG8gPj4+PSA0LCBsIC09IDQsIGEubmxlbiA+IDI4NiB8fCBhLm5kaXN0ID4gMzApIHsKICAgICAgICAgICAgci5tc2cgPSAidG9vIG1hbnkgbGVuZ3RoIG9yIGRpc3RhbmNlIHN5bWJvbHMiLCBhLm1vZGUgPSBNMDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBhLmhhdmUgPSAwLCBhLm1vZGUgPSBGdDsKICAgICAgICBjYXNlIEZ0OgogICAgICAgICAgZm9yICg7IGEuaGF2ZSA8IGEubmNvZGU7ICkgewogICAgICAgICAgICBmb3IgKDsgbCA8IDM7ICkgewogICAgICAgICAgICAgIGlmIChmID09PSAwKQogICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICBmLS0sIG8gKz0gQVtpKytdIDw8IGwsIGwgKz0gODsKICAgICAgICAgICAgfQogICAgICAgICAgICBhLmxlbnNbZjBbYS5oYXZlKytdXSA9IG8gJiA3LCBvID4+Pj0gMywgbCAtPSAzOwogICAgICAgICAgfQogICAgICAgICAgZm9yICg7IGEuaGF2ZSA8IDE5OyApCiAgICAgICAgICAgIGEubGVuc1tmMFthLmhhdmUrK11dID0gMDsKICAgICAgICAgIGlmIChhLmxlbmNvZGUgPSBhLmxlbmR5biwgYS5sZW5iaXRzID0gNywgRCA9IHsgYml0czogYS5sZW5iaXRzIH0sIF8gPSBrMih5dSwgYS5sZW5zLCAwLCAxOSwgYS5sZW5jb2RlLCAwLCBhLndvcmssIEQpLCBhLmxlbmJpdHMgPSBELmJpdHMsIF8pIHsKICAgICAgICAgICAgci5tc2cgPSAiaW52YWxpZCBjb2RlIGxlbmd0aHMgc2V0IiwgYS5tb2RlID0gTTA7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgYS5oYXZlID0gMCwgYS5tb2RlID0gQ3Q7CiAgICAgICAgY2FzZSBDdDoKICAgICAgICAgIGZvciAoOyBhLmhhdmUgPCBhLm5sZW4gKyBhLm5kaXN0OyApIHsKICAgICAgICAgICAgZm9yICg7IEUgPSBhLmxlbmNvZGVbbyAmICgxIDw8IGEubGVuYml0cykgLSAxXSwgZyA9IEUgPj4+IDI0LCB3ID0gRSA+Pj4gMTYgJiAyNTUsIEIgPSBFICYgNjU1MzUsICEoZyA8PSBsKTsgKSB7CiAgICAgICAgICAgICAgaWYgKGYgPT09IDApCiAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgIGYtLSwgbyArPSBBW2krK10gPDwgbCwgbCArPSA4OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChCIDwgMTYpCiAgICAgICAgICAgICAgbyA+Pj49IGcsIGwgLT0gZywgYS5sZW5zW2EuaGF2ZSsrXSA9IEI7CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgIGlmIChCID09PSAxNikgewogICAgICAgICAgICAgICAgZm9yIChZID0gZyArIDI7IGwgPCBZOyApIHsKICAgICAgICAgICAgICAgICAgaWYgKGYgPT09IDApCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgZi0tLCBvICs9IEFbaSsrXSA8PCBsLCBsICs9IDg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAobyA+Pj49IGcsIGwgLT0gZywgYS5oYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgIHIubXNnID0gImludmFsaWQgYml0IGxlbmd0aCByZXBlYXQiLCBhLm1vZGUgPSBNMDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBDID0gYS5sZW5zW2EuaGF2ZSAtIDFdLCBkID0gMyArIChvICYgMyksIG8gPj4+PSAyLCBsIC09IDI7CiAgICAgICAgICAgICAgfSBlbHNlIGlmIChCID09PSAxNykgewogICAgICAgICAgICAgICAgZm9yIChZID0gZyArIDM7IGwgPCBZOyApIHsKICAgICAgICAgICAgICAgICAgaWYgKGYgPT09IDApCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgZi0tLCBvICs9IEFbaSsrXSA8PCBsLCBsICs9IDg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBvID4+Pj0gZywgbCAtPSBnLCBDID0gMCwgZCA9IDMgKyAobyAmIDcpLCBvID4+Pj0gMywgbCAtPSAzOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBmb3IgKFkgPSBnICsgNzsgbCA8IFk7ICkgewogICAgICAgICAgICAgICAgICBpZiAoZiA9PT0gMCkKICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICBmLS0sIG8gKz0gQVtpKytdIDw8IGwsIGwgKz0gODsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIG8gPj4+PSBnLCBsIC09IGcsIEMgPSAwLCBkID0gMTEgKyAobyAmIDEyNyksIG8gPj4+PSA3LCBsIC09IDc7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChhLmhhdmUgKyBkID4gYS5ubGVuICsgYS5uZGlzdCkgewogICAgICAgICAgICAgICAgci5tc2cgPSAiaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdCIsIGEubW9kZSA9IE0wOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGZvciAoOyBkLS07ICkKICAgICAgICAgICAgICAgIGEubGVuc1thLmhhdmUrK10gPSBDOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoYS5tb2RlID09PSBNMCkKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBpZiAoYS5sZW5zWzI1Nl0gPT09IDApIHsKICAgICAgICAgICAgci5tc2cgPSAiaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrIiwgYS5tb2RlID0gTTA7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGEubGVuYml0cyA9IDksIEQgPSB7IGJpdHM6IGEubGVuYml0cyB9LCBfID0gazIocG4sIGEubGVucywgMCwgYS5ubGVuLCBhLmxlbmNvZGUsIDAsIGEud29yaywgRCksIGEubGVuYml0cyA9IEQuYml0cywgXykgewogICAgICAgICAgICByLm1zZyA9ICJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RocyBzZXQiLCBhLm1vZGUgPSBNMDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoYS5kaXN0Yml0cyA9IDYsIGEuZGlzdGNvZGUgPSBhLmRpc3RkeW4sIEQgPSB7IGJpdHM6IGEuZGlzdGJpdHMgfSwgXyA9IGsyKHduLCBhLmxlbnMsIGEubmxlbiwgYS5uZGlzdCwgYS5kaXN0Y29kZSwgMCwgYS53b3JrLCBEKSwgYS5kaXN0Yml0cyA9IEQuYml0cywgXykgewogICAgICAgICAgICByLm1zZyA9ICJpbnZhbGlkIGRpc3RhbmNlcyBzZXQiLCBhLm1vZGUgPSBNMDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoYS5tb2RlID0gVTIsIGUgPT09IE8yKQogICAgICAgICAgICBicmVhayByOwogICAgICAgIGNhc2UgVTI6CiAgICAgICAgICBhLm1vZGUgPSBqMjsKICAgICAgICBjYXNlIGoyOgogICAgICAgICAgaWYgKGYgPj0gNiAmJiB1ID49IDI1OCkgewogICAgICAgICAgICByLm5leHRfb3V0ID0gbiwgci5hdmFpbF9vdXQgPSB1LCByLm5leHRfaW4gPSBpLCByLmF2YWlsX2luID0gZiwgYS5ob2xkID0gbywgYS5iaXRzID0gbCwgdnUociwgYyksIG4gPSByLm5leHRfb3V0LCB0ID0gci5vdXRwdXQsIHUgPSByLmF2YWlsX291dCwgaSA9IHIubmV4dF9pbiwgQSA9IHIuaW5wdXQsIGYgPSByLmF2YWlsX2luLCBvID0gYS5ob2xkLCBsID0gYS5iaXRzLCBhLm1vZGUgPT09IHpyICYmIChhLmJhY2sgPSAtMSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgZm9yIChhLmJhY2sgPSAwOyBFID0gYS5sZW5jb2RlW28gJiAoMSA8PCBhLmxlbmJpdHMpIC0gMV0sIGcgPSBFID4+PiAyNCwgdyA9IEUgPj4+IDE2ICYgMjU1LCBCID0gRSAmIDY1NTM1LCAhKGcgPD0gbCk7ICkgewogICAgICAgICAgICBpZiAoZiA9PT0gMCkKICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICBmLS0sIG8gKz0gQVtpKytdIDw8IGwsIGwgKz0gODsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh3ICYmICEodyAmIDI0MCkpIHsKICAgICAgICAgICAgZm9yIChtID0gZywgcCA9IHcsIFcgPSBCOyBFID0gYS5sZW5jb2RlW1cgKyAoKG8gJiAoMSA8PCBtICsgcCkgLSAxKSA+PiBtKV0sIGcgPSBFID4+PiAyNCwgdyA9IEUgPj4+IDE2ICYgMjU1LCBCID0gRSAmIDY1NTM1LCAhKG0gKyBnIDw9IGwpOyApIHsKICAgICAgICAgICAgICBpZiAoZiA9PT0gMCkKICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgZi0tLCBvICs9IEFbaSsrXSA8PCBsLCBsICs9IDg7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbyA+Pj49IG0sIGwgLT0gbSwgYS5iYWNrICs9IG07CiAgICAgICAgICB9CiAgICAgICAgICBpZiAobyA+Pj49IGcsIGwgLT0gZywgYS5iYWNrICs9IGcsIGEubGVuZ3RoID0gQiwgdyA9PT0gMCkgewogICAgICAgICAgICBhLm1vZGUgPSBSdDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodyAmIDMyKSB7CiAgICAgICAgICAgIGEuYmFjayA9IC0xLCBhLm1vZGUgPSB6cjsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodyAmIDY0KSB7CiAgICAgICAgICAgIHIubXNnID0gImludmFsaWQgbGl0ZXJhbC9sZW5ndGggY29kZSIsIGEubW9kZSA9IE0wOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGEuZXh0cmEgPSB3ICYgMTUsIGEubW9kZSA9IFd0OwogICAgICAgIGNhc2UgV3Q6CiAgICAgICAgICBpZiAoYS5leHRyYSkgewogICAgICAgICAgICBmb3IgKFkgPSBhLmV4dHJhOyBsIDwgWTsgKSB7CiAgICAgICAgICAgICAgaWYgKGYgPT09IDApCiAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgIGYtLSwgbyArPSBBW2krK10gPDwgbCwgbCArPSA4OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGEubGVuZ3RoICs9IG8gJiAoMSA8PCBhLmV4dHJhKSAtIDEsIG8gPj4+PSBhLmV4dHJhLCBsIC09IGEuZXh0cmEsIGEuYmFjayArPSBhLmV4dHJhOwogICAgICAgICAgfQogICAgICAgICAgYS53YXMgPSBhLmxlbmd0aCwgYS5tb2RlID0gX3Q7CiAgICAgICAgY2FzZSBfdDoKICAgICAgICAgIGZvciAoOyBFID0gYS5kaXN0Y29kZVtvICYgKDEgPDwgYS5kaXN0Yml0cykgLSAxXSwgZyA9IEUgPj4+IDI0LCB3ID0gRSA+Pj4gMTYgJiAyNTUsIEIgPSBFICYgNjU1MzUsICEoZyA8PSBsKTsgKSB7CiAgICAgICAgICAgIGlmIChmID09PSAwKQogICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgIGYtLSwgbyArPSBBW2krK10gPDwgbCwgbCArPSA4OwogICAgICAgICAgfQogICAgICAgICAgaWYgKCEodyAmIDI0MCkpIHsKICAgICAgICAgICAgZm9yIChtID0gZywgcCA9IHcsIFcgPSBCOyBFID0gYS5kaXN0Y29kZVtXICsgKChvICYgKDEgPDwgbSArIHApIC0gMSkgPj4gbSldLCBnID0gRSA+Pj4gMjQsIHcgPSBFID4+PiAxNiAmIDI1NSwgQiA9IEUgJiA2NTUzNSwgIShtICsgZyA8PSBsKTsgKSB7CiAgICAgICAgICAgICAgaWYgKGYgPT09IDApCiAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgIGYtLSwgbyArPSBBW2krK10gPDwgbCwgbCArPSA4OwogICAgICAgICAgICB9CiAgICAgICAgICAgIG8gPj4+PSBtLCBsIC09IG0sIGEuYmFjayArPSBtOwogICAgICAgICAgfQogICAgICAgICAgaWYgKG8gPj4+PSBnLCBsIC09IGcsIGEuYmFjayArPSBnLCB3ICYgNjQpIHsKICAgICAgICAgICAgci5tc2cgPSAiaW52YWxpZCBkaXN0YW5jZSBjb2RlIiwgYS5tb2RlID0gTTA7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgYS5vZmZzZXQgPSBCLCBhLmV4dHJhID0gdyAmIDE1LCBhLm1vZGUgPSBHdDsKICAgICAgICBjYXNlIEd0OgogICAgICAgICAgaWYgKGEuZXh0cmEpIHsKICAgICAgICAgICAgZm9yIChZID0gYS5leHRyYTsgbCA8IFk7ICkgewogICAgICAgICAgICAgIGlmIChmID09PSAwKQogICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICBmLS0sIG8gKz0gQVtpKytdIDw8IGwsIGwgKz0gODsKICAgICAgICAgICAgfQogICAgICAgICAgICBhLm9mZnNldCArPSBvICYgKDEgPDwgYS5leHRyYSkgLSAxLCBvID4+Pj0gYS5leHRyYSwgbCAtPSBhLmV4dHJhLCBhLmJhY2sgKz0gYS5leHRyYTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChhLm9mZnNldCA+IGEuZG1heCkgewogICAgICAgICAgICByLm1zZyA9ICJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsIGEubW9kZSA9IE0wOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGEubW9kZSA9IFh0OwogICAgICAgIGNhc2UgWHQ6CiAgICAgICAgICBpZiAodSA9PT0gMCkKICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgIGlmIChkID0gYyAtIHUsIGEub2Zmc2V0ID4gZCkgewogICAgICAgICAgICBpZiAoZCA9IGEub2Zmc2V0IC0gZCwgZCA+IGEud2hhdmUgJiYgYS5zYW5lKSB7CiAgICAgICAgICAgICAgci5tc2cgPSAiaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLCBhLm1vZGUgPSBNMDsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBkID4gYS53bmV4dCA/IChkIC09IGEud25leHQsIHYgPSBhLndzaXplIC0gZCkgOiB2ID0gYS53bmV4dCAtIGQsIGQgPiBhLmxlbmd0aCAmJiAoZCA9IGEubGVuZ3RoKSwgayA9IGEud2luZG93OwogICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgIGsgPSB0LCB2ID0gbiAtIGEub2Zmc2V0LCBkID0gYS5sZW5ndGg7CiAgICAgICAgICBkID4gdSAmJiAoZCA9IHUpLCB1IC09IGQsIGEubGVuZ3RoIC09IGQ7CiAgICAgICAgICBkbwogICAgICAgICAgICB0W24rK10gPSBrW3YrK107CiAgICAgICAgICB3aGlsZSAoLS1kKTsKICAgICAgICAgIGEubGVuZ3RoID09PSAwICYmIChhLm1vZGUgPSBqMik7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIFJ0OgogICAgICAgICAgaWYgKHUgPT09IDApCiAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICB0W24rK10gPSBhLmxlbmd0aCwgdS0tLCBhLm1vZGUgPSBqMjsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgSmU6CiAgICAgICAgICBpZiAoYS53cmFwKSB7CiAgICAgICAgICAgIGZvciAoOyBsIDwgMzI7ICkgewogICAgICAgICAgICAgIGlmIChmID09PSAwKQogICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICBmLS0sIG8gfD0gQVtpKytdIDw8IGwsIGwgKz0gODsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoYyAtPSB1LCByLnRvdGFsX291dCArPSBjLCBhLnRvdGFsICs9IGMsIGEud3JhcCAmIDQgJiYgYyAmJiAoci5hZGxlciA9IGEuY2hlY2sgPSAvKlVQREFURV9DSEVDSyhzdGF0ZS5jaGVjaywgcHV0IC0gX291dCwgX291dCk7Ki8KICAgICAgICAgICAgYS5mbGFncyA/IHEwKGEuY2hlY2ssIHQsIGMsIG4gLSBjKSA6IEMyKGEuY2hlY2ssIHQsIGMsIG4gLSBjKSksIGMgPSB1LCBhLndyYXAgJiA0ICYmIChhLmZsYWdzID8gbyA6IER0KG8pKSAhPT0gYS5jaGVjaykgewogICAgICAgICAgICAgIHIubXNnID0gImluY29ycmVjdCBkYXRhIGNoZWNrIiwgYS5tb2RlID0gTTA7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbyA9IDAsIGwgPSAwOwogICAgICAgICAgfQogICAgICAgICAgYS5tb2RlID0gVnQ7CiAgICAgICAgY2FzZSBWdDoKICAgICAgICAgIGlmIChhLndyYXAgJiYgYS5mbGFncykgewogICAgICAgICAgICBmb3IgKDsgbCA8IDMyOyApIHsKICAgICAgICAgICAgICBpZiAoZiA9PT0gMCkKICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgZi0tLCBvICs9IEFbaSsrXSA8PCBsLCBsICs9IDg7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGEud3JhcCAmIDQgJiYgbyAhPT0gKGEudG90YWwgJiA0Mjk0OTY3Mjk1KSkgewogICAgICAgICAgICAgIHIubXNnID0gImluY29ycmVjdCBsZW5ndGggY2hlY2siLCBhLm1vZGUgPSBNMDsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBvID0gMCwgbCA9IDA7CiAgICAgICAgICB9CiAgICAgICAgICBhLm1vZGUgPSBTdDsKICAgICAgICBjYXNlIFN0OgogICAgICAgICAgXyA9IFp1OwogICAgICAgICAgYnJlYWsgcjsKICAgICAgICBjYXNlIE0wOgogICAgICAgICAgXyA9IHluOwogICAgICAgICAgYnJlYWsgcjsKICAgICAgICBjYXNlIFpuOgogICAgICAgICAgcmV0dXJuIEVuOwogICAgICAgIGNhc2UgQm46CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHJldHVybiBDcjsKICAgICAgfQogIHJldHVybiByLm5leHRfb3V0ID0gbiwgci5hdmFpbF9vdXQgPSB1LCByLm5leHRfaW4gPSBpLCByLmF2YWlsX2luID0gZiwgYS5ob2xkID0gbywgYS5iaXRzID0gbCwgKGEud3NpemUgfHwgYyAhPT0gci5hdmFpbF9vdXQgJiYgYS5tb2RlIDwgTTAgJiYgKGEubW9kZSA8IEplIHx8IGUgIT09IGJ0KSkgJiYgX24ociwgci5vdXRwdXQsIHIubmV4dF9vdXQsIGMgLSByLmF2YWlsX291dCksIHMgLT0gci5hdmFpbF9pbiwgYyAtPSByLmF2YWlsX291dCwgci50b3RhbF9pbiArPSBzLCByLnRvdGFsX291dCArPSBjLCBhLnRvdGFsICs9IGMsIGEud3JhcCAmIDQgJiYgYyAmJiAoci5hZGxlciA9IGEuY2hlY2sgPSAvKlVQREFURV9DSEVDSyhzdGF0ZS5jaGVjaywgc3RybS5uZXh0X291dCAtIF9vdXQsIF9vdXQpOyovCiAgYS5mbGFncyA/IHEwKGEuY2hlY2ssIHQsIGMsIHIubmV4dF9vdXQgLSBjKSA6IEMyKGEuY2hlY2ssIHQsIGMsIHIubmV4dF9vdXQgLSBjKSksIHIuZGF0YV90eXBlID0gYS5iaXRzICsgKGEubGFzdCA/IDY0IDogMCkgKyAoYS5tb2RlID09PSB6ciA/IDEyOCA6IDApICsgKGEubW9kZSA9PT0gVTIgfHwgYS5tb2RlID09PSBRZSA/IDI1NiA6IDApLCAocyA9PT0gMCAmJiBjID09PSAwIHx8IGUgPT09IGJ0KSAmJiBfID09PSBDYSAmJiAoXyA9IEl1KSwgXzsKfSwgU3UgPSAocikgPT4gewogIGlmIChfYShyKSkKICAgIHJldHVybiBDcjsKICBsZXQgZSA9IHIuc3RhdGU7CiAgcmV0dXJuIGUud2luZG93ICYmIChlLndpbmRvdyA9IG51bGwpLCByLnN0YXRlID0gbnVsbCwgQ2E7Cn0sIER1ID0gKHIsIGUpID0+IHsKICBpZiAoX2EocikpCiAgICByZXR1cm4gQ3I7CiAgY29uc3QgYSA9IHIuc3RhdGU7CiAgcmV0dXJuIGEud3JhcCAmIDIgPyAoYS5oZWFkID0gZSwgZS5kb25lID0gITEsIENhKSA6IENyOwp9LCB4dSA9IChyLCBlKSA9PiB7CiAgY29uc3QgYSA9IGUubGVuZ3RoOwogIGxldCBBLCB0LCBpOwogIHJldHVybiBfYShyKSB8fCAoQSA9IHIuc3RhdGUsIEEud3JhcCAhPT0gMCAmJiBBLm1vZGUgIT09IGdlKSA/IENyIDogQS5tb2RlID09PSBnZSAmJiAodCA9IDEsIHQgPSBDMih0LCBlLCBhLCAwKSwgdCAhPT0gQS5jaGVjaykgPyB5biA6IChpID0gX24ociwgZSwgYSwgYSksIGkgPyAoQS5tb2RlID0gWm4sIEVuKSA6IChBLmhhdmVkaWN0ID0gMSwgQ2EpKTsKfTsKdmFyIE51ID0gRm4sIE11ID0gQ24sIFR1ID0gSW4sIFB1ID0gWHUsIFl1ID0gV24sIE91ID0gVnUsIFV1ID0gU3UsIGp1ID0gRHUsIFF1ID0geHUsIEp1ID0gInBha28gaW5mbGF0ZSAoZnJvbSBOb2RlY2EgcHJvamVjdCkiLCAkciA9IHsKICBpbmZsYXRlUmVzZXQ6IE51LAogIGluZmxhdGVSZXNldDI6IE11LAogIGluZmxhdGVSZXNldEtlZXA6IFR1LAogIGluZmxhdGVJbml0OiBQdSwKICBpbmZsYXRlSW5pdDI6IFl1LAogIGluZmxhdGU6IE91LAogIGluZmxhdGVFbmQ6IFV1LAogIGluZmxhdGVHZXRIZWFkZXI6IGp1LAogIGluZmxhdGVTZXREaWN0aW9uYXJ5OiBRdSwKICBpbmZsYXRlSW5mbzogSnUKfTsKZnVuY3Rpb24gSHUoKSB7CiAgdGhpcy50ZXh0ID0gMCwgdGhpcy50aW1lID0gMCwgdGhpcy54ZmxhZ3MgPSAwLCB0aGlzLm9zID0gMCwgdGhpcy5leHRyYSA9IG51bGwsIHRoaXMuZXh0cmFfbGVuID0gMCwgdGhpcy5uYW1lID0gIiIsIHRoaXMuY29tbWVudCA9ICIiLCB0aGlzLmhjcmMgPSAwLCB0aGlzLmRvbmUgPSAhMTsKfQp2YXIgenUgPSBIdTsKY29uc3QgR24gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLCB7CiAgWl9OT19GTFVTSDogTHUsCiAgWl9GSU5JU0g6IEt1LAogIFpfT0s6IEcyLAogIFpfU1RSRUFNX0VORDogTGUsCiAgWl9ORUVEX0RJQ1Q6IEtlLAogIFpfU1RSRUFNX0VSUk9SOiBxdSwKICBaX0RBVEFfRVJST1I6IE50LAogIFpfTUVNX0VSUk9SOiAkdQp9ID0gSWU7CmZ1bmN0aW9uIEdlKHIpIHsKICB0aGlzLm9wdGlvbnMgPSBDZS5hc3NpZ24oewogICAgY2h1bmtTaXplOiAxMDI0ICogNjQsCiAgICB3aW5kb3dCaXRzOiAxNSwKICAgIHRvOiAiIgogIH0sIHIgfHwge30pOwogIGNvbnN0IGUgPSB0aGlzLm9wdGlvbnM7CiAgZS5yYXcgJiYgZS53aW5kb3dCaXRzID49IDAgJiYgZS53aW5kb3dCaXRzIDwgMTYgJiYgKGUud2luZG93Qml0cyA9IC1lLndpbmRvd0JpdHMsIGUud2luZG93Qml0cyA9PT0gMCAmJiAoZS53aW5kb3dCaXRzID0gLTE1KSksIGUud2luZG93Qml0cyA+PSAwICYmIGUud2luZG93Qml0cyA8IDE2ICYmICEociAmJiByLndpbmRvd0JpdHMpICYmIChlLndpbmRvd0JpdHMgKz0gMzIpLCBlLndpbmRvd0JpdHMgPiAxNSAmJiBlLndpbmRvd0JpdHMgPCA0OCAmJiAoZS53aW5kb3dCaXRzICYgMTUgfHwgKGUud2luZG93Qml0cyB8PSAxNSkpLCB0aGlzLmVyciA9IDAsIHRoaXMubXNnID0gIiIsIHRoaXMuZW5kZWQgPSAhMSwgdGhpcy5jaHVua3MgPSBbXSwgdGhpcy5zdHJtID0gbmV3IGduKCksIHRoaXMuc3RybS5hdmFpbF9vdXQgPSAwOwogIGxldCBhID0gJHIuaW5mbGF0ZUluaXQyKAogICAgdGhpcy5zdHJtLAogICAgZS53aW5kb3dCaXRzCiAgKTsKICBpZiAoYSAhPT0gRzIpCiAgICB0aHJvdyBuZXcgRXJyb3IoSWFbYV0pOwogIGlmICh0aGlzLmhlYWRlciA9IG5ldyB6dSgpLCAkci5pbmZsYXRlR2V0SGVhZGVyKHRoaXMuc3RybSwgdGhpcy5oZWFkZXIpLCBlLmRpY3Rpb25hcnkgJiYgKHR5cGVvZiBlLmRpY3Rpb25hcnkgPT0gInN0cmluZyIgPyBlLmRpY3Rpb25hcnkgPSBfMi5zdHJpbmcyYnVmKGUuZGljdGlvbmFyeSkgOiBHbi5jYWxsKGUuZGljdGlvbmFyeSkgPT09ICJbb2JqZWN0IEFycmF5QnVmZmVyXSIgJiYgKGUuZGljdGlvbmFyeSA9IG5ldyBVaW50OEFycmF5KGUuZGljdGlvbmFyeSkpLCBlLnJhdyAmJiAoYSA9ICRyLmluZmxhdGVTZXREaWN0aW9uYXJ5KHRoaXMuc3RybSwgZS5kaWN0aW9uYXJ5KSwgYSAhPT0gRzIpKSkKICAgIHRocm93IG5ldyBFcnJvcihJYVthXSk7Cn0KR2UucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbihyLCBlKSB7CiAgY29uc3QgYSA9IHRoaXMuc3RybSwgQSA9IHRoaXMub3B0aW9ucy5jaHVua1NpemUsIHQgPSB0aGlzLm9wdGlvbnMuZGljdGlvbmFyeTsKICBsZXQgaSwgbiwgZjsKICBpZiAodGhpcy5lbmRlZCkgcmV0dXJuICExOwogIGZvciAoZSA9PT0gfn5lID8gbiA9IGUgOiBuID0gZSA9PT0gITAgPyBLdSA6IEx1LCBHbi5jYWxsKHIpID09PSAiW29iamVjdCBBcnJheUJ1ZmZlcl0iID8gYS5pbnB1dCA9IG5ldyBVaW50OEFycmF5KHIpIDogYS5pbnB1dCA9IHIsIGEubmV4dF9pbiA9IDAsIGEuYXZhaWxfaW4gPSBhLmlucHV0Lmxlbmd0aDsgOyApIHsKICAgIGZvciAoYS5hdmFpbF9vdXQgPT09IDAgJiYgKGEub3V0cHV0ID0gbmV3IFVpbnQ4QXJyYXkoQSksIGEubmV4dF9vdXQgPSAwLCBhLmF2YWlsX291dCA9IEEpLCBpID0gJHIuaW5mbGF0ZShhLCBuKSwgaSA9PT0gS2UgJiYgdCAmJiAoaSA9ICRyLmluZmxhdGVTZXREaWN0aW9uYXJ5KGEsIHQpLCBpID09PSBHMiA/IGkgPSAkci5pbmZsYXRlKGEsIG4pIDogaSA9PT0gTnQgJiYgKGkgPSBLZSkpOyBhLmF2YWlsX2luID4gMCAmJiBpID09PSBMZSAmJiBhLnN0YXRlLndyYXAgPiAwICYmIHJbYS5uZXh0X2luXSAhPT0gMDsgKQogICAgICAkci5pbmZsYXRlUmVzZXQoYSksIGkgPSAkci5pbmZsYXRlKGEsIG4pOwogICAgc3dpdGNoIChpKSB7CiAgICAgIGNhc2UgcXU6CiAgICAgIGNhc2UgTnQ6CiAgICAgIGNhc2UgS2U6CiAgICAgIGNhc2UgJHU6CiAgICAgICAgcmV0dXJuIHRoaXMub25FbmQoaSksIHRoaXMuZW5kZWQgPSAhMCwgITE7CiAgICB9CiAgICBpZiAoZiA9IGEuYXZhaWxfb3V0LCBhLm5leHRfb3V0ICYmIChhLmF2YWlsX291dCA9PT0gMCB8fCBpID09PSBMZSkpCiAgICAgIGlmICh0aGlzLm9wdGlvbnMudG8gPT09ICJzdHJpbmciKSB7CiAgICAgICAgbGV0IHUgPSBfMi51dGY4Ym9yZGVyKGEub3V0cHV0LCBhLm5leHRfb3V0KSwgbyA9IGEubmV4dF9vdXQgLSB1LCBsID0gXzIuYnVmMnN0cmluZyhhLm91dHB1dCwgdSk7CiAgICAgICAgYS5uZXh0X291dCA9IG8sIGEuYXZhaWxfb3V0ID0gQSAtIG8sIG8gJiYgYS5vdXRwdXQuc2V0KGEub3V0cHV0LnN1YmFycmF5KHUsIHUgKyBvKSwgMCksIHRoaXMub25EYXRhKGwpOwogICAgICB9IGVsc2UKICAgICAgICB0aGlzLm9uRGF0YShhLm91dHB1dC5sZW5ndGggPT09IGEubmV4dF9vdXQgPyBhLm91dHB1dCA6IGEub3V0cHV0LnN1YmFycmF5KDAsIGEubmV4dF9vdXQpKTsKICAgIGlmICghKGkgPT09IEcyICYmIGYgPT09IDApKSB7CiAgICAgIGlmIChpID09PSBMZSkKICAgICAgICByZXR1cm4gaSA9ICRyLmluZmxhdGVFbmQodGhpcy5zdHJtKSwgdGhpcy5vbkVuZChpKSwgdGhpcy5lbmRlZCA9ICEwLCAhMDsKICAgICAgaWYgKGEuYXZhaWxfaW4gPT09IDApIGJyZWFrOwogICAgfQogIH0KICByZXR1cm4gITA7Cn07CkdlLnByb3RvdHlwZS5vbkRhdGEgPSBmdW5jdGlvbihyKSB7CiAgdGhpcy5jaHVua3MucHVzaChyKTsKfTsKR2UucHJvdG90eXBlLm9uRW5kID0gZnVuY3Rpb24ocikgewogIHIgPT09IEcyICYmICh0aGlzLm9wdGlvbnMudG8gPT09ICJzdHJpbmciID8gdGhpcy5yZXN1bHQgPSB0aGlzLmNodW5rcy5qb2luKCIiKSA6IHRoaXMucmVzdWx0ID0gQ2UuZmxhdHRlbkNodW5rcyh0aGlzLmNodW5rcykpLCB0aGlzLmNodW5rcyA9IFtdLCB0aGlzLmVyciA9IHIsIHRoaXMubXNnID0gdGhpcy5zdHJtLm1zZzsKfTsKZnVuY3Rpb24gcmwociwgZSkgewogIGNvbnN0IGEgPSBuZXcgR2UoZSk7CiAgaWYgKGEucHVzaChyKSwgYS5lcnIpIHRocm93IGEubXNnIHx8IElhW2EuZXJyXTsKICByZXR1cm4gYS5yZXN1bHQ7Cn0KdmFyIGFsID0gcmwsIGVsID0gewogIGluZmxhdGU6IGFsCn07CmNvbnN0IHsgZGVmbGF0ZTogQWwgfSA9IGR1LCB7IGluZmxhdGU6IHRsIH0gPSBlbDsKdmFyIGlsID0gQWwsIG5sID0gdGwsIGcyID0gbmV3IEludDMyQXJyYXkoWwogIDAsCiAgMSwKICA4LAogIDE2LAogIDksCiAgMiwKICAzLAogIDEwLAogIDE3LAogIDI0LAogIDMyLAogIDI1LAogIDE4LAogIDExLAogIDQsCiAgNSwKICAxMiwKICAxOSwKICAyNiwKICAzMywKICA0MCwKICA0OCwKICA0MSwKICAzNCwKICAyNywKICAyMCwKICAxMywKICA2LAogIDcsCiAgMTQsCiAgMjEsCiAgMjgsCiAgMzUsCiAgNDIsCiAgNDksCiAgNTYsCiAgNTcsCiAgNTAsCiAgNDMsCiAgMzYsCiAgMjksCiAgMjIsCiAgMTUsCiAgMjMsCiAgMzAsCiAgMzcsCiAgNDQsCiAgNTEsCiAgNTgsCiAgNTksCiAgNTIsCiAgNDUsCiAgMzgsCiAgMzEsCiAgMzksCiAgNDYsCiAgNTMsCiAgNjAsCiAgNjEsCiAgNTQsCiAgNDcsCiAgNTUsCiAgNjIsCiAgNjMKXSksIFEyID0gNDAxNywgSjIgPSA3OTksIEgyID0gMzQwNiwgejIgPSAyMjc2LCBMMiA9IDE1NjcsIEsyID0gMzc4NCwgUmEgPSA1NzkzLCBxMiA9IDI4OTYsIGZsID0gMTAwLCBNdCA9IDY0ICogMTAyNCAqIDEwMjQsIHlBID0gMDsKZnVuY3Rpb24gT2EocikgewogIHZhciBlID0geUEgKyByOwogIGlmIChlID4gTXQpIHsKICAgIHZhciBhID0gTWF0aC5jZWlsKChlIC0gTXQpIC8gMTAyNCAvIDEwMjQpOwogICAgdGhyb3cgbmV3IEVycm9yKCJNYXggbWVtb3J5IGxpbWl0IGV4Y2VlZGVkIGJ5IGF0IGxlYXN0ICIuY29uY2F0KGEsICJNQiIpKTsKICB9CiAgeUEgPSBlOwp9CmZ1bmN0aW9uIG9sKHIsIGUpIHsKICBmb3IgKHZhciBhID0gMTY7IGEgPiAwICYmICFyW2EgLSAxXTsgKQogICAgYS0tOwogIGZvciAodmFyIEEgPSBbeyBjaGlsZHJlbjogW10sIGluZGV4OiAwIH1dLCB0ID0gMCwgaSA9IEFbMF0sIG4gPSAwOyBuIDwgYTsgbisrKSB7CiAgICBmb3IgKHZhciBmID0gMDsgZiA8IHJbbl07IGYrKykgewogICAgICBmb3IgKGkgPSBBLnBvcCgpLCBpLmNoaWxkcmVuW2kuaW5kZXhdID0gZVt0XTsgaS5pbmRleCA+IDA7ICkgewogICAgICAgIGlmIChBLmxlbmd0aCA9PT0gMCkKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IHJlY3JlYXRlIEh1ZmZtYW4gVGFibGUiKTsKICAgICAgICBpID0gQS5wb3AoKTsKICAgICAgfQogICAgICBmb3IgKGkuaW5kZXgrKywgQS5wdXNoKGkpOyBBLmxlbmd0aCA8PSBuOyApIHsKICAgICAgICB2YXIgdSA9IHsgY2hpbGRyZW46IFtdLCBpbmRleDogMCB9OwogICAgICAgIEEucHVzaCh1KSwgaS5jaGlsZHJlbltpLmluZGV4XSA9IHUuY2hpbGRyZW4sIGkgPSB1OwogICAgICB9CiAgICAgIHQrKzsKICAgIH0KICAgIGlmIChuICsgMSA8IGEpIHsKICAgICAgdmFyIHUgPSB7IGNoaWxkcmVuOiBbXSwgaW5kZXg6IDAgfTsKICAgICAgQS5wdXNoKHUpLCBpLmNoaWxkcmVuW2kuaW5kZXhdID0gdS5jaGlsZHJlbiwgaSA9IHU7CiAgICB9CiAgfQogIHJldHVybiBBWzBdLmNoaWxkcmVuOwp9CmZ1bmN0aW9uIHVsKHIsIGUsIGEsIEEsIHQsIGksIG4sIGYsIHUpIHsKICB2YXIgbyA9IGEubWN1c1BlckxpbmUsIGwgPSBhLnByb2dyZXNzaXZlLCBzID0gZSwgYyA9IDAsIGQgPSAwOwogIGZ1bmN0aW9uIHYoKSB7CiAgICBpZiAoZCA+IDApCiAgICAgIHJldHVybiBkLS0sIGMgPj4gZCAmIDE7CiAgICBpZiAoYyA9IHJbZSsrXSwgYyA9PSAyNTUpIHsKICAgICAgdmFyIEkgPSByW2UrK107CiAgICAgIGlmIChJKQogICAgICAgIHRocm93IG5ldyBFcnJvcigidW5leHBlY3RlZCBtYXJrZXI6ICIuY29uY2F0KChjIDw8IDggfCBJKS50b1N0cmluZygxNikpKTsKICAgIH0KICAgIHJldHVybiBkID0gNywgYyA+Pj4gNzsKICB9CiAgZnVuY3Rpb24gayhJKSB7CiAgICBmb3IgKHZhciBWID0gSTsgOyApIHsKICAgICAgaWYgKFYgPSBWW3YoKV0sIHR5cGVvZiBWID09ICJudW1iZXIiKQogICAgICAgIHJldHVybiBWOwogICAgICBpZiAoViA9PT0gdm9pZCAwKQogICAgICAgIHRocm93IG5ldyBFcnJvcigiaW52YWxpZCBodWZmbWFuIHNlcXVlbmNlIik7CiAgICB9CiAgfQogIGZ1bmN0aW9uIEUoSSkgewogICAgZm9yICh2YXIgViA9IDA7IEkgPiAwOyApCiAgICAgIFYgPSBWIDw8IDEgfCB2KCksIEktLTsKICAgIHJldHVybiBWOwogIH0KICBmdW5jdGlvbiBnKEkpIHsKICAgIHZhciBWID0gRShJKTsKICAgIHJldHVybiBWID49IDEgPDwgSSAtIDEgPyBWIDogViArICgtMSA8PCBJKSArIDE7CiAgfQogIGZ1bmN0aW9uIHcoSSwgVikgewogICAgdmFyIHogPSBrKEkuaHVmZm1hblRhYmxlREMpLCBqID0geiA9PT0gMCA/IDAgOiBnKHopOwogICAgVlswXSA9IEkucHJlZCArPSBqOwogICAgZm9yICh2YXIgYTAgPSAxOyBhMCA8IDY0OyApIHsKICAgICAgdmFyIGIwID0gayhJLmh1ZmZtYW5UYWJsZUFDKSwgZTAgPSBiMCAmIDE1LCBxID0gYjAgPj4gNDsKICAgICAgaWYgKGUwID09PSAwKSB7CiAgICAgICAgaWYgKHEgPCAxNSkKICAgICAgICAgIGJyZWFrOwogICAgICAgIGEwICs9IDE2OwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGEwICs9IHE7CiAgICAgIHZhciBvMCA9IGcyW2EwXTsKICAgICAgVltvMF0gPSBnKGUwKSwgYTArKzsKICAgIH0KICB9CiAgZnVuY3Rpb24gQihJLCBWKSB7CiAgICB2YXIgeiA9IGsoSS5odWZmbWFuVGFibGVEQyksIGogPSB6ID09PSAwID8gMCA6IGcoeikgPDwgdTsKICAgIFZbMF0gPSBJLnByZWQgKz0gajsKICB9CiAgZnVuY3Rpb24gbShJLCBWKSB7CiAgICBWWzBdIHw9IHYoKSA8PCB1OwogIH0KICB2YXIgcCA9IDA7CiAgZnVuY3Rpb24gVyhJLCBWKSB7CiAgICBpZiAocCA+IDApIHsKICAgICAgcC0tOwogICAgICByZXR1cm47CiAgICB9CiAgICBmb3IgKHZhciB6ID0gaSwgaiA9IG47IHogPD0gajsgKSB7CiAgICAgIHZhciBhMCA9IGsoSS5odWZmbWFuVGFibGVBQyksIGIwID0gYTAgJiAxNSwgZTAgPSBhMCA+PiA0OwogICAgICBpZiAoYjAgPT09IDApIHsKICAgICAgICBpZiAoZTAgPCAxNSkgewogICAgICAgICAgcCA9IEUoZTApICsgKDEgPDwgZTApIC0gMTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICB6ICs9IDE2OwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIHogKz0gZTA7CiAgICAgIHZhciBxID0gZzJbel07CiAgICAgIFZbcV0gPSBnKGIwKSAqICgxIDw8IHUpLCB6Kys7CiAgICB9CiAgfQogIHZhciBDID0gMCwgXyA9IDA7CiAgZnVuY3Rpb24gTihJLCBWKSB7CiAgICBmb3IgKHZhciB6ID0gaSwgaiA9IG4sIGEwID0gMDsgeiA8PSBqOyApIHsKICAgICAgdmFyIGIwID0gZzJbel0sIGUwID0gVltiMF0gPCAwID8gLTEgOiAxOwogICAgICBzd2l0Y2ggKEMpIHsKICAgICAgICBjYXNlIDA6CiAgICAgICAgICB2YXIgcSA9IGsoSS5odWZmbWFuVGFibGVBQyksIG8wID0gcSAmIDE1OwogICAgICAgICAgaWYgKGEwID0gcSA+PiA0LCBvMCA9PT0gMCkKICAgICAgICAgICAgYTAgPCAxNSA/IChwID0gRShhMCkgKyAoMSA8PCBhMCksIEMgPSA0KSA6IChhMCA9IDE2LCBDID0gMSk7CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgaWYgKG8wICE9PSAxKQogICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiaW52YWxpZCBBQ24gZW5jb2RpbmciKTsKICAgICAgICAgICAgXyA9IGcobzApLCBDID0gYTAgPyAyIDogMzsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIGNhc2UgMToKICAgICAgICBjYXNlIDI6CiAgICAgICAgICBWW2IwXSA/IFZbYjBdICs9ICh2KCkgPDwgdSkgKiBlMCA6IChhMC0tLCBhMCA9PT0gMCAmJiAoQyA9IEMgPT0gMiA/IDMgOiAwKSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDM6CiAgICAgICAgICBWW2IwXSA/IFZbYjBdICs9ICh2KCkgPDwgdSkgKiBlMCA6IChWW2IwXSA9IF8gPDwgdSwgQyA9IDApOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSA0OgogICAgICAgICAgVltiMF0gJiYgKFZbYjBdICs9ICh2KCkgPDwgdSkgKiBlMCk7CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgICB6Kys7CiAgICB9CiAgICBDID09PSA0ICYmIChwLS0sIHAgPT09IDAgJiYgKEMgPSAwKSk7CiAgfQogIGZ1bmN0aW9uIEQoSSwgViwgeiwgaiwgYTApIHsKICAgIHZhciBiMCA9IHogLyBvIHwgMCwgZTAgPSB6ICUgbywgcSA9IGIwICogSS52ICsgaiwgbzAgPSBlMCAqIEkuaCArIGEwOwogICAgSS5ibG9ja3NbcV0gIT09IHZvaWQgMCAmJiBWKEksIEkuYmxvY2tzW3FdW28wXSk7CiAgfQogIGZ1bmN0aW9uIFkoSSwgViwgeikgewogICAgdmFyIGogPSB6IC8gSS5ibG9ja3NQZXJMaW5lIHwgMCwgYTAgPSB6ICUgSS5ibG9ja3NQZXJMaW5lOwogICAgSS5ibG9ja3Nbal0gIT09IHZvaWQgMCAmJiBWKEksIEkuYmxvY2tzW2pdW2EwXSk7CiAgfQogIHZhciBmMCA9IEEubGVuZ3RoLCBHLCBKOwogIGwgPyBpID09PSAwID8gSiA9IGYgPT09IDAgPyBCIDogbSA6IEogPSBmID09PSAwID8gVyA6IE4gOiBKID0gdzsKICB2YXIgSyA9IDAsIFg7CiAgZjAgPT0gMSA/IFggPSBBWzBdLmJsb2Nrc1BlckxpbmUgKiBBWzBdLmJsb2Nrc1BlckNvbHVtbiA6IFggPSBvICogYS5tY3VzUGVyQ29sdW1uLCB0IHx8ICh0ID0gWCk7CiAgZm9yICh2YXIgbDAsIGIsIFo7IEsgPCBYOyApIHsKICAgIGZvciAodmFyIHkgPSAwOyB5IDwgZjA7IHkrKykKICAgICAgQVt5XS5wcmVkID0gMDsKICAgIGlmIChwID0gMCwgZjAgPT0gMSkgewogICAgICBHID0gQVswXTsKICAgICAgZm9yICh2YXIgRiA9IDA7IEYgPCB0OyBGKyspCiAgICAgICAgWShHLCBKLCBLKSwgSysrOwogICAgfSBlbHNlCiAgICAgIGZvciAodmFyIEYgPSAwOyBGIDwgdDsgRisrKSB7CiAgICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPCBmMDsgeSsrKSB7CiAgICAgICAgICBHID0gQVt5XSwgbDAgPSBHLmgsIGIgPSBHLnY7CiAgICAgICAgICBmb3IgKHZhciBSID0gMDsgUiA8IGI7IFIrKykKICAgICAgICAgICAgZm9yICh2YXIgTSA9IDA7IE0gPCBsMDsgTSsrKQogICAgICAgICAgICAgIEQoRywgSiwgSywgUiwgTSk7CiAgICAgICAgfQogICAgICAgIGlmIChLKyssIEsgPT09IFgpCiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgaWYgKEsgPT09IFgpCiAgICAgIGRvIHsKICAgICAgICBpZiAocltlXSA9PT0gMjU1ICYmIHJbZSArIDFdICE9PSAwKQogICAgICAgICAgYnJlYWs7CiAgICAgICAgZSArPSAxOwogICAgICB9IHdoaWxlIChlIDwgci5sZW5ndGggLSAyKTsKICAgIGlmIChkID0gMCwgWiA9IHJbZV0gPDwgOCB8IHJbZSArIDFdLCBaIDwgNjUyODApCiAgICAgIHRocm93IG5ldyBFcnJvcigibWFya2VyIHdhcyBub3QgZm91bmQiKTsKICAgIGlmIChaID49IDY1NDg4ICYmIFogPD0gNjU0OTUpCiAgICAgIGUgKz0gMjsKICAgIGVsc2UKICAgICAgYnJlYWs7CiAgfQogIHJldHVybiBlIC0gczsKfQpmdW5jdGlvbiBsbChyKSB7CiAgdmFyIGUgPSBbXSwgYSA9IHIuYmxvY2tzUGVyTGluZSwgQSA9IHIuYmxvY2tzUGVyQ29sdW1uLCB0ID0gYSA8PCAzLCBpID0gbmV3IEludDMyQXJyYXkoNjQpLCBuID0gbmV3IFVpbnQ4QXJyYXkoNjQpOwogIGZ1bmN0aW9uIGYoRSwgZywgdykgewogICAgZm9yICh2YXIgQiA9IHIucXVhbnRpemF0aW9uVGFibGUsIG0gPSB3LCBwID0gMDsgcCA8IDY0OyBwKyspCiAgICAgIG1bcF0gPSBFW3BdICogQltwXTsKICAgIGZvciAodmFyIHAgPSAwOyBwIDwgODsgKytwKSB7CiAgICAgIHZhciBXID0gOCAqIHA7CiAgICAgIGlmIChtWzEgKyBXXSA9PSAwICYmIG1bMiArIFddID09IDAgJiYgbVszICsgV10gPT0gMCAmJiBtWzQgKyBXXSA9PSAwICYmIG1bNSArIFddID09IDAgJiYgbVs2ICsgV10gPT0gMCAmJiBtWzcgKyBXXSA9PSAwKSB7CiAgICAgICAgdmFyIEMgPSBSYSAqIG1bMCArIFddICsgNTEyID4+IDEwOwogICAgICAgIG1bMCArIFddID0gQywgbVsxICsgV10gPSBDLCBtWzIgKyBXXSA9IEMsIG1bMyArIFddID0gQywgbVs0ICsgV10gPSBDLCBtWzUgKyBXXSA9IEMsIG1bNiArIFddID0gQywgbVs3ICsgV10gPSBDOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIHZhciBfID0gUmEgKiBtWzAgKyBXXSArIDEyOCA+PiA4LCBOID0gUmEgKiBtWzQgKyBXXSArIDEyOCA+PiA4LCBEID0gbVsyICsgV10sIFkgPSBtWzYgKyBXXSwgZjAgPSBxMiAqIChtWzEgKyBXXSAtIG1bNyArIFddKSArIDEyOCA+PiA4LCBHID0gcTIgKiAobVsxICsgV10gKyBtWzcgKyBXXSkgKyAxMjggPj4gOCwgSiA9IG1bMyArIFddIDw8IDQsIEsgPSBtWzUgKyBXXSA8PCA0LCBYID0gXyAtIE4gKyAxID4+IDE7CiAgICAgIF8gPSBfICsgTiArIDEgPj4gMSwgTiA9IFgsIFggPSBEICogSzIgKyBZICogTDIgKyAxMjggPj4gOCwgRCA9IEQgKiBMMiAtIFkgKiBLMiArIDEyOCA+PiA4LCBZID0gWCwgWCA9IGYwIC0gSyArIDEgPj4gMSwgZjAgPSBmMCArIEsgKyAxID4+IDEsIEsgPSBYLCBYID0gRyArIEogKyAxID4+IDEsIEogPSBHIC0gSiArIDEgPj4gMSwgRyA9IFgsIFggPSBfIC0gWSArIDEgPj4gMSwgXyA9IF8gKyBZICsgMSA+PiAxLCBZID0gWCwgWCA9IE4gLSBEICsgMSA+PiAxLCBOID0gTiArIEQgKyAxID4+IDEsIEQgPSBYLCBYID0gZjAgKiB6MiArIEcgKiBIMiArIDIwNDggPj4gMTIsIGYwID0gZjAgKiBIMiAtIEcgKiB6MiArIDIwNDggPj4gMTIsIEcgPSBYLCBYID0gSiAqIEoyICsgSyAqIFEyICsgMjA0OCA+PiAxMiwgSiA9IEogKiBRMiAtIEsgKiBKMiArIDIwNDggPj4gMTIsIEsgPSBYLCBtWzAgKyBXXSA9IF8gKyBHLCBtWzcgKyBXXSA9IF8gLSBHLCBtWzEgKyBXXSA9IE4gKyBLLCBtWzYgKyBXXSA9IE4gLSBLLCBtWzIgKyBXXSA9IEQgKyBKLCBtWzUgKyBXXSA9IEQgLSBKLCBtWzMgKyBXXSA9IFkgKyBmMCwgbVs0ICsgV10gPSBZIC0gZjA7CiAgICB9CiAgICBmb3IgKHZhciBwID0gMDsgcCA8IDg7ICsrcCkgewogICAgICB2YXIgbDAgPSBwOwogICAgICBpZiAobVsxICogOCArIGwwXSA9PSAwICYmIG1bMiAqIDggKyBsMF0gPT0gMCAmJiBtWzMgKiA4ICsgbDBdID09IDAgJiYgbVs0ICogOCArIGwwXSA9PSAwICYmIG1bNSAqIDggKyBsMF0gPT0gMCAmJiBtWzYgKiA4ICsgbDBdID09IDAgJiYgbVs3ICogOCArIGwwXSA9PSAwKSB7CiAgICAgICAgdmFyIGIgPSBSYSAqIHdbcCArIDBdICsgODE5MiA+PiAxNDsKICAgICAgICBtWzAgKiA4ICsgbDBdID0gYiwgbVsxICogOCArIGwwXSA9IGIsIG1bMiAqIDggKyBsMF0gPSBiLCBtWzMgKiA4ICsgbDBdID0gYiwgbVs0ICogOCArIGwwXSA9IGIsIG1bNSAqIDggKyBsMF0gPSBiLCBtWzYgKiA4ICsgbDBdID0gYiwgbVs3ICogOCArIGwwXSA9IGI7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgdmFyIF8gPSBSYSAqIG1bMCAqIDggKyBsMF0gKyAyMDQ4ID4+IDEyLCBOID0gUmEgKiBtWzQgKiA4ICsgbDBdICsgMjA0OCA+PiAxMiwgRCA9IG1bMiAqIDggKyBsMF0sIFkgPSBtWzYgKiA4ICsgbDBdLCBmMCA9IHEyICogKG1bMSAqIDggKyBsMF0gLSBtWzcgKiA4ICsgbDBdKSArIDIwNDggPj4gMTIsIEcgPSBxMiAqIChtWzEgKiA4ICsgbDBdICsgbVs3ICogOCArIGwwXSkgKyAyMDQ4ID4+IDEyLCBKID0gbVszICogOCArIGwwXSwgSyA9IG1bNSAqIDggKyBsMF0sIFggPSBfIC0gTiArIDEgPj4gMTsKICAgICAgXyA9IF8gKyBOICsgMSA+PiAxLCBOID0gWCwgWCA9IEQgKiBLMiArIFkgKiBMMiArIDIwNDggPj4gMTIsIEQgPSBEICogTDIgLSBZICogSzIgKyAyMDQ4ID4+IDEyLCBZID0gWCwgWCA9IGYwIC0gSyArIDEgPj4gMSwgZjAgPSBmMCArIEsgKyAxID4+IDEsIEsgPSBYLCBYID0gRyArIEogKyAxID4+IDEsIEogPSBHIC0gSiArIDEgPj4gMSwgRyA9IFgsIFggPSBfIC0gWSArIDEgPj4gMSwgXyA9IF8gKyBZICsgMSA+PiAxLCBZID0gWCwgWCA9IE4gLSBEICsgMSA+PiAxLCBOID0gTiArIEQgKyAxID4+IDEsIEQgPSBYLCBYID0gZjAgKiB6MiArIEcgKiBIMiArIDIwNDggPj4gMTIsIGYwID0gZjAgKiBIMiAtIEcgKiB6MiArIDIwNDggPj4gMTIsIEcgPSBYLCBYID0gSiAqIEoyICsgSyAqIFEyICsgMjA0OCA+PiAxMiwgSiA9IEogKiBRMiAtIEsgKiBKMiArIDIwNDggPj4gMTIsIEsgPSBYLCBtWzAgKiA4ICsgbDBdID0gXyArIEcsIG1bNyAqIDggKyBsMF0gPSBfIC0gRywgbVsxICogOCArIGwwXSA9IE4gKyBLLCBtWzYgKiA4ICsgbDBdID0gTiAtIEssIG1bMiAqIDggKyBsMF0gPSBEICsgSiwgbVs1ICogOCArIGwwXSA9IEQgLSBKLCBtWzMgKiA4ICsgbDBdID0gWSArIGYwLCBtWzQgKiA4ICsgbDBdID0gWSAtIGYwOwogICAgfQogICAgZm9yICh2YXIgcCA9IDA7IHAgPCA2NDsgKytwKSB7CiAgICAgIHZhciBaID0gMTI4ICsgKG1bcF0gKyA4ID4+IDQpOwogICAgICBnW3BdID0gWiA8IDAgPyAwIDogWiA+IDI1NSA/IDI1NSA6IFo7CiAgICB9CiAgfQogIE9hKHQgKiBBICogOCk7CiAgZm9yICh2YXIgdSA9IDA7IHUgPCBBOyB1KyspIHsKICAgIGZvciAodmFyIG8gPSB1IDw8IDMsIGwgPSAwOyBsIDwgODsgbCsrKQogICAgICBlLnB1c2gobmV3IFVpbnQ4QXJyYXkodCkpOwogICAgZm9yICh2YXIgcyA9IDA7IHMgPCBhOyBzKyspIHsKICAgICAgZihyLmJsb2Nrc1t1XVtzXSwgbiwgaSk7CiAgICAgIGZvciAodmFyIGMgPSAwLCBkID0gcyA8PCAzLCB2ID0gMDsgdiA8IDg7IHYrKykKICAgICAgICBmb3IgKHZhciBrID0gZVtvICsgdl0sIGwgPSAwOyBsIDwgODsgbCsrKQogICAgICAgICAga1tkICsgbF0gPSBuW2MrK107CiAgICB9CiAgfQogIHJldHVybiBlOwp9CmZ1bmN0aW9uIHJhKHIpIHsKICByZXR1cm4gciA8IDAgPyAwIDogciA+IDI1NSA/IDI1NSA6IHI7Cn0KZnVuY3Rpb24gY2wocikgewogIHZhciBlID0gewogICAgd2lkdGg6IDAsCiAgICBoZWlnaHQ6IDAsCiAgICBjb21tZW50czogW10sCiAgICBhZG9iZTogdm9pZCAwLAogICAgY29tcG9uZW50czogW10sCiAgICBleGlmQnVmZmVyOiB2b2lkIDAsCiAgICBqZmlmOiB2b2lkIDAKICB9LCBhID0gZmwgKiAxZTMgKiAxZTMsIEEgPSAwOwogIGZ1bmN0aW9uIHQoKSB7CiAgICB2YXIgdjAgPSByW0FdIDw8IDggfCByW0EgKyAxXTsKICAgIHJldHVybiBBICs9IDIsIHYwOwogIH0KICBmdW5jdGlvbiBpKCkgewogICAgdmFyIHYwID0gdCgpLCBJMCA9IHIuc3ViYXJyYXkoQSwgQSArIHYwIC0gMik7CiAgICByZXR1cm4gQSArPSBJMC5sZW5ndGgsIEkwOwogIH0KICBmdW5jdGlvbiBuKHYwKSB7CiAgICB2YXIgSTAgPSAwLCBDMCA9IDA7CiAgICBmb3IgKHZhciBPMCBpbiB2MC5jb21wb25lbnRzKQogICAgICBpZiAodjAuY29tcG9uZW50cy5oYXNPd25Qcm9wZXJ0eShPMCkpIHsKICAgICAgICB2YXIgVzAgPSB2MC5jb21wb25lbnRzW08wXTsKICAgICAgICBJMCA8IFcwLmggJiYgKEkwID0gVzAuaCksIEMwIDwgVzAudiAmJiAoQzAgPSBXMC52KTsKICAgICAgfQogICAgdmFyIE4wID0gTWF0aC5jZWlsKHYwLnNhbXBsZXNQZXJMaW5lIC8gOCAvIEkwKSwgUTAgPSBNYXRoLmNlaWwodjAuc2NhbkxpbmVzIC8gOCAvIEMwKTsKICAgIGZvciAodmFyIE8wIGluIHYwLmNvbXBvbmVudHMpCiAgICAgIGlmICh2MC5jb21wb25lbnRzLmhhc093blByb3BlcnR5KE8wKSkgewogICAgICAgIHZhciBXMCA9IHYwLmNvbXBvbmVudHNbTzBdLCBVMCA9IE1hdGguY2VpbChNYXRoLmNlaWwodjAuc2FtcGxlc1BlckxpbmUgLyA4KSAqIFcwLmggLyBJMCksIFAwID0gTWF0aC5jZWlsKE1hdGguY2VpbCh2MC5zY2FuTGluZXMgLyA4KSAqIFcwLnYgLyBDMCksIEowID0gTjAgKiBXMC5oLCBBciA9IFEwICogVzAudiwgTDAgPSBBciAqIEowLCBjciA9IFtdOwogICAgICAgIE9hKEwwICogMjU2KTsKICAgICAgICBmb3IgKHZhciB5ciA9IDA7IHlyIDwgQXI7IHlyKyspIHsKICAgICAgICAgIGZvciAodmFyIFdyID0gW10sIE1yID0gMDsgTXIgPCBKMDsgTXIrKykKICAgICAgICAgICAgV3IucHVzaChuZXcgSW50MzJBcnJheSg2NCkpOwogICAgICAgICAgY3IucHVzaChXcik7CiAgICAgICAgfQogICAgICAgIFcwLmJsb2Nrc1BlckxpbmUgPSBVMCwgVzAuYmxvY2tzUGVyQ29sdW1uID0gUDAsIFcwLmJsb2NrcyA9IGNyOwogICAgICB9CiAgICB2MC5tYXhIID0gSTAsIHYwLm1heFYgPSBDMCwgdjAubWN1c1BlckxpbmUgPSBOMCwgdjAubWN1c1BlckNvbHVtbiA9IFEwOwogIH0KICB2YXIgZiA9IG51bGwsIHUgPSBudWxsLCBvID0gdm9pZCAwLCBsID0gMCwgcyA9IFtdLCBjID0gW10sIGQgPSBbXSwgdiA9IFtdLCBrID0gdCgpLCBFID0gLTE7CiAgaWYgKGsgIT0gNjU0OTYpCiAgICB0aHJvdyBuZXcgRXJyb3IoIlNPSSBub3QgZm91bmQiKTsKICBmb3IgKGsgPSB0KCk7IGsgIT0gNjU0OTc7ICkgewogICAgc3dpdGNoIChrKSB7CiAgICAgIGNhc2UgNjUyODA6CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgNjU1MDQ6CiAgICAgIGNhc2UgNjU1MDU6CiAgICAgIGNhc2UgNjU1MDY6CiAgICAgIGNhc2UgNjU1MDc6CiAgICAgIGNhc2UgNjU1MDg6CiAgICAgIGNhc2UgNjU1MDk6CiAgICAgIGNhc2UgNjU1MTA6CiAgICAgIGNhc2UgNjU1MTE6CiAgICAgIGNhc2UgNjU1MTI6CiAgICAgIGNhc2UgNjU1MTM6CiAgICAgIGNhc2UgNjU1MTQ6CiAgICAgIGNhc2UgNjU1MTU6CiAgICAgIGNhc2UgNjU1MTY6CiAgICAgIGNhc2UgNjU1MTc6CiAgICAgIGNhc2UgNjU1MTg6CiAgICAgIGNhc2UgNjU1MTk6CiAgICAgIGNhc2UgNjU1MzQ6IHsKICAgICAgICB2YXIgZyA9IGkoKTsKICAgICAgICBpZiAoayA9PT0gNjU1MzQpIHsKICAgICAgICAgIGZvciAodmFyIHcgPSAiIiwgQiA9IDA7IEIgPCBnLmJ5dGVMZW5ndGg7IEIrKykKICAgICAgICAgICAgdyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGdbQl0pOwogICAgICAgICAgZS5jb21tZW50cy5wdXNoKHcpOwogICAgICAgIH0KICAgICAgICBrID09PSA2NTUwNCAmJiBnWzBdID09PSA3NCAmJiBnWzFdID09PSA3MCAmJiBnWzJdID09PSA3MyAmJiBnWzNdID09PSA3MCAmJiBnWzRdID09PSAwICYmIChmID0gewogICAgICAgICAgdmVyc2lvbjogeyBtYWpvcjogZ1s1XSwgbWlub3I6IGdbNl0gfSwKICAgICAgICAgIGRlbnNpdHlVbml0czogZ1s3XSwKICAgICAgICAgIHhEZW5zaXR5OiBnWzhdIDw8IDggfCBnWzldLAogICAgICAgICAgeURlbnNpdHk6IGdbMTBdIDw8IDggfCBnWzExXSwKICAgICAgICAgIHRodW1iV2lkdGg6IGdbMTJdLAogICAgICAgICAgdGh1bWJIZWlnaHQ6IGdbMTNdLAogICAgICAgICAgdGh1bWJEYXRhOiBnLnN1YmFycmF5KDE0LCAxNCArIDMgKiBnWzEyXSAqIGdbMTNdKQogICAgICAgIH0pLCBrID09PSA2NTUwNSAmJiBnWzBdID09PSA2OSAmJiBnWzFdID09PSAxMjAgJiYgZ1syXSA9PT0gMTA1ICYmIGdbM10gPT09IDEwMiAmJiBnWzRdID09PSAwICYmIChlLmV4aWZCdWZmZXIgPSBnLnN1YmFycmF5KDUsIGcubGVuZ3RoKSksIGsgPT09IDY1NTE4ICYmIGdbMF0gPT09IDY1ICYmIGdbMV0gPT09IDEwMCAmJiBnWzJdID09PSAxMTEgJiYgZ1szXSA9PT0gOTggJiYgZ1s0XSA9PT0gMTAxICYmIGdbNV0gPT09IDAgJiYgKHUgPSB7CiAgICAgICAgICB2ZXJzaW9uOiBnWzZdLAogICAgICAgICAgZmxhZ3MwOiBnWzddIDw8IDggfCBnWzhdLAogICAgICAgICAgZmxhZ3MxOiBnWzldIDw8IDggfCBnWzEwXSwKICAgICAgICAgIHRyYW5zZm9ybUNvZGU6IGdbMTFdCiAgICAgICAgfSk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgY2FzZSA2NTQ5OTogewogICAgICAgIGZvciAodmFyIG0gPSB0KCksIHAgPSBtICsgQSAtIDI7IEEgPCBwOyApIHsKICAgICAgICAgIHZhciBXID0gcltBKytdOwogICAgICAgICAgT2EoNjQgKiA0KTsKICAgICAgICAgIHZhciBDID0gbmV3IEludDMyQXJyYXkoNjQpOwogICAgICAgICAgaWYgKFcgPj4gNCkKICAgICAgICAgICAgaWYgKFcgPj4gNCA9PT0gMSkKICAgICAgICAgICAgICBmb3IgKHZhciBfID0gMDsgXyA8IDY0OyBfKyspIHsKICAgICAgICAgICAgICAgIHZhciBOID0gZzJbX107CiAgICAgICAgICAgICAgICBDW05dID0gdCgpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiRFFUOiBpbnZhbGlkIHRhYmxlIHNwZWMiKTsKICAgICAgICAgIGVsc2UgZm9yICh2YXIgXyA9IDA7IF8gPCA2NDsgXysrKSB7CiAgICAgICAgICAgIHZhciBOID0gZzJbX107CiAgICAgICAgICAgIENbTl0gPSByW0ErK107CiAgICAgICAgICB9CiAgICAgICAgICBzW1cgJiAxNV0gPSBDOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgfQogICAgICBjYXNlIDY1NDcyOgogICAgICBjYXNlIDY1NDczOgogICAgICBjYXNlIDY1NDc0OiB7CiAgICAgICAgdCgpLCBvID0gewogICAgICAgICAgZXh0ZW5kZWQ6IGsgPT09IDY1NDczLAogICAgICAgICAgcHJvZ3Jlc3NpdmU6IGsgPT09IDY1NDc0LAogICAgICAgICAgcHJlY2lzaW9uOiByW0ErK10sCiAgICAgICAgICBzY2FuTGluZXM6IHQoKSwKICAgICAgICAgIHNhbXBsZXNQZXJMaW5lOiB0KCksCiAgICAgICAgICBjb21wb25lbnRzOiB7fSwKICAgICAgICAgIGNvbXBvbmVudHNPcmRlcjogW10sCiAgICAgICAgICBtYXhIOiAwLAogICAgICAgICAgbWF4VjogMCwKICAgICAgICAgIG1jdXNQZXJMaW5lOiAwLAogICAgICAgICAgbWN1c1BlckNvbHVtbjogMAogICAgICAgIH07CiAgICAgICAgdmFyIEQgPSBvLnNjYW5MaW5lcyAqIG8uc2FtcGxlc1BlckxpbmU7CiAgICAgICAgaWYgKEQgPiBhKSB7CiAgICAgICAgICB2YXIgWSA9IE1hdGguY2VpbCgoRCAtIGEpIC8gMWU2KTsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigibWF4UmVzb2x1dGlvbkluTVAgbGltaXQgZXhjZWVkZWQgYnkgIi5jb25jYXQoWSwgIk1QIikpOwogICAgICAgIH0KICAgICAgICBmb3IgKHZhciBmMCA9IHJbQSsrXSwgRyA9IDA7IEcgPCBmMDsgRysrKSB7CiAgICAgICAgICB2YXIgSiA9IHJbQV0sIEsgPSByW0EgKyAxXSA+PiA0LCBYID0gcltBICsgMV0gJiAxNSwgbDAgPSByW0EgKyAyXTsKICAgICAgICAgIG8uY29tcG9uZW50c09yZGVyLnB1c2goSiksIG8uY29tcG9uZW50c1tKXSA9IHsKICAgICAgICAgICAgaDogSywKICAgICAgICAgICAgdjogWCwKICAgICAgICAgICAgcXVhbnRpemF0aW9uSWR4OiBsMCwKICAgICAgICAgICAgYmxvY2tzUGVyQ29sdW1uOiAwLAogICAgICAgICAgICBibG9ja3NQZXJMaW5lOiAwLAogICAgICAgICAgICBibG9ja3M6IFtdLAogICAgICAgICAgICBwcmVkOiAwCiAgICAgICAgICB9LCBBICs9IDM7CiAgICAgICAgfQogICAgICAgIG4obyksIGMucHVzaChvKTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBjYXNlIDY1NDc2OiB7CiAgICAgICAgZm9yICh2YXIgYiA9IHQoKSwgRyA9IDI7IEcgPCBiOyApIHsKICAgICAgICAgIGZvciAodmFyIFogPSByW0ErK10sIHkgPSBuZXcgVWludDhBcnJheSgxNiksIEYgPSAwLCBfID0gMDsgXyA8IDE2OyBfKyssIEErKykKICAgICAgICAgICAgRiArPSB5W19dID0gcltBXTsKICAgICAgICAgIE9hKDE2ICsgRik7CiAgICAgICAgICBmb3IgKHZhciBSID0gbmV3IFVpbnQ4QXJyYXkoRiksIF8gPSAwOyBfIDwgRjsgXysrLCBBKyspCiAgICAgICAgICAgIFJbX10gPSByW0FdOwogICAgICAgICAgRyArPSAxNyArIEY7CiAgICAgICAgICB2YXIgTSA9IFogJiAxNSwgSSA9IFogPj4gNCA/IGQgOiB2OwogICAgICAgICAgSVtNXSA9IG9sKHksIFIpOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgfQogICAgICBjYXNlIDY1NTAxOgogICAgICAgIHQoKSwgbCA9IHQoKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSA2NTUwMDoKICAgICAgICB0KCksIHQoKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSA2NTQ5ODogewogICAgICAgIHQoKTsKICAgICAgICBmb3IgKHZhciBWID0gcltBKytdLCB6ID0gW10sIEcgPSAwOyBHIDwgVjsgRysrKSB7CiAgICAgICAgICB2YXIgaiA9IG8uY29tcG9uZW50c1tyW0ErK11dLCBhMCA9IHJbQSsrXTsKICAgICAgICAgIGouaHVmZm1hblRhYmxlREMgPSB2W2EwID4+IDRdLCBqLmh1ZmZtYW5UYWJsZUFDID0gZFthMCAmIDE1XSwgei5wdXNoKGopOwogICAgICAgIH0KICAgICAgICB2YXIgYjAgPSByW0ErK10sIGUwID0gcltBKytdLCBxID0gcltBKytdLCBvMCA9IHVsKHIsIEEsIG8sIHosIGwsIGIwLCBlMCwgcSA+PiA0LCBxICYgMTUpOwogICAgICAgIEEgKz0gbzA7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgY2FzZSA2NTUzNToKICAgICAgICByW0FdICE9PSAyNTUgJiYgQS0tOwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaWYgKHJbQSAtIDNdID09IDI1NSAmJiByW0EgLSAyXSA+PSAxOTIgJiYgcltBIC0gMl0gPD0gMjU0KSB7CiAgICAgICAgICBBIC09IDM7CiAgICAgICAgICBicmVhazsKICAgICAgICB9IGVsc2UgaWYgKGsgPT09IDIyNCB8fCBrID09IDIyNSkgewogICAgICAgICAgaWYgKEUgIT09IC0xKQogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImZpcnN0IHVua25vd24gSlBFRyBtYXJrZXIgYXQgb2Zmc2V0ICIuY29uY2F0KEUudG9TdHJpbmcoMTYpLCAiLCBzZWNvbmQgdW5rbm93biBKUEVHIG1hcmtlciAiKS5jb25jYXQoay50b1N0cmluZygxNiksICIgYXQgb2Zmc2V0ICIpLmNvbmNhdCgoQSAtIDEpLnRvU3RyaW5nKDE2KSkpOwogICAgICAgICAgRSA9IEEgLSAxOwogICAgICAgICAgdmFyIGMwID0gdCgpOwogICAgICAgICAgaWYgKHJbQSArIGMwIC0gMl0gPT09IDI1NSkgewogICAgICAgICAgICBBICs9IGMwIC0gMjsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRocm93IG5ldyBFcnJvcigidW5rbm93biBKUEVHIG1hcmtlciAiICsgay50b1N0cmluZygxNikpOwogICAgICB9CiAgICB9CiAgICBrID0gdCgpOwogIH0KICBpZiAoYy5sZW5ndGggIT0gMSkKICAgIHRocm93IG5ldyBFcnJvcigib25seSBzaW5nbGUgZnJhbWUgSlBFR3Mgc3VwcG9ydGVkIik7CiAgZm9yICh2YXIgRyA9IDA7IEcgPCBjLmxlbmd0aDsgRysrKSB7CiAgICB2YXIgUzAgPSBjW0ddLmNvbXBvbmVudHM7CiAgICBmb3IgKHZhciBfIGluIFMwKQogICAgICBTMFtfXS5xdWFudGl6YXRpb25UYWJsZSA9IHNbUzBbX10ucXVhbnRpemF0aW9uSWR4XSwgZGVsZXRlIFMwW19dLnF1YW50aXphdGlvbklkeDsKICB9CiAgZS53aWR0aCA9IG8uc2FtcGxlc1BlckxpbmUsIGUuaGVpZ2h0ID0gby5zY2FuTGluZXMsIGUuamZpZiA9IGYsIGUuYWRvYmUgPSB1LCBlLmNvbXBvbmVudHMgPSBbXTsKICBmb3IgKHZhciBHID0gMDsgRyA8IG8uY29tcG9uZW50c09yZGVyLmxlbmd0aDsgRysrKSB7CiAgICB2YXIgaiA9IG8uY29tcG9uZW50c1tvLmNvbXBvbmVudHNPcmRlcltHXV07CiAgICBlLmNvbXBvbmVudHMucHVzaCh7CiAgICAgIGxpbmVzOiBsbChqKSwKICAgICAgc2NhbGVYOiBqLmggLyBvLm1heEgsCiAgICAgIHNjYWxlWTogai52IC8gby5tYXhWCiAgICB9KTsKICB9CiAgcmV0dXJuIGU7Cn0KZnVuY3Rpb24gc2wocikgewogIHZhciBlID0gMCwgYSA9ICExLCBBID0gci53aWR0aCwgdCA9IHIuaGVpZ2h0LCBpID0gQSAqIHQgKiByLmNvbXBvbmVudHMubGVuZ3RoOwogIE9hKGkpOwogIHZhciBuID0gbmV3IFVpbnQ4QXJyYXkoaSk7CiAgc3dpdGNoIChyLmNvbXBvbmVudHMubGVuZ3RoKSB7CiAgICBjYXNlIDE6IHsKICAgICAgZm9yICh2YXIgZiA9IHIuY29tcG9uZW50c1swXSwgdSA9IDA7IHUgPCB0OyB1KyspCiAgICAgICAgZm9yICh2YXIgbyA9IGYubGluZXNbMCB8IHUgKiBmLnNjYWxlWV0sIGwgPSAwOyBsIDwgQTsgbCsrKSB7CiAgICAgICAgICB2YXIgcyA9IG9bMCB8IGwgKiBmLnNjYWxlWF07CiAgICAgICAgICBuW2UrK10gPSBzOwogICAgICAgIH0KICAgICAgYnJlYWs7CiAgICB9CiAgICBjYXNlIDI6IHsKICAgICAgZm9yICh2YXIgZiA9IHIuY29tcG9uZW50c1swXSwgYyA9IHIuY29tcG9uZW50c1sxXSwgdSA9IDA7IHUgPCB0OyB1KyspCiAgICAgICAgZm9yICh2YXIgbyA9IGYubGluZXNbMCB8IHUgKiBmLnNjYWxlWV0sIGQgPSBjLmxpbmVzWzAgfCB1ICogYy5zY2FsZVldLCBsID0gMDsgbCA8IEE7IGwrKykgewogICAgICAgICAgdmFyIHYgPSBvWzAgfCBsICogZi5zY2FsZVhdOwogICAgICAgICAgbltlKytdID0gdjsKICAgICAgICAgIHZhciBrID0gZFswIHwgbCAqIGMuc2NhbGVYXTsKICAgICAgICAgIG5bZSsrXSA9IGs7CiAgICAgICAgfQogICAgICBicmVhazsKICAgIH0KICAgIGNhc2UgMzogewogICAgICBhID0gITAsIHIuYWRvYmUgJiYgci5hZG9iZS50cmFuc2Zvcm1Db2RlICYmIChhID0gITApOwogICAgICBmb3IgKHZhciBmID0gci5jb21wb25lbnRzWzBdLCBjID0gci5jb21wb25lbnRzWzFdLCBFID0gci5jb21wb25lbnRzWzJdLCB1ID0gMDsgdSA8IHQ7IHUrKykKICAgICAgICBmb3IgKHZhciBvID0gZi5saW5lc1swIHwgdSAqIGYuc2NhbGVZXSwgZCA9IGMubGluZXNbMCB8IHUgKiBjLnNjYWxlWV0sIGcgPSBFLmxpbmVzWzAgfCB1ICogRS5zY2FsZVldLCBsID0gMDsgbCA8IEE7IGwrKykgewogICAgICAgICAgdmFyIHMgPSB2b2lkIDAsIHcgPSB2b2lkIDAsIEIgPSB2b2lkIDAsIG0gPSB2b2lkIDAsIHAgPSB2b2lkIDAsIFcgPSB2b2lkIDA7CiAgICAgICAgICBhID8gKHMgPSBvWzAgfCBsICogZi5zY2FsZVhdLCB3ID0gZFswIHwgbCAqIGMuc2NhbGVYXSwgQiA9IGdbMCB8IGwgKiBFLnNjYWxlWF0sIG0gPSByYShzICsgMS40MDIgKiAoQiAtIDEyOCkpLCBwID0gcmEocyAtIDAuMzQ0MTM2MyAqICh3IC0gMTI4KSAtIDAuNzE0MTM2MzYgKiAoQiAtIDEyOCkpLCBXID0gcmEocyArIDEuNzcyICogKHcgLSAxMjgpKSkgOiAobSA9IG9bMCB8IGwgKiBmLnNjYWxlWF0sIHAgPSBkWzAgfCBsICogYy5zY2FsZVhdLCBXID0gZ1swIHwgbCAqIEUuc2NhbGVYXSksIG5bZSsrXSA9IG0sIG5bZSsrXSA9IHAsIG5bZSsrXSA9IFc7CiAgICAgICAgfQogICAgICBicmVhazsKICAgIH0KICAgIGNhc2UgNDogewogICAgICBpZiAoIXIuYWRvYmUpCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBjb2xvciBtb2RlICg0IGNvbXBvbmVudHMpIik7CiAgICAgIGEgPSAhMSwgci5hZG9iZSAmJiByLmFkb2JlLnRyYW5zZm9ybUNvZGUgJiYgKGEgPSAhMCk7CiAgICAgIGZvciAodmFyIGYgPSByLmNvbXBvbmVudHNbMF0sIGMgPSByLmNvbXBvbmVudHNbMV0sIEUgPSByLmNvbXBvbmVudHNbMl0sIEMgPSByLmNvbXBvbmVudHNbM10sIHUgPSAwOyB1IDwgdDsgdSsrKQogICAgICAgIGZvciAodmFyIG8gPSBmLmxpbmVzWzAgfCB1ICogZi5zY2FsZVldLCBkID0gYy5saW5lc1swIHwgdSAqIGMuc2NhbGVZXSwgZyA9IEUubGluZXNbMCB8IHUgKiBFLnNjYWxlWV0sIF8gPSBDLmxpbmVzWzAgfCB1ICogQy5zY2FsZVldLCBsID0gMDsgbCA8IEE7IGwrKykgewogICAgICAgICAgdmFyIHMgPSB2b2lkIDAsIHcgPSB2b2lkIDAsIEIgPSB2b2lkIDAsIE4gPSB2b2lkIDAsIEQgPSB2b2lkIDAsIFkgPSB2b2lkIDAsIGYwID0gdm9pZCAwOwogICAgICAgICAgYSA/IChzID0gb1swIHwgbCAqIGYuc2NhbGVYXSwgdyA9IGRbMCB8IGwgKiBjLnNjYWxlWF0sIEIgPSBnWzAgfCBsICogRS5zY2FsZVhdLCBOID0gX1swIHwgbCAqIEMuc2NhbGVYXSwgRCA9IDI1NSAtIHJhKHMgKyAxLjQwMiAqIChCIC0gMTI4KSksIFkgPSAyNTUgLSByYShzIC0gMC4zNDQxMzYzICogKHcgLSAxMjgpIC0gMC43MTQxMzYzNiAqIChCIC0gMTI4KSksIGYwID0gMjU1IC0gcmEocyArIDEuNzcyICogKHcgLSAxMjgpKSkgOiAoRCA9IG9bMCB8IGwgKiBmLnNjYWxlWF0sIFkgPSBkWzAgfCBsICogYy5zY2FsZVhdLCBmMCA9IGdbMCB8IGwgKiBFLnNjYWxlWF0sIE4gPSBfWzAgfCBsICogQy5zY2FsZVhdKSwgbltlKytdID0gMjU1IC0gRCwgbltlKytdID0gMjU1IC0gWSwgbltlKytdID0gMjU1IC0gZjAsIG5bZSsrXSA9IDI1NSAtIE47CiAgICAgICAgfQogICAgICBicmVhazsKICAgIH0KICAgIGRlZmF1bHQ6CiAgICAgIHRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgY29sb3IgbW9kZSIpOwogIH0KICByZXR1cm4gbjsKfQpmdW5jdGlvbiBibChyLCBlKSB7CiAgaWYgKHlBID0gMCwgci5sZW5ndGggPT09IDApCiAgICB0aHJvdyBuZXcgRXJyb3IoIkVtcHR5IGpwZWcgYnVmZmVyIik7CiAgdmFyIGEgPSBjbChyKTsKICBPYShhLndpZHRoICogYS5oZWlnaHQgKiA0KTsKICB2YXIgQSA9IHNsKGEpLCB0ID0gZShhLndpZHRoLCBhLmhlaWdodCksIGkgPSB0LndpZHRoLCBuID0gdC5oZWlnaHQsIGYgPSB0LmRhdGEsIHUgPSAwLCBvID0gMDsKICBzd2l0Y2ggKGEuY29tcG9uZW50cy5sZW5ndGgpIHsKICAgIGNhc2UgMToKICAgICAgZm9yICh2YXIgbCA9IDA7IGwgPCBuOyBsKyspCiAgICAgICAgZm9yICh2YXIgcyA9IDA7IHMgPCBpOyBzKyspIHsKICAgICAgICAgIHZhciBjID0gQVt1KytdOwogICAgICAgICAgZltvKytdID0gYywgZltvKytdID0gYywgZltvKytdID0gYywgZltvKytdID0gMjU1OwogICAgICAgIH0KICAgICAgYnJlYWs7CiAgICBjYXNlIDM6CiAgICAgIGZvciAodmFyIGwgPSAwOyBsIDwgbjsgbCsrKQogICAgICAgIGZvciAodmFyIHMgPSAwOyBzIDwgaTsgcysrKSB7CiAgICAgICAgICB2YXIgZCA9IEFbdSsrXSwgdiA9IEFbdSsrXSwgayA9IEFbdSsrXTsKICAgICAgICAgIGZbbysrXSA9IGQsIGZbbysrXSA9IHYsIGZbbysrXSA9IGssIGZbbysrXSA9IDI1NTsKICAgICAgICB9CiAgICAgIGJyZWFrOwogICAgY2FzZSA0OgogICAgICBmb3IgKHZhciBsID0gMDsgbCA8IG47IGwrKykKICAgICAgICBmb3IgKHZhciBzID0gMDsgcyA8IGk7IHMrKykgewogICAgICAgICAgdmFyIEUgPSBBW3UrK10sIGcgPSBBW3UrK10sIGMgPSBBW3UrK10sIHcgPSBBW3UrK10sIGQgPSAyNTUgLSByYShFICogKDEgLSB3IC8gMjU1KSArIHcpLCB2ID0gMjU1IC0gcmEoZyAqICgxIC0gdyAvIDI1NSkgKyB3KSwgayA9IDI1NSAtIHJhKGMgKiAoMSAtIHcgLyAyNTUpICsgdyk7CiAgICAgICAgICBmW28rK10gPSBkLCBmW28rK10gPSB2LCBmW28rK10gPSBrLCBmW28rK10gPSAyNTU7CiAgICAgICAgfQogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgY29sb3IgbW9kZSIpOwogIH0KICByZXR1cm4gdDsKfQp2YXIgZGwgPSAhMSwgWGUgPSB7fSwgSmEgPSB7CiAgcGFzczogInBhc3MgdGhyb3VnaCIsCiAgbm9ybTogIm5vcm1hbCIsCiAgZGlzczogImRpc3NvbHZlIiwKICBkYXJrOiAiZGFya2VuIiwKICAibXVsICI6ICJtdWx0aXBseSIsCiAgaWRpdjogImNvbG9yIGJ1cm4iLAogIGxicm46ICJsaW5lYXIgYnVybiIsCiAgZGtDbDogImRhcmtlciBjb2xvciIsCiAgbGl0ZTogImxpZ2h0ZW4iLAogIHNjcm46ICJzY3JlZW4iLAogICJkaXYgIjogImNvbG9yIGRvZGdlIiwKICBsZGRnOiAibGluZWFyIGRvZGdlIiwKICBsZ0NsOiAibGlnaHRlciBjb2xvciIsCiAgb3ZlcjogIm92ZXJsYXkiLAogIHNMaXQ6ICJzb2Z0IGxpZ2h0IiwKICBoTGl0OiAiaGFyZCBsaWdodCIsCiAgdkxpdDogInZpdmlkIGxpZ2h0IiwKICBsTGl0OiAibGluZWFyIGxpZ2h0IiwKICBwTGl0OiAicGluIGxpZ2h0IiwKICBoTWl4OiAiaGFyZCBtaXgiLAogIGRpZmY6ICJkaWZmZXJlbmNlIiwKICBzbXVkOiAiZXhjbHVzaW9uIiwKICBmc3ViOiAic3VidHJhY3QiLAogIGZkaXY6ICJkaXZpZGUiLAogICJodWUgIjogImh1ZSIsCiAgInNhdCAiOiAic2F0dXJhdGlvbiIsCiAgY29scjogImNvbG9yIiwKICAibHVtICI6ICJsdW1pbm9zaXR5Igp9OwpPYmplY3Qua2V5cyhKYSkuZm9yRWFjaChmdW5jdGlvbihyKSB7CiAgcmV0dXJuIFhlW0phW3JdXSA9IHI7Cn0pOwp2YXIgVHQgPSBbCiAgIm5vbmUiLAogICJyZWQiLAogICJvcmFuZ2UiLAogICJ5ZWxsb3ciLAogICJncmVlbiIsCiAgImJsdWUiLAogICJ2aW9sZXQiLAogICJncmF5IgpdLCBYbiA9IFsKICAvLyBmcm9tIGRvY3VtZW50YXRpb24KICAiTE1zayIsCiAgIkxyMTYiLAogICJMcjMyIiwKICAiTGF5ciIsCiAgIk10MTYiLAogICJNdDMyIiwKICAiTXRybiIsCiAgIkFscGgiLAogICJGTXNrIiwKICAibG5rMiIsCiAgIkZFaWQiLAogICJGWGlkIiwKICAiUHhTRCIsCiAgLy8gZnJvbSBndWVzc2luZwogICJjaW5mIgpdOwpmdW5jdGlvbiBobChyKSB7CiAgdmFyIGUgPSB7fTsKICByZXR1cm4gT2JqZWN0LmtleXMocikuZm9yRWFjaChmdW5jdGlvbihhKSB7CiAgICByZXR1cm4gZVtyW2FdXSA9IGE7CiAgfSksIGU7Cn0KZnVuY3Rpb24gdTAociwgZSwgYSkgewogIHZhciBBID0gaGwoYSksIHQgPSBmdW5jdGlvbihuKSB7CiAgICB2YXIgZiA9IG4uc3BsaXQoIi4iKVsxXTsKICAgIGlmIChmICYmICFBW2ZdKQogICAgICB0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB2YWx1ZSBmb3IgZW51bTogJyIuY29uY2F0KG4sICInIikpOwogICAgcmV0dXJuIEFbZl0gfHwgZTsKICB9LCBpID0gZnVuY3Rpb24obikgewogICAgaWYgKG4gJiYgIWFbbl0pCiAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCB2YWx1ZSBmb3IgZW51bTogJyIuY29uY2F0KG4sICInIikpOwogICAgcmV0dXJuICIiLmNvbmNhdChyLCAiLiIpLmNvbmNhdChhW25dIHx8IGFbZV0pOwogIH07CiAgcmV0dXJuIHsgZGVjb2RlOiB0LCBlbmNvZGU6IGkgfTsKfQp2YXIgUHQ7CihmdW5jdGlvbihyKSB7CiAgcltyLlJHQiA9IDBdID0gIlJHQiIsIHJbci5IU0IgPSAxXSA9ICJIU0IiLCByW3IuQ01ZSyA9IDJdID0gIkNNWUsiLCByW3IuTGFiID0gN10gPSAiTGFiIiwgcltyLkdyYXlzY2FsZSA9IDhdID0gIkdyYXlzY2FsZSI7Cn0pKFB0IHx8IChQdCA9IHt9KSk7CnZhciBZdDsKKGZ1bmN0aW9uKHIpIHsKICByW3IuUG9zaXRpb25SZWxhdGl2ZVRvTGF5ZXIgPSAxXSA9ICJQb3NpdGlvblJlbGF0aXZlVG9MYXllciIsIHJbci5MYXllck1hc2tEaXNhYmxlZCA9IDJdID0gIkxheWVyTWFza0Rpc2FibGVkIiwgcltyLkludmVydExheWVyTWFza1doZW5CbGVuZGluZyA9IDRdID0gIkludmVydExheWVyTWFza1doZW5CbGVuZGluZyIsIHJbci5MYXllck1hc2tGcm9tUmVuZGVyaW5nT3RoZXJEYXRhID0gOF0gPSAiTGF5ZXJNYXNrRnJvbVJlbmRlcmluZ090aGVyRGF0YSIsIHJbci5NYXNrSGFzUGFyYW1ldGVyc0FwcGxpZWRUb0l0ID0gMTZdID0gIk1hc2tIYXNQYXJhbWV0ZXJzQXBwbGllZFRvSXQiOwp9KShZdCB8fCAoWXQgPSB7fSkpOwp2YXIgT3Q7CihmdW5jdGlvbihyKSB7CiAgcltyLlVzZXJNYXNrRGVuc2l0eSA9IDFdID0gIlVzZXJNYXNrRGVuc2l0eSIsIHJbci5Vc2VyTWFza0ZlYXRoZXIgPSAyXSA9ICJVc2VyTWFza0ZlYXRoZXIiLCByW3IuVmVjdG9yTWFza0RlbnNpdHkgPSA0XSA9ICJWZWN0b3JNYXNrRGVuc2l0eSIsIHJbci5WZWN0b3JNYXNrRmVhdGhlciA9IDhdID0gIlZlY3Rvck1hc2tGZWF0aGVyIjsKfSkoT3QgfHwgKE90ID0ge30pKTsKZnVuY3Rpb24gUm4ociwgZSkgewogIHN3aXRjaCAocikgewogICAgY2FzZSAwOgogICAgICByZXR1cm4gMDsKICAgIGNhc2UgMToKICAgICAgcmV0dXJuIDE7CiAgICBjYXNlIDI6CiAgICAgIHJldHVybiAyOwogICAgY2FzZSAzOgogICAgICByZXR1cm4gZSA/IDMgOiByICsgMTsKICAgIGNhc2UgLTE6CiAgICAgIHJldHVybiBlID8gNCA6IDM7CiAgICBkZWZhdWx0OgogICAgICByZXR1cm4gciArIDE7CiAgfQp9CmZ1bmN0aW9uIE1BKHIsIGUsIGEpIHsKICByZXR1cm4gciA8IGUgPyBlIDogciA+IGEgPyBhIDogcjsKfQpmdW5jdGlvbiBWbihyKSB7CiAgZm9yICh2YXIgZSA9IHIud2lkdGggKiByLmhlaWdodCAqIDQsIGEgPSAzOyBhIDwgZTsgYSArPSA0KQogICAgaWYgKHIuZGF0YVthXSAhPT0gMjU1KQogICAgICByZXR1cm4gITA7CiAgcmV0dXJuICExOwp9CmZ1bmN0aW9uIHZsKHIpIHsKICBmb3IgKHZhciBlID0gci5kYXRhLCBhID0gZSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSA/IDEgOiBlIGluc3RhbmNlb2YgVWludDE2QXJyYXkgPyA2NTUzNSA6IDI1NSwgQSA9IDAsIHQgPSBlLmxlbmd0aCB8IDA7IEEgPCB0OyBBID0gQSArIDQgfCAwKQogICAgZVtBICsgMF0gPSAwLCBlW0EgKyAxXSA9IDAsIGVbQSArIDJdID0gMCwgZVtBICsgM10gPSBhOwp9CmZ1bmN0aW9uIG1lKHIpIHsKICB2YXIgZSA9IGEyKHIud2lkdGgsIHIuaGVpZ2h0KSwgYTsKICBpZiAoci5kYXRhIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpCiAgICBhID0gcjsKICBlbHNlIHsKICAgIGEgPSBIYShyLndpZHRoLCByLmhlaWdodCk7CiAgICB2YXIgQSA9IHIuZGF0YSwgdCA9IGEuZGF0YTsKICAgIGlmIChBIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KQogICAgICBmb3IgKHZhciBpID0gMCwgbiA9IEEubGVuZ3RoOyBpIDwgbjsgaSArPSA0KQogICAgICAgIHRbaSArIDBdID0gTWF0aC5yb3VuZChNYXRoLnBvdyhBW2kgKyAwXSwgMSAvIDIuMikgKiAyNTUpLCB0W2kgKyAxXSA9IE1hdGgucm91bmQoTWF0aC5wb3coQVtpICsgMV0sIDEgLyAyLjIpICogMjU1KSwgdFtpICsgMl0gPSBNYXRoLnJvdW5kKE1hdGgucG93KEFbaSArIDJdLCAxIC8gMi4yKSAqIDI1NSksIHRbaSArIDNdID0gTWF0aC5yb3VuZChBW2kgKyAzXSAqIDI1NSk7CiAgICBlbHNlCiAgICAgIGZvciAodmFyIGYgPSBBIGluc3RhbmNlb2YgVWludDE2QXJyYXkgPyA4IDogMCwgaSA9IDAsIG4gPSBBLmxlbmd0aDsgaSA8IG47IGkrKykKICAgICAgICB0W2ldID0gQVtpXSA+Pj4gZjsKICB9CiAgcmV0dXJuIGUuZ2V0Q29udGV4dCgiMmQiKS5wdXRJbWFnZURhdGEoYSwgMCwgMCksIGU7Cn0KZnVuY3Rpb24ga2wociwgZSwgYSwgQSkgewogIGlmICghKHIgaW5zdGFuY2VvZiBVaW50OEFycmF5IHx8IHIgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheSkpCiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYml0IGRlcHRoIik7CiAgZm9yICh2YXIgdCA9IDAsIGkgPSAwLCBuID0gMDsgdCA8IEE7IHQrKykKICAgIGZvciAodmFyIGYgPSAwOyBmIDwgYTsgKQogICAgICBmb3IgKHZhciB1ID0gcltuKytdLCBvID0gMDsgbyA8IDggJiYgZiA8IGE7IG8rKywgZisrLCBpICs9IDQpIHsKICAgICAgICB2YXIgbCA9IHUgJiAxMjggPyAwIDogMjU1OwogICAgICAgIHUgPSB1IDw8IDEsIGVbaSArIDBdID0gbCwgZVtpICsgMV0gPSBsLCBlW2kgKyAyXSA9IGwsIGVbaSArIDNdID0gMjU1OwogICAgICB9Cn0KZnVuY3Rpb24gVEEociwgZSwgYSwgQSkgewogIHZhciB0ID0gZS5kYXRhLCBpID0gZS53aWR0aCwgbiA9IGUuaGVpZ2h0OwogIGlmICghKCFpIHx8ICFuKSkgewogICAgZm9yICh2YXIgZiA9IDQgKiBpIHwgMCwgdSA9IDAsIG8gPSBhLmxlbmd0aCAqIChBID8gNCA6IDIpICogbiB8IDAsIGwgPSAwLCBzID0gYTsgbCA8IHMubGVuZ3RoOyBsKyspCiAgICAgIGZvciAodmFyIGMgPSBzW2xdLCBkID0gMCwgdiA9IGMgfCAwOyBkIDwgbjsgZCsrKSB7CiAgICAgICAgdmFyIGsgPSBkICogZiB8IDAsIEUgPSBrICsgZiB8IDAsIGcgPSBFICsgYyAtIDQgfCAwLCB3ID0gZyAtIDQgfCAwLCBCID0gbzsKICAgICAgICBmb3IgKHYgPSBrICsgYyB8IDA7IHYgPCBFOyB2ID0gdiArIDQgfCAwKQogICAgICAgICAgaWYgKHYgPCB3KSB7CiAgICAgICAgICAgIHZhciBtID0gdFt2XTsKICAgICAgICAgICAgdiA9IHYgKyA0IHwgMDsKICAgICAgICAgICAgdmFyIHAgPSB0W3ZdOwogICAgICAgICAgICB2ID0gdiArIDQgfCAwOwogICAgICAgICAgICB2YXIgVyA9IHRbdl07CiAgICAgICAgICAgIGlmIChtID09PSBwICYmIG0gPT09IFcpIHsKICAgICAgICAgICAgICBmb3IgKHZhciBDID0gMzsgQyA8IDEyOCAmJiB2IDwgZyAmJiB0W3YgKyA0IHwgMF0gPT09IG07ICkKICAgICAgICAgICAgICAgIEMgPSBDICsgMSB8IDAsIHYgPSB2ICsgNCB8IDA7CiAgICAgICAgICAgICAgcltvKytdID0gMSAtIEMsIHJbbysrXSA9IG07CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgdmFyIF8gPSBvLCBOID0gITAsIEMgPSAxOwogICAgICAgICAgICAgIGZvciAocltvKytdID0gMCwgcltvKytdID0gbTsgdiA8IGcgJiYgQyA8IDEyODsgKQogICAgICAgICAgICAgICAgaWYgKHYgPSB2ICsgNCB8IDAsIG0gPSBwLCBwID0gVywgVyA9IHRbdl0sIG0gPT09IHAgJiYgbSA9PT0gVykgewogICAgICAgICAgICAgICAgICB2ID0gdiAtIDEyIHwgMCwgTiA9ICExOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICBDKyssIHJbbysrXSA9IG07CiAgICAgICAgICAgICAgTiAmJiAoQyA8IDEyNyA/IChyW28rK10gPSBwLCByW28rK10gPSBXLCBDICs9IDIpIDogQyA8IDEyOCA/IChyW28rK10gPSBwLCBDKyssIHYgPSB2IC0gNCB8IDApIDogdiA9IHYgLSA4IHwgMCksIHJbX10gPSBDIC0gMTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHYgPT09IGcgPyAocltvKytdID0gMCwgcltvKytdID0gdFt2XSkgOiAocltvKytdID0gMSwgcltvKytdID0gdFt2XSwgdiA9IHYgKyA0IHwgMCwgcltvKytdID0gdFt2XSk7CiAgICAgICAgdmFyIEQgPSBvIC0gQjsKICAgICAgICBBICYmIChyW3UrK10gPSBEID4+IDI0ICYgMjU1LCByW3UrK10gPSBEID4+IDE2ICYgMjU1KSwgclt1KytdID0gRCA+PiA4ICYgMjU1LCByW3UrK10gPSBEICYgMjU1OwogICAgICB9CiAgICByZXR1cm4gci5zbGljZSgwLCBvKTsKICB9Cn0KZnVuY3Rpb24gU24ociwgZSkgewogIGZvciAodmFyIGEgPSByLmRhdGEsIEEgPSByLndpZHRoLCB0ID0gci5oZWlnaHQsIGkgPSBBICogdCwgbiA9IG5ldyBVaW50OEFycmF5KGkpLCBmID0gW10sIHUgPSAwLCBvID0gMCwgbCA9IGU7IG8gPCBsLmxlbmd0aDsgbysrKSB7CiAgICBmb3IgKHZhciBzID0gbFtvXSwgYyA9IDAsIGQgPSBzOyBjIDwgaTsgYysrLCBkICs9IDQpCiAgICAgIG5bY10gPSBhW2RdOwogICAgdmFyIHYgPSBpbChuKTsKICAgIGYucHVzaCh2KSwgdSArPSB2LmJ5dGVMZW5ndGg7CiAgfQogIGlmIChmLmxlbmd0aCA+IDApIHsKICAgIGZvciAodmFyIHYgPSBuZXcgVWludDhBcnJheSh1KSwgcyA9IDAsIGsgPSAwLCBFID0gZjsgayA8IEUubGVuZ3RoOyBrKyspIHsKICAgICAgdmFyIGcgPSBFW2tdOwogICAgICB2LnNldChnLCBzKSwgcyArPSBnLmJ5dGVMZW5ndGg7CiAgICB9CiAgICByZXR1cm4gdjsKICB9IGVsc2UKICAgIHJldHVybiBmWzBdOwp9CmZ1bmN0aW9uIGdsKHIpIHsKICB2YXIgZSA9IGEyKDEwMCwgMTAwKTsKICB0cnkgewogICAgdmFyIGEgPSBlLmdldENvbnRleHQoIjJkIiksIEEgPSBibChyLCBmdW5jdGlvbih0LCBpKSB7CiAgICAgIHJldHVybiBhLmNyZWF0ZUltYWdlRGF0YSh0LCBpKTsKICAgIH0pOwogICAgZS53aWR0aCA9IEEud2lkdGgsIGUuaGVpZ2h0ID0gQS5oZWlnaHQsIGEucHV0SW1hZ2VEYXRhKEEsIDAsIDApOwogIH0gY2F0Y2ggKHQpIHsKICAgIGNvbnNvbGUuZXJyb3IoIkpQRUcgZGVjb21wcmVzc2lvbiBlcnJvciIsIHQubWVzc2FnZSk7CiAgfQogIHJldHVybiBlOwp9CnZhciBhMiA9IGZ1bmN0aW9uKCkgewogIHRocm93IG5ldyBFcnJvcigiQ2FudmFzIG5vdCBpbml0aWFsaXplZCwgdXNlIGluaXRpYWxpemVDYW52YXMgbWV0aG9kIHRvIHNldCB1cCBjcmVhdGVDYW52YXMgbWV0aG9kIik7Cn0sIHFlID0gdm9pZCAwLCBIYSA9IGZ1bmN0aW9uKHIsIGUpIHsKICByZXR1cm4gcWUgfHwgKHFlID0gYTIoMSwgMSkpLCBxZS5nZXRDb250ZXh0KCIyZCIpLmNyZWF0ZUltYWdlRGF0YShyLCBlKTsKfTsKdHlwZW9mIGRvY3VtZW50IDwgInUiICYmIChhMiA9IGZ1bmN0aW9uKHIsIGUpIHsKICB2YXIgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwogIHJldHVybiBhLndpZHRoID0gciwgYS5oZWlnaHQgPSBlLCBhOwp9KTsKZnVuY3Rpb24gbWwociwgZSkgewogIGEyID0gciwgSGEgPSBlIHx8IEhhOwp9CnZhciBEbiA9IFpsLCB4biA9IEZsLCBVciA9IFtdLCBaciA9IFtdLCBwbCA9IHR5cGVvZiBVaW50OEFycmF5IDwgInUiID8gVWludDhBcnJheSA6IEFycmF5LCAkZSA9ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIjsKZm9yICh2YXIgVmEgPSAwLCB3bCA9ICRlLmxlbmd0aDsgVmEgPCB3bDsgKytWYSkKICBVcltWYV0gPSAkZVtWYV0sIFpyWyRlLmNoYXJDb2RlQXQoVmEpXSA9IFZhOwpacls0NV0gPSA2MjsKWnJbOTVdID0gNjM7CmZ1bmN0aW9uIHlsKHIpIHsKICB2YXIgZSA9IHIubGVuZ3RoOwogIGlmIChlICUgNCA+IDApCiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQiKTsKICB2YXIgYSA9IHIuaW5kZXhPZigiPSIpOwogIGEgPT09IC0xICYmIChhID0gZSk7CiAgdmFyIEEgPSBhID09PSBlID8gMCA6IDQgLSBhICUgNDsKICByZXR1cm4gW2EsIEFdOwp9CmZ1bmN0aW9uIEVsKHIsIGUsIGEpIHsKICByZXR1cm4gKGUgKyBhKSAqIDMgLyA0IC0gYTsKfQpmdW5jdGlvbiBabChyKSB7CiAgdmFyIGUsIGEgPSB5bChyKSwgQSA9IGFbMF0sIHQgPSBhWzFdLCBpID0gbmV3IHBsKEVsKHIsIEEsIHQpKSwgbiA9IDAsIGYgPSB0ID4gMCA/IEEgLSA0IDogQSwgdTsKICBmb3IgKHUgPSAwOyB1IDwgZjsgdSArPSA0KQogICAgZSA9IFpyW3IuY2hhckNvZGVBdCh1KV0gPDwgMTggfCBacltyLmNoYXJDb2RlQXQodSArIDEpXSA8PCAxMiB8IFpyW3IuY2hhckNvZGVBdCh1ICsgMildIDw8IDYgfCBacltyLmNoYXJDb2RlQXQodSArIDMpXSwgaVtuKytdID0gZSA+PiAxNiAmIDI1NSwgaVtuKytdID0gZSA+PiA4ICYgMjU1LCBpW24rK10gPSBlICYgMjU1OwogIHJldHVybiB0ID09PSAyICYmIChlID0gWnJbci5jaGFyQ29kZUF0KHUpXSA8PCAyIHwgWnJbci5jaGFyQ29kZUF0KHUgKyAxKV0gPj4gNCwgaVtuKytdID0gZSAmIDI1NSksIHQgPT09IDEgJiYgKGUgPSBacltyLmNoYXJDb2RlQXQodSldIDw8IDEwIHwgWnJbci5jaGFyQ29kZUF0KHUgKyAxKV0gPDwgNCB8IFpyW3IuY2hhckNvZGVBdCh1ICsgMildID4+IDIsIGlbbisrXSA9IGUgPj4gOCAmIDI1NSwgaVtuKytdID0gZSAmIDI1NSksIGk7Cn0KZnVuY3Rpb24gQmwocikgewogIHJldHVybiBVcltyID4+IDE4ICYgNjNdICsgVXJbciA+PiAxMiAmIDYzXSArIFVyW3IgPj4gNiAmIDYzXSArIFVyW3IgJiA2M107Cn0KZnVuY3Rpb24gSWwociwgZSwgYSkgewogIGZvciAodmFyIEEsIHQgPSBbXSwgaSA9IGU7IGkgPCBhOyBpICs9IDMpCiAgICBBID0gKHJbaV0gPDwgMTYgJiAxNjcxMTY4MCkgKyAocltpICsgMV0gPDwgOCAmIDY1MjgwKSArIChyW2kgKyAyXSAmIDI1NSksIHQucHVzaChCbChBKSk7CiAgcmV0dXJuIHQuam9pbigiIik7Cn0KZnVuY3Rpb24gRmwocikgewogIGZvciAodmFyIGUsIGEgPSByLmxlbmd0aCwgQSA9IGEgJSAzLCB0ID0gW10sIGkgPSAxNjM4MywgbiA9IDAsIGYgPSBhIC0gQTsgbiA8IGY7IG4gKz0gaSkKICAgIHQucHVzaChJbChyLCBuLCBuICsgaSA+IGYgPyBmIDogbiArIGkpKTsKICByZXR1cm4gQSA9PT0gMSA/IChlID0gclthIC0gMV0sIHQucHVzaCgKICAgIFVyW2UgPj4gMl0gKyBVcltlIDw8IDQgJiA2M10gKyAiPT0iCiAgKSkgOiBBID09PSAyICYmIChlID0gKHJbYSAtIDJdIDw8IDgpICsgclthIC0gMV0sIHQucHVzaCgKICAgIFVyW2UgPj4gMTBdICsgVXJbZSA+PiA0ICYgNjNdICsgVXJbZSA8PCAyICYgNjNdICsgIj0iCiAgKSksIHQuam9pbigiIik7Cn0KZnVuY3Rpb24gRUEocikgewogIHJldHVybiByICYgNDI5NDk2NzE2OCA/IHIgJiA0Mjk0OTY1MjQ4ID8gciAmIDQyOTQ5MDE3NjAgPyA0IDogMyA6IDIgOiAxOwp9CmZ1bmN0aW9uIENsKHIpIHsKICBmb3IgKHZhciBlID0gMCwgYSA9IDA7IGEgPCByLmxlbmd0aDsgYSsrKSB7CiAgICB2YXIgQSA9IHIuY2hhckNvZGVBdChhKTsKICAgIGlmIChBID49IDU1Mjk2ICYmIEEgPD0gNTYzMTkpIHsKICAgICAgaWYgKGEgKyAxIDwgci5sZW5ndGgpIHsKICAgICAgICB2YXIgdCA9IHIuY2hhckNvZGVBdChhICsgMSk7CiAgICAgICAgKHQgJiA2NDUxMikgPT09IDU2MzIwICYmIChhKyssIGUgKz0gRUEoKChBICYgMTAyMykgPDwgMTApICsgKHQgJiAxMDIzKSArIDY1NTM2KSk7CiAgICAgIH0KICAgIH0gZWxzZQogICAgICBlICs9IEVBKEEpOwogIH0KICByZXR1cm4gZTsKfQpmdW5jdGlvbiBVdChyLCBlLCBhKSB7CiAgdmFyIEEgPSBFQShhKTsKICBzd2l0Y2ggKEEpIHsKICAgIGNhc2UgMToKICAgICAgcltlXSA9IGE7CiAgICAgIGJyZWFrOwogICAgY2FzZSAyOgogICAgICByW2VdID0gYSA+PiA2ICYgMzEgfCAxOTIsIHJbZSArIDFdID0gYSAmIDYzIHwgMTI4OwogICAgICBicmVhazsKICAgIGNhc2UgMzoKICAgICAgcltlXSA9IGEgPj4gMTIgJiAxNSB8IDIyNCwgcltlICsgMV0gPSBhID4+IDYgJiA2MyB8IDEyOCwgcltlICsgMl0gPSBhICYgNjMgfCAxMjg7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgcltlXSA9IGEgPj4gMTggJiA3IHwgMjQwLCByW2UgKyAxXSA9IGEgPj4gMTIgJiA2MyB8IDEyOCwgcltlICsgMl0gPSBhID4+IDYgJiA2MyB8IDEyOCwgcltlICsgM10gPSBhICYgNjMgfCAxMjg7CiAgICAgIGJyZWFrOwogIH0KICByZXR1cm4gQTsKfQpmdW5jdGlvbiBXbChyLCBlLCBhKSB7CiAgZm9yICh2YXIgQSA9IDA7IEEgPCBhLmxlbmd0aDsgQSsrKSB7CiAgICB2YXIgdCA9IGEuY2hhckNvZGVBdChBKTsKICAgIGlmICh0ID49IDU1Mjk2ICYmIHQgPD0gNTYzMTkpIHsKICAgICAgaWYgKEEgKyAxIDwgYS5sZW5ndGgpIHsKICAgICAgICB2YXIgaSA9IGEuY2hhckNvZGVBdChBICsgMSk7CiAgICAgICAgaWYgKChpICYgNjQ1MTIpID09PSA1NjMyMCkgewogICAgICAgICAgQSsrOwogICAgICAgICAgdmFyIG4gPSAoKHQgJiAxMDIzKSA8PCAxMCkgKyAoaSAmIDEwMjMpICsgNjU1MzY7CiAgICAgICAgICBlICs9IFV0KHIsIGUsIG4pOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlCiAgICAgIGUgKz0gVXQociwgZSwgdCk7CiAgfQogIHJldHVybiBlOwp9CmZ1bmN0aW9uIE5uKHIpIHsKICBpZiAoci5sZW5ndGggPiAxZTMgJiYgdHlwZW9mIFRleHRFbmNvZGVyIDwgInUiKQogICAgcmV0dXJuIG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShyKTsKICB2YXIgZSA9IG5ldyBVaW50OEFycmF5KENsKHIpKTsKICByZXR1cm4gV2woZSwgMCwgciksIGU7Cn0KZnVuY3Rpb24gU2EociwgZSkgewogIGlmIChlID49IHIubGVuZ3RoKQogICAgdGhyb3cgRXJyb3IoIkludmFsaWQgYnl0ZSBpbmRleCIpOwogIHZhciBhID0gcltlXTsKICBpZiAoKGEgJiAxOTIpID09PSAxMjgpCiAgICByZXR1cm4gYSAmIDYzOwogIHRocm93IEVycm9yKCJJbnZhbGlkIGNvbnRpbnVhdGlvbiBieXRlIik7Cn0KZnVuY3Rpb24gTW4ocikgewogIGlmIChyLmJ5dGVMZW5ndGggPiAxZTMgJiYgdHlwZW9mIFRleHREZWNvZGVyIDwgInUiKQogICAgcmV0dXJuIG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShyKTsKICBmb3IgKHZhciBlID0gW10sIGEgPSAwOyBhIDwgci5sZW5ndGg7ICkgewogICAgdmFyIEEgPSByW2ErK10sIHQgPSB2b2lkIDA7CiAgICBpZiAoIShBICYgMTI4KSkKICAgICAgdCA9IEE7CiAgICBlbHNlIGlmICgoQSAmIDIyNCkgPT09IDE5MikgewogICAgICB2YXIgaSA9IFNhKHIsIGErKyk7CiAgICAgIGlmICh0ID0gKEEgJiAzMSkgPDwgNiB8IGksIHQgPCAxMjgpCiAgICAgICAgdGhyb3cgRXJyb3IoIkludmFsaWQgY29udGludWF0aW9uIGJ5dGUiKTsKICAgIH0gZWxzZSBpZiAoKEEgJiAyNDApID09PSAyMjQpIHsKICAgICAgdmFyIGkgPSBTYShyLCBhKyspLCBuID0gU2EociwgYSsrKTsKICAgICAgaWYgKHQgPSAoQSAmIDE1KSA8PCAxMiB8IGkgPDwgNiB8IG4sIHQgPCAyMDQ4KQogICAgICAgIHRocm93IEVycm9yKCJJbnZhbGlkIGNvbnRpbnVhdGlvbiBieXRlIik7CiAgICAgIGlmICh0ID49IDU1Mjk2ICYmIHQgPD0gNTczNDMpCiAgICAgICAgdGhyb3cgRXJyb3IoIkxvbmUgc3Vycm9nYXRlIFUrIi5jb25jYXQodC50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSwgIiBpcyBub3QgYSBzY2FsYXIgdmFsdWUiKSk7CiAgICB9IGVsc2UgaWYgKChBICYgMjQ4KSA9PT0gMjQwKSB7CiAgICAgIHZhciBpID0gU2EociwgYSsrKSwgbiA9IFNhKHIsIGErKyksIGYgPSBTYShyLCBhKyspOwogICAgICBpZiAodCA9IChBICYgMTUpIDw8IDE4IHwgaSA8PCAxMiB8IG4gPDwgNiB8IGYsIHQgPCA2NTUzNiB8fCB0ID4gMTExNDExMSkKICAgICAgICB0aHJvdyBFcnJvcigiSW52YWxpZCBjb250aW51YXRpb24gYnl0ZSIpOwogICAgfSBlbHNlCiAgICAgIHRocm93IEVycm9yKCJJbnZhbGlkIFVURi04IGRldGVjdGVkIik7CiAgICB0ID4gNjU1MzUgJiYgKHQgLT0gNjU1MzYsIGUucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKHQgPj4+IDEwICYgMTAyMyB8IDU1Mjk2KSksIHQgPSA1NjMyMCB8IHQgJiAxMDIzKSwgZS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUodCkpOwogIH0KICByZXR1cm4gZS5qb2luKCIiKTsKfQp2YXIgYWEgPSBmdW5jdGlvbigpIHsKICByZXR1cm4gYWEgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHIpIHsKICAgIGZvciAodmFyIGUsIGEgPSAxLCBBID0gYXJndW1lbnRzLmxlbmd0aDsgYSA8IEE7IGErKykgewogICAgICBlID0gYXJndW1lbnRzW2FdOwogICAgICBmb3IgKHZhciB0IGluIGUpIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCB0KSAmJiAoclt0XSA9IGVbdF0pOwogICAgfQogICAgcmV0dXJuIHI7CiAgfSwgYWEuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKfSwgX2wgPSBmdW5jdGlvbihyLCBlKSB7CiAgdmFyIGEgPSB7fTsKICBmb3IgKHZhciBBIGluIHIpIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLCBBKSAmJiBlLmluZGV4T2YoQSkgPCAwICYmIChhW0FdID0gcltBXSk7CiAgaWYgKHIgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PSAiZnVuY3Rpb24iKQogICAgZm9yICh2YXIgdCA9IDAsIEEgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHIpOyB0IDwgQS5sZW5ndGg7IHQrKykKICAgICAgZS5pbmRleE9mKEFbdF0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwociwgQVt0XSkgJiYgKGFbQVt0XV0gPSByW0FbdF1dKTsKICByZXR1cm4gYTsKfTsKZnVuY3Rpb24gR2wocikgewogIHZhciBlID0ge307CiAgcmV0dXJuIE9iamVjdC5rZXlzKHIpLmZvckVhY2goZnVuY3Rpb24oYSkgewogICAgcmV0dXJuIGVbclthXV0gPSBhOwogIH0pLCBlOwp9CnZhciBiMiA9IHsKICAiI0FuZyI6ICJBbmdsZSIsCiAgIiNSc2wiOiAiRGVuc2l0eSIsCiAgIiNSbHQiOiAiRGlzdGFuY2UiLAogICIjTm5lIjogIk5vbmUiLAogICIjUHJjIjogIlBlcmNlbnQiLAogICIjUHhsIjogIlBpeGVscyIsCiAgIiNNbG0iOiAiTWlsbGltZXRlcnMiLAogICIjUG50IjogIlBvaW50cyIsCiAgUnJQaTogIlBpY2FzIiwKICBSckluOiAiSW5jaGVzIiwKICBSckNtOiAiQ2VudGltZXRlcnMiCn0sICQyID0gR2woYjIpOwpmdW5jdGlvbiBRKHIsIGUpIHsKICByZXR1cm4geyBuYW1lOiByLCBjbGFzc0lEOiBlIH07Cn0KdmFyIHcwID0gUSgiIiwgIm51bGwiKSwgVG4gPSB7CiAgc3Ryb2tlU3R5bGVDb250ZW50OiBRKCIiLCAic29saWRDb2xvckxheWVyIiksCiAgcHJpbnRQcm9vZlNldHVwOiBRKCJQcm9vZiBTZXR1cCIsICJwcm9vZlNldHVwIiksCiAgR3JhZDogUSgiR3JhZGllbnQiLCAiR3JkbiIpLAogIFRybmY6IFEoIlRyYW5zZm9ybSIsICJUcm5mIiksCiAgcGF0dGVybkZpbGw6IFEoIiIsICJwYXR0ZXJuRmlsbCIpLAogIGViYmw6IFEoIiIsICJlYmJsIiksCiAgU29GaTogUSgiIiwgIlNvRmkiKSwKICBHckZsOiBRKCIiLCAiR3JGbCIpLAogIHNkd0M6IFEoIiIsICJSR0JDIiksCiAgaGdsQzogUSgiIiwgIlJHQkMiKSwKICAiQ2xyICI6IFEoIiIsICJSR0JDIiksCiAgdGludENvbG9yOiBRKCIiLCAiUkdCQyIpLAogIE9mc3Q6IFEoIiIsICJQbnQgIiksCiAgQ2hGWDogUSgiIiwgIkNoRlgiKSwKICBNcGdTOiBRKCIiLCAiU2hwQyIpLAogIERyU2g6IFEoIiIsICJEclNoIiksCiAgSXJTaDogUSgiIiwgIklyU2giKSwKICBPckdsOiBRKCIiLCAiT3JHbCIpLAogIElyR2w6IFEoIiIsICJJckdsIiksCiAgVHJuUzogUSgiIiwgIlNocEMiKSwKICBQdHJuOiBRKCIiLCAiUHRybiIpLAogIEZyRlg6IFEoIiIsICJGckZYIiksCiAgcGhhc2U6IFEoIiIsICJQbnQgIiksCiAgZnJhbWVTdGVwOiB3MCwKICBkdXJhdGlvbjogdzAsCiAgd29ya0luVGltZTogdzAsCiAgd29ya091dFRpbWU6IHcwLAogIGF1ZGlvQ2xpcEdyb3VwTGlzdDogdzAsCiAgYm91bmRzOiBRKCIiLCAiUmN0biIpLAogIGN1c3RvbUVudmVsb3BlV2FycDogUSgiIiwgImN1c3RvbUVudmVsb3BlV2FycCIpLAogIHdhcnA6IFEoIiIsICJ3YXJwIiksCiAgIlN6ICAiOiBRKCIiLCAiUG50ICIpLAogIG9yaWdpbjogUSgiIiwgIlBudCAiKSwKICBhdXRvRXhwYW5kT2Zmc2V0OiBRKCIiLCAiUG50ICIpLAogIGtleU9yaWdpblNoYXBlQkJveDogUSgiIiwgInVuaXRSZWN0IiksCiAgVnJzbjogdzAsCiAgcHNWZXJzaW9uOiB3MCwKICBkb2NEZWZhdWx0TmV3QXJ0Ym9hcmRCYWNrZ3JvdW5kQ29sb3I6IFEoIiIsICJSR0JDIiksCiAgYXJ0Ym9hcmRSZWN0OiBRKCIiLCAiY2xhc3NGbG9hdFJlY3QiKSwKICBrZXlPcmlnaW5SUmVjdFJhZGlpOiBRKCIiLCAicmFkaWkiKSwKICBrZXlPcmlnaW5Cb3hDb3JuZXJzOiB3MCwKICByZWN0YW5nbGVDb3JuZXJBOiBRKCIiLCAiUG50ICIpLAogIHJlY3RhbmdsZUNvcm5lckI6IFEoIiIsICJQbnQgIiksCiAgcmVjdGFuZ2xlQ29ybmVyQzogUSgiIiwgIlBudCAiKSwKICByZWN0YW5nbGVDb3JuZXJEOiBRKCIiLCAiUG50ICIpLAogIGNvbXBJbmZvOiB3MCwKICBxdWlsdFdhcnA6IFEoIiIsICJxdWlsdFdhcnAiKSwKICBnZW5lcmF0b3JTZXR0aW5nczogdzAsCiAgY3JlbWE6IHcwLAogIEZySW46IHcwLAogIGJsZW5kT3B0aW9uczogdzAsCiAgRlhSZjogdzAsCiAgTGVmeDogdzAsCiAgdGltZTogdzAsCiAgYW5pbUtleTogdzAsCiAgdGltZVNjb3BlOiB3MCwKICBpblRpbWU6IHcwLAogIG91dFRpbWU6IHcwLAogIHNoZWV0U3R5bGU6IHcwLAogIHRyYW5zbGF0aW9uOiB3MCwKICBTa2V3OiB3MCwKICBib3VuZGluZ0JveDogUSgiIiwgImJvdW5kaW5nQm94IiksCiAgIkxuayAiOiBRKCIiLCAiRXh0ZXJuYWxGaWxlTGluayIpLAogIGZyYW1lUmVhZGVyOiBRKCIiLCAiRnJhbWVSZWFkZXIiKSwKICBlZmZlY3RQYXJhbXM6IFEoIiIsICJtb3Rpb25UcmFja0VmZmVjdFBhcmFtcyIpLAogIEltcHI6IFEoIk5vbmUiLCAibm9uZSIpLAogIEFuY2g6IFEoIiIsICJQbnQgIiksCiAgIkZ3ZCAiOiBRKCIiLCAiUG50ICIpLAogICJCd2QgIjogUSgiIiwgIlBudCAiKSwKICBGbHJDOiBRKCIiLCAiUG50ICIpLAogIG1lc2hCb3VuZGFyeVBhdGg6IFEoIiIsICJwYXRoQ2xhc3MiKSwKICBmaWx0ZXJGWDogUSgiIiwgImZpbHRlckZYU3R5bGUiKSwKICBGbHRyOiBRKCIiLCAicmlnaWRUcmFuc2Zvcm0iKSwKICBGcmdDOiBRKCIiLCAiUkdCQyIpLAogIEJja0M6IFEoIiIsICJSR0JDIiksCiAgc2R3TTogUSgiUGFyYW1ldGVycyIsICJhZGFwdENvcnJlY3RUb25lcyIpLAogIGhnbE06IFEoIlBhcmFtZXRlcnMiLCAiYWRhcHRDb3JyZWN0VG9uZXMiKSwKICBjdXN0b21TaGFwZTogUSgiIiwgImN1c3RvbVNoYXBlIiksCiAgb3JpZ0ZYUmVmUG9pbnQ6IHcwLAogIEZYUmVmUG9pbnQ6IHcwLAogIENsTWc6IFEoIiIsICJDbE1nIikKfSwgUG4gPSB7CiAgIkNydiAiOiBRKCIiLCAiQ3JQdCIpLAogIENscnM6IFEoIiIsICJDbHJ0IiksCiAgVHJuczogUSgiIiwgIlRyblMiKSwKICBrZXlEZXNjcmlwdG9yTGlzdDogdzAsCiAgc29saWRGaWxsTXVsdGk6IFEoIiIsICJTb0ZpIiksCiAgZ3JhZGllbnRGaWxsTXVsdGk6IFEoIiIsICJHckZsIiksCiAgZHJvcFNoYWRvd011bHRpOiBRKCIiLCAiRHJTaCIpLAogIGlubmVyU2hhZG93TXVsdGk6IFEoIiIsICJJclNoIiksCiAgZnJhbWVGWE11bHRpOiBRKCIiLCAiRnJGWCIpLAogIEZySW46IHcwLAogIEZTdHM6IHcwLAogIExhU3Q6IHcwLAogIHNoZWV0VGltZWxpbmVPcHRpb25zOiB3MCwKICB0cmFja0xpc3Q6IFEoIiIsICJhbmltYXRpb25UcmFjayIpLAogIGdsb2JhbFRyYWNrTGlzdDogUSgiIiwgImFuaW1hdGlvblRyYWNrIiksCiAga2V5TGlzdDogdzAsCiAgYXVkaW9DbGlwR3JvdXBMaXN0OiB3MCwKICBhdWRpb0NsaXBMaXN0OiB3MCwKICBjb3VudE9iamVjdExpc3Q6IFEoIiIsICJjb3VudE9iamVjdCIpLAogIGNvdW50R3JvdXBMaXN0OiBRKCIiLCAiY291bnRHcm91cCIpLAogIHNsaWNlczogUSgiIiwgInNsaWNlIiksCiAgIlB0cyAiOiBRKCIiLCAiUHRocCIpLAogIFNicEw6IFEoIiIsICJTYnBMIiksCiAgcGF0aENvbXBvbmVudHM6IFEoIiIsICJQYUNtIiksCiAgZmlsdGVyRlhMaXN0OiBRKCIiLCAiZmlsdGVyRlgiKSwKICBwdXBwZXRTaGFwZUxpc3Q6IFEoIiIsICJwdXBwZXRTaGFwZSIpLAogIGNoYW5uZWxEZW5vaXNlOiBRKCIiLCAiY2hhbm5lbERlbm9pc2VQYXJhbXMiKSwKICBTaHJQOiBRKCIiLCAiUG50ICIpLAogIGxheWVyU2V0dGluZ3M6IHcwLAogIGxpc3Q6IHcwLAogIEFkanM6IFEoIiIsICJDcnZBIikKfSwganQgPSB7CiAgVEVYVDogWwogICAgIlR4dCAiLAogICAgInByaW50ZXJOYW1lIiwKICAgICJObSAgIiwKICAgICJJZG50IiwKICAgICJibGFja0FuZFdoaXRlUHJlc2V0RmlsZU5hbWUiLAogICAgIkxVVDNERmlsZU5hbWUiLAogICAgInByZXNldEZpbGVOYW1lIiwKICAgICJjdXJ2ZXNQcmVzZXRGaWxlTmFtZSIsCiAgICAibWl4ZXJQcmVzZXRGaWxlTmFtZSIsCiAgICAicGxhY2VkIiwKICAgICJkZXNjcmlwdGlvbiIsCiAgICAicmVhc29uIiwKICAgICJhcnRib2FyZFByZXNldE5hbWUiLAogICAgImpzb24iLAogICAgImNsaXBJRCIsCiAgICAicmVsUGF0aCIsCiAgICAiZnVsbFBhdGgiLAogICAgIm1lZGlhRGVzY3JpcHRvciIsCiAgICAiTXNnZSIsCiAgICAiYWx0VGFnIiwKICAgICJ1cmwiLAogICAgImNlbGxUZXh0IiwKICAgICJwcmVzZXQiLAogICAgIktuTm0iLAogICAgIkZQdGgiLAogICAgImNvbW1lbnQiLAogICAgIm9yaWdpbmFsUGF0aCIKICBdLAogIHRkdGE6IFsKICAgICJFbmdpbmVEYXRhIiwKICAgICJMVVQzREZpbGVEYXRhIiwKICAgICJpbmRleEFycmF5IiwKICAgICJvcmlnaW5hbFZlcnRleEFycmF5IiwKICAgICJkZWZvcm1lZFZlcnRleEFycmF5IiwKICAgICJMcU1lIgogIF0sCiAgbG9uZzogWwogICAgIlRleHRJbmRleCIsCiAgICAiUm5kUyIsCiAgICAiTWRwbiIsCiAgICAiU210aCIsCiAgICAiTGN0biIsCiAgICAic3Ryb2tlU3R5bGVWZXJzaW9uIiwKICAgICJMYUlEIiwKICAgICJWcnNuIiwKICAgICJDbnQgIiwKICAgICJCcmdoIiwKICAgICJDbnRyIiwKICAgICJtZWFucyIsCiAgICAidmlicmFuY2UiLAogICAgIlN0cnQiLAogICAgImJ3UHJlc2V0S2luZCIsCiAgICAiY29tcCIsCiAgICAiY29tcElEIiwKICAgICJvcmlnaW5hbENvbXBJRCIsCiAgICAiY3VydmVzUHJlc2V0S2luZCIsCiAgICAibWl4ZXJQcmVzZXRLaW5kIiwKICAgICJ1T3JkZXIiLAogICAgInZPcmRlciIsCiAgICAiUGdObSIsCiAgICAidG90YWxQYWdlcyIsCiAgICAiQ3JvcCIsCiAgICAibnVtZXJhdG9yIiwKICAgICJkZW5vbWluYXRvciIsCiAgICAiZnJhbWVDb3VudCIsCiAgICAiQW5udCIsCiAgICAia2V5T3JpZ2luVHlwZSIsCiAgICAidW5pdFZhbHVlUXVhZFZlcnNpb24iLAogICAgImtleU9yaWdpbkluZGV4IiwKICAgICJtYWpvciIsCiAgICAibWlub3IiLAogICAgImZpeCIsCiAgICAiZG9jRGVmYXVsdE5ld0FydGJvYXJkQmFja2dyb3VuZFR5cGUiLAogICAgImFydGJvYXJkQmFja2dyb3VuZFR5cGUiLAogICAgIm51bU1vZGlmeWluZ0ZYIiwKICAgICJkZWZvcm1OdW1Sb3dzIiwKICAgICJkZWZvcm1OdW1Db2xzIiwKICAgICJGcklEIiwKICAgICJGckRsIiwKICAgICJGc0lEIiwKICAgICJMQ250IiwKICAgICJBRnJtIiwKICAgICJBRlN0IiwKICAgICJudW1CZWZvcmUiLAogICAgIm51bUFmdGVyIiwKICAgICJTcGNuIiwKICAgICJtaW5PcGFjaXR5IiwKICAgICJtYXhPcGFjaXR5IiwKICAgICJCbG5NIiwKICAgICJzaGVldElEIiwKICAgICJnYmxBIiwKICAgICJnbG9iYWxBbHRpdHVkZSIsCiAgICAiZGVzY1ZlcnNpb24iLAogICAgImZyYW1lUmVhZGVyVHlwZSIsCiAgICAiTHlySSIsCiAgICAiem9vbU9yaWdpbiIsCiAgICAiZm9udFNpemUiLAogICAgIlJkcyAiLAogICAgInNsaWNlSUQiLAogICAgInRvcE91dHNldCIsCiAgICAibGVmdE91dHNldCIsCiAgICAiYm90dG9tT3V0c2V0IiwKICAgICJyaWdodE91dHNldCIsCiAgICAiZmlsdGVySUQiLAogICAgIm1lc2hRdWFsaXR5IiwKICAgICJtZXNoRXhwYW5zaW9uIiwKICAgICJtZXNoUmlnaWRpdHkiLAogICAgIlZyc00iLAogICAgIlZyc04iLAogICAgIk5tYkciLAogICAgIldMTW4iLAogICAgIldMTXgiLAogICAgIkFtTW4iLAogICAgIkFtTXgiLAogICAgIlNjbEgiLAogICAgIlNjbFYiLAogICAgIkx2bCAiLAogICAgIlRsTm0iLAogICAgIlRsT2YiLAogICAgIkZsUnMiLAogICAgIlRoc2giLAogICAgIlNoclMiLAogICAgIlNockUiLAogICAgIkZsUnMiLAogICAgIlZybmMiLAogICAgIlN0cmciLAogICAgIkV4dFMiLAogICAgIkV4dEQiLAogICAgIkhyelMiLAogICAgIlZydFMiLAogICAgIk5tYlIiLAogICAgIkVkZ0YiLAogICAgIkFuZzEiLAogICAgIkFuZzIiLAogICAgIkFuZzMiLAogICAgIkFuZzQiLAogICAgImxhc3RBcHBsaWVkQ29tcCIsCiAgICAiY2FwdHVyZWRJbmZvIgogIF0sCiAgZW51bTogWwogICAgInRleHRHcmlkZGluZyIsCiAgICAiT3JudCIsCiAgICAid2FycFN0eWxlIiwKICAgICJ3YXJwUm90YXRlIiwKICAgICJJbnRlIiwKICAgICJCbHRuIiwKICAgICJDbHJTIiwKICAgICJCbHJRIiwKICAgICJidmxUIiwKICAgICJidmxTIiwKICAgICJidmxEIiwKICAgICJNZCAgIiwKICAgICJnbHdTIiwKICAgICJHcmRGIiwKICAgICJHbHdUIiwKICAgICJScGxTIiwKICAgICJCbHJNIiwKICAgICJTbUJNIiwKICAgICJzdHJva2VTdHlsZUxpbmVDYXBUeXBlIiwKICAgICJzdHJva2VTdHlsZUxpbmVKb2luVHlwZSIsCiAgICAic3Ryb2tlU3R5bGVMaW5lQWxpZ25tZW50IiwKICAgICJzdHJva2VTdHlsZUJsZW5kTW9kZSIsCiAgICAiUG50VCIsCiAgICAiU3R5bCIsCiAgICAibG9va3VwVHlwZSIsCiAgICAiTFVURm9ybWF0IiwKICAgICJkYXRhT3JkZXIiLAogICAgInRhYmxlT3JkZXIiLAogICAgImVuYWJsZUNvbXBDb3JlIiwKICAgICJlbmFibGVDb21wQ29yZUdQVSIsCiAgICAiY29tcENvcmVTdXBwb3J0IiwKICAgICJjb21wQ29yZUdQVVN1cHBvcnQiLAogICAgIkVuZ24iLAogICAgImVuYWJsZUNvbXBDb3JlVGhyZWFkcyIsCiAgICAiZ3M5OSIsCiAgICAiRnJEcyIsCiAgICAidHJhY2tJRCIsCiAgICAiYW5pbUludGVycFN0eWxlIiwKICAgICJob3J6QWxpZ24iLAogICAgInZlcnRBbGlnbiIsCiAgICAiYmdDb2xvclR5cGUiLAogICAgInNoYXBlT3BlcmF0aW9uIiwKICAgICJVbmRBIiwKICAgICJXdnRwIiwKICAgICJEcmN0IiwKICAgICJXbmRNIiwKICAgICJFZGcgIiwKICAgICJGbENsIiwKICAgICJJbnRFIiwKICAgICJJbnRDIiwKICAgICJDbnZyIiwKICAgICJGbCAgIiwKICAgICJEc3RyIiwKICAgICJNenRUIiwKICAgICJMbnMgIiwKICAgICJFeHRUIiwKICAgICJEc3BNIiwKICAgICJFeHRSIiwKICAgICJaWlR5IiwKICAgICJTcGhNIiwKICAgICJTbUJRIiwKICAgICJwbGFjZWRMYXllck9DSU9Db252ZXJzaW9uIiwKICAgICJncmFkaWVudHNJbnRlcnBvbGF0aW9uTWV0aG9kIgogIF0sCiAgYm9vbDogWwogICAgIlBzdFMiLAogICAgInByaW50U2l4dGVlbkJpdCIsCiAgICAibWFzdGVyRlhTd2l0Y2giLAogICAgImVuYWIiLAogICAgInVnbGciLAogICAgImFudGlhbGlhc0dsb3NzIiwKICAgICJ1c2VTaGFwZSIsCiAgICAidXNlVGV4dHVyZSIsCiAgICAidWdsZyIsCiAgICAiYW50aWFsaWFzR2xvc3MiLAogICAgInVzZVNoYXBlIiwKICAgICJWc2JsIiwKICAgICJ1c2VUZXh0dXJlIiwKICAgICJBbGduIiwKICAgICJSdnJzIiwKICAgICJEdGhyIiwKICAgICJJbnZyIiwKICAgICJWY3RDIiwKICAgICJTaFRyIiwKICAgICJsYXllckNvbmNlYWxzIiwKICAgICJzdHJva2VFbmFibGVkIiwKICAgICJmaWxsRW5hYmxlZCIsCiAgICAic3Ryb2tlU3R5bGVTY2FsZUxvY2siLAogICAgInN0cm9rZVN0eWxlU3Ryb2tlQWRqdXN0IiwKICAgICJoYXJkUHJvb2YiLAogICAgIk1wQmwiLAogICAgInBhcGVyV2hpdGUiLAogICAgInVzZUxlZ2FjeSIsCiAgICAiQXV0byIsCiAgICAiTGFiICIsCiAgICAidXNlVGludCIsCiAgICAia2V5U2hhcGVJbnZhbGlkYXRlZCIsCiAgICAiYXV0b0V4cGFuZEVuYWJsZWQiLAogICAgImF1dG9OZXN0RW5hYmxlZCIsCiAgICAiYXV0b1Bvc2l0aW9uRW5hYmxlZCIsCiAgICAic2hyaW5rd3JhcE9uU2F2ZUVuYWJsZWQiLAogICAgInByZXNlbnQiLAogICAgInNob3dJbkRpYWxvZyIsCiAgICAib3ZlcnByaW50IiwKICAgICJzaGVldERpc2Nsb3NlZCIsCiAgICAibGlnaHRzRGlzY2xvc2VkIiwKICAgICJtZXNoZXNEaXNjbG9zZWQiLAogICAgIm1hdGVyaWFsc0Rpc2Nsb3NlZCIsCiAgICAiaGFzTW90aW9uIiwKICAgICJtdXRlZCIsCiAgICAiRWZmYyIsCiAgICAic2VsZWN0ZWQiLAogICAgImF1dG9TY29wZSIsCiAgICAiZmlsbENhbnZhcyIsCiAgICAiY2VsbFRleHRJc0hUTUwiLAogICAgIlNtb28iLAogICAgIkNsc3AiLAogICAgInZhbGlkQXRQb3NpdGlvbiIsCiAgICAicmlnaWRUeXBlIiwKICAgICJoYXNvcHRpb25zIiwKICAgICJmaWx0ZXJNYXNrRW5hYmxlIiwKICAgICJmaWx0ZXJNYXNrTGlua2VkIiwKICAgICJmaWx0ZXJNYXNrRXh0ZW5kV2l0aFdoaXRlIiwKICAgICJyZW1vdmVKUEVHQXJ0aWZhY3QiLAogICAgIk1uY2giLAogICAgIkV4dEYiLAogICAgIkV4dE0iLAogICAgIm1vcmVBY2N1cmF0ZSIsCiAgICAiR3B1WSIsCiAgICAiTElXeSIsCiAgICAiQ250eSIKICBdLAogIGRvdWI6IFsKICAgICJ3YXJwVmFsdWUiLAogICAgIndhcnBQZXJzcGVjdGl2ZSIsCiAgICAid2FycFBlcnNwZWN0aXZlT3RoZXIiLAogICAgIkludHIiLAogICAgIldkdGgiLAogICAgIkhnaHQiLAogICAgInN0cm9rZVN0eWxlTWl0ZXJMaW1pdCIsCiAgICAic3Ryb2tlU3R5bGVSZXNvbHV0aW9uIiwKICAgICJsYXllclRpbWUiLAogICAgImtleU9yaWdpblJlc29sdXRpb24iLAogICAgInh4IiwKICAgICJ4eSIsCiAgICAieXgiLAogICAgInl5IiwKICAgICJ0eCIsCiAgICAidHkiLAogICAgIkZyR0EiLAogICAgImZyYW1lUmF0ZSIsCiAgICAiYXVkaW9MZXZlbCIsCiAgICAicm90YXRpb24iLAogICAgIlggICAiLAogICAgIlkgICAiLAogICAgInJlZEZsb2F0IiwKICAgICJncmVlbkZsb2F0IiwKICAgICJibHVlRmxvYXQiLAogICAgImltYWdlUmVzb2x1dGlvbiIsCiAgICAiUHVYMCIsCiAgICAiUHVYMSIsCiAgICAiUHVYMiIsCiAgICAiUHVYMyIsCiAgICAiUHVZMCIsCiAgICAiUHVZMSIsCiAgICAiUHVZMiIsCiAgICAiUHVZMyIKICBdLAogIFVudEY6IFsKICAgICJzZHdPIiwKICAgICJoZ2xPIiwKICAgICJsYWdsIiwKICAgICJMYWxkIiwKICAgICJzcmdSIiwKICAgICJibHVyIiwKICAgICJTZnRuIiwKICAgICJPcGN0IiwKICAgICJEc3RuIiwKICAgICJBbmdsIiwKICAgICJDa210IiwKICAgICJOb3NlIiwKICAgICJJbnByIiwKICAgICJTaGROIiwKICAgICJzdHJva2VTdHlsZUxpbmVXaWR0aCIsCiAgICAic3Ryb2tlU3R5bGVMaW5lRGFzaE9mZnNldCIsCiAgICAic3Ryb2tlU3R5bGVPcGFjaXR5IiwKICAgICJIICAgIiwKICAgICJUb3AgIiwKICAgICJMZWZ0IiwKICAgICJCdG9tIiwKICAgICJSZ2h0IiwKICAgICJSc2x0IiwKICAgICJ0b3BSaWdodCIsCiAgICAidG9wTGVmdCIsCiAgICAiYm90dG9tTGVmdCIsCiAgICAiYm90dG9tUmlnaHQiLAogICAgIkNsTnMiLAogICAgIlNocnAiCiAgXSwKICBWbExzOiBbCiAgICAiQ3J2ICIsCiAgICAiQ2xycyIsCiAgICAiTW5tICIsCiAgICAiTXhtICIsCiAgICAiVHJucyIsCiAgICAicGF0aExpc3QiLAogICAgInN0cm9rZVN0eWxlTGluZURhc2hTZXQiLAogICAgIkZyTHMiLAogICAgInNsaWNlcyIsCiAgICAiTGFTdCIsCiAgICAiVHJuZiIsCiAgICAibm9uQWZmaW5lVHJhbnNmb3JtIiwKICAgICJrZXlEZXNjcmlwdG9yTGlzdCIsCiAgICAiZ3VpZGVJbmRlY2VzIiwKICAgICJncmFkaWVudEZpbGxNdWx0aSIsCiAgICAic29saWRGaWxsTXVsdGkiLAogICAgImZyYW1lRlhNdWx0aSIsCiAgICAiaW5uZXJTaGFkb3dNdWx0aSIsCiAgICAiZHJvcFNoYWRvd011bHRpIiwKICAgICJGckluIiwKICAgICJGU3RzIiwKICAgICJGc0ZyIiwKICAgICJzaGVldFRpbWVsaW5lT3B0aW9ucyIsCiAgICAiYXVkaW9DbGlwTGlzdCIsCiAgICAidHJhY2tMaXN0IiwKICAgICJnbG9iYWxUcmFja0xpc3QiLAogICAgImtleUxpc3QiLAogICAgImF1ZGlvQ2xpcExpc3QiLAogICAgIndhcnBWYWx1ZXMiLAogICAgInNlbGVjdGVkUGluIiwKICAgICJQdHMgIiwKICAgICJTYnBMIiwKICAgICJwYXRoQ29tcG9uZW50cyIsCiAgICAicGluT2Zmc2V0cyIsCiAgICAicG9zRmluYWxQaW5zIiwKICAgICJwaW5WZXJ0ZXhJbmRpY2VzIiwKICAgICJQaW5QIiwKICAgICJQblJ0IiwKICAgICJQbk92IiwKICAgICJQbkRwIiwKICAgICJmaWx0ZXJGWExpc3QiLAogICAgInB1cHBldFNoYXBlTGlzdCIsCiAgICAiU2hyUCIsCiAgICAiY2hhbm5lbERlbm9pc2UiLAogICAgIk10cngiLAogICAgImxheWVyU2V0dGluZ3MiLAogICAgImxpc3QiLAogICAgImNvbXBMaXN0IiwKICAgICJBZGpzIgogIF0sCiAgT2JBcjogWyJtZXNoUG9pbnRzIiwgInF1aWx0U2xpY2VYIiwgInF1aWx0U2xpY2VZIl0sCiAgIm9iaiAiOiBbIm51bGwiLCAiQ2hubCJdLAogICJQdGggIjogWyJEc3BGIl0KfSwgWGwgPSBbCiAgIlJkICAiLAogICJHcm4gIiwKICAiQmwgICIsCiAgIllsbHciLAogICJZbHcgIiwKICAiQ3luICIsCiAgIk1nbnQiLAogICJCbGNrIiwKICAiR3J5ICIsCiAgIkxtbmMiLAogICJBICAgIiwKICAiQiAgICIKXSwgWW4gPSB7CiAgIk1ubSAiOiAibG9uZyIsCiAgIk14bSAiOiAibG9uZyIsCiAgRnJMczogImxvbmciLAogIHN0cm9rZVN0eWxlTGluZURhc2hTZXQ6ICJVbnRGIiwKICBUcm5mOiAiZG91YiIsCiAgbm9uQWZmaW5lVHJhbnNmb3JtOiAiZG91YiIsCiAga2V5RGVzY3JpcHRvckxpc3Q6ICJPYmpjIiwKICBncmFkaWVudEZpbGxNdWx0aTogIk9iamMiLAogIHNvbGlkRmlsbE11bHRpOiAiT2JqYyIsCiAgZnJhbWVGWE11bHRpOiAiT2JqYyIsCiAgaW5uZXJTaGFkb3dNdWx0aTogIk9iamMiLAogIGRyb3BTaGFkb3dNdWx0aTogIk9iamMiLAogIExhU3Q6ICJPYmpjIiwKICBGckluOiAiT2JqYyIsCiAgRlN0czogIk9iamMiLAogIEZzRnI6ICJsb25nIiwKICBibGVuZE9wdGlvbnM6ICJPYmpjIiwKICBzaGVldFRpbWVsaW5lT3B0aW9uczogIk9iamMiLAogIGtleUxpc3Q6ICJPYmpjIiwKICB3YXJwVmFsdWVzOiAiZG91YiIsCiAgc2VsZWN0ZWRQaW46ICJsb25nIiwKICAiUHRzICI6ICJPYmpjIiwKICBTYnBMOiAiT2JqYyIsCiAgcGF0aENvbXBvbmVudHM6ICJPYmpjIiwKICBwaW5PZmZzZXRzOiAiZG91YiIsCiAgcG9zRmluYWxQaW5zOiAiZG91YiIsCiAgcGluVmVydGV4SW5kaWNlczogImxvbmciLAogIFBpblA6ICJkb3ViIiwKICBQblJ0OiAibG9uZyIsCiAgUG5PdjogImJvb2wiLAogIFBuRHA6ICJkb3ViIiwKICBmaWx0ZXJGWExpc3Q6ICJPYmpjIiwKICBwdXBwZXRTaGFwZUxpc3Q6ICJPYmpjIiwKICBTaHJQOiAiT2JqYyIsCiAgY2hhbm5lbERlbm9pc2U6ICJPYmpjIiwKICBNdHJ4OiAibG9uZyIsCiAgY29tcExpc3Q6ICJsb25nIiwKICBDaG5sOiAiZW51bSIKfSwgcGUgPSB7fTsKZm9yICh2YXIgckEgPSAwLCBRdCA9IE9iamVjdC5rZXlzKGp0KTsgckEgPCBRdC5sZW5ndGg7IHJBKyspCiAgZm9yICh2YXIgSnQgPSBRdFtyQV0sIGFBID0gMCwgSHQgPSBqdFtKdF07IGFBIDwgSHQubGVuZ3RoOyBhQSsrKSB7CiAgICB2YXIgemEgPSBIdFthQV07CiAgICBwZVt6YV0gPSBKdDsKICB9CmZvciAodmFyIGVBID0gMCwgenQgPSBPYmplY3Qua2V5cyhUbik7IGVBIDwgenQubGVuZ3RoOyBlQSsrKSB7CiAgdmFyIHphID0genRbZUFdOwogIHBlW3phXSB8fCAocGVbemFdID0gIk9iamMiKTsKfQpmb3IgKHZhciBBQSA9IDAsIEx0ID0gT2JqZWN0LmtleXMoUG4pOyBBQSA8IEx0Lmxlbmd0aDsgQUErKykgewogIHZhciB6YSA9IEx0W0FBXTsKICBZblt6YV0gPSAiT2JqYyI7Cn0KZnVuY3Rpb24gUmwociwgZSwgYSwgQSkgewogIHJldHVybiByID09PSAicHJlc2V0S2luZCIgPyB0eXBlb2YgZSA9PSAic3RyaW5nIiA/ICJlbnVtIiA6ICJsb25nIiA6IHIgPT09ICJudWxsIiAmJiBhID09PSAic2xpY2VzIiA/ICJURVhUIiA6IHIgPT09ICJncm91cElEIiA/IGEgPT09ICJzbGljZXMiID8gImxvbmciIDogIlRFWFQiIDogciA9PT0gIlN6ICAiID8gIldkdGgiIGluIGUgPyAiT2JqYyIgOiAidW5pdHMiIGluIGUgPyAiVW50RiIgOiAiZG91YiIgOiByID09PSAiVHlwZSIgPyB0eXBlb2YgZSA9PSAic3RyaW5nIiA/ICJlbnVtIiA6ICJsb25nIiA6IHIgPT09ICJBbnRBIiA/IHR5cGVvZiBlID09ICJzdHJpbmciID8gImVudW0iIDogImJvb2wiIDogKHIgPT09ICJIcnpuIiB8fCByID09PSAiVnJ0YyIpICYmIChBLlR5cGUgPT09ICJrZXlUeXBlLlBzdG4iIHx8IEEuX2NsYXNzSUQgPT09ICJPZnN0IikgPyAibG9uZyIgOiByID09PSAiSHJ6biIgfHwgciA9PT0gIlZydGMiIHx8IHIgPT09ICJUb3AgIiB8fCByID09PSAiTGVmdCIgfHwgciA9PT0gIkJ0b20iIHx8IHIgPT09ICJSZ2h0IiA/IGEgPT09ICJzbGljZXMiID8gImxvbmciIDogdHlwZW9mIGUgPT0gIm51bWJlciIgPyAiZG91YiIgOiAiVW50RiIgOiByID09PSAiVnJzbiIgPyB0eXBlb2YgZSA9PSAibnVtYmVyIiA/ICJsb25nIiA6ICJPYmpjIiA6IHIgPT09ICJSZCAgIiB8fCByID09PSAiR3JuICIgfHwgciA9PT0gIkJsICAiID8gYSA9PT0gImFydGQiID8gImxvbmciIDogImRvdWIiIDogciA9PT0gIlRybmYiID8gQXJyYXkuaXNBcnJheShlKSA/ICJWbExzIiA6ICJPYmpjIiA6IHBlW3JdOwp9CmZ1bmN0aW9uIGVhKHIpIHsKICB2YXIgZSA9IEwocik7CiAgcmV0dXJuIFNlKHIsIGUgfHwgNCk7Cn0KZnVuY3Rpb24gQWEociwgZSkgewogIGlmIChlLmxlbmd0aCA9PT0gNCAmJiBlICE9PSAid2FycCIgJiYgZSAhPT0gInRpbWUiICYmIGUgIT09ICJob2xkIiAmJiBlICE9PSAibGlzdCIpCiAgICB0MChyLCAwKSwgbjAociwgZSk7CiAgZWxzZSB7CiAgICB0MChyLCBlLmxlbmd0aCk7CiAgICBmb3IgKHZhciBhID0gMDsgYSA8IGUubGVuZ3RoOyBhKyspCiAgICAgIFQociwgZS5jaGFyQ29kZUF0KGEpKTsKICB9Cn0KZnVuY3Rpb24gT24ociwgZSkgewogIGZvciAodmFyIGEgPSB5YShyKSwgQSA9IGUgPyB7IF9uYW1lOiBhLm5hbWUsIF9jbGFzc0lEOiBhLmNsYXNzSUQgfSA6IHt9LCB0ID0gUyhyKSwgaSA9IDA7IGkgPCB0OyBpKyspIHsKICAgIHZhciBuID0gZWEociksIGYgPSBSMChyKSwgdSA9IGpuKHIsIGYsIGUpOwogICAgQVtuXSA9IHU7CiAgfQogIHJldHVybiBBOwp9CmZ1bmN0aW9uIFVuKHIsIGUsIGEsIEEsIHQpIHsKICBXYShyLCBlKSwgQWEociwgYSk7CiAgdmFyIGkgPSBPYmplY3Qua2V5cyhBKSwgbiA9IGkubGVuZ3RoOwogICJfbmFtZSIgaW4gQSAmJiBuLS0sICJfY2xhc3NJRCIgaW4gQSAmJiBuLS0sIFUociwgbik7CiAgZm9yICh2YXIgZiA9IDAsIHUgPSBpOyBmIDwgdS5sZW5ndGg7IGYrKykgewogICAgdmFyIG8gPSB1W2ZdOwogICAgaWYgKCEobyA9PT0gIl9uYW1lIiB8fCBvID09PSAiX2NsYXNzSUQiKSkgewogICAgICB2YXIgbCA9IFJsKG8sIEFbb10sIHQsIEEpLCBzID0gVG5bb107CiAgICAgIG8gPT09ICJib3VuZHMiICYmIHQgPT09ICJ0ZXh0IiA/IHMgPSBRKCIiLCAiYm91bmRzIikgOiBvID09PSAib3JpZ2luIiA/IGwgPSB0ID09PSAic2xpY2VzIiA/ICJlbnVtIiA6ICJPYmpjIiA6IChvID09PSAiQ3luICIgfHwgbyA9PT0gIk1nbnQiIHx8IG8gPT09ICJZbHcgIiB8fCBvID09PSAiQmxjayIpICYmIEEuX2NsYXNzSUQgPT09ICJDTVlDIiA/IGwgPSAiZG91YiIgOiAvXlBOW2Etel1bYS16XSQvLnRlc3QobykgPyBsID0gIlRFWFQiIDogL15QVFthLXpdW2Etel0kLy50ZXN0KG8pID8gbCA9ICJsb25nIiA6IC9eUEZbYS16XVthLXpdJC8udGVzdChvKSB8fCAobyA9PT0gIlJkcyAiIHx8IG8gPT09ICJUaHNoIikgJiYgdHlwZW9mIEFbb10gPT0gIm51bWJlciIgJiYgQS5fY2xhc3NJRCA9PT0gIlNtckIiID8gbCA9ICJkb3ViIiA6IG8gPT09ICJDbFN6IiB8fCBvID09PSAiUmRzICIgfHwgbyA9PT0gIkFtbnQiID8gbCA9IHR5cGVvZiBBW29dID09ICJudW1iZXIiID8gImxvbmciIDogIlVudEYiIDogKG8gPT09ICJzZHdNIiB8fCBvID09PSAiaGdsTSIpICYmIHR5cGVvZiBBW29dID09ICJzdHJpbmciIHx8IG8gPT09ICJibHVyIiAmJiB0eXBlb2YgQVtvXSA9PSAic3RyaW5nIiA/IGwgPSAiZW51bSIgOiBvID09PSAiSGdodCIgJiYgdHlwZW9mIEFbb10gPT0gIm51bWJlciIgJiYgQS5fY2xhc3NJRCA9PT0gIkVtYnMiIHx8IG8gPT09ICJBbmdsIiAmJiB0eXBlb2YgQVtvXSA9PSAibnVtYmVyIiAmJiAoQS5fY2xhc3NJRCA9PT0gIkVtYnMiIHx8IEEuX2NsYXNzSUQgPT09ICJzbWFydFNoYXJwZW4iIHx8IEEuX2NsYXNzSUQgPT09ICJUd3JsIiB8fCBBLl9jbGFzc0lEID09PSAiTXRuQiIpID8gbCA9ICJsb25nIiA6IG8gPT09ICJBbmdsIiAmJiB0eXBlb2YgQVtvXSA9PSAibnVtYmVyIiA/IGwgPSAiZG91YiIgOiBvID09PSAiYm91bmRzIiAmJiB0ID09PSAic2xpY2VzIiA/IChsID0gIk9iamMiLCBzID0gUSgiIiwgIlJjdDEiKSkgOiBvID09PSAiU2NsICIgPyB0eXBlb2YgQVtvXSA9PSAib2JqZWN0IiAmJiAiSHJ6biIgaW4gQVtvXSA/IChsID0gIk9iamMiLCBzID0gdzApIDogdHlwZW9mIEFbb10gPT0gIm51bWJlciIgPyBsID0gImxvbmciIDogbCA9ICJVbnRGIiA6IG8gPT09ICJhdWRpb0NsaXBHcm91cExpc3QiICYmIGkubGVuZ3RoID09PSAxID8gbCA9ICJWbExzIiA6IChvID09PSAiU3RydCIgfHwgbyA9PT0gIkJyZ2giKSAmJiAiSCAgICIgaW4gQSA/IGwgPSAiZG91YiIgOiBvID09PSAiV2R0aCIgJiYgdHlwZW9mIEFbb10gPT0gIm9iamVjdCIgPyBsID0gIlVudEYiIDogbyA9PT0gIk9mc3QiICYmIHR5cGVvZiBBW29dID09ICJudW1iZXIiID8gbCA9ICJsb25nIiA6IG8gPT09ICJTdHJ0IiAmJiB0eXBlb2YgQVtvXSA9PSAib2JqZWN0IiA/IChsID0gIk9iamMiLCBzID0gdzApIDogWGwuaW5kZXhPZihvKSAhPT0gLTEgPyBsID0gYSA9PT0gIlJHQkMiICYmIHQgIT09ICJhcnRkIiA/ICJkb3ViIiA6ICJsb25nIiA6IG8gPT09ICJwcm9maWxlIiA/IGwgPSBhID09PSAicHJpbnRPdXRwdXQiID8gIlRFWFQiIDogInRkdGEiIDogbyA9PT0gInN0cm9rZVN0eWxlQ29udGVudCIgPyBBW29dWyJDbHIgIl0gPyBzID0gUSgiIiwgInNvbGlkQ29sb3JMYXllciIpIDogQVtvXS5HcmFkID8gcyA9IFEoIiIsICJncmFkaWVudExheWVyIikgOiBBW29dLlB0cm4gJiYgKHMgPSBRKCIiLCAicGF0dGVybkxheWVyIikpIDogbyA9PT0gImJvdW5kcyIgJiYgdCA9PT0gInF1aWx0V2FycCIgJiYgKHMgPSBRKCIiLCAiY2xhc3NGbG9hdFJlY3QiKSksIHMgJiYgcy5jbGFzc0lEID09PSAiUkdCQyIgJiYgIkggICAiIGluIEFbb10gJiYgKHMgPSB7IGNsYXNzSUQ6ICJIU0JDIiwgbmFtZTogIiIgfSksIEFhKHIsIG8pLCBuMChyLCBsIHx8ICJsb25nIiksIFFuKHIsIGwgfHwgImxvbmciLCBBW29dLCBvLCBzLCB0KTsKICAgIH0KICB9Cn0KZnVuY3Rpb24gam4ociwgZSwgYSkgewogIHN3aXRjaCAoZSkgewogICAgY2FzZSAib2JqICI6CiAgICAgIHJldHVybiBTbChyKTsKICAgIGNhc2UgIk9iamMiOgogICAgY2FzZSAiR2xiTyI6CiAgICAgIHJldHVybiBPbihyLCBhKTsKICAgIGNhc2UgIlZsTHMiOiB7CiAgICAgIGZvciAodmFyIEEgPSBMKHIpLCB0ID0gW10sIGkgPSAwOyBpIDwgQTsgaSsrKSB7CiAgICAgICAgdmFyIG4gPSBSMChyKTsKICAgICAgICB0LnB1c2goam4ociwgbiwgYSkpOwogICAgICB9CiAgICAgIHJldHVybiB0OwogICAgfQogICAgY2FzZSAiZG91YiI6CiAgICAgIHJldHVybiBJcihyKTsKICAgIGNhc2UgIlVudEYiOiB7CiAgICAgIHZhciBmID0gUjAociksIHUgPSBJcihyKTsKICAgICAgaWYgKCFiMltmXSkKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdW5pdHM6ICIuY29uY2F0KGYpKTsKICAgICAgcmV0dXJuIHsgdW5pdHM6IGIyW2ZdLCB2YWx1ZTogdSB9OwogICAgfQogICAgY2FzZSAiVW5GbCI6IHsKICAgICAgdmFyIGYgPSBSMChyKSwgdSA9IFJyKHIpOwogICAgICBpZiAoIWIyW2ZdKQogICAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCB1bml0czogIi5jb25jYXQoZikpOwogICAgICByZXR1cm4geyB1bml0czogYjJbZl0sIHZhbHVlOiB1IH07CiAgICB9CiAgICBjYXNlICJURVhUIjoKICAgICAgcmV0dXJuIHowKHIpOwogICAgY2FzZSAiZW51bSI6IHsKICAgICAgdmFyIG8gPSBlYShyKSwgdSA9IGVhKHIpOwogICAgICByZXR1cm4gIiIuY29uY2F0KG8sICIuIikuY29uY2F0KHUpOwogICAgfQogICAgY2FzZSAibG9uZyI6CiAgICAgIHJldHVybiBMKHIpOwogICAgY2FzZSAiY29tcCI6IHsKICAgICAgdmFyIGwgPSBTKHIpLCBzID0gUyhyKTsKICAgICAgcmV0dXJuIHsgbG93OiBsLCBoaWdoOiBzIH07CiAgICB9CiAgICBjYXNlICJib29sIjoKICAgICAgcmV0dXJuICEhTyhyKTsKICAgIGNhc2UgInR5cGUiOgogICAgY2FzZSAiR2xiQyI6CiAgICAgIHJldHVybiB5YShyKTsKICAgIGNhc2UgImFsaXMiOiB7CiAgICAgIHZhciBjID0gTChyKTsKICAgICAgcmV0dXJuIFNlKHIsIGMpOwogICAgfQogICAgY2FzZSAidGR0YSI6IHsKICAgICAgdmFyIGQgPSBMKHIpOwogICAgICByZXR1cm4gWTAociwgZCk7CiAgICB9CiAgICBjYXNlICJPYkFyIjogewogICAgICBMKHIpLCB6MChyKSwgZWEocik7CiAgICAgIGZvciAodmFyIHYgPSBMKHIpLCB0ID0gW10sIGkgPSAwOyBpIDwgdjsgaSsrKSB7CiAgICAgICAgdmFyIGsgPSBlYShyKTsKICAgICAgICBSMChyKSwgUjAocik7CiAgICAgICAgZm9yICh2YXIgRSA9IEwociksIGcgPSBbXSwgdyA9IDA7IHcgPCBFOyB3KyspCiAgICAgICAgICBnLnB1c2goSXIocikpOwogICAgICAgIHQucHVzaCh7IHR5cGU6IGssIHZhbHVlczogZyB9KTsKICAgICAgfQogICAgICByZXR1cm4gdDsKICAgIH0KICAgIGNhc2UgIlB0aCAiOiB7CiAgICAgIEwocik7CiAgICAgIHZhciBCID0gUjAocik7CiAgICAgIEVpKHIpOwogICAgICB2YXIgbSA9IEVpKHIpLCBwID0gUWwociwgbSk7CiAgICAgIHJldHVybiB7IHNpZzogQiwgcGF0aDogcCB9OwogICAgfQogICAgZGVmYXVsdDoKICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIFR5U2ggZGVzY3JpcHRvciBPU1R5cGU6ICIuY29uY2F0KGUsICIgYXQgIikuY29uY2F0KHIub2Zmc2V0LnRvU3RyaW5nKDE2KSkpOwogIH0KfQp2YXIgVmwgPSB7CiAgbWVzaFBvaW50czogInJhdGlvbmFsUG9pbnQiLAogIHF1aWx0U2xpY2VYOiAiVW50RiIsCiAgcXVpbHRTbGljZVk6ICJVbnRGIgp9OwpmdW5jdGlvbiBRbihyLCBlLCBhLCBBLCB0LCBpKSB7CiAgc3dpdGNoIChlKSB7CiAgICBjYXNlICJvYmogIjoKICAgICAgRGwociwgQSwgYSk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAiT2JqYyI6CiAgICBjYXNlICJHbGJPIjogewogICAgICBpZiAodHlwZW9mIGEgIT0gIm9iamVjdCIpCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cnVjdCB2YWx1ZTogIi5jb25jYXQoSlNPTi5zdHJpbmdpZnkoYSksICIsIGtleTogIikuY29uY2F0KEEpKTsKICAgICAgaWYgKCF0KQogICAgICAgIHRocm93IG5ldyBFcnJvcigiTWlzc2luZyBleHQgdHlwZSBmb3I6ICciLmNvbmNhdChBLCAiJyAoIikuY29uY2F0KEpTT04uc3RyaW5naWZ5KGEpLCAiKSIpKTsKICAgICAgdmFyIG4gPSBhLl9uYW1lIHx8IHQubmFtZSwgZiA9IGEuX2NsYXNzSUQgfHwgdC5jbGFzc0lEOwogICAgICBVbihyLCBuLCBmLCBhLCBpKTsKICAgICAgYnJlYWs7CiAgICB9CiAgICBjYXNlICJWbExzIjoKICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGEpKQogICAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsaXN0IHZhbHVlOiAiLmNvbmNhdChKU09OLnN0cmluZ2lmeShhKSwgIiwga2V5OiAiKS5jb25jYXQoQSkpOwogICAgICB0MChyLCBhLmxlbmd0aCk7CiAgICAgIGZvciAodmFyIHUgPSAwOyB1IDwgYS5sZW5ndGg7IHUrKykgewogICAgICAgIHZhciBvID0gWW5bQV07CiAgICAgICAgbjAociwgbyB8fCAibG9uZyIpLCBRbihyLCBvIHx8ICJsb25nIiwgYVt1XSwgIiIuY29uY2F0KEEsICJbXSIpLCBQbltBXSwgaSk7CiAgICAgIH0KICAgICAgYnJlYWs7CiAgICBjYXNlICJkb3ViIjoKICAgICAgaWYgKHR5cGVvZiBhICE9ICJudW1iZXIiKQogICAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBudW1iZXIgdmFsdWU6ICIuY29uY2F0KEpTT04uc3RyaW5naWZ5KGEpLCAiLCBrZXk6ICIpLmNvbmNhdChBKSk7CiAgICAgIEZyKHIsIGEpOwogICAgICBicmVhazsKICAgIGNhc2UgIlVudEYiOgogICAgICBpZiAoISQyW2EudW5pdHNdKQogICAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCB1bml0czogIi5jb25jYXQoYS51bml0cywgIiBpbiAiKS5jb25jYXQoQSkpOwogICAgICBuMChyLCAkMlthLnVuaXRzXSksIEZyKHIsIGEudmFsdWUpOwogICAgICBicmVhazsKICAgIGNhc2UgIlVuRmwiOgogICAgICBpZiAoISQyW2EudW5pdHNdKQogICAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCB1bml0czogIi5jb25jYXQoYS51bml0cywgIiBpbiAiKS5jb25jYXQoQSkpOwogICAgICBuMChyLCAkMlthLnVuaXRzXSksIFZyKHIsIGEudmFsdWUpOwogICAgICBicmVhazsKICAgIGNhc2UgIlRFWFQiOgogICAgICBXYShyLCBhKTsKICAgICAgYnJlYWs7CiAgICBjYXNlICJlbnVtIjogewogICAgICBpZiAodHlwZW9mIGEgIT0gInN0cmluZyIpCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGVudW0gdmFsdWU6ICIuY29uY2F0KEpTT04uc3RyaW5naWZ5KGEpLCAiLCBrZXk6ICIpLmNvbmNhdChBKSk7CiAgICAgIHZhciBsID0gYS5zcGxpdCgiLiIpLCBzID0gbFswXSwgYyA9IGxbMV07CiAgICAgIEFhKHIsIHMpLCBBYShyLCBjKTsKICAgICAgYnJlYWs7CiAgICB9CiAgICBjYXNlICJsb25nIjoKICAgICAgaWYgKHR5cGVvZiBhICE9ICJudW1iZXIiKQogICAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBpbnRlZ2VyIHZhbHVlOiAiLmNvbmNhdChKU09OLnN0cmluZ2lmeShhKSwgIiwga2V5OiAiKS5jb25jYXQoQSkpOwogICAgICB0MChyLCBhKTsKICAgICAgYnJlYWs7CiAgICBjYXNlICJib29sIjoKICAgICAgaWYgKHR5cGVvZiBhICE9ICJib29sZWFuIikKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYm9vbGVhbiB2YWx1ZTogIi5jb25jYXQoSlNPTi5zdHJpbmdpZnkoYSksICIsIGtleTogIikuY29uY2F0KEEpKTsKICAgICAgVChyLCBhID8gMSA6IDApOwogICAgICBicmVhazsKICAgIGNhc2UgInRkdGEiOgogICAgICB0MChyLCBhLmJ5dGVMZW5ndGgpLCBOcihyLCBhKTsKICAgICAgYnJlYWs7CiAgICBjYXNlICJPYkFyIjogewogICAgICB0MChyLCAxNiksIFdhKHIsICIiKTsKICAgICAgdmFyIGQgPSBWbFtBXTsKICAgICAgaWYgKCFkKQogICAgICAgIHRocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIE9iQXJUeXBlIGZvcjogIi5jb25jYXQoQSkpOwogICAgICBBYShyLCBkKSwgdDAociwgYS5sZW5ndGgpOwogICAgICBmb3IgKHZhciB1ID0gMDsgdSA8IGEubGVuZ3RoOyB1KyspIHsKICAgICAgICBBYShyLCBhW3VdLnR5cGUpLCBuMChyLCAiVW5GbCIpLCBuMChyLCAiI1B4bCIpLCB0MChyLCBhW3VdLnZhbHVlcy5sZW5ndGgpOwogICAgICAgIGZvciAodmFyIHYgPSAwOyB2IDwgYVt1XS52YWx1ZXMubGVuZ3RoOyB2KyspCiAgICAgICAgICBGcihyLCBhW3VdLnZhbHVlc1t2XSk7CiAgICAgIH0KICAgICAgYnJlYWs7CiAgICB9CiAgICBjYXNlICJQdGggIjogewogICAgICB2YXIgayA9IDEyICsgYS5wYXRoLmxlbmd0aCAqIDI7CiAgICAgIHQwKHIsIGspLCBuMChyLCBhLnNpZyksIFBpKHIsIGspLCBQaShyLCBhLnBhdGgubGVuZ3RoKSwgVjQociwgYS5wYXRoKTsKICAgICAgYnJlYWs7CiAgICB9CiAgICBkZWZhdWx0OgogICAgICB0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCBkZXNjcmlwdG9yIE9TVHlwZTogIi5jb25jYXQoZSkpOwogIH0KfQpmdW5jdGlvbiBTbChyKSB7CiAgZm9yICh2YXIgZSA9IEwociksIGEgPSBbXSwgQSA9IDA7IEEgPCBlOyBBKyspIHsKICAgIHZhciB0ID0gUjAocik7CiAgICBzd2l0Y2ggKHQpIHsKICAgICAgY2FzZSAicHJvcCI6IHsKICAgICAgICB5YShyKTsKICAgICAgICB2YXIgaSA9IGVhKHIpOwogICAgICAgIGEucHVzaChpKTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBjYXNlICJDbHNzIjoKICAgICAgICBhLnB1c2goeWEocikpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJFbm1yIjogewogICAgICAgIHlhKHIpOwogICAgICAgIHZhciBuID0gZWEociksIGYgPSBlYShyKTsKICAgICAgICBhLnB1c2goIiIuY29uY2F0KG4sICIuIikuY29uY2F0KGYpKTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBjYXNlICJyZWxlIjogewogICAgICAgIHlhKHIpLCBhLnB1c2goUyhyKSk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgY2FzZSAiSWRudCI6CiAgICAgICAgYS5wdXNoKEwocikpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJpbmR4IjoKICAgICAgICBhLnB1c2goTChyKSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIm5hbWUiOiB7CiAgICAgICAgeWEociksIGEucHVzaCh6MChyKSk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgZGVmYXVsdDoKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgZGVzY3JpcHRvciByZWZlcmVuY2UgdHlwZTogIi5jb25jYXQodCkpOwogICAgfQogIH0KICByZXR1cm4gYTsKfQpmdW5jdGlvbiBEbChyLCBlLCBhKSB7CiAgdDAociwgYS5sZW5ndGgpOwogIGZvciAodmFyIEEgPSAwOyBBIDwgYS5sZW5ndGg7IEErKykgewogICAgdmFyIHQgPSBhW0FdLCBpID0gInVua25vd24iOwogICAgc3dpdGNoICh0eXBlb2YgdCA9PSAic3RyaW5nIiAmJiAoL15bYS16IF0rXC5bYS16IF0rJC9pLnRlc3QodCkgPyBpID0gIkVubXIiIDogaSA9ICJuYW1lIiksIG4wKHIsIGkpLCBpKSB7CiAgICAgIGNhc2UgIkVubXIiOiB7CiAgICAgICAgdmFyIG4gPSB0LnNwbGl0KCIuIiksIGYgPSBuWzBdLCB1ID0gblsxXTsKICAgICAgICBLdChyLCAiXDAiLCBmKSwgQWEociwgZiksIEFhKHIsIHUpOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGNhc2UgIm5hbWUiOiB7CiAgICAgICAgS3QociwgIlwwIiwgIkx5ciAiKSwgbXIociwgdCArICJcMCIpOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGRlc2NyaXB0b3IgcmVmZXJlbmNlIHR5cGU6ICIuY29uY2F0KGkpKTsKICAgIH0KICB9CiAgcmV0dXJuIGE7Cn0KZnVuY3Rpb24geWEocikgewogIHZhciBlID0gejAociksIGEgPSBlYShyKTsKICByZXR1cm4geyBuYW1lOiBlLCBjbGFzc0lEOiBhIH07Cn0KZnVuY3Rpb24gS3QociwgZSwgYSkgewogIG1yKHIsIGUpLCBBYShyLCBhKTsKfQpmdW5jdGlvbiBtMChyLCBlKSB7CiAgZSA9PT0gdm9pZCAwICYmIChlID0gITEpOwogIHZhciBhID0gUyhyKTsKICBpZiAoYSAhPT0gMTYpCiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgZGVzY3JpcHRvciB2ZXJzaW9uOiAiLmNvbmNhdChhKSk7CiAgdmFyIEEgPSBPbihyLCBlKTsKICByZXR1cm4gQTsKfQpmdW5jdGlvbiBwMChyLCBlLCBhLCBBLCB0KSB7CiAgdCA9PT0gdm9pZCAwICYmICh0ID0gIiIpLCBVKHIsIDE2KSwgVW4ociwgZSwgYSwgQSwgdCk7Cn0KZnVuY3Rpb24gbTIocikgewogIHJldHVybiB7IHg6IHIuSHJ6biwgeTogci5WcnRjIH07Cn0KZnVuY3Rpb24gcDIocikgewogIHJldHVybiB7IEhyem46IHIueCwgVnJ0Yzogci55IH07Cn0KZnVuY3Rpb24gcXQocikgewogIHJldHVybiB7CiAgICB0b3A6IEYwKHJbIlRvcCAiXSksCiAgICBsZWZ0OiBGMChyLkxlZnQpLAogICAgcmlnaHQ6IEYwKHIuUmdodCksCiAgICBib3R0b206IEYwKHIuQnRvbSkKICB9Owp9CmZ1bmN0aW9uICR0KHIpIHsKICB2YXIgZTsKICByZXR1cm4gZSA9IHsKICAgIExlZnQ6IEQwKHIubGVmdCwgImJvdW5kcy5sZWZ0IikKICB9LCBlWyJUb3AgIl0gPSBEMChyLnRvcCwgImJvdW5kcy50b3AiKSwgZS5SZ2h0ID0gRDAoci5yaWdodCwgImJvdW5kcy5yaWdodCIpLCBlLkJ0b20gPSBEMChyLmJvdHRvbSwgImJvdW5kcy5ib3R0b20iKSwgZTsKfQpmdW5jdGlvbiByaShyKSB7CiAgdmFyIGUgPSB7CiAgICBlbmFibGVkOiAhIXIuZW5hYiwKICAgIHBvc2l0aW9uOiBWZS5kZWNvZGUoci5TdHlsKSwKICAgIGZpbGxUeXBlOiBvMS5kZWNvZGUoci5QbnRUKSwKICAgIGJsZW5kTW9kZTogb3IuZGVjb2RlKHJbIk1kICAiXSksCiAgICBvcGFjaXR5OiBBMChyLk9wY3QpLAogICAgc2l6ZTogRjAoclsiU3ogICJdKQogIH07CiAgcmV0dXJuIHIucHJlc2VudCAhPT0gdm9pZCAwICYmIChlLnByZXNlbnQgPSByLnByZXNlbnQpLCByLnNob3dJbkRpYWxvZyAhPT0gdm9pZCAwICYmIChlLnNob3dJbkRpYWxvZyA9IHIuc2hvd0luRGlhbG9nKSwgci5vdmVycHJpbnQgIT09IHZvaWQgMCAmJiAoZS5vdmVycHJpbnQgPSByLm92ZXJwcmludCksIHJbIkNsciAiXSAmJiAoZS5jb2xvciA9IFNyKHJbIkNsciAiXSkpLCByLkdyYWQgJiYgKGUuZ3JhZGllbnQgPSBLbihyKSksIHIuUHRybiAmJiAoZS5wYXR0ZXJuID0gcW4ocikpLCBlOwp9CmZ1bmN0aW9uIGFpKHIpIHsKICB2YXIgZSA9IHt9OwogIHJldHVybiBlLmVuYWIgPSAhIXIuZW5hYmxlZCwgci5wcmVzZW50ICE9PSB2b2lkIDAgJiYgKGUucHJlc2VudCA9ICEhci5wcmVzZW50KSwgci5zaG93SW5EaWFsb2cgIT09IHZvaWQgMCAmJiAoZS5zaG93SW5EaWFsb2cgPSAhIXIuc2hvd0luRGlhbG9nKSwgZS5TdHlsID0gVmUuZW5jb2RlKHIucG9zaXRpb24pLCBlLlBudFQgPSBvMS5lbmNvZGUoci5maWxsVHlwZSksIGVbIk1kICAiXSA9IG9yLmVuY29kZShyLmJsZW5kTW9kZSksIGUuT3BjdCA9ICQwKHIub3BhY2l0eSksIGVbIlN6ICAiXSA9IEQwKHIuc2l6ZSwgInNpemUiKSwgci5jb2xvciAmJiAoZVsiQ2xyICJdID0gRHIoci5jb2xvcikpLCByLmdyYWRpZW50ICYmIChlID0gYWEoYWEoe30sIGUpLCAkbihyLmdyYWRpZW50KSkpLCByLnBhdHRlcm4gJiYgKGUgPSBhYShhYSh7fSwgZSksIHIxKHIucGF0dGVybikpKSwgci5vdmVycHJpbnQgIT09IHZvaWQgMCAmJiAoZS5vdmVycHJpbnQgPSAhIXIub3ZlcnByaW50KSwgZTsKfQpmdW5jdGlvbiBWMihyLCBlLCBhKSB7CiAgZm9yICh2YXIgQSwgdCwgaSwgbiA9IGEgPyB7CiAgICAiU2NsICI6IEVyKChBID0gci5zY2FsZSkgIT09IG51bGwgJiYgQSAhPT0gdm9pZCAwID8gQSA6IDEpLAogICAgbWFzdGVyRlhTd2l0Y2g6ICFyLmRpc2FibGVkCiAgfSA6IHsKICAgIG1hc3RlckZYU3dpdGNoOiAhci5kaXNhYmxlZCwKICAgICJTY2wgIjogRXIoKHQgPSByLnNjYWxlKSAhPT0gbnVsbCAmJiB0ICE9PSB2b2lkIDAgPyB0IDogMSkKICB9LCBmID0gWyJkcm9wU2hhZG93IiwgImlubmVyU2hhZG93IiwgInNvbGlkRmlsbCIsICJncmFkaWVudE92ZXJsYXkiLCAic3Ryb2tlIl0sIHUgPSAwLCBvID0gZjsgdSA8IG8ubGVuZ3RoOyB1KyspIHsKICAgIHZhciBsID0gb1t1XTsKICAgIGlmIChyW2xdICYmICFBcnJheS5pc0FycmF5KHJbbF0pKQogICAgICB0aHJvdyBuZXcgRXJyb3IoIiIuY29uY2F0KGwsICIgc2hvdWxkIGJlIGFuIGFycmF5IikpOwogIH0KICB2YXIgcyA9IGZ1bmN0aW9uKEIpIHsKICAgIHJldHVybiAhIUIgJiYgQi5sZW5ndGggPiAxICYmIGE7CiAgfSwgYyA9IGZ1bmN0aW9uKEIpIHsKICAgIHJldHVybiAhIUIgJiYgQi5sZW5ndGggPj0gMSAmJiAoIWEgfHwgQi5sZW5ndGggPT09IDEpOwogIH07CiAgaWYgKGMoci5kcm9wU2hhZG93KSAmJiAobi5EclNoID0gZHIoci5kcm9wU2hhZG93WzBdLCAiZHJvcFNoYWRvdyIsIGUpKSwgcyhyLmRyb3BTaGFkb3cpICYmIChuLmRyb3BTaGFkb3dNdWx0aSA9IHIuZHJvcFNoYWRvdy5tYXAoZnVuY3Rpb24oQikgewogICAgcmV0dXJuIGRyKEIsICJkcm9wU2hhZG93IiwgZSk7CiAgfSkpLCBjKHIuaW5uZXJTaGFkb3cpICYmIChuLklyU2ggPSBkcihyLmlubmVyU2hhZG93WzBdLCAiaW5uZXJTaGFkb3ciLCBlKSksIHMoci5pbm5lclNoYWRvdykgJiYgKG4uaW5uZXJTaGFkb3dNdWx0aSA9IHIuaW5uZXJTaGFkb3cubWFwKGZ1bmN0aW9uKEIpIHsKICAgIHJldHVybiBkcihCLCAiaW5uZXJTaGFkb3ciLCBlKTsKICB9KSksIHIub3V0ZXJHbG93ICYmIChuLk9yR2wgPSBkcihyLm91dGVyR2xvdywgIm91dGVyR2xvdyIsIGUpKSwgcyhyLnNvbGlkRmlsbCkgJiYgKG4uc29saWRGaWxsTXVsdGkgPSByLnNvbGlkRmlsbC5tYXAoZnVuY3Rpb24oQikgewogICAgcmV0dXJuIGRyKEIsICJzb2xpZEZpbGwiLCBlKTsKICB9KSksIHMoci5ncmFkaWVudE92ZXJsYXkpICYmIChuLmdyYWRpZW50RmlsbE11bHRpID0gci5ncmFkaWVudE92ZXJsYXkubWFwKGZ1bmN0aW9uKEIpIHsKICAgIHJldHVybiBkcihCLCAiZ3JhZGllbnRPdmVybGF5IiwgZSk7CiAgfSkpLCBzKHIuc3Ryb2tlKSAmJiAobi5mcmFtZUZYTXVsdGkgPSByLnN0cm9rZS5tYXAoZnVuY3Rpb24oQikgewogICAgcmV0dXJuIGFpKEIpOwogIH0pKSwgci5pbm5lckdsb3cgJiYgKG4uSXJHbCA9IGRyKHIuaW5uZXJHbG93LCAiaW5uZXJHbG93IiwgZSkpLCByLmJldmVsICYmIChuLmViYmwgPSBkcihyLmJldmVsLCAiYmV2ZWwiLCBlKSksIGMoci5zb2xpZEZpbGwpICYmIChuLlNvRmkgPSBkcihyLnNvbGlkRmlsbFswXSwgInNvbGlkRmlsbCIsIGUpKSwgci5wYXR0ZXJuT3ZlcmxheSAmJiAobi5wYXR0ZXJuRmlsbCA9IGRyKHIucGF0dGVybk92ZXJsYXksICJwYXR0ZXJuT3ZlcmxheSIsIGUpKSwgYyhyLmdyYWRpZW50T3ZlcmxheSkgJiYgKG4uR3JGbCA9IGRyKHIuZ3JhZGllbnRPdmVybGF5WzBdLCAiZ3JhZGllbnRPdmVybGF5IiwgZSkpLCByLnNhdGluICYmIChuLkNoRlggPSBkcihyLnNhdGluLCAic2F0aW4iLCBlKSksIGMoci5zdHJva2UpICYmIChuLkZyRlggPSBhaSgoaSA9IHIuc3Ryb2tlKSA9PT0gbnVsbCB8fCBpID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpWzBdKSksIGEpIHsKICAgIG4ubnVtTW9kaWZ5aW5nRlggPSAwOwogICAgZm9yICh2YXIgZCA9IDAsIHYgPSBPYmplY3Qua2V5cyhyKTsgZCA8IHYubGVuZ3RoOyBkKyspIHsKICAgICAgdmFyIGwgPSB2W2RdLCBrID0gcltsXTsKICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaykpCiAgICAgICAgZm9yICh2YXIgRSA9IDAsIGcgPSBrOyBFIDwgZy5sZW5ndGg7IEUrKykgewogICAgICAgICAgdmFyIHcgPSBnW0VdOwogICAgICAgICAgdy5lbmFibGVkICYmIG4ubnVtTW9kaWZ5aW5nRlgrKzsKICAgICAgICB9CiAgICAgIGVsc2Ugay5lbmFibGVkICYmIG4ubnVtTW9kaWZ5aW5nRlgrKzsKICAgIH0KICB9CiAgcmV0dXJuIG47Cn0KZnVuY3Rpb24gUzIociwgZSkgewogIHZhciBhID0ge30sIEEgPSByLm1hc3RlckZYU3dpdGNoLCB0ID0gci5EclNoLCBpID0gci5kcm9wU2hhZG93TXVsdGksIG4gPSByLklyU2gsIGYgPSByLmlubmVyU2hhZG93TXVsdGksIHUgPSByLk9yR2wsIG8gPSByLklyR2wsIGwgPSByLmViYmwsIHMgPSByLlNvRmksIGMgPSByLnNvbGlkRmlsbE11bHRpLCBkID0gci5wYXR0ZXJuRmlsbCwgdiA9IHIuR3JGbCwgayA9IHIuZ3JhZGllbnRGaWxsTXVsdGksIEUgPSByLkNoRlgsIGcgPSByLkZyRlgsIHcgPSByLmZyYW1lRlhNdWx0aTsKICByLm51bU1vZGlmeWluZ0ZYOwogIHZhciBCID0gX2wociwgWyJtYXN0ZXJGWFN3aXRjaCIsICJEclNoIiwgImRyb3BTaGFkb3dNdWx0aSIsICJJclNoIiwgImlubmVyU2hhZG93TXVsdGkiLCAiT3JHbCIsICJJckdsIiwgImViYmwiLCAiU29GaSIsICJzb2xpZEZpbGxNdWx0aSIsICJwYXR0ZXJuRmlsbCIsICJHckZsIiwgImdyYWRpZW50RmlsbE11bHRpIiwgIkNoRlgiLCAiRnJGWCIsICJmcmFtZUZYTXVsdGkiLCAibnVtTW9kaWZ5aW5nRlgiXSk7CiAgcmV0dXJuIEEgfHwgKGEuZGlzYWJsZWQgPSAhMCksIHJbIlNjbCAiXSAmJiAoYS5zY2FsZSA9IEEwKHJbIlNjbCAiXSkpLCB0ICYmIChhLmRyb3BTaGFkb3cgPSBbYnIodCwgZSldKSwgaSAmJiAoYS5kcm9wU2hhZG93ID0gaS5tYXAoZnVuY3Rpb24obSkgewogICAgcmV0dXJuIGJyKG0sIGUpOwogIH0pKSwgbiAmJiAoYS5pbm5lclNoYWRvdyA9IFticihuLCBlKV0pLCBmICYmIChhLmlubmVyU2hhZG93ID0gZi5tYXAoZnVuY3Rpb24obSkgewogICAgcmV0dXJuIGJyKG0sIGUpOwogIH0pKSwgdSAmJiAoYS5vdXRlckdsb3cgPSBicih1LCBlKSksIG8gJiYgKGEuaW5uZXJHbG93ID0gYnIobywgZSkpLCBsICYmIChhLmJldmVsID0gYnIobCwgZSkpLCBzICYmIChhLnNvbGlkRmlsbCA9IFticihzLCBlKV0pLCBjICYmIChhLnNvbGlkRmlsbCA9IGMubWFwKGZ1bmN0aW9uKG0pIHsKICAgIHJldHVybiBicihtLCBlKTsKICB9KSksIGQgJiYgKGEucGF0dGVybk92ZXJsYXkgPSBicihkLCBlKSksIHYgJiYgKGEuZ3JhZGllbnRPdmVybGF5ID0gW2JyKHYsIGUpXSksIGsgJiYgKGEuZ3JhZGllbnRPdmVybGF5ID0gay5tYXAoZnVuY3Rpb24obSkgewogICAgcmV0dXJuIGJyKG0sIGUpOwogIH0pKSwgRSAmJiAoYS5zYXRpbiA9IGJyKEUsIGUpKSwgZyAmJiAoYS5zdHJva2UgPSBbcmkoZyldKSwgdyAmJiAoYS5zdHJva2UgPSB3Lm1hcChmdW5jdGlvbihtKSB7CiAgICByZXR1cm4gcmkobSk7CiAgfSkpLCBlICYmIE9iamVjdC5rZXlzKEIpLmxlbmd0aCA+IDEgJiYgY29uc29sZS5sb2coIlVuaGFuZGxlZCBlZmZlY3Qga2V5czoiLCBCKSwgYTsKfQpmdW5jdGlvbiBlaShyLCBlKSB7CiAgZm9yICh2YXIgYSA9IFtdLCBBID0gMDsgQSA8IHIubGVuZ3RoOyBBKyspIHsKICAgIHZhciB0ID0gcltBXSwgaSA9IHQudGltZSwgbiA9IGkuZGVub21pbmF0b3IsIGYgPSBpLm51bWVyYXRvciwgdSA9IHQuc2VsZWN0ZWQsIG8gPSB0LmFuaW1LZXksIGwgPSB7IG51bWVyYXRvcjogZiwgZGVub21pbmF0b3I6IG4gfSwgcyA9IG4xLmRlY29kZSh0LmFuaW1JbnRlcnBTdHlsZSk7CiAgICBzd2l0Y2ggKG8uVHlwZSkgewogICAgICBjYXNlICJrZXlUeXBlLk9wY3QiOgogICAgICAgIGEucHVzaCh7IGludGVycG9sYXRpb246IHMsIHRpbWU6IGwsIHNlbGVjdGVkOiB1LCB0eXBlOiAib3BhY2l0eSIsIHZhbHVlOiBBMChvLk9wY3QpIH0pOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJrZXlUeXBlLlBzdG4iOgogICAgICAgIGEucHVzaCh7IGludGVycG9sYXRpb246IHMsIHRpbWU6IGwsIHNlbGVjdGVkOiB1LCB0eXBlOiAicG9zaXRpb24iLCB4OiBvLkhyem4sIHk6IG8uVnJ0YyB9KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAia2V5VHlwZS5Ucm5mIjoKICAgICAgICBhLnB1c2goewogICAgICAgICAgaW50ZXJwb2xhdGlvbjogcywKICAgICAgICAgIHRpbWU6IGwsCiAgICAgICAgICBzZWxlY3RlZDogdSwKICAgICAgICAgIHR5cGU6ICJ0cmFuc2Zvcm0iLAogICAgICAgICAgc2NhbGU6IG0yKG9bIlNjbCAiXSksCiAgICAgICAgICBza2V3OiBtMihvLlNrZXcpLAogICAgICAgICAgcm90YXRpb246IG8ucm90YXRpb24sCiAgICAgICAgICB0cmFuc2xhdGlvbjogbTIoby50cmFuc2xhdGlvbikKICAgICAgICB9KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAia2V5VHlwZS5zaGVldFN0eWxlIjogewogICAgICAgIHZhciBjID0geyBpbnRlcnBvbGF0aW9uOiBzLCB0aW1lOiBsLCBzZWxlY3RlZDogdSwgdHlwZTogInN0eWxlIiB9OwogICAgICAgIG8uc2hlZXRTdHlsZS5MZWZ4ICYmIChjLnN0eWxlID0gUzIoby5zaGVldFN0eWxlLkxlZngsIGUpKSwgYS5wdXNoKGMpOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGNhc2UgImtleVR5cGUuZ2xvYmFsTGlnaHRpbmciOiB7CiAgICAgICAgYS5wdXNoKHsKICAgICAgICAgIGludGVycG9sYXRpb246IHMsCiAgICAgICAgICB0aW1lOiBsLAogICAgICAgICAgc2VsZWN0ZWQ6IHUsCiAgICAgICAgICB0eXBlOiAiZ2xvYmFsTGlnaHRpbmciLAogICAgICAgICAgZ2xvYmFsQW5nbGU6IG8uZ2JsQSwKICAgICAgICAgIGdsb2JhbEFsdGl0dWRlOiBvLmdsb2JhbEFsdGl0dWRlCiAgICAgICAgfSk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgZGVmYXVsdDoKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGtleVR5cGUgdmFsdWUiKTsKICAgIH0KICB9CiAgcmV0dXJuIGE7Cn0KZnVuY3Rpb24gQWkocikgewogIGZvciAodmFyIGUgPSBbXSwgYSA9IDA7IGEgPCByLmxlbmd0aDsgYSsrKSB7CiAgICB2YXIgQSA9IHJbYV0sIHQgPSBBLnRpbWUsIGkgPSBBLnNlbGVjdGVkLCBuID0gaSA9PT0gdm9pZCAwID8gITEgOiBpLCBmID0gQS5pbnRlcnBvbGF0aW9uLCB1ID0gbjEuZW5jb2RlKGYpLCBvID0gdm9pZCAwOwogICAgc3dpdGNoIChBLnR5cGUpIHsKICAgICAgY2FzZSAib3BhY2l0eSI6CiAgICAgICAgbyA9IHsgVHlwZTogImtleVR5cGUuT3BjdCIsIE9wY3Q6ICQwKEEudmFsdWUpIH07CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgInBvc2l0aW9uIjoKICAgICAgICBvID0geyBUeXBlOiAia2V5VHlwZS5Qc3RuIiwgSHJ6bjogQS54LCBWcnRjOiBBLnkgfTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAidHJhbnNmb3JtIjoKICAgICAgICBvID0geyBUeXBlOiAia2V5VHlwZS5Ucm5mIiwgIlNjbCAiOiBwMihBLnNjYWxlKSwgU2tldzogcDIoQS5za2V3KSwgcm90YXRpb246IEEucm90YXRpb24sIHRyYW5zbGF0aW9uOiBwMihBLnRyYW5zbGF0aW9uKSB9OwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJzdHlsZSI6CiAgICAgICAgbyA9IHsgVHlwZTogImtleVR5cGUuc2hlZXRTdHlsZSIsIHNoZWV0U3R5bGU6IHsgVnJzbjogMSwgYmxlbmRPcHRpb25zOiB7fSB9IH0sIEEuc3R5bGUgJiYgKG8uc2hlZXRTdHlsZSA9IHsgVnJzbjogMSwgTGVmeDogVjIoQS5zdHlsZSwgITEsICExKSwgYmxlbmRPcHRpb25zOiB7fSB9KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiZ2xvYmFsTGlnaHRpbmciOiB7CiAgICAgICAgbyA9IHsgVHlwZTogImtleVR5cGUuZ2xvYmFsTGlnaHRpbmciLCBnYmxBOiBBLmdsb2JhbEFuZ2xlLCBnbG9iYWxBbHRpdHVkZTogQS5nbG9iYWxBbHRpdHVkZSB9OwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBrZXlUeXBlIHZhbHVlIik7CiAgICB9CiAgICBlLnB1c2goeyBWcnNuOiAxLCBhbmltSW50ZXJwU3R5bGU6IHUsIHRpbWU6IHQsIGFuaW1LZXk6IG8sIHNlbGVjdGVkOiBuIH0pOwogIH0KICByZXR1cm4gZTsKfQpmdW5jdGlvbiBKbihyLCBlKSB7CiAgZm9yICh2YXIgYSA9IFtdLCBBID0gMDsgQSA8IHIubGVuZ3RoOyBBKyspIHsKICAgIHZhciB0ID0gcltBXSwgaSA9IHsKICAgICAgdHlwZTogZjEuZGVjb2RlKHQudHJhY2tJRCksCiAgICAgIGVuYWJsZWQ6IHQuZW5hYiwKICAgICAga2V5czogZWkodC5rZXlMaXN0LCBlKQogICAgfTsKICAgIHQuZWZmZWN0UGFyYW1zICYmIChpLmVmZmVjdFBhcmFtcyA9IHsKICAgICAgZmlsbENhbnZhczogdC5lZmZlY3RQYXJhbXMuZmlsbENhbnZhcywKICAgICAgem9vbU9yaWdpbjogdC5lZmZlY3RQYXJhbXMuem9vbU9yaWdpbiwKICAgICAga2V5czogZWkodC5lZmZlY3RQYXJhbXMua2V5TGlzdCwgZSkKICAgIH0pLCBhLnB1c2goaSk7CiAgfQogIHJldHVybiBhOwp9CmZ1bmN0aW9uIEhuKHIpIHsKICBmb3IgKHZhciBlID0gW10sIGEgPSAwOyBhIDwgci5sZW5ndGg7IGErKykgewogICAgdmFyIEEgPSByW2FdOwogICAgZS5wdXNoKGFhKGFhKHsgdHJhY2tJRDogZjEuZW5jb2RlKEEudHlwZSksIFZyc246IDEsIGVuYWI6ICEhQS5lbmFibGVkLCBFZmZjOiAhIUEuZWZmZWN0UGFyYW1zIH0sIEEuZWZmZWN0UGFyYW1zID8gewogICAgICBlZmZlY3RQYXJhbXM6IHsKICAgICAgICBrZXlMaXN0OiBBaShBLmtleXMpLAogICAgICAgIGZpbGxDYW52YXM6IEEuZWZmZWN0UGFyYW1zLmZpbGxDYW52YXMsCiAgICAgICAgem9vbU9yaWdpbjogQS5lZmZlY3RQYXJhbXMuem9vbU9yaWdpbgogICAgICB9CiAgICB9IDoge30pLCB7IGtleUxpc3Q6IEFpKEEua2V5cykgfSkpOwogIH0KICByZXR1cm4gZTsKfQpmdW5jdGlvbiBicihyLCBlKSB7CiAgZm9yICh2YXIgYSA9IHt9LCBBID0gMCwgdCA9IE9iamVjdC5rZXlzKHIpOyBBIDwgdC5sZW5ndGg7IEErKykgewogICAgdmFyIGkgPSB0W0FdLCBuID0gcltpXTsKICAgIHN3aXRjaCAoaSkgewogICAgICBjYXNlICJlbmFiIjoKICAgICAgICBhLmVuYWJsZWQgPSAhIW47CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgInVnbGciOgogICAgICAgIGEudXNlR2xvYmFsTGlnaHQgPSAhIW47CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIkFudEEiOgogICAgICAgIGEuYW50aWFsaWFzZWQgPSAhIW47CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIkFsZ24iOgogICAgICAgIGEuYWxpZ24gPSAhIW47CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIkR0aHIiOgogICAgICAgIGEuZGl0aGVyID0gISFuOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJJbnZyIjoKICAgICAgICBhLmludmVydCA9ICEhbjsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiUnZycyI6CiAgICAgICAgYS5yZXZlcnNlID0gISFuOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJDbHIgIjoKICAgICAgICBhLmNvbG9yID0gU3Iobik7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgImhnbEMiOgogICAgICAgIGEuaGlnaGxpZ2h0Q29sb3IgPSBTcihuKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAic2R3QyI6CiAgICAgICAgYS5zaGFkb3dDb2xvciA9IFNyKG4pOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJTdHlsIjoKICAgICAgICBhLnBvc2l0aW9uID0gVmUuZGVjb2RlKG4pOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJNZCAgIjoKICAgICAgICBhLmJsZW5kTW9kZSA9IG9yLmRlY29kZShuKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiaGdsTSI6CiAgICAgICAgYS5oaWdobGlnaHRCbGVuZE1vZGUgPSBvci5kZWNvZGUobik7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgInNkd00iOgogICAgICAgIGEuc2hhZG93QmxlbmRNb2RlID0gb3IuZGVjb2RlKG4pOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJidmxTIjoKICAgICAgICBhLnN0eWxlID0gYTEuZGVjb2RlKG4pOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJidmxEIjoKICAgICAgICBhLmRpcmVjdGlvbiA9IEExLmRlY29kZShuKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiYnZsVCI6CiAgICAgICAgYS50ZWNobmlxdWUgPSBlMS5kZWNvZGUobik7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIkdsd1QiOgogICAgICAgIGEudGVjaG5pcXVlID0gdDEuZGVjb2RlKG4pOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJnbHdTIjoKICAgICAgICBhLnNvdXJjZSA9IGkxLmRlY29kZShuKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiVHlwZSI6CiAgICAgICAgYS50eXBlID0gUmUuZGVjb2RlKG4pOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJnczk5IjoKICAgICAgICBhLmludGVycG9sYXRpb25NZXRob2QgPSBMYS5kZWNvZGUobik7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIk9wY3QiOgogICAgICAgIGEub3BhY2l0eSA9IEEwKG4pOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJoZ2xPIjoKICAgICAgICBhLmhpZ2hsaWdodE9wYWNpdHkgPSBBMChuKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAic2R3TyI6CiAgICAgICAgYS5zaGFkb3dPcGFjaXR5ID0gQTAobik7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgImxhZ2wiOgogICAgICAgIGEuYW5nbGUgPSBsYShuKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiQW5nbCI6CiAgICAgICAgYS5hbmdsZSA9IGxhKG4pOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJMYWxkIjoKICAgICAgICBhLmFsdGl0dWRlID0gbGEobik7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIlNmdG4iOgogICAgICAgIGEuc29mdGVuID0gRjAobik7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgInNyZ1IiOgogICAgICAgIGEuc3RyZW5ndGggPSBBMChuKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiYmx1ciI6CiAgICAgICAgYS5zaXplID0gRjAobik7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIk5vc2UiOgogICAgICAgIGEubm9pc2UgPSBBMChuKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiSW5wciI6CiAgICAgICAgYS5yYW5nZSA9IEEwKG4pOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJDa210IjoKICAgICAgICBhLmNob2tlID0gRjAobik7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIlNoZE4iOgogICAgICAgIGEuaml0dGVyID0gQTAobik7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIkRzdG4iOgogICAgICAgIGEuZGlzdGFuY2UgPSBGMChuKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiU2NsICI6CiAgICAgICAgYS5zY2FsZSA9IEEwKG4pOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJQdHJuIjoKICAgICAgICBhLnBhdHRlcm4gPSB7IG5hbWU6IG5bIk5tICAiXSwgaWQ6IG4uSWRudCB9OwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJwaGFzZSI6CiAgICAgICAgYS5waGFzZSA9IHsgeDogbi5IcnpuLCB5OiBuLlZydGMgfTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiT2ZzdCI6CiAgICAgICAgYS5vZmZzZXQgPSB7IHg6IEEwKG4uSHJ6biksIHk6IEEwKG4uVnJ0YykgfTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiTXBnUyI6CiAgICAgIGNhc2UgIlRyblMiOgogICAgICAgIGEuY29udG91ciA9IHsKICAgICAgICAgIG5hbWU6IG5bIk5tICAiXSwKICAgICAgICAgIGN1cnZlOiBuWyJDcnYgIl0ubWFwKGZ1bmN0aW9uKGYpIHsKICAgICAgICAgICAgcmV0dXJuIHsgeDogZi5IcnpuLCB5OiBmLlZydGMgfTsKICAgICAgICAgIH0pCiAgICAgICAgfTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiR3JhZCI6CiAgICAgICAgYS5ncmFkaWVudCA9IHpuKG4pOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJ1c2VUZXh0dXJlIjoKICAgICAgY2FzZSAidXNlU2hhcGUiOgogICAgICBjYXNlICJsYXllckNvbmNlYWxzIjoKICAgICAgY2FzZSAicHJlc2VudCI6CiAgICAgIGNhc2UgInNob3dJbkRpYWxvZyI6CiAgICAgIGNhc2UgImFudGlhbGlhc0dsb3NzIjoKICAgICAgICBhW2ldID0gbjsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiX25hbWUiOgogICAgICBjYXNlICJfY2xhc3NJRCI6CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgZSAmJiBjb25zb2xlLmxvZygiSW52YWxpZCBlZmZlY3Qga2V5OiAnIi5jb25jYXQoaSwgIicsIHZhbHVlOiIpLCBuKTsKICAgIH0KICB9CiAgcmV0dXJuIGE7Cn0KZnVuY3Rpb24gZHIociwgZSwgYSkgewogIHZhciBBID0gewogICAgZW5hYjogITEKICB9OwogIGUgPT09ICJkcm9wU2hhZG93IiAmJiAoQS5Ucm5TID0geyAiTm0gICI6ICIiLCAiQ3J2ICI6IFtdIH0pOwogIGZvciAodmFyIHQgPSAwLCBpID0gT2JqZWN0LmtleXMocik7IHQgPCBpLmxlbmd0aDsgdCsrKSB7CiAgICB2YXIgbiA9IGlbdF0sIGYgPSBuLCB1ID0gcltmXTsKICAgIHN3aXRjaCAoZikgewogICAgICBjYXNlICJlbmFibGVkIjoKICAgICAgICBBLmVuYWIgPSAhIXU7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgInVzZUdsb2JhbExpZ2h0IjoKICAgICAgICBBLnVnbGcgPSAhIXU7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgImFudGlhbGlhc2VkIjoKICAgICAgICBBLkFudEEgPSAhIXU7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgImFsaWduIjoKICAgICAgICBBLkFsZ24gPSAhIXU7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgImRpdGhlciI6CiAgICAgICAgQS5EdGhyID0gISF1OwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJpbnZlcnQiOgogICAgICAgIEEuSW52ciA9ICEhdTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAicmV2ZXJzZSI6CiAgICAgICAgQS5SdnJzID0gISF1OwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJjb2xvciI6CiAgICAgICAgQVsiQ2xyICJdID0gRHIodSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgImhpZ2hsaWdodENvbG9yIjoKICAgICAgICBBLmhnbEMgPSBEcih1KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAic2hhZG93Q29sb3IiOgogICAgICAgIEEuc2R3QyA9IERyKHUpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJwb3NpdGlvbiI6CiAgICAgICAgQS5TdHlsID0gVmUuZW5jb2RlKHUpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJibGVuZE1vZGUiOgogICAgICAgIEFbIk1kICAiXSA9IG9yLmVuY29kZSh1KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiaGlnaGxpZ2h0QmxlbmRNb2RlIjoKICAgICAgICBBLmhnbE0gPSBvci5lbmNvZGUodSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgInNoYWRvd0JsZW5kTW9kZSI6CiAgICAgICAgQS5zZHdNID0gb3IuZW5jb2RlKHUpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJzdHlsZSI6CiAgICAgICAgQS5idmxTID0gYTEuZW5jb2RlKHUpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJkaXJlY3Rpb24iOgogICAgICAgIEEuYnZsRCA9IEExLmVuY29kZSh1KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAidGVjaG5pcXVlIjoKICAgICAgICBlID09PSAiYmV2ZWwiID8gQS5idmxUID0gZTEuZW5jb2RlKHUpIDogQS5HbHdUID0gdDEuZW5jb2RlKHUpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJzb3VyY2UiOgogICAgICAgIEEuZ2x3UyA9IGkxLmVuY29kZSh1KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAidHlwZSI6CiAgICAgICAgQS5UeXBlID0gUmUuZW5jb2RlKHUpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJpbnRlcnBvbGF0aW9uTWV0aG9kIjoKICAgICAgICBBLmdzOTkgPSBMYS5lbmNvZGUodSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIm9wYWNpdHkiOgogICAgICAgIEEuT3BjdCA9ICQwKHUpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJoaWdobGlnaHRPcGFjaXR5IjoKICAgICAgICBBLmhnbE8gPSAkMCh1KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAic2hhZG93T3BhY2l0eSI6CiAgICAgICAgQS5zZHdPID0gJDAodSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgImFuZ2xlIjoKICAgICAgICBlID09PSAiZ3JhZGllbnRPdmVybGF5IiB8fCBlID09PSAicGF0dGVybkZpbGwiID8gQS5BbmdsID0gdzIodSkgOiBBLmxhZ2wgPSB3Mih1KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiYWx0aXR1ZGUiOgogICAgICAgIEEuTGFsZCA9IHcyKHUpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJzb2Z0ZW4iOgogICAgICAgIEEuU2Z0biA9IEQwKHUsIGYpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJzdHJlbmd0aCI6CiAgICAgICAgQS5zcmdSID0gJDAodSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgInNpemUiOgogICAgICAgIEEuYmx1ciA9IEQwKHUsIGYpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJub2lzZSI6CiAgICAgICAgQS5Ob3NlID0gJDAodSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgInJhbmdlIjoKICAgICAgICBBLklucHIgPSAkMCh1KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiY2hva2UiOgogICAgICAgIEEuQ2ttdCA9IEQwKHUsIGYpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJqaXR0ZXIiOgogICAgICAgIEEuU2hkTiA9ICQwKHUpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJkaXN0YW5jZSI6CiAgICAgICAgQS5Ec3RuID0gRDAodSwgZik7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgInNjYWxlIjoKICAgICAgICBBWyJTY2wgIl0gPSAkMCh1KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAicGF0dGVybiI6CiAgICAgICAgQS5QdHJuID0geyAiTm0gICI6IHUubmFtZSwgSWRudDogdS5pZCB9OwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJwaGFzZSI6CiAgICAgICAgQS5waGFzZSA9IHsgSHJ6bjogdS54LCBWcnRjOiB1LnkgfTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAib2Zmc2V0IjoKICAgICAgICBBLk9mc3QgPSB7IEhyem46ICQwKHUueCksIFZydGM6ICQwKHUueSkgfTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiY29udG91ciI6IHsKICAgICAgICBBW2UgPT09ICJzYXRpbiIgPyAiTXBnUyIgOiAiVHJuUyJdID0gewogICAgICAgICAgIk5tICAiOiB1Lm5hbWUsCiAgICAgICAgICAiQ3J2ICI6IHUuY3VydmUubWFwKGZ1bmN0aW9uKG8pIHsKICAgICAgICAgICAgcmV0dXJuIHsgSHJ6bjogby54LCBWcnRjOiBvLnkgfTsKICAgICAgICAgIH0pCiAgICAgICAgfTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBjYXNlICJncmFkaWVudCI6CiAgICAgICAgQS5HcmFkID0gTG4odSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgInVzZVRleHR1cmUiOgogICAgICBjYXNlICJ1c2VTaGFwZSI6CiAgICAgIGNhc2UgImxheWVyQ29uY2VhbHMiOgogICAgICBjYXNlICJwcmVzZW50IjoKICAgICAgY2FzZSAic2hvd0luRGlhbG9nIjoKICAgICAgY2FzZSAiYW50aWFsaWFzR2xvc3MiOgogICAgICAgIEFbZl0gPSB1OwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIGEgJiYgY29uc29sZS5sb2coIkludmFsaWQgZWZmZWN0IGtleTogJyIuY29uY2F0KGYsICInLCB2YWx1ZToiKSwgdSk7CiAgICB9CiAgfQogIHJldHVybiBBOwp9CmZ1bmN0aW9uIHpuKHIpIHsKICBpZiAoci5HcmRGID09PSAiR3JkRi5Dc3RTIikgewogICAgdmFyIGUgPSByLkludHIgfHwgNDA5NjsKICAgIHJldHVybiB7CiAgICAgIHR5cGU6ICJzb2xpZCIsCiAgICAgIG5hbWU6IHJbIk5tICAiXSwKICAgICAgc21vb3RobmVzczogci5JbnRyIC8gNDA5NiwKICAgICAgY29sb3JTdG9wczogci5DbHJzLm1hcChmdW5jdGlvbihhKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGNvbG9yOiBTcihhWyJDbHIgIl0pLAogICAgICAgICAgbG9jYXRpb246IGEuTGN0biAvIGUsCiAgICAgICAgICBtaWRwb2ludDogYS5NZHBuIC8gMTAwCiAgICAgICAgfTsKICAgICAgfSksCiAgICAgIG9wYWNpdHlTdG9wczogci5Ucm5zLm1hcChmdW5jdGlvbihhKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIG9wYWNpdHk6IEEwKGEuT3BjdCksCiAgICAgICAgICBsb2NhdGlvbjogYS5MY3RuIC8gZSwKICAgICAgICAgIG1pZHBvaW50OiBhLk1kcG4gLyAxMDAKICAgICAgICB9OwogICAgICB9KQogICAgfTsKICB9IGVsc2UKICAgIHJldHVybiB7CiAgICAgIHR5cGU6ICJub2lzZSIsCiAgICAgIG5hbWU6IHJbIk5tICAiXSwKICAgICAgcm91Z2huZXNzOiByLlNtdGggLyA0MDk2LAogICAgICBjb2xvck1vZGVsOiB3ZS5kZWNvZGUoci5DbHJTKSwKICAgICAgcmFuZG9tU2VlZDogci5SbmRTLAogICAgICByZXN0cmljdENvbG9yczogISFyLlZjdEMsCiAgICAgIGFkZFRyYW5zcGFyZW5jeTogISFyLlNoVHIsCiAgICAgIG1pbjogclsiTW5tICJdLm1hcChmdW5jdGlvbihhKSB7CiAgICAgICAgcmV0dXJuIGEgLyAxMDA7CiAgICAgIH0pLAogICAgICBtYXg6IHJbIk14bSAiXS5tYXAoZnVuY3Rpb24oYSkgewogICAgICAgIHJldHVybiBhIC8gMTAwOwogICAgICB9KQogICAgfTsKfQpmdW5jdGlvbiBMbihyKSB7CiAgdmFyIGUsIGE7CiAgaWYgKHIudHlwZSA9PT0gInNvbGlkIikgewogICAgdmFyIEEgPSBNYXRoLnJvdW5kKCgoZSA9IHIuc21vb3RobmVzcykgIT09IG51bGwgJiYgZSAhPT0gdm9pZCAwID8gZSA6IDEpICogNDA5Nik7CiAgICByZXR1cm4gewogICAgICAiTm0gICI6IHIubmFtZSB8fCAiIiwKICAgICAgR3JkRjogIkdyZEYuQ3N0UyIsCiAgICAgIEludHI6IEEsCiAgICAgIENscnM6IHIuY29sb3JTdG9wcy5tYXAoZnVuY3Rpb24odCkgewogICAgICAgIHZhciBpOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICAiQ2xyICI6IERyKHQuY29sb3IpLAogICAgICAgICAgVHlwZTogIkNscnkuVXNyUyIsCiAgICAgICAgICBMY3RuOiBNYXRoLnJvdW5kKHQubG9jYXRpb24gKiBBKSwKICAgICAgICAgIE1kcG46IE1hdGgucm91bmQoKChpID0gdC5taWRwb2ludCkgIT09IG51bGwgJiYgaSAhPT0gdm9pZCAwID8gaSA6IDAuNSkgKiAxMDApCiAgICAgICAgfTsKICAgICAgfSksCiAgICAgIFRybnM6IHIub3BhY2l0eVN0b3BzLm1hcChmdW5jdGlvbih0KSB7CiAgICAgICAgdmFyIGk7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIE9wY3Q6ICQwKHQub3BhY2l0eSksCiAgICAgICAgICBMY3RuOiBNYXRoLnJvdW5kKHQubG9jYXRpb24gKiBBKSwKICAgICAgICAgIE1kcG46IE1hdGgucm91bmQoKChpID0gdC5taWRwb2ludCkgIT09IG51bGwgJiYgaSAhPT0gdm9pZCAwID8gaSA6IDAuNSkgKiAxMDApCiAgICAgICAgfTsKICAgICAgfSkKICAgIH07CiAgfSBlbHNlCiAgICByZXR1cm4gewogICAgICBHcmRGOiAiR3JkRi5DbE5zIiwKICAgICAgIk5tICAiOiByLm5hbWUgfHwgIiIsCiAgICAgIFNoVHI6ICEhci5hZGRUcmFuc3BhcmVuY3ksCiAgICAgIFZjdEM6ICEhci5yZXN0cmljdENvbG9ycywKICAgICAgQ2xyUzogd2UuZW5jb2RlKHIuY29sb3JNb2RlbCksCiAgICAgIFJuZFM6IHIucmFuZG9tU2VlZCB8fCAwLAogICAgICBTbXRoOiBNYXRoLnJvdW5kKCgoYSA9IHIucm91Z2huZXNzKSAhPT0gbnVsbCAmJiBhICE9PSB2b2lkIDAgPyBhIDogMSkgKiA0MDk2KSwKICAgICAgIk1ubSAiOiAoci5taW4gfHwgWzAsIDAsIDAsIDBdKS5tYXAoZnVuY3Rpb24odCkgewogICAgICAgIHJldHVybiB0ICogMTAwOwogICAgICB9KSwKICAgICAgIk14bSAiOiAoci5tYXggfHwgWzEsIDEsIDEsIDFdKS5tYXAoZnVuY3Rpb24odCkgewogICAgICAgIHJldHVybiB0ICogMTAwOwogICAgICB9KQogICAgfTsKfQpmdW5jdGlvbiBLbihyKSB7CiAgdmFyIGUgPSB6bihyLkdyYWQpOwogIHJldHVybiBlLnN0eWxlID0gUmUuZGVjb2RlKHIuVHlwZSksIHIuRHRociAhPT0gdm9pZCAwICYmIChlLmRpdGhlciA9IHIuRHRociksIHIuZ3JhZGllbnRzSW50ZXJwb2xhdGlvbk1ldGhvZCAhPT0gdm9pZCAwICYmIChlLmludGVycG9sYXRpb25NZXRob2QgPSBMYS5kZWNvZGUoci5ncmFkaWVudHNJbnRlcnBvbGF0aW9uTWV0aG9kKSksIHIuUnZycyAhPT0gdm9pZCAwICYmIChlLnJldmVyc2UgPSByLlJ2cnMpLCByLkFuZ2wgIT09IHZvaWQgMCAmJiAoZS5hbmdsZSA9IGxhKHIuQW5nbCkpLCByWyJTY2wgIl0gIT09IHZvaWQgMCAmJiAoZS5zY2FsZSA9IEEwKHJbIlNjbCAiXSkpLCByLkFsZ24gIT09IHZvaWQgMCAmJiAoZS5hbGlnbiA9IHIuQWxnbiksIHIuT2ZzdCAhPT0gdm9pZCAwICYmIChlLm9mZnNldCA9IHsKICAgIHg6IEEwKHIuT2ZzdC5IcnpuKSwKICAgIHk6IEEwKHIuT2ZzdC5WcnRjKQogIH0pLCBlOwp9CmZ1bmN0aW9uIHFuKHIpIHsKICB2YXIgZSA9IHsKICAgIG5hbWU6IHIuUHRyblsiTm0gICJdLAogICAgaWQ6IHIuUHRybi5JZG50CiAgfTsKICByZXR1cm4gci5MbmtkICE9PSB2b2lkIDAgJiYgKGUubGlua2VkID0gci5MbmtkKSwgci5waGFzZSAhPT0gdm9pZCAwICYmIChlLnBoYXNlID0geyB4OiByLnBoYXNlLkhyem4sIHk6IHIucGhhc2UuVnJ0YyB9KSwgZTsKfQpmdW5jdGlvbiBEMihyKSB7CiAgaWYgKCJHcmFkIiBpbiByKQogICAgcmV0dXJuIEtuKHIpOwogIGlmICgiUHRybiIgaW4gcikKICAgIHJldHVybiBhYSh7IHR5cGU6ICJwYXR0ZXJuIiB9LCBxbihyKSk7CiAgaWYgKCJDbHIgIiBpbiByKQogICAgcmV0dXJuIHsgdHlwZTogImNvbG9yIiwgY29sb3I6IFNyKHJbIkNsciAiXSkgfTsKICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdmVjdG9yIGNvbnRlbnQiKTsKfQpmdW5jdGlvbiAkbihyKSB7CiAgdmFyIGUgPSB7fTsKICByZXR1cm4gci5kaXRoZXIgIT09IHZvaWQgMCAmJiAoZS5EdGhyID0gci5kaXRoZXIpLCByLmludGVycG9sYXRpb25NZXRob2QgIT09IHZvaWQgMCAmJiAoZS5ncmFkaWVudHNJbnRlcnBvbGF0aW9uTWV0aG9kID0gTGEuZW5jb2RlKHIuaW50ZXJwb2xhdGlvbk1ldGhvZCkpLCByLnJldmVyc2UgIT09IHZvaWQgMCAmJiAoZS5SdnJzID0gci5yZXZlcnNlKSwgci5hbmdsZSAhPT0gdm9pZCAwICYmIChlLkFuZ2wgPSB3MihyLmFuZ2xlKSksIGUuVHlwZSA9IFJlLmVuY29kZShyLnN0eWxlKSwgci5hbGlnbiAhPT0gdm9pZCAwICYmIChlLkFsZ24gPSByLmFsaWduKSwgci5zY2FsZSAhPT0gdm9pZCAwICYmIChlWyJTY2wgIl0gPSAkMChyLnNjYWxlKSksIHIub2Zmc2V0ICYmIChlLk9mc3QgPSB7CiAgICBIcnpuOiAkMChyLm9mZnNldC54KSwKICAgIFZydGM6ICQwKHIub2Zmc2V0LnkpCiAgfSksIGUuR3JhZCA9IExuKHIpLCBlOwp9CmZ1bmN0aW9uIHIxKHIpIHsKICB2YXIgZSA9IHsKICAgIFB0cm46IHsKICAgICAgIk5tICAiOiByLm5hbWUgfHwgIiIsCiAgICAgIElkbnQ6IHIuaWQgfHwgIiIKICAgIH0KICB9OwogIHJldHVybiByLmxpbmtlZCAhPT0gdm9pZCAwICYmIChlLkxua2QgPSAhIXIubGlua2VkKSwgci5waGFzZSAhPT0gdm9pZCAwICYmIChlLnBoYXNlID0geyBIcnpuOiByLnBoYXNlLngsIFZydGM6IHIucGhhc2UueSB9KSwgZTsKfQpmdW5jdGlvbiB4MihyKSB7CiAgcmV0dXJuIHIudHlwZSA9PT0gImNvbG9yIiA/IHsga2V5OiAiU29DbyIsIGRlc2NyaXB0b3I6IHsgIkNsciAiOiBEcihyLmNvbG9yKSB9IH0gOiByLnR5cGUgPT09ICJwYXR0ZXJuIiA/IHsga2V5OiAiUHRGbCIsIGRlc2NyaXB0b3I6IHIxKHIpIH0gOiB7IGtleTogIkdkRmwiLCBkZXNjcmlwdG9yOiAkbihyKSB9Owp9CmZ1bmN0aW9uIFNyKHIpIHsKICBpZiAoIkggICAiIGluIHIpCiAgICByZXR1cm4geyBoOiB4bChyWyJIICAgIl0pLCBzOiByLlN0cnQsIGI6IHIuQnJnaCB9OwogIGlmICgiUmQgICIgaW4gcikKICAgIHJldHVybiB7IHI6IHJbIlJkICAiXSwgZzogclsiR3JuICJdLCBiOiByWyJCbCAgIl0gfTsKICBpZiAoIkN5biAiIGluIHIpCiAgICByZXR1cm4geyBjOiByWyJDeW4gIl0sIG06IHIuTWdudCwgeTogclsiWWx3ICJdLCBrOiByLkJsY2sgfTsKICBpZiAoIkdyeSAiIGluIHIpCiAgICByZXR1cm4geyBrOiByWyJHcnkgIl0gfTsKICBpZiAoIkxtbmMiIGluIHIpCiAgICByZXR1cm4geyBsOiByLkxtbmMsIGE6IHJbIkEgICAiXSwgYjogclsiQiAgICJdIH07CiAgaWYgKCJyZWRGbG9hdCIgaW4gcikKICAgIHJldHVybiB7IGZyOiByLnJlZEZsb2F0LCBmZzogci5ncmVlbkZsb2F0LCBmYjogci5ibHVlRmxvYXQgfTsKICB0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGNvbG9yIGRlc2NyaXB0b3IiKTsKfQpmdW5jdGlvbiBEcihyKSB7CiAgaWYgKHIpIHsKICAgIGlmICgiciIgaW4gcikKICAgICAgcmV0dXJuIHsgX25hbWU6ICIiLCBfY2xhc3NJRDogIlJHQkMiLCAiUmQgICI6IHIuciB8fCAwLCAiR3JuICI6IHIuZyB8fCAwLCAiQmwgICI6IHIuYiB8fCAwIH07CiAgICBpZiAoImZyIiBpbiByKQogICAgICByZXR1cm4geyBfbmFtZTogIiIsIF9jbGFzc0lEOiAiUkdCQyIsIHJlZEZsb2F0OiByLmZyLCBncmVlbkZsb2F0OiByLmZnLCBibHVlRmxvYXQ6IHIuZmIgfTsKICAgIGlmICgiaCIgaW4gcikKICAgICAgcmV0dXJuIHsgX25hbWU6ICIiLCBfY2xhc3NJRDogIkhTQkMiLCAiSCAgICI6IHcyKHIuaCAqIDM2MCksIFN0cnQ6IHIucyB8fCAwLCBCcmdoOiByLmIgfHwgMCB9OwogICAgaWYgKCJjIiBpbiByKQogICAgICByZXR1cm4geyBfbmFtZTogIiIsIF9jbGFzc0lEOiAiQ01ZQyIsICJDeW4gIjogci5jIHx8IDAsIE1nbnQ6IHIubSB8fCAwLCAiWWx3ICI6IHIueSB8fCAwLCBCbGNrOiByLmsgfHwgMCB9OwogICAgaWYgKCJsIiBpbiByKQogICAgICByZXR1cm4geyBfbmFtZTogIiIsIF9jbGFzc0lEOiAiTEFCQyIsIExtbmM6IHIubCB8fCAwLCAiQSAgICI6IHIuYSB8fCAwLCAiQiAgICI6IHIuYiB8fCAwIH07CiAgICBpZiAoImsiIGluIHIpCiAgICAgIHJldHVybiB7IF9uYW1lOiAiIiwgX2NsYXNzSUQ6ICJHUllDIiwgIkdyeSAiOiByLmsgfTsKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb2xvciB2YWx1ZSIpOwogIH0gZWxzZSByZXR1cm4geyBfbmFtZTogIiIsIF9jbGFzc0lEOiAiUkdCQyIsICJSZCAgIjogMCwgIkdybiAiOiAwLCAiQmwgICI6IDAgfTsKfQpmdW5jdGlvbiBsYShyKSB7CiAgaWYgKHIgPT09IHZvaWQgMCkKICAgIHJldHVybiAwOwogIGlmIChyLnVuaXRzICE9PSAiQW5nbGUiKQogICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHVuaXRzOiAiLmNvbmNhdChyLnVuaXRzKSk7CiAgcmV0dXJuIHIudmFsdWU7Cn0KZnVuY3Rpb24gQTAocikgewogIGlmIChyID09PSB2b2lkIDApCiAgICByZXR1cm4gMTsKICBpZiAoci51bml0cyAhPT0gIlBlcmNlbnQiKQogICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHVuaXRzOiAiLmNvbmNhdChyLnVuaXRzKSk7CiAgcmV0dXJuIHIudmFsdWUgLyAxMDA7Cn0KZnVuY3Rpb24geGwocikgewogIGlmIChyID09PSB2b2lkIDApCiAgICByZXR1cm4gMTsKICBpZiAoci51bml0cyA9PT0gIlBlcmNlbnQiKQogICAgcmV0dXJuIHIudmFsdWUgLyAxMDA7CiAgaWYgKHIudW5pdHMgPT09ICJBbmdsZSIpCiAgICByZXR1cm4gci52YWx1ZSAvIDM2MDsKICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdW5pdHM6ICIuY29uY2F0KHIudW5pdHMpKTsKfQpmdW5jdGlvbiBGMChyKSB7CiAgdmFyIGUgPSByLnVuaXRzLCBhID0gci52YWx1ZTsKICBpZiAoZSAhPT0gIlBpeGVscyIgJiYgZSAhPT0gIk1pbGxpbWV0ZXJzIiAmJiBlICE9PSAiUG9pbnRzIiAmJiBlICE9PSAiTm9uZSIgJiYgZSAhPT0gIlBpY2FzIiAmJiBlICE9PSAiSW5jaGVzIiAmJiBlICE9PSAiQ2VudGltZXRlcnMiICYmIGUgIT09ICJEZW5zaXR5IikKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCB1bml0czogIi5jb25jYXQoSlNPTi5zdHJpbmdpZnkoeyB1bml0czogZSwgdmFsdWU6IGEgfSkpKTsKICByZXR1cm4geyB2YWx1ZTogYSwgdW5pdHM6IGUgfTsKfQpmdW5jdGlvbiBjYShyLCBlKSB7CiAgcmV0dXJuIGUgPT09IHZvaWQgMCAmJiAoZSA9ICJQaXhlbHMiKSwgdHlwZW9mIHIgPT0gIm51bWJlciIgPyB7IHZhbHVlOiByLCB1bml0czogZSB9IDogRjAocik7Cn0KZnVuY3Rpb24gcmUociwgZSkgewogIHZhciBhID0gci51bml0cywgQSA9IHIudmFsdWU7CiAgaWYgKGEgIT09IGUpCiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdW5pdHM6ICIuY29uY2F0KEpTT04uc3RyaW5naWZ5KHsgdW5pdHM6IGEsIHZhbHVlOiBBIH0pKSk7CiAgcmV0dXJuIEE7Cn0KZnVuY3Rpb24gdzIocikgewogIHJldHVybiB7IHVuaXRzOiAiQW5nbGUiLCB2YWx1ZTogciB8fCAwIH07Cn0KZnVuY3Rpb24gJDAocikgewogIHJldHVybiB7IHVuaXRzOiAiUGVyY2VudCIsIHZhbHVlOiBNYXRoLnJvdW5kKChyIHx8IDApICogMTAwKSB9Owp9CmZ1bmN0aW9uIEVyKHIpIHsKICByZXR1cm4geyB1bml0czogIlBlcmNlbnQiLCB2YWx1ZTogKHIgfHwgMCkgKiAxMDAgfTsKfQpmdW5jdGlvbiBEMChyLCBlKSB7CiAgaWYgKHIgPT0gbnVsbCkKICAgIHJldHVybiB7IHVuaXRzOiAiUGl4ZWxzIiwgdmFsdWU6IDAgfTsKICBpZiAodHlwZW9mIHIgIT0gIm9iamVjdCIpCiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdmFsdWU6ICIuY29uY2F0KEpTT04uc3RyaW5naWZ5KHIpLCAiIChrZXk6ICIpLmNvbmNhdChlLCAiKSAoc2hvdWxkIGhhdmUgdmFsdWUgYW5kIHVuaXRzKSIpKTsKICB2YXIgYSA9IHIudW5pdHMsIEEgPSByLnZhbHVlOwogIGlmICh0eXBlb2YgQSAhPSAibnVtYmVyIikKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCB2YWx1ZSBpbiAiLmNvbmNhdChKU09OLnN0cmluZ2lmeShyKSwgIiAoa2V5OiAiKS5jb25jYXQoZSwgIikiKSk7CiAgaWYgKGEgIT09ICJQaXhlbHMiICYmIGEgIT09ICJNaWxsaW1ldGVycyIgJiYgYSAhPT0gIlBvaW50cyIgJiYgYSAhPT0gIk5vbmUiICYmIGEgIT09ICJQaWNhcyIgJiYgYSAhPT0gIkluY2hlcyIgJiYgYSAhPT0gIkNlbnRpbWV0ZXJzIiAmJiBhICE9PSAiRGVuc2l0eSIpCiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdW5pdHMgaW4gIi5jb25jYXQoSlNPTi5zdHJpbmdpZnkociksICIgKGtleTogIikuY29uY2F0KGUsICIpIikpOwogIHJldHVybiB7IHVuaXRzOiBhLCB2YWx1ZTogQSB9Owp9CmZ1bmN0aW9uIG5yKHIpIHsKICB2YXIgZSA9IHIubnVtZXJhdG9yLCBhID0gci5kZW5vbWluYXRvcjsKICByZXR1cm4geyBudW1lcmF0b3I6IGUsIGRlbm9taW5hdG9yOiBhIH07Cn0KdmFyIHRpID0gdTAoInRleHRHcmlkZGluZyIsICJub25lIiwgewogIG5vbmU6ICJOb25lIiwKICByb3VuZDogIlJuZCAiCn0pLCB5MiA9IHUwKCJPcm50IiwgImhvcml6b250YWwiLCB7CiAgaG9yaXpvbnRhbDogIkhyem4iLAogIHZlcnRpY2FsOiAiVnJ0YyIKfSksIGlpID0gdTAoIkFubnQiLCAic2hhcnAiLCB7CiAgbm9uZTogIkFubm8iLAogIHNoYXJwOiAiYW50aUFsaWFzU2hhcnAiLAogIGNyaXNwOiAiQW5DciIsCiAgc3Ryb25nOiAiQW5TdCIsCiAgc21vb3RoOiAiQW5TbSIsCiAgcGxhdGZvcm06ICJhbnRpQWxpYXNQbGF0Zm9ybUdyYXkiLAogIHBsYXRmb3JtTENEOiAiYW50aUFsaWFzUGxhdGZvcm1MQ0QiCn0pLCBQQSA9IHUwKCJ3YXJwU3R5bGUiLCAibm9uZSIsIHsKICBub25lOiAid2FycE5vbmUiLAogIGFyYzogIndhcnBBcmMiLAogIGFyY0xvd2VyOiAid2FycEFyY0xvd2VyIiwKICBhcmNVcHBlcjogIndhcnBBcmNVcHBlciIsCiAgYXJjaDogIndhcnBBcmNoIiwKICBidWxnZTogIndhcnBCdWxnZSIsCiAgc2hlbGxMb3dlcjogIndhcnBTaGVsbExvd2VyIiwKICBzaGVsbFVwcGVyOiAid2FycFNoZWxsVXBwZXIiLAogIGZsYWc6ICJ3YXJwRmxhZyIsCiAgd2F2ZTogIndhcnBXYXZlIiwKICBmaXNoOiAid2FycEZpc2giLAogIHJpc2U6ICJ3YXJwUmlzZSIsCiAgZmlzaGV5ZTogIndhcnBGaXNoZXllIiwKICBpbmZsYXRlOiAid2FycEluZmxhdGUiLAogIHNxdWVlemU6ICJ3YXJwU3F1ZWV6ZSIsCiAgdHdpc3Q6ICJ3YXJwVHdpc3QiLAogIGN5bGluZGVyOiAid2FycEN5bGluZGVyIiwKICBjdXN0b206ICJ3YXJwQ3VzdG9tIgp9KSwgb3IgPSB1MCgiQmxuTSIsICJub3JtYWwiLCB7CiAgbm9ybWFsOiAiTnJtbCIsCiAgZGlzc29sdmU6ICJEc2x2IiwKICBkYXJrZW46ICJEcmtuIiwKICBtdWx0aXBseTogIk1sdHAiLAogICJjb2xvciBidXJuIjogIkNCcm4iLAogICJsaW5lYXIgYnVybiI6ICJsaW5lYXJCdXJuIiwKICAiZGFya2VyIGNvbG9yIjogImRhcmtlckNvbG9yIiwKICBsaWdodGVuOiAiTGdobiIsCiAgc2NyZWVuOiAiU2NybiIsCiAgImNvbG9yIGRvZGdlIjogIkNEZGciLAogICJsaW5lYXIgZG9kZ2UiOiAibGluZWFyRG9kZ2UiLAogICJsaWdodGVyIGNvbG9yIjogImxpZ2h0ZXJDb2xvciIsCiAgb3ZlcmxheTogIk92cmwiLAogICJzb2Z0IGxpZ2h0IjogIlNmdEwiLAogICJoYXJkIGxpZ2h0IjogIkhyZEwiLAogICJ2aXZpZCBsaWdodCI6ICJ2aXZpZExpZ2h0IiwKICAibGluZWFyIGxpZ2h0IjogImxpbmVhckxpZ2h0IiwKICAicGluIGxpZ2h0IjogInBpbkxpZ2h0IiwKICAiaGFyZCBtaXgiOiAiaGFyZE1peCIsCiAgZGlmZmVyZW5jZTogIkRmcm4iLAogIGV4Y2x1c2lvbjogIlhjbHUiLAogIHN1YnRyYWN0OiAiYmxlbmRTdWJ0cmFjdGlvbiIsCiAgZGl2aWRlOiAiYmxlbmREaXZpZGUiLAogIGh1ZTogIkggICAiLAogIHNhdHVyYXRpb246ICJTdHJ0IiwKICBjb2xvcjogIkNsciAiLAogIGx1bWlub3NpdHk6ICJMbW5zIiwKICAvLyB1c2VkIGluIEFCUgogICJsaW5lYXIgaGVpZ2h0IjogImxpbmVhckhlaWdodCIsCiAgaGVpZ2h0OiAiSGdodCIsCiAgc3VidHJhY3Rpb246ICJTYnRyIgogIC8vIDJuZCB2ZXJzaW9uIG9mIHN1YnRyYWN0ID8KfSksIGExID0gdTAoIkJFU2wiLCAiaW5uZXIgYmV2ZWwiLCB7CiAgImlubmVyIGJldmVsIjogIkluckIiLAogICJvdXRlciBiZXZlbCI6ICJPdHJCIiwKICBlbWJvc3M6ICJFbWJzIiwKICAicGlsbG93IGVtYm9zcyI6ICJQbEViIiwKICAic3Ryb2tlIGVtYm9zcyI6ICJzdHJva2VFbWJvc3MiCn0pLCBlMSA9IHUwKCJidmxUIiwgInNtb290aCIsIHsKICBzbW9vdGg6ICJTZkJMIiwKICAiY2hpc2VsIGhhcmQiOiAiUHJCTCIsCiAgImNoaXNlbCBzb2Z0IjogIlNsbXQiCn0pLCBBMSA9IHUwKCJCRVNzIiwgInVwIiwgewogIHVwOiAiSW4gICIsCiAgZG93bjogIk91dCAiCn0pLCB0MSA9IHUwKCJCRVRFIiwgInNvZnRlciIsIHsKICBzb2Z0ZXI6ICJTZkJMIiwKICBwcmVjaXNlOiAiUHJCTCIKfSksIGkxID0gdTAoIklHU3IiLCAiZWRnZSIsIHsKICBlZGdlOiAiU3JjRSIsCiAgY2VudGVyOiAiU3JjQyIKfSksIFJlID0gdTAoIkdyZFQiLCAibGluZWFyIiwgewogIGxpbmVhcjogIkxuciAiLAogIHJhZGlhbDogIlJkbCAiLAogIGFuZ2xlOiAiQW5nbCIsCiAgcmVmbGVjdGVkOiAiUmZsYyIsCiAgZGlhbW9uZDogIkRtbmQiCn0pLCBuMSA9IHUwKCJhbmltSW50ZXJwU3R5bGUiLCAibGluZWFyIiwgewogIGxpbmVhcjogIkxuciAiLAogIGhvbGQ6ICJob2xkIgp9KSwgZjEgPSB1MCgic3RkVHJhY2tJRCIsICJvcGFjaXR5IiwgewogIG9wYWNpdHk6ICJvcGFjaXR5VHJhY2siLAogIHN0eWxlOiAic3R5bGVUcmFjayIsCiAgc2hlZXRUcmFuc2Zvcm06ICJzaGVldFRyYW5zZm9ybVRyYWNrIiwKICBzaGVldFBvc2l0aW9uOiAic2hlZXRQb3NpdGlvblRyYWNrIiwKICBnbG9iYWxMaWdodGluZzogImdsb2JhbExpZ2h0aW5nVHJhY2siCn0pLCBMYSA9IHUwKCJncmFkaWVudEludGVycG9sYXRpb25NZXRob2RUeXBlIiwgInBlcmNlcHR1YWwiLCB7CiAgcGVyY2VwdHVhbDogIlBlcmMiLAogIGxpbmVhcjogIkxuciAiLAogIGNsYXNzaWM6ICJHY2xzIiwKICBzbW9vdGg6ICJTbW9vIgogIC8vIFRPRE86IHN0cmlwZXMKfSksIHdlID0gdTAoIkNsclMiLCAicmdiIiwgewogIHJnYjogIlJHQkMiLAogIGhzYjogIkhTQmwiLAogIGxhYjogIkxiQ2wiLAogIGhzbDogIkhTTEMiCn0pLCBWZSA9IHUwKCJGU3RsIiwgIm91dHNpZGUiLCB7CiAgb3V0c2lkZTogIk91dEYiLAogIGNlbnRlcjogIkN0ckYiLAogIGluc2lkZTogIkluc0YiCn0pLCBvMSA9IHUwKCJGckZsIiwgImNvbG9yIiwgewogIGNvbG9yOiAiU0NsciIsCiAgZ3JhZGllbnQ6ICJHckZsIiwKICBwYXR0ZXJuOiAiUHRybiIKfSksIG5pID0gdTAoIkVTbGljZVR5cGUiLCAiaW1hZ2UiLCB7CiAgaW1hZ2U6ICJJbWcgIiwKICBub0ltYWdlOiAibm9JbWFnZSIKfSksIGZpID0gdTAoIkVTbGljZUhvcnpBbGlnbiIsICJkZWZhdWx0IiwgewogIGRlZmF1bHQ6ICJkZWZhdWx0Igp9KSwgb2kgPSB1MCgiRVNsaWNlVmVydEFsaWduIiwgImRlZmF1bHQiLCB7CiAgZGVmYXVsdDogImRlZmF1bHQiCn0pLCB1aSA9IHUwKCJFU2xpY2VPcmlnaW4iLCAidXNlckdlbmVyYXRlZCIsIHsKICB1c2VyR2VuZXJhdGVkOiAidXNlckdlbmVyYXRlZCIsCiAgYXV0b0dlbmVyYXRlZDogImF1dG9HZW5lcmF0ZWQiLAogIGxheWVyOiAibGF5ZXIiCn0pLCBsaSA9IHUwKCJFU2xpY2VCR0NvbG9yVHlwZSIsICJub25lIiwgewogIG5vbmU6ICJOb25lIiwKICBtYXR0ZTogIm1hdHRlIiwKICBjb2xvcjogIkNsciAiCn0pLCBjaSA9IHUwKCJzdHJva2VTdHlsZUxpbmVDYXBUeXBlIiwgImJ1dHQiLCB7CiAgYnV0dDogInN0cm9rZVN0eWxlQnV0dENhcCIsCiAgcm91bmQ6ICJzdHJva2VTdHlsZVJvdW5kQ2FwIiwKICBzcXVhcmU6ICJzdHJva2VTdHlsZVNxdWFyZUNhcCIKfSksIHNpID0gdTAoInN0cm9rZVN0eWxlTGluZUpvaW5UeXBlIiwgIm1pdGVyIiwgewogIG1pdGVyOiAic3Ryb2tlU3R5bGVNaXRlckpvaW4iLAogIHJvdW5kOiAic3Ryb2tlU3R5bGVSb3VuZEpvaW4iLAogIGJldmVsOiAic3Ryb2tlU3R5bGVCZXZlbEpvaW4iCn0pLCBiaSA9IHUwKCJzdHJva2VTdHlsZUxpbmVBbGlnbm1lbnQiLCAiaW5zaWRlIiwgewogIGluc2lkZTogInN0cm9rZVN0eWxlQWxpZ25JbnNpZGUiLAogIGNlbnRlcjogInN0cm9rZVN0eWxlQWxpZ25DZW50ZXIiLAogIG91dHNpZGU6ICJzdHJva2VTdHlsZUFsaWduT3V0c2lkZSIKfSksIHUxID0gdTAoIkJsck0iLCAiaXNwaW5tYWdlIiwgewogIHNwaW46ICJTcG4gIiwKICB6b29tOiAiWm0gICIKfSksIGwxID0gdTAoIkJsclEiLCAiZ29vZCIsIHsKICBkcmFmdDogIkRyZnQiLAogIGdvb2Q6ICJHZCAgIiwKICBiZXN0OiAiQnN0ICIKfSksIGMxID0gdTAoIlNtQk0iLCAibm9ybWFsIiwgewogIG5vcm1hbDogIlNCTU4iLAogICJlZGdlIG9ubHkiOiAiU0JNRSIsCiAgIm92ZXJsYXkgZWRnZSI6ICJTQk1PIgp9KSwgczEgPSB1MCgiU21CUSIsICJtZWRpdW0iLCB7CiAgbG93OiAiU0JRTCIsCiAgbWVkaXVtOiAiU0JRTSIsCiAgaGlnaDogIlNCUUgiCn0pLCBiMSA9IHUwKCJEc3BNIiwgInN0cmV0Y2ggdG8gZml0IiwgewogICJzdHJldGNoIHRvIGZpdCI6ICJTdHJGIiwKICB0aWxlOiAiVGlsZSIKfSksIFVhID0gdTAoIlVuZEEiLCAicmVwZWF0IGVkZ2UgcGl4ZWxzIiwgewogICJ3cmFwIGFyb3VuZCI6ICJXcnBBIiwKICAicmVwZWF0IGVkZ2UgcGl4ZWxzIjogIlJwdEUiCn0pLCBkMSA9IHUwKCJDbnZyIiwgInJlY3Rhbmd1bGFyIHRvIHBvbGFyIiwgewogICJyZWN0YW5ndWxhciB0byBwb2xhciI6ICJSY3RQIiwKICAicG9sYXIgdG8gcmVjdGFuZ3VsYXIiOiAiUGxyUiIKfSksIGgxID0gdTAoIlJwbFMiLCAibWVkaXVtIiwgewogIHNtYWxsOiAiU21sICIsCiAgbWVkaXVtOiAiTWRtICIsCiAgbGFyZ2U6ICJMcmcgIgp9KSwgdjEgPSB1MCgiU3BoTSIsICJub3JtYWwiLCB7CiAgbm9ybWFsOiAiTnJtbCIsCiAgImhvcml6b250YWwgb25seSI6ICJIcnpPIiwKICAidmVydGljYWwgb25seSI6ICJWcnRPIgp9KSwgazEgPSB1MCgiV3Z0cCIsICJzaW5lIiwgewogIHNpbmU6ICJXdlNuIiwKICB0cmlhbmdsZTogIld2VHIiLAogIHNxdWFyZTogIld2U3EiCn0pLCBnMSA9IHUwKCJaWlR5IiwgInBvbmQgcmlwcGxlcyIsIHsKICAiYXJvdW5kIGNlbnRlciI6ICJBcm5DIiwKICAib3V0IGZyb20gY2VudGVyIjogIk90RnIiLAogICJwb25kIHJpcHBsZXMiOiAiUG5kUiIKfSksIG0xID0gdTAoIkRzdHIiLCAidW5pZm9ybSIsIHsKICB1bmlmb3JtOiAiVW5mciIsCiAgZ2F1c3NpYW46ICJHc24gIgp9KSwgRTIgPSB1MCgiQ2hubCIsICJjb21wb3NpdGUiLCB7CiAgcmVkOiAiUmQgICIsCiAgZ3JlZW46ICJHcm4gIiwKICBibHVlOiAiQmwgICIsCiAgY29tcG9zaXRlOiAiQ21wcyIKfSksIHAxID0gdTAoIk16dFQiLCAiZmluZSBkb3RzIiwgewogICJmaW5lIGRvdHMiOiAiRm5EdCIsCiAgIm1lZGl1bSBkb3RzIjogIk1kbUQiLAogICJncmFpbnkgZG90cyI6ICJHcm5EIiwKICAiY29hcnNlIGRvdHMiOiAiQ3JzRCIsCiAgInNob3J0IGxpbmVzIjogIlNockwiLAogICJtZWRpdW0gbGluZXMiOiAiTWRtTCIsCiAgImxvbmcgbGluZXMiOiAiTG5nTCIsCiAgInNob3J0IHN0cm9rZXMiOiAiU2hTdCIsCiAgIm1lZGl1bSBzdHJva2VzIjogIk1kbVMiLAogICJsb25nIHN0cm9rZXMiOiAiTG5nUyIKfSksIHcxID0gdTAoIkxucyAiLCAiNTAtMzAwbW0gem9vbSIsIHsKICAiNTAtMzAwbW0gem9vbSI6ICJabSAgIiwKICAiMzJtbSBwcmltZSI6ICJOa24gIiwKICAiMTA1bW0gcHJpbWUiOiAiTmtuMSIsCiAgIm1vdmllIHByaW1lIjogIlBuVnMiCn0pLCB5MSA9IHUwKCJibHVyVHlwZSIsICJnYXVzc2lhbiBibHVyIiwgewogICJnYXVzc2lhbiBibHVyIjogIkdzbkIiLAogICJsZW5zIGJsdXIiOiAibGVuc0JsdXIiLAogICJtb3Rpb24gYmx1ciI6ICJNdG5CIgp9KSwgRTEgPSB1MCgiRGZzTSIsICJub3JtYWwiLCB7CiAgbm9ybWFsOiAiTnJtbCIsCiAgImRhcmtlbiBvbmx5IjogIkRya08iLAogICJsaWdodGVuIG9ubHkiOiAiTGdoTyIsCiAgYW5pc290cm9waWM6ICJhbmlzb3Ryb3BpYyIKfSksIFoxID0gdTAoIkV4dFQiLCAiYmxvY2tzIiwgewogIGJsb2NrczogIkJsa3MiLAogIHB5cmFtaWRzOiAiUHlybSIKfSksIEIxID0gdTAoIkV4dFIiLCAicmFuZG9tIiwgewogIHJhbmRvbTogIlJuZG0iLAogICJsZXZlbC1iYXNlZCI6ICJMdmxCIgp9KSwgSTEgPSB1MCgiRmxDbCIsICJiYWNrZ3JvdW5kIGNvbG9yIiwgewogICJiYWNrZ3JvdW5kIGNvbG9yIjogIkZsQmMiLAogICJmb3JlZ3JvdW5kIGNvbG9yIjogIkZsRnIiLAogICJpbnZlcnNlIGltYWdlIjogIkZsSW4iLAogICJ1bmFsdGVyZWQgaW1hZ2UiOiAiRmxTbSIKfSksIEYxID0gdTAoIkNudEUiLCAidXBwZXIiLCB7CiAgbG93ZXI6ICJMd3IgIiwKICB1cHBlcjogIlVwciAiCn0pLCBDMSA9IHUwKCJXbmRNIiwgIndpbmQiLCB7CiAgd2luZDogIlduZCAiLAogIGJsYXN0OiAiQmxzdCIsCiAgc3RhZ2dlcjogIlN0Z3IiCn0pLCBXMSA9IHUwKCJEcmN0IiwgImZyb20gdGhlIHJpZ2h0IiwgewogIGxlZnQ6ICJMZWZ0IiwKICByaWdodDogIlJnaHQiCn0pLCBfMSA9IHUwKCJJbnRFIiwgIm9kZCBsaW5lcyIsIHsKICAib2RkIGxpbmVzIjogIkVsbU8iLAogICJldmVuIGxpbmVzIjogIkVsbUUiCn0pLCBHMSA9IHUwKCJJbnRDIiwgImludGVycG9sYXRpb24iLCB7CiAgZHVwbGljYXRpb246ICJDcnREIiwKICBpbnRlcnBvbGF0aW9uOiAiQ3J0SSIKfSksIFgxID0gdTAoIkZsTWQiLCAid3JhcCBhcm91bmQiLCB7CiAgInNldCB0byB0cmFuc3BhcmVudCI6ICJCY2tnIiwKICAicmVwZWF0IGVkZ2UgcGl4ZWxzIjogIlJwdCAiLAogICJ3cmFwIGFyb3VuZCI6ICJXcnAgIgp9KTsKdTAoInByak0iLCAiZmlzaGV5ZSIsIHsKICBmaXNoZXllOiAiZmlzUCIsCiAgcGVyc3BlY3RpdmU6ICJwZXJQIiwKICBhdXRvOiAiYXV0byIsCiAgImZ1bGwgc3BoZXJpY2FsIjogImZ1c1AiCn0pOwp2YXIgUjEgPSB1MCgicHJlc2V0S2luZFR5cGUiLCAicHJlc2V0S2luZEN1c3RvbSIsIHsKICBjdXN0b206ICJwcmVzZXRLaW5kQ3VzdG9tIiwKICBkZWZhdWx0OiAicHJlc2V0S2luZERlZmF1bHQiCn0pLCBUYSA9IGZ1bmN0aW9uKCkgewogIHJldHVybiBUYSA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24ocikgewogICAgZm9yICh2YXIgZSwgYSA9IDEsIEEgPSBhcmd1bWVudHMubGVuZ3RoOyBhIDwgQTsgYSsrKSB7CiAgICAgIGUgPSBhcmd1bWVudHNbYV07CiAgICAgIGZvciAodmFyIHQgaW4gZSkgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIHQpICYmIChyW3RdID0gZVt0XSk7CiAgICB9CiAgICByZXR1cm4gcjsKICB9LCBUYS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwp9LCBWMSA9IFtdLCBTMSA9IHt9OwpmdW5jdGlvbiBCMChyLCBlLCBhLCBBKSB7CiAgdmFyIHQgPSB7IGtleTogciwgaGFzOiBlLCByZWFkOiBhLCB3cml0ZTogQSB9OwogIFYxLnB1c2godCksIFMxW3Qua2V5XSA9IHQ7Cn0KdmFyIGFlID0gW3ZvaWQgMCwgIlBQSSIsICJQUENNIl0sIGVlID0gW3ZvaWQgMCwgIkluY2hlcyIsICJDZW50aW1ldGVycyIsICJQb2ludHMiLCAiUGljYXMiLCAiQ29sdW1ucyJdLCBkaSA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsKZnVuY3Rpb24gaGkocikgewogIHJldHVybiByIDw9IDU3ID8gciAtIDQ4IDogciAtIDg3Owp9CmZ1bmN0aW9uIE5sKHIsIGUpIHsKICByZXR1cm4gaGkoci5jaGFyQ29kZUF0KGUpKSA8PCA0IHwgaGkoci5jaGFyQ29kZUF0KGUgKyAxKSk7Cn0KZnVuY3Rpb24gWUEociwgZSkgewogIHZhciBhID0gWTAociwgZSk7CiAgcmV0dXJuIE1uKGEpOwp9CmZ1bmN0aW9uIE9BKHIsIGUpIHsKICB2YXIgYSA9IE5uKGUpOwogIE5yKHIsIGEpOwp9CmZ1bmN0aW9uIE1sKHIpIHsKICBmb3IgKHZhciBlID0gTyhyKSwgYSA9IFkwKHIsIGUpLCBBID0gITEsIHQgPSAwOyB0IDwgYS5ieXRlTGVuZ3RoOyB0KyspCiAgICBpZiAoYVt0XSAmIDEyOCkgewogICAgICBBID0gITA7CiAgICAgIGJyZWFrOwogICAgfQogIGlmIChBKSB7CiAgICB2YXIgaSA9IG5ldyBUZXh0RGVjb2RlcigiZ2JrIik7CiAgICByZXR1cm4gaS5kZWNvZGUoYSk7CiAgfSBlbHNlCiAgICByZXR1cm4gTW4oYSk7Cn0KZnVuY3Rpb24gVGwociwgZSkgewogIGZvciAodmFyIGEgPSAiIiwgQSA9IDAsIHQgPSBlLmNvZGVQb2ludEF0KEErKyk7IHQgIT09IHZvaWQgMDsgdCA9IGUuY29kZVBvaW50QXQoQSsrKSkKICAgIGEgKz0gdCA+IDEyNyA/ICI/IiA6IFN0cmluZy5mcm9tQ29kZVBvaW50KHQpOwogIHZhciBpID0gTm4oYSk7CiAgVChyLCBpLmJ5dGVMZW5ndGgpLCBOcihyLCBpKTsKfQpCMCgxMDYxLCBmdW5jdGlvbihyKSB7CiAgcmV0dXJuIHIuY2FwdGlvbkRpZ2VzdCAhPT0gdm9pZCAwOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgZm9yICh2YXIgYSA9ICIiLCBBID0gMDsgQSA8IDE2OyBBKyspIHsKICAgIHZhciB0ID0gTyhyKTsKICAgIGEgKz0gZGlbdCA+PiA0XSwgYSArPSBkaVt0ICYgMTVdOwogIH0KICBlLmNhcHRpb25EaWdlc3QgPSBhOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgZm9yICh2YXIgYSA9IDA7IGEgPCAxNjsgYSsrKQogICAgVChyLCBObChlLmNhcHRpb25EaWdlc3QsIGEgKiAyKSk7Cn0pOwpCMCgxMDYwLCBmdW5jdGlvbihyKSB7CiAgcmV0dXJuIHIueG1wTWV0YWRhdGEgIT09IHZvaWQgMDsKfSwgZnVuY3Rpb24ociwgZSwgYSkgewogIGUueG1wTWV0YWRhdGEgPSBZQShyLCBhKCkpOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgT0EociwgZS54bXBNZXRhZGF0YSk7Cn0pOwp2YXIgQWUgPSB1MCgiSW50ZSIsICJwZXJjZXB0dWFsIiwgewogIHBlcmNlcHR1YWw6ICJJbWcgIiwKICBzYXR1cmF0aW9uOiAiR3JwICIsCiAgInJlbGF0aXZlIGNvbG9yaW1ldHJpYyI6ICJDbHJtIiwKICAiYWJzb2x1dGUgY29sb3JpbWV0cmljIjogIkFDbHIiCn0pOwpCMCgxMDgyLCBmdW5jdGlvbihyKSB7CiAgcmV0dXJuIHIucHJpbnRJbmZvcm1hdGlvbiAhPT0gdm9pZCAwOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgdmFyIGEsIEEsIHQgPSBtMChyKTsKICBlLnByaW50SW5mb3JtYXRpb24gPSB7CiAgICBwcmludGVyTmFtZTogdC5wcmludGVyTmFtZSB8fCAiIiwKICAgIHJlbmRlcmluZ0ludGVudDogQWUuZGVjb2RlKChhID0gdC5JbnRlKSAhPT0gbnVsbCAmJiBhICE9PSB2b2lkIDAgPyBhIDogIkludGUuSW1nICIpCiAgfTsKICB2YXIgaSA9IGUucHJpbnRJbmZvcm1hdGlvbjsKICB0LlBzdFMgIT09IHZvaWQgMCAmJiAoaS5wcmludGVyTWFuYWdlc0NvbG9ycyA9IHQuUHN0UyksIHRbIk5tICAiXSAhPT0gdm9pZCAwICYmIChpLnByaW50ZXJQcm9maWxlID0gdFsiTm0gICJdKSwgdC5NcEJsICE9PSB2b2lkIDAgJiYgKGkuYmxhY2tQb2ludENvbXBlbnNhdGlvbiA9IHQuTXBCbCksIHQucHJpbnRTaXh0ZWVuQml0ICE9PSB2b2lkIDAgJiYgKGkucHJpbnRTaXh0ZWVuQml0ID0gdC5wcmludFNpeHRlZW5CaXQpLCB0LmhhcmRQcm9vZiAhPT0gdm9pZCAwICYmIChpLmhhcmRQcm9vZiA9IHQuaGFyZFByb29mKSwgdC5wcmludFByb29mU2V0dXAgJiYgKCJCbHRuIiBpbiB0LnByaW50UHJvb2ZTZXR1cCA/IGkucHJvb2ZTZXR1cCA9IHsgYnVpbHRpbjogdC5wcmludFByb29mU2V0dXAuQmx0bi5zcGxpdCgiLiIpWzFdIH0gOiBpLnByb29mU2V0dXAgPSB7CiAgICBwcm9maWxlOiB0LnByaW50UHJvb2ZTZXR1cC5wcm9maWxlLAogICAgcmVuZGVyaW5nSW50ZW50OiBBZS5kZWNvZGUoKEEgPSB0LnByaW50UHJvb2ZTZXR1cC5JbnRlKSAhPT0gbnVsbCAmJiBBICE9PSB2b2lkIDAgPyBBIDogIkludGUuSW1nICIpLAogICAgYmxhY2tQb2ludENvbXBlbnNhdGlvbjogISF0LnByaW50UHJvb2ZTZXR1cC5NcEJsLAogICAgcGFwZXJXaGl0ZTogISF0LnByaW50UHJvb2ZTZXR1cC5wYXBlcldoaXRlCiAgfSk7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICB2YXIgYSwgQSwgdCA9IGUucHJpbnRJbmZvcm1hdGlvbiwgaSA9IHt9OwogIHQucHJpbnRlck1hbmFnZXNDb2xvcnMgPyBpLlBzdFMgPSAhMCA6ICh0LmhhcmRQcm9vZiAhPT0gdm9pZCAwICYmIChpLmhhcmRQcm9vZiA9ICEhdC5oYXJkUHJvb2YpLCBpLkNsclMgPSAiQ2xyUy5SR0JDIiwgaVsiTm0gICJdID0gKGEgPSB0LnByaW50ZXJQcm9maWxlKSAhPT0gbnVsbCAmJiBhICE9PSB2b2lkIDAgPyBhIDogIkNJRSBSR0IiKSwgaS5JbnRlID0gQWUuZW5jb2RlKHQucmVuZGVyaW5nSW50ZW50KSwgdC5wcmludGVyTWFuYWdlc0NvbG9ycyB8fCAoaS5NcEJsID0gISF0LmJsYWNrUG9pbnRDb21wZW5zYXRpb24pLCBpLnByaW50U2l4dGVlbkJpdCA9ICEhdC5wcmludFNpeHRlZW5CaXQsIGkucHJpbnRlck5hbWUgPSB0LnByaW50ZXJOYW1lIHx8ICIiLCB0LnByb29mU2V0dXAgJiYgInByb2ZpbGUiIGluIHQucHJvb2ZTZXR1cCA/IGkucHJpbnRQcm9vZlNldHVwID0gewogICAgcHJvZmlsZTogdC5wcm9vZlNldHVwLnByb2ZpbGUgfHwgIiIsCiAgICBJbnRlOiBBZS5lbmNvZGUodC5wcm9vZlNldHVwLnJlbmRlcmluZ0ludGVudCksCiAgICBNcEJsOiAhIXQucHJvb2ZTZXR1cC5ibGFja1BvaW50Q29tcGVuc2F0aW9uLAogICAgcGFwZXJXaGl0ZTogISF0LnByb29mU2V0dXAucGFwZXJXaGl0ZQogIH0gOiBpLnByaW50UHJvb2ZTZXR1cCA9IHsKICAgIEJsdG46ICEoKEEgPSB0LnByb29mU2V0dXApID09PSBudWxsIHx8IEEgPT09IHZvaWQgMCkgJiYgQS5idWlsdGluID8gImJ1aWx0aW5Qcm9vZi4iLmNvbmNhdCh0LnByb29mU2V0dXAuYnVpbHRpbikgOiAiYnVpbHRpblByb29mLnByb29mQ01ZSyIKICB9LCBwMChyLCAiIiwgInByaW50T3V0cHV0IiwgaSk7Cn0pOwpCMCgxMDA1LCBmdW5jdGlvbihyKSB7CiAgcmV0dXJuIHIucmVzb2x1dGlvbkluZm8gIT09IHZvaWQgMDsKfSwgZnVuY3Rpb24ociwgZSkgewogIHZhciBhID0gaHIociksIEEgPSBQKHIpLCB0ID0gUChyKSwgaSA9IGhyKHIpLCBuID0gUChyKSwgZiA9IFAocik7CiAgZS5yZXNvbHV0aW9uSW5mbyA9IHsKICAgIGhvcml6b250YWxSZXNvbHV0aW9uOiBhLAogICAgaG9yaXpvbnRhbFJlc29sdXRpb25Vbml0OiBhZVtBXSB8fCAiUFBJIiwKICAgIHdpZHRoVW5pdDogZWVbdF0gfHwgIkluY2hlcyIsCiAgICB2ZXJ0aWNhbFJlc29sdXRpb246IGksCiAgICB2ZXJ0aWNhbFJlc29sdXRpb25Vbml0OiBhZVtuXSB8fCAiUFBJIiwKICAgIGhlaWdodFVuaXQ6IGVlW2ZdIHx8ICJJbmNoZXMiCiAgfTsKfSwgZnVuY3Rpb24ociwgZSkgewogIHZhciBhID0gZS5yZXNvbHV0aW9uSW5mbzsKICBncihyLCBhLmhvcml6b250YWxSZXNvbHV0aW9uIHx8IDApLCB4KHIsIE1hdGgubWF4KDEsIGFlLmluZGV4T2YoYS5ob3Jpem9udGFsUmVzb2x1dGlvblVuaXQpKSksIHgociwgTWF0aC5tYXgoMSwgZWUuaW5kZXhPZihhLndpZHRoVW5pdCkpKSwgZ3IociwgYS52ZXJ0aWNhbFJlc29sdXRpb24gfHwgMCksIHgociwgTWF0aC5tYXgoMSwgYWUuaW5kZXhPZihhLnZlcnRpY2FsUmVzb2x1dGlvblVuaXQpKSksIHgociwgTWF0aC5tYXgoMSwgZWUuaW5kZXhPZihhLmhlaWdodFVuaXQpKSk7Cn0pOwp2YXIgdmkgPSBbImNlbnRlcmVkIiwgInNpemUgdG8gZml0IiwgInVzZXIgZGVmaW5lZCJdOwpCMCgxMDYyLCBmdW5jdGlvbihyKSB7CiAgcmV0dXJuIHIucHJpbnRTY2FsZSAhPT0gdm9pZCAwOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgZS5wcmludFNjYWxlID0gewogICAgc3R5bGU6IHZpW2cwKHIpXSwKICAgIHg6IFJyKHIpLAogICAgeTogUnIociksCiAgICBzY2FsZTogUnIocikKICB9Owp9LCBmdW5jdGlvbihyLCBlKSB7CiAgdmFyIGEgPSBlLnByaW50U2NhbGUsIEEgPSBhLnN0eWxlLCB0ID0gYS54LCBpID0gYS55LCBuID0gYS5zY2FsZTsKICBFMChyLCBNYXRoLm1heCgwLCB2aS5pbmRleE9mKEEpKSksIFZyKHIsIHQgfHwgMCksIFZyKHIsIGkgfHwgMCksIFZyKHIsIG4gfHwgMCk7Cn0pOwpCMCgxMDA2LCBmdW5jdGlvbihyKSB7CiAgcmV0dXJuIHIuYWxwaGFDaGFubmVsTmFtZXMgIT09IHZvaWQgMDsKfSwgZnVuY3Rpb24ociwgZSwgYSkgewogIGlmIChlLmFscGhhQ2hhbm5lbE5hbWVzKQogICAgSChyLCBhKCkpOwogIGVsc2UKICAgIGZvciAoZS5hbHBoYUNoYW5uZWxOYW1lcyA9IFtdOyBhKCkgPiAwOyApIHsKICAgICAgdmFyIEEgPSBNbChyKTsKICAgICAgZS5hbHBoYUNoYW5uZWxOYW1lcy5wdXNoKEEpOwogICAgfQp9LCBmdW5jdGlvbihyLCBlKSB7CiAgZm9yICh2YXIgYSA9IDAsIEEgPSBlLmFscGhhQ2hhbm5lbE5hbWVzOyBhIDwgQS5sZW5ndGg7IGErKykgewogICAgdmFyIHQgPSBBW2FdOwogICAgVGwociwgdCk7CiAgfQp9KTsKQjAoMTA0NSwgZnVuY3Rpb24ocikgewogIHJldHVybiByLmFscGhhQ2hhbm5lbE5hbWVzICE9PSB2b2lkIDA7Cn0sIGZ1bmN0aW9uKHIsIGUsIGEpIHsKICBmb3IgKGUuYWxwaGFDaGFubmVsTmFtZXMgPSBbXTsgYSgpID4gMDsgKQogICAgZS5hbHBoYUNoYW5uZWxOYW1lcy5wdXNoKHowKHIpKTsKfSwgZnVuY3Rpb24ociwgZSkgewogIGZvciAodmFyIGEgPSAwLCBBID0gZS5hbHBoYUNoYW5uZWxOYW1lczsgYSA8IEEubGVuZ3RoOyBhKyspIHsKICAgIHZhciB0ID0gQVthXTsKICAgIFdhKHIsIHQpOwogIH0KfSk7CkIwKDEwNTMsIGZ1bmN0aW9uKHIpIHsKICByZXR1cm4gci5hbHBoYUlkZW50aWZpZXJzICE9PSB2b2lkIDA7Cn0sIGZ1bmN0aW9uKHIsIGUsIGEpIHsKICBmb3IgKGUuYWxwaGFJZGVudGlmaWVycyA9IFtdOyBhKCkgPj0gNDsgKQogICAgZS5hbHBoYUlkZW50aWZpZXJzLnB1c2goUyhyKSk7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICBmb3IgKHZhciBhID0gMCwgQSA9IGUuYWxwaGFJZGVudGlmaWVyczsgYSA8IEEubGVuZ3RoOyBhKyspIHsKICAgIHZhciB0ID0gQVthXTsKICAgIFUociwgdCk7CiAgfQp9KTsKQjAoMTAxMCwgZnVuY3Rpb24ocikgewogIHJldHVybiByLmJhY2tncm91bmRDb2xvciAhPT0gdm9pZCAwOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgcmV0dXJuIGUuYmFja2dyb3VuZENvbG9yID0gSzAocik7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICByZXR1cm4gcnIociwgZS5iYWNrZ3JvdW5kQ29sb3IpOwp9KTsKQjAoMTAzNywgZnVuY3Rpb24ocikgewogIHJldHVybiByLmdsb2JhbEFuZ2xlICE9PSB2b2lkIDA7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICByZXR1cm4gZS5nbG9iYWxBbmdsZSA9IEwocik7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICByZXR1cm4gdDAociwgZS5nbG9iYWxBbmdsZSk7Cn0pOwpCMCgxMDQ5LCBmdW5jdGlvbihyKSB7CiAgcmV0dXJuIHIuZ2xvYmFsQWx0aXR1ZGUgIT09IHZvaWQgMDsKfSwgZnVuY3Rpb24ociwgZSkgewogIHJldHVybiBlLmdsb2JhbEFsdGl0dWRlID0gUyhyKTsKfSwgZnVuY3Rpb24ociwgZSkgewogIHJldHVybiBVKHIsIGUuZ2xvYmFsQWx0aXR1ZGUpOwp9KTsKQjAoMTAxMSwgZnVuY3Rpb24ocikgewogIHJldHVybiByLnByaW50RmxhZ3MgIT09IHZvaWQgMDsKfSwgZnVuY3Rpb24ociwgZSkgewogIGUucHJpbnRGbGFncyA9IHsKICAgIGxhYmVsczogISFPKHIpLAogICAgY3JvcE1hcmtzOiAhIU8ociksCiAgICBjb2xvckJhcnM6ICEhTyhyKSwKICAgIHJlZ2lzdHJhdGlvbk1hcmtzOiAhIU8ociksCiAgICBuZWdhdGl2ZTogISFPKHIpLAogICAgZmxpcDogISFPKHIpLAogICAgaW50ZXJwb2xhdGU6ICEhTyhyKSwKICAgIGNhcHRpb246ICEhTyhyKSwKICAgIHByaW50RmxhZ3M6ICEhTyhyKQogIH07Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICB2YXIgYSA9IGUucHJpbnRGbGFnczsKICBUKHIsIGEubGFiZWxzID8gMSA6IDApLCBUKHIsIGEuY3JvcE1hcmtzID8gMSA6IDApLCBUKHIsIGEuY29sb3JCYXJzID8gMSA6IDApLCBUKHIsIGEucmVnaXN0cmF0aW9uTWFya3MgPyAxIDogMCksIFQociwgYS5uZWdhdGl2ZSA/IDEgOiAwKSwgVChyLCBhLmZsaXAgPyAxIDogMCksIFQociwgYS5pbnRlcnBvbGF0ZSA/IDEgOiAwKSwgVChyLCBhLmNhcHRpb24gPyAxIDogMCksIFQociwgYS5wcmludEZsYWdzID8gMSA6IDApOwp9KTsKQjAoCiAgMTAzNCwKICAvLyBDb3B5cmlnaHQgZmxhZwogIGZ1bmN0aW9uKHIpIHsKICAgIHJldHVybiByLmNvcHlyaWdodGVkICE9PSB2b2lkIDA7CiAgfSwKICBmdW5jdGlvbihyLCBlKSB7CiAgICBlLmNvcHlyaWdodGVkID0gISFPKHIpOwogIH0sCiAgZnVuY3Rpb24ociwgZSkgewogICAgVChyLCBlLmNvcHlyaWdodGVkID8gMSA6IDApOwogIH0KKTsKQjAoCiAgMTAzNSwKICAvLyBVUkwKICBmdW5jdGlvbihyKSB7CiAgICByZXR1cm4gci51cmwgIT09IHZvaWQgMDsKICB9LAogIGZ1bmN0aW9uKHIsIGUsIGEpIHsKICAgIGUudXJsID0gU2UociwgYSgpKTsKICB9LAogIGZ1bmN0aW9uKHIsIGUpIHsKICAgIFg0KHIsIGUudXJsKTsKICB9Cik7CkIwKAogIDEwODAsCiAgLy8gQ291bnQgSW5mb3JtYXRpb24KICBmdW5jdGlvbihyKSB7CiAgICByZXR1cm4gci5jb3VudEluZm9ybWF0aW9uICE9PSB2b2lkIDA7CiAgfSwKICBmdW5jdGlvbihyLCBlKSB7CiAgICB2YXIgYSA9IG0wKHIpOwogICAgZS5jb3VudEluZm9ybWF0aW9uID0gYS5jb3VudEdyb3VwTGlzdC5tYXAoZnVuY3Rpb24oQSkgewogICAgICByZXR1cm4gewogICAgICAgIGNvbG9yOiB7IHI6IEFbIlJkICAiXSwgZzogQVsiR3JuICJdLCBiOiBBWyJCbCAgIl0gfSwKICAgICAgICBuYW1lOiBBWyJObSAgIl0sCiAgICAgICAgc2l6ZTogQVsiUmRzICJdLAogICAgICAgIGZvbnRTaXplOiBBLmZvbnRTaXplLAogICAgICAgIHZpc2libGU6IEEuVnNibCwKICAgICAgICBwb2ludHM6IEEuY291bnRPYmplY3RMaXN0Lm1hcChmdW5jdGlvbih0KSB7CiAgICAgICAgICByZXR1cm4geyB4OiB0WyJYICAgIl0sIHk6IHRbIlkgICAiXSB9OwogICAgICAgIH0pCiAgICAgIH07CiAgICB9KTsKICB9LAogIGZ1bmN0aW9uKHIsIGUpIHsKICAgIHZhciBhID0gewogICAgICBWcnNuOiAxLAogICAgICBjb3VudEdyb3VwTGlzdDogZS5jb3VudEluZm9ybWF0aW9uLm1hcChmdW5jdGlvbihBKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICJSZCAgIjogQS5jb2xvci5yLAogICAgICAgICAgIkdybiAiOiBBLmNvbG9yLmcsCiAgICAgICAgICAiQmwgICI6IEEuY29sb3IuYiwKICAgICAgICAgICJObSAgIjogQS5uYW1lLAogICAgICAgICAgIlJkcyAiOiBBLnNpemUsCiAgICAgICAgICBmb250U2l6ZTogQS5mb250U2l6ZSwKICAgICAgICAgIFZzYmw6IEEudmlzaWJsZSwKICAgICAgICAgIGNvdW50T2JqZWN0TGlzdDogQS5wb2ludHMubWFwKGZ1bmN0aW9uKHQpIHsKICAgICAgICAgICAgcmV0dXJuIHsgIlggICAiOiB0LngsICJZICAgIjogdC55IH07CiAgICAgICAgICB9KQogICAgICAgIH07CiAgICAgIH0pCiAgICB9OwogICAgcDAociwgIiIsICJDbnQgIiwgYSk7CiAgfQopOwpCMCgxMDI0LCBmdW5jdGlvbihyKSB7CiAgcmV0dXJuIHIubGF5ZXJTdGF0ZSAhPT0gdm9pZCAwOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgcmV0dXJuIGUubGF5ZXJTdGF0ZSA9IFAocik7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICByZXR1cm4geChyLCBlLmxheWVyU3RhdGUpOwp9KTsKQjAoMTAyNiwgZnVuY3Rpb24ocikgewogIHJldHVybiByLmxheWVyc0dyb3VwICE9PSB2b2lkIDA7Cn0sIGZ1bmN0aW9uKHIsIGUsIGEpIHsKICBmb3IgKGUubGF5ZXJzR3JvdXAgPSBbXTsgYSgpID4gMDsgKQogICAgZS5sYXllcnNHcm91cC5wdXNoKFAocikpOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgZm9yICh2YXIgYSA9IDAsIEEgPSBlLmxheWVyc0dyb3VwOyBhIDwgQS5sZW5ndGg7IGErKykgewogICAgdmFyIHQgPSBBW2FdOwogICAgeChyLCB0KTsKICB9Cn0pOwpCMCgxMDcyLCBmdW5jdGlvbihyKSB7CiAgcmV0dXJuIHIubGF5ZXJHcm91cHNFbmFibGVkSWQgIT09IHZvaWQgMDsKfSwgZnVuY3Rpb24ociwgZSwgYSkgewogIGZvciAoZS5sYXllckdyb3Vwc0VuYWJsZWRJZCA9IFtdOyBhKCkgPiAwOyApCiAgICBlLmxheWVyR3JvdXBzRW5hYmxlZElkLnB1c2goTyhyKSk7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICBmb3IgKHZhciBhID0gMCwgQSA9IGUubGF5ZXJHcm91cHNFbmFibGVkSWQ7IGEgPCBBLmxlbmd0aDsgYSsrKSB7CiAgICB2YXIgdCA9IEFbYV07CiAgICBUKHIsIHQpOwogIH0KfSk7CkIwKDEwNjksIGZ1bmN0aW9uKHIpIHsKICByZXR1cm4gci5sYXllclNlbGVjdGlvbklkcyAhPT0gdm9pZCAwOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgdmFyIGEgPSBQKHIpOwogIGZvciAoZS5sYXllclNlbGVjdGlvbklkcyA9IFtdOyBhLS07ICkKICAgIGUubGF5ZXJTZWxlY3Rpb25JZHMucHVzaChTKHIpKTsKfSwgZnVuY3Rpb24ociwgZSkgewogIHgociwgZS5sYXllclNlbGVjdGlvbklkcy5sZW5ndGgpOwogIGZvciAodmFyIGEgPSAwLCBBID0gZS5sYXllclNlbGVjdGlvbklkczsgYSA8IEEubGVuZ3RoOyBhKyspIHsKICAgIHZhciB0ID0gQVthXTsKICAgIFUociwgdCk7CiAgfQp9KTsKQjAoMTAzMiwgZnVuY3Rpb24ocikgewogIHJldHVybiByLmdyaWRBbmRHdWlkZXNJbmZvcm1hdGlvbiAhPT0gdm9pZCAwOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgdmFyIGEgPSBTKHIpLCBBID0gUyhyKSwgdCA9IFMociksIGkgPSBTKHIpOwogIGlmIChhICE9PSAxKQogICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIDEwMzIgcmVzb3VyY2UgdmVyc2lvbjogIi5jb25jYXQoYSkpOwogIGUuZ3JpZEFuZEd1aWRlc0luZm9ybWF0aW9uID0gewogICAgZ3JpZDogeyBob3Jpem9udGFsOiBBLCB2ZXJ0aWNhbDogdCB9LAogICAgZ3VpZGVzOiBbXQogIH07CiAgZm9yICh2YXIgbiA9IDA7IG4gPCBpOyBuKyspCiAgICBlLmdyaWRBbmRHdWlkZXNJbmZvcm1hdGlvbi5ndWlkZXMucHVzaCh7CiAgICAgIGxvY2F0aW9uOiBTKHIpIC8gMzIsCiAgICAgIGRpcmVjdGlvbjogTyhyKSA/ICJob3Jpem9udGFsIiA6ICJ2ZXJ0aWNhbCIKICAgIH0pOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgdmFyIGEgPSBlLmdyaWRBbmRHdWlkZXNJbmZvcm1hdGlvbiwgQSA9IGEuZ3JpZCB8fCB7IGhvcml6b250YWw6IDE4ICogMzIsIHZlcnRpY2FsOiAxOCAqIDMyIH0sIHQgPSBhLmd1aWRlcyB8fCBbXTsKICBVKHIsIDEpLCBVKHIsIEEuaG9yaXpvbnRhbCksIFUociwgQS52ZXJ0aWNhbCksIFUociwgdC5sZW5ndGgpOwogIGZvciAodmFyIGkgPSAwLCBuID0gdDsgaSA8IG4ubGVuZ3RoOyBpKyspIHsKICAgIHZhciBmID0gbltpXTsKICAgIFUociwgZi5sb2NhdGlvbiAqIDMyKSwgVChyLCBmLmRpcmVjdGlvbiA9PT0gImhvcml6b250YWwiID8gMSA6IDApOwogIH0KfSk7CkIwKAogIDEwNjUsCiAgLy8gTGF5ZXIgQ29tcHMKICBmdW5jdGlvbihyKSB7CiAgICByZXR1cm4gci5sYXllckNvbXBzICE9PSB2b2lkIDA7CiAgfSwKICBmdW5jdGlvbihyLCBlKSB7CiAgICB2YXIgYSA9IG0wKHIsICEwKTsKICAgIGUubGF5ZXJDb21wcyA9IHsgbGlzdDogW10gfTsKICAgIGZvciAodmFyIEEgPSAwLCB0ID0gYS5saXN0OyBBIDwgdC5sZW5ndGg7IEErKykgewogICAgICB2YXIgaSA9IHRbQV07CiAgICAgIGUubGF5ZXJDb21wcy5saXN0LnB1c2goewogICAgICAgIGlkOiBpLmNvbXBJRCwKICAgICAgICBuYW1lOiBpWyJObSAgIl0sCiAgICAgICAgY2FwdHVyZWRJbmZvOiBpLmNhcHR1cmVkSW5mbwogICAgICB9KSwgImNvbW1lbnQiIGluIGkgJiYgKGUubGF5ZXJDb21wcy5saXN0W2UubGF5ZXJDb21wcy5saXN0Lmxlbmd0aCAtIDFdLmNvbW1lbnQgPSBpLmNvbW1lbnQpOwogICAgfQogICAgImxhc3RBcHBsaWVkQ29tcCIgaW4gYSAmJiAoZS5sYXllckNvbXBzLmxhc3RBcHBsaWVkID0gYS5sYXN0QXBwbGllZENvbXApOwogIH0sCiAgZnVuY3Rpb24ociwgZSkgewogICAgZm9yICh2YXIgYSA9IGUubGF5ZXJDb21wcywgQSA9IHsgbGlzdDogW10gfSwgdCA9IDAsIGkgPSBhLmxpc3Q7IHQgPCBpLmxlbmd0aDsgdCsrKSB7CiAgICAgIHZhciBuID0gaVt0XSwgZiA9IHt9OwogICAgICBmLl9jbGFzc0lEID0gIkNvbXAiLCBmWyJObSAgIl0gPSBuLm5hbWUsICJjb21tZW50IiBpbiBuICYmIChmLmNvbW1lbnQgPSBuLmNvbW1lbnQpLCBmLmNvbXBJRCA9IG4uaWQsIGYuY2FwdHVyZWRJbmZvID0gbi5jYXB0dXJlZEluZm8sIEEubGlzdC5wdXNoKGYpOwogICAgfQogICAgImxhc3RBcHBsaWVkIiBpbiBhICYmIChBLmxhc3RBcHBsaWVkQ29tcCA9IGEubGFzdEFwcGxpZWQpLCBwMChyLCAiIiwgIkNvbXBMaXN0IiwgQSk7CiAgfQopOwp2YXIga2kgPSBbCiAgIm5vcm1hbCIsCiAgdm9pZCAwLAogIHZvaWQgMCwKICB2b2lkIDAsCiAgdm9pZCAwLAogIHZvaWQgMCwKICB2b2lkIDAsCiAgIm11bHRpcGx5IiwKICAic2NyZWVuIiwKICB2b2lkIDAsCiAgdm9pZCAwLAogIHZvaWQgMCwKICB2b2lkIDAsCiAgdm9pZCAwLAogIHZvaWQgMCwKICB2b2lkIDAsCiAgdm9pZCAwLAogIHZvaWQgMCwKICB2b2lkIDAsCiAgdm9pZCAwLAogIHZvaWQgMCwKICB2b2lkIDAsCiAgdm9pZCAwLAogICJkaWZmZXJlbmNlIgpdOwpCMCgKICAxMDc4LAogIC8vIE9uaW9uIFNraW5zCiAgZnVuY3Rpb24ocikgewogICAgcmV0dXJuIHIub25pb25Ta2lucyAhPT0gdm9pZCAwOwogIH0sCiAgZnVuY3Rpb24ociwgZSkgewogICAgdmFyIGEgPSBtMChyKTsKICAgIGUub25pb25Ta2lucyA9IHsKICAgICAgZW5hYmxlZDogYS5lbmFiLAogICAgICBmcmFtZXNCZWZvcmU6IGEubnVtQmVmb3JlLAogICAgICBmcmFtZXNBZnRlcjogYS5udW1BZnRlciwKICAgICAgZnJhbWVTcGFjaW5nOiBhLlNwY24sCiAgICAgIG1pbk9wYWNpdHk6IGEubWluT3BhY2l0eSAvIDEwMCwKICAgICAgbWF4T3BhY2l0eTogYS5tYXhPcGFjaXR5IC8gMTAwLAogICAgICBibGVuZE1vZGU6IGtpW2EuQmxuTV0gfHwgIm5vcm1hbCIKICAgIH07CiAgfSwKICBmdW5jdGlvbihyLCBlKSB7CiAgICB2YXIgYSA9IGUub25pb25Ta2lucywgQSA9IHsKICAgICAgVnJzbjogMSwKICAgICAgZW5hYjogYS5lbmFibGVkLAogICAgICBudW1CZWZvcmU6IGEuZnJhbWVzQmVmb3JlLAogICAgICBudW1BZnRlcjogYS5mcmFtZXNBZnRlciwKICAgICAgU3BjbjogYS5mcmFtZVNwYWNpbmcsCiAgICAgIG1pbk9wYWNpdHk6IGEubWluT3BhY2l0eSAqIDEwMCB8IDAsCiAgICAgIG1heE9wYWNpdHk6IGEubWF4T3BhY2l0eSAqIDEwMCB8IDAsCiAgICAgIEJsbk06IE1hdGgubWF4KDAsIGtpLmluZGV4T2YoYS5ibGVuZE1vZGUpKQogICAgfTsKICAgIHAwKHIsICIiLCAibnVsbCIsIEEpOwogIH0KKTsKQjAoCiAgMTA3NSwKICAvLyBUaW1lbGluZSBJbmZvcm1hdGlvbgogIGZ1bmN0aW9uKHIpIHsKICAgIHJldHVybiByLnRpbWVsaW5lSW5mb3JtYXRpb24gIT09IHZvaWQgMDsKICB9LAogIGZ1bmN0aW9uKHIsIGUpIHsKICAgIHZhciBhLCBBLCB0ID0gbTAocik7CiAgICBlLnRpbWVsaW5lSW5mb3JtYXRpb24gPSB7CiAgICAgIGVuYWJsZWQ6IHQuZW5hYiwKICAgICAgZnJhbWVTdGVwOiBucih0LmZyYW1lU3RlcCksCiAgICAgIGZyYW1lUmF0ZTogdC5mcmFtZVJhdGUsCiAgICAgIHRpbWU6IG5yKHQudGltZSksCiAgICAgIGR1cmF0aW9uOiBucih0LmR1cmF0aW9uKSwKICAgICAgd29ya0luVGltZTogbnIodC53b3JrSW5UaW1lKSwKICAgICAgd29ya091dFRpbWU6IG5yKHQud29ya091dFRpbWUpLAogICAgICByZXBlYXRzOiB0LkxDbnQsCiAgICAgIGhhc01vdGlvbjogdC5oYXNNb3Rpb24sCiAgICAgIGdsb2JhbFRyYWNrczogSm4odC5nbG9iYWxUcmFja0xpc3QsICEhci5sb2dNaXNzaW5nRmVhdHVyZXMpCiAgICB9LCAhKChBID0gKGEgPSB0LmF1ZGlvQ2xpcEdyb3VwTGlzdCkgPT09IG51bGwgfHwgYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogYS5hdWRpb0NsaXBHcm91cExpc3QpID09PSBudWxsIHx8IEEgPT09IHZvaWQgMCkgJiYgQS5sZW5ndGggJiYgKGUudGltZWxpbmVJbmZvcm1hdGlvbi5hdWRpb0NsaXBHcm91cHMgPSB0LmF1ZGlvQ2xpcEdyb3VwTGlzdC5hdWRpb0NsaXBHcm91cExpc3QubWFwKGZ1bmN0aW9uKGkpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICBpZDogaS5ncm91cElELAogICAgICAgIG11dGVkOiBpLm11dGVkLAogICAgICAgIGF1ZGlvQ2xpcHM6IGkuYXVkaW9DbGlwTGlzdC5tYXAoZnVuY3Rpb24obikgewogICAgICAgICAgdmFyIGYgPSBuLmNsaXBJRCwgdSA9IG4udGltZVNjb3BlLCBvID0gbi5tdXRlZCwgbCA9IG4uYXVkaW9MZXZlbCwgcyA9IG4uZnJhbWVSZWFkZXI7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBpZDogZiwKICAgICAgICAgICAgc3RhcnQ6IG5yKHUuU3RydCksCiAgICAgICAgICAgIGR1cmF0aW9uOiBucih1LmR1cmF0aW9uKSwKICAgICAgICAgICAgaW5UaW1lOiBucih1LmluVGltZSksCiAgICAgICAgICAgIG91dFRpbWU6IG5yKHUub3V0VGltZSksCiAgICAgICAgICAgIG11dGVkOiBvLAogICAgICAgICAgICBhdWRpb0xldmVsOiBsLAogICAgICAgICAgICBmcmFtZVJlYWRlcjogewogICAgICAgICAgICAgIHR5cGU6IHMuZnJhbWVSZWFkZXJUeXBlLAogICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRvcjogcy5tZWRpYURlc2NyaXB0b3IsCiAgICAgICAgICAgICAgbGluazogewogICAgICAgICAgICAgICAgbmFtZTogc1siTG5rICJdWyJObSAgIl0sCiAgICAgICAgICAgICAgICBmdWxsUGF0aDogc1siTG5rICJdLmZ1bGxQYXRoLAogICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiBzWyJMbmsgIl0ucmVsUGF0aAogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfTsKICAgICAgICB9KQogICAgICB9OwogICAgfSkpOwogIH0sCiAgZnVuY3Rpb24ociwgZSkgewogICAgdmFyIGEsIEEgPSBlLnRpbWVsaW5lSW5mb3JtYXRpb24sIHQgPSB7CiAgICAgIFZyc246IDEsCiAgICAgIGVuYWI6IEEuZW5hYmxlZCwKICAgICAgZnJhbWVTdGVwOiBBLmZyYW1lU3RlcCwKICAgICAgZnJhbWVSYXRlOiBBLmZyYW1lUmF0ZSwKICAgICAgdGltZTogQS50aW1lLAogICAgICBkdXJhdGlvbjogQS5kdXJhdGlvbiwKICAgICAgd29ya0luVGltZTogQS53b3JrSW5UaW1lLAogICAgICB3b3JrT3V0VGltZTogQS53b3JrT3V0VGltZSwKICAgICAgTENudDogQS5yZXBlYXRzLAogICAgICBnbG9iYWxUcmFja0xpc3Q6IEhuKEEuZ2xvYmFsVHJhY2tzKSwKICAgICAgYXVkaW9DbGlwR3JvdXBMaXN0OiB7CiAgICAgICAgYXVkaW9DbGlwR3JvdXBMaXN0OiAoYSA9IEEuYXVkaW9DbGlwR3JvdXBzKSA9PT0gbnVsbCB8fCBhID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhLm1hcChmdW5jdGlvbihpKSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBncm91cElEOiBpLmlkLAogICAgICAgICAgICBtdXRlZDogaS5tdXRlZCwKICAgICAgICAgICAgYXVkaW9DbGlwTGlzdDogaS5hdWRpb0NsaXBzLm1hcChmdW5jdGlvbihuKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIGNsaXBJRDogbi5pZCwKICAgICAgICAgICAgICAgIHRpbWVTY29wZTogewogICAgICAgICAgICAgICAgICBWcnNuOiAxLAogICAgICAgICAgICAgICAgICBTdHJ0OiBuLnN0YXJ0LAogICAgICAgICAgICAgICAgICBkdXJhdGlvbjogbi5kdXJhdGlvbiwKICAgICAgICAgICAgICAgICAgaW5UaW1lOiBuLmluVGltZSwKICAgICAgICAgICAgICAgICAgb3V0VGltZTogbi5vdXRUaW1lCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgZnJhbWVSZWFkZXI6IHsKICAgICAgICAgICAgICAgICAgZnJhbWVSZWFkZXJUeXBlOiBuLmZyYW1lUmVhZGVyLnR5cGUsCiAgICAgICAgICAgICAgICAgIGRlc2NWZXJzaW9uOiAxLAogICAgICAgICAgICAgICAgICAiTG5rICI6IHsKICAgICAgICAgICAgICAgICAgICBkZXNjVmVyc2lvbjogMSwKICAgICAgICAgICAgICAgICAgICAiTm0gICI6IG4uZnJhbWVSZWFkZXIubGluay5uYW1lLAogICAgICAgICAgICAgICAgICAgIGZ1bGxQYXRoOiBuLmZyYW1lUmVhZGVyLmxpbmsuZnVsbFBhdGgsCiAgICAgICAgICAgICAgICAgICAgcmVsUGF0aDogbi5mcmFtZVJlYWRlci5saW5rLnJlbGF0aXZlUGF0aAogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0b3I6IG4uZnJhbWVSZWFkZXIubWVkaWFEZXNjcmlwdG9yCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgbXV0ZWQ6IG4ubXV0ZWQsCiAgICAgICAgICAgICAgICBhdWRpb0xldmVsOiBuLmF1ZGlvTGV2ZWwKICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9KQogICAgICAgICAgfTsKICAgICAgICB9KQogICAgICB9LAogICAgICBoYXNNb3Rpb246IEEuaGFzTW90aW9uCiAgICB9OwogICAgcDAociwgIiIsICJudWxsIiwgdCwgImFuaW0iKTsKICB9Cik7CkIwKAogIDEwNzYsCiAgLy8gU2hlZXQgRGlzY2xvc3VyZQogIGZ1bmN0aW9uKHIpIHsKICAgIHJldHVybiByLnNoZWV0RGlzY2xvc3VyZSAhPT0gdm9pZCAwOwogIH0sCiAgZnVuY3Rpb24ociwgZSkgewogICAgdmFyIGEgPSBtMChyKTsKICAgIGUuc2hlZXREaXNjbG9zdXJlID0ge30sIGEuc2hlZXRUaW1lbGluZU9wdGlvbnMgJiYgKGUuc2hlZXREaXNjbG9zdXJlLnNoZWV0VGltZWxpbmVPcHRpb25zID0gYS5zaGVldFRpbWVsaW5lT3B0aW9ucy5tYXAoZnVuY3Rpb24oQSkgewogICAgICByZXR1cm4gewogICAgICAgIHNoZWV0SUQ6IEEuc2hlZXRJRCwKICAgICAgICBzaGVldERpc2Nsb3NlZDogQS5zaGVldERpc2Nsb3NlZCwKICAgICAgICBsaWdodHNEaXNjbG9zZWQ6IEEubGlnaHRzRGlzY2xvc2VkLAogICAgICAgIG1lc2hlc0Rpc2Nsb3NlZDogQS5tZXNoZXNEaXNjbG9zZWQsCiAgICAgICAgbWF0ZXJpYWxzRGlzY2xvc2VkOiBBLm1hdGVyaWFsc0Rpc2Nsb3NlZAogICAgICB9OwogICAgfSkpOwogIH0sCiAgZnVuY3Rpb24ociwgZSkgewogICAgdmFyIGEgPSBlLnNoZWV0RGlzY2xvc3VyZSwgQSA9IHsgVnJzbjogMSB9OwogICAgYS5zaGVldFRpbWVsaW5lT3B0aW9ucyAmJiAoQS5zaGVldFRpbWVsaW5lT3B0aW9ucyA9IGEuc2hlZXRUaW1lbGluZU9wdGlvbnMubWFwKGZ1bmN0aW9uKHQpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICBWcnNuOiAyLAogICAgICAgIHNoZWV0SUQ6IHQuc2hlZXRJRCwKICAgICAgICBzaGVldERpc2Nsb3NlZDogdC5zaGVldERpc2Nsb3NlZCwKICAgICAgICBsaWdodHNEaXNjbG9zZWQ6IHQubGlnaHRzRGlzY2xvc2VkLAogICAgICAgIG1lc2hlc0Rpc2Nsb3NlZDogdC5tZXNoZXNEaXNjbG9zZWQsCiAgICAgICAgbWF0ZXJpYWxzRGlzY2xvc2VkOiB0Lm1hdGVyaWFsc0Rpc2Nsb3NlZAogICAgICB9OwogICAgfSkpLCBwMChyLCAiIiwgIm51bGwiLCBBKTsKICB9Cik7CkIwKAogIDEwNTQsCiAgLy8gVVJMIExpc3QKICBmdW5jdGlvbihyKSB7CiAgICByZXR1cm4gci51cmxzTGlzdCAhPT0gdm9pZCAwOwogIH0sCiAgZnVuY3Rpb24ociwgZSkgewogICAgdmFyIGEgPSBTKHIpOwogICAgZS51cmxzTGlzdCA9IFtdOwogICAgZm9yICh2YXIgQSA9IDA7IEEgPCBhOyBBKyspIHsKICAgICAgdmFyIHQgPSBSMChyKTsKICAgICAgaWYgKHQgIT09ICJzbGljIiAmJiByLnRocm93Rm9yTWlzc2luZ0ZlYXR1cmVzKQogICAgICAgIHRocm93IG5ldyBFcnJvcigiVW5rbm93biBsb25nIik7CiAgICAgIHZhciBpID0gUyhyKSwgbiA9IHowKHIpOwogICAgICBlLnVybHNMaXN0LnB1c2goeyBpZDogaSwgdXJsOiBuLCByZWY6ICJzbGljZSIgfSk7CiAgICB9CiAgfSwKICBmdW5jdGlvbihyLCBlKSB7CiAgICB2YXIgYSA9IGUudXJsc0xpc3Q7CiAgICBVKHIsIGEubGVuZ3RoKTsKICAgIGZvciAodmFyIEEgPSAwOyBBIDwgYS5sZW5ndGg7IEErKykKICAgICAgbjAociwgInNsaWMiKSwgVShyLCBhW0FdLmlkKSwgbXIociwgYVtBXS51cmwpOwogIH0KKTsKZnVuY3Rpb24gZ2kocikgewogIHJldHVybiB7ICJUb3AgIjogci50b3AsIExlZnQ6IHIubGVmdCwgQnRvbTogci5ib3R0b20sIFJnaHQ6IHIucmlnaHQgfTsKfQpmdW5jdGlvbiBtaShyKSB7CiAgcmV0dXJuIHsgdG9wOiByWyJUb3AgIl0sIGxlZnQ6IHIuTGVmdCwgYm90dG9tOiByLkJ0b20sIHJpZ2h0OiByLlJnaHQgfTsKfQpmdW5jdGlvbiB0ZShyLCBlKSB7CiAgcmV0dXJuIHJbTWF0aC5tYXgoMCwgTWF0aC5taW4oci5sZW5ndGggLSAxLCBlKSldOwp9CnZhciBwaSA9IFsiYXV0b0dlbmVyYXRlZCIsICJsYXllciIsICJ1c2VyR2VuZXJhdGVkIl0sIHdpID0gWyJub0ltYWdlIiwgImltYWdlIl0sIGllID0gWyJkZWZhdWx0Il07CkIwKAogIDEwNTAsCiAgLy8gU2xpY2VzCiAgZnVuY3Rpb24ocikgewogICAgcmV0dXJuIHIuc2xpY2VzID8gci5zbGljZXMubGVuZ3RoIDogMDsKICB9LAogIGZ1bmN0aW9uKHIsIGUpIHsKICAgIHZhciBhID0gUyhyKTsKICAgIGlmIChhID09PSA2KSB7CiAgICAgIGUuc2xpY2VzIHx8IChlLnNsaWNlcyA9IFtdKTsKICAgICAgdmFyIEEgPSBMKHIpLCB0ID0gTChyKSwgaSA9IEwociksIG4gPSBMKHIpLCBmID0gejAociksIHUgPSBTKHIpOwogICAgICBlLnNsaWNlcy5wdXNoKHsgYm91bmRzOiB7IHRvcDogQSwgbGVmdDogdCwgYm90dG9tOiBpLCByaWdodDogbiB9LCBncm91cE5hbWU6IGYsIHNsaWNlczogW10gfSk7CiAgICAgIGZvciAodmFyIG8gPSBlLnNsaWNlc1tlLnNsaWNlcy5sZW5ndGggLSAxXS5zbGljZXMsIGwgPSAwOyBsIDwgdTsgbCsrKSB7CiAgICAgICAgdmFyIHMgPSBTKHIpLCBjID0gUyhyKSwgZCA9IHRlKHBpLCBTKHIpKSwgdiA9IGQgPT0gImxheWVyIiA/IFMocikgOiAwLCBrID0gejAociksIEUgPSB0ZSh3aSwgUyhyKSksIGcgPSBMKHIpLCB3ID0gTChyKSwgQiA9IEwociksIG0gPSBMKHIpLCBwID0gejAociksIFcgPSB6MChyKSwgQyA9IHowKHIpLCBfID0gejAociksIE4gPSAhIU8ociksIEQgPSB6MChyKSwgWSA9IHRlKGllLCBTKHIpKSwgZjAgPSB0ZShpZSwgUyhyKSksIEcgPSBPKHIpLCBKID0gTyhyKSwgSyA9IE8ociksIFggPSBPKHIpLCBsMCA9IEcgKyBKICsgSyArIFggPT09IDAgPyAibm9uZSIgOiBHID09PSAwID8gIm1hdHRlIiA6ICJjb2xvciI7CiAgICAgICAgby5wdXNoKHsKICAgICAgICAgIGlkOiBzLAogICAgICAgICAgZ3JvdXBJZDogYywKICAgICAgICAgIG9yaWdpbjogZCwKICAgICAgICAgIGFzc29jaWF0ZWRMYXllcklkOiB2LAogICAgICAgICAgbmFtZTogaywKICAgICAgICAgIHRhcmdldDogVywKICAgICAgICAgIG1lc3NhZ2U6IEMsCiAgICAgICAgICBhbHRUYWc6IF8sCiAgICAgICAgICBjZWxsVGV4dElzSFRNTDogTiwKICAgICAgICAgIGNlbGxUZXh0OiBELAogICAgICAgICAgaG9yaXpvbnRhbEFsaWdubWVudDogWSwKICAgICAgICAgIHZlcnRpY2FsQWxpZ25tZW50OiBmMCwKICAgICAgICAgIHR5cGU6IEUsCiAgICAgICAgICB1cmw6IHAsCiAgICAgICAgICBib3VuZHM6IHsgdG9wOiB3LCBsZWZ0OiBnLCBib3R0b206IG0sIHJpZ2h0OiBCIH0sCiAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3JUeXBlOiBsMCwKICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogeyByOiBKLCBnOiBLLCBiOiBYLCBhOiBHIH0KICAgICAgICB9KTsKICAgICAgfQogICAgICB2YXIgYiA9IG0wKHIpOwogICAgICBiLnNsaWNlcy5mb3JFYWNoKGZ1bmN0aW9uKFopIHsKICAgICAgICB2YXIgeSA9IG8uZmluZChmdW5jdGlvbihGKSB7CiAgICAgICAgICByZXR1cm4gWi5zbGljZUlEID09IEYuaWQ7CiAgICAgICAgfSk7CiAgICAgICAgeSAmJiAoeS50b3BPdXRzZXQgPSBaLnRvcE91dHNldCwgeS5sZWZ0T3V0c2V0ID0gWi5sZWZ0T3V0c2V0LCB5LmJvdHRvbU91dHNldCA9IFouYm90dG9tT3V0c2V0LCB5LnJpZ2h0T3V0c2V0ID0gWi5yaWdodE91dHNldCk7CiAgICAgIH0pOwogICAgfSBlbHNlIGlmIChhID09PSA3IHx8IGEgPT09IDgpIHsKICAgICAgdmFyIGIgPSBtMChyKTsKICAgICAgZS5zbGljZXMgfHwgKGUuc2xpY2VzID0gW10pLCBlLnNsaWNlcy5wdXNoKHsKICAgICAgICBncm91cE5hbWU6IGIuYmFzZU5hbWUsCiAgICAgICAgYm91bmRzOiBtaShiLmJvdW5kcyksCiAgICAgICAgc2xpY2VzOiBiLnNsaWNlcy5tYXAoZnVuY3Rpb24oeSkgewogICAgICAgICAgcmV0dXJuIFRhKFRhKHt9LCB5WyJObSAgIl0gPyB7IG5hbWU6IHlbIk5tICAiXSB9IDoge30pLCB7IGlkOiB5LnNsaWNlSUQsIGdyb3VwSWQ6IHkuZ3JvdXBJRCwgYXNzb2NpYXRlZExheWVySWQ6IDAsIG9yaWdpbjogdWkuZGVjb2RlKHkub3JpZ2luKSwgdHlwZTogbmkuZGVjb2RlKHkuVHlwZSksIGJvdW5kczogbWkoeS5ib3VuZHMpLCB1cmw6IHkudXJsLCB0YXJnZXQ6IHkubnVsbCwgbWVzc2FnZTogeS5Nc2dlLCBhbHRUYWc6IHkuYWx0VGFnLCBjZWxsVGV4dElzSFRNTDogeS5jZWxsVGV4dElzSFRNTCwgY2VsbFRleHQ6IHkuY2VsbFRleHQsIGhvcml6b250YWxBbGlnbm1lbnQ6IGZpLmRlY29kZSh5LmhvcnpBbGlnbiksIHZlcnRpY2FsQWxpZ25tZW50OiBvaS5kZWNvZGUoeS52ZXJ0QWxpZ24pLCBiYWNrZ3JvdW5kQ29sb3JUeXBlOiBsaS5kZWNvZGUoeS5iZ0NvbG9yVHlwZSksIGJhY2tncm91bmRDb2xvcjogeS5iZ0NvbG9yID8geyByOiB5LmJnQ29sb3JbIlJkICAiXSwgZzogeS5iZ0NvbG9yWyJHcm4gIl0sIGI6IHkuYmdDb2xvclsiQmwgICJdLCBhOiB5LmJnQ29sb3IuYWxwaGEgfSA6IHsgcjogMCwgZzogMCwgYjogMCwgYTogMCB9LCB0b3BPdXRzZXQ6IHkudG9wT3V0c2V0IHx8IDAsIGxlZnRPdXRzZXQ6IHkubGVmdE91dHNldCB8fCAwLCBib3R0b21PdXRzZXQ6IHkuYm90dG9tT3V0c2V0IHx8IDAsIHJpZ2h0T3V0c2V0OiB5LnJpZ2h0T3V0c2V0IHx8IDAgfSk7CiAgICAgICAgfSkKICAgICAgfSk7CiAgICB9IGVsc2UKICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHNsaWNlcyB2ZXJzaW9uICgiLmNvbmNhdChhLCAiKSIpKTsKICB9LAogIGZ1bmN0aW9uKHIsIGUsIGEpIHsKICAgIHZhciBBID0gZS5zbGljZXNbYV0sIHQgPSBBLmJvdW5kcywgaSA9IEEuZ3JvdXBOYW1lLCBuID0gQS5zbGljZXM7CiAgICBVKHIsIDYpLCB0MChyLCB0LnRvcCksIHQwKHIsIHQubGVmdCksIHQwKHIsIHQuYm90dG9tKSwgdDAociwgdC5yaWdodCksIG1yKHIsIGkpLCBVKHIsIG4ubGVuZ3RoKTsKICAgIGZvciAodmFyIGYgPSAwOyBmIDwgbi5sZW5ndGg7IGYrKykgewogICAgICB2YXIgdSA9IG5bZl0sIG8gPSB1LmJhY2tncm91bmRDb2xvciwgbCA9IG8uYSwgcyA9IG8uciwgYyA9IG8uZywgZCA9IG8uYjsKICAgICAgdS5iYWNrZ3JvdW5kQ29sb3JUeXBlID09PSAibm9uZSIgPyBsID0gcyA9IGMgPSBkID0gMCA6IHUuYmFja2dyb3VuZENvbG9yVHlwZSA9PT0gIm1hdHRlIiAmJiAobCA9IDAsIHMgPSBjID0gZCA9IDI1NSksIFUociwgdS5pZCksIFUociwgdS5ncm91cElkKSwgVShyLCBwaS5pbmRleE9mKHUub3JpZ2luKSksIHUub3JpZ2luID09PSAibGF5ZXIiICYmIFUociwgdS5hc3NvY2lhdGVkTGF5ZXJJZCksIG1yKHIsIHUubmFtZSB8fCAiIiksIFUociwgd2kuaW5kZXhPZih1LnR5cGUpKSwgdDAociwgdS5ib3VuZHMubGVmdCksIHQwKHIsIHUuYm91bmRzLnRvcCksIHQwKHIsIHUuYm91bmRzLnJpZ2h0KSwgdDAociwgdS5ib3VuZHMuYm90dG9tKSwgbXIociwgdS51cmwpLCBtcihyLCB1LnRhcmdldCksIG1yKHIsIHUubWVzc2FnZSksIG1yKHIsIHUuYWx0VGFnKSwgVChyLCB1LmNlbGxUZXh0SXNIVE1MID8gMSA6IDApLCBtcihyLCB1LmNlbGxUZXh0KSwgVShyLCBpZS5pbmRleE9mKHUuaG9yaXpvbnRhbEFsaWdubWVudCkpLCBVKHIsIGllLmluZGV4T2YodS52ZXJ0aWNhbEFsaWdubWVudCkpLCBUKHIsIGwpLCBUKHIsIHMpLCBUKHIsIGMpLCBUKHIsIGQpOwogICAgfQogICAgdmFyIHYgPSB7CiAgICAgIGJvdW5kczogZ2kodCksCiAgICAgIHNsaWNlczogW10KICAgIH07CiAgICBuLmZvckVhY2goZnVuY3Rpb24oaykgewogICAgICB2YXIgRSA9IFRhKFRhKHsgc2xpY2VJRDogay5pZCwgZ3JvdXBJRDogay5ncm91cElkLCBvcmlnaW46IHVpLmVuY29kZShrLm9yaWdpbiksIFR5cGU6IG5pLmVuY29kZShrLnR5cGUpLCBib3VuZHM6IGdpKGsuYm91bmRzKSB9LCBrLm5hbWUgPyB7ICJObSAgIjogay5uYW1lIH0gOiB7fSksIHsgdXJsOiBrLnVybCwgbnVsbDogay50YXJnZXQsIE1zZ2U6IGsubWVzc2FnZSwgYWx0VGFnOiBrLmFsdFRhZywgY2VsbFRleHRJc0hUTUw6IGsuY2VsbFRleHRJc0hUTUwsIGNlbGxUZXh0OiBrLmNlbGxUZXh0LCBob3J6QWxpZ246IGZpLmVuY29kZShrLmhvcml6b250YWxBbGlnbm1lbnQpLCB2ZXJ0QWxpZ246IG9pLmVuY29kZShrLnZlcnRpY2FsQWxpZ25tZW50KSwgYmdDb2xvclR5cGU6IGxpLmVuY29kZShrLmJhY2tncm91bmRDb2xvclR5cGUpIH0pOwogICAgICBpZiAoay5iYWNrZ3JvdW5kQ29sb3JUeXBlID09PSAiY29sb3IiKSB7CiAgICAgICAgdmFyIGcgPSBrLmJhY2tncm91bmRDb2xvciwgdyA9IGcuciwgQiA9IGcuZywgbSA9IGcuYiwgcCA9IGcuYTsKICAgICAgICBFLmJnQ29sb3IgPSB7ICJSZCAgIjogdywgIkdybiAiOiBCLCAiQmwgICI6IG0sIGFscGhhOiBwIH07CiAgICAgIH0KICAgICAgRS50b3BPdXRzZXQgPSBrLnRvcE91dHNldCB8fCAwLCBFLmxlZnRPdXRzZXQgPSBrLmxlZnRPdXRzZXQgfHwgMCwgRS5ib3R0b21PdXRzZXQgPSBrLmJvdHRvbU91dHNldCB8fCAwLCBFLnJpZ2h0T3V0c2V0ID0gay5yaWdodE91dHNldCB8fCAwLCB2LnNsaWNlcy5wdXNoKEUpOwogICAgfSksIHAwKHIsICIiLCAibnVsbCIsIHYsICJzbGljZXMiKTsKICB9Cik7CkIwKDEwNjQsIGZ1bmN0aW9uKHIpIHsKICByZXR1cm4gci5waXhlbEFzcGVjdFJhdGlvICE9PSB2b2lkIDA7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICBpZiAoUyhyKSA+IDIpCiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgcGl4ZWxBc3BlY3RSYXRpbyB2ZXJzaW9uIik7CiAgZS5waXhlbEFzcGVjdFJhdGlvID0geyBhc3BlY3Q6IElyKHIpIH07Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICBVKHIsIDIpLCBGcihyLCBlLnBpeGVsQXNwZWN0UmF0aW8uYXNwZWN0KTsKfSk7CkIwKDEwNDEsIGZ1bmN0aW9uKHIpIHsKICByZXR1cm4gci5pY2NVbnRhZ2dlZFByb2ZpbGUgIT09IHZvaWQgMDsKfSwgZnVuY3Rpb24ociwgZSkgewogIGUuaWNjVW50YWdnZWRQcm9maWxlID0gISFPKHIpOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgVChyLCBlLmljY1VudGFnZ2VkUHJvZmlsZSA/IDEgOiAwKTsKfSk7CkIwKDEwNDQsIGZ1bmN0aW9uKHIpIHsKICByZXR1cm4gci5pZHNTZWVkTnVtYmVyICE9PSB2b2lkIDA7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICByZXR1cm4gZS5pZHNTZWVkTnVtYmVyID0gUyhyKTsKfSwgZnVuY3Rpb24ociwgZSkgewogIHJldHVybiBVKHIsIGUuaWRzU2VlZE51bWJlcik7Cn0pOwpCMCgxMDM2LCBmdW5jdGlvbihyKSB7CiAgcmV0dXJuIHIudGh1bWJuYWlsICE9PSB2b2lkIDAgfHwgci50aHVtYm5haWxSYXcgIT09IHZvaWQgMDsKfSwgZnVuY3Rpb24ociwgZSwgYSkgewogIHZhciBBID0gUyhyKSwgdCA9IFMociksIGkgPSBTKHIpOwogIFMociksIFMociksIFMocik7CiAgdmFyIG4gPSBQKHIpLCBmID0gUChyKTsKICBpZiAoQSAhPT0gMSB8fCBuICE9PSAyNCB8fCBmICE9PSAxKSB7CiAgICByLmxvZ01pc3NpbmdGZWF0dXJlcyAmJiByLmxvZygiSW52YWxpZCB0aHVtYm5haWwgZGF0YSAoZm9ybWF0OiAiLmNvbmNhdChBLCAiLCBiaXRzUGVyUGl4ZWw6ICIpLmNvbmNhdChuLCAiLCBwbGFuZXM6ICIpLmNvbmNhdChmLCAiKSIpKSwgSChyLCBhKCkpOwogICAgcmV0dXJuOwogIH0KICB2YXIgdSA9IGEoKSwgbyA9IFkwKHIsIHUpOwogIHIudXNlUmF3VGh1bWJuYWlsID8gZS50aHVtYm5haWxSYXcgPSB7IHdpZHRoOiB0LCBoZWlnaHQ6IGksIGRhdGE6IG8gfSA6IG8uYnl0ZUxlbmd0aCAmJiAoZS50aHVtYm5haWwgPSBnbChvKSk7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICB2YXIgYSwgQSA9IDAsIHQgPSAwLCBpID0gbmV3IFVpbnQ4QXJyYXkoMCk7CiAgaWYgKGUudGh1bWJuYWlsUmF3KQogICAgQSA9IGUudGh1bWJuYWlsUmF3LndpZHRoLCB0ID0gZS50aHVtYm5haWxSYXcuaGVpZ2h0LCBpID0gZS50aHVtYm5haWxSYXcuZGF0YTsKICBlbHNlCiAgICB0cnkgewogICAgICB2YXIgbiA9IChhID0gZS50aHVtYm5haWwudG9EYXRhVVJMKCJpbWFnZS9qcGVnIiwgMSkpID09PSBudWxsIHx8IGEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGEuc3Vic3RyaW5nKDIzKTsKICAgICAgbiAmJiAoaSA9IERuKG4pLCBBID0gZS50aHVtYm5haWwud2lkdGgsIHQgPSBlLnRodW1ibmFpbC5oZWlnaHQpOwogICAgfSBjYXRjaCB7CiAgICB9CiAgdmFyIGYgPSAyNCwgdSA9IE1hdGguZmxvb3IoKEEgKiBmICsgMzEpIC8gMzIpICogNCwgbyA9IDEsIGwgPSB1ICogdCAqIG8sIHMgPSBpLmxlbmd0aDsKICBVKHIsIDEpLCBVKHIsIEEpLCBVKHIsIHQpLCBVKHIsIHUpLCBVKHIsIGwpLCBVKHIsIHMpLCB4KHIsIGYpLCB4KHIsIG8pLCBOcihyLCBpKTsKfSk7CkIwKDEwNTcsIGZ1bmN0aW9uKHIpIHsKICByZXR1cm4gci52ZXJzaW9uSW5mbyAhPT0gdm9pZCAwOwp9LCBmdW5jdGlvbihyLCBlLCBhKSB7CiAgdmFyIEEgPSBTKHIpOwogIGlmIChBICE9PSAxKQogICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHZlcnNpb25JbmZvIHZlcnNpb24iKTsKICBlLnZlcnNpb25JbmZvID0gewogICAgaGFzUmVhbE1lcmdlZERhdGE6ICEhTyhyKSwKICAgIHdyaXRlck5hbWU6IHowKHIpLAogICAgcmVhZGVyTmFtZTogejAociksCiAgICBmaWxlVmVyc2lvbjogUyhyKQogIH0sIEgociwgYSgpKTsKfSwgZnVuY3Rpb24ociwgZSkgewogIHZhciBhID0gZS52ZXJzaW9uSW5mbzsKICBVKHIsIDEpLCBUKHIsIGEuaGFzUmVhbE1lcmdlZERhdGEgPyAxIDogMCksIG1yKHIsIGEud3JpdGVyTmFtZSksIG1yKHIsIGEucmVhZGVyTmFtZSksIFUociwgYS5maWxlVmVyc2lvbik7Cn0pOwpCMCg3ZTMsIGZ1bmN0aW9uKHIpIHsKICByZXR1cm4gci5pbWFnZVJlYWR5VmFyaWFibGVzICE9PSB2b2lkIDA7Cn0sIGZ1bmN0aW9uKHIsIGUsIGEpIHsKICBlLmltYWdlUmVhZHlWYXJpYWJsZXMgPSBZQShyLCBhKCkpOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgT0EociwgZS5pbWFnZVJlYWR5VmFyaWFibGVzKTsKfSk7CkIwKDcwMDEsIGZ1bmN0aW9uKHIpIHsKICByZXR1cm4gci5pbWFnZVJlYWR5RGF0YVNldHMgIT09IHZvaWQgMDsKfSwgZnVuY3Rpb24ociwgZSwgYSkgewogIGUuaW1hZ2VSZWFkeURhdGFTZXRzID0gWUEociwgYSgpKTsKfSwgZnVuY3Rpb24ociwgZSkgewogIE9BKHIsIGUuaW1hZ2VSZWFkeURhdGFTZXRzKTsKfSk7CkIwKDEwODgsIGZ1bmN0aW9uKHIpIHsKICByZXR1cm4gci5wYXRoU2VsZWN0aW9uU3RhdGUgIT09IHZvaWQgMDsKfSwgZnVuY3Rpb24ociwgZSwgYSkgewogIHZhciBBID0gbTAocik7CiAgZS5wYXRoU2VsZWN0aW9uU3RhdGUgPSBBLm51bGw7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICB2YXIgYSA9IHsgbnVsbDogZS5wYXRoU2VsZWN0aW9uU3RhdGUgfTsKICBwMChyLCAiIiwgIm51bGwiLCBhKTsKfSk7CnZhciB5aSA9IHUwKCJGcm1EIiwgIiIsIHsKICBhdXRvOiAiQXV0byIsCiAgbm9uZTogIk5vbmUiLAogIGRpc3Bvc2U6ICJEaXNwIgp9KTsKQjAoCiAgNGUzLAogIC8vIFBsdWctSW4gcmVzb3VyY2UocykKICBmdW5jdGlvbihyKSB7CiAgICByZXR1cm4gci5hbmltYXRpb25zICE9PSB2b2lkIDA7CiAgfSwKICBmdW5jdGlvbihyLCBlLCBhKSB7CiAgICB2YXIgQSA9IFIwKHIpOwogICAgaWYgKEEgPT09ICJtYW5pIikKICAgICAgSnIociwgIklSRlIiKSwgcHIociwgMSwgZnVuY3Rpb24oaSkgewogICAgICAgIGZvciAodmFyIG4gPSBmdW5jdGlvbigpIHsKICAgICAgICAgIEpyKHIsICI4QklNIik7CiAgICAgICAgICB2YXIgZiA9IFIwKHIpOwogICAgICAgICAgcHIociwgMSwgZnVuY3Rpb24odSkgewogICAgICAgICAgICBpZiAoZiA9PT0gIkFuRHMiKSB7CiAgICAgICAgICAgICAgdmFyIG8gPSBtMChyKTsKICAgICAgICAgICAgICBlLmFuaW1hdGlvbnMgPSB7CiAgICAgICAgICAgICAgICAvLyBkZXNjLkFGU3QgPz8/CiAgICAgICAgICAgICAgICBmcmFtZXM6IG8uRnJJbi5tYXAoZnVuY3Rpb24ocykgewogICAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgIGlkOiBzLkZySUQsCiAgICAgICAgICAgICAgICAgICAgZGVsYXk6IChzLkZyRGwgfHwgMCkgLyAxMDAsCiAgICAgICAgICAgICAgICAgICAgZGlzcG9zZTogcy5GckRzID8geWkuZGVjb2RlKHMuRnJEcykgOiAiYXV0byIKICAgICAgICAgICAgICAgICAgICAvLyBtaXNzaW5nID09IGF1dG8KICAgICAgICAgICAgICAgICAgICAvLyB4LkZyR0EgPz8/CiAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgIGFuaW1hdGlvbnM6IG8uRlN0cy5tYXAoZnVuY3Rpb24ocykgewogICAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgIGlkOiBzLkZzSUQsCiAgICAgICAgICAgICAgICAgICAgZnJhbWVzOiBzLkZzRnIsCiAgICAgICAgICAgICAgICAgICAgcmVwZWF0czogcy5MQ250LAogICAgICAgICAgICAgICAgICAgIGFjdGl2ZUZyYW1lOiBzLkFGcm0gfHwgMAogICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9IGVsc2UgaWYgKGYgPT09ICJSb2xsIikgewogICAgICAgICAgICAgIHZhciBsID0gWTAociwgdSgpKTsKICAgICAgICAgICAgICByLmxvZ0RldkZlYXR1cmVzICYmIHIubG9nKCIjNDAwMCBSb2xsIiwgbCk7CiAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgIHIubG9nTWlzc2luZ0ZlYXR1cmVzICYmIHIubG9nKCJVbmhhbmRsZWQgc3Vic2VjdGlvbiBpbiAjNDAwMCIsIGYpOwogICAgICAgICAgfSk7CiAgICAgICAgfTsgaSgpID4gMDsgKQogICAgICAgICAgbigpOwogICAgICB9KTsKICAgIGVsc2UgaWYgKEEgPT09ICJtb3B0IikgewogICAgICB2YXIgdCA9IFkwKHIsIGEoKSk7CiAgICAgIHIubG9nRGV2RmVhdHVyZXMgJiYgci5sb2coIiM0MDAwIG1vcHQiLCB0KTsKICAgIH0gZWxzZQogICAgICByLmxvZ01pc3NpbmdGZWF0dXJlcyAmJiByLmxvZygiVW5oYW5kbGVkIGtleSBpbiAjNDAwMDoiLCBBKTsKICB9LAogIGZ1bmN0aW9uKHIsIGUpIHsKICAgIGUuYW5pbWF0aW9ucyAmJiAobjAociwgIm1hbmkiKSwgbjAociwgIklSRlIiKSwgZXIociwgMSwgZnVuY3Rpb24oKSB7CiAgICAgIG4wKHIsICI4QklNIiksIG4wKHIsICJBbkRzIiksIGVyKHIsIDEsIGZ1bmN0aW9uKCkgewogICAgICAgIGZvciAodmFyIGEgPSB7CiAgICAgICAgICAvLyBBRlN0OiAwLCAvLyA/Pz8KICAgICAgICAgIEZySW46IFtdLAogICAgICAgICAgRlN0czogW10KICAgICAgICB9LCBBID0gMDsgQSA8IGUuYW5pbWF0aW9ucy5mcmFtZXMubGVuZ3RoOyBBKyspIHsKICAgICAgICAgIHZhciB0ID0gZS5hbmltYXRpb25zLmZyYW1lc1tBXSwgaSA9IHsKICAgICAgICAgICAgRnJJRDogdC5pZAogICAgICAgICAgfTsKICAgICAgICAgIHQuZGVsYXkgJiYgKGkuRnJEbCA9IHQuZGVsYXkgKiAxMDAgfCAwKSwgaS5GckRzID0geWkuZW5jb2RlKHQuZGlzcG9zZSksIGEuRnJJbi5wdXNoKGkpOwogICAgICAgIH0KICAgICAgICBmb3IgKHZhciBBID0gMDsgQSA8IGUuYW5pbWF0aW9ucy5hbmltYXRpb25zLmxlbmd0aDsgQSsrKSB7CiAgICAgICAgICB2YXIgbiA9IGUuYW5pbWF0aW9ucy5hbmltYXRpb25zW0FdLCBmID0gewogICAgICAgICAgICBGc0lEOiBuLmlkLAogICAgICAgICAgICBBRnJtOiBuLmFjdGl2ZUZyYW1lIHwgMCwKICAgICAgICAgICAgRnNGcjogbi5mcmFtZXMsCiAgICAgICAgICAgIExDbnQ6IG4ucmVwZWF0cyB8IDAKICAgICAgICAgIH07CiAgICAgICAgICBhLkZTdHMucHVzaChmKTsKICAgICAgICB9CiAgICAgICAgcDAociwgIiIsICJudWxsIiwgYSk7CiAgICAgIH0pOwogICAgfSkpOwogIH0KKTsKdmFyIFBsID0gZnVuY3Rpb24ociwgZSkgewogIHZhciBhID0ge307CiAgZm9yICh2YXIgQSBpbiByKSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwociwgQSkgJiYgZS5pbmRleE9mKEEpIDwgMCAmJiAoYVtBXSA9IHJbQV0pOwogIGlmIChyICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT0gImZ1bmN0aW9uIikKICAgIGZvciAodmFyIHQgPSAwLCBBID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhyKTsgdCA8IEEubGVuZ3RoOyB0KyspCiAgICAgIGUuaW5kZXhPZihBW3RdKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHIsIEFbdF0pICYmIChhW0FbdF1dID0gcltBW3RdXSk7CiAgcmV0dXJuIGE7Cn0sIEQxID0gWwogIDAsCiAgMSwKICAzLAogIDIKICAvKiBDb2xvck1vZGUuSW5kZXhlZCAqLwpdLCBZbCA9IFsiYml0bWFwIiwgImdyYXlzY2FsZSIsICJpbmRleGVkIiwgIlJHQiIsICJDTVlLIiwgIm11bHRpY2hhbm5lbCIsICJkdW90b25lIiwgImxhYiJdOwpmdW5jdGlvbiB5ZShyKSB7CiAgZm9yICh2YXIgZSA9IHIud2lkdGggKiByLmhlaWdodCAqIDQsIGEgPSAwOyBhIDwgZTsgYSArPSA0KSB7CiAgICB2YXIgQSA9IHIuZGF0YVthXTsKICAgIHIuZGF0YVthICsgMV0gPSBBLCByLmRhdGFbYSArIDJdID0gQTsKICB9Cn0KZnVuY3Rpb24gS2EociwgZSwgYSkgewogIHZhciBBID0gbmV3IERhdGFWaWV3KHIsIGUsIGEpOwogIHJldHVybiB7IHZpZXc6IEEsIG9mZnNldDogMCwgc3RyaWN0OiAhMSwgZGVidWc6ICExLCBsYXJnZTogITEsIGdsb2JhbEFscGhhOiAhMSwgbG9nOiBjb25zb2xlLmxvZyB9Owp9CmZ1bmN0aW9uIFpBKHIsIGUpIHsKICBpZiAoci5zdHJpY3QpCiAgICB0aHJvdyBuZXcgRXJyb3IoZSk7CiAgci5kZWJ1ZyAmJiByLmxvZyhlKTsKfQpmdW5jdGlvbiBPKHIpIHsKICByZXR1cm4gci5vZmZzZXQgKz0gMSwgci52aWV3LmdldFVpbnQ4KHIub2Zmc2V0IC0gMSk7Cn0KZnVuY3Rpb24gT2wocikgewogIHJldHVybiByLnZpZXcuZ2V0VWludDgoci5vZmZzZXQpOwp9CmZ1bmN0aW9uIGcwKHIpIHsKICByZXR1cm4gci5vZmZzZXQgKz0gMiwgci52aWV3LmdldEludDE2KHIub2Zmc2V0IC0gMiwgITEpOwp9CmZ1bmN0aW9uIFAocikgewogIHJldHVybiByLm9mZnNldCArPSAyLCByLnZpZXcuZ2V0VWludDE2KHIub2Zmc2V0IC0gMiwgITEpOwp9CmZ1bmN0aW9uIFVsKHIpIHsKICByZXR1cm4gci5vZmZzZXQgKz0gMiwgci52aWV3LmdldFVpbnQxNihyLm9mZnNldCAtIDIsICEwKTsKfQpmdW5jdGlvbiBMKHIpIHsKICByZXR1cm4gci5vZmZzZXQgKz0gNCwgci52aWV3LmdldEludDMyKHIub2Zmc2V0IC0gNCwgITEpOwp9CmZ1bmN0aW9uIEVpKHIpIHsKICByZXR1cm4gci5vZmZzZXQgKz0gNCwgci52aWV3LmdldEludDMyKHIub2Zmc2V0IC0gNCwgITApOwp9CmZ1bmN0aW9uIFMocikgewogIHJldHVybiByLm9mZnNldCArPSA0LCByLnZpZXcuZ2V0VWludDMyKHIub2Zmc2V0IC0gNCwgITEpOwp9CmZ1bmN0aW9uIFJyKHIpIHsKICByZXR1cm4gci5vZmZzZXQgKz0gNCwgci52aWV3LmdldEZsb2F0MzIoci5vZmZzZXQgLSA0LCAhMSk7Cn0KZnVuY3Rpb24gSXIocikgewogIHJldHVybiByLm9mZnNldCArPSA4LCByLnZpZXcuZ2V0RmxvYXQ2NChyLm9mZnNldCAtIDgsICExKTsKfQpmdW5jdGlvbiBocihyKSB7CiAgcmV0dXJuIEwocikgLyA2NTUzNjsKfQpmdW5jdGlvbiBHcihyKSB7CiAgcmV0dXJuIEwocikgLyAoMSA8PCAyNCk7Cn0KZnVuY3Rpb24gWTAociwgZSkgewogIHZhciBhID0gci52aWV3LmJ5dGVPZmZzZXQgKyByLm9mZnNldDsKICBpZiAoci5vZmZzZXQgKz0gZSwgYSArIGUgPiByLnZpZXcuYnVmZmVyLmJ5dGVMZW5ndGgpIHsKICAgIGlmIChaQShyLCAiUmVhZGluZyBieXRlcyBleGNlZWRpbmcgYnVmZmVyIGxlbmd0aCIpLCBlID4gMTAwICogMTAyNCAqIDEwMjQpCiAgICAgIHRocm93IG5ldyBFcnJvcigiUmVhZGluZyBwYXN0IGVuZCBvZiBmaWxlIik7CiAgICB2YXIgQSA9IG5ldyBVaW50OEFycmF5KGUpLCB0ID0gTWF0aC5taW4oZSwgci52aWV3LmJ5dGVMZW5ndGggLSBhKTsKICAgIHJldHVybiB0ID4gMCAmJiBBLnNldChuZXcgVWludDhBcnJheShyLnZpZXcuYnVmZmVyLCBhLCB0KSksIEE7CiAgfSBlbHNlCiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoci52aWV3LmJ1ZmZlciwgYSwgZSk7Cn0KZnVuY3Rpb24gUjAocikgewogIHJldHVybiB4MShyLCA0KTsKfQpmdW5jdGlvbiBqbChyLCBlKSB7CiAgdmFyIGEgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHIudmlldy5nZXRVaW50OChlKSkgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKHIudmlldy5nZXRVaW50OChlICsgMSkpICsgU3RyaW5nLmZyb21DaGFyQ29kZShyLnZpZXcuZ2V0VWludDgoZSArIDIpKSArIFN0cmluZy5mcm9tQ2hhckNvZGUoci52aWV3LmdldFVpbnQ4KGUgKyAzKSk7CiAgcmV0dXJuIGEgPT0gIjhCSU0iIHx8IGEgPT0gIjhCNjQiOwp9CmZ1bmN0aW9uIHhyKHIsIGUpIHsKICBmb3IgKHZhciBhID0gTyhyKSwgQSA9IGEgPyB4MShyLCBhKSA6ICIiOyArK2EgJSBlOyApCiAgICByLm9mZnNldCsrOwogIHJldHVybiBBOwp9CmZ1bmN0aW9uIHowKHIpIHsKICB2YXIgZSA9IFMocik7CiAgcmV0dXJuIFVBKHIsIGUpOwp9CmZ1bmN0aW9uIFVBKHIsIGUpIHsKICBmb3IgKHZhciBhID0gIiI7IGUtLTsgKSB7CiAgICB2YXIgQSA9IFAocik7CiAgICAoQSB8fCBlID4gMCkgJiYgKGEgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShBKSk7CiAgfQogIHJldHVybiBhOwp9CmZ1bmN0aW9uIFFsKHIsIGUpIHsKICBmb3IgKHZhciBhID0gIiI7IGUtLTsgKSB7CiAgICB2YXIgQSA9IFVsKHIpOwogICAgKEEgfHwgZSA+IDApICYmIChhICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoQSkpOwogIH0KICByZXR1cm4gYTsKfQpmdW5jdGlvbiBTZShyLCBlKSB7CiAgZm9yICh2YXIgYSA9ICIiOyBlLS07ICkKICAgIGEgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShPKHIpKTsKICByZXR1cm4gYTsKfQpmdW5jdGlvbiBIKHIsIGUpIHsKICByLm9mZnNldCArPSBlOwp9CmZ1bmN0aW9uIEpyKHIsIGUsIGEpIHsKICB2YXIgQSA9IHIub2Zmc2V0LCB0ID0gUjAocik7CiAgaWYgKHQgIT09IGUgJiYgdCAhPT0gYSkKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzaWduYXR1cmU6ICciLmNvbmNhdCh0LCAiJyBhdCAweCIpLmNvbmNhdChBLnRvU3RyaW5nKDE2KSkpOwp9CmZ1bmN0aW9uIHgxKHIsIGUpIHsKICBmb3IgKHZhciBhID0gWTAociwgZSksIEEgPSAiIiwgdCA9IDA7IHQgPCBhLmxlbmd0aDsgdCsrKQogICAgQSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGFbdF0pOwogIHJldHVybiBBOwp9CmZ1bmN0aW9uIEpsKHIpIHsKICByZXR1cm4gciA9PT0gIjhCSU0iIHx8IHIgPT09ICJNZVNhIiB8fCByID09PSAiQWdIZyIgfHwgciA9PT0gIlBIVVQiIHx8IHIgPT09ICJEQ1NSIjsKfQpmdW5jdGlvbiBIbChyLCBlKSB7CiAgdmFyIGE7CiAgZSA9PT0gdm9pZCAwICYmIChlID0ge30pLCBKcihyLCAiOEJQUyIpOwogIHZhciBBID0gUChyKTsKICBpZiAoQSAhPT0gMSAmJiBBICE9PSAyKQogICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIFBTRCBmaWxlIHZlcnNpb246ICIuY29uY2F0KEEpKTsKICBIKHIsIDYpOwogIHZhciB0ID0gUChyKSwgaSA9IFMociksIG4gPSBTKHIpLCBmID0gUChyKSwgdSA9IFAociksIG8gPSBBID09PSAxID8gM2U0IDogM2U1OwogIGlmIChuID4gbyB8fCBpID4gbykKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzaXplOiAiLmNvbmNhdChuLCAieCIpLmNvbmNhdChpKSk7CiAgaWYgKHQgPiAxNikKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjaGFubmVsIGNvdW50OiAiLmNvbmNhdCh0KSk7CiAgaWYgKCFbMSwgOCwgMTYsIDMyXS5pbmNsdWRlcyhmKSkKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBiaXRzUGVyQ2hhbm5lbDogIi5jb25jYXQoZikpOwogIGlmIChEMS5pbmRleE9mKHUpID09PSAtMSkKICAgIHRocm93IG5ldyBFcnJvcigiQ29sb3IgbW9kZSBub3Qgc3VwcG9ydGVkOiAiLmNvbmNhdCgoYSA9IFlsW3VdKSAhPT0gbnVsbCAmJiBhICE9PSB2b2lkIDAgPyBhIDogdSkpOwogIHZhciBsID0geyB3aWR0aDogbiwgaGVpZ2h0OiBpLCBjaGFubmVsczogdCwgYml0c1BlckNoYW5uZWw6IGYsIGNvbG9yTW9kZTogdSB9OwogIE9iamVjdC5hc3NpZ24ociwgZSksIHIubGFyZ2UgPSBBID09PSAyLCByLmdsb2JhbEFscGhhID0gITEsIHByKHIsIDEsIGZ1bmN0aW9uKGspIHsKICAgIGlmIChrKCkpIHsKICAgICAgaWYgKHUgPT09IDIpIHsKICAgICAgICBpZiAoaygpICE9IDc2OCkKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb2xvciBwYWxldHRlIHNpemUiKTsKICAgICAgICBsLnBhbGV0dGUgPSBbXTsKICAgICAgICBmb3IgKHZhciBFID0gMDsgRSA8IDI1NjsgRSsrKQogICAgICAgICAgbC5wYWxldHRlLnB1c2goeyByOiBPKHIpLCBnOiAwLCBiOiAwIH0pOwogICAgICAgIGZvciAodmFyIEUgPSAwOyBFIDwgMjU2OyBFKyspCiAgICAgICAgICBsLnBhbGV0dGVbRV0uZyA9IE8ocik7CiAgICAgICAgZm9yICh2YXIgRSA9IDA7IEUgPCAyNTY7IEUrKykKICAgICAgICAgIGwucGFsZXR0ZVtFXS5iID0gTyhyKTsKICAgICAgfQogICAgICBIKHIsIGsoKSk7CiAgICB9CiAgfSk7CiAgdmFyIHMgPSB7fTsKICBwcihyLCAxLCBmdW5jdGlvbihrKSB7CiAgICBmb3IgKHZhciBFID0gZnVuY3Rpb24oKSB7CiAgICAgIE0xKHIsIEpsKTsKICAgICAgdmFyIGcgPSBQKHIpOwogICAgICB4cihyLCAyKSwgcHIociwgMiwgZnVuY3Rpb24odykgewogICAgICAgIHZhciBCID0gUzFbZ10sIG0gPSBnID09PSAxMDM2ICYmICEhci5za2lwVGh1bWJuYWlsOwogICAgICAgIGlmIChCICYmICFtKQogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgQi5yZWFkKHIsIHMsIHcpOwogICAgICAgICAgfSBjYXRjaCAocCkgewogICAgICAgICAgICBpZiAoci50aHJvd0Zvck1pc3NpbmdGZWF0dXJlcykKICAgICAgICAgICAgICB0aHJvdyBwOwogICAgICAgICAgICBIKHIsIHcoKSk7CiAgICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgSChyLCB3KCkpOwogICAgICB9KTsKICAgIH07IGsoKSA+IDA7ICkKICAgICAgRSgpOwogIH0pLCBzLmxheWVyc0dyb3VwLCBzLmxheWVyR3JvdXBzRW5hYmxlZElkOwogIHZhciBjID0gUGwocywgWyJsYXllcnNHcm91cCIsICJsYXllckdyb3Vwc0VuYWJsZWRJZCJdKTsKICBPYmplY3Qua2V5cyhjKSAmJiAobC5pbWFnZVJlc291cmNlcyA9IGMpLCBwcihyLCAxLCBmdW5jdGlvbihrKSB7CiAgICBpZiAocHIociwgMiwgZnVuY3Rpb24oZykgewogICAgICBqQShyLCBsLCBzKSwgSChyLCBnKCkpOwogICAgfSwgdm9pZCAwLCByLmxhcmdlKSwgaygpID4gMCkgewogICAgICB2YXIgRSA9ICRsKHIpOwogICAgICBFICYmIChsLmdsb2JhbExheWVyTWFza0luZm8gPSBFKTsKICAgIH0gZWxzZQogICAgICBIKHIsIGsoKSk7CiAgICBmb3IgKDsgaygpID4gMDsgKSB7CiAgICAgIGZvciAoOyBrKCkgJiYgT2wocikgPT09IDA7ICkKICAgICAgICBIKHIsIDEpOwogICAgICBrKCkgPj0gMTIgPyBUMShyLCBsLCBsLCBzKSA6IEgociwgaygpKTsKICAgIH0KICB9LCB2b2lkIDAsIHIubGFyZ2UpOwogIHZhciBkID0gbC5jaGlsZHJlbiAmJiBsLmNoaWxkcmVuLmxlbmd0aCwgdiA9IHIuc2tpcENvbXBvc2l0ZUltYWdlRGF0YSAmJiAoci5za2lwTGF5ZXJJbWFnZURhdGEgfHwgZCk7CiAgcmV0dXJuIHYgfHwgZTQociwgbCksIGw7Cn0KZnVuY3Rpb24gakEociwgZSwgYSkgewogIHZhciBBLCB0LCBpID0gYS5sYXllcnNHcm91cCwgbiA9IGkgPT09IHZvaWQgMCA/IFtdIDogaSwgZiA9IGEubGF5ZXJHcm91cHNFbmFibGVkSWQsIHUgPSBmID09PSB2b2lkIDAgPyBbXSA6IGYsIG8gPSBnMChyKTsKICBvIDwgMCAmJiAoci5nbG9iYWxBbHBoYSA9ICEwLCBvID0gLW8pOwogIGZvciAodmFyIGwgPSBbXSwgcyA9IFtdLCBjID0gMDsgYyA8IG87IGMrKykgewogICAgdmFyIGQgPSB6bChyLCBlLCBhKSwgdiA9IGQubGF5ZXIsIGsgPSBkLmNoYW5uZWxzOwogICAgbltjXSAhPT0gdm9pZCAwICYmICh2LmxpbmtHcm91cCA9IG5bY10pLCB1W2NdICE9PSB2b2lkIDAgJiYgKHYubGlua0dyb3VwRW5hYmxlZCA9ICEhdVtjXSksIGwucHVzaCh2KSwgcy5wdXNoKGspOwogIH0KICBmb3IgKHZhciBjID0gMDsgYyA8IG87IGMrKykKICAgIHFsKHIsIGUsIGxbY10sIHNbY10pOwogIGUuY2hpbGRyZW4gfHwgKGUuY2hpbGRyZW4gPSBbXSk7CiAgZm9yICh2YXIgRSA9IFtlXSwgYyA9IGwubGVuZ3RoIC0gMTsgYyA+PSAwOyBjLS0pIHsKICAgIHZhciBnID0gbFtjXSwgdyA9IGcuc2VjdGlvbkRpdmlkZXIgPyBnLnNlY3Rpb25EaXZpZGVyLnR5cGUgOiAwOwogICAgdyA9PT0gMSB8fCB3ID09PSAyID8gKGcub3BlbmVkID0gdyA9PT0gMSwgZy5jaGlsZHJlbiA9IFtdLCAhKChBID0gZy5zZWN0aW9uRGl2aWRlcikgPT09IG51bGwgfHwgQSA9PT0gdm9pZCAwKSAmJiBBLmtleSAmJiAoZy5ibGVuZE1vZGUgPSAodCA9IEphW2cuc2VjdGlvbkRpdmlkZXIua2V5XSkgIT09IG51bGwgJiYgdCAhPT0gdm9pZCAwID8gdCA6IGcuYmxlbmRNb2RlKSwgRVtFLmxlbmd0aCAtIDFdLmNoaWxkcmVuLnVuc2hpZnQoZyksIEUucHVzaChnKSkgOiB3ID09PSAzID8gRS5wb3AoKSA6IEVbRS5sZW5ndGggLSAxXS5jaGlsZHJlbi51bnNoaWZ0KGcpOwogIH0KfQpmdW5jdGlvbiB6bChyLCBlLCBhKSB7CiAgdmFyIEEgPSB7fTsKICBBLnRvcCA9IEwociksIEEubGVmdCA9IEwociksIEEuYm90dG9tID0gTChyKSwgQS5yaWdodCA9IEwocik7CiAgZm9yICh2YXIgdCA9IFAociksIGkgPSBbXSwgbiA9IDA7IG4gPCB0OyBuKyspIHsKICAgIHZhciBmID0gZzAociksIHUgPSBTKHIpOwogICAgaWYgKHIubGFyZ2UpIHsKICAgICAgaWYgKHUgIT09IDApCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJTaXplcyBsYXJnZXIgdGhhbiA0R0IgYXJlIG5vdCBzdXBwb3J0ZWQiKTsKICAgICAgdSA9IFMocik7CiAgICB9CiAgICBpLnB1c2goeyBpZDogZiwgbGVuZ3RoOiB1IH0pOwogIH0KICBKcihyLCAiOEJJTSIpOwogIHZhciBvID0gUjAocik7CiAgaWYgKCFKYVtvXSkKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBibGVuZCBtb2RlOiAnIi5jb25jYXQobywgIiciKSk7CiAgQS5ibGVuZE1vZGUgPSBKYVtvXSwgQS5vcGFjaXR5ID0gTyhyKSAvIDI1NSwgQS5jbGlwcGluZyA9IE8ocikgPT09IDE7CiAgdmFyIGwgPSBPKHIpOwogIHJldHVybiBBLnRyYW5zcGFyZW5jeVByb3RlY3RlZCA9IChsICYgMSkgIT09IDAsIEEuaGlkZGVuID0gKGwgJiAyKSAhPT0gMCwgbCAmIDMyICYmIChBLmVmZmVjdHNPcGVuID0gITApLCBIKHIsIDEpLCBwcihyLCAxLCBmdW5jdGlvbihzKSB7CiAgICBMbChyLCBBKTsKICAgIHZhciBjID0gS2wocik7CiAgICBmb3IgKGMgJiYgKEEuYmxlbmRpbmdSYW5nZXMgPSBjKSwgQS5uYW1lID0geHIociwgMSk7IHMoKSA+IDQgJiYgIWpsKHIsIHIub2Zmc2V0KTsgKQogICAgICByLm9mZnNldCsrOwogICAgZm9yICg7IHMoKSA+PSAxMjsgKQogICAgICBUMShyLCBBLCBlLCBhKTsKICAgIEgociwgcygpKTsKICB9KSwgeyBsYXllcjogQSwgY2hhbm5lbHM6IGkgfTsKfQpmdW5jdGlvbiBMbChyLCBlKSB7CiAgcmV0dXJuIHByKHIsIDEsIGZ1bmN0aW9uKGEpIHsKICAgIGlmIChhKCkpIHsKICAgICAgdmFyIEEgPSB7fTsKICAgICAgZS5tYXNrID0gQSwgQS50b3AgPSBMKHIpLCBBLmxlZnQgPSBMKHIpLCBBLmJvdHRvbSA9IEwociksIEEucmlnaHQgPSBMKHIpLCBBLmRlZmF1bHRDb2xvciA9IE8ocik7CiAgICAgIHZhciB0ID0gTyhyKTsKICAgICAgaWYgKEEucG9zaXRpb25SZWxhdGl2ZVRvTGF5ZXIgPSAodCAmIDEpICE9PSAwLCBBLmRpc2FibGVkID0gKHQgJiAyKSAhPT0gMCwgQS5mcm9tVmVjdG9yRGF0YSA9ICh0ICYgOCkgIT09IDAsIGEoKSA+PSAxOCkgewogICAgICAgIHZhciBpID0ge307CiAgICAgICAgZS5yZWFsTWFzayA9IGk7CiAgICAgICAgdmFyIG4gPSBPKHIpOwogICAgICAgIGkucG9zaXRpb25SZWxhdGl2ZVRvTGF5ZXIgPSAobiAmIDEpICE9PSAwLCBpLmRpc2FibGVkID0gKG4gJiAyKSAhPT0gMCwgaS5mcm9tVmVjdG9yRGF0YSA9IChuICYgOCkgIT09IDAsIGkuZGVmYXVsdENvbG9yID0gTyhyKSwgaS50b3AgPSBMKHIpLCBpLmxlZnQgPSBMKHIpLCBpLmJvdHRvbSA9IEwociksIGkucmlnaHQgPSBMKHIpOwogICAgICB9CiAgICAgIGlmICh0ICYgMTYpIHsKICAgICAgICB2YXIgZiA9IE8ocik7CiAgICAgICAgZiAmIDEgJiYgKEEudXNlck1hc2tEZW5zaXR5ID0gTyhyKSAvIDI1NSksIGYgJiAyICYmIChBLnVzZXJNYXNrRmVhdGhlciA9IElyKHIpKSwgZiAmIDQgJiYgKEEudmVjdG9yTWFza0RlbnNpdHkgPSBPKHIpIC8gMjU1KSwgZiAmIDggJiYgKEEudmVjdG9yTWFza0ZlYXRoZXIgPSBJcihyKSk7CiAgICAgIH0KICAgICAgSChyLCBhKCkpOwogICAgfQogIH0pOwp9CmZ1bmN0aW9uIG5lKHIpIHsKICByZXR1cm4gW08ociksIE8ociksIE8ociksIE8ocildOwp9CmZ1bmN0aW9uIEtsKHIpIHsKICByZXR1cm4gcHIociwgMSwgZnVuY3Rpb24oZSkgewogICAgZm9yICh2YXIgYSA9IG5lKHIpLCBBID0gbmUociksIHQgPSBbXTsgZSgpID4gMDsgKSB7CiAgICAgIHZhciBpID0gbmUociksIG4gPSBuZShyKTsKICAgICAgdC5wdXNoKHsgc291cmNlUmFuZ2U6IGksIGRlc3RSYW5nZTogbiB9KTsKICAgIH0KICAgIHJldHVybiB7IGNvbXBvc2l0ZUdyYXlCbGVuZFNvdXJjZTogYSwgY29tcG9zaXRlR3JhcGhCbGVuZERlc3RpbmF0aW9uUmFuZ2U6IEEsIHJhbmdlczogdCB9OwogIH0pOwp9CmZ1bmN0aW9uIHFsKHIsIGUsIGEsIEEpIHsKICBpZiAoIXIuc2tpcExheWVySW1hZ2VEYXRhKSB7CiAgICB2YXIgdCA9IGUuY29sb3JNb2RlLCBpID0gdCA9PT0gdm9pZCAwID8gMyA6IHQsIG4gPSBlLmJpdHNQZXJDaGFubmVsLCBmID0gbiA9PT0gdm9pZCAwID8gOCA6IG47CiAgICBhLnJhd0RhdGEgPSB7IGNvbG9yTW9kZTogaSwgYml0c1BlckNoYW5uZWw6IGYsIGNoYW5uZWxzOiBbXSwgbGFyZ2U6IHIubGFyZ2UgfTsKICAgIGZvciAodmFyIHUgPSAwLCBvID0gQTsgdSA8IG8ubGVuZ3RoOyB1KyspIHsKICAgICAgdmFyIGwgPSBvW3VdLCBzID0gci5vZmZzZXQsIGMgPSAwLCBkID0gdm9pZCAwOwogICAgICBpZiAobC5sZW5ndGggPT09IDEpCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNoYW5uZWwgbGVuZ3RoIik7CiAgICAgIGlmIChsLmxlbmd0aCkgewogICAgICAgIGlmIChjID0gUChyKSwgYyA+IDMgJiYgKHIub2Zmc2V0IC09IDEsIGMgPSBQKHIpKSwgYyA+IDMgJiYgKHIub2Zmc2V0IC09IDMsIGMgPSBQKHIpKSwgYyA+IDMpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29tcHJlc3Npb246ICIuY29uY2F0KGMpKTsKICAgICAgICBsLmxlbmd0aCA+IDIgJiYgKGQgPSBZMChyLCBsLmxlbmd0aCAtIDIpKTsKICAgICAgfQogICAgICByLm9mZnNldCA9IHMgKyBsLmxlbmd0aCwgYS5yYXdEYXRhLmNoYW5uZWxzLnB1c2goeyBpZDogbC5pZCwgY29tcHJlc3Npb246IGMsIGRhdGE6IGQgfSk7CiAgICB9CiAgICByLnVzZVJhd0RhdGEgfHwgTjEoYSwgISFyLnVzZUltYWdlRGF0YSwgISFyLnRocm93Rm9yTWlzc2luZ0ZlYXR1cmVzKTsKICB9Cn0KZnVuY3Rpb24gWmkociwgZSkgewogIGZvciAodmFyIGEgPSByLmRhdGEsIEEgPSBhIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5ID8gMSA6IGEgaW5zdGFuY2VvZiBVaW50MTZBcnJheSA/IDY1NTM1IDogMjU1LCB0ID0gKGUgPyA0IDogMykgfCAwLCBpID0gYS5sZW5ndGggfCAwLCBuID0gKGUgPyA1IDogNCkgfCAwLCBmID0gdDsgZiA8IGk7IGYgPSBmICsgbiB8IDApCiAgICBhW2ZdID0gQTsKfQpmdW5jdGlvbiBOMShyLCBlLCBhKSB7CiAgaWYgKHIucmF3RGF0YSkgewogICAgdmFyIEEgPSByLnJhd0RhdGEsIHQgPSBBLmNvbG9yTW9kZSwgaSA9IEEuYml0c1BlckNoYW5uZWwsIG4gPSBBLmNoYW5uZWxzLCBmID0gQS5sYXJnZSwgdSA9IChyLnJpZ2h0IHx8IDApIC0gKHIubGVmdCB8fCAwKSwgbyA9IChyLmJvdHRvbSB8fCAwKSAtIChyLnRvcCB8fCAwKSwgbCA9IHQgPT09IDQsIHMsIGMgPSAhMTsKICAgIGlmICh1ICYmIG8pCiAgICAgIGlmIChsKSB7CiAgICAgICAgaWYgKGkgIT09IDgpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJpdHNQZXJDaGFubmVsIE5vdCBzdXBwcm90ZWQiKTsKICAgICAgICBzID0geyB3aWR0aDogdSwgaGVpZ2h0OiBvLCBkYXRhOiBuZXcgVWludDhDbGFtcGVkQXJyYXkodSAqIG8gKiA1KSB9OwogICAgICB9IGVsc2UKICAgICAgICBzID0gQkEodSwgbywgaSk7CiAgICBmb3IgKHZhciBkID0gMCwgdiA9IG47IGQgPCB2Lmxlbmd0aDsgZCsrKSB7CiAgICAgIHZhciBrID0gdltkXSwgRSA9IGsuaWQsIGcgPSBrLmNvbXByZXNzaW9uLCB3ID0gay5kYXRhOwogICAgICBpZiAodykgewogICAgICAgIHZhciBCID0gS2Eody5idWZmZXIsIHcuYnl0ZU9mZnNldCwgdy5ieXRlTGVuZ3RoKTsKICAgICAgICBpZiAoRSA9PT0gLTIgfHwgRSA9PT0gLTMpIHsKICAgICAgICAgIHZhciBtID0gRSA9PT0gLTIgPyByLm1hc2sgOiByLnJlYWxNYXNrOwogICAgICAgICAgaWYgKCFtKQogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk1pc3NpbmcgbGF5ZXIgIi5jb25jYXQoRSA9PT0gLTIgPyAibWFzayIgOiAicmVhbCBtYXNrIiwgIiBkYXRhIikpOwogICAgICAgICAgdmFyIHAgPSAobS5yaWdodCB8fCAwKSAtIChtLmxlZnQgfHwgMCksIFcgPSAobS5ib3R0b20gfHwgMCkgLSAobS50b3AgfHwgMCk7CiAgICAgICAgICBpZiAocCA8IDAgfHwgVyA8IDAgfHwgcCA+IDNlNCB8fCBXID4gM2U0KQogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbWFzayBzaXplIik7CiAgICAgICAgICBpZiAocCAmJiBXKSB7CiAgICAgICAgICAgIHZhciBDID0gQkEocCwgVywgaSk7CiAgICAgICAgICAgIEJpKEIsIHcuYnl0ZUxlbmd0aCwgQywgZywgcCwgVywgaSwgMCwgZiwgNCksIHllKEMpLCBaaShDLCAhMSksIGUgPyBtLmltYWdlRGF0YSA9IEMgOiBtLmNhbnZhcyA9IG1lKEMpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB2YXIgXyA9IFJuKEUsIGwpLCBOID0gczsKICAgICAgICAgIGlmIChfIDwgMCAmJiAoTiA9IHZvaWQgMCwgYSkpCiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQ2hhbm5lbCBub3Qgc3VwcG9ydGVkOiAiLmNvbmNhdChFKSk7CiAgICAgICAgICBCaShCLCB3LmJ5dGVMZW5ndGgsIE4sIGcsIHUsIG8sIGksIF8sIGYsIGwgPyA1IDogNCksIE4gJiYgdCA9PT0gMSAmJiB5ZShOKTsKICAgICAgICB9CiAgICAgICAgRSA9PT0gLTEgJiYgKGMgPSAhMCk7CiAgICAgIH0KICAgIH0KICAgIGlmIChzKSB7CiAgICAgIGlmIChjIHx8IFppKHMsIGwpLCBsKSB7CiAgICAgICAgdmFyIEQgPSBzOwogICAgICAgIHMgPSBIYShELndpZHRoLCBELmhlaWdodCksIFAxKEQsIHMsICExKTsKICAgICAgfQogICAgICBlID8gci5pbWFnZURhdGEgPSBzIDogci5jYW52YXMgPSBtZShzKTsKICAgIH0KICAgIGRlbGV0ZSByLnJhd0RhdGE7CiAgfQp9CmZ1bmN0aW9uIEJpKHIsIGUsIGEsIEEsIHQsIGksIG4sIGYsIHUsIG8pIHsKICBpZiAoZSkKICAgIGlmIChBID09PSAwKSB7CiAgICAgIGUgIT09IHQgKiBpICogTWF0aC5mbG9vcihuIC8gOCkgJiYgci5sb2coIkludmFsaWQgbGVuZ3RoICgiLmNvbmNhdChlLCAiLCAiKS5jb25jYXQodCAqIGkgKiBNYXRoLmZsb29yKG4gLyA4KSwgIikiKSk7CiAgICAgIHZhciBsID0gWTAociwgZSk7CiAgICAgIE8xKGwsIGEsIG4sIG8sIGYpOwogICAgfSBlbHNlIGlmIChBID09PSAxKQogICAgICBzYShyLCBhLCB0LCBpLCBuLCBvLCBbZl0sIHUpOwogICAgZWxzZSBpZiAoQSA9PT0gMikgewogICAgICB2YXIgbCA9IFkwKHIsIGUpOwogICAgICBJaShsLCBhLCB0LCBpLCBuLCBvLCBmLCAhMSk7CiAgICB9IGVsc2UgaWYgKEEgPT09IDMpIHsKICAgICAgdmFyIGwgPSBZMChyLCBlKTsKICAgICAgSWkobCwgYSwgdCwgaSwgbiwgbywgZiwgITApOwogICAgfSBlbHNlCiAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBDb21wcmVzc2lvbiB0eXBlOiAiLmNvbmNhdChBKSk7Cn0KZnVuY3Rpb24gJGwocikgewogIHJldHVybiBwcihyLCAxLCBmdW5jdGlvbihlKSB7CiAgICBpZiAoZSgpKSB7CiAgICAgIHZhciBhID0gUChyKSwgQSA9IFAociksIHQgPSBQKHIpLCBpID0gUChyKSwgbiA9IFAociksIGYgPSBQKHIpIC8gMjU1LCB1ID0gTyhyKTsKICAgICAgcmV0dXJuIEgociwgZSgpKSwgeyBvdmVybGF5Q29sb3JTcGFjZTogYSwgY29sb3JTcGFjZTE6IEEsIGNvbG9yU3BhY2UyOiB0LCBjb2xvclNwYWNlMzogaSwgY29sb3JTcGFjZTQ6IG4sIG9wYWNpdHk6IGYsIGtpbmQ6IHUgfTsKICAgIH0KICB9KTsKfQp2YXIgcjQgPSBbMCwgMSwgLTEsIDIsIC0yLCAzLCAtMywgNCwgLTRdOwpmdW5jdGlvbiBNMShyLCBlKSB7CiAgZm9yICh2YXIgYSA9IHIub2Zmc2V0LCBBID0gIiIsIHQgPSAwLCBpID0gcjQ7IHQgPCBpLmxlbmd0aDsgdCsrKSB7CiAgICB2YXIgbiA9IGlbdF07CiAgICB0cnkgewogICAgICByLm9mZnNldCA9IGEgKyBuLCBBID0gUjAocik7CiAgICB9IGNhdGNoIHsKICAgIH0KICAgIGlmIChlKEEpKQogICAgICBicmVhazsKICB9CiAgaWYgKCFlKEEpKQogICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHNpZ25hdHVyZTogJyIuY29uY2F0KEEsICInIGF0IDB4IikuY29uY2F0KGEudG9TdHJpbmcoMTYpKSk7CiAgcmV0dXJuIEE7Cn0KZnVuY3Rpb24gYTQocikgewogIHJldHVybiByID09PSAiOEJJTSIgfHwgciA9PT0gIjhCNjQiOwp9CmZ1bmN0aW9uIFQxKHIsIGUsIGEsIEEpIHsKICB2YXIgdCA9IE0xKHIsIGE0KSwgaSA9IFIwKHIpLCBuID0gdCA9PT0gIjhCNjQiIHx8IHIubGFyZ2UgJiYgWG4uaW5kZXhPZihpKSAhPT0gLTE7CiAgcHIociwgMiwgZnVuY3Rpb24oZikgewogICAgdmFyIHUgPSBFZVtpXTsKICAgIGlmICh1KQogICAgICB0cnkgewogICAgICAgIHUucmVhZChyLCBlLCBmLCBhLCBBKTsKICAgICAgfSBjYXRjaCAobykgewogICAgICAgIGlmIChyLnRocm93Rm9yTWlzc2luZ0ZlYXR1cmVzKQogICAgICAgICAgdGhyb3cgbzsKICAgICAgfQogICAgZWxzZQogICAgICByLmxvZ01pc3NpbmdGZWF0dXJlcyAmJiByLmxvZygiVW5oYW5kbGVkIGFkZGl0aW9uYWwgaW5mbzogIi5jb25jYXQoaSkpLCBIKHIsIGYoKSk7CiAgICBmKCkgJiYgKHIubG9nTWlzc2luZ0ZlYXR1cmVzICYmIHIubG9nKCJVbnJlYWQgIi5jb25jYXQoZigpLCAiIGJ5dGVzIGxlZnQgZm9yIGFkZGl0aW9uYWwgaW5mbzogIikuY29uY2F0KGkpKSwgSChyLCBmKCkpKTsKICB9LCAhMSwgbik7Cn0KZnVuY3Rpb24gQkEociwgZSwgYSwgQSkgewogIGlmIChBID09PSB2b2lkIDAgJiYgKEEgPSA0KSwgYSA9PT0gMSB8fCBhID09PSA4KQogICAgcmV0dXJuIEEgPT09IDQgPyBIYShyLCBlKSA6IHsgd2lkdGg6IHIsIGhlaWdodDogZSwgZGF0YTogbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHIgKiBlICogQSkgfTsKICBpZiAoYSA9PT0gMTYpCiAgICByZXR1cm4geyB3aWR0aDogciwgaGVpZ2h0OiBlLCBkYXRhOiBuZXcgVWludDE2QXJyYXkociAqIGUgKiBBKSB9OwogIGlmIChhID09PSAzMikKICAgIHJldHVybiB7IHdpZHRoOiByLCBoZWlnaHQ6IGUsIGRhdGE6IG5ldyBGbG9hdDMyQXJyYXkociAqIGUgKiBBKSB9OwogIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBiaXREZXB0aCAoIi5jb25jYXQoYSwgIikiKSk7Cn0KZnVuY3Rpb24gZTQociwgZSkgewogIHZhciBhLCBBID0gUChyKSwgdCA9IChhID0gZS5iaXRzUGVyQ2hhbm5lbCkgIT09IG51bGwgJiYgYSAhPT0gdm9pZCAwID8gYSA6IDg7CiAgaWYgKEQxLmluZGV4T2YoZS5jb2xvck1vZGUpID09PSAtMSkKICAgIHRocm93IG5ldyBFcnJvcigiQ29sb3IgbW9kZSBub3Qgc3VwcG9ydGVkOiAiLmNvbmNhdChlLmNvbG9yTW9kZSkpOwogIGlmIChBICE9PSAwICYmIEEgIT09IDEpCiAgICB0aHJvdyBuZXcgRXJyb3IoIkNvbXByZXNzaW9uIHR5cGUgbm90IHN1cHBvcnRlZDogIi5jb25jYXQoQSkpOwogIHZhciBpID0gQkEoZS53aWR0aCwgZS5oZWlnaHQsIHQpOwogIHN3aXRjaCAodmwoaSksIGUuY29sb3JNb2RlKSB7CiAgICBjYXNlIDA6IHsKICAgICAgaWYgKHQgIT09IDEpCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGJpdHNQZXJDaGFubmVsIGZvciBiaXRtYXAgY29sb3IgbW9kZSIpOwogICAgICB2YXIgbiA9IHZvaWQgMDsKICAgICAgaWYgKEEgPT09IDApCiAgICAgICAgbiA9IFkwKHIsIE1hdGguY2VpbChlLndpZHRoIC8gOCkgKiBlLmhlaWdodCk7CiAgICAgIGVsc2UgaWYgKEEgPT09IDEpCiAgICAgICAgbiA9IG5ldyBVaW50OEFycmF5KGUud2lkdGggKiBlLmhlaWdodCksIHNhKHIsIHsgZGF0YTogbiwgd2lkdGg6IGUud2lkdGgsIGhlaWdodDogZS5oZWlnaHQgfSwgZS53aWR0aCwgZS5oZWlnaHQsIDgsIDEsIFswXSwgci5sYXJnZSk7CiAgICAgIGVsc2UKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJpdG1hcCBjb21wcmVzc2lvbiBub3Qgc3VwcG9ydGVkOiAiLmNvbmNhdChBKSk7CiAgICAgIGtsKG4sIGkuZGF0YSwgZS53aWR0aCwgZS5oZWlnaHQpOwogICAgICBicmVhazsKICAgIH0KICAgIGNhc2UgMzoKICAgIGNhc2UgMTogewogICAgICB2YXIgZiA9IGUuY29sb3JNb2RlID09PSAxID8gWzBdIDogWzAsIDEsIDJdOwogICAgICBpZiAoZS5jaGFubmVscyAmJiBlLmNoYW5uZWxzID4gMykKICAgICAgICBmb3IgKHZhciB1ID0gMzsgdSA8IGUuY2hhbm5lbHM7IHUrKykKICAgICAgICAgIGYucHVzaCh1KTsKICAgICAgZWxzZSByLmdsb2JhbEFscGhhICYmIGYucHVzaCgzKTsKICAgICAgaWYgKEEgPT09IDApCiAgICAgICAgZm9yICh2YXIgdSA9IDA7IHUgPCBmLmxlbmd0aDsgdSsrKSB7CiAgICAgICAgICB2YXIgbyA9IFkwKHIsIGUud2lkdGggKiBlLmhlaWdodCAqIE1hdGguZmxvb3IodCAvIDgpKTsKICAgICAgICAgIE8xKG8sIGksIHQsIDQsIGZbdV0pOwogICAgICAgIH0KICAgICAgZWxzZSBBID09PSAxICYmIChyLm9mZnNldCwgc2EociwgaSwgZS53aWR0aCwgZS5oZWlnaHQsIHQsIDQsIGYsIHIubGFyZ2UpKTsKICAgICAgZS5jb2xvck1vZGUgPT09IDEgJiYgeWUoaSk7CiAgICAgIGJyZWFrOwogICAgfQogICAgY2FzZSAyOiB7CiAgICAgIGlmICh0ICE9PSA4KQogICAgICAgIHRocm93IG5ldyBFcnJvcigiYml0c1BlckNoYW5uZWwgTm90IHN1cHByb3RlZCIpOwogICAgICBpZiAoZS5jaGFubmVscyAhPT0gMSkKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY2hhbm5lbCBjb3VudCIpOwogICAgICBpZiAoIWUucGFsZXR0ZSkKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk1pc3NpbmcgY29sb3IgcGFsZXR0ZSIpOwogICAgICBpZiAoQSA9PT0gMCkKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpOwogICAgICBpZiAoQSA9PT0gMSkgewogICAgICAgIHZhciBsID0gewogICAgICAgICAgd2lkdGg6IGkud2lkdGgsCiAgICAgICAgICBoZWlnaHQ6IGkuaGVpZ2h0LAogICAgICAgICAgZGF0YTogbmV3IFVpbnQ4QXJyYXkoaS53aWR0aCAqIGkuaGVpZ2h0KQogICAgICAgIH07CiAgICAgICAgc2EociwgbCwgZS53aWR0aCwgZS5oZWlnaHQsIHQsIDEsIFswXSwgci5sYXJnZSksIEE0KGwsIGksIGUucGFsZXR0ZSk7CiAgICAgIH0gZWxzZQogICAgICAgIHRocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIik7CiAgICAgIGJyZWFrOwogICAgfQogICAgY2FzZSA0OiB7CiAgICAgIGlmICh0ICE9PSA4KQogICAgICAgIHRocm93IG5ldyBFcnJvcigiYml0c1BlckNoYW5uZWwgTm90IHN1cHByb3RlZCIpOwogICAgICBpZiAoZS5jaGFubmVscyAhPT0gNCkKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY2hhbm5lbCBjb3VudCIpOwogICAgICB2YXIgZiA9IFswLCAxLCAyLCAzXTsKICAgICAgaWYgKHIuZ2xvYmFsQWxwaGEgJiYgZi5wdXNoKDQpLCBBID09PSAwKQogICAgICAgIHRocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIik7CiAgICAgIGlmIChBID09PSAxKSB7CiAgICAgICAgdmFyIHMgPSB7CiAgICAgICAgICB3aWR0aDogaS53aWR0aCwKICAgICAgICAgIGhlaWdodDogaS5oZWlnaHQsCiAgICAgICAgICBkYXRhOiBuZXcgVWludDhBcnJheShpLndpZHRoICogaS5oZWlnaHQgKiA1KQogICAgICAgIH07CiAgICAgICAgci5vZmZzZXQsIHNhKHIsIHMsIGUud2lkdGgsIGUuaGVpZ2h0LCB0LCA1LCBmLCByLmxhcmdlKSwgUDEocywgaSwgITApOwogICAgICB9IGVsc2UKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpOwogICAgICBicmVhazsKICAgIH0KICAgIGRlZmF1bHQ6CiAgICAgIHRocm93IG5ldyBFcnJvcigiQ29sb3IgbW9kZSBub3Qgc3VwcG9ydGVkOiAiLmNvbmNhdChlLmNvbG9yTW9kZSkpOwogIH0KICBpZiAoci5nbG9iYWxBbHBoYSkgewogICAgaWYgKGUuYml0c1BlckNoYW5uZWwgIT09IDgpCiAgICAgIHRocm93IG5ldyBFcnJvcigiYml0c1BlckNoYW5uZWwgTm90IHN1cHByb3RlZCIpOwogICAgZm9yICh2YXIgYyA9IGkuZGF0YSwgZCA9IGkud2lkdGggKiBpLmhlaWdodCAqIDQsIHUgPSAwOyB1IDwgZDsgdSArPSA0KSB7CiAgICAgIHZhciB2ID0gY1t1ICsgM107CiAgICAgIGlmICh2ICE9IDAgJiYgdiAhPSAyNTUpIHsKICAgICAgICB2YXIgayA9IHYgLyAyNTUsIEUgPSAxIC8gaywgZyA9IDI1NSAqICgxIC0gRSk7CiAgICAgICAgY1t1ICsgMF0gPSBjW3UgKyAwXSAqIEUgKyBnLCBjW3UgKyAxXSA9IGNbdSArIDFdICogRSArIGcsIGNbdSArIDJdID0gY1t1ICsgMl0gKiBFICsgZzsKICAgICAgfQogICAgfQogIH0KICByLnVzZUltYWdlRGF0YSA/IGUuaW1hZ2VEYXRhID0gaSA6IGUuY2FudmFzID0gbWUoaSk7Cn0KZnVuY3Rpb24gUDEociwgZSwgYSkgewogIGZvciAodmFyIEEgPSBlLndpZHRoICogZS5oZWlnaHQgKiA0LCB0ID0gci5kYXRhLCBpID0gZS5kYXRhLCBuID0gMCwgZiA9IDA7IGYgPCBBOyBuICs9IDUsIGYgKz0gNCkgewogICAgdmFyIHUgPSB0W25dLCBvID0gdFtuICsgMV0sIGwgPSB0W24gKyAyXSwgcyA9IHRbbiArIDNdOwogICAgaVtmXSA9ICh1ICogcyB8IDApIC8gMjU1IHwgMCwgaVtmICsgMV0gPSAobyAqIHMgfCAwKSAvIDI1NSB8IDAsIGlbZiArIDJdID0gKGwgKiBzIHwgMCkgLyAyNTUgfCAwLCBpW2YgKyAzXSA9IGEgPyAyNTUgLSB0W24gKyA0XSA6IHRbbiArIDRdOwogIH0KfQpmdW5jdGlvbiBBNChyLCBlLCBhKSB7CiAgZm9yICh2YXIgQSA9IHIud2lkdGggKiByLmhlaWdodCwgdCA9IHIuZGF0YSwgaSA9IGUuZGF0YSwgbiA9IDAsIGYgPSAwOyBuIDwgQTsgbisrLCBmICs9IDQpIHsKICAgIHZhciB1ID0gYVt0W25dXTsKICAgIGlbZiArIDBdID0gdS5yLCBpW2YgKyAxXSA9IHUuZywgaVtmICsgMl0gPSB1LmIsIGlbZiArIDNdID0gMjU1OwogIH0KfQpmdW5jdGlvbiB0NChyLCBlKSB7CiAgaWYgKHIuYnl0ZUxlbmd0aCAvIHIubGVuZ3RoICE9PSBlLmJ5dGVMZW5ndGggLyBlLmxlbmd0aCkKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBhcnJheSB0eXBlcyIpOwp9CmZ1bmN0aW9uIFkxKHIsIGUpIHsKICBpZiAoZSA9PT0gOCkKICAgIHJldHVybiByOwogIGlmIChlID09PSAxNikgewogICAgZm9yICh2YXIgYSA9IDA7IGEgPCByLmJ5dGVMZW5ndGg7IGEgKz0gMikgewogICAgICB2YXIgQSA9IHJbYV07CiAgICAgIHJbYV0gPSByW2EgKyAxXSwgclthICsgMV0gPSBBOwogICAgfQogICAgaWYgKHIuYnl0ZU9mZnNldCAlIDIpIHsKICAgICAgdmFyIHQgPSBuZXcgVWludDE2QXJyYXkoci5ieXRlTGVuZ3RoIC8gMik7CiAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSh0LmJ1ZmZlciwgdC5ieXRlT2Zmc2V0LCB0LmJ5dGVMZW5ndGgpLnNldChyKSwgdDsKICAgIH0gZWxzZQogICAgICByZXR1cm4gbmV3IFVpbnQxNkFycmF5KHIuYnVmZmVyLCByLmJ5dGVPZmZzZXQsIHIuYnl0ZUxlbmd0aCAvIDIpOwogIH0gZWxzZSBpZiAoZSA9PT0gMzIpCiAgICBpZiAoci5ieXRlT2Zmc2V0ICUgNCkgewogICAgICB2YXIgdCA9IG5ldyBGbG9hdDMyQXJyYXkoci5ieXRlTGVuZ3RoIC8gNCk7CiAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSh0LmJ1ZmZlciwgdC5ieXRlT2Zmc2V0LCB0LmJ5dGVMZW5ndGgpLnNldChyKSwgdDsKICAgIH0gZWxzZQogICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShyLmJ1ZmZlciwgci5ieXRlT2Zmc2V0LCByLmJ5dGVMZW5ndGggLyA0KTsKICBlbHNlCiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYml0RGVwdGggKCIuY29uY2F0KGUsICIpIikpOwp9CmZ1bmN0aW9uIElBKHIsIGUsIGEsIEEpIHsKICB0NChyLmRhdGEsIGUpOwogIGZvciAodmFyIHQgPSByLndpZHRoICogci5oZWlnaHQsIGkgPSByLmRhdGEsIG4gPSAwLCBmID0gYSB8IDA7IG4gPCB0OyBuKyssIGYgPSBmICsgQSB8IDApCiAgICBpW2ZdID0gZVtuXTsKfQpmdW5jdGlvbiBPMShyLCBlLCBhLCBBLCB0KSB7CiAgaWYgKGEgPT0gMzIpCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHIuYnl0ZUxlbmd0aDsgaSArPSA0KSB7CiAgICAgIHZhciBuID0gcltpICsgMF0sIGYgPSByW2kgKyAxXSwgdSA9IHJbaSArIDJdLCBvID0gcltpICsgM107CiAgICAgIHJbaSArIDBdID0gbywgcltpICsgMV0gPSB1LCByW2kgKyAyXSA9IGYsIHJbaSArIDNdID0gbjsKICAgIH0KICB2YXIgbCA9IFkxKHIsIGEpOwogIGUgJiYgdCA8IEEgJiYgSUEoZSwgbCwgdCwgQSk7Cn0KZnVuY3Rpb24gdEEociwgZSwgYSwgQSkgewogIGZvciAodmFyIHQgPSAwOyB0IDwgYTsgdCsrKQogICAgZm9yICh2YXIgaSA9IHQgKiBlLCBuID0gMSwgZiA9IGkgKyAxOyBuIDwgZTsgbisrLCBmKyspCiAgICAgIHJbZl0gPSAocltmIC0gMV0gKyByW2ZdKSAlIEE7Cn0KZnVuY3Rpb24gSWkociwgZSwgYSwgQSwgdCwgaSwgbiwgZikgewogIHZhciB1ID0gbmwocik7CiAgaWYgKGUgJiYgbiA8IGkpIHsKICAgIHZhciBvID0gWTEodSwgdCk7CiAgICBpZiAodCA9PT0gOCkKICAgICAgZiAmJiB0QSh1LCBhLCBBLCAyNTYpLCBJQShlLCB1LCBuLCBpKTsKICAgIGVsc2UgaWYgKHQgPT09IDE2KQogICAgICBmICYmIHRBKG8sIGEsIEEsIDY1NTM2KSwgSUEoZSwgbywgbiwgaSk7CiAgICBlbHNlIGlmICh0ID09PSAzMikgewogICAgICBmICYmIHRBKHUsIGEgKiA0LCBBLCAyNTYpOwogICAgICBmb3IgKHZhciBsID0gbiwgcyA9IG5ldyBVaW50MzJBcnJheShlLmRhdGEuYnVmZmVyLCBlLmRhdGEuYnl0ZU9mZnNldCwgZS5kYXRhLmxlbmd0aCksIGMgPSAwOyBjIDwgQTsgYysrKQogICAgICAgIGZvciAodmFyIGQgPSBhICogNCAqIGMsIHYgPSAwOyB2IDwgYTsgdisrLCBkKyssIGwgKz0gaSkgewogICAgICAgICAgdmFyIGsgPSBkICsgYSwgRSA9IGsgKyBhLCBnID0gRSArIGE7CiAgICAgICAgICBzW2xdID0gKHVbZF0gPDwgMjQgfCB1W2tdIDw8IDE2IHwgdVtFXSA8PCA4IHwgdVtnXSkgPj4+IDA7CiAgICAgICAgfQogICAgfSBlbHNlCiAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBiaXREZXB0aCIpOwogIH0KfQpmdW5jdGlvbiBzYShyLCBlLCBhLCBBLCB0LCBpLCBuLCBmKSB7CiAgdmFyIHUgPSBlICYmIGUuZGF0YSwgbzsKICBpZiAoZikgewogICAgbyA9IG5ldyBVaW50MzJBcnJheShuLmxlbmd0aCAqIEEpOwogICAgZm9yICh2YXIgbCA9IDAsIHMgPSAwOyBsIDwgbi5sZW5ndGg7IGwrKykKICAgICAgZm9yICh2YXIgYyA9IDA7IGMgPCBBOyBjKyssIHMrKykKICAgICAgICBvW3NdID0gUyhyKTsKICB9IGVsc2UgewogICAgbyA9IG5ldyBVaW50MTZBcnJheShuLmxlbmd0aCAqIEEpOwogICAgZm9yICh2YXIgbCA9IDAsIHMgPSAwOyBsIDwgbi5sZW5ndGg7IGwrKykKICAgICAgZm9yICh2YXIgYyA9IDA7IGMgPCBBOyBjKyssIHMrKykKICAgICAgICBvW3NdID0gUChyKTsKICB9CiAgZm9yICh2YXIgZCA9IGkgLSAxIHwgMCwgdiA9IDAsIHMgPSAwOyB2IDwgbi5sZW5ndGg7IHYrKykgewogICAgdmFyIGsgPSBuW3ZdIHwgMCwgRSA9IHYgPiBkIHx8IGsgPiBkOwogICAgaWYgKCF1IHx8IEUpCiAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwgQTsgYysrLCBzKyspCiAgICAgICAgSChyLCBvW3NdKTsKICAgIGVsc2UKICAgICAgZm9yICh2YXIgYyA9IDAsIGcgPSBrIHwgMDsgYyA8IEE7IGMrKywgcysrKQogICAgICAgIGZvciAodmFyIHcgPSBvW3NdLCBCID0gWTAociwgdyksIG0gPSAwLCBwID0gMDsgbSA8IHc7IG0rKykgewogICAgICAgICAgdmFyIFcgPSBCW21dOwogICAgICAgICAgaWYgKFcgPiAxMjgpIHsKICAgICAgICAgICAgdmFyIEMgPSBCWysrbV07CiAgICAgICAgICAgIFcgPSAyNTYgLSBXIHwgMDsKICAgICAgICAgICAgZm9yICh2YXIgXyA9IDA7IF8gPD0gVyAmJiBwIDwgYTsgXyA9IF8gKyAxIHwgMCwgcCA9IHAgKyAxIHwgMCkKICAgICAgICAgICAgICB1W2ddID0gQywgZyA9IGcgKyBpIHwgMDsKICAgICAgICAgIH0gZWxzZSBpZiAoVyA8IDEyOCkKICAgICAgICAgICAgZm9yICh2YXIgXyA9IDA7IF8gPD0gVyAmJiBwIDwgYTsgXyA9IF8gKyAxIHwgMCwgcCA9IHAgKyAxIHwgMCkKICAgICAgICAgICAgICB1W2ddID0gQlsrK21dLCBnID0gZyArIGkgfCAwOwogICAgICAgIH0KICB9Cn0KZnVuY3Rpb24gcHIociwgZSwgYSwgQSwgdCkgewogIEEgPT09IHZvaWQgMCAmJiAoQSA9ICEwKSwgdCA9PT0gdm9pZCAwICYmICh0ID0gITEpOwogIHZhciBpID0gUyhyKTsKICBpZiAodCkgewogICAgaWYgKGkgIT09IDApCiAgICAgIHRocm93IG5ldyBFcnJvcigiU2l6ZXMgbGFyZ2VyIHRoYW4gNEdCIGFyZSBub3Qgc3VwcG9ydGVkIik7CiAgICBpID0gUyhyKTsKICB9CiAgaWYgKCEoaSA8PSAwICYmIEEpKSB7CiAgICB2YXIgbiA9IHIub2Zmc2V0ICsgaTsKICAgIGlmIChuID4gci52aWV3LmJ5dGVMZW5ndGgpCiAgICAgIHRocm93IG5ldyBFcnJvcigiU2VjdGlvbiBleGNlZWRzIGZpbGUgc2l6ZSIpOwogICAgdmFyIGYgPSBhKGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gbiAtIHIub2Zmc2V0OwogICAgfSk7CiAgICBmb3IgKHIub2Zmc2V0ICE9PSBuICYmIChyLm9mZnNldCA+IG4gPyBaQShyLCAiRXhjZWVkZWQgc2VjdGlvbiBsaW1pdHMiKSA6IFpBKHIsICJVbnJlYWQgc2VjdGlvbiBkYXRhIikpOyBpICUgZTsgKQogICAgICBpKyssIG4rKzsKICAgIHJldHVybiByLm9mZnNldCA9IG4sIGY7CiAgfQp9CmZ1bmN0aW9uIEswKHIpIHsKICB2YXIgZSA9IFAocik7CiAgc3dpdGNoIChlKSB7CiAgICBjYXNlIDA6IHsKICAgICAgdmFyIGEgPSBQKHIpIC8gMjU3LCBBID0gUChyKSAvIDI1NywgdCA9IFAocikgLyAyNTc7CiAgICAgIHJldHVybiBIKHIsIDIpLCB7IHI6IGEsIGc6IEEsIGI6IHQgfTsKICAgIH0KICAgIGNhc2UgMTogewogICAgICB2YXIgaSA9IFAocikgLyA2NTUzNSwgbiA9IFAocikgLyA2NTUzNSwgdCA9IFAocikgLyA2NTUzNTsKICAgICAgcmV0dXJuIEgociwgMiksIHsgaDogaSwgczogbiwgYjogdCB9OwogICAgfQogICAgY2FzZSAyOiB7CiAgICAgIHZhciBmID0gUChyKSAvIDI1NywgdSA9IFAocikgLyAyNTcsIG8gPSBQKHIpIC8gMjU3LCBsID0gUChyKSAvIDI1NzsKICAgICAgcmV0dXJuIHsgYzogZiwgbTogdSwgeTogbywgazogbCB9OwogICAgfQogICAgY2FzZSA3OiB7CiAgICAgIHZhciBzID0gZzAocikgLyAxZTQsIGMgPSBnMChyKSwgZCA9IGcwKHIpLCB2ID0gYyA8IDAgPyBjIC8gMTI4MDAgOiBjIC8gMTI3MDAsIHQgPSBkIDwgMCA/IGQgLyAxMjgwMCA6IGQgLyAxMjcwMDsKICAgICAgcmV0dXJuIEgociwgMiksIHsgbDogcywgYTogdiwgYjogdCB9OwogICAgfQogICAgY2FzZSA4OiB7CiAgICAgIHZhciBsID0gUChyKSAqIDI1NSAvIDFlNDsKICAgICAgcmV0dXJuIEgociwgNiksIHsgazogbCB9OwogICAgfQogICAgZGVmYXVsdDoKICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbG9yIHNwYWNlIik7CiAgfQp9CmZ1bmN0aW9uIGk0KHIpIHsKICBmb3IgKHZhciBlID0gUyhyKTsgZSAlIDQ7ICkKICAgIGUrKzsKICB2YXIgYSA9IHIub2Zmc2V0ICsgZSwgQSA9IFMocik7CiAgaWYgKEEgIT09IDEpCiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgcGF0dGVybiB2ZXJzaW9uOiAiLmNvbmNhdChBKSk7CiAgdmFyIHQgPSBTKHIpLCBpID0gZzAociksIG4gPSBnMChyKTsKICBpZiAodCAhPT0gMyAmJiB0ICE9PSAxICYmIHQgIT09IDIpCiAgICB0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHBhdHRlcm4gY29sb3IgbW9kZTogIi5jb25jYXQodCkpOwogIHZhciBmID0gejAociksIHUgPSB4cihyLCAxKSwgbyA9IFtdOwogIGlmICh0ID09PSAyKSB7CiAgICBmb3IgKHZhciBsID0gMDsgbCA8IDI1NjsgbCsrKQogICAgICBvLnB1c2goewogICAgICAgIHI6IE8ociksCiAgICAgICAgZzogTyhyKSwKICAgICAgICBiOiBPKHIpCiAgICAgIH0pOwogICAgSChyLCA0KTsKICB9CiAgdmFyIHMgPSBTKHIpOwogIGlmIChzICE9PSAzKQogICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHBhdHRlcm4gVk1BTCB2ZXJzaW9uOiAiLmNvbmNhdChzKSk7CiAgUyhyKTsKICBmb3IgKHZhciBjID0gUyhyKSwgZCA9IFMociksIHYgPSBTKHIpLCBrID0gUyhyKSwgRSA9IFMociksIGcgPSBrIC0gZCwgdyA9IHYgLSBjLCBCID0gbmV3IFVpbnQ4QXJyYXkoZyAqIHcgKiA0KSwgbCA9IDM7IGwgPCBCLmJ5dGVMZW5ndGg7IGwgKz0gNCkKICAgIEJbbF0gPSAyNTU7CiAgZm9yICh2YXIgbCA9IDAsIG0gPSAwOyBsIDwgRSArIDI7IGwrKykgewogICAgdmFyIHAgPSBTKHIpOwogICAgaWYgKHApIHsKICAgICAgdmFyIFcgPSBTKHIpLCBDID0gUyhyKSwgXyA9IFMociksIE4gPSBTKHIpLCBEID0gUyhyKSwgWSA9IFMociksIGYwID0gUChyKSwgRyA9IE8ociksIEogPSBXIC0gMjMsIEsgPSBZMChyLCBKKTsKICAgICAgaWYgKEMgIT09IDggfHwgZjAgIT09IDgpCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCIxNmJpdCBwaXhlbCBkZXB0aCBub3Qgc3VwcG9ydGVkIGZvciBwYXR0ZXJucyIpOwogICAgICB2YXIgWCA9IFkgLSBOLCBsMCA9IEQgLSBfLCBiID0gTiAtIGQsIFogPSBfIC0gYzsKICAgICAgaWYgKEcgPT09IDApIHsKICAgICAgICBpZiAodCA9PT0gMyAmJiBtIDwgMykKICAgICAgICAgIGZvciAodmFyIHkgPSAwOyB5IDwgbDA7IHkrKykKICAgICAgICAgICAgZm9yICh2YXIgRiA9IDA7IEYgPCBYOyBGKyspIHsKICAgICAgICAgICAgICB2YXIgUiA9IEYgKyB5ICogWCwgTSA9IChiICsgRiArICh5ICsgWikgKiBnKSAqIDQ7CiAgICAgICAgICAgICAgQltNICsgbV0gPSBLW1JdOwogICAgICAgICAgICB9CiAgICAgICAgaWYgKHQgPT09IDEgJiYgbSA8IDEpCiAgICAgICAgICBmb3IgKHZhciBJID0gMDsgSSA8IGwwOyBJKyspCiAgICAgICAgICAgIGZvciAodmFyIFYgPSAwOyBWIDwgWDsgVisrKSB7CiAgICAgICAgICAgICAgdmFyIFIgPSBWICsgSSAqIFgsIE0gPSAoYiArIFYgKyAoSSArIFopICogZykgKiA0LCB6ID0gS1tSXTsKICAgICAgICAgICAgICBCW00gKyAwXSA9IHosIEJbTSArIDFdID0geiwgQltNICsgMl0gPSB6OwogICAgICAgICAgICB9CiAgICAgICAgaWYgKHQgPT09IDIpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkluZGV4ZWQgcGF0dGVybiBjb2xvciBtb2RlIG5vdCBpbXBsZW1lbnRlZCIpOwogICAgICB9IGVsc2UgaWYgKEcgPT09IDEpIHsKICAgICAgICB2YXIgaiA9IHsgZGF0YTogQiwgd2lkdGg6IGcsIGhlaWdodDogdyB9LCBhMCA9IHsgZGF0YTogbmV3IFVpbnQ4QXJyYXkoWCAqIGwwKSwgd2lkdGg6IFgsIGhlaWdodDogbDAgfSwgYjAgPSBLYShLLmJ1ZmZlciwgSy5ieXRlT2Zmc2V0LCBLLmJ5dGVMZW5ndGgpOwogICAgICAgIGlmICh0ID09PSAzICYmIG0gPCAzICYmIChzYShiMCwgYTAsIFgsIGwwLCA4LCAxLCBbMF0sICExKSwgRmkoYTAsIGosIGIsIFosIG0pKSwgdCA9PT0gMSAmJiBtIDwgMSAmJiAoc2EoYjAsIGEwLCBYLCBsMCwgOCwgMSwgWzBdLCAhMSksIEZpKGEwLCBqLCBiLCBaLCAwKSwgeWUoaikpLCB0ID09PSAyKQogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbmRleGVkIHBhdHRlcm4gY29sb3IgbW9kZSBub3QgaW1wbGVtZW50ZWQiKTsKICAgICAgfSBlbHNlCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHBhdHRlcm4gY29tcHJlc3Npb24gbW9kZSIpOwogICAgICBtKys7CiAgICB9CiAgfQogIHJldHVybiByLm9mZnNldCA9IGEsIHsgaWQ6IHUsIG5hbWU6IGYsIHg6IGksIHk6IG4sIGJvdW5kczogeyB4OiBkLCB5OiBjLCB3OiBnLCBoOiB3IH0sIGRhdGE6IEIgfTsKfQpmdW5jdGlvbiBGaShyLCBlLCBhLCBBLCB0KSB7CiAgZm9yICh2YXIgaSA9IHIud2lkdGgsIG4gPSByLmhlaWdodCwgZiA9IGUud2lkdGgsIHUgPSAwOyB1IDwgbjsgdSsrKQogICAgZm9yICh2YXIgbyA9IDA7IG8gPCBpOyBvKyspIHsKICAgICAgdmFyIGwgPSBvICsgdSAqIGksIHMgPSAoYSArIG8gKyAodSArIEEpICogZikgKiA0LCBjID0gci5kYXRhW2xdOwogICAgICBlLmRhdGFbcyArIHRdID0gYzsKICAgIH0KfQp2YXIgVTEgPSBbCiAgdm9pZCAwLAogICJvdXRlciBiZXZlbCIsCiAgImlubmVyIGJldmVsIiwKICAiZW1ib3NzIiwKICAicGlsbG93IGVtYm9zcyIsCiAgInN0cm9rZSBlbWJvc3MiCl07CmZ1bmN0aW9uIERhKHIpIHsKICByZXR1cm4gSnIociwgIjhCSU0iKSwgSmFbUjAocildIHx8ICJub3JtYWwiOwp9CmZ1bmN0aW9uIE5hKHIsIGUpIHsKICBuMChyLCAiOEJJTSIpLCBuMChyLCBYZVtlXSB8fCAibm9ybSIpOwp9CmZ1bmN0aW9uIHhhKHIpIHsKICByZXR1cm4gTyhyKSAvIDI1NTsKfQpmdW5jdGlvbiBNYShyLCBlKSB7CiAgVChyLCBNYXRoLnJvdW5kKGUgKiAyNTUpIHwgMCk7Cn0KZnVuY3Rpb24gbjQocikgewogIHZhciBlID0gUChyKTsKICBpZiAoZSAhPT0gMCkKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBlZmZlY3RzIGxheWVyIHZlcnNpb246ICIuY29uY2F0KGUpKTsKICBmb3IgKHZhciBhID0gUChyKSwgQSA9IHt9LCB0ID0gMDsgdCA8IGE7IHQrKykgewogICAgSnIociwgIjhCSU0iKTsKICAgIHZhciBpID0gUjAocik7CiAgICBzd2l0Y2ggKGkpIHsKICAgICAgY2FzZSAiY21uUyI6IHsKICAgICAgICB2YXIgbiA9IFMociksIGYgPSBTKHIpLCB1ID0gISFPKHIpOwogICAgICAgIGlmIChIKHIsIDIpLCBuICE9PSA3IHx8IGYgIT09IDAgfHwgIXUpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgZWZmZWN0cyBjb21tb24gc3RhdGUiKTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBjYXNlICJkc2R3IjoKICAgICAgY2FzZSAiaXNkdyI6IHsKICAgICAgICB2YXIgbyA9IFMociksIGwgPSBTKHIpOwogICAgICAgIGlmIChvICE9PSA0MSAmJiBvICE9PSA1MSkKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzaGFkb3cgc2l6ZTogIi5jb25jYXQobykpOwogICAgICAgIGlmIChsICE9PSAwICYmIGwgIT09IDIpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc2hhZG93IHZlcnNpb246ICIuY29uY2F0KGwpKTsKICAgICAgICB2YXIgbiA9IGhyKHIpOwogICAgICAgIGhyKHIpOwogICAgICAgIHZhciBzID0gaHIociksIGMgPSBocihyKSwgZCA9IEswKHIpLCB2ID0gRGEociksIGsgPSAhIU8ociksIEUgPSAhIU8ociksIGcgPSB4YShyKTsKICAgICAgICBvID49IDUxICYmIEswKHIpOwogICAgICAgIHZhciB3ID0gewogICAgICAgICAgc2l6ZTogeyB1bml0czogIlBpeGVscyIsIHZhbHVlOiBuIH0sCiAgICAgICAgICBkaXN0YW5jZTogeyB1bml0czogIlBpeGVscyIsIHZhbHVlOiBjIH0sCiAgICAgICAgICBhbmdsZTogcywKICAgICAgICAgIGNvbG9yOiBkLAogICAgICAgICAgYmxlbmRNb2RlOiB2LAogICAgICAgICAgZW5hYmxlZDogaywKICAgICAgICAgIHVzZUdsb2JhbExpZ2h0OiBFLAogICAgICAgICAgb3BhY2l0eTogZwogICAgICAgIH07CiAgICAgICAgaSA9PT0gImRzZHciID8gQS5kcm9wU2hhZG93ID0gW3ddIDogQS5pbm5lclNoYWRvdyA9IFt3XTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBjYXNlICJvZ2x3IjogewogICAgICAgIHZhciBvID0gUyhyKSwgQiA9IFMocik7CiAgICAgICAgaWYgKG8gIT09IDMyICYmIG8gIT09IDQyKQogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIG91dGVyIGdsb3cgc2l6ZTogIi5jb25jYXQobykpOwogICAgICAgIGlmIChCICE9PSAwICYmIEIgIT09IDIpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgb3V0ZXIgZ2xvdyB2ZXJzaW9uOiAiLmNvbmNhdChCKSk7CiAgICAgICAgdmFyIG4gPSBocihyKTsKICAgICAgICBocihyKTsKICAgICAgICB2YXIgZCA9IEswKHIpLCB2ID0gRGEociksIGsgPSAhIU8ociksIGcgPSB4YShyKTsKICAgICAgICBvID49IDQyICYmIEswKHIpLCBBLm91dGVyR2xvdyA9IHsKICAgICAgICAgIHNpemU6IHsgdW5pdHM6ICJQaXhlbHMiLCB2YWx1ZTogbiB9LAogICAgICAgICAgY29sb3I6IGQsCiAgICAgICAgICBibGVuZE1vZGU6IHYsCiAgICAgICAgICBlbmFibGVkOiBrLAogICAgICAgICAgb3BhY2l0eTogZwogICAgICAgIH07CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgY2FzZSAiaWdsdyI6IHsKICAgICAgICB2YXIgbyA9IFMociksIG0gPSBTKHIpOwogICAgICAgIGlmIChvICE9PSAzMiAmJiBvICE9PSA0MykKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBpbm5lciBnbG93IHNpemU6ICIuY29uY2F0KG8pKTsKICAgICAgICBpZiAobSAhPT0gMCAmJiBtICE9PSAyKQogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGlubmVyIGdsb3cgdmVyc2lvbjogIi5jb25jYXQobSkpOwogICAgICAgIHZhciBuID0gaHIocik7CiAgICAgICAgaHIocik7CiAgICAgICAgdmFyIGQgPSBLMChyKSwgdiA9IERhKHIpLCBrID0gISFPKHIpLCBnID0geGEocik7CiAgICAgICAgbyA+PSA0MyAmJiAoTyhyKSwgSzAocikpLCBBLmlubmVyR2xvdyA9IHsKICAgICAgICAgIHNpemU6IHsgdW5pdHM6ICJQaXhlbHMiLCB2YWx1ZTogbiB9LAogICAgICAgICAgY29sb3I6IGQsCiAgICAgICAgICBibGVuZE1vZGU6IHYsCiAgICAgICAgICBlbmFibGVkOiBrLAogICAgICAgICAgb3BhY2l0eTogZwogICAgICAgIH07CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgY2FzZSAiYmV2bCI6IHsKICAgICAgICB2YXIgbyA9IFMociksIHAgPSBTKHIpOwogICAgICAgIGlmIChvICE9PSA1OCAmJiBvICE9PSA3OCkKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBiZXZlbCBzaXplOiAiLmNvbmNhdChvKSk7CiAgICAgICAgaWYgKHAgIT09IDAgJiYgcCAhPT0gMikKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBiZXZlbCB2ZXJzaW9uOiAiLmNvbmNhdChwKSk7CiAgICAgICAgdmFyIHMgPSBocihyKSwgVyA9IGhyKHIpLCBuID0gaHIociksIEMgPSBEYShyKSwgXyA9IERhKHIpLCBOID0gSzAociksIEQgPSBLMChyKSwgWSA9IFUxW08ocildIHx8ICJpbm5lciBiZXZlbCIsIGYwID0geGEociksIEcgPSB4YShyKSwgayA9ICEhTyhyKSwgRSA9ICEhTyhyKSwgSiA9IE8ocikgPyAiZG93biIgOiAidXAiOwogICAgICAgIG8gPj0gNzggJiYgKEswKHIpLCBLMChyKSksIEEuYmV2ZWwgPSB7CiAgICAgICAgICBzaXplOiB7IHVuaXRzOiAiUGl4ZWxzIiwgdmFsdWU6IG4gfSwKICAgICAgICAgIGFuZ2xlOiBzLAogICAgICAgICAgc3RyZW5ndGg6IFcsCiAgICAgICAgICBoaWdobGlnaHRCbGVuZE1vZGU6IEMsCiAgICAgICAgICBzaGFkb3dCbGVuZE1vZGU6IF8sCiAgICAgICAgICBoaWdobGlnaHRDb2xvcjogTiwKICAgICAgICAgIHNoYWRvd0NvbG9yOiBELAogICAgICAgICAgc3R5bGU6IFksCiAgICAgICAgICBoaWdobGlnaHRPcGFjaXR5OiBmMCwKICAgICAgICAgIHNoYWRvd09wYWNpdHk6IEcsCiAgICAgICAgICBlbmFibGVkOiBrLAogICAgICAgICAgdXNlR2xvYmFsTGlnaHQ6IEUsCiAgICAgICAgICBkaXJlY3Rpb246IEoKICAgICAgICB9OwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGNhc2UgInNvZmkiOiB7CiAgICAgICAgdmFyIG4gPSBTKHIpLCBLID0gUyhyKTsKICAgICAgICBpZiAobiAhPT0gMzQpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgZWZmZWN0cyBzb2xpZCBmaWxsIGluZm8gc2l6ZTogIi5jb25jYXQobikpOwogICAgICAgIGlmIChLICE9PSAyKQogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGVmZmVjdHMgc29saWQgZmlsbCBpbmZvIHZlcnNpb246ICIuY29uY2F0KEspKTsKICAgICAgICB2YXIgdiA9IERhKHIpLCBkID0gSzAociksIGcgPSB4YShyKSwgayA9ICEhTyhyKTsKICAgICAgICBLMChyKSwgQS5zb2xpZEZpbGwgPSBbeyBibGVuZE1vZGU6IHYsIGNvbG9yOiBkLCBvcGFjaXR5OiBnLCBlbmFibGVkOiBrIH1dOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGVmZmVjdCB0eXBlOiAnIi5jb25jYXQoaSwgIiciKSk7CiAgICB9CiAgfQogIHJldHVybiBBOwp9CmZ1bmN0aW9uIENpKHIsIGUpIHsKICB2YXIgYTsKICBVKHIsIDUxKSwgVShyLCAyKSwgZ3IociwgZS5zaXplICYmIGUuc2l6ZS52YWx1ZSB8fCAwKSwgZ3IociwgMCksIGdyKHIsIGUuYW5nbGUgfHwgMCksIGdyKHIsIGUuZGlzdGFuY2UgJiYgZS5kaXN0YW5jZS52YWx1ZSB8fCAwKSwgcnIociwgZS5jb2xvciksIE5hKHIsIGUuYmxlbmRNb2RlKSwgVChyLCBlLmVuYWJsZWQgPyAxIDogMCksIFQociwgZS51c2VHbG9iYWxMaWdodCA/IDEgOiAwKSwgTWEociwgKGEgPSBlLm9wYWNpdHkpICE9PSBudWxsICYmIGEgIT09IHZvaWQgMCA/IGEgOiAxKSwgcnIociwgZS5jb2xvcik7Cn0KZnVuY3Rpb24gZjQociwgZSkgewogIHZhciBhLCBBLCB0LCBpLCBuLCBmLCB1ID0gKGEgPSBlLmRyb3BTaGFkb3cpID09PSBudWxsIHx8IGEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGFbMF0sIG8gPSAoQSA9IGUuaW5uZXJTaGFkb3cpID09PSBudWxsIHx8IEEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IEFbMF0sIGwgPSBlLm91dGVyR2xvdywgcyA9IGUuaW5uZXJHbG93LCBjID0gZS5iZXZlbCwgZCA9ICh0ID0gZS5zb2xpZEZpbGwpID09PSBudWxsIHx8IHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRbMF0sIHYgPSAxOwogIGlmICh1ICYmIHYrKywgbyAmJiB2KyssIGwgJiYgdisrLCBzICYmIHYrKywgYyAmJiB2KyssIGQgJiYgdisrLCB4KHIsIDApLCB4KHIsIHYpLCBuMChyLCAiOEJJTSIpLCBuMChyLCAiY21uUyIpLCBVKHIsIDcpLCBVKHIsIDApLCBUKHIsIDEpLCBaMChyLCAyKSwgdSAmJiAobjAociwgIjhCSU0iKSwgbjAociwgImRzZHciKSwgQ2kociwgdSkpLCBvICYmIChuMChyLCAiOEJJTSIpLCBuMChyLCAiaXNkdyIpLCBDaShyLCBvKSksIGwgJiYgKG4wKHIsICI4QklNIiksIG4wKHIsICJvZ2x3IiksIFUociwgNDIpLCBVKHIsIDIpLCBncihyLCAoKGkgPSBsLnNpemUpID09PSBudWxsIHx8IGkgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGkudmFsdWUpIHx8IDApLCBncihyLCAwKSwgcnIociwgbC5jb2xvciksIE5hKHIsIGwuYmxlbmRNb2RlKSwgVChyLCBsLmVuYWJsZWQgPyAxIDogMCksIE1hKHIsIGwub3BhY2l0eSB8fCAwKSwgcnIociwgbC5jb2xvcikpLCBzICYmIChuMChyLCAiOEJJTSIpLCBuMChyLCAiaWdsdyIpLCBVKHIsIDQzKSwgVShyLCAyKSwgZ3IociwgKChuID0gcy5zaXplKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuLnZhbHVlKSB8fCAwKSwgZ3IociwgMCksIHJyKHIsIHMuY29sb3IpLCBOYShyLCBzLmJsZW5kTW9kZSksIFQociwgcy5lbmFibGVkID8gMSA6IDApLCBNYShyLCBzLm9wYWNpdHkgfHwgMCksIFQociwgMCksIHJyKHIsIHMuY29sb3IpKSwgYykgewogICAgbjAociwgIjhCSU0iKSwgbjAociwgImJldmwiKSwgVShyLCA3OCksIFUociwgMiksIGdyKHIsIGMuYW5nbGUgfHwgMCksIGdyKHIsIGMuc3RyZW5ndGggfHwgMCksIGdyKHIsICgoZiA9IGMuc2l6ZSkgPT09IG51bGwgfHwgZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogZi52YWx1ZSkgfHwgMCksIE5hKHIsIGMuaGlnaGxpZ2h0QmxlbmRNb2RlKSwgTmEociwgYy5zaGFkb3dCbGVuZE1vZGUpLCBycihyLCBjLmhpZ2hsaWdodENvbG9yKSwgcnIociwgYy5zaGFkb3dDb2xvcik7CiAgICB2YXIgayA9IFUxLmluZGV4T2YoYy5zdHlsZSk7CiAgICBUKHIsIGsgPD0gMCA/IDEgOiBrKSwgTWEociwgYy5oaWdobGlnaHRPcGFjaXR5IHx8IDApLCBNYShyLCBjLnNoYWRvd09wYWNpdHkgfHwgMCksIFQociwgYy5lbmFibGVkID8gMSA6IDApLCBUKHIsIGMudXNlR2xvYmFsTGlnaHQgPyAxIDogMCksIFQociwgYy5kaXJlY3Rpb24gPT09ICJkb3duIiA/IDEgOiAwKSwgcnIociwgYy5oaWdobGlnaHRDb2xvciksIHJyKHIsIGMuc2hhZG93Q29sb3IpOwogIH0KICBkICYmIChuMChyLCAiOEJJTSIpLCBuMChyLCAic29maSIpLCBVKHIsIDM0KSwgVShyLCAyKSwgTmEociwgZC5ibGVuZE1vZGUpLCBycihyLCBkLmNvbG9yKSwgTWEociwgZC5vcGFjaXR5IHx8IDApLCBUKHIsIGQuZW5hYmxlZCA/IDEgOiAwKSwgcnIociwgZC5jb2xvcikpOwp9CmZ1bmN0aW9uIFdpKHIpIHsKICByZXR1cm4gciA9PT0gMzIgfHwgciA9PT0gMTAgfHwgciA9PT0gMTMgfHwgciA9PT0gOTsKfQpmdW5jdGlvbiBfaShyKSB7CiAgcmV0dXJuIHIgPj0gNDggJiYgciA8PSA1NyB8fCByID09PSA0NiB8fCByID09PSA0NTsKfQpmdW5jdGlvbiBqMShyKSB7CiAgdmFyIGUgPSAwOwogIGZ1bmN0aW9uIGEoKSB7CiAgICBmb3IgKDsgZSA8IHIubGVuZ3RoICYmIFdpKHJbZV0pOyApCiAgICAgIGUrKzsKICB9CiAgZnVuY3Rpb24gQSgpIHsKICAgIHZhciB3ID0gcltlXTsKICAgIHJldHVybiBlKyssIHcgPT09IDkyICYmICh3ID0gcltlXSwgZSsrKSwgdzsKICB9CiAgZnVuY3Rpb24gdCgpIHsKICAgIHZhciB3ID0gIiI7CiAgICBpZiAocltlXSA9PT0gNDEpCiAgICAgIHJldHVybiBlKyssIHc7CiAgICBpZiAocltlXSAhPT0gMjU0IHx8IHJbZSArIDFdICE9PSAyNTUpCiAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCB1dGYtMTYgQk9NIik7CiAgICBmb3IgKGUgKz0gMjsgZSA8IHIubGVuZ3RoICYmIHJbZV0gIT09IDQxOyApIHsKICAgICAgdmFyIEIgPSBBKCksIG0gPSBBKCksIHAgPSBCIDw8IDggfCBtOwogICAgICB3ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUocCk7CiAgICB9CiAgICByZXR1cm4gZSsrLCB3OwogIH0KICB2YXIgaSA9IG51bGwsIG4gPSBbXTsKICBmdW5jdGlvbiBmKHcpIHsKICAgIG4ubGVuZ3RoID8gKHUodyksIG4ucHVzaCh3KSkgOiAobi5wdXNoKHcpLCBpID0gdyk7CiAgfQogIGZ1bmN0aW9uIHUodykgewogICAgaWYgKCFuLmxlbmd0aCkKICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGRhdGEiKTsKICAgIHZhciBCID0gbltuLmxlbmd0aCAtIDFdOwogICAgaWYgKHR5cGVvZiBCID09ICJzdHJpbmciKQogICAgICBuW24ubGVuZ3RoIC0gMl1bQl0gPSB3LCBsKCk7CiAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KEIpKQogICAgICBCLnB1c2godyk7CiAgICBlbHNlCiAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBkYXRhIik7CiAgfQogIGZ1bmN0aW9uIG8odykgewogICAgbi5sZW5ndGggfHwgZih7fSk7CiAgICB2YXIgQiA9IG5bbi5sZW5ndGggLSAxXTsKICAgIGlmIChCICYmIHR5cGVvZiBCID09ICJzdHJpbmciKQogICAgICB1KHcgPT09ICJuaWwiID8gbnVsbCA6ICIvIi5jb25jYXQodykpOwogICAgZWxzZSBpZiAoQiAmJiB0eXBlb2YgQiA9PSAib2JqZWN0IikKICAgICAgbi5wdXNoKHcpOwogICAgZWxzZQogICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgZGF0YSIpOwogIH0KICBmdW5jdGlvbiBsKCkgewogICAgaWYgKCFuLmxlbmd0aCkKICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGRhdGEiKTsKICAgIG4ucG9wKCk7CiAgfQogIGEoKTsKICBmb3IgKHZhciBzID0gci5sZW5ndGg7IHMgPiAwICYmIHJbcyAtIDFdID09PSAwOyApCiAgICBzLS07CiAgZm9yICg7IGUgPCBzOyApIHsKICAgIHZhciBjID0gZSwgZCA9IHJbY107CiAgICBpZiAoZCA9PT0gNjAgJiYgcltjICsgMV0gPT09IDYwKQogICAgICBlICs9IDIsIGYoe30pOwogICAgZWxzZSBpZiAoZCA9PT0gNjIgJiYgcltjICsgMV0gPT09IDYyKQogICAgICBlICs9IDIsIGwoKTsKICAgIGVsc2UgaWYgKGQgPT09IDQ3KSB7CiAgICAgIGUgKz0gMTsKICAgICAgZm9yICh2YXIgdiA9IGU7IGUgPCByLmxlbmd0aCAmJiAhV2kocltlXSk7ICkKICAgICAgICBlKys7CiAgICAgIGZvciAodmFyIGsgPSAiIiwgRSA9IHY7IEUgPCBlOyBFKyspCiAgICAgICAgayArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHJbRV0pOwogICAgICBvKGspOwogICAgfSBlbHNlIGlmIChkID09PSA0MCkKICAgICAgZSArPSAxLCB1KHQoKSk7CiAgICBlbHNlIGlmIChkID09PSA5MSkKICAgICAgZSArPSAxLCBmKFtdKTsKICAgIGVsc2UgaWYgKGQgPT09IDkzKQogICAgICBlICs9IDEsIGwoKTsKICAgIGVsc2UgaWYgKGQgPT09IDExMCAmJiByW2MgKyAxXSA9PT0gMTE3ICYmIHJbYyArIDJdID09PSAxMDggJiYgcltjICsgM10gPT09IDEwOCkKICAgICAgZSArPSA0LCB1KG51bGwpOwogICAgZWxzZSBpZiAoZCA9PT0gMTE2ICYmIHJbYyArIDFdID09PSAxMTQgJiYgcltjICsgMl0gPT09IDExNyAmJiByW2MgKyAzXSA9PT0gMTAxKQogICAgICBlICs9IDQsIHUoITApOwogICAgZWxzZSBpZiAoZCA9PT0gMTAyICYmIHJbYyArIDFdID09PSA5NyAmJiByW2MgKyAyXSA9PT0gMTA4ICYmIHJbYyArIDNdID09PSAxMTUgJiYgcltjICsgNF0gPT09IDEwMSkKICAgICAgZSArPSA1LCB1KCExKTsKICAgIGVsc2UgaWYgKF9pKGQpKSB7CiAgICAgIGZvciAodmFyIGcgPSAiIjsgZSA8IHIubGVuZ3RoICYmIF9pKHJbZV0pOyApCiAgICAgICAgZyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHJbZV0pLCBlKys7CiAgICAgIHUocGFyc2VGbG9hdChnKSk7CiAgICB9IGVsc2UKICAgICAgZSArPSAxLCBjb25zb2xlLmxvZygKICAgICAgICAiSW52YWxpZCB0b2tlbiAnIi5jb25jYXQoU3RyaW5nLmZyb21DaGFyQ29kZShkKSwgIicgKCIpLmNvbmNhdChkLCAiKSBhdCAiKS5jb25jYXQoZSkKICAgICAgICAvLyArIGAgbmVhciAnJHtTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIGRhdGEuc2xpY2UoaW5kZXggLSAxMCwgaW5kZXggKyAyMCkgYXMgYW55KX0nYAogICAgICAgIC8vICsgYCBkYXRhIFske0FycmF5LmZyb20oZGF0YS5zbGljZShpbmRleCAtIDEwLCBpbmRleCArIDIwKSkuam9pbignLCAnKX1dYAogICAgICApOwogICAgYSgpOwogIH0KICByZXR1cm4gaTsKfQp2YXIgbzQgPSBbCiAgIkF4aXMiLAogICJYWSIsCiAgIlpvbmUiLAogICJXb3JkU3BhY2luZyIsCiAgIkZpcnN0TGluZUluZGVudCIsCiAgIkdseXBoU3BhY2luZyIsCiAgIlN0YXJ0SW5kZW50IiwKICAiRW5kSW5kZW50IiwKICAiU3BhY2VCZWZvcmUiLAogICJTcGFjZUFmdGVyIiwKICAiTGV0dGVyU3BhY2luZyIsCiAgIlZhbHVlcyIsCiAgIkdyaWRTaXplIiwKICAiR3JpZExlYWRpbmciLAogICJQb2ludEJhc2UiLAogICJCb3hCb3VuZHMiLAogICJUcmFuc2Zvcm1Qb2ludDAiLAogICJUcmFuc2Zvcm1Qb2ludDEiLAogICJUcmFuc2Zvcm1Qb2ludDIiLAogICJGb250U2l6ZSIsCiAgIkxlYWRpbmciLAogICJIb3Jpem9udGFsU2NhbGUiLAogICJWZXJ0aWNhbFNjYWxlIiwKICAiQmFzZWxpbmVTaGlmdCIsCiAgIlRzdW1lIiwKICAiT3V0bGluZVdpZHRoIiwKICAiQXV0b0xlYWRpbmciCl0sIHU0ID0gWyJSdW5MZW5ndGhBcnJheSJdOwpmdW5jdGlvbiBsNChyLCBlKSB7CiAgZSA9PT0gdm9pZCAwICYmIChlID0gITEpOwogIHZhciBhID0gbmV3IFVpbnQ4QXJyYXkoMTAyNCksIEEgPSAwLCB0ID0gMDsKICBmdW5jdGlvbiBpKHcpIHsKICAgIGlmIChBID49IGEubGVuZ3RoKSB7CiAgICAgIHZhciBCID0gbmV3IFVpbnQ4QXJyYXkoYS5sZW5ndGggKiAyKTsKICAgICAgQi5zZXQoYSksIGEgPSBCOwogICAgfQogICAgYVtBXSA9IHcsIEErKzsKICB9CiAgZnVuY3Rpb24gbih3KSB7CiAgICBmb3IgKHZhciBCID0gMDsgQiA8IHcubGVuZ3RoOyBCKyspCiAgICAgIGkody5jaGFyQ29kZUF0KEIpKTsKICB9CiAgZnVuY3Rpb24gZigpIHsKICAgIGlmIChlKQogICAgICBuKCIgIik7CiAgICBlbHNlCiAgICAgIGZvciAodmFyIHcgPSAwOyB3IDwgdDsgdysrKQogICAgICAgIG4oIgkiKTsKICB9CiAgZnVuY3Rpb24gdSh3LCBCKSB7CiAgICBmKCksIG4oIi8iLmNvbmNhdCh3KSksIHYoQiwgdywgITApLCBlIHx8IG4oYApgKTsKICB9CiAgZnVuY3Rpb24gbyh3KSB7CiAgICByZXR1cm4gdy50b1N0cmluZygpOwogIH0KICBmdW5jdGlvbiBsKHcpIHsKICAgIHJldHVybiB3LnRvRml4ZWQoNSkucmVwbGFjZSgvKFxkKTArJC9nLCAiJDEiKS5yZXBsYWNlKC9eMCtcLihbMS05XSkvZywgIi4kMSIpLnJlcGxhY2UoL14tMCtcLjAoXGQpL2csICItLjAkMSIpOwogIH0KICBmdW5jdGlvbiBzKHcsIEIpIHsKICAgIHZhciBtID0gQiAmJiBvNC5pbmRleE9mKEIpICE9PSAtMSB8fCAodyB8IDApICE9PSB3OwogICAgcmV0dXJuIG0gPyBsKHcpIDogbyh3KTsKICB9CiAgZnVuY3Rpb24gYyh3KSB7CiAgICB2YXIgQiA9IE9iamVjdC5rZXlzKHcpOwogICAgcmV0dXJuIEIuaW5kZXhPZigiOTgiKSAhPT0gLTEgJiYgQi51bnNoaWZ0LmFwcGx5KEIsIEIuc3BsaWNlKEIuaW5kZXhPZigiOTkiKSwgMSkpLCBCLmluZGV4T2YoIjk5IikgIT09IC0xICYmIEIudW5zaGlmdC5hcHBseShCLCBCLnNwbGljZShCLmluZGV4T2YoIjk5IiksIDEpKSwgQjsKICB9CiAgZnVuY3Rpb24gZCh3KSB7CiAgICAodyA9PT0gNDAgfHwgdyA9PT0gNDEgfHwgdyA9PT0gOTIpICYmIGkoOTIpLCBpKHcpOwogIH0KICBmdW5jdGlvbiB2KHcsIEIsIG0pIHsKICAgIG0gPT09IHZvaWQgMCAmJiAobSA9ICExKTsKICAgIGZ1bmN0aW9uIHAoKSB7CiAgICAgIG0gPyBuKCIgIikgOiBmKCk7CiAgICB9CiAgICBpZiAodyA9PT0gbnVsbCkKICAgICAgcCgpLCBuKGUgPyAiL25pbCIgOiAibnVsbCIpOwogICAgZWxzZSBpZiAodHlwZW9mIHcgPT0gIm51bWJlciIpCiAgICAgIHAoKSwgbihzKHcsIEIpKTsKICAgIGVsc2UgaWYgKHR5cGVvZiB3ID09ICJib29sZWFuIikKICAgICAgcCgpLCBuKHcgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKICAgIGVsc2UgaWYgKHR5cGVvZiB3ID09ICJzdHJpbmciKQogICAgICBpZiAocCgpLCAoQiA9PT0gIjk5IiB8fCBCID09PSAiOTgiKSAmJiB3LmNoYXJBdCgwKSA9PT0gIi8iKQogICAgICAgIG4odyk7CiAgICAgIGVsc2UgewogICAgICAgIG4oIigiKSwgaSgyNTQpLCBpKDI1NSk7CiAgICAgICAgZm9yICh2YXIgVyA9IDA7IFcgPCB3Lmxlbmd0aDsgVysrKSB7CiAgICAgICAgICB2YXIgQyA9IHcuY2hhckNvZGVBdChXKTsKICAgICAgICAgIGQoQyA+PiA4ICYgMjU1KSwgZChDICYgMjU1KTsKICAgICAgICB9CiAgICAgICAgbigiKSIpOwogICAgICB9CiAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHcpKQogICAgICBpZiAocCgpLCB3LmV2ZXJ5KGZ1bmN0aW9uKGwwKSB7CiAgICAgICAgcmV0dXJuIHR5cGVvZiBsMCA9PSAibnVtYmVyIjsKICAgICAgfSkpIHsKICAgICAgICBuKCJbIik7CiAgICAgICAgZm9yICh2YXIgXyA9IHU0LmluZGV4T2YoQikgIT09IC0xLCBOID0gMCwgRCA9IHc7IE4gPCBELmxlbmd0aDsgTisrKSB7CiAgICAgICAgICB2YXIgWSA9IERbTl07CiAgICAgICAgICBuKCIgIiksIG4oXyA/IHMoWSkgOiBsKFkpKTsKICAgICAgICB9CiAgICAgICAgbigiIF0iKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBuKCJbIiksIGUgfHwgbihgCmApOwogICAgICAgIGZvciAodmFyIGYwID0gMCwgRyA9IHc7IGYwIDwgRy5sZW5ndGg7IGYwKyspIHsKICAgICAgICAgIHZhciBZID0gR1tmMF07CiAgICAgICAgICB2KFksIEIpLCBlIHx8IG4oYApgKTsKICAgICAgICB9CiAgICAgICAgZigpLCBuKCJdIik7CiAgICAgIH0KICAgIGVsc2UgaWYgKHR5cGVvZiB3ID09ICJvYmplY3QiKSB7CiAgICAgIG0gJiYgIWUgJiYgbihgCmApLCBmKCksIG4oIjw8IiksIGUgfHwgbihgCmApLCB0Kys7CiAgICAgIGZvciAodmFyIEogPSAwLCBLID0gYyh3KTsgSiA8IEsubGVuZ3RoOyBKKyspIHsKICAgICAgICB2YXIgWCA9IEtbSl07CiAgICAgICAgdShYLCB3W1hdKTsKICAgICAgfQogICAgICB0LS0sIGYoKSwgbigiPj4iKTsKICAgIH0KICB9CiAgaWYgKGUpIHsKICAgIGlmICh0eXBlb2YgciA9PSAib2JqZWN0IikKICAgICAgZm9yICh2YXIgayA9IDAsIEUgPSBjKHIpOyBrIDwgRS5sZW5ndGg7IGsrKykgewogICAgICAgIHZhciBnID0gRVtrXTsKICAgICAgICB1KGcsIHJbZ10pOwogICAgICB9CiAgfSBlbHNlCiAgICBuKGAKCmApLCB2KHIpOwogIHJldHVybiBhLnNsaWNlKDAsIEEpOwp9CnZhciBIMCA9IGZ1bmN0aW9uKCkgewogIHJldHVybiBIMCA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24ocikgewogICAgZm9yICh2YXIgZSwgYSA9IDEsIEEgPSBhcmd1bWVudHMubGVuZ3RoOyBhIDwgQTsgYSsrKSB7CiAgICAgIGUgPSBhcmd1bWVudHNbYV07CiAgICAgIGZvciAodmFyIHQgaW4gZSkgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIHQpICYmIChyW3RdID0gZVt0XSk7CiAgICB9CiAgICByZXR1cm4gcjsKICB9LCBIMC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwp9LCBRMSA9IHsKICBuYW1lOiAiTXlyaWFkUHJvLVJlZ3VsYXIiLAogIHNjcmlwdDogMCwKICB0eXBlOiAwLAogIHN5bnRoZXRpYzogMAp9LCBmZSA9IHsKICBqdXN0aWZpY2F0aW9uOiAibGVmdCIsCiAgZmlyc3RMaW5lSW5kZW50OiAwLAogIHN0YXJ0SW5kZW50OiAwLAogIGVuZEluZGVudDogMCwKICBzcGFjZUJlZm9yZTogMCwKICBzcGFjZUFmdGVyOiAwLAogIGF1dG9IeXBoZW5hdGU6ICEwLAogIGh5cGhlbmF0ZWRXb3JkU2l6ZTogNiwKICBwcmVIeXBoZW46IDIsCiAgcG9zdEh5cGhlbjogMiwKICBjb25zZWN1dGl2ZUh5cGhlbnM6IDgsCiAgem9uZTogMzYsCiAgd29yZFNwYWNpbmc6IFswLjgsIDEsIDEuMzNdLAogIGxldHRlclNwYWNpbmc6IFswLCAwLCAwXSwKICBnbHlwaFNwYWNpbmc6IFsxLCAxLCAxXSwKICBhdXRvTGVhZGluZzogMS4yLAogIGxlYWRpbmdUeXBlOiAwLAogIGhhbmdpbmc6ICExLAogIGJ1cmFzYWdhcmk6ICExLAogIGtpbnNva3VPcmRlcjogMCwKICBldmVyeUxpbmVDb21wb3NlcjogITEKfSwgYzQgPSB7CiAgZm9udDogUTEsCiAgZm9udFNpemU6IDEyLAogIGZhdXhCb2xkOiAhMSwKICBmYXV4SXRhbGljOiAhMSwKICBhdXRvTGVhZGluZzogITAsCiAgbGVhZGluZzogMCwKICBob3Jpem9udGFsU2NhbGU6IDEsCiAgdmVydGljYWxTY2FsZTogMSwKICB0cmFja2luZzogMCwKICBhdXRvS2VybmluZzogITAsCiAga2VybmluZzogMCwKICBiYXNlbGluZVNoaWZ0OiAwLAogIGZvbnRDYXBzOiAwLAogIGZvbnRCYXNlbGluZTogMCwKICB1bmRlcmxpbmU6ICExLAogIHN0cmlrZXRocm91Z2g6ICExLAogIGxpZ2F0dXJlczogITAsCiAgZExpZ2F0dXJlczogITEsCiAgYmFzZWxpbmVEaXJlY3Rpb246IDIsCiAgdHN1bWU6IDAsCiAgc3R5bGVSdW5BbGlnbm1lbnQ6IDIsCiAgbGFuZ3VhZ2U6IDAsCiAgbm9CcmVhazogITEsCiAgZmlsbENvbG9yOiB7IHI6IDAsIGc6IDAsIGI6IDAgfSwKICBzdHJva2VDb2xvcjogeyByOiAwLCBnOiAwLCBiOiAwIH0sCiAgZmlsbEZsYWc6ICEwLAogIHN0cm9rZUZsYWc6ICExLAogIGZpbGxGaXJzdDogITAsCiAgeVVuZGVybGluZTogMSwKICBvdXRsaW5lV2lkdGg6IDEsCiAgY2hhcmFjdGVyRGlyZWN0aW9uOiAwLAogIGhpbmRpTnVtYmVyczogITEsCiAga2FzaGlkYTogMSwKICBkaWFjcml0aWNQb3M6IDIKfSwgczQgPSB7CiAgaXNPbjogITEsCiAgc2hvdzogITEsCiAgc2l6ZTogMTgsCiAgbGVhZGluZzogMjIsCiAgY29sb3I6IHsgcjogMCwgZzogMCwgYjogMjU1IH0sCiAgbGVhZGluZ0ZpbGxDb2xvcjogeyByOiAwLCBnOiAwLCBiOiAyNTUgfSwKICBhbGlnbkxpbmVIZWlnaHRUb0dyaWRGbGFnczogITEKfSwgUUEgPSBbCiAgImp1c3RpZmljYXRpb24iLAogICJmaXJzdExpbmVJbmRlbnQiLAogICJzdGFydEluZGVudCIsCiAgImVuZEluZGVudCIsCiAgInNwYWNlQmVmb3JlIiwKICAic3BhY2VBZnRlciIsCiAgImF1dG9IeXBoZW5hdGUiLAogICJoeXBoZW5hdGVkV29yZFNpemUiLAogICJwcmVIeXBoZW4iLAogICJwb3N0SHlwaGVuIiwKICAiY29uc2VjdXRpdmVIeXBoZW5zIiwKICAiem9uZSIsCiAgIndvcmRTcGFjaW5nIiwKICAibGV0dGVyU3BhY2luZyIsCiAgImdseXBoU3BhY2luZyIsCiAgImF1dG9MZWFkaW5nIiwKICAibGVhZGluZ1R5cGUiLAogICJoYW5naW5nIiwKICAiYnVyYXNhZ2FyaSIsCiAgImtpbnNva3VPcmRlciIsCiAgImV2ZXJ5TGluZUNvbXBvc2VyIgpdLCBKQSA9IFsKICAiZm9udCIsCiAgImZvbnRTaXplIiwKICAiZmF1eEJvbGQiLAogICJmYXV4SXRhbGljIiwKICAiYXV0b0xlYWRpbmciLAogICJsZWFkaW5nIiwKICAiaG9yaXpvbnRhbFNjYWxlIiwKICAidmVydGljYWxTY2FsZSIsCiAgInRyYWNraW5nIiwKICAiYXV0b0tlcm5pbmciLAogICJrZXJuaW5nIiwKICAiYmFzZWxpbmVTaGlmdCIsCiAgImZvbnRDYXBzIiwKICAiZm9udEJhc2VsaW5lIiwKICAidW5kZXJsaW5lIiwKICAic3RyaWtldGhyb3VnaCIsCiAgImxpZ2F0dXJlcyIsCiAgImRMaWdhdHVyZXMiLAogICJiYXNlbGluZURpcmVjdGlvbiIsCiAgInRzdW1lIiwKICAic3R5bGVSdW5BbGlnbm1lbnQiLAogICJsYW5ndWFnZSIsCiAgIm5vQnJlYWsiLAogICJmaWxsQ29sb3IiLAogICJzdHJva2VDb2xvciIsCiAgImZpbGxGbGFnIiwKICAic3Ryb2tlRmxhZyIsCiAgImZpbGxGaXJzdCIsCiAgInlVbmRlcmxpbmUiLAogICJvdXRsaW5lV2lkdGgiLAogICJjaGFyYWN0ZXJEaXJlY3Rpb24iLAogICJoaW5kaU51bWJlcnMiLAogICJrYXNoaWRhIiwKICAiZGlhY3JpdGljUG9zIgpdLCBKMSA9IFsibm9uZSIsICJjcmlzcCIsICJzdHJvbmciLCAic21vb3RoIiwgInNoYXJwIl0sIEgxID0gWwogICJsZWZ0IiwKICAicmlnaHQiLAogICJjZW50ZXIiLAogICJqdXN0aWZ5LWxlZnQiLAogICJqdXN0aWZ5LXJpZ2h0IiwKICAianVzdGlmeS1jZW50ZXIiLAogICJqdXN0aWZ5LWFsbCIKICAvLyA2Cl07CmZ1bmN0aW9uIHoxKHIpIHsKICByZXR1cm4gci5zdWJzdHJpbmcoMCwgMSkudG9VcHBlckNhc2UoKSArIHIuc3Vic3RyaW5nKDEpOwp9CmZ1bmN0aW9uIGI0KHIpIHsKICB2YXIgZSA9IHIuVmFsdWVzOwogIHN3aXRjaCAoci5UeXBlKSB7CiAgICBjYXNlIDA6CiAgICAgIHJldHVybiB7IGs6IGVbMV0gKiAyNTUgfTsKICAgIGNhc2UgMToKICAgICAgcmV0dXJuIGVbMF0gPT09IDEgPyB7IHI6IGVbMV0gKiAyNTUsIGc6IGVbMl0gKiAyNTUsIGI6IGVbM10gKiAyNTUgfSA6ICgKICAgICAgICAvLyByZ2IKICAgICAgICB7IHI6IGVbMV0gKiAyNTUsIGc6IGVbMl0gKiAyNTUsIGI6IGVbM10gKiAyNTUsIGE6IGVbMF0gKiAyNTUgfQogICAgICApOwogICAgY2FzZSAyOgogICAgICByZXR1cm4geyBjOiBlWzFdICogMjU1LCBtOiBlWzJdICogMjU1LCB5OiBlWzNdICogMjU1LCBrOiBlWzRdICogMjU1IH07CiAgICBkZWZhdWx0OgogICAgICB0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gY29sb3IgdHlwZSBpbiB0ZXh0IGxheWVyIik7CiAgfQp9CmZ1bmN0aW9uIEZBKHIpIHsKICBpZiAocikgewogICAgaWYgKCJyIiBpbiByKQogICAgICByZXR1cm4geyBUeXBlOiAxLCBWYWx1ZXM6IFsiYSIgaW4gciA/IHIuYSAvIDI1NSA6IDEsIHIuciAvIDI1NSwgci5nIC8gMjU1LCByLmIgLyAyNTVdIH07CiAgICBpZiAoImMiIGluIHIpCiAgICAgIHJldHVybiB7IFR5cGU6IDIsIFZhbHVlczogWzEsIHIuYyAvIDI1NSwgci5tIC8gMjU1LCByLnkgLyAyNTUsIHIuayAvIDI1NV0gfTsKICAgIGlmICgiayIgaW4gcikKICAgICAgcmV0dXJuIHsgVHlwZTogMCwgVmFsdWVzOiBbMSwgci5rIC8gMjU1XSB9OwogICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbG9yIHR5cGUgaW4gdGV4dCBsYXllciIpOwogIH0gZWxzZSByZXR1cm4geyBUeXBlOiAxLCBWYWx1ZXM6IFswLCAwLCAwLCAwXSB9Owp9CmZ1bmN0aW9uIEdpKHIsIGUpIHsKICBpZiAoIXIgfHwgIWUgfHwgci5sZW5ndGggIT09IGUubGVuZ3RoKQogICAgcmV0dXJuICExOwogIGZvciAodmFyIGEgPSAwOyBhIDwgci5sZW5ndGg7IGErKykKICAgIGlmIChyW2FdICE9PSBlW2FdKQogICAgICByZXR1cm4gITE7CiAgcmV0dXJuICEwOwp9CmZ1bmN0aW9uIFhpKHIsIGUpIHsKICBpZiAoIXIgfHwgIWUpCiAgICByZXR1cm4gITE7CiAgZm9yICh2YXIgYSA9IDAsIEEgPSBPYmplY3Qua2V5cyhyKTsgYSA8IEEubGVuZ3RoOyBhKyspIHsKICAgIHZhciB0ID0gQVthXTsKICAgIGlmIChyW3RdICE9PSBlW3RdKQogICAgICByZXR1cm4gITE7CiAgfQogIGZvciAodmFyIGkgPSAwLCBuID0gT2JqZWN0LmtleXMoZSk7IGkgPCBuLmxlbmd0aDsgaSsrKSB7CiAgICB2YXIgdCA9IG5baV07CiAgICBpZiAoclt0XSAhPT0gZVt0XSkKICAgICAgcmV0dXJuICExOwogIH0KICByZXR1cm4gITA7Cn0KZnVuY3Rpb24gZDQociwgZSkgewogIGZvciAodmFyIGEgPSAwOyBhIDwgci5sZW5ndGg7IGErKykKICAgIGlmIChyW2FdLm5hbWUgPT09IGUubmFtZSkKICAgICAgcmV0dXJuIGE7CiAgcmV0dXJuIHIucHVzaChlKSwgci5sZW5ndGggLSAxOwp9CmZ1bmN0aW9uIEwxKHIsIGUsIGEpIHsKICBmb3IgKHZhciBBID0ge30sIHQgPSAwLCBpID0gZTsgdCA8IGkubGVuZ3RoOyB0KyspIHsKICAgIHZhciBuID0gaVt0XSwgZiA9IHoxKG4pOwogICAgcltmXSAhPT0gdm9pZCAwICYmIChuID09PSAianVzdGlmaWNhdGlvbiIgPyBBW25dID0gSDFbcltmXV0gOiBuID09PSAiZm9udCIgPyBBW25dID0gYVtyW2ZdXSA6IG4gPT09ICJmaWxsQ29sb3IiIHx8IG4gPT09ICJzdHJva2VDb2xvciIgPyBBW25dID0gYjQocltmXSkgOiBBW25dID0gcltmXSk7CiAgfQogIHJldHVybiBBOwp9CmZ1bmN0aW9uIEsxKHIsIGUsIGEpIHsKICBmb3IgKHZhciBBLCB0ID0ge30sIGkgPSAwLCBuID0gZTsgaSA8IG4ubGVuZ3RoOyBpKyspIHsKICAgIHZhciBmID0gbltpXSwgdSA9IHoxKGYpOwogICAgcltmXSAhPT0gdm9pZCAwICYmIChmID09PSAianVzdGlmaWNhdGlvbiIgPyB0W3VdID0gSDEuaW5kZXhPZigoQSA9IHJbZl0pICE9PSBudWxsICYmIEEgIT09IHZvaWQgMCA/IEEgOiAibGVmdCIpIDogZiA9PT0gImZvbnQiID8gdFt1XSA9IGQ0KGEsIHJbZl0pIDogZiA9PT0gImZpbGxDb2xvciIgfHwgZiA9PT0gInN0cm9rZUNvbG9yIiA/IHRbdV0gPSBGQShyW2ZdKSA6IHRbdV0gPSByW2ZdKTsKICB9CiAgcmV0dXJuIHQ7Cn0KZnVuY3Rpb24gaDQociwgZSkgewogIHJldHVybiBMMShyLCBRQSwgZSk7Cn0KZnVuY3Rpb24gdjQociwgZSkgewogIHJldHVybiBMMShyLCBKQSwgZSk7Cn0KZnVuY3Rpb24gb2UociwgZSkgewogIHJldHVybiBLMShyLCBRQSwgZSk7Cn0KZnVuY3Rpb24gaUEociwgZSkgewogIHJldHVybiBLMShyLCBKQSwgZSk7Cn0KZnVuY3Rpb24gUmkociwgZSwgYSkgewogIGlmIChlLmxlbmd0aCkgewogICAgZm9yICh2YXIgQSA9IGZ1bmN0aW9uKGYpIHsKICAgICAgdmFyIHUgPSBlWzBdLnN0eWxlW2ZdOwogICAgICBpZiAodSAhPT0gdm9pZCAwKSB7CiAgICAgICAgdmFyIG8gPSAhMTsKICAgICAgICBBcnJheS5pc0FycmF5KHUpID8gbyA9IGUuZXZlcnkoZnVuY3Rpb24oaykgewogICAgICAgICAgcmV0dXJuIEdpKGsuc3R5bGVbZl0sIHUpOwogICAgICAgIH0pIDogdHlwZW9mIHUgPT0gIm9iamVjdCIgPyBvID0gZS5ldmVyeShmdW5jdGlvbihrKSB7CiAgICAgICAgICByZXR1cm4gWGkoay5zdHlsZVtmXSwgdSk7CiAgICAgICAgfSkgOiBvID0gZS5ldmVyeShmdW5jdGlvbihrKSB7CiAgICAgICAgICByZXR1cm4gay5zdHlsZVtmXSA9PT0gdTsKICAgICAgICB9KSwgbyAmJiAocltmXSA9IHUpOwogICAgICB9CiAgICAgIHZhciBsID0gcltmXTsKICAgICAgaWYgKGwgIT09IHZvaWQgMCkKICAgICAgICBmb3IgKHZhciBzID0gMCwgYyA9IGU7IHMgPCBjLmxlbmd0aDsgcysrKSB7CiAgICAgICAgICB2YXIgZCA9IGNbc10sIHYgPSAhMTsKICAgICAgICAgIEFycmF5LmlzQXJyYXkodSkgPyB2ID0gR2koZC5zdHlsZVtmXSwgdSkgOiB0eXBlb2YgdSA9PSAib2JqZWN0IiA/IHYgPSBYaShkLnN0eWxlW2ZdLCB1KSA6IHYgPSBkLnN0eWxlW2ZdID09PSB1LCB2ICYmIGRlbGV0ZSBkLnN0eWxlW2ZdOwogICAgICAgIH0KICAgIH0sIHQgPSAwLCBpID0gYTsgdCA8IGkubGVuZ3RoOyB0KyspIHsKICAgICAgdmFyIG4gPSBpW3RdOwogICAgICBBKG4pOwogICAgfQogICAgZS5ldmVyeShmdW5jdGlvbihmKSB7CiAgICAgIHJldHVybiBPYmplY3Qua2V5cyhmLnN0eWxlKS5sZW5ndGggPT09IDA7CiAgICB9KSAmJiAoZS5sZW5ndGggPSAwKTsKICB9Cn0KZnVuY3Rpb24gazQocikgewogIGZvciAodmFyIGUsIGEsIEEsIHQsIGksIG4sIGYgPSByLkVuZ2luZURpY3QsIHUgPSByLlJlc291cmNlRGljdCwgbyA9IHUuRm9udFNldC5tYXAoZnVuY3Rpb24oVykgewogICAgcmV0dXJuIHsKICAgICAgbmFtZTogVy5OYW1lLAogICAgICBzY3JpcHQ6IFcuU2NyaXB0LAogICAgICB0eXBlOiBXLkZvbnRUeXBlLAogICAgICBzeW50aGV0aWM6IFcuU3ludGhldGljCiAgICB9OwogIH0pLCBsID0gZi5FZGl0b3IuVGV4dC5yZXBsYWNlKC9cci9nLCBgCmApLCBzID0gMDsgL1xuJC8udGVzdChsKTsgKQogICAgbCA9IGwuc3Vic3RyaW5nKDAsIGwubGVuZ3RoIC0gMSksIHMrKzsKICB2YXIgYyA9IHsKICAgIHRleHQ6IGwsCiAgICBhbnRpQWxpYXM6IChlID0gSjFbZi5BbnRpQWxpYXNdKSAhPT0gbnVsbCAmJiBlICE9PSB2b2lkIDAgPyBlIDogInNtb290aCIsCiAgICB1c2VGcmFjdGlvbmFsR2x5cGhXaWR0aHM6ICEhZi5Vc2VGcmFjdGlvbmFsR2x5cGhXaWR0aHMsCiAgICBzdXBlcnNjcmlwdFNpemU6IHUuU3VwZXJzY3JpcHRTaXplLAogICAgc3VwZXJzY3JpcHRQb3NpdGlvbjogdS5TdXBlcnNjcmlwdFBvc2l0aW9uLAogICAgc3Vic2NyaXB0U2l6ZTogdS5TdWJzY3JpcHRTaXplLAogICAgc3Vic2NyaXB0UG9zaXRpb246IHUuU3Vic2NyaXB0UG9zaXRpb24sCiAgICBzbWFsbENhcFNpemU6IHUuU21hbGxDYXBTaXplCiAgfSwgZCA9IChuID0gKGkgPSAodCA9IChBID0gKGEgPSBmLlJlbmRlcmVkKSA9PT0gbnVsbCB8fCBhID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhLlNoYXBlcykgPT09IG51bGwgfHwgQSA9PT0gdm9pZCAwID8gdm9pZCAwIDogQS5DaGlsZHJlbikgPT09IG51bGwgfHwgdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogdFswXSkgPT09IG51bGwgfHwgaSA9PT0gdm9pZCAwID8gdm9pZCAwIDogaS5Db29raWUpID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG4uUGhvdG9zaG9wOwogIGQgJiYgKGMuc2hhcGVUeXBlID0gZC5TaGFwZVR5cGUgPT09IDEgPyAiYm94IiA6ICJwb2ludCIsIGQuUG9pbnRCYXNlICYmIChjLnBvaW50QmFzZSA9IGQuUG9pbnRCYXNlKSwgZC5Cb3hCb3VuZHMgJiYgKGMuYm94Qm91bmRzID0gZC5Cb3hCb3VuZHMpKTsKICB2YXIgdiA9IGYuUGFyYWdyYXBoUnVuOwogIGMucGFyYWdyYXBoU3R5bGUgPSB7fSwgYy5wYXJhZ3JhcGhTdHlsZVJ1bnMgPSBbXTsKICBmb3IgKHZhciBrID0gMDsgayA8IHYuUnVuQXJyYXkubGVuZ3RoOyBrKyspIHsKICAgIHZhciBFID0gdi5SdW5BcnJheVtrXSwgZyA9IHYuUnVuTGVuZ3RoQXJyYXlba10sIHcgPSBoNChFLlBhcmFncmFwaFNoZWV0LlByb3BlcnRpZXMsIG8pOwogICAgYy5wYXJhZ3JhcGhTdHlsZVJ1bnMucHVzaCh7CiAgICAgIGxlbmd0aDogZywKICAgICAgc3R5bGU6IHcKICAgICAgLyosIGFkanVzdG1lbnRzKi8KICAgIH0pOwogIH0KICBmb3IgKHZhciBCID0gczsgYy5wYXJhZ3JhcGhTdHlsZVJ1bnMubGVuZ3RoICYmIEIgPiAwOyBCLS0pCiAgICAtLWMucGFyYWdyYXBoU3R5bGVSdW5zW2MucGFyYWdyYXBoU3R5bGVSdW5zLmxlbmd0aCAtIDFdLmxlbmd0aCA9PT0gMCAmJiBjLnBhcmFncmFwaFN0eWxlUnVucy5wb3AoKTsKICBSaShjLnBhcmFncmFwaFN0eWxlLCBjLnBhcmFncmFwaFN0eWxlUnVucywgUUEpLCBjLnBhcmFncmFwaFN0eWxlUnVucy5sZW5ndGggfHwgZGVsZXRlIGMucGFyYWdyYXBoU3R5bGVSdW5zOwogIHZhciBtID0gZi5TdHlsZVJ1bjsKICBjLnN0eWxlID0ge30sIGMuc3R5bGVSdW5zID0gW107CiAgZm9yICh2YXIgayA9IDA7IGsgPCBtLlJ1bkFycmF5Lmxlbmd0aDsgaysrKSB7CiAgICB2YXIgcCA9IG0uUnVuTGVuZ3RoQXJyYXlba10sIHcgPSB2NChtLlJ1bkFycmF5W2tdLlN0eWxlU2hlZXQuU3R5bGVTaGVldERhdGEsIG8pOwogICAgdy5mb250IHx8ICh3LmZvbnQgPSBvWzBdKSwgYy5zdHlsZVJ1bnMucHVzaCh7IGxlbmd0aDogcCwgc3R5bGU6IHcgfSk7CiAgfQogIGZvciAodmFyIEIgPSBzOyBjLnN0eWxlUnVucy5sZW5ndGggJiYgQiA+IDA7IEItLSkKICAgIC0tYy5zdHlsZVJ1bnNbYy5zdHlsZVJ1bnMubGVuZ3RoIC0gMV0ubGVuZ3RoID09PSAwICYmIGMuc3R5bGVSdW5zLnBvcCgpOwogIHJldHVybiBSaShjLnN0eWxlLCBjLnN0eWxlUnVucywgSkEpLCBjLnN0eWxlUnVucy5sZW5ndGggfHwgZGVsZXRlIGMuc3R5bGVSdW5zLCBjOwp9CmZ1bmN0aW9uIGc0KHIpIHsKICB2YXIgZSwgYSwgQSwgdCwgaSwgbiwgZiwgdSwgbywgbCwgcywgYywgZCA9ICIiLmNvbmNhdCgoci50ZXh0IHx8ICIiKS5yZXBsYWNlKC9ccj9cbi9nLCAiXHIiKSwgIlxyIiksIHYgPSBbCiAgICB7IG5hbWU6ICJBZG9iZUludmlzRm9udCIsIHNjcmlwdDogMCwgdHlwZTogMCwgc3ludGhldGljOiAwIH0KICBdLCBrID0gKChlID0gci5zdHlsZSkgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5mb250KSB8fCAoKEEgPSAoYSA9IHIuc3R5bGVSdW5zKSA9PT0gbnVsbCB8fCBhID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhLmZpbmQoZnVuY3Rpb24oVikgewogICAgcmV0dXJuIFYuc3R5bGUuZm9udDsKICB9KSkgPT09IG51bGwgfHwgQSA9PT0gdm9pZCAwID8gdm9pZCAwIDogQS5zdHlsZS5mb250KSB8fCBRMSwgRSA9IFtdLCBnID0gW10sIHcgPSByLnBhcmFncmFwaFN0eWxlUnVuczsKICBpZiAodyAmJiB3Lmxlbmd0aCkgewogICAgZm9yICh2YXIgQiA9IGQubGVuZ3RoLCBtID0gMCwgcCA9IHc7IG0gPCBwLmxlbmd0aDsgbSsrKSB7CiAgICAgIHZhciBXID0gcFttXSwgQyA9IE1hdGgubWluKFcubGVuZ3RoLCBCKTsKICAgICAgQiAtPSBDLCBDICYmIChCID09PSAxICYmIFcgPT09IHdbdy5sZW5ndGggLSAxXSAmJiAoQysrLCBCLS0pLCBnLnB1c2goQyksIEUucHVzaCh7CiAgICAgICAgUGFyYWdyYXBoU2hlZXQ6IHsKICAgICAgICAgIERlZmF1bHRTdHlsZVNoZWV0OiAwLAogICAgICAgICAgUHJvcGVydGllczogb2UoSDAoSDAoSDAoe30sIGZlKSwgci5wYXJhZ3JhcGhTdHlsZSksIFcuc3R5bGUpLCB2KQogICAgICAgIH0sCiAgICAgICAgQWRqdXN0bWVudHM6IHsgQXhpczogWzEsIDAsIDFdLCBYWTogWzAsIDBdIH0KICAgICAgfSkpOwogICAgfQogICAgQiAmJiAoZy5wdXNoKEIpLCBFLnB1c2goewogICAgICBQYXJhZ3JhcGhTaGVldDogewogICAgICAgIERlZmF1bHRTdHlsZVNoZWV0OiAwLAogICAgICAgIFByb3BlcnRpZXM6IG9lKEgwKEgwKHt9LCBmZSksIHIucGFyYWdyYXBoU3R5bGUpLCB2KQogICAgICB9LAogICAgICBBZGp1c3RtZW50czogeyBBeGlzOiBbMSwgMCwgMV0sIFhZOiBbMCwgMF0gfQogICAgfSkpOwogIH0gZWxzZQogICAgZm9yICh2YXIgXyA9IDAsIE4gPSAwOyBfIDwgZC5sZW5ndGg7IF8rKykKICAgICAgZC5jaGFyQ29kZUF0KF8pID09PSAxMyAmJiAoZy5wdXNoKF8gLSBOICsgMSksIEUucHVzaCh7CiAgICAgICAgUGFyYWdyYXBoU2hlZXQ6IHsKICAgICAgICAgIERlZmF1bHRTdHlsZVNoZWV0OiAwLAogICAgICAgICAgUHJvcGVydGllczogb2UoSDAoSDAoe30sIGZlKSwgci5wYXJhZ3JhcGhTdHlsZSksIHYpCiAgICAgICAgfSwKICAgICAgICBBZGp1c3RtZW50czogeyBBeGlzOiBbMSwgMCwgMV0sIFhZOiBbMCwgMF0gfQogICAgICB9KSwgTiA9IF8gKyAxKTsKICBmb3IgKHZhciBEID0gaUEoSDAoSDAoe30sIGM0KSwgeyBmb250OiBrIH0pLCB2KSwgWSA9IHIuc3R5bGVSdW5zIHx8IFt7IGxlbmd0aDogZC5sZW5ndGgsIHN0eWxlOiByLnN0eWxlIHx8IHt9IH1dLCBmMCA9IFtdLCBHID0gW10sIEogPSBkLmxlbmd0aCwgSyA9IDAsIFggPSBZOyBLIDwgWC5sZW5ndGg7IEsrKykgewogICAgdmFyIGwwID0gWFtLXSwgQyA9IE1hdGgubWluKGwwLmxlbmd0aCwgSik7CiAgICBKIC09IEMsIEMgJiYgKEogPT09IDEgJiYgbDAgPT09IFlbWS5sZW5ndGggLSAxXSAmJiAoQysrLCBKLS0pLCBHLnB1c2goQyksIGYwLnB1c2goewogICAgICBTdHlsZVNoZWV0OiB7CiAgICAgICAgU3R5bGVTaGVldERhdGE6IGlBKEgwKEgwKHsga2VybmluZzogMCwgYXV0b0tlcm5pbmc6ICEwLCBmaWxsQ29sb3I6IHsgcjogMCwgZzogMCwgYjogMCB9IH0sIHIuc3R5bGUpLCBsMC5zdHlsZSksIHYpCiAgICAgIH0KICAgIH0pKTsKICB9CiAgSiAmJiBZLmxlbmd0aCAmJiAoRy5wdXNoKEopLCBmMC5wdXNoKHsKICAgIFN0eWxlU2hlZXQ6IHsKICAgICAgU3R5bGVTaGVldERhdGE6IGlBKEgwKHsga2VybmluZzogMCwgYXV0b0tlcm5pbmc6ICEwLCBmaWxsQ29sb3I6IHsgcjogMCwgZzogMCwgYjogMCB9IH0sIHIuc3R5bGUpLCB2KQogICAgfQogIH0pKTsKICB2YXIgYiA9IEgwKEgwKHt9LCBzNCksIHIuZ3JpZEluZm8pLCBaID0gci5vcmllbnRhdGlvbiA9PT0gInZlcnRpY2FsIiA/IDIgOiAwLCB5ID0gci5vcmllbnRhdGlvbiA9PT0gInZlcnRpY2FsIiA/IDEgOiAwLCBGID0gci5zaGFwZVR5cGUgPT09ICJib3giID8gMSA6IDAsIFIgPSB7CiAgICBTaGFwZVR5cGU6IEYKICB9OwogIEYgPT09IDAgPyBSLlBvaW50QmFzZSA9IHIucG9pbnRCYXNlIHx8IFswLCAwXSA6IFIuQm94Qm91bmRzID0gci5ib3hCb3VuZHMgfHwgWzAsIDAsIDAsIDBdLCBSLkJhc2UgPSB7CiAgICBTaGFwZVR5cGU6IEYsCiAgICBUcmFuc2Zvcm1Qb2ludDA6IFsxLCAwXSwKICAgIFRyYW5zZm9ybVBvaW50MTogWzAsIDFdLAogICAgVHJhbnNmb3JtUG9pbnQyOiBbMCwgMF0KICB9OwogIHZhciBNID0gewogICAgS2luc29rdVNldDogWwogICAgICB7CiAgICAgICAgTmFtZTogIlBob3Rvc2hvcEtpbnNva3VIYXJkIiwKICAgICAgICBOb1N0YXJ0OiAi44CB44CC77yM77yO44O777ya77yb77yf77yB44O84oCV4oCZ4oCd77yJ44CV77y9772d44CJ44CL44CN44CP44CR44O944O+44Kd44Ke44CF44GB44GD44GF44GH44GJ44Gj44KD44KF44KH44KO44Kh44Kj44Kl44Kn44Kp44OD44Oj44Ol44On44Ou44O144O244Kb44KcPyEpXX0sLjo74oSD4oSJwqLvvIXigLAiLAogICAgICAgIE5vRW5kOiAi4oCY4oCc77yI44CU77y7772b44CI44CK44CM44CO44CQKFt777+l77yEwqPvvKDCp+OAku+8gyIsCiAgICAgICAgS2VlcDogIuKAleKApSIsCiAgICAgICAgSGFuZ2luZzogIuOAgeOAgi4sIgogICAgICB9LAogICAgICB7CiAgICAgICAgTmFtZTogIlBob3Rvc2hvcEtpbnNva3VTb2Z0IiwKICAgICAgICBOb1N0YXJ0OiAi44CB44CC77yM77yO44O777ya77yb77yf77yB4oCZ4oCd77yJ44CV77y9772d44CJ44CL44CN44CP44CR44O944O+44Kd44Ke44CFIiwKICAgICAgICBOb0VuZDogIuKAmOKAnO+8iOOAlO+8u++9m+OAiOOAiuOAjOOAjuOAkCIsCiAgICAgICAgS2VlcDogIuKAleKApSIsCiAgICAgICAgSGFuZ2luZzogIuOAgeOAgi4sIgogICAgICB9CiAgICBdLAogICAgTW9qaUt1bWlTZXQ6IFsKICAgICAgeyBJbnRlcm5hbE5hbWU6ICJQaG90b3Nob3A2TW9qaUt1bWlTZXQxIiB9LAogICAgICB7IEludGVybmFsTmFtZTogIlBob3Rvc2hvcDZNb2ppS3VtaVNldDIiIH0sCiAgICAgIHsgSW50ZXJuYWxOYW1lOiAiUGhvdG9zaG9wNk1vamlLdW1pU2V0MyIgfSwKICAgICAgeyBJbnRlcm5hbE5hbWU6ICJQaG90b3Nob3A2TW9qaUt1bWlTZXQ0IiB9CiAgICBdLAogICAgVGhlTm9ybWFsU3R5bGVTaGVldDogMCwKICAgIFRoZU5vcm1hbFBhcmFncmFwaFNoZWV0OiAwLAogICAgUGFyYWdyYXBoU2hlZXRTZXQ6IFsKICAgICAgewogICAgICAgIE5hbWU6ICJOb3JtYWwgUkdCIiwKICAgICAgICBEZWZhdWx0U3R5bGVTaGVldDogMCwKICAgICAgICBQcm9wZXJ0aWVzOiBvZShIMChIMCh7fSwgZmUpLCByLnBhcmFncmFwaFN0eWxlKSwgdikKICAgICAgfQogICAgXSwKICAgIFN0eWxlU2hlZXRTZXQ6IFsKICAgICAgewogICAgICAgIE5hbWU6ICJOb3JtYWwgUkdCIiwKICAgICAgICBTdHlsZVNoZWV0RGF0YTogRAogICAgICB9CiAgICBdLAogICAgRm9udFNldDogdi5tYXAoZnVuY3Rpb24oVikgewogICAgICByZXR1cm4gewogICAgICAgIE5hbWU6IFYubmFtZSwKICAgICAgICBTY3JpcHQ6IFYuc2NyaXB0IHx8IDAsCiAgICAgICAgRm9udFR5cGU6IFYudHlwZSB8fCAwLAogICAgICAgIFN5bnRoZXRpYzogVi5zeW50aGV0aWMgfHwgMAogICAgICB9OwogICAgfSksCiAgICBTdXBlcnNjcmlwdFNpemU6ICh0ID0gci5zdXBlcnNjcmlwdFNpemUpICE9PSBudWxsICYmIHQgIT09IHZvaWQgMCA/IHQgOiAwLjU4MywKICAgIFN1cGVyc2NyaXB0UG9zaXRpb246IChpID0gci5zdXBlcnNjcmlwdFBvc2l0aW9uKSAhPT0gbnVsbCAmJiBpICE9PSB2b2lkIDAgPyBpIDogMC4zMzMsCiAgICBTdWJzY3JpcHRTaXplOiAobiA9IHIuc3Vic2NyaXB0U2l6ZSkgIT09IG51bGwgJiYgbiAhPT0gdm9pZCAwID8gbiA6IDAuNTgzLAogICAgU3Vic2NyaXB0UG9zaXRpb246IChmID0gci5zdWJzY3JpcHRQb3NpdGlvbikgIT09IG51bGwgJiYgZiAhPT0gdm9pZCAwID8gZiA6IDAuMzMzLAogICAgU21hbGxDYXBTaXplOiAodSA9IHIuc21hbGxDYXBTaXplKSAhPT0gbnVsbCAmJiB1ICE9PSB2b2lkIDAgPyB1IDogMC43CiAgfSwgSSA9IHsKICAgIEVuZ2luZURpY3Q6IHsKICAgICAgRWRpdG9yOiB7IFRleHQ6IGQgfSwKICAgICAgUGFyYWdyYXBoUnVuOiB7CiAgICAgICAgRGVmYXVsdFJ1bkRhdGE6IHsKICAgICAgICAgIFBhcmFncmFwaFNoZWV0OiB7IERlZmF1bHRTdHlsZVNoZWV0OiAwLCBQcm9wZXJ0aWVzOiB7fSB9LAogICAgICAgICAgQWRqdXN0bWVudHM6IHsgQXhpczogWzEsIDAsIDFdLCBYWTogWzAsIDBdIH0KICAgICAgICB9LAogICAgICAgIFJ1bkFycmF5OiBFLAogICAgICAgIFJ1bkxlbmd0aEFycmF5OiBnLAogICAgICAgIElzSm9pbmFibGU6IDEKICAgICAgfSwKICAgICAgU3R5bGVSdW46IHsKICAgICAgICBEZWZhdWx0UnVuRGF0YTogeyBTdHlsZVNoZWV0OiB7IFN0eWxlU2hlZXREYXRhOiB7fSB9IH0sCiAgICAgICAgUnVuQXJyYXk6IGYwLAogICAgICAgIFJ1bkxlbmd0aEFycmF5OiBHLAogICAgICAgIElzSm9pbmFibGU6IDIKICAgICAgfSwKICAgICAgR3JpZEluZm86IHsKICAgICAgICBHcmlkSXNPbjogISFiLmlzT24sCiAgICAgICAgU2hvd0dyaWQ6ICEhYi5zaG93LAogICAgICAgIEdyaWRTaXplOiAobyA9IGIuc2l6ZSkgIT09IG51bGwgJiYgbyAhPT0gdm9pZCAwID8gbyA6IDE4LAogICAgICAgIEdyaWRMZWFkaW5nOiAobCA9IGIubGVhZGluZykgIT09IG51bGwgJiYgbCAhPT0gdm9pZCAwID8gbCA6IDIyLAogICAgICAgIEdyaWRDb2xvcjogRkEoYi5jb2xvciksCiAgICAgICAgR3JpZExlYWRpbmdGaWxsQ29sb3I6IEZBKGIuY29sb3IpLAogICAgICAgIEFsaWduTGluZUhlaWdodFRvR3JpZEZsYWdzOiAhIWIuYWxpZ25MaW5lSGVpZ2h0VG9HcmlkRmxhZ3MKICAgICAgfSwKICAgICAgQW50aUFsaWFzOiBKMS5pbmRleE9mKChzID0gci5hbnRpQWxpYXMpICE9PSBudWxsICYmIHMgIT09IHZvaWQgMCA/IHMgOiAic2hhcnAiKSwKICAgICAgVXNlRnJhY3Rpb25hbEdseXBoV2lkdGhzOiAoYyA9IHIudXNlRnJhY3Rpb25hbEdseXBoV2lkdGhzKSAhPT0gbnVsbCAmJiBjICE9PSB2b2lkIDAgPyBjIDogITAsCiAgICAgIFJlbmRlcmVkOiB7CiAgICAgICAgVmVyc2lvbjogMSwKICAgICAgICBTaGFwZXM6IHsKICAgICAgICAgIFdyaXRpbmdEaXJlY3Rpb246IFosCiAgICAgICAgICBDaGlsZHJlbjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgU2hhcGVUeXBlOiBGLAogICAgICAgICAgICAgIFByb2Nlc3Npb246IHksCiAgICAgICAgICAgICAgTGluZXM6IHsgV3JpdGluZ0RpcmVjdGlvbjogWiwgQ2hpbGRyZW46IFtdIH0sCiAgICAgICAgICAgICAgQ29va2llOiB7IFBob3Rvc2hvcDogUiB9CiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBSZXNvdXJjZURpY3Q6IEgwKHt9LCBNKSwKICAgIERvY3VtZW50UmVzb3VyY2VzOiBIMCh7fSwgTSkKICB9OwogIHJldHVybiBJOwp9CnZhciBuQSA9IHsKICAwOiB7CiAgICB1cHJvb3Q6ICEwLAogICAgY2hpbGRyZW46IHsKICAgICAgMDogeyBuYW1lOiAiVHlwZSIgfSwKICAgICAgMTogeyBuYW1lOiAiVmFsdWVzIiB9CiAgICB9CiAgfQp9LCBIQSA9IHsKICAwOiB7IG5hbWU6ICJGb250IiB9LAogIDE6IHsgbmFtZTogIkZvbnRTaXplIiB9LAogIDI6IHsgbmFtZTogIkZhdXhCb2xkIiB9LAogIDM6IHsgbmFtZTogIkZhdXhJdGFsaWMiIH0sCiAgNDogeyBuYW1lOiAiQXV0b0xlYWRpbmciIH0sCiAgNTogeyBuYW1lOiAiTGVhZGluZyIgfSwKICA2OiB7IG5hbWU6ICJIb3Jpem9udGFsU2NhbGUiIH0sCiAgNzogeyBuYW1lOiAiVmVydGljYWxTY2FsZSIgfSwKICA4OiB7IG5hbWU6ICJUcmFja2luZyIgfSwKICA5OiB7IG5hbWU6ICJCYXNlbGluZVNoaWZ0IiB9LAogIC8vICcxMCc6ID8/PwogIDExOiB7IG5hbWU6ICJLZXJuaW5nPyIgfSwKICAxMjogeyBuYW1lOiAiRm9udENhcHMiIH0sCiAgMTM6IHsgbmFtZTogIkZvbnRCYXNlbGluZSIgfSwKICAxNTogeyBuYW1lOiAiU3RyaWtldGhyb3VnaD8iIH0sCiAgMTY6IHsgbmFtZTogIlVuZGVybGluZT8iIH0sCiAgMTg6IHsgbmFtZTogIkxpZ2F0dXJlcyIgfSwKICAxOTogeyBuYW1lOiAiRExpZ2F0dXJlcyIgfSwKICAvLyAnMjAnOiA/Pz8KICAvLyAnMjEnOiA/Pz8KICAvLyAnMjInOiA/Pz8KICAyMzogeyBuYW1lOiAiRnJhY3Rpb25zIiB9LAogIDI0OiB7IG5hbWU6ICJPcmRpbmFscyIgfSwKICAvLyAnMjUnOiA/Pz8KICAvLyAnMjYnOiA/Pz8KICAvLyAnMjcnOiA/Pz8KICAyODogeyBuYW1lOiAiU3R5bGlzdGljQWx0ZXJuYXRlcyIgfSwKICAvLyAnMjknOiA/Pz8KICAzMDogeyBuYW1lOiAiT2xkU3R5bGU/IiB9LAogIDM1OiB7IG5hbWU6ICJCYXNlbGluZURpcmVjdGlvbiIgfSwKICAzODogeyBuYW1lOiAiTGFuZ3VhZ2UiIH0sCiAgNTI6IHsgbmFtZTogIk5vQnJlYWsiIH0sCiAgNTM6IHsgbmFtZTogIkZpbGxDb2xvciIsIGNoaWxkcmVuOiBuQSB9LAogIDU0OiB7IG5hbWU6ICJTdHJva2VDb2xvciIsIGNoaWxkcmVuOiBuQSB9LAogIDU1OiB7IGNoaWxkcmVuOiB7IDk5OiB7IHVwcm9vdDogITAgfSB9IH0sCiAgLy8gJzY4JzogPz8/CiAgLy8gJzcwJzogPz8/CiAgLy8gJzcxJzogPz8/CiAgLy8gJzcyJzogPz8/CiAgLy8gJzczJzogPz8/CiAgNzk6IHsgY2hpbGRyZW46IG5BIH0KICAvLyAnODUnOiA/Pz8KICAvLyAnODcnOiA/Pz8KICAvLyAnODgnOiA/Pz8KfSwgZkEgPSB7CiAgMDogeyBuYW1lOiAiSnVzdGlmaWNhdGlvbiIgfSwKICAxOiB7IG5hbWU6ICJGaXJzdExpbmVJbmRlbnQiIH0sCiAgMjogeyBuYW1lOiAiU3RhcnRJbmRlbnQiIH0sCiAgMzogeyBuYW1lOiAiRW5kSW5kZW50IiB9LAogIDQ6IHsgbmFtZTogIlNwYWNlQmVmb3JlIiB9LAogIDU6IHsgbmFtZTogIlNwYWNlQWZ0ZXIiIH0sCiAgNzogeyBuYW1lOiAiQXV0b0xlYWRpbmciIH0sCiAgOTogeyBuYW1lOiAiQXV0b0h5cGhlbmF0ZSIgfSwKICAxMDogeyBuYW1lOiAiSHlwaGVuYXRlZFdvcmRTaXplIiB9LAogIDExOiB7IG5hbWU6ICJQcmVIeXBoZW4iIH0sCiAgMTI6IHsgbmFtZTogIlBvc3RIeXBoZW4iIH0sCiAgMTM6IHsgbmFtZTogIkNvbnNlY3V0aXZlSHlwaGVucz8iIH0sCiAgMTQ6IHsgbmFtZTogIlpvbmUiIH0sCiAgMTU6IHsgbmFtZTogIkh5cGVuYXRlQ2FwaXRhbGl6ZWRXb3JkcyIgfSwKICAxNzogeyBuYW1lOiAiV29yZFNwYWNpbmciIH0sCiAgMTg6IHsgbmFtZTogIkxldHRlclNwYWNpbmciIH0sCiAgMTk6IHsgbmFtZTogIkdseXBoU3BhY2luZyIgfSwKICAzMjogeyBuYW1lOiAiU3R5bGVTaGVldCIsIGNoaWxkcmVuOiBIQSB9Cn0sIFZpID0gewogIG5hbWU6ICJTdHlsZVNoZWV0RGF0YSIsCiAgY2hpbGRyZW46IEhBCn0sIG00ID0gewogIDA6IHsKICAgIG5hbWU6ICJSZXNvdXJjZURpY3QiLAogICAgY2hpbGRyZW46IHsKICAgICAgMTogewogICAgICAgIG5hbWU6ICJGb250U2V0IiwKICAgICAgICBjaGlsZHJlbjogewogICAgICAgICAgMDogewogICAgICAgICAgICB1cHJvb3Q6ICEwLAogICAgICAgICAgICBjaGlsZHJlbjogewogICAgICAgICAgICAgIDA6IHsKICAgICAgICAgICAgICAgIHVwcm9vdDogITAsCiAgICAgICAgICAgICAgICBjaGlsZHJlbjogewogICAgICAgICAgICAgICAgICAwOiB7CiAgICAgICAgICAgICAgICAgICAgdXByb290OiAhMCwKICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogewogICAgICAgICAgICAgICAgICAgICAgMDogeyBuYW1lOiAiTmFtZSIgfSwKICAgICAgICAgICAgICAgICAgICAgIDI6IHsgbmFtZTogIkZvbnRUeXBlIiB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAogICAgICAyOiB7CiAgICAgICAgbmFtZTogIjIiLAogICAgICAgIGNoaWxkcmVuOiB7fQogICAgICB9LAogICAgICAzOiB7CiAgICAgICAgbmFtZTogIk1vamlLdW1pU2V0IiwKICAgICAgICBjaGlsZHJlbjogewogICAgICAgICAgMDogewogICAgICAgICAgICB1cHJvb3Q6ICEwLAogICAgICAgICAgICBjaGlsZHJlbjogewogICAgICAgICAgICAgIDA6IHsKICAgICAgICAgICAgICAgIHVwcm9vdDogITAsCiAgICAgICAgICAgICAgICBjaGlsZHJlbjogewogICAgICAgICAgICAgICAgICAwOiB7IG5hbWU6ICJJbnRlcm5hbE5hbWUiIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIDQ6IHsKICAgICAgICBuYW1lOiAiS2luc29rdVNldCIsCiAgICAgICAgY2hpbGRyZW46IHsKICAgICAgICAgIDA6IHsKICAgICAgICAgICAgdXByb290OiAhMCwKICAgICAgICAgICAgY2hpbGRyZW46IHsKICAgICAgICAgICAgICAwOiB7CiAgICAgICAgICAgICAgICB1cHJvb3Q6ICEwLAogICAgICAgICAgICAgICAgY2hpbGRyZW46IHsKICAgICAgICAgICAgICAgICAgMDogeyBuYW1lOiAiTmFtZSIgfSwKICAgICAgICAgICAgICAgICAgNTogewogICAgICAgICAgICAgICAgICAgIHVwcm9vdDogITAsCiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IHsKICAgICAgICAgICAgICAgICAgICAgIDA6IHsgbmFtZTogIk5vU3RhcnQiIH0sCiAgICAgICAgICAgICAgICAgICAgICAxOiB7IG5hbWU6ICJOb0VuZCIgfSwKICAgICAgICAgICAgICAgICAgICAgIDI6IHsgbmFtZTogIktlZXAiIH0sCiAgICAgICAgICAgICAgICAgICAgICAzOiB7IG5hbWU6ICJIYW5naW5nIiB9LAogICAgICAgICAgICAgICAgICAgICAgNDogeyBuYW1lOiAiTmFtZSIgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgNTogewogICAgICAgIG5hbWU6ICJTdHlsZVNoZWV0U2V0IiwKICAgICAgICBjaGlsZHJlbjogewogICAgICAgICAgMDogewogICAgICAgICAgICB1cHJvb3Q6ICEwLAogICAgICAgICAgICBjaGlsZHJlbjogewogICAgICAgICAgICAgIDA6IHsKICAgICAgICAgICAgICAgIHVwcm9vdDogITAsCiAgICAgICAgICAgICAgICBjaGlsZHJlbjogewogICAgICAgICAgICAgICAgICAwOiB7IG5hbWU6ICJOYW1lIiB9LAogICAgICAgICAgICAgICAgICA2OiBWaQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgNjogewogICAgICAgIG5hbWU6ICJQYXJhZ3JhcGhTaGVldFNldCIsCiAgICAgICAgY2hpbGRyZW46IHsKICAgICAgICAgIDA6IHsKICAgICAgICAgICAgdXByb290OiAhMCwKICAgICAgICAgICAgY2hpbGRyZW46IHsKICAgICAgICAgICAgICAwOiB7CiAgICAgICAgICAgICAgICB1cHJvb3Q6ICEwLAogICAgICAgICAgICAgICAgY2hpbGRyZW46IHsKICAgICAgICAgICAgICAgICAgMDogeyBuYW1lOiAiTmFtZSIgfSwKICAgICAgICAgICAgICAgICAgNTogewogICAgICAgICAgICAgICAgICAgIG5hbWU6ICJQcm9wZXJ0aWVzIiwKICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogZkEKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgNjogeyBuYW1lOiAiRGVmYXVsdFN0eWxlU2hlZXQiIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIDg6IHsKICAgICAgICBuYW1lOiAiVGV4dEZyYW1lU2V0IiwKICAgICAgICBjaGlsZHJlbjogewogICAgICAgICAgMDogewogICAgICAgICAgICB1cHJvb3Q6ICEwLAogICAgICAgICAgICBjaGlsZHJlbjogewogICAgICAgICAgICAgIDA6IHsKICAgICAgICAgICAgICAgIG5hbWU6ICJwYXRoIiwKICAgICAgICAgICAgICAgIGNoaWxkcmVuOiB7CiAgICAgICAgICAgICAgICAgIDA6IHsgbmFtZTogIm5hbWUiIH0sCiAgICAgICAgICAgICAgICAgIDE6IHsKICAgICAgICAgICAgICAgICAgICBuYW1lOiAiYmV6aWVyQ3VydmUiLAogICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiB7CiAgICAgICAgICAgICAgICAgICAgICAwOiB7IG5hbWU6ICJjb250cm9sUG9pbnRzIiB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAyOiB7CiAgICAgICAgICAgICAgICAgICAgbmFtZTogImRhdGEiLAogICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiB7CiAgICAgICAgICAgICAgICAgICAgICAwOiB7IG5hbWU6ICJ0eXBlIiB9LAogICAgICAgICAgICAgICAgICAgICAgMTogeyBuYW1lOiAib3JpZW50YXRpb24iIH0sCiAgICAgICAgICAgICAgICAgICAgICAyOiB7IG5hbWU6ICJmcmFtZU1hdHJpeCIgfSwKICAgICAgICAgICAgICAgICAgICAgIDQ6IHsgbmFtZTogIjQiIH0sCiAgICAgICAgICAgICAgICAgICAgICA2OiB7IG5hbWU6ICJ0ZXh0UmFuZ2UiIH0sCiAgICAgICAgICAgICAgICAgICAgICA3OiB7IG5hbWU6ICJyb3dHdXR0ZXIiIH0sCiAgICAgICAgICAgICAgICAgICAgICA4OiB7IG5hbWU6ICJjb2x1bW5HdXR0ZXIiIH0sCiAgICAgICAgICAgICAgICAgICAgICA5OiB7IG5hbWU6ICI5IiB9LAogICAgICAgICAgICAgICAgICAgICAgMTA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogImJhc2VsaW5lQWxpZ25tZW50IiwKICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAwOiB7IG5hbWU6ICJmbGFnIiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIDE6IHsgbmFtZTogIm1pbiIgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgMTE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogInBhdGhEYXRhIiwKICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAxOiB7IG5hbWU6ICIxIiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIDA6IHsgbmFtZTogInJldmVyc2VkIiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIDI6IHsgbmFtZTogIjIiIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgMzogeyBuYW1lOiAiMyIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICA0OiB7IG5hbWU6ICJzcGFjaW5nIiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIDU6IHsgbmFtZTogIjUiIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgNjogeyBuYW1lOiAiNiIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICA3OiB7IG5hbWU6ICI3IiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIDE4OiB7IG5hbWU6ICIxOCIgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgMTI6IHsgbmFtZTogIjEyIiB9LAogICAgICAgICAgICAgICAgICAgICAgMTM6IHsgbmFtZTogIjEzIiB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAzOiB7IG5hbWU6ICIzIiB9LAogICAgICAgICAgICAgICAgICA5NzogeyBuYW1lOiAidXVpZCIgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgOTogewogICAgICAgIG5hbWU6ICJQcmVkZWZpbmVkIiwKICAgICAgICBjaGlsZHJlbjogewogICAgICAgICAgMDogewogICAgICAgICAgICBjaGlsZHJlbjogeyAwOiB7IHVwcm9vdDogITAgfSB9CiAgICAgICAgICB9LAogICAgICAgICAgMTogewogICAgICAgICAgICBjaGlsZHJlbjogeyAwOiB7IHVwcm9vdDogITAgfSB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfSwKICAxOiB7CiAgICBuYW1lOiAiRW5naW5lRGljdCIsCiAgICBjaGlsZHJlbjogewogICAgICAwOiB7CiAgICAgICAgbmFtZTogIjAiLAogICAgICAgIGNoaWxkcmVuOiB7CiAgICAgICAgICAvLyAwOiA/Pz8KICAgICAgICAgIC8vIDE6ID8/PwogICAgICAgICAgLy8gMjogPz8/CiAgICAgICAgICAzOiB7IG5hbWU6ICJTdXBlcnNjcmlwdFNpemUiIH0sCiAgICAgICAgICA0OiB7IG5hbWU6ICJTdXBlcnNjcmlwdFBvc2l0aW9uIiB9LAogICAgICAgICAgNTogeyBuYW1lOiAiU3Vic2NyaXB0U2l6ZSIgfSwKICAgICAgICAgIDY6IHsgbmFtZTogIlN1YnNjcmlwdFBvc2l0aW9uIiB9LAogICAgICAgICAgNzogeyBuYW1lOiAiU21hbGxDYXBTaXplIiB9LAogICAgICAgICAgODogeyBuYW1lOiAiVXNlRnJhY3Rpb25hbEdseXBoV2lkdGhzIiB9LAogICAgICAgICAgMTU6IHsgY2hpbGRyZW46IHsgMDogeyB1cHJvb3Q6ICEwIH0gfSB9CiAgICAgICAgICAvLyAxNjogPz8/CiAgICAgICAgICAvLyAxNzogPz8/CiAgICAgICAgfQogICAgICB9LAogICAgICAxOiB7CiAgICAgICAgbmFtZTogIkVkaXRvcnM/IiwKICAgICAgICBjaGlsZHJlbjogewogICAgICAgICAgMDogewogICAgICAgICAgICBuYW1lOiAiRWRpdG9yIiwKICAgICAgICAgICAgY2hpbGRyZW46IHsKICAgICAgICAgICAgICAwOiB7IG5hbWU6ICJUZXh0IiB9LAogICAgICAgICAgICAgIDU6IHsKICAgICAgICAgICAgICAgIG5hbWU6ICJQYXJhZ3JhcGhSdW4iLAogICAgICAgICAgICAgICAgY2hpbGRyZW46IHsKICAgICAgICAgICAgICAgICAgMDogewogICAgICAgICAgICAgICAgICAgIG5hbWU6ICJSdW5BcnJheSIsCiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IHsKICAgICAgICAgICAgICAgICAgICAgIDA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogIlBhcmFncmFwaFNoZWV0IiwKICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAwOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cHJvb3Q6ICEwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDogeyBuYW1lOiAiMCIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICI1IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogZkEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjogeyBuYW1lOiAiNiIgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgIDE6IHsgbmFtZTogIlJ1bkxlbmd0aCIgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgNjogewogICAgICAgICAgICAgICAgbmFtZTogIlN0eWxlUnVuIiwKICAgICAgICAgICAgICAgIGNoaWxkcmVuOiB7CiAgICAgICAgICAgICAgICAgIDA6IHsKICAgICAgICAgICAgICAgICAgICBuYW1lOiAiUnVuQXJyYXkiLAogICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiB7CiAgICAgICAgICAgICAgICAgICAgICAwOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICJTdHlsZVNoZWV0IiwKICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAwOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cHJvb3Q6ICEwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjogVmkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAxOiB7IG5hbWU6ICJSdW5MZW5ndGgiIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAxOiB7CiAgICAgICAgICAgIG5hbWU6ICJGb250VmVjdG9yRGF0YSA/Pz8iCiAgICAgICAgICAgIC8vIGNoaWxkcmVuOiB7CiAgICAgICAgICAgIC8vIAknMCc6IHt9LAogICAgICAgICAgICAvLyAJJzInOiB7CiAgICAgICAgICAgIC8vIAkJLy8gJzUnCiAgICAgICAgICAgIC8vIAkJLy8gJzYnCiAgICAgICAgICAgIC8vIAl9LAogICAgICAgICAgICAvLyB9CiAgICAgICAgICAgIC8vICAgICAiMSI6IFsgLy8gdGhpcyBpcyBwcm9iYWJseSBib3VuZGluZyBib3g/IHRoZXJlIHNlZW0gdG8gYmUgbWFueSBvZiB0aGVtIG5lc3RlZAogICAgICAgICAgICAvLyAgICAgICAwLAogICAgICAgICAgICAvLyAgICAgICAwLAogICAgICAgICAgICAvLyAgICAgICA5OTksCiAgICAgICAgICAgIC8vICAgICAgIDE3Ni4zMDAxNAogICAgICAgICAgICAvLyAgICAgXSwKICAgICAgICAgICAgLy8gdmFyaW91cyB0eXBlczogL1BDLCAvRiwgL1IsIC9MLCAvUywgL0cKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIDI6IHsKICAgICAgICBuYW1lOiAiU3R5bGVTaGVldCIsCiAgICAgICAgY2hpbGRyZW46IEhBCiAgICAgIH0sCiAgICAgIDM6IHsKICAgICAgICBuYW1lOiAiUGFyYWdyYXBoU2hlZXQiLAogICAgICAgIGNoaWxkcmVuOiBmQQogICAgICB9CiAgICB9CiAgfQp9OwpmdW5jdGlvbiBkMihyLCBlKSB7CiAgdmFyIGEsIEE7CiAgaWYgKHIgPT09IG51bGwpCiAgICByZXR1cm4gcjsKICBpZiAoQXJyYXkuaXNBcnJheShyKSkKICAgIHJldHVybiByLm1hcChmdW5jdGlvbih1KSB7CiAgICAgIHJldHVybiBkMih1LCBlKTsKICAgIH0pOwogIGlmICh0eXBlb2YgciAhPSAib2JqZWN0IikKICAgIHJldHVybiByOwogIGZvciAodmFyIHQgPSB7fSwgaSA9IDAsIG4gPSBPYmplY3Qua2V5cyhyKTsgaSA8IG4ubGVuZ3RoOyBpKyspIHsKICAgIHZhciBmID0gbltpXTsKICAgIGlmIChlW2ZdKQogICAgICBpZiAoZVtmXS51cHJvb3QpIHsKICAgICAgICBmICE9PSAiOTkiICYmICh0ID0gZDIocltmXSwgKGEgPSBlW2ZdLmNoaWxkcmVuKSAhPT0gbnVsbCAmJiBhICE9PSB2b2lkIDAgPyBhIDoge30pKSwgcls5OV0gJiYgKHQuX3R5cGUgPSByWzk5XSk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0gZWxzZQogICAgICAgIHRbZVtmXS5uYW1lIHx8IGZdID0gZDIocltmXSwgKEEgPSBlW2ZdLmNoaWxkcmVuKSAhPT0gbnVsbCAmJiBBICE9PSB2b2lkIDAgPyBBIDoge30pOwogICAgZWxzZSBmID09PSAiOTkiID8gdC5fdHlwZSA9IHJbZl0gOiB0W2ZdID0gZDIocltmXSwge30pOwogIH0KICByZXR1cm4gdDsKfQpmdW5jdGlvbiBwNChyKSB7CiAgcmV0dXJuIGQyKHIsIG00KTsKfQp2YXIgaCA9IGZ1bmN0aW9uKCkgewogIHJldHVybiBoID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbihyKSB7CiAgICBmb3IgKHZhciBlLCBhID0gMSwgQSA9IGFyZ3VtZW50cy5sZW5ndGg7IGEgPCBBOyBhKyspIHsKICAgICAgZSA9IGFyZ3VtZW50c1thXTsKICAgICAgZm9yICh2YXIgdCBpbiBlKSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSwgdCkgJiYgKHJbdF0gPSBlW3RdKTsKICAgIH0KICAgIHJldHVybiByOwogIH0sIGguYXBwbHkodGhpcywgYXJndW1lbnRzKTsKfSwga3IgPSAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLCBxMSA9IFtdLCBFZSA9IHt9OwpmdW5jdGlvbiByMChyLCBlLCBhLCBBKSB7CiAgdmFyIHQgPSB7IGtleTogciwgaGFzOiBlLCByZWFkOiBhLCB3cml0ZTogQSB9OwogIHExLnB1c2godCksIEVlW3Qua2V5XSA9IHQ7Cn0KZnVuY3Rpb24gZTIociwgZSkgewogIEVlW3JdID0gRWVbZV07Cn0KZnVuY3Rpb24gWDAocikgewogIHJldHVybiBmdW5jdGlvbihlKSB7CiAgICByZXR1cm4gZVtyXSAhPT0gdm9pZCAwOwogIH07Cn0KZnVuY3Rpb24gb0EocikgewogIGlmIChTKHIpKQogICAgdGhyb3cgbmV3IEVycm9yKCJSZXNvdXJjZSBzaXplIGFib3ZlIDQgR0IgbGltaXQgYXQgIi5jb25jYXQoci5vZmZzZXQudG9TdHJpbmcoMTYpKSk7CiAgcmV0dXJuIFMocik7Cn0KZnVuY3Rpb24gdUEociwgZSkgewogIFUociwgMCksIFUociwgZSk7Cn0KcjAoIlR5U2giLCBYMCgidGV4dCIpLCBmdW5jdGlvbihyLCBlLCBhKSB7CiAgaWYgKGcwKHIpICE9PSAxKQogICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIFR5U2ggdmVyc2lvbiIpOwogIGZvciAodmFyIEEgPSBbXSwgdCA9IDA7IHQgPCA2OyB0KyspCiAgICBBLnB1c2goSXIocikpOwogIGlmIChnMChyKSAhPT0gNTApCiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgVHlTaCB0ZXh0IHZlcnNpb24iKTsKICB2YXIgaSA9IG0wKHIpOwogIGlmIChnMChyKSAhPT0gMSkKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBUeVNoIHdhcnAgdmVyc2lvbiIpOwogIHZhciBuID0gbTAocik7CiAgaWYgKGUudGV4dCA9IHsKICAgIHRyYW5zZm9ybTogQSwKICAgIGxlZnQ6IFJyKHIpLAogICAgdG9wOiBScihyKSwKICAgIHJpZ2h0OiBScihyKSwKICAgIGJvdHRvbTogUnIociksCiAgICB0ZXh0OiBpWyJUeHQgIl0ucmVwbGFjZSgvXHIvZywgYApgKSwKICAgIGluZGV4OiBpLlRleHRJbmRleCB8fCAwLAogICAgZ3JpZGRpbmc6IHRpLmRlY29kZShpLnRleHRHcmlkZGluZyksCiAgICBhbnRpQWxpYXM6IGlpLmRlY29kZShpLkFudEEpLAogICAgb3JpZW50YXRpb246IHkyLmRlY29kZShpLk9ybnQpLAogICAgd2FycDogewogICAgICBzdHlsZTogUEEuZGVjb2RlKG4ud2FycFN0eWxlKSwKICAgICAgdmFsdWU6IG4ud2FycFZhbHVlIHx8IDAsCiAgICAgIHBlcnNwZWN0aXZlOiBuLndhcnBQZXJzcGVjdGl2ZSB8fCAwLAogICAgICBwZXJzcGVjdGl2ZU90aGVyOiBuLndhcnBQZXJzcGVjdGl2ZU90aGVyIHx8IDAsCiAgICAgIHJvdGF0ZTogeTIuZGVjb2RlKG4ud2FycFJvdGF0ZSkKICAgIH0KICB9LCBpLmJvdW5kcyAmJiAoZS50ZXh0LmJvdW5kcyA9IHF0KGkuYm91bmRzKSksIGkuYm91bmRpbmdCb3ggJiYgKGUudGV4dC5ib3VuZGluZ0JveCA9IHF0KGkuYm91bmRpbmdCb3gpKSwgaS5FbmdpbmVEYXRhKSB7CiAgICB2YXIgZiA9IGoxKGkuRW5naW5lRGF0YSksIHUgPSBrNChmKTsKICAgIGUudGV4dCA9IGgoaCh7fSwgZS50ZXh0KSwgdSk7CiAgfQogIEgociwgYSgpKTsKfSwgZnVuY3Rpb24ociwgZSkgewogIHZhciBhID0gZS50ZXh0LCBBID0gYS53YXJwIHx8IHt9LCB0ID0gYS50cmFuc2Zvcm0gfHwgWzEsIDAsIDAsIDEsIDAsIDBdLCBpID0gaChoKGgoeyAiVHh0ICI6IChhLnRleHQgfHwgIiIpLnJlcGxhY2UoL1xyP1xuL2csICJcciIpLCB0ZXh0R3JpZGRpbmc6IHRpLmVuY29kZShhLmdyaWRkaW5nKSwgT3JudDogeTIuZW5jb2RlKGEub3JpZW50YXRpb24pLCBBbnRBOiBpaS5lbmNvZGUoYS5hbnRpQWxpYXMpIH0sIGEuYm91bmRzID8geyBib3VuZHM6ICR0KGEuYm91bmRzKSB9IDoge30pLCBhLmJvdW5kaW5nQm94ID8geyBib3VuZGluZ0JveDogJHQoYS5ib3VuZGluZ0JveCkgfSA6IHt9KSwgeyBUZXh0SW5kZXg6IGEuaW5kZXggfHwgMCwgRW5naW5lRGF0YTogbDQoZzQoYSkpIH0pOwogIEUwKHIsIDEpOwogIGZvciAodmFyIG4gPSAwOyBuIDwgNjsgbisrKQogICAgRnIociwgdFtuXSk7CiAgRTAociwgNTApLCBwMChyLCAiIiwgIlR4THIiLCBpLCAidGV4dCIpLCBFMChyLCAxKSwgcDAociwgIiIsICJ3YXJwIiwgWmUoQSkpLCBWcihyLCBhLmxlZnQpLCBWcihyLCBhLnRvcCksIFZyKHIsIGEucmlnaHQpLCBWcihyLCBhLmJvdHRvbSk7Cn0pOwpyMCgiU29DbyIsIGZ1bmN0aW9uKHIpIHsKICByZXR1cm4gci52ZWN0b3JGaWxsICE9PSB2b2lkIDAgJiYgci52ZWN0b3JTdHJva2UgPT09IHZvaWQgMCAmJiByLnZlY3RvckZpbGwudHlwZSA9PT0gImNvbG9yIjsKfSwgZnVuY3Rpb24ociwgZSkgewogIHZhciBhID0gbTAocik7CiAgZS52ZWN0b3JGaWxsID0gRDIoYSk7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICB2YXIgYSA9IHgyKGUudmVjdG9yRmlsbCkuZGVzY3JpcHRvcjsKICBwMChyLCAiIiwgIm51bGwiLCBhKTsKfSk7CnIwKCJHZEZsIiwgZnVuY3Rpb24ocikgewogIHJldHVybiByLnZlY3RvckZpbGwgIT09IHZvaWQgMCAmJiByLnZlY3RvclN0cm9rZSA9PT0gdm9pZCAwICYmIChyLnZlY3RvckZpbGwudHlwZSA9PT0gInNvbGlkIiB8fCByLnZlY3RvckZpbGwudHlwZSA9PT0gIm5vaXNlIik7Cn0sIGZ1bmN0aW9uKHIsIGUsIGEpIHsKICB2YXIgQSA9IG0wKHIpOwogIGUudmVjdG9yRmlsbCA9IEQyKEEpLCBIKHIsIGEoKSk7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICB2YXIgYSA9IHgyKGUudmVjdG9yRmlsbCkuZGVzY3JpcHRvcjsKICBwMChyLCAiIiwgIm51bGwiLCBhKTsKfSk7CnIwKCJQdEZsIiwgZnVuY3Rpb24ocikgewogIHJldHVybiByLnZlY3RvckZpbGwgIT09IHZvaWQgMCAmJiByLnZlY3RvclN0cm9rZSA9PT0gdm9pZCAwICYmIHIudmVjdG9yRmlsbC50eXBlID09PSAicGF0dGVybiI7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICB2YXIgYSA9IG0wKHIpOwogIGUudmVjdG9yRmlsbCA9IEQyKGEpOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgdmFyIGEgPSB4MihlLnZlY3RvckZpbGwpLmRlc2NyaXB0b3I7CiAgcDAociwgIiIsICJudWxsIiwgYSk7Cn0pOwpyMCgidnNjZyIsIGZ1bmN0aW9uKHIpIHsKICByZXR1cm4gci52ZWN0b3JGaWxsICE9PSB2b2lkIDAgJiYgci52ZWN0b3JTdHJva2UgIT09IHZvaWQgMDsKfSwgZnVuY3Rpb24ociwgZSwgYSkgewogIFIwKHIpOwogIHZhciBBID0gbTAocik7CiAgZS52ZWN0b3JGaWxsID0gRDIoQSksIEgociwgYSgpKTsKfSwgZnVuY3Rpb24ociwgZSkgewogIHZhciBhID0geDIoZS52ZWN0b3JGaWxsKSwgQSA9IGEuZGVzY3JpcHRvciwgdCA9IGEua2V5OwogIG4wKHIsIHQpLCBwMChyLCAiIiwgIm51bGwiLCBBKTsKfSk7CmZ1bmN0aW9uIHc0KHIsIGUsIGEpIHsKICB2YXIgQSA9IEdyKHIpICogYSwgdCA9IEdyKHIpICogZSwgaSA9IEdyKHIpICogYSwgbiA9IEdyKHIpICogZSwgZiA9IEdyKHIpICogYSwgdSA9IEdyKHIpICogZTsKICByZXR1cm4gW3QsIEEsIG4sIGksIHUsIGZdOwp9CmZ1bmN0aW9uIHk0KHIsIGUsIGEsIEEpIHsKICBYcihyLCBlWzFdIC8gQSksIFhyKHIsIGVbMF0gLyBhKSwgWHIociwgZVszXSAvIEEpLCBYcihyLCBlWzJdIC8gYSksIFhyKHIsIGVbNV0gLyBBKSwgWHIociwgZVs0XSAvIGEpOwp9CnZhciAkMSA9IFsiZXhjbHVkZSIsICJjb21iaW5lIiwgInN1YnRyYWN0IiwgImludGVyc2VjdCJdOwpmdW5jdGlvbiByZihyLCBlLCBhLCBBLCB0KSB7CiAgZm9yICh2YXIgaSA9IHIub2Zmc2V0ICsgdCwgbiA9IGUucGF0aHMsIGYgPSB2b2lkIDA7IGkgLSByLm9mZnNldCA+PSAyNjsgKSB7CiAgICB2YXIgdSA9IFAocik7CiAgICBzd2l0Y2ggKHUpIHsKICAgICAgY2FzZSAwOgogICAgICBjYXNlIDM6IHsKICAgICAgICBQKHIpOwogICAgICAgIHZhciBvID0gZzAociksIGwgPSBQKHIpOwogICAgICAgIEgociwgMTgpLCBmID0gewogICAgICAgICAgb3BlbjogdSA9PT0gMywKICAgICAgICAgIGtub3RzOiBbXSwKICAgICAgICAgIGZpbGxSdWxlOiBsID09PSAyID8gIm5vbi16ZXJvIiA6ICJldmVuLW9kZCIKICAgICAgICB9LCBvICE9PSAtMSAmJiAoZi5vcGVyYXRpb24gPSAkMVtvXSksIG4ucHVzaChmKTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBjYXNlIDE6CiAgICAgIGNhc2UgMjoKICAgICAgY2FzZSA0OgogICAgICBjYXNlIDU6CiAgICAgICAgZi5rbm90cy5wdXNoKHsgbGlua2VkOiB1ID09PSAxIHx8IHUgPT09IDQsIHBvaW50czogdzQociwgYSwgQSkgfSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgNjoKICAgICAgICBIKHIsIDI0KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSA3OiB7CiAgICAgICAgdmFyIHMgPSBHcihyKSwgYyA9IEdyKHIpLCBkID0gR3IociksIHYgPSBHcihyKSwgayA9IEdyKHIpOwogICAgICAgIEgociwgNCksIGUuY2xpcGJvYXJkID0geyB0b3A6IHMsIGxlZnQ6IGMsIGJvdHRvbTogZCwgcmlnaHQ6IHYsIHJlc29sdXRpb246IGsgfTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBjYXNlIDg6CiAgICAgICAgZS5maWxsU3RhcnRzV2l0aEFsbFBpeGVscyA9ICEhUChyKSwgSChyLCAyMik7CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHZtc2sgc2VjdGlvbiIpOwogICAgfQogIH0KICByZXR1cm4gbjsKfQpyMCgidm1zayIsIFgwKCJ2ZWN0b3JNYXNrIiksIGZ1bmN0aW9uKHIsIGUsIGEsIEEpIHsKICB2YXIgdCA9IEEud2lkdGgsIGkgPSBBLmhlaWdodDsKICBpZiAoUyhyKSAhPT0gMykKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCB2bXNrIHZlcnNpb24iKTsKICBlLnZlY3Rvck1hc2sgPSB7IHBhdGhzOiBbXSB9OwogIHZhciBuID0gZS52ZWN0b3JNYXNrLCBmID0gUyhyKTsKICBuLmludmVydCA9IChmICYgMSkgIT09IDAsIG4ubm90TGluayA9IChmICYgMikgIT09IDAsIG4uZGlzYWJsZSA9IChmICYgNCkgIT09IDAsIHJmKHIsIG4sIHQsIGksIGEoKSksIEgociwgYSgpKTsKfSwgZnVuY3Rpb24ociwgZSwgYSkgewogIHZhciBBID0gYS53aWR0aCwgdCA9IGEuaGVpZ2h0LCBpID0gZS52ZWN0b3JNYXNrLCBuID0gKGkuaW52ZXJ0ID8gMSA6IDApIHwgKGkubm90TGluayA/IDIgOiAwKSB8IChpLmRpc2FibGUgPyA0IDogMCk7CiAgVShyLCAzKSwgVShyLCBuKSwgeChyLCA2KSwgWjAociwgMjQpOwogIHZhciBmID0gaS5jbGlwYm9hcmQ7CiAgZiAmJiAoeChyLCA3KSwgWHIociwgZi50b3ApLCBYcihyLCBmLmxlZnQpLCBYcihyLCBmLmJvdHRvbSksIFhyKHIsIGYucmlnaHQpLCBYcihyLCBmLnJlc29sdXRpb24pLCBaMChyLCA0KSksIHgociwgOCksIHgociwgaS5maWxsU3RhcnRzV2l0aEFsbFBpeGVscyA/IDEgOiAwKSwgWjAociwgMjIpOwogIGZvciAodmFyIHUgPSAwLCBvID0gaS5wYXRoczsgdSA8IG8ubGVuZ3RoOyB1KyspIHsKICAgIHZhciBsID0gb1t1XTsKICAgIHgociwgbC5vcGVuID8gMyA6IDApLCB4KHIsIGwua25vdHMubGVuZ3RoKSwgeChyLCBsLm9wZXJhdGlvbiA/ICQxLmluZGV4T2YobC5vcGVyYXRpb24pIDogLTEpLCB4KHIsIGwuZmlsbFJ1bGUgPT09ICJub24temVybyIgPyAyIDogMSksIFowKHIsIDE4KTsKICAgIGZvciAodmFyIHMgPSBsLm9wZW4gPyA0IDogMSwgYyA9IGwub3BlbiA/IDUgOiAyLCBkID0gMCwgdiA9IGwua25vdHM7IGQgPCB2Lmxlbmd0aDsgZCsrKSB7CiAgICAgIHZhciBrID0gdltkXSwgRSA9IGsubGlua2VkLCBnID0gay5wb2ludHM7CiAgICAgIHgociwgRSA/IHMgOiBjKSwgeTQociwgZywgQSwgdCk7CiAgICB9CiAgfQp9KTsKZTIoInZzbXMiLCAidm1zayIpOwpyMCgKICAidm93diIsCiAgLy8gc29tZXRoaW5nIHdpdGggdmVjdG9ycz8KICBYMCgidm93diIpLAogIGZ1bmN0aW9uKHIsIGUpIHsKICAgIGUudm93diA9IFMocik7CiAgfSwKICBmdW5jdGlvbihyLCBlKSB7CiAgICBVKHIsIGUudm93dik7CiAgfQopOwpyMCgidm9nayIsIFgwKCJ2ZWN0b3JPcmlnaW5hdGlvbiIpLCBmdW5jdGlvbihyLCBlLCBhKSB7CiAgaWYgKEwocikgIT09IDEpCiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdm9nayB2ZXJzaW9uIik7CiAgdmFyIEEgPSBtMChyKTsKICBlLnZlY3Rvck9yaWdpbmF0aW9uID0geyBrZXlEZXNjcmlwdG9yTGlzdDogW10gfTsKICBmb3IgKHZhciB0ID0gMCwgaSA9IEEua2V5RGVzY3JpcHRvckxpc3Q7IHQgPCBpLmxlbmd0aDsgdCsrKSB7CiAgICB2YXIgbiA9IGlbdF0sIGYgPSB7fTsKICAgIG4ua2V5U2hhcGVJbnZhbGlkYXRlZCAhPSBudWxsICYmIChmLmtleVNoYXBlSW52YWxpZGF0ZWQgPSBuLmtleVNoYXBlSW52YWxpZGF0ZWQpLCBuLmtleU9yaWdpblR5cGUgIT0gbnVsbCAmJiAoZi5rZXlPcmlnaW5UeXBlID0gbi5rZXlPcmlnaW5UeXBlKSwgbi5rZXlPcmlnaW5SZXNvbHV0aW9uICE9IG51bGwgJiYgKGYua2V5T3JpZ2luUmVzb2x1dGlvbiA9IG4ua2V5T3JpZ2luUmVzb2x1dGlvbiksIG4ua2V5T3JpZ2luU2hhcGVCQm94ICYmIChmLmtleU9yaWdpblNoYXBlQm91bmRpbmdCb3ggPSB7CiAgICAgIHRvcDogY2Eobi5rZXlPcmlnaW5TaGFwZUJCb3hbIlRvcCAiXSksCiAgICAgIGxlZnQ6IGNhKG4ua2V5T3JpZ2luU2hhcGVCQm94LkxlZnQpLAogICAgICBib3R0b206IGNhKG4ua2V5T3JpZ2luU2hhcGVCQm94LkJ0b20pLAogICAgICByaWdodDogY2Eobi5rZXlPcmlnaW5TaGFwZUJCb3guUmdodCkKICAgIH0pOwogICAgdmFyIHUgPSBuLmtleU9yaWdpblJSZWN0UmFkaWk7CiAgICB1ICYmIChmLmtleU9yaWdpblJSZWN0UmFkaWkgPSB7CiAgICAgIHRvcFJpZ2h0OiBGMCh1LnRvcFJpZ2h0KSwKICAgICAgdG9wTGVmdDogRjAodS50b3BMZWZ0KSwKICAgICAgYm90dG9tTGVmdDogRjAodS5ib3R0b21MZWZ0KSwKICAgICAgYm90dG9tUmlnaHQ6IEYwKHUuYm90dG9tUmlnaHQpCiAgICB9KTsKICAgIHZhciBvID0gbi5rZXlPcmlnaW5Cb3hDb3JuZXJzOwogICAgbyAmJiAoZi5rZXlPcmlnaW5Cb3hDb3JuZXJzID0gWwogICAgICB7IHg6IG8ucmVjdGFuZ2xlQ29ybmVyQS5IcnpuLCB5OiBvLnJlY3RhbmdsZUNvcm5lckEuVnJ0YyB9LAogICAgICB7IHg6IG8ucmVjdGFuZ2xlQ29ybmVyQi5IcnpuLCB5OiBvLnJlY3RhbmdsZUNvcm5lckIuVnJ0YyB9LAogICAgICB7IHg6IG8ucmVjdGFuZ2xlQ29ybmVyQy5IcnpuLCB5OiBvLnJlY3RhbmdsZUNvcm5lckMuVnJ0YyB9LAogICAgICB7IHg6IG8ucmVjdGFuZ2xlQ29ybmVyRC5IcnpuLCB5OiBvLnJlY3RhbmdsZUNvcm5lckQuVnJ0YyB9CiAgICBdKTsKICAgIHZhciBsID0gbi5Ucm5mOwogICAgbCAmJiAoZi50cmFuc2Zvcm0gPSBbbC54eCwgbC54eSwgbC55eCwgbC55eSwgbC50eCwgbC50eV0pLCBlLnZlY3Rvck9yaWdpbmF0aW9uLmtleURlc2NyaXB0b3JMaXN0LnB1c2goZik7CiAgfQogIEgociwgYSgpKTsKfSwgZnVuY3Rpb24ociwgZSkgewogIGZvciAodmFyIGEgPSBlLnZlY3Rvck9yaWdpbmF0aW9uLCBBID0geyBrZXlEZXNjcmlwdG9yTGlzdDogW10gfSwgdCA9IDA7IHQgPCBhLmtleURlc2NyaXB0b3JMaXN0Lmxlbmd0aDsgdCsrKSB7CiAgICB2YXIgaSA9IGEua2V5RGVzY3JpcHRvckxpc3RbdF07CiAgICBBLmtleURlc2NyaXB0b3JMaXN0LnB1c2goe30pOwogICAgdmFyIG4gPSBBLmtleURlc2NyaXB0b3JMaXN0W0Eua2V5RGVzY3JpcHRvckxpc3QubGVuZ3RoIC0gMV07CiAgICBpLmtleU9yaWdpblR5cGUgIT0gbnVsbCAmJiAobi5rZXlPcmlnaW5UeXBlID0gaS5rZXlPcmlnaW5UeXBlKSwgaS5rZXlPcmlnaW5SZXNvbHV0aW9uICE9IG51bGwgJiYgKG4ua2V5T3JpZ2luUmVzb2x1dGlvbiA9IGkua2V5T3JpZ2luUmVzb2x1dGlvbik7CiAgICB2YXIgZiA9IGkua2V5T3JpZ2luUlJlY3RSYWRpaTsKICAgIGYgJiYgKG4ua2V5T3JpZ2luUlJlY3RSYWRpaSA9IHsKICAgICAgdW5pdFZhbHVlUXVhZFZlcnNpb246IDEsCiAgICAgIHRvcFJpZ2h0OiBEMChmLnRvcFJpZ2h0LCAidG9wUmlnaHQiKSwKICAgICAgdG9wTGVmdDogRDAoZi50b3BMZWZ0LCAidG9wTGVmdCIpLAogICAgICBib3R0b21MZWZ0OiBEMChmLmJvdHRvbUxlZnQsICJib3R0b21MZWZ0IiksCiAgICAgIGJvdHRvbVJpZ2h0OiBEMChmLmJvdHRvbVJpZ2h0LCAiYm90dG9tUmlnaHQiKQogICAgfSk7CiAgICB2YXIgdSA9IGkua2V5T3JpZ2luU2hhcGVCb3VuZGluZ0JveDsKICAgIHUgJiYgKG4ua2V5T3JpZ2luU2hhcGVCQm94ID0gewogICAgICB1bml0VmFsdWVRdWFkVmVyc2lvbjogMSwKICAgICAgIlRvcCAiOiBEMCh1LnRvcCwgInRvcCIpLAogICAgICBMZWZ0OiBEMCh1LmxlZnQsICJsZWZ0IiksCiAgICAgIEJ0b206IEQwKHUuYm90dG9tLCAiYm90dG9tIiksCiAgICAgIFJnaHQ6IEQwKHUucmlnaHQsICJyaWdodCIpCiAgICB9KTsKICAgIHZhciBvID0gaS5rZXlPcmlnaW5Cb3hDb3JuZXJzOwogICAgbyAmJiBvLmxlbmd0aCA9PT0gNCAmJiAobi5rZXlPcmlnaW5Cb3hDb3JuZXJzID0gewogICAgICByZWN0YW5nbGVDb3JuZXJBOiB7IEhyem46IG9bMF0ueCwgVnJ0Yzogb1swXS55IH0sCiAgICAgIHJlY3RhbmdsZUNvcm5lckI6IHsgSHJ6bjogb1sxXS54LCBWcnRjOiBvWzFdLnkgfSwKICAgICAgcmVjdGFuZ2xlQ29ybmVyQzogeyBIcnpuOiBvWzJdLngsIFZydGM6IG9bMl0ueSB9LAogICAgICByZWN0YW5nbGVDb3JuZXJEOiB7IEhyem46IG9bM10ueCwgVnJ0Yzogb1szXS55IH0KICAgIH0pOwogICAgdmFyIGwgPSBpLnRyYW5zZm9ybTsKICAgIGwgJiYgbC5sZW5ndGggPT09IDYgJiYgKG4uVHJuZiA9IHsKICAgICAgeHg6IGxbMF0sCiAgICAgIHh5OiBsWzFdLAogICAgICB5eDogbFsyXSwKICAgICAgeXk6IGxbM10sCiAgICAgIHR4OiBsWzRdLAogICAgICB0eTogbFs1XQogICAgfSksIGkua2V5U2hhcGVJbnZhbGlkYXRlZCAhPSBudWxsICYmIChuLmtleVNoYXBlSW52YWxpZGF0ZWQgPSBpLmtleVNoYXBlSW52YWxpZGF0ZWQpLCBuLmtleU9yaWdpbkluZGV4ID0gdDsKICB9CiAgdDAociwgMSksIHAwKHIsICIiLCAibnVsbCIsIEEpOwp9KTsKcjAoImxtZngiLCBmdW5jdGlvbihyKSB7CiAgcmV0dXJuIHIuZWZmZWN0cyAhPT0gdm9pZCAwICYmIHRmKHIuZWZmZWN0cyk7Cn0sIGZ1bmN0aW9uKHIsIGUsIGEpIHsKICB2YXIgQSA9IFMocik7CiAgaWYgKEEgIT09IDApCiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbG1meCB2ZXJzaW9uIik7CiAgdmFyIHQgPSBtMChyKTsKICBlLmVmZmVjdHMgPSBTMih0LCAhIXIubG9nTWlzc2luZ0ZlYXR1cmVzKSwgSChyLCBhKCkpOwp9LCBmdW5jdGlvbihyLCBlLCBhLCBBKSB7CiAgdmFyIHQgPSBWMihlLmVmZmVjdHMsICEhQS5sb2dNaXNzaW5nRmVhdHVyZXMsICEwKTsKICBVKHIsIDApLCBwMChyLCAiIiwgIm51bGwiLCB0KTsKfSk7CnIwKCJsckZYIiwgWDAoImVmZmVjdHMiKSwgZnVuY3Rpb24ociwgZSwgYSkgewogIGUuZWZmZWN0cyB8fCAoZS5lZmZlY3RzID0gbjQocikpLCBIKHIsIGEoKSk7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICBmNChyLCBlLmVmZmVjdHMpOwp9KTsKcjAoImx1bmkiLCBYMCgibmFtZSIpLCBmdW5jdGlvbihyLCBlLCBhKSB7CiAgaWYgKGEoKSA+IDQpIHsKICAgIHZhciBBID0gUyhyKTsKICAgIGEoKSA+PSBBICogMiA/IGUubmFtZSA9IFVBKHIsIEEpIDogci5sb2dEZXZGZWF0dXJlcyAmJiByLmxvZygibmFtZSBpbiBsdW5pIHNlY3Rpb24gaXMgdG9vIGxvbmciKTsKICB9IGVsc2UKICAgIHIubG9nRGV2RmVhdHVyZXMgJiYgci5sb2coImVtcHR5IGx1bmkgc2VjdGlvbiIpOwogIEgociwgYSgpKTsKfSwgZnVuY3Rpb24ociwgZSkgewogIG1yKHIsIGUubmFtZSk7Cn0pOwpyMCgibG5zciIsIFgwKCJuYW1lU291cmNlIiksIGZ1bmN0aW9uKHIsIGUpIHsKICByZXR1cm4gZS5uYW1lU291cmNlID0gUjAocik7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICByZXR1cm4gbjAociwgZS5uYW1lU291cmNlKTsKfSk7CnIwKCJseWlkIiwgWDAoImlkIiksIGZ1bmN0aW9uKHIsIGUpIHsKICBlLmlkID0gUyhyKTsKfSwgZnVuY3Rpb24ociwgZSwgYSwgQSkgewogIGZvciAodmFyIHQgPSBlLmlkOyBBLmxheWVySWRzLmhhcyh0KTsgKQogICAgdCArPSAxMDA7CiAgVShyLCB0KSwgQS5sYXllcklkcy5hZGQodCksIEEubGF5ZXJUb0lkLnNldChlLCB0KTsKfSk7CnIwKCJsc2N0IiwgWDAoInNlY3Rpb25EaXZpZGVyIiksIGZ1bmN0aW9uKHIsIGUsIGEpIHsKICBlLnNlY3Rpb25EaXZpZGVyID0geyB0eXBlOiBTKHIpIH0sIGEoKSAmJiAoSnIociwgIjhCSU0iKSwgZS5zZWN0aW9uRGl2aWRlci5rZXkgPSBSMChyKSksIGEoKSAmJiAoZS5zZWN0aW9uRGl2aWRlci5zdWJUeXBlID0gUyhyKSk7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICBVKHIsIGUuc2VjdGlvbkRpdmlkZXIudHlwZSksIGUuc2VjdGlvbkRpdmlkZXIua2V5ICYmIChuMChyLCAiOEJJTSIpLCBuMChyLCBlLnNlY3Rpb25EaXZpZGVyLmtleSksIGUuc2VjdGlvbkRpdmlkZXIuc3ViVHlwZSAhPT0gdm9pZCAwICYmIFUociwgZS5zZWN0aW9uRGl2aWRlci5zdWJUeXBlKSk7Cn0pOwplMigibHNkayIsICJsc2N0Iik7CnIwKCJjbGJsIiwgWDAoImJsZW5kQ2xpcHBlbmRFbGVtZW50cyIpLCBmdW5jdGlvbihyLCBlKSB7CiAgZS5ibGVuZENsaXBwZW5kRWxlbWVudHMgPSAhIU8ociksIEgociwgMyk7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICBUKHIsIGUuYmxlbmRDbGlwcGVuZEVsZW1lbnRzID8gMSA6IDApLCBaMChyLCAzKTsKfSk7CnIwKCJpbmZ4IiwgWDAoImJsZW5kSW50ZXJpb3JFbGVtZW50cyIpLCBmdW5jdGlvbihyLCBlKSB7CiAgZS5ibGVuZEludGVyaW9yRWxlbWVudHMgPSAhIU8ociksIEgociwgMyk7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICBUKHIsIGUuYmxlbmRJbnRlcmlvckVsZW1lbnRzID8gMSA6IDApLCBaMChyLCAzKTsKfSk7CnIwKCJrbmtvIiwgWDAoImtub2Nrb3V0IiksIGZ1bmN0aW9uKHIsIGUpIHsKICBlLmtub2Nrb3V0ID0gISFPKHIpLCBIKHIsIDMpOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgVChyLCBlLmtub2Nrb3V0ID8gMSA6IDApLCBaMChyLCAzKTsKfSk7CnIwKCJsbWdtIiwgWDAoImxheWVyTWFza0FzR2xvYmFsTWFzayIpLCBmdW5jdGlvbihyLCBlKSB7CiAgZS5sYXllck1hc2tBc0dsb2JhbE1hc2sgPSAhIU8ociksIEgociwgMyk7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICBUKHIsIGUubGF5ZXJNYXNrQXNHbG9iYWxNYXNrID8gMSA6IDApLCBaMChyLCAzKTsKfSk7CnIwKCJsc3BmIiwgWDAoInByb3RlY3RlZCIpLCBmdW5jdGlvbihyLCBlKSB7CiAgdmFyIGEgPSBTKHIpOwogIGUucHJvdGVjdGVkID0gewogICAgdHJhbnNwYXJlbmN5OiAoYSAmIDEpICE9PSAwLAogICAgY29tcG9zaXRlOiAoYSAmIDIpICE9PSAwLAogICAgcG9zaXRpb246IChhICYgNCkgIT09IDAKICB9LCBhICYgOCAmJiAoZS5wcm90ZWN0ZWQuYXJ0Ym9hcmRzID0gITApOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgdmFyIGEgPSAoZS5wcm90ZWN0ZWQudHJhbnNwYXJlbmN5ID8gMSA6IDApIHwgKGUucHJvdGVjdGVkLmNvbXBvc2l0ZSA/IDIgOiAwKSB8IChlLnByb3RlY3RlZC5wb3NpdGlvbiA/IDQgOiAwKSB8IChlLnByb3RlY3RlZC5hcnRib2FyZHMgPyA4IDogMCk7CiAgVShyLCBhKTsKfSk7CnIwKCJsY2xyIiwgWDAoImxheWVyQ29sb3IiKSwgZnVuY3Rpb24ociwgZSkgewogIHZhciBhID0gUChyKTsKICBIKHIsIDYpLCBlLmxheWVyQ29sb3IgPSBUdFthXTsKfSwgZnVuY3Rpb24ociwgZSkgewogIHZhciBhID0gVHQuaW5kZXhPZihlLmxheWVyQ29sb3IpOwogIHgociwgYSA9PT0gLTEgPyAwIDogYSksIFowKHIsIDYpOwp9KTsKcjAoCiAgInNobWQiLAogIC8vIE1ldGFkYXRhIHNldHRpbmcKICBmdW5jdGlvbihyKSB7CiAgICByZXR1cm4gci50aW1lc3RhbXAgIT09IHZvaWQgMCB8fCByLmFuaW1hdGlvbkZyYW1lcyAhPT0gdm9pZCAwIHx8IHIuYW5pbWF0aW9uRnJhbWVGbGFncyAhPT0gdm9pZCAwIHx8IHIudGltZWxpbmUgIT09IHZvaWQgMCB8fCByLmNvbXBzICE9PSB2b2lkIDA7CiAgfSwKICBmdW5jdGlvbihyLCBlLCBhKSB7CiAgICBmb3IgKHZhciBBID0gUyhyKSwgdCA9IGZ1bmN0aW9uKG4pIHsKICAgICAgSnIociwgIjhCSU0iKTsKICAgICAgdmFyIGYgPSBSMChyKTsKICAgICAgTyhyKSwgSChyLCAzKSwgcHIociwgMSwgZnVuY3Rpb24odSkgewogICAgICAgIGlmIChmID09PSAiY3VzdCIpIHsKICAgICAgICAgIHZhciBvID0gbTAocik7CiAgICAgICAgICBvLmxheWVyVGltZSAhPT0gdm9pZCAwICYmIChlLnRpbWVzdGFtcCA9IG8ubGF5ZXJUaW1lKTsKICAgICAgICB9IGVsc2UgaWYgKGYgPT09ICJtbHN0IikgewogICAgICAgICAgdmFyIG8gPSBtMChyKTsKICAgICAgICAgIGUuYW5pbWF0aW9uRnJhbWVzID0gW107CiAgICAgICAgICBmb3IgKHZhciBsID0gMDsgbCA8IG8uTGFTdC5sZW5ndGg7IGwrKykgewogICAgICAgICAgICB2YXIgcyA9IG8uTGFTdFtsXSwgYyA9IHsgZnJhbWVzOiBzLkZyTHMgfTsKICAgICAgICAgICAgcy5lbmFiICE9PSB2b2lkIDAgJiYgKGMuZW5hYmxlID0gcy5lbmFiKSwgcy5PZnN0ICYmIChjLm9mZnNldCA9IG0yKHMuT2ZzdCkpLCBzLkZYUmYgJiYgKGMucmVmZXJlbmNlUG9pbnQgPSBtMihzLkZYUmYpKSwgcy5MZWZ4ICYmIChjLmVmZmVjdHMgPSBTMihzLkxlZngsICEhci5sb2dNaXNzaW5nRmVhdHVyZXMpKSwgcy5ibGVuZE9wdGlvbnMgJiYgcy5ibGVuZE9wdGlvbnMuT3BjdCAmJiAoYy5vcGFjaXR5ID0gQTAocy5ibGVuZE9wdGlvbnMuT3BjdCkpLCBlLmFuaW1hdGlvbkZyYW1lcy5wdXNoKGMpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoZiA9PT0gIm1keW4iKSB7CiAgICAgICAgICBQKHIpOwogICAgICAgICAgdmFyIGQgPSBPKHIpLCB2ID0gTyhyKTsKICAgICAgICAgIGUuYW5pbWF0aW9uRnJhbWVGbGFncyA9IHsKICAgICAgICAgICAgcHJvcGFnYXRlRnJhbWVPbmU6ICFkLAogICAgICAgICAgICB1bmlmeUxheWVyUG9zaXRpb246ICh2ICYgMSkgIT09IDAsCiAgICAgICAgICAgIHVuaWZ5TGF5ZXJTdHlsZTogKHYgJiAyKSAhPT0gMCwKICAgICAgICAgICAgdW5pZnlMYXllclZpc2liaWxpdHk6ICh2ICYgNCkgIT09IDAKICAgICAgICAgIH07CiAgICAgICAgfSBlbHNlIGlmIChmID09PSAidG1sbiIpIHsKICAgICAgICAgIHZhciBvID0gbTAociksIGsgPSBvLnRpbWVTY29wZSwgRSA9IHsKICAgICAgICAgICAgc3RhcnQ6IG5yKGsuU3RydCksCiAgICAgICAgICAgIGR1cmF0aW9uOiBucihrLmR1cmF0aW9uKSwKICAgICAgICAgICAgaW5UaW1lOiBucihrLmluVGltZSksCiAgICAgICAgICAgIG91dFRpbWU6IG5yKGsub3V0VGltZSksCiAgICAgICAgICAgIGF1dG9TY29wZTogby5hdXRvU2NvcGUsCiAgICAgICAgICAgIGF1ZGlvTGV2ZWw6IG8uYXVkaW9MZXZlbAogICAgICAgICAgfTsKICAgICAgICAgIG8udHJhY2tMaXN0ICYmIChFLnRyYWNrcyA9IEpuKG8udHJhY2tMaXN0LCAhIXIubG9nTWlzc2luZ0ZlYXR1cmVzKSksIGUudGltZWxpbmUgPSBFOwogICAgICAgIH0gZWxzZSBpZiAoZiA9PT0gImNtbHMiKSB7CiAgICAgICAgICB2YXIgbyA9IG0wKHIpOwogICAgICAgICAgZS5jb21wcyA9IHsKICAgICAgICAgICAgc2V0dGluZ3M6IFtdCiAgICAgICAgICB9LCBvLm9yaWdGWFJlZlBvaW50ICYmIChlLmNvbXBzLm9yaWdpbmFsRWZmZWN0c1JlZmVyZW5jZVBvaW50ID0geyB4OiBvLm9yaWdGWFJlZlBvaW50Lkhyem4sIHk6IG8ub3JpZ0ZYUmVmUG9pbnQuVnJ0YyB9KTsKICAgICAgICAgIGZvciAodmFyIGcgPSAwLCB3ID0gby5sYXllclNldHRpbmdzOyBnIDwgdy5sZW5ndGg7IGcrKykgewogICAgICAgICAgICB2YXIgQiA9IHdbZ107CiAgICAgICAgICAgIGUuY29tcHMuc2V0dGluZ3MucHVzaCh7IGNvbXBMaXN0OiBCLmNvbXBMaXN0IH0pOwogICAgICAgICAgICB2YXIgbSA9IGUuY29tcHMuc2V0dGluZ3NbZS5jb21wcy5zZXR0aW5ncy5sZW5ndGggLSAxXTsKICAgICAgICAgICAgImVuYWIiIGluIEIgJiYgKG0uZW5hYmxlZCA9IEIuZW5hYiksIEIuT2ZzdCAmJiAobS5vZmZzZXQgPSB7IHg6IEIuT2ZzdC5IcnpuLCB5OiBCLk9mc3QuVnJ0YyB9KSwgQi5GWFJlZlBvaW50ICYmIChtLmVmZmVjdHNSZWZlcmVuY2VQb2ludCA9IHsgeDogQi5GWFJlZlBvaW50Lkhyem4sIHk6IEIuRlhSZWZQb2ludC5WcnRjIH0pOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoZiA9PT0gImV4dG4iKSB7CiAgICAgICAgICB2YXIgbyA9IG0wKHIpOwogICAgICAgICAgci5sb2dNaXNzaW5nRmVhdHVyZXMgJiYgci5sb2coJ1VuaGFuZGxlZCAic2htZCIgc2VjdGlvbiBrZXknLCBmKTsKICAgICAgICB9IGVsc2UKICAgICAgICAgIHIubG9nTWlzc2luZ0ZlYXR1cmVzICYmIHIubG9nKCdVbmhhbmRsZWQgInNobWQiIHNlY3Rpb24ga2V5JywgZik7CiAgICAgICAgSChyLCB1KCkpOwogICAgICB9KTsKICAgIH0sIGkgPSAwOyBpIDwgQTsgaSsrKQogICAgICB0KCk7CiAgICBIKHIsIGEoKSk7CiAgfSwKICBmdW5jdGlvbihyLCBlLCBhLCBBKSB7CiAgICB2YXIgdCA9IGUuYW5pbWF0aW9uRnJhbWVzLCBpID0gZS5hbmltYXRpb25GcmFtZUZsYWdzLCBuID0gZS50aW1lc3RhbXAsIGYgPSBlLnRpbWVsaW5lLCB1ID0gZS5jb21wcywgbyA9IDA7CiAgICB0ICYmIG8rKywgaSAmJiBvKyssIGYgJiYgbysrLCBuICE9PSB2b2lkIDAgJiYgbysrLCB1ICYmIG8rKywgVShyLCBvKSwgdCAmJiAobjAociwgIjhCSU0iKSwgbjAociwgIm1sc3QiKSwgVChyLCAwKSwgWjAociwgMyksIGVyKHIsIDIsIGZ1bmN0aW9uKCkgewogICAgICBmb3IgKHZhciBsLCBzID0gewogICAgICAgIExhSUQ6IChsID0gZS5pZCkgIT09IG51bGwgJiYgbCAhPT0gdm9pZCAwID8gbCA6IDAsCiAgICAgICAgTGFTdDogW10KICAgICAgfSwgYyA9IDA7IGMgPCB0Lmxlbmd0aDsgYysrKSB7CiAgICAgICAgdmFyIGQgPSB0W2NdLCB2ID0ge307CiAgICAgICAgZC5lbmFibGUgIT09IHZvaWQgMCAmJiAodi5lbmFiID0gZC5lbmFibGUpLCB2LkZyTHMgPSBkLmZyYW1lcywgZC5vZmZzZXQgJiYgKHYuT2ZzdCA9IHAyKGQub2Zmc2V0KSksIGQucmVmZXJlbmNlUG9pbnQgJiYgKHYuRlhSZiA9IHAyKGQucmVmZXJlbmNlUG9pbnQpKSwgZC5lZmZlY3RzICYmICh2LkxlZnggPSBWMihkLmVmZmVjdHMsICExLCAhMSkpLCBkLm9wYWNpdHkgIT09IHZvaWQgMCAmJiAodi5ibGVuZE9wdGlvbnMgPSB7IE9wY3Q6ICQwKGQub3BhY2l0eSkgfSksIHMuTGFTdC5wdXNoKHYpOwogICAgICB9CiAgICAgIHAwKHIsICIiLCAibnVsbCIsIHMpOwogICAgfSwgITApKSwgaSAmJiAobjAociwgIjhCSU0iKSwgbjAociwgIm1keW4iKSwgVChyLCAwKSwgWjAociwgMyksIGVyKHIsIDIsIGZ1bmN0aW9uKCkgewogICAgICB4KHIsIDApLCBUKHIsIGkucHJvcGFnYXRlRnJhbWVPbmUgPyAwIDogMTUpLCBUKHIsIChpLnVuaWZ5TGF5ZXJQb3NpdGlvbiA/IDEgOiAwKSB8IChpLnVuaWZ5TGF5ZXJTdHlsZSA/IDIgOiAwKSB8IChpLnVuaWZ5TGF5ZXJWaXNpYmlsaXR5ID8gNCA6IDApKTsKICAgIH0pKSwgZiAmJiAobjAociwgIjhCSU0iKSwgbjAociwgInRtbG4iKSwgVChyLCAwKSwgWjAociwgMyksIGVyKHIsIDIsIGZ1bmN0aW9uKCkgewogICAgICB2YXIgbCA9IHsKICAgICAgICBWcnNuOiAxLAogICAgICAgIHRpbWVTY29wZTogewogICAgICAgICAgVnJzbjogMSwKICAgICAgICAgIFN0cnQ6IGYuc3RhcnQsCiAgICAgICAgICBkdXJhdGlvbjogZi5kdXJhdGlvbiwKICAgICAgICAgIGluVGltZTogZi5pblRpbWUsCiAgICAgICAgICBvdXRUaW1lOiBmLm91dFRpbWUKICAgICAgICB9LAogICAgICAgIGF1dG9TY29wZTogZi5hdXRvU2NvcGUsCiAgICAgICAgYXVkaW9MZXZlbDogZi5hdWRpb0xldmVsCiAgICAgIH07CiAgICAgIGYudHJhY2tzICYmIChsLnRyYWNrTGlzdCA9IEhuKGYudHJhY2tzKSk7CiAgICAgIHZhciBzID0gQS5sYXllclRvSWQuZ2V0KGUpIHx8IGUuaWQ7CiAgICAgIGlmICghcykKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIllvdSBuZWVkIHRvIHByb3ZpZGUgbGF5ZXIuaWQgdmFsdWUgd2hhbiB3cml0aW5nIGRvY3VtZW50IHdpdGggYW5pbWF0aW9ucyIpOwogICAgICBsLkx5ckkgPSBzLCBwMChyLCAiIiwgIm51bGwiLCBsLCAiYW5pbSIpOwogICAgfSwgITApKSwgbiAhPT0gdm9pZCAwICYmIChuMChyLCAiOEJJTSIpLCBuMChyLCAiY3VzdCIpLCBUKHIsIDApLCBaMChyLCAzKSwgZXIociwgMiwgZnVuY3Rpb24oKSB7CiAgICAgIHZhciBsID0gewogICAgICAgIGxheWVyVGltZTogbgogICAgICB9OwogICAgICBwMChyLCAiIiwgIm1ldGFkYXRhIiwgbCk7CiAgICB9LCAhMCkpLCB1ICYmIChuMChyLCAiOEJJTSIpLCBuMChyLCAiY21scyIpLCBUKHIsIDApLCBaMChyLCAzKSwgZXIociwgMiwgZnVuY3Rpb24oKSB7CiAgICAgIHZhciBsID0gQS5sYXllclRvSWQuZ2V0KGUpIHx8IGUuaWQ7CiAgICAgIGlmICghbCkKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIllvdSBuZWVkIHRvIHByb3ZpZGUgbGF5ZXIuaWQgdmFsdWUgd2hhbiB3cml0aW5nIGRvY3VtZW50IHdpdGggbGF5ZXIgY29tcHMiKTsKICAgICAgdmFyIHMgPSB7fTsKICAgICAgdS5vcmlnaW5hbEVmZmVjdHNSZWZlcmVuY2VQb2ludCAmJiAocy5vcmlnRlhSZWZQb2ludCA9IHsgSHJ6bjogdS5vcmlnaW5hbEVmZmVjdHNSZWZlcmVuY2VQb2ludC54LCBWcnRjOiB1Lm9yaWdpbmFsRWZmZWN0c1JlZmVyZW5jZVBvaW50LnkgfSksIHMuTHlySSA9IGwsIHMubGF5ZXJTZXR0aW5ncyA9IFtdOwogICAgICBmb3IgKHZhciBjID0gMCwgZCA9IHUuc2V0dGluZ3M7IGMgPCBkLmxlbmd0aDsgYysrKSB7CiAgICAgICAgdmFyIHYgPSBkW2NdLCBrID0ge307CiAgICAgICAgdi5lbmFibGVkICE9PSB2b2lkIDAgJiYgKGsuZW5hYiA9IHYuZW5hYmxlZCksIHYub2Zmc2V0ICYmIChrLk9mc3QgPSB7IEhyem46IHYub2Zmc2V0LngsIFZydGM6IHYub2Zmc2V0LnkgfSksIHYuZWZmZWN0c1JlZmVyZW5jZVBvaW50ICYmIChrLkZYUmVmUG9pbnQgPSB7IEhyem46IHYuZWZmZWN0c1JlZmVyZW5jZVBvaW50LngsIFZydGM6IHYuZWZmZWN0c1JlZmVyZW5jZVBvaW50LnkgfSksIGsuY29tcExpc3QgPSB2LmNvbXBMaXN0LCBzLmxheWVyU2V0dGluZ3MucHVzaChrKTsKICAgICAgfQogICAgICBwMChyLCAiIiwgIm51bGwiLCBzKTsKICAgIH0sICEwKSk7CiAgfQopOwpyMCgiUHhTYyIsIGZ1bmN0aW9uKCkgewogIHJldHVybiAhMTsKfSwgZnVuY3Rpb24ociwgZSkgewogIHZhciBhID0gbTAociwgITApOwogIGEucGl4ZWxTb3VyY2VUeXBlID09PSAxOTg2Mjg1NjUxID8gZS5waXhlbFNvdXJjZSA9IHsKICAgIHR5cGU6ICJ2ZFBTIiwKICAgIG9yaWdpbjogeyB4OiBhLm9yaWdpbi5IcnpuLCB5OiBhLm9yaWdpbi5WcnRjIH0sCiAgICBpbnRlcnByZXRhdGlvbjogewogICAgICBpbnRlcnByZXRBbHBoYTogYS5pbnRlcnByZXRhdGlvbi5pbnRlcnByZXRBbHBoYS5zcGxpdCgiLiIpWzFdLAogICAgICBwcm9maWxlOiBhLmludGVycHJldGF0aW9uLnByb2ZpbGUKICAgIH0sCiAgICBmcmFtZVJlYWRlcjogewogICAgICB0eXBlOiAiUVRGUiIsCiAgICAgIGxpbms6IHsKICAgICAgICBuYW1lOiBhLmZyYW1lUmVhZGVyWyJMbmsgIl1bIk5tICAiXSwKICAgICAgICBmdWxsUGF0aDogYS5mcmFtZVJlYWRlclsiTG5rICJdLmZ1bGxQYXRoLAogICAgICAgIG9yaWdpbmFsUGF0aDogYS5mcmFtZVJlYWRlclsiTG5rICJdLm9yaWdpbmFsUGF0aCwKICAgICAgICByZWxhdGl2ZVBhdGg6IGEuZnJhbWVSZWFkZXJbIkxuayAiXS5yZWxQYXRoLAogICAgICAgIGFsaWFzOiBhLmZyYW1lUmVhZGVyWyJMbmsgIl0uYWxpcwogICAgICB9LAogICAgICBtZWRpYURlc2NyaXB0b3I6IGEuZnJhbWVSZWFkZXIubWVkaWFEZXNjcmlwdG9yCiAgICB9LAogICAgc2hvd0FsdGVyZWRWaWRlbzogYS5zaG93QWx0ZXJlZFZpZGVvCiAgfSA6IHIubG9nKCJVbmtub3duIHBpeGVsU291cmNlVHlwZSIpOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgdmFyIGEgPSBlLnBpeGVsU291cmNlLCBBID0gewogICAgX25hbWU6ICIiLAogICAgX2NsYXNzSUQ6ICJQaXhlbFNvdXJjZSIsCiAgICBwaXhlbFNvdXJjZVR5cGU6IDE5ODYyODU2NTEsCiAgICBkZXNjVmVyc2lvbjogMSwKICAgIG9yaWdpbjogeyBIcnpuOiBhLm9yaWdpbi54LCBWcnRjOiBhLm9yaWdpbi55IH0sCiAgICBpbnRlcnByZXRhdGlvbjogewogICAgICBfbmFtZTogIiIsCiAgICAgIF9jbGFzc0lEOiAiZm9vdGFnZUludGVycHJldGF0aW9uIiwKICAgICAgVnJzbjogMSwKICAgICAgaW50ZXJwcmV0QWxwaGE6ICJhbHBoYUludGVycHJldGF0aW9uLiIuY29uY2F0KGEuaW50ZXJwcmV0YXRpb24uaW50ZXJwcmV0QWxwaGEpLAogICAgICBwcm9maWxlOiBhLmludGVycHJldGF0aW9uLnByb2ZpbGUKICAgIH0sCiAgICBmcmFtZVJlYWRlcjogewogICAgICBfbmFtZTogIiIsCiAgICAgIF9jbGFzc0lEOiAiRnJhbWVSZWFkZXIiLAogICAgICBmcmFtZVJlYWRlclR5cGU6IDEzNjQ0Nzc1MjIsCiAgICAgIGRlc2NWZXJzaW9uOiAxLAogICAgICAiTG5rICI6IHsKICAgICAgICBfbmFtZTogIiIsCiAgICAgICAgX2NsYXNzSUQ6ICJFeHRlcm5hbEZpbGVMaW5rIiwKICAgICAgICBkZXNjVmVyc2lvbjogMiwKICAgICAgICAiTm0gICI6IGEuZnJhbWVSZWFkZXIubGluay5uYW1lLAogICAgICAgIGZ1bGxQYXRoOiBhLmZyYW1lUmVhZGVyLmxpbmsuZnVsbFBhdGgsCiAgICAgICAgb3JpZ2luYWxQYXRoOiBhLmZyYW1lUmVhZGVyLmxpbmsub3JpZ2luYWxQYXRoLAogICAgICAgIGFsaXM6IGEuZnJhbWVSZWFkZXIubGluay5hbGlhcywKICAgICAgICByZWxQYXRoOiBhLmZyYW1lUmVhZGVyLmxpbmsucmVsYXRpdmVQYXRoCiAgICAgIH0sCiAgICAgIG1lZGlhRGVzY3JpcHRvcjogYS5mcmFtZVJlYWRlci5tZWRpYURlc2NyaXB0b3IKICAgIH0sCiAgICBzaG93QWx0ZXJlZFZpZGVvOiBhLnNob3dBbHRlcmVkVmlkZW8KICB9OwogIHAwKHIsICIiLCAiUGl4ZWxTb3VyY2UiLCBBKTsKfSk7CnIwKCJ2c3RrIiwgWDAoInZlY3RvclN0cm9rZSIpLCBmdW5jdGlvbihyLCBlLCBhKSB7CiAgdmFyIEEgPSBtMChyKTsKICBlLnZlY3RvclN0cm9rZSA9IHsKICAgIHN0cm9rZUVuYWJsZWQ6IEEuc3Ryb2tlRW5hYmxlZCwKICAgIGZpbGxFbmFibGVkOiBBLmZpbGxFbmFibGVkLAogICAgbGluZVdpZHRoOiBGMChBLnN0cm9rZVN0eWxlTGluZVdpZHRoKSwKICAgIGxpbmVEYXNoT2Zmc2V0OiBGMChBLnN0cm9rZVN0eWxlTGluZURhc2hPZmZzZXQpLAogICAgbWl0ZXJMaW1pdDogQS5zdHJva2VTdHlsZU1pdGVyTGltaXQsCiAgICBsaW5lQ2FwVHlwZTogY2kuZGVjb2RlKEEuc3Ryb2tlU3R5bGVMaW5lQ2FwVHlwZSksCiAgICBsaW5lSm9pblR5cGU6IHNpLmRlY29kZShBLnN0cm9rZVN0eWxlTGluZUpvaW5UeXBlKSwKICAgIGxpbmVBbGlnbm1lbnQ6IGJpLmRlY29kZShBLnN0cm9rZVN0eWxlTGluZUFsaWdubWVudCksCiAgICBzY2FsZUxvY2s6IEEuc3Ryb2tlU3R5bGVTY2FsZUxvY2ssCiAgICBzdHJva2VBZGp1c3Q6IEEuc3Ryb2tlU3R5bGVTdHJva2VBZGp1c3QsCiAgICBsaW5lRGFzaFNldDogQS5zdHJva2VTdHlsZUxpbmVEYXNoU2V0Lm1hcChGMCksCiAgICBibGVuZE1vZGU6IG9yLmRlY29kZShBLnN0cm9rZVN0eWxlQmxlbmRNb2RlKSwKICAgIG9wYWNpdHk6IEEwKEEuc3Ryb2tlU3R5bGVPcGFjaXR5KSwKICAgIGNvbnRlbnQ6IEQyKEEuc3Ryb2tlU3R5bGVDb250ZW50KSwKICAgIHJlc29sdXRpb246IEEuc3Ryb2tlU3R5bGVSZXNvbHV0aW9uCiAgfSwgSChyLCBhKCkpOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgdmFyIGEsIEEsIHQsIGkgPSBlLnZlY3RvclN0cm9rZSwgbiA9IHsKICAgIHN0cm9rZVN0eWxlVmVyc2lvbjogMiwKICAgIHN0cm9rZUVuYWJsZWQ6ICEhaS5zdHJva2VFbmFibGVkLAogICAgZmlsbEVuYWJsZWQ6ICEhaS5maWxsRW5hYmxlZCwKICAgIHN0cm9rZVN0eWxlTGluZVdpZHRoOiBpLmxpbmVXaWR0aCB8fCB7IHZhbHVlOiAzLCB1bml0czogIlBvaW50cyIgfSwKICAgIHN0cm9rZVN0eWxlTGluZURhc2hPZmZzZXQ6IGkubGluZURhc2hPZmZzZXQgfHwgeyB2YWx1ZTogMCwgdW5pdHM6ICJQb2ludHMiIH0sCiAgICBzdHJva2VTdHlsZU1pdGVyTGltaXQ6IChhID0gaS5taXRlckxpbWl0KSAhPT0gbnVsbCAmJiBhICE9PSB2b2lkIDAgPyBhIDogMTAwLAogICAgc3Ryb2tlU3R5bGVMaW5lQ2FwVHlwZTogY2kuZW5jb2RlKGkubGluZUNhcFR5cGUpLAogICAgc3Ryb2tlU3R5bGVMaW5lSm9pblR5cGU6IHNpLmVuY29kZShpLmxpbmVKb2luVHlwZSksCiAgICBzdHJva2VTdHlsZUxpbmVBbGlnbm1lbnQ6IGJpLmVuY29kZShpLmxpbmVBbGlnbm1lbnQpLAogICAgc3Ryb2tlU3R5bGVTY2FsZUxvY2s6ICEhaS5zY2FsZUxvY2ssCiAgICBzdHJva2VTdHlsZVN0cm9rZUFkanVzdDogISFpLnN0cm9rZUFkanVzdCwKICAgIHN0cm9rZVN0eWxlTGluZURhc2hTZXQ6IGkubGluZURhc2hTZXQgfHwgW10sCiAgICBzdHJva2VTdHlsZUJsZW5kTW9kZTogb3IuZW5jb2RlKGkuYmxlbmRNb2RlKSwKICAgIHN0cm9rZVN0eWxlT3BhY2l0eTogJDAoKEEgPSBpLm9wYWNpdHkpICE9PSBudWxsICYmIEEgIT09IHZvaWQgMCA/IEEgOiAxKSwKICAgIHN0cm9rZVN0eWxlQ29udGVudDogeDIoaS5jb250ZW50IHx8IHsgdHlwZTogImNvbG9yIiwgY29sb3I6IHsgcjogMCwgZzogMCwgYjogMCB9IH0pLmRlc2NyaXB0b3IsCiAgICBzdHJva2VTdHlsZVJlc29sdXRpb246ICh0ID0gaS5yZXNvbHV0aW9uKSAhPT0gbnVsbCAmJiB0ICE9PSB2b2lkIDAgPyB0IDogNzIKICB9OwogIHAwKHIsICIiLCAic3Ryb2tlU3R5bGUiLCBuKTsKfSk7CnIwKAogICJhcnRiIiwKICAvLyBwZXItbGF5ZXIgYXJib2FyZCBpbmZvCiAgWDAoImFydGJvYXJkIiksCiAgZnVuY3Rpb24ociwgZSwgYSkgewogICAgdmFyIEEgPSBtMChyKSwgdCA9IEEuYXJ0Ym9hcmRSZWN0OwogICAgZS5hcnRib2FyZCA9IHsKICAgICAgcmVjdDogeyB0b3A6IHRbIlRvcCAiXSwgbGVmdDogdC5MZWZ0LCBib3R0b206IHQuQnRvbSwgcmlnaHQ6IHQuUmdodCB9LAogICAgICBndWlkZUluZGljZXM6IEEuZ3VpZGVJbmRlY2VzLAogICAgICBwcmVzZXROYW1lOiBBLmFydGJvYXJkUHJlc2V0TmFtZSwKICAgICAgY29sb3I6IFNyKEFbIkNsciAiXSksCiAgICAgIGJhY2tncm91bmRUeXBlOiBBLmFydGJvYXJkQmFja2dyb3VuZFR5cGUKICAgIH0sIEgociwgYSgpKTsKICB9LAogIGZ1bmN0aW9uKHIsIGUpIHsKICAgIHZhciBhLCBBID0gZS5hcnRib2FyZCwgdCA9IEEucmVjdCwgaSA9IHsKICAgICAgYXJ0Ym9hcmRSZWN0OiB7ICJUb3AgIjogdC50b3AsIExlZnQ6IHQubGVmdCwgQnRvbTogdC5ib3R0b20sIFJnaHQ6IHQucmlnaHQgfSwKICAgICAgZ3VpZGVJbmRlY2VzOiBBLmd1aWRlSW5kaWNlcyB8fCBbXSwKICAgICAgYXJ0Ym9hcmRQcmVzZXROYW1lOiBBLnByZXNldE5hbWUgfHwgIiIsCiAgICAgICJDbHIgIjogRHIoQS5jb2xvciksCiAgICAgIGFydGJvYXJkQmFja2dyb3VuZFR5cGU6IChhID0gQS5iYWNrZ3JvdW5kVHlwZSkgIT09IG51bGwgJiYgYSAhPT0gdm9pZCAwID8gYSA6IDEKICAgIH07CiAgICBwMChyLCAiIiwgImFydGJvYXJkIiwgaSk7CiAgfQopOwpyMCgic24yUCIsIFgwKCJ1c2luZ0FsaWduZWRSZW5kZXJpbmciKSwgZnVuY3Rpb24ociwgZSkgewogIHJldHVybiBlLnVzaW5nQWxpZ25lZFJlbmRlcmluZyA9ICEhUyhyKTsKfSwgZnVuY3Rpb24ociwgZSkgewogIHJldHVybiBVKHIsIGUudXNpbmdBbGlnbmVkUmVuZGVyaW5nID8gMSA6IDApOwp9KTsKdmFyIFBhID0gWyJ1bmtub3duIiwgInZlY3RvciIsICJyYXN0ZXIiLCAiaW1hZ2Ugc3RhY2siXTsKZnVuY3Rpb24gYWYocikgewogIHZhciBlLCBhLCBBLCB0LCBpLCBuLCBmID0gaChoKHsgc3R5bGU6IFBBLmRlY29kZShyLndhcnBTdHlsZSkgfSwgci53YXJwVmFsdWVzID8geyB2YWx1ZXM6IHIud2FycFZhbHVlcyB9IDogeyB2YWx1ZTogci53YXJwVmFsdWUgfHwgMCB9KSwgeyBwZXJzcGVjdGl2ZTogci53YXJwUGVyc3BlY3RpdmUgfHwgMCwgcGVyc3BlY3RpdmVPdGhlcjogci53YXJwUGVyc3BlY3RpdmVPdGhlciB8fCAwLCByb3RhdGU6IHkyLmRlY29kZShyLndhcnBSb3RhdGUpLCBib3VuZHM6IHIuYm91bmRzICYmIHsKICAgIHRvcDogY2Eoci5ib3VuZHNbIlRvcCAiXSksCiAgICBsZWZ0OiBjYShyLmJvdW5kcy5MZWZ0KSwKICAgIGJvdHRvbTogY2Eoci5ib3VuZHMuQnRvbSksCiAgICByaWdodDogY2Eoci5ib3VuZHMuUmdodCkKICB9LCB1T3JkZXI6IHIudU9yZGVyLCB2T3JkZXI6IHIudk9yZGVyIH0pOwogIChyLmRlZm9ybU51bVJvd3MgIT0gbnVsbCB8fCByLmRlZm9ybU51bUNvbHMgIT0gbnVsbCkgJiYgKGYuZGVmb3JtTnVtUm93cyA9IHIuZGVmb3JtTnVtUm93cywgZi5kZWZvcm1OdW1Db2xzID0gci5kZWZvcm1OdW1Db2xzKTsKICB2YXIgdSA9IHIuY3VzdG9tRW52ZWxvcGVXYXJwOwogIGlmICh1KSB7CiAgICBmLmN1c3RvbUVudmVsb3BlV2FycCA9IHsKICAgICAgbWVzaFBvaW50czogW10KICAgIH07CiAgICBmb3IgKHZhciBvID0gKChlID0gdS5tZXNoUG9pbnRzLmZpbmQoZnVuY3Rpb24oYykgewogICAgICByZXR1cm4gYy50eXBlID09PSAiSHJ6biI7CiAgICB9KSkgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS52YWx1ZXMpIHx8IFtdLCBsID0gKChhID0gdS5tZXNoUG9pbnRzLmZpbmQoZnVuY3Rpb24oYykgewogICAgICByZXR1cm4gYy50eXBlID09PSAiVnJ0YyI7CiAgICB9KSkgPT09IG51bGwgfHwgYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogYS52YWx1ZXMpIHx8IFtdLCBzID0gMDsgcyA8IG8ubGVuZ3RoOyBzKyspCiAgICAgIGYuY3VzdG9tRW52ZWxvcGVXYXJwLm1lc2hQb2ludHMucHVzaCh7IHg6IG9bc10sIHk6IGxbc10gfSk7CiAgICAodS5xdWlsdFNsaWNlWCB8fCB1LnF1aWx0U2xpY2VZKSAmJiAoZi5jdXN0b21FbnZlbG9wZVdhcnAucXVpbHRTbGljZVggPSAoKHQgPSAoQSA9IHUucXVpbHRTbGljZVgpID09PSBudWxsIHx8IEEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IEFbMF0pID09PSBudWxsIHx8IHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHQudmFsdWVzKSB8fCBbXSwgZi5jdXN0b21FbnZlbG9wZVdhcnAucXVpbHRTbGljZVkgPSAoKG4gPSAoaSA9IHUucXVpbHRTbGljZVkpID09PSBudWxsIHx8IGkgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGlbMF0pID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG4udmFsdWVzKSB8fCBbXSk7CiAgfQogIHJldHVybiBmOwp9CmZ1bmN0aW9uIHpBKHIpIHsKICB2YXIgZSwgYTsKICByZXR1cm4gci5kZWZvcm1OdW1Db2xzICE9IG51bGwgfHwgci5kZWZvcm1OdW1Sb3dzICE9IG51bGwgfHwgKChlID0gci5jdXN0b21FbnZlbG9wZVdhcnApID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUucXVpbHRTbGljZVgpIHx8ICgoYSA9IHIuY3VzdG9tRW52ZWxvcGVXYXJwKSA9PT0gbnVsbCB8fCBhID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhLnF1aWx0U2xpY2VZKTsKfQpmdW5jdGlvbiBaZShyKSB7CiAgdmFyIGUgPSByLmJvdW5kcywgYSA9IGgoaCh7IHdhcnBTdHlsZTogUEEuZW5jb2RlKHIuc3R5bGUpIH0sIHIudmFsdWVzID8geyB3YXJwVmFsdWVzOiByLnZhbHVlcyB9IDogeyB3YXJwVmFsdWU6IHIudmFsdWUgfHwgMCB9KSwgeyB3YXJwUGVyc3BlY3RpdmU6IHIucGVyc3BlY3RpdmUgfHwgMCwgd2FycFBlcnNwZWN0aXZlT3RoZXI6IHIucGVyc3BlY3RpdmVPdGhlciB8fCAwLCB3YXJwUm90YXRlOiB5Mi5lbmNvZGUoci5yb3RhdGUpLCBib3VuZHM6ICgKICAgIC8qMSA/IHsgLy8gdGVzdGluZwogICAgICAgIF9jbGFzc0lEOiAnY2xhc3NGbG9hdFJlY3QnLAogICAgICAgICdUb3AgJzogYm91bmRzICYmIGJvdW5kcy50b3AgJiYgYm91bmRzLnRvcC52YWx1ZSB8fCAwLAogICAgICAgIExlZnQ6IGJvdW5kcyAmJiBib3VuZHMubGVmdCAmJiBib3VuZHMubGVmdC52YWx1ZSB8fCAwLAogICAgICAgIEJ0b206IGJvdW5kcyAmJiBib3VuZHMuYm90dG9tICYmIGJvdW5kcy5ib3R0b20udmFsdWUgfHwgMCwKICAgICAgICBSZ2h0OiBib3VuZHMgJiYgYm91bmRzLnJpZ2h0ICYmIGJvdW5kcy5yaWdodC52YWx1ZSB8fCAwLAogICAgfSA6Ki8KICAgIHsKICAgICAgIlRvcCAiOiBEMChlICYmIGUudG9wIHx8IHsgdW5pdHM6ICJQaXhlbHMiLCB2YWx1ZTogMCB9LCAiYm91bmRzLnRvcCIpLAogICAgICBMZWZ0OiBEMChlICYmIGUubGVmdCB8fCB7IHVuaXRzOiAiUGl4ZWxzIiwgdmFsdWU6IDAgfSwgImJvdW5kcy5sZWZ0IiksCiAgICAgIEJ0b206IEQwKGUgJiYgZS5ib3R0b20gfHwgeyB1bml0czogIlBpeGVscyIsIHZhbHVlOiAwIH0sICJib3VuZHMuYm90dG9tIiksCiAgICAgIFJnaHQ6IEQwKGUgJiYgZS5yaWdodCB8fCB7IHVuaXRzOiAiUGl4ZWxzIiwgdmFsdWU6IDAgfSwgImJvdW5kcy5yaWdodCIpCiAgICB9CiAgKSwgdU9yZGVyOiByLnVPcmRlciB8fCAwLCB2T3JkZXI6IHIudk9yZGVyIHx8IDAgfSksIEEgPSB6QShyKTsKICBpZiAoQSkgewogICAgdmFyIHQgPSBhOwogICAgdC5kZWZvcm1OdW1Sb3dzID0gci5kZWZvcm1OdW1Sb3dzIHx8IDAsIHQuZGVmb3JtTnVtQ29scyA9IHIuZGVmb3JtTnVtQ29scyB8fCAwOwogIH0KICB2YXIgaSA9IHIuY3VzdG9tRW52ZWxvcGVXYXJwOwogIGlmIChpKSB7CiAgICB2YXIgbiA9IGkubWVzaFBvaW50cyB8fCBbXTsKICAgIGlmIChBKSB7CiAgICAgIHZhciB0ID0gYTsKICAgICAgdC5jdXN0b21FbnZlbG9wZVdhcnAgPSB7CiAgICAgICAgX25hbWU6ICIiLAogICAgICAgIF9jbGFzc0lEOiAiY3VzdG9tRW52ZWxvcGVXYXJwIiwKICAgICAgICBxdWlsdFNsaWNlWDogW3sKICAgICAgICAgIHR5cGU6ICJxdWlsdFNsaWNlWCIsCiAgICAgICAgICB2YWx1ZXM6IGkucXVpbHRTbGljZVggfHwgW10KICAgICAgICB9XSwKICAgICAgICBxdWlsdFNsaWNlWTogW3sKICAgICAgICAgIHR5cGU6ICJxdWlsdFNsaWNlWSIsCiAgICAgICAgICB2YWx1ZXM6IGkucXVpbHRTbGljZVkgfHwgW10KICAgICAgICB9XSwKICAgICAgICBtZXNoUG9pbnRzOiBbCiAgICAgICAgICB7IHR5cGU6ICJIcnpuIiwgdmFsdWVzOiBuLm1hcChmdW5jdGlvbih1KSB7CiAgICAgICAgICAgIHJldHVybiB1Lng7CiAgICAgICAgICB9KSB9LAogICAgICAgICAgeyB0eXBlOiAiVnJ0YyIsIHZhbHVlczogbi5tYXAoZnVuY3Rpb24odSkgewogICAgICAgICAgICByZXR1cm4gdS55OwogICAgICAgICAgfSkgfQogICAgICAgIF0KICAgICAgfTsKICAgIH0gZWxzZQogICAgICBhLmN1c3RvbUVudmVsb3BlV2FycCA9IHsKICAgICAgICBfbmFtZTogIiIsCiAgICAgICAgX2NsYXNzSUQ6ICJjdXN0b21FbnZlbG9wZVdhcnAiLAogICAgICAgIG1lc2hQb2ludHM6IFsKICAgICAgICAgIHsgdHlwZTogIkhyem4iLCB2YWx1ZXM6IG4ubWFwKGZ1bmN0aW9uKGYpIHsKICAgICAgICAgICAgcmV0dXJuIGYueDsKICAgICAgICAgIH0pIH0sCiAgICAgICAgICB7IHR5cGU6ICJWcnRjIiwgdmFsdWVzOiBuLm1hcChmdW5jdGlvbihmKSB7CiAgICAgICAgICAgIHJldHVybiBmLnk7CiAgICAgICAgICB9KSB9CiAgICAgICAgXQogICAgICB9OwogIH0KICByZXR1cm4gYTsKfQpyMCgiUGxMZCIsIFgwKCJwbGFjZWRMYXllciIpLCBmdW5jdGlvbihyLCBlLCBhKSB7CiAgaWYgKFIwKHIpICE9PSAicGxjTCIpCiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgUGxMZCBzaWduYXR1cmUiKTsKICBpZiAoTChyKSAhPT0gMykKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBQbExkIHZlcnNpb24iKTsKICB2YXIgQSA9IHhyKHIsIDEpLCB0ID0gTChyKSwgaSA9IEwocik7CiAgTChyKTsKICB2YXIgbiA9IEwocik7CiAgaWYgKCFQYVtuXSkKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBQbExkIHR5cGUiKTsKICBmb3IgKHZhciBmID0gW10sIHUgPSAwOyB1IDwgODsgdSsrKQogICAgZi5wdXNoKElyKHIpKTsKICB2YXIgbyA9IEwocik7CiAgaWYgKG8gIT09IDApCiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgV2FycCB2ZXJzaW9uICIuY29uY2F0KG8pKTsKICB2YXIgbCA9IG0wKHIpOwogIGUucGxhY2VkTGF5ZXIgPSBlLnBsYWNlZExheWVyIHx8IHsKICAgIGlkOiBBLAogICAgdHlwZTogUGFbbl0sCiAgICBwYWdlTnVtYmVyOiB0LAogICAgdG90YWxQYWdlczogaSwKICAgIHRyYW5zZm9ybTogZiwKICAgIHdhcnA6IGFmKGwpCiAgfSwgSChyLCBhKCkpOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgdmFyIGEgPSBlLnBsYWNlZExheWVyOwogIGlmIChuMChyLCAicGxjTCIpLCB0MChyLCAzKSwgIWEuaWQgfHwgdHlwZW9mIGEuaWQgIT0gInN0cmluZyIgfHwgIS9eWzAtOWEtZl17OH0tKFswLTlhLWZdezR9LSl7M31bMC05YS1mXXsxMn0kLy50ZXN0KGEuaWQpKQogICAgdGhyb3cgbmV3IEVycm9yKCJQbGFjZWQgbGF5ZXIgSUQgbXVzdCBiZSBpbiBhIEdVSUQgZm9ybWF0IChleGFtcGxlOiAyMDk1M2RkYi05MzkxLTExZWMtYjRmMS1jMTU2NzRmNTBiYzQpIik7CiAgaWYgKGthKHIsIGEuaWQsIDEpLCB0MChyLCAxKSwgdDAociwgMSksIHQwKHIsIDE2KSwgUGEuaW5kZXhPZihhLnR5cGUpID09PSAtMSkKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBwbGFjZWRMYXllciB0eXBlIik7CiAgdDAociwgUGEuaW5kZXhPZihhLnR5cGUpKTsKICBmb3IgKHZhciBBID0gMDsgQSA8IDg7IEErKykKICAgIEZyKHIsIGEudHJhbnNmb3JtW0FdKTsKICB0MChyLCAwKTsKICB2YXIgdCA9IGVmKGEpLCBpID0gekEodCksIG4gPSBpID8gInF1aWx0V2FycCIgOiAid2FycCI7CiAgcDAociwgIiIsIG4sIFplKHQpLCBuKTsKfSk7CmZ1bmN0aW9uIEU0KHIpIHsKICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShyLmJ1ZmZlci5zbGljZShyLmJ5dGVPZmZzZXQpLCAwLCByLmJ5dGVMZW5ndGggLyA0KTsKfQpmdW5jdGlvbiBaNChyKSB7CiAgcmV0dXJuIG5ldyBVaW50MzJBcnJheShyLmJ1ZmZlci5zbGljZShyLmJ5dGVPZmZzZXQpLCAwLCByLmJ5dGVMZW5ndGggLyA0KTsKfQpmdW5jdGlvbiBsQShyKSB7CiAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHIuYnVmZmVyLCByLmJ5dGVPZmZzZXQsIHIuYnl0ZUxlbmd0aCk7Cn0KZnVuY3Rpb24gaGUocikgewogIGZvciAodmFyIGUgPSBbXSwgYSA9IDA7IGEgPCByLmxlbmd0aDsgYSArPSAyKQogICAgZS5wdXNoKHsgeDogclthXSwgeTogclthICsgMV0gfSk7CiAgcmV0dXJuIGU7Cn0KZnVuY3Rpb24gbjIocikgewogIGZvciAodmFyIGUgPSBbXSwgYSA9IDA7IGEgPCByLmxlbmd0aDsgYSsrKQogICAgZS5wdXNoKHJbYV0ueCwgclthXS55KTsKICByZXR1cm4gZTsKfQpmdW5jdGlvbiBTaShyKSB7CiAgcmV0dXJuIGhlKEU0KHIpKTsKfQpmdW5jdGlvbiBmMihyKSB7CiAgcmV0dXJuIHsKICAgIHg6IEYwKHIuSHJ6biksCiAgICB5OiBGMChyLlZydGMpCiAgfTsKfQpmdW5jdGlvbiBvMihyKSB7CiAgcmV0dXJuIHsKICAgIF9uYW1lOiAiIiwKICAgIF9jbGFzc0lEOiAiUG50ICIsCiAgICBIcnpuOiBEMChyLngsICJ4IiksCiAgICBWcnRjOiBEMChyLnksICJ5IikKICB9Owp9CmZ1bmN0aW9uIEI0KHIsIGUpIHsKICB2YXIgYSA9IHsKICAgIG5hbWU6IHJbIk5tICAiXSwKICAgIG9wYWNpdHk6IEEwKHIuYmxlbmRPcHRpb25zLk9wY3QpLAogICAgYmxlbmRNb2RlOiBvci5kZWNvZGUoci5ibGVuZE9wdGlvbnNbIk1kICAiXSksCiAgICBlbmFibGVkOiByLmVuYWIsCiAgICBoYXNPcHRpb25zOiByLmhhc29wdGlvbnMsCiAgICBmb3JlZ3JvdW5kQ29sb3I6IFNyKHIuRnJnQyksCiAgICBiYWNrZ3JvdW5kQ29sb3I6IFNyKHIuQmNrQykKICB9OwogIGlmICgiRmx0ciIgaW4gcikKICAgIHN3aXRjaCAoci5GbHRyLl9jbGFzc0lEKSB7CiAgICAgIGNhc2UgImJveGJsdXIiOgogICAgICAgIHJldHVybiBoKGgoe30sIGEpLCB7IHR5cGU6ICJib3ggYmx1ciIsIGZpbHRlcjogewogICAgICAgICAgcmFkaXVzOiBGMChyLkZsdHJbIlJkcyAiXSkKICAgICAgICB9IH0pOwogICAgICBjYXNlICJHc25CIjoKICAgICAgICByZXR1cm4gaChoKHt9LCBhKSwgeyB0eXBlOiAiZ2F1c3NpYW4gYmx1ciIsIGZpbHRlcjogewogICAgICAgICAgcmFkaXVzOiBGMChyLkZsdHJbIlJkcyAiXSkKICAgICAgICB9IH0pOwogICAgICBjYXNlICJNdG5CIjoKICAgICAgICByZXR1cm4gaChoKHt9LCBhKSwgeyB0eXBlOiAibW90aW9uIGJsdXIiLCBmaWx0ZXI6IHsKICAgICAgICAgIGFuZ2xlOiByLkZsdHIuQW5nbCwKICAgICAgICAgIGRpc3RhbmNlOiBGMChyLkZsdHIuRHN0bikKICAgICAgICB9IH0pOwogICAgICBjYXNlICJSZGxCIjoKICAgICAgICByZXR1cm4gaChoKHt9LCBhKSwgeyB0eXBlOiAicmFkaWFsIGJsdXIiLCBmaWx0ZXI6IHsKICAgICAgICAgIGFtb3VudDogci5GbHRyLkFtbnQsCiAgICAgICAgICBtZXRob2Q6IHUxLmRlY29kZShyLkZsdHIuQmxyTSksCiAgICAgICAgICBxdWFsaXR5OiBsMS5kZWNvZGUoci5GbHRyLkJsclEpCiAgICAgICAgfSB9KTsKICAgICAgY2FzZSAic2hhcGVCbHVyIjoKICAgICAgICByZXR1cm4gaChoKHt9LCBhKSwgeyB0eXBlOiAic2hhcGUgYmx1ciIsIGZpbHRlcjogewogICAgICAgICAgcmFkaXVzOiBGMChyLkZsdHJbIlJkcyAiXSksCiAgICAgICAgICBjdXN0b21TaGFwZTogeyBuYW1lOiByLkZsdHIuY3VzdG9tU2hhcGVbIk5tICAiXSwgaWQ6IHIuRmx0ci5jdXN0b21TaGFwZS5JZG50IH0KICAgICAgICB9IH0pOwogICAgICBjYXNlICJTbXJCIjoKICAgICAgICByZXR1cm4gaChoKHt9LCBhKSwgeyB0eXBlOiAic21hcnQgYmx1ciIsIGZpbHRlcjogewogICAgICAgICAgcmFkaXVzOiByLkZsdHJbIlJkcyAiXSwKICAgICAgICAgIHRocmVzaG9sZDogci5GbHRyLlRoc2gsCiAgICAgICAgICBxdWFsaXR5OiBzMS5kZWNvZGUoci5GbHRyLlNtQlEpLAogICAgICAgICAgbW9kZTogYzEuZGVjb2RlKHIuRmx0ci5TbUJNKQogICAgICAgIH0gfSk7CiAgICAgIGNhc2UgInN1cmZhY2VCbHVyIjoKICAgICAgICByZXR1cm4gaChoKHt9LCBhKSwgeyB0eXBlOiAic3VyZmFjZSBibHVyIiwgZmlsdGVyOiB7CiAgICAgICAgICByYWRpdXM6IEYwKHIuRmx0clsiUmRzICJdKSwKICAgICAgICAgIHRocmVzaG9sZDogci5GbHRyLlRoc2gKICAgICAgICB9IH0pOwogICAgICBjYXNlICJEc3BsIjoKICAgICAgICByZXR1cm4gaChoKHt9LCBhKSwgeyB0eXBlOiAiZGlzcGxhY2UiLCBmaWx0ZXI6IHsKICAgICAgICAgIGhvcml6b250YWxTY2FsZTogci5GbHRyLkhyelMsCiAgICAgICAgICB2ZXJ0aWNhbFNjYWxlOiByLkZsdHIuVnJ0UywKICAgICAgICAgIGRpc3BsYWNlbWVudE1hcDogYjEuZGVjb2RlKHIuRmx0ci5Ec3BNKSwKICAgICAgICAgIHVuZGVmaW5lZEFyZWFzOiBVYS5kZWNvZGUoci5GbHRyLlVuZEEpLAogICAgICAgICAgZGlzcGxhY2VtZW50RmlsZTogewogICAgICAgICAgICBzaWduYXR1cmU6IHIuRmx0ci5Ec3BGLnNpZywKICAgICAgICAgICAgcGF0aDogci5GbHRyLkRzcEYucGF0aAogICAgICAgICAgICAvLyBUT0RPOiB0aGlzIGlzIGRlY29kZWQgaW5jb3JyZWN0bHkgPz8/CiAgICAgICAgICB9CiAgICAgICAgfSB9KTsKICAgICAgY2FzZSAiUG5jaCI6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogInBpbmNoIiwgZmlsdGVyOiB7CiAgICAgICAgICBhbW91bnQ6IHIuRmx0ci5BbW50CiAgICAgICAgfSB9KTsKICAgICAgY2FzZSAiUGxyICI6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogInBvbGFyIGNvb3JkaW5hdGVzIiwgZmlsdGVyOiB7CiAgICAgICAgICBjb252ZXJzaW9uOiBkMS5kZWNvZGUoci5GbHRyLkNudnIpCiAgICAgICAgfSB9KTsKICAgICAgY2FzZSAiUnBsZSI6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogInJpcHBsZSIsIGZpbHRlcjogewogICAgICAgICAgYW1vdW50OiByLkZsdHIuQW1udCwKICAgICAgICAgIHNpemU6IGgxLmRlY29kZShyLkZsdHIuUnBsUykKICAgICAgICB9IH0pOwogICAgICBjYXNlICJTaHIgIjoKICAgICAgICByZXR1cm4gaChoKHt9LCBhKSwgeyB0eXBlOiAic2hlYXIiLCBmaWx0ZXI6IHsKICAgICAgICAgIHNoZWFyUG9pbnRzOiByLkZsdHIuU2hyUC5tYXAoZnVuY3Rpb24oZikgewogICAgICAgICAgICByZXR1cm4geyB4OiBmLkhyem4sIHk6IGYuVnJ0YyB9OwogICAgICAgICAgfSksCiAgICAgICAgICBzaGVhclN0YXJ0OiByLkZsdHIuU2hyUywKICAgICAgICAgIHNoZWFyRW5kOiByLkZsdHIuU2hyRSwKICAgICAgICAgIHVuZGVmaW5lZEFyZWFzOiBVYS5kZWNvZGUoci5GbHRyLlVuZEEpCiAgICAgICAgfSB9KTsKICAgICAgY2FzZSAiU3BociI6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogInNwaGVyaXplIiwgZmlsdGVyOiB7CiAgICAgICAgICBhbW91bnQ6IHIuRmx0ci5BbW50LAogICAgICAgICAgbW9kZTogdjEuZGVjb2RlKHIuRmx0ci5TcGhNKQogICAgICAgIH0gfSk7CiAgICAgIGNhc2UgIlR3cmwiOgogICAgICAgIHJldHVybiBoKGgoe30sIGEpLCB7IHR5cGU6ICJ0d2lybCIsIGZpbHRlcjogewogICAgICAgICAgYW5nbGU6IHIuRmx0ci5BbmdsCiAgICAgICAgfSB9KTsKICAgICAgY2FzZSAiV2F2ZSI6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogIndhdmUiLCBmaWx0ZXI6IHsKICAgICAgICAgIG51bWJlck9mR2VuZXJhdG9yczogci5GbHRyLk5tYkcsCiAgICAgICAgICB0eXBlOiBrMS5kZWNvZGUoci5GbHRyLld2dHApLAogICAgICAgICAgd2F2ZWxlbmd0aDogeyBtaW46IHIuRmx0ci5XTE1uLCBtYXg6IHIuRmx0ci5XTE14IH0sCiAgICAgICAgICBhbXBsaXR1ZGU6IHsgbWluOiByLkZsdHIuQW1NbiwgbWF4OiByLkZsdHIuQW1NeCB9LAogICAgICAgICAgc2NhbGU6IHsgeDogci5GbHRyLlNjbEgsIHk6IHIuRmx0ci5TY2xWIH0sCiAgICAgICAgICByYW5kb21TZWVkOiByLkZsdHIuUm5kUywKICAgICAgICAgIHVuZGVmaW5lZEFyZWFzOiBVYS5kZWNvZGUoci5GbHRyLlVuZEEpCiAgICAgICAgfSB9KTsKICAgICAgY2FzZSAiWmdaZyI6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogInppZ3phZyIsIGZpbHRlcjogewogICAgICAgICAgYW1vdW50OiByLkZsdHIuQW1udCwKICAgICAgICAgIHJpZGdlczogci5GbHRyLk5tYlIsCiAgICAgICAgICBzdHlsZTogZzEuZGVjb2RlKHIuRmx0ci5aWlR5KQogICAgICAgIH0gfSk7CiAgICAgIGNhc2UgIkFkTnMiOgogICAgICAgIHJldHVybiBoKGgoe30sIGEpLCB7IHR5cGU6ICJhZGQgbm9pc2UiLCBmaWx0ZXI6IHsKICAgICAgICAgIGFtb3VudDogQTAoci5GbHRyLk5vc2UpLAogICAgICAgICAgZGlzdHJpYnV0aW9uOiBtMS5kZWNvZGUoci5GbHRyLkRzdHIpLAogICAgICAgICAgbW9ub2Nocm9tYXRpYzogci5GbHRyLk1uY2gsCiAgICAgICAgICByYW5kb21TZWVkOiByLkZsdHIuRmxScwogICAgICAgIH0gfSk7CiAgICAgIGNhc2UgIkRzdFMiOgogICAgICAgIHJldHVybiBoKGgoe30sIGEpLCB7IHR5cGU6ICJkdXN0IGFuZCBzY3JhdGNoZXMiLCBmaWx0ZXI6IHsKICAgICAgICAgIHJhZGl1czogci5GbHRyWyJSZHMgIl0sCiAgICAgICAgICB0aHJlc2hvbGQ6IHIuRmx0ci5UaHNoCiAgICAgICAgfSB9KTsKICAgICAgY2FzZSAiTWRuICI6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogIm1lZGlhbiIsIGZpbHRlcjogewogICAgICAgICAgcmFkaXVzOiBGMChyLkZsdHJbIlJkcyAiXSkKICAgICAgICB9IH0pOwogICAgICBjYXNlICJkZW5vaXNlIjoKICAgICAgICByZXR1cm4gaChoKHt9LCBhKSwgeyB0eXBlOiAicmVkdWNlIG5vaXNlIiwgZmlsdGVyOiB7CiAgICAgICAgICBwcmVzZXQ6IHIuRmx0ci5wcmVzZXQsCiAgICAgICAgICByZW1vdmVKcGVnQXJ0aWZhY3Q6IHIuRmx0ci5yZW1vdmVKUEVHQXJ0aWZhY3QsCiAgICAgICAgICByZWR1Y2VDb2xvck5vaXNlOiBBMChyLkZsdHIuQ2xOcyksCiAgICAgICAgICBzaGFycGVuRGV0YWlsczogQTAoci5GbHRyLlNocnApLAogICAgICAgICAgY2hhbm5lbERlbm9pc2U6IHIuRmx0ci5jaGFubmVsRGVub2lzZS5tYXAoZnVuY3Rpb24oZikgewogICAgICAgICAgICByZXR1cm4gaCh7IGNoYW5uZWxzOiBmLkNobmwubWFwKEUyLmRlY29kZSksIGFtb3VudDogZi5BbW50IH0sIGYuRWRnRiA/IHsgcHJlc2VydmVEZXRhaWxzOiBmLkVkZ0YgfSA6IHt9KTsKICAgICAgICAgIH0pCiAgICAgICAgfSB9KTsKICAgICAgY2FzZSAiQ2xySCI6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogImNvbG9yIGhhbGZ0b25lIiwgZmlsdGVyOiB7CiAgICAgICAgICByYWRpdXM6IHIuRmx0clsiUmRzICJdLAogICAgICAgICAgYW5nbGUxOiByLkZsdHIuQW5nMSwKICAgICAgICAgIGFuZ2xlMjogci5GbHRyLkFuZzIsCiAgICAgICAgICBhbmdsZTM6IHIuRmx0ci5BbmczLAogICAgICAgICAgYW5nbGU0OiByLkZsdHIuQW5nNAogICAgICAgIH0gfSk7CiAgICAgIGNhc2UgIkNyc3QiOgogICAgICAgIHJldHVybiBoKGgoe30sIGEpLCB7IHR5cGU6ICJjcnlzdGFsbGl6ZSIsIGZpbHRlcjogewogICAgICAgICAgY2VsbFNpemU6IHIuRmx0ci5DbFN6LAogICAgICAgICAgcmFuZG9tU2VlZDogci5GbHRyLkZsUnMKICAgICAgICB9IH0pOwogICAgICBjYXNlICJNenRuIjoKICAgICAgICByZXR1cm4gaChoKHt9LCBhKSwgeyB0eXBlOiAibWV6em90aW50IiwgZmlsdGVyOiB7CiAgICAgICAgICB0eXBlOiBwMS5kZWNvZGUoci5GbHRyLk16dFQpLAogICAgICAgICAgcmFuZG9tU2VlZDogci5GbHRyLkZsUnMKICAgICAgICB9IH0pOwogICAgICBjYXNlICJNc2MgIjoKICAgICAgICByZXR1cm4gaChoKHt9LCBhKSwgeyB0eXBlOiAibW9zYWljIiwgZmlsdGVyOiB7CiAgICAgICAgICBjZWxsU2l6ZTogRjAoci5GbHRyLkNsU3opCiAgICAgICAgfSB9KTsKICAgICAgY2FzZSAiUG50bCI6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogInBvaW50aWxsaXplIiwgZmlsdGVyOiB7CiAgICAgICAgICBjZWxsU2l6ZTogci5GbHRyLkNsU3osCiAgICAgICAgICByYW5kb21TZWVkOiByLkZsdHIuRmxScwogICAgICAgIH0gfSk7CiAgICAgIGNhc2UgIkNsZHMiOgogICAgICAgIHJldHVybiBoKGgoe30sIGEpLCB7IHR5cGU6ICJjbG91ZHMiLCBmaWx0ZXI6IHsKICAgICAgICAgIHJhbmRvbVNlZWQ6IHIuRmx0ci5GbFJzCiAgICAgICAgfSB9KTsKICAgICAgY2FzZSAiRGZyQyI6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogImRpZmZlcmVuY2UgY2xvdWRzIiwgZmlsdGVyOiB7CiAgICAgICAgICByYW5kb21TZWVkOiByLkZsdHIuRmxScwogICAgICAgIH0gfSk7CiAgICAgIGNhc2UgIkZicnMiOgogICAgICAgIHJldHVybiBoKGgoe30sIGEpLCB7IHR5cGU6ICJmaWJlcnMiLCBmaWx0ZXI6IHsKICAgICAgICAgIHZhcmlhbmNlOiByLkZsdHIuVnJuYywKICAgICAgICAgIHN0cmVuZ3RoOiByLkZsdHIuU3RyZywKICAgICAgICAgIHJhbmRvbVNlZWQ6IHIuRmx0ci5SbmRTCiAgICAgICAgfSB9KTsKICAgICAgY2FzZSAiTG5zRiI6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogImxlbnMgZmxhcmUiLCBmaWx0ZXI6IHsKICAgICAgICAgIGJyaWdodG5lc3M6IHIuRmx0ci5CcmdoLAogICAgICAgICAgcG9zaXRpb246IHsgeDogci5GbHRyLkZsckMuSHJ6biwgeTogci5GbHRyLkZsckMuVnJ0YyB9LAogICAgICAgICAgbGVuc1R5cGU6IHcxLmRlY29kZShyLkZsdHJbIkxucyAiXSkKICAgICAgICB9IH0pOwogICAgICBjYXNlICJzbWFydFNoYXJwZW4iOgogICAgICAgIHJldHVybiBoKGgoe30sIGEpLCB7IHR5cGU6ICJzbWFydCBzaGFycGVuIiwgZmlsdGVyOiB7CiAgICAgICAgICBhbW91bnQ6IEEwKHIuRmx0ci5BbW50KSwKICAgICAgICAgIHJhZGl1czogRjAoci5GbHRyWyJSZHMgIl0pLAogICAgICAgICAgdGhyZXNob2xkOiByLkZsdHIuVGhzaCwKICAgICAgICAgIGFuZ2xlOiByLkZsdHIuQW5nbCwKICAgICAgICAgIG1vcmVBY2N1cmF0ZTogci5GbHRyLm1vcmVBY2N1cmF0ZSwKICAgICAgICAgIGJsdXI6IHkxLmRlY29kZShyLkZsdHIuYmx1ciksCiAgICAgICAgICBwcmVzZXQ6IHIuRmx0ci5wcmVzZXQsCiAgICAgICAgICBzaGFkb3c6IHsKICAgICAgICAgICAgZmFkZUFtb3VudDogQTAoci5GbHRyLnNkd00uQW1udCksCiAgICAgICAgICAgIHRvbmFsV2lkdGg6IEEwKHIuRmx0ci5zZHdNLldkdGgpLAogICAgICAgICAgICByYWRpdXM6IHIuRmx0ci5zZHdNWyJSZHMgIl0KICAgICAgICAgIH0sCiAgICAgICAgICBoaWdobGlnaHQ6IHsKICAgICAgICAgICAgZmFkZUFtb3VudDogQTAoci5GbHRyLmhnbE0uQW1udCksCiAgICAgICAgICAgIHRvbmFsV2lkdGg6IEEwKHIuRmx0ci5oZ2xNLldkdGgpLAogICAgICAgICAgICByYWRpdXM6IHIuRmx0ci5oZ2xNWyJSZHMgIl0KICAgICAgICAgIH0KICAgICAgICB9IH0pOwogICAgICBjYXNlICJVbnNNIjoKICAgICAgICByZXR1cm4gaChoKHt9LCBhKSwgeyB0eXBlOiAidW5zaGFycCBtYXNrIiwgZmlsdGVyOiB7CiAgICAgICAgICBhbW91bnQ6IEEwKHIuRmx0ci5BbW50KSwKICAgICAgICAgIHJhZGl1czogRjAoci5GbHRyWyJSZHMgIl0pLAogICAgICAgICAgdGhyZXNob2xkOiByLkZsdHIuVGhzaAogICAgICAgIH0gfSk7CiAgICAgIGNhc2UgIkRmcyAiOgogICAgICAgIHJldHVybiBoKGgoe30sIGEpLCB7IHR5cGU6ICJkaWZmdXNlIiwgZmlsdGVyOiB7CiAgICAgICAgICBtb2RlOiBFMS5kZWNvZGUoci5GbHRyWyJNZCAgIl0pLAogICAgICAgICAgcmFuZG9tU2VlZDogci5GbHRyLkZsUnMKICAgICAgICB9IH0pOwogICAgICBjYXNlICJFbWJzIjoKICAgICAgICByZXR1cm4gaChoKHt9LCBhKSwgeyB0eXBlOiAiZW1ib3NzIiwgZmlsdGVyOiB7CiAgICAgICAgICBhbmdsZTogci5GbHRyLkFuZ2wsCiAgICAgICAgICBoZWlnaHQ6IHIuRmx0ci5IZ2h0LAogICAgICAgICAgYW1vdW50OiByLkZsdHIuQW1udAogICAgICAgIH0gfSk7CiAgICAgIGNhc2UgIkV4dHIiOgogICAgICAgIHJldHVybiBoKGgoe30sIGEpLCB7IHR5cGU6ICJleHRydWRlIiwgZmlsdGVyOiB7CiAgICAgICAgICB0eXBlOiBaMS5kZWNvZGUoci5GbHRyLkV4dFQpLAogICAgICAgICAgc2l6ZTogci5GbHRyLkV4dFMsCiAgICAgICAgICBkZXB0aDogci5GbHRyLkV4dEQsCiAgICAgICAgICBkZXB0aE1vZGU6IEIxLmRlY29kZShyLkZsdHIuRXh0UiksCiAgICAgICAgICByYW5kb21TZWVkOiByLkZsdHIuRmxScywKICAgICAgICAgIHNvbGlkRnJvbnRGYWNlczogci5GbHRyLkV4dEYsCiAgICAgICAgICBtYXNrSW5jb21wbGV0ZUJsb2Nrczogci5GbHRyLkV4dE0KICAgICAgICB9IH0pOwogICAgICBjYXNlICJUbHMgIjoKICAgICAgICByZXR1cm4gaChoKHt9LCBhKSwgeyB0eXBlOiAidGlsZXMiLCBmaWx0ZXI6IHsKICAgICAgICAgIG51bWJlck9mVGlsZXM6IHIuRmx0ci5UbE5tLAogICAgICAgICAgbWF4aW11bU9mZnNldDogci5GbHRyLlRsT2YsCiAgICAgICAgICBmaWxsRW1wdHlBcmVhV2l0aDogSTEuZGVjb2RlKHIuRmx0ci5GbENsKSwKICAgICAgICAgIHJhbmRvbVNlZWQ6IHIuRmx0ci5GbFJzCiAgICAgICAgfSB9KTsKICAgICAgY2FzZSAiVHJjQyI6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogInRyYWNlIGNvbnRvdXIiLCBmaWx0ZXI6IHsKICAgICAgICAgIGxldmVsOiByLkZsdHJbIkx2bCAiXSwKICAgICAgICAgIGVkZ2U6IEYxLmRlY29kZShyLkZsdHJbIkVkZyAiXSkKICAgICAgICB9IH0pOwogICAgICBjYXNlICJXbmQgIjoKICAgICAgICByZXR1cm4gaChoKHt9LCBhKSwgeyB0eXBlOiAid2luZCIsIGZpbHRlcjogewogICAgICAgICAgbWV0aG9kOiBDMS5kZWNvZGUoci5GbHRyLlduZE0pLAogICAgICAgICAgZGlyZWN0aW9uOiBXMS5kZWNvZGUoci5GbHRyLkRyY3QpCiAgICAgICAgfSB9KTsKICAgICAgY2FzZSAiRG50ciI6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogImRlLWludGVybGFjZSIsIGZpbHRlcjogewogICAgICAgICAgZWxpbWluYXRlOiBfMS5kZWNvZGUoci5GbHRyLkludEUpLAogICAgICAgICAgbmV3RmllbGRzQnk6IEcxLmRlY29kZShyLkZsdHIuSW50QykKICAgICAgICB9IH0pOwogICAgICBjYXNlICJDc3RtIjoKICAgICAgICByZXR1cm4gaChoKHt9LCBhKSwgeyB0eXBlOiAiY3VzdG9tIiwgZmlsdGVyOiB7CiAgICAgICAgICBzY2FsZTogci5GbHRyWyJTY2wgIl0sCiAgICAgICAgICBvZmZzZXQ6IHIuRmx0ci5PZnN0LAogICAgICAgICAgbWF0cml4OiByLkZsdHIuTXRyeAogICAgICAgIH0gfSk7CiAgICAgIGNhc2UgIkhnaFAiOgogICAgICAgIHJldHVybiBoKGgoe30sIGEpLCB7IHR5cGU6ICJoaWdoIHBhc3MiLCBmaWx0ZXI6IHsKICAgICAgICAgIHJhZGl1czogRjAoci5GbHRyWyJSZHMgIl0pCiAgICAgICAgfSB9KTsKICAgICAgY2FzZSAiTXhtICI6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogIm1heGltdW0iLCBmaWx0ZXI6IHsKICAgICAgICAgIHJhZGl1czogRjAoci5GbHRyWyJSZHMgIl0pCiAgICAgICAgfSB9KTsKICAgICAgY2FzZSAiTW5tICI6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogIm1pbmltdW0iLCBmaWx0ZXI6IHsKICAgICAgICAgIHJhZGl1czogRjAoci5GbHRyWyJSZHMgIl0pCiAgICAgICAgfSB9KTsKICAgICAgY2FzZSAiT2ZzdCI6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogIm9mZnNldCIsIGZpbHRlcjogewogICAgICAgICAgaG9yaXpvbnRhbDogci5GbHRyLkhyem4sCiAgICAgICAgICB2ZXJ0aWNhbDogci5GbHRyLlZydGMsCiAgICAgICAgICB1bmRlZmluZWRBcmVhczogWDEuZGVjb2RlKHIuRmx0clsiRmwgICJdKQogICAgICAgIH0gfSk7CiAgICAgIGNhc2UgInJpZ2lkVHJhbnNmb3JtIjoKICAgICAgICByZXR1cm4gaChoKHt9LCBhKSwgeyB0eXBlOiAicHVwcGV0IiwgZmlsdGVyOiB7CiAgICAgICAgICByaWdpZFR5cGU6IHIuRmx0ci5yaWdpZFR5cGUsCiAgICAgICAgICBib3VuZHM6IFsKICAgICAgICAgICAgeyB4OiByLkZsdHIuUHVYMCwgeTogci5GbHRyLlB1WTAgfSwKICAgICAgICAgICAgeyB4OiByLkZsdHIuUHVYMSwgeTogci5GbHRyLlB1WTEgfSwKICAgICAgICAgICAgeyB4OiByLkZsdHIuUHVYMiwgeTogci5GbHRyLlB1WTIgfSwKICAgICAgICAgICAgeyB4OiByLkZsdHIuUHVYMywgeTogci5GbHRyLlB1WTMgfQogICAgICAgICAgXSwKICAgICAgICAgIHB1cHBldFNoYXBlTGlzdDogci5GbHRyLnB1cHBldFNoYXBlTGlzdC5tYXAoZnVuY3Rpb24oZikgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgIHJpZ2lkVHlwZTogZi5yaWdpZFR5cGUsCiAgICAgICAgICAgICAgLy8gVE9ETzogVnJzTQogICAgICAgICAgICAgIC8vIFRPRE86IFZyc04KICAgICAgICAgICAgICBvcmlnaW5hbFZlcnRleEFycmF5OiBTaShmLm9yaWdpbmFsVmVydGV4QXJyYXkpLAogICAgICAgICAgICAgIGRlZm9ybWVkVmVydGV4QXJyYXk6IFNpKGYuZGVmb3JtZWRWZXJ0ZXhBcnJheSksCiAgICAgICAgICAgICAgaW5kZXhBcnJheTogQXJyYXkuZnJvbShaNChmLmluZGV4QXJyYXkpKSwKICAgICAgICAgICAgICBwaW5PZmZzZXRzOiBoZShmLnBpbk9mZnNldHMpLAogICAgICAgICAgICAgIHBvc0ZpbmFsUGluczogaGUoZi5wb3NGaW5hbFBpbnMpLAogICAgICAgICAgICAgIHBpblZlcnRleEluZGljZXM6IGYucGluVmVydGV4SW5kaWNlcywKICAgICAgICAgICAgICBzZWxlY3RlZFBpbjogZi5zZWxlY3RlZFBpbiwKICAgICAgICAgICAgICBwaW5Qb3NpdGlvbjogaGUoZi5QaW5QKSwKICAgICAgICAgICAgICBwaW5Sb3RhdGlvbjogZi5QblJ0LAogICAgICAgICAgICAgIHBpbk92ZXJsYXk6IGYuUG5PdiwKICAgICAgICAgICAgICBwaW5EZXB0aDogZi5QbkRwLAogICAgICAgICAgICAgIG1lc2hRdWFsaXR5OiBmLm1lc2hRdWFsaXR5LAogICAgICAgICAgICAgIG1lc2hFeHBhbnNpb246IGYubWVzaEV4cGFuc2lvbiwKICAgICAgICAgICAgICBtZXNoUmlnaWRpdHk6IGYubWVzaFJpZ2lkaXR5LAogICAgICAgICAgICAgIGltYWdlUmVzb2x1dGlvbjogZi5pbWFnZVJlc29sdXRpb24sCiAgICAgICAgICAgICAgbWVzaEJvdW5kYXJ5UGF0aDogewogICAgICAgICAgICAgICAgcGF0aENvbXBvbmVudHM6IGYubWVzaEJvdW5kYXJ5UGF0aC5wYXRoQ29tcG9uZW50cy5tYXAoZnVuY3Rpb24odSkgewogICAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgIHNoYXBlT3BlcmF0aW9uOiB1LnNoYXBlT3BlcmF0aW9uLnNwbGl0KCIuIilbMV0sCiAgICAgICAgICAgICAgICAgICAgcGF0aHM6IHUuU2JwTC5tYXAoZnVuY3Rpb24obykgewogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VkOiBvLkNsc3AsCiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50czogb1siUHRzICJdLm1hcChmdW5jdGlvbihsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvcjogZjIobC5BbmNoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmQ6IGYyKGxbIkZ3ZCAiXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrd2FyZDogZjIobFsiQndkICJdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtb290aDogbC5TbW9vCiAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9OwogICAgICAgICAgfSkKICAgICAgICB9IH0pOwogICAgICBjYXNlICJQYlBsIjogewogICAgICAgIGZvciAodmFyIEEgPSBbXSwgdCA9IHIuRmx0ciwgaSA9IDA7IGkgPCBrci5sZW5ndGggJiYgdFsiUE4iLmNvbmNhdChrcltpXSwgImEiKV07IGkrKykKICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwga3IubGVuZ3RoICYmIHRbIlBOIi5jb25jYXQoa3JbaV0pLmNvbmNhdChrcltuXSldOyBuKyspCiAgICAgICAgICAgIEEucHVzaCh7CiAgICAgICAgICAgICAgbmFtZTogdFsiUE4iLmNvbmNhdChrcltpXSkuY29uY2F0KGtyW25dKV0sCiAgICAgICAgICAgICAgdmFsdWU6IHRbIlBGIi5jb25jYXQoa3JbaV0pLmNvbmNhdChrcltuXSldCiAgICAgICAgICAgIH0pOwogICAgICAgIHJldHVybiBoKGgoe30sIGEpLCB7IHR5cGU6ICJvaWwgcGFpbnQgcGx1Z2luIiwgZmlsdGVyOiB7CiAgICAgICAgICBuYW1lOiByLkZsdHIuS25ObSwKICAgICAgICAgIGdwdTogci5GbHRyLkdwdVksCiAgICAgICAgICBsaWdodGluZzogci5GbHRyLkxJV3ksCiAgICAgICAgICBwYXJhbWV0ZXJzOiBBCiAgICAgICAgfSB9KTsKICAgICAgfQogICAgICBjYXNlICJIc2JQIjoKICAgICAgICByZXR1cm4gaChoKHt9LCBhKSwgeyB0eXBlOiAiaHNiL2hzbCIsIGZpbHRlcjogewogICAgICAgICAgaW5wdXRNb2RlOiB3ZS5kZWNvZGUoci5GbHRyLklucHQpLAogICAgICAgICAgcm93T3JkZXI6IHdlLmRlY29kZShyLkZsdHIuT3RwdCkKICAgICAgICB9IH0pOwogICAgICBjYXNlICJvaWxQYWludCI6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogIm9pbCBwYWludCIsIGZpbHRlcjogewogICAgICAgICAgbGlnaHRpbmdPbjogci5GbHRyLmxpZ2h0aW5nT24sCiAgICAgICAgICBzdHlsaXphdGlvbjogci5GbHRyLnN0eWxpemF0aW9uLAogICAgICAgICAgY2xlYW5saW5lc3M6IHIuRmx0ci5jbGVhbmxpbmVzcywKICAgICAgICAgIGJydXNoU2NhbGU6IHIuRmx0ci5icnVzaFNjYWxlLAogICAgICAgICAgbWljcm9CcnVzaDogci5GbHRyLm1pY3JvQnJ1c2gsCiAgICAgICAgICBsaWdodERpcmVjdGlvbjogci5GbHRyLkxnaEQsCiAgICAgICAgICBzcGVjdWxhcml0eTogci5GbHRyLnNwZWN1bGFyaXR5CiAgICAgICAgfSB9KTsKICAgICAgY2FzZSAiTHFGeSI6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogImxpcXVpZnkiLCBmaWx0ZXI6IHsKICAgICAgICAgIGxpcXVpZnlNZXNoOiByLkZsdHIuTHFNZQogICAgICAgIH0gfSk7CiAgICAgIGNhc2UgInBlcnNwZWN0aXZlV2FycFRyYW5zZm9ybSI6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogInBlcnNwZWN0aXZlIHdhcnAiLCBmaWx0ZXI6IHsKICAgICAgICAgIHZlcnRpY2VzOiByLkZsdHIudmVydGljZXMubWFwKGYyKSwKICAgICAgICAgIHdhcnBlZFZlcnRpY2VzOiByLkZsdHIud2FycGVkVmVydGljZXMubWFwKGYyKSwKICAgICAgICAgIHF1YWRzOiByLkZsdHIucXVhZHMubWFwKGZ1bmN0aW9uKGYpIHsKICAgICAgICAgICAgcmV0dXJuIGYuaW5kaWNlczsKICAgICAgICAgIH0pCiAgICAgICAgfSB9KTsKICAgICAgY2FzZSAiQ3J2cyI6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogImN1cnZlcyIsIGZpbHRlcjogaCh7IHByZXNldEtpbmQ6IFIxLmRlY29kZShyLkZsdHIucHJlc2V0S2luZCkgfSwgci5GbHRyLkFkanMgPyB7CiAgICAgICAgICBhZGp1c3RtZW50czogci5GbHRyLkFkanMubWFwKGZ1bmN0aW9uKGYpIHsKICAgICAgICAgICAgdmFyIHUgPSBmLkNobmwubWFwKEUyLmRlY29kZSk7CiAgICAgICAgICAgIGlmIChmWyJDcnYgIl0pCiAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIGNoYW5uZWxzOiB1LAogICAgICAgICAgICAgICAgY3VydmU6IGZbIkNydiAiXS5tYXAoZnVuY3Rpb24obykgewogICAgICAgICAgICAgICAgICB2YXIgbCA9IHsgeDogby5IcnpuLCB5OiBvLlZydGMgfTsKICAgICAgICAgICAgICAgICAgcmV0dXJuIG8uQ250eSAmJiAobC5jdXJ2ZWQgPSAhMCksIGw7CiAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgIH07CiAgICAgICAgICAgIGlmIChmLk1wbmcpCiAgICAgICAgICAgICAgcmV0dXJuIHsgY2hhbm5lbHM6IHUsIHZhbHVlczogZi5NcG5nIH07CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVW5rbm93biBjdXJ2ZSBhZGp1c3RtZW50Iik7CiAgICAgICAgICB9KQogICAgICAgIH0gOiB7fSkgfSk7CiAgICAgIGNhc2UgIkJyZ0MiOgogICAgICAgIHJldHVybiBoKGgoe30sIGEpLCB7IHR5cGU6ICJicmlnaHRuZXNzL2NvbnRyYXN0IiwgZmlsdGVyOiB7CiAgICAgICAgICBicmlnaHRuZXNzOiByLkZsdHIuQnJnaCwKICAgICAgICAgIGNvbnRyYXN0OiByLkZsdHIuQ250ciwKICAgICAgICAgIHVzZUxlZ2FjeTogISFyLkZsdHIudXNlTGVnYWN5CiAgICAgICAgfSB9KTsKICAgICAgZGVmYXVsdDoKICAgICAgICBpZiAoZS50aHJvd0Zvck1pc3NpbmdGZWF0dXJlcykKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVW5rbm93biBmaWx0ZXIgY2xhc3NJZDogIi5jb25jYXQoci5GbHRyLl9jbGFzc0lEKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQogIGVsc2UKICAgIHN3aXRjaCAoci5maWx0ZXJJRCkgewogICAgICBjYXNlIDEwOTgyODE1NzU6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogImF2ZXJhZ2UiIH0pOwogICAgICBjYXNlIDExMTQ0MDMzNjA6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogImJsdXIiIH0pOwogICAgICBjYXNlIDExMTQ0MDM0MDU6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogImJsdXIgbW9yZSIgfSk7CiAgICAgIGNhc2UgMTE0ODQxNjA5OToKICAgICAgICByZXR1cm4gaChoKHt9LCBhKSwgeyB0eXBlOiAiZGVzcGVja2xlIiB9KTsKICAgICAgY2FzZSAxMTgwOTIyOTEyOgogICAgICAgIHJldHVybiBoKGgoe30sIGEpLCB7IHR5cGU6ICJmYWNldCIgfSk7CiAgICAgIGNhc2UgMTE4MTkwMjcwMToKICAgICAgICByZXR1cm4gaChoKHt9LCBhKSwgeyB0eXBlOiAiZnJhZ21lbnQiIH0pOwogICAgICBjYXNlIDEzOTkzNTM5Njg6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogInNoYXJwZW4iIH0pOwogICAgICBjYXNlIDEzOTkzNTM5MjU6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogInNoYXJwZW4gZWRnZXMiIH0pOwogICAgICBjYXNlIDEzOTkzNTM5MzM6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogInNoYXJwZW4gbW9yZSIgfSk7CiAgICAgIGNhc2UgMTE4MTYzOTc0OToKICAgICAgICByZXR1cm4gaChoKHt9LCBhKSwgeyB0eXBlOiAiZmluZCBlZGdlcyIgfSk7CiAgICAgIGNhc2UgMTM5OTYxNjEyMjoKICAgICAgICByZXR1cm4gaChoKHt9LCBhKSwgeyB0eXBlOiAic29sYXJpemUiIH0pOwogICAgICBjYXNlIDEzMTQxNDkxODc6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogIm50c2MgY29sb3JzIiB9KTsKICAgICAgY2FzZSAxMjMxOTc2MDUwOgogICAgICAgIHJldHVybiBoKGgoe30sIGEpLCB7IHR5cGU6ICJpbnZlcnQiIH0pOwogICAgICBkZWZhdWx0OgogICAgICAgIGlmIChlLnRocm93Rm9yTWlzc2luZ0ZlYXR1cmVzKQogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGZpbHRlcklEOiAiLmNvbmNhdChyLmZpbHRlcklEKSk7CiAgICB9Cn0KZnVuY3Rpb24gSTQociwgZSkgewogIHJldHVybiB7CiAgICBlbmFibGVkOiByLmVuYWIsCiAgICB2YWxpZEF0UG9zaXRpb246IHIudmFsaWRBdFBvc2l0aW9uLAogICAgbWFza0VuYWJsZWQ6IHIuZmlsdGVyTWFza0VuYWJsZSwKICAgIG1hc2tMaW5rZWQ6IHIuZmlsdGVyTWFza0xpbmtlZCwKICAgIG1hc2tFeHRlbmRXaXRoV2hpdGU6IHIuZmlsdGVyTWFza0V4dGVuZFdpdGhXaGl0ZSwKICAgIGxpc3Q6IHIuZmlsdGVyRlhMaXN0Lm1hcChmdW5jdGlvbihhKSB7CiAgICAgIHJldHVybiBCNChhLCBlKTsKICAgIH0pLmZpbHRlcihmdW5jdGlvbihhKSB7CiAgICAgIHJldHVybiAhIWE7CiAgICB9KQogIH07Cn0KZnVuY3Rpb24gWXIocikgewogIHJldHVybiBEMChyLnJhZGl1cywgInJhZGl1cyIpOwp9CmZ1bmN0aW9uIEY0KHIpIHsKICB2YXIgZSA9IHsKICAgIF9uYW1lOiAiIiwKICAgIF9jbGFzc0lEOiAiZmlsdGVyRlgiLAogICAgIk5tICAiOiByLm5hbWUsCiAgICBibGVuZE9wdGlvbnM6IHsKICAgICAgX25hbWU6ICIiLAogICAgICBfY2xhc3NJRDogImJsZW5kT3B0aW9ucyIsCiAgICAgIE9wY3Q6IEVyKHIub3BhY2l0eSksCiAgICAgICJNZCAgIjogb3IuZW5jb2RlKHIuYmxlbmRNb2RlKQogICAgfSwKICAgIGVuYWI6IHIuZW5hYmxlZCwKICAgIGhhc29wdGlvbnM6IHIuaGFzT3B0aW9ucywKICAgIEZyZ0M6IERyKHIuZm9yZWdyb3VuZENvbG9yKSwKICAgIEJja0M6IERyKHIuYmFja2dyb3VuZENvbG9yKQogIH07CiAgc3dpdGNoIChyLnR5cGUpIHsKICAgIGNhc2UgImF2ZXJhZ2UiOgogICAgICByZXR1cm4gaChoKHt9LCBlKSwgeyBmaWx0ZXJJRDogMTA5ODI4MTU3NSB9KTsKICAgIGNhc2UgImJsdXIiOgogICAgICByZXR1cm4gaChoKHt9LCBlKSwgeyBmaWx0ZXJJRDogMTExNDQwMzM2MCB9KTsKICAgIGNhc2UgImJsdXIgbW9yZSI6CiAgICAgIHJldHVybiBoKGgoe30sIGUpLCB7IGZpbHRlcklEOiAxMTE0NDAzNDA1IH0pOwogICAgY2FzZSAiYm94IGJsdXIiOgogICAgICByZXR1cm4gaChoKHt9LCBlKSwgeyBGbHRyOiB7CiAgICAgICAgX25hbWU6ICJCb3ggQmx1ciIsCiAgICAgICAgX2NsYXNzSUQ6ICJib3hibHVyIiwKICAgICAgICAiUmRzICI6IFlyKHIuZmlsdGVyKQogICAgICB9LCBmaWx0ZXJJRDogNjk3IH0pOwogICAgY2FzZSAiZ2F1c3NpYW4gYmx1ciI6CiAgICAgIHJldHVybiBoKGgoe30sIGUpLCB7IEZsdHI6IHsKICAgICAgICAvLyBfbmFtZTogJ+mrmOaWr+aooeeziicsIC8vIFRlc3RpbmcKICAgICAgICBfbmFtZTogIkdhdXNzaWFuIEJsdXIiLAogICAgICAgIF9jbGFzc0lEOiAiR3NuQiIsCiAgICAgICAgIlJkcyAiOiBZcihyLmZpbHRlcikKICAgICAgfSwgZmlsdGVySUQ6IDExOTg3NDcyMDIgfSk7CiAgICBjYXNlICJtb3Rpb24gYmx1ciI6CiAgICAgIHJldHVybiBoKGgoe30sIGUpLCB7IEZsdHI6IHsKICAgICAgICBfbmFtZTogIk1vdGlvbiBCbHVyIiwKICAgICAgICBfY2xhc3NJRDogIk10bkIiLAogICAgICAgIEFuZ2w6IHIuZmlsdGVyLmFuZ2xlLAogICAgICAgIERzdG46IEQwKHIuZmlsdGVyLmRpc3RhbmNlLCAiZGlzdGFuY2UiKQogICAgICB9LCBmaWx0ZXJJRDogMTI5OTQ3NjAzNCB9KTsKICAgIGNhc2UgInJhZGlhbCBibHVyIjoKICAgICAgcmV0dXJuIGgoaCh7fSwgZSksIHsgRmx0cjogewogICAgICAgIF9uYW1lOiAiUmFkaWFsIEJsdXIiLAogICAgICAgIF9jbGFzc0lEOiAiUmRsQiIsCiAgICAgICAgQW1udDogci5maWx0ZXIuYW1vdW50LAogICAgICAgIEJsck06IHUxLmVuY29kZShyLmZpbHRlci5tZXRob2QpLAogICAgICAgIEJsclE6IGwxLmVuY29kZShyLmZpbHRlci5xdWFsaXR5KQogICAgICB9LCBmaWx0ZXJJRDogMTM4MjMxMzAyNiB9KTsKICAgIGNhc2UgInNoYXBlIGJsdXIiOgogICAgICByZXR1cm4gaChoKHt9LCBlKSwgeyBGbHRyOiB7CiAgICAgICAgX25hbWU6ICJTaGFwZSBCbHVyIiwKICAgICAgICBfY2xhc3NJRDogInNoYXBlQmx1ciIsCiAgICAgICAgIlJkcyAiOiBZcihyLmZpbHRlciksCiAgICAgICAgY3VzdG9tU2hhcGU6IHsKICAgICAgICAgIF9uYW1lOiAiIiwKICAgICAgICAgIF9jbGFzc0lEOiAiY3VzdG9tU2hhcGUiLAogICAgICAgICAgIk5tICAiOiByLmZpbHRlci5jdXN0b21TaGFwZS5uYW1lLAogICAgICAgICAgSWRudDogci5maWx0ZXIuY3VzdG9tU2hhcGUuaWQKICAgICAgICB9CiAgICAgIH0sIGZpbHRlcklEOiA3MDIgfSk7CiAgICBjYXNlICJzbWFydCBibHVyIjoKICAgICAgcmV0dXJuIGgoaCh7fSwgZSksIHsgRmx0cjogewogICAgICAgIF9uYW1lOiAiU21hcnQgQmx1ciIsCiAgICAgICAgX2NsYXNzSUQ6ICJTbXJCIiwKICAgICAgICAiUmRzICI6IHIuZmlsdGVyLnJhZGl1cywKICAgICAgICBUaHNoOiByLmZpbHRlci50aHJlc2hvbGQsCiAgICAgICAgU21CUTogczEuZW5jb2RlKHIuZmlsdGVyLnF1YWxpdHkpLAogICAgICAgIFNtQk06IGMxLmVuY29kZShyLmZpbHRlci5tb2RlKQogICAgICB9LCBmaWx0ZXJJRDogMTM5OTY4MTYwMiB9KTsKICAgIGNhc2UgInN1cmZhY2UgYmx1ciI6CiAgICAgIHJldHVybiBoKGgoe30sIGUpLCB7IEZsdHI6IHsKICAgICAgICBfbmFtZTogIlN1cmZhY2UgQmx1ciIsCiAgICAgICAgX2NsYXNzSUQ6ICJzdXJmYWNlQmx1ciIsCiAgICAgICAgIlJkcyAiOiBZcihyLmZpbHRlciksCiAgICAgICAgVGhzaDogci5maWx0ZXIudGhyZXNob2xkCiAgICAgIH0sIGZpbHRlcklEOiA3MDEgfSk7CiAgICBjYXNlICJkaXNwbGFjZSI6CiAgICAgIHJldHVybiBoKGgoe30sIGUpLCB7IEZsdHI6IHsKICAgICAgICBfbmFtZTogIkRpc3BsYWNlIiwKICAgICAgICBfY2xhc3NJRDogIkRzcGwiLAogICAgICAgIEhyelM6IHIuZmlsdGVyLmhvcml6b250YWxTY2FsZSwKICAgICAgICBWcnRTOiByLmZpbHRlci52ZXJ0aWNhbFNjYWxlLAogICAgICAgIERzcE06IGIxLmVuY29kZShyLmZpbHRlci5kaXNwbGFjZW1lbnRNYXApLAogICAgICAgIFVuZEE6IFVhLmVuY29kZShyLmZpbHRlci51bmRlZmluZWRBcmVhcyksCiAgICAgICAgRHNwRjogewogICAgICAgICAgc2lnOiByLmZpbHRlci5kaXNwbGFjZW1lbnRGaWxlLnNpZ25hdHVyZSwKICAgICAgICAgIHBhdGg6IHIuZmlsdGVyLmRpc3BsYWNlbWVudEZpbGUucGF0aAogICAgICAgIH0KICAgICAgfSwgZmlsdGVySUQ6IDExNDg0MTYxMDggfSk7CiAgICBjYXNlICJwaW5jaCI6CiAgICAgIHJldHVybiBoKGgoe30sIGUpLCB7IEZsdHI6IHsKICAgICAgICBfbmFtZTogIlBpbmNoIiwKICAgICAgICBfY2xhc3NJRDogIlBuY2giLAogICAgICAgIEFtbnQ6IHIuZmlsdGVyLmFtb3VudAogICAgICB9LCBmaWx0ZXJJRDogMTM0OTQxMTY4OCB9KTsKICAgIGNhc2UgInBvbGFyIGNvb3JkaW5hdGVzIjoKICAgICAgcmV0dXJuIGgoaCh7fSwgZSksIHsgRmx0cjogewogICAgICAgIF9uYW1lOiAiUG9sYXIgQ29vcmRpbmF0ZXMiLAogICAgICAgIF9jbGFzc0lEOiAiUGxyICIsCiAgICAgICAgQ252cjogZDEuZW5jb2RlKHIuZmlsdGVyLmNvbnZlcnNpb24pCiAgICAgIH0sIGZpbHRlcklEOiAxMzQ5Mjg0Mzg0IH0pOwogICAgY2FzZSAicmlwcGxlIjoKICAgICAgcmV0dXJuIGgoaCh7fSwgZSksIHsgRmx0cjogewogICAgICAgIF9uYW1lOiAiUmlwcGxlIiwKICAgICAgICBfY2xhc3NJRDogIlJwbGUiLAogICAgICAgIEFtbnQ6IHIuZmlsdGVyLmFtb3VudCwKICAgICAgICBScGxTOiBoMS5lbmNvZGUoci5maWx0ZXIuc2l6ZSkKICAgICAgfSwgZmlsdGVySUQ6IDEzODMwOTk0OTMgfSk7CiAgICBjYXNlICJzaGVhciI6CiAgICAgIHJldHVybiBoKGgoe30sIGUpLCB7IEZsdHI6IHsKICAgICAgICBfbmFtZTogIlNoZWFyIiwKICAgICAgICBfY2xhc3NJRDogIlNociAiLAogICAgICAgIFNoclA6IHIuZmlsdGVyLnNoZWFyUG9pbnRzLm1hcChmdW5jdGlvbih1KSB7CiAgICAgICAgICByZXR1cm4geyBfbmFtZTogIiIsIF9jbGFzc0lEOiAiUG50ICIsIEhyem46IHUueCwgVnJ0YzogdS55IH07CiAgICAgICAgfSksCiAgICAgICAgVW5kQTogVWEuZW5jb2RlKHIuZmlsdGVyLnVuZGVmaW5lZEFyZWFzKSwKICAgICAgICBTaHJTOiByLmZpbHRlci5zaGVhclN0YXJ0LAogICAgICAgIFNockU6IHIuZmlsdGVyLnNoZWFyRW5kCiAgICAgIH0sIGZpbHRlcklEOiAxMzk5MzUzODg4IH0pOwogICAgY2FzZSAic3BoZXJpemUiOgogICAgICByZXR1cm4gaChoKHt9LCBlKSwgeyBGbHRyOiB7CiAgICAgICAgX25hbWU6ICJTcGhlcml6ZSIsCiAgICAgICAgX2NsYXNzSUQ6ICJTcGhyIiwKICAgICAgICBBbW50OiByLmZpbHRlci5hbW91bnQsCiAgICAgICAgU3BoTTogdjEuZW5jb2RlKHIuZmlsdGVyLm1vZGUpCiAgICAgIH0sIGZpbHRlcklEOiAxMzk5ODc1Njk4IH0pOwogICAgY2FzZSAidHdpcmwiOgogICAgICByZXR1cm4gaChoKHt9LCBlKSwgeyBGbHRyOiB7CiAgICAgICAgX25hbWU6ICJUd2lybCIsCiAgICAgICAgX2NsYXNzSUQ6ICJUd3JsIiwKICAgICAgICBBbmdsOiByLmZpbHRlci5hbmdsZQogICAgICB9LCBmaWx0ZXJJRDogMTQxNzExNDIyMCB9KTsKICAgIGNhc2UgIndhdmUiOgogICAgICByZXR1cm4gaChoKHt9LCBlKSwgeyBGbHRyOiB7CiAgICAgICAgX25hbWU6ICJXYXZlIiwKICAgICAgICBfY2xhc3NJRDogIldhdmUiLAogICAgICAgIFd2dHA6IGsxLmVuY29kZShyLmZpbHRlci50eXBlKSwKICAgICAgICBObWJHOiByLmZpbHRlci5udW1iZXJPZkdlbmVyYXRvcnMsCiAgICAgICAgV0xNbjogci5maWx0ZXIud2F2ZWxlbmd0aC5taW4sCiAgICAgICAgV0xNeDogci5maWx0ZXIud2F2ZWxlbmd0aC5tYXgsCiAgICAgICAgQW1Nbjogci5maWx0ZXIuYW1wbGl0dWRlLm1pbiwKICAgICAgICBBbU14OiByLmZpbHRlci5hbXBsaXR1ZGUubWF4LAogICAgICAgIFNjbEg6IHIuZmlsdGVyLnNjYWxlLngsCiAgICAgICAgU2NsVjogci5maWx0ZXIuc2NhbGUueSwKICAgICAgICBVbmRBOiBVYS5lbmNvZGUoci5maWx0ZXIudW5kZWZpbmVkQXJlYXMpLAogICAgICAgIFJuZFM6IHIuZmlsdGVyLnJhbmRvbVNlZWQKICAgICAgfSwgZmlsdGVySUQ6IDE0NjYwMDUwOTMgfSk7CiAgICBjYXNlICJ6aWd6YWciOgogICAgICByZXR1cm4gaChoKHt9LCBlKSwgeyBGbHRyOiB7CiAgICAgICAgX25hbWU6ICJaaWdaYWciLAogICAgICAgIF9jbGFzc0lEOiAiWmdaZyIsCiAgICAgICAgQW1udDogci5maWx0ZXIuYW1vdW50LAogICAgICAgIE5tYlI6IHIuZmlsdGVyLnJpZGdlcywKICAgICAgICBaWlR5OiBnMS5lbmNvZGUoci5maWx0ZXIuc3R5bGUpCiAgICAgIH0sIGZpbHRlcklEOiAxNTE2NzIyNzkxIH0pOwogICAgY2FzZSAiYWRkIG5vaXNlIjoKICAgICAgcmV0dXJuIGgoaCh7fSwgZSksIHsgRmx0cjogewogICAgICAgIF9uYW1lOiAiQWRkIE5vaXNlIiwKICAgICAgICBfY2xhc3NJRDogIkFkTnMiLAogICAgICAgIERzdHI6IG0xLmVuY29kZShyLmZpbHRlci5kaXN0cmlidXRpb24pLAogICAgICAgIE5vc2U6IEVyKHIuZmlsdGVyLmFtb3VudCksCiAgICAgICAgTW5jaDogci5maWx0ZXIubW9ub2Nocm9tYXRpYywKICAgICAgICBGbFJzOiByLmZpbHRlci5yYW5kb21TZWVkCiAgICAgIH0sIGZpbHRlcklEOiAxMDk3MDkyNzIzIH0pOwogICAgY2FzZSAiZGVzcGVja2xlIjoKICAgICAgcmV0dXJuIGgoaCh7fSwgZSksIHsgZmlsdGVySUQ6IDExNDg0MTYwOTkgfSk7CiAgICBjYXNlICJkdXN0IGFuZCBzY3JhdGNoZXMiOgogICAgICByZXR1cm4gaChoKHt9LCBlKSwgeyBGbHRyOiB7CiAgICAgICAgX25hbWU6ICJEdXN0ICYgU2NyYXRjaGVzIiwKICAgICAgICBfY2xhc3NJRDogIkRzdFMiLAogICAgICAgICJSZHMgIjogci5maWx0ZXIucmFkaXVzLAogICAgICAgIFRoc2g6IHIuZmlsdGVyLnRocmVzaG9sZAogICAgICB9LCBmaWx0ZXJJRDogMTE0ODQxNzEwNyB9KTsKICAgIGNhc2UgIm1lZGlhbiI6CiAgICAgIHJldHVybiBoKGgoe30sIGUpLCB7IEZsdHI6IHsKICAgICAgICBfbmFtZTogIk1lZGlhbiIsCiAgICAgICAgX2NsYXNzSUQ6ICJNZG4gIiwKICAgICAgICAiUmRzICI6IFlyKHIuZmlsdGVyKQogICAgICB9LCBmaWx0ZXJJRDogMTI5ODQyNzQyNCB9KTsKICAgIGNhc2UgInJlZHVjZSBub2lzZSI6CiAgICAgIHJldHVybiBoKGgoe30sIGUpLCB7IEZsdHI6IHsKICAgICAgICBfbmFtZTogIlJlZHVjZSBOb2lzZSIsCiAgICAgICAgX2NsYXNzSUQ6ICJkZW5vaXNlIiwKICAgICAgICBDbE5zOiBFcihyLmZpbHRlci5yZWR1Y2VDb2xvck5vaXNlKSwKICAgICAgICBTaHJwOiBFcihyLmZpbHRlci5zaGFycGVuRGV0YWlscyksCiAgICAgICAgcmVtb3ZlSlBFR0FydGlmYWN0OiByLmZpbHRlci5yZW1vdmVKcGVnQXJ0aWZhY3QsCiAgICAgICAgY2hhbm5lbERlbm9pc2U6IHIuZmlsdGVyLmNoYW5uZWxEZW5vaXNlLm1hcChmdW5jdGlvbih1KSB7CiAgICAgICAgICByZXR1cm4gaCh7IF9uYW1lOiAiIiwgX2NsYXNzSUQ6ICJjaGFubmVsRGVub2lzZVBhcmFtcyIsIENobmw6IHUuY2hhbm5lbHMubWFwKGZ1bmN0aW9uKG8pIHsKICAgICAgICAgICAgcmV0dXJuIEUyLmVuY29kZShvKTsKICAgICAgICAgIH0pLCBBbW50OiB1LmFtb3VudCB9LCB1LnByZXNlcnZlRGV0YWlscyA/IHsgRWRnRjogdS5wcmVzZXJ2ZURldGFpbHMgfSA6IHt9KTsKICAgICAgICB9KSwKICAgICAgICBwcmVzZXQ6IHIuZmlsdGVyLnByZXNldAogICAgICB9LCBmaWx0ZXJJRDogNjMzIH0pOwogICAgY2FzZSAiY29sb3IgaGFsZnRvbmUiOgogICAgICByZXR1cm4gaChoKHt9LCBlKSwgeyBGbHRyOiB7CiAgICAgICAgX25hbWU6ICJDb2xvciBIYWxmdG9uZSIsCiAgICAgICAgX2NsYXNzSUQ6ICJDbHJIIiwKICAgICAgICAiUmRzICI6IHIuZmlsdGVyLnJhZGl1cywKICAgICAgICBBbmcxOiByLmZpbHRlci5hbmdsZTEsCiAgICAgICAgQW5nMjogci5maWx0ZXIuYW5nbGUyLAogICAgICAgIEFuZzM6IHIuZmlsdGVyLmFuZ2xlMywKICAgICAgICBBbmc0OiByLmZpbHRlci5hbmdsZTQKICAgICAgfSwgZmlsdGVySUQ6IDExMzExODA2MTYgfSk7CiAgICBjYXNlICJjcnlzdGFsbGl6ZSI6CiAgICAgIHJldHVybiBoKGgoe30sIGUpLCB7IEZsdHI6IHsKICAgICAgICBfbmFtZTogIkNyeXN0YWxsaXplIiwKICAgICAgICBfY2xhc3NJRDogIkNyc3QiLAogICAgICAgIENsU3o6IHIuZmlsdGVyLmNlbGxTaXplLAogICAgICAgIEZsUnM6IHIuZmlsdGVyLnJhbmRvbVNlZWQKICAgICAgfSwgZmlsdGVySUQ6IDExMzE1NzQxMzIgfSk7CiAgICBjYXNlICJmYWNldCI6CiAgICAgIHJldHVybiBoKGgoe30sIGUpLCB7IGZpbHRlcklEOiAxMTgwOTIyOTEyIH0pOwogICAgY2FzZSAiZnJhZ21lbnQiOgogICAgICByZXR1cm4gaChoKHt9LCBlKSwgeyBmaWx0ZXJJRDogMTE4MTkwMjcwMSB9KTsKICAgIGNhc2UgIm1lenpvdGludCI6CiAgICAgIHJldHVybiBoKGgoe30sIGUpLCB7IEZsdHI6IHsKICAgICAgICBfbmFtZTogIk1lenpvdGludCIsCiAgICAgICAgX2NsYXNzSUQ6ICJNenRuIiwKICAgICAgICBNenRUOiBwMS5lbmNvZGUoci5maWx0ZXIudHlwZSksCiAgICAgICAgRmxSczogci5maWx0ZXIucmFuZG9tU2VlZAogICAgICB9LCBmaWx0ZXJJRDogMTI5OTg3MDgzMCB9KTsKICAgIGNhc2UgIm1vc2FpYyI6CiAgICAgIHJldHVybiBoKGgoe30sIGUpLCB7IEZsdHI6IHsKICAgICAgICBfbmFtZTogIk1vc2FpYyIsCiAgICAgICAgX2NsYXNzSUQ6ICJNc2MgIiwKICAgICAgICBDbFN6OiBEMChyLmZpbHRlci5jZWxsU2l6ZSwgImNlbGxTaXplIikKICAgICAgfSwgZmlsdGVySUQ6IDEyOTk0MDc2NDggfSk7CiAgICBjYXNlICJwb2ludGlsbGl6ZSI6CiAgICAgIHJldHVybiBoKGgoe30sIGUpLCB7IEZsdHI6IHsKICAgICAgICBfbmFtZTogIlBvaW50aWxsaXplIiwKICAgICAgICBfY2xhc3NJRDogIlBudGwiLAogICAgICAgIENsU3o6IHIuZmlsdGVyLmNlbGxTaXplLAogICAgICAgIEZsUnM6IHIuZmlsdGVyLnJhbmRvbVNlZWQKICAgICAgfSwgZmlsdGVySUQ6IDEzNDk0MTYwNDQgfSk7CiAgICBjYXNlICJjbG91ZHMiOgogICAgICByZXR1cm4gaChoKHt9LCBlKSwgeyBGbHRyOiB7CiAgICAgICAgX25hbWU6ICJDbG91ZHMiLAogICAgICAgIF9jbGFzc0lEOiAiQ2xkcyIsCiAgICAgICAgRmxSczogci5maWx0ZXIucmFuZG9tU2VlZAogICAgICB9LCBmaWx0ZXJJRDogMTEzMTE3NzA3NSB9KTsKICAgIGNhc2UgImRpZmZlcmVuY2UgY2xvdWRzIjoKICAgICAgcmV0dXJuIGgoaCh7fSwgZSksIHsgRmx0cjogewogICAgICAgIF9uYW1lOiAiRGlmZmVyZW5jZSBDbG91ZHMiLAogICAgICAgIF9jbGFzc0lEOiAiRGZyQyIsCiAgICAgICAgRmxSczogci5maWx0ZXIucmFuZG9tU2VlZAogICAgICB9LCBmaWx0ZXJJRDogMTE0NzU2NDYxMSB9KTsKICAgIGNhc2UgImZpYmVycyI6CiAgICAgIHJldHVybiBoKGgoe30sIGUpLCB7IEZsdHI6IHsKICAgICAgICBfbmFtZTogIkZpYmVycyIsCiAgICAgICAgX2NsYXNzSUQ6ICJGYnJzIiwKICAgICAgICBWcm5jOiByLmZpbHRlci52YXJpYW5jZSwKICAgICAgICBTdHJnOiByLmZpbHRlci5zdHJlbmd0aCwKICAgICAgICBSbmRTOiByLmZpbHRlci5yYW5kb21TZWVkCiAgICAgIH0sIGZpbHRlcklEOiAxMTgwODU2OTQ3IH0pOwogICAgY2FzZSAibGVucyBmbGFyZSI6CiAgICAgIHJldHVybiBoKGgoe30sIGUpLCB7IEZsdHI6IHsKICAgICAgICBfbmFtZTogIkxlbnMgRmxhcmUiLAogICAgICAgIF9jbGFzc0lEOiAiTG5zRiIsCiAgICAgICAgQnJnaDogci5maWx0ZXIuYnJpZ2h0bmVzcywKICAgICAgICBGbHJDOiB7CiAgICAgICAgICBfbmFtZTogIiIsCiAgICAgICAgICBfY2xhc3NJRDogIlBudCAiLAogICAgICAgICAgSHJ6bjogci5maWx0ZXIucG9zaXRpb24ueCwKICAgICAgICAgIFZydGM6IHIuZmlsdGVyLnBvc2l0aW9uLnkKICAgICAgICB9LAogICAgICAgICJMbnMgIjogdzEuZW5jb2RlKHIuZmlsdGVyLmxlbnNUeXBlKQogICAgICB9LCBmaWx0ZXJJRDogMTI4MjMwNjg4NiB9KTsKICAgIGNhc2UgInNoYXJwZW4iOgogICAgICByZXR1cm4gaChoKHt9LCBlKSwgeyBmaWx0ZXJJRDogMTM5OTM1Mzk2OCB9KTsKICAgIGNhc2UgInNoYXJwZW4gZWRnZXMiOgogICAgICByZXR1cm4gaChoKHt9LCBlKSwgeyBmaWx0ZXJJRDogMTM5OTM1MzkyNSB9KTsKICAgIGNhc2UgInNoYXJwZW4gbW9yZSI6CiAgICAgIHJldHVybiBoKGgoe30sIGUpLCB7IGZpbHRlcklEOiAxMzk5MzUzOTMzIH0pOwogICAgY2FzZSAic21hcnQgc2hhcnBlbiI6CiAgICAgIHJldHVybiBoKGgoe30sIGUpLCB7IEZsdHI6IHsKICAgICAgICBfbmFtZTogIlNtYXJ0IFNoYXJwZW4iLAogICAgICAgIF9jbGFzc0lEOiAic21hcnRTaGFycGVuIiwKICAgICAgICBBbW50OiBFcihyLmZpbHRlci5hbW91bnQpLAogICAgICAgICJSZHMgIjogWXIoci5maWx0ZXIpLAogICAgICAgIFRoc2g6IHIuZmlsdGVyLnRocmVzaG9sZCwKICAgICAgICBBbmdsOiByLmZpbHRlci5hbmdsZSwKICAgICAgICBtb3JlQWNjdXJhdGU6IHIuZmlsdGVyLm1vcmVBY2N1cmF0ZSwKICAgICAgICBibHVyOiB5MS5lbmNvZGUoci5maWx0ZXIuYmx1ciksCiAgICAgICAgcHJlc2V0OiByLmZpbHRlci5wcmVzZXQsCiAgICAgICAgc2R3TTogewogICAgICAgICAgX25hbWU6ICJQYXJhbWV0ZXJzIiwKICAgICAgICAgIF9jbGFzc0lEOiAiYWRhcHRDb3JyZWN0VG9uZXMiLAogICAgICAgICAgQW1udDogRXIoci5maWx0ZXIuc2hhZG93LmZhZGVBbW91bnQpLAogICAgICAgICAgV2R0aDogRXIoci5maWx0ZXIuc2hhZG93LnRvbmFsV2lkdGgpLAogICAgICAgICAgIlJkcyAiOiByLmZpbHRlci5zaGFkb3cucmFkaXVzCiAgICAgICAgfSwKICAgICAgICBoZ2xNOiB7CiAgICAgICAgICBfbmFtZTogIlBhcmFtZXRlcnMiLAogICAgICAgICAgX2NsYXNzSUQ6ICJhZGFwdENvcnJlY3RUb25lcyIsCiAgICAgICAgICBBbW50OiBFcihyLmZpbHRlci5oaWdobGlnaHQuZmFkZUFtb3VudCksCiAgICAgICAgICBXZHRoOiBFcihyLmZpbHRlci5oaWdobGlnaHQudG9uYWxXaWR0aCksCiAgICAgICAgICAiUmRzICI6IHIuZmlsdGVyLmhpZ2hsaWdodC5yYWRpdXMKICAgICAgICB9CiAgICAgIH0sIGZpbHRlcklEOiA2OTggfSk7CiAgICBjYXNlICJ1bnNoYXJwIG1hc2siOgogICAgICByZXR1cm4gaChoKHt9LCBlKSwgeyBGbHRyOiB7CiAgICAgICAgX25hbWU6ICJVbnNoYXJwIE1hc2siLAogICAgICAgIF9jbGFzc0lEOiAiVW5zTSIsCiAgICAgICAgQW1udDogRXIoci5maWx0ZXIuYW1vdW50KSwKICAgICAgICAiUmRzICI6IFlyKHIuZmlsdGVyKSwKICAgICAgICBUaHNoOiByLmZpbHRlci50aHJlc2hvbGQKICAgICAgfSwgZmlsdGVySUQ6IDE0MzMzMDE4MzcgfSk7CiAgICBjYXNlICJkaWZmdXNlIjoKICAgICAgcmV0dXJuIGgoaCh7fSwgZSksIHsgRmx0cjogewogICAgICAgIF9uYW1lOiAiRGlmZnVzZSIsCiAgICAgICAgX2NsYXNzSUQ6ICJEZnMgIiwKICAgICAgICAiTWQgICI6IEUxLmVuY29kZShyLmZpbHRlci5tb2RlKSwKICAgICAgICBGbFJzOiByLmZpbHRlci5yYW5kb21TZWVkCiAgICAgIH0sIGZpbHRlcklEOiAxMTQ3NTY0ODMyIH0pOwogICAgY2FzZSAiZW1ib3NzIjoKICAgICAgcmV0dXJuIGgoaCh7fSwgZSksIHsgRmx0cjogewogICAgICAgIF9uYW1lOiAiRW1ib3NzIiwKICAgICAgICBfY2xhc3NJRDogIkVtYnMiLAogICAgICAgIEFuZ2w6IHIuZmlsdGVyLmFuZ2xlLAogICAgICAgIEhnaHQ6IHIuZmlsdGVyLmhlaWdodCwKICAgICAgICBBbW50OiByLmZpbHRlci5hbW91bnQKICAgICAgfSwgZmlsdGVySUQ6IDExNjQ3OTY1MzEgfSk7CiAgICBjYXNlICJleHRydWRlIjoKICAgICAgcmV0dXJuIGgoaCh7fSwgZSksIHsgRmx0cjogewogICAgICAgIF9uYW1lOiAiRXh0cnVkZSIsCiAgICAgICAgX2NsYXNzSUQ6ICJFeHRyIiwKICAgICAgICBFeHRTOiByLmZpbHRlci5zaXplLAogICAgICAgIEV4dEQ6IHIuZmlsdGVyLmRlcHRoLAogICAgICAgIEV4dEY6IHIuZmlsdGVyLnNvbGlkRnJvbnRGYWNlcywKICAgICAgICBFeHRNOiByLmZpbHRlci5tYXNrSW5jb21wbGV0ZUJsb2NrcywKICAgICAgICBFeHRUOiBaMS5lbmNvZGUoci5maWx0ZXIudHlwZSksCiAgICAgICAgRXh0UjogQjEuZW5jb2RlKHIuZmlsdGVyLmRlcHRoTW9kZSksCiAgICAgICAgRmxSczogci5maWx0ZXIucmFuZG9tU2VlZAogICAgICB9LCBmaWx0ZXJJRDogMTE2NTUyMjAzNCB9KTsKICAgIGNhc2UgImZpbmQgZWRnZXMiOgogICAgICByZXR1cm4gaChoKHt9LCBlKSwgeyBmaWx0ZXJJRDogMTE4MTYzOTc0OSB9KTsKICAgIGNhc2UgInNvbGFyaXplIjoKICAgICAgcmV0dXJuIGgoaCh7fSwgZSksIHsgZmlsdGVySUQ6IDEzOTk2MTYxMjIgfSk7CiAgICBjYXNlICJ0aWxlcyI6CiAgICAgIHJldHVybiBoKGgoe30sIGUpLCB7IEZsdHI6IHsKICAgICAgICBfbmFtZTogIlRpbGVzIiwKICAgICAgICBfY2xhc3NJRDogIlRscyAiLAogICAgICAgIFRsTm06IHIuZmlsdGVyLm51bWJlck9mVGlsZXMsCiAgICAgICAgVGxPZjogci5maWx0ZXIubWF4aW11bU9mZnNldCwKICAgICAgICBGbENsOiBJMS5lbmNvZGUoci5maWx0ZXIuZmlsbEVtcHR5QXJlYVdpdGgpLAogICAgICAgIEZsUnM6IHIuZmlsdGVyLnJhbmRvbVNlZWQKICAgICAgfSwgZmlsdGVySUQ6IDE0MTYzOTM1MDQgfSk7CiAgICBjYXNlICJ0cmFjZSBjb250b3VyIjoKICAgICAgcmV0dXJuIGgoaCh7fSwgZSksIHsgRmx0cjogewogICAgICAgIF9uYW1lOiAiVHJhY2UgQ29udG91ciIsCiAgICAgICAgX2NsYXNzSUQ6ICJUcmNDIiwKICAgICAgICAiTHZsICI6IHIuZmlsdGVyLmxldmVsLAogICAgICAgICJFZGcgIjogRjEuZW5jb2RlKHIuZmlsdGVyLmVkZ2UpCiAgICAgIH0sIGZpbHRlcklEOiAxNDE2NzgyNjU5IH0pOwogICAgY2FzZSAid2luZCI6CiAgICAgIHJldHVybiBoKGgoe30sIGUpLCB7IEZsdHI6IHsKICAgICAgICBfbmFtZTogIldpbmQiLAogICAgICAgIF9jbGFzc0lEOiAiV25kICIsCiAgICAgICAgV25kTTogQzEuZW5jb2RlKHIuZmlsdGVyLm1ldGhvZCksCiAgICAgICAgRHJjdDogVzEuZW5jb2RlKHIuZmlsdGVyLmRpcmVjdGlvbikKICAgICAgfSwgZmlsdGVySUQ6IDE0NjY4NTIzODQgfSk7CiAgICBjYXNlICJkZS1pbnRlcmxhY2UiOgogICAgICByZXR1cm4gaChoKHt9LCBlKSwgeyBGbHRyOiB7CiAgICAgICAgX25hbWU6ICJEZS1JbnRlcmxhY2UiLAogICAgICAgIF9jbGFzc0lEOiAiRG50ciIsCiAgICAgICAgSW50RTogXzEuZW5jb2RlKHIuZmlsdGVyLmVsaW1pbmF0ZSksCiAgICAgICAgSW50QzogRzEuZW5jb2RlKHIuZmlsdGVyLm5ld0ZpZWxkc0J5KQogICAgICB9LCBmaWx0ZXJJRDogMTE0ODA4OTQ1OCB9KTsKICAgIGNhc2UgIm50c2MgY29sb3JzIjoKICAgICAgcmV0dXJuIGgoaCh7fSwgZSksIHsgZmlsdGVySUQ6IDEzMTQxNDkxODcgfSk7CiAgICBjYXNlICJpbnZlcnQiOgogICAgICByZXR1cm4gaChoKHt9LCBlKSwgeyBmaWx0ZXJJRDogMTIzMTk3NjA1MCB9KTsKICAgIGNhc2UgImN1c3RvbSI6CiAgICAgIHJldHVybiBoKGgoe30sIGUpLCB7IEZsdHI6IHsKICAgICAgICBfbmFtZTogIkN1c3RvbSIsCiAgICAgICAgX2NsYXNzSUQ6ICJDc3RtIiwKICAgICAgICAiU2NsICI6IHIuZmlsdGVyLnNjYWxlLAogICAgICAgIE9mc3Q6IHIuZmlsdGVyLm9mZnNldCwKICAgICAgICBNdHJ4OiByLmZpbHRlci5tYXRyaXgKICAgICAgfSwgZmlsdGVySUQ6IDExMzE2Mzk5MTcgfSk7CiAgICBjYXNlICJoaWdoIHBhc3MiOgogICAgICByZXR1cm4gaChoKHt9LCBlKSwgeyBGbHRyOiB7CiAgICAgICAgX25hbWU6ICJIaWdoIFBhc3MiLAogICAgICAgIF9jbGFzc0lEOiAiSGdoUCIsCiAgICAgICAgIlJkcyAiOiBZcihyLmZpbHRlcikKICAgICAgfSwgZmlsdGVySUQ6IDEyMTQ3MzY0NjQgfSk7CiAgICBjYXNlICJtYXhpbXVtIjoKICAgICAgcmV0dXJuIGgoaCh7fSwgZSksIHsgRmx0cjogewogICAgICAgIF9uYW1lOiAiTWF4aW11bSIsCiAgICAgICAgX2NsYXNzSUQ6ICJNeG0gIiwKICAgICAgICAiUmRzICI6IFlyKHIuZmlsdGVyKQogICAgICB9LCBmaWx0ZXJJRDogMTI5OTczNzg4OCB9KTsKICAgIGNhc2UgIm1pbmltdW0iOgogICAgICByZXR1cm4gaChoKHt9LCBlKSwgeyBGbHRyOiB7CiAgICAgICAgX25hbWU6ICJNaW5pbXVtIiwKICAgICAgICBfY2xhc3NJRDogIk1ubSAiLAogICAgICAgICJSZHMgIjogWXIoci5maWx0ZXIpCiAgICAgIH0sIGZpbHRlcklEOiAxMjk5MDgyNTI4IH0pOwogICAgY2FzZSAib2Zmc2V0IjoKICAgICAgcmV0dXJuIGgoaCh7fSwgZSksIHsgRmx0cjogewogICAgICAgIF9uYW1lOiAiT2Zmc2V0IiwKICAgICAgICBfY2xhc3NJRDogIk9mc3QiLAogICAgICAgIEhyem46IHIuZmlsdGVyLmhvcml6b250YWwsCiAgICAgICAgVnJ0Yzogci5maWx0ZXIudmVydGljYWwsCiAgICAgICAgIkZsICAiOiBYMS5lbmNvZGUoci5maWx0ZXIudW5kZWZpbmVkQXJlYXMpCiAgICAgIH0sIGZpbHRlcklEOiAxMzMyMTE0MjkyIH0pOwogICAgY2FzZSAicHVwcGV0IjoKICAgICAgcmV0dXJuIGgoaCh7fSwgZSksIHsgRmx0cjogewogICAgICAgIF9uYW1lOiAiUmlnaWQgVHJhbnNmb3JtIiwKICAgICAgICBfY2xhc3NJRDogInJpZ2lkVHJhbnNmb3JtIiwKICAgICAgICBudWxsOiBbIk9yZG4uVHJndCJdLAogICAgICAgIHJpZ2lkVHlwZTogci5maWx0ZXIucmlnaWRUeXBlLAogICAgICAgIHB1cHBldFNoYXBlTGlzdDogci5maWx0ZXIucHVwcGV0U2hhcGVMaXN0Lm1hcChmdW5jdGlvbih1KSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBfbmFtZTogIiIsCiAgICAgICAgICAgIF9jbGFzc0lEOiAicHVwcGV0U2hhcGUiLAogICAgICAgICAgICByaWdpZFR5cGU6IHUucmlnaWRUeXBlLAogICAgICAgICAgICBWcnNNOiAxLAogICAgICAgICAgICBWcnNOOiAwLAogICAgICAgICAgICBvcmlnaW5hbFZlcnRleEFycmF5OiBsQShuZXcgRmxvYXQzMkFycmF5KG4yKHUub3JpZ2luYWxWZXJ0ZXhBcnJheSkpKSwKICAgICAgICAgICAgZGVmb3JtZWRWZXJ0ZXhBcnJheTogbEEobmV3IEZsb2F0MzJBcnJheShuMih1LmRlZm9ybWVkVmVydGV4QXJyYXkpKSksCiAgICAgICAgICAgIGluZGV4QXJyYXk6IGxBKG5ldyBVaW50MzJBcnJheSh1LmluZGV4QXJyYXkpKSwKICAgICAgICAgICAgcGluT2Zmc2V0czogbjIodS5waW5PZmZzZXRzKSwKICAgICAgICAgICAgcG9zRmluYWxQaW5zOiBuMih1LnBvc0ZpbmFsUGlucyksCiAgICAgICAgICAgIHBpblZlcnRleEluZGljZXM6IHUucGluVmVydGV4SW5kaWNlcywKICAgICAgICAgICAgUGluUDogbjIodS5waW5Qb3NpdGlvbiksCiAgICAgICAgICAgIFBuUnQ6IHUucGluUm90YXRpb24sCiAgICAgICAgICAgIFBuT3Y6IHUucGluT3ZlcmxheSwKICAgICAgICAgICAgUG5EcDogdS5waW5EZXB0aCwKICAgICAgICAgICAgbWVzaFF1YWxpdHk6IHUubWVzaFF1YWxpdHksCiAgICAgICAgICAgIG1lc2hFeHBhbnNpb246IHUubWVzaEV4cGFuc2lvbiwKICAgICAgICAgICAgbWVzaFJpZ2lkaXR5OiB1Lm1lc2hSaWdpZGl0eSwKICAgICAgICAgICAgaW1hZ2VSZXNvbHV0aW9uOiB1LmltYWdlUmVzb2x1dGlvbiwKICAgICAgICAgICAgbWVzaEJvdW5kYXJ5UGF0aDogewogICAgICAgICAgICAgIF9uYW1lOiAiIiwKICAgICAgICAgICAgICBfY2xhc3NJRDogInBhdGhDbGFzcyIsCiAgICAgICAgICAgICAgcGF0aENvbXBvbmVudHM6IHUubWVzaEJvdW5kYXJ5UGF0aC5wYXRoQ29tcG9uZW50cy5tYXAoZnVuY3Rpb24obykgewogICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgX25hbWU6ICIiLAogICAgICAgICAgICAgICAgICBfY2xhc3NJRDogIlBhQ20iLAogICAgICAgICAgICAgICAgICBzaGFwZU9wZXJhdGlvbjogInNoYXBlT3BlcmF0aW9uLiIuY29uY2F0KG8uc2hhcGVPcGVyYXRpb24pLAogICAgICAgICAgICAgICAgICBTYnBMOiBvLnBhdGhzLm1hcChmdW5jdGlvbihsKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgIF9uYW1lOiAiIiwKICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0lEOiAiU2JwbCIsCiAgICAgICAgICAgICAgICAgICAgICBDbHNwOiBsLmNsb3NlZCwKICAgICAgICAgICAgICAgICAgICAgICJQdHMgIjogbC5wb2ludHMubWFwKGZ1bmN0aW9uKHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBfbmFtZTogIiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzSUQ6ICJQdGhwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBBbmNoOiBvMihzLmFuY2hvciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIkZ3ZCAiOiBvMihzLmZvcndhcmQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICJCd2QgIjogbzIocy5iYWNrd2FyZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgU21vbzogcy5zbW9vdGgKICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgfSwKICAgICAgICAgICAgc2VsZWN0ZWRQaW46IHUuc2VsZWN0ZWRQaW4KICAgICAgICAgIH07CiAgICAgICAgfSksCiAgICAgICAgUHVYMDogci5maWx0ZXIuYm91bmRzWzBdLngsCiAgICAgICAgUHVYMTogci5maWx0ZXIuYm91bmRzWzFdLngsCiAgICAgICAgUHVYMjogci5maWx0ZXIuYm91bmRzWzJdLngsCiAgICAgICAgUHVYMzogci5maWx0ZXIuYm91bmRzWzNdLngsCiAgICAgICAgUHVZMDogci5maWx0ZXIuYm91bmRzWzBdLnksCiAgICAgICAgUHVZMTogci5maWx0ZXIuYm91bmRzWzFdLnksCiAgICAgICAgUHVZMjogci5maWx0ZXIuYm91bmRzWzJdLnksCiAgICAgICAgUHVZMzogci5maWx0ZXIuYm91bmRzWzNdLnkKICAgICAgfSwgZmlsdGVySUQ6IDk5MSB9KTsKICAgIGNhc2UgIm9pbCBwYWludCBwbHVnaW4iOiB7CiAgICAgIGZvciAodmFyIGEgPSB7fSwgQSA9IDA7IEEgPCByLmZpbHRlci5wYXJhbWV0ZXJzLmxlbmd0aDsgQSsrKSB7CiAgICAgICAgdmFyIHQgPSByLmZpbHRlci5wYXJhbWV0ZXJzW0FdLCBpID0gdC5uYW1lLCBuID0gdC52YWx1ZSwgZiA9ICIiLmNvbmNhdChrcltNYXRoLmZsb29yKEEgLyBrci5sZW5ndGgpXSkuY29uY2F0KGtyW0EgJSBrci5sZW5ndGhdKTsKICAgICAgICBhWyJQTiIuY29uY2F0KGYpXSA9IGksIGFbIlBUIi5jb25jYXQoZildID0gMCwgYVsiUEYiLmNvbmNhdChmKV0gPSBuOwogICAgICB9CiAgICAgIHJldHVybiBoKGgoe30sIGUpLCB7IEZsdHI6IGgoeyBfbmFtZTogIk9pbCBQYWludCBQbHVnaW4iLCBfY2xhc3NJRDogIlBiUGwiLCBLbk5tOiByLmZpbHRlci5uYW1lLCBHcHVZOiByLmZpbHRlci5ncHUsIExJV3k6IHIuZmlsdGVyLmxpZ2h0aW5nLCBGUHRoOiAiMSIgfSwgYSksIGZpbHRlcklEOiAxMzQ4NjIwMzk2IH0pOwogICAgfQogICAgY2FzZSAib2lsIHBhaW50IjoKICAgICAgcmV0dXJuIGgoaCh7fSwgZSksIHsgRmx0cjogewogICAgICAgIF9uYW1lOiAiT2lsIFBhaW50IiwKICAgICAgICBfY2xhc3NJRDogIm9pbFBhaW50IiwKICAgICAgICBsaWdodGluZ09uOiByLmZpbHRlci5saWdodGluZ09uLAogICAgICAgIHN0eWxpemF0aW9uOiByLmZpbHRlci5zdHlsaXphdGlvbiwKICAgICAgICBjbGVhbmxpbmVzczogci5maWx0ZXIuY2xlYW5saW5lc3MsCiAgICAgICAgYnJ1c2hTY2FsZTogci5maWx0ZXIuYnJ1c2hTY2FsZSwKICAgICAgICBtaWNyb0JydXNoOiByLmZpbHRlci5taWNyb0JydXNoLAogICAgICAgIExnaEQ6IHIuZmlsdGVyLmxpZ2h0RGlyZWN0aW9uLAogICAgICAgIHNwZWN1bGFyaXR5OiByLmZpbHRlci5zcGVjdWxhcml0eQogICAgICB9LCBmaWx0ZXJJRDogMTEyMiB9KTsKICAgIGNhc2UgImxpcXVpZnkiOgogICAgICByZXR1cm4gaChoKHt9LCBlKSwgeyBGbHRyOiB7CiAgICAgICAgX25hbWU6ICJMaXF1aWZ5IiwKICAgICAgICBfY2xhc3NJRDogIkxxRnkiLAogICAgICAgIExxTWU6IHIuZmlsdGVyLmxpcXVpZnlNZXNoCiAgICAgIH0sIGZpbHRlcklEOiAxMjgyNDkyMDI1IH0pOwogICAgY2FzZSAicGVyc3BlY3RpdmUgd2FycCI6CiAgICAgIHJldHVybiBoKGgoe30sIGUpLCB7IEZsdHI6IHsKICAgICAgICBfbmFtZTogIlBlcnNwZWN0aXZlIFdhcnAiLAogICAgICAgIF9jbGFzc0lEOiAicGVyc3BlY3RpdmVXYXJwVHJhbnNmb3JtIiwKICAgICAgICB2ZXJ0aWNlczogci5maWx0ZXIudmVydGljZXMubWFwKG8yKSwKICAgICAgICB3YXJwZWRWZXJ0aWNlczogci5maWx0ZXIud2FycGVkVmVydGljZXMubWFwKG8yKSwKICAgICAgICBxdWFkczogci5maWx0ZXIucXVhZHMubWFwKGZ1bmN0aW9uKHUpIHsKICAgICAgICAgIHJldHVybiB7IGluZGljZXM6IHUgfTsKICAgICAgICB9KQogICAgICB9LCBmaWx0ZXJJRDogNDQyIH0pOwogICAgY2FzZSAiY3VydmVzIjoKICAgICAgcmV0dXJuIGgoaCh7fSwgZSksIHsgRmx0cjogaCh7IF9uYW1lOiAiQ3VydmVzIiwgX2NsYXNzSUQ6ICJDcnZzIiwgcHJlc2V0S2luZDogUjEuZW5jb2RlKHIuZmlsdGVyLnByZXNldEtpbmQpIH0sIHIuZmlsdGVyLmFkanVzdG1lbnRzID8gewogICAgICAgIEFkanM6IHIuZmlsdGVyLmFkanVzdG1lbnRzLm1hcChmdW5jdGlvbih1KSB7CiAgICAgICAgICByZXR1cm4gImN1cnZlIiBpbiB1ID8gewogICAgICAgICAgICBfbmFtZTogIiIsCiAgICAgICAgICAgIF9jbGFzc0lEOiAiQ3J2QSIsCiAgICAgICAgICAgIENobmw6IHUuY2hhbm5lbHMubWFwKEUyLmVuY29kZSksCiAgICAgICAgICAgICJDcnYgIjogdS5jdXJ2ZS5tYXAoZnVuY3Rpb24obykgewogICAgICAgICAgICAgIHJldHVybiBoKHsgX25hbWU6ICIiLCBfY2xhc3NJRDogIlBudCAiLCBIcnpuOiBvLngsIFZydGM6IG8ueSB9LCBvLmN1cnZlZCA/IHsgQ250eTogITAgfSA6IHt9KTsKICAgICAgICAgICAgfSkKICAgICAgICAgIH0gOiB7CiAgICAgICAgICAgIF9uYW1lOiAiIiwKICAgICAgICAgICAgX2NsYXNzSUQ6ICJDcnZBIiwKICAgICAgICAgICAgQ2hubDogdS5jaGFubmVscy5tYXAoRTIuZW5jb2RlKSwKICAgICAgICAgICAgTXBuZzogdS52YWx1ZXMKICAgICAgICAgIH07CiAgICAgICAgfSkKICAgICAgfSA6IHt9KSwgZmlsdGVySUQ6IDExMzE1NzQ4OTkgfSk7CiAgICBjYXNlICJicmlnaHRuZXNzL2NvbnRyYXN0IjoKICAgICAgcmV0dXJuIGgoaCh7fSwgZSksIHsgRmx0cjogewogICAgICAgIF9uYW1lOiAiQnJpZ2h0bmVzcy9Db250cmFzdCIsCiAgICAgICAgX2NsYXNzSUQ6ICJCcmdDIiwKICAgICAgICBCcmdoOiByLmZpbHRlci5icmlnaHRuZXNzLAogICAgICAgIENudHI6IHIuZmlsdGVyLmNvbnRyYXN0LAogICAgICAgIHVzZUxlZ2FjeTogISFyLmZpbHRlci51c2VMZWdhY3kKICAgICAgfSwgZmlsdGVySUQ6IDExMTQ3OTM3OTUgfSk7CiAgICBkZWZhdWx0OgogICAgICB0aHJvdyBuZXcgRXJyb3IoIlVua25vdyBmaWx0ZXIgdHlwZTogIi5jb25jYXQoci50eXBlKSk7CiAgfQp9CmZ1bmN0aW9uIGVmKHIpIHsKICBpZiAoci53YXJwKQogICAgcmV0dXJuIHIud2FycDsKICBpZiAoIXIud2lkdGggfHwgIXIuaGVpZ2h0KQogICAgdGhyb3cgbmV3IEVycm9yKCJZb3UgbXVzdCBwcm92aWRlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIGxpbmtlZCBpbWFnZSBpbiBwbGFjZWRMYXllciIpOwogIHZhciBlID0gci53aWR0aCwgYSA9IHIuaGVpZ2h0LCBBID0gMCwgdCA9IGUgLyAzLCBpID0gZSAqIDIgLyAzLCBuID0gZSwgZiA9IDAsIHUgPSBhIC8gMywgbyA9IGEgKiAyIC8gMywgbCA9IGE7CiAgcmV0dXJuIHsKICAgIHN0eWxlOiAiY3VzdG9tIiwKICAgIHZhbHVlOiAwLAogICAgcGVyc3BlY3RpdmU6IDAsCiAgICBwZXJzcGVjdGl2ZU90aGVyOiAwLAogICAgcm90YXRlOiAiaG9yaXpvbnRhbCIsCiAgICBib3VuZHM6IHsKICAgICAgdG9wOiB7IHZhbHVlOiAwLCB1bml0czogIlBpeGVscyIgfSwKICAgICAgbGVmdDogeyB2YWx1ZTogMCwgdW5pdHM6ICJQaXhlbHMiIH0sCiAgICAgIGJvdHRvbTogeyB2YWx1ZTogYSwgdW5pdHM6ICJQaXhlbHMiIH0sCiAgICAgIHJpZ2h0OiB7IHZhbHVlOiBlLCB1bml0czogIlBpeGVscyIgfQogICAgfSwKICAgIHVPcmRlcjogNCwKICAgIHZPcmRlcjogNCwKICAgIGN1c3RvbUVudmVsb3BlV2FycDogewogICAgICBtZXNoUG9pbnRzOiBbCiAgICAgICAgeyB4OiBBLCB5OiBmIH0sCiAgICAgICAgeyB4OiB0LCB5OiBmIH0sCiAgICAgICAgeyB4OiBpLCB5OiBmIH0sCiAgICAgICAgeyB4OiBuLCB5OiBmIH0sCiAgICAgICAgeyB4OiBBLCB5OiB1IH0sCiAgICAgICAgeyB4OiB0LCB5OiB1IH0sCiAgICAgICAgeyB4OiBpLCB5OiB1IH0sCiAgICAgICAgeyB4OiBuLCB5OiB1IH0sCiAgICAgICAgeyB4OiBBLCB5OiBvIH0sCiAgICAgICAgeyB4OiB0LCB5OiBvIH0sCiAgICAgICAgeyB4OiBpLCB5OiBvIH0sCiAgICAgICAgeyB4OiBuLCB5OiBvIH0sCiAgICAgICAgeyB4OiBBLCB5OiBsIH0sCiAgICAgICAgeyB4OiB0LCB5OiBsIH0sCiAgICAgICAgeyB4OiBpLCB5OiBsIH0sCiAgICAgICAgeyB4OiBuLCB5OiBsIH0KICAgICAgXQogICAgfQogIH07Cn0KcjAoIlNvTGQiLCBYMCgicGxhY2VkTGF5ZXIiKSwgZnVuY3Rpb24ociwgZSwgYSkgewogIGlmIChSMChyKSAhPT0gInNvTEQiKQogICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIFNvTGQgdHlwZSIpOwogIHZhciBBID0gTChyKTsKICBpZiAoQSAhPT0gNCAmJiBBICE9PSA1KQogICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIFNvTGQgdmVyc2lvbiIpOwogIHZhciB0ID0gbTAociwgITApOwogIGUucGxhY2VkTGF5ZXIgPSB7CiAgICBpZDogdC5JZG50LAogICAgcGxhY2VkOiB0LnBsYWNlZCwKICAgIHR5cGU6IFBhW3QuVHlwZV0sCiAgICBwYWdlTnVtYmVyOiB0LlBnTm0sCiAgICB0b3RhbFBhZ2VzOiB0LnRvdGFsUGFnZXMsCiAgICBmcmFtZVN0ZXA6IG5yKHQuZnJhbWVTdGVwKSwKICAgIGR1cmF0aW9uOiBucih0LmR1cmF0aW9uKSwKICAgIGZyYW1lQ291bnQ6IHQuZnJhbWVDb3VudCwKICAgIHRyYW5zZm9ybTogdC5Ucm5mLAogICAgd2lkdGg6IHRbIlN6ICAiXS5XZHRoLAogICAgaGVpZ2h0OiB0WyJTeiAgIl0uSGdodCwKICAgIHJlc29sdXRpb246IEYwKHQuUnNsdCksCiAgICB3YXJwOiBhZih0LnF1aWx0V2FycCB8fCB0LndhcnApCiAgfSwgdC5ub25BZmZpbmVUcmFuc2Zvcm0gJiYgdC5ub25BZmZpbmVUcmFuc2Zvcm0uc29tZShmdW5jdGlvbihpLCBuKSB7CiAgICByZXR1cm4gaSAhPT0gdC5Ucm5mW25dOwogIH0pICYmIChlLnBsYWNlZExheWVyLm5vbkFmZmluZVRyYW5zZm9ybSA9IHQubm9uQWZmaW5lVHJhbnNmb3JtKSwgdC5Dcm9wICYmIChlLnBsYWNlZExheWVyLmNyb3AgPSB0LkNyb3ApLCB0LmNvbXAgJiYgKGUucGxhY2VkTGF5ZXIuY29tcCA9IHQuY29tcCksIHQuY29tcEluZm8gJiYgKGUucGxhY2VkTGF5ZXIuY29tcEluZm8gPSB7CiAgICBjb21wSUQ6IHQuY29tcEluZm8uY29tcElELAogICAgb3JpZ2luYWxDb21wSUQ6IHQuY29tcEluZm8ub3JpZ2luYWxDb21wSUQKICB9KSwgdC5maWx0ZXJGWCAmJiAoZS5wbGFjZWRMYXllci5maWx0ZXIgPSBJNCh0LmZpbHRlckZYLCByKSksIEgociwgYSgpKTsKfSwgZnVuY3Rpb24ociwgZSkgewogIHZhciBhLCBBOwogIG4wKHIsICJzb0xEIiksIHQwKHIsIDQpOwogIHZhciB0ID0gZS5wbGFjZWRMYXllcjsKICBpZiAoIXQuaWQgfHwgdHlwZW9mIHQuaWQgIT0gInN0cmluZyIgfHwgIS9eWzAtOWEtZl17OH0tKFswLTlhLWZdezR9LSl7M31bMC05YS1mXXsxMn0kLy50ZXN0KHQuaWQpKQogICAgdGhyb3cgbmV3IEVycm9yKCJQbGFjZWQgbGF5ZXIgSUQgbXVzdCBiZSBpbiBhIEdVSUQgZm9ybWF0IChleGFtcGxlOiAyMDk1M2RkYi05MzkxLTExZWMtYjRmMS1jMTU2NzRmNTBiYzQpIik7CiAgdmFyIGkgPSBoKGgoeyBJZG50OiB0LmlkLCBwbGFjZWQ6IChhID0gdC5wbGFjZWQpICE9PSBudWxsICYmIGEgIT09IHZvaWQgMCA/IGEgOiB0LmlkLCBQZ05tOiB0LnBhZ2VOdW1iZXIgfHwgMSwgdG90YWxQYWdlczogdC50b3RhbFBhZ2VzIHx8IDEgfSwgdC5jcm9wID8geyBDcm9wOiB0LmNyb3AgfSA6IHt9KSwgewogICAgZnJhbWVTdGVwOiB0LmZyYW1lU3RlcCB8fCB7IG51bWVyYXRvcjogMCwgZGVub21pbmF0b3I6IDYwMCB9LAogICAgZHVyYXRpb246IHQuZHVyYXRpb24gfHwgeyBudW1lcmF0b3I6IDAsIGRlbm9taW5hdG9yOiA2MDAgfSwKICAgIGZyYW1lQ291bnQ6IHQuZnJhbWVDb3VudCB8fCAwLAogICAgQW5udDogMTYsCiAgICBUeXBlOiBQYS5pbmRleE9mKHQudHlwZSksCiAgICBUcm5mOiB0LnRyYW5zZm9ybSwKICAgIG5vbkFmZmluZVRyYW5zZm9ybTogKEEgPSB0Lm5vbkFmZmluZVRyYW5zZm9ybSkgIT09IG51bGwgJiYgQSAhPT0gdm9pZCAwID8gQSA6IHQudHJhbnNmb3JtLAogICAgLy8gcXVpbHRXYXJwOiB7fSBhcyBhbnksCiAgICB3YXJwOiBaZShlZih0KSksCiAgICAiU3ogICI6IHsKICAgICAgX25hbWU6ICIiLAogICAgICBfY2xhc3NJRDogIlBudCAiLAogICAgICBXZHRoOiB0LndpZHRoIHx8IDAsCiAgICAgIEhnaHQ6IHQuaGVpZ2h0IHx8IDAKICAgICAgLy8gVE9ETzogZmluZCBzaXplID8KICAgIH0sCiAgICBSc2x0OiB0LnJlc29sdXRpb24gPyBEMCh0LnJlc29sdXRpb24sICJyZXNvbHV0aW9uIikgOiB7IHVuaXRzOiAiRGVuc2l0eSIsIHZhbHVlOiA3MiB9CiAgfSk7CiAgaWYgKHQuZmlsdGVyICYmIChpLmZpbHRlckZYID0gewogICAgX25hbWU6ICIiLAogICAgX2NsYXNzSUQ6ICJmaWx0ZXJGWFN0eWxlIiwKICAgIGVuYWI6IHQuZmlsdGVyLmVuYWJsZWQsCiAgICB2YWxpZEF0UG9zaXRpb246IHQuZmlsdGVyLnZhbGlkQXRQb3NpdGlvbiwKICAgIGZpbHRlck1hc2tFbmFibGU6IHQuZmlsdGVyLm1hc2tFbmFibGVkLAogICAgZmlsdGVyTWFza0xpbmtlZDogdC5maWx0ZXIubWFza0xpbmtlZCwKICAgIGZpbHRlck1hc2tFeHRlbmRXaXRoV2hpdGU6IHQuZmlsdGVyLm1hc2tFeHRlbmRXaXRoV2hpdGUsCiAgICBmaWx0ZXJGWExpc3Q6IHQuZmlsdGVyLmxpc3QubWFwKGZ1bmN0aW9uKGYpIHsKICAgICAgcmV0dXJuIEY0KGYpOwogICAgfSkKICB9KSwgdC53YXJwICYmIHpBKHQud2FycCkpIHsKICAgIHZhciBuID0gWmUodC53YXJwKTsKICAgIGkucXVpbHRXYXJwID0gbiwgaS53YXJwID0gewogICAgICB3YXJwU3R5bGU6ICJ3YXJwU3R5bGUud2FycE5vbmUiLAogICAgICB3YXJwVmFsdWU6IG4ud2FycFZhbHVlLAogICAgICB3YXJwUGVyc3BlY3RpdmU6IG4ud2FycFBlcnNwZWN0aXZlLAogICAgICB3YXJwUGVyc3BlY3RpdmVPdGhlcjogbi53YXJwUGVyc3BlY3RpdmVPdGhlciwKICAgICAgd2FycFJvdGF0ZTogbi53YXJwUm90YXRlLAogICAgICBib3VuZHM6IG4uYm91bmRzLAogICAgICB1T3JkZXI6IG4udU9yZGVyLAogICAgICB2T3JkZXI6IG4udk9yZGVyCiAgICB9OwogIH0gZWxzZQogICAgZGVsZXRlIGkucXVpbHRXYXJwOwogIHQuY29tcCAmJiAoaS5jb21wID0gdC5jb21wKSwgdC5jb21wSW5mbyAmJiAoaS5jb21wSW5mbyA9IHQuY29tcEluZm8pLCBwMChyLCAiIiwgIm51bGwiLCBpLCBpLnF1aWx0V2FycCA/ICJxdWlsdFdhcnAiIDogIndhcnAiKTsKfSk7CmUyKCJTb0xFIiwgIlNvTGQiKTsKcjAoImZ4cnAiLCBYMCgicmVmZXJlbmNlUG9pbnQiKSwgZnVuY3Rpb24ociwgZSkgewogIGUucmVmZXJlbmNlUG9pbnQgPSB7CiAgICB4OiBJcihyKSwKICAgIHk6IElyKHIpCiAgfTsKfSwgZnVuY3Rpb24ociwgZSkgewogIEZyKHIsIGUucmVmZXJlbmNlUG9pbnQueCksIEZyKHIsIGUucmVmZXJlbmNlUG9pbnQueSk7Cn0pOwpyMCgiTHIxNiIsIGZ1bmN0aW9uKCkgewogIHJldHVybiAhMTsKfSwgZnVuY3Rpb24ociwgZSwgYSwgQSwgdCkgewogIGpBKHIsIEEsIHQpOwp9LCBmdW5jdGlvbihyLCBlKSB7Cn0pOwpyMCgiTHIzMiIsIGZ1bmN0aW9uKCkgewogIHJldHVybiAhMTsKfSwgZnVuY3Rpb24ociwgZSwgYSwgQSwgdCkgewogIGpBKHIsIEEsIHQpOwp9LCBmdW5jdGlvbihyLCBlKSB7Cn0pOwpyMCgiTE1zayIsIFgwKCJ1c2VyTWFzayIpLCBmdW5jdGlvbihyLCBlKSB7CiAgZS51c2VyTWFzayA9IHsKICAgIGNvbG9yU3BhY2U6IEswKHIpLAogICAgb3BhY2l0eTogUChyKSAvIDI1NQogIH07CiAgdmFyIGEgPSBPKHIpOwogIGlmIChhICE9PSAxMjgpCiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgZmxhZyB2YWx1ZSIpOwogIEgociwgMSk7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICB2YXIgYSA9IGUudXNlck1hc2s7CiAgcnIociwgYS5jb2xvclNwYWNlKSwgeChyLCBNQShhLm9wYWNpdHksIDAsIDEpICogMjU1KSwgVChyLCAxMjgpLCBaMChyLCAxKTsKfSk7CnIwKAogICJQYXR0IiwKICAvLyBUT0RPOiBoYW5kbGUgYWxzbyBQYXQyICYgUGF0MwogIGZ1bmN0aW9uKHIpIHsKICAgIHJldHVybiAhcjsKICB9LAogIGZ1bmN0aW9uKHIsIGUsIGEpIHsKICAgIGEoKSAmJiBIKHIsIGEoKSk7CiAgfSwKICBmdW5jdGlvbihyLCBlKSB7CiAgfQopOwpmdW5jdGlvbiBEaShyKSB7CiAgdmFyIGUgPSBMKHIpLCBhID0gTChyKSwgQSA9IEwociksIHQgPSBMKHIpOwogIHJldHVybiB7IHRvcDogZSwgbGVmdDogYSwgYm90dG9tOiBBLCByaWdodDogdCB9Owp9CmZ1bmN0aW9uIHhpKHIsIGUpIHsKICB0MChyLCBlLnRvcCksIHQwKHIsIGUubGVmdCksIHQwKHIsIGUuYm90dG9tKSwgdDAociwgZS5yaWdodCk7Cn0KcjAoIkFubm8iLCBmdW5jdGlvbihyKSB7CiAgcmV0dXJuIHIuYW5ub3RhdGlvbnMgIT09IHZvaWQgMDsKfSwgZnVuY3Rpb24ociwgZSwgYSkgewogIHZhciBBID0gUChyKSwgdCA9IFAocik7CiAgaWYgKEEgIT09IDIgfHwgdCAhPT0gMSkKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBBbm5vIHZlcnNpb24iKTsKICBmb3IgKHZhciBpID0gUyhyKSwgbiA9IFtdLCBmID0gMDsgZiA8IGk7IGYrKykgewogICAgUyhyKTsKICAgIHZhciB1ID0gUjAociksIG8gPSAhIU8ocik7CiAgICBPKHIpLCBQKHIpOwogICAgdmFyIGwgPSBEaShyKSwgcyA9IERpKHIpLCBjID0gSzAociksIGQgPSB4cihyLCAyKSwgdiA9IHhyKHIsIDIpLCBrID0geHIociwgMik7CiAgICBTKHIpLCBSMChyKTsKICAgIHZhciBFID0gUyhyKSwgZyA9IHZvaWQgMDsKICAgIGlmICh1ID09PSAidHh0QSIpCiAgICAgIEUgPj0gMiAmJiBQKHIpID09PSA2NTI3OSA/IGcgPSBVQShyLCAoRSAtIDIpIC8gMikgOiAoci5vZmZzZXQgLT0gMiwgZyA9IFNlKHIsIEUpKSwgZyA9IGcucmVwbGFjZSgvXHIvZywgYApgKTsKICAgIGVsc2UgaWYgKHUgPT09ICJzbmRBIikKICAgICAgZyA9IFkwKHIsIEUpOwogICAgZWxzZQogICAgICB0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gYW5ub3RhdGlvbiB0eXBlIik7CiAgICBuLnB1c2goewogICAgICB0eXBlOiB1ID09PSAidHh0QSIgPyAidGV4dCIgOiAic291bmQiLAogICAgICBvcGVuOiBvLAogICAgICBpY29uTG9jYXRpb246IGwsCiAgICAgIHBvcHVwTG9jYXRpb246IHMsCiAgICAgIGNvbG9yOiBjLAogICAgICBhdXRob3I6IGQsCiAgICAgIG5hbWU6IHYsCiAgICAgIGRhdGU6IGssCiAgICAgIGRhdGE6IGcKICAgIH0pOwogIH0KICBlLmFubm90YXRpb25zID0gbiwgSChyLCBhKCkpOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgdmFyIGEgPSBlLmFubm90YXRpb25zOwogIHgociwgMiksIHgociwgMSksIFUociwgYS5sZW5ndGgpOwogIGZvciAodmFyIEEgPSAwLCB0ID0gYTsgQSA8IHQubGVuZ3RoOyBBKyspIHsKICAgIHZhciBpID0gdFtBXSwgbiA9IGkudHlwZSA9PT0gInNvdW5kIjsKICAgIGlmIChuICYmICEoaS5kYXRhIGluc3RhbmNlb2YgVWludDhBcnJheSkpCiAgICAgIHRocm93IG5ldyBFcnJvcigiU291bmQgYW5ub3RhdGlvbiBkYXRhIHNob3VsZCBiZSBVaW50OEFycmF5Iik7CiAgICBpZiAoIW4gJiYgdHlwZW9mIGkuZGF0YSAhPSAic3RyaW5nIikKICAgICAgdGhyb3cgbmV3IEVycm9yKCJUZXh0IGFubm90YXRpb24gZGF0YSBzaG91bGQgYmUgc3RyaW5nIik7CiAgICB2YXIgZiA9IHIub2Zmc2V0OwogICAgVShyLCAwKSwgbjAociwgbiA/ICJzbmRBIiA6ICJ0eHRBIiksIFQociwgaS5vcGVuID8gMSA6IDApLCBUKHIsIDI4KSwgeChyLCAxKSwgeGkociwgaS5pY29uTG9jYXRpb24pLCB4aShyLCBpLnBvcHVwTG9jYXRpb24pLCBycihyLCBpLmNvbG9yKSwga2EociwgaS5hdXRob3IgfHwgIiIsIDIpLCBrYShyLCBpLm5hbWUgfHwgIiIsIDIpLCBrYShyLCBpLmRhdGUgfHwgIiIsIDIpOwogICAgdmFyIHUgPSByLm9mZnNldDsKICAgIFUociwgMCksIG4wKHIsIG4gPyAic25kTSIgOiAidHh0QyIpLCBVKHIsIDApOwogICAgdmFyIG8gPSByLm9mZnNldDsKICAgIGlmIChuKQogICAgICBOcihyLCBpLmRhdGEpOwogICAgZWxzZSB7CiAgICAgIHgociwgNjUyNzkpOwogICAgICBmb3IgKHZhciBsID0gaS5kYXRhLnJlcGxhY2UoL1xuL2csICJcciIpLCBzID0gMDsgcyA8IGwubGVuZ3RoOyBzKyspCiAgICAgICAgeChyLCBsLmNoYXJDb2RlQXQocykpOwogICAgfQogICAgci52aWV3LnNldFVpbnQzMihmLCByLm9mZnNldCAtIGYsICExKSwgci52aWV3LnNldFVpbnQzMih1LCByLm9mZnNldCAtIHUsICExKSwgci52aWV3LnNldFVpbnQzMihvIC0gNCwgci5vZmZzZXQgLSBvLCAhMSk7CiAgfQp9KTsKZnVuY3Rpb24gQWYocikgewogIHIwKHIsIGZ1bmN0aW9uKGUpIHsKICAgIHZhciBhID0gZTsKICAgIHJldHVybiAhKCFhLmxpbmtlZEZpbGVzIHx8ICFhLmxpbmtlZEZpbGVzLmxlbmd0aCB8fCByID09PSAibG5rRSIgJiYgIWEubGlua2VkRmlsZXMuc29tZShmdW5jdGlvbihBKSB7CiAgICAgIHJldHVybiBBLmxpbmtlZEZpbGU7CiAgICB9KSk7CiAgfSwgZnVuY3Rpb24oZSwgYSwgQSwgdCkgewogICAgdmFyIGkgPSBhOwogICAgZm9yIChpLmxpbmtlZEZpbGVzID0gaS5saW5rZWRGaWxlcyB8fCBbXTsgQSgpID4gODsgKSB7CiAgICAgIHZhciBuID0gb0EoZSksIGYgPSBlLm9mZnNldCwgdSA9IFIwKGUpLCBvID0gTChlKSwgbCA9IHhyKGUsIDEpLCBzID0gejAoZSksIGMgPSBSMChlKS50cmltKCksIGQgPSBSMChlKS50cmltKCksIHYgPSBvQShlKSwgayA9IE8oZSksIEUgPSBrID8gbTAoZSkgOiB2b2lkIDAsIGcgPSB1ID09PSAibGlGRSIgPyBtMChlKSA6IHZvaWQgMCwgdyA9IHsgaWQ6IGwsIG5hbWU6IHMgfTsKICAgICAgaWYgKGMgJiYgKHcudHlwZSA9IGMpLCBkICYmICh3LmNyZWF0b3IgPSBkKSwgRSAmJiAody5kZXNjcmlwdG9yID0gewogICAgICAgIGNvbXBJbmZvOiB7CiAgICAgICAgICBjb21wSUQ6IEUuY29tcEluZm8uY29tcElELAogICAgICAgICAgb3JpZ2luYWxDb21wSUQ6IEUuY29tcEluZm8ub3JpZ2luYWxDb21wSUQKICAgICAgICB9CiAgICAgIH0pLCB1ID09PSAibGlGRSIgJiYgbyA+IDMpIHsKICAgICAgICB2YXIgQiA9IEwoZSksIG0gPSBPKGUpLCBwID0gTyhlKSwgVyA9IE8oZSksIEMgPSBPKGUpLCBfID0gSXIoZSksIE4gPSBNYXRoLmZsb29yKF8pLCBEID0gKF8gLSBOKSAqIDFlMzsKICAgICAgICB3LnRpbWUgPSBuZXcgRGF0ZShEYXRlLlVUQyhCLCBtLCBwLCBXLCBDLCBOLCBEKSkudG9JU09TdHJpbmcoKTsKICAgICAgfQogICAgICB2YXIgWSA9IHUgPT09ICJsaUZFIiA/IG9BKGUpIDogMDsKICAgICAgZm9yICh1ID09PSAibGlGQSIgJiYgSChlLCA4KSwgdSA9PT0gImxpRkQiICYmICh3LmRhdGEgPSBZMChlLCB2KSksIG8gPj0gNSAmJiAody5jaGlsZERvY3VtZW50SUQgPSB6MChlKSksIG8gPj0gNiAmJiAody5hc3NldE1vZFRpbWUgPSBJcihlKSksIG8gPj0gNyAmJiAody5hc3NldExvY2tlZFN0YXRlID0gTyhlKSksIHUgPT09ICJsaUZFIiAmJiBvID09PSAyICYmICh3LmRhdGEgPSBZMChlLCBZKSksIGUuc2tpcExpbmtlZEZpbGVzRGF0YSAmJiAody5kYXRhID0gdm9pZCAwKSwgciA9PT0gImxua0UiICYmICh3LmxpbmtlZEZpbGUgPSB7CiAgICAgICAgZmlsZVNpemU6IFksCiAgICAgICAgbmFtZTogKGcgPT0gbnVsbCA/IHZvaWQgMCA6IGdbIk5tICAiXSkgfHwgIiIsCiAgICAgICAgZnVsbFBhdGg6IChnID09IG51bGwgPyB2b2lkIDAgOiBnLmZ1bGxQYXRoKSB8fCAiIiwKICAgICAgICBvcmlnaW5hbFBhdGg6IChnID09IG51bGwgPyB2b2lkIDAgOiBnLm9yaWdpbmFsUGF0aCkgfHwgIiIsCiAgICAgICAgcmVsYXRpdmVQYXRoOiAoZyA9PSBudWxsID8gdm9pZCAwIDogZy5yZWxQYXRoKSB8fCAiIgogICAgICB9KSwgaS5saW5rZWRGaWxlcy5wdXNoKHcpOyBuICUgNDsgKQogICAgICAgIG4rKzsKICAgICAgZS5vZmZzZXQgPSBmICsgbjsKICAgIH0KICAgIEgoZSwgQSgpKTsKICB9LCBmdW5jdGlvbihlLCBhKSB7CiAgICBmb3IgKHZhciBBLCB0LCBpLCBuLCBmLCB1LCBvLCBsLCBzLCBjID0gYSwgZCA9IDAsIHYgPSBjLmxpbmtlZEZpbGVzOyBkIDwgdi5sZW5ndGg7IGQrKykgewogICAgICB2YXIgayA9IHZbZF07CiAgICAgIGlmIChyID09PSAibG5rRSIgPT0gISFrLmxpbmtlZEZpbGUpIHsKICAgICAgICB2YXIgRSA9IDI7CiAgICAgICAgay5hc3NldExvY2tlZFN0YXRlICE9IG51bGwgPyBFID0gNyA6IGsuYXNzZXRNb2RUaW1lICE9IG51bGwgPyBFID0gNiA6IGsuY2hpbGREb2N1bWVudElEICE9IG51bGwgPyBFID0gNSA6IHIgPT09ICJsbmtFIiAmJiAoRSA9IDMpLCB1QShlLCAwKTsKICAgICAgICB2YXIgZyA9IGUub2Zmc2V0OwogICAgICAgIGlmIChuMChlLCByID09PSAibG5rRSIgPyAibGlGRSIgOiBrLmRhdGEgPyAibGlGRCIgOiAibGlGQSIpLCB0MChlLCBFKSwgIWsuaWQgfHwgdHlwZW9mIGsuaWQgIT0gInN0cmluZyIgfHwgIS9eWzAtOWEtZl17OH0tKFswLTlhLWZdezR9LSl7M31bMC05YS1mXXsxMn0kLy50ZXN0KGsuaWQpKQogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJMaW5rZWQgZmlsZSBJRCBtdXN0IGJlIGluIGEgR1VJRCBmb3JtYXQgKGV4YW1wbGU6IDIwOTUzZGRiLTkzOTEtMTFlYy1iNGYxLWMxNTY3NGY1MGJjNCkiKTsKICAgICAgICBpZiAoa2EoZSwgay5pZCwgMSksIFdhKGUsIGsubmFtZSB8fCAiIiksIG4wKGUsIGsudHlwZSA/ICIiLmNvbmNhdChrLnR5cGUsICIgICAgIikuc3Vic3RyaW5nKDAsIDQpIDogIiAgICAiKSwgbjAoZSwgay5jcmVhdG9yID8gIiIuY29uY2F0KGsuY3JlYXRvciwgIiAgICAiKS5zdWJzdHJpbmcoMCwgNCkgOiAiXDBcMFwwXDAiKSwgdUEoZSwgay5kYXRhID8gay5kYXRhLmJ5dGVMZW5ndGggOiAwKSwgay5kZXNjcmlwdG9yICYmIGsuZGVzY3JpcHRvci5jb21wSW5mbykgewogICAgICAgICAgdmFyIHcgPSB7CiAgICAgICAgICAgIGNvbXBJbmZvOiB7CiAgICAgICAgICAgICAgY29tcElEOiBrLmRlc2NyaXB0b3IuY29tcEluZm8uY29tcElELAogICAgICAgICAgICAgIG9yaWdpbmFsQ29tcElEOiBrLmRlc2NyaXB0b3IuY29tcEluZm8ub3JpZ2luYWxDb21wSUQKICAgICAgICAgICAgfQogICAgICAgICAgfTsKICAgICAgICAgIFQoZSwgMSksIHAwKGUsICIiLCAibnVsbCIsIHcpOwogICAgICAgIH0gZWxzZQogICAgICAgICAgVChlLCAwKTsKICAgICAgICBpZiAociA9PT0gImxua0UiKSB7CiAgICAgICAgICB2YXIgdyA9IHsKICAgICAgICAgICAgZGVzY1ZlcnNpb246IDIsCiAgICAgICAgICAgICJObSAgIjogKHQgPSAoQSA9IGsubGlua2VkRmlsZSkgPT09IG51bGwgfHwgQSA9PT0gdm9pZCAwID8gdm9pZCAwIDogQS5uYW1lKSAhPT0gbnVsbCAmJiB0ICE9PSB2b2lkIDAgPyB0IDogIiIsCiAgICAgICAgICAgIGZ1bGxQYXRoOiAobiA9IChpID0gay5saW5rZWRGaWxlKSA9PT0gbnVsbCB8fCBpID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpLmZ1bGxQYXRoKSAhPT0gbnVsbCAmJiBuICE9PSB2b2lkIDAgPyBuIDogIiIsCiAgICAgICAgICAgIG9yaWdpbmFsUGF0aDogKHUgPSAoZiA9IGsubGlua2VkRmlsZSkgPT09IG51bGwgfHwgZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogZi5vcmlnaW5hbFBhdGgpICE9PSBudWxsICYmIHUgIT09IHZvaWQgMCA/IHUgOiAiIiwKICAgICAgICAgICAgcmVsUGF0aDogKGwgPSAobyA9IGsubGlua2VkRmlsZSkgPT09IG51bGwgfHwgbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogby5yZWxhdGl2ZVBhdGgpICE9PSBudWxsICYmIGwgIT09IHZvaWQgMCA/IGwgOiAiIgogICAgICAgICAgfTsKICAgICAgICAgIHAwKGUsICIiLCAiRXh0ZXJuYWxGaWxlTGluayIsIHcpOwogICAgICAgICAgdmFyIEIgPSBrLnRpbWUgPyBuZXcgRGF0ZShrLnRpbWUpIDogLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7CiAgICAgICAgICB0MChlLCBCLmdldFVUQ0Z1bGxZZWFyKCkpLCBUKGUsIEIuZ2V0VVRDTW9udGgoKSksIFQoZSwgQi5nZXRVVENEYXRlKCkpLCBUKGUsIEIuZ2V0VVRDSG91cnMoKSksIFQoZSwgQi5nZXRVVENNaW51dGVzKCkpLCBGcihlLCBCLmdldFVUQ1NlY29uZHMoKSArIEIuZ2V0VVRDTWlsbGlzZWNvbmRzKCkgLyAxZTMpOwogICAgICAgIH0KICAgICAgICBrLmRhdGEgPyBOcihlLCBrLmRhdGEpIDogdUEoZSwgKChzID0gay5saW5rZWRGaWxlKSA9PT0gbnVsbCB8fCBzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzLmZpbGVTaXplKSB8fCAwKSwgRSA+PSA1ICYmIFdhKGUsIGsuY2hpbGREb2N1bWVudElEIHx8ICIiKSwgRSA+PSA2ICYmIEZyKGUsIGsuYXNzZXRNb2RUaW1lIHx8IDApLCBFID49IDcgJiYgVChlLCBrLmFzc2V0TG9ja2VkU3RhdGUgfHwgMCk7CiAgICAgICAgdmFyIG0gPSBlLm9mZnNldCAtIGc7CiAgICAgICAgZm9yIChlLnZpZXcuc2V0VWludDMyKGcgLSA0LCBtLCAhMSk7IG0gJSA0OyApCiAgICAgICAgICBtKyssIFQoZSwgMCk7CiAgICAgIH0KICAgIH0KICB9KTsKfQpBZigibG5rMiIpOwpBZigibG5rRSIpOwplMigibG5rRCIsICJsbmsyIik7CmUyKCJsbmszIiwgImxuazIiKTsKcjAoInB0aHMiLCBYMCgicGF0aExpc3QiKSwgZnVuY3Rpb24ociwgZSkgewogIG0wKHIsICEwKSwgZS5wYXRoTGlzdCA9IFtdOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgdmFyIGEgPSB7CiAgICBwYXRoTGlzdDogW10KICAgIC8vIFRPRE86IHdyaXRlIHBhdGhzCiAgfTsKICBwMChyLCAiIiwgInBhdGhzRGF0YUNsYXNzIiwgYSk7Cn0pOwpyMCgibHl2ciIsIFgwKCJ2ZXJzaW9uIiksIGZ1bmN0aW9uKHIsIGUpIHsKICByZXR1cm4gZS52ZXJzaW9uID0gUyhyKTsKfSwgZnVuY3Rpb24ociwgZSkgewogIHJldHVybiBVKHIsIGUudmVyc2lvbik7Cn0pOwpyMCgKICAibGZ4cyIsCiAgZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gITE7CiAgfSwKICAvLyBUT0RPOiBub3Qgc3VyZSB3aGVuIHdlIGFjdHVhbGx5IG5lZWQgdG8gd3JpdGUgdGhpcyBzZWN0aW9uCiAgLy8gTk9URTogdGhpcyBtaWdodCBiZSBpbnN1ZmZpY2llbnQKICAvLyB0YXJnZXQgPT4gdGFyZ2V0LmVmZmVjdHMgIT09IHVuZGVmaW5lZCAmJiAoCiAgLy8gCSEhdGFyZ2V0LmVmZmVjdHMuZHJvcFNoYWRvdz8uc29tZShlID0+IGUuY2hva2UpIHx8CiAgLy8gCSEhdGFyZ2V0LmVmZmVjdHMuaW5uZXJTaGFkb3c/LnNvbWUoZSA9PiBlLmNob2tlKSB8fAogIC8vIAkhIXRhcmdldC5lZmZlY3RzLm91dGVyR2xvdz8uY2hva2UgfHwKICAvLyAJISF0YXJnZXQuZWZmZWN0cy5pbm5lckdsb3c/LmNob2tlCiAgLy8gKSwKICBmdW5jdGlvbihyLCBlLCBhKSB7CiAgICB2YXIgQSA9IFMocik7CiAgICBpZiAoQSAhPT0gMCkKICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGxmeHMgdmVyc2lvbiIpOwogICAgdmFyIHQgPSBtMChyKTsKICAgIGUuZWZmZWN0cyA9IFMyKHQsICEhci5sb2dNaXNzaW5nRmVhdHVyZXMpLCBIKHIsIGEoKSk7CiAgfSwKICBmdW5jdGlvbihyLCBlLCBhLCBBKSB7CiAgICB2YXIgdCA9IFYyKGUuZWZmZWN0cywgISFBLmxvZ01pc3NpbmdGZWF0dXJlcywgITApOwogICAgVShyLCAwKSwgcDAociwgIiIsICJudWxsIiwgdCk7CiAgfQopOwpmdW5jdGlvbiBpcihyKSB7CiAgcmV0dXJuIGZ1bmN0aW9uKGUpIHsKICAgIHJldHVybiAhIWUuYWRqdXN0bWVudCAmJiBlLmFkanVzdG1lbnQudHlwZSA9PT0gcjsKICB9Owp9CnIwKCJicml0IiwgaXIoImJyaWdodG5lc3MvY29udHJhc3QiKSwgZnVuY3Rpb24ociwgZSwgYSkgewogIGUuYWRqdXN0bWVudCB8fCAoZS5hZGp1c3RtZW50ID0gewogICAgdHlwZTogImJyaWdodG5lc3MvY29udHJhc3QiLAogICAgYnJpZ2h0bmVzczogZzAociksCiAgICBjb250cmFzdDogZzAociksCiAgICBtZWFuVmFsdWU6IGcwKHIpLAogICAgbGFiQ29sb3JPbmx5OiAhIU8ociksCiAgICB1c2VMZWdhY3k6ICEwCiAgfSksIEgociwgYSgpKTsKfSwgZnVuY3Rpb24ociwgZSkgewogIHZhciBhLCBBID0gZS5hZGp1c3RtZW50OwogIEUwKHIsIEEuYnJpZ2h0bmVzcyB8fCAwKSwgRTAociwgQS5jb250cmFzdCB8fCAwKSwgRTAociwgKGEgPSBBLm1lYW5WYWx1ZSkgIT09IG51bGwgJiYgYSAhPT0gdm9pZCAwID8gYSA6IDEyNyksIFQociwgQS5sYWJDb2xvck9ubHkgPyAxIDogMCksIFowKHIsIDEpOwp9KTsKZnVuY3Rpb24gdWUocikgewogIHZhciBlID0gZzAociksIGEgPSBnMChyKSwgQSA9IGcwKHIpLCB0ID0gZzAociksIGkgPSBnMChyKSAvIDEwMDsKICByZXR1cm4geyBzaGFkb3dJbnB1dDogZSwgaGlnaGxpZ2h0SW5wdXQ6IGEsIHNoYWRvd091dHB1dDogQSwgaGlnaGxpZ2h0T3V0cHV0OiB0LCBtaWR0b25lSW5wdXQ6IGkgfTsKfQpmdW5jdGlvbiB1MihyLCBlKSB7CiAgRTAociwgZS5zaGFkb3dJbnB1dCksIEUwKHIsIGUuaGlnaGxpZ2h0SW5wdXQpLCBFMChyLCBlLnNoYWRvd091dHB1dCksIEUwKHIsIGUuaGlnaGxpZ2h0T3V0cHV0KSwgRTAociwgTWF0aC5yb3VuZChlLm1pZHRvbmVJbnB1dCAqIDEwMCkpOwp9CnIwKCJsZXZsIiwgaXIoImxldmVscyIpLCBmdW5jdGlvbihyLCBlLCBhKSB7CiAgaWYgKFAocikgIT09IDIpCiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbGV2bCB2ZXJzaW9uIik7CiAgZS5hZGp1c3RtZW50ID0gaChoKHt9LCBlLmFkanVzdG1lbnQpLCB7IHR5cGU6ICJsZXZlbHMiLCByZ2I6IHVlKHIpLCByZWQ6IHVlKHIpLCBncmVlbjogdWUociksIGJsdWU6IHVlKHIpIH0pLCBIKHIsIGEoKSk7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICB2YXIgYSA9IGUuYWRqdXN0bWVudCwgQSA9IHsKICAgIHNoYWRvd0lucHV0OiAwLAogICAgaGlnaGxpZ2h0SW5wdXQ6IDI1NSwKICAgIHNoYWRvd091dHB1dDogMCwKICAgIGhpZ2hsaWdodE91dHB1dDogMjU1LAogICAgbWlkdG9uZUlucHV0OiAxCiAgfTsKICB4KHIsIDIpLCB1MihyLCBhLnJnYiB8fCBBKSwgdTIociwgYS5yZWQgfHwgQSksIHUyKHIsIGEuYmx1ZSB8fCBBKSwgdTIociwgYS5ncmVlbiB8fCBBKTsKICBmb3IgKHZhciB0ID0gMDsgdCA8IDU5OyB0KyspCiAgICB1MihyLCBBKTsKfSk7CmZ1bmN0aW9uIGxlKHIpIHsKICBmb3IgKHZhciBlID0gUChyKSwgYSA9IFtdLCBBID0gMDsgQSA8IGU7IEErKykgewogICAgdmFyIHQgPSBnMChyKSwgaSA9IGcwKHIpOwogICAgYS5wdXNoKHsgaW5wdXQ6IGksIG91dHB1dDogdCB9KTsKICB9CiAgcmV0dXJuIGE7Cn0KZnVuY3Rpb24gZmEociwgZSkgewogIHgociwgZS5sZW5ndGgpOwogIGZvciAodmFyIGEgPSAwLCBBID0gZTsgYSA8IEEubGVuZ3RoOyBhKyspIHsKICAgIHZhciB0ID0gQVthXTsKICAgIHgociwgdC5vdXRwdXQpLCB4KHIsIHQuaW5wdXQpOwogIH0KfQpyMCgiY3VydiIsIGlyKCJjdXJ2ZXMiKSwgZnVuY3Rpb24ociwgZSwgYSkgewogIGlmIChPKHIpLCBQKHIpICE9PSAxKQogICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGN1cnYgdmVyc2lvbiIpOwogIFAocik7CiAgdmFyIEEgPSBQKHIpLCB0ID0geyB0eXBlOiAiY3VydmVzIiB9OwogIEEgJiAxICYmICh0LnJnYiA9IGxlKHIpKSwgQSAmIDIgJiYgKHQucmVkID0gbGUocikpLCBBICYgNCAmJiAodC5ncmVlbiA9IGxlKHIpKSwgQSAmIDggJiYgKHQuYmx1ZSA9IGxlKHIpKSwgZS5hZGp1c3RtZW50ID0gaChoKHt9LCBlLmFkanVzdG1lbnQpLCB0KSwgSChyLCBhKCkpOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgdmFyIGEgPSBlLmFkanVzdG1lbnQsIEEgPSBhLnJnYiwgdCA9IGEucmVkLCBpID0gYS5ncmVlbiwgbiA9IGEuYmx1ZSwgZiA9IDAsIHUgPSAwOwogIEEgJiYgQS5sZW5ndGggJiYgKGYgfD0gMSwgdSsrKSwgdCAmJiB0Lmxlbmd0aCAmJiAoZiB8PSAyLCB1KyspLCBpICYmIGkubGVuZ3RoICYmIChmIHw9IDQsIHUrKyksIG4gJiYgbi5sZW5ndGggJiYgKGYgfD0gOCwgdSsrKSwgVChyLCAwKSwgeChyLCAxKSwgeChyLCAwKSwgeChyLCBmKSwgQSAmJiBBLmxlbmd0aCAmJiBmYShyLCBBKSwgdCAmJiB0Lmxlbmd0aCAmJiBmYShyLCB0KSwgaSAmJiBpLmxlbmd0aCAmJiBmYShyLCBpKSwgbiAmJiBuLmxlbmd0aCAmJiBmYShyLCBuKSwgbjAociwgIkNydiAiKSwgeChyLCA0KSwgeChyLCAwKSwgeChyLCB1KSwgQSAmJiBBLmxlbmd0aCAmJiAoeChyLCAwKSwgZmEociwgQSkpLCB0ICYmIHQubGVuZ3RoICYmICh4KHIsIDEpLCBmYShyLCB0KSksIGkgJiYgaS5sZW5ndGggJiYgKHgociwgMiksIGZhKHIsIGkpKSwgbiAmJiBuLmxlbmd0aCAmJiAoeChyLCAzKSwgZmEociwgbikpOwp9KTsKcjAoImV4cEEiLCBpcigiZXhwb3N1cmUiKSwgZnVuY3Rpb24ociwgZSwgYSkgewogIGlmIChQKHIpICE9PSAxKQogICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGV4cEEgdmVyc2lvbiIpOwogIGUuYWRqdXN0bWVudCA9IGgoaCh7fSwgZS5hZGp1c3RtZW50KSwgeyB0eXBlOiAiZXhwb3N1cmUiLCBleHBvc3VyZTogUnIociksIG9mZnNldDogUnIociksIGdhbW1hOiBScihyKSB9KSwgSChyLCBhKCkpOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgdmFyIGEgPSBlLmFkanVzdG1lbnQ7CiAgeChyLCAxKSwgVnIociwgYS5leHBvc3VyZSksIFZyKHIsIGEub2Zmc2V0KSwgVnIociwgYS5nYW1tYSksIFowKHIsIDIpOwp9KTsKcjAoInZpYkEiLCBpcigidmlicmFuY2UiKSwgZnVuY3Rpb24ociwgZSwgYSkgewogIHZhciBBID0gbTAocik7CiAgZS5hZGp1c3RtZW50ID0geyB0eXBlOiAidmlicmFuY2UiIH0sIEEudmlicmFuY2UgIT09IHZvaWQgMCAmJiAoZS5hZGp1c3RtZW50LnZpYnJhbmNlID0gQS52aWJyYW5jZSksIEEuU3RydCAhPT0gdm9pZCAwICYmIChlLmFkanVzdG1lbnQuc2F0dXJhdGlvbiA9IEEuU3RydCksIEgociwgYSgpKTsKfSwgZnVuY3Rpb24ociwgZSkgewogIHZhciBhID0gZS5hZGp1c3RtZW50LCBBID0ge307CiAgYS52aWJyYW5jZSAhPT0gdm9pZCAwICYmIChBLnZpYnJhbmNlID0gYS52aWJyYW5jZSksIGEuc2F0dXJhdGlvbiAhPT0gdm9pZCAwICYmIChBLlN0cnQgPSBhLnNhdHVyYXRpb24pLCBwMChyLCAiIiwgIm51bGwiLCBBKTsKfSk7CmZ1bmN0aW9uIHBhKHIpIHsKICByZXR1cm4gewogICAgYTogZzAociksCiAgICBiOiBnMChyKSwKICAgIGM6IGcwKHIpLAogICAgZDogZzAociksCiAgICBodWU6IGcwKHIpLAogICAgc2F0dXJhdGlvbjogZzAociksCiAgICBsaWdodG5lc3M6IGcwKHIpCiAgfTsKfQpmdW5jdGlvbiB3YShyLCBlKSB7CiAgdmFyIGEgPSBlIHx8IHt9OwogIEUwKHIsIGEuYSB8fCAwKSwgRTAociwgYS5iIHx8IDApLCBFMChyLCBhLmMgfHwgMCksIEUwKHIsIGEuZCB8fCAwKSwgRTAociwgYS5odWUgfHwgMCksIEUwKHIsIGEuc2F0dXJhdGlvbiB8fCAwKSwgRTAociwgYS5saWdodG5lc3MgfHwgMCk7Cn0KcjAoImh1ZTIiLCBpcigiaHVlL3NhdHVyYXRpb24iKSwgZnVuY3Rpb24ociwgZSwgYSkgewogIGlmIChQKHIpICE9PSAyKQogICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGh1ZTIgdmVyc2lvbiIpOwogIGUuYWRqdXN0bWVudCA9IGgoaCh7fSwgZS5hZGp1c3RtZW50KSwgeyB0eXBlOiAiaHVlL3NhdHVyYXRpb24iLCBtYXN0ZXI6IHBhKHIpLCByZWRzOiBwYShyKSwgeWVsbG93czogcGEociksIGdyZWVuczogcGEociksIGN5YW5zOiBwYShyKSwgYmx1ZXM6IHBhKHIpLCBtYWdlbnRhczogcGEocikgfSksIEgociwgYSgpKTsKfSwgZnVuY3Rpb24ociwgZSkgewogIHZhciBhID0gZS5hZGp1c3RtZW50OwogIHgociwgMiksIHdhKHIsIGEubWFzdGVyKSwgd2EociwgYS5yZWRzKSwgd2EociwgYS55ZWxsb3dzKSwgd2EociwgYS5ncmVlbnMpLCB3YShyLCBhLmN5YW5zKSwgd2EociwgYS5ibHVlcyksIHdhKHIsIGEubWFnZW50YXMpOwp9KTsKZnVuY3Rpb24gY0EocikgewogIHJldHVybiB7CiAgICBjeWFuUmVkOiBnMChyKSwKICAgIG1hZ2VudGFHcmVlbjogZzAociksCiAgICB5ZWxsb3dCbHVlOiBnMChyKQogIH07Cn0KZnVuY3Rpb24gc0EociwgZSkgewogIEUwKHIsIGUuY3lhblJlZCB8fCAwKSwgRTAociwgZS5tYWdlbnRhR3JlZW4gfHwgMCksIEUwKHIsIGUueWVsbG93Qmx1ZSB8fCAwKTsKfQpyMCgiYmxuYyIsIGlyKCJjb2xvciBiYWxhbmNlIiksIGZ1bmN0aW9uKHIsIGUsIGEpIHsKICBlLmFkanVzdG1lbnQgPSB7CiAgICB0eXBlOiAiY29sb3IgYmFsYW5jZSIsCiAgICBzaGFkb3dzOiBjQShyKSwKICAgIG1pZHRvbmVzOiBjQShyKSwKICAgIGhpZ2hsaWdodHM6IGNBKHIpLAogICAgcHJlc2VydmVMdW1pbm9zaXR5OiAhIU8ocikKICB9LCBIKHIsIGEoKSk7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICB2YXIgYSA9IGUuYWRqdXN0bWVudDsKICBzQShyLCBhLnNoYWRvd3MgfHwge30pLCBzQShyLCBhLm1pZHRvbmVzIHx8IHt9KSwgc0EociwgYS5oaWdobGlnaHRzIHx8IHt9KSwgVChyLCBhLnByZXNlcnZlTHVtaW5vc2l0eSA/IDEgOiAwKSwgWjAociwgMSk7Cn0pOwpyMCgiYmx3aCIsIGlyKCJibGFjayAmIHdoaXRlIiksIGZ1bmN0aW9uKHIsIGUsIGEpIHsKICB2YXIgQSA9IG0wKHIpOwogIGUuYWRqdXN0bWVudCA9IHsKICAgIHR5cGU6ICJibGFjayAmIHdoaXRlIiwKICAgIHJlZHM6IEFbIlJkICAiXSwKICAgIHllbGxvd3M6IEEuWWxsdywKICAgIGdyZWVuczogQVsiR3JuICJdLAogICAgY3lhbnM6IEFbIkN5biAiXSwKICAgIGJsdWVzOiBBWyJCbCAgIl0sCiAgICBtYWdlbnRhczogQS5NZ250LAogICAgdXNlVGludDogISFBLnVzZVRpbnQsCiAgICBwcmVzZXRLaW5kOiBBLmJ3UHJlc2V0S2luZCwKICAgIHByZXNldEZpbGVOYW1lOiBBLmJsYWNrQW5kV2hpdGVQcmVzZXRGaWxlTmFtZQogIH0sIEEudGludENvbG9yICE9PSB2b2lkIDAgJiYgKGUuYWRqdXN0bWVudC50aW50Q29sb3IgPSBTcihBLnRpbnRDb2xvcikpLCBIKHIsIGEoKSk7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICB2YXIgYSA9IGUuYWRqdXN0bWVudCwgQSA9IHsKICAgICJSZCAgIjogYS5yZWRzIHx8IDAsCiAgICBZbGx3OiBhLnllbGxvd3MgfHwgMCwKICAgICJHcm4gIjogYS5ncmVlbnMgfHwgMCwKICAgICJDeW4gIjogYS5jeWFucyB8fCAwLAogICAgIkJsICAiOiBhLmJsdWVzIHx8IDAsCiAgICBNZ250OiBhLm1hZ2VudGFzIHx8IDAsCiAgICB1c2VUaW50OiAhIWEudXNlVGludCwKICAgIHRpbnRDb2xvcjogRHIoYS50aW50Q29sb3IpLAogICAgYndQcmVzZXRLaW5kOiBhLnByZXNldEtpbmQgfHwgMCwKICAgIGJsYWNrQW5kV2hpdGVQcmVzZXRGaWxlTmFtZTogYS5wcmVzZXRGaWxlTmFtZSB8fCAiIgogIH07CiAgcDAociwgIiIsICJudWxsIiwgQSk7Cn0pOwpyMCgicGhmbCIsIGlyKCJwaG90byBmaWx0ZXIiKSwgZnVuY3Rpb24ociwgZSwgYSkgewogIHZhciBBID0gUChyKTsKICBpZiAoQSAhPT0gMiAmJiBBICE9PSAzKQogICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHBoZmwgdmVyc2lvbiIpOwogIHZhciB0OwogIEEgPT09IDIgPyB0ID0gSzAocikgOiB0ID0gewogICAgbDogTChyKSAvIDEwMCwKICAgIGE6IEwocikgLyAxMDAsCiAgICBiOiBMKHIpIC8gMTAwCiAgfSwgZS5hZGp1c3RtZW50ID0gewogICAgdHlwZTogInBob3RvIGZpbHRlciIsCiAgICBjb2xvcjogdCwKICAgIGRlbnNpdHk6IFMocikgLyAxMDAsCiAgICBwcmVzZXJ2ZUx1bWlub3NpdHk6ICEhTyhyKQogIH0sIEgociwgYSgpKTsKfSwgZnVuY3Rpb24ociwgZSkgewogIHZhciBhID0gZS5hZGp1c3RtZW50OwogIHgociwgMiksIHJyKHIsIGEuY29sb3IgfHwgeyBsOiAwLCBhOiAwLCBiOiAwIH0pLCBVKHIsIChhLmRlbnNpdHkgfHwgMCkgKiAxMDApLCBUKHIsIGEucHJlc2VydmVMdW1pbm9zaXR5ID8gMSA6IDApLCBaMChyLCAzKTsKfSk7CmZ1bmN0aW9uIGNlKHIpIHsKICB2YXIgZSA9IGcwKHIpLCBhID0gZzAociksIEEgPSBnMChyKTsKICBIKHIsIDIpOwogIHZhciB0ID0gZzAocik7CiAgcmV0dXJuIHsgcmVkOiBlLCBncmVlbjogYSwgYmx1ZTogQSwgY29uc3RhbnQ6IHQgfTsKfQpmdW5jdGlvbiBsMihyLCBlKSB7CiAgdmFyIGEgPSBlIHx8IHt9OwogIEUwKHIsIGEucmVkKSwgRTAociwgYS5ncmVlbiksIEUwKHIsIGEuYmx1ZSksIFowKHIsIDIpLCBFMChyLCBhLmNvbnN0YW50KTsKfQpyMCgibWl4ciIsIGlyKCJjaGFubmVsIG1peGVyIiksIGZ1bmN0aW9uKHIsIGUsIGEpIHsKICBpZiAoUChyKSAhPT0gMSkKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBtaXhyIHZlcnNpb24iKTsKICB2YXIgQSA9IGUuYWRqdXN0bWVudCA9IGgoaCh7fSwgZS5hZGp1c3RtZW50KSwgeyB0eXBlOiAiY2hhbm5lbCBtaXhlciIsIG1vbm9jaHJvbWU6ICEhUChyKSB9KTsKICBBLm1vbm9jaHJvbWUgfHwgKEEucmVkID0gY2UociksIEEuZ3JlZW4gPSBjZShyKSwgQS5ibHVlID0gY2UocikpLCBBLmdyYXkgPSBjZShyKSwgSChyLCBhKCkpOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgdmFyIGEgPSBlLmFkanVzdG1lbnQ7CiAgeChyLCAxKSwgeChyLCBhLm1vbm9jaHJvbWUgPyAxIDogMCksIGEubW9ub2Nocm9tZSA/IChsMihyLCBhLmdyYXkpLCBaMChyLCAzICogNSAqIDIpKSA6IChsMihyLCBhLnJlZCksIGwyKHIsIGEuZ3JlZW4pLCBsMihyLCBhLmJsdWUpLCBsMihyLCBhLmdyYXkpKTsKfSk7CnZhciBOaSA9IHUwKCJjb2xvckxvb2t1cFR5cGUiLCAiM0RMVVQiLCB7CiAgIjNkbHV0IjogIjNETFVUIiwKICBhYnN0cmFjdFByb2ZpbGU6ICJhYnN0cmFjdFByb2ZpbGUiLAogIGRldmljZUxpbmtQcm9maWxlOiAiZGV2aWNlTGlua1Byb2ZpbGUiCn0pLCBNaSA9IHUwKCJMVVRGb3JtYXRUeXBlIiwgImxvb2siLCB7CiAgbG9vazogIkxVVEZvcm1hdExPT0siLAogIGN1YmU6ICJMVVRGb3JtYXRDVUJFIiwKICAiM2RsIjogIkxVVEZvcm1hdDNETCIKfSksIHNlID0gdTAoImNvbG9yTG9va3VwT3JkZXIiLCAicmdiIiwgewogIHJnYjogInJnYk9yZGVyIiwKICBiZ3I6ICJiZ3JPcmRlciIKfSk7CnIwKCJjbHJMIiwgaXIoImNvbG9yIGxvb2t1cCIpLCBmdW5jdGlvbihyLCBlLCBhKSB7CiAgaWYgKFAocikgIT09IDEpCiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY2xyTCB2ZXJzaW9uIik7CiAgdmFyIEEgPSBtMChyKTsKICBlLmFkanVzdG1lbnQgPSB7IHR5cGU6ICJjb2xvciBsb29rdXAiIH07CiAgdmFyIHQgPSBlLmFkanVzdG1lbnQ7CiAgQS5sb29rdXBUeXBlICE9PSB2b2lkIDAgJiYgKHQubG9va3VwVHlwZSA9IE5pLmRlY29kZShBLmxvb2t1cFR5cGUpKSwgQVsiTm0gICJdICE9PSB2b2lkIDAgJiYgKHQubmFtZSA9IEFbIk5tICAiXSksIEEuRHRociAhPT0gdm9pZCAwICYmICh0LmRpdGhlciA9IEEuRHRociksIEEucHJvZmlsZSAhPT0gdm9pZCAwICYmICh0LnByb2ZpbGUgPSBBLnByb2ZpbGUpLCBBLkxVVEZvcm1hdCAhPT0gdm9pZCAwICYmICh0Lmx1dEZvcm1hdCA9IE1pLmRlY29kZShBLkxVVEZvcm1hdCkpLCBBLmRhdGFPcmRlciAhPT0gdm9pZCAwICYmICh0LmRhdGFPcmRlciA9IHNlLmRlY29kZShBLmRhdGFPcmRlcikpLCBBLnRhYmxlT3JkZXIgIT09IHZvaWQgMCAmJiAodC50YWJsZU9yZGVyID0gc2UuZGVjb2RlKEEudGFibGVPcmRlcikpLCBBLkxVVDNERmlsZURhdGEgIT09IHZvaWQgMCAmJiAodC5sdXQzREZpbGVEYXRhID0gQS5MVVQzREZpbGVEYXRhKSwgQS5MVVQzREZpbGVOYW1lICE9PSB2b2lkIDAgJiYgKHQubHV0M0RGaWxlTmFtZSA9IEEuTFVUM0RGaWxlTmFtZSksIEgociwgYSgpKTsKfSwgZnVuY3Rpb24ociwgZSkgewogIHZhciBhID0gZS5hZGp1c3RtZW50LCBBID0ge307CiAgYS5sb29rdXBUeXBlICE9PSB2b2lkIDAgJiYgKEEubG9va3VwVHlwZSA9IE5pLmVuY29kZShhLmxvb2t1cFR5cGUpKSwgYS5uYW1lICE9PSB2b2lkIDAgJiYgKEFbIk5tICAiXSA9IGEubmFtZSksIGEuZGl0aGVyICE9PSB2b2lkIDAgJiYgKEEuRHRociA9IGEuZGl0aGVyKSwgYS5wcm9maWxlICE9PSB2b2lkIDAgJiYgKEEucHJvZmlsZSA9IGEucHJvZmlsZSksIGEubHV0Rm9ybWF0ICE9PSB2b2lkIDAgJiYgKEEuTFVURm9ybWF0ID0gTWkuZW5jb2RlKGEubHV0Rm9ybWF0KSksIGEuZGF0YU9yZGVyICE9PSB2b2lkIDAgJiYgKEEuZGF0YU9yZGVyID0gc2UuZW5jb2RlKGEuZGF0YU9yZGVyKSksIGEudGFibGVPcmRlciAhPT0gdm9pZCAwICYmIChBLnRhYmxlT3JkZXIgPSBzZS5lbmNvZGUoYS50YWJsZU9yZGVyKSksIGEubHV0M0RGaWxlRGF0YSAhPT0gdm9pZCAwICYmIChBLkxVVDNERmlsZURhdGEgPSBhLmx1dDNERmlsZURhdGEpLCBhLmx1dDNERmlsZU5hbWUgIT09IHZvaWQgMCAmJiAoQS5MVVQzREZpbGVOYW1lID0gYS5sdXQzREZpbGVOYW1lKSwgeChyLCAxKSwgcDAociwgIiIsICJudWxsIiwgQSk7Cn0pOwpyMCgibnZydCIsIGlyKCJpbnZlcnQiKSwgZnVuY3Rpb24ociwgZSwgYSkgewogIGUuYWRqdXN0bWVudCA9IHsgdHlwZTogImludmVydCIgfSwgSChyLCBhKCkpOwp9LCBmdW5jdGlvbigpIHsKfSk7CnIwKCJwb3N0IiwgaXIoInBvc3Rlcml6ZSIpLCBmdW5jdGlvbihyLCBlLCBhKSB7CiAgZS5hZGp1c3RtZW50ID0gewogICAgdHlwZTogInBvc3Rlcml6ZSIsCiAgICBsZXZlbHM6IFAocikKICB9LCBIKHIsIGEoKSk7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICB2YXIgYSwgQSA9IGUuYWRqdXN0bWVudDsKICB4KHIsIChhID0gQS5sZXZlbHMpICE9PSBudWxsICYmIGEgIT09IHZvaWQgMCA/IGEgOiA0KSwgWjAociwgMik7Cn0pOwpyMCgidGhycyIsIGlyKCJ0aHJlc2hvbGQiKSwgZnVuY3Rpb24ociwgZSwgYSkgewogIGUuYWRqdXN0bWVudCA9IHsKICAgIHR5cGU6ICJ0aHJlc2hvbGQiLAogICAgbGV2ZWw6IFAocikKICB9LCBIKHIsIGEoKSk7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICB2YXIgYSwgQSA9IGUuYWRqdXN0bWVudDsKICB4KHIsIChhID0gQS5sZXZlbCkgIT09IG51bGwgJiYgYSAhPT0gdm9pZCAwID8gYSA6IDEyOCksIFowKHIsIDIpOwp9KTsKdmFyIFRpID0gWyIiLCAiIiwgIiIsICJyZ2IiLCAiaHNiIiwgIiIsICJsYWIiXTsKcjAoImdyZG0iLCBpcigiZ3JhZGllbnQgbWFwIiksIGZ1bmN0aW9uKHIsIGUsIGEpIHsKICB2YXIgQSA9IFAocik7CiAgaWYgKEEgIT09IDEgJiYgQSAhPT0gMykKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBncmRtIHZlcnNpb24iKTsKICB2YXIgdCA9IHsKICAgIHR5cGU6ICJncmFkaWVudCBtYXAiLAogICAgZ3JhZGllbnRUeXBlOiAic29saWQiCiAgfTsKICB0LnJldmVyc2UgPSAhIU8ociksIHQuZGl0aGVyID0gISFPKHIpOwogIHZhciBpID0gISFPKHIpOwogIGlmIChyLm9mZnNldC0tLCBpKSB7CiAgICB2YXIgbiA9IFIwKHIpOwogICAgdC5tZXRob2QgPSBMYS5kZWNvZGUobik7CiAgfQogIHQubmFtZSA9IHowKHIpLCB0LmNvbG9yU3RvcHMgPSBbXSwgdC5vcGFjaXR5U3RvcHMgPSBbXTsKICBmb3IgKHZhciBmID0gUChyKSwgdSA9IDA7IHUgPCBmOyB1KyspCiAgICB0LmNvbG9yU3RvcHMucHVzaCh7CiAgICAgIGxvY2F0aW9uOiBTKHIpLAogICAgICBtaWRwb2ludDogUyhyKSAvIDEwMCwKICAgICAgY29sb3I6IEswKHIpCiAgICB9KSwgSChyLCAyKTsKICBmb3IgKHZhciBvID0gUChyKSwgdSA9IDA7IHUgPCBvOyB1KyspCiAgICB0Lm9wYWNpdHlTdG9wcy5wdXNoKHsKICAgICAgbG9jYXRpb246IFMociksCiAgICAgIG1pZHBvaW50OiBTKHIpIC8gMTAwLAogICAgICBvcGFjaXR5OiBQKHIpIC8gMjU1CiAgICB9KTsKICB2YXIgbCA9IFAocik7CiAgaWYgKGwgIT09IDIpCiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgZ3JkbSBleHBhbnNpb24gY291bnQiKTsKICB2YXIgcyA9IFAocik7CiAgdC5zbW9vdGhuZXNzID0gcyAvIDQwOTY7CiAgdmFyIGMgPSBQKHIpOwogIGlmIChjICE9PSAzMikKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBncmRtIGxlbmd0aCIpOwogIHQuZ3JhZGllbnRUeXBlID0gUChyKSA/ICJub2lzZSIgOiAic29saWQiLCB0LnJhbmRvbVNlZWQgPSBTKHIpLCB0LmFkZFRyYW5zcGFyZW5jeSA9ICEhUChyKSwgdC5yZXN0cmljdENvbG9ycyA9ICEhUChyKSwgdC5yb3VnaG5lc3MgPSBTKHIpIC8gNDA5NiwgdC5jb2xvck1vZGVsID0gVGlbUChyKV0gfHwgInJnYiIsIHQubWluID0gWwogICAgUChyKSAvIDMyNzY4LAogICAgUChyKSAvIDMyNzY4LAogICAgUChyKSAvIDMyNzY4LAogICAgUChyKSAvIDMyNzY4CiAgXSwgdC5tYXggPSBbCiAgICBQKHIpIC8gMzI3NjgsCiAgICBQKHIpIC8gMzI3NjgsCiAgICBQKHIpIC8gMzI3NjgsCiAgICBQKHIpIC8gMzI3NjgKICBdLCBIKHIsIGEoKSk7CiAgZm9yICh2YXIgZCA9IDAsIHYgPSB0LmNvbG9yU3RvcHM7IGQgPCB2Lmxlbmd0aDsgZCsrKSB7CiAgICB2YXIgayA9IHZbZF07CiAgICBrLmxvY2F0aW9uIC89IHM7CiAgfQogIGZvciAodmFyIEUgPSAwLCBnID0gdC5vcGFjaXR5U3RvcHM7IEUgPCBnLmxlbmd0aDsgRSsrKSB7CiAgICB2YXIgayA9IGdbRV07CiAgICBrLmxvY2F0aW9uIC89IHM7CiAgfQogIGUuYWRqdXN0bWVudCA9IHQ7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICB2YXIgYSwgQSwgdCwgaSA9IGUuYWRqdXN0bWVudDsKICB4KHIsIGkubWV0aG9kICE9PSB2b2lkIDAgPyAzIDogMSksIFQociwgaS5yZXZlcnNlID8gMSA6IDApLCBUKHIsIGkuZGl0aGVyID8gMSA6IDApLCBpLm1ldGhvZCAhPT0gdm9pZCAwICYmIG4wKHIsIExhLmVuY29kZShpLm1ldGhvZCkpLCBXYShyLCBpLm5hbWUgfHwgIiIpLCB4KHIsIGkuY29sb3JTdG9wcyAmJiBpLmNvbG9yU3RvcHMubGVuZ3RoIHx8IDApOwogIGZvciAodmFyIG4gPSBNYXRoLnJvdW5kKCgoYSA9IGkuc21vb3RobmVzcykgIT09IG51bGwgJiYgYSAhPT0gdm9pZCAwID8gYSA6IDEpICogNDA5NiksIGYgPSAwLCB1ID0gaS5jb2xvclN0b3BzIHx8IFtdOyBmIDwgdS5sZW5ndGg7IGYrKykgewogICAgdmFyIG8gPSB1W2ZdOwogICAgVShyLCBNYXRoLnJvdW5kKG8ubG9jYXRpb24gKiBuKSksIFUociwgTWF0aC5yb3VuZChvLm1pZHBvaW50ICogMTAwKSksIHJyKHIsIG8uY29sb3IpLCBaMChyLCAyKTsKICB9CiAgeChyLCBpLm9wYWNpdHlTdG9wcyAmJiBpLm9wYWNpdHlTdG9wcy5sZW5ndGggfHwgMCk7CiAgZm9yICh2YXIgbCA9IDAsIHMgPSBpLm9wYWNpdHlTdG9wcyB8fCBbXTsgbCA8IHMubGVuZ3RoOyBsKyspIHsKICAgIHZhciBvID0gc1tsXTsKICAgIFUociwgTWF0aC5yb3VuZChvLmxvY2F0aW9uICogbikpLCBVKHIsIE1hdGgucm91bmQoby5taWRwb2ludCAqIDEwMCkpLCB4KHIsIE1hdGgucm91bmQoby5vcGFjaXR5ICogMjU1KSk7CiAgfQogIHgociwgMiksIHgociwgbiksIHgociwgMzIpLCB4KHIsIGkuZ3JhZGllbnRUeXBlID09PSAibm9pc2UiID8gMSA6IDApLCBVKHIsIGkucmFuZG9tU2VlZCB8fCAwKSwgeChyLCBpLmFkZFRyYW5zcGFyZW5jeSA/IDEgOiAwKSwgeChyLCBpLnJlc3RyaWN0Q29sb3JzID8gMSA6IDApLCBVKHIsIE1hdGgucm91bmQoKChBID0gaS5yb3VnaG5lc3MpICE9PSBudWxsICYmIEEgIT09IHZvaWQgMCA/IEEgOiAxKSAqIDQwOTYpKTsKICB2YXIgYyA9IFRpLmluZGV4T2YoKHQgPSBpLmNvbG9yTW9kZWwpICE9PSBudWxsICYmIHQgIT09IHZvaWQgMCA/IHQgOiAicmdiIik7CiAgeChyLCBjID09PSAtMSA/IDMgOiBjKTsKICBmb3IgKHZhciBkID0gMDsgZCA8IDQ7IGQrKykKICAgIHgociwgTWF0aC5yb3VuZCgoaS5taW4gJiYgaS5taW5bZF0gfHwgMCkgKiAzMjc2OCkpOwogIGZvciAodmFyIGQgPSAwOyBkIDwgNDsgZCsrKQogICAgeChyLCBNYXRoLnJvdW5kKChpLm1heCAmJiBpLm1heFtkXSB8fCAwKSAqIDMyNzY4KSk7CiAgWjAociwgNCk7Cn0pOwpmdW5jdGlvbiBMcihyKSB7CiAgcmV0dXJuIHsKICAgIGM6IGcwKHIpLAogICAgbTogZzAociksCiAgICB5OiBnMChyKSwKICAgIGs6IGcwKHIpCiAgfTsKfQpmdW5jdGlvbiBLcihyLCBlKSB7CiAgdmFyIGEgPSBlIHx8IHt9OwogIEUwKHIsIGEuYyksIEUwKHIsIGEubSksIEUwKHIsIGEueSksIEUwKHIsIGEuayk7Cn0KcjAoInNlbGMiLCBpcigic2VsZWN0aXZlIGNvbG9yIiksIGZ1bmN0aW9uKHIsIGUpIHsKICBpZiAoUChyKSAhPT0gMSkKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzZWxjIHZlcnNpb24iKTsKICB2YXIgYSA9IFAocikgPyAiYWJzb2x1dGUiIDogInJlbGF0aXZlIjsKICBIKHIsIDgpLCBlLmFkanVzdG1lbnQgPSB7CiAgICB0eXBlOiAic2VsZWN0aXZlIGNvbG9yIiwKICAgIG1vZGU6IGEsCiAgICByZWRzOiBMcihyKSwKICAgIHllbGxvd3M6IExyKHIpLAogICAgZ3JlZW5zOiBMcihyKSwKICAgIGN5YW5zOiBMcihyKSwKICAgIGJsdWVzOiBMcihyKSwKICAgIG1hZ2VudGFzOiBMcihyKSwKICAgIHdoaXRlczogTHIociksCiAgICBuZXV0cmFsczogTHIociksCiAgICBibGFja3M6IExyKHIpCiAgfTsKfSwgZnVuY3Rpb24ociwgZSkgewogIHZhciBhID0gZS5hZGp1c3RtZW50OwogIHgociwgMSksIHgociwgYS5tb2RlID09PSAiYWJzb2x1dGUiID8gMSA6IDApLCBaMChyLCA4KSwgS3IociwgYS5yZWRzKSwgS3IociwgYS55ZWxsb3dzKSwgS3IociwgYS5ncmVlbnMpLCBLcihyLCBhLmN5YW5zKSwgS3IociwgYS5ibHVlcyksIEtyKHIsIGEubWFnZW50YXMpLCBLcihyLCBhLndoaXRlcyksIEtyKHIsIGEubmV1dHJhbHMpLCBLcihyLCBhLmJsYWNrcyk7Cn0pOwpyMCgiQ2dFZCIsIGZ1bmN0aW9uKHIpIHsKICB2YXIgZSA9IHIuYWRqdXN0bWVudDsKICByZXR1cm4gZSA/IGUudHlwZSA9PT0gImJyaWdodG5lc3MvY29udHJhc3QiICYmICFlLnVzZUxlZ2FjeSB8fCAoZS50eXBlID09PSAibGV2ZWxzIiB8fCBlLnR5cGUgPT09ICJjdXJ2ZXMiIHx8IGUudHlwZSA9PT0gImV4cG9zdXJlIiB8fCBlLnR5cGUgPT09ICJjaGFubmVsIG1peGVyIiB8fCBlLnR5cGUgPT09ICJodWUvc2F0dXJhdGlvbiIpICYmIGUucHJlc2V0RmlsZU5hbWUgIT09IHZvaWQgMCA6ICExOwp9LCBmdW5jdGlvbihyLCBlLCBhKSB7CiAgdmFyIEEgPSBtMChyKTsKICBpZiAoQS5WcnNuICE9PSAxKQogICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIENnRWQgdmVyc2lvbiIpOwogICJwcmVzZXRGaWxlTmFtZSIgaW4gQSA/IGUuYWRqdXN0bWVudCA9IGgoaCh7fSwgZS5hZGp1c3RtZW50KSwgeyBwcmVzZXRLaW5kOiBBLnByZXNldEtpbmQsIHByZXNldEZpbGVOYW1lOiBBLnByZXNldEZpbGVOYW1lIH0pIDogImN1cnZlc1ByZXNldEZpbGVOYW1lIiBpbiBBID8gZS5hZGp1c3RtZW50ID0gaChoKHt9LCBlLmFkanVzdG1lbnQpLCB7IHByZXNldEtpbmQ6IEEuY3VydmVzUHJlc2V0S2luZCwgcHJlc2V0RmlsZU5hbWU6IEEuY3VydmVzUHJlc2V0RmlsZU5hbWUgfSkgOiAibWl4ZXJQcmVzZXRGaWxlTmFtZSIgaW4gQSA/IGUuYWRqdXN0bWVudCA9IGgoaCh7fSwgZS5hZGp1c3RtZW50KSwgeyBwcmVzZXRLaW5kOiBBLm1peGVyUHJlc2V0S2luZCwgcHJlc2V0RmlsZU5hbWU6IEEubWl4ZXJQcmVzZXRGaWxlTmFtZSB9KSA6IGUuYWRqdXN0bWVudCA9IHsKICAgIHR5cGU6ICJicmlnaHRuZXNzL2NvbnRyYXN0IiwKICAgIGJyaWdodG5lc3M6IEEuQnJnaCwKICAgIGNvbnRyYXN0OiBBLkNudHIsCiAgICBtZWFuVmFsdWU6IEEubWVhbnMsCiAgICB1c2VMZWdhY3k6ICEhQS51c2VMZWdhY3ksCiAgICBsYWJDb2xvck9ubHk6ICEhQVsiTGFiICJdLAogICAgYXV0bzogISFBLkF1dG8KICB9LCBIKHIsIGEoKSk7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICB2YXIgYSwgQSwgdCwgaSwgbiA9IGUuYWRqdXN0bWVudDsKICBpZiAobi50eXBlID09PSAibGV2ZWxzIiB8fCBuLnR5cGUgPT09ICJleHBvc3VyZSIgfHwgbi50eXBlID09PSAiaHVlL3NhdHVyYXRpb24iKSB7CiAgICB2YXIgZiA9IHsKICAgICAgVnJzbjogMSwKICAgICAgcHJlc2V0S2luZDogKGEgPSBuLnByZXNldEtpbmQpICE9PSBudWxsICYmIGEgIT09IHZvaWQgMCA/IGEgOiAxLAogICAgICBwcmVzZXRGaWxlTmFtZTogbi5wcmVzZXRGaWxlTmFtZSB8fCAiIgogICAgfTsKICAgIHAwKHIsICIiLCAibnVsbCIsIGYpOwogIH0gZWxzZSBpZiAobi50eXBlID09PSAiY3VydmVzIikgewogICAgdmFyIGYgPSB7CiAgICAgIFZyc246IDEsCiAgICAgIGN1cnZlc1ByZXNldEtpbmQ6IChBID0gbi5wcmVzZXRLaW5kKSAhPT0gbnVsbCAmJiBBICE9PSB2b2lkIDAgPyBBIDogMSwKICAgICAgY3VydmVzUHJlc2V0RmlsZU5hbWU6IG4ucHJlc2V0RmlsZU5hbWUgfHwgIiIKICAgIH07CiAgICBwMChyLCAiIiwgIm51bGwiLCBmKTsKICB9IGVsc2UgaWYgKG4udHlwZSA9PT0gImNoYW5uZWwgbWl4ZXIiKSB7CiAgICB2YXIgZiA9IHsKICAgICAgVnJzbjogMSwKICAgICAgbWl4ZXJQcmVzZXRLaW5kOiAodCA9IG4ucHJlc2V0S2luZCkgIT09IG51bGwgJiYgdCAhPT0gdm9pZCAwID8gdCA6IDEsCiAgICAgIG1peGVyUHJlc2V0RmlsZU5hbWU6IG4ucHJlc2V0RmlsZU5hbWUgfHwgIiIKICAgIH07CiAgICBwMChyLCAiIiwgIm51bGwiLCBmKTsKICB9IGVsc2UgaWYgKG4udHlwZSA9PT0gImJyaWdodG5lc3MvY29udHJhc3QiKSB7CiAgICB2YXIgZiA9IHsKICAgICAgVnJzbjogMSwKICAgICAgQnJnaDogbi5icmlnaHRuZXNzIHx8IDAsCiAgICAgIENudHI6IG4uY29udHJhc3QgfHwgMCwKICAgICAgbWVhbnM6IChpID0gbi5tZWFuVmFsdWUpICE9PSBudWxsICYmIGkgIT09IHZvaWQgMCA/IGkgOiAxMjcsCiAgICAgICJMYWIgIjogISFuLmxhYkNvbG9yT25seSwKICAgICAgdXNlTGVnYWN5OiAhIW4udXNlTGVnYWN5LAogICAgICBBdXRvOiAhIW4uYXV0bwogICAgfTsKICAgIHAwKHIsICIiLCAibnVsbCIsIGYpOwogIH0gZWxzZQogICAgdGhyb3cgbmV3IEVycm9yKCJVbmhhbmRsZWQgQ2dFZCBjYXNlIik7Cn0pOwpmdW5jdGlvbiBDNChyKSB7CiAgdmFyIGUgPSBbXTsKICBmdW5jdGlvbiBhKEEpIHsKICAgIHZhciB0OwogICAgaWYgKEEuY2hpbGRyZW4pCiAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gQS5jaGlsZHJlbjsgaSA8IG4ubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIgZiA9IG5baV07CiAgICAgICAgKCh0ID0gZi50ZXh0KSA9PT0gbnVsbCB8fCB0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0LmluZGV4KSAhPT0gdm9pZCAwICYmIChlW2YudGV4dC5pbmRleF0gPSBmKSwgYShmKTsKICAgICAgfQogIH0KICByZXR1cm4gYShyKSwgZTsKfQpyMCgiVHh0MiIsIFgwKCJlbmdpbmVEYXRhIiksIGZ1bmN0aW9uKHIsIGUsIGEsIEEpIHsKICB2YXIgdCA9IFkwKHIsIGEoKSk7CiAgZS5lbmdpbmVEYXRhID0geG4odCk7CiAgdmFyIGkgPSBDNChBKSwgbiA9IGoxKHQpLCBmID0gcDQobiksIHUgPSBmLlJlc291cmNlRGljdC5UZXh0RnJhbWVTZXQ7CiAgaWYgKHUpCiAgICBmb3IgKHZhciBvID0gMDsgbyA8IHUubGVuZ3RoOyBvKyspIHsKICAgICAgdmFyIGwgPSBpW29dOwogICAgICB1W29dLnBhdGggJiYgKGwgIT0gbnVsbCAmJiBsLnRleHQpICYmIChsLnRleHQudGV4dFBhdGggPSB1W29dLnBhdGgpOwogICAgfQp9LCBmdW5jdGlvbihyLCBlKSB7CiAgdmFyIGEgPSBEbihlLmVuZ2luZURhdGEpOwogIE5yKHIsIGEpOwp9KTsKcjAoIkZFaWQiLCBYMCgiZmlsdGVyRWZmZWN0c01hc2tzIiksIGZ1bmN0aW9uKHIsIGUsIGEpIHsKICB2YXIgQSA9IEwocik7CiAgaWYgKEEgPCAxIHx8IEEgPiAzKQogICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGZpbHRlckVmZmVjdHMgdmVyc2lvbiAiLmNvbmNhdChBKSk7CiAgZm9yIChlLmZpbHRlckVmZmVjdHNNYXNrcyA9IFtdOyBhKCkgPiA4OyApIHsKICAgIGlmIChTKHIpKQogICAgICB0aHJvdyBuZXcgRXJyb3IoImZpbHRlckVmZmVjdHM6IDY0IGJpdCBsZW5ndGggaXMgbm90IHN1cHBvcnRlZCIpOwogICAgdmFyIHQgPSBTKHIpLCBpID0gci5vZmZzZXQgKyB0LCBuID0geHIociwgMSksIGYgPSBMKHIpOwogICAgaWYgKGYgIT09IDEpCiAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBmaWx0ZXJFZmZlY3QgdmVyc2lvbiAiLmNvbmNhdChmKSk7CiAgICBpZiAoUyhyKSkKICAgICAgdGhyb3cgbmV3IEVycm9yKCJmaWx0ZXJFZmZlY3Q6IDY0IGJpdCBsZW5ndGggaXMgbm90IHN1cHBvcnRlZCIpOwogICAgUyhyKTsKICAgIGZvciAodmFyIHUgPSBMKHIpLCBvID0gTChyKSwgbCA9IEwociksIHMgPSBMKHIpLCBjID0gTChyKSwgZCA9IEwociksIHYgPSBbXSwgayA9IDA7IGsgPCBkICsgMjsgaysrKSB7CiAgICAgIHZhciBFID0gTChyKTsKICAgICAgaWYgKEUpIHsKICAgICAgICBpZiAoUyhyKSkKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiZmlsdGVyRWZmZWN0OiA2NCBiaXQgbGVuZ3RoIGlzIG5vdCBzdXBwb3J0ZWQiKTsKICAgICAgICB2YXIgZyA9IFMocik7CiAgICAgICAgaWYgKCFnKQogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJmaWx0ZXJFZmZlY3Q6IEVtcHR5IGNoYW5uZWwiKTsKICAgICAgICB2YXIgdyA9IFAociksIEIgPSBZMChyLCBnIC0gMik7CiAgICAgICAgdi5wdXNoKHsgY29tcHJlc3Npb25Nb2RlOiB3LCBkYXRhOiBCIH0pOwogICAgICB9IGVsc2UKICAgICAgICB2LnB1c2godm9pZCAwKTsKICAgIH0KICAgIGlmIChlLmZpbHRlckVmZmVjdHNNYXNrcy5wdXNoKHsgaWQ6IG4sIHRvcDogdSwgbGVmdDogbywgYm90dG9tOiBsLCByaWdodDogcywgZGVwdGg6IGMsIGNoYW5uZWxzOiB2IH0pLCByLm9mZnNldCA8IGkgJiYgTyhyKSkgewogICAgICB2YXIgbSA9IEwociksIHAgPSBMKHIpLCBXID0gTChyKSwgQyA9IEwocik7CiAgICAgIGlmIChTKHIpKQogICAgICAgIHRocm93IG5ldyBFcnJvcigiZmlsdGVyRWZmZWN0OiA2NCBiaXQgbGVuZ3RoIGlzIG5vdCBzdXBwb3J0ZWQiKTsKICAgICAgdmFyIF8gPSBTKHIpLCB3ID0gUChyKSwgQiA9IFkwKHIsIF8gLSAyKTsKICAgICAgZS5maWx0ZXJFZmZlY3RzTWFza3NbZS5maWx0ZXJFZmZlY3RzTWFza3MubGVuZ3RoIC0gMV0uZXh0cmEgPSB7IHRvcDogbSwgbGVmdDogcCwgYm90dG9tOiBXLCByaWdodDogQywgY29tcHJlc3Npb25Nb2RlOiB3LCBkYXRhOiBCIH07CiAgICB9CiAgICByLm9mZnNldCA9IGk7CiAgICBmb3IgKHZhciBOID0gdDsgTiAlIDQ7ICkKICAgICAgci5vZmZzZXQrKywgTisrOwogIH0KfSwgZnVuY3Rpb24ociwgZSkgewogIHZhciBhOwogIHQwKHIsIDMpOwogIGZvciAodmFyIEEgPSAwLCB0ID0gZS5maWx0ZXJFZmZlY3RzTWFza3M7IEEgPCB0Lmxlbmd0aDsgQSsrKSB7CiAgICB2YXIgaSA9IHRbQV07CiAgICBVKHIsIDApLCBVKHIsIDApOwogICAgdmFyIG4gPSByLm9mZnNldDsKICAgIGthKHIsIGkuaWQsIDEpLCB0MChyLCAxKSwgVShyLCAwKSwgVShyLCAwKTsKICAgIHZhciBmID0gci5vZmZzZXQ7CiAgICB0MChyLCBpLnRvcCksIHQwKHIsIGkubGVmdCksIHQwKHIsIGkuYm90dG9tKSwgdDAociwgaS5yaWdodCksIHQwKHIsIGkuZGVwdGgpOwogICAgdmFyIHUgPSBNYXRoLm1heCgwLCBpLmNoYW5uZWxzLmxlbmd0aCAtIDIpOwogICAgdDAociwgdSk7CiAgICBmb3IgKHZhciBvID0gMDsgbyA8IHUgKyAyOyBvKyspIHsKICAgICAgdmFyIGwgPSBpLmNoYW5uZWxzW29dOwogICAgICB0MChyLCBsID8gMSA6IDApLCBsICYmIChVKHIsIDApLCBVKHIsIGwuZGF0YS5sZW5ndGggKyAyKSwgeChyLCBsLmNvbXByZXNzaW9uTW9kZSksIE5yKHIsIGwuZGF0YSkpOwogICAgfQogICAgci52aWV3LnNldFVpbnQzMihmIC0gNCwgci5vZmZzZXQgLSBmLCAhMSk7CiAgICB2YXIgcyA9IChhID0gZS5maWx0ZXJFZmZlY3RzTWFza3NbZS5maWx0ZXJFZmZlY3RzTWFza3MubGVuZ3RoIC0gMV0pID09PSBudWxsIHx8IGEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGEuZXh0cmE7CiAgICBzICYmIChUKHIsIDEpLCB0MChyLCBzLnRvcCksIHQwKHIsIHMubGVmdCksIHQwKHIsIHMuYm90dG9tKSwgdDAociwgcy5yaWdodCksIFUociwgMCksIFUociwgcy5kYXRhLmJ5dGVMZW5ndGggKyAyKSwgeChyLCBzLmNvbXByZXNzaW9uTW9kZSksIE5yKHIsIHMuZGF0YSkpOwogICAgdmFyIGMgPSByLm9mZnNldCAtIG47CiAgICBmb3IgKHIudmlldy5zZXRVaW50MzIobiAtIDQsIGMsICExKTsgYyAlIDQ7ICkKICAgICAgWjAociwgMSksIGMrKzsKICB9Cn0pOwplMigiRlhpZCIsICJGRWlkIik7CnIwKCJGTXNrIiwgWDAoImZpbHRlck1hc2siKSwgZnVuY3Rpb24ociwgZSkgewogIGUuZmlsdGVyTWFzayA9IHsKICAgIGNvbG9yU3BhY2U6IEswKHIpLAogICAgb3BhY2l0eTogUChyKSAvIDI1NQogIH07Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICB2YXIgYTsKICBycihyLCBlLmZpbHRlck1hc2suY29sb3JTcGFjZSksIHgociwgTUEoKGEgPSBlLmZpbHRlck1hc2sub3BhY2l0eSkgIT09IG51bGwgJiYgYSAhPT0gdm9pZCAwID8gYSA6IDEsIDAsIDEpICogMjU1KTsKfSk7CnIwKAogICJhcnRkIiwKICAvLyBkb2N1bWVudC13aWRlIGFydGJvYXJkIGluZm8KICBmdW5jdGlvbihyKSB7CiAgICByZXR1cm4gci5hcnRib2FyZHMgIT09IHZvaWQgMDsKICB9LAogIGZ1bmN0aW9uKHIsIGUsIGEpIHsKICAgIHZhciBBID0gbTAocik7CiAgICBlLmFydGJvYXJkcyA9IHsKICAgICAgY291bnQ6IEFbIkNudCAiXSwKICAgICAgYXV0b0V4cGFuZE9mZnNldDogeyBob3Jpem9udGFsOiBBLmF1dG9FeHBhbmRPZmZzZXQuSHJ6biwgdmVydGljYWw6IEEuYXV0b0V4cGFuZE9mZnNldC5WcnRjIH0sCiAgICAgIG9yaWdpbjogeyBob3Jpem9udGFsOiBBLm9yaWdpbi5IcnpuLCB2ZXJ0aWNhbDogQS5vcmlnaW4uVnJ0YyB9LAogICAgICBhdXRvRXhwYW5kRW5hYmxlZDogQS5hdXRvRXhwYW5kRW5hYmxlZCwKICAgICAgYXV0b05lc3RFbmFibGVkOiBBLmF1dG9OZXN0RW5hYmxlZCwKICAgICAgYXV0b1Bvc2l0aW9uRW5hYmxlZDogQS5hdXRvUG9zaXRpb25FbmFibGVkLAogICAgICBzaHJpbmt3cmFwT25TYXZlRW5hYmxlZDogISFBLnNocmlua3dyYXBPblNhdmVFbmFibGVkLAogICAgICBkb2NEZWZhdWx0TmV3QXJ0Ym9hcmRCYWNrZ3JvdW5kQ29sb3I6IFNyKEEuZG9jRGVmYXVsdE5ld0FydGJvYXJkQmFja2dyb3VuZENvbG9yKSwKICAgICAgZG9jRGVmYXVsdE5ld0FydGJvYXJkQmFja2dyb3VuZFR5cGU6IEEuZG9jRGVmYXVsdE5ld0FydGJvYXJkQmFja2dyb3VuZFR5cGUKICAgIH0sIEgociwgYSgpKTsKICB9LAogIGZ1bmN0aW9uKHIsIGUpIHsKICAgIHZhciBhLCBBLCB0LCBpLCBuLCBmID0gZS5hcnRib2FyZHMsIHUgPSB7CiAgICAgICJDbnQgIjogZi5jb3VudCwKICAgICAgYXV0b0V4cGFuZE9mZnNldDogZi5hdXRvRXhwYW5kT2Zmc2V0ID8geyBIcnpuOiBmLmF1dG9FeHBhbmRPZmZzZXQuaG9yaXpvbnRhbCwgVnJ0YzogZi5hdXRvRXhwYW5kT2Zmc2V0LnZlcnRpY2FsIH0gOiB7IEhyem46IDAsIFZydGM6IDAgfSwKICAgICAgb3JpZ2luOiBmLm9yaWdpbiA/IHsgSHJ6bjogZi5vcmlnaW4uaG9yaXpvbnRhbCwgVnJ0YzogZi5vcmlnaW4udmVydGljYWwgfSA6IHsgSHJ6bjogMCwgVnJ0YzogMCB9LAogICAgICBhdXRvRXhwYW5kRW5hYmxlZDogKGEgPSBmLmF1dG9FeHBhbmRFbmFibGVkKSAhPT0gbnVsbCAmJiBhICE9PSB2b2lkIDAgPyBhIDogITAsCiAgICAgIGF1dG9OZXN0RW5hYmxlZDogKEEgPSBmLmF1dG9OZXN0RW5hYmxlZCkgIT09IG51bGwgJiYgQSAhPT0gdm9pZCAwID8gQSA6ICEwLAogICAgICBhdXRvUG9zaXRpb25FbmFibGVkOiAodCA9IGYuYXV0b1Bvc2l0aW9uRW5hYmxlZCkgIT09IG51bGwgJiYgdCAhPT0gdm9pZCAwID8gdCA6ICEwLAogICAgICBzaHJpbmt3cmFwT25TYXZlRW5hYmxlZDogKGkgPSBmLnNocmlua3dyYXBPblNhdmVFbmFibGVkKSAhPT0gbnVsbCAmJiBpICE9PSB2b2lkIDAgPyBpIDogITAsCiAgICAgIGRvY0RlZmF1bHROZXdBcnRib2FyZEJhY2tncm91bmRDb2xvcjogRHIoZi5kb2NEZWZhdWx0TmV3QXJ0Ym9hcmRCYWNrZ3JvdW5kQ29sb3IpLAogICAgICBkb2NEZWZhdWx0TmV3QXJ0Ym9hcmRCYWNrZ3JvdW5kVHlwZTogKG4gPSBmLmRvY0RlZmF1bHROZXdBcnRib2FyZEJhY2tncm91bmRUeXBlKSAhPT0gbnVsbCAmJiBuICE9PSB2b2lkIDAgPyBuIDogMQogICAgfTsKICAgIHAwKHIsICIiLCAibnVsbCIsIHUsICJhcnRkIik7CiAgfQopOwpmdW5jdGlvbiB0ZihyKSB7CiAgcmV0dXJuIE9iamVjdC5rZXlzKHIpLm1hcChmdW5jdGlvbihlKSB7CiAgICByZXR1cm4gcltlXTsKICB9KS5zb21lKGZ1bmN0aW9uKGUpIHsKICAgIHJldHVybiBBcnJheS5pc0FycmF5KGUpICYmIGUubGVuZ3RoID4gMTsKICB9KTsKfQpyMCgibGZ4MiIsIGZ1bmN0aW9uKHIpIHsKICByZXR1cm4gci5lZmZlY3RzICE9PSB2b2lkIDAgJiYgIXRmKHIuZWZmZWN0cyk7Cn0sIGZ1bmN0aW9uKHIsIGUsIGEpIHsKICB2YXIgQSA9IFMocik7CiAgaWYgKEEgIT09IDApCiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbGZ4MiB2ZXJzaW9uIik7CiAgdmFyIHQgPSBtMChyKTsKICBlLmVmZmVjdHMgPSBTMih0LCAhIXIubG9nTWlzc2luZ0ZlYXR1cmVzKSwgSChyLCBhKCkpOwp9LCBmdW5jdGlvbihyLCBlLCBhLCBBKSB7CiAgdmFyIHQgPSBWMihlLmVmZmVjdHMsICEhQS5sb2dNaXNzaW5nRmVhdHVyZXMsICEwKTsKICBVKHIsIDApLCBwMChyLCAiIiwgIm51bGwiLCB0KTsKfSk7CnIwKCJjaW5mIiwgWDAoImNvbXBvc2l0b3JVc2VkIiksIGZ1bmN0aW9uKHIsIGUsIGEpIHsKICB2YXIgQSA9IG0wKHIpOwogIGZ1bmN0aW9uIHQoaSkgewogICAgcmV0dXJuIGkuc3BsaXQoIi4iKVsxXTsKICB9CiAgZS5jb21wb3NpdG9yVXNlZCA9IHsKICAgIGRlc2NyaXB0aW9uOiBBLmRlc2NyaXB0aW9uLAogICAgcmVhc29uOiBBLnJlYXNvbiwKICAgIGVuZ2luZTogdChBLkVuZ24pCiAgfSwgQS5WcnNuICYmIChlLmNvbXBvc2l0b3JVc2VkLnZlcnNpb24gPSBBLlZyc24pLCBBLnBzVmVyc2lvbiAmJiAoZS5jb21wb3NpdG9yVXNlZC5waG90b3Nob3BWZXJzaW9uID0gQS5wc1ZlcnNpb24pLCBBLmVuYWJsZUNvbXBDb3JlICYmIChlLmNvbXBvc2l0b3JVc2VkLmVuYWJsZUNvbXBDb3JlID0gdChBLmVuYWJsZUNvbXBDb3JlKSksIEEuZW5hYmxlQ29tcENvcmVHUFUgJiYgKGUuY29tcG9zaXRvclVzZWQuZW5hYmxlQ29tcENvcmVHUFUgPSB0KEEuZW5hYmxlQ29tcENvcmVHUFUpKSwgQS5lbmFibGVDb21wQ29yZVRocmVhZHMgJiYgKGUuY29tcG9zaXRvclVzZWQuZW5hYmxlQ29tcENvcmVUaHJlYWRzID0gdChBLmVuYWJsZUNvbXBDb3JlVGhyZWFkcykpLCBBLmNvbXBDb3JlU3VwcG9ydCAmJiAoZS5jb21wb3NpdG9yVXNlZC5jb21wQ29yZVN1cHBvcnQgPSB0KEEuY29tcENvcmVTdXBwb3J0KSksIEEuY29tcENvcmVHUFVTdXBwb3J0ICYmIChlLmNvbXBvc2l0b3JVc2VkLmNvbXBDb3JlR1BVU3VwcG9ydCA9IHQoQS5jb21wQ29yZUdQVVN1cHBvcnQpKSwgSChyLCBhKCkpOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgdmFyIGEgPSBlLmNvbXBvc2l0b3JVc2VkLCBBID0gewogICAgVnJzbjogYS52ZXJzaW9uIHx8IHsgbWFqb3I6IDEsIG1pbm9yOiAwLCBmaXg6IDAgfQogIH07CiAgYS5waG90b3Nob3BWZXJzaW9uICYmIChBLnBzVmVyc2lvbiA9IGEucGhvdG9zaG9wVmVyc2lvbiksIEEuZGVzY3JpcHRpb24gPSBhLmRlc2NyaXB0aW9uLCBBLnJlYXNvbiA9IGEucmVhc29uLCBBLkVuZ24gPSAiRW5nbi4iLmNvbmNhdChhLmVuZ2luZSksIGEuZW5hYmxlQ29tcENvcmUgJiYgKEEuZW5hYmxlQ29tcENvcmUgPSAiZW5hYmxlLiIuY29uY2F0KGEuZW5hYmxlQ29tcENvcmUpKSwgYS5lbmFibGVDb21wQ29yZUdQVSAmJiAoQS5lbmFibGVDb21wQ29yZUdQVSA9ICJlbmFibGUuIi5jb25jYXQoYS5lbmFibGVDb21wQ29yZUdQVSkpLCBhLmVuYWJsZUNvbXBDb3JlVGhyZWFkcyAmJiAoQS5lbmFibGVDb21wQ29yZVRocmVhZHMgPSAiZW5hYmxlLiIuY29uY2F0KGEuZW5hYmxlQ29tcENvcmVUaHJlYWRzKSksIGEuY29tcENvcmVTdXBwb3J0ICYmIChBLmNvbXBDb3JlU3VwcG9ydCA9ICJyZWFzb24uIi5jb25jYXQoYS5jb21wQ29yZVN1cHBvcnQpKSwgYS5jb21wQ29yZUdQVVN1cHBvcnQgJiYgKEEuY29tcENvcmVHUFVTdXBwb3J0ID0gInJlYXNvbi4iLmNvbmNhdChhLmNvbXBDb3JlR1BVU3VwcG9ydCkpLCBwMChyLCAiIiwgIm51bGwiLCBBKTsKfSk7CnIwKCJleHRuIiwgZnVuY3Rpb24ocikgewogIHJldHVybiByLl9leHRuICE9PSB2b2lkIDA7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICBtMChyKTsKfSwgZnVuY3Rpb24ociwgZSkgewp9KTsKcjAoImlPcGEiLCBYMCgiZmlsbE9wYWNpdHkiKSwgZnVuY3Rpb24ociwgZSkgewogIGUuZmlsbE9wYWNpdHkgPSBPKHIpIC8gMjU1LCBIKHIsIDMpOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgVChyLCBlLmZpbGxPcGFjaXR5ICogMjU1KSwgWjAociwgMyk7Cn0pOwpyMCgiYnJzdCIsIFgwKCJjaGFubmVsQmxlbmRpbmdSZXN0cmljdGlvbnMiKSwgZnVuY3Rpb24ociwgZSwgYSkgewogIGZvciAoZS5jaGFubmVsQmxlbmRpbmdSZXN0cmljdGlvbnMgPSBbXTsgYSgpID4gNDsgKQogICAgZS5jaGFubmVsQmxlbmRpbmdSZXN0cmljdGlvbnMucHVzaChMKHIpKTsKfSwgZnVuY3Rpb24ociwgZSkgewogIGZvciAodmFyIGEgPSAwLCBBID0gZS5jaGFubmVsQmxlbmRpbmdSZXN0cmljdGlvbnM7IGEgPCBBLmxlbmd0aDsgYSsrKSB7CiAgICB2YXIgdCA9IEFbYV07CiAgICB0MChyLCB0KTsKICB9Cn0pOwpyMCgidHNseSIsIFgwKCJ0cmFuc3BhcmVuY3lTaGFwZXNMYXllciIpLCBmdW5jdGlvbihyLCBlKSB7CiAgZS50cmFuc3BhcmVuY3lTaGFwZXNMYXllciA9ICEhTyhyKSwgSChyLCAzKTsKfSwgZnVuY3Rpb24ociwgZSkgewogIFQociwgZS50cmFuc3BhcmVuY3lTaGFwZXNMYXllciA/IDEgOiAwKSwgWjAociwgMyk7Cn0pOwp2YXIgdmEgPSBmdW5jdGlvbigpIHsKICByZXR1cm4gdmEgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHIpIHsKICAgIGZvciAodmFyIGUsIGEgPSAxLCBBID0gYXJndW1lbnRzLmxlbmd0aDsgYSA8IEE7IGErKykgewogICAgICBlID0gYXJndW1lbnRzW2FdOwogICAgICBmb3IgKHZhciB0IGluIGUpIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCB0KSAmJiAoclt0XSA9IGVbdF0pOwogICAgfQogICAgcmV0dXJuIHI7CiAgfSwgdmEuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKfTsKZnVuY3Rpb24gbmYocikgewogIHIgPT09IHZvaWQgMCAmJiAociA9IDQwOTYpOwogIHZhciBlID0gbmV3IEFycmF5QnVmZmVyKHIpLCBhID0gbmV3IERhdGFWaWV3KGUpLCBBID0gMDsKICByZXR1cm4geyBidWZmZXI6IGUsIHZpZXc6IGEsIG9mZnNldDogQSwgdGVtcEJ1ZmZlcjogdm9pZCAwIH07Cn0KZnVuY3Rpb24gVzQocikgewogIHJldHVybiByLmJ1ZmZlci5zbGljZSgwLCByLm9mZnNldCk7Cn0KZnVuY3Rpb24gXzQocikgewogIHJldHVybiBuZXcgVWludDhBcnJheShyLmJ1ZmZlciwgMCwgci5vZmZzZXQpOwp9CmZ1bmN0aW9uIFQociwgZSkgewogIHZhciBhID0gdGEociwgMSk7CiAgci52aWV3LnNldFVpbnQ4KGEsIGUpOwp9CmZ1bmN0aW9uIEUwKHIsIGUpIHsKICB2YXIgYSA9IHRhKHIsIDIpOwogIHIudmlldy5zZXRJbnQxNihhLCBlLCAhMSk7Cn0KZnVuY3Rpb24geChyLCBlKSB7CiAgdmFyIGEgPSB0YShyLCAyKTsKICByLnZpZXcuc2V0VWludDE2KGEsIGUsICExKTsKfQpmdW5jdGlvbiBHNChyLCBlKSB7CiAgdmFyIGEgPSB0YShyLCAyKTsKICByLnZpZXcuc2V0VWludDE2KGEsIGUsICEwKTsKfQpmdW5jdGlvbiB0MChyLCBlKSB7CiAgdmFyIGEgPSB0YShyLCA0KTsKICByLnZpZXcuc2V0SW50MzIoYSwgZSwgITEpOwp9CmZ1bmN0aW9uIFBpKHIsIGUpIHsKICB2YXIgYSA9IHRhKHIsIDQpOwogIHIudmlldy5zZXRJbnQzMihhLCBlLCAhMCk7Cn0KZnVuY3Rpb24gVShyLCBlKSB7CiAgdmFyIGEgPSB0YShyLCA0KTsKICByLnZpZXcuc2V0VWludDMyKGEsIGUsICExKTsKfQpmdW5jdGlvbiBWcihyLCBlKSB7CiAgdmFyIGEgPSB0YShyLCA0KTsKICByLnZpZXcuc2V0RmxvYXQzMihhLCBlLCAhMSk7Cn0KZnVuY3Rpb24gRnIociwgZSkgewogIHZhciBhID0gdGEociwgOCk7CiAgci52aWV3LnNldEZsb2F0NjQoYSwgZSwgITEpOwp9CmZ1bmN0aW9uIGdyKHIsIGUpIHsKICB0MChyLCBlICogNjU1MzYpOwp9CmZ1bmN0aW9uIFhyKHIsIGUpIHsKICB0MChyLCBlICogKDEgPDwgMjQpKTsKfQpmdW5jdGlvbiBOcihyLCBlKSB7CiAgaWYgKGUpIHsKICAgIHNmKHIsIHIub2Zmc2V0ICsgZS5sZW5ndGgpOwogICAgdmFyIGEgPSBuZXcgVWludDhBcnJheShyLmJ1ZmZlcik7CiAgICBhLnNldChlLCByLm9mZnNldCksIHIub2Zmc2V0ICs9IGUubGVuZ3RoOwogIH0KfQpmdW5jdGlvbiBaMChyLCBlKSB7CiAgZm9yICh2YXIgYSA9IDA7IGEgPCBlOyBhKyspCiAgICBUKHIsIDApOwp9CmZ1bmN0aW9uIG4wKHIsIGUpIHsKICBpZiAoZS5sZW5ndGggIT09IDQpCiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc2lnbmF0dXJlOiAnIi5jb25jYXQoZSwgIiciKSk7CiAgZm9yICh2YXIgYSA9IDA7IGEgPCA0OyBhKyspCiAgICBUKHIsIGUuY2hhckNvZGVBdChhKSk7Cn0KZnVuY3Rpb24gWDQociwgZSkgewogIGZvciAodmFyIGEgPSAwOyBhIDwgZS5sZW5ndGg7IGErKykKICAgIFQociwgZS5jaGFyQ29kZUF0KGEpKTsKfQpmdW5jdGlvbiBrYShyLCBlLCBhKSB7CiAgdmFyIEEgPSBlLmxlbmd0aDsKICBpZiAoQSA+IDI1NSkKICAgIHRocm93IG5ldyBFcnJvcigiU3RyaW5nIHRvbyBsb25nIik7CiAgVChyLCBBKTsKICBmb3IgKHZhciB0ID0gMDsgdCA8IEE7IHQrKykgewogICAgdmFyIGkgPSBlLmNoYXJDb2RlQXQodCk7CiAgICBUKHIsIGkgPCAxMjggPyBpIDogNjMpOwogIH0KICBmb3IgKDsgKytBICUgYTsgKQogICAgVChyLCAwKTsKfQpmdW5jdGlvbiBSNChyLCBlKSB7CiAgZm9yICh2YXIgYSA9IDA7IGEgPCBlLmxlbmd0aDsgYSsrKQogICAgeChyLCBlLmNoYXJDb2RlQXQoYSkpOwp9CmZ1bmN0aW9uIFY0KHIsIGUpIHsKICBmb3IgKHZhciBhID0gMDsgYSA8IGUubGVuZ3RoOyBhKyspCiAgICBHNChyLCBlLmNoYXJDb2RlQXQoYSkpOwp9CmZ1bmN0aW9uIG1yKHIsIGUpIHsKICBVKHIsIGUubGVuZ3RoKSwgUjQociwgZSk7Cn0KZnVuY3Rpb24gV2EociwgZSkgewogIFUociwgZS5sZW5ndGggKyAxKTsKICBmb3IgKHZhciBhID0gMDsgYSA8IGUubGVuZ3RoOyBhKyspCiAgICB4KHIsIGUuY2hhckNvZGVBdChhKSk7CiAgeChyLCAwKTsKfQpmdW5jdGlvbiBmZihyKSB7CiAgciA9PT0gdm9pZCAwICYmIChyID0gW10pOwogIGZvciAodmFyIGUgPSAwLCBhID0gMCwgQSA9IHI7IGEgPCBBLmxlbmd0aDsgYSsrKSB7CiAgICB2YXIgdCA9IEFbYV07CiAgICBpZiAodC5jYW52YXMgfHwgdC5pbWFnZURhdGEpIHsKICAgICAgdmFyIGkgPSBMQSh0KSwgbiA9IGkud2lkdGgsIGYgPSBpLmhlaWdodDsKICAgICAgZSA9IE1hdGgubWF4KGUsIDIgKiBmICsgMiAqIG4gKiBmKTsKICAgIH0KICAgIHQuY2hpbGRyZW4gJiYgKGUgPSBNYXRoLm1heChlLCBmZih0LmNoaWxkcmVuKSkpOwogIH0KICByZXR1cm4gZTsKfQpmdW5jdGlvbiBlcihyLCBlLCBhLCBBLCB0KSB7CiAgQSA9PT0gdm9pZCAwICYmIChBID0gITEpLCB0ID09PSB2b2lkIDAgJiYgKHQgPSAhMSksIHQgJiYgVShyLCAwKTsKICB2YXIgaSA9IHIub2Zmc2V0OwogIFUociwgMCksIGEoKTsKICBmb3IgKHZhciBuID0gci5vZmZzZXQgLSBpIC0gNCwgZiA9IG47IGYgJSBlOyApCiAgICBUKHIsIDApLCBmKys7CiAgQSAmJiAobiA9IGYpLCByLnZpZXcuc2V0VWludDMyKGksIG4sICExKTsKfQpmdW5jdGlvbiBvZihyKSB7CiAgdmFyIGU7CiAgKGUgPSByLmNoaWxkcmVuKSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgfHwgZS5mb3JFYWNoKG9mKTsKICB2YXIgYSA9IHIuaW1hZ2VEYXRhOwogIGlmIChhICYmIChhLmRhdGEgaW5zdGFuY2VvZiBVaW50MzJBcnJheSB8fCBhLmRhdGEgaW5zdGFuY2VvZiBVaW50MTZBcnJheSkpCiAgICB0aHJvdyBuZXcgRXJyb3IoImltYWdlRGF0YSBoYXMgaW5jb3JyZWN0IGJpdERlcHRoIik7CiAgaWYgKCJtYXNrIiBpbiByICYmIHIubWFzaykgewogICAgdmFyIEEgPSByLm1hc2suaW1hZ2VEYXRhOwogICAgaWYgKEEgJiYgKEEuZGF0YSBpbnN0YW5jZW9mIFVpbnQzMkFycmF5IHx8IEEuZGF0YSBpbnN0YW5jZW9mIFVpbnQxNkFycmF5KSkKICAgICAgdGhyb3cgbmV3IEVycm9yKCJtYXNrIGltYWdlRGF0YSBoYXMgaW5jb3JyZWN0IGJpdERlcHRoIik7CiAgfQp9CmZ1bmN0aW9uIHVmKHIsIGUsIGEpIHsKICB2YXIgQTsKICBpZiAoYSA9PT0gdm9pZCAwICYmIChhID0ge30pLCAhKCtlLndpZHRoID4gMCAmJiArZS5oZWlnaHQgPiAwKSkKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBkb2N1bWVudCBzaXplIik7CiAgaWYgKChlLndpZHRoID4gM2U0IHx8IGUuaGVpZ2h0ID4gM2U0KSAmJiAhYS5wc2IpCiAgICB0aHJvdyBuZXcgRXJyb3IoIkRvY3VtZW50IHNpemUgaXMgdG9vIGxhcmdlIChtYXggaXMgMzAwMDB4MzAwMDAsIHVzZSBQU0IgZm9ybWF0IGluc3RlYWQpIik7CiAgdmFyIHQgPSAoQSA9IGUuYml0c1BlckNoYW5uZWwpICE9PSBudWxsICYmIEEgIT09IHZvaWQgMCA/IEEgOiA4OwogIGlmICh0ICE9PSA4KQogICAgdGhyb3cgbmV3IEVycm9yKCJiaXRzUGVyQ2hhbm5lbCBvdGhlciB0aGFuIDggYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIHdyaXRpbmciKTsKICBvZihlKTsKICB2YXIgaSA9IHZhKHt9LCBlLmltYWdlUmVzb3VyY2VzKSwgbiA9IHZhKHZhKHt9LCBhKSwgeyBsYXllcklkczogLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSwgbGF5ZXJUb0lkOiAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpIH0pOwogIG4uZ2VuZXJhdGVUaHVtYm5haWwgJiYgKGkudGh1bWJuYWlsID0gVDQoZSkpOwogIHZhciBmID0gZS5pbWFnZURhdGE7CiAgaWYgKCFmICYmIGUuY2FudmFzICYmIChmID0gZS5jYW52YXMuZ2V0Q29udGV4dCgiMmQiKS5nZXRJbWFnZURhdGEoMCwgMCwgZS5jYW52YXMud2lkdGgsIGUuY2FudmFzLmhlaWdodCkpLCBmICYmIChlLndpZHRoICE9PSBmLndpZHRoIHx8IGUuaGVpZ2h0ICE9PSBmLmhlaWdodCkpCiAgICB0aHJvdyBuZXcgRXJyb3IoIkRvY3VtZW50IGNhbnZhcyBtdXN0IGhhdmUgdGhlIHNhbWUgc2l6ZSBhcyBkb2N1bWVudCIpOwogIHZhciB1ID0gISFmICYmIFZuKGYpLCBvID0gTWF0aC5tYXgoZmYoZS5jaGlsZHJlbiksIDQgKiAyICogZS53aWR0aCAqIGUuaGVpZ2h0ICsgMiAqIGUuaGVpZ2h0KTsKICByLnRlbXBCdWZmZXIgPSBuZXcgVWludDhBcnJheShvKSwgbjAociwgIjhCUFMiKSwgeChyLCBhLnBzYiA/IDIgOiAxKSwgWjAociwgNiksIHgociwgdSA/IDQgOiAzKSwgVShyLCBlLmhlaWdodCksIFUociwgZS53aWR0aCksIHgociwgdCksIHgoCiAgICByLAogICAgMwogICAgLyogQ29sb3JNb2RlLlJHQiAqLwogICksIGVyKHIsIDEsIGZ1bmN0aW9uKCkgewogICAgdmFyIHAsIFcsIEM7CiAgICBpZiAoZS5wYWxldHRlKSB7CiAgICAgIGZvciAodmFyIF8gPSAwOyBfIDwgMjU2OyBfKyspCiAgICAgICAgVChyLCAoKHAgPSBlLnBhbGV0dGVbX10pID09PSBudWxsIHx8IHAgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHAucikgfHwgMCk7CiAgICAgIGZvciAodmFyIF8gPSAwOyBfIDwgMjU2OyBfKyspCiAgICAgICAgVChyLCAoKFcgPSBlLnBhbGV0dGVbX10pID09PSBudWxsIHx8IFcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IFcuZykgfHwgMCk7CiAgICAgIGZvciAodmFyIF8gPSAwOyBfIDwgMjU2OyBfKyspCiAgICAgICAgVChyLCAoKEMgPSBlLnBhbGV0dGVbX10pID09PSBudWxsIHx8IEMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IEMuYikgfHwgMCk7CiAgICB9CiAgfSk7CiAgdmFyIGwgPSBbXTsKICBjZihsLCBlLmNoaWxkcmVuKSwgbC5sZW5ndGggfHwgbC5wdXNoKHt9KSwgaS5sYXllcnNHcm91cCA9IGwubWFwKGZ1bmN0aW9uKHApIHsKICAgIHJldHVybiBwLmxpbmtHcm91cCB8fCAwOwogIH0pLCBpLmxheWVyR3JvdXBzRW5hYmxlZElkID0gbC5tYXAoZnVuY3Rpb24ocCkgewogICAgcmV0dXJuIHAubGlua0dyb3VwRW5hYmxlZCA9PSAhMSA/IDAgOiAxOwogIH0pLCBlcihyLCAxLCBmdW5jdGlvbigpIHsKICAgIGZvciAodmFyIHAgPSBmdW5jdGlvbihOKSB7CiAgICAgIGZvciAodmFyIEQgPSBOLmhhcyhpKSwgWSA9IEQgPT09ICExID8gMCA6IEQgPT09ICEwID8gMSA6IEQsIGYwID0gZnVuY3Rpb24oSikgewogICAgICAgIG4wKHIsICI4QklNIiksIHgociwgTi5rZXkpLCBrYShyLCAiIiwgMiksIGVyKHIsIDIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIE4ud3JpdGUociwgaSwgSik7CiAgICAgICAgfSk7CiAgICAgIH0sIEcgPSAwOyBHIDwgWTsgRysrKQogICAgICAgIGYwKEcpOwogICAgfSwgVyA9IDAsIEMgPSBWMTsgVyA8IEMubGVuZ3RoOyBXKyspIHsKICAgICAgdmFyIF8gPSBDW1ddOwogICAgICBwKF8pOwogICAgfQogIH0pLCBlcihyLCAyLCBmdW5jdGlvbigpIHsKICAgIFM0KHIsIGwsIGUsIHUsIG4pLCBONChyLCBlLmdsb2JhbExheWVyTWFza0luZm8pLCBsZihyLCBlLCBlLCBuKTsKICB9LCB2b2lkIDAsICEhbi5wc2IpOwogIHZhciBzID0gdSA/IFswLCAxLCAyLCAzXSA6IFswLCAxLCAyXSwgYyA9IGYgPyBmLndpZHRoIDogZS53aWR0aCwgZCA9IGYgPyBmLmhlaWdodCA6IGUuaGVpZ2h0LCB2ID0geyBkYXRhOiBuZXcgVWludDhBcnJheShjICogZCAqIDQpLCB3aWR0aDogYywgaGVpZ2h0OiBkIH07CiAgeCgKICAgIHIsCiAgICAxCiAgICAvKiBDb21wcmVzc2lvbi5SbGVDb21wcmVzc2VkICovCiAgKTsKICB7CiAgICBpZiAoZiAmJiB2LmRhdGEuc2V0KG5ldyBVaW50OEFycmF5KGYuZGF0YS5idWZmZXIsIGYuZGF0YS5ieXRlT2Zmc2V0LCBmLmRhdGEuYnl0ZUxlbmd0aCkpLCB1KQogICAgICBmb3IgKHZhciBrID0gdi53aWR0aCAqIHYuaGVpZ2h0ICogNCwgRSA9IHYuZGF0YSwgZyA9IDA7IGcgPCBrOyBnICs9IDQpIHsKICAgICAgICB2YXIgdyA9IEVbZyArIDNdOwogICAgICAgIGlmICh3ICE9IDAgJiYgdyAhPSAyNTUpIHsKICAgICAgICAgIHZhciBCID0gdyAvIDI1NSwgbSA9IDI1NSAqICgxIC0gQik7CiAgICAgICAgICBFW2cgKyAwXSA9IEVbZyArIDBdICogQiArIG0sIEVbZyArIDFdID0gRVtnICsgMV0gKiBCICsgbSwgRVtnICsgMl0gPSBFW2cgKyAyXSAqIEIgKyBtOwogICAgICAgIH0KICAgICAgfQogICAgTnIociwgVEEoci50ZW1wQnVmZmVyLCB2LCBzLCAhIWEucHNiKSk7CiAgfQp9CmZ1bmN0aW9uIFM0KHIsIGUsIGEsIEEsIHQpIHsKICBlcihyLCA0LCBmdW5jdGlvbigpIHsKICAgIHZhciBpOwogICAgRTAociwgQSA/IC1lLmxlbmd0aCA6IGUubGVuZ3RoKTsKICAgIGZvciAodmFyIG4gPSBlLm1hcChmdW5jdGlvbihFLCBnKSB7CiAgICAgIHJldHVybiBQNChyLnRlbXBCdWZmZXIsIEUsIGcgPT09IDAsIHQpOwogICAgfSksIGYgPSBmdW5jdGlvbihFKSB7CiAgICAgIHZhciBnID0gRS5sYXllciwgdyA9IEUudG9wLCBCID0gRS5sZWZ0LCBtID0gRS5ib3R0b20sIHAgPSBFLnJpZ2h0LCBXID0gRS5jaGFubmVsczsKICAgICAgdDAociwgdyksIHQwKHIsIEIpLCB0MChyLCBtKSwgdDAociwgcCksIHgociwgVy5sZW5ndGgpOwogICAgICBmb3IgKHZhciBDID0gMCwgXyA9IFc7IEMgPCBfLmxlbmd0aDsgQysrKSB7CiAgICAgICAgdmFyIE4gPSBfW0NdOwogICAgICAgIEUwKHIsIE4uY2hhbm5lbElkKSwgdC5wc2IgJiYgVShyLCAwKSwgVShyLCBOLmxlbmd0aCk7CiAgICAgIH0KICAgICAgbjAociwgIjhCSU0iKSwgbjAociwgWGVbZy5ibGVuZE1vZGVdIHx8ICJub3JtIiksIFQociwgTWF0aC5yb3VuZChNQSgoaSA9IGcub3BhY2l0eSkgIT09IG51bGwgJiYgaSAhPT0gdm9pZCAwID8gaSA6IDEsIDAsIDEpICogMjU1KSksIFQociwgZy5jbGlwcGluZyA/IDEgOiAwKTsKICAgICAgdmFyIEQgPSA4OwogICAgICBnLnRyYW5zcGFyZW5jeVByb3RlY3RlZCAmJiAoRCB8PSAxKSwgZy5oaWRkZW4gJiYgKEQgfD0gMiksIChnLnZlY3Rvck1hc2sgfHwgZy5zZWN0aW9uRGl2aWRlciAmJiBnLnNlY3Rpb25EaXZpZGVyLnR5cGUgIT09IDAgfHwgZy5hZGp1c3RtZW50KSAmJiAoRCB8PSAxNiksIGcuZWZmZWN0c09wZW4gJiYgKEQgfD0gMzIpLCBUKHIsIEQpLCBUKHIsIDApLCBlcihyLCAxLCBmdW5jdGlvbigpIHsKICAgICAgICBENChyLCBnLCBFKSwgeDQociwgZyksIGthKHIsIChnLm5hbWUgfHwgIiIpLnN1YnN0cmluZygwLCAyNTUpLCA0KSwgbGYociwgZywgYSwgdCk7CiAgICAgIH0pOwogICAgfSwgdSA9IDAsIG8gPSBuOyB1IDwgby5sZW5ndGg7IHUrKykgewogICAgICB2YXIgbCA9IG9bdV07CiAgICAgIGYobCk7CiAgICB9CiAgICBmb3IgKHZhciBzID0gMCwgYyA9IG47IHMgPCBjLmxlbmd0aDsgcysrKQogICAgICBmb3IgKHZhciBsID0gY1tzXSwgZCA9IDAsIHYgPSBsLmNoYW5uZWxzOyBkIDwgdi5sZW5ndGg7IGQrKykgewogICAgICAgIHZhciBrID0gdltkXTsKICAgICAgICB4KHIsIGsuY29tcHJlc3Npb24pLCBrLmJ1ZmZlciAmJiBOcihyLCBrLmJ1ZmZlcik7CiAgICAgIH0KICB9LCAhMCwgdC5wc2IpOwp9CmZ1bmN0aW9uIEQ0KHIsIGUsIGEpIHsKICB2YXIgQSA9IGUubWFzaywgdCA9IGUucmVhbE1hc2s7CiAgZXIociwgMSwgZnVuY3Rpb24oKSB7CiAgICBpZiAoISghQSAmJiAhdCkpIHsKICAgICAgdmFyIGkgPSAwLCBuID0gMCwgZiA9IDA7CiAgICAgIEEgJiYgKEEudXNlck1hc2tEZW5zaXR5ICE9PSB2b2lkIDAgJiYgKGkgfD0gMSksIEEudXNlck1hc2tGZWF0aGVyICE9PSB2b2lkIDAgJiYgKGkgfD0gMiksIEEudmVjdG9yTWFza0RlbnNpdHkgIT09IHZvaWQgMCAmJiAoaSB8PSA0KSwgQS52ZWN0b3JNYXNrRmVhdGhlciAhPT0gdm9pZCAwICYmIChpIHw9IDgpLCBBLmRpc2FibGVkICYmIChuIHw9IDIpLCBBLnBvc2l0aW9uUmVsYXRpdmVUb0xheWVyICYmIChuIHw9IDEpLCBBLmZyb21WZWN0b3JEYXRhICYmIChuIHw9IDgpLCBpICYmIChuIHw9IDE2KSk7CiAgICAgIHZhciB1ID0gYS5tYXNrIHx8IHt9OwogICAgICBpZiAodDAociwgdS50b3AgfHwgMCksIHQwKHIsIHUubGVmdCB8fCAwKSwgdDAociwgdS5ib3R0b20gfHwgMCksIHQwKHIsIHUucmlnaHQgfHwgMCksIFQociwgQSAmJiBBLmRlZmF1bHRDb2xvciB8fCAwKSwgVChyLCBuKSwgdCkgewogICAgICAgIHQuZGlzYWJsZWQgJiYgKGYgfD0gMiksIHQucG9zaXRpb25SZWxhdGl2ZVRvTGF5ZXIgJiYgKGYgfD0gMSksIHQuZnJvbVZlY3RvckRhdGEgJiYgKGYgfD0gOCk7CiAgICAgICAgdmFyIG8gPSBhLnJlYWxNYXNrIHx8IHt9OwogICAgICAgIFQociwgZiksIFQociwgdC5kZWZhdWx0Q29sb3IgfHwgMCksIHQwKHIsIG8udG9wIHx8IDApLCB0MChyLCBvLmxlZnQgfHwgMCksIHQwKHIsIG8uYm90dG9tIHx8IDApLCB0MChyLCBvLnJpZ2h0IHx8IDApOwogICAgICB9CiAgICAgIGkgJiYgQSAmJiAoVChyLCBpKSwgQS51c2VyTWFza0RlbnNpdHkgIT09IHZvaWQgMCAmJiBUKHIsIE1hdGgucm91bmQoQS51c2VyTWFza0RlbnNpdHkgKiAyNTUpKSwgQS51c2VyTWFza0ZlYXRoZXIgIT09IHZvaWQgMCAmJiBGcihyLCBBLnVzZXJNYXNrRmVhdGhlciksIEEudmVjdG9yTWFza0RlbnNpdHkgIT09IHZvaWQgMCAmJiBUKHIsIE1hdGgucm91bmQoQS52ZWN0b3JNYXNrRGVuc2l0eSAqIDI1NSkpLCBBLnZlY3Rvck1hc2tGZWF0aGVyICE9PSB2b2lkIDAgJiYgRnIociwgQS52ZWN0b3JNYXNrRmVhdGhlcikpLCBaMChyLCAyKTsKICAgIH0KICB9KTsKfQpmdW5jdGlvbiBiZShyLCBlKSB7CiAgVChyLCBlWzBdKSwgVChyLCBlWzFdKSwgVChyLCBlWzJdKSwgVChyLCBlWzNdKTsKfQpmdW5jdGlvbiB4NChyLCBlKSB7CiAgZXIociwgMSwgZnVuY3Rpb24oKSB7CiAgICB2YXIgYSA9IGUuYmxlbmRpbmdSYW5nZXM7CiAgICBpZiAoYSkgewogICAgICBiZShyLCBhLmNvbXBvc2l0ZUdyYXlCbGVuZFNvdXJjZSksIGJlKHIsIGEuY29tcG9zaXRlR3JhcGhCbGVuZERlc3RpbmF0aW9uUmFuZ2UpOwogICAgICBmb3IgKHZhciBBID0gMCwgdCA9IGEucmFuZ2VzOyBBIDwgdC5sZW5ndGg7IEErKykgewogICAgICAgIHZhciBpID0gdFtBXTsKICAgICAgICBiZShyLCBpLnNvdXJjZVJhbmdlKSwgYmUociwgaS5kZXN0UmFuZ2UpOwogICAgICB9CiAgICB9CiAgfSk7Cn0KZnVuY3Rpb24gTjQociwgZSkgewogIGVyKHIsIDEsIGZ1bmN0aW9uKCkgewogICAgZSAmJiAoeChyLCBlLm92ZXJsYXlDb2xvclNwYWNlKSwgeChyLCBlLmNvbG9yU3BhY2UxKSwgeChyLCBlLmNvbG9yU3BhY2UyKSwgeChyLCBlLmNvbG9yU3BhY2UzKSwgeChyLCBlLmNvbG9yU3BhY2U0KSwgeChyLCBlLm9wYWNpdHkgKiAyNTUpLCBUKHIsIGUua2luZCksIFowKHIsIDMpKTsKICB9KTsKfQpmdW5jdGlvbiBsZihyLCBlLCBhLCBBKSB7CiAgZm9yICh2YXIgdCA9IGZ1bmN0aW9uKHUpIHsKICAgIHZhciBvID0gdS5rZXk7CiAgICBpZiAobyA9PT0gIlR4dDIiICYmIEEuaW52YWxpZGF0ZVRleHRMYXllcnMpCiAgICAgIHJldHVybiAiY29udGludWUiOwogICAgaWYgKG8gPT09ICJ2bXNrIiAmJiBBLnBzYiAmJiAobyA9ICJ2c21zIiksIHUuaGFzKGUpKSB7CiAgICAgIHZhciBsID0gQS5wc2IgJiYgWG4uaW5kZXhPZihvKSAhPT0gLTEsIHMgPSBvICE9PSAiVHh0MiIgJiYgbyAhPT0gImNpbmYiICYmIG8gIT09ICJleHRuIiAmJiBvICE9PSAiQ0FJICIgJiYgbyAhPT0gIk9DSU8iLCBjID0gbyA9PT0gIlR4dDIiIHx8IG8gPT09ICJsdW5pIiB8fCBvID09PSAidm1zayIgfHwgbyA9PT0gImFydGIiIHx8IG8gPT09ICJhcnRkIiB8fCBvID09PSAidm9nayIgfHwgbyA9PT0gIlNvTGQiIHx8IG8gPT09ICJsbmsyIiB8fCBvID09PSAidnNjZyIgfHwgbyA9PT0gInZzbXMiIHx8IG8gPT09ICJHZEZsIiB8fCBvID09PSAibG1meCIgfHwgbyA9PT0gImxyRlgiIHx8IG8gPT09ICJjaW5mIiB8fCBvID09PSAiUGxMZCIgfHwgbyA9PT0gIkFubm8iIHx8IG8gPT09ICJDQUkgIiB8fCBvID09PSAiT0NJTyIgfHwgbyA9PT0gIkdlbkkiIHx8IG8gPT09ICJGRWlkIiB8fCBvID09PSAiY3VydiIgfHwgbyA9PT0gIkNnRWQiIHx8IG8gPT09ICJ2aWJBIiB8fCBvID09PSAiYmx3aCIgfHwgbyA9PT0gImdyZG0iOwogICAgICBuMChyLCBsID8gIjhCNjQiIDogIjhCSU0iKSwgbjAociwgbyksIGVyKHIsIGMgPyA0IDogMiwgZnVuY3Rpb24oKSB7CiAgICAgICAgdS53cml0ZShyLCBlLCBhLCBBKTsKICAgICAgfSwgcywgbCk7CiAgICB9CiAgfSwgaSA9IDAsIG4gPSBxMTsgaSA8IG4ubGVuZ3RoOyBpKyspIHsKICAgIHZhciBmID0gbltpXTsKICAgIHQoZik7CiAgfQp9CmZ1bmN0aW9uIGNmKHIsIGUpIHsKICBpZiAoZSkKICAgIGZvciAodmFyIGEgPSAwLCBBID0gZTsgYSA8IEEubGVuZ3RoOyBhKyspIHsKICAgICAgdmFyIHQgPSBBW2FdOwogICAgICBpZiAodC5jaGlsZHJlbiAmJiB0LmNhbnZhcykKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbGF5ZXIsIGNhbm5vdCBoYXZlIGJvdGggJ2NhbnZhcycgYW5kICdjaGlsZHJlbicgcHJvcGVydGllcyIpOwogICAgICBpZiAodC5jaGlsZHJlbiAmJiB0LmltYWdlRGF0YSkKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbGF5ZXIsIGNhbm5vdCBoYXZlIGJvdGggJ2ltYWdlRGF0YScgYW5kICdjaGlsZHJlbicgcHJvcGVydGllcyIpOwogICAgICB0LmNoaWxkcmVuID8gKHIucHVzaCh7CiAgICAgICAgbmFtZTogIjwvTGF5ZXIgZ3JvdXA+IiwKICAgICAgICBzZWN0aW9uRGl2aWRlcjogewogICAgICAgICAgdHlwZTogMwogICAgICAgIH0KICAgICAgICAvLyBibGVuZGluZ1JhbmdlczogY2hpbGRyZW5bMF0uYmxlbmRpbmdSYW5nZXMsCiAgICAgICAgLy8gbmFtZVNvdXJjZTogJ2xzZXQnLAogICAgICAgIC8vIGlkOiBsYXllcklkcy5zaGlmdCgpLAogICAgICAgIC8vIHByb3RlY3RlZDogewogICAgICAgIC8vIAl0cmFuc3BhcmVuY3k6IGZhbHNlLAogICAgICAgIC8vIAljb21wb3NpdGU6IGZhbHNlLAogICAgICAgIC8vIAlwb3NpdGlvbjogZmFsc2UsCiAgICAgICAgLy8gfSwKICAgICAgICAvLyBsYXllckNvbG9yOiAncmVkJywKICAgICAgICAvLyB0aW1lc3RhbXA6IHRpbWVzdGFtcHMuc2hpZnQoKSwKICAgICAgICAvLyByZWZlcmVuY2VQb2ludDogeyB4OiAwLCB5OiAwIH0sCiAgICAgIH0pLCBjZihyLCB0LmNoaWxkcmVuKSwgci5wdXNoKHZhKHZhKHt9LCB0KSwgeyBibGVuZE1vZGU6IHQuYmxlbmRNb2RlID09PSAicGFzcyB0aHJvdWdoIiA/ICJub3JtYWwiIDogdC5ibGVuZE1vZGUsIHNlY3Rpb25EaXZpZGVyOiB7CiAgICAgICAgdHlwZTogdC5vcGVuZWQgPT09ICExID8gMiA6IDEsCiAgICAgICAga2V5OiBYZVt0LmJsZW5kTW9kZV0gfHwgInBhc3MiLAogICAgICAgIHN1YlR5cGU6IDAKICAgICAgfSB9KSkpIDogci5wdXNoKHZhKHt9LCB0KSk7CiAgICB9Cn0KZnVuY3Rpb24gTTQociwgZSkgewogIHZhciBhID0gci5idWZmZXIuYnl0ZUxlbmd0aDsKICBkbwogICAgYSAqPSAyOwogIHdoaWxlIChlID4gYSk7CiAgdmFyIEEgPSBuZXcgQXJyYXlCdWZmZXIoYSksIHQgPSBuZXcgVWludDhBcnJheShBKSwgaSA9IG5ldyBVaW50OEFycmF5KHIuYnVmZmVyKTsKICB0LnNldChpKSwgci5idWZmZXIgPSBBLCByLnZpZXcgPSBuZXcgRGF0YVZpZXcoci5idWZmZXIpOwp9CmZ1bmN0aW9uIHNmKHIsIGUpIHsKICBlID4gci5idWZmZXIuYnl0ZUxlbmd0aCAmJiBNNChyLCBlKTsKfQpmdW5jdGlvbiB0YShyLCBlKSB7CiAgdmFyIGEgPSByLm9mZnNldDsKICByZXR1cm4gc2Yociwgci5vZmZzZXQgKz0gZSksIGE7Cn0KZnVuY3Rpb24gVDQocikgewogIHZhciBlID0gYTIoMTAsIDEwKSwgYSA9IDE7CiAgci53aWR0aCA+IHIuaGVpZ2h0ID8gKGUud2lkdGggPSAxNjAsIGUuaGVpZ2h0ID0gTWF0aC5mbG9vcihyLmhlaWdodCAqIChlLndpZHRoIC8gci53aWR0aCkpLCBhID0gZS53aWR0aCAvIHIud2lkdGgpIDogKGUuaGVpZ2h0ID0gMTYwLCBlLndpZHRoID0gTWF0aC5mbG9vcihyLndpZHRoICogKGUuaGVpZ2h0IC8gci5oZWlnaHQpKSwgYSA9IGUuaGVpZ2h0IC8gci5oZWlnaHQpOwogIHZhciBBID0gZS5nZXRDb250ZXh0KCIyZCIpOwogIHJldHVybiBBLnNjYWxlKGEsIGEpLCByLmltYWdlRGF0YSA/IEEuZHJhd0ltYWdlKG1lKHIuaW1hZ2VEYXRhKSwgMCwgMCkgOiByLmNhbnZhcyAmJiBBLmRyYXdJbWFnZShyLmNhbnZhcywgMCwgMCksIGU7Cn0KZnVuY3Rpb24gWWkociwgZSwgYSwgQSwgdCwgaSkgewogIHZhciBuID0gQS50b3AgfCAwLCBmID0gQS5sZWZ0IHwgMCwgdSA9IEEucmlnaHQgfCAwLCBvID0gQS5ib3R0b20gfCAwLCBsID0gTEEoQSksIHMgPSBsLndpZHRoLCBjID0gbC5oZWlnaHQsIGQgPSBBLmltYWdlRGF0YTsKICBpZiAoIWQgJiYgQS5jYW52YXMgJiYgcyAmJiBjICYmIChkID0gQS5jYW52YXMuZ2V0Q29udGV4dCgiMmQiKS5nZXRJbWFnZURhdGEoMCwgMCwgcywgYykpLCBkICYmIChkLndpZHRoICE9PSBzIHx8IGQuaGVpZ2h0ICE9PSBjKSkKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBpbWFnZURhdGEgZGltZW50aW9ucyIpOwogIHUgPSBmICsgcywgbyA9IG4gKyBjOwogIHZhciB2LCBrOwogIGQgPyB0LmNvbXByZXNzID8gKHYgPSBTbihkLCBbMF0pLCBrID0gMikgOiAodiA9IFRBKHIsIGQsIFswXSwgISF0LnBzYiksIGsgPSAxKSA6ICh2ID0gbmV3IFVpbnQ4QXJyYXkoMCksIGsgPSAxKSwgZS5jaGFubmVscy5wdXNoKHsgY2hhbm5lbElkOiBpID8gLTMgOiAtMiwgY29tcHJlc3Npb246IGssIGJ1ZmZlcjogdiwgbGVuZ3RoOiAyICsgdi5sZW5ndGggfSksIGVbaSA/ICJyZWFsTWFzayIgOiAibWFzayJdID0geyB0b3A6IG4sIGxlZnQ6IGYsIHJpZ2h0OiB1LCBib3R0b206IG8gfTsKfQpmdW5jdGlvbiBQNChyLCBlLCBhLCBBKSB7CiAgdmFyIHQgPSBPNChyLCBlLCBhLCBBKTsKICByZXR1cm4gZS5tYXNrICYmIFlpKHIsIHQsIGUsIGUubWFzaywgQSwgITEpLCBlLnJlYWxNYXNrICYmIFlpKHIsIHQsIGUsIGUucmVhbE1hc2ssIEEsICEwKSwgdDsKfQpmdW5jdGlvbiBMQShyKSB7CiAgdmFyIGUsIGEsIEEsIHQsIGkgPSByLmNhbnZhcywgbiA9IHIuaW1hZ2VEYXRhLCBmID0gKGEgPSAoZSA9IG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4ud2lkdGgpICE9PSBudWxsICYmIGUgIT09IHZvaWQgMCA/IGUgOiBpID09IG51bGwgPyB2b2lkIDAgOiBpLndpZHRoKSAhPT0gbnVsbCAmJiBhICE9PSB2b2lkIDAgPyBhIDogMCwgdSA9ICh0ID0gKEEgPSBuID09IG51bGwgPyB2b2lkIDAgOiBuLmhlaWdodCkgIT09IG51bGwgJiYgQSAhPT0gdm9pZCAwID8gQSA6IGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuaGVpZ2h0KSAhPT0gbnVsbCAmJiB0ICE9PSB2b2lkIDAgPyB0IDogMDsKICByZXR1cm4geyB3aWR0aDogZiwgaGVpZ2h0OiB1IH07Cn0KZnVuY3Rpb24gWTQociwgZSwgYSwgQSwgdCkgewogIGlmIChyLmRhdGEgaW5zdGFuY2VvZiBVaW50MzJBcnJheSB8fCByLmRhdGEgaW5zdGFuY2VvZiBVaW50MTZBcnJheSkKICAgIHRocm93IG5ldyBFcnJvcigiaW1hZ2VEYXRhIGhhcyBpbmNvcnJlY3QgYml0IGRlcHRoIik7CiAgZm9yICh2YXIgaSA9IEhhKEEsIHQpLCBuID0gci5kYXRhLCBmID0gaS5kYXRhLCB1ID0gMDsgdSA8IHQ7IHUrKykKICAgIGZvciAodmFyIG8gPSAwOyBvIDwgQTsgbysrKSB7CiAgICAgIHZhciBsID0gKG8gKyBlICsgKHUgKyBhKSAqIHIud2lkdGgpICogNCwgcyA9IChvICsgdSAqIEEpICogNDsKICAgICAgZltzXSA9IG5bbF0sIGZbcyArIDFdID0gbltsICsgMV0sIGZbcyArIDJdID0gbltsICsgMl0sIGZbcyArIDNdID0gbltsICsgM107CiAgICB9CiAgcmV0dXJuIGk7Cn0KZnVuY3Rpb24gTzQociwgZSwgYSwgQSkgewogIHZhciB0ID0gZS50b3AgfCAwLCBpID0gZS5sZWZ0IHwgMCwgbiA9IGUucmlnaHQgfCAwLCBmID0gZS5ib3R0b20gfCAwLCB1ID0gWwogICAgeyBjaGFubmVsSWQ6IC0xLCBjb21wcmVzc2lvbjogMCwgYnVmZmVyOiB2b2lkIDAsIGxlbmd0aDogMiB9LAogICAgeyBjaGFubmVsSWQ6IDAsIGNvbXByZXNzaW9uOiAwLCBidWZmZXI6IHZvaWQgMCwgbGVuZ3RoOiAyIH0sCiAgICB7IGNoYW5uZWxJZDogMSwgY29tcHJlc3Npb246IDAsIGJ1ZmZlcjogdm9pZCAwLCBsZW5ndGg6IDIgfSwKICAgIHsgY2hhbm5lbElkOiAyLCBjb21wcmVzc2lvbjogMCwgYnVmZmVyOiB2b2lkIDAsIGxlbmd0aDogMiB9CiAgXSwgbyA9IExBKGUpLCBsID0gby53aWR0aCwgcyA9IG8uaGVpZ2h0OwogIGlmICghKGUuY2FudmFzIHx8IGUuaW1hZ2VEYXRhKSB8fCAhbCB8fCAhcykKICAgIHJldHVybiBuID0gaSwgZiA9IHQsIHsgbGF5ZXI6IGUsIHRvcDogdCwgbGVmdDogaSwgcmlnaHQ6IG4sIGJvdHRvbTogZiwgY2hhbm5lbHM6IHUgfTsKICBuID0gaSArIGwsIGYgPSB0ICsgczsKICB2YXIgYyA9IGUuaW1hZ2VEYXRhIHx8IGUuY2FudmFzLmdldENvbnRleHQoIjJkIikuZ2V0SW1hZ2VEYXRhKDAsIDAsIGwsIHMpOwogIGlmIChBLnRyaW1JbWFnZURhdGEpIHsKICAgIHZhciBkID0gVTQoYyk7CiAgICBpZiAoZC5sZWZ0ICE9PSAwIHx8IGQudG9wICE9PSAwIHx8IGQucmlnaHQgIT09IGMud2lkdGggfHwgZC5ib3R0b20gIT09IGMuaGVpZ2h0KSB7CiAgICAgIGlmIChpICs9IGQubGVmdCwgdCArPSBkLnRvcCwgbiAtPSBjLndpZHRoIC0gZC5yaWdodCwgZiAtPSBjLmhlaWdodCAtIGQuYm90dG9tLCBsID0gbiAtIGksIHMgPSBmIC0gdCwgIWwgfHwgIXMpCiAgICAgICAgcmV0dXJuIHsgbGF5ZXI6IGUsIHRvcDogdCwgbGVmdDogaSwgcmlnaHQ6IG4sIGJvdHRvbTogZiwgY2hhbm5lbHM6IHUgfTsKICAgICAgYyA9IFk0KGMsIGQubGVmdCwgZC50b3AsIGwsIHMpOwogICAgfQogIH0KICB2YXIgdiA9IFsKICAgIDAsCiAgICAxLAogICAgMgogIF07CiAgcmV0dXJuICghYSB8fCBBLm5vQmFja2dyb3VuZCB8fCBlLm1hc2sgfHwgVm4oYykgfHwgZGwpICYmIHYudW5zaGlmdCgKICAgIC0xCiAgICAvKiBDaGFubmVsSUQuVHJhbnNwYXJlbmN5ICovCiAgKSwgdSA9IHYubWFwKGZ1bmN0aW9uKGspIHsKICAgIHZhciBFID0gUm4oaywgITEpLCBnLCB3OwogICAgcmV0dXJuIEEuY29tcHJlc3MgPyAoZyA9IFNuKGMsIFtFXSksIHcgPSAyKSA6IChnID0gVEEociwgYywgW0VdLCAhIUEucHNiKSwgdyA9IDEpLCB7IGNoYW5uZWxJZDogaywgY29tcHJlc3Npb246IHcsIGJ1ZmZlcjogZywgbGVuZ3RoOiAyICsgZy5sZW5ndGggfTsKICB9KSwgeyBsYXllcjogZSwgdG9wOiB0LCBsZWZ0OiBpLCByaWdodDogbiwgYm90dG9tOiBmLCBjaGFubmVsczogdSB9Owp9CmZ1bmN0aW9uIE9pKHIsIGUsIGEsIEEpIHsKICBmb3IgKHZhciB0ID0gci5kYXRhLCBpID0gci53aWR0aCwgbiA9IChlICogaSArIGEpICogNCArIDMgfCAwLCBmID0gbiArIChBIC0gYSkgKiA0IHwgMCwgdSA9IG47IHUgPCBmOyB1ID0gdSArIDQgfCAwKQogICAgaWYgKHRbdV0gIT09IDApCiAgICAgIHJldHVybiAhMTsKICByZXR1cm4gITA7Cn0KZnVuY3Rpb24gVWkociwgZSwgYSwgQSkgewogIGZvciAodmFyIHQgPSByLmRhdGEsIGkgPSByLndpZHRoLCBuID0gaSAqIDQgfCAwLCBmID0gYSAqIG4gKyBlICogNCArIDMgfCAwLCB1ID0gYSwgbyA9IGY7IHUgPCBBOyB1KyssIG8gPSBvICsgbiB8IDApCiAgICBpZiAodFtvXSAhPT0gMCkKICAgICAgcmV0dXJuICExOwogIHJldHVybiAhMDsKfQpmdW5jdGlvbiBVNChyKSB7CiAgZm9yICh2YXIgZSA9IDAsIGEgPSAwLCBBID0gci53aWR0aCwgdCA9IHIuaGVpZ2h0OyBlIDwgdCAmJiBPaShyLCBlLCBhLCBBKTsgKQogICAgZSsrOwogIGZvciAoOyB0ID4gZSAmJiBPaShyLCB0IC0gMSwgYSwgQSk7ICkKICAgIHQtLTsKICBmb3IgKDsgYSA8IEEgJiYgVWkociwgYSwgZSwgdCk7ICkKICAgIGErKzsKICBmb3IgKDsgQSA+IGEgJiYgVWkociwgQSAtIDEsIGUsIHQpOyApCiAgICBBLS07CiAgcmV0dXJuIHsgdG9wOiBlLCBsZWZ0OiBhLCByaWdodDogQSwgYm90dG9tOiB0IH07Cn0KZnVuY3Rpb24gcnIociwgZSkgewogIGUgPyAiciIgaW4gZSA/ICh4KAogICAgciwKICAgIDAKICAgIC8qIENvbG9yU3BhY2UuUkdCICovCiAgKSwgeChyLCBNYXRoLnJvdW5kKGUuciAqIDI1NykpLCB4KHIsIE1hdGgucm91bmQoZS5nICogMjU3KSksIHgociwgTWF0aC5yb3VuZChlLmIgKiAyNTcpKSwgeChyLCAwKSkgOiAiZnIiIGluIGUgPyAoeCgKICAgIHIsCiAgICAwCiAgICAvKiBDb2xvclNwYWNlLlJHQiAqLwogICksIHgociwgTWF0aC5yb3VuZChlLmZyICogMjU1ICogMjU3KSksIHgociwgTWF0aC5yb3VuZChlLmZnICogMjU1ICogMjU3KSksIHgociwgTWF0aC5yb3VuZChlLmZiICogMjU1ICogMjU3KSksIHgociwgMCkpIDogImwiIGluIGUgPyAoeCgKICAgIHIsCiAgICA3CiAgICAvKiBDb2xvclNwYWNlLkxhYiAqLwogICksIEUwKHIsIE1hdGgucm91bmQoZS5sICogMWU0KSksIEUwKHIsIE1hdGgucm91bmQoZS5hIDwgMCA/IGUuYSAqIDEyODAwIDogZS5hICogMTI3MDApKSwgRTAociwgTWF0aC5yb3VuZChlLmIgPCAwID8gZS5iICogMTI4MDAgOiBlLmIgKiAxMjcwMCkpLCB4KHIsIDApKSA6ICJoIiBpbiBlID8gKHgoCiAgICByLAogICAgMQogICAgLyogQ29sb3JTcGFjZS5IU0IgKi8KICApLCB4KHIsIE1hdGgucm91bmQoZS5oICogNjU1MzUpKSwgeChyLCBNYXRoLnJvdW5kKGUucyAqIDY1NTM1KSksIHgociwgTWF0aC5yb3VuZChlLmIgKiA2NTUzNSkpLCB4KHIsIDApKSA6ICJjIiBpbiBlID8gKHgoCiAgICByLAogICAgMgogICAgLyogQ29sb3JTcGFjZS5DTVlLICovCiAgKSwgeChyLCBNYXRoLnJvdW5kKGUuYyAqIDI1NykpLCB4KHIsIE1hdGgucm91bmQoZS5tICogMjU3KSksIHgociwgTWF0aC5yb3VuZChlLnkgKiAyNTcpKSwgeChyLCBNYXRoLnJvdW5kKGUuayAqIDI1NykpKSA6ICh4KAogICAgciwKICAgIDgKICAgIC8qIENvbG9yU3BhY2UuR3JheXNjYWxlICovCiAgKSwgeChyLCBNYXRoLnJvdW5kKGUuayAqIDFlNCAvIDI1NSkpLCBaMChyLCA2KSkgOiAoeCgKICAgIHIsCiAgICAwCiAgICAvKiBDb2xvclNwYWNlLlJHQiAqLwogICksIFowKHIsIDgpKTsKfQp2YXIgQmUgPSBmdW5jdGlvbigpIHsKICByZXR1cm4gQmUgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHIpIHsKICAgIGZvciAodmFyIGUsIGEgPSAxLCBBID0gYXJndW1lbnRzLmxlbmd0aDsgYSA8IEE7IGErKykgewogICAgICBlID0gYXJndW1lbnRzW2FdOwogICAgICBmb3IgKHZhciB0IGluIGUpIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCB0KSAmJiAoclt0XSA9IGVbdF0pOwogICAgfQogICAgcmV0dXJuIHI7CiAgfSwgQmUuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKfSwgajQgPSBbIm9mZiIsICJmYWRlIiwgInBlbiBwcmVzc3VyZSIsICJwZW4gdGlsdCIsICJzdHlsdXMgd2hlZWwiLCAiaW5pdGlhbCBkaXJlY3Rpb24iLCAiZGlyZWN0aW9uIiwgImluaXRpYWwgcm90YXRpb24iLCAicm90YXRpb24iXSwgamkgPSBbInJvdW5kIHBvaW50IiwgInJvdW5kIGJsdW50IiwgInJvdW5kIGN1cnZlIiwgInJvdW5kIGFuZ2xlIiwgInJvdW5kIGZhbiIsICJmbGF0IHBvaW50IiwgImZsYXQgYmx1bnQiLCAiZmxhdCBjdXJ2ZSIsICJmbGF0IGFuZ2xlIiwgImZsYXQgZmFuIl0sIFE0ID0gWyJlcm9kaWJsZSBwb2ludCIsICJlcm9kaWJsZSBmbGF0IiwgImVyb2RpYmxlIHJvdW5kIiwgImVyb2RpYmxlIHNxdWFyZSIsICJlcm9kaWJsZSB0cmlhbmdsZSIsICJjdXN0b20iXSwgSjQgPSB7CiAgXzogImJydXNoIiwKICBNaXhCOiAibWl4ZXIgYnJ1c2giLAogIFNtVGw6ICJzbXVkZ2UgYnJ1c2giCiAgLy8gUGJUbAogIC8vIEVyVGwKfTsKZnVuY3Rpb24gdHIocikgewogIHJldHVybiB7CiAgICBjb250cm9sOiBqNFtyLmJWVHldLAogICAgc3RlcHM6IHIuZlN0cCwKICAgIGppdHRlcjogQTAoci5qaXR0ZXIpLAogICAgbWluaW11bTogQTAoclsiTW5tICJdKQogIH07Cn0KZnVuY3Rpb24gUWkocikgewogIHN3aXRjaCAoci5fY2xhc3NJRCkgewogICAgY2FzZSAiY29tcHV0ZWRCcnVzaCI6CiAgICAgIHJldHVybiB7CiAgICAgICAgdHlwZTogImNvbXB1dGVkIiwKICAgICAgICBzaXplOiByZShyLkRtdHIsICJQaXhlbHMiKSwKICAgICAgICBhbmdsZTogbGEoci5BbmdsKSwKICAgICAgICByb3VuZG5lc3M6IEEwKHIuUm5kbiksCiAgICAgICAgc3BhY2luZ09uOiByLkludHIsCiAgICAgICAgc3BhY2luZzogQTAoci5TcGNuKSwKICAgICAgICBmbGlwWDogci5mbGlwWCwKICAgICAgICBmbGlwWTogci5mbGlwWSwKICAgICAgICBoYXJkbmVzczogQTAoci5IcmRuKQogICAgICB9OwogICAgY2FzZSAic2FtcGxlZEJydXNoIjoKICAgICAgcmV0dXJuIHsKICAgICAgICB0eXBlOiAic2FtcGxlZCIsCiAgICAgICAgc2l6ZTogcmUoci5EbXRyLCAiUGl4ZWxzIiksCiAgICAgICAgYW5nbGU6IGxhKHIuQW5nbCksCiAgICAgICAgcm91bmRuZXNzOiBBMChyLlJuZG4pLAogICAgICAgIHNwYWNpbmdPbjogci5JbnRyLAogICAgICAgIHNwYWNpbmc6IEEwKHIuU3BjbiksCiAgICAgICAgZmxpcFg6IHIuZmxpcFgsCiAgICAgICAgZmxpcFk6IHIuZmxpcFksCiAgICAgICAgbmFtZTogclsiTm0gICJdLAogICAgICAgIHNhbXBsZWREYXRhOiByLnNhbXBsZWREYXRhCiAgICAgIH07CiAgICBjYXNlICJkQnJ1c2giOgogICAgICByZXR1cm4gewogICAgICAgIHR5cGU6ICJkeW5hbWljIiwKICAgICAgICBzaGFwZTogamlbclsiU2hwICJdXSwKICAgICAgICBhbmdsZTogbGEoci5BbmdsKSwKICAgICAgICBzaXplOiByZShyLkRtdHIsICJQaXhlbHMiKSwKICAgICAgICBkZW5zaXR5OiBBMChyLkRuc3QpLAogICAgICAgIGxlbmd0aDogQTAoci5Mbmd0KSwKICAgICAgICBjbHVtcGluZzogQTAoci5jbHVtcGluZyksCiAgICAgICAgdGhpY2tuZXNzOiBBMChyLnRoaWNrbmVzcyksCiAgICAgICAgc3RpZmZuZXNzOiBBMChyLnN0aWZmbmVzcyksCiAgICAgICAgcGh5c2ljczogci5waHlzaWNzLAogICAgICAgIHNwYWNpbmc6IEEwKHIuU3BjbiksCiAgICAgICAgc3BhY2luZ09uOiByLkludHIsCiAgICAgICAgZmxpcFg6IHIuZmxpcFgsCiAgICAgICAgZmxpcFk6IHIuZmxpcFkKICAgICAgfTsKICAgIGNhc2UgImRUaXBzIjoKICAgICAgcmV0dXJuIEJlKEJlKHsKICAgICAgICB0eXBlOiAidGlwcyIsCiAgICAgICAgYW5nbGU6IGxhKHIuQW5nbCksCiAgICAgICAgc2l6ZTogcmUoci5EbXRyLCAiUGl4ZWxzIiksCiAgICAgICAgc2hhcGU6IGppW3JbIlNocCAiXV0sCiAgICAgICAgcGh5c2ljczogci5waHlzaWNzLAogICAgICAgIHNwYWNpbmc6IEEwKHIuU3BjbiksCiAgICAgICAgc3BhY2luZ09uOiByLkludHIsCiAgICAgICAgZmxpcFg6IHIuZmxpcFgsCiAgICAgICAgZmxpcFk6IHIuZmxpcFksCiAgICAgICAgLy8gdGlwczoKICAgICAgICB0aXBzVHlwZTogUTRbci5kdGlwc1R5cGVdLAogICAgICAgIHRpcHNMZW5ndGhSYXRpbzogQTAoci5kdGlwc0xlbmd0aFJhdGlvKSwKICAgICAgICB0aXBzSGFyZG5lc3M6IEEwKHIuZHRpcHNIYXJkbmVzcykKICAgICAgfSwgci5kdGlwc0dyaWRTaXplICYmIHIuZHRpcHNFcm9kaWJsZVRpcEhlaWdodE1hcCA/IHsKICAgICAgICB0aXBzR3JpZFNpemU6IHIuZHRpcHNHcmlkU2l6ZSwKICAgICAgICB0aXBzRXJvZGlibGVUaXBIZWlnaHRNYXA6IEg0KHIuZHRpcHNFcm9kaWJsZVRpcEhlaWdodE1hcCkKICAgICAgfSA6IHt9KSwgewogICAgICAgIC8vIGFpcmJydXNoCiAgICAgICAgdGlwc0FpcmJydXNoQ3V0b2ZmQW5nbGU6IHIuZHRpcHNBaXJicnVzaEN1dG9mZkFuZ2xlLAogICAgICAgIHRpcHNBaXJicnVzaEdyYW51bGFyaXR5OiBBMChyLmR0aXBzQWlyYnJ1c2hHcmFudWxhcml0eSksCiAgICAgICAgdGlwc0FpcmJydXNoU3RyZWFraW5lc3M6IEEwKHIuZHRpcHNBaXJicnVzaFN0cmVha2luZXNzKSwKICAgICAgICB0aXBzQWlyYnJ1c2hTcGxhdFNpemU6IEEwKHIuZHRpcHNBaXJicnVzaFNwbGF0U2l6ZSksCiAgICAgICAgdGlwc0FpcmJydXNoU3BsYXRDb3VudDogci5kdGlwc0FpcmJydXNoU3BsYXRDb3VudAogICAgICB9KTsKICAgIGRlZmF1bHQ6CiAgICAgIHRocm93IGNvbnNvbGUubG9nKHJlcXVpcmUoInV0aWwiKS5pbnNwZWN0KHIsICExLCA5OSwgITApKSwgbmV3IEVycm9yKCJVbmtub3duIGJydXNoIGNsYXNzSWQ6ICIuY29uY2F0KHIuX2NsYXNzSUQpKTsKICB9Cn0KZnVuY3Rpb24gSDQocikgewogIGZvciAodmFyIGUgPSBbXSwgYSA9IDA7IGEgPCByLmJ5dGVMZW5ndGg7IGErKykKICAgIGUucHVzaChyW2FdKTsKICByZXR1cm4gZTsKfQpmdW5jdGlvbiB6NChyLCBlKSB7CiAgdmFyIGEsIEEsIHQsIGk7CiAgZSA9PT0gdm9pZCAwICYmIChlID0ge30pOwogIHZhciBuID0gS2Eoci5idWZmZXIsIHIuYnl0ZU9mZnNldCwgci5ieXRlTGVuZ3RoKSwgZiA9IGcwKG4pLCB1ID0gW10sIG8gPSBbXSwgbCA9IFtdOwogIGlmIChmID09PSAxIHx8IGYgPT09IDIpCiAgICB0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIEFCUiB2ZXJzaW9uICgiLmNvbmNhdChmLCAiKSIpKTsKICBpZiAoZiA9PT0gNiB8fCBmID09PSA3IHx8IGYgPT09IDkgfHwgZiA9PT0gMTApIHsKICAgIHZhciBzID0gZzAobik7CiAgICBpZiAocyAhPT0gMSAmJiBzICE9PSAyKQogICAgICB0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIEFCUiBtaW5vciB2ZXJzaW9uIik7CiAgICBmb3IgKDsgbi5vZmZzZXQgPCBuLnZpZXcuYnl0ZUxlbmd0aDsgKSB7CiAgICAgIEpyKG4sICI4QklNIik7CiAgICAgIHZhciBjID0gUjAobiksIGQgPSBTKG4pLCB2ID0gbi5vZmZzZXQgKyBkOwogICAgICBzd2l0Y2ggKGMpIHsKICAgICAgICBjYXNlICJzYW1wIjogewogICAgICAgICAgZm9yICg7IG4ub2Zmc2V0IDwgdjsgKSB7CiAgICAgICAgICAgIGZvciAodmFyIGsgPSBTKG4pOyBrICYgMzsgKQogICAgICAgICAgICAgIGsrKzsKICAgICAgICAgICAgdmFyIEUgPSBuLm9mZnNldCArIGssIGcgPSB4cihuLCAxKTsKICAgICAgICAgICAgSChuLCBzID09PSAxID8gMTAgOiAyNjQpOwogICAgICAgICAgICB2YXIgdyA9IEwobiksIEIgPSBMKG4pLCBtID0gTChuKSAtIHcsIHAgPSBMKG4pIC0gQjsKICAgICAgICAgICAgaWYgKHAgPD0gMCB8fCBtIDw9IDApCiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGJvdW5kcyIpOwogICAgICAgICAgICB2YXIgVyA9IGcwKG4pLCBDID0gTyhuKSwgXyA9IG5ldyBVaW50OEFycmF5KHAgKiBtKTsKICAgICAgICAgICAgaWYgKFcgPT09IDgpCiAgICAgICAgICAgICAgaWYgKEMgPT09IDApCiAgICAgICAgICAgICAgICBfLnNldChZMChuLCBfLmJ5dGVMZW5ndGgpKTsKICAgICAgICAgICAgICBlbHNlIGlmIChDID09PSAxKQogICAgICAgICAgICAgICAgc2EobiwgeyB3aWR0aDogcCwgaGVpZ2h0OiBtLCBkYXRhOiBfIH0sIHAsIG0sIFcsIDEsIFswXSwgITEpOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb21wcmVzc2lvbiIpOwogICAgICAgICAgICBlbHNlIGlmIChXID09PSAxNikKICAgICAgICAgICAgICBpZiAoQyA9PT0gMCkKICAgICAgICAgICAgICAgIGZvciAodmFyIE4gPSAwOyBOIDwgXy5ieXRlTGVuZ3RoOyBOKyspCiAgICAgICAgICAgICAgICAgIF9bTl0gPSBQKG4pID4+IDg7CiAgICAgICAgICAgICAgZWxzZSB0aHJvdyBDID09PSAxID8gbmV3IEVycm9yKCJub3QgaW1wbGVtZW50ZWQgKDE2Yml0IFJMRSkiKSA6IG5ldyBFcnJvcigiSW52YWxpZCBjb21wcmVzc2lvbiIpOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGRlcHRoIik7CiAgICAgICAgICAgIHUucHVzaCh7IGlkOiBnLCBib3VuZHM6IHsgeDogQiwgeTogdywgdzogcCwgaDogbSB9LCBhbHBoYTogXyB9KSwgbi5vZmZzZXQgPSBFOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGNhc2UgImRlc2MiOiB7CiAgICAgICAgICBmb3IgKHZhciBEID0gbTAobiwgITApLCBZID0gMCwgZjAgPSBELkJyc2g7IFkgPCBmMC5sZW5ndGg7IFkrKykgewogICAgICAgICAgICB2YXIgRyA9IGYwW1ldLCBKID0gewogICAgICAgICAgICAgIG5hbWU6IEdbIk5tICAiXSwKICAgICAgICAgICAgICBzaGFwZTogUWkoRy5CcnNoKSwKICAgICAgICAgICAgICBzcGFjaW5nOiBBMChHLlNwY24pLAogICAgICAgICAgICAgIC8vIFRPRE86IGJydXNoR3JvdXAgPz8/CiAgICAgICAgICAgICAgd2V0RWRnZXM6IEcuV3RkZywKICAgICAgICAgICAgICBub2lzZTogRy5Ob3NlLAogICAgICAgICAgICAgIC8vIFRPRE86IFR4dEMgPz8/IHNtb290aGluZyAvIGJ1aWxkLXVwID8KICAgICAgICAgICAgICAvLyBUT0RPOiAnUnB0ICcgPz8/CiAgICAgICAgICAgICAgdXNlQnJ1c2hTaXplOiBHLnVzZUJydXNoU2l6ZQogICAgICAgICAgICAgIC8vID8/PwogICAgICAgICAgICB9OwogICAgICAgICAgICBHLmludGVycHJldGF0aW9uICE9IG51bGwgJiYgKEouaW50ZXJwcmV0YXRpb24gPSBHLmludGVycHJldGF0aW9uKSwgRy5wcm90ZWN0VGV4dHVyZSAhPSBudWxsICYmIChKLnByb3RlY3RUZXh0dXJlID0gRy5wcm90ZWN0VGV4dHVyZSksIEcudXNlVGlwRHluYW1pY3MgJiYgKEouc2hhcGVEeW5hbWljcyA9IHsKICAgICAgICAgICAgICB0aWx0U2NhbGU6IEEwKEcudGlsdFNjYWxlKSwKICAgICAgICAgICAgICBzaXplRHluYW1pY3M6IHRyKEcuc3pWciksCiAgICAgICAgICAgICAgYW5nbGVEeW5hbWljczogdHIoRy5hbmdsZUR5bmFtaWNzKSwKICAgICAgICAgICAgICByb3VuZG5lc3NEeW5hbWljczogdHIoRy5yb3VuZG5lc3NEeW5hbWljcyksCiAgICAgICAgICAgICAgZmxpcFg6IEcuZmxpcFgsCiAgICAgICAgICAgICAgZmxpcFk6IEcuZmxpcFksCiAgICAgICAgICAgICAgYnJ1c2hQcm9qZWN0aW9uOiBHLmJydXNoUHJvamVjdGlvbiwKICAgICAgICAgICAgICBtaW5pbXVtRGlhbWV0ZXI6IEEwKEcubWluaW11bURpYW1ldGVyKSwKICAgICAgICAgICAgICBtaW5pbXVtUm91bmRuZXNzOiBBMChHLm1pbmltdW1Sb3VuZG5lc3MpCiAgICAgICAgICAgIH0pLCBHLnVzZVNjYXR0ZXIgJiYgKEouc2NhdHRlciA9IHsKICAgICAgICAgICAgICBjb3VudDogR1siQ250ICJdLAogICAgICAgICAgICAgIGJvdGhBeGVzOiBHLmJvdGhBeGVzLAogICAgICAgICAgICAgIGNvdW50RHluYW1pY3M6IHRyKEcuY291bnREeW5hbWljcyksCiAgICAgICAgICAgICAgc2NhdHRlckR5bmFtaWNzOiB0cihHLnNjYXR0ZXJEeW5hbWljcykKICAgICAgICAgICAgfSksIEcudXNlVGV4dHVyZSAmJiBHLlR4dHIgJiYgKEoudGV4dHVyZSA9IHsKICAgICAgICAgICAgICBpZDogRy5UeHRyLklkbnQsCiAgICAgICAgICAgICAgbmFtZTogRy5UeHRyWyJObSAgIl0sCiAgICAgICAgICAgICAgYmxlbmRNb2RlOiBvci5kZWNvZGUoRy50ZXh0dXJlQmxlbmRNb2RlKSwKICAgICAgICAgICAgICBkZXB0aDogQTAoRy50ZXh0dXJlRGVwdGgpLAogICAgICAgICAgICAgIGRlcHRoTWluaW11bTogQTAoRy5taW5pbXVtRGVwdGgpLAogICAgICAgICAgICAgIGRlcHRoRHluYW1pY3M6IHRyKEcudGV4dHVyZURlcHRoRHluYW1pY3MpLAogICAgICAgICAgICAgIHNjYWxlOiBBMChHLnRleHR1cmVTY2FsZSksCiAgICAgICAgICAgICAgaW52ZXJ0OiBHLkludlQsCiAgICAgICAgICAgICAgYnJpZ2h0bmVzczogRy50ZXh0dXJlQnJpZ2h0bmVzcywKICAgICAgICAgICAgICBjb250cmFzdDogRy50ZXh0dXJlQ29udHJhc3QsCiAgICAgICAgICAgICAgdGV4dHVyZUVhY2hUaXA6ICEhRy5UeHRDCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICB2YXIgSyA9IEcuZHVhbEJydXNoOwogICAgICAgICAgICBLICYmIEsudXNlRHVhbEJydXNoICYmIChKLmR1YWxCcnVzaCA9IHsKICAgICAgICAgICAgICBmbGlwOiBLLkZsaXAsCiAgICAgICAgICAgICAgc2hhcGU6IFFpKEsuQnJzaCksCiAgICAgICAgICAgICAgYmxlbmRNb2RlOiBvci5kZWNvZGUoSy5CbG5NKSwKICAgICAgICAgICAgICB1c2VTY2F0dGVyOiBLLnVzZVNjYXR0ZXIsCiAgICAgICAgICAgICAgc3BhY2luZzogQTAoSy5TcGNuKSwKICAgICAgICAgICAgICBjb3VudDogS1siQ250ICJdLAogICAgICAgICAgICAgIGJvdGhBeGVzOiBLLmJvdGhBeGVzLAogICAgICAgICAgICAgIGNvdW50RHluYW1pY3M6IHRyKEsuY291bnREeW5hbWljcyksCiAgICAgICAgICAgICAgc2NhdHRlckR5bmFtaWNzOiB0cihLLnNjYXR0ZXJEeW5hbWljcykKICAgICAgICAgICAgfSksIEcudXNlQ29sb3JEeW5hbWljcyAmJiAoSi5jb2xvckR5bmFtaWNzID0gewogICAgICAgICAgICAgIGZvcmVncm91bmRCYWNrZ3JvdW5kOiB0cihHLmNsVnIpLAogICAgICAgICAgICAgIGh1ZTogQTAoR1siSCAgICJdKSwKICAgICAgICAgICAgICBzYXR1cmF0aW9uOiBBMChHLlN0cnQpLAogICAgICAgICAgICAgIGJyaWdodG5lc3M6IEEwKEcuQnJnaCksCiAgICAgICAgICAgICAgcHVyaXR5OiBBMChHLnB1cml0eSksCiAgICAgICAgICAgICAgcGVyVGlwOiBHLmNvbG9yRHluYW1pY3NQZXJUaXAKICAgICAgICAgICAgfSksIEcudXNlUGFpbnREeW5hbWljcyAmJiAoSi50cmFuc2ZlciA9IHsKICAgICAgICAgICAgICBmbG93RHluYW1pY3M6IHRyKEcucHJWciksCiAgICAgICAgICAgICAgb3BhY2l0eUR5bmFtaWNzOiB0cihHLm9wVnIpLAogICAgICAgICAgICAgIHdldG5lc3NEeW5hbWljczogdHIoRy53dFZyKSwKICAgICAgICAgICAgICBtaXhEeW5hbWljczogdHIoRy5teFZyKQogICAgICAgICAgICB9KSwgRy51c2VCcnVzaFBvc2UgJiYgKEouYnJ1c2hQb3NlID0gewogICAgICAgICAgICAgIG92ZXJyaWRlQW5nbGU6IEcub3ZlcnJpZGVQb3NlQW5nbGUsCiAgICAgICAgICAgICAgb3ZlcnJpZGVUaWx0WDogRy5vdmVycmlkZVBvc2VUaWx0WCwKICAgICAgICAgICAgICBvdmVycmlkZVRpbHRZOiBHLm92ZXJyaWRlUG9zZVRpbHRZLAogICAgICAgICAgICAgIG92ZXJyaWRlUHJlc3N1cmU6IEcub3ZlcnJpZGVQb3NlUHJlc3N1cmUsCiAgICAgICAgICAgICAgcHJlc3N1cmU6IEEwKEcuYnJ1c2hQb3NlUHJlc3N1cmUpLAogICAgICAgICAgICAgIHRpbHRYOiBHLmJydXNoUG9zZVRpbHRYLAogICAgICAgICAgICAgIHRpbHRZOiBHLmJydXNoUG9zZVRpbHRZLAogICAgICAgICAgICAgIGFuZ2xlOiBHLmJydXNoUG9zZUFuZ2xlCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICB2YXIgWCA9IEcudG9vbE9wdGlvbnM7CiAgICAgICAgICAgIFggJiYgKEoudG9vbE9wdGlvbnMgPSB7CiAgICAgICAgICAgICAgdHlwZTogSjRbWC5fY2xhc3NJRF0gfHwgImJydXNoIiwKICAgICAgICAgICAgICBicnVzaFByZXNldDogWC5icnVzaFByZXNldCwKICAgICAgICAgICAgICBmbG93OiAoYSA9IFguZmxvdykgIT09IG51bGwgJiYgYSAhPT0gdm9pZCAwID8gYSA6IDEwMCwKICAgICAgICAgICAgICBzbW9vdGg6IChBID0gWC5TbW9vKSAhPT0gbnVsbCAmJiBBICE9PSB2b2lkIDAgPyBBIDogMCwKICAgICAgICAgICAgICBtb2RlOiBvci5kZWNvZGUoWFsiTWQgICJdIHx8ICJCbG5NLk5ybWwiKSwKICAgICAgICAgICAgICBvcGFjaXR5OiAodCA9IFguT3BjdCkgIT09IG51bGwgJiYgdCAhPT0gdm9pZCAwID8gdCA6IDEwMCwKICAgICAgICAgICAgICBzbW9vdGhpbmc6ICEhWC5zbW9vdGhpbmcsCiAgICAgICAgICAgICAgc21vb3RoaW5nVmFsdWU6IFguc21vb3RoaW5nVmFsdWUgfHwgMCwKICAgICAgICAgICAgICBzbW9vdGhpbmdSYWRpdXNNb2RlOiAhIVguc21vb3RoaW5nUmFkaXVzTW9kZSwKICAgICAgICAgICAgICBzbW9vdGhpbmdDYXRjaHVwOiAhIVguc21vb3RoaW5nQ2F0Y2h1cCwKICAgICAgICAgICAgICBzbW9vdGhpbmdDYXRjaHVwQXRFbmQ6ICEhWC5zbW9vdGhpbmdDYXRjaHVwQXRFbmQsCiAgICAgICAgICAgICAgc21vb3RoaW5nWm9vbUNvbXBlbnNhdGlvbjogISFYLnNtb290aGluZ1pvb21Db21wZW5zYXRpb24sCiAgICAgICAgICAgICAgcHJlc3N1cmVTbW9vdGhpbmc6ICEhWC5wcmVzc3VyZVNtb290aGluZywKICAgICAgICAgICAgICB1c2VQcmVzc3VyZU92ZXJyaWRlc1NpemU6ICEhWC51c2VQcmVzc3VyZU92ZXJyaWRlc1NpemUsCiAgICAgICAgICAgICAgdXNlUHJlc3N1cmVPdmVycmlkZXNPcGFjaXR5OiAhIVgudXNlUHJlc3N1cmVPdmVycmlkZXNPcGFjaXR5LAogICAgICAgICAgICAgIHVzZUxlZ2FjeTogISFYLnVzZUxlZ2FjeQogICAgICAgICAgICB9LCBYLnByVnIgJiYgKEoudG9vbE9wdGlvbnMuZmxvd0R5bmFtaWNzID0gdHIoWC5wclZyKSksIFgub3BWciAmJiAoSi50b29sT3B0aW9ucy5vcGFjaXR5RHluYW1pY3MgPSB0cihYLm9wVnIpKSwgWC5zelZyICYmIChKLnRvb2xPcHRpb25zLnNpemVEeW5hbWljcyA9IHRyKFguc3pWcikpLCAid2V0bmVzcyIgaW4gWCAmJiAoSi50b29sT3B0aW9ucy53ZXRuZXNzID0gWC53ZXRuZXNzKSwgImRyeW5lc3MiIGluIFggJiYgKEoudG9vbE9wdGlvbnMuZHJ5bmVzcyA9IFguZHJ5bmVzcyksICJtaXgiIGluIFggJiYgKEoudG9vbE9wdGlvbnMubWl4ID0gWC5taXgpLCAiYXV0b0ZpbGwiIGluIFggJiYgKEoudG9vbE9wdGlvbnMuYXV0b0ZpbGwgPSBYLmF1dG9GaWxsKSwgImF1dG9DbGVhbiIgaW4gWCAmJiAoSi50b29sT3B0aW9ucy5hdXRvQ2xlYW4gPSBYLmF1dG9DbGVhbiksICJsb2FkU29saWRDb2xvck9ubHkiIGluIFggJiYgKEoudG9vbE9wdGlvbnMubG9hZFNvbGlkQ29sb3JPbmx5ID0gWC5sb2FkU29saWRDb2xvck9ubHkpLCAic2FtcGxlQWxsTGF5ZXJzIiBpbiBYICYmIChKLnRvb2xPcHRpb25zLnNhbXBsZUFsbExheWVycyA9IFguc2FtcGxlQWxsTGF5ZXJzKSwgIlNtZEYiIGluIFggJiYgKEoudG9vbE9wdGlvbnMuc211ZGdlRmluZ2VyUGFpbnRpbmcgPSBYLlNtZEYpLCAiU21kUyIgaW4gWCAmJiAoSi50b29sT3B0aW9ucy5zbXVkZ2VTYW1wbGVBbGxMYXllcnMgPSBYLlNtZFMpLCAiUHJzICIgaW4gWCAmJiAoSi50b29sT3B0aW9ucy5zdHJlbmd0aCA9IFhbIlBycyAiXSksICJTbWRGIiBpbiBYICYmIChKLnRvb2xPcHRpb25zLnNtdWRnZUZpbmdlclBhaW50aW5nID0gWC5TbWRGKSwgIlNtZFMiIGluIFggJiYgKEoudG9vbE9wdGlvbnMuc211ZGdlU2FtcGxlQWxsTGF5ZXJzID0gWC5TbWRTKSksIG8ucHVzaChKKTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBjYXNlICJwYXR0IjogewogICAgICAgICAgZm9yICg7IG4ub2Zmc2V0IDwgdjsgKQogICAgICAgICAgICBsLnB1c2goaTQobikpOwogICAgICAgICAgbi5vZmZzZXQgPSB2OwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGNhc2UgInBocnkiOiB7CiAgICAgICAgICB2YXIgRCA9IG0wKG4pOwogICAgICAgICAgZS5sb2dNaXNzaW5nRmVhdHVyZXMgJiYgISgoaSA9IEQuaGllcmFyY2h5KSA9PT0gbnVsbCB8fCBpID09PSB2b2lkIDApICYmIGkubGVuZ3RoOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYnJ1c2ggdHlwZTogIi5jb25jYXQoYykpOwogICAgICB9CiAgICAgIGZvciAoOyBkICUgNDsgKQogICAgICAgIG4ub2Zmc2V0KyssIGQrKzsKICAgIH0KICB9IGVsc2UKICAgIHRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgQUJSIHZlcnNpb24gKCIuY29uY2F0KGYsICIpIikpOwogIHJldHVybiB7IHNhbXBsZXM6IHUsIHBhdHRlcm5zOiBsLCBicnVzaGVzOiBvIH07Cn0KdmFyIENBID0gZnVuY3Rpb24oKSB7CiAgcmV0dXJuIENBID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbihyKSB7CiAgICBmb3IgKHZhciBlLCBhID0gMSwgQSA9IGFyZ3VtZW50cy5sZW5ndGg7IGEgPCBBOyBhKyspIHsKICAgICAgZSA9IGFyZ3VtZW50c1thXTsKICAgICAgZm9yICh2YXIgdCBpbiBlKSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSwgdCkgJiYgKHJbdF0gPSBlW3RdKTsKICAgIH0KICAgIHJldHVybiByOwogIH0sIENBLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Cn07CmZ1bmN0aW9uIEw0KHIpIHsKICB2YXIgZSA9IEthKHIuYnVmZmVyLCByLmJ5dGVPZmZzZXQsIHIuYnl0ZUxlbmd0aCksIGEgPSB7IHNoYXBlczogW10gfTsKICBpZiAoSnIoZSwgImN1c2giKSwgUyhlKSAhPT0gMikKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCB2ZXJzaW9uIik7CiAgZm9yICh2YXIgQSA9IFMoZSksIHQgPSAwOyB0IDwgQTsgdCsrKSB7CiAgICBmb3IgKHZhciBpID0gejAoZSk7IGUub2Zmc2V0ICUgNDsgKQogICAgICBlLm9mZnNldCsrOwogICAgaWYgKFMoZSkgIT09IDEpCiAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzaGFwZSB2ZXJzaW9uIik7CiAgICB2YXIgbiA9IFMoZSksIGYgPSBlLm9mZnNldCArIG4sIHUgPSB4cihlLCAxKSwgbyA9IFMoZSksIGwgPSBTKGUpLCBzID0gUyhlKSwgYyA9IFMoZSksIGQgPSBjIC0gbCwgdiA9IHMgLSBvLCBrID0geyBwYXRoczogW10gfTsKICAgIHJmKGUsIGssIGQsIHYsIGYgLSBlLm9mZnNldCksIGEuc2hhcGVzLnB1c2goQ0EoeyBuYW1lOiBpLCBpZDogdSwgd2lkdGg6IGQsIGhlaWdodDogdiB9LCBrKSksIGUub2Zmc2V0ID0gZjsKICB9CiAgcmV0dXJuIGE7Cn0KdmFyIFdBOwooZnVuY3Rpb24ocikgewogIHJbci5CaXRtYXAgPSAwXSA9ICJCaXRtYXAiLCByW3IuR3JheXNjYWxlID0gMV0gPSAiR3JheXNjYWxlIiwgcltyLkluZGV4ZWQgPSAyXSA9ICJJbmRleGVkIiwgcltyLlJHQiA9IDNdID0gIlJHQiIsIHJbci5DTVlLID0gNF0gPSAiQ01ZSyIsIHJbci5NdWx0aWNoYW5uZWwgPSA3XSA9ICJNdWx0aWNoYW5uZWwiLCByW3IuRHVvdG9uZSA9IDhdID0gIkR1b3RvbmUiLCByW3IuTGFiID0gOV0gPSAiTGFiIjsKfSkoV0EgfHwgKFdBID0ge30pKTsKdmFyIF9BOwooZnVuY3Rpb24ocikgewogIHJbci5PdGhlciA9IDBdID0gIk90aGVyIiwgcltyLk9wZW5Gb2xkZXIgPSAxXSA9ICJPcGVuRm9sZGVyIiwgcltyLkNsb3NlZEZvbGRlciA9IDJdID0gIkNsb3NlZEZvbGRlciIsIHJbci5Cb3VuZGluZ1NlY3Rpb25EaXZpZGVyID0gM10gPSAiQm91bmRpbmdTZWN0aW9uRGl2aWRlciI7Cn0pKF9BIHx8IChfQSA9IHt9KSk7CnZhciBHQTsKKGZ1bmN0aW9uKHIpIHsKICByW3IuTm9uZSA9IDBdID0gIk5vbmUiLCByW3IuVmlzaWJpbGl0eSA9IDFdID0gIlZpc2liaWxpdHkiLCByW3IuUG9zaXRpb24gPSAyXSA9ICJQb3NpdGlvbiIsIHJbci5BcHBlYXJhbmNlID0gNF0gPSAiQXBwZWFyYW5jZSI7Cn0pKEdBIHx8IChHQSA9IHt9KSk7CnZhciBYQTsKKGZ1bmN0aW9uKHIpIHsKICByW3IuQ29sb3IwID0gMF0gPSAiQ29sb3IwIiwgcltyLkNvbG9yMSA9IDFdID0gIkNvbG9yMSIsIHJbci5Db2xvcjIgPSAyXSA9ICJDb2xvcjIiLCByW3IuQ29sb3IzID0gM10gPSAiQ29sb3IzIiwgcltyLlRyYW5zcGFyZW5jeSA9IC0xXSA9ICJUcmFuc3BhcmVuY3kiLCByW3IuVXNlck1hc2sgPSAtMl0gPSAiVXNlck1hc2siLCByW3IuUmVhbFVzZXJNYXNrID0gLTNdID0gIlJlYWxVc2VyTWFzayI7Cn0pKFhBIHx8IChYQSA9IHt9KSk7CnZhciBSQTsKKGZ1bmN0aW9uKHIpIHsKICByW3IuUmF3RGF0YSA9IDBdID0gIlJhd0RhdGEiLCByW3IuUmxlQ29tcHJlc3NlZCA9IDFdID0gIlJsZUNvbXByZXNzZWQiLCByW3IuWmlwV2l0aG91dFByZWRpY3Rpb24gPSAyXSA9ICJaaXBXaXRob3V0UHJlZGljdGlvbiIsIHJbci5aaXBXaXRoUHJlZGljdGlvbiA9IDNdID0gIlppcFdpdGhQcmVkaWN0aW9uIjsKfSkoUkEgfHwgKFJBID0ge30pKTsKdmFyIEs0ID0geG47CmZ1bmN0aW9uIHE0KHIsIGUpIHsKICB2YXIgYSA9ICJidWZmZXIiIGluIHIgPyBLYShyLmJ1ZmZlciwgci5ieXRlT2Zmc2V0LCByLmJ5dGVMZW5ndGgpIDogS2Eocik7CiAgcmV0dXJuIEhsKGEsIGUpOwp9CmZ1bmN0aW9uICQ0KHIsIGUpIHsKICB2YXIgYSA9IG5mKCk7CiAgcmV0dXJuIHVmKGEsIHIsIGUpLCBXNChhKTsKfQpmdW5jdGlvbiBiZihyLCBlKSB7CiAgdmFyIGEgPSBuZigpOwogIHJldHVybiB1ZihhLCByLCBlKSwgXzQoYSk7Cn0KZnVuY3Rpb24gcmMociwgZSkgewogIGlmICh0eXBlb2YgQnVmZmVyID4gInUiKQogICAgdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtIik7CiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGJmKHIsIGUpKTsKfQpmdW5jdGlvbiBhYyhyLCBlKSB7CiAgTjEociwgZSk7Cn0KdmFyIEppID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5mcmVlemUoewogIF9fcHJvdG9fXzogbnVsbCwKICBnZXQgQ2hhbm5lbElEKCkgewogICAgcmV0dXJuIFhBOwogIH0sCiAgZ2V0IENvbG9yTW9kZSgpIHsKICAgIHJldHVybiBXQTsKICB9LAogIGdldCBDb21wcmVzc2lvbigpIHsKICAgIHJldHVybiBSQTsKICB9LAogIGdldCBMYXllckNvbXBDYXB0dXJlZEluZm8oKSB7CiAgICByZXR1cm4gR0E7CiAgfSwKICBnZXQgU2VjdGlvbkRpdmlkZXJUeXBlKCkgewogICAgcmV0dXJuIF9BOwogIH0sCiAgYnl0ZUFycmF5VG9CYXNlNjQ6IEs0LAogIGRlY29kZUxheWVyUGl4ZWxzOiBhYywKICBpbml0aWFsaXplQ2FudmFzOiBtbCwKICByZWFkQWJyOiB6NCwKICByZWFkQ3NoOiBMNCwKICByZWFkUHNkOiBxNCwKICB3cml0ZVBzZDogJDQsCiAgd3JpdGVQc2RCdWZmZXI6IHJjLAogIHdyaXRlUHNkVWludDhBcnJheTogYmYKfSk7Ci8vIyBzb3VyY2VNYXBwaW5nVVJMPWltYWdlRGVjb2Rlci53b3JrZXItRG93dTJCTHkuanMubWFwCg==\", HM = (I) => Uint8Array.from(atob(I), (M) => M.charCodeAt(0)), V = typeof self < \"u\" && self.Blob && new Blob([\"URL.revokeObjectURL(import.meta.url);\", HM(O)], { type: \"text/javascript;charset=utf-8\" });\nfunction mM(I) {\n  let M;\n  try {\n    if (M = V && (self.URL || self.webkitURL).createObjectURL(V), !M) throw \"\";\n    const K = new Worker(M, {\n      type: \"module\",\n      name: I == null ? void 0 : I.name\n    });\n    return K.addEventListener(\"error\", () => {\n      (self.URL || self.webkitURL).revokeObjectURL(M);\n    }), K;\n  } catch {\n    return new Worker(\n      \"data:text/javascript;base64,\" + O,\n      {\n        type: \"module\",\n        name: I == null ? void 0 : I.name\n      }\n    );\n  }\n}\nconst kM = /* @__PURE__ */ new Set([\n  \"image/heic\",\n  \"image/heif\",\n  \"image/x-canon-cr2\",\n  \"image/x-nikon-nef\",\n  \"image/x-sony-arw\",\n  \"image/x-adobe-dng\",\n  \"image/x-fuji-raf\",\n  \"image/x-olympus-orf\",\n  \"image/vnd.adobe.photoshop\"\n]);\nfunction jI(I) {\n  return kM.has(I);\n}\nasync function XI(I, M, K) {\n  return new Promise((P, w) => {\n    let g;\n    try {\n      g = new mM();\n    } catch (T) {\n      w(new Error(`无法创建 Worker: ${(T == null ? void 0 : T.message) || \"未知错误\"}`));\n      return;\n    }\n    const C = Math.random().toString(36).slice(2), y = (T) => {\n      const X = T.data;\n      if (X.id === C)\n        if (X.success) {\n          const S = new Blob([X.data], { type: X.mimeType });\n          s(), P(S);\n        } else\n          s(), w(new Error(X.error || \"解码失败\"));\n    }, l = (T) => {\n      s(), w(new Error(`Worker 崩溃: ${T.message || \"设备内存不足\"}`));\n    }, s = () => {\n      g.removeEventListener(\"message\", y), g.removeEventListener(\"error\", l), g.terminate();\n    };\n    g.addEventListener(\"message\", y), g.addEventListener(\"error\", l), g.postMessage(\n      { id: C, mimeType: I, buffer: M, options: K },\n      [M]\n    );\n  });\n}\nexport {\n  pM as EXTENSION_TO_MIME,\n  LM as SUPPORTED_FILE_TYPES,\n  _M as buildZipTree,\n  p as builtInMessages,\n  PI as configurePdfWorker,\n  KI as convertCsvToSpreadsheetData,\n  II as convertWorkbookToSpreadsheetData,\n  OM as createFetcher,\n  CI as createTranslator,\n  XI as decodeInWorker,\n  a as decodeText,\n  v as decodeUtf8,\n  SI as detectImageFormat,\n  uM as downloadFileWithFetcher,\n  nM as fetchAsBlobUrl,\n  RM as fetchTextUtf8,\n  tM as formatFileSize,\n  rM as formatSubtitleTime,\n  fM as formatTime,\n  u as getFileNameFromUrl,\n  UM as getFileType,\n  zM as getLanguageFromFileName,\n  lI as getLoader,\n  TI as getLoaderForMimeType,\n  JM as getMimeTypeFromExtension,\n  iM as getMimeTypeFromFileName,\n  wI as getPdfDocumentOptions,\n  NM as getVideoMimeType,\n  VM as guessCsvDelimiter,\n  sI as hasLoader,\n  J as inferMimeType,\n  dM as installUint8ArrayHexBase64Polyfill,\n  hM as isAdvancedImageFormat,\n  gI as isRawFormat,\n  qM as listZipEntries,\n  eM as loadZip,\n  r as normalizeFile,\n  QM as normalizeFiles,\n  aM as parseCsv,\n  vM as parseSubtitle,\n  MI as readZipEntryBlob,\n  $M as readZipEntryText,\n  yI as registerLoader,\n  EM as resolveShowClose,\n  jI as shouldUseWorker\n};\n//# sourceMappingURL=index.mjs.map\n","import React, { createContext, useContext, useMemo } from 'react';\nimport {\n  createTranslator,\n  type Locale,\n  type Messages,\n  type Translator,\n} from '@eternalheart/file-preview-core';\n\nexport interface LocaleContextValue {\n  locale: Locale;\n  t: Translator;\n}\n\nconst LocaleContext = createContext<LocaleContextValue | null>(null);\n\nexport interface LocaleProviderProps {\n  /** 当前语言，默认 'zh-CN' */\n  locale?: Locale;\n  /** 用户自定义字典，浅合并到内置字典之上 */\n  messages?: Partial<Record<Locale, Partial<Messages>>>;\n  children: React.ReactNode;\n}\n\nexport const LocaleProvider: React.FC<LocaleProviderProps> = ({\n  locale = 'zh-CN',\n  messages,\n  children,\n}) => {\n  const value = useMemo<LocaleContextValue>(() => {\n    const t = createTranslator({ locale, messages });\n    return { locale, t };\n  }, [locale, messages]);\n\n  return <LocaleContext.Provider value={value}>{children}</LocaleContext.Provider>;\n};\n\n/**\n * 兜底 translator（当组件被脱离 LocaleProvider 直接使用时）\n * 保持模块级单例，避免每次调用重建\n */\nlet fallbackTranslator: Translator | null = null;\nfunction getFallbackTranslator(): Translator {\n  if (!fallbackTranslator) {\n    fallbackTranslator = createTranslator({ locale: 'zh-CN' });\n  }\n  return fallbackTranslator;\n}\n\n/**\n * 获取翻译函数。任意位置调用都安全：\n * - 在 LocaleProvider 下 → 用 provider 提供的 translator\n * - 否则 → 回落到 zh-CN 兜底 translator\n */\nexport function useTranslator(): Translator {\n  const ctx = useContext(LocaleContext);\n  return ctx?.t ?? getFallbackTranslator();\n}\n\n/**\n * 获取当前 locale。在 Provider 之外返回 'zh-CN'。\n */\nexport function useLocale(): Locale {\n  const ctx = useContext(LocaleContext);\n  return ctx?.locale ?? 'zh-CN';\n}\n","import React, { createContext, useContext } from 'react';\n\n/** 已解析的主题（auto 在 FilePreviewContent 里被解析过） */\nexport type ResolvedTheme = 'dark' | 'light';\n\nconst ThemeContext = createContext<ResolvedTheme | null>(null);\n\nexport interface ThemeProviderProps {\n  theme: ResolvedTheme;\n  children: React.ReactNode;\n}\n\nexport const ThemeProvider: React.FC<ThemeProviderProps> = ({ theme, children }) => {\n  return <ThemeContext.Provider value={theme}>{children}</ThemeContext.Provider>;\n};\n\n/**\n * 获取已解析的主题（'dark' | 'light'）。\n * Provider 之外默认 'dark'（保持组件历史默认行为）。\n *\n * renderer 需要切第三方库的 theme prop（如 react-syntax-highlighter 的 style、\n * shiki 的 theme 选项）时使用；不要用它做 className 分支 —— class 由 CSS 变量\n * 通过根容器 [data-theme] 自动切换。\n */\nexport function useResolvedTheme(): ResolvedTheme {\n  return useContext(ThemeContext) ?? 'dark';\n}\n","import React, { createContext, useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport type {\n  Fetcher,\n  PreviewFile,\n  RequestHandler,\n  RequestInitFactory,\n  ShouldFetchAsBlob,\n} from '@eternalheart/file-preview-core';\nimport { createFetcher, fetchAsBlobUrl } from '@eternalheart/file-preview-core';\n\nexport interface RequestContextValue {\n  fetcher: Fetcher;\n  shouldFetchAsBlob?: ShouldFetchAsBlob;\n}\n\nconst defaultValue: RequestContextValue = {\n  fetcher: (url, init) => fetch(url, init),\n};\n\nconst RequestContext = createContext<RequestContextValue>(defaultValue);\n\nexport interface RequestProviderProps {\n  requestInit?: RequestInitFactory;\n  requestHandler?: RequestHandler;\n  shouldFetchAsBlob?: ShouldFetchAsBlob;\n  children: React.ReactNode;\n}\n\nexport const RequestProvider: React.FC<RequestProviderProps> = ({\n  requestInit,\n  requestHandler,\n  shouldFetchAsBlob,\n  children,\n}) => {\n  const value = useMemo<RequestContextValue>(\n    () => ({\n      fetcher: createFetcher({ requestInit, requestHandler }),\n      shouldFetchAsBlob,\n    }),\n    [requestInit, requestHandler, shouldFetchAsBlob],\n  );\n  return (\n    <RequestContext.Provider value={value}>{children}</RequestContext.Provider>\n  );\n};\n\nexport function useRequest(): RequestContextValue {\n  return useContext(RequestContext);\n}\n\nexport function useFetcher(): Fetcher {\n  return useContext(RequestContext).fetcher;\n}\n\n/**\n * 解析 file 的可消费 URL：\n * - 未配置 shouldFetchAsBlob 或返回 false：同步返回 file.url（不入 state，避免切换文件时残留旧值）\n * - 返回 true：用 fetcher 拉成 blob: URL，组件卸载或 file 变化时 revoke\n *\n * 期间返回空字符串（表示 \"还没准备好\"），调用方应避免空 URL 时挂载到 <img src> 等。\n */\nexport function useResolvedUrl(file: PreviewFile | undefined): string {\n  const { fetcher, shouldFetchAsBlob } = useContext(RequestContext);\n  const needBlob = !!(file && shouldFetchAsBlob?.(file));\n  // 仅在需要预取 blob 时才使用 state；其他场景下方法返回值由 file.url 派生，避免 state 跨文件切换时残留\n  const [blobUrl, setBlobUrl] = useState<string>('');\n  const createdRef = useRef<string | null>(null);\n\n  useEffect(() => {\n    if (!file || !needBlob) {\n      // 离开 blob 模式：清掉上次缓存的 blob URL\n      if (createdRef.current) {\n        URL.revokeObjectURL(createdRef.current);\n        createdRef.current = null;\n      }\n      setBlobUrl('');\n      return;\n    }\n    let cancelled = false;\n    setBlobUrl('');\n    fetchAsBlobUrl(file.url, fetcher)\n      .then((next) => {\n        if (cancelled) {\n          URL.revokeObjectURL(next);\n          return;\n        }\n        if (createdRef.current) {\n          URL.revokeObjectURL(createdRef.current);\n        }\n        createdRef.current = next;\n        setBlobUrl(next);\n      })\n      .catch((err) => {\n        if (!cancelled) {\n          console.error('[file-preview] resolve blob url failed:', err);\n          setBlobUrl(file.url);\n        }\n      });\n    return () => {\n      cancelled = true;\n    };\n  }, [file?.id, file?.url, needBlob, fetcher]);\n\n  // 卸载时 revoke 最后一次创建的 blob URL\n  useEffect(() => {\n    return () => {\n      if (createdRef.current) {\n        URL.revokeObjectURL(createdRef.current);\n        createdRef.current = null;\n      }\n    };\n  }, []);\n\n  if (!file) return '';\n  if (!needBlob) return file.url;\n  return blobUrl;\n}\n","import { FileQuestion, Download } from 'lucide-react';\nimport { useTranslator } from '../../i18n/LocaleContext';\n\ninterface UnsupportedRendererProps {\n  fileName: string;\n  fileType: string;\n  onDownload: () => void;\n}\n\nexport const UnsupportedRenderer: React.FC<UnsupportedRendererProps> = ({\n  fileName,\n  fileType,\n  onDownload,\n}) => {\n  const t = useTranslator();\n  return (\n    <div className=\"rfp-flex rfp-flex-col rfp-items-center rfp-justify-center rfp-w-full rfp-h-full rfp-p-6 rfp-gap-4\">\n      <div className=\"rfp-w-20 rfp-h-20 rfp-rounded-full rfp-bg-surface-2 rfp-flex rfp-items-center rfp-justify-center\">\n        <FileQuestion className=\"rfp-w-10 rfp-h-10 rfp-text-fg-secondary\" />\n      </div>\n\n      <div className=\"rfp-text-fg-primary rfp-text-center\">\n        <p className=\"rfp-text-lg rfp-font-medium rfp-mb-2\">{fileName}</p>\n        <p className=\"rfp-text-fg-secondary\">{t('common.unsupported_preview', { type: fileType })}</p>\n      </div>\n\n      <button\n        onClick={onDownload}\n        className=\"rfp-flex rfp-items-center rfp-gap-2 rfp-px-4 rfp-py-2 rfp-bg-surface-2 hover:rfp-bg-surface-3 rfp-backdrop-blur-sm rfp-rounded-lg rfp-text-fg-primary rfp-font-medium rfp-transition-all\"\n      >\n        <Download className=\"rfp-w-5 rfp-h-5\" />\n        {t('common.download')}\n      </button>\n    </div>\n  );\n};\n","import { useEffect, useRef } from 'react';\n\nexport interface UseKeyboardNavigationParams {\n  mode: 'modal' | 'embed';\n  currentIndex: number;\n  totalFiles: number;\n  onNavigate?: (index: number) => void;\n  onClose?: () => void;\n  rootRef?: React.RefObject<HTMLDivElement | null>;\n}\n\n/**\n * 键盘导航 hook\n * - modal 模式：监听 window 的 keydown 事件\n * - embed 模式：仅监听根容器的 keydown 事件（需要容器获得焦点）\n */\nexport function useKeyboardNavigation({\n  mode,\n  currentIndex,\n  totalFiles,\n  onNavigate,\n  onClose,\n  rootRef,\n}: UseKeyboardNavigationParams): void {\n  const handlersRef = useRef({ onNavigate, onClose });\n\n  useEffect(() => {\n    handlersRef.current = { onNavigate, onClose };\n  }, [onNavigate, onClose]);\n\n  useEffect(() => {\n    const handleKeyDown = (e: KeyboardEvent) => {\n      const { onNavigate, onClose } = handlersRef.current;\n\n      if (e.key === 'Escape' && mode === 'modal') {\n        onClose?.();\n      } else if (e.key === 'ArrowLeft' && currentIndex > 0) {\n        onNavigate?.(currentIndex - 1);\n      } else if (e.key === 'ArrowRight' && currentIndex < totalFiles - 1) {\n        onNavigate?.(currentIndex + 1);\n      }\n    };\n\n    if (mode === 'modal') {\n      window.addEventListener('keydown', handleKeyDown);\n      return () => window.removeEventListener('keydown', handleKeyDown);\n    } else {\n      const el = rootRef?.current;\n      if (!el) return;\n      el.addEventListener('keydown', handleKeyDown as EventListener);\n      return () => el.removeEventListener('keydown', handleKeyDown as EventListener);\n    }\n  }, [mode, currentIndex, totalFiles, rootRef]);\n}\n","import { useState, useEffect } from 'react';\nimport type { Theme } from '@eternalheart/file-preview-core';\n\n/**\n * 主题模式 hook\n * 处理 auto 主题时的系统偏好监听\n */\nexport function useThemeMode(theme: Theme): 'light' | 'dark' {\n  const [systemDark, setSystemDark] = useState(() =>\n    typeof window !== 'undefined'\n      ? window.matchMedia('(prefers-color-scheme: dark)').matches\n      : true\n  );\n\n  useEffect(() => {\n    if (theme !== 'auto') return;\n\n    const mql = window.matchMedia('(prefers-color-scheme: dark)');\n    const handler = (e: MediaQueryListEvent) => setSystemDark(e.matches);\n    mql.addEventListener('change', handler);\n    return () => mql.removeEventListener('change', handler);\n  }, [theme]);\n\n  return theme === 'auto' ? (systemDark ? 'dark' : 'light') : theme;\n}\n","import React from 'react';\n\nexport interface ToolbarButtonProps {\n  icon: React.ReactNode;\n  label: string;\n  onClick: () => void;\n  disabled?: boolean;\n  /** 激活状态：true 时按钮显示高亮样式 */\n  active?: boolean;\n  ariaKeyshortcuts?: string;\n}\n\n/**\n * 工具栏按钮组件\n * 支持 tooltip、disabled 状态、active 高亮和 aria 属性\n */\nexport const ToolbarButton: React.FC<ToolbarButtonProps> = ({\n  icon,\n  label,\n  onClick,\n  disabled,\n  active,\n  ariaKeyshortcuts,\n}) => {\n  let stateClass: string;\n  if (disabled) {\n    stateClass = 'rfp-text-fg-disabled rfp-cursor-not-allowed';\n  } else if (active) {\n    stateClass = 'rfp-text-fg-primary rfp-bg-surface-3 hover:rfp-bg-surface-3 active:rfp-bg-surface-3';\n  } else {\n    stateClass = 'rfp-text-fg-primary hover:rfp-bg-surface-2 active:rfp-bg-surface-3';\n  }\n\n  return (\n    <button\n      onClick={onClick}\n      disabled={disabled}\n      aria-label={label}\n      aria-pressed={active}\n      aria-keyshortcuts={ariaKeyshortcuts}\n      aria-disabled={disabled}\n      className={`rfp-relative rfp-group rfp-p-2 md:rfp-p-1.5 rfp-rounded-md rfp-transition-all rfp-select-none ${stateClass}`}\n    >\n      {icon}\n      <span className=\"rfp-absolute rfp-left-1/2 -rfp-translate-x-1/2 rfp-top-full rfp-mt-1.5 rfp-px-2 rfp-py-1 rfp-text-xs rfp-rounded rfp-whitespace-nowrap rfp-pointer-events-none rfp-opacity-0 rfp-invisible group-hover:rfp-opacity-100 group-hover:rfp-visible rfp-transition-opacity rfp-duration-200 rfp-z-50 rfp-bg-fg-primary rfp-text-fg-inverse max-[1023px]:!rfp-hidden\">\n        <span className=\"rfp-absolute rfp-left-1/2 -rfp-translate-x-1/2 -rfp-top-1 rfp-w-2 rfp-h-2 rfp-rotate-45 rfp-bg-fg-primary\" />\n        <span className=\"rfp-relative\">{label}</span>\n      </span>\n    </button>\n  );\n};\n","import React from 'react';\nimport type { ToolbarGroup } from '../renderers/toolbar.types';\nimport { ToolbarButton } from '../components/preview/ToolbarButton';\n\n/**\n * 渲染工具栏组项（按钮 + 文本 + 分隔线）\n * 提取到模块顶层，避免每次组件渲染时重新创建\n */\nexport function renderToolbarItems(\n  groups: ToolbarGroup[],\n  dividerClass: string\n): React.ReactNode {\n  return groups.map((group, gi, arr) => (\n    <React.Fragment key={gi}>\n      {group.items.map((item, ii) =>\n        item.type === 'button' ? (\n          <ToolbarButton\n            key={`${gi}-${ii}`}\n            icon={item.icon}\n            label={item.tooltip}\n            onClick={item.action}\n            disabled={item.disabled}\n            active={item.active}\n            ariaKeyshortcuts={item.ariaKeyshortcuts}\n          />\n        ) : (\n          <span\n            key={`${gi}-${ii}`}\n            className=\"rfp-text-xs rfp-text-center rfp-font-medium rfp-tabular-nums rfp-text-fg-tertiary\"\n            style={{ minWidth: item.minWidth || 'auto' }}\n          >\n            {item.content}\n          </span>\n        )\n      )}\n      {gi < arr.length - 1 && <div className={`rfp-w-px rfp-h-4 rfp-bg-divide ${dividerClass}`} />}\n    </React.Fragment>\n  ));\n}\n","import React from 'react';\nimport { motion } from 'framer-motion';\nimport { Download, X } from 'lucide-react';\nimport type { ToolbarGroup } from '../../renderers/toolbar.types';\nimport type { Translator } from '@eternalheart/file-preview-core';\nimport { renderToolbarItems } from '../../toolbar/renderItems';\n\nexport interface FilePreviewToolbarProps {\n  fileName: string;\n  currentIndex: number;\n  totalFiles: number;\n  toolGroups: ToolbarGroup[];\n  t: Translator;\n  onDownload: () => void;\n  onClose?: () => void;\n  showClose: boolean;\n  showDownload: boolean;\n}\n\n/**\n * 文件预览顶部工具栏组件\n * - 桌面端：单行显示所有按钮\n * - 移动端：第一行显示文件名 + 下载/关闭，第二行显示工具按钮\n */\nexport const FilePreviewToolbar: React.FC<FilePreviewToolbarProps> = ({\n  fileName,\n  currentIndex,\n  totalFiles,\n  toolGroups,\n  t,\n  onDownload,\n  onClose,\n  showClose,\n  showDownload,\n}) => {\n  const showCloseButton = showClose;\n\n  // 操作组：下载、关闭（通用，不属于任何 Renderer）\n  const actionGroups: ToolbarGroup[] = [\n    ...(showDownload\n      ? [\n          {\n            items: [\n              {\n                type: 'button' as const,\n                icon: <Download className=\"rfp-w-4 rfp-h-4\" />,\n                tooltip: t('accessibility.downloadFile'),\n                action: onDownload,\n              },\n            ],\n          },\n        ]\n      : []),\n    ...(showCloseButton\n      ? [\n          {\n            items: [\n              {\n                type: 'button' as const,\n                icon: <X className=\"rfp-w-4 rfp-h-4\" />,\n                tooltip: t('accessibility.closePreview'),\n                action: onClose!,\n                ariaKeyshortcuts: 'Escape',\n              },\n            ],\n          },\n        ]\n      : []),\n  ];\n\n  return (\n    <motion.div\n      initial={{ opacity: 0 }}\n      animate={{ opacity: 1 }}\n      exit={{ opacity: 0 }}\n      className=\"rfp-flex-shrink-0 rfp-z-10 rfp-backdrop-blur-md rfp-border-b rfp-bg-surface-toolbar rfp-border-line\"\n      style={{ paddingTop: 'env(safe-area-inset-top, 0px)' }}\n    >\n      {/* 第一行：文件名 + 分页 + 关闭/下载（移动端右侧）/全部按钮（桌面端） */}\n      <div className=\"rfp-flex rfp-items-center rfp-justify-between rfp-px-3 md:rfp-px-5 rfp-py-1.5 md:rfp-py-2.5\">\n        {/* 左侧：文件名 + 分页 */}\n        <div className=\"rfp-flex rfp-items-center rfp-flex-1 rfp-min-w-0 rfp-mr-2 md:rfp-mr-3\">\n          <h2 className=\"rfp-font-medium rfp-text-xs md:rfp-text-sm rfp-truncate rfp-text-fg-primary\">\n            {fileName}\n          </h2>\n          <span\n            className=\"rfp-text-xs rfp-ml-2 rfp-flex-shrink-0 rfp-text-fg-muted\"\n            aria-live=\"polite\"\n            aria-atomic=\"true\"\n          >\n            {currentIndex + 1}/{totalFiles}\n          </span>\n        </div>\n\n        {/* 移动端：仅显示下载 + 关闭 */}\n        <div className=\"rfp-flex rfp-items-center rfp-gap-1 md:rfp-hidden rfp-flex-shrink-0\">\n          {renderToolbarItems(actionGroups, 'rfp-mx-0.5')}\n        </div>\n\n        {/* 桌面端：所有工具按钮 */}\n        <div className=\"rfp-hidden md:rfp-flex rfp-items-center rfp-gap-1 rfp-flex-shrink-0\">\n          {renderToolbarItems(toolGroups, 'rfp-mx-1')}\n          {toolGroups.length > 0 && actionGroups.length > 0 && (\n            <div className=\"rfp-w-px rfp-h-4 rfp-mx-1 rfp-bg-divide\" />\n          )}\n          {renderToolbarItems(actionGroups, 'rfp-mx-1')}\n        </div>\n      </div>\n\n      {/* 第二行：移动端工具按钮 */}\n      {toolGroups.length > 0 && (\n        <div className=\"rfp-flex rfp-items-center rfp-gap-1 rfp-px-3 rfp-pb-1.5 rfp-overflow-x-auto scrollbar-hide md:rfp-hidden\">\n          {renderToolbarItems(toolGroups, 'rfp-mx-0.5')}\n        </div>\n      )}\n    </motion.div>\n  );\n};\n","import React from 'react';\nimport { AlertCircle, Download, RotateCw } from 'lucide-react';\nimport type { Translator } from '@eternalheart/file-preview-core';\n\nexport interface RendererErrorProps {\n  error: Error;\n  fileName: string;\n  t: Translator;\n  onRetry: () => void;\n  onDownload: () => void;\n}\n\n/**\n * 渲染器错误 UI 组件\n * 显示错误信息、文件名、重试和下载按钮\n */\nexport const RendererError: React.FC<RendererErrorProps> = ({\n  error,\n  fileName,\n  t,\n  onRetry,\n  onDownload,\n}) => {\n  return (\n    <div className=\"rfp-flex rfp-flex-col rfp-items-center rfp-justify-center rfp-h-full rfp-px-4 rfp-text-fg-primary\">\n      <AlertCircle className=\"rfp-w-16 rfp-h-16 rfp-mb-4 rfp-text-error\" />\n      <h3 className=\"rfp-text-lg rfp-font-semibold rfp-mb-2\">\n        {t('common.unknown_error')}\n      </h3>\n      <p className=\"rfp-text-sm rfp-text-fg-secondary rfp-mb-1 rfp-max-w-md rfp-text-center\">\n        {error.message}\n      </p>\n      <p className=\"rfp-text-xs rfp-text-fg-tertiary rfp-mb-6 rfp-max-w-md rfp-text-center\">\n        {fileName}\n      </p>\n      <div className=\"rfp-flex rfp-gap-3\">\n        <button\n          onClick={onRetry}\n          aria-label={t('common.retry')}\n          className=\"rfp-flex rfp-items-center rfp-gap-2 rfp-px-4 rfp-py-2 rfp-bg-surface-2 hover:rfp-bg-surface-3 rfp-rounded-md rfp-text-sm rfp-font-medium rfp-transition-colors\"\n        >\n          <RotateCw className=\"rfp-w-4 rfp-h-4\" />\n          {t('common.retry')}\n        </button>\n        <button\n          onClick={onDownload}\n          aria-label={t('accessibility.downloadFile')}\n          className=\"rfp-flex rfp-items-center rfp-gap-2 rfp-px-4 rfp-py-2 rfp-bg-surface-2 hover:rfp-bg-surface-3 rfp-rounded-md rfp-text-sm rfp-font-medium rfp-transition-colors\"\n        >\n          <Download className=\"rfp-w-4 rfp-h-4\" />\n          {t('common.download')}\n        </button>\n      </div>\n    </div>\n  );\n};\n","import React from 'react';\n\nexport interface RendererErrorBoundaryProps {\n  children: React.ReactNode;\n  fallback: (error: Error, reset: () => void) => React.ReactNode;\n  onError?: (error: Error, errorInfo: React.ErrorInfo) => void;\n}\n\ninterface RendererErrorBoundaryState {\n  hasError: boolean;\n  error: Error | null;\n}\n\n/**\n * 渲染器错误边界类组件\n * 捕获渲染器加载失败和运行时错误\n */\nexport class RendererErrorBoundary extends React.Component<\n  RendererErrorBoundaryProps,\n  RendererErrorBoundaryState\n> {\n  constructor(props: RendererErrorBoundaryProps) {\n    super(props);\n    this.state = { hasError: false, error: null };\n  }\n\n  static getDerivedStateFromError(error: Error): RendererErrorBoundaryState {\n    return { hasError: true, error };\n  }\n\n  componentDidCatch(error: Error, errorInfo: React.ErrorInfo): void {\n    console.error('[file-preview] Renderer error:', error, errorInfo);\n    this.props.onError?.(error, errorInfo);\n  }\n\n  reset = (): void => {\n    this.setState({ hasError: false, error: null });\n  };\n\n  render(): React.ReactNode {\n    if (this.state.hasError && this.state.error) {\n      return this.props.fallback(this.state.error, this.reset);\n    }\n\n    return this.props.children;\n  }\n}\n","import React from 'react';\nimport { useTranslator } from '../i18n/LocaleContext';\n\nexport const RendererLoading: React.FC = () => {\n  const t = useTranslator();\n  return (\n    <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full rfp-text-fg-muted\">\n      <div className=\"rfp-flex rfp-flex-col rfp-items-center rfp-gap-3\">\n        <div className=\"rfp-w-8 rfp-h-8 rfp-rounded-full rfp-border-2 rfp-border-fg-muted rfp-border-t-transparent rfp-animate-spin\" />\n        <span className=\"rfp-text-sm\">{t('common.loading') ?? 'Loading...'}</span>\n      </div>\n    </div>\n  );\n};\n","import React, { Suspense } from 'react';\nimport type { Translator } from '@eternalheart/file-preview-core';\nimport type { PreviewFile, CustomRenderer, CustomRendererContext } from '../../types';\nimport { RendererErrorBoundary } from './RendererErrorBoundary';\nimport { RendererError } from './RendererError';\nimport { RendererLoading } from '../../renderers/RendererLoading';\n\nexport interface FilePreviewRendererProps {\n  currentFile: PreviewFile;\n  customRenderer?: CustomRenderer | null;\n  customRendererContext: CustomRendererContext;\n  t: Translator;\n  onDownload: () => void;\n  onError?: (error: Error, errorInfo: React.ErrorInfo) => void;\n  children: React.ReactNode;\n}\n\n/**\n * 渲染器容器组件\n * 负责 Suspense + 错误边界包装，不负责具体渲染器选择\n */\nexport const FilePreviewRenderer: React.FC<FilePreviewRendererProps> = ({\n  currentFile,\n  customRenderer,\n  customRendererContext,\n  t,\n  onDownload,\n  onError,\n  children,\n}) => {\n  // 自定义渲染器优先\n  if (customRenderer) {\n    return (\n      <RendererErrorBoundary\n        fallback={(error, reset) => (\n          <RendererError\n            error={error}\n            fileName={currentFile.name}\n            t={t}\n            onRetry={reset}\n            onDownload={onDownload}\n          />\n        )}\n        onError={onError}\n      >\n        {customRenderer.render(currentFile, customRendererContext)}\n      </RendererErrorBoundary>\n    );\n  }\n\n  // 内置渲染器（Suspense + 错误边界）\n  return (\n    <Suspense fallback={<RendererLoading />} key={currentFile.url}>\n      <RendererErrorBoundary\n        fallback={(error, reset) => (\n          <RendererError\n            error={error}\n            fileName={currentFile.name}\n            t={t}\n            onRetry={reset}\n            onDownload={onDownload}\n          />\n        )}\n        onError={onError}\n      >\n        {children}\n      </RendererErrorBoundary>\n    </Suspense>\n  );\n};\n","import React, { useState, useEffect, useRef, useCallback } from 'react';\nimport { motion } from 'framer-motion';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\nimport type { Translator } from '@eternalheart/file-preview-core';\n\nexport interface NavArrowsProps {\n  containerRef: React.RefObject<HTMLDivElement | null>;\n  hasPrev: boolean;\n  hasNext: boolean;\n  onPrev: () => void;\n  onNext: () => void;\n  resetKey: number;\n  t: Translator;\n}\n\nconst NAV_HIDE_DELAY = 2000;\n\n/**\n * 导航箭头组件\n * 自带 mousemove 监听 + 2s 自动隐藏定时器\n * state 隔离在本组件，避免父组件因 navVisible 变化而 re-render\n */\nexport const NavArrows: React.FC<NavArrowsProps> = ({\n  containerRef,\n  hasPrev,\n  hasNext,\n  onPrev,\n  onNext,\n  resetKey,\n  t,\n}) => {\n  const [visible, setVisible] = useState(true);\n  const timerRef = useRef<number | null>(null);\n\n  const scheduleHide = useCallback(() => {\n    if (timerRef.current) clearTimeout(timerRef.current);\n    timerRef.current = window.setTimeout(() => setVisible(false), NAV_HIDE_DELAY);\n  }, []);\n\n  const show = useCallback(() => {\n    setVisible((prev) => (prev ? prev : true));\n    scheduleHide();\n  }, [scheduleHide]);\n\n  // 监听容器的 mousemove，触发显示 + 重置隐藏定时器\n  useEffect(() => {\n    const el = containerRef.current;\n    if (!el) return;\n    const handler = () => show();\n    el.addEventListener('mousemove', handler);\n    return () => {\n      el.removeEventListener('mousemove', handler);\n    };\n  }, [containerRef, show]);\n\n  // currentIndex 切换时，显示一次并重置定时器\n  useEffect(() => {\n    setVisible(true);\n    scheduleHide();\n    return () => {\n      if (timerRef.current) clearTimeout(timerRef.current);\n    };\n  }, [resetKey, scheduleHide]);\n\n  return (\n    <>\n      {hasPrev && (\n        <motion.button\n          initial={{ opacity: 0 }}\n          animate={{ opacity: visible ? 1 : 0, x: visible ? 0 : -20 }}\n          transition={{ duration: 0.2 }}\n          onClick={onPrev}\n          onMouseEnter={show}\n          style={{ pointerEvents: visible ? 'auto' : 'none' }}\n          aria-label={t('accessibility.previousFile') || '上一个文件'}\n          aria-keyshortcuts=\"ArrowLeft\"\n          className=\"rfp-absolute rfp-z-20 rfp-left-2 md:rfp-left-4 rfp-top-1/2 -rfp-translate-y-1/2 rfp-w-10 rfp-h-10 md:rfp-w-12 md:rfp-h-12 rfp-rounded-full rfp-backdrop-blur-xl rfp-border rfp-flex rfp-items-center rfp-justify-center rfp-transition-colors rfp-shadow-2xl rfp-bg-surface-nav rfp-border-line hover:rfp-bg-surface-nav-hover rfp-text-fg-primary\"\n        >\n          <ChevronLeft className=\"rfp-w-5 rfp-h-5 md:rfp-w-6 md:rfp-h-6\" />\n        </motion.button>\n      )}\n      {hasNext && (\n        <motion.button\n          initial={{ opacity: 0 }}\n          animate={{ opacity: visible ? 1 : 0, x: visible ? 0 : 20 }}\n          transition={{ duration: 0.2 }}\n          onClick={onNext}\n          onMouseEnter={show}\n          style={{ pointerEvents: visible ? 'auto' : 'none' }}\n          aria-label={t('accessibility.nextFile') || '下一个文件'}\n          aria-keyshortcuts=\"ArrowRight\"\n          className=\"rfp-absolute rfp-z-20 rfp-right-2 md:rfp-right-4 rfp-top-1/2 -rfp-translate-y-1/2 rfp-w-10 rfp-h-10 md:rfp-w-12 md:rfp-h-12 rfp-rounded-full rfp-backdrop-blur-xl rfp-border rfp-flex rfp-items-center rfp-justify-center rfp-transition-colors rfp-shadow-2xl rfp-bg-surface-nav rfp-border-line hover:rfp-bg-surface-nav-hover rfp-text-fg-primary\"\n        >\n          <ChevronRight className=\"rfp-w-5 rfp-h-5 md:rfp-w-6 md:rfp-h-6\" />\n        </motion.button>\n      )}\n    </>\n  );\n};\n","// 集中的 lazy 装饰：把每个 renderer 转为 React.lazy(import).then(default)，\n// 让 rollup 自动按 chunk 分割。\n// 显式声明 LazyExoticComponent 以避免 TS4023（要求把内部 Props 类型导入到当前文件作用域）。\nimport { lazy, type LazyExoticComponent, type ComponentType } from 'react';\nimport type { ImageRenderer as ImageRendererImpl } from './Image';\nimport type { PdfRenderer as PdfRendererImpl } from './Pdf';\nimport type { DocxRenderer as DocxRendererImpl } from './Docx';\nimport type { XlsxRenderer as XlsxRendererImpl } from './Xlsx';\nimport type { PptxRenderer as PptxRendererImpl } from './Pptx';\nimport type { MsgRenderer as MsgRendererImpl } from './Msg';\nimport type { EpubRenderer as EpubRendererImpl } from './Epub';\nimport type { MobiRenderer as MobiRendererImpl } from './Mobi';\nimport type { VideoRenderer as VideoRendererImpl } from './Video';\nimport type { AudioRenderer as AudioRendererImpl } from './Audio';\nimport type { MarkdownRenderer as MarkdownRendererImpl } from './Markdown';\nimport type { JsonRenderer as JsonRendererImpl } from './Json';\nimport type { CsvRenderer as CsvRendererImpl } from './Csv';\nimport type { XmlRenderer as XmlRendererImpl } from './Xml';\nimport type { SubtitleRenderer as SubtitleRendererImpl } from './Subtitle';\nimport type { ZipRenderer as ZipRendererImpl } from './Zip';\nimport type { TextRenderer as TextRendererImpl } from './Text';\nimport type { FontRenderer as FontRendererImpl } from './Font';\nimport type { CadRenderer as CadRendererImpl } from './Cad';\n\ntype Lazy<T> = LazyExoticComponent<T extends ComponentType<infer P> ? ComponentType<P> : never>;\n\nexport const ImageRenderer: Lazy<typeof ImageRendererImpl> = lazy(() =>\n  import('./Image').then((m) => ({ default: m.ImageRenderer })),\n);\n\nexport const PdfRenderer: Lazy<typeof PdfRendererImpl> = lazy(() =>\n  import('./Pdf').then((m) => ({ default: m.PdfRenderer })),\n);\n\nexport const DocxRenderer: Lazy<typeof DocxRendererImpl> = lazy(() =>\n  import('./Docx').then((m) => ({ default: m.DocxRenderer })),\n);\n\nexport const XlsxRenderer: Lazy<typeof XlsxRendererImpl> = lazy(() =>\n  import('./Xlsx').then((m) => ({ default: m.XlsxRenderer })),\n);\n\nexport const PptxRenderer: Lazy<typeof PptxRendererImpl> = lazy(() =>\n  import('./Pptx').then((m) => ({ default: m.PptxRenderer })),\n);\n\nexport const MsgRenderer: Lazy<typeof MsgRendererImpl> = lazy(() =>\n  import('./Msg').then((m) => ({ default: m.MsgRenderer })),\n);\n\nexport const EpubRenderer: Lazy<typeof EpubRendererImpl> = lazy(() =>\n  import('./Epub').then((m) => ({ default: m.EpubRenderer })),\n);\n\nexport const MobiRenderer: Lazy<typeof MobiRendererImpl> = lazy(() =>\n  import('./Mobi').then((m) => ({ default: m.MobiRenderer })),\n);\n\nexport const VideoRenderer: Lazy<typeof VideoRendererImpl> = lazy(() =>\n  import('./Video').then((m) => ({ default: m.VideoRenderer })),\n);\n\nexport const AudioRenderer: Lazy<typeof AudioRendererImpl> = lazy(() =>\n  import('./Audio').then((m) => ({ default: m.AudioRenderer })),\n);\n\nexport const MarkdownRenderer: Lazy<typeof MarkdownRendererImpl> = lazy(() =>\n  import('./Markdown').then((m) => ({ default: m.MarkdownRenderer })),\n);\n\nexport const JsonRenderer: Lazy<typeof JsonRendererImpl> = lazy(() =>\n  import('./Json').then((m) => ({ default: m.JsonRenderer })),\n);\n\nexport const CsvRenderer: Lazy<typeof CsvRendererImpl> = lazy(() =>\n  import('./Csv').then((m) => ({ default: m.CsvRenderer })),\n);\n\nexport const XmlRenderer: Lazy<typeof XmlRendererImpl> = lazy(() =>\n  import('./Xml').then((m) => ({ default: m.XmlRenderer })),\n);\n\nexport const SubtitleRenderer: Lazy<typeof SubtitleRendererImpl> = lazy(() =>\n  import('./Subtitle').then((m) => ({ default: m.SubtitleRenderer })),\n);\n\nexport const ZipRenderer: Lazy<typeof ZipRendererImpl> = lazy(() =>\n  import('./Zip').then((m) => ({ default: m.ZipRenderer })),\n);\n\nexport const TextRenderer: Lazy<typeof TextRendererImpl> = lazy(() =>\n  import('./Text').then((m) => ({ default: m.TextRenderer })),\n);\n\nexport const FontRenderer: Lazy<typeof FontRendererImpl> = lazy(() =>\n  import('./Font').then((m) => ({ default: m.FontRenderer })),\n);\n\nexport const CadRenderer: Lazy<typeof CadRendererImpl> = lazy(() =>\n  import('./Cad').then((m) => ({ default: m.CadRenderer })),\n);\n","import type { LazyExoticComponent, ComponentType } from 'react';\nimport type { FileType, PreviewFile } from '@eternalheart/file-preview-core';\nimport {\n  ImageRenderer,\n  PdfRenderer,\n  DocxRenderer,\n  XlsxRenderer,\n  PptxRenderer,\n  MsgRenderer,\n  EpubRenderer,\n  MobiRenderer,\n  VideoRenderer,\n  AudioRenderer,\n  MarkdownRenderer,\n  JsonRenderer,\n  CsvRenderer,\n  XmlRenderer,\n  SubtitleRenderer,\n  ZipRenderer,\n  TextRenderer,\n  FontRenderer,\n  CadRenderer,\n} from './lazy';\n\n/**\n * 渲染器上下文：主组件传递给 getProps 的环境信息\n */\nexport interface RendererContext {\n  /** 解析后的 URL（可能是 blob URL） */\n  resolvedUrl: string;\n  /** ZIP 嵌套深度 */\n  zipNestingDepth: number;\n  /** 当前文件对象 */\n  currentFile: PreviewFile;\n}\n\n/**\n * 内置渲染器配置\n */\nexport interface BuiltinRendererConfig {\n  /** 匹配的文件类型 */\n  fileType: FileType;\n  /** 渲染器组件（懒加载） */\n  component: LazyExoticComponent<ComponentType<any>>;\n  /** 计算传给组件的 props */\n  getProps: (ctx: RendererContext) => Record<string, any>;\n}\n\n/**\n * 内置渲染器注册表\n *\n * 新增渲染器：\n * 1. 在 src/renderers/<Type>/index.tsx 创建渲染器\n * 2. 在 src/renderers/lazy.tsx 添加懒加载导出\n * 3. 在此注册表添加配置\n *\n * 主组件 FilePreviewContent.tsx 无需修改\n */\nexport const BUILTIN_RENDERERS: BuiltinRendererConfig[] = [\n  {\n    fileType: 'image',\n    component: ImageRenderer,\n    getProps: (ctx) => ({\n      url: ctx.resolvedUrl,\n      fileSize: ctx.currentFile.size,\n      file: ctx.currentFile,\n    }),\n  },\n  {\n    fileType: 'pdf',\n    component: PdfRenderer,\n    getProps: (ctx) => ({\n      url: ctx.resolvedUrl,\n    }),\n  },\n  {\n    fileType: 'docx',\n    component: DocxRenderer,\n    getProps: (ctx) => ({\n      url: ctx.resolvedUrl,\n    }),\n  },\n  {\n    fileType: 'xlsx',\n    component: XlsxRenderer,\n    getProps: (ctx) => ({\n      url: ctx.resolvedUrl,\n    }),\n  },\n  {\n    fileType: 'pptx',\n    component: PptxRenderer,\n    getProps: (ctx) => ({\n      url: ctx.resolvedUrl,\n    }),\n  },\n  {\n    fileType: 'msg',\n    component: MsgRenderer,\n    getProps: (ctx) => ({\n      url: ctx.resolvedUrl,\n    }),\n  },\n  {\n    fileType: 'epub',\n    component: EpubRenderer,\n    getProps: (ctx) => ({\n      url: ctx.resolvedUrl,\n    }),\n  },\n  {\n    fileType: 'mobi',\n    component: MobiRenderer,\n    getProps: (ctx) => ({\n      url: ctx.resolvedUrl,\n    }),\n  },\n  {\n    fileType: 'video',\n    component: VideoRenderer,\n    getProps: (ctx) => ({\n      url: ctx.resolvedUrl,\n      fileName: ctx.currentFile.name,\n    }),\n  },\n  {\n    fileType: 'audio',\n    component: AudioRenderer,\n    getProps: (ctx) => ({\n      url: ctx.resolvedUrl,\n      fileName: ctx.currentFile.name,\n    }),\n  },\n  {\n    fileType: 'markdown',\n    component: MarkdownRenderer,\n    getProps: (ctx) => ({\n      url: ctx.resolvedUrl,\n    }),\n  },\n  {\n    fileType: 'json',\n    component: JsonRenderer,\n    getProps: (ctx) => ({\n      url: ctx.resolvedUrl,\n      fileName: ctx.currentFile.name,\n    }),\n  },\n  {\n    fileType: 'csv',\n    component: CsvRenderer,\n    getProps: (ctx) => ({\n      url: ctx.resolvedUrl,\n      fileName: ctx.currentFile.name,\n    }),\n  },\n  {\n    fileType: 'xml',\n    component: XmlRenderer,\n    getProps: (ctx) => ({\n      url: ctx.resolvedUrl,\n      fileName: ctx.currentFile.name,\n    }),\n  },\n  {\n    fileType: 'subtitle',\n    component: SubtitleRenderer,\n    getProps: (ctx) => ({\n      url: ctx.resolvedUrl,\n      fileName: ctx.currentFile.name,\n    }),\n  },\n  {\n    fileType: 'zip',\n    component: ZipRenderer,\n    getProps: (ctx) => ({\n      url: ctx.resolvedUrl,\n      nestingDepth: ctx.zipNestingDepth,\n    }),\n  },\n  {\n    fileType: 'text',\n    component: TextRenderer,\n    getProps: (ctx) => ({\n      url: ctx.resolvedUrl,\n      fileName: ctx.currentFile.name,\n    }),\n  },\n  {\n    fileType: 'font',\n    component: FontRenderer,\n    getProps: (ctx) => ({\n      url: ctx.resolvedUrl,\n    }),\n  },\n  {\n    fileType: 'cad',\n    component: CadRenderer,\n    getProps: (ctx) => ({\n      url: ctx.resolvedUrl,\n      file: ctx.currentFile.file, // 传递原始 File 对象（如果有）\n      fileName: ctx.currentFile.name, // 传递原始文件名用于识别扩展名\n    }),\n  },\n];\n","import React, { useCallback, useMemo, useRef, useState, useEffect } from 'react';\nimport { getFileType, createTranslator, resolveShowClose, type Locale, type Messages, type Translator, type Theme, downloadFileWithFetcher } from '@eternalheart/file-preview-core';\nimport { LocaleProvider } from './i18n/LocaleContext';\nimport { ThemeProvider } from './ThemeContext';\nimport type { PreviewFileInput, CustomRenderer, CustomRendererContext } from './types';\nimport type { CustomRendererEventPayload, PreviewFile, RequestHandler, RequestInitFactory, ShouldFetchAsBlob } from '@eternalheart/file-preview-core';\nimport { normalizeFiles } from './utils/fileNormalizer';\nimport { RequestProvider, useResolvedUrl, useFetcher } from './RequestContext';\nimport type { RendererHandle } from './renderers/base.types';\nimport type { ToolbarGroup } from './renderers/toolbar.types';\nimport { UnsupportedRenderer } from './renderers/Unsupported';\nimport {\n  useKeyboardNavigation,\n  useThemeMode,\n} from './hooks';\nimport { FilePreviewToolbar, FilePreviewRenderer, NavArrows } from './components/preview';\nimport { BUILTIN_RENDERERS } from './renderers/registry';\n\nconst MAX_ZIP_NESTING_DEPTH = 3;\n\nexport interface FilePreviewContentProps {\n  files: PreviewFileInput[];\n  currentIndex: number;\n  onNavigate?: (index: number) => void;\n  customRenderers?: CustomRenderer[];\n  mode?: 'modal' | 'embed';\n  onClose?: () => void;\n  zipNestingDepth?: number;\n  locale?: Locale;\n  messages?: Partial<Record<Locale, Partial<Messages>>>;\n  headless?: boolean;\n  theme?: Theme;\n  onCustomEvent?: (event: CustomRendererEventPayload) => void;\n  requestInit?: RequestInitFactory;\n  requestHandler?: RequestHandler;\n  shouldFetchAsBlob?: ShouldFetchAsBlob;\n  onDownload?: (file: PreviewFile) => void;\n  onError?: (error: Error, errorInfo: React.ErrorInfo) => void;\n  /** 是否显示关闭按钮，默认根据 mode 决定（modal: true, embed: false��� */\n  showClose?: boolean;\n  showDownload?: boolean;\n}\n\nexport const FilePreviewContent: React.FC<FilePreviewContentProps> = (props) => {\n  const { requestInit, requestHandler, shouldFetchAsBlob } = props;\n  return (\n    <RequestProvider\n      requestInit={requestInit}\n      requestHandler={requestHandler}\n      shouldFetchAsBlob={shouldFetchAsBlob}\n    >\n      <FilePreviewContentInner {...props} />\n    </RequestProvider>\n  );\n};\n\nconst FilePreviewContentInner: React.FC<FilePreviewContentProps> = ({\n  files,\n  currentIndex,\n  onNavigate,\n  customRenderers = [],\n  mode = 'modal',\n  onClose,\n  zipNestingDepth = 0,\n  locale = 'zh-CN',\n  messages: userMessages,\n  headless = false,\n  theme = 'dark',\n  onCustomEvent,\n  onDownload,\n  onError,\n  showClose,\n  showDownload = true,\n  requestInit: _requestInit,\n  requestHandler: _requestHandler,\n  shouldFetchAsBlob: _shouldFetchAsBlob,\n}) => {\n  const t: Translator = useMemo(\n    () => createTranslator({ locale, messages: userMessages }),\n    [locale, userMessages],\n  );\n\n  const normalizedFiles = useMemo(() => normalizeFiles(files), [files]);\n  const currentFile = normalizedFiles[currentIndex];\n  const resolvedUrl = useResolvedUrl(currentFile);\n  const fetcher = useFetcher();\n\n  const customRenderer = useMemo(() => {\n    if (!currentFile) return null;\n    return customRenderers.find(renderer => renderer.test(currentFile));\n  }, [currentFile, customRenderers]);\n\n  const fileType = currentFile ? getFileType(currentFile) : 'unsupported';\n\n  // 主题\n  const resolvedTheme = useThemeMode(theme);\n\n  // Refs\n  const contentRef = useRef<HTMLDivElement>(null);\n  const rootRef = useRef<HTMLDivElement>(null);\n\n  // 新架构：通用渲染器 ref，用于获取工具栏配置\n  const rendererInstanceRef = useRef<RendererHandle | null>(null);\n  const [rendererToolbarGroups, setRendererToolbarGroups] = useState<ToolbarGroup[]>([]);\n  const cleanupRef = useRef<(() => void) | null>(null);\n\n  // 设置渲染器并初始化工具栏（在渲染器挂载/更新时同步触发）\n  const setupRenderer = useCallback((renderer: RendererHandle | null) => {\n    // 清理旧的订阅\n    if (cleanupRef.current) {\n      cleanupRef.current();\n      cleanupRef.current = null;\n    }\n\n    rendererInstanceRef.current = renderer;\n\n    if (!renderer?.getToolbarGroups) {\n      setRendererToolbarGroups([]);\n      return;\n    }\n\n    // 立即获取一次初始状态\n    const initialGroups = renderer.getToolbarGroups();\n    setRendererToolbarGroups(initialGroups);\n\n    // 如果渲染器支持事件订阅，使用事件机制\n    if (renderer.onToolbarChange) {\n      const unsubscribe = renderer.onToolbarChange(() => {\n        const groups = renderer.getToolbarGroups();\n        setRendererToolbarGroups(groups);\n      });\n\n      cleanupRef.current = unsubscribe;\n      return;\n    }\n\n    // 回退机制：如果渲染器不支持事件，使用轮询\n    const interval = setInterval(() => {\n      const groups = renderer.getToolbarGroups();\n      setRendererToolbarGroups(groups);\n    }, 100);\n    cleanupRef.current = () => clearInterval(interval);\n  }, []);\n\n  // Callback ref：在渲染器挂载/卸载时立即触发\n  const rendererRef = useCallback((renderer: RendererHandle | null) => {\n    setupRenderer(renderer);\n  }, [setupRenderer]);\n\n  // 组件卸载时清理\n  useEffect(() => {\n    return () => {\n      if (cleanupRef.current) {\n        cleanupRef.current();\n        cleanupRef.current = null;\n      }\n    };\n  }, []);\n\n  // 键盘导航\n  useKeyboardNavigation({\n    mode,\n    currentIndex,\n    totalFiles: normalizedFiles.length,\n    onNavigate,\n    onClose,\n    rootRef,\n  });\n\n  // 图片自动适应窗口（已禁用，改为手动点击\"适应窗口\"按钮）\n  // useImageAutoFit({\n  //   enabled: fileType === 'image',\n  //   naturalWidth: state.image.naturalWidth,\n  //   naturalHeight: state.image.naturalHeight,\n  //   containerRef: contentRef,\n  //   onZoomChange: (zoom) => dispatch({ type: 'SET_ZOOM', payload: zoom }),\n  // });\n\n  // 自定义渲染器上下文\n  const emitCustom = useCallback(\n    (name: string, payload?: unknown) => {\n      if (!currentFile) return;\n      onCustomEvent?.({ name, payload, file: currentFile });\n    },\n    [currentFile, onCustomEvent],\n  );\n\n  const customCtx = useMemo<CustomRendererContext>(\n    () => ({ emit: emitCustom, t, theme: resolvedTheme, locale }),\n    [emitCustom, t, resolvedTheme, locale],\n  );\n\n  const handleDownload = useCallback(async () => {\n    if (!currentFile) return;\n    if (onDownload) {\n      await onDownload(currentFile);\n      return;\n    }\n    try {\n      await downloadFileWithFetcher(currentFile.url, currentFile.name, fetcher);\n    } catch (err) {\n      console.error('[file-preview] download failed:', err);\n    }\n  }, [currentFile, onDownload, fetcher]);\n\n  if (!currentFile) return null;\n\n  return (\n    <LocaleProvider locale={locale} messages={userMessages}>\n      <ThemeProvider theme={resolvedTheme}>\n        <div\n          ref={rootRef}\n          tabIndex={mode === 'embed' ? 0 : -1}\n          data-theme={resolvedTheme}\n          className=\"rfp-relative rfp-w-full rfp-h-full rfp-flex rfp-flex-col rfp-overflow-hidden rfp-outline-none\"\n        >\n          {!headless && (\n            <FilePreviewToolbar\n              fileName={currentFile.name}\n              currentIndex={currentIndex}\n              totalFiles={normalizedFiles.length}\n              toolGroups={rendererToolbarGroups}\n              t={t}\n              onDownload={handleDownload}\n              onClose={onClose}\n              showClose={resolveShowClose(mode, showClose)}\n              showDownload={showDownload}\n            />\n          )}\n\n          <div\n            ref={contentRef}\n            className=\"rfp-flex-1 rfp-flex rfp-items-center rfp-justify-center rfp-overflow-auto\"\n          >\n            <FilePreviewRenderer\n              currentFile={currentFile}\n              customRenderer={customRenderer}\n              customRendererContext={customCtx}\n              t={t}\n              onDownload={handleDownload}\n              onError={onError}\n            >\n              {(() => {\n                // ZIP 嵌套深度超限：fallback 到 Unsupported\n                if (fileType === 'zip' && zipNestingDepth >= MAX_ZIP_NESTING_DEPTH) {\n                  return (\n                    <UnsupportedRenderer\n                      fileName={currentFile.name}\n                      fileType={currentFile.type}\n                      onDownload={handleDownload}\n                    />\n                  );\n                }\n\n                // 从注册表查找匹配的渲染器\n                const rendererConfig = BUILTIN_RENDERERS.find(\n                  (r) => r.fileType === fileType,\n                );\n\n                if (rendererConfig) {\n                  const RendererComponent = rendererConfig.component;\n                  const rendererProps = rendererConfig.getProps({\n                    resolvedUrl,\n                    zipNestingDepth,\n                    currentFile,\n                  });\n                  return <RendererComponent ref={rendererRef} {...rendererProps} />;\n                }\n\n                // 未匹配：fallback 到 UnsupportedRenderer\n                return (\n                  <UnsupportedRenderer\n                    fileName={currentFile.name}\n                    fileType={currentFile.type}\n                    onDownload={handleDownload}\n                  />\n                );\n              })()}\n            </FilePreviewRenderer>\n          </div>\n\n          {!headless && normalizedFiles.length > 1 && (\n            <NavArrows\n              containerRef={contentRef}\n              hasPrev={currentIndex > 0}\n              hasNext={currentIndex < normalizedFiles.length - 1}\n              onPrev={() => onNavigate?.(currentIndex - 1)}\n              onNext={() => onNavigate?.(currentIndex + 1)}\n              resetKey={currentIndex}\n              t={t}\n            />\n          )}\n        </div>\n      </ThemeProvider>\n    </LocaleProvider>\n  );\n};\n","import { useEffect, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { PreviewFileInput, CustomRenderer } from './types';\nimport { FilePreviewContent } from './FilePreviewContent';\nimport type { Locale, Messages, Theme, CustomRendererEventPayload, PreviewFile, RequestHandler, RequestInitFactory, ShouldFetchAsBlob } from '@eternalheart/file-preview-core';\n\ninterface FilePreviewModalProps {\n  files: PreviewFileInput[];\n  currentIndex: number;\n  isOpen: boolean;\n  onClose: () => void;\n  onNavigate?: (index: number) => void;\n  customRenderers?: CustomRenderer[];\n  /** 国际化语言，默认 'zh-CN' */\n  locale?: Locale;\n  /** 用户自定义翻译字典 */\n  messages?: Partial<Record<Locale, Partial<Messages>>>;\n  /** 无头模式：隐藏工具栏和导航箭头 */\n  headless?: boolean;\n  /** 主题模式，默认 'dark' */\n  theme?: Theme;\n  /** 自定义渲染器派发的事件出口 */\n  onCustomEvent?: (event: CustomRendererEventPayload) => void;\n  /** 自定义 RequestInit（或工厂函数）：注入 Authorization 等鉴权头 */\n  requestInit?: RequestInitFactory;\n  /** 自定义请求处理器：完全接管库内 fetch */\n  requestHandler?: RequestHandler;\n  /** 返回 true 时，对应文件先 fetcher→blob URL 后喂给 image/video/audio/pdf 等 renderer */\n  shouldFetchAsBlob?: ShouldFetchAsBlob;\n  /** 自定义下载回调；不传时库内默认通过 fetcher 拉 Blob 触发下载 */\n  onDownload?: (file: PreviewFile) => void | Promise<void>;\n  /** 是否显示关闭按钮，默认根据 mode 决定（modal: true） */\n  showClose?: boolean;\n  /** 是否显示下载按钮，默认 true */\n  showDownload?: boolean;\n}\n\nexport const FilePreviewModal: React.FC<FilePreviewModalProps> = ({\n  files,\n  currentIndex,\n  isOpen,\n  onClose,\n  onNavigate,\n  customRenderers = [],\n  locale,\n  messages,\n  headless,\n  theme = 'dark',\n  onCustomEvent,\n  requestInit,\n  requestHandler,\n  shouldFetchAsBlob,\n  onDownload,\n  showClose,\n  showDownload,\n}) => {\n  const [systemDark, setSystemDark] = useState(() =>\n    typeof window !== 'undefined'\n      ? window.matchMedia('(prefers-color-scheme: dark)').matches\n      : true,\n  );\n\n  useEffect(() => {\n    if (theme !== 'auto') return;\n    const mql = window.matchMedia('(prefers-color-scheme: dark)');\n    const handler = (e: MediaQueryListEvent) => setSystemDark(e.matches);\n    mql.addEventListener('change', handler);\n    return () => mql.removeEventListener('change', handler);\n  }, [theme]);\n\n  const resolvedTheme = theme === 'auto' ? (systemDark ? 'dark' : 'light') : theme;\n\n  // 锁定 body 滚动\n  useEffect(() => {\n    if (isOpen) {\n      const originalOverflow = document.body.style.overflow;\n      const originalPaddingRight = document.body.style.paddingRight;\n\n      const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n\n      document.body.style.overflow = 'hidden';\n      if (scrollbarWidth > 0) {\n        document.body.style.paddingRight = `${scrollbarWidth}px`;\n      }\n\n      return () => {\n        document.body.style.overflow = originalOverflow;\n        document.body.style.paddingRight = originalPaddingRight;\n      };\n    }\n  }, [isOpen]);\n\n  if (!isOpen) return null;\n\n  const modalContent = (\n    <div className=\"rfp-root\" data-theme={resolvedTheme}>\n      <AnimatePresence>\n        {isOpen && (\n          <motion.div\n            initial={{ opacity: 0 }}\n            animate={{ opacity: 1 }}\n            exit={{ opacity: 0 }}\n            className=\"rfp-fixed rfp-inset-0 rfp-z-[9999] rfp-flex rfp-items-center rfp-justify-center rfp-backdrop-blur-md rfp-overflow-hidden rfp-bg-surface-overlay\"\n            onClick={onClose}\n            onWheel={(e) => e.stopPropagation()}\n          >\n            <div\n              className=\"rfp-relative rfp-w-full rfp-h-full\"\n              onClick={(e) => e.stopPropagation()}\n            >\n              <FilePreviewContent\n                mode=\"modal\"\n                files={files}\n                currentIndex={currentIndex}\n                onClose={onClose}\n                onNavigate={onNavigate}\n                customRenderers={customRenderers}\n                locale={locale}\n                messages={messages}\n                headless={headless}\n                theme={theme}\n                onCustomEvent={onCustomEvent}\n                requestInit={requestInit}\n                requestHandler={requestHandler}\n                shouldFetchAsBlob={shouldFetchAsBlob}\n                onDownload={onDownload}\n                showClose={showClose}\n                showDownload={showDownload}\n              />\n            </div>\n          </motion.div>\n        )}\n      </AnimatePresence>\n    </div>\n  );\n\n  return createPortal(modalContent, document.body);\n};\n","import { useEffect, useState } from 'react';\nimport { PreviewFileInput, CustomRenderer } from './types';\nimport { FilePreviewContent } from './FilePreviewContent';\nimport type { Locale, Messages, Theme, CustomRendererEventPayload, PreviewFile, RequestHandler, RequestInitFactory, ShouldFetchAsBlob } from '@eternalheart/file-preview-core';\n\ninterface FilePreviewEmbedProps {\n  files: PreviewFileInput[];\n  currentIndex?: number;\n  onNavigate?: (index: number) => void;\n  customRenderers?: CustomRenderer[];\n  /** 宽度,默认 100% 填充父容器 */\n  width?: number | string;\n  /** 高度,默认 100% 填充父容器 */\n  height?: number | string;\n  className?: string;\n  style?: React.CSSProperties;\n  /** 国际化语言，默认 'zh-CN' */\n  locale?: Locale;\n  /** 用户自定义翻译字典 */\n  messages?: Partial<Record<Locale, Partial<Messages>>>;\n  /** 无头模式：隐藏工具栏和导航箭头 */\n  headless?: boolean;\n  /** 主题模式，默认 'dark' */\n  theme?: Theme;\n  /** 自定义渲染器派发的事件出口 */\n  onCustomEvent?: (event: CustomRendererEventPayload) => void;\n  /** 自定义 RequestInit（或工厂函数）：注入 Authorization 等鉴权头 */\n  requestInit?: RequestInitFactory;\n  /** 自定义请求处理器：完全接管库内 fetch */\n  requestHandler?: RequestHandler;\n  /** 返回 true 时，对应文件先 fetcher→blob URL 后喂给 image/video/audio/pdf 等 renderer */\n  shouldFetchAsBlob?: ShouldFetchAsBlob;\n  /** 自定义下载回调；不传时库内默认通过 fetcher 拉 Blob 触发下载 */\n  onDownload?: (file: PreviewFile) => void | Promise<void>;\n  /** 关闭回调 */\n  onClose?: () => void;\n  /** 是否显示关闭按钮，默认根据 mode 决定（embed: false） */\n  showClose?: boolean;\n  /** 是否显示下载按钮，默认 true */\n  showDownload?: boolean;\n}\n\nexport const FilePreviewEmbed: React.FC<FilePreviewEmbedProps> = ({\n  files,\n  currentIndex = 0,\n  onNavigate,\n  customRenderers = [],\n  width = '100%',\n  height = '100%',\n  className,\n  style,\n  locale,\n  messages,\n  headless,\n  theme = 'dark',\n  onCustomEvent,\n  requestInit,\n  requestHandler,\n  shouldFetchAsBlob,\n  onDownload,\n  onClose,\n  showClose,\n  showDownload,\n}) => {\n  const [systemDark, setSystemDark] = useState(() =>\n    typeof window !== 'undefined'\n      ? window.matchMedia('(prefers-color-scheme: dark)').matches\n      : true,\n  );\n\n  useEffect(() => {\n    if (theme !== 'auto') return;\n    const mql = window.matchMedia('(prefers-color-scheme: dark)');\n    const handler = (e: MediaQueryListEvent) => setSystemDark(e.matches);\n    mql.addEventListener('change', handler);\n    return () => mql.removeEventListener('change', handler);\n  }, [theme]);\n\n  const resolvedTheme = theme === 'auto' ? (systemDark ? 'dark' : 'light') : theme;\n\n  return (\n    <div\n      className={`rfp-root ${className ?? ''}`}\n      style={{ width, height, ...style }}\n      data-theme={resolvedTheme}\n    >\n      <div className=\"rfp-relative rfp-w-full rfp-h-full rfp-overflow-hidden rfp-bg-surface-overlay\">\n        <FilePreviewContent\n          mode=\"embed\"\n          files={files}\n          currentIndex={currentIndex}\n          onNavigate={onNavigate}\n          customRenderers={customRenderers}\n          locale={locale}\n          messages={messages}\n          headless={headless}\n          theme={theme}\n          onCustomEvent={onCustomEvent}\n          requestInit={requestInit}\n          requestHandler={requestHandler}\n          shouldFetchAsBlob={shouldFetchAsBlob}\n          onDownload={onDownload}\n          onClose={onClose}\n          showClose={showClose}\n          showDownload={showDownload}\n        />\n      </div>\n    </div>\n  );\n};\n","// @ts-ignore - pdfjs-dist 类型路径\n// Electron 环境使用 legacy 构建版本以避免 Web Streams API 兼容性问题\n// 参考: https://github.com/mozilla/pdf.js/issues/16214\nimport * as pdfjsLib from 'pdfjs-dist/legacy/build/pdf.mjs';\nimport { configurePdfWorker } from '@eternalheart/file-preview-core';\n\n/**\n * PDF.js Worker 配置选项\n */\nexport interface PdfConfigOptions {\n  /**\n   * PDF.js worker 文件路径\n   * 默认使用 CDN: `https://unpkg.com/pdfjs-dist@${version}/legacy/build/pdf.worker.min.mjs`\n   * 注意：为兼容 Electron 环境，使用 legacy 构建版本\n   */\n  workerSrc?: string;\n\n  /**\n   * CMap 文件目录路径\n   * 默认使用 CDN: `https://unpkg.com/pdfjs-dist@${version}/cmaps/`\n   */\n  cMapUrl?: string;\n\n  /**\n   * 是否使用压缩的 CMap 文件\n   * 默认: true\n   */\n  cMapPacked?: boolean;\n\n  /**\n   * PDF.js 标准字体文件目录路径\n   * 默认使用 CDN: `https://unpkg.com/pdfjs-dist@${version}/standard_fonts/`\n   */\n  standardFontDataUrl?: string;\n}\n\n/**\n * 配置 PDF.js\n *\n * 注意：为兼容 Electron 环境，本库使用 pdfjs-dist 的 legacy 构建版本。\n * 如果手动配置 workerSrc，请确保使用对应的 legacy worker 文件。\n *\n * @example\n * ```ts\n * // 使用本地静态文件（推荐用于生产环境，Electron 环境必须使用 legacy 版本）\n * configurePdfjs({\n *   workerSrc: '/pdfjs/pdf.worker.min.mjs', // 确保使用 legacy/build/pdf.worker.min.mjs\n *   cMapUrl: '/pdfjs/cmaps/',\n *   cMapPacked: true,\n *   standardFontDataUrl: '/pdfjs/standard_fonts/',\n * });\n * ```\n *\n * @example\n * ```ts\n * // 使用 CDN（默认配置，自动使用 legacy 版本）\n * configurePdfjs(); // 自动使用 unpkg CDN 的 legacy 构建\n * ```\n */\nexport function configurePdfjs(options?: PdfConfigOptions) {\n  configurePdfWorker(pdfjsLib, options);\n}\n\nexport { pdfjsLib as pdfjs };\n","// 导入样式\nimport './index.css';\n\n// 导入版本号\nimport packageJson from '../package.json';\n\n// 导出版本号\nexport const VERSION = packageJson.version;\n\n// 导出主组件\nexport { FilePreviewModal } from './FilePreviewModal';\nexport { FilePreviewEmbed } from './FilePreviewEmbed';\nexport { FilePreviewContent } from './FilePreviewContent';\n\n// 导出类型定义\nexport type {\n  PreviewFile,\n  PreviewFileLink,\n  PreviewFileInput,\n  FileType,\n  ToolbarAction,\n  PreviewState,\n  CustomRenderer,\n  CustomRendererContext,\n  CustomRendererEventPayload,\n  RequestHandler,\n  RequestInitFactory,\n  RequestOptions,\n  Fetcher,\n  ShouldFetchAsBlob,\n} from './types';\n\n// 导出工具函数和常量\nexport { normalizeFile, normalizeFiles } from './utils/fileNormalizer';\nexport { SUPPORTED_FILE_TYPES } from '@eternalheart/file-preview-core';\n\n// 导出 PDF.js 配置函数和类型\nexport { configurePdfjs, pdfjs } from './utils/pdfConfig';\nexport type { PdfConfigOptions } from './utils/pdfConfig';\n\n// 导出 i18n 国际化\nexport { LocaleProvider, useTranslator, useLocale } from './i18n/LocaleContext';\nexport type { LocaleProviderProps, LocaleContextValue } from './i18n/LocaleContext';\nexport type {\n  Locale,\n  Messages,\n  MessageKey,\n  Translator,\n  TranslateParams,\n  CreateTranslatorOptions,\n  Theme,\n} from '@eternalheart/file-preview-core';\n","class r {\n  /**\n   * HEIC 格式浏览器均不原生支持，始终需要解码\n   */\n  async needsDecode(a) {\n    return a === \"image/heic\" || a === \"image/heif\";\n  }\n  /**\n   * 解码 HEIC 文件为 JPEG Blob\n   */\n  async decode(a, t) {\n    var s, n;\n    try {\n      const e = await import(\"heic2any\"), i = a instanceof Blob ? a : new Blob([a], { type: \"image/heic\" }), c = await e.default({\n        blob: i,\n        toType: (t == null ? void 0 : t.outputFormat) || \"image/jpeg\",\n        quality: 0.9\n      });\n      return Array.isArray(c) ? c[0] : c;\n    } catch (e) {\n      throw (s = e == null ? void 0 : e.message) != null && s.includes(\"DRM\") || (n = e == null ? void 0 : e.message) != null && n.includes(\"protected\") ? new Error(\"HEIC 解码失败，文件受 DRM 保护\") : new Error(`HEIC 解码失败，文件可能损坏: ${(e == null ? void 0 : e.message) || \"未知错误\"}`);\n    }\n  }\n  /**\n   * 获取 HEIC 元数据（当前版本暂不实现，返回空对象）\n   */\n  async getMetadata(a) {\n    return {\n      format: \"heic\"\n    };\n  }\n}\nconst u = new r();\nexport {\n  u as default\n};\n//# sourceMappingURL=heicLoader-CH_raQNn.js.map\n","let e = null;\nasync function c() {\n  return e !== null ? e : new Promise((n) => {\n    const A = new Image();\n    A.onload = () => {\n      e = A.width === 1 && A.height === 1, n(e);\n    }, A.onerror = () => {\n      e = !1, n(!1);\n    }, A.src = \"data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAAB0AAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAACVtZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=\";\n  });\n}\nclass f {\n  /**\n   * 检测是否需要解码：仅在浏览器不原生支持 AVIF 时需要\n   */\n  async needsDecode(A) {\n    return A !== \"image/avif\" ? !1 : !await c();\n  }\n  /**\n   * 解码 AVIF 文件为 PNG Blob\n   */\n  async decode(A, r) {\n    if (await c())\n      return A instanceof Blob ? A : new Blob([A], { type: \"image/avif\" });\n    try {\n      const a = await import(\"@jsquash/avif\"), i = A instanceof Blob ? await A.arrayBuffer() : A, o = await a.decode(i), t = document.createElement(\"canvas\");\n      t.width = o.width, t.height = o.height;\n      const s = t.getContext(\"2d\");\n      if (!s)\n        throw new Error(\"无法创建 Canvas 2D 上下文\");\n      return s.putImageData(o, 0, 0), new Promise((g, d) => {\n        t.toBlob(\n          (B) => {\n            B ? g(B) : d(new Error(\"AVIF Canvas 转换为 PNG 失败\"));\n          },\n          (r == null ? void 0 : r.outputFormat) || \"image/png\"\n        );\n      });\n    } catch (a) {\n      throw new Error(`AVIF 解码失败: ${(a == null ? void 0 : a.message) || \"未知错误\"}`);\n    }\n  }\n  /**\n   * 获取 AVIF 元数据\n   */\n  async getMetadata(A) {\n    return {\n      format: \"avif\"\n    };\n  }\n}\nconst m = new f();\nexport {\n  m as default\n};\n//# sourceMappingURL=avifLoader-BP3fgcMm.js.map\n","class y {\n  /**\n   * TIFF 浏览器均不原生支持（除 Safari 部分版本），始终需要解码\n   */\n  async needsDecode(a) {\n    return a === \"image/tiff\";\n  }\n  /**\n   * 解码 TIFF 文件为 PNG Blob\n   */\n  async decode(a, r) {\n    try {\n      const e = await import(\"utif\"), n = a instanceof Blob ? await a.arrayBuffer() : a, t = e.decode(n);\n      if (t.length === 0)\n        throw new Error(\"TIFF 文件不包含任何图像\");\n      const f = Math.max(0, Math.min(((r == null ? void 0 : r.page) ?? 1) - 1, t.length - 1)), c = t[f];\n      e.decodeImage(n, c);\n      const w = e.toRGBA8(c), h = c.width, d = c.height, o = document.createElement(\"canvas\");\n      o.width = h, o.height = d;\n      const g = o.getContext(\"2d\");\n      if (!g)\n        throw new Error(\"无法创建 Canvas 2D 上下文\");\n      const i = new ImageData(new Uint8ClampedArray(w.buffer), h, d);\n      return g.putImageData(i, 0, 0), new Promise((m, u) => {\n        o.toBlob(\n          (s) => {\n            s ? m(s) : u(new Error(\"TIFF Canvas 转换为 PNG 失败\"));\n          },\n          (r == null ? void 0 : r.outputFormat) || \"image/png\"\n        );\n      });\n    } catch (e) {\n      throw new Error(`TIFF 解码失败: ${(e == null ? void 0 : e.message) || \"未知错误\"}`);\n    }\n  }\n  /**\n   * 获取 TIFF 元数据（包括页数）\n   */\n  async getMetadata(a) {\n    try {\n      const r = await import(\"utif\"), e = a instanceof Blob ? await a.arrayBuffer() : a, n = r.decode(e), t = n[0];\n      return {\n        format: \"tiff\",\n        pageCount: n.length,\n        width: t == null ? void 0 : t.width,\n        height: t == null ? void 0 : t.height\n      };\n    } catch {\n      return {\n        format: \"tiff\",\n        pageCount: 1\n      };\n    }\n  }\n}\nconst B = new y();\nexport {\n  B as default\n};\n//# sourceMappingURL=tiffLoader-CmUAD1vO.js.map\n","const p = /* @__PURE__ */ new Set([\n  \"image/x-canon-cr2\",\n  \"image/x-nikon-nef\",\n  \"image/x-sony-arw\",\n  \"image/x-adobe-dng\",\n  \"image/x-fuji-raf\",\n  \"image/x-olympus-orf\"\n]);\nasync function b(r) {\n  const e = new Uint8Array(r);\n  if (e.length < 8) return null;\n  let a;\n  if (e[0] === 73 && e[1] === 73)\n    a = !0;\n  else if (e[0] === 77 && e[1] === 77)\n    a = !1;\n  else\n    return w(e);\n  const l = new DataView(r), t = (o) => l.getUint16(o, a), f = (o) => l.getUint32(o, a);\n  if (t(2) !== 42)\n    return w(e);\n  let n = f(4), i = 0, s = 0;\n  for (let o = 0; o < 10 && n !== 0 && n + 2 < e.length; o++) {\n    const h = t(n);\n    let c = 0, g = 0;\n    for (let u = 0; u < h; u++) {\n      const d = n + 2 + u * 12;\n      if (d + 12 > e.length) break;\n      const j = t(d), x = d + 8;\n      j === 513 ? c = f(x) : j === 514 && (g = f(x));\n    }\n    c > 0 && g > s && c + g <= e.length && (i = c, s = g);\n    const m = n + 2 + h * 12;\n    if (m + 4 > e.length) break;\n    n = f(m);\n  }\n  return i > 0 && s > 0 ? new Blob([e.slice(i, i + s)], {\n    type: \"image/jpeg\"\n  }) : w(e);\n}\nfunction w(r) {\n  let e = -1, a = -1, l = 0;\n  for (let t = 0; t < r.length - 4; t++)\n    if (r[t] === 255 && r[t + 1] === 216 && r[t + 2] === 255) {\n      const f = t;\n      for (let n = t + 2; n < r.length - 1; n++)\n        if (r[n] === 255 && r[n + 1] === 217) {\n          const i = n + 2 - f;\n          i > l && (e = f, a = n + 2, l = i), t = n + 2;\n          break;\n        }\n    }\n  return e >= 0 && a > e ? new Blob([r.slice(e, a)], { type: \"image/jpeg\" }) : null;\n}\nclass y {\n  async needsDecode(e) {\n    return p.has(e);\n  }\n  async decode(e, a) {\n    const l = e instanceof Blob ? await e.arrayBuffer() : e;\n    if (!(a != null && a.fullQuality)) {\n      const f = await b(l);\n      if (f)\n        return f;\n      throw new Error(\"未在 RAW 文件中找到嵌入的预览图像（该文件可能已被剥离 JPEG 预览）。\");\n    }\n    const t = await b(l);\n    if (t)\n      return t;\n    throw new Error(\"完整 RAW 解码暂未实现，且无法提取嵌入预览图。\");\n  }\n  async getMetadata(e) {\n    return {\n      format: \"raw\"\n    };\n  }\n}\nconst E = new y();\nexport {\n  E as default\n};\n//# sourceMappingURL=rawLoader-0mLvxCNp.js.map\n","class i {\n  async needsDecode(t) {\n    return t === \"image/vnd.adobe.photoshop\";\n  }\n  async decode(t, a) {\n    var n;\n    try {\n      const e = await import(\"ag-psd\"), r = e.readPsd || ((n = e.default) == null ? void 0 : n.readPsd);\n      if (typeof r != \"function\")\n        throw new Error(\"ag-psd 库 API 不符合预期\");\n      const s = t instanceof Blob ? await t.arrayBuffer() : t, d = r(s, {\n        skipLayerImageData: !0,\n        // 不需要单独图层数据\n        skipCompositeImageData: !1,\n        // 需要合并预览\n        skipThumbnail: !0,\n        // 保留像素数据，避免 Worker 环境依赖 document/HTMLCanvasElement\n        useImageData: !0\n      });\n      if (d.imageData && d.width && d.height) {\n        const c = new ImageData(\n          new Uint8ClampedArray(d.imageData.data || d.imageData),\n          d.width,\n          d.height\n        );\n        return await f(c, (a == null ? void 0 : a.outputFormat) || \"image/png\");\n      }\n      throw new Error(\"PSD 文件不包含合并的预览图像（可能仅含图层数据）\");\n    } catch (e) {\n      throw new Error(`PSD 解码失败: ${(e == null ? void 0 : e.message) || \"未知错误\"}`);\n    }\n  }\n  async getMetadata(t) {\n    var a;\n    try {\n      const n = await import(\"ag-psd\"), e = n.readPsd || ((a = n.default) == null ? void 0 : a.readPsd);\n      if (typeof e != \"function\")\n        return { format: \"psd\" };\n      const r = t instanceof Blob ? await t.arrayBuffer() : t, s = e(r, {\n        skipLayerImageData: !0,\n        skipCompositeImageData: !0,\n        skipThumbnail: !0\n      });\n      return {\n        format: \"psd\",\n        width: s.width,\n        height: s.height\n      };\n    } catch {\n      return { format: \"psd\" };\n    }\n  }\n}\nasync function f(o, t) {\n  if (typeof OffscreenCanvas < \"u\") {\n    const e = new OffscreenCanvas(o.width, o.height), r = e.getContext(\"2d\");\n    if (!r) throw new Error(\"无法创建 OffscreenCanvas 2D 上下文\");\n    return r.putImageData(o, 0, 0), e.convertToBlob({ type: t });\n  }\n  if (typeof document > \"u\")\n    throw new Error(\"当前 Worker 环境不支持 OffscreenCanvas\");\n  const a = document.createElement(\"canvas\");\n  a.width = o.width, a.height = o.height;\n  const n = a.getContext(\"2d\");\n  if (!n) throw new Error(\"无法创建 Canvas 2D 上下文\");\n  return n.putImageData(o, 0, 0), new Promise((e, r) => {\n    a.toBlob(\n      (s) => {\n        s ? e(s) : r(new Error(\"PSD Canvas 转换为 Blob 失败\"));\n      },\n      t\n    );\n  });\n}\nconst u = new i();\nexport {\n  u as default\n};\n//# sourceMappingURL=psdLoader-D5CkupyY.js.map\n","const o = \"ZnVuY3Rpb24gRXQoTzIsIHUwKSB7CiAgcmV0dXJuIHUwLmZvckVhY2goZnVuY3Rpb24oZjApIHsKICAgIGYwICYmIHR5cGVvZiBmMCAhPSAic3RyaW5nIiAmJiAhQXJyYXkuaXNBcnJheShmMCkgJiYgT2JqZWN0LmtleXMoZjApLmZvckVhY2goZnVuY3Rpb24obDApIHsKICAgICAgaWYgKGwwICE9PSAiZGVmYXVsdCIgJiYgIShsMCBpbiBPMikpIHsKICAgICAgICB2YXIgQjAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGYwLCBsMCk7CiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8yLCBsMCwgQjAuZ2V0ID8gQjAgOiB7CiAgICAgICAgICBlbnVtZXJhYmxlOiAhMCwKICAgICAgICAgIGdldDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHJldHVybiBmMFtsMF07CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0pOwogIH0pLCBPYmplY3QuZnJlZXplKE8yKTsKfQpmdW5jdGlvbiBMZihPMikgewogIHJldHVybiBPMiAmJiBPMi5fX2VzTW9kdWxlICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChPMiwgImRlZmF1bHQiKSA/IE8yLmRlZmF1bHQgOiBPMjsKfQpmdW5jdGlvbiBEdChPMikgewogIGlmIChPMi5fX2VzTW9kdWxlKSByZXR1cm4gTzI7CiAgdmFyIHUwID0gTzIuZGVmYXVsdDsKICBpZiAodHlwZW9mIHUwID09ICJmdW5jdGlvbiIpIHsKICAgIHZhciBmMCA9IGZ1bmN0aW9uIGwwKCkgewogICAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGwwID8gUmVmbGVjdC5jb25zdHJ1Y3QodTAsIGFyZ3VtZW50cywgdGhpcy5jb25zdHJ1Y3RvcikgOiB1MC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgfTsKICAgIGYwLnByb3RvdHlwZSA9IHUwLnByb3RvdHlwZTsKICB9IGVsc2UgZjAgPSB7fTsKICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGYwLCAiX19lc01vZHVsZSIsIHsgdmFsdWU6ICEwIH0pLCBPYmplY3Qua2V5cyhPMikuZm9yRWFjaChmdW5jdGlvbihsMCkgewogICAgdmFyIEIwID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPMiwgbDApOwogICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGYwLCBsMCwgQjAuZ2V0ID8gQjAgOiB7CiAgICAgIGVudW1lcmFibGU6ICEwLAogICAgICBnZXQ6IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBPMltsMF07CiAgICAgIH0KICAgIH0pOwogIH0pLCBmMDsKfQp2YXIgRXIgPSB7fTsKRXIuaW5mbyA9ICguLi5PMikgPT4gewp9OwpFci53YXJuID0gKC4uLk8yKSA9PiB7Cn07CnZhciBxZSA9IHt9OwpxZS5sb2cyID0gKE8yKSA9PiBPMiA8PSAwID8gMCA6IE1hdGguY2VpbChNYXRoLmxvZzIoTzIpKTsKcWUucmVhZEludDggPSAoTzIsIHUwKSA9PiBPMi5yZWFkSW50OCh1MCk7CnFlLnJlYWRVaW50MTYgPSAoTzIsIHUwKSA9PiBPMi5yZWFkVUludDE2QkUodTApOwpxZS5yZWFkVWludDMyID0gKE8yLCB1MCkgPT4gTzIucmVhZFVJbnQzMkJFKHUwKTsKdmFyIE9mID0ge307CmNvbnN0IFV0ID0gWwogIHsgcWU6IDIyMDE3LCBubXBzOiAxLCBubHBzOiAxLCBzd2l0Y2hGbGFnOiAxIH0sCiAgeyBxZTogMTMzMTMsIG5tcHM6IDIsIG5scHM6IDYsIHN3aXRjaEZsYWc6IDAgfSwKICB7IHFlOiA2MTQ1LCBubXBzOiAzLCBubHBzOiA5LCBzd2l0Y2hGbGFnOiAwIH0sCiAgeyBxZTogMjc1Mywgbm1wczogNCwgbmxwczogMTIsIHN3aXRjaEZsYWc6IDAgfSwKICB7IHFlOiAxMzEzLCBubXBzOiA1LCBubHBzOiAyOSwgc3dpdGNoRmxhZzogMCB9LAogIHsgcWU6IDU0NSwgbm1wczogMzgsIG5scHM6IDMzLCBzd2l0Y2hGbGFnOiAwIH0sCiAgeyBxZTogMjIwMTcsIG5tcHM6IDcsIG5scHM6IDYsIHN3aXRjaEZsYWc6IDEgfSwKICB7IHFlOiAyMTUwNSwgbm1wczogOCwgbmxwczogMTQsIHN3aXRjaEZsYWc6IDAgfSwKICB7IHFlOiAxODQzMywgbm1wczogOSwgbmxwczogMTQsIHN3aXRjaEZsYWc6IDAgfSwKICB7IHFlOiAxNDMzNywgbm1wczogMTAsIG5scHM6IDE0LCBzd2l0Y2hGbGFnOiAwIH0sCiAgeyBxZTogMTIyODksIG5tcHM6IDExLCBubHBzOiAxNywgc3dpdGNoRmxhZzogMCB9LAogIHsgcWU6IDkyMTcsIG5tcHM6IDEyLCBubHBzOiAxOCwgc3dpdGNoRmxhZzogMCB9LAogIHsgcWU6IDcxNjksIG5tcHM6IDEzLCBubHBzOiAyMCwgc3dpdGNoRmxhZzogMCB9LAogIHsgcWU6IDU2MzMsIG5tcHM6IDI5LCBubHBzOiAyMSwgc3dpdGNoRmxhZzogMCB9LAogIHsgcWU6IDIyMDE3LCBubXBzOiAxNSwgbmxwczogMTQsIHN3aXRjaEZsYWc6IDEgfSwKICB7IHFlOiAyMTUwNSwgbm1wczogMTYsIG5scHM6IDE0LCBzd2l0Y2hGbGFnOiAwIH0sCiAgeyBxZTogMjA3MzcsIG5tcHM6IDE3LCBubHBzOiAxNSwgc3dpdGNoRmxhZzogMCB9LAogIHsgcWU6IDE4NDMzLCBubXBzOiAxOCwgbmxwczogMTYsIHN3aXRjaEZsYWc6IDAgfSwKICB7IHFlOiAxNDMzNywgbm1wczogMTksIG5scHM6IDE3LCBzd2l0Y2hGbGFnOiAwIH0sCiAgeyBxZTogMTMzMTMsIG5tcHM6IDIwLCBubHBzOiAxOCwgc3dpdGNoRmxhZzogMCB9LAogIHsgcWU6IDEyMjg5LCBubXBzOiAyMSwgbmxwczogMTksIHN3aXRjaEZsYWc6IDAgfSwKICB7IHFlOiAxMDI0MSwgbm1wczogMjIsIG5scHM6IDE5LCBzd2l0Y2hGbGFnOiAwIH0sCiAgeyBxZTogOTIxNywgbm1wczogMjMsIG5scHM6IDIwLCBzd2l0Y2hGbGFnOiAwIH0sCiAgeyBxZTogODcwNSwgbm1wczogMjQsIG5scHM6IDIxLCBzd2l0Y2hGbGFnOiAwIH0sCiAgeyBxZTogNzE2OSwgbm1wczogMjUsIG5scHM6IDIyLCBzd2l0Y2hGbGFnOiAwIH0sCiAgeyBxZTogNjE0NSwgbm1wczogMjYsIG5scHM6IDIzLCBzd2l0Y2hGbGFnOiAwIH0sCiAgeyBxZTogNTYzMywgbm1wczogMjcsIG5scHM6IDI0LCBzd2l0Y2hGbGFnOiAwIH0sCiAgeyBxZTogNTEyMSwgbm1wczogMjgsIG5scHM6IDI1LCBzd2l0Y2hGbGFnOiAwIH0sCiAgeyBxZTogNDYwOSwgbm1wczogMjksIG5scHM6IDI2LCBzd2l0Y2hGbGFnOiAwIH0sCiAgeyBxZTogNDM1Mywgbm1wczogMzAsIG5scHM6IDI3LCBzd2l0Y2hGbGFnOiAwIH0sCiAgeyBxZTogMjc1Mywgbm1wczogMzEsIG5scHM6IDI4LCBzd2l0Y2hGbGFnOiAwIH0sCiAgeyBxZTogMjQ5Nywgbm1wczogMzIsIG5scHM6IDI5LCBzd2l0Y2hGbGFnOiAwIH0sCiAgeyBxZTogMjIwOSwgbm1wczogMzMsIG5scHM6IDMwLCBzd2l0Y2hGbGFnOiAwIH0sCiAgeyBxZTogMTMxMywgbm1wczogMzQsIG5scHM6IDMxLCBzd2l0Y2hGbGFnOiAwIH0sCiAgeyBxZTogMTA4OSwgbm1wczogMzUsIG5scHM6IDMyLCBzd2l0Y2hGbGFnOiAwIH0sCiAgeyBxZTogNjczLCBubXBzOiAzNiwgbmxwczogMzMsIHN3aXRjaEZsYWc6IDAgfSwKICB7IHFlOiA1NDUsIG5tcHM6IDM3LCBubHBzOiAzNCwgc3dpdGNoRmxhZzogMCB9LAogIHsgcWU6IDMyMSwgbm1wczogMzgsIG5scHM6IDM1LCBzd2l0Y2hGbGFnOiAwIH0sCiAgeyBxZTogMjczLCBubXBzOiAzOSwgbmxwczogMzYsIHN3aXRjaEZsYWc6IDAgfSwKICB7IHFlOiAxMzMsIG5tcHM6IDQwLCBubHBzOiAzNywgc3dpdGNoRmxhZzogMCB9LAogIHsgcWU6IDczLCBubXBzOiA0MSwgbmxwczogMzgsIHN3aXRjaEZsYWc6IDAgfSwKICB7IHFlOiAzNywgbm1wczogNDIsIG5scHM6IDM5LCBzd2l0Y2hGbGFnOiAwIH0sCiAgeyBxZTogMjEsIG5tcHM6IDQzLCBubHBzOiA0MCwgc3dpdGNoRmxhZzogMCB9LAogIHsgcWU6IDksIG5tcHM6IDQ0LCBubHBzOiA0MSwgc3dpdGNoRmxhZzogMCB9LAogIHsgcWU6IDUsIG5tcHM6IDQ1LCBubHBzOiA0Miwgc3dpdGNoRmxhZzogMCB9LAogIHsgcWU6IDEsIG5tcHM6IDQ1LCBubHBzOiA0Mywgc3dpdGNoRmxhZzogMCB9LAogIHsgcWU6IDIyMDE3LCBubXBzOiA0NiwgbmxwczogNDYsIHN3aXRjaEZsYWc6IDAgfQpdOwpsZXQgTXQgPSBjbGFzcyB7CiAgLy8gQy4zLjUgSW5pdGlhbGlzYXRpb24gb2YgdGhlIGRlY29kZXIgKElOSVRERUMpCiAgY29uc3RydWN0b3IodTAsIGYwLCBsMCkgewogICAgdGhpcy5kYXRhID0gdTAsIHRoaXMuYnAgPSBmMCwgdGhpcy5kYXRhRW5kID0gbDAsIHRoaXMuY2hpZ2ggPSB1MFtmMF0sIHRoaXMuY2xvdyA9IDAsIHRoaXMuYnl0ZUluKCksIHRoaXMuY2hpZ2ggPSB0aGlzLmNoaWdoIDw8IDcgJiA2NTUzNSB8IHRoaXMuY2xvdyA+PiA5ICYgMTI3LCB0aGlzLmNsb3cgPSB0aGlzLmNsb3cgPDwgNyAmIDY1NTM1LCB0aGlzLmN0IC09IDcsIHRoaXMuYSA9IDMyNzY4OwogIH0KICAvLyBDLjMuNCBDb21wcmVzc2VkIGRhdGEgaW5wdXQgKEJZVEVJTikKICBieXRlSW4oKSB7CiAgICBjb25zdCB1MCA9IHRoaXMuZGF0YTsKICAgIGxldCBmMCA9IHRoaXMuYnA7CiAgICB1MFtmMF0gPT09IDI1NSA/IHUwW2YwICsgMV0gPiAxNDMgPyAodGhpcy5jbG93ICs9IDY1MjgwLCB0aGlzLmN0ID0gOCkgOiAoZjArKywgdGhpcy5jbG93ICs9IHUwW2YwXSA8PCA5LCB0aGlzLmN0ID0gNywgdGhpcy5icCA9IGYwKSA6IChmMCsrLCB0aGlzLmNsb3cgKz0gZjAgPCB0aGlzLmRhdGFFbmQgPyB1MFtmMF0gPDwgOCA6IDY1MjgwLCB0aGlzLmN0ID0gOCwgdGhpcy5icCA9IGYwKSwgdGhpcy5jbG93ID4gNjU1MzUgJiYgKHRoaXMuY2hpZ2ggKz0gdGhpcy5jbG93ID4+IDE2LCB0aGlzLmNsb3cgJj0gNjU1MzUpOwogIH0KICAvLyBDLjMuMiBEZWNvZGluZyBhIGRlY2lzaW9uIChERUNPREUpCiAgcmVhZEJpdCh1MCwgZjApIHsKICAgIGxldCBsMCA9IHUwW2YwXSA+PiAxLCBCMCA9IHUwW2YwXSAmIDE7CiAgICBjb25zdCBaMCA9IFV0W2wwXSwgczAgPSBaMC5xZTsKICAgIGxldCBDMiwgUTAgPSB0aGlzLmEgLSBzMDsKICAgIGlmICh0aGlzLmNoaWdoIDwgczApCiAgICAgIFEwIDwgczAgPyAoUTAgPSBzMCwgQzIgPSBCMCwgbDAgPSBaMC5ubXBzKSA6IChRMCA9IHMwLCBDMiA9IDEgXiBCMCwgWjAuc3dpdGNoRmxhZyA9PT0gMSAmJiAoQjAgPSBDMiksIGwwID0gWjAubmxwcyk7CiAgICBlbHNlIHsKICAgICAgaWYgKHRoaXMuY2hpZ2ggLT0gczAsIFEwICYgMzI3NjgpCiAgICAgICAgcmV0dXJuIHRoaXMuYSA9IFEwLCBCMDsKICAgICAgUTAgPCBzMCA/IChDMiA9IDEgXiBCMCwgWjAuc3dpdGNoRmxhZyA9PT0gMSAmJiAoQjAgPSBDMiksIGwwID0gWjAubmxwcykgOiAoQzIgPSBCMCwgbDAgPSBaMC5ubXBzKTsKICAgIH0KICAgIGRvCiAgICAgIHRoaXMuY3QgPT09IDAgJiYgdGhpcy5ieXRlSW4oKSwgUTAgPDw9IDEsIHRoaXMuY2hpZ2ggPSB0aGlzLmNoaWdoIDw8IDEgJiA2NTUzNSB8IHRoaXMuY2xvdyA+PiAxNSAmIDEsIHRoaXMuY2xvdyA9IHRoaXMuY2xvdyA8PCAxICYgNjU1MzUsIHRoaXMuY3QtLTsKICAgIHdoaWxlICghKFEwICYgMzI3NjgpKTsKICAgIHJldHVybiB0aGlzLmEgPSBRMCwgdTBbZjBdID0gbDAgPDwgMSB8IEIwLCBDMjsKICB9Cn07Ck9mLkFyaXRobWV0aWNEZWNvZGVyID0gTXQ7CmNvbnN0IHsgaW5mbzogU3QsIHdhcm46IEplIH0gPSBFciwgeyBsb2cyOiBKciwgcmVhZFVpbnQxNjogUTEsIHJlYWRVaW50MzI6IGMxIH0gPSBxZSwgeyBBcml0aG1ldGljRGVjb2RlcjogTnQgfSA9IE9mOwpjbGFzcyBFMSBleHRlbmRzIEVycm9yIHsKICBjb25zdHJ1Y3Rvcih1MCkgewogICAgc3VwZXIoYEpQWCBlcnJvcjogJHt1MH1gKTsKICB9Cn0KdmFyIFB0ID0gZnVuY3Rpb24oKSB7CiAgdmFyIHUwID0gewogICAgTEw6IDAsCiAgICBMSDogMSwKICAgIEhMOiAxLAogICAgSEg6IDIKICB9OwogIGZ1bmN0aW9uIGYwKCkgewogICAgdGhpcy5mYWlsT25Db3JydXB0ZWRJbWFnZSA9ICExOwogIH0KICBmMC5wcm90b3R5cGUgPSB7CiAgICBwYXJzZTogZnVuY3Rpb24oYikgewogICAgICB2YXIgSTIgPSBRMShiLCAwKTsKICAgICAgaWYgKEkyID09PSA2NTM1OSkgewogICAgICAgIHRoaXMucGFyc2VDb2Rlc3RyZWFtKGIsIDAsIGIubGVuZ3RoKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgZm9yICh2YXIgVCA9IDAsIEwgPSBiLmxlbmd0aDsgVCA8IEw7ICkgewogICAgICAgIHZhciBaMiA9IDgsIGkyID0gYzEoYiwgVCksICQgPSBjMShiLCBUICsgNCk7CiAgICAgICAgaWYgKFQgKz0gWjIsIGkyID09PSAxICYmIChpMiA9IGMxKGIsIFQpICogNDI5NDk2NzI5NiArIGMxKGIsIFQgKyA0KSwgVCArPSA4LCBaMiArPSA4KSwgaTIgPT09IDAgJiYgKGkyID0gTCAtIFQgKyBaMiksIGkyIDwgWjIpCiAgICAgICAgICB0aHJvdyBuZXcgRTEoIkludmFsaWQgYm94IGZpZWxkIHNpemUiKTsKICAgICAgICB2YXIgZTIgPSBpMiAtIFoyLCBfID0gITA7CiAgICAgICAgc3dpdGNoICgkKSB7CiAgICAgICAgICBjYXNlIDE3ODU3Mzc4MzI6CiAgICAgICAgICAgIF8gPSAhMTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIDE2NjgyNDY2NDI6CiAgICAgICAgICAgIHZhciB0MiA9IGJbVF07CiAgICAgICAgICAgIGlmICh0MiA9PT0gMSkgewogICAgICAgICAgICAgIHZhciBCMiA9IGMxKGIsIFQgKyAzKTsKICAgICAgICAgICAgICBzd2l0Y2ggKEIyKSB7CiAgICAgICAgICAgICAgICBjYXNlIDE2OgogICAgICAgICAgICAgICAgY2FzZSAxNzoKICAgICAgICAgICAgICAgIGNhc2UgMTg6CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgSmUoIlVua25vd24gY29sb3JzcGFjZSAiICsgQjIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB0MiA9PT0gMiAmJiBTdCgiSUNDIHByb2ZpbGUgbm90IHN1cHBvcnRlZCIpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgMTc4NTczNzgyNzoKICAgICAgICAgICAgdGhpcy5wYXJzZUNvZGVzdHJlYW0oYiwgVCwgVCArIGUyKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIDE3ODM2MzZlMzoKICAgICAgICAgICAgYzEoYiwgVCkgIT09IDIxODc5MzczOCAmJiBKZSgiSW52YWxpZCBKUDIgc2lnbmF0dXJlIik7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAxNzgzNjM0NDU4OgogICAgICAgICAgY2FzZSAxNzE4OTA5Mjk2OgogICAgICAgICAgY2FzZSAxOTIwMDk5Njk3OgogICAgICAgICAgY2FzZSAxOTE5MjUxMjMyOgogICAgICAgICAgY2FzZSAxNzY4NDQ5MTM4OgogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHZhciBWMiA9IFN0cmluZy5mcm9tQ2hhckNvZGUoCiAgICAgICAgICAgICAgJCA+PiAyNCAmIDI1NSwKICAgICAgICAgICAgICAkID4+IDE2ICYgMjU1LAogICAgICAgICAgICAgICQgPj4gOCAmIDI1NSwKICAgICAgICAgICAgICAkICYgMjU1CiAgICAgICAgICAgICk7CiAgICAgICAgICAgIEplKCJVbnN1cHBvcnRlZCBoZWFkZXIgdHlwZSAiICsgJCArICIgKCIgKyBWMiArICIpIik7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBfICYmIChUICs9IGUyKTsKICAgICAgfQogICAgfSwKICAgIHBhcnNlSW1hZ2VQcm9wZXJ0aWVzOiBmdW5jdGlvbihiKSB7CiAgICAgIGZvciAodmFyIEkyID0gYi5nZXRCeXRlKCk7IEkyID49IDA7ICkgewogICAgICAgIHZhciBUID0gSTI7CiAgICAgICAgSTIgPSBiLmdldEJ5dGUoKTsKICAgICAgICB2YXIgTCA9IFQgPDwgOCB8IEkyOwogICAgICAgIGlmIChMID09PSA2NTM2MSkgewogICAgICAgICAgYi5za2lwKDQpOwogICAgICAgICAgdmFyIFoyID0gYi5nZXRJbnQzMigpID4+PiAwLCBpMiA9IGIuZ2V0SW50MzIoKSA+Pj4gMCwgJCA9IGIuZ2V0SW50MzIoKSA+Pj4gMCwgZTIgPSBiLmdldEludDMyKCkgPj4+IDA7CiAgICAgICAgICBiLnNraXAoMTYpOwogICAgICAgICAgdmFyIF8gPSBiLmdldFVpbnQxNigpOwogICAgICAgICAgdGhpcy53aWR0aCA9IFoyIC0gJCwgdGhpcy5oZWlnaHQgPSBpMiAtIGUyLCB0aGlzLmNvbXBvbmVudHNDb3VudCA9IF8sIHRoaXMuYml0c1BlckNvbXBvbmVudCA9IDg7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICB9CiAgICAgIHRocm93IG5ldyBFMSgiTm8gc2l6ZSBtYXJrZXIgZm91bmQgaW4gSlBYIHN0cmVhbSIpOwogICAgfSwKICAgIHBhcnNlQ29kZXN0cmVhbTogZnVuY3Rpb24oYiwgSTIsIFQpIHsKICAgICAgdmFyIEwgPSB7fSwgWjIgPSAhMTsKICAgICAgdHJ5IHsKICAgICAgICBmb3IgKHZhciBpMiA9IEkyOyBpMiArIDEgPCBUOyApIHsKICAgICAgICAgIHZhciAkID0gUTEoYiwgaTIpOwogICAgICAgICAgaTIgKz0gMjsKICAgICAgICAgIHZhciBlMiA9IDAsIF8sIHQyLCBCMiwgVjIsIHkyLCBBMjsKICAgICAgICAgIHN3aXRjaCAoJCkgewogICAgICAgICAgICBjYXNlIDY1MzU5OgogICAgICAgICAgICAgIEwubWFpbkhlYWRlciA9ICEwOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDY1NDk3OgogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDY1MzYxOgogICAgICAgICAgICAgIGUyID0gUTEoYiwgaTIpOwogICAgICAgICAgICAgIHZhciBsMiA9IHt9OwogICAgICAgICAgICAgIGwyLlhzaXogPSBjMShiLCBpMiArIDQpLCBsMi5Zc2l6ID0gYzEoYiwgaTIgKyA4KSwgbDIuWE9zaXogPSBjMShiLCBpMiArIDEyKSwgbDIuWU9zaXogPSBjMShiLCBpMiArIDE2KSwgbDIuWFRzaXogPSBjMShiLCBpMiArIDIwKSwgbDIuWVRzaXogPSBjMShiLCBpMiArIDI0KSwgbDIuWFRPc2l6ID0gYzEoYiwgaTIgKyAyOCksIGwyLllUT3NpeiA9IGMxKGIsIGkyICsgMzIpOwogICAgICAgICAgICAgIHZhciBhMiA9IFExKGIsIGkyICsgMzYpOwogICAgICAgICAgICAgIGwyLkNzaXogPSBhMjsKICAgICAgICAgICAgICB2YXIgSjIgPSBbXTsKICAgICAgICAgICAgICBfID0gaTIgKyAzODsKICAgICAgICAgICAgICBmb3IgKHZhciBqMiA9IDA7IGoyIDwgYTI7IGoyKyspIHsKICAgICAgICAgICAgICAgIHZhciBLMiA9IHsKICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uOiAoYltfXSAmIDEyNykgKyAxLAogICAgICAgICAgICAgICAgICBpc1NpZ25lZDogISEoYltfXSAmIDEyOCksCiAgICAgICAgICAgICAgICAgIFhSc2l6OiBiW18gKyAxXSwKICAgICAgICAgICAgICAgICAgWVJzaXo6IGJbXyArIDJdCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgXyArPSAzLCBsMChLMiwgbDIpLCBKMi5wdXNoKEsyKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgTC5TSVogPSBsMiwgTC5jb21wb25lbnRzID0gSjIsIEIwKEwsIEoyKSwgTC5RQ0MgPSBbXSwgTC5DT0MgPSBbXTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSA2NTM3MjoKICAgICAgICAgICAgICBlMiA9IFExKGIsIGkyKTsKICAgICAgICAgICAgICB2YXIgYjIgPSB7fTsKICAgICAgICAgICAgICBzd2l0Y2ggKF8gPSBpMiArIDIsIHQyID0gYltfKytdLCB0MiAmIDMxKSB7CiAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgIFYyID0gOCwgeTIgPSAhMDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgIFYyID0gMTYsIHkyID0gITE7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgICAgICBWMiA9IDE2LCB5MiA9ICEwOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBTUWNkIHZhbHVlICIgKyB0Mik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGZvciAoYjIubm9RdWFudGl6YXRpb24gPSBWMiA9PT0gOCwgYjIuc2NhbGFyRXhwb3VuZGVkID0geTIsIGIyLmd1YXJkQml0cyA9IHQyID4+IDUsIEIyID0gW107IF8gPCBlMiArIGkyOyApIHsKICAgICAgICAgICAgICAgIHZhciBUMiA9IHt9OwogICAgICAgICAgICAgICAgVjIgPT09IDggPyAoVDIuZXBzaWxvbiA9IGJbXysrXSA+PiAzLCBUMi5tdSA9IDApIDogKFQyLmVwc2lsb24gPSBiW19dID4+IDMsIFQyLm11ID0gKGJbX10gJiA3KSA8PCA4IHwgYltfICsgMV0sIF8gKz0gMiksIEIyLnB1c2goVDIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBiMi5TUHFjZHMgPSBCMiwgTC5tYWluSGVhZGVyID8gTC5RQ0QgPSBiMiA6IChMLmN1cnJlbnRUaWxlLlFDRCA9IGIyLCBMLmN1cnJlbnRUaWxlLlFDQyA9IFtdKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSA2NTM3MzoKICAgICAgICAgICAgICBlMiA9IFExKGIsIGkyKTsKICAgICAgICAgICAgICB2YXIgdzAgPSB7fTsKICAgICAgICAgICAgICBfID0gaTIgKyAyOwogICAgICAgICAgICAgIHZhciAkMjsKICAgICAgICAgICAgICBzd2l0Y2ggKEwuU0laLkNzaXogPCAyNTcgPyAkMiA9IGJbXysrXSA6ICgkMiA9IFExKGIsIF8pLCBfICs9IDIpLCB0MiA9IGJbXysrXSwgdDIgJiAzMSkgewogICAgICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAgICBWMiA9IDgsIHkyID0gITA7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgICBWMiA9IDE2LCB5MiA9ICExOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICAgICAgVjIgPSAxNiwgeTIgPSAhMDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgU1FjZCB2YWx1ZSAiICsgdDIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBmb3IgKHcwLm5vUXVhbnRpemF0aW9uID0gVjIgPT09IDgsIHcwLnNjYWxhckV4cG91bmRlZCA9IHkyLCB3MC5ndWFyZEJpdHMgPSB0MiA+PiA1LCBCMiA9IFtdOyBfIDwgZTIgKyBpMjsgKQogICAgICAgICAgICAgICAgVDIgPSB7fSwgVjIgPT09IDggPyAoVDIuZXBzaWxvbiA9IGJbXysrXSA+PiAzLCBUMi5tdSA9IDApIDogKFQyLmVwc2lsb24gPSBiW19dID4+IDMsIFQyLm11ID0gKGJbX10gJiA3KSA8PCA4IHwgYltfICsgMV0sIF8gKz0gMiksIEIyLnB1c2goVDIpOwogICAgICAgICAgICAgIHcwLlNQcWNkcyA9IEIyLCBMLm1haW5IZWFkZXIgPyBMLlFDQ1skMl0gPSB3MCA6IEwuY3VycmVudFRpbGUuUUNDWyQyXSA9IHcwOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDY1MzYyOgogICAgICAgICAgICAgIGUyID0gUTEoYiwgaTIpOwogICAgICAgICAgICAgIHZhciBIMiA9IHt9OwogICAgICAgICAgICAgIF8gPSBpMiArIDI7CiAgICAgICAgICAgICAgdmFyIEYwID0gYltfKytdOwogICAgICAgICAgICAgIEgyLmVudHJvcHlDb2RlcldpdGhDdXN0b21QcmVjaW5jdHMgPSAhIShGMCAmIDEpLCBIMi5zb3BNYXJrZXJVc2VkID0gISEoRjAgJiAyKSwgSDIuZXBoTWFya2VyVXNlZCA9ICEhKEYwICYgNCksIEgyLnByb2dyZXNzaW9uT3JkZXIgPSBiW18rK10sIEgyLmxheWVyc0NvdW50ID0gUTEoYiwgXyksIF8gKz0gMiwgSDIubXVsdGlwbGVDb21wb25lbnRUcmFuc2Zvcm0gPSBiW18rK10sIEgyLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudCA9IGJbXysrXSwgSDIueGNiID0gKGJbXysrXSAmIDE1KSArIDIsIEgyLnljYiA9IChiW18rK10gJiAxNSkgKyAyOwogICAgICAgICAgICAgIHZhciBtMCA9IGJbXysrXTsKICAgICAgICAgICAgICBpZiAoSDIuc2VsZWN0aXZlQXJpdGhtZXRpY0NvZGluZ0J5cGFzcyA9ICEhKG0wICYgMSksIEgyLnJlc2V0Q29udGV4dFByb2JhYmlsaXRpZXMgPSAhIShtMCAmIDIpLCBIMi50ZXJtaW5hdGlvbk9uRWFjaENvZGluZ1Bhc3MgPSAhIShtMCAmIDQpLCBIMi52ZXJ0aWNhbGx5U3RyaXBlID0gISEobTAgJiA4KSwgSDIucHJlZGljdGFibGVUZXJtaW5hdGlvbiA9ICEhKG0wICYgMTYpLCBIMi5zZWdtZW50YXRpb25TeW1ib2xVc2VkID0gISEobTAgJiAzMiksIEgyLnJldmVyc2libGVUcmFuc2Zvcm1hdGlvbiA9IGJbXysrXSwgSDIuZW50cm9weUNvZGVyV2l0aEN1c3RvbVByZWNpbmN0cykgewogICAgICAgICAgICAgICAgZm9yICh2YXIgUzAgPSBbXTsgXyA8IGUyICsgaTI7ICkgewogICAgICAgICAgICAgICAgICB2YXIgdjAgPSBiW18rK107CiAgICAgICAgICAgICAgICAgIFMwLnB1c2goewogICAgICAgICAgICAgICAgICAgIFBQeDogdjAgJiAxNSwKICAgICAgICAgICAgICAgICAgICBQUHk6IHYwID4+IDQKICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBIMi5wcmVjaW5jdHNTaXplcyA9IFMwOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB2YXIgRDAgPSBbXTsKICAgICAgICAgICAgICBIMi5zZWxlY3RpdmVBcml0aG1ldGljQ29kaW5nQnlwYXNzICYmIEQwLnB1c2goInNlbGVjdGl2ZUFyaXRobWV0aWNDb2RpbmdCeXBhc3MiKSwgSDIucmVzZXRDb250ZXh0UHJvYmFiaWxpdGllcyAmJiBEMC5wdXNoKCJyZXNldENvbnRleHRQcm9iYWJpbGl0aWVzIiksIEgyLnRlcm1pbmF0aW9uT25FYWNoQ29kaW5nUGFzcyAmJiBEMC5wdXNoKCJ0ZXJtaW5hdGlvbk9uRWFjaENvZGluZ1Bhc3MiKSwgSDIudmVydGljYWxseVN0cmlwZSAmJiBEMC5wdXNoKCJ2ZXJ0aWNhbGx5U3RyaXBlIiksIEgyLnByZWRpY3RhYmxlVGVybWluYXRpb24gJiYgRDAucHVzaCgicHJlZGljdGFibGVUZXJtaW5hdGlvbiIpLCBEMC5sZW5ndGggPiAwICYmIChaMiA9ICEwLCBKZSgKICAgICAgICAgICAgICAgIGBKUFg6IFVuc3VwcG9ydGVkIENPRCBvcHRpb25zICgke0QwLmpvaW4oIiwgIil9KS5gCiAgICAgICAgICAgICAgKSksIEwubWFpbkhlYWRlciA/IEwuQ09EID0gSDIgOiAoTC5jdXJyZW50VGlsZS5DT0QgPSBIMiwgTC5jdXJyZW50VGlsZS5DT0MgPSBbXSk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgNjU0MjQ6CiAgICAgICAgICAgICAgZTIgPSBRMShiLCBpMiksIEEyID0ge30sIEEyLmluZGV4ID0gUTEoYiwgaTIgKyAyKSwgQTIubGVuZ3RoID0gYzEoYiwgaTIgKyA0KSwgQTIuZGF0YUVuZCA9IEEyLmxlbmd0aCArIGkyIC0gMiwgQTIucGFydEluZGV4ID0gYltpMiArIDhdLCBBMi5wYXJ0c0NvdW50ID0gYltpMiArIDldLCBMLm1haW5IZWFkZXIgPSAhMSwgQTIucGFydEluZGV4ID09PSAwICYmIChBMi5DT0QgPSBMLkNPRCwgQTIuQ09DID0gTC5DT0Muc2xpY2UoMCksIEEyLlFDRCA9IEwuUUNELCBBMi5RQ0MgPSBMLlFDQy5zbGljZSgwKSksIEwuY3VycmVudFRpbGUgPSBBMjsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSA2NTQyNzoKICAgICAgICAgICAgICBBMiA9IEwuY3VycmVudFRpbGUsIEEyLnBhcnRJbmRleCA9PT0gMCAmJiAoTmkoTCwgQTIuaW5kZXgpLCBBMShMKSksIGUyID0gQTIuZGF0YUVuZCAtIGkyLCBTaShMLCBiLCBpMiwgZTIpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDY1MzYzOgogICAgICAgICAgICAgIEplKCJKUFg6IENvZGVzdHJlYW0gY29kZSAweEZGNTMgKENPQykgaXMgbm90IGltcGxlbWVudGVkLiIpOwogICAgICAgICAgICBjYXNlIDY1MzY1OgogICAgICAgICAgICBjYXNlIDY1MzY3OgogICAgICAgICAgICBjYXNlIDY1MzY4OgogICAgICAgICAgICBjYXNlIDY1MzgwOgogICAgICAgICAgICAgIGUyID0gUTEoYiwgaTIpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVW5rbm93biBjb2Rlc3RyZWFtIGNvZGU6ICIgKyAkLnRvU3RyaW5nKDE2KSk7CiAgICAgICAgICB9CiAgICAgICAgICBpMiArPSBlMjsKICAgICAgICB9CiAgICAgIH0gY2F0Y2ggKCQwKSB7CiAgICAgICAgaWYgKFoyIHx8IHRoaXMuZmFpbE9uQ29ycnVwdGVkSW1hZ2UpCiAgICAgICAgICB0aHJvdyBuZXcgRTEoJDAubWVzc2FnZSk7CiAgICAgICAgSmUoYEpQWDogVHJ5aW5nIHRvIHJlY292ZXIgZnJvbTogIiR7JDAubWVzc2FnZX0iLmApOwogICAgICB9CiAgICAgIHRoaXMudGlsZXMgPSBlaShMKSwgdGhpcy53aWR0aCA9IEwuU0laLlhzaXogLSBMLlNJWi5YT3NpeiwgdGhpcy5oZWlnaHQgPSBMLlNJWi5Zc2l6IC0gTC5TSVouWU9zaXosIHRoaXMuY29tcG9uZW50c0NvdW50ID0gTC5TSVouQ3NpejsKICAgIH0KICB9OwogIGZ1bmN0aW9uIGwwKHYyLCBiKSB7CiAgICB2Mi54MCA9IE1hdGguY2VpbChiLlhPc2l6IC8gdjIuWFJzaXopLCB2Mi54MSA9IE1hdGguY2VpbChiLlhzaXogLyB2Mi5YUnNpeiksIHYyLnkwID0gTWF0aC5jZWlsKGIuWU9zaXogLyB2Mi5ZUnNpeiksIHYyLnkxID0gTWF0aC5jZWlsKGIuWXNpeiAvIHYyLllSc2l6KSwgdjIud2lkdGggPSB2Mi54MSAtIHYyLngwLCB2Mi5oZWlnaHQgPSB2Mi55MSAtIHYyLnkwOwogIH0KICBmdW5jdGlvbiBCMCh2MiwgYikgewogICAgZm9yICh2YXIgSTIgPSB2Mi5TSVosIFQsIEwgPSBbXSwgWjIgPSBNYXRoLmNlaWwoKEkyLlhzaXogLSBJMi5YVE9zaXopIC8gSTIuWFRzaXopLCBpMiA9IE1hdGguY2VpbCgoSTIuWXNpeiAtIEkyLllUT3NpeikgLyBJMi5ZVHNpeiksICQgPSAwOyAkIDwgaTI7ICQrKykKICAgICAgZm9yICh2YXIgZTIgPSAwOyBlMiA8IFoyOyBlMisrKQogICAgICAgIFQgPSB7fSwgVC50eDAgPSBNYXRoLm1heChJMi5YVE9zaXogKyBlMiAqIEkyLlhUc2l6LCBJMi5YT3NpeiksIFQudHkwID0gTWF0aC5tYXgoSTIuWVRPc2l6ICsgJCAqIEkyLllUc2l6LCBJMi5ZT3NpeiksIFQudHgxID0gTWF0aC5taW4oSTIuWFRPc2l6ICsgKGUyICsgMSkgKiBJMi5YVHNpeiwgSTIuWHNpeiksIFQudHkxID0gTWF0aC5taW4oSTIuWVRPc2l6ICsgKCQgKyAxKSAqIEkyLllUc2l6LCBJMi5Zc2l6KSwgVC53aWR0aCA9IFQudHgxIC0gVC50eDAsIFQuaGVpZ2h0ID0gVC50eTEgLSBULnR5MCwgVC5jb21wb25lbnRzID0gW10sIEwucHVzaChUKTsKICAgIHYyLnRpbGVzID0gTDsKICAgIGZvciAodmFyIF8gPSBJMi5Dc2l6LCB0MiA9IDAsIEIyID0gXzsgdDIgPCBCMjsgdDIrKykKICAgICAgZm9yICh2YXIgVjIgPSBiW3QyXSwgeTIgPSAwLCBBMiA9IEwubGVuZ3RoOyB5MiA8IEEyOyB5MisrKSB7CiAgICAgICAgdmFyIGwyID0ge307CiAgICAgICAgVCA9IExbeTJdLCBsMi50Y3gwID0gTWF0aC5jZWlsKFQudHgwIC8gVjIuWFJzaXopLCBsMi50Y3kwID0gTWF0aC5jZWlsKFQudHkwIC8gVjIuWVJzaXopLCBsMi50Y3gxID0gTWF0aC5jZWlsKFQudHgxIC8gVjIuWFJzaXopLCBsMi50Y3kxID0gTWF0aC5jZWlsKFQudHkxIC8gVjIuWVJzaXopLCBsMi53aWR0aCA9IGwyLnRjeDEgLSBsMi50Y3gwLCBsMi5oZWlnaHQgPSBsMi50Y3kxIC0gbDIudGN5MCwgVC5jb21wb25lbnRzW3QyXSA9IGwyOwogICAgICB9CiAgfQogIGZ1bmN0aW9uIFowKHYyLCBiLCBJMikgewogICAgdmFyIFQgPSBiLmNvZGluZ1N0eWxlUGFyYW1ldGVycywgTCA9IHt9OwogICAgcmV0dXJuIFQuZW50cm9weUNvZGVyV2l0aEN1c3RvbVByZWNpbmN0cyA/IChMLlBQeCA9IFQucHJlY2luY3RzU2l6ZXNbSTJdLlBQeCwgTC5QUHkgPSBULnByZWNpbmN0c1NpemVzW0kyXS5QUHkpIDogKEwuUFB4ID0gMTUsIEwuUFB5ID0gMTUpLCBMLnhjYl8gPSBJMiA+IDAgPyBNYXRoLm1pbihULnhjYiwgTC5QUHggLSAxKSA6IE1hdGgubWluKFQueGNiLCBMLlBQeCksIEwueWNiXyA9IEkyID4gMCA/IE1hdGgubWluKFQueWNiLCBMLlBQeSAtIDEpIDogTWF0aC5taW4oVC55Y2IsIEwuUFB5KSwgTDsKICB9CiAgZnVuY3Rpb24gczAodjIsIGIsIEkyKSB7CiAgICB2YXIgVCA9IDEgPDwgSTIuUFB4LCBMID0gMSA8PCBJMi5QUHksIFoyID0gYi5yZXNMZXZlbCA9PT0gMCwgaTIgPSAxIDw8IEkyLlBQeCArIChaMiA/IDAgOiAtMSksICQgPSAxIDw8IEkyLlBQeSArIChaMiA/IDAgOiAtMSksIGUyID0gYi50cngxID4gYi50cngwID8gTWF0aC5jZWlsKGIudHJ4MSAvIFQpIC0gTWF0aC5mbG9vcihiLnRyeDAgLyBUKSA6IDAsIF8gPSBiLnRyeTEgPiBiLnRyeTAgPyBNYXRoLmNlaWwoYi50cnkxIC8gTCkgLSBNYXRoLmZsb29yKGIudHJ5MCAvIEwpIDogMCwgdDIgPSBlMiAqIF87CiAgICBiLnByZWNpbmN0UGFyYW1ldGVycyA9IHsKICAgICAgcHJlY2luY3RXaWR0aDogVCwKICAgICAgcHJlY2luY3RIZWlnaHQ6IEwsCiAgICAgIG51bXByZWNpbmN0c3dpZGU6IGUyLAogICAgICBudW1wcmVjaW5jdHNoaWdoOiBfLAogICAgICBudW1wcmVjaW5jdHM6IHQyLAogICAgICBwcmVjaW5jdFdpZHRoSW5TdWJiYW5kOiBpMiwKICAgICAgcHJlY2luY3RIZWlnaHRJblN1YmJhbmQ6ICQKICAgIH07CiAgfQogIGZ1bmN0aW9uIEMyKHYyLCBiLCBJMikgewogICAgdmFyIFQgPSBJMi54Y2JfLCBMID0gSTIueWNiXywgWjIgPSAxIDw8IFQsIGkyID0gMSA8PCBMLCAkID0gYi50YngwID4+IFQsIGUyID0gYi50YnkwID4+IEwsIF8gPSBiLnRieDEgKyBaMiAtIDEgPj4gVCwgdDIgPSBiLnRieTEgKyBpMiAtIDEgPj4gTCwgQjIgPSBiLnJlc29sdXRpb24ucHJlY2luY3RQYXJhbWV0ZXJzLCBWMiA9IFtdLCB5MiA9IFtdLCBBMiwgbDIsIGEyLCBKMjsKICAgIGZvciAobDIgPSBlMjsgbDIgPCB0MjsgbDIrKykKICAgICAgZm9yIChBMiA9ICQ7IEEyIDwgXzsgQTIrKykgewogICAgICAgIGEyID0gewogICAgICAgICAgY2J4OiBBMiwKICAgICAgICAgIGNieTogbDIsCiAgICAgICAgICB0YngwOiBaMiAqIEEyLAogICAgICAgICAgdGJ5MDogaTIgKiBsMiwKICAgICAgICAgIHRieDE6IFoyICogKEEyICsgMSksCiAgICAgICAgICB0YnkxOiBpMiAqIChsMiArIDEpCiAgICAgICAgfSwgYTIudGJ4MF8gPSBNYXRoLm1heChiLnRieDAsIGEyLnRieDApLCBhMi50YnkwXyA9IE1hdGgubWF4KGIudGJ5MCwgYTIudGJ5MCksIGEyLnRieDFfID0gTWF0aC5taW4oYi50YngxLCBhMi50YngxKSwgYTIudGJ5MV8gPSBNYXRoLm1pbihiLnRieTEsIGEyLnRieTEpOwogICAgICAgIHZhciBqMiA9IE1hdGguZmxvb3IoCiAgICAgICAgICAoYTIudGJ4MF8gLSBiLnRieDApIC8gQjIucHJlY2luY3RXaWR0aEluU3ViYmFuZAogICAgICAgICksIEsyID0gTWF0aC5mbG9vcigKICAgICAgICAgIChhMi50YnkwXyAtIGIudGJ5MCkgLyBCMi5wcmVjaW5jdEhlaWdodEluU3ViYmFuZAogICAgICAgICk7CiAgICAgICAgaWYgKEoyID0gajIgKyBLMiAqIEIyLm51bXByZWNpbmN0c3dpZGUsIGEyLnByZWNpbmN0TnVtYmVyID0gSjIsIGEyLnN1YmJhbmRUeXBlID0gYi50eXBlLCBhMi5MYmxvY2sgPSAzLCAhKGEyLnRieDFfIDw9IGEyLnRieDBfIHx8IGEyLnRieTFfIDw9IGEyLnRieTBfKSkgewogICAgICAgICAgVjIucHVzaChhMik7CiAgICAgICAgICB2YXIgYjIgPSB5MltKMl07CiAgICAgICAgICBiMiAhPT0gdm9pZCAwID8gKEEyIDwgYjIuY2J4TWluID8gYjIuY2J4TWluID0gQTIgOiBBMiA+IGIyLmNieE1heCAmJiAoYjIuY2J4TWF4ID0gQTIpLCBsMiA8IGIyLmNieU1pbiA/IGIyLmNieE1pbiA9IGwyIDogbDIgPiBiMi5jYnlNYXggJiYgKGIyLmNieU1heCA9IGwyKSkgOiB5MltKMl0gPSBiMiA9IHsKICAgICAgICAgICAgY2J4TWluOiBBMiwKICAgICAgICAgICAgY2J5TWluOiBsMiwKICAgICAgICAgICAgY2J4TWF4OiBBMiwKICAgICAgICAgICAgY2J5TWF4OiBsMgogICAgICAgICAgfSwgYTIucHJlY2luY3QgPSBiMjsKICAgICAgICB9CiAgICAgIH0KICAgIGIuY29kZWJsb2NrUGFyYW1ldGVycyA9IHsKICAgICAgY29kZWJsb2NrV2lkdGg6IFQsCiAgICAgIGNvZGVibG9ja0hlaWdodDogTCwKICAgICAgbnVtY29kZWJsb2Nrd2lkZTogXyAtICQgKyAxLAogICAgICBudW1jb2RlYmxvY2toaWdoOiB0MiAtIGUyICsgMQogICAgfSwgYi5jb2RlYmxvY2tzID0gVjIsIGIucHJlY2luY3RzID0geTI7CiAgfQogIGZ1bmN0aW9uIFEwKHYyLCBiLCBJMikgewogICAgZm9yICh2YXIgVCA9IFtdLCBMID0gdjIuc3ViYmFuZHMsIFoyID0gMCwgaTIgPSBMLmxlbmd0aDsgWjIgPCBpMjsgWjIrKykKICAgICAgZm9yICh2YXIgJCA9IExbWjJdLCBlMiA9ICQuY29kZWJsb2NrcywgXyA9IDAsIHQyID0gZTIubGVuZ3RoOyBfIDwgdDI7IF8rKykgewogICAgICAgIHZhciBCMiA9IGUyW19dOwogICAgICAgIEIyLnByZWNpbmN0TnVtYmVyID09PSBiICYmIFQucHVzaChCMik7CiAgICAgIH0KICAgIHJldHVybiB7CiAgICAgIGxheWVyTnVtYmVyOiBJMiwKICAgICAgY29kZWJsb2NrczogVAogICAgfTsKICB9CiAgZnVuY3Rpb24gVjEodjIpIHsKICAgIGZvciAodmFyIGIgPSB2Mi5TSVosIEkyID0gdjIuY3VycmVudFRpbGUuaW5kZXgsIFQgPSB2Mi50aWxlc1tJMl0sIEwgPSBULmNvZGluZ1N0eWxlRGVmYXVsdFBhcmFtZXRlcnMubGF5ZXJzQ291bnQsIFoyID0gYi5Dc2l6LCBpMiA9IDAsICQgPSAwOyAkIDwgWjI7ICQrKykKICAgICAgaTIgPSBNYXRoLm1heCgKICAgICAgICBpMiwKICAgICAgICBULmNvbXBvbmVudHNbJF0uY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudAogICAgICApOwogICAgdmFyIGUyID0gMCwgXyA9IDAsIHQyID0gMCwgQjIgPSAwOwogICAgdGhpcy5uZXh0UGFja2V0ID0gZnVuY3Rpb24oKSB7CiAgICAgIGZvciAoOyBlMiA8IEw7IGUyKyspIHsKICAgICAgICBmb3IgKDsgXyA8PSBpMjsgXysrKSB7CiAgICAgICAgICBmb3IgKDsgdDIgPCBaMjsgdDIrKykgewogICAgICAgICAgICB2YXIgeTIgPSBULmNvbXBvbmVudHNbdDJdOwogICAgICAgICAgICBpZiAoIShfID4geTIuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudCkpIHsKICAgICAgICAgICAgICBmb3IgKHZhciBBMiA9IHkyLnJlc29sdXRpb25zW19dLCBsMiA9IEEyLnByZWNpbmN0UGFyYW1ldGVycy5udW1wcmVjaW5jdHM7IEIyIDwgbDI7ICkgewogICAgICAgICAgICAgICAgdmFyIGEyID0gUTAoQTIsIEIyLCBlMik7CiAgICAgICAgICAgICAgICByZXR1cm4gQjIrKywgYTI7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIEIyID0gMDsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgdDIgPSAwOwogICAgICAgIH0KICAgICAgICBfID0gMDsKICAgICAgfQogICAgICB0aHJvdyBuZXcgRTEoIk91dCBvZiBwYWNrZXRzIik7CiAgICB9OwogIH0KICBmdW5jdGlvbiBpZSh2MikgewogICAgZm9yICh2YXIgYiA9IHYyLlNJWiwgSTIgPSB2Mi5jdXJyZW50VGlsZS5pbmRleCwgVCA9IHYyLnRpbGVzW0kyXSwgTCA9IFQuY29kaW5nU3R5bGVEZWZhdWx0UGFyYW1ldGVycy5sYXllcnNDb3VudCwgWjIgPSBiLkNzaXosIGkyID0gMCwgJCA9IDA7ICQgPCBaMjsgJCsrKQogICAgICBpMiA9IE1hdGgubWF4KAogICAgICAgIGkyLAogICAgICAgIFQuY29tcG9uZW50c1skXS5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50CiAgICAgICk7CiAgICB2YXIgZTIgPSAwLCBfID0gMCwgdDIgPSAwLCBCMiA9IDA7CiAgICB0aGlzLm5leHRQYWNrZXQgPSBmdW5jdGlvbigpIHsKICAgICAgZm9yICg7IGUyIDw9IGkyOyBlMisrKSB7CiAgICAgICAgZm9yICg7IF8gPCBMOyBfKyspIHsKICAgICAgICAgIGZvciAoOyB0MiA8IFoyOyB0MisrKSB7CiAgICAgICAgICAgIHZhciB5MiA9IFQuY29tcG9uZW50c1t0Ml07CiAgICAgICAgICAgIGlmICghKGUyID4geTIuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudCkpIHsKICAgICAgICAgICAgICBmb3IgKHZhciBBMiA9IHkyLnJlc29sdXRpb25zW2UyXSwgbDIgPSBBMi5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3RzOyBCMiA8IGwyOyApIHsKICAgICAgICAgICAgICAgIHZhciBhMiA9IFEwKEEyLCBCMiwgXyk7CiAgICAgICAgICAgICAgICByZXR1cm4gQjIrKywgYTI7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIEIyID0gMDsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgdDIgPSAwOwogICAgICAgIH0KICAgICAgICBfID0gMDsKICAgICAgfQogICAgICB0aHJvdyBuZXcgRTEoIk91dCBvZiBwYWNrZXRzIik7CiAgICB9OwogIH0KICBmdW5jdGlvbiBYMSh2MikgewogICAgdmFyIGIgPSB2Mi5TSVosIEkyID0gdjIuY3VycmVudFRpbGUuaW5kZXgsIFQgPSB2Mi50aWxlc1tJMl0sIEwgPSBULmNvZGluZ1N0eWxlRGVmYXVsdFBhcmFtZXRlcnMubGF5ZXJzQ291bnQsIFoyID0gYi5Dc2l6LCBpMiwgJCwgZTIsIF8sIHQyID0gMDsKICAgIGZvciAoZTIgPSAwOyBlMiA8IFoyOyBlMisrKSB7CiAgICAgIGNvbnN0IEEyID0gVC5jb21wb25lbnRzW2UyXTsKICAgICAgdDIgPSBNYXRoLm1heCgKICAgICAgICB0MiwKICAgICAgICBBMi5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50CiAgICAgICk7CiAgICB9CiAgICB2YXIgQjIgPSBuZXcgSW50MzJBcnJheSgKICAgICAgdDIgKyAxCiAgICApOwogICAgZm9yICgkID0gMDsgJCA8PSB0MjsgKyskKSB7CiAgICAgIHZhciBWMiA9IDA7CiAgICAgIGZvciAoZTIgPSAwOyBlMiA8IFoyOyArK2UyKSB7CiAgICAgICAgdmFyIHkyID0gVC5jb21wb25lbnRzW2UyXS5yZXNvbHV0aW9uczsKICAgICAgICAkIDwgeTIubGVuZ3RoICYmIChWMiA9IE1hdGgubWF4KAogICAgICAgICAgVjIsCiAgICAgICAgICB5MlskXS5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3RzCiAgICAgICAgKSk7CiAgICAgIH0KICAgICAgQjJbJF0gPSBWMjsKICAgIH0KICAgIGkyID0gMCwgJCA9IDAsIGUyID0gMCwgXyA9IDAsIHRoaXMubmV4dFBhY2tldCA9IGZ1bmN0aW9uKCkgewogICAgICBmb3IgKDsgJCA8PSB0MjsgJCsrKSB7CiAgICAgICAgZm9yICg7IF8gPCBCMlskXTsgXysrKSB7CiAgICAgICAgICBmb3IgKDsgZTIgPCBaMjsgZTIrKykgewogICAgICAgICAgICBjb25zdCBqMiA9IFQuY29tcG9uZW50c1tlMl07CiAgICAgICAgICAgIGlmICghKCQgPiBqMi5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50KSkgewogICAgICAgICAgICAgIHZhciBsMiA9IGoyLnJlc29sdXRpb25zWyRdLCBhMiA9IGwyLnByZWNpbmN0UGFyYW1ldGVycy5udW1wcmVjaW5jdHM7CiAgICAgICAgICAgICAgaWYgKCEoXyA+PSBhMikpIHsKICAgICAgICAgICAgICAgIGZvciAoOyBpMiA8IEw7ICkgewogICAgICAgICAgICAgICAgICB2YXIgSjIgPSBRMChsMiwgXywgaTIpOwogICAgICAgICAgICAgICAgICByZXR1cm4gaTIrKywgSjI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpMiA9IDA7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBlMiA9IDA7CiAgICAgICAgfQogICAgICAgIF8gPSAwOwogICAgICB9CiAgICAgIHRocm93IG5ldyBFMSgiT3V0IG9mIHBhY2tldHMiKTsKICAgIH07CiAgfQogIGZ1bmN0aW9uIHUxKHYyKSB7CiAgICB2YXIgYiA9IHYyLlNJWiwgSTIgPSB2Mi5jdXJyZW50VGlsZS5pbmRleCwgVCA9IHYyLnRpbGVzW0kyXSwgTCA9IFQuY29kaW5nU3R5bGVEZWZhdWx0UGFyYW1ldGVycy5sYXllcnNDb3VudCwgWjIgPSBiLkNzaXosIGkyID0gUjAoVCksICQgPSBpMiwgZTIgPSAwLCBfID0gMCwgdDIgPSAwLCBCMiA9IDAsIFYyID0gMDsKICAgIHRoaXMubmV4dFBhY2tldCA9IGZ1bmN0aW9uKCkgewogICAgICBmb3IgKDsgVjIgPCAkLm1heE51bUhpZ2g7IFYyKyspIHsKICAgICAgICBmb3IgKDsgQjIgPCAkLm1heE51bVdpZGU7IEIyKyspIHsKICAgICAgICAgIGZvciAoOyB0MiA8IFoyOyB0MisrKSB7CiAgICAgICAgICAgIGZvciAodmFyIEEyID0gVC5jb21wb25lbnRzW3QyXSwgbDIgPSBBMi5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50OyBfIDw9IGwyOyBfKyspIHsKICAgICAgICAgICAgICB2YXIgYTIgPSBBMi5yZXNvbHV0aW9uc1tfXSwgSjIgPSBpMi5jb21wb25lbnRzW3QyXS5yZXNvbHV0aW9uc1tfXSwgajIgPSBYMCgKICAgICAgICAgICAgICAgIEIyLAogICAgICAgICAgICAgICAgVjIsCiAgICAgICAgICAgICAgICBKMiwKICAgICAgICAgICAgICAgICQsCiAgICAgICAgICAgICAgICBhMgogICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgaWYgKGoyICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICBmb3IgKDsgZTIgPCBMOyApIHsKICAgICAgICAgICAgICAgICAgdmFyIEsyID0gUTAoYTIsIGoyLCBlMik7CiAgICAgICAgICAgICAgICAgIHJldHVybiBlMisrLCBLMjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGUyID0gMDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgXyA9IDA7CiAgICAgICAgICB9CiAgICAgICAgICB0MiA9IDA7CiAgICAgICAgfQogICAgICAgIEIyID0gMDsKICAgICAgfQogICAgICB0aHJvdyBuZXcgRTEoIk91dCBvZiBwYWNrZXRzIik7CiAgICB9OwogIH0KICBmdW5jdGlvbiBLMCh2MikgewogICAgdmFyIGIgPSB2Mi5TSVosIEkyID0gdjIuY3VycmVudFRpbGUuaW5kZXgsIFQgPSB2Mi50aWxlc1tJMl0sIEwgPSBULmNvZGluZ1N0eWxlRGVmYXVsdFBhcmFtZXRlcnMubGF5ZXJzQ291bnQsIFoyID0gYi5Dc2l6LCBpMiA9IFIwKFQpLCAkID0gMCwgZTIgPSAwLCBfID0gMCwgdDIgPSAwLCBCMiA9IDA7CiAgICB0aGlzLm5leHRQYWNrZXQgPSBmdW5jdGlvbigpIHsKICAgICAgZm9yICg7IF8gPCBaMjsgKytfKSB7CiAgICAgICAgZm9yICh2YXIgeTIgPSBULmNvbXBvbmVudHNbX10sIEEyID0gaTIuY29tcG9uZW50c1tfXSwgbDIgPSB5Mi5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50OyBCMiA8IEEyLm1heE51bUhpZ2g7IEIyKyspIHsKICAgICAgICAgIGZvciAoOyB0MiA8IEEyLm1heE51bVdpZGU7IHQyKyspIHsKICAgICAgICAgICAgZm9yICg7IGUyIDw9IGwyOyBlMisrKSB7CiAgICAgICAgICAgICAgdmFyIGEyID0geTIucmVzb2x1dGlvbnNbZTJdLCBKMiA9IEEyLnJlc29sdXRpb25zW2UyXSwgajIgPSBYMCgKICAgICAgICAgICAgICAgIHQyLAogICAgICAgICAgICAgICAgQjIsCiAgICAgICAgICAgICAgICBKMiwKICAgICAgICAgICAgICAgIEEyLAogICAgICAgICAgICAgICAgYTIKICAgICAgICAgICAgICApOwogICAgICAgICAgICAgIGlmIChqMiAhPT0gbnVsbCkgewogICAgICAgICAgICAgICAgZm9yICg7ICQgPCBMOyApIHsKICAgICAgICAgICAgICAgICAgdmFyIEsyID0gUTAoYTIsIGoyLCAkKTsKICAgICAgICAgICAgICAgICAgcmV0dXJuICQrKywgSzI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkID0gMDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZTIgPSAwOwogICAgICAgICAgfQogICAgICAgICAgdDIgPSAwOwogICAgICAgIH0KICAgICAgICBCMiA9IDA7CiAgICAgIH0KICAgICAgdGhyb3cgbmV3IEUxKCJPdXQgb2YgcGFja2V0cyIpOwogICAgfTsKICB9CiAgZnVuY3Rpb24gWDAodjIsIGIsIEkyLCBULCBMKSB7CiAgICB2YXIgWjIgPSB2MiAqIFQubWluV2lkdGgsIGkyID0gYiAqIFQubWluSGVpZ2h0OwogICAgaWYgKFoyICUgSTIud2lkdGggIT09IDAgfHwgaTIgJSBJMi5oZWlnaHQgIT09IDApCiAgICAgIHJldHVybiBudWxsOwogICAgdmFyICQgPSBpMiAvIEkyLndpZHRoICogTC5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3Rzd2lkZTsKICAgIHJldHVybiBaMiAvIEkyLmhlaWdodCArICQ7CiAgfQogIGZ1bmN0aW9uIFIwKHYyKSB7CiAgICBmb3IgKHZhciBiID0gdjIuY29tcG9uZW50cy5sZW5ndGgsIEkyID0gTnVtYmVyLk1BWF9WQUxVRSwgVCA9IE51bWJlci5NQVhfVkFMVUUsIEwgPSAwLCBaMiA9IDAsIGkyID0gbmV3IEFycmF5KGIpLCAkID0gMDsgJCA8IGI7ICQrKykgewogICAgICBmb3IgKHZhciBlMiA9IHYyLmNvbXBvbmVudHNbJF0sIF8gPSBlMi5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50LCB0MiA9IG5ldyBBcnJheShfICsgMSksIEIyID0gTnVtYmVyLk1BWF9WQUxVRSwgVjIgPSBOdW1iZXIuTUFYX1ZBTFVFLCB5MiA9IDAsIEEyID0gMCwgbDIgPSAxLCBhMiA9IF87IGEyID49IDA7IC0tYTIpIHsKICAgICAgICB2YXIgSjIgPSBlMi5yZXNvbHV0aW9uc1thMl0sIGoyID0gbDIgKiBKMi5wcmVjaW5jdFBhcmFtZXRlcnMucHJlY2luY3RXaWR0aCwgSzIgPSBsMiAqIEoyLnByZWNpbmN0UGFyYW1ldGVycy5wcmVjaW5jdEhlaWdodDsKICAgICAgICBCMiA9IE1hdGgubWluKAogICAgICAgICAgQjIsCiAgICAgICAgICBqMgogICAgICAgICksIFYyID0gTWF0aC5taW4oCiAgICAgICAgICBWMiwKICAgICAgICAgIEsyCiAgICAgICAgKSwgeTIgPSBNYXRoLm1heCgKICAgICAgICAgIHkyLAogICAgICAgICAgSjIucHJlY2luY3RQYXJhbWV0ZXJzLm51bXByZWNpbmN0c3dpZGUKICAgICAgICApLCBBMiA9IE1hdGgubWF4KAogICAgICAgICAgQTIsCiAgICAgICAgICBKMi5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3RzaGlnaAogICAgICAgICksIHQyW2EyXSA9IHsKICAgICAgICAgIHdpZHRoOiBqMiwKICAgICAgICAgIGhlaWdodDogSzIKICAgICAgICB9LCBsMiA8PD0gMTsKICAgICAgfQogICAgICBJMiA9IE1hdGgubWluKEkyLCBCMiksIFQgPSBNYXRoLm1pbihULCBWMiksIEwgPSBNYXRoLm1heChMLCB5MiksIFoyID0gTWF0aC5tYXgoWjIsIEEyKSwgaTJbJF0gPSB7CiAgICAgICAgcmVzb2x1dGlvbnM6IHQyLAogICAgICAgIG1pbldpZHRoOiBCMiwKICAgICAgICBtaW5IZWlnaHQ6IFYyLAogICAgICAgIG1heE51bVdpZGU6IHkyLAogICAgICAgIG1heE51bUhpZ2g6IEEyCiAgICAgIH07CiAgICB9CiAgICByZXR1cm4gewogICAgICBjb21wb25lbnRzOiBpMiwKICAgICAgbWluV2lkdGg6IEkyLAogICAgICBtaW5IZWlnaHQ6IFQsCiAgICAgIG1heE51bVdpZGU6IEwsCiAgICAgIG1heE51bUhpZ2g6IFoyCiAgICB9OwogIH0KICBmdW5jdGlvbiBBMSh2MikgewogICAgZm9yICh2YXIgYiA9IHYyLlNJWiwgSTIgPSB2Mi5jdXJyZW50VGlsZS5pbmRleCwgVCA9IHYyLnRpbGVzW0kyXSwgTCA9IGIuQ3NpeiwgWjIgPSAwOyBaMiA8IEw7IFoyKyspIHsKICAgICAgZm9yICh2YXIgaTIgPSBULmNvbXBvbmVudHNbWjJdLCAkID0gaTIuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudCwgZTIgPSBbXSwgXyA9IFtdLCB0MiA9IDA7IHQyIDw9ICQ7IHQyKyspIHsKICAgICAgICB2YXIgQjIgPSBaMCh2MiwgaTIsIHQyKSwgVjIgPSB7fSwgeTIgPSAxIDw8ICQgLSB0MjsKICAgICAgICBWMi50cngwID0gTWF0aC5jZWlsKGkyLnRjeDAgLyB5MiksIFYyLnRyeTAgPSBNYXRoLmNlaWwoaTIudGN5MCAvIHkyKSwgVjIudHJ4MSA9IE1hdGguY2VpbChpMi50Y3gxIC8geTIpLCBWMi50cnkxID0gTWF0aC5jZWlsKGkyLnRjeTEgLyB5MiksIFYyLnJlc0xldmVsID0gdDIsIHMwKHYyLCBWMiwgQjIpLCBlMi5wdXNoKFYyKTsKICAgICAgICB2YXIgQTI7CiAgICAgICAgaWYgKHQyID09PSAwKQogICAgICAgICAgQTIgPSB7fSwgQTIudHlwZSA9ICJMTCIsIEEyLnRieDAgPSBNYXRoLmNlaWwoaTIudGN4MCAvIHkyKSwgQTIudGJ5MCA9IE1hdGguY2VpbChpMi50Y3kwIC8geTIpLCBBMi50YngxID0gTWF0aC5jZWlsKGkyLnRjeDEgLyB5MiksIEEyLnRieTEgPSBNYXRoLmNlaWwoaTIudGN5MSAvIHkyKSwgQTIucmVzb2x1dGlvbiA9IFYyLCBDMih2MiwgQTIsIEIyKSwgXy5wdXNoKEEyKSwgVjIuc3ViYmFuZHMgPSBbQTJdOwogICAgICAgIGVsc2UgewogICAgICAgICAgdmFyIGwyID0gMSA8PCAkIC0gdDIgKyAxLCBhMiA9IFtdOwogICAgICAgICAgQTIgPSB7fSwgQTIudHlwZSA9ICJITCIsIEEyLnRieDAgPSBNYXRoLmNlaWwoaTIudGN4MCAvIGwyIC0gMC41KSwgQTIudGJ5MCA9IE1hdGguY2VpbChpMi50Y3kwIC8gbDIpLCBBMi50YngxID0gTWF0aC5jZWlsKGkyLnRjeDEgLyBsMiAtIDAuNSksIEEyLnRieTEgPSBNYXRoLmNlaWwoaTIudGN5MSAvIGwyKSwgQTIucmVzb2x1dGlvbiA9IFYyLCBDMih2MiwgQTIsIEIyKSwgXy5wdXNoKEEyKSwgYTIucHVzaChBMiksIEEyID0ge30sIEEyLnR5cGUgPSAiTEgiLCBBMi50YngwID0gTWF0aC5jZWlsKGkyLnRjeDAgLyBsMiksIEEyLnRieTAgPSBNYXRoLmNlaWwoaTIudGN5MCAvIGwyIC0gMC41KSwgQTIudGJ4MSA9IE1hdGguY2VpbChpMi50Y3gxIC8gbDIpLCBBMi50YnkxID0gTWF0aC5jZWlsKGkyLnRjeTEgLyBsMiAtIDAuNSksIEEyLnJlc29sdXRpb24gPSBWMiwgQzIodjIsIEEyLCBCMiksIF8ucHVzaChBMiksIGEyLnB1c2goQTIpLCBBMiA9IHt9LCBBMi50eXBlID0gIkhIIiwgQTIudGJ4MCA9IE1hdGguY2VpbChpMi50Y3gwIC8gbDIgLSAwLjUpLCBBMi50YnkwID0gTWF0aC5jZWlsKGkyLnRjeTAgLyBsMiAtIDAuNSksIEEyLnRieDEgPSBNYXRoLmNlaWwoaTIudGN4MSAvIGwyIC0gMC41KSwgQTIudGJ5MSA9IE1hdGguY2VpbChpMi50Y3kxIC8gbDIgLSAwLjUpLCBBMi5yZXNvbHV0aW9uID0gVjIsIEMyKHYyLCBBMiwgQjIpLCBfLnB1c2goQTIpLCBhMi5wdXNoKEEyKSwgVjIuc3ViYmFuZHMgPSBhMjsKICAgICAgICB9CiAgICAgIH0KICAgICAgaTIucmVzb2x1dGlvbnMgPSBlMiwgaTIuc3ViYmFuZHMgPSBfOwogICAgfQogICAgdmFyIEoyID0gVC5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLnByb2dyZXNzaW9uT3JkZXI7CiAgICBzd2l0Y2ggKEoyKSB7CiAgICAgIGNhc2UgMDoKICAgICAgICBULnBhY2tldHNJdGVyYXRvciA9IG5ldyBWMSgKICAgICAgICAgIHYyCiAgICAgICAgKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAxOgogICAgICAgIFQucGFja2V0c0l0ZXJhdG9yID0gbmV3IGllKAogICAgICAgICAgdjIKICAgICAgICApOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDI6CiAgICAgICAgVC5wYWNrZXRzSXRlcmF0b3IgPSBuZXcgWDEoCiAgICAgICAgICB2MgogICAgICAgICk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMzoKICAgICAgICBULnBhY2tldHNJdGVyYXRvciA9IG5ldyB1MSgKICAgICAgICAgIHYyCiAgICAgICAgKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSA0OgogICAgICAgIFQucGFja2V0c0l0ZXJhdG9yID0gbmV3IEswKAogICAgICAgICAgdjIKICAgICAgICApOwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIHRocm93IG5ldyBFMShgVW5zdXBwb3J0ZWQgcHJvZ3Jlc3Npb24gb3JkZXIgJHtKMn1gKTsKICAgIH0KICB9CiAgZnVuY3Rpb24gU2kodjIsIGIsIEkyLCBUKSB7CiAgICB2YXIgTCA9IDAsIFoyLCBpMiA9IDAsICQgPSAhMTsKICAgIGZ1bmN0aW9uIGUyKHEwKSB7CiAgICAgIGZvciAoOyBpMiA8IHEwOyApIHsKICAgICAgICB2YXIgUjEgPSBiW0kyICsgTF07CiAgICAgICAgTCsrLCAkID8gKFoyID0gWjIgPDwgNyB8IFIxLCBpMiArPSA3LCAkID0gITEpIDogKFoyID0gWjIgPDwgOCB8IFIxLCBpMiArPSA4KSwgUjEgPT09IDI1NSAmJiAoJCA9ICEwKTsKICAgICAgfQogICAgICByZXR1cm4gaTIgLT0gcTAsIFoyID4+PiBpMiAmICgxIDw8IHEwKSAtIDE7CiAgICB9CiAgICBmdW5jdGlvbiBfKHEwKSB7CiAgICAgIHJldHVybiBiW0kyICsgTCAtIDFdID09PSAyNTUgJiYgYltJMiArIExdID09PSBxMCA/ICh0MigxKSwgITApIDogYltJMiArIExdID09PSAyNTUgJiYgYltJMiArIEwgKyAxXSA9PT0gcTAgPyAodDIoMiksICEwKSA6ICExOwogICAgfQogICAgZnVuY3Rpb24gdDIocTApIHsKICAgICAgTCArPSBxMDsKICAgIH0KICAgIGZ1bmN0aW9uIEIyKCkgewogICAgICBpMiA9IDAsICQgJiYgKEwrKywgJCA9ICExKTsKICAgIH0KICAgIGZ1bmN0aW9uIFYyKCkgewogICAgICBpZiAoZTIoMSkgPT09IDApCiAgICAgICAgcmV0dXJuIDE7CiAgICAgIGlmIChlMigxKSA9PT0gMCkKICAgICAgICByZXR1cm4gMjsKICAgICAgdmFyIHEwID0gZTIoMik7CiAgICAgIHJldHVybiBxMCA8IDMgPyBxMCArIDMgOiAocTAgPSBlMig1KSwgcTAgPCAzMSA/IHEwICsgNiA6IChxMCA9IGUyKDcpLCBxMCArIDM3KSk7CiAgICB9CiAgICBmb3IgKHZhciB5MiA9IHYyLmN1cnJlbnRUaWxlLmluZGV4LCBBMiA9IHYyLnRpbGVzW3kyXSwgbDIgPSB2Mi5DT0Quc29wTWFya2VyVXNlZCwgYTIgPSB2Mi5DT0QuZXBoTWFya2VyVXNlZCwgSjIgPSBBMi5wYWNrZXRzSXRlcmF0b3I7IEwgPCBUOyApIHsKICAgICAgQjIoKSwgbDIgJiYgXygxNDUpICYmIHQyKDQpOwogICAgICB2YXIgajIgPSBKMi5uZXh0UGFja2V0KCk7CiAgICAgIGlmIChlMigxKSkgewogICAgICAgIGZvciAodmFyIEsyID0gajIubGF5ZXJOdW1iZXIsIGIyID0gW10sIFQyLCB3MCA9IDAsICQyID0gajIuY29kZWJsb2Nrcy5sZW5ndGg7IHcwIDwgJDI7IHcwKyspIHsKICAgICAgICAgIFQyID0gajIuY29kZWJsb2Nrc1t3MF07CiAgICAgICAgICB2YXIgSDIgPSBUMi5wcmVjaW5jdCwgRjAgPSBUMi5jYnggLSBIMi5jYnhNaW4sIG0wID0gVDIuY2J5IC0gSDIuY2J5TWluLCBTMCA9ICExLCB2MCA9ICExLCBEMDsKICAgICAgICAgIGlmIChUMi5pbmNsdWRlZCAhPT0gdm9pZCAwKQogICAgICAgICAgICBTMCA9ICEhZTIoMSk7CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgSDIgPSBUMi5wcmVjaW5jdDsKICAgICAgICAgICAgdmFyICQwLCBHMDsKICAgICAgICAgICAgaWYgKEgyLmluY2x1c2lvblRyZWUgIT09IHZvaWQgMCkKICAgICAgICAgICAgICAkMCA9IEgyLmluY2x1c2lvblRyZWU7CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgIHZhciBvMSA9IEgyLmNieE1heCAtIEgyLmNieE1pbiArIDEsIEMxID0gSDIuY2J5TWF4IC0gSDIuY2J5TWluICsgMTsKICAgICAgICAgICAgICAkMCA9IG5ldyByZShvMSwgQzEsIEsyKSwgRzAgPSBuZXcgTDEobzEsIEMxKSwgSDIuaW5jbHVzaW9uVHJlZSA9ICQwLCBIMi56ZXJvQml0UGxhbmVzVHJlZSA9IEcwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgkMC5yZXNldChGMCwgbTAsIEsyKSkKICAgICAgICAgICAgICBmb3IgKDsgOyApCiAgICAgICAgICAgICAgICBpZiAoZTIoMSkpIHsKICAgICAgICAgICAgICAgICAgaWYgKEQwID0gISQwLm5leHRMZXZlbCgpLCBEMCkgewogICAgICAgICAgICAgICAgICAgIFQyLmluY2x1ZGVkID0gITAsIFMwID0gdjAgPSAhMDsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgJDAuaW5jcmVtZW50VmFsdWUoSzIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChTMCkgewogICAgICAgICAgICBpZiAodjApIHsKICAgICAgICAgICAgICBmb3IgKEcwID0gSDIuemVyb0JpdFBsYW5lc1RyZWUsIEcwLnJlc2V0KEYwLCBtMCk7IDsgKQogICAgICAgICAgICAgICAgaWYgKGUyKDEpKSB7CiAgICAgICAgICAgICAgICAgIGlmIChEMCA9ICFHMC5uZXh0TGV2ZWwoKSwgRDApCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgRzAuaW5jcmVtZW50VmFsdWUoKTsKICAgICAgICAgICAgICBUMi56ZXJvQml0UGxhbmVzID0gRzAudmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZm9yICh2YXIgTTEgPSBWMigpOyBlMigxKTsgKQogICAgICAgICAgICAgIFQyLkxibG9jaysrOwogICAgICAgICAgICB2YXIgRjEgPSBKcihNMSksIFMxID0gKE0xIDwgMSA8PCBGMSA/IEYxIC0gMSA6IEYxKSArIFQyLkxibG9jaywgczEgPSBlMihTMSk7CiAgICAgICAgICAgIGIyLnB1c2goewogICAgICAgICAgICAgIGNvZGVibG9jazogVDIsCiAgICAgICAgICAgICAgY29kaW5ncGFzc2VzOiBNMSwKICAgICAgICAgICAgICBkYXRhTGVuZ3RoOiBzMQogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZm9yIChCMigpLCBhMiAmJiBfKDE0Nik7IGIyLmxlbmd0aCA+IDA7ICkgewogICAgICAgICAgdmFyIEoxID0gYjIuc2hpZnQoKTsKICAgICAgICAgIFQyID0gSjEuY29kZWJsb2NrLCBUMi5kYXRhID09PSB2b2lkIDAgJiYgKFQyLmRhdGEgPSBbXSksIFQyLmRhdGEucHVzaCh7CiAgICAgICAgICAgIGRhdGE6IGIsCiAgICAgICAgICAgIHN0YXJ0OiBJMiArIEwsCiAgICAgICAgICAgIGVuZDogSTIgKyBMICsgSjEuZGF0YUxlbmd0aCwKICAgICAgICAgICAgY29kaW5ncGFzc2VzOiBKMS5jb2RpbmdwYXNzZXMKICAgICAgICAgIH0pLCBMICs9IEoxLmRhdGFMZW5ndGg7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gTDsKICB9CiAgZnVuY3Rpb24gRWUodjIsIGIsIEkyLCBULCBMLCBaMiwgaTIsICQpIHsKICAgIGZvciAodmFyIGUyID0gVC50YngwLCBfID0gVC50YnkwLCB0MiA9IFQudGJ4MSAtIFQudGJ4MCwgQjIgPSBULmNvZGVibG9ja3MsIFYyID0gVC50eXBlLmNoYXJBdCgwKSA9PT0gIkgiID8gMSA6IDAsIHkyID0gVC50eXBlLmNoYXJBdCgxKSA9PT0gIkgiID8gYiA6IDAsIEEyID0gMCwgbDIgPSBCMi5sZW5ndGg7IEEyIDwgbDI7ICsrQTIpIHsKICAgICAgdmFyIGEyID0gQjJbQTJdLCBKMiA9IGEyLnRieDFfIC0gYTIudGJ4MF8sIGoyID0gYTIudGJ5MV8gLSBhMi50YnkwXzsKICAgICAgaWYgKCEoSjIgPT09IDAgfHwgajIgPT09IDApICYmIGEyLmRhdGEgIT09IHZvaWQgMCkgewogICAgICAgIHZhciBLMiwgYjI7CiAgICAgICAgSzIgPSBuZXcgRDEoCiAgICAgICAgICBKMiwKICAgICAgICAgIGoyLAogICAgICAgICAgYTIuc3ViYmFuZFR5cGUsCiAgICAgICAgICBhMi56ZXJvQml0UGxhbmVzLAogICAgICAgICAgWjIKICAgICAgICApLCBiMiA9IDI7CiAgICAgICAgdmFyIFQyID0gYTIuZGF0YSwgdzAgPSAwLCAkMiA9IDAsIEgyLCBGMCwgbTA7CiAgICAgICAgZm9yIChIMiA9IDAsIEYwID0gVDIubGVuZ3RoOyBIMiA8IEYwOyBIMisrKQogICAgICAgICAgbTAgPSBUMltIMl0sIHcwICs9IG0wLmVuZCAtIG0wLnN0YXJ0LCAkMiArPSBtMC5jb2RpbmdwYXNzZXM7CiAgICAgICAgdmFyIFMwID0gbmV3IFVpbnQ4QXJyYXkodzApLCB2MCA9IDA7CiAgICAgICAgZm9yIChIMiA9IDAsIEYwID0gVDIubGVuZ3RoOyBIMiA8IEYwOyBIMisrKSB7CiAgICAgICAgICBtMCA9IFQyW0gyXTsKICAgICAgICAgIHZhciBEMCA9IG0wLmRhdGEuc3ViYXJyYXkobTAuc3RhcnQsIG0wLmVuZCk7CiAgICAgICAgICBTMC5zZXQoRDAsIHYwKSwgdjAgKz0gRDAubGVuZ3RoOwogICAgICAgIH0KICAgICAgICB2YXIgJDAgPSBuZXcgTnQoUzAsIDAsIHcwKTsKICAgICAgICBmb3IgKEsyLnNldERlY29kZXIoJDApLCBIMiA9IDA7IEgyIDwgJDI7IEgyKyspIHsKICAgICAgICAgIHN3aXRjaCAoYjIpIHsKICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgIEsyLnJ1blNpZ25pZmljYW5jZVByb3BhZ2F0aW9uUGFzcygpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgSzIucnVuTWFnbml0dWRlUmVmaW5lbWVudFBhc3MoKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgIEsyLnJ1bkNsZWFudXBQYXNzKCksICQgJiYgSzIuY2hlY2tTZWdtZW50YXRpb25TeW1ib2woKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGIyID0gKGIyICsgMSkgJSAzOwogICAgICAgIH0KICAgICAgICB2YXIgRzAgPSBhMi50YngwXyAtIGUyICsgKGEyLnRieTBfIC0gXykgKiB0MiwgbzEgPSBLMi5jb2VmZmljZW50c1NpZ24sIEMxID0gSzIuY29lZmZpY2VudHNNYWduaXR1ZGUsIE0xID0gSzIuYml0c0RlY29kZWQsIEYxID0gaTIgPyAwIDogMC41LCBTMSwgczEsIEoxOwogICAgICAgIHYwID0gMDsKICAgICAgICB2YXIgcTAgPSBULnR5cGUgIT09ICJMTCI7CiAgICAgICAgZm9yIChIMiA9IDA7IEgyIDwgajI7IEgyKyspIHsKICAgICAgICAgIHZhciBSMSA9IEcwIC8gdDIgfCAwLCBEZSA9IDIgKiBSMSAqIChiIC0gdDIpICsgVjIgKyB5MjsKICAgICAgICAgIGZvciAoUzEgPSAwOyBTMSA8IEoyOyBTMSsrKSB7CiAgICAgICAgICAgIGlmIChzMSA9IEMxW3YwXSwgczEgIT09IDApIHsKICAgICAgICAgICAgICBzMSA9IChzMSArIEYxKSAqIEwsIG8xW3YwXSAhPT0gMCAmJiAoczEgPSAtczEpLCBKMSA9IE0xW3YwXTsKICAgICAgICAgICAgICB2YXIgTzEgPSBxMCA/IERlICsgKEcwIDw8IDEpIDogRzA7CiAgICAgICAgICAgICAgaTIgJiYgSjEgPj0gWjIgPyB2MltPMV0gPSBzMSA6IHYyW08xXSA9IHMxICogKDEgPDwgWjIgLSBKMSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgRzArKywgdjArKzsKICAgICAgICAgIH0KICAgICAgICAgIEcwICs9IHQyIC0gSjI7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQogIGZ1bmN0aW9uIHZlKHYyLCBiLCBJMikgewogICAgZm9yICh2YXIgVCA9IGIuY29tcG9uZW50c1tJMl0sIEwgPSBULmNvZGluZ1N0eWxlUGFyYW1ldGVycywgWjIgPSBULnF1YW50aXphdGlvblBhcmFtZXRlcnMsIGkyID0gTC5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQsICQgPSBaMi5TUHFjZHMsIGUyID0gWjIuc2NhbGFyRXhwb3VuZGVkLCBfID0gWjIuZ3VhcmRCaXRzLCB0MiA9IEwuc2VnbWVudGF0aW9uU3ltYm9sVXNlZCwgQjIgPSB2Mi5jb21wb25lbnRzW0kyXS5wcmVjaXNpb24sIFYyID0gTC5yZXZlcnNpYmxlVHJhbnNmb3JtYXRpb24sIHkyID0gVjIgPyBuZXcgVzEoKSA6IG5ldyBpaSgpLCBBMiA9IFtdLCBsMiA9IDAsIGEyID0gMDsgYTIgPD0gaTI7IGEyKyspIHsKICAgICAgZm9yICh2YXIgSjIgPSBULnJlc29sdXRpb25zW2EyXSwgajIgPSBKMi50cngxIC0gSjIudHJ4MCwgSzIgPSBKMi50cnkxIC0gSjIudHJ5MCwgYjIgPSBuZXcgRmxvYXQzMkFycmF5KGoyICogSzIpLCBUMiA9IDAsIHcwID0gSjIuc3ViYmFuZHMubGVuZ3RoOyBUMiA8IHcwOyBUMisrKSB7CiAgICAgICAgdmFyICQyLCBIMjsKICAgICAgICBlMiA/ICgkMiA9ICRbbDJdLm11LCBIMiA9ICRbbDJdLmVwc2lsb24sIGwyKyspIDogKCQyID0gJFswXS5tdSwgSDIgPSAkWzBdLmVwc2lsb24gKyAoYTIgPiAwID8gMSAtIGEyIDogMCkpOwogICAgICAgIHZhciBGMCA9IEoyLnN1YmJhbmRzW1QyXSwgbTAgPSB1MFtGMC50eXBlXSwgUzAgPSBWMiA/IDEgOiAyICoqIChCMiArIG0wIC0gSDIpICogKDEgKyAkMiAvIDIwNDgpLCB2MCA9IF8gKyBIMiAtIDE7CiAgICAgICAgRWUoCiAgICAgICAgICBiMiwKICAgICAgICAgIGoyLAogICAgICAgICAgSzIsCiAgICAgICAgICBGMCwKICAgICAgICAgIFMwLAogICAgICAgICAgdjAsCiAgICAgICAgICBWMiwKICAgICAgICAgIHQyCiAgICAgICAgKTsKICAgICAgfQogICAgICBBMi5wdXNoKHsKICAgICAgICB3aWR0aDogajIsCiAgICAgICAgaGVpZ2h0OiBLMiwKICAgICAgICBpdGVtczogYjIKICAgICAgfSk7CiAgICB9CiAgICB2YXIgRDAgPSB5Mi5jYWxjdWxhdGUoCiAgICAgIEEyLAogICAgICBULnRjeDAsCiAgICAgIFQudGN5MAogICAgKTsKICAgIHJldHVybiB7CiAgICAgIGxlZnQ6IFQudGN4MCwKICAgICAgdG9wOiBULnRjeTAsCiAgICAgIHdpZHRoOiBEMC53aWR0aCwKICAgICAgaGVpZ2h0OiBEMC5oZWlnaHQsCiAgICAgIGl0ZW1zOiBEMC5pdGVtcwogICAgfTsKICB9CiAgZnVuY3Rpb24gZWkodjIpIHsKICAgIGZvciAodmFyIGIgPSB2Mi5TSVosIEkyID0gdjIuY29tcG9uZW50cywgVCA9IGIuQ3NpeiwgTCA9IFtdLCBaMiA9IDAsIGkyID0gdjIudGlsZXMubGVuZ3RoOyBaMiA8IGkyOyBaMisrKSB7CiAgICAgIHZhciAkID0gdjIudGlsZXNbWjJdLCBlMiA9IFtdLCBfOwogICAgICBmb3IgKF8gPSAwOyBfIDwgVDsgXysrKQogICAgICAgIGUyW19dID0gdmUodjIsICQsIF8pOwogICAgICB2YXIgdDIgPSBlMlswXSwgQjIgPSBuZXcgVWludDhDbGFtcGVkQXJyYXkodDIuaXRlbXMubGVuZ3RoICogVCksIFYyID0gewogICAgICAgIGxlZnQ6IHQyLmxlZnQsCiAgICAgICAgdG9wOiB0Mi50b3AsCiAgICAgICAgd2lkdGg6IHQyLndpZHRoLAogICAgICAgIGhlaWdodDogdDIuaGVpZ2h0LAogICAgICAgIGl0ZW1zOiBCMgogICAgICB9LCB5MiwgQTIsIGwyID0gMCwgYTIsIEoyLCBqMiwgSzIsIGIyOwogICAgICBpZiAoJC5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLm11bHRpcGxlQ29tcG9uZW50VHJhbnNmb3JtKSB7CiAgICAgICAgdmFyIFQyID0gVCA9PT0gNCwgdzAgPSBlMlswXS5pdGVtcywgJDIgPSBlMlsxXS5pdGVtcywgSDIgPSBlMlsyXS5pdGVtcywgRjAgPSBUMiA/IGUyWzNdLml0ZW1zIDogbnVsbDsKICAgICAgICB5MiA9IEkyWzBdLnByZWNpc2lvbiAtIDgsIEEyID0gKDEyOCA8PCB5MikgKyAwLjU7CiAgICAgICAgdmFyIG0wID0gJC5jb21wb25lbnRzWzBdLCBTMCA9IFQgLSAzOwogICAgICAgIGlmIChKMiA9IHcwLmxlbmd0aCwgbTAuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLnJldmVyc2libGVUcmFuc2Zvcm1hdGlvbikKICAgICAgICAgIGZvciAoYTIgPSAwOyBhMiA8IEoyOyBhMisrLCBsMiArPSBTMCkgewogICAgICAgICAgICBqMiA9IHcwW2EyXSArIEEyLCBLMiA9ICQyW2EyXSwgYjIgPSBIMlthMl07CiAgICAgICAgICAgIGNvbnN0IEQwID0gajIgLSAoYjIgKyBLMiA+PiAyKTsKICAgICAgICAgICAgQjJbbDIrK10gPSBEMCArIGIyID4+IHkyLCBCMltsMisrXSA9IEQwID4+IHkyLCBCMltsMisrXSA9IEQwICsgSzIgPj4geTI7CiAgICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgZm9yIChhMiA9IDA7IGEyIDwgSjI7IGEyKyssIGwyICs9IFMwKQogICAgICAgICAgICBqMiA9IHcwW2EyXSArIEEyLCBLMiA9ICQyW2EyXSwgYjIgPSBIMlthMl0sIEIyW2wyKytdID0gajIgKyAxLjQwMiAqIGIyID4+IHkyLCBCMltsMisrXSA9IGoyIC0gMC4zNDQxMyAqIEsyIC0gMC43MTQxNCAqIGIyID4+IHkyLCBCMltsMisrXSA9IGoyICsgMS43NzIgKiBLMiA+PiB5MjsKICAgICAgICBpZiAoVDIpCiAgICAgICAgICBmb3IgKGEyID0gMCwgbDIgPSAzOyBhMiA8IEoyOyBhMisrLCBsMiArPSA0KQogICAgICAgICAgICBCMltsMl0gPSBGMFthMl0gKyBBMiA+PiB5MjsKICAgICAgfSBlbHNlCiAgICAgICAgZm9yIChfID0gMDsgXyA8IFQ7IF8rKykgewogICAgICAgICAgdmFyIHYwID0gZTJbX10uaXRlbXM7CiAgICAgICAgICBmb3IgKHkyID0gSTJbX10ucHJlY2lzaW9uIC0gOCwgQTIgPSAoMTI4IDw8IHkyKSArIDAuNSwgbDIgPSBfLCBhMiA9IDAsIEoyID0gdjAubGVuZ3RoOyBhMiA8IEoyOyBhMisrKQogICAgICAgICAgICBCMltsMl0gPSB2MFthMl0gKyBBMiA+PiB5MiwgbDIgKz0gVDsKICAgICAgICB9CiAgICAgIEwucHVzaChWMik7CiAgICB9CiAgICByZXR1cm4gTDsKICB9CiAgZnVuY3Rpb24gTmkodjIsIGIpIHsKICAgIGZvciAodmFyIEkyID0gdjIuU0laLCBUID0gSTIuQ3NpeiwgTCA9IHYyLnRpbGVzW2JdLCBaMiA9IDA7IFoyIDwgVDsgWjIrKykgewogICAgICB2YXIgaTIgPSBMLmNvbXBvbmVudHNbWjJdLCAkID0gdjIuY3VycmVudFRpbGUuUUNDW1oyXSAhPT0gdm9pZCAwID8gdjIuY3VycmVudFRpbGUuUUNDW1oyXSA6IHYyLmN1cnJlbnRUaWxlLlFDRDsKICAgICAgaTIucXVhbnRpemF0aW9uUGFyYW1ldGVycyA9ICQ7CiAgICAgIHZhciBlMiA9IHYyLmN1cnJlbnRUaWxlLkNPQ1taMl0gIT09IHZvaWQgMCA/IHYyLmN1cnJlbnRUaWxlLkNPQ1taMl0gOiB2Mi5jdXJyZW50VGlsZS5DT0Q7CiAgICAgIGkyLmNvZGluZ1N0eWxlUGFyYW1ldGVycyA9IGUyOwogICAgfQogICAgTC5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzID0gdjIuY3VycmVudFRpbGUuQ09EOwogIH0KICB2YXIgTDEgPSBmdW5jdGlvbigpIHsKICAgIGZ1bmN0aW9uIGIoSTIsIFQpIHsKICAgICAgdmFyIEwgPSBKcihNYXRoLm1heChJMiwgVCkpICsgMTsKICAgICAgdGhpcy5sZXZlbHMgPSBbXTsKICAgICAgZm9yICh2YXIgWjIgPSAwOyBaMiA8IEw7IFoyKyspIHsKICAgICAgICB2YXIgaTIgPSB7CiAgICAgICAgICB3aWR0aDogSTIsCiAgICAgICAgICBoZWlnaHQ6IFQsCiAgICAgICAgICBpdGVtczogW10KICAgICAgICB9OwogICAgICAgIHRoaXMubGV2ZWxzLnB1c2goaTIpLCBJMiA9IE1hdGguY2VpbChJMiAvIDIpLCBUID0gTWF0aC5jZWlsKFQgLyAyKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGIucHJvdG90eXBlID0gewogICAgICByZXNldDogZnVuY3Rpb24oVCwgTCkgewogICAgICAgIGZvciAodmFyIFoyID0gMCwgaTIgPSAwLCAkOyBaMiA8IHRoaXMubGV2ZWxzLmxlbmd0aDsgKSB7CiAgICAgICAgICAkID0gdGhpcy5sZXZlbHNbWjJdOwogICAgICAgICAgdmFyIGUyID0gVCArIEwgKiAkLndpZHRoOwogICAgICAgICAgaWYgKCQuaXRlbXNbZTJdICE9PSB2b2lkIDApIHsKICAgICAgICAgICAgaTIgPSAkLml0ZW1zW2UyXTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICAkLmluZGV4ID0gZTIsIFQgPj49IDEsIEwgPj49IDEsIFoyKys7CiAgICAgICAgfQogICAgICAgIFoyLS0sICQgPSB0aGlzLmxldmVsc1taMl0sICQuaXRlbXNbJC5pbmRleF0gPSBpMiwgdGhpcy5jdXJyZW50TGV2ZWwgPSBaMiwgZGVsZXRlIHRoaXMudmFsdWU7CiAgICAgIH0sCiAgICAgIGluY3JlbWVudFZhbHVlOiBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgVCA9IHRoaXMubGV2ZWxzW3RoaXMuY3VycmVudExldmVsXTsKICAgICAgICBULml0ZW1zW1QuaW5kZXhdKys7CiAgICAgIH0sCiAgICAgIG5leHRMZXZlbDogZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIFQgPSB0aGlzLmN1cnJlbnRMZXZlbCwgTCA9IHRoaXMubGV2ZWxzW1RdLCBaMiA9IEwuaXRlbXNbTC5pbmRleF07CiAgICAgICAgcmV0dXJuIFQtLSwgVCA8IDAgPyAodGhpcy52YWx1ZSA9IFoyLCAhMSkgOiAodGhpcy5jdXJyZW50TGV2ZWwgPSBULCBMID0gdGhpcy5sZXZlbHNbVF0sIEwuaXRlbXNbTC5pbmRleF0gPSBaMiwgITApOwogICAgICB9CiAgICB9LCBiOwogIH0oKSwgcmUgPSBmdW5jdGlvbigpIHsKICAgIGZ1bmN0aW9uIGIoSTIsIFQsIEwpIHsKICAgICAgdmFyIFoyID0gSnIoTWF0aC5tYXgoSTIsIFQpKSArIDE7CiAgICAgIHRoaXMubGV2ZWxzID0gW107CiAgICAgIGZvciAodmFyIGkyID0gMDsgaTIgPCBaMjsgaTIrKykgewogICAgICAgIGZvciAodmFyICQgPSBuZXcgVWludDhBcnJheShJMiAqIFQpLCBlMiA9IDAsIF8gPSAkLmxlbmd0aDsgZTIgPCBfOyBlMisrKQogICAgICAgICAgJFtlMl0gPSBMOwogICAgICAgIHZhciB0MiA9IHsKICAgICAgICAgIHdpZHRoOiBJMiwKICAgICAgICAgIGhlaWdodDogVCwKICAgICAgICAgIGl0ZW1zOiAkCiAgICAgICAgfTsKICAgICAgICB0aGlzLmxldmVscy5wdXNoKHQyKSwgSTIgPSBNYXRoLmNlaWwoSTIgLyAyKSwgVCA9IE1hdGguY2VpbChUIC8gMik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBiLnByb3RvdHlwZSA9IHsKICAgICAgcmVzZXQ6IGZ1bmN0aW9uKFQsIEwsIFoyKSB7CiAgICAgICAgZm9yICh2YXIgaTIgPSAwOyBpMiA8IHRoaXMubGV2ZWxzLmxlbmd0aDsgKSB7CiAgICAgICAgICB2YXIgJCA9IHRoaXMubGV2ZWxzW2kyXSwgZTIgPSBUICsgTCAqICQud2lkdGg7CiAgICAgICAgICAkLmluZGV4ID0gZTI7CiAgICAgICAgICB2YXIgXyA9ICQuaXRlbXNbZTJdOwogICAgICAgICAgaWYgKF8gPT09IDI1NSkKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBpZiAoXyA+IFoyKQogICAgICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50TGV2ZWwgPSBpMiwgdGhpcy5wcm9wYWdhdGVWYWx1ZXMoKSwgITE7CiAgICAgICAgICBUID4+PSAxLCBMID4+PSAxLCBpMisrOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50TGV2ZWwgPSBpMiAtIDEsICEwOwogICAgICB9LAogICAgICBpbmNyZW1lbnRWYWx1ZTogZnVuY3Rpb24oVCkgewogICAgICAgIHZhciBMID0gdGhpcy5sZXZlbHNbdGhpcy5jdXJyZW50TGV2ZWxdOwogICAgICAgIEwuaXRlbXNbTC5pbmRleF0gPSBUICsgMSwgdGhpcy5wcm9wYWdhdGVWYWx1ZXMoKTsKICAgICAgfSwKICAgICAgcHJvcGFnYXRlVmFsdWVzOiBmdW5jdGlvbigpIHsKICAgICAgICBmb3IgKHZhciBUID0gdGhpcy5jdXJyZW50TGV2ZWwsIEwgPSB0aGlzLmxldmVsc1tUXSwgWjIgPSBMLml0ZW1zW0wuaW5kZXhdOyAtLVQgPj0gMDsgKQogICAgICAgICAgTCA9IHRoaXMubGV2ZWxzW1RdLCBMLml0ZW1zW0wuaW5kZXhdID0gWjI7CiAgICAgIH0sCiAgICAgIG5leHRMZXZlbDogZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIFQgPSB0aGlzLmN1cnJlbnRMZXZlbCwgTCA9IHRoaXMubGV2ZWxzW1RdLCBaMiA9IEwuaXRlbXNbTC5pbmRleF07CiAgICAgICAgcmV0dXJuIEwuaXRlbXNbTC5pbmRleF0gPSAyNTUsIFQtLSwgVCA8IDAgPyAhMSA6ICh0aGlzLmN1cnJlbnRMZXZlbCA9IFQsIEwgPSB0aGlzLmxldmVsc1tUXSwgTC5pdGVtc1tMLmluZGV4XSA9IFoyLCAhMCk7CiAgICAgIH0KICAgIH0sIGI7CiAgfSgpLCBEMSA9IGZ1bmN0aW9uKCkgewogICAgdmFyIGIgPSAxNywgSTIgPSAxOCwgVCA9IG5ldyBVaW50OEFycmF5KFsKICAgICAgMCwKICAgICAgNSwKICAgICAgOCwKICAgICAgMCwKICAgICAgMywKICAgICAgNywKICAgICAgOCwKICAgICAgMCwKICAgICAgNCwKICAgICAgNywKICAgICAgOCwKICAgICAgMCwKICAgICAgMCwKICAgICAgMCwKICAgICAgMCwKICAgICAgMCwKICAgICAgMSwKICAgICAgNiwKICAgICAgOCwKICAgICAgMCwKICAgICAgMywKICAgICAgNywKICAgICAgOCwKICAgICAgMCwKICAgICAgNCwKICAgICAgNywKICAgICAgOCwKICAgICAgMCwKICAgICAgMCwKICAgICAgMCwKICAgICAgMCwKICAgICAgMCwKICAgICAgMiwKICAgICAgNiwKICAgICAgOCwKICAgICAgMCwKICAgICAgMywKICAgICAgNywKICAgICAgOCwKICAgICAgMCwKICAgICAgNCwKICAgICAgNywKICAgICAgOCwKICAgICAgMCwKICAgICAgMCwKICAgICAgMCwKICAgICAgMCwKICAgICAgMCwKICAgICAgMiwKICAgICAgNiwKICAgICAgOCwKICAgICAgMCwKICAgICAgMywKICAgICAgNywKICAgICAgOCwKICAgICAgMCwKICAgICAgNCwKICAgICAgNywKICAgICAgOCwKICAgICAgMCwKICAgICAgMCwKICAgICAgMCwKICAgICAgMCwKICAgICAgMCwKICAgICAgMiwKICAgICAgNiwKICAgICAgOCwKICAgICAgMCwKICAgICAgMywKICAgICAgNywKICAgICAgOCwKICAgICAgMCwKICAgICAgNCwKICAgICAgNywKICAgICAgOAogICAgXSksIEwgPSBuZXcgVWludDhBcnJheShbCiAgICAgIDAsCiAgICAgIDMsCiAgICAgIDQsCiAgICAgIDAsCiAgICAgIDUsCiAgICAgIDcsCiAgICAgIDcsCiAgICAgIDAsCiAgICAgIDgsCiAgICAgIDgsCiAgICAgIDgsCiAgICAgIDAsCiAgICAgIDAsCiAgICAgIDAsCiAgICAgIDAsCiAgICAgIDAsCiAgICAgIDEsCiAgICAgIDMsCiAgICAgIDQsCiAgICAgIDAsCiAgICAgIDYsCiAgICAgIDcsCiAgICAgIDcsCiAgICAgIDAsCiAgICAgIDgsCiAgICAgIDgsCiAgICAgIDgsCiAgICAgIDAsCiAgICAgIDAsCiAgICAgIDAsCiAgICAgIDAsCiAgICAgIDAsCiAgICAgIDIsCiAgICAgIDMsCiAgICAgIDQsCiAgICAgIDAsCiAgICAgIDYsCiAgICAgIDcsCiAgICAgIDcsCiAgICAgIDAsCiAgICAgIDgsCiAgICAgIDgsCiAgICAgIDgsCiAgICAgIDAsCiAgICAgIDAsCiAgICAgIDAsCiAgICAgIDAsCiAgICAgIDAsCiAgICAgIDIsCiAgICAgIDMsCiAgICAgIDQsCiAgICAgIDAsCiAgICAgIDYsCiAgICAgIDcsCiAgICAgIDcsCiAgICAgIDAsCiAgICAgIDgsCiAgICAgIDgsCiAgICAgIDgsCiAgICAgIDAsCiAgICAgIDAsCiAgICAgIDAsCiAgICAgIDAsCiAgICAgIDAsCiAgICAgIDIsCiAgICAgIDMsCiAgICAgIDQsCiAgICAgIDAsCiAgICAgIDYsCiAgICAgIDcsCiAgICAgIDcsCiAgICAgIDAsCiAgICAgIDgsCiAgICAgIDgsCiAgICAgIDgKICAgIF0pLCBaMiA9IG5ldyBVaW50OEFycmF5KFsKICAgICAgMCwKICAgICAgMSwKICAgICAgMiwKICAgICAgMCwKICAgICAgMSwKICAgICAgMiwKICAgICAgMiwKICAgICAgMCwKICAgICAgMiwKICAgICAgMiwKICAgICAgMiwKICAgICAgMCwKICAgICAgMCwKICAgICAgMCwKICAgICAgMCwKICAgICAgMCwKICAgICAgMywKICAgICAgNCwKICAgICAgNSwKICAgICAgMCwKICAgICAgNCwKICAgICAgNSwKICAgICAgNSwKICAgICAgMCwKICAgICAgNSwKICAgICAgNSwKICAgICAgNSwKICAgICAgMCwKICAgICAgMCwKICAgICAgMCwKICAgICAgMCwKICAgICAgMCwKICAgICAgNiwKICAgICAgNywKICAgICAgNywKICAgICAgMCwKICAgICAgNywKICAgICAgNywKICAgICAgNywKICAgICAgMCwKICAgICAgNywKICAgICAgNywKICAgICAgNywKICAgICAgMCwKICAgICAgMCwKICAgICAgMCwKICAgICAgMCwKICAgICAgMCwKICAgICAgOCwKICAgICAgOCwKICAgICAgOCwKICAgICAgMCwKICAgICAgOCwKICAgICAgOCwKICAgICAgOCwKICAgICAgMCwKICAgICAgOCwKICAgICAgOCwKICAgICAgOCwKICAgICAgMCwKICAgICAgMCwKICAgICAgMCwKICAgICAgMCwKICAgICAgMCwKICAgICAgOCwKICAgICAgOCwKICAgICAgOCwKICAgICAgMCwKICAgICAgOCwKICAgICAgOCwKICAgICAgOCwKICAgICAgMCwKICAgICAgOCwKICAgICAgOCwKICAgICAgOAogICAgXSk7CiAgICBmdW5jdGlvbiBpMigkLCBlMiwgXywgdDIsIEIyKSB7CiAgICAgIHRoaXMud2lkdGggPSAkLCB0aGlzLmhlaWdodCA9IGUyOwogICAgICBsZXQgVjI7CiAgICAgIF8gPT09ICJISCIgPyBWMiA9IFoyIDogXyA9PT0gIkhMIiA/IFYyID0gTCA6IFYyID0gVCwgdGhpcy5jb250ZXh0TGFiZWxUYWJsZSA9IFYyOwogICAgICB2YXIgeTIgPSAkICogZTI7CiAgICAgIHRoaXMubmVpZ2hib3JzU2lnbmlmaWNhbmNlID0gbmV3IFVpbnQ4QXJyYXkoeTIpLCB0aGlzLmNvZWZmaWNlbnRzU2lnbiA9IG5ldyBVaW50OEFycmF5KHkyKTsKICAgICAgbGV0IEEyOwogICAgICBCMiA+IDE0ID8gQTIgPSBuZXcgVWludDMyQXJyYXkoeTIpIDogQjIgPiA2ID8gQTIgPSBuZXcgVWludDE2QXJyYXkoeTIpIDogQTIgPSBuZXcgVWludDhBcnJheSh5MiksIHRoaXMuY29lZmZpY2VudHNNYWduaXR1ZGUgPSBBMiwgdGhpcy5wcm9jZXNzaW5nRmxhZ3MgPSBuZXcgVWludDhBcnJheSh5Mik7CiAgICAgIHZhciBsMiA9IG5ldyBVaW50OEFycmF5KHkyKTsKICAgICAgaWYgKHQyICE9PSAwKQogICAgICAgIGZvciAodmFyIGEyID0gMDsgYTIgPCB5MjsgYTIrKykKICAgICAgICAgIGwyW2EyXSA9IHQyOwogICAgICB0aGlzLmJpdHNEZWNvZGVkID0gbDIsIHRoaXMucmVzZXQoKTsKICAgIH0KICAgIHJldHVybiBpMi5wcm90b3R5cGUgPSB7CiAgICAgIHNldERlY29kZXI6IGZ1bmN0aW9uKGUyKSB7CiAgICAgICAgdGhpcy5kZWNvZGVyID0gZTI7CiAgICAgIH0sCiAgICAgIHJlc2V0OiBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLmNvbnRleHRzID0gbmV3IEludDhBcnJheSgxOSksIHRoaXMuY29udGV4dHNbMF0gPSA4LCB0aGlzLmNvbnRleHRzW2JdID0gOTIsIHRoaXMuY29udGV4dHNbSTJdID0gNjsKICAgICAgfSwKICAgICAgc2V0TmVpZ2hib3JzU2lnbmlmaWNhbmNlOiBmdW5jdGlvbihlMiwgXywgdDIpIHsKICAgICAgICB2YXIgQjIgPSB0aGlzLm5laWdoYm9yc1NpZ25pZmljYW5jZSwgVjIgPSB0aGlzLndpZHRoLCB5MiA9IHRoaXMuaGVpZ2h0LCBBMiA9IF8gPiAwLCBsMiA9IF8gKyAxIDwgVjIsIGEyOwogICAgICAgIGUyID4gMCAmJiAoYTIgPSB0MiAtIFYyLCBBMiAmJiAoQjJbYTIgLSAxXSArPSAxNiksIGwyICYmIChCMlthMiArIDFdICs9IDE2KSwgQjJbYTJdICs9IDQpLCBlMiArIDEgPCB5MiAmJiAoYTIgPSB0MiArIFYyLCBBMiAmJiAoQjJbYTIgLSAxXSArPSAxNiksIGwyICYmIChCMlthMiArIDFdICs9IDE2KSwgQjJbYTJdICs9IDQpLCBBMiAmJiAoQjJbdDIgLSAxXSArPSAxKSwgbDIgJiYgKEIyW3QyICsgMV0gKz0gMSksIEIyW3QyXSB8PSAxMjg7CiAgICAgIH0sCiAgICAgIHJ1blNpZ25pZmljYW5jZVByb3BhZ2F0aW9uUGFzczogZnVuY3Rpb24oKSB7CiAgICAgICAgZm9yICh2YXIgZTIgPSB0aGlzLmRlY29kZXIsIF8gPSB0aGlzLndpZHRoLCB0MiA9IHRoaXMuaGVpZ2h0LCBCMiA9IHRoaXMuY29lZmZpY2VudHNNYWduaXR1ZGUsIFYyID0gdGhpcy5jb2VmZmljZW50c1NpZ24sIHkyID0gdGhpcy5uZWlnaGJvcnNTaWduaWZpY2FuY2UsIEEyID0gdGhpcy5wcm9jZXNzaW5nRmxhZ3MsIGwyID0gdGhpcy5jb250ZXh0cywgYTIgPSB0aGlzLmNvbnRleHRMYWJlbFRhYmxlLCBKMiA9IHRoaXMuYml0c0RlY29kZWQsIGoyID0gLTIsIEsyID0gMSwgYjIgPSAyLCBUMiA9IDA7IFQyIDwgdDI7IFQyICs9IDQpCiAgICAgICAgICBmb3IgKHZhciB3MCA9IDA7IHcwIDwgXzsgdzArKykKICAgICAgICAgICAgZm9yICh2YXIgJDIgPSBUMiAqIF8gKyB3MCwgSDIgPSAwOyBIMiA8IDQ7IEgyKyssICQyICs9IF8pIHsKICAgICAgICAgICAgICB2YXIgRjAgPSBUMiArIEgyOwogICAgICAgICAgICAgIGlmIChGMCA+PSB0MikKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGlmIChBMlskMl0gJj0gajIsICEoQjJbJDJdIHx8ICF5MlskMl0pKSB7CiAgICAgICAgICAgICAgICB2YXIgbTAgPSBhMlt5MlskMl1dLCBTMCA9IGUyLnJlYWRCaXQobDIsIG0wKTsKICAgICAgICAgICAgICAgIGlmIChTMCkgewogICAgICAgICAgICAgICAgICB2YXIgdjAgPSB0aGlzLmRlY29kZVNpZ25CaXQoRjAsIHcwLCAkMik7CiAgICAgICAgICAgICAgICAgIFYyWyQyXSA9IHYwLCBCMlskMl0gPSAxLCB0aGlzLnNldE5laWdoYm9yc1NpZ25pZmljYW5jZShGMCwgdzAsICQyKSwgQTJbJDJdIHw9IGIyOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgSjJbJDJdKyssIEEyWyQyXSB8PSBLMjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgfSwKICAgICAgZGVjb2RlU2lnbkJpdDogZnVuY3Rpb24oZTIsIF8sIHQyKSB7CiAgICAgICAgdmFyIEIyID0gdGhpcy53aWR0aCwgVjIgPSB0aGlzLmhlaWdodCwgeTIgPSB0aGlzLmNvZWZmaWNlbnRzTWFnbml0dWRlLCBBMiA9IHRoaXMuY29lZmZpY2VudHNTaWduLCBsMiwgYTIsIEoyLCBqMiwgSzIsIGIyOwogICAgICAgIGoyID0gXyA+IDAgJiYgeTJbdDIgLSAxXSAhPT0gMCwgXyArIDEgPCBCMiAmJiB5Mlt0MiArIDFdICE9PSAwID8gKEoyID0gQTJbdDIgKyAxXSwgajIgPyAoYTIgPSBBMlt0MiAtIDFdLCBsMiA9IDEgLSBKMiAtIGEyKSA6IGwyID0gMSAtIEoyIC0gSjIpIDogajIgPyAoYTIgPSBBMlt0MiAtIDFdLCBsMiA9IDEgLSBhMiAtIGEyKSA6IGwyID0gMDsKICAgICAgICB2YXIgVDIgPSAzICogbDI7CiAgICAgICAgcmV0dXJuIGoyID0gZTIgPiAwICYmIHkyW3QyIC0gQjJdICE9PSAwLCBlMiArIDEgPCBWMiAmJiB5Mlt0MiArIEIyXSAhPT0gMCA/IChKMiA9IEEyW3QyICsgQjJdLCBqMiA/IChhMiA9IEEyW3QyIC0gQjJdLCBsMiA9IDEgLSBKMiAtIGEyICsgVDIpIDogbDIgPSAxIC0gSjIgLSBKMiArIFQyKSA6IGoyID8gKGEyID0gQTJbdDIgLSBCMl0sIGwyID0gMSAtIGEyIC0gYTIgKyBUMikgOiBsMiA9IFQyLCBsMiA+PSAwID8gKEsyID0gOSArIGwyLCBiMiA9IHRoaXMuZGVjb2Rlci5yZWFkQml0KHRoaXMuY29udGV4dHMsIEsyKSkgOiAoSzIgPSA5IC0gbDIsIGIyID0gdGhpcy5kZWNvZGVyLnJlYWRCaXQodGhpcy5jb250ZXh0cywgSzIpIF4gMSksIGIyOwogICAgICB9LAogICAgICBydW5NYWduaXR1ZGVSZWZpbmVtZW50UGFzczogZnVuY3Rpb24oKSB7CiAgICAgICAgZm9yICh2YXIgZTIgPSB0aGlzLmRlY29kZXIsIF8gPSB0aGlzLndpZHRoLCB0MiA9IHRoaXMuaGVpZ2h0LCBCMiA9IHRoaXMuY29lZmZpY2VudHNNYWduaXR1ZGUsIFYyID0gdGhpcy5uZWlnaGJvcnNTaWduaWZpY2FuY2UsIHkyID0gdGhpcy5jb250ZXh0cywgQTIgPSB0aGlzLmJpdHNEZWNvZGVkLCBsMiA9IHRoaXMucHJvY2Vzc2luZ0ZsYWdzLCBhMiA9IDEsIEoyID0gMiwgajIgPSBfICogdDIsIEsyID0gXyAqIDQsIGIyID0gMCwgVDI7IGIyIDwgajI7IGIyID0gVDIpIHsKICAgICAgICAgIFQyID0gTWF0aC5taW4oajIsIGIyICsgSzIpOwogICAgICAgICAgZm9yICh2YXIgdzAgPSAwOyB3MCA8IF87IHcwKyspCiAgICAgICAgICAgIGZvciAodmFyICQyID0gYjIgKyB3MDsgJDIgPCBUMjsgJDIgKz0gXykKICAgICAgICAgICAgICBpZiAoISghQjJbJDJdIHx8IGwyWyQyXSAmIGEyKSkgewogICAgICAgICAgICAgICAgdmFyIEgyID0gMTY7CiAgICAgICAgICAgICAgICBpZiAobDJbJDJdICYgSjIpIHsKICAgICAgICAgICAgICAgICAgbDJbJDJdIF49IEoyOwogICAgICAgICAgICAgICAgICB2YXIgRjAgPSBWMlskMl0gJiAxMjc7CiAgICAgICAgICAgICAgICAgIEgyID0gRjAgPT09IDAgPyAxNSA6IDE0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdmFyIG0wID0gZTIucmVhZEJpdCh5MiwgSDIpOwogICAgICAgICAgICAgICAgQjJbJDJdID0gQjJbJDJdIDw8IDEgfCBtMCwgQTJbJDJdKyssIGwyWyQyXSB8PSBhMjsKICAgICAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAogICAgICBydW5DbGVhbnVwUGFzczogZnVuY3Rpb24oKSB7CiAgICAgICAgZm9yICh2YXIgZTIgPSB0aGlzLmRlY29kZXIsIF8gPSB0aGlzLndpZHRoLCB0MiA9IHRoaXMuaGVpZ2h0LCBCMiA9IHRoaXMubmVpZ2hib3JzU2lnbmlmaWNhbmNlLCBWMiA9IHRoaXMuY29lZmZpY2VudHNNYWduaXR1ZGUsIHkyID0gdGhpcy5jb2VmZmljZW50c1NpZ24sIEEyID0gdGhpcy5jb250ZXh0cywgbDIgPSB0aGlzLmNvbnRleHRMYWJlbFRhYmxlLCBhMiA9IHRoaXMuYml0c0RlY29kZWQsIEoyID0gdGhpcy5wcm9jZXNzaW5nRmxhZ3MsIGoyID0gMSwgSzIgPSAyLCBiMiA9IF8sIFQyID0gXyAqIDIsIHcwID0gXyAqIDMsICQyLCBIMiA9IDA7IEgyIDwgdDI7IEgyID0gJDIpIHsKICAgICAgICAgICQyID0gTWF0aC5taW4oSDIgKyA0LCB0Mik7CiAgICAgICAgICBmb3IgKHZhciBGMCA9IEgyICogXywgbTAgPSBIMiArIDMgPCB0MiwgUzAgPSAwOyBTMCA8IF87IFMwKyspIHsKICAgICAgICAgICAgdmFyIHYwID0gRjAgKyBTMCwgRDAgPSBtMCAmJiBKMlt2MF0gPT09IDAgJiYgSjJbdjAgKyBiMl0gPT09IDAgJiYgSjJbdjAgKyBUMl0gPT09IDAgJiYgSjJbdjAgKyB3MF0gPT09IDAgJiYgQjJbdjBdID09PSAwICYmIEIyW3YwICsgYjJdID09PSAwICYmIEIyW3YwICsgVDJdID09PSAwICYmIEIyW3YwICsgdzBdID09PSAwLCAkMCA9IDAsIEcwID0gdjAsIG8xID0gSDIsIEMxOwogICAgICAgICAgICBpZiAoRDApIHsKICAgICAgICAgICAgICB2YXIgTTEgPSBlMi5yZWFkQml0KAogICAgICAgICAgICAgICAgQTIsCiAgICAgICAgICAgICAgICBJMgogICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgaWYgKCFNMSkgewogICAgICAgICAgICAgICAgYTJbdjBdKyssIGEyW3YwICsgYjJdKyssIGEyW3YwICsgVDJdKyssIGEyW3YwICsgdzBdKys7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgJDAgPSBlMi5yZWFkQml0KEEyLCBiKSA8PCAxIHwgZTIucmVhZEJpdChBMiwgYiksICQwICE9PSAwICYmIChvMSA9IEgyICsgJDAsIEcwICs9ICQwICogXyksIEMxID0gdGhpcy5kZWNvZGVTaWduQml0KG8xLCBTMCwgRzApLCB5MltHMF0gPSBDMSwgVjJbRzBdID0gMSwgdGhpcy5zZXROZWlnaGJvcnNTaWduaWZpY2FuY2UobzEsIFMwLCBHMCksIEoyW0cwXSB8PSBLMiwgRzAgPSB2MDsKICAgICAgICAgICAgICBmb3IgKHZhciBGMSA9IEgyOyBGMSA8PSBvMTsgRjErKywgRzAgKz0gXykKICAgICAgICAgICAgICAgIGEyW0cwXSsrOwogICAgICAgICAgICAgICQwKys7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZm9yIChvMSA9IEgyICsgJDA7IG8xIDwgJDI7IG8xKyssIEcwICs9IF8pCiAgICAgICAgICAgICAgaWYgKCEoVjJbRzBdIHx8IEoyW0cwXSAmIGoyKSkgewogICAgICAgICAgICAgICAgdmFyIFMxID0gbDJbQjJbRzBdXSwgczEgPSBlMi5yZWFkQml0KEEyLCBTMSk7CiAgICAgICAgICAgICAgICBzMSA9PT0gMSAmJiAoQzEgPSB0aGlzLmRlY29kZVNpZ25CaXQobzEsIFMwLCBHMCksIHkyW0cwXSA9IEMxLCBWMltHMF0gPSAxLCB0aGlzLnNldE5laWdoYm9yc1NpZ25pZmljYW5jZShvMSwgUzAsIEcwKSwgSjJbRzBdIHw9IEsyKSwgYTJbRzBdKys7CiAgICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgY2hlY2tTZWdtZW50YXRpb25TeW1ib2w6IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBlMiA9IHRoaXMuZGVjb2RlciwgXyA9IHRoaXMuY29udGV4dHMsIHQyID0gZTIucmVhZEJpdChfLCBiKSA8PCAzIHwgZTIucmVhZEJpdChfLCBiKSA8PCAyIHwgZTIucmVhZEJpdChfLCBiKSA8PCAxIHwgZTIucmVhZEJpdChfLCBiKTsKICAgICAgICBpZiAodDIgIT09IDEwKQogICAgICAgICAgdGhyb3cgbmV3IEUxKCJJbnZhbGlkIHNlZ21lbnRhdGlvbiBzeW1ib2wiKTsKICAgICAgfQogICAgfSwgaTI7CiAgfSgpLCBVMSA9IGZ1bmN0aW9uKCkgewogICAgZnVuY3Rpb24gYigpIHsKICAgIH0KICAgIHJldHVybiBiLnByb3RvdHlwZS5jYWxjdWxhdGUgPSBmdW5jdGlvbihULCBMLCBaMikgewogICAgICBmb3IgKHZhciBpMiA9IFRbMF0sICQgPSAxLCBlMiA9IFQubGVuZ3RoOyAkIDwgZTI7ICQrKykKICAgICAgICBpMiA9IHRoaXMuaXRlcmF0ZShpMiwgVFskXSwgTCwgWjIpOwogICAgICByZXR1cm4gaTI7CiAgICB9LCBiLnByb3RvdHlwZS5leHRlbmQgPSBmdW5jdGlvbihULCBMLCBaMikgewogICAgICB2YXIgaTIgPSBMIC0gMSwgJCA9IEwgKyAxLCBlMiA9IEwgKyBaMiAtIDIsIF8gPSBMICsgWjI7CiAgICAgIFRbaTItLV0gPSBUWyQrK10sIFRbXysrXSA9IFRbZTItLV0sIFRbaTItLV0gPSBUWyQrK10sIFRbXysrXSA9IFRbZTItLV0sIFRbaTItLV0gPSBUWyQrK10sIFRbXysrXSA9IFRbZTItLV0sIFRbaTJdID0gVFskXSwgVFtfXSA9IFRbZTJdOwogICAgfSwgYi5wcm90b3R5cGUuaXRlcmF0ZSA9IGZ1bmN0aW9uKFQsIEwsIFoyLCBpMikgewogICAgICB2YXIgJCA9IFQud2lkdGgsIGUyID0gVC5oZWlnaHQsIF8gPSBULml0ZW1zLCB0MiA9IEwud2lkdGgsIEIyID0gTC5oZWlnaHQsIFYyID0gTC5pdGVtcywgeTIsIEEyLCBsMiwgYTIsIEoyLCBqMjsKICAgICAgZm9yIChsMiA9IDAsIHkyID0gMDsgeTIgPCBlMjsgeTIrKykKICAgICAgICBmb3IgKGEyID0geTIgKiAyICogdDIsIEEyID0gMDsgQTIgPCAkOyBBMisrLCBsMisrLCBhMiArPSAyKQogICAgICAgICAgVjJbYTJdID0gX1tsMl07CiAgICAgIF8gPSBULml0ZW1zID0gbnVsbDsKICAgICAgdmFyIEsyID0gNCwgYjIgPSBuZXcgRmxvYXQzMkFycmF5KHQyICsgMiAqIEsyKTsKICAgICAgaWYgKHQyID09PSAxKSB7CiAgICAgICAgaWYgKFoyICYgMSkKICAgICAgICAgIGZvciAoajIgPSAwLCBsMiA9IDA7IGoyIDwgQjI7IGoyKyssIGwyICs9IHQyKQogICAgICAgICAgICBWMltsMl0gKj0gMC41OwogICAgICB9IGVsc2UKICAgICAgICBmb3IgKGoyID0gMCwgbDIgPSAwOyBqMiA8IEIyOyBqMisrLCBsMiArPSB0MikKICAgICAgICAgIGIyLnNldChWMi5zdWJhcnJheShsMiwgbDIgKyB0MiksIEsyKSwgdGhpcy5leHRlbmQoYjIsIEsyLCB0MiksIHRoaXMuZmlsdGVyKGIyLCBLMiwgdDIpLCBWMi5zZXQoCiAgICAgICAgICAgIGIyLnN1YmFycmF5KEsyLCBLMiArIHQyKSwKICAgICAgICAgICAgbDIKICAgICAgICAgICk7CiAgICAgIHZhciBUMiA9IDE2LCB3MCA9IFtdOwogICAgICBmb3IgKHkyID0gMDsgeTIgPCBUMjsgeTIrKykKICAgICAgICB3MC5wdXNoKG5ldyBGbG9hdDMyQXJyYXkoQjIgKyAyICogSzIpKTsKICAgICAgdmFyICQyLCBIMiA9IDA7CiAgICAgIGlmIChUID0gSzIgKyBCMiwgQjIgPT09IDEpIHsKICAgICAgICBpZiAoaTIgJiAxKQogICAgICAgICAgZm9yIChKMiA9IDA7IEoyIDwgdDI7IEoyKyspCiAgICAgICAgICAgIFYyW0oyXSAqPSAwLjU7CiAgICAgIH0gZWxzZQogICAgICAgIGZvciAoSjIgPSAwOyBKMiA8IHQyOyBKMisrKSB7CiAgICAgICAgICBpZiAoSDIgPT09IDApIHsKICAgICAgICAgICAgZm9yIChUMiA9IE1hdGgubWluKHQyIC0gSjIsIFQyKSwgbDIgPSBKMiwgYTIgPSBLMjsgYTIgPCBUOyBsMiArPSB0MiwgYTIrKykKICAgICAgICAgICAgICBmb3IgKCQyID0gMDsgJDIgPCBUMjsgJDIrKykKICAgICAgICAgICAgICAgIHcwWyQyXVthMl0gPSBWMltsMiArICQyXTsKICAgICAgICAgICAgSDIgPSBUMjsKICAgICAgICAgIH0KICAgICAgICAgIEgyLS07CiAgICAgICAgICB2YXIgRjAgPSB3MFtIMl07CiAgICAgICAgICBpZiAodGhpcy5leHRlbmQoRjAsIEsyLCBCMiksIHRoaXMuZmlsdGVyKEYwLCBLMiwgQjIpLCBIMiA9PT0gMCkKICAgICAgICAgICAgZm9yIChsMiA9IEoyIC0gVDIgKyAxLCBhMiA9IEsyOyBhMiA8IFQ7IGwyICs9IHQyLCBhMisrKQogICAgICAgICAgICAgIGZvciAoJDIgPSAwOyAkMiA8IFQyOyAkMisrKQogICAgICAgICAgICAgICAgVjJbbDIgKyAkMl0gPSB3MFskMl1bYTJdOwogICAgICAgIH0KICAgICAgcmV0dXJuIHsKICAgICAgICB3aWR0aDogdDIsCiAgICAgICAgaGVpZ2h0OiBCMiwKICAgICAgICBpdGVtczogVjIKICAgICAgfTsKICAgIH0sIGI7CiAgfSgpLCBpaSA9IGZ1bmN0aW9uKCkgewogICAgZnVuY3Rpb24gYigpIHsKICAgICAgVTEuY2FsbCh0aGlzKTsKICAgIH0KICAgIHJldHVybiBiLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVTEucHJvdG90eXBlKSwgYi5wcm90b3R5cGUuZmlsdGVyID0gZnVuY3Rpb24oVCwgTCwgWjIpIHsKICAgICAgdmFyIGkyID0gWjIgPj4gMTsKICAgICAgTCA9IEwgfCAwOwogICAgICB2YXIgJCwgZTIsIF8sIHQyLCBCMiA9IC0xLjU4NjEzNDM0MjA1OTkyNCwgVjIgPSAtMC4wNTI5ODAxMTg1NzI5NjEsIHkyID0gMC44ODI5MTEwNzU1MzA5MzQsIEEyID0gMC40NDM1MDY4NTIwNDM5NzEsIGwyID0gMS4yMzAxNzQxMDQ5MTQwMDEsIGEyID0gMSAvIGwyOwogICAgICBmb3IgKCQgPSBMIC0gMywgZTIgPSBpMiArIDQ7IGUyLS07ICQgKz0gMikKICAgICAgICBUWyRdICo9IGEyOwogICAgICBmb3IgKCQgPSBMIC0gMiwgXyA9IEEyICogVFskIC0gMV0sIGUyID0gaTIgKyAzOyBlMi0tICYmICh0MiA9IEEyICogVFskICsgMV0sIFRbJF0gPSBsMiAqIFRbJF0gLSBfIC0gdDIsIGUyLS0pOyAkICs9IDIpCiAgICAgICAgJCArPSAyLCBfID0gQTIgKiBUWyQgKyAxXSwgVFskXSA9IGwyICogVFskXSAtIF8gLSB0MjsKICAgICAgZm9yICgkID0gTCAtIDEsIF8gPSB5MiAqIFRbJCAtIDFdLCBlMiA9IGkyICsgMjsgZTItLSAmJiAodDIgPSB5MiAqIFRbJCArIDFdLCBUWyRdIC09IF8gKyB0MiwgZTItLSk7ICQgKz0gMikKICAgICAgICAkICs9IDIsIF8gPSB5MiAqIFRbJCArIDFdLCBUWyRdIC09IF8gKyB0MjsKICAgICAgZm9yICgkID0gTCwgXyA9IFYyICogVFskIC0gMV0sIGUyID0gaTIgKyAxOyBlMi0tICYmICh0MiA9IFYyICogVFskICsgMV0sIFRbJF0gLT0gXyArIHQyLCBlMi0tKTsgJCArPSAyKQogICAgICAgICQgKz0gMiwgXyA9IFYyICogVFskICsgMV0sIFRbJF0gLT0gXyArIHQyOwogICAgICBpZiAoaTIgIT09IDApCiAgICAgICAgZm9yICgkID0gTCArIDEsIF8gPSBCMiAqIFRbJCAtIDFdLCBlMiA9IGkyOyBlMi0tICYmICh0MiA9IEIyICogVFskICsgMV0sIFRbJF0gLT0gXyArIHQyLCBlMi0tKTsgJCArPSAyKQogICAgICAgICAgJCArPSAyLCBfID0gQjIgKiBUWyQgKyAxXSwgVFskXSAtPSBfICsgdDI7CiAgICB9LCBiOwogIH0oKSwgVzEgPSBmdW5jdGlvbigpIHsKICAgIGZ1bmN0aW9uIGIoKSB7CiAgICAgIFUxLmNhbGwodGhpcyk7CiAgICB9CiAgICByZXR1cm4gYi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFUxLnByb3RvdHlwZSksIGIucHJvdG90eXBlLmZpbHRlciA9IGZ1bmN0aW9uKFQsIEwsIFoyKSB7CiAgICAgIHZhciBpMiA9IFoyID4+IDE7CiAgICAgIEwgPSBMIHwgMDsKICAgICAgdmFyICQsIGUyOwogICAgICBmb3IgKCQgPSBMLCBlMiA9IGkyICsgMTsgZTItLTsgJCArPSAyKQogICAgICAgIFRbJF0gLT0gVFskIC0gMV0gKyBUWyQgKyAxXSArIDIgPj4gMjsKICAgICAgZm9yICgkID0gTCArIDEsIGUyID0gaTI7IGUyLS07ICQgKz0gMikKICAgICAgICBUWyRdICs9IFRbJCAtIDFdICsgVFskICsgMV0gPj4gMTsKICAgIH0sIGI7CiAgfSgpOwogIHJldHVybiBmMDsKfSgpLCB4dCA9IHsgSnB4SW1hZ2U6IFB0IH07CmNvbnN0IHsgSnB4SW1hZ2U6IFR0IH0gPSB4dDsKdmFyIF9mID0geyBKcHhJbWFnZTogVHQgfSwgenQgPSAvKiBAX19QVVJFX18gKi8gTGYoX2YpLCBkdCA9IC8qIEBfX1BVUkVfXyAqLyBFdCh7CiAgX19wcm90b19fOiBudWxsLAogIGRlZmF1bHQ6IHp0Cn0sIFtfZl0pLCBiZiA9IHsgZXhwb3J0czoge30gfSwgS3QgPSB7fSwganQgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmZyZWV6ZSh7CiAgX19wcm90b19fOiBudWxsLAogIGRlZmF1bHQ6IEt0Cn0pLCBMdCA9IC8qIEBfX1BVUkVfXyAqLyBEdChqdCk7CihmdW5jdGlvbihPMiwgdTApIHsKICB2YXIgZjAgPSAoKCkgPT4gewogICAgdmFyIEIwOwogICAgdmFyIGwwID0gdHlwZW9mIGRvY3VtZW50IDwgInUiID8gKEIwID0gZG9jdW1lbnQuY3VycmVudFNjcmlwdCkgPT0gbnVsbCA/IHZvaWQgMCA6IEIwLnNyYyA6IHZvaWQgMDsKICAgIHJldHVybiB0eXBlb2YgX19maWxlbmFtZSA8ICJ1IiAmJiAobDAgPSBsMCB8fCBfX2ZpbGVuYW1lKSwgZnVuY3Rpb24oWjAgPSB7fSkgewogICAgICB2YXIgczAsIEMyID0gWjAsIFEwLCBWMSwgaWUgPSBuZXcgUHJvbWlzZSgoViwgWSkgPT4gewogICAgICAgIFEwID0gViwgVjEgPSBZOwogICAgICB9KSwgWDEgPSB0eXBlb2Ygd2luZG93ID09ICJvYmplY3QiLCB1MSA9IHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSA8ICJ1IiwgSzAgPSB0eXBlb2YgcHJvY2VzcyA9PSAib2JqZWN0IiAmJiB0eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucyA9PSAib2JqZWN0IiAmJiB0eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlID09ICJzdHJpbmciICYmIHByb2Nlc3MudHlwZSAhPSAicmVuZGVyZXIiLCBYMCA9IE9iamVjdC5hc3NpZ24oe30sIEMyKSwgUjAgPSAiLi90aGlzLnByb2dyYW0iLCBBMSA9ICIiOwogICAgICBmdW5jdGlvbiBTaShWKSB7CiAgICAgICAgcmV0dXJuIEMyLmxvY2F0ZUZpbGUgPyBDMi5sb2NhdGVGaWxlKFYsIEExKSA6IEExICsgVjsKICAgICAgfQogICAgICB2YXIgRWUsIHZlOwogICAgICBpZiAoSzApIHsKICAgICAgICB2YXIgZWkgPSBMdDsKICAgICAgICBBMSA9IF9fZGlybmFtZSArICIvIiwgdmUgPSAoVikgPT4gewogICAgICAgICAgViA9IEgyKFYpID8gbmV3IFVSTChWKSA6IFY7CiAgICAgICAgICB2YXIgWSA9IGVpLnJlYWRGaWxlU3luYyhWKTsKICAgICAgICAgIHJldHVybiBZOwogICAgICAgIH0sIEVlID0gYXN5bmMgKFYsIFkgPSAhMCkgPT4gewogICAgICAgICAgViA9IEgyKFYpID8gbmV3IFVSTChWKSA6IFY7CiAgICAgICAgICB2YXIgUyA9IGVpLnJlYWRGaWxlU3luYyhWLCBZID8gdm9pZCAwIDogInV0ZjgiKTsKICAgICAgICAgIHJldHVybiBTOwogICAgICAgIH0sICFDMi50aGlzUHJvZ3JhbSAmJiBwcm9jZXNzLmFyZ3YubGVuZ3RoID4gMSAmJiAoUjAgPSBwcm9jZXNzLmFyZ3ZbMV0ucmVwbGFjZSgvXFwvZywgIi8iKSksIHByb2Nlc3MuYXJndi5zbGljZSgyKTsKICAgICAgfSBlbHNlIChYMSB8fCB1MSkgJiYgKHUxID8gQTEgPSBzZWxmLmxvY2F0aW9uLmhyZWYgOiB0eXBlb2YgZG9jdW1lbnQgPCAidSIgJiYgZG9jdW1lbnQuY3VycmVudFNjcmlwdCAmJiAoQTEgPSBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYyksIGwwICYmIChBMSA9IGwwKSwgQTEuc3RhcnRzV2l0aCgiYmxvYjoiKSA/IEExID0gIiIgOiBBMSA9IEExLnN1YnN0cigwLCBBMS5yZXBsYWNlKC9bPyNdLiovLCAiIikubGFzdEluZGV4T2YoIi8iKSArIDEpLCB1MSAmJiAodmUgPSAoVikgPT4gewogICAgICAgIHZhciBZID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CiAgICAgICAgcmV0dXJuIFkub3BlbigiR0VUIiwgViwgITEpLCBZLnJlc3BvbnNlVHlwZSA9ICJhcnJheWJ1ZmZlciIsIFkuc2VuZChudWxsKSwgbmV3IFVpbnQ4QXJyYXkoWS5yZXNwb25zZSk7CiAgICAgIH0pLCBFZSA9IGFzeW5jIChWKSA9PiB7CiAgICAgICAgaWYgKEgyKFYpKQogICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChTLCBLKSA9PiB7CiAgICAgICAgICAgIHZhciByMiA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwogICAgICAgICAgICByMi5vcGVuKCJHRVQiLCBWLCAhMCksIHIyLnJlc3BvbnNlVHlwZSA9ICJhcnJheWJ1ZmZlciIsIHIyLm9ubG9hZCA9ICgpID0+IHsKICAgICAgICAgICAgICBpZiAocjIuc3RhdHVzID09IDIwMCB8fCByMi5zdGF0dXMgPT0gMCAmJiByMi5yZXNwb25zZSkgewogICAgICAgICAgICAgICAgUyhyMi5yZXNwb25zZSk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIEsocjIuc3RhdHVzKTsKICAgICAgICAgICAgfSwgcjIub25lcnJvciA9IEssIHIyLnNlbmQobnVsbCk7CiAgICAgICAgICB9KTsKICAgICAgICB2YXIgWSA9IGF3YWl0IGZldGNoKFYsIHsgY3JlZGVudGlhbHM6ICJzYW1lLW9yaWdpbiIgfSk7CiAgICAgICAgaWYgKFkub2spCiAgICAgICAgICByZXR1cm4gWS5hcnJheUJ1ZmZlcigpOwogICAgICAgIHRocm93IG5ldyBFcnJvcihZLnN0YXR1cyArICIgOiAiICsgWS51cmwpOwogICAgICB9KTsKICAgICAgdmFyIE5pID0gQzIucHJpbnQgfHwgY29uc29sZS5sb2cuYmluZChjb25zb2xlKSwgTDEgPSBDMi5wcmludEVyciB8fCBjb25zb2xlLmVycm9yLmJpbmQoY29uc29sZSk7CiAgICAgIE9iamVjdC5hc3NpZ24oQzIsIFgwKSwgWDAgPSBudWxsLCBDMi5hcmd1bWVudHMgJiYgQzIuYXJndW1lbnRzLCBDMi50aGlzUHJvZ3JhbSAmJiAoUjAgPSBDMi50aGlzUHJvZ3JhbSk7CiAgICAgIHZhciByZSA9IEMyLndhc21CaW5hcnksIEQxID0geyBNZW1vcnk6IGZ1bmN0aW9uKFYpIHsKICAgICAgICB0aGlzLmJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihWLmluaXRpYWwgKiA2NTUzNik7CiAgICAgIH0sIE1vZHVsZTogZnVuY3Rpb24oVikgewogICAgICB9LCBJbnN0YW5jZTogZnVuY3Rpb24oViwgWSkgewogICAgICAgIHRoaXMuZXhwb3J0cyA9IC8vIEVNU0NSSVBURU5fU1RBUlRfQVNNCiAgICAgICAgZnVuY3Rpb24oSykgewogICAgICAgICAgZnVuY3Rpb24gcjIoVjApIHsKICAgICAgICAgICAgcmV0dXJuIFYwLnNldCA9IGZ1bmN0aW9uKGowLCBGKSB7CiAgICAgICAgICAgICAgdGhpc1tqMF0gPSBGOwogICAgICAgICAgICB9LCBWMC5nZXQgPSBmdW5jdGlvbihqMCkgewogICAgICAgICAgICAgIHJldHVybiB0aGlzW2owXTsKICAgICAgICAgICAgfSwgVjA7CiAgICAgICAgICB9CiAgICAgICAgICBmb3IgKHZhciBNLCBXMiA9IG5ldyBVaW50OEFycmF5KDEyMyksIHMyID0gMjU7IHMyID49IDA7IC0tczIpCiAgICAgICAgICAgIFcyWzQ4ICsgczJdID0gNTIgKyBzMiwgVzJbNjUgKyBzMl0gPSBzMiwgVzJbOTcgKyBzMl0gPSAyNiArIHMyOwogICAgICAgICAgVzJbNDNdID0gNjIsIFcyWzQ3XSA9IDYzOwogICAgICAgICAgZnVuY3Rpb24gTihWMCwgajAsIEYpIHsKICAgICAgICAgICAgZm9yICh2YXIgdTIsIGUsIEkgPSAwLCBHMiA9IGowLCBkID0gRi5sZW5ndGgsIEcgPSBqMCArIChkICogMyA+PiAyKSAtIChGW2QgLSAyXSA9PSAiPSIpIC0gKEZbZCAtIDFdID09ICI9Iik7IEkgPCBkOyBJICs9IDQpCiAgICAgICAgICAgICAgdTIgPSBXMltGLmNoYXJDb2RlQXQoSSArIDEpXSwgZSA9IFcyW0YuY2hhckNvZGVBdChJICsgMildLCBWMFtHMisrXSA9IFcyW0YuY2hhckNvZGVBdChJKV0gPDwgMiB8IHUyID4+IDQsIEcyIDwgRyAmJiAoVjBbRzIrK10gPSB1MiA8PCA0IHwgZSA+PiAyKSwgRzIgPCBHICYmIChWMFtHMisrXSA9IGUgPDwgNiB8IFcyW0YuY2hhckNvZGVBdChJICsgMyldKTsKICAgICAgICAgIH0KICAgICAgICAgIGZ1bmN0aW9uIE4yKFYwKSB7CiAgICAgICAgICAgIE4oTSwgMTAyNCwgImMyVjBVWFZoYkdsMGVRQmpZVzV1YjNRZ1lXeHNiMk5oZEdVZ2IzQnFYM1JqWkY5elpXZGZaR0YwWVY5amFIVnVhMTkwS2lCaGNuSmhlUUJWYVc1ME9FTnNZVzF3WldSQmNuSmhlUUF0S3lBZ0lEQllNSGdBTFRCWUt6QllJREJZTFRCNEt6QjRJREI0QUhWdWMybG5ibVZrSUhOb2IzSjBBR052YlhCdmJtVnVkRU52ZFc1MEFGQnZhVzUwQUhWdWMybG5ibVZrSUdsdWRBQm9aV2xuYUhRQWMyVjBWR2xzWlU5bVpuTmxkQUJuWlhSVWFXeGxUMlptYzJWMEFITmxkRWx0WVdkbFQyWm1jMlYwQUdkbGRFbHRZV2RsVDJabWMyVjBBSE5sZEZCeVpXTnBibU4wQUdac2IyRjBBSFZwYm5RMk5GOTBBSE5sZEU1MWJWQnlaV05wYm1OMGN3Qm5aWFJPZFcxTVlYbGxjbk1BYzJWMFJHVmpiMjF3YjNOcGRHbHZibk1BWjJWMFRuVnRSR1ZqYjIxd2IzTnBkR2x2Ym5NQWMyVjBRbXh2WTJ0RWFXMWxibk5wYjI1ekFHZGxkRUpzYjJOclJHbHRaVzV6YVc5dWN3QWxjeVZ6QUZ0RlVsSlBVbDBnSlhNQVcwbE9SazlkSUNWekFGdFhRVkpPU1U1SFhTQWxjd0IyWldOMGIzSUFaMlYwUlc1amIyUmxaRUoxWm1abGNnQm5aWFJFWldOdlpHVmtRblZtWm1WeUFITmxkRkJ5YjJkeVpYTnphVzl1VDNKa1pYSUFaMlYwVUhKdlozSmxjM05wYjI1UGNtUmxjZ0JLTWt0RmJtTnZaR1Z5QUZ0RlVsSlBVbDBnYjNCcVgyUmxZMjl0Y0hKbGMzTTZJR1poYVd4bFpDQjBieUJ6WlhSMWNDQjBhR1VnWkdWamIyUmxjZ0JLTWt0RVpXTnZaR1Z5QUZ0RlVsSlBVbDBnYjNCcVgyUmxZMjl0Y0hKbGMzTTZJR1poYVd4bFpDQjBieUJ5WldGa0lIUm9aU0JvWldGa1pYSUFjbVZoWkVobFlXUmxjZ0IxYm5OcFoyNWxaQ0JqYUdGeUFDOXliMjkwTDNKbGNHOHZjR0ZqYTJGblpYTXZiM0JsYm1wd1pXY3ZjM0pqTDBveVMwUmxZMjlrWlhJdWFIQndBSE5sZEVOdmJYQnlaWE56YVc5dVVtRjBhVzhBWjJWMFJuSmhiV1ZKYm1adkFHUmxZMjlrWlZOMVlsSmxjMjlzZFhScGIyNEFjM1JrT2pwbGVHTmxjSFJwYjI0QVoyVjBWbVZ5YzJsdmJnQnVZVzRBWW05dmJBQmpZV3hqZFd4aGRHVlRhWHBsUVhSRVpXTnZiWEJ2YzJsMGFXOXVUR1YyWld3QVltRmtYMkZ5Y21GNVgyNWxkMTlzWlc1bmRHZ0FLbXhmZEdsc1pWOXNaVzRnUGlCVlNVNVVYMDFCV0NBdElFOVFTbDlEVDAxTlQwNWZRMEpNUzE5RVFWUkJYMFZZVkZKQklDMGdjRjlxTW1zdFBtMWZjM0JsWTJsbWFXTmZjR0Z5WVcwdWJWOWtaV052WkdWeUxtMWZjMjkwWDJ4bGJtZDBhQUIzYVdSMGFBQjFibk5wWjI1bFpDQnNiMjVuQUhOMFpEbzZkM04wY21sdVp3QmlZWE5wWTE5emRISnBibWNBYzNSa09qcHpkSEpwYm1jQWMzUmtPanAxTVRaemRISnBibWNBYzNSa09qcDFNekp6ZEhKcGJtY0FhVzVtQUhObGRGUnBiR1ZUYVhwbEFHZGxkRlJwYkdWVGFYcGxBR0pwZEhOUVpYSlRZVzF3YkdVQWMyVjBSRzkzYmxOaGJYQnNaUUJrYjNWaWJHVUFaMlYwU1hOU1pYWmxjbk5wWW14bEFFbHVkbUZzYVdRZ1lXTmpaWE56SUhSdklIQnBMVDVwYm1Oc2RXUmxBR1Z1WTI5a1pRQmtaV052WkdVQVoyVjBRMjlzYjNKVGNHRmpaUUIyYjJsa0FFcFFSVWNnTWpBd01DQlFjbTltYVd4bExUTWdZVzVrSURRZ0tESnJMelJySUdSaklIQnliMlpwYkdVcElISmxjWFZwY21Wek9nb3hJSE5wYm1kc1pTQnhkV0ZzYVhSNUlHeGhlV1Z5TFQ0Z1RuVnRZbVZ5SUc5bUlHeGhlV1Z5Y3lCbWIzSmpaV1FnZEc4Z01TQW9jbUYwYUdWeUlIUm9ZVzRnSldRcENpMCtJRkpoZEdVZ2IyWWdkR2hsSUd4aGMzUWdiR0Y1WlhJZ0tDVXpMakZtS1NCM2FXeHNJR0psSUhWelpXUUFkVzV6YVdkdVpXUUFhWE5UYVdkdVpXUUFjM1JrT2pwaVlXUmZZV3hzYjJNQVFVeE1YME5RVlZNQVVFeFVQVmxGVXdCVVRFMDlXVVZUQUU5UVNsOU9WVTFmVkVoU1JVRkVVd0JRVEZROVRrOEFWRXhOUFU1UEFFNUJUZ0JKVGtZQWNGOXFNbXN0UG0xZmMzQmxZMmxtYVdOZmNHRnlZVzB1YlY5a1pXTnZaR1Z5TG0xZmMyOTBYMnhsYm1kMGFDQStJRlZKVGxSZlRVRllJQzBnVDFCS1gwTlBUVTFQVGw5RFFreExYMFJCVkVGZlJWaFVVa0VBWlcxelkzSnBjSFJsYmpvNmJXVnRiM0o1WDNacFpYYzhjMmh2Y25RK0FHVnRjMk55YVhCMFpXNDZPbTFsYlc5eWVWOTJhV1YzUEhWdWMybG5ibVZrSUhOb2IzSjBQZ0JsYlhOamNtbHdkR1Z1T2pwdFpXMXZjbmxmZG1sbGR6eHBiblErQUdWdGMyTnlhWEIwWlc0Nk9tMWxiVzl5ZVY5MmFXVjNQSFZ1YzJsbmJtVmtJR2x1ZEQ0QVpXMXpZM0pwY0hSbGJqbzZiV1Z0YjNKNVgzWnBaWGM4Wm14dllYUStBR1Z0YzJOeWFYQjBaVzQ2T20xbGJXOXllVjkyYVdWM1BIVnBiblE0WDNRK0FHVnRjMk55YVhCMFpXNDZPbTFsYlc5eWVWOTJhV1YzUEdsdWREaGZkRDRBWlcxelkzSnBjSFJsYmpvNmJXVnRiM0o1WDNacFpYYzhkV2x1ZERFMlgzUStBR1Z0YzJOeWFYQjBaVzQ2T20xbGJXOXllVjkyYVdWM1BHbHVkREUyWDNRK0FHVnRjMk55YVhCMFpXNDZPbTFsYlc5eWVWOTJhV1YzUEhWcGJuUTJORjkwUGdCbGJYTmpjbWx3ZEdWdU9qcHRaVzF2Y25sZmRtbGxkenhwYm5RMk5GOTBQZ0JsYlhOamNtbHdkR1Z1T2pwdFpXMXZjbmxmZG1sbGR6eDFhVzUwTXpKZmRENEFaVzF6WTNKcGNIUmxiam82YldWdGIzSjVYM1pwWlhjOGFXNTBNekpmZEQ0QVpXMXpZM0pwY0hSbGJqbzZiV1Z0YjNKNVgzWnBaWGM4WTJoaGNqNEFaVzF6WTNKcGNIUmxiam82YldWdGIzSjVYM1pwWlhjOGRXNXphV2R1WldRZ1kyaGhjajRBWlcxelkzSnBjSFJsYmpvNmJXVnRiM0o1WDNacFpYYzhjMmxuYm1Wa0lHTm9ZWEkrQUdWdGMyTnlhWEIwWlc0Nk9tMWxiVzl5ZVY5MmFXVjNQR3h2Ym1jK0FHVnRjMk55YVhCMFpXNDZPbTFsYlc5eWVWOTJhV1YzUEhWdWMybG5ibVZrSUd4dmJtYytBR1Z0YzJOeWFYQjBaVzQ2T20xbGJXOXllVjkyYVdWM1BHUnZkV0pzWlQ0QVVFeFVQUUJIVlVGU1JGOUNTVlJUUFFCVVRFMDlBQWtKQ1NCd2NtVmpZMmx1ZEhOcGVtVWdLSGNzYUNrOUFBa0pDU0J6ZEdWd2MybDZaWE1nS0cwc1pTazlBREl1TlM0d0FFWmhhV3hsWkNCMGJ5QmhiR3h2WTJGMFpTQnBiV0ZuWlNCb1pXRmtaWEl1QUZSb1pTQm5hWFpsYmlCMGFXeGxJR2x1WkdWNElHUnZaWE1nYm05MElHMWhkR05vTGdCVGFYcGxJRzFwYzIxaGRHTm9JR0psZEhkbFpXNGdkR2xzWlNCa1lYUmhJR0Z1WkNCelpXNTBJR1JoZEdFdUFFVnljbTl5SUdGc2JHOWpZWFJwYm1jZ2RHbHNaU0JqYjIxd2IyNWxiblFnWkdGMFlTNEFLRzUxYkd3cEFITjBaRG82WDE5c2FXSmpjSEJmZEd4elgyTnlaV0YwWlNncElHWmhhV3hsWkNCcGJpQmZYMk40WVY5MGFISmxZV1JmWVhSbGVHbDBLQ2tBVzBWU1VrOVNYU0J2Y0dwZlpHVmpiMjF3Y21WemN6b2dabUZwYkdWa0lIUnZJR1JsWTI5a1pTQjBhV3hsSVFBb0pXUXNKV1FwSUFBbGMzMEtBQWtKSUgwS0FGdEVSVlpkSUVSMWJYQWdZVzRnYVcxaFoyVmZZMjl0Y0Y5b1pXRmtaWElnYzNSeWRXTjBJSHNLQUZ0RVJWWmRJRVIxYlhBZ1lXNGdhVzFoWjJWZmFHVmhaR1Z5SUhOMGNuVmpkQ0I3Q2dCSmJXRm5aU0JwYm1adklIc0tBQWtnWkdWbVlYVnNkQ0IwYVd4bElIc0tBQ1Z6Q1NCamIyMXdiMjVsYm5RZ0pXUWdld29BQ1FrZ1kyOXRjQ0FsWkNCN0NnQUpJRlJwYkdVZ2FXNWtaWGc2SUhzS0FBa2dUV0Z5YTJWeUlHeHBjM1E2SUhzS0FFTnZaR1Z6ZEhKbFlXMGdhVzVrWlhnZ1puSnZiU0J0WVdsdUlHaGxZV1JsY2pvZ2V3b0FRMjlrWlhOMGNtVmhiU0JwYm1adklHWnliMjBnYldGcGJpQm9aV0ZrWlhJNklIc0tBRU5oYm01dmRDQmhiR3h2WTJGMFpTQnRaVzF2Y25rS0FGTjBjbVZoYlNCbGNuSnZjaUIzYUdsc1pTQjNjbWwwYVc1bklFcFFNaUJJWldGa1pYSWdZbTk0Q2dCVGRISmxZVzBnWlhKeWIzSWdkMmhwYkdVZ2NtVmhaR2x1WnlCS1VESWdTR1ZoWkdWeUlHSnZlQW9BUm05MWJtUWdZU0J0YVhOd2JHRmpaV1FnSnlWakpXTWxZeVZqSnlCaWIzZ2diM1YwYzJsa1pTQnFjREpvSUdKdmVBb0FUV0ZzWm05eWJXVmtJRXBRTWlCbWFXeGxJR1p2Y20xaGREb2dabWx5YzNRZ1ltOTRJRzExYzNRZ1ltVWdTbEJGUnlBeU1EQXdJSE5wWjI1aGRIVnlaU0JpYjNnS0FFMWhiR1p2Y20xbFpDQktVRElnWm1sc1pTQm1iM0p0WVhRNklITmxZMjl1WkNCaWIzZ2diWFZ6ZENCaVpTQm1hV3hsSUhSNWNHVWdZbTk0Q2dCT2IzUWdaVzV2ZFdkb0lHMWxiVzl5ZVNCMGJ5Qm9ZVzVrYkdVZ2FuQmxaekl3TURBZ1ltOTRDZ0JPYjNRZ1pXNXZkV2RvSUcxbGJXOXllU0IzYVhSb0lFWlVXVkFnUW05NENnQkJJRzFoY210bGNpQkpSQ0IzWVhNZ1pYaHdaV04wWldRZ0tEQjRabVl0TFNrZ2FXNXpkR1ZoWkNCdlppQWxMamg0Q2dBSkNTQnRZM1E5SlhnS0FBa0pDU0JqWW14cmMzUjVQU1VqZUFvQUNRa0pJR056ZEhrOUpTTjRDZ0FKQ1NCd2NtYzlKU040Q2dCSmJuUmxaMlZ5SUc5MlpYSm1iRzkzQ2dCdmNHcGZkREpmWlc1amIyUmxYM0JoWTJ0bGRDZ3BPaUJoWTJObGMzTnBibWNnY0hKbFkyNXZQU1YxSUQ0OUlDVjFDZ0JKYm5aaGJHbGtJR052YlhCdmJtVnVkQ0JwYm1SbGVEb2dKWFVLQUZOMGNtVmhiU0IwYjI4Z2MyaHZjblFLQUUxaGNtdGxjaUJvWVc1a2JHVnlJR1oxYm1OMGFXOXVJR1poYVd4bFpDQjBieUJ5WldGa0lIUm9aU0J0WVhKclpYSWdjMlZuYldWdWRBb0FUbTkwSUdWdWIzVm5hQ0J0WlcxdmNua2dabTl5SUdOMWNuSmxiblFnY0hKbFkybHVZM1FnWTI5a1pXSnNiMk5ySUdWc1pXMWxiblFLQUVWeWNtOXlJSGR5YVhScGJtY2dVMUJEYjJRZ1UxQkRiMk1nWld4bGJXVnVkQW9BUlhKeWIzSWdjbVZoWkdsdVp5QlRVRU52WkNCVFVFTnZZeUJsYkdWdFpXNTBDZ0JGY25KdmNpQnlaV0ZrYVc1bklGTlJZMlFnYjNJZ1UxRmpZeUJsYkdWdFpXNTBDZ0JGY25KdmNpQjNjbWwwYVc1bklGTlJZMlFnVTFGall5QmxiR1Z0Wlc1MENnQkJJRUpRUTBNZ2FHVmhaR1Z5SUdKdmVDQnBjeUJoZG1GcGJHRmliR1VnWVd4MGFHOTFaMmdnUWxCRElHZHBkbVZ1SUdKNUlIUm9aU0JKU0VSU0lHSnZlQ0FvSldRcElHbHVaR2xqWVhSbElHTnZiWEJ2Ym1WdWRITWdZbWwwSUdSbGNIUm9JR2x6SUdOdmJuTjBZVzUwQ2dCSmJuWmhiR2xrSUhScGJHVWdhR1ZwWjJoMENnQkZjbkp2Y2lCM2FYUm9JRk5KV2lCdFlYSnJaWEk2SUdsc2JHVm5ZV3dnZEdsc1pTQnZabVp6WlhRS0FFbHVkbUZzYVdRZ2NISmxZMmx1WTNRS0FFNXZkQ0JsYm05MVoyZ2diV1Z0YjNKNUlIUnZJR2hoYm1Sc1pTQmlZVzVrSUhCeVpXTnBiblJ6Q2dCR1lXbHNaV1FnZEc4Z1pHVmpiMlJsSUdGc2JDQjFjMlZrSUdOdmJYQnZibVZ1ZEhNS0FGTnBlbVVnYjJZZ1kyOWtaU0JpYkc5amF5QmtZWFJoSUdWNFkyVmxaSE1nYzNsemRHVnRJR3hwYldsMGN3b0FVMmw2WlNCdlppQjBhV3hsSUdSaGRHRWdaWGhqWldWa2N5QnplWE4wWlcwZ2JHbHRhWFJ6Q2dCbVlXbHNaV1FnZEc4Z1pXNWpiMlJsSUdsdFlXZGxPaUJ2Y0dwZmMzUmhjblJmWTI5dGNISmxjM01LQUdaaGFXeGxaQ0IwYnlCbGJtTnZaR1VnYVcxaFoyVTZJRzl3YWw5bGJtUmZZMjl0Y0hKbGMzTUtBRlJvWlNCa1pYTnBjbVZrSUcxaGVHbHRkVzBnWTI5a1pYTjBjbVZoYlNCemFYcGxJR2hoY3lCc2FXMXBkR1ZrQ21GMElHeGxZWE4wSUc5dVpTQnZaaUIwYUdVZ1pHVnphWEpsWkNCeGRXRnNhWFI1SUd4aGVXVnljd29BVG05MElHVnViM1ZuYUNCdFpXMXZjbmtnZEc4Z1lXeHNiMk5oZEdVZ2RHbHNaU0JqYjIxd2IyNWxiblFnWTI5a2FXNW5JSEJoY21GdFpYUmxjbk1LQUU1dmRDQmxibTkxWjJnZ2JXVnRiM0o1SUhSdklHRnNiRzlqWVhSbElIUnBiR1VnWTI5a2FXNW5JSEJoY21GdFpYUmxjbk1LQUVOaGJtNXZkQ0IwWVd0bElHbHVJR05vWVhKblpTQnRkV3gwYVhCc1pTQk5RMVFnYldGeWEyVnljd29BUTI5eWNuVndkR1ZrSUZCUVRTQnRZWEpyWlhKekNnQk9iM1FnWlc1dmRXZG9JRzFsYlc5eWVTQm1iM0lnZEdsc1pTQnlaWE52YkhWMGFXOXVjd29BUTJGdWJtOTBJSFJoYTJVZ2FXNGdZMmhoY21kbElHMTFiSFJwY0d4bElHTnZiR3hsWTNScGIyNXpDZ0JKYm5aaGJHbGtJRkJEVEZJZ1ltOTRMaUJTWlhCdmNuUnpJREFnY0dGc1pYUjBaU0JqYjJ4MWJXNXpDZ0JFWlhCeVpXTmhkR1ZrSUdacFpXeGtjeUJqY0Y5amFXNWxiV0VnYjNJZ1kzQmZjbk5wZWlCaGNtVWdkWE5sWkFwUWJHVmhjMlVnWTI5dWMybGtaWElnZFhOcGJtY2diMjVzZVNCMGFHVWdjbk5wZWlCbWFXVnNaQXBUWldVZ2IzQmxibXB3WldjdWFDQmtiMk4xYldWdWRHRjBhVzl1SUdadmNpQnRiM0psSUdSbGRHRnBiSE1LQUZkbElHUnZJRzV2ZENCemRYQndiM0owSUZKUFNTQnBiaUJrWldOdlpHbHVaeUJJVkNCamIyUmxZbXh2WTJ0ekNnQkRZVzV1YjNRZ2FHRnVaR3hsSUdKdmVDQnZaaUIxYm1SbFptbHVaV1FnYzJsNlpYTUtBRU5oYm01dmRDQjBZV3RsSUdsdUlHTm9ZWEpuWlNCamIyeHNaV04wYVc5dWN5QjNhWFJvYjNWMElITmhiV1VnYm5WdFltVnlJRzltSUdsdVpHbDRaWE1LQUVsdWRtRnNhV1FnZEdsc1pXTXRQbmRwYmw5NGVIZ2dkbUZzZFdWekNnQkRZVzV1YjNRZ2FHRnVaR3hsSUdKdmVDQnZaaUJzWlhOeklIUm9ZVzRnT0NCaWVYUmxjd29BUTJGdWJtOTBJR2hoYm1Sc1pTQllUQ0JpYjNnZ2IyWWdiR1Z6Y3lCMGFHRnVJREUySUdKNWRHVnpDZ0JEYjIxd2IyNWxiblFnYVc1a1pYZ2dKWFVnZFhObFpDQnpaWFpsY21Gc0lIUnBiV1Z6Q2dCT2IzUWdaVzV2ZFdkb0lHMWxiVzl5ZVNCMGJ5QmxibU52WkdVZ1lXeHNJSFJwYkdWekNnQk9kVzFpWlhJZ2IyWWdjbVZ6YjJ4MWRHbHZibk1nYVhNZ2RHOXZJR2hwWjJnZ2FXNGdZMjl0Y0dGeWFYTnZiaUIwYnlCMGFHVWdjMmw2WlNCdlppQjBhV3hsY3dvQVNXNTJZV3hwWkNCUVEweFNJR0p2ZUM0Z1VtVndiM0owY3lBbFpDQmxiblJ5YVdWekNnQk9iM1FnWlc1dmRXZG9JRzFsYlc5eWVTQjBieUJqY21WaGRHVWdWR0ZuTFhSeVpXVWdibTlrWlhNS0FFTmhibTV2ZENCMFlXdGxJR2x1SUdOb1lYSm5aU0J0WTNRZ1pHRjBZU0IzYVhSb2FXNGdiWFZzZEdsd2JHVWdUVU5VSUhKbFkyOXlaSE1LQUVOaGJtNXZkQ0JrWldOdlpHVWdkR2xzWlN3Z2JXVnRiM0o1SUdWeWNtOXlDZ0J2Y0dwZmFqSnJYMkZ3Y0d4NVgyNWlYM1JwYkdWZmNHRnlkSE5mWTI5eWNtVmpkR2x2YmlCbGNuSnZjZ29BVUhKdllteGxiU0IzYVhSb0lITnJhWEJ3YVc1bklFcFFSVWN5TURBd0lHSnZlQ3dnYzNSeVpXRnRJR1Z5Y205eUNnQlFjbTlpYkdWdElIZHBkR2dnY21WaFpHbHVaeUJLVUVWSE1qQXdNQ0JpYjNnc0lITjBjbVZoYlNCbGNuSnZjZ29BVlc1cmJtOTNiaUJ0WVhKclpYSUtBRTV2ZENCbGJtOTFaMmdnYldWdGIzSjVJSFJ2SUdGa1pDQjBiQ0J0WVhKclpYSUtBRTV2ZENCbGJtOTFaMmdnYldWdGIzSjVJSFJ2SUdGa1pDQnRhQ0J0WVhKclpYSUtBRTV2ZENCbGJtOTFaMmdnYldWdGIzSjVJR1p2Y2lCMGFHVWdVMGxhSUcxaGNtdGxjZ29BVG05MElHVnViM1ZuYUNCdFpXMXZjbmtnZEc4Z2RHRnJaU0JwYmlCamFHRnlaMlVnVTBsYUlHMWhjbXRsY2dvQVJYSnliM0lnY21WaFpHbHVaeUJRVUZRZ2JXRnlhMlZ5Q2dCT2IzUWdaVzV2ZFdkb0lHMWxiVzl5ZVNCMGJ5QnlaV0ZrSUZCUVZDQnRZWEpyWlhJS0FFVnljbTl5SUhKbFlXUnBibWNnVTA5VUlHMWhjbXRsY2dvQVRtOTBJR1Z1YjNWbmFDQmllWFJsY3lCcGJpQnZkWFJ3ZFhRZ1luVm1abVZ5SUhSdklIZHlhWFJsSUZOUFZDQnRZWEpyWlhJS0FFVnljbTl5SUhKbFlXUnBibWNnVUV4VUlHMWhjbXRsY2dvQVJYSnliM0lnY21WaFpHbHVaeUJOUTFRZ2JXRnlhMlZ5Q2dCT2IzUWdaVzV2ZFdkb0lHMWxiVzl5ZVNCMGJ5QjNjbWwwWlNCTlExUWdiV0Z5YTJWeUNnQk9iM1FnWlc1dmRXZG9JRzFsYlc5eWVTQjBieUJ5WldGa0lFMURWQ0J0WVhKclpYSUtBRTV2ZENCbGJtOTFaMmdnYzNCaFkyVWdabTl5SUdWNGNHVmpkR1ZrSUZOUFVDQnRZWEpyWlhJS0FFVjRjR1ZqZEdWa0lGTlBVQ0J0WVhKclpYSUtBRVZ5Y205eUlISmxZV1JwYm1jZ1RVTlBJRzFoY210bGNnb0FUbTkwSUdWdWIzVm5hQ0J0WlcxdmNua2dkRzhnZDNKcGRHVWdUVU5QSUcxaGNtdGxjZ29BUlhKeWIzSWdjbVZoWkdsdVp5QlNSMDRnYldGeWEyVnlDZ0JGY25KdmNpQnlaV0ZrYVc1bklGQlFUU0J0WVhKclpYSUtBRTV2ZENCbGJtOTFaMmdnYldWdGIzSjVJSFJ2SUhKbFlXUWdVRkJOSUcxaGNtdGxjZ29BVG05MElHVnViM1ZuYUNCdFpXMXZjbmtnZEc4Z2QzSnBkR1VnZEdobElFTlBUU0J0WVhKclpYSUtBRUVnYldGNGFXMTFiU0J2WmlBeE1Ea3lNU0IwYVd4bExYQmhjblJ6SUdGeVpTQnpkWEJ3YjNKMFpXUWdZM1Z5Y21WdWRHeDVJSGRvWlc0Z2QzSnBkR2x1WnlCVVRFMGdiV0Z5YTJWeUNnQkZjbkp2Y2lCeVpXRmthVzVuSUZSTVRTQnRZWEpyWlhJS0FFNXZkQ0JsYm05MVoyZ2diV1Z0YjNKNUlIUnZJSGR5YVhSbElGUk1UU0J0WVhKclpYSUtBRVZ5Y205eUlISmxZV1JwYm1jZ1VFeE5JRzFoY210bGNnb0FUbTkwSUdWdWIzVm5hQ0J6Y0dGalpTQm1iM0lnWlhod1pXTjBaV1FnUlZCSUlHMWhjbXRsY2dvQVJYaHdaV04wWldRZ1JWQklJRzFoY210bGNnb0FSWEp5YjNJZ2NtVmhaR2x1WnlCRFVrY2diV0Z5YTJWeUNnQk9iM1FnWlc1dmRXZG9JR0o1ZEdWeklHbHVJRzkxZEhCMWRDQmlkV1ptWlhJZ2RHOGdkM0pwZEdVZ1UwOUVJRzFoY210bGNnb0FWVzVyYm05M2JpQndjbTluY21WemMybHZiaUJ2Y21SbGNpQnBiaUJEVDBRZ2JXRnlhMlZ5Q2dCVmJtdHViM2R1SUZOamIyUWdkbUZzZFdVZ2FXNGdRMDlFSUcxaGNtdGxjZ29BUlhKeWIzSWdkM0pwZEdsdVp5QkRUMFFnYldGeWEyVnlDZ0JGY25KdmNpQnlaV0ZrYVc1bklFTlBSQ0J0WVhKclpYSUtBRTV2ZENCbGJtOTFaMmdnYldWdGIzSjVJSFJ2SUhkeWFYUmxJRU5QUkNCdFlYSnJaWElLQUVWeWNtOXlJSGR5YVhScGJtY2dVVU5FSUcxaGNtdGxjZ29BUlhKeWIzSWdjbVZoWkdsdVp5QlJRMFFnYldGeWEyVnlDZ0JPYjNRZ1pXNXZkV2RvSUcxbGJXOXllU0IwYnlCM2NtbDBaU0JSUTBRZ2JXRnlhMlZ5Q2dCRGNuSnZjaUJ5WldGa2FXNW5JRU5DUkNCdFlYSnJaWElLQUU1dmRDQmxibTkxWjJnZ2JXVnRiM0o1SUhSdklIZHlhWFJsSUVOQ1JDQnRZWEpyWlhJS0FFVnljbTl5SUhKbFlXUnBibWNnVUU5RElHMWhjbXRsY2dvQVRtOTBJR1Z1YjNWbmFDQnRaVzF2Y25rZ2RHOGdkM0pwZEdVZ1VFOURJRzFoY210bGNnb0FSWEp5YjNJZ2NtVmhaR2x1WnlCRFQwTWdiV0Z5YTJWeUNnQk9iM1FnWlc1dmRXZG9JRzFsYlc5eWVTQjBieUIzY21sMFpTQkRUME1nYldGeWEyVnlDZ0JGY25KdmNpQnlaV0ZrYVc1bklGRkRReUJ0WVhKclpYSUtBRTV2ZENCbGJtOTFaMmdnYldWdGIzSjVJSFJ2SUhkeWFYUmxJRkZEUXlCdFlYSnJaWElLQUVWeWNtOXlJSEpsWVdScGJtY2dUVU5ESUcxaGNtdGxjZ29BVG05MElHVnViM1ZuYUNCdFpXMXZjbmtnZEc4Z2QzSnBkR1VnVFVORElHMWhjbXRsY2dvQVRtOTBJR1Z1YjNWbmFDQnRaVzF2Y25rZ2RHOGdjbVZoWkNCTlEwTWdiV0Z5YTJWeUNnQk9iM1FnWlc1dmRXZG9JRzFsYlc5eWVTQjBieUJoYkd4dlkyRjBaU0IwWlcxd0lHSjFabVpsY2dvQVptRnBiR1ZrSUhSdklHVnVZMjlrWlNCcGJXRm5aVG9nYjNCcVgzTmxkSFZ3WDJWdVkyOWtaWElLQUVsdWRtRnNhV1FnYm5WdFltVnlJRzltSUdOdmJYQnZibVZ1ZEhNZ2MzQmxZMmxtYVdWa0lIZG9hV3hsSUhObGRIUnBibWNnZFhBZ1NsQXlJR1Z1WTI5a1pYSUtBRTV2ZENCbGJtOTFaMmdnYldWdGIzSjVJSFJ2SUhObGRIVndJSFJvWlNCS1VESWdaVzVqYjJSbGNnb0FUbTkwSUdWdWIzVm5hQ0J0WlcxdmNua2dkMmhsYmlCelpYUjFjQ0IwYUdVZ1NsQXlJR1Z1WTI5a1pYSUtBRTV2ZENCbGJtOTFaMmdnYldWdGIzSjVJSFJ2SUdOeVpXRjBaU0JVYVd4bElFTnZaR1Z5Q2dCeVpYRjFhWEpsWkNCVFNWb2diV0Z5YTJWeUlHNXZkQ0JtYjNWdVpDQnBiaUJ0WVdsdUlHaGxZV1JsY2dvQWNtVnhkV2x5WldRZ1EwOUVJRzFoY210bGNpQnViM1FnWm05MWJtUWdhVzRnYldGcGJpQm9aV0ZrWlhJS0FISmxjWFZwY21Wa0lGRkRSQ0J0WVhKclpYSWdibTkwSUdadmRXNWtJR2x1SUcxaGFXNGdhR1ZoWkdWeUNnQk9iM1FnWlc1dmRXZG9JRzFsYlc5eWVTQjBieUJvWVc1a2JHVWdhbkJsWnpJd01EQWdabWxzWlNCb1pXRmtaWElLQUU1dmRDQmxibTkxWjJnZ2JXVnRiM0o1SUhSdklISmxZV1FnYUdWaFpHVnlDZ0JGY25KdmNpQjNhWFJvSUVwUUlGTnBaMjVoZEhWeVpTQTZJR0poWkNCdFlXZHBZeUJ1ZFcxaVpYSUtBRWx1SUZOUFZDQnRZWEpyWlhJc0lGUlFVMjkwSUNnbFpDa2dhWE1nYm05MElIWmhiR2xrSUhKbFoyRnlaSE1nZEc4Z2RHaGxJR04xY25KbGJuUWdiblZ0WW1WeUlHOW1JSFJwYkdVdGNHRnlkQ0FvSldRcExDQm5hWFpwYm1jZ2RYQUtBRWx1SUZOUFZDQnRZWEpyWlhJc0lGUlFVMjkwSUNnbFpDa2dhWE1nYm05MElIWmhiR2xrSUhKbFoyRnlaSE1nZEc4Z2RHaGxJSEJ5WlhacGIzVnpJRzUxYldKbGNpQnZaaUIwYVd4bExYQmhjblFnS0NWa0tTd2daMmwyYVc1bklIVndDZ0JKYmlCVFQxUWdiV0Z5YTJWeUxDQlVVRk52ZENBb0pXUXBJR2x6SUc1dmRDQjJZV3hwWkNCeVpXZGhjbVJ6SUhSdklIUm9aU0JqZFhKeVpXNTBJRzUxYldKbGNpQnZaaUIwYVd4bExYQmhjblFnS0dobFlXUmxjaWtnS0NWa0tTd2daMmwyYVc1bklIVndDZ0IwYVd4bGN5QnlaWEYxYVhKbElHRjBJR3hsWVhOMElHOXVaU0J5WlhOdmJIVjBhVzl1Q2dCTllYSnJaWElnYVhNZ2JtOTBJR052YlhCc2FXRnVkQ0IzYVhSb0lHbDBjeUJ3YjNOcGRHbHZiZ29BVUhKdllteGxiU0IzYVhSb0lITmxaV3NnWm5WdVkzUnBiMjRLQUVWeWNtOXlJSEpsWVdScGJtY2dVMUJEYjJRZ1UxQkRiMk1nWld4bGJXVnVkQ3dnU1c1MllXeHBaQ0JqWW14cmR5OWpZbXhyYUNCamIyMWlhVzVoZEdsdmJnb0FTVzUyWVd4cFpDQnRkV3gwYVhCc1pTQmpiMjF3YjI1bGJuUWdkSEpoYm5ObWIzSnRZWFJwYjI0S0FFTmhibTV2ZENCMFlXdGxJR2x1SUdOb1lYSm5aU0JqYjJ4c1pXTjBhVzl1Y3lCdmRHaGxjaUIwYUdGdUlHRnljbUY1SUdSbFkyOXljbVZzWVhScGIyNEtBRTV2ZENCbGJtOTFaMmdnWW5sMFpYTWdkRzhnY21WaFpDQk9jSEJ0Q2dCaVlXUWdjR3hoWTJWa0lHcHdaV2NnWTI5a1pYTjBjbVZoYlFvQVJYSnliM0lnZDJocGJHVWdkM0pwZEdsdVp5Qm1kSGx3SUdSaGRHRWdkRzhnYzNSeVpXRnRDZ0FKSUUxaGFXNGdhR1ZoWkdWeUlITjBZWEowSUhCdmMybDBhVzl1UFNWc2JHa0tDU0JOWVdsdUlHaGxZV1JsY2lCbGJtUWdjRzl6YVhScGIyNDlKV3hzYVFvQVRXRnlhMlZ5SUhOcGVtVWdhVzVqYjI1emFYTjBaVzUwSUhkcGRHZ2djM1J5WldGdElHeGxibWQwYUFvQVZHbHNaU0J3WVhKMElHeGxibWQwYUNCemFYcGxJR2x1WTI5dWMybHpkR1Z1ZENCM2FYUm9JSE4wY21WaGJTQnNaVzVuZEdnS0FFbHVkbUZzYVdRZ2RHbHNaU0IzYVdSMGFBb0FZM0JmWm1sNFpXUmZZV3hzYjJNZ2MyVjBMQ0JpZFhRZ1kzQmZiV0YwY21salpTQnRhWE56YVc1bkNnQk9iM1FnWlc1dmRXZG9JRzFsYlc5eWVTQjBieUJoYkd4dlkyRjBaU0JqYjNCNUlHOW1JR052YlcxbGJuUWdjM1J5YVc1bkNnQk9iM1FnWlc1dmRXZG9JRzFsYlc5eWVTQjBieUJoYkd4dlkyRjBaU0JqYjIxdFpXNTBJSE4wY21sdVp3b0FRMkZ1Ym05MElIUmhhMlVnYVc0Z1kyaGhjbWRsSUcxMWJIUnBjR3hsSUdSaGRHRWdjM0JoYm01cGJtY0tBRVpoYVd4bFpDQjBieUJ6WlhSMWNDQnFNbXNnYldOMElHVnVZMjlrYVc1bkNnQlhjbTl1WnlCbWJHRm5DZ0IwWTNCZmNtRjBaWE5iSldSZFBTVm1JSE5vYjNWc1pDQmlaU0J6ZEhKcFkzUnNlU0JzWlhOelpYSWdkR2hoYmlCMFkzQmZjbUYwWlhOYkpXUmRQU1ZtQ2dCMFkzQmZjbUYwWlhOYkpXUmRQU1ZtSUNoamIzSnlaV04wWldRZ1lYTWdKV1lwSUhOb2IzVnNaQ0JpWlNCemRISnBZM1JzZVNCc1pYTnpaWElnZEdoaGJpQjBZM0JmY21GMFpYTmJKV1JkUFNWbUNnQjBZM0JmWkdsemRHOXlZWFJwYjFzbFpGMDlKV1lnYzJodmRXeGtJR0psSUhOMGNtbGpkR3g1SUdkeVpXRjBaWElnZEdoaGJpQjBZM0JmWkdsemRHOXlZWFJwYjFzbFpGMDlKV1lLQUVWeWNtOXlJSGRwZEdnZ1JsUlpVQ0J6YVdkdVlYUjFjbVVnUW05NElITnBlbVVLQUVWeWNtOXlJSGRwZEdnZ1NsQWdjMmxuYm1GMGRYSmxJRUp2ZUNCemFYcGxDZ0JKYm5aaGJHbGtJSEJ5WldOcGJtTjBJSE5wZW1VS0FFbHVZMjl1YzJsemRHVnVkQ0J0WVhKclpYSWdjMmw2WlFvQVNXNTJZV3hwWkNCdFlYSnJaWElnYzJsNlpRb0FSWEp5YjNJZ2QybDBhQ0JUU1ZvZ2JXRnlhMlZ5SUhOcGVtVUtBRTV2ZENCbGJtOTFaMmdnYldWdGIzSjVJSFJ2SUdGa1pDQmhJRzVsZHlCMllXeHBaR0YwYVc5dUlIQnliMk5sWkhWeVpRb0FRMkZ1Ym05MElHVnVZMjlrWlNCMGFXeGxDZ0JPYjNRZ1pXNXZkV2RvSUcxbGJXOXllU0IwYnlCa1pXTnZaR1VnZEdsc1pRb0FSbUZwYkdWa0lIUnZJR1JsWTI5a1pTQjBhR1VnWTI5a1pYTjBjbVZoYlNCcGJpQjBhR1VnU2xBeUlHWnBiR1VLQUVOaGJtNXZkQ0IwWVd0bElHbHVJR05vWVhKblpTQmpiMnhzWldOMGFXOXVjeUIzYVhSb0lHbHVaR2w0SUhOb2RXWm1iR1VLQUVOaGJtNXZkQ0JoYkd4dlkyRjBaU0JVYVdWeUlERWdhR0Z1Wkd4bENnQk9ieUJrWldOdlpHVmtJR0Z5WldFZ2NHRnlZVzFsZEdWeWN5d2djMlYwSUhSb1pTQmtaV052WkdWa0lHRnlaV0VnZEc4Z2RHaGxJSGRvYjJ4bElHbHRZV2RsQ2dCT2IzUWdaVzV2ZFdkb0lHMWxiVzl5ZVNCMGJ5QmpjbVZoZEdVZ1ZHRm5MWFJ5WldVS0FFNXZkQ0JsYm05MVoyZ2diV1Z0YjNKNUlIUnZJSEpsYVc1cGRHbGhiR2w2WlNCMGFHVWdkR0ZuSUhSeVpXVUtBR1poYVd4bFpDQjBieUJsYm1OdlpHVWdhVzFoWjJVNklHOXdhbDlsYm1OdlpHVUtBRVZ5Y205eUlISmxZV1JwYm1jZ1UxQkRiMlFnVTFCRGIyTWdaV3hsYldWdWRDd2dTVzUyWVd4cFpDQjBjbUZ1YzJadmNtMWhkR2x2YmlCbWIzVnVaQW9BUlhKeWIzSWdjbVZoWkdsdVp5QlRVRU52WkNCVFVFTnZZeUJsYkdWdFpXNTBMaUJWYm5OMWNIQnZjblJsWkNCTmFYaGxaQ0JJVkNCamIyUmxMV0pzYjJOcklITjBlV3hsSUdadmRXNWtDZ0JVYVd4bElGa2dZMjl2Y21ScGJtRjBaWE1nWVhKbElHNXZkQ0J6ZFhCd2IzSjBaV1FLQUZScGJHVWdXQ0JqYjI5eVpHbHVZWFJsY3lCaGNtVWdibTkwSUhOMWNIQnZjblJsWkFvQVNXMWhaMlVnWTI5dmNtUnBibUYwWlhNZ1lXSnZkbVVnU1U1VVgwMUJXQ0JoY21VZ2JtOTBJSE4xY0hCdmNuUmxaQW9BU2xCRlJ5QXlNREF3SUVKeWIyRmtZMkZ6ZENCd2NtOW1hV3hsY3lCdWIzUWdlV1YwSUhOMWNIQnZjblJsWkFvQVNsQkZSeUF5TURBd0lGTmpZV3hoWW14bElFUnBaMmwwWVd3Z1EybHVaVzFoSUhCeWIyWnBiR1Z6SUc1dmRDQjVaWFFnYzNWd2NHOXlkR1ZrQ2dCS1VFVkhJREl3TURBZ1RHOXVaeUJVWlhKdElGTjBiM0poWjJVZ2NISnZabWxzWlNCdWIzUWdlV1YwSUhOMWNIQnZjblJsWkFvQVNVMUdJREpMWDFJdk5FdGZVaTg0UzE5U0lITnBibWRzWlM5dGRXeDBhWEJzWlNCMGFXeGxJSEJ5YjJacGJHVnpJSEpsY1hWcGNtVWdkR2xzWlNCMGJ5QmlaU0JuY21WaGRHVnlJRzl5SUdWeGRXRnNJSFJ2SUdsdFlXZGxJSE5wZW1Vc0NtOXlJSFJ2SUdKbElDZ3hNREkwTERFd01qUXBMQ0J2Y2lBb01qQTBPQ3d5TURRNEtTQm1iM0lnTkV0ZlVpODRTMTlTSUc5eUlDZzBNRGsyTERRd09UWXBJR1p2Y2lBNFMxOVNMZ290UGlBbFpDd2xaQ0JwY3lCdWIyNGdZMjl1Wm05eWJXRnVkQW90UGlCT2IyNHRTVTFHSUdOdlpHVnpkSEpsWVcwZ2QybHNiQ0JpWlNCblpXNWxjbUYwWldRS0FFbE5SaUJ3Y205bWFXeGxJSEpsY1hWcGNtVWdjM1ZpYkdWMlpXd2dQRDBnSldRZ1ptOXlJRzFoYVc1c1pYWmxiQ0E5SUNWa0xnb3RQaUFsWkNCcGN5QjBhSFZ6SUc1dmRDQmpiMjF3YkdsaGJuUUtMVDRnVG05dUxVbE5SaUJqYjJSbGMzUnlaV0Z0SUhkcGJHd2dZbVVnWjJWdVpYSmhkR1ZrQ2dCSlRVWWdjSEp2Wm1sc1pTQnlaWEYxYVhKbElHMWhhVzVzWlhabGJDQThQU0F4TVM0S0xUNGdKV1FnYVhNZ2RHaDFjeUJ1YjNRZ1kyOXRjR3hwWVc1MENpMCtJRTV2YmkxSlRVWWdZMjlrWlhOMGNtVmhiU0IzYVd4c0lHSmxJR2RsYm1WeVlYUmxaQW9BU1UxR0lIQnliMlpwYkdWeklISmxjWFZwY21VZ2RHbHNaU0J2Y21sbmFXNGdkRzhnWW1VZ1lYUWdNQ3d3TGdvdFBpQWxaQ3dsWkNCcGN5QnViM1FnWTI5dGNHeHBZVzUwQ2kwK0lFNXZiaTFKVFVZZ1kyOWtaWE4wY21WaGJTQjNhV3hzSUdKbElHZGxibVZ5WVhSbFpBb0FTVTFHSUhCeWIyWnBiR1Z6SUhKbGNYVnBjbVVnYVcxaFoyVWdiM0pwWjJsdUlIUnZJR0psSUdGMElEQXNNQzRLTFQ0Z0pXUXNKV1FnYVhNZ2JtOTBJR052YlhCc2FXRnVkQW90UGlCT2IyNHRTVTFHSUdOdlpHVnpkSEpsWVcwZ2QybHNiQ0JpWlNCblpXNWxjbUYwWldRS0FFbE5SaUF5U3k4eVMxOVNJSEJ5YjJacGJHVWdjbVZ4ZFdseVpUb0tkMmxrZEdnZ1BEMGdNakEwT0NCaGJtUWdhR1ZwWjJoMElEdzlJREUxTlRZS0xUNGdTVzV3ZFhRZ2FXMWhaMlVnYzJsNlpTQWxaQ0I0SUNWa0lHbHpJRzV2ZENCamIyMXdiR2xoYm5RS0xUNGdUbTl1TFVsTlJpQmpiMlJsYzNSeVpXRnRJSGRwYkd3Z1ltVWdaMlZ1WlhKaGRHVmtDZ0JKVFVZZ09Fc3ZPRXRmVWlCd2NtOW1hV3hsSUhKbGNYVnBjbVU2Q25kcFpIUm9JRHc5SURneE9USWdZVzVrSUdobGFXZG9kQ0E4UFNBMk1qSTBDaTArSUVsdWNIVjBJR2x0WVdkbElITnBlbVVnSldRZ2VDQWxaQ0JwY3lCdWIzUWdZMjl0Y0d4cFlXNTBDaTArSUU1dmJpMUpUVVlnWTI5a1pYTjBjbVZoYlNCM2FXeHNJR0psSUdkbGJtVnlZWFJsWkFvQVNVMUdJRFJMTHpSTFgxSWdjSEp2Wm1sc1pTQnlaWEYxYVhKbE9ncDNhV1IwYUNBOFBTQTBNRGsySUdGdVpDQm9aV2xuYUhRZ1BEMGdNekV4TWdvdFBpQkpibkIxZENCcGJXRm5aU0J6YVhwbElDVmtJSGdnSldRZ2FYTWdibTkwSUdOdmJYQnNhV0Z1ZEFvdFBpQk9iMjR0U1UxR0lHTnZaR1Z6ZEhKbFlXMGdkMmxzYkNCaVpTQm5aVzVsY21GMFpXUUtBRWxOUmlCd2NtOW1hV3hsY3lCeVpYRjFhWEpsSUhCeVpXTnBjMmx2YmlCdlppQmxZV05vSUdOdmJYQnZibVZ1ZENCMGJ5QmlJR2x1SUZzNExURTJYU0JpYVhSeklIVnVjMmxuYm1Wa0xUNGdRWFFnYkdWaGMzUWdZMjl0Y0c5dVpXNTBJQ1ZrSUc5bUlHbHVjSFYwSUdsdFlXZGxJQ2dsWkNCaWFYUnpMQ0FsY3lrZ2FYTWdibTkwSUdOdmJYQnNhV0Z1ZEFvdFBpQk9iMjR0U1UxR0lHTnZaR1Z6ZEhKbFlXMGdkMmxzYkNCaVpTQm5aVzVsY21GMFpXUUtBRWxOUmlCd2NtOW1hV3hsY3lCeVpYRjFhWEpsSUdGMElHMXZjM1FnTXlCamIyMXdiMjVsYm5Sekxnb3RQaUJPZFcxaVpYSWdiMllnWTI5dGNHOXVaVzUwY3lCdlppQnBibkIxZENCcGJXRm5aU0FvSldRcElHbHpJRzV2ZENCamIyMXdiR2xoYm5RS0xUNGdUbTl1TFVsTlJpQmpiMlJsYzNSeVpXRnRJSGRwYkd3Z1ltVWdaMlZ1WlhKaGRHVmtDZ0JKVFVZZ01rc3ZORXN2T0VzZ2MybHVaMnhsSUhScGJHVWdjSEp2Wm1sc1pYTWdjbVZ4ZFdseVpTQjBhV3hsSUhSdklHSmxJR2R5WldGMFpYSWdiM0lnWlhGMVlXd2dkRzhnYVcxaFoyVWdjMmw2WlM0S0xUNGdKV1FzSldRZ2FYTWdiR1Z6YzJWeUlIUm9ZVzRnSldRc0pXUUtMVDRnVG05dUxVbE5SaUJqYjJSbGMzUnlaV0Z0SUhkcGJHd2dZbVVnWjJWdVpYSmhkR1ZrQ2dCSlRVWWdjSEp2Wm1sc1pTQm1iM0ppYVdRZ1VrZE9JQzhnY21WbmFXOXVJRzltSUdsdWRHVnlaWE4wSUcxaGNtdGxjaTRLTFQ0Z1EyOXRjSEpsYzNOcGIyNGdjR0Z5WVcxbGRHVnljeUJ6Y0dWamFXWjVJR0VnVWs5SkNpMCtJRTV2YmkxSlRVWWdZMjlrWlhOMGNtVmhiU0IzYVd4c0lHSmxJR2RsYm1WeVlYUmxaQW9BU1UxR0lIQnliMlpwYkdWeklISmxjWFZwY21VZ1VGQjRJRDBnVUZCNUlEMGdOeUJtYjNJZ1RreE1UQ0JpWVc1a0xDQmxiSE5sSURndUNpMCtJRk4xY0hCc2FXVmtJSFpoYkhWbGN5QmhjbVVnWkdsbVptVnlaVzUwSUdaeWIyMGdkR2hoZEM0S0xUNGdUbTl1TFVsTlJpQmpiMlJsYzNSeVpXRnRJSGRwYkd3Z1ltVWdaMlZ1WlhKaGRHVmtDZ0JKVFVZZ01rc3ZORXN2T0VzZ2NISnZabWxzWlhNZ2NtVnhkV2x5WlNBMUxUTWdjbVYyWlhKemFXSnNaU0JVY21GdWMyWnZjbTB1Q2kwK0lFTnZiWEJ5WlhOemFXOXVJSEJoY21GdFpYUmxjbk1nYzJWMElHbDBJSFJ2SUdseWNtVjJaWEp6YVdKc1pTNEtMVDRnVG05dUxVbE5SaUJqYjJSbGMzUnlaV0Z0SUhkcGJHd2dZbVVnWjJWdVpYSmhkR1ZrQ2dCSlRVWWdNa3N2TkVzdk9Fc2djSEp2Wm1sc1pYTWdjbVZ4ZFdseVpTQTVMVGNnU1hKeVpYWmxjbk5wWW14bElGUnlZVzV6Wm05eWJTNEtMVDRnUTI5dGNISmxjM05wYjI0Z2NHRnlZVzFsZEdWeWN5QnpaWFFnYVhRZ2RHOGdjbVYyWlhKemFXSnNaUzRLTFQ0Z1RtOXVMVWxOUmlCamIyUmxjM1J5WldGdElIZHBiR3dnWW1VZ1oyVnVaWEpoZEdWa0NnQkpUVVlnY0hKdlptbHNaU0J5WlhGMWFYSmxJR052WkdVZ1lteHZZMnNnYzJsNlpTQjBieUJpWlNBek1uZ3pNaTRLTFQ0Z1EyOXRjSEpsYzNOcGIyNGdjR0Z5WVcxbGRHVnljeUJ6WlhRZ2FYUWdkRzhnSldSNEpXUXVDaTArSUU1dmJpMUpUVVlnWTI5a1pYTjBjbVZoYlNCM2FXeHNJR0psSUdkbGJtVnlZWFJsWkFvQVNVMUdJSEJ5YjJacGJHVnpJSEpsY1hWcGNtVWdXVkp6YVhvZ1BUMGdNUzRnU0dWeVpTQnBkQ0JwY3lCelpYUWdkRzhnSldRZ1ptOXlJR052YlhCdmJtVnVkQ0FsWkM0S0xUNGdUbTl1TFVsTlJpQmpiMlJsYzNSeVpXRnRJSGRwYkd3Z1ltVWdaMlZ1WlhKaGRHVmtDZ0JKVFVZZ01rc3ZORXN2T0VzZ2NISnZabWxzWlhNZ2NtVnhkV2x5WlNBeElITnBibWRzWlNCeGRXRnNhWFI1SUd4aGVXVnlMZ290UGlCT2RXMWlaWElnYjJZZ2JHRjVaWEp6SUdseklDVmtMZ290UGlCT2IyNHRTVTFHSUdOdlpHVnpkSEpsWVcwZ2QybHNiQ0JpWlNCblpXNWxjbUYwWldRS0FFbE5SaUEwUzE5U0lIQnliMlpwYkdVZ2NtVnhkV2x5WlhNZ01TQThQU0JPVENBOFBTQTBJR1p2Y2lCWVZITnBlaUJwYmlCYk1UQXlOQ3d5TURRNFd6b0tMVDRnVG5WdFltVnlJRzltSUdSbFkyOXRjRzl6YVhScGIyNGdiR1YyWld4eklHbHpJQ1ZrTGdvdFBpQk9iMjR0U1UxR0lHTnZaR1Z6ZEhKbFlXMGdkMmxzYkNCaVpTQm5aVzVsY21GMFpXUUtBRWxOUmlBeVMxOVNJSEJ5YjJacGJHVWdjbVZ4ZFdseVpYTWdNU0E4UFNCT1RDQThQU0EwSUdadmNpQllWSE5wZWlCcGJpQmJNVEF5TkN3eU1EUTRXem9LTFQ0Z1RuVnRZbVZ5SUc5bUlHUmxZMjl0Y0c5emFYUnBiMjRnYkdWMlpXeHpJR2x6SUNWa0xnb3RQaUJPYjI0dFNVMUdJR052WkdWemRISmxZVzBnZDJsc2JDQmlaU0JuWlc1bGNtRjBaV1FLQUVsTlJpQTBTMTlTSUhCeWIyWnBiR1VnY21WeGRXbHlaWE1nTVNBOFBTQk9UQ0E4UFNBMUlHWnZjaUJZVkhOcGVpQnBiaUJiTWpBME9DdzBNRGsyV3pvS0xUNGdUblZ0WW1WeUlHOW1JR1JsWTI5dGNHOXphWFJwYjI0Z2JHVjJaV3h6SUdseklDVmtMZ290UGlCT2IyNHRTVTFHSUdOdlpHVnpkSEpsWVcwZ2QybHNiQ0JpWlNCblpXNWxjbUYwWldRS0FFbE5SaUEwUzE5U0lIQnliMlpwYkdVZ2NtVnhkV2x5WlhNZ01TQThQU0JPVENBOFBTQTJJR1p2Y2lCWVZITnBlaUJwYmlCYk5EQTVOaXc0TVRreVd6b0tMVDRnVG5WdFltVnlJRzltSUdSbFkyOXRjRzl6YVhScGIyNGdiR1YyWld4eklHbHpJQ1ZrTGdvdFBpQk9iMjR0U1UxR0lHTnZaR1Z6ZEhKbFlXMGdkMmxzYkNCaVpTQm5aVzVsY21GMFpXUUtBRWxOUmlBeVMxOVNJSEJ5YjJacGJHVWdjbVZ4ZFdseVpYTWdNU0E4UFNCT1RDQThQU0ExSUdadmNpQllWSE5wZWlBK1BTQXlNRFE0T2dvdFBpQk9kVzFpWlhJZ2IyWWdaR1ZqYjIxd2IzTnBkR2x2YmlCc1pYWmxiSE1nYVhNZ0pXUXVDaTArSUU1dmJpMUpUVVlnWTI5a1pYTjBjbVZoYlNCM2FXeHNJR0psSUdkbGJtVnlZWFJsWkFvQVNVMUdJRGhMSUhCeWIyWnBiR1VnY21WeGRXbHlaWE1nTVNBOFBTQk9UQ0E4UFNBM09nb3RQaUJPZFcxaVpYSWdiMllnWkdWamIyMXdiM05wZEdsdmJpQnNaWFpsYkhNZ2FYTWdKV1F1Q2kwK0lFNXZiaTFKVFVZZ1kyOWtaWE4wY21WaGJTQjNhV3hzSUdKbElHZGxibVZ5WVhSbFpBb0FTVTFHSURSTFgxSWdjSEp2Wm1sc1pTQnlaWEYxYVhKbGN5QXhJRHc5SUU1TUlEdzlJRFlnWm05eUlGaFVjMmw2SUQ0OUlEUXdPVFk2Q2kwK0lFNTFiV0psY2lCdlppQmtaV052YlhCdmMybDBhVzl1SUd4bGRtVnNjeUJwY3lBbFpDNEtMVDRnVG05dUxVbE5SaUJqYjJSbGMzUnlaV0Z0SUhkcGJHd2dZbVVnWjJWdVpYSmhkR1ZrQ2dCSlRVWWdORXNnY0hKdlptbHNaU0J5WlhGMWFYSmxjeUF4SUR3OUlFNU1JRHc5SURZNkNpMCtJRTUxYldKbGNpQnZaaUJrWldOdmJYQnZjMmwwYVc5dUlHeGxkbVZzY3lCcGN5QWxaQzRLTFQ0Z1RtOXVMVWxOUmlCamIyUmxjM1J5WldGdElIZHBiR3dnWW1VZ1oyVnVaWEpoZEdWa0NnQkpUVVlnTWtzZ2NISnZabWxzWlNCeVpYRjFhWEpsY3lBeElEdzlJRTVNSUR3OUlEVTZDaTArSUU1MWJXSmxjaUJ2WmlCa1pXTnZiWEJ2YzJsMGFXOXVJR3hsZG1Wc2N5QnBjeUFsWkM0S0xUNGdUbTl1TFVsTlJpQmpiMlJsYzNSeVpXRnRJSGRwYkd3Z1ltVWdaMlZ1WlhKaGRHVmtDZ0JKVFVZZ05FdGZVaUJ3Y205bWFXeGxJSEpsY1hWcGNtVnpJREVnUEQwZ1Rrd2dQRDBnTnlCbWIzSWdXRlJ6YVhvZ1BqMGdPREU1TWpvS0xUNGdUblZ0WW1WeUlHOW1JR1JsWTI5dGNHOXphWFJwYjI0Z2JHVjJaV3h6SUdseklDVmtMZ290UGlCT2IyNHRTVTFHSUdOdlpHVnpkSEpsWVcwZ2QybHNiQ0JpWlNCblpXNWxjbUYwWldRS0FFbE5SaUJ3Y205bWFXeGxJSEpsY1hWcGNtVWdjSEp2WjNKbGMzTnBiMjRnYjNKa1pYSWdkRzhnWW1VZ1ExQlNUQzRLTFQ0Z1EyOXRjSEpsYzNOcGIyNGdjR0Z5WVcxbGRHVnljeUJ6WlhRZ2FYUWdkRzhnSldRdUNpMCtJRTV2YmkxSlRVWWdZMjlrWlhOMGNtVmhiU0IzYVd4c0lHSmxJR2RsYm1WeVlYUmxaQW9BU1UxR0lIQnliMlpwYkdWeklISmxjWFZwY21VZ1dGSlRhWG95SUQwOUlERWdiM0lnTWk0Z1NHVnlaU0JwZENCcGN5QnpaWFFnZEc4Z0pXUXVDaTArSUU1dmJpMUpUVVlnWTI5a1pYTjBjbVZoYlNCM2FXeHNJR0psSUdkbGJtVnlZWFJsWkFvQVNVMUdJSEJ5YjJacGJHVnpJSEpsY1hWcGNtVWdXRkpUYVhveElEMDlJREV1SUVobGNtVWdhWFFnYVhNZ2MyVjBJSFJ2SUNWa0xnb3RQaUJPYjI0dFNVMUdJR052WkdWemRISmxZVzBnZDJsc2JDQmlaU0JuWlc1bGNtRjBaV1FLQUVsTlJpQndjbTltYVd4bElHWnZjbUpwWkNCdGIyUmxJSE4zYVhSamFDQnBiaUJqYjJSbElHSnNiMk5ySUhOMGVXeGxMZ290UGlCRGIyMXdjbVZ6YzJsdmJpQndZWEpoYldWMFpYSnpJSE5sZENCamIyUmxJR0pzYjJOcklITjBlV3hsSUhSdklDVmtMZ290UGlCT2IyNHRTVTFHSUdOdlpHVnpkSEpsWVcwZ2QybHNiQ0JpWlNCblpXNWxjbUYwWldRS0FFbE5SaUJ3Y205bWFXeGxjeUJ5WlhGMWFYSmxJRmhTVTJsNkpXUWdkRzhnWW1VZ2RHaGxJSE5oYldVZ1lYTWdXRkpUYVhveUxpQklaWEpsSUdsMElHbHpJSE5sZENCMGJ5QWxaQ0JwYm5OMFpXRmtJRzltSUNWa0xnb3RQaUJPYjI0dFNVMUdJR052WkdWemRISmxZVzBnZDJsc2JDQmlaU0JuWlc1bGNtRjBaV1FLQUVsTlJpQndjbTltYVd4bElHWnZjbUpwWkNCUVQwTWdiV0Z5YTJWeWN5NEtMVDRnUTI5dGNISmxjM05wYjI0Z2NHRnlZVzFsZEdWeWN5QnpaWFFnSldRZ1VFOURMZ290UGlCT2IyNHRTVTFHSUdOdlpHVnpkSEpsWVcwZ2QybHNiQ0JpWlNCblpXNWxjbUYwWldRS0FFcFFSVWNnTWpBd01DQlFjbTltYVd4bExUUWdLRFJySUdSaklIQnliMlpwYkdVcElISmxjWFZwY21Wek9ncDNhV1IwYUNBOFBTQTBNRGsySUdGdVpDQm9aV2xuYUhRZ1BEMGdNakUyTUFvdFBpQkpiV0ZuWlNCemFYcGxJQ1ZrSUhnZ0pXUWdhWE1nYm05MElHTnZiWEJzYVdGdWRBb3RQaUJPYjI0dGNISnZabWxzWlMwMElHTnZaR1Z6ZEhKbFlXMGdkMmxzYkNCaVpTQm5aVzVsY21GMFpXUUtBRXBRUlVjZ01qQXdNQ0JRY205bWFXeGxMVE1nS0RKcklHUmpJSEJ5YjJacGJHVXBJSEpsY1hWcGNtVnpPZ3AzYVdSMGFDQThQU0F5TURRNElHRnVaQ0JvWldsbmFIUWdQRDBnTVRBNE1Bb3RQaUJKYm5CMWRDQnBiV0ZuWlNCemFYcGxJQ1ZrSUhnZ0pXUWdhWE1nYm05MElHTnZiWEJzYVdGdWRBb3RQaUJPYjI0dGNISnZabWxzWlMweklHTnZaR1Z6ZEhKbFlXMGdkMmxzYkNCaVpTQm5aVzVsY21GMFpXUUtBRXBRUlVjZ01qQXdNQ0JRY205bWFXeGxMVE1nS0RKcklHUmpJSEJ5YjJacGJHVXBJSEpsY1hWcGNtVnpPZ3BRY21WamFYTnBiMjRnYjJZZ1pXRmphQ0JqYjIxd2IyNWxiblFnYzJoaGJHd2dZbVVnTVRJZ1ltbDBjeUIxYm5OcFoyNWxaQzArSUVGMElHeGxZWE4wSUdOdmJYQnZibVZ1ZENBbFpDQnZaaUJwYm5CMWRDQnBiV0ZuWlNBb0pXUWdZbWwwY3l3Z0pYTXBJR2x6SUc1dmRDQmpiMjF3YkdsaGJuUUtMVDRnVG05dUxYQnliMlpwYkdVdE15QmpiMlJsYzNSeVpXRnRJSGRwYkd3Z1ltVWdaMlZ1WlhKaGRHVmtDZ0JLVUVWSElESXdNREFnVUhKdlptbHNaUzB6SUNneWF5QmtZeUJ3Y205bWFXeGxLU0J5WlhGMWFYSmxjem9LTXlCamIyMXdiMjVsYm5SekxUNGdUblZ0WW1WeUlHOW1JR052YlhCdmJtVnVkSE1nYjJZZ2FXNXdkWFFnYVcxaFoyVWdLQ1ZrS1NCcGN5QnViM1FnWTI5dGNHeHBZVzUwQ2kwK0lFNXZiaTF3Y205bWFXeGxMVE1nWTI5a1pYTjBjbVZoYlNCM2FXeHNJR0psSUdkbGJtVnlZWFJsWkFvQVNsQkZSekl3TURBZ1NHVmhaR1Z5SUdKdmVDQnViM1FnY21WaFpDQjVaWFFzSUNjbFl5VmpKV01sWXljZ1ltOTRJSGRwYkd3Z1ltVWdhV2R1YjNKbFpBb0FUbTkwSUdWdWIzVm5hQ0J0WlcxdmNua2dkRzhnWVd4c2IyTmhkR1VnYlY5bGJtTnZaR1ZrWDNScGJHVmZaR0YwWVM0Z0pYVWdUVUlnY21WeGRXbHlaV1FLQUc5d2FsOXFNbXRmYldWeVoyVmZjSEIwS0NrZ2FHRnpJR0ZzY21WaFpIa2dZbVZsYmlCallXeHNaV1FLQUU1dmRDQmxibTkxWjJnZ2JXVnRiM0o1SUhSdklISmxZV1FnVTA5VUlHMWhjbXRsY2k0Z1ZHbHNaU0JwYm1SbGVDQmhiR3h2WTJGMGFXOXVJR1poYVd4bFpBb0FRMkZ1Ym05MElHVnVZMjlrWlNCMGFXeGxPaUJ2Y0dwZmRHTmtYMjFoY210bGNsOXBibVp2WDJOeVpXRjBaU2dwSUdaaGFXeGxaQW9BU1dkdWIzSnBibWNnYVdoa2NpQmliM2d1SUVacGNuTjBJR2xvWkhJZ1ltOTRJR0ZzY21WaFpIa2djbVZoWkFvQVduQndkQ0FsZFNCaGJISmxZV1I1SUhKbFlXUUtBRnB3Y0cwZ0pYVWdZV3h5WldGa2VTQnlaV0ZrQ2dCUVZFVlNUU0JqYUdWamF5Qm1ZV2xzZFhKbE9pQWxaQ0J6ZVc1MGFHVjBhWHBsWkNBd2VFWkdJRzFoY210bGNuTWdjbVZoWkFvQUNRa0pJR05pYkd0M1BUSmVKV1FLQUFrSkNTQmpZbXhyYUQweVhpVmtDZ0FKQ1FrZ2NXNTBjM1I1UFNWa0NnQUpJSFJrZUQwbFpDd2dkR1I1UFNWa0NnQWxjeUJrZUQwbFpDd2daSGs5SldRS0FBa0pDU0J5YjJsemFHbG1kRDBsWkFvQUNRa0pJRzUxYldkaWFYUnpQU1ZrQ2dBSkNTQnVkVzFzWVhsbGNuTTlKV1FLQUNWeklHNTFiV052YlhCelBTVmtDZ0J2Y0dwZmFuQXlYMkZ3Y0d4NVgyTmtaV1k2SUdGamJqMGxaQ3dnYm5WdFkyOXRjSE05SldRS0FHOXdhbDlxY0RKZllYQndiSGxmWTJSbFpqb2dZMjQ5SldRc0lHNTFiV052YlhCelBTVmtDZ0FKQ1FrZ2JuVnRjbVZ6YjJ4MWRHbHZibk05SldRS0FBa0pJSFI1Y0dVOUpTTjRMQ0J3YjNNOUpXeHNhU3dnYkdWdVBTVmtDZ0FKSUhSM1BTVmtMQ0IwYUQwbFpBb0FKWE1nYzJkdVpEMGxaQW9BQ1FrSklIRnRabUpwWkQwbFpBb0FKWE1nY0hKbFl6MGxaQW9BQ1FrZ2JtSWdiMllnZEdsc1pTMXdZWEowSUdsdUlIUnBiR1VnV3lWa1hUMGxaQW9BSlhNZ2VERTlKV1FzSUhreFBTVmtDZ0FKSUhSNE1EMGxaQ3dnZEhrd1BTVmtDZ0FsY3lCNE1EMGxaQ3dnZVRBOUpXUUtBRVpoYVd4bFpDQjBieUJrWldOdlpHVWdkR2xzWlNBbFpDOGxaQW9BVTJWMGRHbHVaeUJrWldOdlpHbHVaeUJoY21WaElIUnZJQ1ZrTENWa0xDVmtMQ1ZrQ2dCR1lXbHNaV1FnZEc4Z1pHVmpiMlJsSUdOdmJYQnZibVZ1ZENBbFpBb0FTVzUyWVd4cFpDQjJZV3gxWlNCbWIzSWdiblZ0Y21WemIyeDFkR2x2Ym5NZ09pQWxaQ3dnYldGNElIWmhiSFZsSUdseklITmxkQ0JwYmlCdmNHVnVhbkJsWnk1b0lHRjBJQ1ZrQ2dCSmJuWmhiR2xrSUdOdmJYQnZibVZ1ZENCdWRXMWlaWEk2SUNWa0xDQnlaV2RoY21ScGJtY2dkR2hsSUc1MWJXSmxjaUJ2WmlCamIyMXdiMjVsYm5SeklDVmtDZ0JVYjI4Z2JXRnVlU0JRVDBOeklDVmtDZ0JKYm5aaGJHbGtJSFJwYkdVZ2JuVnRZbVZ5SUNWa0NnQkpiblpoYkdsa0lIUnBiR1VnY0dGeWRDQnBibVJsZUNCbWIzSWdkR2xzWlNCdWRXMWlaWElnSldRdUlFZHZkQ0FsWkN3Z1pYaHdaV04wWldRZ0pXUUtBSFJqY0Y5dWRXMXNZWGxsY25NZ2QyaGxiaUJqY0Y5bWFYaGxaRjloYkd4dll5QnpaWFFnYzJodmRXeGtJRzV2ZENCbGVHTmxaV1FnSldRS0FHNTFiWEpsYzI5c2RYUnBiMjRnZDJobGJpQmpjRjltYVhobFpGOWhiR3h2WXlCelpYUWdjMmh2ZFd4a0lHNXZkQ0JsZUdObFpXUWdKV1FLQUVsdWRtRnNhV1FnWTI5dGNHNXZNQ0JtYjNJZ1VFOURJQ1ZrQ2dCRmNuSnZjaUIzYVhSb0lGTkpXaUJ0WVhKclpYSTZJRzUxYldKbGNpQnZaaUJqYjIxd2IyNWxiblFnYVhNZ2FXeHNaV2RoYkNBdFBpQWxaQW9BUlhKeWIzSWdkMmhwYkdVZ2IzQnFYMm95YTE5d2IzTjBYM2R5YVhSbFgzUnBiR1VnZDJsMGFDQjBhV3hsSUdsdVpHVjRJRDBnSldRS0FFVnljbTl5SUhkb2FXeGxJRzl3YWw5cU1tdGZjSEpsWDNkeWFYUmxYM1JwYkdVZ2QybDBhQ0IwYVd4bElHbHVaR1Y0SUQwZ0pXUUtBSFJwYkdVZ2JuVnRZbVZ5SUNWa0lDOGdKV1FLQUU1dmRDQmxibTkxWjJnZ2JXVnRiM0o1SUdadmNpQmphV1ZzWVdJS0FFTmhibTV2ZENCaGJHeHZZMkYwWlNCallteHJMVDVrWldOdlpHVmtYMlJoZEdFS0FFNXZkQ0JsYm05MVoyZ2diV1Z0YjNKNUlIUnZJR2h2YkdRZ1NsQXlJRWhsWVdSbGNpQmtZWFJoQ2dCT2IzUWdaVzV2ZFdkb0lHMWxiVzl5ZVNCMGJ5Qm9ZVzVrYkdVZ1puUjVjQ0JrWVhSaENnQk5hWE56YVc1bklIQmhZMnRsZEhNZ2NHOXpjMmxpYkdVZ2JHOXpjeUJ2WmlCa1lYUmhDZ0JHWVdsc1pXUWdkRzhnYldWeVoyVWdVRkJVSUdSaGRHRUtBRVpoYVd4bFpDQjBieUJ0WlhKblpTQlFVRTBnWkdGMFlRb0FTVzUyWVd4cFpDQnVkVzFpWlhJZ2IyWWdjbVZ6YjJ4MWRHbHZibk1nT2lBbFpDQnViM1FnYVc0Z2NtRnVaMlVnV3pFc0pXUmRDZ0JKYm5aaGJHbGtJSFpoYkhWbElHWnZjaUJ2Y0hScGIyNDZJQ1Z6TGlCVGFHOTFiR1FnWW1VZ2FXNGdXekFzTjEwS0FFbHVkbUZzYVdRZ2JuVnRZbVZ5SUc5bUlHeGhlV1Z5Y3lCcGJpQkRUMFFnYldGeWEyVnlJRG9nSldRZ2JtOTBJR2x1SUhKaGJtZGxJRnN4TFRZMU5UTTFYUW9BU1c1MllXeHBaQ0IyWVd4MVpTQm1iM0lnWTJKc2IyTnJhRjlwYm1sME9pQWxaQ0J1YjNRZ1lTQndiM2RsY2lCdlppQXlJRzV2ZENCcGJpQnlZVzVuWlNCYk5Dd3hNREkwWFFvQVNXNTJZV3hwWkNCMllXeDFaU0JtYjNJZ1kySnNiMk5yZDE5cGJtbDBPaUFsWkNCdWIzUWdZU0J3YjNkbGNpQnZaaUF5SUdsdUlISmhibWRsSUZzMExERXdNalJkQ2dBbGN6b2xaRHBqYjJ4dmNsOWpiWGxyWDNSdlgzSm5ZZ29KUTBGT0lFNVBWQ0JEVDA1V1JWSlVDZ0FsY3pvbFpEcGpiMnh2Y2w5bGMzbGpZMTkwYjE5eVoySUtDVU5CVGlCT1QxUWdRMDlPVmtWU1ZBb0FKWE02SldRNlkyOXNiM0pmYzNsalkxOTBiMTl5WjJJS0NVTkJUaUJPVDFRZ1EwOU9Wa1ZTVkFvQVUzUnlaV0Z0SUhSdmJ5QnphRzl5ZEN3Z1pYaHdaV04wWldRZ1UwOVVDZ0JWYm1GaWJHVWdkRzhnYzJWMElIUXhJR2hoYm1Sc1pTQmhjeUJVVEZNS0FGTjBjbVZoYlNCa2IyVnpJRzV2ZENCbGJtUWdkMmwwYUNCRlQwTUtBRWx1ZG1Gc2FXUWdkbUZzZFdVZ1ptOXlJR05pYkc5amEzZGZhVzVwZENBcUlHTmliRzlqYTJoZmFXNXBkRG9nYzJodmRXeGtJR0psSUR3OUlEUXdPVFlLQUVOaGJtNXZkQ0JvWVc1a2JHVWdZbTk0SUhOcGVtVnpJR2hwWjJobGNpQjBhR0Z1SURKZU16SUtBRzl3YWw5d2FWOXVaWGgwWDJ4eVkzQW9LVG9nYVc1MllXeHBaQ0JqYjIxd2JtOHdMMk52YlhCdWJ6RUtBRzl3YWw5d2FWOXVaWGgwWDNKc1kzQW9LVG9nYVc1MllXeHBaQ0JqYjIxd2JtOHdMMk52YlhCdWJ6RUtBRzl3YWw5d2FWOXVaWGgwWDJOd2Ntd29LVG9nYVc1MllXeHBaQ0JqYjIxd2JtOHdMMk52YlhCdWJ6RUtBRzl3YWw5d2FWOXVaWGgwWDNCamNtd29LVG9nYVc1MllXeHBaQ0JqYjIxd2JtOHdMMk52YlhCdWJ6RUtBRzl3YWw5d2FWOXVaWGgwWDNKd1kyd29LVG9nYVc1MllXeHBaQ0JqYjIxd2JtOHdMMk52YlhCdWJ6RUtBRzl3YWw5ME1WOWtaV052WkdWZlkySnNheWdwT2lCMWJuTjFjSEJ2Y25SbFpDQmljRzV2WDNCc2RYTmZiMjVsSUQwZ0pXUWdQajBnTXpFS0FFWmhhV3hsWkNCMGJ5QmtaV052WkdVZ2RHbHNaU0F4THpFS0FFbHVjM1ZtWm1samFXVnVkQ0JrWVhSaElHWnZjaUJEVFVGUUlHSnZlQzRLQUU1bFpXUWdkRzhnY21WaFpDQmhJRkJEVEZJZ1ltOTRJR0psWm05eVpTQjBhR1VnUTAxQlVDQmliM2d1Q2dCSmJuTjFabVpwWTJsbGJuUWdaR0YwWVNCbWIzSWdRMFJGUmlCaWIzZ3VDZ0JPZFcxaVpYSWdiMllnWTJoaGJtNWxiQ0JrWlhOamNtbHdkR2x2YmlCcGN5QmxjWFZoYkNCMGJ5QjZaWEp2SUdsdUlFTkVSVVlnWW05NExnb0FVM1J5WldGdElHVnljbTl5SUhkb2FXeGxJSEpsWVdScGJtY2dTbEF5SUVobFlXUmxjaUJpYjNnNklHNXZJQ2RwYUdSeUp5QmliM2d1Q2dCT2IyNGdZMjl1Wm05eWJXRnVkQ0JqYjJSbGMzUnlaV0Z0SUZSUWMyOTBQVDFVVG5OdmRDNEtBRk4wY21WaGJTQmxjbkp2Y2lCM2FHbHNaU0J5WldGa2FXNW5JRXBRTWlCSVpXRmtaWElnWW05NE9pQmliM2dnYkdWdVozUm9JR2x6SUdsdVkyOXVjMmx6ZEdWdWRDNEtBRUp2ZUNCc1pXNW5kR2dnYVhNZ2FXNWpiMjV6YVhOMFpXNTBMZ29BVW1WemIyeDFkR2x2YmlCbVlXTjBiM0lnYVhNZ1ozSmxZWFJsY2lCMGFHRnVJSFJvWlNCdFlYaHBiWFZ0SUhKbGMyOXNkWFJwYjI0Z2FXNGdkR2hsSUdOdmJYQnZibVZ1ZEM0S0FFTnZiWEJ2Ym1WdWRDQnRZWEJ3YVc1bklITmxaVzF6SUhkeWIyNW5MaUJVY25scGJtY2dkRzhnWTI5eWNtVmpkQzRLQUVsdVkyOXRjR3hsZEdVZ1kyaGhibTVsYkNCa1pXWnBibWwwYVc5dWN5NEtBRTFoYkdadmNtMWxaQ0JJVkNCamIyUmxZbXh2WTJzdUlFbHVkbUZzYVdRZ1kyOWtaV0pzYjJOcklHeGxibWQwYUNCMllXeDFaWE11Q2dCT2IzUWdaVzV2ZFdkb0lHMWxiVzl5ZVNCbWIzSWdZMmhsWTJ0cGJtY2dkR2hsSUhCdll5QjJZV3gxWlhNdUNnQktVRVZISURJd01EQWdVSEp2Wm1sc1pTMHpJR0Z1WkNBMElDZ3lheTgwYXlCa1l5QndjbTltYVd4bEtTQnlaWEYxYVhKbGN6b0tUV0Y0YVcxMWJTQXhNRFF4TmpZMklHTnZiWEJ5WlhOelpXUWdZbmwwWlhNZ1FDQXlOR1p3Y3dvdFBpQlRjR1ZqYVdacFpXUWdjbUYwWlNCbGVHTmxaV1J6SUhSb2FYTWdiR2x0YVhRdUlGSmhkR1VnZDJsc2JDQmlaU0JtYjNKalpXUWdkRzhnTVRBME1UWTJOaUJpZVhSbGN5NEtBRXBRUlVjZ01qQXdNQ0JRY205bWFXeGxMVE1nWVc1a0lEUWdLREpyTHpScklHUmpJSEJ5YjJacGJHVXBJSEpsY1hWcGNtVnpPZ3BOWVhocGJYVnRJREV6TURJd09ETWdZMjl0Y0hKbGMzTmxaQ0JpZVhSbGN5QkFJREkwWm5CekNpMCtJRk53WldOcFptbGxaQ0J5WVhSbElHVjRZMlZsWkhNZ2RHaHBjeUJzYVcxcGRDNGdVbUYwWlNCM2FXeHNJR0psSUdadmNtTmxaQ0IwYnlBeE16QXlNRGd6SUdKNWRHVnpMZ29BVjJVZ1pHOGdibTkwSUhOMWNIQnZjblFnYlc5eVpTQjBhR0Z1SURNZ1kyOWthVzVuSUhCaGMzTmxjeUJwYmlCaGJpQklWQ0JqYjJSbFlteHZZMnM3SUZSb2FYTWdZMjlrWldKc2IyTnJjeUJvWVhNZ0pXUWdjR0Z6YzJWekxnb0FUV0ZzWm05eWJXVmtJRWhVSUdOdlpHVmliRzlqYXk0Z1JHVmpiMlJwYm1jZ2RHaHBjeUJqYjJSbFlteHZZMnNnYVhNZ2MzUnZjSEJsWkM0Z1ZHaGxjbVVnWVhKbElDVmtJSHBsY204Z1ltbDBjR3hoYm1WeklHbHVJQ1ZrSUdKcGRIQnNZVzVsY3k0S0FFTmhibTV2ZENCMFlXdGxJR2x1SUdOb1lYSm5aU0J0ZFd4MGFYQnNaU0IwY21GdWMyWnZjbTFoZEdsdmJpQnpkR0ZuWlhNdUNnQkpiblpoYkdsa0lIWmhiSFZsSUdadmNpQnZjSFJwYjI0NklDVnpMZ29BU1c1MllXeHBaQ0J2Y0hScGIyNDZJQ1Z6TGdvQVZXNXJibTkzYmlCdFlYSnJaWElnYUdGeklHSmxaVzRnWkdWMFpXTjBaV1FnWVc1a0lHZGxibVZ5WVhSbFpDQmxjbkp2Y2k0S0FFTnZaR1ZqSUhCeWIzWnBaR1ZrSUhSdklIUm9aU0J2Y0dwZmMyVjBkWEJmWkdWamIyUmxjaUJtZFc1amRHbHZiaUJwY3lCdWIzUWdZU0JrWldOdmJYQnlaWE56YjNJZ2FHRnVaR3hsY2k0S0FFTnZaR1ZqSUhCeWIzWnBaR1ZrSUhSdklIUm9aU0J2Y0dwZmNtVmhaRjlvWldGa1pYSWdablZ1WTNScGIyNGdhWE1nYm05MElHRWdaR1ZqYjIxd2NtVnpjMjl5SUdoaGJtUnNaWEl1Q2dCVWFXeGxjeUJrYjI0bmRDQmhiR3dnYUdGMlpTQjBhR1VnYzJGdFpTQmthVzFsYm5OcGIyNHVJRk5yYVhBZ2RHaGxJRTFEVkNCemRHVndMZ29BVG5WdFltVnlJRzltSUdOdmJYQnZibVZ1ZEhNZ0tDVmtLU0JwY3lCcGJtTnZibk5wYzNSbGJuUWdkMmwwYUNCaElFMURWQzRnVTJ0cGNDQjBhR1VnVFVOVUlITjBaWEF1Q2dCS1VESWdZbTk0SUhkb2FXTm9JR0Z5WlNCaFpuUmxjaUIwYUdVZ1kyOWtaWE4wY21WaGJTQjNhV3hzSUc1dmRDQmlaU0J5WldGa0lHSjVJSFJvYVhNZ1puVnVZM1JwYjI0dUNnQkJiSEJvWVNCamFHRnVibVZzSUhOd1pXTnBabWxsWkNCaWRYUWdibTkwSUdWdWIzVm5hQ0JwYldGblpTQmpiMjF3YjI1bGJuUnpJR1p2Y2lCaGJpQmhkWFJ2YldGMGFXTWdZMlJsWmlCaWIzZ2dZM0psWVhScGIyNHVDZ0JOWVd4bWIzSnRaV1FnU0ZRZ1kyOWtaV0pzYjJOckxpQlhhR1Z1SUhSb1pTQnVkVzFpWlhJZ2IyWWdlbVZ5YnlCd2JHRnVaWE1nWW1sMGNHeGhibVZ6SUdseklHVnhkV0ZzSUhSdklIUm9aU0J1ZFcxaVpYSWdiMllnWW1sMGNHeGhibVZ6TENCdmJteDVJSFJvWlNCamJHVmhiblZ3SUhCaGMzTWdiV0ZyWlhNZ2MyVnVjMlVzSUdKMWRDQjNaU0JvWVhabElDVmtJSEJoYzNObGN5QnBiaUIwYUdseklHTnZaR1ZpYkc5amF5NGdWR2hsY21WbWIzSmxMQ0J2Ym14NUlIUm9aU0JqYkdWaGJuVndJSEJoYzNNZ2QybHNiQ0JpWlNCa1pXTnZaR1ZrTGlCVWFHbHpJRzFsYzNOaFoyVWdkMmxzYkNCdWIzUWdZbVVnWkdsemNHeGhlV1ZrSUdGbllXbHVMZ29BU1cxaFoyVWdhR0Z6SUd4bGMzTWdZMjl0Y0c5dVpXNTBjeUIwYUdGdUlHTnZaR1Z6ZEhKbFlXMHVDZ0JPWldWa0lIUnZJR1JsWTI5a1pTQjBhR1VnYldGcGJpQm9aV0ZrWlhJZ1ltVm1iM0psSUdKbFoybHVJSFJ2SUdSbFkyOWtaU0IwYUdVZ2NtVnRZV2x1YVc1bklHTnZaR1Z6ZEhKbFlXMHVDZ0JRYzI5MElIWmhiSFZsSUc5bUlIUm9aU0JqZFhKeVpXNTBJSFJwYkdVdGNHRnlkQ0JwY3lCbGNYVmhiQ0IwYnlCNlpYSnZMQ0IzWlNCaGMzTjFiV2x1WnlCcGRDQnBjeUIwYUdVZ2JHRnpkQ0IwYVd4bExYQmhjblFnYjJZZ2RHaGxJR052WkdWemRISmxZVzB1Q2dCR1lXbHNaV1FnZEc4Z2MyVmxheUJwYmlCMGFHVWdjM1J5WldGdExnb0FRU0J0WVd4bWIzSnRaV1FnWTI5a1pXSnNiMk5ySUhSb1lYUWdhR0Z6SUcxdmNtVWdkR2hoYmlCdmJtVWdZMjlrYVc1bklIQmhjM01zSUdKMWRDQjZaWEp2SUd4bGJtZDBhQ0JtYjNJZ01tNWtJR0Z1WkNCd2IzUmxiblJwWVd4c2VTQjBhR1VnTTNKa0lIQmhjM01nYVc0Z1lXNGdTRlFnWTI5a1pXSnNiMk5yTGdvQUNRa0pJSFJwYkdVdGNHRnlkRnNsWkYwNklITjBZWEpmY0c5elBTVnNiR2tzSUdWdVpGOW9aV0ZrWlhJOUpXeHNhU3dnWlc1a1gzQnZjejBsYkd4cExnb0FWR2xzWlNBbGRTQm9ZWE1nVkZCemIzUWdQVDBnTUNCaGJtUWdWRTV6YjNRZ1BUMGdNQ3dnWW5WMElHNXZJRzkwYUdWeUlIUnBiR1V0Y0dGeWRITWdkMlZ5WlNCbWIzVnVaQzRnUlU5RElHbHpJR0ZzYzI4Z2JXbHpjMmx1Wnk0S0FFTnZiWEJ2Ym1WdWRDQWxaQ0JrYjJWemJpZDBJR2hoZG1VZ1lTQnRZWEJ3YVc1bkxnb0FRU0JqYjI1bWIzSnRhVzVuSUVwUU1pQnlaV0ZrWlhJZ2MyaGhiR3dnYVdkdWIzSmxJR0ZzYkNCRGIyeHZkWElnVTNCbFkybG1hV05oZEdsdmJpQmliM2hsY3lCaFpuUmxjaUIwYUdVZ1ptbHljM1FzSUhOdklIZGxJR2xuYm05eVpTQjBhR2x6SUc5dVpTNEtBRlJvWlNCemFXZHVZWFIxY21VZ1ltOTRJRzExYzNRZ1ltVWdkR2hsSUdacGNuTjBJR0p2ZUNCcGJpQjBhR1VnWm1sc1pTNEtBRlJvWlNBZ1ltOTRJRzExYzNRZ1ltVWdkR2hsSUdacGNuTjBJR0p2ZUNCcGJpQjBhR1VnWm1sc1pTNEtBRlJvWlNCbWRIbHdJR0p2ZUNCdGRYTjBJR0psSUhSb1pTQnpaV052Ym1RZ1ltOTRJR2x1SUhSb1pTQm1hV3hsTGdvQVJtRnBiR1ZrSUhSdklHUmxZMjlrWlM0S0FFMWhiR1p2Y20xbFpDQklWQ0JqYjJSbFlteHZZMnN1SUVsdVkyOXljbVZqZENCTlJVd2djMlZuYldWdWRDQnpaWEYxWlc1alpTNEtBRU52YlhCdmJtVnVkQ0FsWkNCcGN5QnRZWEJ3WldRZ2RIZHBZMlV1Q2dCUGJteDVJRzl1WlNCRFRVRlFJR0p2ZUNCcGN5QmhiR3h2ZDJWa0xnb0FWMlVnYm1WbFpDQmhiaUJwYldGblpTQndjbVYyYVc5MWMyeDVJR055WldGMFpXUXVDZ0JCYkhCb1lTQmphR0Z1Ym1Wc0lITndaV05wWm1sbFpDQmlkWFFnZFc1cmJtOTNiaUJsYm5WdFkzTXVJRTV2SUdOa1pXWWdZbTk0SUhkcGJHd2dZbVVnWTNKbFlYUmxaQzRLQUVGc2NHaGhJR05vWVc1dVpXd2djRzl6YVhScGIyNGdZMjl1Wm14cFkzUnpJSGRwZEdnZ1kyOXNiM0lnWTJoaGJtNWxiQzRnVG04Z1kyUmxaaUJpYjNnZ2QybHNiQ0JpWlNCamNtVmhkR1ZrTGdvQVRYVnNkR2x3YkdVZ1lXeHdhR0VnWTJoaGJtNWxiSE1nYzNCbFkybG1hV1ZrTGlCT2J5QmpaR1ZtSUdKdmVDQjNhV3hzSUdKbElHTnlaV0YwWldRdUNnQktVRVZISURJd01EQWdVSEp2Wm1sc1pTMHpJR0Z1WkNBMElDZ3lheTgwYXlCa1l5QndjbTltYVd4bEtTQnlaWEYxYVhKbGN6b0tUV0Y0YVcxMWJTQXhNRFF4TmpZMklHTnZiWEJ5WlhOelpXUWdZbmwwWlhNZ1FDQXlOR1p3Y3dwQmN5QnVieUJ5WVhSbElHaGhjeUJpWldWdUlHZHBkbVZ1TENCMGFHbHpJR3hwYldsMElIZHBiR3dnWW1VZ2RYTmxaQzRLQUVwUVJVY2dNakF3TUNCUWNtOW1hV3hsTFRNZ1lXNWtJRFFnS0RKckx6UnJJR1JqSUhCeWIyWnBiR1VwSUhKbGNYVnBjbVZ6T2dwTllYaHBiWFZ0SURFek1ESXdPRE1nWTI5dGNISmxjM05sWkNCaWVYUmxjeUJBSURJMFpuQnpDa0Z6SUc1dklISmhkR1VnYUdGeklHSmxaVzRnWjJsMlpXNHNJSFJvYVhNZ2JHbHRhWFFnZDJsc2JDQmlaU0IxYzJWa0xnb0FTVWhFVWlCaWIzaGZiV2x6YzJsdVp5NGdVbVZ4ZFdseVpXUXVDZ0JLVURKSUlHSnZlQ0J0YVhOemFXNW5MaUJTWlhGMWFYSmxaQzRLQUU1dmRDQnpkWEpsSUdodmR5QjBhR0YwSUdoaGNIQmxibVZrTGdvQVRXRnBiaUJvWldGa1pYSWdhR0Z6SUdKbFpXNGdZMjl5Y21WamRHeDVJR1JsWTI5a1pXUXVDZ0JVYVd4bElDVmtMeVZrSUdoaGN5QmlaV1Z1SUdSbFkyOWtaV1F1Q2dCdmNHcGZkREpmWlc1amIyUmxYM0JoWTJ0bGRDZ3BPaUJ2Ym14NUlDVjFJR0o1ZEdWeklISmxiV0ZwYm1sdVp5QnBiaUJ2ZFhSd2RYUWdZblZtWm1WeUxpQWxkU0J1WldWa1pXUXVDZ0JJWldGa1pYSWdiMllnZEdsc1pTQWxaQ0F2SUNWa0lHaGhjeUJpWldWdUlISmxZV1F1Q2dCRmJYQjBlU0JUVDFRZ2JXRnlhMlZ5SUdSbGRHVmpkR1ZrT2lCUWMyOTBQU1ZrTGdvQVJHbHlaV04wSUhWelpTQmhkQ0FqSldRZ2FHOTNaWFpsY2lCd1kyOXNQU1ZrTGdvQVNXMXdiR1Z0Wlc1MFlYUnBiMjRnYkdsdGFYUmhkR2x2YmpvZ1ptOXlJSEJoYkdWMGRHVWdiV0Z3Y0dsdVp5d2djR052YkZzbFpGMGdjMmh2ZFd4a0lHSmxJR1Z4ZFdGc0lIUnZJQ1ZrTENCaWRYUWdhWE1nWlhGMVlXd2dkRzhnSldRdUNnQkpiblpoYkdsa0lHTnZiWEJ2Ym1WdWRDOXdZV3hsZEhSbElHbHVaR1Y0SUdadmNpQmthWEpsWTNRZ2JXRndjR2x1WnlBbFpDNEtBRWx1ZG1Gc2FXUWdkbUZzZFdVZ1ptOXlJR050WVhCYkpXUmRMbTEwZVhBZ1BTQWxaQzRLQUZCemIzUWdkbUZzZFdVZ2FYTWdibTkwSUdOdmNuSmxZM1FnY21WbllYSmtjeUIwYnlCMGFHVWdTbEJGUnpJd01EQWdibTl5YlRvZ0pXUXVDZ0JOWVd4bWIzSnRaV1FnU0ZRZ1kyOWtaV0pzYjJOckxpQldURU1nWTI5a1pTQndjbTlrZFdObGN5QnphV2R1YVdacFkyRnVkQ0J6WVcxd2JHVnpJRzkxZEhOcFpHVWdkR2hsSUdOdlpHVmliRzlqYXlCaGNtVmhMZ29BUTJGdWJtOTBJSEJsY21admNtMGdUVU5VSUc5dUlHTnZiWEJ2Ym1WdWRITWdkMmwwYUNCa2FXWm1aWEpsYm5RZ2MybDZaWE11SUVScGMyRmliR2x1WnlCTlExUXVDZ0JWYm1WNGNHVmpkR1ZrSUU5UFRTNEtBRlZ1YzNWd2NHOXlkR1ZrSUZCaGNuUXRNaUJsZUhSbGJuTnBiMjRnWlc1aFlteGxaQXBRY205bWFXeGxJSE5sZENCMGJ5Qk9UMDVGTGdvQVNsQkZSeUF5TURBd0lGQmhjblF0TWlCd2NtOW1hV3hsSUdSbFptbHVaV1FLWW5WMElHNXZJRkJoY25RdE1pQmxlSFJsYm5OcGIyNGdaVzVoWW14bFpDNEtVSEp2Wm1sc1pTQnpaWFFnZEc4Z1RrOU9SUzRLQURNeUlHSnBkSE1nWVhKbElHNXZkQ0JsYm05MVoyZ2dkRzhnWkdWamIyUmxJSFJvYVhNZ1kyOWtaV0pzYjJOckxDQnphVzVqWlNCMGFHVWdiblZ0WW1WeUlHOW1JR0pwZEhCc1lXNWxMQ0FsWkN3Z2FYTWdiR0Z5WjJWeUlIUm9ZVzRnTXpBdUNnQkNiM1IwYjIwZ2NHOXphWFJwYjI0Z2IyWWdkR2hsSUdSbFkyOWtaV1FnWVhKbFlTQW9jbVZuYVc5dVgza3hQU1ZrS1NCemFHOTFiR1FnWW1VZ1BpQXdMZ29BVW1sbmFIUWdjRzl6YVhScGIyNGdiMllnZEdobElHUmxZMjlrWldRZ1lYSmxZU0FvY21WbmFXOXVYM2d4UFNWa0tTQnphRzkxYkdRZ1ltVWdQaUF3TGdvQVZYQWdjRzl6YVhScGIyNGdiMllnZEdobElHUmxZMjlrWldRZ1lYSmxZU0FvY21WbmFXOXVYM2t3UFNWa0tTQnphRzkxYkdRZ1ltVWdQajBnTUM0S0FFeGxablFnY0c5emFYUnBiMjRnYjJZZ2RHaGxJR1JsWTI5a1pXUWdZWEpsWVNBb2NtVm5hVzl1WDNnd1BTVmtLU0J6YUc5MWJHUWdZbVVnUGowZ01DNEtBRVZ5Y205eUlISmxZV1JwYm1jZ1VGQlVJRzFoY210bGNqb2djR0ZqYTJWMElHaGxZV1JsY2lCb1lYWmxJR0psWlc0Z2NISmxkbWx2ZFhOc2VTQm1iM1Z1WkNCcGJpQjBhR1VnYldGcGJpQm9aV0ZrWlhJZ0tGQlFUU0J0WVhKclpYSXBMZ29BVTNSaGNuUWdkRzhnY21WaFpDQnFNbXNnYldGcGJpQm9aV0ZrWlhJZ0tDVnNiR1FwTGdvQVFtOTBkRzl0SUhCdmMybDBhVzl1SUc5bUlIUm9aU0JrWldOdlpHVmtJR0Z5WldFZ0tISmxaMmx2Ymw5NU1UMGxaQ2tnYVhNZ2IzVjBjMmxrWlNCMGFHVWdhVzFoWjJVZ1lYSmxZU0FvV1hOcGVqMGxaQ2t1Q2dCVmNDQndiM05wZEdsdmJpQnZaaUIwYUdVZ1pHVmpiMlJsWkNCaGNtVmhJQ2h5WldkcGIyNWZlVEE5SldRcElHbHpJRzkxZEhOcFpHVWdkR2hsSUdsdFlXZGxJR0Z5WldFZ0tGbHphWG85SldRcExnb0FVbWxuYUhRZ2NHOXphWFJwYjI0Z2IyWWdkR2hsSUdSbFkyOWtaV1FnWVhKbFlTQW9jbVZuYVc5dVgzZ3hQU1ZrS1NCcGN5QnZkWFJ6YVdSbElIUm9aU0JwYldGblpTQmhjbVZoSUNoWWMybDZQU1ZrS1M0S0FFeGxablFnY0c5emFYUnBiMjRnYjJZZ2RHaGxJR1JsWTI5a1pXUWdZWEpsWVNBb2NtVm5hVzl1WDNnd1BTVmtLU0JwY3lCdmRYUnphV1JsSUhSb1pTQnBiV0ZuWlNCaGNtVmhJQ2hZYzJsNlBTVmtLUzRLQUVKdmRIUnZiU0J3YjNOcGRHbHZiaUJ2WmlCMGFHVWdaR1ZqYjJSbFpDQmhjbVZoSUNoeVpXZHBiMjVmZVRFOUpXUXBJR2x6SUc5MWRITnBaR1VnZEdobElHbHRZV2RsSUdGeVpXRWdLRmxQYzJsNlBTVmtLUzRLQUZWd0lIQnZjMmwwYVc5dUlHOW1JSFJvWlNCa1pXTnZaR1ZrSUdGeVpXRWdLSEpsWjJsdmJsOTVNRDBsWkNrZ2FYTWdiM1YwYzJsa1pTQjBhR1VnYVcxaFoyVWdZWEpsWVNBb1dVOXphWG85SldRcExnb0FVbWxuYUhRZ2NHOXphWFJwYjI0Z2IyWWdkR2hsSUdSbFkyOWtaV1FnWVhKbFlTQW9jbVZuYVc5dVgzZ3hQU1ZrS1NCcGN5QnZkWFJ6YVdSbElIUm9aU0JwYldGblpTQmhjbVZoSUNoWVQzTnBlajBsWkNrdUNnQk1aV1owSUhCdmMybDBhVzl1SUc5bUlIUm9aU0JrWldOdlpHVmtJR0Z5WldFZ0tISmxaMmx2Ymw5NE1EMGxaQ2tnYVhNZ2IzVjBjMmxrWlNCMGFHVWdhVzFoWjJVZ1lYSmxZU0FvV0U5emFYbzlKV1FwTGdvQVUybDZaU0I0SUc5bUlIUm9aU0JrWldOdlpHVmtJR052YlhCdmJtVnVkQ0JwYldGblpTQnBjeUJwYm1OdmNuSmxZM1FnS0dOdmJYQmJKV1JkTG5jOUpXUXBMZ29BVTJsNlpTQjVJRzltSUhSb1pTQmtaV052WkdWa0lHTnZiWEJ2Ym1WdWRDQnBiV0ZuWlNCcGN5QnBibU52Y25KbFkzUWdLR052YlhCYkpXUmRMbWc5SldRcExnb0FWR2xzWlNCeVpXRmtMQ0JrWldOdlpHVmtJR0Z1WkNCMWNHUmhkR1ZrSUdseklHNXZkQ0IwYUdVZ1pHVnphWEpsWkNCdmJtVWdLQ1ZrSUhaeklDVmtLUzRLQUVsdWRtRnNhV1FnWTI5dGNHOXVaVzUwSUdsdVpHVjRJQ1ZrSUNnK1BTQWxaQ2t1Q2dCdmNHcGZjbVZoWkY5b1pXRmtaWElvS1NCemFHOTFiR1FnWW1VZ1kyRnNiR1ZrSUdKbFptOXlaU0J2Y0dwZmMyVjBYMlJsWTI5a1pXUmZZMjl0Y0c5dVpXNTBjeWdwTGdvQVRXVnRiM0o1SUdGc2JHOWpZWFJwYjI0Z1ptRnBiSFZ5WlNCcGJpQnZjR3BmYW5BeVgyRndjR3g1WDNCamJISW9LUzRLQUdsdFlXZGxMVDVqYjIxd2Mxc2xaRjB1WkdGMFlTQTlQU0JPVlV4TUlHbHVJRzl3YWw5cWNESmZZWEJ3YkhsZmNHTnNjaWdwTGdvQWFXNTJZV3hwWkNCaWIzZ2djMmw2WlNBbFpDQW9KWGdwQ2dCR1lXbHNJSFJ2SUhKbFlXUWdkR2hsSUdOMWNuSmxiblFnYldGeWEyVnlJSE5sWjIxbGJuUWdLQ1VqZUNrS0FFVnljbTl5SUhkcGRHZ2dVMGxhSUcxaGNtdGxjam9nU1VoRVVpQjNLQ1YxS1NCb0tDVjFLU0IyY3k0Z1UwbGFJSGNvSlhVcElHZ29KWFVwQ2dCRmNuSnZjaUJ5WldGa2FXNW5JRU5QUXlCdFlYSnJaWElnS0dKaFpDQnVkVzFpWlhJZ2IyWWdZMjl0Y0c5dVpXNTBjeWtLQUVsdWRtRnNhV1FnYm5WdFltVnlJRzltSUhScGJHVnpJRG9nSlhVZ2VDQWxkU0FvYldGNGFXMTFiU0JtYVhobFpDQmllU0JxY0dWbk1qQXdNQ0J1YjNKdElHbHpJRFkxTlRNMUlIUnBiR1Z6S1FvQVNXNTJZV3hwWkNCdWRXMWlaWElnYjJZZ1kyOXRjRzl1Wlc1MGN5QW9hV2hrY2lrS0FFNXZkQ0JsYm05MVoyZ2diV1Z0YjNKNUlIUnZJR2hoYm1Sc1pTQnBiV0ZuWlNCb1pXRmtaWElnS0dsb1pISXBDZ0JYY205dVp5QjJZV3gxWlhNZ1ptOXlPaUIzS0NWa0tTQm9LQ1ZrS1NCdWRXMWpiMjF3Y3lnbFpDa2dLR2xvWkhJcENnQkpiblpoYkdsa0lIWmhiSFZsY3lCbWIzSWdZMjl0Y0NBOUlDVmtJRG9nWkhnOUpYVWdaSGs5SlhVZ0tITm9iM1ZzWkNCaVpTQmlaWFIzWldWdUlERWdZVzVrSURJMU5TQmhZMk52Y21ScGJtY2dkRzhnZEdobElFcFFSVWN5TURBd0lHNXZjbTBwQ2dCMFkzQmZjbUYwWlhOYkpXUmRQU1ZtSUhOb2IzVnNaQ0JpWlNCemRISnBZM1JzZVNCc1pYTnpaWElnZEdoaGJpQjBZM0JmY21GMFpYTmJKV1JkUFNWbUlDaGpiM0p5WldOMFpXUWdZWE1nSldZcENnQjBZM0JmY21GMFpYTmJKV1JkUFNWbUlDaGpiM0p5WldOMFpXUWdZWE1nSldZcElITm9iM1ZzWkNCaVpTQnpkSEpwWTNSc2VTQnNaWE56WlhJZ2RHaGhiaUIwWTNCZmNtRjBaWE5iSldSZFBTVm1JQ2hqYjNKeVpXTjBaV1FnWVhNZ0pXWXBDZ0JDWVdRZ2FXMWhaMlVnYUdWaFpHVnlJR0p2ZUNBb1ltRmtJSE5wZW1VcENnQkNZV1FnUTA5TVVpQm9aV0ZrWlhJZ1ltOTRJQ2hpWVdRZ2MybDZaU2tLQUVKaFpDQkNVRU5ESUdobFlXUmxjaUJpYjNnZ0tHSmhaQ0J6YVhwbEtRb0FSWEp5YjNJZ2QybDBhQ0JUU1ZvZ2JXRnlhMlZ5T2lCdVpXZGhkR2wyWlNCdmNpQjZaWEp2SUdsdFlXZGxJSE5wZW1VZ0tDVnNiR1FnZUNBbGJHeGtLUW9BYzJ0cGNEb2djMlZuYldWdWRDQjBiMjhnYkc5dVp5QW9KV1FwSUhkcGRHZ2diV0Y0SUNnbFpDa2dabTl5SUdOdlpHVmliRzlqYXlBbFpDQW9jRDBsWkN3Z1lqMGxaQ3dnY2owbFpDd2dZejBsWkNrS0FISmxZV1E2SUhObFoyMWxiblFnZEc5dklHeHZibWNnS0NWa0tTQjNhWFJvSUcxaGVDQW9KV1FwSUdadmNpQmpiMlJsWW14dlkyc2dKV1FnS0hBOUpXUXNJR0k5SldRc0lISTlKV1FzSUdNOUpXUXBDZ0JFWlhOd2FYUmxJRXBRTWlCQ1VFTWhQVEkxTlN3Z2NISmxZMmx6YVc5dUlHRnVaQzl2Y2lCeloyNWtJSFpoYkhWbGN5Qm1iM0lnWTI5dGNGc2xaRjBnYVhNZ1pHbG1abVZ5Wlc1MElIUm9ZVzRnWTI5dGNGc3dYVG9LSUNBZ0lDQWdJQ0JiTUYwZ2NISmxZeWdsWkNrZ2MyZHVaQ2dsWkNrZ1d5VmtYU0J3Y21WaktDVmtLU0J6WjI1a0tDVmtLUW9BWW1Ga0lHTnZiWEJ2Ym1WdWRDQnVkVzFpWlhJZ2FXNGdVa2RPSUNnbFpDQjNhR1Z1SUhSb1pYSmxJR0Z5WlNCdmJteDVJQ1ZrS1FvQVJYSnliM0lnZDJsMGFDQlRTVm9nYldGeWEyVnlPaUJ1ZFcxaVpYSWdiMllnWTI5dGNHOXVaVzUwSUdseklHNXZkQ0JqYjIxd1lYUnBZbXhsSUhkcGRHZ2dkR2hsSUhKbGJXRnBibWx1WnlCdWRXMWlaWElnYjJZZ2NHRnlZVzFsZEdWeWN5QW9JQ1ZrSUhaeklDVmtLUW9BU2xCRlJ5QXlNREF3SUZCeWIyWnBiR1V0TkNBb05Hc2daR01nY0hKdlptbHNaU2tnY21WeGRXbHlaWE02Q2s1MWJXSmxjaUJ2WmlCa1pXTnZiWEJ2YzJsMGFXOXVJR3hsZG1Wc2N5QStQU0F4SUNZbUlEdzlJRFlLTFQ0Z1RuVnRZbVZ5SUc5bUlHUmxZMjl0Y0c5emFYUnBiMjRnYkdWMlpXeHpJR1p2Y21ObFpDQjBieUEySUNoeVlYUm9aWElnZEdoaGJpQWxaQ2tLQUVwUVJVY2dNakF3TUNCUWNtOW1hV3hsTFRNZ0tESnJJR1JqSUhCeWIyWnBiR1VwSUhKbGNYVnBjbVZ6T2dwT2RXMWlaWElnYjJZZ1pHVmpiMjF3YjNOcGRHbHZiaUJzWlhabGJITWdQRDBnTlFvdFBpQk9kVzFpWlhJZ2IyWWdaR1ZqYjIxd2IzTnBkR2x2YmlCc1pYWmxiSE1nWm05eVkyVmtJSFJ2SURVZ0tISmhkR2hsY2lCMGFHRnVJQ1ZrS1FvQVNsQkZSeUF5TURBd0lGQnliMlpwYkdVdE5DQW9OR3NnWkdNZ2NISnZabWxzWlNrZ2NtVnhkV2x5WlhNNkNrNTFiV0psY2lCdlppQmtaV052YlhCdmMybDBhVzl1SUd4bGRtVnNjeUErUFNBeElDWW1JRHc5SURZS0xUNGdUblZ0WW1WeUlHOW1JR1JsWTI5dGNHOXphWFJwYjI0Z2JHVjJaV3h6SUdadmNtTmxaQ0IwYnlBeElDaHlZWFJvWlhJZ2RHaGhiaUFsWkNrS0FFVnljbTl5SUhkcGRHZ2dVMGxhSUcxaGNtdGxjam9nYVc1MllXeHBaQ0IwYVd4bElITnBlbVVnS0hSa2VEb2dKV1FzSUhSa2VUb2dKV1FwQ2dCQ1lXUWdRMDlNVWlCb1pXRmtaWElnWW05NElDaGlZV1FnYzJsNlpUb2dKV1FwQ2dCQ1lXUWdRMDlNVWlCb1pXRmtaWElnWW05NElDaERTVVZNWVdJc0lHSmhaQ0J6YVhwbE9pQWxaQ2tLQUZCVVJWSk5JR05vWldOcklHWmhhV3gxY21VNklDVmtJSEpsYldGcGJtbHVaeUJpZVhSbGN5QnBiaUJqYjJSbElHSnNiMk5ySUNnbFpDQjFjMlZrSUM4Z0pXUXBDZ0JOWVd4bWIzSnRaV1FnU0ZRZ1kyOWtaV0pzYjJOckxpQlBibVVnYjJZZ2RHaGxJR1p2Ykd4dmQybHVaeUJqYjI1a2FYUnBiMjRnYVhNZ2JtOTBJRzFsZERvZ01pQThQU0JUWTNWd0lEdzlJRzFwYmloTVkzVndMQ0EwTURjNUtRb0FTVzUyWVd4cFpDQjJZV3gxWlhNZ1ptOXlJR052YlhBZ1BTQWxaQ0E2SUhCeVpXTTlKWFVnS0hOb2IzVnNaQ0JpWlNCaVpYUjNaV1Z1SURFZ1lXNWtJRE00SUdGalkyOXlaR2x1WnlCMGJ5QjBhR1VnU2xCRlJ6SXdNREFnYm05eWJTNGdUM0JsYmtwd1pXY2diMjVzZVNCemRYQndiM0owY3lCMWNDQjBieUF6TVNrS0FFbHVkbUZzYVdRZ1ltbDBJRzUxYldKbGNpQWxaQ0JwYmlCdmNHcGZkREpmY21WaFpGOXdZV05yWlhSZmFHVmhaR1Z5S0NrS0FGTjBjbVZoYlNCbGNuSnZjaUVLQUVWeWNtOXlJRzl1SUhkeWFYUnBibWNnYzNSeVpXRnRJUW9BVFc5eVpTQjBhR0Z1SURJMU5TQlFURlFnYldGeWEyVnljeUIzYjNWc1pDQmlaU0J1WldWa1pXUWdabTl5SUdOMWNuSmxiblFnZEdsc1pTMXdZWEowSUNFS0FGTjBjbVZoYlNCeVpXRmphR1ZrSUdsMGN5QmxibVFnSVFvQVRtOTBJR1Z1YjNWbmFDQnRaVzF2Y25rZ2RHOGdZV3hzYjJOaGRHVWdZMjl3ZVNCdlppQjFjMlZ5SUdWdVkyOWthVzVuSUhCaGNtRnRaWFJsY25NZ2JXRjBjbWw0SUFvQVRtOTBJR1Z1YjNWbmFDQnRaVzF2Y25rZ2RHOGdZV3hzYjJOaGRHVWdaVzVqYjJSbGNpQk5RMVFnWkdWamIyUnBibWNnYldGMGNtbDRJQW9BUm1GcGJHVmtJSFJ2SUdsdWRtVnljMlVnWlc1amIyUmxjaUJOUTFRZ1pHVmpiMlJwYm1jZ2JXRjBjbWw0SUFvQVRtOTBJR1Z1YjNWbmFDQnRaVzF2Y25rZ2RHOGdZV3hzYjJOaGRHVWdaVzVqYjJSbGNpQk5RMVFnWTI5a2FXNW5JRzFoZEhKcGVDQUtBRTV2ZENCbGJtOTFaMmdnYldWdGIzSjVJSFJ2SUdGc2JHOWpZWFJsSUdWdVkyOWtaWElnVFVOVUlHNXZjbTF6SUFvQVJYaHdaV04wWldRZ1lTQlRUME1nYldGeWEyVnlJQW9BU1c1MllXeHBaQ0JpYjNnZ2MybDZaU0FsWkNCbWIzSWdZbTk0SUNjbFl5VmpKV01sWXljdUlFNWxaV1FnSldRZ1lubDBaWE1zSUNWa0lHSjVkR1Z6SUhKbGJXRnBibWx1WnlBS0FFMWhiR1p2Y20xbFpDQklWQ0JqYjJSbFlteHZZMnN1SUVSbFkyOWthVzVuSUhSb2FYTWdZMjlrWldKc2IyTnJJR2x6SUhOMGIzQndaV1F1SUZWZmNTQnBjeUJzWVhKblpYSWdkR2hoYmlCNlpYSnZJR0pwZEhCc1lXNWxjeUFySURFZ0NnQk5ZV3htYjNKdFpXUWdTRlFnWTI5a1pXSnNiMk5yTGlCRVpXTnZaR2x1WnlCMGFHbHpJR052WkdWaWJHOWpheUJwY3lCemRHOXdjR1ZrTGlCVlgzRWdhWE5zWVhKblpYSWdkR2hoYmlCaWFYUndiR0Z1WlhNZ0t5QXhJQW9BUTA5TVVpQkNUMWdnYldWMGFDQjJZV3gxWlNCcGN5QnViM1FnWVNCeVpXZDFiR0Z5SUhaaGJIVmxJQ2dsWkNrc0lITnZJSGRsSUhkcGJHd2dhV2R1YjNKbElIUm9aU0JsYm5ScGNtVWdRMjlzYjNWeUlGTndaV05wWm1sallYUnBiMjRnWW05NExpQUtBRmRvYVd4bElISmxZV1JwYm1jZ1EwTlFYMUZPVkZOVVdTQmxiR1Z0Wlc1MElHbHVjMmxrWlNCUlEwUWdiM0lnVVVORElHMWhjbXRsY2lCelpXZHRaVzUwTENCdWRXMWlaWElnYjJZZ2MzVmlZbUZ1WkhNZ0tDVmtLU0JwY3lCbmNtVmhkR1Z5SUhSdklFOVFTbDlLTWt0ZlRVRllRa0ZPUkZNZ0tDVmtLUzRnVTI4Z2QyVWdiR2x0YVhRZ2RHaGxJRzUxYldKbGNpQnZaaUJsYkdWdFpXNTBjeUJ6ZEc5eVpXUWdkRzhnVDFCS1gwb3lTMTlOUVZoQ1FVNUVVeUFvSldRcElHRnVaQ0J6YTJsd0lIUm9aU0J5WlhOMExpQUtBRXBRTWlCSlNFUlNJR0p2ZURvZ1kyOXRjSEpsYzNOcGIyNGdkSGx3WlNCcGJtUnBZMkYwWlNCMGFHRjBJSFJvWlNCbWFXeGxJR2x6SUc1dmRDQmhJR052Ym1admNtMXBibWNnU2xBeUlHWnBiR1VnS0NWa0tTQUtBRlJwYkdVZ2FXNWtaWGdnY0hKdmRtbGtaV1FnWW5rZ2RHaGxJSFZ6WlhJZ2FYTWdhVzVqYjNKeVpXTjBJQ1ZrSUNodFlYZ2dQU0FsWkNrZ0NnQkZjbkp2Y2lCa1pXTnZaR2x1WnlCamIyMXdiMjVsYm5RZ0pXUXVDbFJvWlNCdWRXMWlaWElnYjJZZ2NtVnpiMngxZEdsdmJuTWdkRzhnY21WdGIzWmxJQ2dsWkNrZ2FYTWdaM0psWVhSbGNpQnZjaUJsY1hWaGJDQjBhR0Z1SUhSb1pTQnVkVzFpWlhJZ2IyWWdjbVZ6YjJ4MWRHbHZibk1nYjJZZ2RHaHBjeUJqYjIxd2IyNWxiblFnS0NWa0tRcE5iMlJwWm5rZ2RHaGxJR053WDNKbFpIVmpaU0J3WVhKaGJXVjBaWEl1Q2dvQVNXMWhaMlVnWkdGMFlTQm9ZWE1nWW1WbGJpQjFjR1JoZEdWa0lIZHBkR2dnZEdsc1pTQWxaQzRLQ2dBQTJMOEFBRXh4QUFCT1UzUXpYMTh5TVRKaVlYTnBZMTl6ZEhKcGJtZEpkMDVUWHpFeFkyaGhjbDkwY21GcGRITkpkMFZGVGxOZk9XRnNiRzlqWVhSdmNrbDNSVVZGUlFBQTJMOEFBSlJ4QUFCT1UzUXpYMTh5TVRKaVlYTnBZMTl6ZEhKcGJtZEpSSE5PVTE4eE1XTm9ZWEpmZEhKaGFYUnpTVVJ6UlVWT1UxODVZV3hzYjJOaGRHOXlTVVJ6UlVWRlJRQUFBTmkvQUFEZ2NRQUFUbE4wTTE5Zk1qRXlZbUZ6YVdOZmMzUnlhVzVuU1VScFRsTmZNVEZqYUdGeVgzUnlZV2wwYzBsRWFVVkZUbE5mT1dGc2JHOWpZWFJ2Y2tsRWFVVkZSVVVBQUFEWXZ3QUFMSElBQUU0eE1HVnRjMk55YVhCMFpXNHhNVzFsYlc5eWVWOTJhV1YzU1dORlJRQUEyTDhBQUZSeUFBQk9NVEJsYlhOamNtbHdkR1Z1TVRGdFpXMXZjbmxmZG1sbGQwbGhSVVVBQU5pL0FBQjhjZ0FBVGpFd1pXMXpZM0pwY0hSbGJqRXhiV1Z0YjNKNVgzWnBaWGRKYzBWRkFBRFl2d0FBcEhJQUFFNHhNR1Z0YzJOeWFYQjBaVzR4TVcxbGJXOXllVjkyYVdWM1NYUkZSUUFBMkw4QUFNeHlBQUJPTVRCbGJYTmpjbWx3ZEdWdU1URnRaVzF2Y25sZmRtbGxkMGxwUlVVQUFOaS9BQUQwY2dBQVRqRXdaVzF6WTNKcGNIUmxiakV4YldWdGIzSjVYM1pwWlhkSmFrVkZBQURZdndBQUhITUFBRTR4TUdWdGMyTnlhWEIwWlc0eE1XMWxiVzl5ZVY5MmFXVjNTV3hGUlFBQTJMOEFBRVJ6QUFCT01UQmxiWE5qY21sd2RHVnVNVEZ0WlcxdmNubGZkbWxsZDBsdFJVVUFBTmkvQUFCc2N3QUFUakV3WlcxelkzSnBjSFJsYmpFeGJXVnRiM0o1WDNacFpYZEplRVZGQUFEWXZ3QUFsSE1BQUU0eE1HVnRjMk55YVhCMFpXNHhNVzFsYlc5eWVWOTJhV1YzU1hsRlJRQUEyTDhBQUx4ekFBQk9NVEJsYlhOamNtbHdkR1Z1TVRGdFpXMXZjbmxmZG1sbGQwbG1SVVVBQU5pL0FBRGtjd0FBVGpFd1pXMXpZM0pwY0hSbGJqRXhiV1Z0YjNKNVgzWnBaWGRKWkVWRkFBQUlkQUFBMkw4QUFCQjBBQUJPVTNRelgxOHlNVEppWVhOcFkxOXpkSEpwYm1kSlkwNVRYekV4WTJoaGNsOTBjbUZwZEhOSlkwVkZUbE5mT1dGc2JHOWpZWFJ2Y2tsalJVVkZSUUJ3Y0FBQUFOaS9BQUJjZEFBQU9VWnlZVzFsU1c1bWJ3QndBSFp3QUdsd2NBQjJjSEJwQUFBQUFOaS9BQUNBZEFBQU5WQnZhVzUwQUFEWXZ3QUFrSFFBQURSVGFYcGxBQUFBMkw4QUFLQjBBQUF4TUVveVMwUmxZMjlrWlhJQUFBQUFYTUFBQU1CMEFBQUFBQUFBbUhRQUFGQXhNRW95UzBSbFkyOWtaWElBQUFCY3dBQUE0SFFBQUFFQUFBQ1lkQUFBVUVzeE1Fb3lTMFJsWTI5a1pYSUFkZ0FBQUFDd2RBQUFCSFVBQUxCMEFBQ1V2d0FBMkw4QUFBeDFBQUJPTVRCbGJYTmpjbWx3ZEdWdU0zWmhiRVVBY0hCd2NBRFl2d0FBTEhVQUFFNHhNR1Z0YzJOeWFYQjBaVzR4TVcxbGJXOXllVjkyYVdWM1NXaEZSUUFBQkhVQUFMQjBBQUJ3Y0hBQUJIVUFBQ1IxQUFBUXZ3QUFzSFFBQUhad2NBQ0lkQUFBc0hRQUFIQy9BQUJ3Y0hCcEFBQUFBQkMvQUFDd2RBQUFsTDhBQUpTL0FBQjJjSEJ3Y0FBQUFGUjBBQURRZEFBQWxMOEFBTkIwQUFCd2NIQUFLTDhBQU5CMEFBQnd2d0FBMEhRQUFIaDBBQURRZEFBQWlIUUFBTkIwQUFCd3Z3QUEwSFFBQUpTL0FBRFFkQUFBMkw4QUFPUjFBQUF4TUVveVMwVnVZMjlrWlhJQUFBQUFYTUFBQUFSMkFBQUFBQUFBM0hVQUFGQXhNRW95UzBWdVkyOWtaWElBQUFCY3dBQUFKSFlBQUFFQUFBRGNkUUFBVUVzeE1Fb3lTMFZ1WTI5a1pYSUFBUFIxQUFBRWRRQUE5SFVBQUZSMEFBQndjSEJ3QUFBQUFBUjFBQUQwZFFBQUVMOEFBUFIxQUFBUXZ3QUE5SFVBQUpTL0FBQjJjSEJ3QUFBQUFCQy9BQUQwZFFBQUtMOEFBSlMvQUFCMmNIQnBjQT09IiksIE4oTSwgMzAzNTIsICJFTDhBQVBSMUFBQ1V2d0FBZUhRQUFIWndjSEJ3QUFBQUVMOEFBUFIxQUFCNGRBQUFkbkJ3Y0FBQUFBQVF2d0FBOUhVQUFJaDAiKSwgTihNLCAzMDQxNiwgIkVMOEFBUFIxQUFDVXZ3QUFpSFFBQUJDL0FBRDBkUUFBbEw4QUFMaS9BQUIyY0hCd1pnPT0iKSwgTihNLCAzMDQ2NCwgImc4REtvVVcyK3o5Lyt6cHd6b2pxUDMvN09uRE9pT28vQUFBQUFBQUFBQUNEd01xaFJiYjdQK0Y2Rks1SDRmdy9YcnBKREFJcitUOD0iKSwgTihNLCAzMDUzNCwgIjhEOEFBQUFBQUFENFB3QUFBQUFBQUFaQUFBQUFBQUNBRlVCY2o4TDFLRndsUU5lamNEMEtWelZBOWloY2o4SlZSVUNGNjFHNEhsVlZRR1ptWm1abVZtVkF6Y3pNek14VWRVRFA5MVBqcFp2d1AwYTI4LzNVZVBrL0p6RUlyQnhhQjBBZFdtUTczODhXUUNsY2o4TDFxQ1pBcEhBOUN0ZWpOa0FBQUFBQUFLQkdRQitGNjFHNG5sWkF6Y3pNek15Y1prQUFBQUFBQUFBQUFNLzNVK09sbS9BL1JyYnovZFI0K1Q4bk1RaXNIRm9IUUIxYVpEdmZ6eFpBS1Z5UHd2V29Ka0NrY0QwSzE2TTJRQUFBQUFBQW9FWkFINFhyVWJpZVZrRE56TXpNekp4bVFBQUFBQUFBQUFBQXJmcGNiY1grNWo5V2ZhNjJZbi90UDhkTE40bEJZUGsvOHRKTlloQllDRUQ2Zm1xOGRCTVlRSVhyVWJnZUJTaEFBQUFBQUFBQU9FQmNqOEwxS1B4SFFPeFJ1QjZGKzFkQSIpLCBOKE0sIDMwODU0LCAiOEQ5eFBRclhvM0QvUDJpUjdYdy90UkJBZFpNWUJGYk9JRUJtWm1abVp1WXdRT3hSdUI2RjYwQkFYSS9DOVNqc1VFQ2FtWm1abWVsZ1FKcVptWm1aNlhCQU16TXpNelBuZ0VDVEdBUldEaTBBUUxiei9kUjQ2UTlBOWloY2o4SzFJRUFLMTZOd1BRb3hRTVAxS0Z5UElrRkF1QjZGNjFFb1VVQ2FtWm1abVNsaFFKcVptWm1aS1hGQUFBQUFBQUFvZ1VBQUFBQUFBQUFBQUpNWUJGWU9MUUJBdHZQOTFIanBEMEQyS0Z5UHdyVWdRQXJYbzNBOUNqRkF3L1VvWEk4aVFVQzRIb1hyVVNoUlFKcVptWm1aS1dGQW1wbVptWmtwY1VBQUFBQUFBQ2lCUUFBQUFBQUFBQUFBcEhBOUN0ZWpBRURzVWJnZWhlc09RSGUrbnhvdm5TQkFya2ZoZWhRdU1VQjdGSzVINFZwQlFQWW9YSS9DWlZGQW1wbVptWmxwWVVDYW1abVptV2x4UUpxWm1abVphWUZBQUFBQUFBQUFBQUJEY21WaGRHVmtJR0o1SUU5d1pXNUtVRVZISUhabGNuTnBiMjRnQUFBQUFBSUFBQUFFQUFBQUJBQUFBQWdBQUFDWEFBQUFtQUFBQUprQUFBQ2FBQUFBQkFBQUFFTlFVa3dBQUFBQUFBQUFBRXhTUTFBQUFBQUFBd0FBQUZCRFVrd0FBQUFBQVFBQUFGSk1RMUFBQUFBQUFnQUFBRkpRUTB3QUFBQUEvLy8vL3c9PSIpLCBOKE0sIDMxMzEyLCAiRHdBQkFBRUFBUUFDQUFNQUJBQUZBQVlBQndBSUFBaz0iKSwgTihNLCAzMTM0NCwgImtQOEFBQXdBQUFDYkFBQUFVdjhBQUJRQUFBQ2NBQUFBVS84QUFCUUFBQUNkQUFBQVh2OEFBQlFBQUFDZUFBQUFYUDhBQUJRQUFBQ2ZBQUFBWGY4QUFCUUFBQUNnQUFBQVgvOEFBQlFBQUFDaEFBQUFVZjhBQUFJQUFBQ2lBQUFBVmY4QUFBUUFBQUNqQUFBQVYvOEFBQVFBQUFDa0FBQUFXUDhBQUJBQUFBQ2xBQUFBWVA4QUFBUUFBQUNtQUFBQVlmOEFBQkFBQUFDbkFBQUFrZjg9IiksIE4oTSwgMzE1MTIsICJZLzhBQUFRQUFBQ29BQUFBWlA4QUFCUUFBQUNwQUFBQWRQOEFBQlFBQUFDcUFBQUFlUDhBQUFRQUFBQ3JBQUFBVVA4QUFBUUFBQUNzQUFBQVdmOEFBQVFBQUFDdEFBQUFkZjhBQUJRQUFBQ3VBQUFBZC84QUFCUUFBQUN2QUFBQUFBQUFBQlE9IiksIE4oTSwgMzE2MzIsICJzQUFBQUxFQUFBQ3lBQUFBc3dBQUFMUUFBQUMxQUFBQXRnQUFBTGNBQUFCRDNoTUFJZThKQUVQZUV3QUM1UThBZ2ZJSEFBTGxEdz09IiksIE4oTSwgMzE2OTYsICJJQ0JRYXNRQUFBQndlWFJteFFBQUFHZ3ljR3JHIiksIE4oTSwgMzE3MjgsICJjbVJvYWNjQUFBQnliRzlqeUFBQUFHTmpjR0xKQUFBQWNteGpjTW9BQUFCd1lXMWp5d0FBQUdabFpHUE1BQUFBQXdBQUFBRUFBQUFEQUFBQUFBQUFBQ01BcFFCREFHWUFnd0R1cUJRQTM5Z2pBTDRRUXdELzlZTUFmaUJWQUY5Ukl3QTFBRU1BVGtTREFNN0VGQURQekNNQS91SkRBUCtaZ3dDV0FNVUFQekVqQUtVQVF3QmVSSU1BenNnVUFOOFJJd0QrOUVNQS8veURBSjRBVlFCM0FDTUFOUUJEQVAveGd3Q3VpQlFBdHdBakFQNzRRd0R2NUlNQWpvakZBQjhSSXdDbEFFTUFaZ0NEQU82b0ZBRGZWQ01BdmhCREFPOGlnd0IrSUZVQWZ5SWpBRFVBUXdCT1JJTUF6c1FVQUw4Ukl3RCs0a01BOXdDREFKWUF4UUEvSWlNQXBRQkRBRjVFZ3dET3lCUUExd0FqQVA3MFF3RC91b01BbmdCVkFHOEFJd0ExQUVNQS8rYURBSzZJRkFDdm9pTUEvdmhEQU9jQWd3Q09pTVVBTHlJQ0FNVUFoQUIrSUFJQXpzUWtBUGNBQWdEK29rUUFWZ0FDQUo0QUZBRFhBQUlBdmhDRUFHWUFBZ0N1aUNRQTN4RUNBTzZvUkFBMkFBSUFqb2dVQUI4UkFnREZBSVFBYmdBQ0FNNklKQUQvaUFJQS9yaEVBRTVFQWdDV0FCUUF0d0FDQVA3a2hBQmVSQUlBcGdBa0FPY0FBZ0RlVkVRQUxpSUNBRDRBRkFCM0FBSUF4UUNFQUg0Z0FnRE94Q1FBLy9FQ0FQNmlSQUJXQUFJQW5nQVVBTDhSQWdDK0VJUUFaZ0FDQUs2SUpBRHZJZ0lBN3FoRUFEWUFBZ0NPaUJRQWZ5SUNBTVVBaEFCdUFBSUF6b2drQU8va0FnRCt1RVFBVGtRQ0FKWUFGQUN2b2dJQS91U0VBRjVFQWdDbUFDUUEzOWdDQU41VVJBQXVJZ0lBUGdBVUFGOVJBZ0JWQUlRQVpnQUNBTjZJSkFEL01nSUEvaEZFQUU1RUFnQ3VBQlFBdHdBQ0FINHhoQUJlVVFJQXhnQWtBTmNBQWdEdUlFUUFIaEVDQUo0QUZBQjNBQUlBVlFDRUFGNVVBZ0RPUkNRQTV3QUNBUDd4UkFBMkFBSUFwZ0FVQUY5VkFnRCtkSVFBUGhFQ0FMNGdKQUIvZEFJQTNzUkVBUC80QWdDV0FCUUFMeUlDQUZVQWhBQm1BQUlBM29na0FQY0FBZ0QrRVVRQVRrUUNBSzRBRkFDUGlBSUFmakdFQUY1UkFnREdBQ1FBejhnQ0FPNGdSQUFlRVFJQW5nQVVBRzhBQWdCVkFJUUFYbFFDQU01RUpBRGYwUUlBL3ZGRUFEWUFBZ0NtQUJRQWZ5SUNBUDUwaEFBK0VRSUF2aUFrQUw4aUFnRGV4RVFBN3lJQ0FKWUFGQUEvTWdNQTN0VDk5UC84RkFBK0VWVUFqNGdEQUw0eWhRRG5BQ1VBWGxIK3FuOXlBd0RPUlAzNDcwUVVBSDVrUlFDdm9nTUFwZ0JkVmQrWi9mRTJBUDcxYjJJREFON1IvZlQvNWhRQWZuRlZBTCt4QXdDdWlJVUEzOVVsQUU1RS92Si9aZ01BeGdEOStPL2lGQUJlVkVVQW54RURBSllBWFZYUHlQM3hIaEh1eUdjQUF3RGUxUDMwLy9NVUFENFJWUUMvRVFNQXZqS0ZBTi9ZSlFCZVVmNnFMeUlEQU01RS9majNBQlFBZm1SRkFKK1lBd0NtQUYxVjF3RDk4VFlBL3ZWdlJBTUEzdEg5OVArNUZBQitjVlVBdHdBREFLNkloUURmM0NVQVRrVCs4bmNBQXdER0FQMzQ3K1FVQUY1VVJRQi9jd01BbGdCZFZiKzQvZkVlRWU3SVB6SUNBS1VBaEFCK1FBSUEzaEFrQU44UkFnRCtja1FBVmdBQ0FLNm9GQUMvc2dJQWxnQ0VBR1lBQWdER0FDUUE1d0FDQU83SVJBQXVJZ0lBam9nVUFIY0FBZ0NsQUlRQWJnQUNBTTZJSkFEM0FBSUEvcEZFQURZQUFnQ3VvaFFBcjZvQ0FQNjRoQUJlQUFJQXZnQWtBTS9FQWdEdVJFUUEvL1FDQUQ0aUZBQWZFUUlBcFFDRUFINUFBZ0RlRUNRQS81a0NBUDV5UkFCV0FBSUFycWdVQUxjQUFnQ1dBSVFBWmdBQ0FNWUFKQURYQUFJQTdzaEVBQzRpQWdDT2lCUUFUMFFDQUtVQWhBQnVBQUlBem9na0FPL2lBZ0Qra1VRQU5nQUNBSzZpRkFCL1JBSUEvcmlFQUY0QUFnQytBQ1FBbndBQ0FPNUVSQUQvZGdJQVBpSVVBRDh4QXdER0FJVUEvOW45OG41ay92Ry9tUU1BcnFJbEFPOW0vZlJXQU83aWYzTURBTDZZUlFEM0FQMzRaZ0QrZHArSUF3Q09pQlVBMzlXbEFDNGkzcGhQUkFNQXZyS0ZBUC84L2ZKdUlwWUF0d0FEQUs2cUpRRGYwZjMwTmdEZTFHOWtBd0N1cUVVQTcrcjkrRjVFN3VoL2NRTUFQaklWQU0vRXBRRC8rczZJUHpFREFNWUFoUUQvZC8zeWZtVCs4Yit6QXdDdW9pVUE1d0Q5OUZZQTd1SjNBQU1BdnBoRkFPL2svZmhtQVA1MmYyWURBSTZJRlFEWEFLVUFMaUxlbUQ4ekF3Qytzb1VBLzNYOThtNGlsZ0Nma1FNQXJxb2xBTitaL2ZRMkFON1VYMUVEQUs2b1JRRHY3UDM0WGtUdTZIOXlBd0ErTWhVQXY3R2xBUC96em9nZkVRTUEzbFQ5OGg0UkZBQitaUDc0ejh3REFMNlJSUUR2SWlVQUxpTCs4NCtJQXdER0FJVUE5d0FVQUY0Ui92eXZxQU1BcGdBMUFOL0kvZkUrTWY1bWIyUURBTTdJL2ZMLzlSUUFaZ0QrOUwrNkF3Q3VJa1VBNXdBbEFENHkvdXAvY3dNQXZyS0ZBTjlWRkFCV0FINXhueEVEQUpZQU5RRFB4UDN4UGpQdTZFOUVBd0RlVlAzeUhoRVVBSDVrL3ZpL21RTUF2cEZGQU8vaUpRQXVJdjd6ZjJZREFNWUFoUUR2NUJRQVhoSCsvSitZQXdDbUFEVUExd0Q5OFQ0eC9tWnZJZ01BenNqOTh2KzVGQUJtQVA3MHR3QURBSzRpUlFEZjBTVUFQakwrNm5jQUF3Qytzb1VBNyt3VUFGWUFmbkYvY2dNQWxnQTFBTCs0L2ZFK00rN29YMVQ4OGQ3Ui9mclhBUHo0RmdEOS8zOTAvUFIrY2YzenY3UDg4dS9xN3VoUFJQenhyaUlGQUwrNC9QajNBUDc4ZHdEODlGNFIvZlYvZGZ6eTM5anU0ajh6L1BHK3N2MzZ6NGo4K1AvNy9mOS9jL3owYmdEOTg3Y0EvUEx2WnY3NVB6SDg4WjRBQlFDL3V2ejQvLzMrOW1jQS9QUW1BUDMxajRqODh0L2MzdFF2SXZ6eDN0SDkrcy9FL1BnV0FQMy9mM0w4OUg1eC9mTy9tZnp5Nyt6dTZFY0EvUEd1SWdVQXB3RDgrUC8zL3Z4WEFQejBYaEg5OVpjQS9QTGYxZTdpTndEODhiNnkvZnJIQVB6NC8vNzkvMzltL1BSdUFQM3pyNmo4OHVjQS92ay9Ndnp4bmdBRkFMK3gvUGp2NVA3MlgxVDg5Q1lBL2ZXSEFQenkzNW5lMUI4UkV3QmxBRU1BM2dDREFJMklJd0JPUkJNQXBRQkRBSzZJZ3dBMUFDTUExd0FUQU1VQVF3Q2VBSU1BVlFBakFDNGlFd0NWQUVNQWZnQ0RBUDRRSXdCM0FCTUFaUUJEQU02SWd3Q05pQ01BSGhFVEFLVUFRd0JlQUlNQU5RQWpBT2NBRXdERkFFTUF2Z0NEQUZVQUl3RC9FUk1BbFFCREFENEFnd0R1UUNNQXI2SVRBR1VBUXdEZUFJTUFqWWdqQUU1RUV3Q2xBRU1Bcm9pREFEVUFJd0R2UkJNQXhRQkRBSjRBZ3dCVkFDTUFMaUlUQUpVQVF3QitBSU1BL2hBakFMY0FFd0JsQUVNQXpvaURBSTJJSXdBZUVSTUFwUUJEQUY0QWd3QTFBQ01BejhRVEFNVUFRd0MrQUlNQVZRQWpBUGNBRXdDVkFFTUFQZ0NEQU81QUl3QnZBQUVBaEFBQkFGWUFBUUFVQUFFQTF3QUJBQ1FBQVFDV0FBRUFSUUFCQUhjQUFRQ0VBQUVBeGdBQkFCUUFBUUNQaUFFQUpBQUJBUGNBQVFBMUFBRUFMeUlCQUlRQUFRRCtRQUVBRkFBQkFMY0FBUUFrQUFFQXZ3QUJBRVVBQVFCbkFBRUFoQUFCQUtZQUFRQVVBQUVBVDBRQkFDUUFBUURuQUFFQU5RQUJBRDhSQVFDRUFBRUFWZ0FCQUJRQUFRRFBBQUVBSkFBQkFKWUFBUUJGQUFFQWJ3QUJBSVFBQVFER0FBRUFGQUFCQUo4QUFRQWtBQUVBN3dBQkFEVUFBUUEvTWdFQWhBQUJBUDVBQVFBVUFBRUFyd0FCQUNRQUFRRC9SQUVBUlFBQkFGOEFBUUNFQUFFQXBnQUJBQlFBQVFCL0FBRUFKQUFCQU44QUFRQTFBQUVBSHhFQkFDUUFBUUJXQUFFQWhRQUJBTDhBQVFBVUFBRUE5d0FCQU1ZQUFRQjNBQUVBSkFBQkFQLzRBUUJGQUFFQWZ3QUJBQlFBQVFEZkFBRUFwZ0FCQUQ4eEFRQWtBQUVBTGlJQkFJVUFBUUMzQUFFQUZBQUJBTzlFQVFDdW9nRUFad0FCQUNRQUFRRC9VUUVBUlFBQkFKY0FBUUFVQUFFQXp3QUJBRFlBQVFBL0lnRUFKQUFCQUZZQUFRQ0ZBQUVBdjdJQkFCUUFBUUR2UUFFQXhnQUJBRzhBQVFBa0FBRUEvM0lCQUVVQUFRQ2ZBQUVBRkFBQkFOY0FBUUNtQUFFQVQwUUJBQ1FBQVFBdUlnRUFoUUFCQUsrb0FRQVVBQUVBNXdBQkFLNmlBUUJmQUFFQUpBQUJBUDlFQVFCRkFBRUFqNGdCQUJRQUFRQ3ZxZ0VBTmdBQkFCOFJBZ0QrK0NRQVZnQUNBTFlBaFFEL1pnSUF6Z0FVQUI0UkFnQ1dBRFVBcjZnQ0FQWUFKQUErTVFJQXBnQkZBTCt6QWdDK3NoUUEvL1VDQUdZQWZsRmZWQUlBL3ZJa0FDNGlBZ0N1SW9VQTcwUUNBTVlBRkFELzlBSUFkZ0ExQUg5RUFnRGVRQ1FBUGpJQ0FKNEFSUURYQUFJQXZvZ1VBUC82QWdCZUVmN3hUMFFDQVA3NEpBQldBQUlBdGdDRkFPL0lBZ0RPQUJRQUhoRUNBSllBTlFDUGlBSUE5Z0FrQUQ0eEFnQ21BRVVBMzBRQ0FMNnlGQUQvcUFJQVpnQitVVzhBQWdEKzhpUUFMaUlDQUs0aWhRRG5BQUlBeGdBVUFPL2lBZ0IyQURVQWYzSUNBTjVBSkFBK01nSUFuZ0JGQUwreEFnQytpQlFBLzNNQ0FGNFIvdkUvTXdFQWhBQUJBTzRnQVFERkFBRUF6OFFCQUVRQUFRRC9NZ0VBRlFBQkFJK0lBUUNFQUFFQVpnQUJBQ1VBQVFDdkFBRUFSQUFCQU84aUFRQ21BQUVBWHdBQkFJUUFBUUJPUkFFQXhRQUJBTS9NQVFCRUFBRUE5d0FCQUJVQUFRQnZBQUVBaEFBQkFGWUFBUUFsQUFFQW53QUJBRVFBQVFEZkFBRUEvakFCQUM4aUFRQ0VBQUVBN2lBQkFNVUFBUURQeUFFQVJBQUJBUDhSQVFBVkFBRUFkd0FCQUlRQUFRQm1BQUVBSlFBQkFIOEFBUUJFQUFFQTV3QUJBS1lBQVFBM0FBRUFoQUFCQUU1RUFRREZBQUVBdHdBQkFFUUFBUUMvQUFFQUZRQUJBRDhBQVFDRUFBRUFWZ0FCQUNVQUFRQ1hBQUVBUkFBQkFOY0FBUUQrTUFFQUh4RUNBTzZvUkFDT2lBSUExZ0RGQVAvekFnRCsvQ1VBUGdBQ0FMWUFWUURmMkFJQS92aEVBR1lBQWdCK0lJVUEvNWtDQU9ZQTlRQTJBQUlBcGdBVkFKOEFBZ0QrOGtRQWRnQUNBTTVFeFFEL2RnSUEvdkVsQUU1RUFnQ3VBRlVBejhnQ0FQNzBSQUJlUkFJQXZoQ0ZBTy9rQWdEZVZQVUFIaEVDQUpZQUZRQXZJZ0lBN3FoRUFJNklBZ0RXQU1VQS8vb0NBUDc4SlFBK0FBSUF0Z0JWQUw4UkFnRCsrRVFBWmdBQ0FINGdoUUR2SWdJQTVnRDFBRFlBQWdDbUFCVUFmeUlDQVA3eVJBQjJBQUlBemtURkFQL1ZBZ0QrOFNVQVRrUUNBSzRBVlFCdkFBSUEvdlJFQUY1RUFnQytFSVVBM3hFQ0FONVU5UUFlRVFJQWxnQVZBRjlSQXdEMkFCUUFIaEZFQUk2SXBRRGYxQU1BcnFKVkFQOTJKQUErSXJZQXI2b0RBT1lBRkFELzlVUUFaZ0NGQU0vTUF3Q2VBTVVBNzBRa0FEWUEvdmgvTVFNQTd1Z1VBUC94UkFCMkFLVUF6OFFEQUg0aVZRRGYwU1FBVGtUKzlGOVJBd0RXQUJRQTcrSkVBRjVFaFFDL0lnTUFsZ0RGQU4vSUpBQXVJdjd5YnlJREFQWUFGQUFlRVVRQWpvaWxBTCt4QXdDdW9sVUEvek1rQUQ0aXRnQ3ZxQU1BNWdBVUFQKzVSQUJtQUlVQXY2Z0RBSjRBeFFEdjVDUUFOZ0QrK0c5a0F3RHU2QlFBLy94RUFIWUFwUURQeUFNQWZpSlZBTy9xSkFCT1JQNzBmM1FEQU5ZQUZBRC8ra1FBWGtTRkFMK3lBd0NXQU1VQTMwUWtBQzRpL3ZJL01mTUEvdnI5OFRZQUJBQytNblVBM3hIekFONVUvZkx2NU5VQWZuSCsvSDl6OHdEKzgvMzRIaEVFQUpZQVZRQy9zZk1BemdDMUFOL1kvZlJtQVA2NVgxVHpBUDUyL2ZFbUFBUUFwZ0IxQUo4QTh3Q3VBUDN5Ly9mVkFFWUEvdlYvZFBNQTVnRDkrQllBQkFDR0FGVUFqNGp6QU1ZQXRRRHY0djMwWGhIdXFEOFI4d0QrK3YzeE5nQUVBTDR5ZFFEZjBmTUEzbFQ5OHYvNzFRQitjZjc4ZjBUekFQN3ovZmdlRVFRQWxnQlZBSDl5OHdET0FMVUE3eUw5OUdZQS9ybFBSUE1BL25iOThTWUFCQUNtQUhVQXZ4SHpBSzRBL2ZMLy85VUFSZ0QrOVQ4eTh3RG1BUDM0RmdBRUFJWUFWUUJ2QVBNQXhnQzFBTCs0L2ZSZUVlNm9MeUk9IiksIE4oTSwgMzU5MDAsICJBUUFBQUFFQUFBQUJBQUFBQWdBQUFBSUFBQUFDQUFBQUF3QUFBQU1BQUFBRUFBQUFCUUFBQUxjaFFpRm5JVUloRVJFUkVUTXpNek4zZDNkM0FBQUFBQUFBQUFBQlZnQUFBQUFBQUtDTUFBQ3dqQUFBQVZZQUFBRUFBQUN3akFBQW9Jd0FBQUUwQUFBQUFBQUF3SXdBQUVDTkFBQUJOQUFBQVFBQUFOQ01BQUJRalFBQUFSZ0FBQUFBQUFEZ2pBQUFvSTBBQUFFWUFBQUJBQUFBOEl3QUFMQ05BQURCQ2dBQUFBQUFBQUNOQUFBQWpnQUF3UW9BQUFFQUFBQVFqUUFBRUk0QUFDRUZBQUFBQUFBQUlJMEFBQ0NRQUFBaEJRQUFBUUFBQURDTkFBQXdrQUFBSVFJQUFBQUFBQUJBa1FBQW9KQUFBQ0VDQUFBQkFBQUFVSkVBQUxDUUFBQUJWZ0FBQUFBQUFHQ05BQUJRalFBQUFWWUFBQUVBQUFCd2pRQUFRSTBBQUFGVUFBQUFBQUFBZ0kwQUFFQ09BQUFCVkFBQUFRQUFBSkNOQUFCUWpnQUFBVWdBQUFBQUFBQ2dqUUFBUUk0QUFBRklBQUFCQUFBQXNJMEFBRkNPQUFBQk9BQUFBQUFBQU1DTkFBQkFqZ0FBQVRnQUFBRUFBQURRalFBQVVJNEFBQUV3QUFBQUFBQUE0STBBQUtDT0FBQUJNQUFBQVFBQUFQQ05BQUN3amdBQUFTUUFBQUFBQUFBQWpnQUF3STRBQUFFa0FBQUJBQUFBRUk0QUFOQ09BQUFCSEFBQUFBQUFBQ0NPQUFBQWp3QUFBUndBQUFFQUFBQXdqZ0FBRUk4QUFBRVdBQUFBQUFBQUlKQUFBQ0NQQUFBQkZnQUFBUUFBQURDUUFBQXdqd0FBQVZZQUFBQUFBQUJnamdBQVVJNEFBQUZXQUFBQkFBQUFjSTRBQUVDT0FBQUJWQUFBQUFBQUFJQ09BQUJBamdBQUFWUUFBQUVBQUFDUWpnQUFVSTRBQUFGUkFBQUFBQUFBb0k0QUFHQ09BQUFCVVFBQUFRQUFBTENPQUFCd2pnQUFBVWdBQUFBQUFBREFqZ0FBZ0k0QUFBRklBQUFCQUFBQTBJNEFBSkNPQUFBQk9BQUFBQUFBQU9DT0FBQ2dqZ0FBQVRnQUFBRUFBQUR3amdBQXNJNEFBQUUwQUFBQUFBQUFBSThBQU1DT0FBQUJOQUFBQVFBQUFCQ1BBQURRamdBQUFUQUFBQUFBQUFBZ2p3QUE0STRBQUFFd0FBQUJBQUFBTUk4QUFQQ09BQUFCS0FBQUFBQUFBRUNQQUFEZ2pnQUFBU2dBQUFFQUFBQlFqd0FBOEk0QUFBRWtBQUFBQUFBQVlJOEFBQUNQQUFBQkpBQUFBUUFBQUhDUEFBQVFqd0FBQVNJQUFBQUFBQUNBandBQUlJOEFBQUVpQUFBQkFBQUFrSThBQURDUEFBQUJIQUFBQUFBQUFLQ1BBQUJBandBQUFSd0FBQUVBQUFDd2p3QUFVSThBQUFFWUFBQUFBQUFBd0k4QUFHQ1BBQUFCR0FBQUFRQUFBTkNQQUFCd2p3QUFBUllBQUFBQUFBRGdqd0FBZ0k4QUFBRVdBQUFCQUFBQThJOEFBSkNQQUFBQkZBQUFBQUFBQUFDUUFBQ2dqd0FBQVJRQUFBRUFBQUFRa0FBQXNJOEFBQUVTQUFBQUFBQUFJSkFBQU1DUEFBQUJFZ0FBQVFBQUFEQ1FBQURRandBQUFSRUFBQUFBQUFCQWtBQUE0SThBQUFFUkFBQUJBQUFBVUpBQUFQQ1BBQURCQ2dBQUFBQUFBR0NRQUFBQWtBQUF3UW9BQUFFQUFBQndrQUFBRUpBQUFNRUpBQUFBQUFBQWdKQUFBQ0NRQUFEQkNRQUFBUUFBQUpDUUFBQXdrQUFBb1FnQUFBQUFBQUNna0FBQVFKQUFBS0VJQUFBQkFBQUFzSkFBQUZDUUFBQWhCUUFBQUFBQUFNQ1FBQUJna0FBQUlRVUFBQUVBQUFEUWtBQUFjSkFBQUVFRUFBQUFBQUFBNEpBQUFJQ1FBQUJCQkFBQUFRQUFBUENRQUFDUWtBQUFvUUlBQUFBQUFBQUFrUUFBb0pBQUFLRUNBQUFCQUFBQUVKRUFBTENRQUFBaEFnQUFBQUFBQUNDUkFBREFrQUFBSVFJQUFBRUFBQUF3a1FBQTBKQUFBRUVCQUFBQUFBQUFRSkVBQU9DUUFBQkJBUUFBQVFBQUFGQ1JBQUR3a0FBQUVRRUFBQUFBQUFCZ2tRQUFBSkVBQUJFQkFBQUJBQUFBY0pFQUFCQ1JBQUNGQUFBQUFBQUFBSUNSQUFBZ2tRQUFoUUFBQUFFQUFBQ1FrUUFBTUpFQUFFa0FBQUFBQUFBQW9KRUFBRUNSQUFCSkFBQUFBUUFBQUxDUkFBQlFrUUFBSlFBQUFBQUFBQURBa1FBQVlKRUFBQ1VBQUFBQkFBQUEwSkVBQUhDUkFBQVZBQUFBQUFBQUFPQ1JBQUNBa1FBQUZRQUFBQUVBQUFEd2tRQUFrSkVBQUFrQUFBQUFBQUFBQUpJQUFLQ1JBQUFKQUFBQUFRQUFBQkNTQUFDd2tRQUFCUUFBQUFBQUFBQWdrZ0FBd0pFQUFBVUFBQUFCQUFBQU1KSUFBTkNSQUFBQkFBQUFBQUFBQUNDU0FBRGdrUUFBQVFBQUFBRUFBQUF3a2dBQThKRUFBQUZXQUFBQUFBQUFRSklBQUVDU0FBQUJWZ0FBQVFBQUFGQ1NBQUJRa2dBQUFBRURBd0VDQXdNRkJnY0hCZ1lIQndBQkF3TUJBZ01EQlFZSEJ3WUdCd2NGQmdjSEJnWUhCd2dJQ0FnSUNBZ0lCUVlIQndZR0J3Y0lDQWdJQ0FnSUNBRUNBd01DQWdNREJnWUhCd1lHQndjQkFnTURBZ0lEQXdZR0J3Y0dCZ2NIQmdZSEJ3WUdCd2NJQ0FnSUNBZ0lDQVlHQndjR0JnY0hDQWdJQ0FnSUNBZ0RBd1FFQXdNRUJBY0hCd2NIQndjSEF3TUVCQU1EQkFRSEJ3Y0hCd2NIQndjSEJ3Y0hCd2NIQ0FnSUNBZ0lDQWdIQndjSEJ3Y0hCd2dJQ0FnSUNBZ0lBd01FQkFNREJBUUhCd2NIQndjSEJ3TURCQVFEQXdRRUJ3Y0hCd2NIQndjSEJ3Y0hCd2NIQndnSUNBZ0lDQWdJQndjSEJ3Y0hCd2NJQ0FnSUNBZ0lDQUVDQXdNQ0FnTURCZ1lIQndZR0J3Y0JBZ01EQWdJREF3WUdCd2NHQmdjSEJnWUhCd1lHQndjSUNBZ0lDQWdJQ0FZR0J3Y0dCZ2NIQ0FnSUNBZ0lDQWdDQWdNREFnSURBd1lHQndjR0JnY0hBZ0lEQXdJQ0F3TUdCZ2NIQmdZSEJ3WUdCd2NHQmdjSENBZ0lDQWdJQ0FnR0JnY0hCZ1lIQndnSUNBZ0lDQWdJQXdNRUJBTURCQVFIQndjSEJ3Y0hCd01EQkFRREF3UUVCd2NIQndjSEJ3Y0hCd2NIQndjSEJ3Z0lDQWdJQ0FnSUJ3Y0hCd2NIQndjSUNBZ0lDQWdJQ0FNREJBUURBd1FFQndjSEJ3Y0hCd2NEQXdRRUF3TUVCQWNIQndjSEJ3Y0hCd2NIQndjSEJ3Y0lDQWdJQ0FnSUNBY0hCd2NIQndjSENBZ0lDQWdJQ0FnQUFRVUdBUUlHQmdNREJ3Y0RBd2NIQUFFRkJnRUNCZ1lEQXdjSEF3TUhCd01EQndjREF3Y0hCQVFIQndRRUJ3Y0RBd2NIQXdNSEJ3UUVCd2NFQkFjSEFRSUdCZ0lDQmdZREF3Y0hBd01IQndFQ0JnWUNBZ1lHQXdNSEJ3TURCd2NEQXdjSEF3TUhCd1FFQndjRUJBY0hBd01IQndNREJ3Y0VCQWNIQkFRSEJ3VUdDQWdHQmdnSUJ3Y0lDQWNIQ0FnRkJnZ0lCZ1lJQ0FjSENBZ0hCd2dJQndjSUNBY0hDQWdIQndnSUJ3Y0lDQWNIQ0FnSEJ3Z0lCd2NJQ0FjSENBZ0dCZ2dJQmdZSUNBY0hDQWdIQndnSUJnWUlDQVlHQ0FnSEJ3Z0lCd2NJQ0FjSENBZ0hCd2dJQndjSUNBY0hDQWdIQndnSUJ3Y0lDQWNIQ0FnSEJ3Z0lBUUlHQmdJQ0JnWURBd2NIQXdNSEJ3RUNCZ1lDQWdZR0F3TUhCd01EQndjREF3Y0hBd01IQndRRUJ3Y0VCQWNIQXdNSEJ3TURCd2NFQkFjSEJBUUhCd0lDQmdZQ0FnWUdBd01IQndNREJ3Y0NBZ1lHQWdJR0JnTURCd2NEQXdjSEF3TUhCd01EQndjRUJBY0hCQVFIQndNREJ3Y0RBd2NIQkFRSEJ3UUVCd2NHQmdnSUJnWUlDQWNIQ0FnSEJ3Z0lCZ1lJQ0FZR0NBZ0hCd2dJQndjSUNBY0hDQWdIQndnSUJ3Y0lDQWNIQ0FnSEJ3Z0lCd2NJQ0FjSENBZ0hCd2dJQmdZSUNBWUdDQWdIQndnSUJ3Y0lDQVlHQ0FnR0JnZ0lCd2NJQ0FjSENBZ0hCd2dJQndjSUNBY0hDQWdIQndnSUJ3Y0lDQWNIQ0FnSEJ3Z0lCd2NJQ0FBQkF3TUJBZ01EQlFZSEJ3WUdCd2NBQVFNREFRSURBd1VHQndjR0JnY0hCUVlIQndZR0J3Y0lDQWdJQ0FnSUNBVUdCd2NHQmdjSENBZ0lDQWdJQ0FnQkFnTURBZ0lEQXdZR0J3Y0dCZ2NIQVFJREF3SUNBd01HQmdjSEJnWUhCd1lHQndjR0JnY0hDQWdJQ0FnSUNBZ0dCZ2NIQmdZSEJ3Z0lDQWdJQ0FnSUF3TUVCQU1EQkFRSEJ3Y0hCd2NIQndNREJBUURBd1FFQndjSEJ3Y0hCd2NIQndjSEJ3Y0hCd2dJQ0FnSUNBZ0lCd2NIQndjSEJ3Y0lDQWdJQ0FnSUNBTURCQVFEQXdRRUJ3Y0hCd2NIQndjREF3UUVBd01FQkFjSEJ3Y0hCd2NIQndjSEJ3Y0hCd2NJQ0FnSUNBZ0lDQWNIQndjSEJ3Y0hDQWdJQ0FnSUNBZ0JBZ01EQWdJREF3WUdCd2NHQmdjSEFRSURBd0lDQXdNR0JnY0hCZ1lIQndZR0J3Y0dCZ2NIQ0FnSUNBZ0lDQWdHQmdjSEJnWUhCd2dJQ0FnSUNBZ0lBZ0lEQXdJQ0F3TUdCZ2NIQmdZSEJ3SUNBd01DQWdNREJnWUhCd1lHQndjR0JnY0hCZ1lIQndnSUNBZ0lDQWdJQmdZSEJ3WUdCd2NJQ0FnSUNBZ0lDQU1EQkFRREF3UUVCd2NIQndjSEJ3Y0RBd1FFQXdNRUJBY0hCd2NIQndjSEJ3Y0hCd2NIQndjSUNBZ0lDQWdJQ0FjSEJ3Y0hCd2NIQ0FnSUNBZ0lDQWdEQXdRRUF3TUVCQWNIQndjSEJ3Y0hBd01FQkFNREJBUUhCd2NIQndjSEJ3Y0hCd2NIQndjSENBZ0lDQWdJQ0FnSEJ3Y0hCd2NIQndnSUNBZ0lDQWdJQUFNQkJBTUdCQWNCQkFJRkJBY0ZCd0FEQVFRREJnUUhBUVFDQlFRSEJRY0JCQUlGQkFjRkJ3SUZBZ1VGQndVSEFRUUNCUVFIQlFjQ0JRSUZCUWNGQndNR0JBY0dDQWNJQkFjRkJ3Y0lCd2dEQmdRSEJnZ0hDQVFIQlFjSENBY0lCQWNGQndjSUJ3Z0ZCd1VIQndnSENBUUhCUWNIQ0FjSUJRY0ZCd2NJQndnQkJBSUZCQWNGQndJRkFnVUZCd1VIQVFRQ0JRUUhCUWNDQlFJRkJRY0ZCd0lGQWdVRkJ3VUhBZ1VDQlFVSEJRY0NCUUlGQlFjRkJ3SUZBZ1VGQndVSEJBY0ZCd2NJQndnRkJ3VUhCd2dIQ0FRSEJRY0hDQWNJQlFjRkJ3Y0lCd2dGQndVSEJ3Z0hDQVVIQlFjSENBY0lCUWNGQndjSUJ3Z0ZCd1VIQndnSENBTUdCQWNHQ0FjSUJBY0ZCd2NJQndnREJnUUhCZ2dIQ0FRSEJRY0hDQWNJQkFjRkJ3Y0lCd2dGQndVSEJ3Z0hDQVFIQlFjSENBY0lCUWNGQndjSUJ3Z0dDQWNJQ0FnSUNBY0lCd2dJQ0FnSUJnZ0hDQWdJQ0FnSENBY0lDQWdJQ0FjSUJ3Z0lDQWdJQndnSENBZ0lDQWdIQ0FjSUNBZ0lDQWNJQndnSUNBZ0lCQWNGQndjSUJ3Z0ZCd1VIQndnSENBUUhCUWNIQ0FjSUJRY0ZCd2NJQndnRkJ3VUhCd2dIQ0FVSEJRY0hDQWNJQlFjRkJ3Y0lCd2dGQndVSEJ3Z0hDQWNJQndnSUNBZ0lCd2dIQ0FnSUNBZ0hDQWNJQ0FnSUNBY0lCd2dJQ0FnSUJ3Z0hDQWdJQ0FnSENBY0lDQWdJQ0FjSUJ3Z0lDQWdJQndnSENBZ0lDQWdKQ1FvS0NRa0tDZ3dNRFFzTURBMExDUWtLQ2drSkNnb01EQXNOREF3TERRd01EUTBNREFzTERBa05DZ2tNQ2dzTURBc0xEQXdORFF3SkN3b0pEQW9OQ1FrS0Nna0pDZ29NREEwTERBd05Dd2tKQ2dvSkNRb0tEQXdMRFF3TUN3ME1EQTBOREF3TEN3d0pEUW9KREFvTERBd0xDd3dNRFEwTUNRc0tDUXdLRFFvS0Nnb0tDZ29LRFFzTkN3MExEUXNLQ2drSkNnb0pDUTBMREF3TkN3d01EUTBORFFzTEN3c05DZzBLQ2dzS0N3ME5EQXdMQ3d3TURRb01DUW9MQ1F3S0Nna0pDZ29KQ1FzTkRBd0xEUXdNQ2dvS0Nnb0tDZ29MRFFzTkN3MExEUXNMREF3TkRRd01Dd29NQ1FvTkNRd0xDd3NMRFEwTkRRc0tDd29LRFFvTiIpLCBOKE0sIDM5Nzg1LCAiQVFBQkFBRUFBUUFBQVFFQUFBRUJBQUVBQVFBQkFBRUFBQUFBQVFFQkFRQUFBQUFBQVFBQkFBQUFBQUVCQVFFQUFBQUJBQUVCQVE9PSIpLCBOKE0sIDM5ODQ5LCAiQVFBQkFBRUFBUUFBQVFFQUFBRUJBQUVBQVFBQkFBRUFBQUFBQVFFQkFRQUFBQUFBQVFBQkFBQUFBQUVCQVFFQUFBQUJBQUVCQVE9PSIpLCBOKE0sIDM5OTEzLCAiQVFBQkFBRUFBUT09IiksIE4oTSwgMzk5MjksICJBUUFCQUFFQUFRQUFBQUFCQVFFQkFBQUFBQUFCQUFFQUFBQUFBUUVCQVFBQUFBQUFBUUFCQVFFQUFBRUJBQUFBQVFBQkFBRUFBUUVCQVFFQkFRRUJBQUVBQVFBQkFBRUFBQUFBQVFFQkFRQUJBQUFCQVFBQkFBQUFBQUVCQVFFQUFRQUJBUUVCQVE9PSIpLCBOKE0sIDQwMTMwLCAiZ0FFQUE0QUVBQWFBQndBSmdBb0FESUFOQUErQUVBQVNnQk1BRllBV0FCaUFHUUFiZ0J3QUhvQWZBQ0dBSWdBa2dDVUFKNEFvQUNxQUt3QXRnQzRBTUlBeEFET0FOQUEyZ0RjQU9ZQTZBRHlBUFFBL2dFQUFRb0JEQUVXQVJnQklnRWtBUzRCTUFFNkFUd0JSZ0ZJQVZJQlZBRmVBV0FCYWdGc0FYWUJlQUdDQVlRQmpnR1FBWm9CbkFHbUFhZ0JzZ0cwQWI0QndBSEtBY3dCMWdIWT0iKSwgTihNLCA0MDMwMCwgImdBQ0FBSUFBZ0FBQUFRQUJBQUdBQVlBQkFBSUFBb0FDZ0FJQUF3QURnQU1BQkFBRWdBUUFCWUFGZ0FVQUJvQUdBQWVBQndBSWdBZ0FDWUFKQUFxQUNvQUxBQXlBREFBTkFBNkFEZ0FQQUJDQUVJQVJBQklBRTRBVGdCUUFGUUFXQUJlQUY0QVlnQm1BR2dBYkFCd0FIUUFlQUI4QUlBQWhBQ0lBSXdBa0FDV0FKb0FuZ0NpQUtRQXJBQ3dBTFlBdWdDOEFNUUF5Z0RPQU5BQTJBRGVBT0FBNkFEdUFQQUErZ0QrQVFBQkNnRU1BUllCR0FFaUFTUUJMZ0V3QVRvQlBnRkVBVTRCVUFGWUFXSUJaQUZzQVhZQmVnR0FBWWdCa2dHV0Fad0JwQUdzQWJZQnVnSENBY29CMEFIWUFlQUI2QUh3QWZnQVlnQmNBRjRBV0FCYUFGUUFWZ0JRQUZJQVRBQk9BRWdBU2dCRUFFWUFRQUJDQUR3QVBnQTRBRG9BTkFBMkFEQUFNZ0FzQUM0QUtBQXFBQ1FBSmdBZ0FDSUFIQUFlQUJnQUdnQVVBQllBRUFBU0FBd0FEZ0FJQUFvQUJBQUdBIiksIE4oTSwgNDA3MDYsICJnQUFBQVlBQkFBS0FBZ0FEZ0FNQUJJQUVBQVdBQlFBR2dBWUFCNEFIQUFpQUNBQUpnQWtBQ29BS0FBdUFDd0FNZ0F3QURZQU5BQTZBRGdBUGdBOEFFSUFRQUJHQUVRQVNnQklBRTRBVEFCU0FGQUFWZ0JVQUZvQVdBQmVBRndBZ0FCOEFIZ0FkQUJ3QUc0QWFnQm1BR0lBWEFCY0FGZ0FWZ0JTQUV3QVRBQktBRVlBUUFCQUFENEFPQUE0QURZQU1BQXlBQzRBS0FBcUFDUUFKZ0FnQUNJQUhBQWVBQmdBR2dBV0FCUUFGZ0FRQUJBQUVnQU1BQXdBRGdBS0FBZ0FDQUFLQUFZQUJBQUVBQVFBQmdBQ0FBSUFBZ0E9PSIpLCBOKE0sIDQwOTQwLCAiZ0FDQUFJQUFnQUFBQVFBQkFBR0FBWUFCQUFJQUFvQUNnQUlBQXdBRGdBTUFCQUFFZ0FRQUJZQUZnQVVBQm9BR0FBZUFCd0FJZ0FnQUNZQUpBQXFBQ29BTEFBeUFEQUFOQUE2QURnQVBBQkNBRUlBUkFCSUFFNEFUZ0JRQUZRQVdBQmVBRjRBWWdCbUFHZ0FiQUJ3QUhRQWVBQi8rZ2l0bFJ4Vm5RQUFBQUFBQUFEaERBQUQ2L2tJdWRyODZPNTY4bXZjTXZiMzkvLy8vLzk4L1BGUlZWVlZWeFQrUkt4ZlBWVldsUHhmUXBHY1JFWUUvQUFBQUFBQUF5RUx2T2ZyK1FpN21QeVRFZ3YrOXY4NC90ZlFNMXdocnJEL01VRWJTcTdLRFA0UTZUcHZnMTFVLyIpLCBOKE0sIDQxMTgyLCAiOEQ5dXY0Z2FUenViUERVeis2azk5dTgvWGR6WW5CTmdjYnhoZ0hjK211enZQOUZtaHhCNlhwQzhoWDl1NkJYajd6OFQ5bWMxVXRLTVBIU0ZGZE93MmU4LytvNzVJNERPaTd6ZTl0MHBhOUR2UDJISTVtRk85MkE4eUp0MUdFWEg3eitaMHpOYjVLT1FQSVB6eHNvK3Z1OC9iWHVEWGFhYWx6d1BpZmxzV0xYdlAvenYvWklhdFk0ODkwZHlLNUtzN3ovUm5DOXdQYjQrUEtMUjB6THNvKzgvQzI2UWlUUURhcndiMC82dlpwdnZQdzY5THlwU1ZwVzhVVnNTMEFHVDd6OVY2azZNNzRCUXZNd3hiTUM5aXU4L0Z2VFZ1U1BKa2J6Z0xhbXVtb0x2UDY5VlhPbmowNEE4VVk2bHlKaDY3ejlJazZYcUZSdUF2SHRSZlR5NGN1OC9QVExlVmZBZmo3enFqWXc0K1dydlA3OVRFeitNaVlzOGRjdHY2MXRqN3o4bTZ4RjJuTm1Xdk5SY0JJVGdXKzgvWUM4NlB2ZnNtanlxdVdneGgxVHZQNTA0aHN1QzU0KzhIZG44SWxCTjd6K053NlpFUVcrS1BOYU1Zb2c3UnU4L2ZRVGtzQVY2Z0R5VzNIMlJTVC92UDVTb3FPUDlqcFk4T0dKMWJubzQ3ejk5U0hUeUdGNkhQRCttc2svT01lOC84dWNmbUN0SGdEemRmT0psUlN2dlAxNEljVDk3dUphOGdXUDE0ZDhrN3o4eHF3bHQ0ZmVDUE9IZUgvV2RIdTgvK3I5dkdwc2hQYnlRMmRyUWZ4anZQN1FLREhLQ040czhDd1BrcG9VUzd6K1B5ODZKa2hSdVBGWXZQcW12RE84L3RxdXdUWFZOZ3p3VnR6RUsvZ2J2UDB4MHJPSUJRb1k4TWRoTS9IQUI3ejlLK05OZE9kMlBQUDhXWkxJSS9PNC9CRnVPTzRDamhyenhuNUpmeGZidVAyaFFTOHp0U3BLOHk2azZONmZ4N2orT0xWRWIrQWVadkdiWUJXMnU3TzQvMGphVVB1alJjYnozbitVMDIrZnVQeFVienJNWkdabTg1YWdUd3kzajdqOXRUQ3FuU0orRlBDSTBFa3ltM3U0L2lta29lbUFTazd3Y2dLd0VSZHJ1UDF1SkYwaVBwMWk4S2k3M0lRclc3ajhibWtsbm15eDh2SmVvVU5uMTBlNC9FYXpDWU8xalF6d3RpV0ZnQ003dVArOWtCanNKWnBZOFZ3QWQ3VUhLN2o5NUE2SGE0Y3h1UE5BOHdiV2l4dTQvTUJJUFA0Ny9renplMDlmd0tzUHVQN0N2ZXJ2T2tIWThKeW8yMWRxLzdqOTM0RlRydlIyVFBBM2QvWm15dk80L2pxTnhBRFNVajd5bkxKMTJzcm51UDBtams5ek0zb2U4UW1iUG90cTI3ajlmT0ErOXh0NTR2SUpQblZZcnRPNC85bHg3N0VZU2hyd1BrbDNLcExIdVA0N1gvUmdGTlpNODJpZTFOa2V2N2o4Rm00b3Z0NWg3UFAzSGw5UVNyZTQvQ1ZRYzR1RmprRHdwVkVqZEI2dnVQK3JHR1ZDRnh6UTh0MFpaaWlhcDdqODF3R1FyNWpLVVBFZ2hyUlZ2cCs0L24zYVpZVXJrakx3SjNIYTU0YVh1UDZoTjd6dkZNNHk4aFZVNnNINms3ait1NlN1SmVGT0V2Q0REekRSR28rNC9XRmhXZU4zT2s3d2xJbFdDT0tMdVAyUVpmb0NxRUZjOGM2bE0xRldoN2o4b0lsNi83N09Udk0wN2YyYWVvTzQvZ3JrMGg2MFNhcnkvMmd0MUVxRHVQKzZwYmJqdloyTzhMeHBsUExLZjdqOVJpT0JVUGR5QXZJU1VVZmw5bis0L3p6NWFmbVFmZUx4MFgrem9kWi91UDdCOWk4Qks3b2E4ZElHbFNKcWY3aitLNWxVZU1obUd2TWxuUWxicm4rNC8wOVFKWHN1Y2tEdy9YZDVQYWFEdVB4MmxUYm5jTW51OGh3SHJjeFNoN2o5cndHZFUvZXlVUERMQk1BSHRvZTQvVld6V3ErSHJaVHhpVHM4Mjg2THVQMExQc3kvRm9ZaThFaG8rVkNlazdqODBOenZ4dG1tVHZCUE9USm1KcGU0L0h2OFpPb1JlZ0x5dHh5TkdHcWZ1UDI1WGN0aFExSlM4N1pKRW05bW83ajhBaWc1Ylo2MlFQSmxtaXRuSHF1NC90T3J3d1MrM2pUemJvQ3BDNWF6dVAvL254WnhndG1XOGpFUzFGakt2N2o5RVgvTlpnL1o3UERaM0ZabXVzZTQvZ3owZXB4OEprN3pHLzVFTFc3VHVQeWtlYkl1NHFWMjg1Y1hOc0RlMzdqOVp1WkI4K1NOc3ZBOVN5TXRFdXU0L3F2bjBJa05Ea3J4UVR0NmZncjN1UDB1T1p0ZHN5b1c4dWdmS2NQSEE3ajhuenBFci9LOXhQSkR3bzRLUnhPNC91M01LNFRYU2JUd2pJK01aWThqdVAyTWlZaUlFeFllOFplVmRlMmJNN2ovVk1lTGpoaHlMUERNdFN1eWIwTzQvRmJ1ODA5RzdrYnhkSlQ2eUE5WHVQOUl4N3B3eHpKQThXTE13RTU3WjdqK3pXbk51aEdtRVBMLzllVlZyM3U0L3RKMk9sODNmZ3J4Njg5Ty9hK1B1UDRjenk1SjNHb3c4cmROYW1aL283ai82MmRGS2ozdVF2R2EyalNrSDd1NC91cTdjVnRuRFZiejdGVSs0b3ZQdVAwRDJwajBPcEpDOE9sbmxqWEw1N2o4MGs2MDQ5TlpvdkVkZSsvSjIvKzQvTllwWWErTHVrYnhLQnFFd3NBWHZQODNkWHdyWC8zUTgwc0ZMa0I0TTd6K3NtSkw2KzcyUnZBa2UxMXZDRXU4L3N3eXZNSzV1Y3p5Y1VvWGRteG52UDVUOW4xd3k0NDQ4ZXREL1g2c2c3eitzV1FuUmorQ0VQRXZSVnk3eEorOC9aeHBPT0svTll6eTE1d2FVYlMvdlAyZ1prbXdzYTJjOGFaRHYzQ0EzN3ovU3RjeURHSXFBdlByRFhWVUxQKzgvYi9yL1AxMnRqN3g4aVFkS0xVZnZQMG1wZFRpdURaQzg4b2tOQ0lkUDd6K25CejJtaGFOMFBJZWsrOXdZV084L0R5SkFJSjZSZ3J5WWc4a1c0MkR2UDZ5U3dkVlFXbzQ4aFRMYkErWnA3ejlMYXdHc1dUcUVQR0MwQWZNaGMrOC9IejYwQnlIVmdyeGZtM3N6bDN6dlA4a05SenU1S29tOEthSDFGRWFHN3ovVGlEcGdCTFowUFBZL2krY3VrTzgvY1hLZFVlekZnenlEVE1mN1VacnZQL0NSMDQ4Uzk0KzgycENrb3Erazd6OTlkQ1BpbUs2TnZQRm5qaTFJcis4L0NDQ3FRYnpEamp3bldtSHVHN3J2UHpMcnFjT1VLNFE4bDdwck55dkY3ei91aGRFeHFXU0tQRUJGYmx0MjBPOC83ZU03NUxvM2pyd1V2cHl0L2R2dlA1M05rVTA3aVhjODJKQ2VnY0huN3orSnpHQkJ3UVZUUFBGeGp5dkM4KzgvQURqNi9rSXU1ajh3WjhlVFYvTXVQUUFBQUFBQUFPQy9ZRlZWVlZWVjViOEdBQUFBQUFEZ1AwNVZXWm1abWVrL2VxUXBWVlZWNWIvcFJVaWJXMG55djhNL0pvc3JBUEEvQUFBQUFBQ2c5ajg9IiksIE4oTSwgNDMzMDUsICJ5TG55Z2l6V3Y0QldOeWdrdFBvOEFBQUFBQUNBOWo4PSIpLCBOKE0sIDQzMzM3LCAiQ0ZpL3ZkSFZ2eUQzNE5nSXBSeTlBQUFBQUFCZzlqOD0iKSwgTihNLCA0MzM2OSwgIldFVVhkM2JWdjIxUXR0V2tZaU85QUFBQUFBQkE5ajg9IiksIE4oTSwgNDM0MDEsICIrQzJIclJyVnY5Vm5zSjdraE9hOEFBQUFBQUFnOWo4PSIpLCBOKE0sIDQzNDMzLCAiZUhlVlg3N1V2K0ErS1pOcEd3UzlBQUFBQUFBQTlqOD0iKSwgTihNLCA0MzQ2NSwgIllCekNpMkhVdjh5RVRFZ3YyQk05QUFBQUFBRGc5VDg9IiksIE4oTSwgNDM0OTcsICJxSWFHTUFUVXZ6b0xndTN6UXR3OEFBQUFBQURBOVQ4PSIpLCBOKE0sIDQzNTI5LCAiU0dsVlRLYlR2MkNVVVliR3NTQTlBQUFBQUFDZzlUOD0iKSwgTihNLCA0MzU2MSwgImdKaWEzVWZUdjVLQXhkUk5XU1U5QUFBQUFBQ0E5VDg9IiksIE4oTSwgNDM1OTMsICJJT0c2NHVqU3Y5Z3J0NWtlZXlZOUFBQUFBQUJnOVQ4PSIpLCBOKE0sIDQzNjI1LCAiaU40VFdvblN2eit3ejdZVXloVTlBQUFBQUFCZzlUOD0iKSwgTihNLCA0MzY1NywgImlONFRXb25Tdnord3o3WVV5aFU5QUFBQUFBQkE5VDg9IiksIE4oTSwgNDM2ODksICJlTS83UVNuU3YzYmFVeWdrV2hhOUFBQUFBQUFnOVQ4PSIpLCBOKE0sIDQzNzIxLCAibUduQm1NalJ2d1JVNTJpOHJ4KzlBQUFBQUFBQTlUOD0iKSwgTihNLCA0Mzc1MywgInFLdXJYR2ZSdi9Db2dqUEdIeDg5QUFBQUFBRGc5RDg9IiksIE4oTSwgNDM3ODUsICJTSzc1aXdYUnYyWmFCZjNFcUNhOUFBQUFBQURBOUQ4PSIpLCBOKE0sIDQzODE3LCAia0hQaUpLUFF2dzREOUg3dWF3eTlBQUFBQUFDZzlEOD0iKSwgTihNLCA0Mzg0OSwgIjBMU1VKVURRdjM4dDlKNjROdkM4QUFBQUFBQ2c5RDg9IiksIE4oTSwgNDM4ODEsICIwTFNVSlVEUXYzOHQ5SjY0TnZDOEFBQUFBQUNBOUQ4PSIpLCBOKE0sIDQzOTEzLCAiUUY1dEdMblB2NGM4bWFzcVZ3MDlBQUFBQUFCZzlEOD0iKSwgTihNLCA0Mzk0NSwgIllOekxyZkRPdnlTdmhweTNKaXM5QUFBQUFBQkE5RDg9IiksIE4oTSwgNDM5NzcsICI4Q3B1QnlmT3Z4RC9QMVJQTHhlOUFBQUFBQUFnOUQ4PSIpLCBOKE0sIDQ0MDA5LCAid0U5cklWek52eHRveXJ1UnVpRTlBQUFBQUFBQTlEOD0iKSwgTihNLCA0NDA0MSwgIm9Kckg5NC9NdnpTRW4yaFBlU2M5QUFBQUFBQUE5RDg9IiksIE4oTSwgNDQwNzMsICJvSnJIOTQvTXZ6U0VuMmhQZVNjOUFBQUFBQURnOHo4PSIpLCBOKE0sIDQ0MTA1LCAia0MxMGhzTEx2NCszaXpHd1RoazlBQUFBQUFEQTh6OD0iKSwgTihNLCA0NDEzNywgIndJQk95ZlBLdjJhUXpUOWpUcm84QUFBQUFBQ2c4ejg9IiksIE4oTSwgNDQxNjksICJzT0lmdkNQS3YrckJSdHhrakNXOUFBQUFBQUNnOHo4PSIpLCBOKE0sIDQ0MjAxLCAic09JZnZDUEt2K3JCUnR4a2pDVzlBQUFBQUFDQTh6OD0iKSwgTihNLCA0NDIzMywgIlVQU2NXbExKditQVXdRVFowU3E5QUFBQUFBQmc4ejg9IiksIE4oTSwgNDQyNjUsICIwQ0Jsb0gvSXZ3bjYyMysvdlNzOUFBQUFBQUJBOHo4PSIpLCBOKE0sIDQ0Mjk3LCAiNEJBQ2lhdkh2MWhLVTNLUTJ5czlBQUFBQUFCQTh6OD0iKSwgTihNLCA0NDMyOSwgIjRCQUNpYXZIdjFoS1UzS1EyeXM5QUFBQUFBQWc4ejg9IiksIE4oTSwgNDQzNjEsICIwQm5uRDliR3YyYmlzcU5xNUJDOUFBQUFBQUFBOHo4PSIpLCBOKE0sIDQ0MzkzLCAia0tkd01QL0Z2emxRRUo5RG5oNjlBQUFBQUFBQTh6OD0iKSwgTihNLCA0NDQyNSwgImtLZHdNUC9GdnpsUUVKOURuaDY5QUFBQUFBRGc4ajg9IiksIE4oTSwgNDQ0NTcsICJzS0hqNVNiRnY0OWJCNUNMM2lDOUFBQUFBQURBOGo4PSIpLCBOKE0sIDQ0NDg5LCAiZ010c0swM0V2eng0TldIQkRCYzlBQUFBQUFEQThqOD0iKSwgTihNLCA0NDUyMSwgImdNdHNLMDNFdnp4NE5XSEJEQmM5QUFBQUFBQ2c4ajg9IiksIE4oTSwgNDQ1NTMsICJrQjRnL0hIRHZ6cFVKMDJHZVBFOEFBQUFBQUNBOGo4PSIpLCBOKE0sIDQ0NTg1LCAiOEIvNFVwWEN2d2pFY1Jjd2pTUzlBQUFBQUFCZzhqOD0iKSwgTihNLCA0NDYxNywgIllDL1ZLcmZCdjVhakVSaWtnQzY5QUFBQUFBQmc4ajg9IiksIE4oTSwgNDQ2NDksICJZQy9WS3JmQnY1YWpFUmlrZ0M2OUFBQUFBQUJBOGo4PSIpLCBOKE0sIDQ0NjgxLCAia05COGZ0ZkF2L1JiNklpV2FRbzlBQUFBQUFCQThqOD0iKSwgTihNLCA0NDcxMywgImtOQjhmdGZBdi9SYjZJaVdhUW85QUFBQUFBQWc4ajg9IiksIE4oTSwgNDQ3NDUsICI0TnN4a2V5L3YvSXpvMXhVZFNXOUFBQUFBQUFBOGo4PSIpLCBOKE0sIDQ0Nzc4LCAiSzI0SEo3Ni9QQUR3S2l3MEtqMEFBQUFBQUFEeVB3PT0iKSwgTihNLCA0NDgxMCwgIksyNEhKNzYvUEFEd0tpdzBLajBBQUFBQUFPRHhQdz09IiksIE4oTSwgNDQ4NDEsICJ3RnVQVkY2OHZ3YStYMWhYREIyOUFBQUFBQURBOFQ4PSIpLCBOKE0sIDQ0ODczLCAiNEVvNmJaSzZ2OGlxVytnMU9TVTlBQUFBQUFEQThUOD0iKSwgTihNLCA0NDkwNSwgIjRFbzZiWks2djhpcVcrZzFPU1U5QUFBQUFBQ2c4VDg9IiksIE4oTSwgNDQ5MzcsICJvREhXUmNPNHYyaFdMMDBwZkJNOUFBQUFBQUNnOFQ4PSIpLCBOKE0sIDQ0OTY5LCAib0RIV1JjTzR2MmhXTDAwcGZCTTlBQUFBQUFDQThUOD0iKSwgTihNLCA0NTAwMSwgIllPV0swdkMydjlwek04azNseWE5QUFBQUFBQmc4VDg9IiksIE4oTSwgNDUwMzMsICJJQVkvQnh1MXYxZGV4bUZiQWg4OUFBQUFBQUJnOFQ4PSIpLCBOKE0sIDQ1MDY1LCAiSUFZL0J4dTF2MWRleG1GYkFoODlBQUFBQUFCQThUOD0iKSwgTihNLCA0NTA5NywgIjRCdVcxMEd6djk4VCtjemFYaXc5QUFBQUFBQkE4VDg9IiksIE4oTSwgNDUxMjksICI0QnVXMTBHenY5OFQrY3phWGl3OUFBQUFBQUFnOFQ4PSIpLCBOKE0sIDQ1MTYxLCAiZ0tQdU5tV3h2d21qajNaZWZCUTlBQUFBQUFBQThUOD0iKSwgTihNLCA0NTE5MywgImdCSEFNQXF2djVHT05vT2VXUzA5QUFBQUFBQUE4VDg9IiksIE4oTSwgNDUyMjUsICJnQkhBTUFxdnY1R09Ob09lV1MwOUFBQUFBQURnOEQ4PSIpLCBOKE0sIDQ1MjU3LCAiZ0JseDNVS3J2MHh3MXVWNmdodzlBQUFBQUFEZzhEOD0iKSwgTihNLCA0NTI4OSwgImdCbHgzVUtydjB4dzF1VjZnaHc5QUFBQUFBREE4RDg9IiksIE4oTSwgNDUzMjEsICJ3REwyV0hTbnYrNmg4alJHL0N5OUFBQUFBQURBOEQ4PSIpLCBOKE0sIDQ1MzUzLCAid0RMMldIU252KzZoOGpSRy9DeTlBQUFBQUFDZzhEOD0iKSwgTihNLCA0NTM4NSwgIndQNjVoNTZqdjZyK0p2VzNBdlU4QUFBQUFBQ2c4RDg9IiksIE4oTSwgNDU0MTcsICJ3UDY1aDU2anY2citKdlczQXZVOEFBQUFBQUNBOEQ4PSIpLCBOKE0sIDQ1NDUwLCAiZUE2YmdwKy81QWwrZkNhQUtiMEFBQUFBQUlEd1B3PT0iKSwgTihNLCA0NTQ4MiwgImVBNmJncCsvNUFsK2ZDYUFLYjBBQUFBQUFHRHdQdz09IiksIE4oTSwgNDU1MTMsICJnTlVIRzdtWHZ6bW0rcE5ValNpOUFBQUFBQUJBOEQ4PSIpLCBOKE0sIDQ1NTQ2LCAiL0xDb3dJKy9uS2JUOW53ZTM3d0FBQUFBQUVEd1B3PT0iKSwgTihNLCA0NTU3OCwgIi9MQ293SSsvbktiVDlud2UzN3dBQUFBQUFDRHdQdz09IiksIE4oTSwgNDU2MTAsICJFR3NxNEgrLzVFRGFEVC9pR2IwQUFBQUFBQ0R3UHc9PSIpLCBOKE0sIDQ1NjQyLCAiRUdzcTRIKy81RURhRFQvaUdiMEFBQUFBQUFEd1B3PT0iKSwgTihNLCA0NTY5NCwgIjhEOD0iKSwgTihNLCA0NTcyNSwgIndPOC8iKSwgTihNLCA0NTczOCwgImlYVVZFSUEvNkN1ZG1XdkhFTDBBQUFBQUFJRHZQdz09IiksIE4oTSwgNDU3NjksICJnSk5ZVmlDUVA5TDM0Z1piM0NPOUFBQUFBQUJBN3o4PSIpLCBOKE0sIDQ1ODAyLCAieVNnbFNaZy9OQXhhTXJxZ0tyMEFBQUFBQUFEdlB3PT0iKSwgTihNLCA0NTgzMywgIlFPZUpYVUdnUDFQWDhWekFFUUU5QUFBQUFBREE3ajg9IiksIE4oTSwgNDU4NjYsICJMdFN1WnFRL0tQMjlkWE1XTEwwQUFBQUFBSUR1UHc9PSIpLCBOKE0sIDQ1ODk3LCAid0o4VXFwU29QMzBtV3RDVmVSbTlBQUFBQUFCQTdqOD0iKSwgTihNLCA0NTkyOSwgIndOM05jOHVzUHdjbzJFZnlhQnE5QUFBQUFBQWc3ajg9IiksIE4oTSwgNDU5NjEsICJ3QWJBTWVxdVAzczd5VTgrRVE2OUFBQUFBQURnN1Q4PSIpLCBOKE0sIDQ1OTkzLCAiWUViUk81ZXhQNXVlRFZaZE1pVzlBQUFBQUFDZzdUOD0iKSwgTihNLCA0NjAyNSwgIjROR245YjJ6UDlkTzI2VmV5Q3c5QUFBQUFBQmc3VDg9IiksIE4oTSwgNDYwNTcsICJvSmROV3VtMVB4NGRYVHdHYVN5OUFBQUFBQUJBN1Q4PSIpLCBOKE0sIDQ2MDg5LCAid09vSzB3QzNQekx0bmFtTkh1dzhBQUFBQUFBQTdUOD0iKSwgTihNLCA0NjEyMSwgIlFGbGRYak81UDlwSHZUcGNFU005QUFBQUFBREE3RDg9IiksIE4oTSwgNDYxNTMsICJZSzJOeUdxN1ArVm85eXVBa0JPOUFBQUFBQUNnN0Q4PSIpLCBOKE0sIDQ2MTg1LCAiUUx3QldJaThQOU9zV3NiUlJpWTlBQUFBQUFCZzdEOD0iKSwgTihNLCA0NjIxNywgIklBcURPY2UrUCtCRjVxOW93QzI5QUFBQUFBQkE3RDg9IiksIE4oTSwgNDYyNDksICI0TnM1a2VpL1AvMEtvVS9XTkNXOUFBQUFBQUFBN0Q4PSIpLCBOKE0sIDQ2MjgxLCAiNENlQ2poZkJQL0lITGM1NDd5RTlBQUFBQUFEZzZ6OD0iKSwgTihNLCA0NjMxMywgIjhDTitLNnJCUHpTWk9FU09weXc5QUFBQUFBQ2c2ejg9IiksIE4oTSwgNDYzNDUsICJnSVlNWWRIQ1A2RzBnY3RzblFNOUFBQUFBQUNBNno4PSIpLCBOKE0sIDQ2Mzc3LCAia0JXdy9HWERQNGx5U3lPb0w4WThBQUFBQUFCQTZ6OD0iKSwgTihNLCA0NjQwOSwgInNET0RQWkhFUDNpMi9WUjVneVU5QUFBQUFBQWc2ejg9IiksIE4oTSwgNDY0NDEsICJzS0hrNVNmRlA4ZDlhZVhvTXlZOUFBQUFBQURnNmo4PSIpLCBOKE0sIDQ2NDczLCAiRUl5K1RsZkdQM2d1UEN5THp4azlBQUFBQUFEQTZqOD0iKSwgTihNLCA0NjUwNSwgImNIV0xFdkRHUCtFaG5PV05FU1c5QUFBQUFBQ2c2ajg9IiksIE4oTSwgNDY1MzcsICJVRVNGalluSFB3VkRrWEFRWmh5OUFBQUFBQUJnNmo4PSIpLCBOKE0sIDQ2NTcwLCAiT2V1dnZzZy8wU3pwcWxROUI3MEFBQUFBQUVEcVB3PT0iKSwgTihNLCA0NjYwMiwgIjk5eGFXc2svYi8rZ1dDanlCejBBQUFBQUFBRHFQdz09IiksIE4oTSwgNDY2MzMsICI0SW84N1pQS1Aya2hWbEJEY2lpOUFBQUFBQURnNlQ4PSIpLCBOKE0sIDQ2NjY1LCAiMEZ0WDJESExQNnJockU2Tk5ReTlBQUFBQUFEQTZUOD0iKSwgTihNLCA0NjY5NywgIjREczRoOURMUDdZU1ZGbkVTeTI5QUFBQUFBQ2c2VDg9IiksIE4oTSwgNDY3MjksICJFUERHKzIvTVA5SXJsc1Z5N1BHOEFBQUFBQUJnNlQ4PSIpLCBOKE0sIDQ2NzYxLCAia05Td1BiSE5Qeld3RmZjcS95cTlBQUFBQUFCQTZUOD0iKSwgTihNLCA0Njc5MywgIkVPZi9EbFBPUHpEMFFXQW5Fc0k4QUFBQUFBQWc2VDg9IiksIE4oTSwgNDY4MjYsICIzZVN0OWM0L0VZNjdaUlVoeXJ3QUFBQUFBQURwUHc9PSIpLCBOKE0sIDQ2ODU3LCAic0xOc0hKblBQekRmRE1yc3l4czlBQUFBQUFEQTZEOD0iKSwgTihNLCA0Njg4OSwgIldFMWdPSEhRUDVGTzdSYmJuUGc4QUFBQUFBQ2c2RDg9IiksIE4oTSwgNDY5MjEsICJZR0ZuTGNUUVArbnFQQmFMR0NjOUFBQUFBQUNBNkQ4PSIpLCBOKE0sIDQ2OTUzLCAiNkNlQ2poZlJQeHp3cFdNT0lTeTlBQUFBQUFCZzZEOD0iKSwgTihNLCA0Njk4NSwgIitLekxYR3ZSUDRFV3BmZk5taXM5QUFBQUFBQkE2RDg9IiksIE4oTSwgNDcwMTcsICJhRnBqbWIvUlA3ZTlSMUh0cGl3OUFBQUFBQUFnNkQ4PSIpLCBOKE0sIDQ3MDQ5LCAidUE1dFJSVFNQK3E2UnJyZWh3bzlBQUFBQUFEZzV6OD0iKSwgTihNLCA0NzA4MSwgImtOeDg4TDdTUC9RRVVFcjZuQ285QUFBQUFBREE1ejg9IiksIE4oTSwgNDcxMTMsICJZTlBoOFJUVFA3ZzhJZE42NGlpOUFBQUFBQUNnNXo4PSIpLCBOKE0sIDQ3MTQ1LCAiRUw1MloydlRQOGgzOGJETmJoRTlBQUFBQUFDQTV6OD0iKSwgTihNLCA0NzE3NywgIk1ETjNVc0xUUDF5OUJyWlVPeGc5QUFBQUFBQmc1ejg9IiksIE4oTSwgNDcyMDksICI2TlVqdEJuVVA1M2drT3cyNUFnOUFBQUFBQUJBNXo4PSIpLCBOKE0sIDQ3MjQxLCAieUhIQ2pYSFVQM1hXWnduT0p5KzlBQUFBQUFBZzV6OD0iKSwgTihNLCA0NzI3MywgIk1CZWU0TW5VUDZUWUNodUpJQzY5QUFBQUFBQUE1ejg9IiksIE4oTSwgNDczMDUsICJvRGdIcmlMVlAxbkhaSUZ3dmk0OUFBQUFBQURnNWo4PSIpLCBOKE0sIDQ3MzM3LCAiME1oVDkzdlZQKzlBWGU3dHJSODlBQUFBQUFEQTVqOD0iKSwgTihNLCA0NzM2OSwgIllGbmZ2ZFhWUDl4bHBBZ3FDd3E5a01FQUFDRENBQUFDL3dBRVpBQWdBQUFFLy84UUFBRUFBUUFCQVAvL0FmOEIvLy8vLy84Qi93SC9BZjhCL3dIL0FmOEIvd0gvLy8vLy93ci9JQUQvL3dQL0FmOEUveDRBQUFFRi8vLy8vLzlqQUFBSVl3RG9Bd0lBQUFELy8vLy8vd0FBQUFIL0FmLy8vLy8vLy8vLy8vLy8iKSwgTihNLCA0NzUxMywgIkJBPT0iKSwgTihNLCA0NzUyNiwgIkFmOEIvLy8vLy84QUFTQUFCQUNBQUFBSS8vOEIvd0gvLy8vLy8vLy9BZjhHL3dmL0NQOEovLy8vLy8rOEFyd0NBUUQvL3dFQUFRRC8vd0FBLy8vLy8vLy8vLzg9IiksIE4oTSwgNDc2MTAsICJGQT09IiksIE4oTSwgNDc2NDIsICIvLzhCQUFyLy8vLy8vLy8vLy84Qi93SC9BQUFBQUFBQUFmOEIvd0gvIiksIE4oTSwgNDc2OTAsICJBZjhBQUFBQUFBQUIvd0gvQVFBQUFBRUFBQUFCLy8vLy8vOEFBQUFBQWYvLy93QUFBQUQvLy8vLy8vLy8vLy8vS0FBSy8vLy8vLzhCQUFyLy8vLy9BUC8vLy8vLy8vLy8iKSwgTihNLCA0Nzg2MiwgIkFmOEIvLy8vQVFELy8vLy8vLy8vLy8vLy8vLy8vd3IvLy8vLy93ei9EZjg9IiksIE4oTSwgNDc5MDQsICJHUUFMQUJrWkdRQUFBQUFGQUFBQUFBQUFDUUFBQUFBTEFBQUFBQUFBQUFBWkFBb0tHUmtaQXdvSEFBRUFDUXNZQUFBSkJnc0FBQXNBQmhrQUFBQVpHUms9IiksIE4oTSwgNDc5ODUsICJEZ0FBQUFBQUFBQUFHUUFMRFJrWkdRQU5BQUFDQUFrT0FBQUFDUUFPQUFBTyIpLCBOKE0sIDQ4MDQzLCAiREE9PSIpLCBOKE0sIDQ4MDU1LCAiRXdBQUFBQVRBQUFBQUFrTUFBQUFBQUFNQUFBTSIpLCBOKE0sIDQ4MTAxLCAiRUE9PSIpLCBOKE0sIDQ4MTEzLCAiRHdBQUFBUVBBQUFBQUFrUUFBQUFBQUFRQUFBUSIpLCBOKE0sIDQ4MTU5LCAiRWc9PSIpLCBOKE0sIDQ4MTcxLCAiRVFBQUFBQVJBQUFBQUFrU0FBQUFBQUFTQUFBU0FBQWFBQUFBR2hvYSIpLCBOKE0sIDQ4MjI2LCAiR2dBQUFCb2FHZ0FBQUFBQUFBaz0iKSwgTihNLCA0ODI3NSwgIkZBPT0iKSwgTihNLCA0ODI4NywgIkZ3QUFBQUFYQUFBQUFBa1VBQUFBQUFBVUFBQVUiKSwgTihNLCA0ODMzMywgIkZnPT0iKSwgTihNLCA0ODM0NSwgIkZRQUFBQUFWQUFBQUFBa1dBQUFBQUFBV0FBQVdBQUF3TVRJek5EVTJOemc1UVVKRFJFVkciKSwgTihNLCA0ODQyMCwgIkJRRT0iKSwgTihNLCA0ODQ2MCwgIi8vLy8vLy8vLy84PSIpLCBOKE0sIDQ4NTI5LCAid0FBQW5MMEFBR3pCQUFCT01UQmZYMk40ZUdGaWFYWXhNVFpmWDNOb2FXMWZkSGx3WlY5cGJtWnZSUUFBQUFBQXdBQUF6TDBBQUpDOUFBQk9NVEJmWDJONGVHRmlhWFl4TVRkZlgyTnNZWE56WDNSNWNHVmZhVzVtYjBVQUFBQUF3QUFBL0wwQUFKQzlBQUJPTVRCZlgyTjRlR0ZpYVhZeE1UZGZYM0JpWVhObFgzUjVjR1ZmYVc1bWIwVUFBQUFBd0FBQUxMNEFBUEM5QUFCT01UQmZYMk40ZUdGaWFYWXhNVGxmWDNCdmFXNTBaWEpmZEhsd1pWOXBibVp2UlFBQXdBQUFYTDRBQUpDOUFBQk9NVEJmWDJONGVHRmlhWFl4TWpCZlgyWjFibU4wYVc5dVgzUjVjR1ZmYVc1bWIwVUFBQUFBQU1BQUFKQytBQUR3dlFBQVRqRXdYMTlqZUhoaFltbDJNVEk1WDE5d2IybHVkR1Z5WDNSdlgyMWxiV0psY2w5MGVYQmxYMmx1Wm05RkFBQUFBQUFBQU55K0FBQUlBUUFBQ1FFQUFBb0JBQUFMQVFBQURBRUFBQURBQUFEb3ZnQUFrTDBBQUU0eE1GOWZZM2g0WVdKcGRqRXlNMTlmWm5WdVpHRnRaVzUwWVd4ZmRIbHdaVjlwYm1adlJRREl2Z0FBR0w4QUFIWUFBQURJdmdBQUpMOEFBRVJ1QUFESXZnQUFNTDhBQUdJQUFBREl2Z0FBUEw4QUFHTUFBQURJdmdBQVNMOEFBR2dBQUFESXZnQUFWTDhBQUdFQUFBREl2Z0FBWUw4QUFITUFBQURJdmdBQWJMOEFBSFFBQUFESXZnQUFlTDhBQUdrQUFBREl2Z0FBaEw4QUFHb0FBQURJdmdBQWtMOEFBR3dBQUFESXZnQUFuTDhBQUcwQUFBREl2Z0FBcUw4QUFIZ0FBQURJdmdBQXRMOEFBSGtBQUFESXZnQUF3TDhBQUdZQUFBREl2Z0FBekw4QUFHUUFBQUFBQUFBQXdMMEFBQWdCQUFBTkFRQUFDZ0VBQUFzQkFBQU9BUUFBRHdFQUFCQUJBQUFSQVFBQUFBQUFBQ0RBQUFBSUFRQUFFZ0VBQUFvQkFBQUxBUUFBRGdFQUFCTUJBQUFVQVFBQUZRRUFBQURBQUFBc3dBQUF3TDBBQUU0eE1GOWZZM2g0WVdKcGRqRXlNRjlmYzJsZlkyeGhjM05mZEhsd1pWOXBibVp2UlFBQUFBQUFBQUFBSUw0QUFBZ0JBQUFXQVFBQUNnRUFBQXNCQUFBWEFRQUFBQUFBQU1UQUFBQUdBQUFBR0FFQUFCa0JBQUFBQUFBQTRNQUFBQVlBQUFBYUFRQUFHd0VBQUFBQUFBQ3N3QUFBQmdBQUFCd0JBQUFkQVFBQTJMOEFBTFRBQUFCVGREbGxlR05sY0hScGIyNEFBQUFBQU1BQUFOREFBQUNzd0FBQVUzUTVZbUZrWDJGc2JHOWpBQUFBQUFEQUFBRHN3QUFBeE1BQUFGTjBNakJpWVdSZllYSnlZWGxmYm1WM1gyeGxibWQwYUFBQUFBQUFBQUFBSE1FQUFBVUFBQUFlQVFBQUh3RUFBQURBQUFBb3dRQUFyTUFBQUZOME1URnNiMmRwWTE5bGNuSnZjZ0FBQUFBQVRNRUFBQVVBQUFBZ0FRQUFId0VBQUFEQUFBQll3UUFBSE1FQUFGTjBNVEpzWlc1bmRHaGZaWEp5YjNJQUFBQUEyTDhBQUhUQkFBQlRkRGwwZVhCbFgybHVabTg9IiksIE4oTSwgNDk1NDYsICJBUUFBSUFBQUJRPT0iKSwgTihNLCA0OTU2NCwgIi9nPT0iKSwgTihNLCA0OTU4OCwgIi93QUFBQUFCQUFCc3hnPT0iKSwgTihNLCA0OTYxMiwgIkFnPT0iKSwgTihNLCA0OTYyOCwgIi8vLy8vLy8vLy84PSIpLCBOKE0sIDQ5Njk2LCAiQlE9PSIpLCBOKE0sIDQ5NzA4LCAiQVFFPSIpLCBOKE0sIDQ5NzMyLCAiL3dBQUFBSUJBQUI0eGdBQUFBUT0iKSwgTihNLCA0OTc1NiwgIkFRPT0iKSwgTihNLCA0OTc3MiwgIi8vLy8vd289IiksIE4oTSwgNDk4NDAsICJnTXdCIik7CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgTTIgPSBuZXcgQXJyYXlCdWZmZXIoMTYpLCBhMCA9IG5ldyBJbnQzMkFycmF5KE0yKSwgSjAgPSBuZXcgRmxvYXQ2NEFycmF5KE0yKTsKICAgICAgICAgIGZ1bmN0aW9uIFcwKFYwKSB7CiAgICAgICAgICAgIHJldHVybiBhMFtWMF07CiAgICAgICAgICB9CiAgICAgICAgICBmdW5jdGlvbiBBMChWMCwgajApIHsKICAgICAgICAgICAgYTBbVjBdID0gajA7CiAgICAgICAgICB9CiAgICAgICAgICBmdW5jdGlvbiBOMCgpIHsKICAgICAgICAgICAgcmV0dXJuIEowWzBdOwogICAgICAgICAgfQogICAgICAgICAgZnVuY3Rpb24gZzEoVjApIHsKICAgICAgICAgICAgSjBbMF0gPSBWMDsKICAgICAgICAgIH0KICAgICAgICAgIGZ1bmN0aW9uIFUwKCkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImFib3J0Iik7CiAgICAgICAgICB9CiAgICAgICAgICBmdW5jdGlvbiBrZShWMCkgewogICAgICAgICAgICB2YXIgajAgPSBuZXcgQXJyYXlCdWZmZXIoNTI0Mjg4MDApLCBGID0gbmV3IEludDhBcnJheShqMCksIHUyID0gbmV3IEludDE2QXJyYXkoajApLCBlID0gbmV3IEludDMyQXJyYXkoajApLCBJID0gbmV3IFVpbnQ4QXJyYXkoajApLCBHMiA9IG5ldyBVaW50MTZBcnJheShqMCksIGQgPSBuZXcgVWludDMyQXJyYXkoajApLCBHID0gbmV3IEZsb2F0MzJBcnJheShqMCksIFEyID0gbmV3IEZsb2F0NjRBcnJheShqMCksIFogPSBNYXRoLmltdWwsIFcgPSBNYXRoLmZyb3VuZCwgUjIgPSBNYXRoLmFicywgTzAgPSBNYXRoLmNsejMyLCBXQSA9IE1hdGgubWluLCBOZSA9IE1hdGguZmxvb3IsICRpID0gTWF0aC5jZWlsLCBtQSA9IE1hdGguc3FydCwgcDAgPSBWMC5hLCBZMCA9IHAwLmEsIGUxID0gcDAuYiwgejEgPSBwMC5jLCBkMSA9IHAwLmQsIHFpID0gcDAuZSwgZXIgPSBwMC5mLCBpciA9IHAwLmcsIHJyID0gcDAuaCwgaDQgPSBwMC5pLCBzNCA9IHAwLmosIHc0ID0gcDAuaywgQjQgPSBwMC5sLCBjNCA9IHAwLm0sIHY0ID0gcDAubiwgeUEgPSBwMC5vLCBwQSA9IHAwLnAsIFFBID0gcDAucSwgVkEgPSBwMC5yLCBZQSA9IHAwLnMsIEhBID0gcDAudCwgWEEgPSBwMC51LCBGQSA9IHAwLnYsIEpBID0gcDAudywgUkEgPSBwMC54LCBFQSA9IHAwLnksIERBID0gcDAueiwgVUEgPSBwMC5BLCBNQSA9IHAwLkIsIFNBID0gcDAuQywgTkEgPSBwMC5ELCBQQSA9IHAwLkUsIHhBID0gcDAuRiwgWCA9IDExNzg4OCwgbmUgPSAwLCB0ZSA9IDAsIHEyID0gMDsKICAgICAgICAgICAgZnVuY3Rpb24gVEEoQSwgaSkgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwOwogICAgICAgICAgICAgIHZhciByID0gMCwgZiA9IDAsIGsgPSAwLCB0ID0gMCwgbiA9IDAsIGwgPSAwLCBhID0gMCwgdSA9IDAsIG8gPSAwLCBnID0gMCwgaCA9IDAsIHMgPSAwLCB3ID0gMCwgQiA9IDAsIGMgPSAwLCB2ID0gMCwgQyA9IDAsIG0gPSAwLCB5ID0gMCwgcCA9IDAsIEggPSAwLCBKID0gMCwgRSA9IDAsIEQgPSAwLCBVID0gMCwgUCA9IDAsIHggPSAwLCB6ID0gMCwgaiA9IDAsIE8gPSAwLCBxID0gMCwgZjIgPSAwLCBuMiA9IDAsIGcyID0gMCwgdzIgPSAwLCBjMiA9IDAsIG0yID0gMCwgcDIgPSAwLCBZMiA9IDAsIFgyID0gMCwgRDIgPSAwLCBTMiA9IDAsIFAyID0gMCwgeDIgPSAwLCB6MiA9IDAsIEwyID0gMCwgZTAgPSAwLCBpMCA9IFcoMCksIHIwID0gMCwgazAgPSAwLCB0MCA9IDAsIGgwID0gMCwgQzAgPSAwLCBIMCA9IDAsIEUwID0gMCwgTTAgPSAwLCB4MCA9IDAsIFQwID0gMCwgYjAgPSAwLCBmMSA9IDAsIGExID0gMDsKICAgICAgICAgICAgICBYMiA9IFggLSA5NiB8IDAsIFggPSBYMiwgeiA9IGVbQSArIDggPj4gMl07CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFlW0EgPj4gMl0pIHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChmID0gWihlW3ogKyAxNiA+PiAyXSAtIGVbeiArIDggPj4gMl0gfCAwLCBlW3ogKyAyMCA+PiAyXSAtIGVbeiArIDEyID4+IDJdIHwgMCkgPDwgMiwgbiA9IFAwKGYpLCBlW3ogKyA2MCA+PiAyXSA9IG4sICFuKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIFEoZVtBICsgMzIgPj4gMl0sIDEsIDE3OTE4LCAwKSwgaCA9IEEgKyAyOCB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBkMihuLCAwLCBmKTsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChmID0gZVt6ICsgNjAgPj4gMl0sICFmKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICBSKGYpLCBlW3ogKyA2MCA+PiAyXSA9IDA7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKCFlW2VbQSArIDI4ID4+IDJdID4+IDJdKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIEUwID0gZVtBICsgMTYgPj4gMl0sIGYgPSBlW0UwICsgMjggPj4gMl0gKyBaKGVbRTAgKyAyNCA+PiAyXSwgMTUyKSB8IDAsIGYxID0gZVtmIC0gMTUyID4+IDJdLCBhMSA9IGVbZiAtIDE0NCA+PiAyXSwgTTAgPSBlW0EgKyAyMCA+PiAyXSwgeDAgPSBlW0EgKyAxMiA+PiAyXSwgYjAgPSBlW0EgKyA0ID4+IDJdLCBoID0gQSArIDI4IHwgMDsKICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgIGlmIChrID0gSzYoaSksIGspCiAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgIGlmIChrID0gRTIoMSwgMTU2KSwgIWspIHsKICAgICAgICAgICAgICAgICAgICAgIFEoZVtBICsgMzIgPj4gMl0sIDEsIDEwMjc0LCAwKTsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChlW2sgKyAxNDAgPj4gMl0gPSAwLCB5NihpLCBrKSkKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgUShlW0EgKyAzMiA+PiAyXSwgMSwgMTg2MDYsIDApLCBpID0gZVtrICsgMTE2ID4+IDJdLCBpICYmIChSKGkpLCBlW2sgKyAxMTYgPj4gMl0gPSAwKSwgaSA9IGVbayArIDEyMCA+PiAyXSwgaSAmJiAoUihpKSwgZVtrICsgMTIwID4+IDJdID0gMCksIFIoZVtrICsgMTQ4ID4+IDJdKSwgUihrKTsKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVbayArIDE0NCA+PiAyXSA9IGVbQSArIDI0ID4+IDJdLCBEMiA9IGVbQSArIDQwID4+IDJdLCB4MiA9IGVbQSArIDM2ID4+IDJdLCBmMiA9IGVbQSArIDMyID4+IDJdLCBmID0gZVtNMCArIDgwOCA+PiAyXSwgaSA9IGVbeDAgKyAxNiA+PiAyXTsKICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgIFMyID0gZVtNMCArIDE2ID4+IDJdOwogICAgICAgICAgICAgICAgICAgIGs6IHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChTMiAmIDY0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG8gPSBYIC0gMzA0IHwgMCwgWCA9IG87CiAgICAgICAgICAgICAgICAgICAgICAgIGY6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHgyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFEoZjIsIDEsIDU2MjEsIDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgUShmMiwgMSwgNTYyMSwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICByID0gZVtrICsgMTE2ID4+IDJdLCBmID0gZVt6ICsgMjAgPj4gMl0gLSBlW3ogKyAxMiA+PiAyXSB8IDAsIGkgPSBlW3ogKyAxNiA+PiAyXSAtIGVbeiArIDggPj4gMl0gfCAwLCBuID0gWihmLCBpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICBBOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID4+PiAwID4gZFtrICsgMTMyID4+IDJdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFIociksIHcgPSBuIDw8IDIsIHIgPSBQMCh3KSwgZVtrICsgMTE2ID4+IDJdID0gciwgIXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTMyID4+IDJdID0gbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ID0gbiA8PCAyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZDIociwgMCwgdyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBlW2sgKyAxMjAgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgQTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRbayArIDEzNiA+PiAyXSA+IDI2MzkgfHwgKFIociksIHIgPSBQMCgxMDU2MCksIGVbayArIDEyMCA+PiAyXSA9IHIsIHIpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtrICsgMTM2ID4+IDJdID0gMjY0MCwgZDIociwgMCwgMTA1NjApLCBlW2sgKyAxMjggPj4gMl0gPSBmLCBlW2sgKyAxMjQgPj4gMl0gPSBpLCB2ID0gZVt6ICsgMjQgPj4gMl0sICF2KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBlW3ogKyAyOCA+PiAyXSwgciA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgQTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbSA9IGVbeiArIDUyID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmID0gZVt6ICsgNCA+PiAyXSwgciA9IDAsIG0gPj4+IDAgPj0gNCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IG0gJiAtNDsgdSA9IGYgKyAoZyA8PCAzKSB8IDAsIHIgPSBlW3UgKyAyOCA+PiAyXSArIChlW3UgKyAyMCA+PiAyXSArIChlW3UgKyAxMiA+PiAyXSArIChlW3UgKyA0ID4+IDJdICsgciB8IDApIHwgMCkgfCAwKSB8IDAsIGcgPSBnICsgNCB8IDAsIEIgPSBCICsgNCB8IDAsIChpIHwgMCkgIT0gKEIgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSBtICYgMywgaSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyByID0gZVsoZiArIChnIDw8IDMpIHwgMCkgKyA0ID4+IDJdICsgciB8IDAsIGcgPSBnICsgMSB8IDAsIGEgPSBhICsgMSB8IDAsIChpIHwgMCkgIT0gKGEgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlW2sgKyAxNDQgPj4gMl0gJiAobSB8IDApID09IDEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkW2sgKyAxNTIgPj4gMl0gPj0gciA+Pj4gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHcgPSBvMChlW2sgKyAxNDggPj4gMl0sIHIpLCB3KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZVtrICsgMTQ0ID4+IDJdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ID0gZVtrICsgMTQ4ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTUyID4+IDJdID0gciwgZVtrICsgMTQ4ID4+IDJdID0gdywgbSA9IGVbeiArIDUyID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsID0gZVt6ICsgNCA+PiAyXSwgciA9IDAsIGcgPSAwOyBmID0gZyA8PCAzLCBpID0gZiArIGwgfCAwLCBGMihyICsgdyB8IDAsIGVbaSA+PiAyXSwgZVtpICsgNCA+PiAyXSksIGwgPSBlW3ogKyA0ID4+IDJdLCByID0gZVsoZiArIGwgfCAwKSArIDQgPj4gMl0gKyByIHwgMCwgZyA9IGcgKyAxIHwgMCwgZyA+Pj4gMCA8IGRbeiArIDUyID4+IDJdOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdyA9IGVbZVt6ICsgNCA+PiAyXSA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgZyA9IDAsIGwgPSAwLCBmID0gZVt6ICsgNDAgPj4gMl0sIHUgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgIEE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZiB8fCAoaSA9IGVbeiA+PiAyXSwgbCA9IGVbaSArIDggPj4gMl0sIHUgPSAwLCAoZiB8IDApID09IDEpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IGVbaSArIDMyID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gdiAtIG4gfCAwLCBsID0gbCArIHUgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgIEE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnID0gMSwgaSA9IGVbeiA+PiAyXSwgQyA9IGVbaSA+PiAyXSwgYSA9IDAsIChsIHwgMCkgPT0gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBlW2kgKyAyNCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgRSA9IGYgKyAxIHwgMCwgazAgPSBlW2sgKyAxMTYgPj4gMl0sIEQyID0gZVtrICsgMTIwID4+IDJdLCBjID0gZVt6ICsgMTIgPj4gMl0sIEQgPSBlW3ogKyAyMCA+PiAyXSwgTyA9IGVbeiArIDggPj4gMl0sIFQwID0gZVt6ICsgMTYgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgQTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShhIHwgIWcpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF4MikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUShmMiwgMiwgMjE0MzksIDApLCBsID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID4+PiAwIDwgNCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeDIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW28gKyAxMTIgPj4gMl0gPSBsLCBRKGYyLCAxLCAyMDA3NCwgbyArIDExMiB8IDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtvICsgOTYgPj4gMl0gPSBsLCBRKGYyLCAxLCAyMDA3NCwgbyArIDk2IHwgMCksIHIgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFEoZjIsIDIsIDIxNDM5LCAwKSwgZyA9IGVbeiArIDI0ID4+IDJdLCBnID4+PiAwID4gMzApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUDIgPSAxLCBnID4+PiAwID49IEUgPj4+IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IGVbeiArIDI0ID4+IDJdLCBnID0gaSwgaSA+Pj4gMCA8PSAzMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF4MikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtvICsgMzIgPj4gMl0gPSBpLCBRKGYyLCAxLCAyMzY1NywgbyArIDMyIHwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW28gPj4gMl0gPSBnLCBRKGYyLCAxLCAyMzY1NywgbyksIHIgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGcgPj4+IDAgPCBFID4+PiAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPj4+IDAgPCAyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFAyID0gbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZyB8IDApICE9IChFIHwgMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUDIgPSBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFAyID0gMSwgSVs0OTkzNl0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXgyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZbNDk5MzZdID0gMSwgZVtvICsgNjQgPj4gMl0gPSBsLCBRKGYyLCAyLCAyMDkwMSwgbyAtIC02NCB8IDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVs0OTkzNl0gfHwgKEZbNDk5MzZdID0gMSwgZVtvICsgODAgPj4gMl0gPSBsLCBRKGYyLCAyLCAyMDkwMSwgbyArIDgwIHwgMCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISghKEMgPj4+IDAgPCAyIHwgciA+Pj4gMCA8IEMgPj4+IDApICYgYSArIEMgPj4+IDAgPD0gciA+Pj4gMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4MikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gMCwgUShmMiwgMSwgMTk2MjIsIDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IDAsIFEoZjIsIDEsIDE5NjIyLCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChIID0gdyArIEMgfCAwLCBpID0gSVtIIC0gMSB8IDBdLCBxID0gaSA8PCA0IHwgSVtIIC0gMiB8IDBdICYgMTUsICEoIShxID4+PiAwIDwgMiB8IChpIHwgMCkgPT0gMjU1KSAmIChDIHwgMCkgPj0gKHEgfCAwKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4MikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gMCwgUShmMiwgMSwgMjczMDAsIDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IDAsIFEoZjIsIDEsIDI3MzAwLCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMyID0gZVt6ICsgMjggPj4gMl0sIGVbbyArIDI3MiA+PiAyXSA9IDAsIGVbbyArIDI4MCA+PiAyXSA9IDAsIGVbbyArIDI2NCA+PiAyXSA9IDAsIGVbbyArIDI2OCA+PiAyXSA9IDAsIGVbbyArIDI5NiA+PiAyXSA9IDAsIGVbbyArIDMwMCA+PiAyXSA9IDAsIGVbbyArIDI4NCA+PiAyXSA9IDAsIGVbbyArIDI4OCA+PiAyXSA9IDAsIGkgPSBxIC0gMSB8IDAsIGVbbyArIDI3NiA+PiAyXSA9IGksIHIgPSAodyArIEMgfCAwKSAtIHEgfCAwLCBlW28gKyAyNTYgPj4gMl0gPSByLCB2ID0gSVtyIHwgMF0sIGYgPSA4LCBlW28gKyAyNzIgPj4gMl0gPSA4LCBsID0gciArIDEgfCAwLCBlW28gKyAyNTYgPj4gMl0gPSBsLCBuID0gcSAtIDIgfCAwLCBlW28gKyAyNzYgPj4gMl0gPSBuLCB1ID0gKGkgfCAwKSA9PSAxID8gdiB8IDE1IDogdiwgaSA9IDAsIHYgPSBpLCBlW28gKyAyNjQgPj4gMl0gPSB1LCBlW28gKyAyNjggPj4gMl0gPSBpLCBlW28gKyAyODAgPj4gMl0gPSAhaSAmICh1IHwgMCkgPT0gMjU1LCBtMiA9IHIgJiAzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQ6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChtMiB8IDApID09IDMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSAwLCAhKCh1IHwgMCkgIT0gMjU1IHwgKGkgfCAwKSAhPSAwIHwgSVtsIHwgMF0gPD0gMTQzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IDI1NSwgaSA9IHEgPj4+IDAgPj0gMyA/IElbbCB8IDBdIDogaSwgZyA9IHEgLSAzIHwgMCwgZVtvICsgMjc2ID4+IDJdID0gZywgciA9ICF2ICYgKHUgfCAwKSA9PSAyNTUsIGYgPSByID8gMTUgOiAxNiwgZVtvICsgMjcyID4+IDJdID0gZiwgbSA9IGwgKyAocSA+Pj4gMCA+IDIpIHwgMCwgZVtvICsgMjU2ID4+IDJdID0gbSwgaSA9IChuIHwgMCkgPT0gMSA/IGkgfCAxNSA6IGksIG4gPSAwLCBlW28gKyAyODAgPj4gMl0gPSAhbiAmIChpIHwgMCkgPT0gMjU1LCBuID0gaSwgbCA9IHUsIGkgPSByID8gNyA6IDgsIHIgPSBpICYgMzEsIChpICYgNjMpID4+PiAwID49IDMyID8gKGogPSBsIDw8IHIsIGkgPSAwKSA6IChqID0gKDEgPDwgcikgLSAxICYgbCA+Pj4gMzIgLSByIHwgdiA8PCByLCBpID0gbCA8PCByKSwgdSA9IGkgfCBuLCBpID0gcCB8IGosIHYgPSBpLCBlW28gKyAyNjQgPj4gMl0gPSB1LCBlW28gKyAyNjggPj4gMl0gPSBpLCAobTIgfCAwKSA9PSAyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gMjU1LCByID0gMCwgISgobiB8IDApICE9IDI1NSB8IChwIHwgMCkgIT0gMCB8IElbbSB8IDBdIDw9IDE0MykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBxID4+PiAwID49IDQgPyBJW20gfCAwXSA6IGwsIHQgPSBxIC0gNCB8IDAsIGVbbyArIDI3NiA+PiAyXSA9IHQsIG0gPSBtICsgKHEgPj4+IDAgPiAzKSB8IDAsIGVbbyArIDI1NiA+PiAyXSA9IG0sIGkgPSAoZyB8IDApID09IDEgPyBsIHwgMTUgOiBsLCByID0gMCwgZyA9IHIsIGVbbyArIDI4MCA+PiAyXSA9ICFyICYgKGkgfCAwKSA9PSAyNTUsIHIgPSAhcCAmIChuIHwgMCkgPT0gMjU1LCBmID0gKHIgPyA3IDogOCkgKyBmIHwgMCwgZVtvICsgMjcyID4+IDJdID0gZiwgbiA9IGksIGwgPSB1LCBpID0gciA/IDcgOiA4LCByID0gaSAmIDMxLCAoaSAmIDYzKSA+Pj4gMCA+PSAzMiA/IChwID0gbCA8PCByLCBpID0gMCkgOiAocCA9ICgxIDw8IHIpIC0gMSAmIGwgPj4+IDMyIC0gciB8IHYgPDwgciwgaSA9IGwgPDwgciksIHUgPSBpIHwgbiwgaSA9IGcgfCBwLCB2ID0gaSwgZVtvICsgMjY0ID4+IDJdID0gdSwgZVtvICsgMjY4ID4+IDJdID0gaSwgKG0yIHwgMCkgPT0gMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9IDAsICEoKG4gfCAwKSAhPSAyNTUgfCAoZyB8IDApICE9IDAgfCBJW20gfCAwXSA8PSAxNDMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAyNTUsIGkgPSBxID4+PiAwID49IDUgPyBJW20gfCAwXSA6IGksIGVbbyArIDI3NiA+PiAyXSA9IHEgLSA1LCBlW28gKyAyNTYgPj4gMl0gPSBtICsgKHEgPj4+IDAgPiA0KSwgciA9IDAsIGkgPSAodCB8IDApID09IDEgPyBpIHwgMTUgOiBpLCBlW28gKyAyODAgPj4gMl0gPSAhciAmIChpIHwgMCkgPT0gMjU1LCBuID0gIWcgJiAobiB8IDApID09IDI1NSwgZiA9IChuID8gNyA6IDgpICsgZiB8IDAsIGVbbyArIDI3MiA+PiAyXSA9IGYsIGwgPSB1LCBuID0gbiA/IDcgOiA4LCBnID0gbiAmIDMxLCAobiAmIDYzKSA+Pj4gMCA+PSAzMiA/ICh0ID0gbCA8PCBnLCBuID0gMCkgOiAodCA9ICgxIDw8IGcpIC0gMSAmIGwgPj4+IDMyIC0gZyB8IHYgPDwgZywgbiA9IGwgPDwgZyksIHUgPSBuIHwgaSwgaSA9IHIgfCB0LCB2ID0gaSwgZVtvICsgMjY0ID4+IDJdID0gdSwgZVtvICsgMjY4ID4+IDJdID0gaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSB1LCBmID0gNjQgLSBmIHwgMCwgbiA9IGYgJiAzMSwgKGYgJiA2MykgPj4+IDAgPj0gMzIgPyAodCA9IGkgPDwgbiwgaSA9IDApIDogKHQgPSAoMSA8PCBuKSAtIDEgJiBpID4+PiAzMiAtIG4gfCB2IDw8IG4sIGkgPSBpIDw8IG4pLCBlW28gKyAyNjQgPj4gMl0gPSBpLCBlW28gKyAyNjggPj4gMl0gPSB0LCByID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeDIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IDAsIFEoZjIsIDEsIDIyMDQ5LCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSAwLCBRKGYyLCAxLCAyMjA0OSwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVID0gVDAgLSBPIHwgMCwgbSA9IHEgLSAyIHwgMCwgZVtvICsgMjQ0ID4+IDJdID0gbSwgbTIgPSB3ICsgQyB8IDAsIGkgPSBtMiAtIDMgfCAwLCBlW28gKyAyMjQgPj4gMl0gPSBpLCBmID0gSVttMiAtIDIgfCAwXSwgbCA9IGYgPj4+IDAgPiAxNDMsIGVbbyArIDI0OCA+PiAyXSA9IGwsIHYgPSAwLCB1ID0gZiA+Pj4gNCB8IDAsIGVbbyArIDIzMiA+PiAyXSA9IHUsIGVbbyArIDIzNiA+PiAyXSA9IDAsIHggPSAodSAmIDcpID09IDcgPyAzIDogNCwgZVtvICsgMjQwID4+IDJdID0geCwgZiA9IChpICYgMykgKyAxIHwgMCwgQiA9IGYgPj4+IDAgPCBtID4+PiAwID8gZiA6IG07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gMCwgZVtvICsgMjQ0ID4+IDJdID0gbSAtIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gbTIgLSA0IHwgMCwgZVtvICsgMjI0ID4+IDJdID0gZiwgbiA9IElbaSB8IDBdLCByID0gbiA+Pj4gMCA+IDE0MywgZVtvICsgMjQ4ID4+IDJdID0gciwgdiA9IHggJiAzMSwgKHggJiA2MykgPj4+IDAgPj0gMzIgPyAocCA9IG4gPDwgdiwgdiA9IDApIDogKHAgPSAoMSA8PCB2KSAtIDEgJiBuID4+PiAzMiAtIHYsIHYgPSBuIDw8IHYpLCB1ID0gdiB8IHUsIGVbbyArIDIzMiA+PiAyXSA9IHUsIHYgPSBwLCBlW28gKyAyMzYgPj4gMl0gPSB2LCB4ID0gKGwgJiYgKG4gJiAxMjcpID09IDEyNyA/IDcgOiA4KSArIHggfCAwLCBlW28gKyAyNDAgPj4gMl0gPSB4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEIgPj4+IDAgPCAyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0gbTIgLSA1IHwgMCwgZVtvICsgMjI0ID4+IDJdID0gciwgdCA9IElbZiB8IDBdLCBsID0gdCA+Pj4gMCA+IDE0MywgZVtvICsgMjQ4ID4+IDJdID0gbCwgaSA9IHggJiAzMSwgKHggJiA2MykgPj4+IDAgPj0gMzIgPyAoaiA9IHQgPDwgaSwgaSA9IDApIDogKGogPSAoMSA8PCBpKSAtIDEgJiB0ID4+PiAzMiAtIGksIGkgPSB0IDw8IGkpLCB1ID0gaSB8IHUsIGkgPSB2IHwgaiwgdiA9IGksIGVbbyArIDIzMiA+PiAyXSA9IHUsIGVbbyArIDIzNiA+PiAyXSA9IGksIHggPSAobiA+Pj4gMCA8PSAxNDMgPyA4IDogKHQgJiAxMjcpID09IDEyNyA/IDcgOiA4KSArIHggfCAwLCBlW28gKyAyNDAgPj4gMl0gPSB4LCAoQiB8IDApID09IDIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBmLCBmID0gcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID0gbTIgLSA2IHwgMCwgZVtvICsgMjI0ID4+IDJdID0gbiwgaSA9IElbciB8IDBdLCBnID0gaSwgbCA9IGkgPj4+IDAgPiAxNDMsIGVbbyArIDI0OCA+PiAyXSA9IGwsIGYgPSB4ICYgMzEsICh4ICYgNjMpID4+PiAwID49IDMyID8gKHAgPSBpIDw8IGYsIGYgPSAwKSA6IChwID0gKDEgPDwgZikgLSAxICYgaSA+Pj4gMzIgLSBmLCBmID0gaSA8PCBmKSwgdSA9IGYgfCB1LCBmID0gdiB8IHAsIHYgPSBmLCBlW28gKyAyMzIgPj4gMl0gPSB1LCBlW28gKyAyMzYgPj4gMl0gPSBmLCB4ID0gKHQgPj4+IDAgPD0gMTQzID8gOCA6IChpICYgMTI3KSA9PSAxMjcgPyA3IDogOCkgKyB4IHwgMCwgZVtvICsgMjQwID4+IDJdID0geCwgKEIgfCAwKSA9PSAzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gciwgZiA9IG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gbTIgLSA3IHwgMCwgZVtvICsgMjI0ID4+IDJdID0gZiwgaSA9IElbbiB8IDBdLCBsID0gaSA+Pj4gMCA+IDE0MywgZVtvICsgMjQ4ID4+IDJdID0gbCwgciA9IHggJiAzMSwgKHggJiA2MykgPj4+IDAgPj0gMzIgPyAoaiA9IGkgPDwgciwgciA9IDApIDogKGogPSAoMSA8PCByKSAtIDEgJiBpID4+PiAzMiAtIHIsIHIgPSBpIDw8IHIpLCB1ID0gciB8IHUsIGVbbyArIDIzMiA+PiAyXSA9IHUsIHYgPSB2IHwgaiwgZVtvICsgMjM2ID4+IDJdID0gdiwgeCA9IChnID4+PiAwIDw9IDE0MyA/IDggOiAoaSAmIDEyNykgPT0gMTI3ID8gNyA6IDgpICsgeCB8IDAsIGVbbyArIDI0MCA+PiAyXSA9IHgsIGkgPSBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID0gbSAtIEIgfCAwLCBlW28gKyAyNDQgPj4gMl0gPSBuLCB4ID4+PiAwID4gMzIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChuIHwgMCkgPj0gNCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBlW2kgLSA0ID4+IDJdLCBlW28gKyAyMjQgPj4gMl0gPSBpIC0gNSwgZVtvICsgMjQ0ID4+IDJdID0gbiAtIDQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKG4gfCAwKSA8PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtMiA9IG4gJiAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChCIHwgMCkgPT0gKHEgLSAzIHwgMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0gPSAyNCwgciA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHAgPSBuICYgMjE0NzQ4MzY0NiwgbSA9IDI0LCByID0gMCwgaSA9IGY7IGcgPSBpIC0gMSB8IDAsIGVbbyArIDIyNCA+PiAyXSA9IGcsIHQgPSBJW2kgfCAwXSwgZiA9IGkgLSAyIHwgMCwgZVtvICsgMjI0ID4+IDJdID0gZiwgZVtvICsgMjQ0ID4+IDJdID0gbiAtIDEsIGkgPSBJW2cgfCAwXSwgbiA9IG4gLSAyIHwgMCwgZVtvICsgMjQ0ID4+IDJdID0gbiwgciA9IHQgPDwgbSB8IHIgfCBpIDw8IG0gLSA4LCBtID0gbSAtIDE2IHwgMCwgaSA9IGYsIEogPSBKICsgMiB8IDAsIChwIHwgMCkgIT0gKEogfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbTIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtvICsgMjI0ID4+IDJdID0gZiAtIDEsIGkgPSBJW2YgfCAwXSwgZVtvICsgMjQ0ID4+IDJdID0gbiAtIDEsIHIgPSBpIDw8IG0gfCByOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCA9IHIgJiAyNTUsIGVbbyArIDI0OCA+PiAyXSA9IHAgPj4+IDAgPiAxNDMsIG4gPSBsICYmIChyICYgMjEzMDcwNjQzMikgPT0gMjEzMDcwNjQzMiA/IDcgOiA4LCBmID0gbiArIChyID4+PiAwIDw9IDI0MTU5MTkxMDMgPyA4IDogKHIgJiA4MzIzMDcyKSA9PSA4MzIzMDcyID8gNyA6IDgpIHwgMCwgdCA9IHIgPj4+IDE2ICYgMjU1LCBpID0gZiArICh0ID4+PiAwIDw9IDE0MyA/IDggOiAociAmIDMyNTEyKSA9PSAzMjUxMiA/IDcgOiA4KSB8IDAsIGcgPSByID4+PiA4ICYgMjU1LCBlW28gKyAyNDAgPj4gMl0gPSBpICsgKChnID4+PiAwIDw9IDE0MyA/IDggOiAociAmIDEyNykgPT0gMTI3ID8gNyA6IDgpICsgeCB8IDApLCBpID0gdCA8PCBuIHwgciA+Pj4gMjQgfCBnIDw8IGYgfCBwIDw8IGksIGYgPSB4ICYgMzEsICh4ICYgNjMpID4+PiAwID49IDMyID8gKHQgPSBpIDw8IGYsIGkgPSAwKSA6ICh0ID0gKDEgPDwgZikgLSAxICYgaSA+Pj4gMzIgLSBmLCBpID0gaSA8PCBmKSwgZVtvICsgMjMyID4+IDJdID0gaSB8IHUsIGVbbyArIDIzNiA+PiAyXSA9IHQgfCB2OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQNChvICsgMTkyIHwgMCwgdywgQyAtIHEgfCAwLCAyNTUpLCBtMiA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFAyID4+PiAwIDwgMiB8fCAoUDQobyArIDE2MCB8IDAsIEgsIGEsIDApLCBtMiA9IDAsIChQMiB8IDApID09IDIpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IDAsIHYgPSAwLCBsID0gMCwgZVtvICsgMTUyID4+IDJdID0gMSwgZVtvICsgMTQ0ID4+IDJdID0gMCwgZVtvICsgMTM2ID4+IDJdID0gMCwgZVtvICsgMTQwID4+IDJdID0gMCwgZiA9IGEgLSAxIHwgMCwgZVtvICsgMTQ4ID4+IDJdID0gZiwgaSA9ICh3ICsgQyB8IDApICsgYSB8IDAsIG4gPSBpIC0gMSB8IDAsIGVbbyArIDEyOCA+PiAyXSA9IG4sIGcgPSBuICYgMzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQ6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChhIHwgMCkgPD0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGkgLSAyIHwgMCwgZVtvICsgMTI4ID4+IDJdID0gaSwgdSA9IElbbiB8IDBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtvICsgMTM2ID4+IDJdID0gdSwgZVtvICsgMTQwID4+IDJdID0gMCwgeCA9IHUgPj4+IDAgPiAxNDMsIGVbbyArIDE1MiA+PiAyXSA9IHgsIHcgPSAodSAmIDEyNykgPT0gMTI3ID8gNyA6IDgsIGVbbyArIDE0NCA+PiAyXSA9IHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDID0gYSAtIDIgfCAwLCBlW28gKyAxNDggPj4gMl0gPSBDOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChhIHwgMCkgPCAyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBpIC0gMSB8IDAsIGVbbyArIDEyOCA+PiAyXSA9IHIsIGwgPSBJW2kgfCAwXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeCA9IGwgPj4+IDAgPiAxNDMsIGVbbyArIDE1MiA+PiAyXSA9IHgsIGkgPSB3ICYgMzEsICh3ICYgNjMpID4+PiAwID49IDMyID8gKHQgPSBsIDw8IGksIGkgPSAwKSA6ICh0ID0gKDEgPDwgaSkgLSAxICYgbCA+Pj4gMzIgLSBpLCBpID0gbCA8PCBpKSwgdiA9IGkgfCB1LCBlW28gKyAxMzYgPj4gMl0gPSB2LCBpID0gdCwgZVtvICsgMTQwID4+IDJdID0gaSwgdyA9ICh1ID4+PiAwIDw9IDE0MyA/IDggOiAobCAmIDEyNykgPT0gMTI3ID8gNyA6IDgpICsgdyB8IDAsIGVbbyArIDE0NCA+PiAyXSA9IHcsIChnIHwgMCkgPT0gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSByLCB1ID0gdiwgdiA9IHQsIGEgPSBmLCBmID0gQzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBhIC0gMyB8IDAsIGVbbyArIDE0OCA+PiAyXSA9IHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGEgfCAwKSA8IDMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSByOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IHIgLSAxIHwgMCwgZVtvICsgMTI4ID4+IDJdID0gbiwgcyA9IElbciB8IDBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4ID0gcyA+Pj4gMCA+IDE0MywgZVtvICsgMTUyID4+IDJdID0geCwgZiA9IHcgJiAzMSwgKHcgJiA2MykgPj4+IDAgPj0gMzIgPyAoaiA9IHMgPDwgZiwgZiA9IDApIDogKGogPSAoMSA8PCBmKSAtIDEgJiBzID4+PiAzMiAtIGYsIGYgPSBzIDw8IGYpLCB1ID0gZiB8IHYsIGkgPSBpIHwgaiwgdiA9IGksIGVbbyArIDEzNiA+PiAyXSA9IHUsIGVbbyArIDE0MCA+PiAyXSA9IGksIHcgPSAobCA+Pj4gMCA8PSAxNDMgPyA4IDogKHMgJiAxMjcpID09IDEyNyA/IDcgOiA4KSArIHcgfCAwLCBlW28gKyAxNDQgPj4gMl0gPSB3LCAoZyB8IDApID09IDIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gbiwgYSA9IEMsIGYgPSB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IGEgLSA0IHwgMCwgZVtvICsgMTQ4ID4+IDJdID0gZiwgbCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGEgfCAwKSA8IDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IG4gLSAxIHwgMCwgZVtvICsgMTI4ID4+IDJdID0gaSwgbCA9IElbbiB8IDBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSBsID4+PiAwID4gMTQzLCBlW28gKyAxNTIgPj4gMl0gPSB4LCBuID0gdyAmIDMxLCAodyAmIDYzKSA+Pj4gMCA+PSAzMiA/IChwID0gbCA8PCBuLCBuID0gMCkgOiAocCA9ICgxIDw8IG4pIC0gMSAmIGwgPj4+IDMyIC0gbiwgbiA9IGwgPDwgbiksIHUgPSBuIHwgdSwgbiA9IHYgfCBwLCB2ID0gbiwgZVtvICsgMTM2ID4+IDJdID0gdSwgZVtvICsgMTQwID4+IDJdID0gbiwgdyA9IChzID4+PiAwIDw9IDE0MyA/IDggOiAobCAmIDEyNykgPT0gMTI3ID8gNyA6IDgpICsgdyB8IDAsIGVbbyArIDE0NCA+PiAyXSA9IHcsIGEgPSB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHcgPj4+IDAgPD0gMzIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYSB8IDApID49IDUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBlW2kgLSAzID4+IDJdLCBlW28gKyAxNDggPj4gMl0gPSBhIC0gNSwgZVtvICsgMTI4ID4+IDJdID0gaSAtIDQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9IDAsIChhIHwgMCkgPCAyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGEgPSAyNDsgbCA9IGkgLSAxIHwgMCwgZVtvICsgMTI4ID4+IDJdID0gbCwgaSA9IElbaSB8IDBdLCBuID0gZiAtIDEgfCAwLCBlW28gKyAxNDggPj4gMl0gPSBuLCByID0gaSA8PCBhIHwgciwgdCA9IGYgPj4+IDAgPiAxLCBpID0gbCwgYSA9IGEgLSA4IHwgMCwgZiA9IG4sICEhdDsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSByICYgMjU1LCBlW28gKyAxNTIgPj4gMl0gPSB0ID4+PiAwID4gMTQzLCBuID0geCAmJiAociAmIDIxMzA3MDY0MzIpID09IDIxMzA3MDY0MzIgPyA3IDogOCwgZiA9IG4gKyAociA+Pj4gMCA8PSAyNDE1OTE5MTAzID8gOCA6IChyICYgODMyMzA3MikgPT0gODMyMzA3MiA/IDcgOiA4KSB8IDAsIGEgPSByID4+PiAxNiAmIDI1NSwgaSA9IGYgKyAoYSA+Pj4gMCA8PSAxNDMgPyA4IDogKHIgJiAzMjUxMikgPT0gMzI1MTIgPyA3IDogOCkgfCAwLCBsID0gciA+Pj4gOCAmIDI1NSwgZVtvICsgMTQ0ID4+IDJdID0gaSArICgobCA+Pj4gMCA8PSAxNDMgPyA4IDogKHIgJiAxMjcpID09IDEyNyA/IDcgOiA4KSArIHcgfCAwKSwgaSA9IGEgPDwgbiB8IHIgPj4+IDI0IHwgbCA8PCBmIHwgdCA8PCBpLCBmID0gdyAmIDMxLCAodyAmIDYzKSA+Pj4gMCA+PSAzMiA/ICh0ID0gaSA8PCBmLCBpID0gMCkgOiAodCA9ICgxIDw8IGYpIC0gMSAmIGkgPj4+IDMyIC0gZiwgaSA9IGkgPDwgZiksIGVbbyArIDEzNiA+PiAyXSA9IGkgfCB1LCBlW28gKyAxNDAgPj4gMl0gPSB0IHwgdjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0yID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHoyID0gRCAtIGMgfCAwLCBwMiA9IEUgKyAxIHwgMCwgRltEMiArIDIxMTIgfCAwXSA9IDAsIHMgPSBEMiArIDIxMTIgfCAwLCBuID0gR2UobyArIDI1NiB8IDApLCAoVSB8IDApID4gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAocSA9IGMyIC0gMSB8IDAsIGkgPSBEMiwgbCA9IHMsIHcgPSAwLCBmID0gazAsIEIgPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDID0gQiwgZyA9IEcyWyh3IDw8IDggfCAoZ2kobyArIDIyNCB8IDApICYgMTI3KSA8PCAxKSArIDMxNzkyID4+IDFdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ID0gbiAtIDIgfCAwLCBnID0gKHYgfCAwKSA9PSAtMSA/IGcgOiAwLCAobiB8IDApID4gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IHY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gR2UobyArIDI1NiB8IDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0gZVtvICsgMjM2ID4+IDJdLCB1ID0gZVtvICsgMjMyID4+IDJdLCB2ID0gZVtvICsgMjQwID4+IDJdLCBIID0gZyA+Pj4gNCB8IDAsIGMgPSBlW2kgPj4gMl0gfCAoSCAmIDMgfCBnID4+PiAyICYgNDgpIDw8IFkyLCBlW2kgPj4gMl0gPSBjLCBEID0gZyAmIDE2LCB3ID0gZyA+Pj4gNSAmIDcgfCBEID4+PiA0LCBhID0gdiwgdiA9IGcgJiA3LCBCID0gYSAtIHYgfCAwLCB1ID0gKCgxIDw8IHYpIC0gMSAmIHIpIDw8IDMyIC0gdiB8IHUgPj4+IHYsIHYgPSByID4+PiB2IHwgMCwgYSA9IHUsIHIgPSAwLCAoVSB8IDApID4gKEMgfCAyKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBHMlsodyA8PCA4IHwgKGEgJiAxMjcpIDw8IDEpICsgMzE3OTIgPj4gMV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA9IG4gLSAyIHwgMCwgciA9IChhIHwgMCkgPT0gLTEgPyByIDogMCwgKG4gfCAwKSA+IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gR2UobyArIDI1NiB8IDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ID0gciA+Pj4gNCAmIDEgfCByID4+PiA1ICYgNywgYSA9IHIgJiA3LCBCID0gQiAtIGEgfCAwLCB1ID0gKCgxIDw8IGEpIC0gMSAmIHYpIDw8IDMyIC0gYSB8IHUgPj4+IGEsIHYgPSB2ID4+PiBhIHwgMCwgYSA9IHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtpID4+IDJdID0gYyB8IChyIDw8IDIgJiA3NjggfCByICYgNDgpIDw8IFkyICsgNCwgbSA9IHIgPj4+IDIgJiAyIHwgZyA+Pj4gMyAmIDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKG0gfCAwKSAhPSAzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IG4gLSAyIHwgMCwgbSA9ICh0IHwgMCkgPT0gLTEgPyA0IDogMywgKG4gfCAwKSA+IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IEdlKG8gKyAyNTYgfCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW28gKyAxMjAgPj4gMl0gPSAxLCBlW28gKyAxMjQgPj4gMl0gPSAxLCBhID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtID4+PiAwIDw9IDIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBJWyhhICYgNykgKyAzNTk0MCB8IDBdLCBjID0gdCA+Pj4gMiAmIDcsIHAgPSB0ICYgMywgdCA9ICgoKC0xIDw8IGMgXiAtMSkgJiBhID4+PiBwKSArICh0ID4+PiA1IHwgMCkgfCAwKSArIDEgfCAwLCBhID0gKG0gfCAwKSA9PSAxLCBlW28gKyAxMjQgPj4gMl0gPSBhID8gMSA6IHQsIGVbbyArIDEyMCA+PiAyXSA9IGEgPyB0IDogMSwgYSA9IGMgKyBwIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChKID0gYSwgYSA9IElbKGEgJiA3KSArIDM1OTQwIHwgMF0sIGogPSBhICYgMywgdCA9IEogPj4+IGogfCAwLCAobSB8IDApID09IDMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChFID0gKGEgPj4+IDUgfCAwKSArIDEgfCAwLCAoaiB8IDApID09IDMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtvICsgMTI0ID4+IDJdID0gdCAmIDEgfCAyLCBhID0gYSA+Pj4gMiAmIDcsIGVbbyArIDEyMCA+PiAyXSA9IEUgKyAoKC0xIDw8IGEgXiAtMSkgJiB0ID4+PiAxKSwgYSA9IGEgKyA0IHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBJWyh0ICYgNykgKyAzNTk0MCB8IDBdLCBwID0gYyAmIDMsIHQgPSB0ID4+PiBwIHwgMCwgbSA9IGEgPj4+IDIgJiA3LCBlW28gKyAxMjAgPj4gMl0gPSBFICsgKHQgJiAoLTEgPDwgbSBeIC0xKSksIGEgPSBjID4+PiAyICYgNywgZVtvICsgMTI0ID4+IDJdID0gKCgoLTEgPDwgYSBeIC0xKSAmIHQgPj4+IG0pICsgKGMgPj4+IDUgfCAwKSB8IDApICsgMSwgYSA9IGEgKyAocCArIChtICsgaiB8IDApIHwgMCkgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IElbKHQgJiA3KSArIDM1OTQwIHwgMF0sIHAgPSBjICYgMywgdCA9IHQgPj4+IHAgfCAwLCBtID0gYSA+Pj4gMiAmIDcsIGVbbyArIDEyMCA+PiAyXSA9ICgodCAmICgtMSA8PCBtIF4gLTEpKSArIChhID4+PiA1IHwgMCkgfCAwKSArIDMsIGEgPSBjID4+PiAyICYgNywgZVtvICsgMTI0ID4+IDJdID0gKCgoLTEgPDwgYSBeIC0xKSAmIHQgPj4+IG0pICsgKGMgPj4+IDUgfCAwKSB8IDApICsgMywgYSA9IGEgKyAobSArIChwICsgaiB8IDApIHwgMCkgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobSA9IGVbbyArIDEyMCA+PiAyXSwgbSA+Pj4gMCA8PSBwMiA+Pj4gMCAmJiAoYyA9IGVbbyArIDEyNCA+PiAyXSwgYyA+Pj4gMCA8PSBwMiA+Pj4gMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4MikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IDAsIFEoZjIsIDEsIDI4MTA2LCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSAwLCBRKGYyLCAxLCAyODEwNiwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtvICsgMjQwID4+IDJdID0gQiAtIGEsIHAgPSBhICYgMzEsIChhICYgNjMpID4+PiAwID49IDMyID8gKHQgPSAwLCB2ID0gdiA+Pj4gcCB8IDApIDogKHQgPSB2ID4+PiBwIHwgMCwgdiA9ICgoMSA8PCBwKSAtIDEgJiB2KSA8PCAzMiAtIHAgfCB1ID4+PiBwKSwgZVtvICsgMjMyID4+IDJdID0gdiwgZVtvICsgMjM2ID4+IDJdID0gdCwgQiA9IEMgKyA0IHwgMCwgdiA9IChCIHwgMCkgPD0gKFUgfCAwKSA/IDI1NSA6IDI1NSA+Pj4gKEIgLSBVIDw8IDEpIHwgMCwgRSA9ICh6MiB8IDApID4gMSA/IHYgOiB2ICYgODUsIChyICYgMjQwIHwgSCAmIDE1KSAmIChFIF4gLTEpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHgyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gMCwgUShmMiwgMSwgMjMzMzEsIDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IDAsIFEoZjIsIDEsIDIzMzMxLCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gazEobyArIDE5MiB8IDApLCBwID0gbSArIChnIDw8IDE5ID4+IDMxKSB8IDAsIGVbbyArIDIwOCA+PiAyXSA9IGVbbyArIDIwOCA+PiAyXSAtIHAsIGEgPSBlW28gKyAyMDQgPj4gMl0sIHYgPSBlW28gKyAyMDAgPj4gMl0sIEQgPSBwICYgMzEsIChwICYgNjMpID4+PiAwID49IDMyID8gKHQgPSAwLCB2ID0gYSA+Pj4gRCB8IDApIDogKHQgPSBhID4+PiBEIHwgMCwgdiA9ICgoMSA8PCBEKSAtIDEgJiBhKSA8PCAzMiAtIEQgfCB2ID4+PiBEKSwgZVtvICsgMjAwID4+IDJdID0gdiwgZVtvICsgMjA0ID4+IDJdID0gdCwgdzIgPSAodSAmICgtMSA8PCBwIF4gLTEpIHwgKGcgPj4+IDggJiAxKSA8PCBwIHwgMSkgKyAyIDw8IHEgfCB1IDw8IDMxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHcyID0gMCwgIShFICYgMSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbZiA+PiAyXSA9IHcyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZyAmIDMyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gazEobyArIDE5MiB8IDApLCBwID0gbSArIChnIDw8IDE4ID4+IDMxKSB8IDAsIGVbbyArIDIwOCA+PiAyXSA9IGVbbyArIDIwOCA+PiAyXSAtIHAsIGEgPSBlW28gKyAyMDQgPj4gMl0sIHYgPSBlW28gKyAyMDAgPj4gMl0sIEQgPSBwICYgMzEsIChwICYgNjMpID4+PiAwID49IDMyID8gKHQgPSAwLCB2ID0gYSA+Pj4gRCB8IDApIDogKHQgPSBhID4+PiBEIHwgMCwgdiA9ICgoMSA8PCBEKSAtIDEgJiBhKSA8PCAzMiAtIEQgfCB2ID4+PiBEKSwgZVtvICsgMjAwID4+IDJdID0gdiwgZVtvICsgMjA0ID4+IDJdID0gdCwgdiA9IHUgJiAoLTEgPDwgcCBeIC0xKSB8IChnID4+PiA5ICYgMSkgPDwgcCB8IDEsIGVbKFUgPDwgMikgKyBmID4+IDJdID0gdiArIDIgPDwgcSB8IHUgPDwgMzEsIHUgPSAzMiAtIE8wKHYpIHwgMCwgdiA9IElbbCB8IDBdICYgMTI3LCBGW2wgfCAwXSA9ICh1ID4+PiAwID4gdiA+Pj4gMCA/IHUgOiB2KSB8IDEyODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKEUgJiAyKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVsoVSA8PCAyKSArIGYgPj4gMl0gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSBmICsgNCB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZyAmIDY0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBrMShvICsgMTkyIHwgMCksIEQgPSBtICsgKGcgPDwgMTcgPj4gMzEpIHwgMCwgZVtvICsgMjA4ID4+IDJdID0gZVtvICsgMjA4ID4+IDJdIC0gRCwgYSA9IGVbbyArIDIwNCA+PiAyXSwgdiA9IGVbbyArIDIwMCA+PiAyXSwgSCA9IEQgJiAzMSwgKEQgJiA2MykgPj4+IDAgPj0gMzIgPyAodCA9IDAsIHYgPSBhID4+PiBIIHwgMCkgOiAodCA9IGEgPj4+IEggfCAwLCB2ID0gKCgxIDw8IEgpIC0gMSAmIGEpIDw8IDMyIC0gSCB8IHYgPj4+IEgpLCBlW28gKyAyMDAgPj4gMl0gPSB2LCBlW28gKyAyMDQgPj4gMl0gPSB0LCBhID0gKHUgJiAoLTEgPDwgRCBeIC0xKSB8IChnID4+PiAxMCAmIDEpIDw8IEQgfCAxKSArIDIgPDwgcSB8IHUgPDwgMzE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA9IDAsICEoRSAmIDQpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW3AgPj4gMl0gPSBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZbbCArIDEgfCAwXSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZyAmIDEyOCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IGsxKG8gKyAxOTIgfCAwKSwgRCA9IG0gKyAoZyA8PCAxNiA+PiAzMSkgfCAwLCBlW28gKyAyMDggPj4gMl0gPSBlW28gKyAyMDggPj4gMl0gLSBELCBhID0gZVtvICsgMjA0ID4+IDJdLCB2ID0gZVtvICsgMjAwID4+IDJdLCBIID0gRCAmIDMxLCAoRCAmIDYzKSA+Pj4gMCA+PSAzMiA/ICh0ID0gMCwgdiA9IGEgPj4+IEggfCAwKSA6ICh0ID0gYSA+Pj4gSCB8IDAsIHYgPSAoKDEgPDwgSCkgLSAxICYgYSkgPDwgMzIgLSBIIHwgdiA+Pj4gSCksIGVbbyArIDIwMCA+PiAyXSA9IHYsIGVbbyArIDIwNCA+PiAyXSA9IHQsIHYgPSB1ICYgKC0xIDw8IEQgXiAtMSkgfCAoZyA+Pj4gMTEgJiAxKSA8PCBEIHwgMSwgZVtwICsgKFUgPDwgMikgPj4gMl0gPSB2ICsgMiA8PCBxIHwgdSA8PCAzMSwgRltsICsgMSB8IDBdID0gLTk2IC0gTzAodik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShFICYgOCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbcCArIChVIDw8IDIpID4+IDJdID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gZiArIDggfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgJiAxNikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gazEobyArIDE5MiB8IDApLCBwID0gYyArIChyIDw8IDE5ID4+IDMxKSB8IDAsIGVbbyArIDIwOCA+PiAyXSA9IGVbbyArIDIwOCA+PiAyXSAtIHAsIGEgPSBlW28gKyAyMDQgPj4gMl0sIHYgPSBlW28gKyAyMDAgPj4gMl0sIEQgPSBwICYgMzEsIChwICYgNjMpID4+PiAwID49IDMyID8gKHQgPSAwLCB2ID0gYSA+Pj4gRCB8IDApIDogKHQgPSBhID4+PiBEIHwgMCwgdiA9ICgoMSA8PCBEKSAtIDEgJiBhKSA8PCAzMiAtIEQgfCB2ID4+PiBEKSwgZVtvICsgMjAwID4+IDJdID0gdiwgZVtvICsgMjA0ID4+IDJdID0gdCwgbSA9ICh1ICYgKC0xIDw8IHAgXiAtMSkgfCAociA+Pj4gOCAmIDEpIDw8IHAgfCAxKSArIDIgPDwgcSB8IHUgPDwgMzE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobSA9IDAsICEoRSAmIDE2KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtnID4+IDJdID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgJiAzMikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IGsxKG8gKyAxOTIgfCAwKSwgcCA9IGMgKyAociA8PCAxOCA+PiAzMSkgfCAwLCBlW28gKyAyMDggPj4gMl0gPSBlW28gKyAyMDggPj4gMl0gLSBwLCBhID0gZVtvICsgMjA0ID4+IDJdLCB2ID0gZVtvICsgMjAwID4+IDJdLCBEID0gcCAmIDMxLCAocCAmIDYzKSA+Pj4gMCA+PSAzMiA/ICh0ID0gMCwgdiA9IGEgPj4+IEQgfCAwKSA6ICh0ID0gYSA+Pj4gRCB8IDAsIHYgPSAoKDEgPDwgRCkgLSAxICYgYSkgPDwgMzIgLSBEIHwgdiA+Pj4gRCksIGVbbyArIDIwMCA+PiAyXSA9IHYsIGVbbyArIDIwNCA+PiAyXSA9IHQsIHYgPSB1ICYgKC0xIDw8IHAgXiAtMSkgfCAociA+Pj4gOSAmIDEpIDw8IHAgfCAxLCBlW2cgKyAoVSA8PCAyKSA+PiAyXSA9IHYgKyAyIDw8IHEgfCB1IDw8IDMxLCB1ID0gMzIgLSBPMCh2KSB8IDAsIHYgPSBJW2wgKyAxIHwgMF0gJiAxMjcsIEZbbCArIDEgfCAwXSA9ICh1ID4+PiAwID4gdiA+Pj4gMCA/IHUgOiB2KSB8IDEyODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKEUgJiAzMikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbZyArIChVIDw8IDIpID4+IDJdID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gZiArIDEyIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQ6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyICYgNjQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IGsxKG8gKyAxOTIgfCAwKSwgcCA9IGMgKyAociA8PCAxNyA+PiAzMSkgfCAwLCBlW28gKyAyMDggPj4gMl0gPSBlW28gKyAyMDggPj4gMl0gLSBwLCBhID0gZVtvICsgMjA0ID4+IDJdLCB2ID0gZVtvICsgMjAwID4+IDJdLCBEID0gcCAmIDMxLCAocCAmIDYzKSA+Pj4gMCA+PSAzMiA/ICh0ID0gMCwgdiA9IGEgPj4+IEQgfCAwKSA6ICh0ID0gYSA+Pj4gRCB8IDAsIHYgPSAoKDEgPDwgRCkgLSAxICYgYSkgPDwgMzIgLSBEIHwgdiA+Pj4gRCksIGVbbyArIDIwMCA+PiAyXSA9IHYsIGVbbyArIDIwNCA+PiAyXSA9IHQsIG0gPSAodSAmICgtMSA8PCBwIF4gLTEpIHwgKHIgPj4+IDEwICYgMSkgPDwgcCB8IDEpICsgMiA8PCBxIHwgdSA8PCAzMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtID0gMCwgIShFICYgNjQpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2cgPj4gMl0gPSBtOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBsICsgMiB8IDAsIEZbbCB8IDBdID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyICYgMTI4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gazEobyArIDE5MiB8IDApLCBwID0gYyArIChyIDw8IDE2ID4+IDMxKSB8IDAsIGVbbyArIDIwOCA+PiAyXSA9IGVbbyArIDIwOCA+PiAyXSAtIHAsIGEgPSBlW28gKyAyMDQgPj4gMl0sIHYgPSBlW28gKyAyMDAgPj4gMl0sIEQgPSBwICYgMzEsIChwICYgNjMpID4+PiAwID49IDMyID8gKHQgPSAwLCB2ID0gYSA+Pj4gRCB8IDApIDogKHQgPSBhID4+PiBEIHwgMCwgdiA9ICgoMSA8PCBEKSAtIDEgJiBhKSA8PCAzMiAtIEQgfCB2ID4+PiBEKSwgZVtvICsgMjAwID4+IDJdID0gdiwgZVtvICsgMjA0ID4+IDJdID0gdCwgdiA9IHUgJiAoLTEgPDwgcCBeIC0xKSB8IChyID4+PiAxMSAmIDEpIDw8IHAgfCAxLCBlW2cgKyAoVSA8PCAyKSA+PiAyXSA9IHYgKyAyIDw8IHEgfCB1IDw8IDMxLCBGW2wgfCAwXSA9IC05NiAtIE8wKHYpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEUgPj4+IDAgPCAxMjgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbZyArIChVIDw8IDIpID4+IDJdID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoWTIgPSBZMiBeIDE2LCBpID0gKEMgJiA0KSArIGkgfCAwLCBmID0gZiArIDE2IHwgMCwgISgoQiB8IDApIDwgKFUgfCAwKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQwID0gUzIgJiA4LCBoMCA9IEQyICsgMTU4NCB8IDAsIEMwID0gRDIgKyAxMDU2IHwgMCwgcjAgPSBEMiArIDUyOCB8IDAsICh6MiB8IDApID49IDMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKEgwID0gWihVLCAxMiksIHkgPSBVIDw8IDMsIGUwID0gYzIgLSAxIHwgMCwgaSA9IGMyIC0gMiB8IDAsIFAgPSAzIDw8IGksIEwyID0gMSA8PCBpLCBxID0gKFUgKyA3ID4+PiAxICYgMjE0NzQ4MzY0NCkgKyA0IHwgMCwgYyA9IDI7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQgPSBjLCB3MiA9IElbcyB8IDBdLCBGW3MgfCAwXSA9IDAsIFkyID0gWTIgJiAtMTcgXiAyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChVIHwgMCkgPD0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IGMgKyAyIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodyA9IEQgJiA0ID8gcjAgOiBEMiwgYyA9IEQgKyAyIHwgMCwgbCA9IGswICsgKFooVSwgRCkgPDwgMikgfCAwLCBIID0gMCwgZiA9IHMsIEMgPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUzIgPSBDLCBqID0gdzIgJiAyNTUsIGkgPSBJW2YgKyAxIHwgMF0gPj4+IDUgJiA0IHwgKGogPj4+IDcgfCBIKSwgZyA9IEcyWyhpIDw8IDggfCAoZ2kobyArIDIyNCB8IDApICYgMTI3KSA8PCAxKSArIDMzODQwID4+IDFdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IG4gLSAyIHwgMCwgZyA9IChpIHwgMCkgPT0gLTEgPyBnIDogMCwgKG4gfCAwKSA+IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBHZShvICsgMjU2IHwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodiA9IGVbbyArIDIzNiA+PiAyXSwgciA9IGVbbyArIDIzMiA+PiAyXSwgaSA9IGVbbyArIDI0MCA+PiAyXSwgYSA9IGVbdyA+PiAyXSB8IChnID4+PiA0ICYgMyB8IGcgPj4+IDIgJiA0OCkgPDwgWTIsIGVbdyA+PiAyXSA9IGEsIEUgPSBnICYgNjQsIG0gPSBnICYgMTI4LCBIID0gRSA+Pj4gNSB8IG0gPj4+IDYsIHUgPSBpLCBpID0gZyAmIDcsIEogPSB1IC0gaSB8IDAsIHUgPSAoKDEgPDwgaSkgLSAxICYgdikgPDwgMzIgLSBpIHwgciA+Pj4gaSwgdiA9IHYgPj4+IGkgfCAwLCBDID0gdSwgciA9IDAsIChVIHwgMCkgPiAoUzIgfCAyKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gSVtmICsgMiB8IDBdID4+PiA1ICYgNCB8IElbZiArIDEgfCAwXSA+Pj4gNyB8IEgsIHIgPSBHMlsoaSA8PCA4IHwgKHUgJiAxMjcpIDw8IDEpICsgMzM4NDAgPj4gMV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQ6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSBuIC0gMiB8IDAsIHIgPSAoaSB8IDApID09IC0xID8gciA6IDAsIChuIHwgMCkgPiAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBHZShvICsgMjU2IHwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IHIgJiA3LCBKID0gSiAtIGkgfCAwLCBIID0gKHIgPj4+IDUgfCByID4+PiA2KSAmIDIsIHUgPSAoKDEgPDwgaSkgLSAxICYgdikgPDwgMzIgLSBpIHwgdSA+Pj4gaSwgQyA9IHUsIHYgPSB2ID4+PiBpIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbdyA+PiAyXSA9IGEgfCAociA8PCAyICYgNzY4IHwgciAmIDQ4KSA8PCBZMiArIDQsIGEgPSAxLCBpID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQ6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKEIgPSByID4+PiAyICYgMiB8IGcgPj4+IDMgJiAxLCBCIHwgMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gSVsoQyAmIDcpICsgMzU5NDAgfCAwXSwgcCA9IGkgPj4+IDIgJiA3LCBhID0gQywgQyA9IGkgJiAzLCB0ID0gKCgoLTEgPDwgcCBeIC0xKSAmIGEgPj4+IEMpICsgKGkgPj4+IDUgfCAwKSB8IDApICsgMSB8IDAsIGkgPSAoQiB8IDApID09IDEsIGEgPSBpID8gMSA6IHQsIGkgPSBpID8gdCA6IDEsIEIgPSBDICsgcCB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gSVsoQyAmIDcpICsgMzU5NDAgfCAwXSwgYSA9IHggJiAzLCBpID0gQyA+Pj4gYSB8IDAsIG4yID0gSVsoaSAmIDcpICsgMzU5NDAgfCAwXSwgcCA9IG4yICYgMywgdCA9IG4yID4+PiAyICYgNywgQyA9IHggPj4+IDIgJiA3LCBCID0gdCArIChDICsgKGEgKyBwIHwgMCkgfCAwKSB8IDAsIGEgPSBpID4+PiBwIHwgMCwgaSA9ICgoYSAmICgtMSA8PCBDIF4gLTEpKSArICh4ID4+PiA1IHwgMCkgfCAwKSArIDEgfCAwLCBhID0gKCgoLTEgPDwgdCBeIC0xKSAmIGEgPj4+IEMpICsgKG4yID4+PiA1IHwgMCkgfCAwKSArIDEgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbbyArIDI0MCA+PiAyXSA9IEogLSBCLCB0ID0gQiAmIDMxLCAoQiAmIDYzKSA+Pj4gMCA+PSAzMiA/IChwID0gMCwgdiA9IHYgPj4+IHQgfCAwKSA6IChwID0gdiA+Pj4gdCB8IDAsIHYgPSAoKDEgPDwgdCkgLSAxICYgdikgPDwgMzIgLSB0IHwgdSA+Pj4gdCksIGVbbyArIDIzMiA+PiAyXSA9IHYsIGVbbyArIDIzNiA+PiAyXSA9IHAsIEMgPSBnICYgMjQwLCBDIC0gMSAmIEMgJiYgKHUgPSBpLCB2ID0gaiAmIDEyNywgaSA9IElbZiArIDEgfCAwXSAmIDEyNywgdiA9IGkgPj4+IDAgPCB2ID4+PiAwID8gdiA6IGksIGkgPSB2IC0gMiB8IDAsIGkgPSB1ICsgKGkgPj4+IDAgPD0gdiA+Pj4gMCA/IGkgOiAwKSB8IDApLCB0ID0gciAmIDI0MCwgdCAtIDEgJiB0ICYmICh1ID0gSVtmICsgMSB8IDBdICYgMTI3LCB2ID0gSVtmICsgMiB8IDBdICYgMTI3LCB2ID0gdSA+Pj4gMCA+IHYgPj4+IDAgPyB1IDogdiwgYSA9ICh2ID4+PiAwID4gMiA/IHYgLSAyIHwgMCA6IDApICsgYSB8IDApLCAhKGkgPj4+IDAgPD0gcDIgPj4+IDAgJiBhID4+PiAwIDw9IHAyID4+PiAwKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeDIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gMCwgUShmMiwgMSwgMjgyMDYsIDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IDAsIFEoZjIsIDEsIDI4MjA2LCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3MiA9IElbZiArIDIgfCAwXSwgRltmICsgMSB8IDBdID0gMCwgRltmICsgMiB8IDBdID0gMCwgdSA9IHQgfCBDID4+PiA0LCBDID0gUzIgKyA0IHwgMCwgdiA9IChDIHwgMCkgPD0gKFUgfCAwKSA/IDI1NSA6IDI1NSA+Pj4gKEMgLSBVIDw8IDEpIHwgMCwgbjIgPSAoYyB8IDApID4gKHoyIHwgMCkgPyB2ICYgODUgOiB2LCB1ICYgKG4yIF4gLTEpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4MikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSAwLCBRKGYyLCAxLCAyMzMzMSwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gMCwgUShmMiwgMSwgMjMzMzEsIDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGcgJiAxNikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IGsxKG8gKyAxOTIgfCAwKSwgQiA9IChnIDw8IDE5ID4+IDMxKSArIGkgfCAwLCBlW28gKyAyMDggPj4gMl0gPSBlW28gKyAyMDggPj4gMl0gLSBCLCB0ID0gZVtvICsgMjA0ID4+IDJdLCB2ID0gZVtvICsgMjAwID4+IDJdLCBqID0gQiAmIDMxLCAoQiAmIDYzKSA+Pj4gMCA+PSAzMiA/IChwID0gMCwgdiA9IHQgPj4+IGogfCAwKSA6IChwID0gdCA+Pj4gaiB8IDAsIHYgPSAoKDEgPDwgaikgLSAxICYgdCkgPDwgMzIgLSBqIHwgdiA+Pj4gaiksIGVbbyArIDIwMCA+PiAyXSA9IHYsIGVbbyArIDIwNCA+PiAyXSA9IHAsIEogPSAodSAmICgtMSA8PCBCIF4gLTEpIHwgKGcgPj4+IDggJiAxKSA8PCBCIHwgMSkgKyAyIDw8IGUwIHwgdSA8PCAzMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChKID0gMCwgIShuMiAmIDEpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2wgPj4gMl0gPSBKOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZyAmIDMyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IGsxKG8gKyAxOTIgfCAwKSwgQiA9IChnIDw8IDE4ID4+IDMxKSArIGkgfCAwLCBlW28gKyAyMDggPj4gMl0gPSBlW28gKyAyMDggPj4gMl0gLSBCLCB0ID0gZVtvICsgMjA0ID4+IDJdLCB2ID0gZVtvICsgMjAwID4+IDJdLCBqID0gQiAmIDMxLCAoQiAmIDYzKSA+Pj4gMCA+PSAzMiA/IChwID0gMCwgdiA9IHQgPj4+IGogfCAwKSA6IChwID0gdCA+Pj4gaiB8IDAsIHYgPSAoKDEgPDwgaikgLSAxICYgdCkgPDwgMzIgLSBqIHwgdiA+Pj4gaiksIGVbbyArIDIwMCA+PiAyXSA9IHYsIGVbbyArIDIwNCA+PiAyXSA9IHAsIHYgPSB1ICYgKC0xIDw8IEIgXiAtMSkgfCAoZyA+Pj4gOSAmIDEpIDw8IEIgfCAxLCBlWyhVIDw8IDIpICsgbCA+PiAyXSA9IHYgKyAyIDw8IGUwIHwgdSA8PCAzMSwgdSA9IDMyIC0gTzAodikgfCAwLCB2ID0gSVtmIHwgMF0gJiAxMjcsIEZbZiB8IDBdID0gKHUgPj4+IDAgPiB2ID4+PiAwID8gdSA6IHYpIHwgMTI4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobjIgJiAyKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlWyhVIDw8IDIpICsgbCA+PiAyXSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCID0gbCArIDQgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBrMShvICsgMTkyIHwgMCksIEUgPSAoZyA8PCAxNyA+PiAzMSkgKyBpIHwgMCwgZVtvICsgMjA4ID4+IDJdID0gZVtvICsgMjA4ID4+IDJdIC0gRSwgdCA9IGVbbyArIDIwNCA+PiAyXSwgdiA9IGVbbyArIDIwMCA+PiAyXSwgaiA9IEUgJiAzMSwgKEUgJiA2MykgPj4+IDAgPj0gMzIgPyAocCA9IDAsIHYgPSB0ID4+PiBqIHwgMCkgOiAocCA9IHQgPj4+IGogfCAwLCB2ID0gKCgxIDw8IGopIC0gMSAmIHQpIDw8IDMyIC0gaiB8IHYgPj4+IGopLCBlW28gKyAyMDAgPj4gMl0gPSB2LCBlW28gKyAyMDQgPj4gMl0gPSBwLCBnMiA9ICh1ICYgKC0xIDw8IEUgXiAtMSkgfCAoZyA+Pj4gMTAgJiAxKSA8PCBFIHwgMSkgKyAyIDw8IGUwIHwgdSA8PCAzMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnMiA9IDAsICEobjIgJiA0KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtCID4+IDJdID0gZzI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiA9IGsxKG8gKyAxOTIgfCAwKSwgdCA9IChnIDw8IDE2ID4+IDMxKSArIGkgfCAwLCBlW28gKyAyMDggPj4gMl0gPSBlW28gKyAyMDggPj4gMl0gLSB0LCB1ID0gZVtvICsgMjA0ID4+IDJdLCBpID0gZVtvICsgMjAwID4+IDJdLCBtID0gdCAmIDMxLCAodCAmIDYzKSA+Pj4gMCA+PSAzMiA/IChwID0gMCwgaSA9IHUgPj4+IG0gfCAwKSA6IChwID0gdSA+Pj4gbSB8IDAsIGkgPSAoKDEgPDwgbSkgLSAxICYgdSkgPDwgMzIgLSBtIHwgaSA+Pj4gbSksIGVbbyArIDIwMCA+PiAyXSA9IGksIGVbbyArIDIwNCA+PiAyXSA9IHAsIGkgPSB2ICYgKC0xIDw8IHQgXiAtMSkgfCAoZyA+Pj4gMTEgJiAxKSA8PCB0IHwgMSwgZVtCICsgKFUgPDwgMikgPj4gMl0gPSBpICsgMiA8PCBlMCB8IHYgPDwgMzEsIEZbZiArIDEgfCAwXSA9IC05NiAtIE8wKGkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobjIgJiA4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW0IgKyAoVSA8PCAyKSA+PiAyXSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gbCArIDggfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgJiAxNikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiA9IGsxKG8gKyAxOTIgfCAwKSwgZyA9IChyIDw8IDE5ID4+IDMxKSArIGEgfCAwLCBlW28gKyAyMDggPj4gMl0gPSBlW28gKyAyMDggPj4gMl0gLSBnLCB1ID0gZVtvICsgMjA0ID4+IDJdLCBpID0gZVtvICsgMjAwID4+IDJdLCBtID0gZyAmIDMxLCAoZyAmIDYzKSA+Pj4gMCA+PSAzMiA/IChwID0gMCwgaSA9IHUgPj4+IG0gfCAwKSA6IChwID0gdSA+Pj4gbSB8IDAsIGkgPSAoKDEgPDwgbSkgLSAxICYgdSkgPDwgMzIgLSBtIHwgaSA+Pj4gbSksIGVbbyArIDIwMCA+PiAyXSA9IGksIGVbbyArIDIwNCA+PiAyXSA9IHAsIGkgPSAodiAmICgtMSA8PCBnIF4gLTEpIHwgKHIgPj4+IDggJiAxKSA8PCBnIHwgMSkgKyAyIDw8IGUwIHwgdiA8PCAzMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID0gMCwgIShuMiAmIDE2KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVt0ID4+IDJdID0gaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQ6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgJiAzMikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgPSBrMShvICsgMTkyIHwgMCksIGcgPSAociA8PCAxOCA+PiAzMSkgKyBhIHwgMCwgZVtvICsgMjA4ID4+IDJdID0gZVtvICsgMjA4ID4+IDJdIC0gZywgdSA9IGVbbyArIDIwNCA+PiAyXSwgaSA9IGVbbyArIDIwMCA+PiAyXSwgbSA9IGcgJiAzMSwgKGcgJiA2MykgPj4+IDAgPj0gMzIgPyAocCA9IDAsIGkgPSB1ID4+PiBtIHwgMCkgOiAocCA9IHUgPj4+IG0gfCAwLCBpID0gKCgxIDw8IG0pIC0gMSAmIHUpIDw8IDMyIC0gbSB8IGkgPj4+IG0pLCBlW28gKyAyMDAgPj4gMl0gPSBpLCBlW28gKyAyMDQgPj4gMl0gPSBwLCBpID0gdiAmICgtMSA8PCBnIF4gLTEpIHwgKHIgPj4+IDkgJiAxKSA8PCBnIHwgMSwgZVt0ICsgKFUgPDwgMikgPj4gMl0gPSBpICsgMiA8PCBlMCB8IHYgPDwgMzEsIHYgPSAzMiAtIE8wKGkpIHwgMCwgaSA9IElbZiArIDEgfCAwXSAmIDEyNywgRltmICsgMSB8IDBdID0gKGkgPj4+IDAgPCB2ID4+PiAwID8gdiA6IGkpIHwgMTI4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobjIgJiAzMikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVt0ICsgKFUgPDwgMikgPj4gMl0gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IGwgKyAxMiB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociAmIDY0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ID0gazEobyArIDE5MiB8IDApLCBnID0gKHIgPDwgMTcgPj4gMzEpICsgYSB8IDAsIGVbbyArIDIwOCA+PiAyXSA9IGVbbyArIDIwOCA+PiAyXSAtIGcsIHUgPSBlW28gKyAyMDQgPj4gMl0sIGkgPSBlW28gKyAyMDAgPj4gMl0sIG0gPSBnICYgMzEsIChnICYgNjMpID4+PiAwID49IDMyID8gKHAgPSAwLCBpID0gdSA+Pj4gbSB8IDApIDogKHAgPSB1ID4+PiBtIHwgMCwgaSA9ICgoMSA8PCBtKSAtIDEgJiB1KSA8PCAzMiAtIG0gfCBpID4+PiBtKSwgZVtvICsgMjAwID4+IDJdID0gaSwgZVtvICsgMjA0ID4+IDJdID0gcCwgaSA9ICh2ICYgKC0xIDw8IGcgXiAtMSkgfCAociA+Pj4gMTAgJiAxKSA8PCBnIHwgMSkgKyAyIDw8IGUwIHwgdiA8PCAzMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID0gMCwgIShuMiAmIDY0KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVt0ID4+IDJdID0gaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBmICsgMiB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyICYgMTI4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiA9IGsxKG8gKyAxOTIgfCAwKSwgYSA9IChyIDw8IDE2ID4+IDMxKSArIGEgfCAwLCBlW28gKyAyMDggPj4gMl0gPSBlW28gKyAyMDggPj4gMl0gLSBhLCB1ID0gZVtvICsgMjA0ID4+IDJdLCBpID0gZVtvICsgMjAwID4+IDJdLCBnID0gYSAmIDMxLCAoYSAmIDYzKSA+Pj4gMCA+PSAzMiA/IChwID0gMCwgaSA9IHUgPj4+IGcgfCAwKSA6IChwID0gdSA+Pj4gZyB8IDAsIGkgPSAoKDEgPDwgZykgLSAxICYgdSkgPDwgMzIgLSBnIHwgaSA+Pj4gZyksIGVbbyArIDIwMCA+PiAyXSA9IGksIGVbbyArIDIwNCA+PiAyXSA9IHAsIGkgPSB2ICYgKC0xIDw8IGEgXiAtMSkgfCAociA+Pj4gMTEgJiAxKSA8PCBhIHwgMSwgZVt0ICsgKFUgPDwgMikgPj4gMl0gPSBpICsgMiA8PCBlMCB8IHYgPDwgMzEsIEZbZiB8IDBdID0gLTk2IC0gTzAoaSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobjIgPj4+IDAgPCAxMjgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVt0ICsgKFUgPDwgMikgPj4gMl0gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFkyID0gWTIgXiAxNiwgdyA9IChTMiAmIDQpICsgdyB8IDAsIGwgPSBsICsgMTYgfCAwLCAhKChDIHwgMCkgPCAoVSB8IDApKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShEICYgMikgfCBQMiA+Pj4gMCA8IDIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcgPSBjICYgNDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtMikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtID0gdyA/IEQyIDogcjAsIEIgPSAwLCAoVSB8IDApIDw9IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodiA9IGswICsgKFooVSwgRCAtIDIgfCAwKSA8PCAyKSB8IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9IGdpKG8gKyAxMjggfCAwKSwgZyA9IDAsIGwgPSBlW20gPj4gMl0sIGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChnID0gdiArIChCIDw8IDIpIHwgMCwgYSA9IDAsIGYgPSAxNTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShmICYgbCkgfHwgKHUgPSBmICYgMjg2MzMxMTUzLCB1ICYgbCAmJiAoZVtnID4+IDJdID0gTDIgfCBlW2cgPj4gMl0gXiAoKHIgXiAtMSkgJiAxKSA8PCBlMCwgciA9IHIgPj4+IDEgfCAwKSwgbCAmIHUgPDwgMSAmJiAoaSA9IChVIDw8IDIpICsgZyB8IDAsIGVbaSA+PiAyXSA9IEwyIHwgZVtpID4+IDJdIF4gKChyIF4gLTEpICYgMSkgPDwgZTAsIHIgPSByID4+PiAxIHwgMCksIGwgJiB1IDw8IDIgJiYgKGkgPSBnICsgeSB8IDAsIGVbaSA+PiAyXSA9IEwyIHwgZVtpID4+IDJdIF4gKChyIF4gLTEpICYgMSkgPDwgZTAsIHIgPSByID4+PiAxIHwgMCksICEobCAmIHUgPDwgMykpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGcgKyBIMCB8IDAsIGVbaSA+PiAyXSA9IEwyIHwgZVtpID4+IDJdIF4gKChyIF4gLTEpICYgMSkgPDwgZTAsIHIgPSByID4+PiAxIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGcgPSBnICsgNCB8IDAsIGYgPSBmIDw8IDQsIGEgPSBhICsgMSB8IDAsIChhIHwgMCkgPT0gOCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcgPSB0ZihsKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtID0gbSArIDQgfCAwLCBlW28gKyAxNDQgPj4gMl0gPSBlW28gKyAxNDQgPj4gMl0gLSBnLCBmID0gZVtvICsgMTQwID4+IDJdLCBpID0gZVtvICsgMTM2ID4+IDJdLCByID0gZyAmIDMxLCAoZyAmIDYzKSA+Pj4gMCA+PSAzMiA/IChwID0gMCwgaSA9IGYgPj4+IHIgfCAwKSA6IChwID0gZiA+Pj4gciB8IDAsIGkgPSAoKDEgPDwgcikgLSAxICYgZikgPDwgMzIgLSByIHwgaSA+Pj4gciksIGVbbyArIDEzNiA+PiAyXSA9IGksIGVbbyArIDE0MCA+PiAyXSA9IHAsIEIgPSBCICsgOCB8IDAsICEoKFUgfCAwKSA+IChCIHwgMCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEIgPSAhdywgaSA9IDAsIHIgPSAwLCBnMiA9IHcgPyBDMCA6IGgwLCBnID0gZzIsIG0gPSB3ID8gRDIgOiByMCwgZiA9IG0sIChVIHwgMCkgPD0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgdiA9IHIgPj4+IDI4IHwgMCwgciA9IGVbZiA+PiAyXSwgdiA9IHIgfCAodiB8IHIgPDwgNCB8IHIgPj4+IDQpLCBlW2cgPj4gMl0gPSB2LCB2ID0gdiB8IGVbZiArIDQgPj4gMl0gPDwgMjgsIGVbZyA+PiAyXSA9ICh2ID4+PiAxICYgMjAwNDMxODA3MSB8IHYgPDwgMSAmIC0yODYzMzExNTQgfCB2KSAmIChyIF4gLTEpLCBnID0gZyArIDQgfCAwLCBmID0gZiArIDQgfCAwLCBpID0gaSArIDggfCAwLCAoVSB8IDApID4gKGkgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgPSAhdywgZzIgPSB3ID8gQzAgOiBoMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEQgPj4+IDAgPCA2KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA9IDAsIHcgPSAwLCBnID0gbSwgSiA9IEIgPyBDMCA6IGgwLCByID0gSiwgdSA9IEIgPyBEMiA6IHIwLCBmID0gdSwgKFUgfCAwKSA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyB2ID0gZyArIDQgfCAwLCBpID0gZVtyID4+IDJdLCBsID0gZVtnID4+IDJdLCB0MCB8fCAoaSA9IGkgfCAobCB8IChsIDw8IDQgfCB3ID4+PiAyOCB8IGwgPj4+IDQgfCBlW3YgPj4gMl0gPDwgMjgpKSA8PCAzICYgLTIwMDQzMTgwNzIpLCBlW3IgPj4gMl0gPSAoZVtmID4+IDJdIF4gLTEpICYgaSwgZiA9IGYgKyA0IHwgMCwgciA9IHIgKyA0IHwgMCwgdyA9IGwsIGcgPSB2LCBhID0gYSArIDggfCAwLCAoVSB8IDApID4gKGEgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKEUgPSBrMCArIChaKFUsIEQgLSA2IHwgMCkgPDwgMikgfCAwLCB3MiA9IDAsIHcgPSB1OyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IDAsIGYgPSBlW0ogPj4gMl0sIGYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKEQgPSB3MiB8IDQsIFMyID0gVSAtIHcyIHwgMCwgciA9IDAsIEggPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiA9IHIsIHIgPSBrMShvICsgMTYwIHwgMCksIGogPSAoVSB8IDApID4gKEggKyBEIHwgMCkgPyBIICsgNCB8IDAgOiBTMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQ6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChqIHwgMCkgPD0gKEggfCAwKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh4ID0gZVt3ID4+IDJdIF4gLTEsIEIgPSAoKEggfCB3MikgPDwgMikgKyBFIHwgMCwgZyA9IDAsIGEgPSBILCBwID0gYSA8PCAyLCBDID0gMTUgPDwgcCwgaSA9IEM7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoaSAmIGYpIHx8IChuMiA9IGkgJiAyODYzMzExNTMsIG4yICYgZiAmJiAociAmIDEgJiYgKGwgPSBsIHwgbjIsIGYgPSB4ICYgNTAgPDwgKGEgPDwgMikgfCBmKSwgZyA9IGcgKyAxIHwgMCwgciA9IHIgPj4+IDEgfCAwKSwgdCA9IG4yIDw8IDEsIHQgJiBmICYmIChyICYgMSAmJiAobCA9IHQgfCBsLCBmID0geCAmIDExNiA8PCAoYSA8PCAyKSB8IGYpLCBnID0gZyArIDEgfCAwLCByID0gciA+Pj4gMSB8IDApLCB0ID0gbjIgPDwgMiwgdCAmIGYgJiYgKHIgJiAxICYmIChsID0gdCB8IGwsIGYgPSB4ICYgMjMyIDw8IChhIDw8IDIpIHwgZiksIGcgPSBnICsgMSB8IDAsIHIgPSByID4+PiAxIHwgMCksIHQgPSBuMiA8PCAzLCAhKHQgJiBmKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByICYgMSAmJiAobCA9IHQgfCBsLCBmID0geCAmIDE5MiA8PCAoYSA8PCAyKSB8IGYpLCBnID0gZyArIDEgfCAwLCByID0gciA+Pj4gMSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID0gaSA8PCA0LCBhID0gYSArIDEgfCAwLCAhKChqIHwgMCkgPiAoYSB8IDApKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGwgPj4+IHAgJiA2NTUzNSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobCAmIEMpIHx8IChhID0gQyAmIDI4NjMzMTE1MywgYSAmIGwgJiYgKGVbQiA+PiAyXSA9IFAgfCAoZVtCID4+IDJdIHwgciA8PCAzMSksIGcgPSBnICsgMSB8IDAsIHIgPSByID4+PiAxIHwgMCksIGEgPDwgMSAmIGwgJiYgKGkgPSAoVSA8PCAyKSArIEIgfCAwLCBlW2kgPj4gMl0gPSBQIHwgKGVbaSA+PiAyXSB8IHIgPDwgMzEpLCBnID0gZyArIDEgfCAwLCByID0gciA+Pj4gMSB8IDApLCBhIDw8IDIgJiBsICYmIChpID0gQiArIHkgfCAwLCBlW2kgPj4gMl0gPSBQIHwgKGVbaSA+PiAyXSB8IHIgPDwgMzEpLCBnID0gZyArIDEgfCAwLCByID0gciA+Pj4gMSB8IDApLCAhKGEgPDwgMyAmIGwpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBCICsgSDAgfCAwLCBlW2kgPj4gMl0gPSBQIHwgKGVbaSA+PiAyXSB8IHIgPDwgMzEpLCBnID0gZyArIDEgfCAwLCByID0gciA+Pj4gMSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChDID0gQyA8PCA0LCBCID0gQiArIDQgfCAwLCBIID0gSCArIDEgfCAwLCAhKChqIHwgMCkgPiAoSCB8IDApKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtvICsgMTc2ID4+IDJdID0gZVtvICsgMTc2ID4+IDJdIC0gZywgciA9IGVbbyArIDE3MiA+PiAyXSwgaSA9IGVbbyArIDE2OCA+PiAyXSwgYSA9IGcgJiAzMSwgKGcgJiA2MykgPj4+IDAgPj0gMzIgPyAocCA9IDAsIGkgPSByID4+PiBhIHwgMCkgOiAocCA9IHIgPj4+IGEgfCAwLCBpID0gKCgxIDw8IGEpIC0gMSAmIHIpIDw8IDMyIC0gYSB8IGkgPj4+IGEpLCBlW28gKyAxNjggPj4gMl0gPSBpLCBlW28gKyAxNzIgPj4gMl0gPSBwLCByID0gMSwgSCA9IDQsICEhKHYgJiAxKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbSiArIDQgPj4gMl0gPSBlW0ogKyA0ID4+IDJdIHwgKGwgPj4+IDI3ICYgMTQgfCBsID4+PiAyOSB8IGwgPj4+IDI4KSAmIChlW3cgKyA0ID4+IDJdIF4gLTEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ID0gZVt3ID4+IDJdIHwgbCwgciA9IHYgPj4+IDMgJiAyODYzMzExNTMsIGYgPSByID4+PiA0IHwgciA8PCA0IHwgciwgdzIgJiYgKGkgPSBnMiAtIDQgfCAwLCBlW2kgPj4gMl0gPSBlW2kgPj4gMl0gfCAoZVttIC0gNCA+PiAyXSBeIC0xKSAmIHIgPDwgMjgpLCBlW2cyID4+IDJdID0gZVtnMiA+PiAyXSB8IGYgJiAoZVttID4+IDJdIF4gLTEpLCBlW2cyICsgNCA+PiAyXSA9IGVbZzIgKyA0ID4+IDJdIHwgKGVbbSArIDQgPj4gMl0gXiAtMSkgJiB2ID4+PiAzMSwgSiA9IEogKyA0IHwgMCwgdyA9IHcgKyA0IHwgMCwgZzIgPSBnMiArIDQgfCAwLCBtID0gbSArIDQgfCAwLCB3MiA9IHcyICsgOCB8IDAsICEoKFUgfCAwKSA+ICh3MiB8IDApKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZDIodSwgMCwgcSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoKGMgfCAwKSA8ICh6MiB8IDApKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUDIgPj4+IDAgPCAyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9ICh6MiAmIDMpIC0gMSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtMiAmIGwgPj4+IDAgPCAyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChVIHwgMCkgPD0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChDID0gMSA8PCBjMiAtIDIsIHUgPSBrMCArIChaKFUsIHoyICYgMTY3NzcyMTIpIDw8IDIpIHwgMCwgbjIgPSB6MiAmIDQgPyByMCA6IEQyLCB2ID0gWihVLCAxMiksIG4gPSBVIDw8IDMsIHQgPSBjMiAtIDEgfCAwLCBIID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0gZ2kobyArIDEyOCB8IDApLCBnID0gMCwgcyA9IGVbbjIgPj4gMl0sIHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChnID0gdSArIChIIDw8IDIpIHwgMCwgZiA9IDE1LCBhID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShmICYgcykgfHwgKHcgPSBmICYgMjg2MzMxMTUzLCB3ICYgcyAmJiAoZVtnID4+IDJdID0gQyB8IGVbZyA+PiAyXSBeICgociBeIC0xKSAmIDEpIDw8IHQsIHIgPSByID4+PiAxIHwgMCksIHMgJiB3IDw8IDEgJiYgKGkgPSAoVSA8PCAyKSArIGcgfCAwLCBlW2kgPj4gMl0gPSBDIHwgZVtpID4+IDJdIF4gKChyIF4gLTEpICYgMSkgPDwgdCwgciA9IHIgPj4+IDEgfCAwKSwgcyAmIHcgPDwgMiAmJiAoaSA9IG4gKyBnIHwgMCwgZVtpID4+IDJdID0gQyB8IGVbaSA+PiAyXSBeICgociBeIC0xKSAmIDEpIDw8IHQsIHIgPSByID4+PiAxIHwgMCksICEocyAmIHcgPDwgMykpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGcgKyB2IHwgMCwgZVtpID4+IDJdID0gQyB8IGVbaSA+PiAyXSBeICgociBeIC0xKSAmIDEpIDw8IHQsIHIgPSByID4+PiAxIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGcgPSBnICsgNCB8IDAsIGYgPSBmIDw8IDQsIGEgPSBhICsgMSB8IDAsIChhIHwgMCkgPT0gOCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcgPSB0ZihzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuMiA9IG4yICsgNCB8IDAsIGVbbyArIDE0NCA+PiAyXSA9IGVbbyArIDE0NCA+PiAyXSAtIGcsIGYgPSBlW28gKyAxNDAgPj4gMl0sIGkgPSBlW28gKyAxMzYgPj4gMl0sIHIgPSBnICYgMzEsIChnICYgNjMpID4+PiAwID49IDMyID8gKHAgPSAwLCBpID0gZiA+Pj4gciB8IDApIDogKHAgPSBmID4+PiByIHwgMCwgaSA9ICgoMSA8PCByKSAtIDEgJiBmKSA8PCAzMiAtIHIgfCBpID4+PiByKSwgZVtvICsgMTM2ID4+IDJdID0gaSwgZVtvICsgMTQwID4+IDJdID0gcCwgSCA9IEggKyA4IHwgMCwgISgoVSB8IDApID4gKEggfCAwKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKFUgfCAwKSA8PSAwIHwgbCA+Pj4gMCA+IDEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gejIgJiA0LCBnID0gaSA/IHIwIDogRDIsIGYgPSBpID8gaDAgOiBDMCwgaSA9IDAsIHIgPSAwOyBuID0gciA+Pj4gMjggfCAwLCByID0gZVtnID4+IDJdLCBuID0gciB8IChuIHwgciA8PCA0IHwgciA+Pj4gNCksIGVbZiA+PiAyXSA9IG4sIG4gPSBuIHwgZVtnICsgNCA+PiAyXSA8PCAyOCwgZVtmID4+IDJdID0gKG4gPj4+IDEgJiAyMDA0MzE4MDcxIHwgbiA8PCAxICYgLTI4NjMzMTE1NCB8IG4pICYgKHIgXiAtMSksIGYgPSBmICsgNCB8IDAsIGcgPSBnICsgNCB8IDAsIGkgPSBpICsgOCB8IDAsIChVIHwgMCkgPiAoaSB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHcgPSAoejIgfCAwKSA+IDYgPyAoejIgLSAoejIgKyAxICYgMykgfCAwKSAtIDMgfCAwIDogMCwgKHoyIHwgMCkgPD0gKHcgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoSCA9IFooVSwgMTIpLCBjID0gVSA8PCAzLCBxID0gMyA8PCBjMiAtIDIsIG0gPSAoVSB8IDApIDw9IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSB6MiAtIHcgfCAwLCBpID0gZiAtIDEgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPj4+IDAgPj0gMykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQyA9IC0xLCAoZiB8IDApIDwgNSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IHcgJiA0LCBnID0gaSA/IHIwIDogRDIsIHIgPSBpID8gaDAgOiBDMCwgZiA9IDAsICF0MCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZiA9IGkgPyBEMiA6IHIwLCBpID0gMCwgbCA9IDA7IG4gPSBsID4+PiAyOCB8IDAsIGwgPSBlW2YgPj4gMl0sIGVbciA+PiAyXSA9IChlW3IgPj4gMl0gfCAobCB8IChuIHwgbCA8PCA0IHwgbCA+Pj4gNCB8IGVbZiArIDQgPj4gMl0gPDwgMjgpKSA8PCAzICYgLTIwMDQzMTgwNzIpICYgKGVbZyA+PiAyXSBeIC0xKSwgZyA9IGcgKyA0IHwgMCwgciA9IHIgKyA0IHwgMCwgZiA9IGYgKyA0IHwgMCwgaSA9IGkgKyA4IHwgMCwgKFUgfCAwKSA+IChpIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBlW3IgPj4gMl0gPSBlW3IgPj4gMl0gJiAoZVtnID4+IDJdIF4gLTEpLCBnID0gZyArIDQgfCAwLCByID0gciArIDQgfCAwLCBmID0gZiArIDggfCAwLCAoVSB8IDApID4gKGYgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMgPSBlWyhpIDw8IDIpICsgMzU5NDggPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3ICYgNCwgWTIgPSBpID8gcjAgOiBEMiwgdzIgPSBpID8gaDAgOiBDMCwgbiA9IGkgPyBEMiA6IHIwLCBQMiA9IGkgPyBDMCA6IGgwLCBEID0gazAgKyAoWih3LCBVKSA8PCAyKSB8IDAsIHggPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSAwLCBmID0gZVt3MiA+PiAyXSAmIEMsIGYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChtMiA9IHggfCA0LCBTMiA9IFUgLSB4IHwgMCwgciA9IDAsIHQgPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgPSByLCByID0gazEobyArIDE2MCB8IDApLCBwID0gKFUgfCAwKSA+ICh0ICsgbTIgfCAwKSA/IHQgKyA0IHwgMCA6IFMyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgocCB8IDApIDw9ICh0IHwgMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZyA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAoZVtZMiA+PiAyXSBeIC0xKSAmIEMsIEIgPSBEICsgKCh0IHwgeCkgPDwgMikgfCAwLCBnID0gMCwgYSA9IHQsIHMgPSB0IDw8IDIsIG4yID0gMTUgPDwgcywgaSA9IG4yOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoaSAmIGYpIHx8IChFID0gaSAmIDI4NjMzMTE1MywgRSAmIGYgJiYgKHIgJiAxICYmIChsID0gbCB8IEUsIGYgPSBqICYgNTAgPDwgKGEgPDwgMikgfCBmKSwgZyA9IGcgKyAxIHwgMCwgciA9IHIgPj4+IDEgfCAwKSwgdSA9IEUgPDwgMSwgdSAmIGYgJiYgKHIgJiAxICYmIChsID0gbCB8IHUsIGYgPSBqICYgMTE2IDw8IChhIDw8IDIpIHwgZiksIGcgPSBnICsgMSB8IDAsIHIgPSByID4+PiAxIHwgMCksIHUgPSBFIDw8IDIsIHUgJiBmICYmIChyICYgMSAmJiAobCA9IGwgfCB1LCBmID0gaiAmIDIzMiA8PCAoYSA8PCAyKSB8IGYpLCBnID0gZyArIDEgfCAwLCByID0gciA+Pj4gMSB8IDApLCB1ID0gRSA8PCAzLCAhKHUgJiBmKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgJiAxICYmIChsID0gbCB8IHUsIGYgPSBqICYgMTkyIDw8IChhIDw8IDIpIHwgZiksIGcgPSBnICsgMSB8IDAsIHIgPSByID4+PiAxIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IGkgPDwgNCwgYSA9IGEgKyAxIHwgMCwgISgocCB8IDApID4gKGEgfCAwKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShsID4+PiBzICYgNjU1MzUpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGc6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShsICYgbjIpIHx8ICh1ID0gbjIgJiAyODYzMzExNTMsIHUgJiBsICYmIChlW0IgPj4gMl0gPSBxIHwgKGVbQiA+PiAyXSB8IHIgPDwgMzEpLCBnID0gZyArIDEgfCAwLCByID0gciA+Pj4gMSB8IDApLCB1IDw8IDEgJiBsICYmIChpID0gKFUgPDwgMikgKyBCIHwgMCwgZVtpID4+IDJdID0gcSB8IChlW2kgPj4gMl0gfCByIDw8IDMxKSwgZyA9IGcgKyAxIHwgMCwgciA9IHIgPj4+IDEgfCAwKSwgdSA8PCAyICYgbCAmJiAoaSA9IEIgKyBjIHwgMCwgZVtpID4+IDJdID0gcSB8IChlW2kgPj4gMl0gfCByIDw8IDMxKSwgZyA9IGcgKyAxIHwgMCwgciA9IHIgPj4+IDEgfCAwKSwgISh1IDw8IDMgJiBsKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBCICsgSCB8IDAsIGVbaSA+PiAyXSA9IHEgfCAoZVtpID4+IDJdIHwgciA8PCAzMSksIGcgPSBnICsgMSB8IDAsIHIgPSByID4+PiAxIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobjIgPSBuMiA8PCA0LCBCID0gQiArIDQgfCAwLCB0ID0gdCArIDEgfCAwLCAhKChwIHwgMCkgPiAodCB8IDApKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbbyArIDE3NiA+PiAyXSA9IGVbbyArIDE3NiA+PiAyXSAtIGcsIHIgPSBlW28gKyAxNzIgPj4gMl0sIGkgPSBlW28gKyAxNjggPj4gMl0sIHUgPSBnICYgMzEsIChnICYgNjMpID4+PiAwID49IDMyID8gKHAgPSAwLCBpID0gciA+Pj4gdSB8IDApIDogKHAgPSByID4+PiB1IHwgMCwgaSA9ICgoMSA8PCB1KSAtIDEgJiByKSA8PCAzMiAtIHUgfCBpID4+PiB1KSwgZVtvICsgMTY4ID4+IDJdID0gaSwgZVtvICsgMTcyID4+IDJdID0gcCwgciA9IDEsIHQgPSA0LCAhISh2ICYgMSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW3cyICsgNCA+PiAyXSA9IGVbdzIgKyA0ID4+IDJdIHwgKGwgPj4+IDI3ICYgMTQgfCBsID4+PiAyOSB8IGwgPj4+IDI4KSAmIChlW1kyICsgNCA+PiAyXSBeIC0xKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ID0gZVtZMiA+PiAyXSB8IGwsIHIgPSB2ID4+PiAzICYgMjg2MzMxMTUzLCBmID0gciA+Pj4gNCB8IHIgPDwgNCB8IHIsIHggJiYgKGkgPSBQMiAtIDQgfCAwLCBlW2kgPj4gMl0gPSBlW2kgPj4gMl0gfCAoZVtuIC0gNCA+PiAyXSBeIC0xKSAmIHIgPDwgMjgpLCBlW1AyID4+IDJdID0gZVtQMiA+PiAyXSB8IGYgJiAoZVtuID4+IDJdIF4gLTEpLCBlW1AyICsgNCA+PiAyXSA9IGVbUDIgKyA0ID4+IDJdIHwgKGVbbiArIDQgPj4gMl0gXiAtMSkgJiB2ID4+PiAzMSwgdzIgPSB3MiArIDQgfCAwLCBZMiA9IFkyICsgNCB8IDAsIFAyID0gUDIgKyA0IHwgMCwgbiA9IG4gKyA0IHwgMCwgeCA9IHggKyA4IHwgMCwgISgoVSB8IDApID4gKHggfCAwKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodyA9IHcgKyA0IHwgMCwgISgoejIgfCAwKSA+ICh3IHwgMCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9IDEsICh6MiB8IDApIDw9IDAgfCAoVSB8IDApIDw9IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodiA9IFUgJiAyMTQ3NDgzNjQ0LCB1ID0gVSAmIDMsIG4gPSBPIC0gVDAgPj4+IDAgPiA0Mjk0OTY3MjkyLCB3ID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0gazAgKyAoWih3LCBVKSA8PCAyKSB8IDAsIGcgPSAwLCAhbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGYgPSBlW3IgPj4gMl0sIGkgPSBmICYgMjE0NzQ4MzY0NywgZVtyID4+IDJdID0gKGYgfCAwKSA8IDAgPyAwIC0gaSB8IDAgOiBpLCBmID0gZVtyICsgNCA+PiAyXSwgaSA9IGYgJiAyMTQ3NDgzNjQ3LCBlW3IgKyA0ID4+IDJdID0gKGYgfCAwKSA8IDAgPyAwIC0gaSB8IDAgOiBpLCBmID0gZVtyICsgOCA+PiAyXSwgaSA9IGYgJiAyMTQ3NDgzNjQ3LCBlW3IgKyA4ID4+IDJdID0gKGYgfCAwKSA8IDAgPyAwIC0gaSB8IDAgOiBpLCBmID0gZVtyICsgMTIgPj4gMl0sIGkgPSBmICYgMjE0NzQ4MzY0NywgZVtyICsgMTIgPj4gMl0gPSAoZiB8IDApIDwgMCA/IDAgLSBpIHwgMCA6IGksIHIgPSByICsgMTYgfCAwLCBnID0gZyArIDQgfCAwLCAodiB8IDApICE9IChnIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZyA9IDAsIHUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBmID0gZVtyID4+IDJdLCBpID0gZiAmIDIxNDc0ODM2NDcsIGVbciA+PiAyXSA9IChmIHwgMCkgPCAwID8gMCAtIGkgfCAwIDogaSwgciA9IHIgKyA0IHwgMCwgZyA9IGcgKyAxIHwgMCwgKHUgfCAwKSAhPSAoZyB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSAxLCB3ID0gdyArIDEgfCAwLCAoejIgfCAwKSA9PSAodyB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXgyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbbyArIDUyID4+IDJdID0gZVt6ICsgMjQgPj4gMl0sIGVbbyArIDQ4ID4+IDJdID0gRSwgUShmMiwgMSwgMjAxNzAsIG8gKyA0OCB8IDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtvICsgMjAgPj4gMl0gPSBnLCBlW28gKyAxNiA+PiAyXSA9IEUsIFEoZjIsIDEsIDIwMTcwLCBvICsgMTYgfCAwKSwgciA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICByID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoWCA9IG8gKyAzMDQgfCAwLCByKQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtrICsgMTA4ID4+IDJdID0gKGkgPDwgOSkgKyAzNzQ3MiwgIXg0KGssIGVbeiArIDE2ID4+IDJdIC0gZVt6ICsgOCA+PiAyXSB8IDAsIGVbeiArIDIwID4+IDJdIC0gZVt6ICsgMTIgPj4gMl0gfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgIGlmIChwMiA9IGYgKyBlW3ogKyAyOCA+PiAyXSB8IDAsIChwMiB8IDApID49IDMxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgheDIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgZVtYMiArIDE2ID4+IDJdID0gcDIsIFEoZjIsIDIsIDE5MDAxLCBYMiArIDE2IHwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBzcihrKSwgaSA9IDAsIGVbayArIDEwMCA+PiAyXSA9IDM3NDQwLCBlW2sgKyA5NiA+PiAyXSA9IDM2MDY0LCBlW2sgKyAyOCA+PiAyXSA9IDM2MDk2OwogICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICBBOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgbDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGVbeiArIDUyID4+IDJdLCBsID4+PiAwID4gMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWVbayArIDE0NCA+PiAyXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG8gPSBlW3ogKyA0ID4+IDJdLCBsIC0gMSA+Pj4gMCA+PSAzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGYgPSBsICYgLTQ7IG4gPSBvICsgKEIgPDwgMykgfCAwLCBpID0gZVtuICsgMjggPj4gMl0gKyAoZVtuICsgMjAgPj4gMl0gKyAoZVtuICsgMTIgPj4gMl0gKyAoZVtuICsgNCA+PiAyXSArIGkgfCAwKSB8IDApIHwgMCkgfCAwLCBCID0gQiArIDQgfCAwLCByID0gciArIDQgfCAwLCAoZiB8IDApICE9IChyIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZiA9IGwgJiAzLCAhZikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobiA9IDA7IGkgPSBlWyhvICsgKEIgPDwgMykgfCAwKSArIDQgPj4gMl0gKyBpIHwgMCwgQiA9IEIgKyAxIHwgMCwgbiA9IG4gKyAxIHwgMCwgKGYgfCAwKSAhPSAobiB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPSBpICsgMiB8IDAsIG4gPj4+IDAgPiBkW2sgKyAxNTIgPj4gMl0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmID0gbzAoZVtrICsgMTQ4ID4+IDJdLCBuKSwgIWYpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNDggPj4gMl0gPSBmLCBpID0gaSArIGYgfCAwLCBGW2kgfCAwXSA9IDAsIEZbaSArIDEgfCAwXSA9IDAsIGVbayArIDE1MiA+PiAyXSA9IG4sIGwgPSBlW3ogKyA1MiA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFQwID0gZVtrICsgMTQ4ID4+IDJdLCAhbCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChuID0gZVt6ICsgNCA+PiAyXSwgQiA9IDAsIGkgPSAwOyBvID0gaSA8PCAzLCBmID0gbyArIG4gfCAwLCBGMihCICsgVDAgfCAwLCBlW2YgPj4gMl0sIGVbZiArIDQgPj4gMl0pLCBuID0gZVt6ICsgNCA+PiAyXSwgQiA9IGVbKG8gKyBuIHwgMCkgKyA0ID4+IDJdICsgQiB8IDAsIGkgPSBpICsgMSB8IDAsIGkgPj4+IDAgPCBkW3ogKyA1MiA+PiAyXTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChsIHwgMCkgIT0gMSkKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICBUMCA9IGVbZVt6ICsgNCA+PiAyXSA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlmIChpID0gZVt6ICsgNjAgPj4gMl0sIGkgJiYgKGswID0gZVtrICsgMTE2ID4+IDJdLCBlW2sgKyAxMTYgPj4gMl0gPSBpKSwgZVt6ICsgNDQgPj4gMl0pCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoRCA9IFMyICYgMiwgeCA9IFMyICYgOCwgTDIgPSBrICsgMjggfCAwLCBtMiA9ICEoUzIgJiAxKSwgWTIgPSAyOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgIG8gPSBuMiArIFQwIHwgMCwgdDAgPSBlW3ogPj4gMl0gKyBaKHEsIDI0KSB8IDAsIGYgPSBlW3QwID4+IDJdLCBIMCA9IG0yIHwgKChlW3ogKyAyOCA+PiAyXSAtIDQgfCAwKSA8IChwMiB8IDApIHwgWTIgPj4+IDAgPiAxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUgwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDIwID4+IDJdID0gbywgaSA9IGYgKyBvIHwgMCwgZVtrICsgMjQgPj4gMl0gPSBpLCB1MltrICsgMTEyID4+IDFdID0gSVtpIHwgMF0gfCBJW2kgKyAxIHwgMF0gPDwgOCwgRltpIHwgMF0gPSAyNTUsIEZbZVtrICsgMjQgPj4gMl0gKyAxIHwgMF0gPSAyNTUsIGVbayArIDggPj4gMl0gPSAwLCBlW2sgPj4gMl0gPSAwLCBlW2sgKyAxNiA+PiAyXSA9IG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAyMCA+PiAyXSA9IG8sIGkgPSBmICsgbyB8IDAsIGVbayArIDI0ID4+IDJdID0gaSwgdTJbayArIDExMiA+PiAxXSA9IElbaSB8IDBdIHwgSVtpICsgMSB8IDBdIDw8IDgsIEZbaSB8IDBdID0gMjU1LCBGW2VbayArIDI0ID4+IDJdICsgMSB8IDBdID0gMjU1LCBlW2sgKyAxMDQgPj4gMl0gPSBrICsgMjgsIGVbayArIDE2ID4+IDJdID0gbywgZVtrICsgMTIgPj4gMl0gPSAwLCBmID0gZiA/IElbbyB8IDBdIDw8IDE2IDogMTY3MTE2ODAsIGVbayA+PiAyXSA9IGYsIGggPSAxLCBpID0gbyArIDEgfCAwLCBuID0gSVtvICsgMSB8IDBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgQTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSVtvIHwgMF0gPT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPj4+IDAgPj0gMTQ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IDEsIGkgPSBmIHwgNjUyODA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGksIGggPSAwLCBpID0gZiArIChuIDw8IDkpIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgaSA9IGYgfCBuIDw8IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyA4ID4+IDJdID0gaCwgZVtrICsgNCA+PiAyXSA9IDMyNzY4LCBlW2sgPj4gMl0gPSBpIDw8IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSBlW3QwID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgIGY6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZVt0MCArIDggPj4gMl0gfCAocDIgfCAwKSA8PSAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMCwgUDIgPSBIMCAmIChEIHwgMCkgIT0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGw6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoWTIgLSAxIHwgMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUgwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID0gMSA8PCBwMiwgQyA9IGkgPj4+IDEgfCBpLCB0ID0gZVtrICsgMTI0ID4+IDJdLCByID0gdCA8PCAyLCBpID0gKHIgKyBlW2sgKyAxMjAgPj4gMl0gfCAwKSArIDEyIHwgMCwgbiA9IGVbayArIDExNiA+PiAyXSwgZyA9IDAsIGYgPSBlW2sgKyAxMjggPj4gMl0sIGYgPj4+IDAgPj0gNCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChhID0gWih0LCAxMiksIHYgPSB0IDw8IDMsIGwgPSAwIC0gQyB8IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGYgPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvID0gaSwgaSA9IGVbaSA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoIShpICYgNDk1KSB8IGkgJiAyMDk3MTY4KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVbayA+PiAyXSwgaCA9IGVbayArIDggPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSAoaSB8IDApID09IDI1NSwgdSA9IGVbayArIDE2ID4+IDJdLCBpID0gSVt1IHwgMF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayA+PiAyXSA9IGksIGVbayArIDE2ID4+IDJdID0gdSArIDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA+Pj4gMCA8PSAxNDMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayA+PiAyXSA9IGksIGVbayArIDE2ID4+IDJdID0gdSArIDEsIGggPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDI1NSwgZVtrID4+IDJdID0gMjU1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaCA9IGggLSAxIHwgMCwgZVtrICsgOCA+PiAyXSA9IGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGkgPj4+IGggJiAxKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSAoaSB8IDApID09IDI1NSwgdSA9IGVbayArIDE2ID4+IDJdLCBpID0gSVt1IHwgMF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayA+PiAyXSA9IGksIGVbayArIDE2ID4+IDJdID0gdSArIDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA+Pj4gMCA8PSAxNDMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrID4+IDJdID0gaSwgZVtrICsgMTYgPj4gMl0gPSB1ICsgMSwgaCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gMjU1LCBlW2sgPj4gMl0gPSAyNTU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoID0gaCAtIDEgfCAwLCBlW2sgKyA4ID4+IDJdID0gaCwgdSA9IGkgPj4+IGggJiAxLCBlW24gPj4gMl0gPSB1ID8gbCA6IEMsIGggPSBlW2sgKyAxMjQgPj4gMl0sIGkgPSBvIC0gNCB8IDAsIGVbaSA+PiAyXSA9IGVbaSA+PiAyXSB8IDMyLCBlW28gKyA0ID4+IDJdID0gZVtvICsgNCA+PiAyXSB8IDgsIGVbbyA+PiAyXSA9IGVbbyA+PiAyXSB8IHUgPDwgMTkgfCAxNiwgeCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gbyArICgtMiAtIGggPDwgMikgfCAwLCBlW2kgKyA0ID4+IDJdID0gZVtpICsgNCA+PiAyXSB8IDMyNzY4LCBlW2kgPj4gMl0gPSBlW2kgPj4gMl0gfCB1IDw8IDMxIHwgNjU1MzYsIGkgPSBpIC0gNCB8IDAsIGVbaSA+PiAyXSA9IGVbaSA+PiAyXSB8IDEzMTA3MjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlW28gPj4gMl0gfCAyMDk3MTUyLCBlW28gPj4gMl0gPSBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISghKGkgJiAzOTYwKSB8IGkgJiAxNjc3NzM0NCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlW2sgPj4gMl0sIGggPSBlW2sgKyA4ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoID0gKGkgfCAwKSA9PSAyNTUsIHUgPSBlW2sgKyAxNiA+PiAyXSwgaSA9IElbdSB8IDBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgPj4gMl0gPSBpLCBlW2sgKyAxNiA+PiAyXSA9IHUgKyAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPj4+IDAgPD0gMTQzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgPj4gMl0gPSBpLCBlW2sgKyAxNiA+PiAyXSA9IHUgKyAxLCBoID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAyNTUsIGVbayA+PiAyXSA9IDI1NTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoID0gaCAtIDEgfCAwLCBlW2sgKyA4ID4+IDJdID0gaCwgaSA+Pj4gaCAmIDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoID0gKGkgfCAwKSA9PSAyNTUsIHUgPSBlW2sgKyAxNiA+PiAyXSwgaSA9IElbdSB8IDBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgPj4gMl0gPSBpLCBlW2sgKyAxNiA+PiAyXSA9IHUgKyAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPj4+IDAgPD0gMTQzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayA+PiAyXSA9IGksIGVbayArIDE2ID4+IDJdID0gdSArIDEsIGggPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDI1NSwgZVtrID4+IDJdID0gMjU1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoID0gaCAtIDEgfCAwLCBlW2sgKyA4ID4+IDJdID0gaCwgaCA9IGkgPj4+IGggJiAxLCBlW3IgKyBuID4+IDJdID0gaCA/IGwgOiBDLCBpID0gbyAtIDQgfCAwLCBlW2kgPj4gMl0gPSBlW2kgPj4gMl0gfCAyNTYsIGVbbyArIDQgPj4gMl0gPSBlW28gKyA0ID4+IDJdIHwgNjQsIGkgPSBlW28gPj4gMl0gfCBoIDw8IDIyIHwgMTI4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlW28gPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gaSB8IDE2Nzc3MjE2LCBlW28gPj4gMl0gPSBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISghKGkgJiAzMTY4MCkgfCBpICYgMTM0MjE4NzUyKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVbayA+PiAyXSwgaCA9IGVbayArIDggPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSAoaSB8IDApID09IDI1NSwgdSA9IGVbayArIDE2ID4+IDJdLCBpID0gSVt1IHwgMF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayA+PiAyXSA9IGksIGVbayArIDE2ID4+IDJdID0gdSArIDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA+Pj4gMCA8PSAxNDMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayA+PiAyXSA9IGksIGVbayArIDE2ID4+IDJdID0gdSArIDEsIGggPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDI1NSwgZVtrID4+IDJdID0gMjU1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGggPSBoIC0gMSB8IDAsIGVbayArIDggPj4gMl0gPSBoLCBpID4+PiBoICYgMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSAoaSB8IDApID09IDI1NSwgdSA9IGVbayArIDE2ID4+IDJdLCBpID0gSVt1IHwgMF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayA+PiAyXSA9IGksIGVbayArIDE2ID4+IDJdID0gdSArIDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA+Pj4gMCA8PSAxNDMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrID4+IDJdID0gaSwgZVtrICsgMTYgPj4gMl0gPSB1ICsgMSwgaCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gMjU1LCBlW2sgPj4gMl0gPSAyNTU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSBoIC0gMSB8IDAsIGVbayArIDggPj4gMl0gPSBoLCBoID0gaSA+Pj4gaCAmIDEsIGVbbiArIHYgPj4gMl0gPSBoID8gbCA6IEMsIGkgPSBvIC0gNCB8IDAsIGVbaSA+PiAyXSA9IGVbaSA+PiAyXSB8IDIwNDgsIGVbbyArIDQgPj4gMl0gPSBlW28gKyA0ID4+IDJdIHwgNTEyLCBpID0gZVtvID4+IDJdIHwgaCA8PCAyNSB8IDEwMjQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVbbyA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBpIHwgMTM0MjE3NzI4LCBlW28gPj4gMl0gPSBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShpICYgMjUzNDQwKSB8IGkgJiAxMDczNzUwMDE2KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gZVtrID4+IDJdLCBoID0gZVtrICsgOCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSAoaSB8IDApID09IDI1NSwgdSA9IGVbayArIDE2ID4+IDJdLCBpID0gSVt1IHwgMF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayA+PiAyXSA9IGksIGVbayArIDE2ID4+IDJdID0gdSArIDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA+Pj4gMCA8PSAxNDMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgPj4gMl0gPSBpLCBlW2sgKyAxNiA+PiAyXSA9IHUgKyAxLCBoID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAyNTUsIGVbayA+PiAyXSA9IDI1NTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaCA9IGggLSAxIHwgMCwgZVtrICsgOCA+PiAyXSA9IGgsIGkgPj4+IGggJiAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSAoaSB8IDApID09IDI1NSwgdSA9IGVbayArIDE2ID4+IDJdLCBpID0gSVt1IHwgMF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayA+PiAyXSA9IGksIGVbayArIDE2ID4+IDJdID0gdSArIDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA+Pj4gMCA8PSAxNDMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayA+PiAyXSA9IGksIGVbayArIDE2ID4+IDJdID0gdSArIDEsIGggPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDI1NSwgZVtrID4+IDJdID0gMjU1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaCA9IGggLSAxIHwgMCwgZVtrICsgOCA+PiAyXSA9IGgsIHUgPSBpID4+PiBoICYgMSwgZVtuICsgYSA+PiAyXSA9IHUgPyBsIDogQywgaCA9IGVbayArIDEyNCA+PiAyXSwgaSA9IG8gLSA0IHwgMCwgZVtpID4+IDJdID0gZVtpID4+IDJdIHwgMTYzODQsIGVbbyArIDQgPj4gMl0gPSBlW28gKyA0ID4+IDJdIHwgNDA5NiwgZVtvID4+IDJdID0gZVtvID4+IDJdIHwgdSA8PCAyOCB8IDgxOTIsIGkgPSBvICsgKGggPDwgMikgfCAwLCBlW2kgKyA0ID4+IDJdID0gZVtpICsgNCA+PiAyXSB8IDQsIGVbaSArIDEyID4+IDJdID0gZVtpICsgMTIgPj4gMl0gfCAxLCBlW2kgKyA4ID4+IDJdID0gZVtpICsgOCA+PiAyXSB8IHUgPDwgMTggfCAyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW28gPj4gMl0gPSBlW28gPj4gMl0gfCAxMDczNzQxODI0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID0gbiArIDQgfCAwLCBpID0gbyArIDQgfCAwLCBmID0gZiArIDEgfCAwLCAodCB8IDApID09IChmIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9IG4gKyBhIHwgMCwgaSA9IG8gKyAxMiB8IDAsIGcgPSBnICsgNCB8IDAsIGYgPSBlW2sgKyAxMjggPj4gMl0sICEoZyA+Pj4gMCA8IChmICYgLTQpID4+PiAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdCB8IGYgPj4+IDAgPD0gZyA+Pj4gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKG0gPSAwLCB2ID0gMCAtIEMgfCAwLCBoID0gZjsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGcgfCAwKSA9PSAoaCB8IDApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1ID0gaSAtIDQgfCAwLCBsID0gZVtpID4+IDJdLCBCID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHcgPSBaKEIsIDMpLCBvID0gbCA+Pj4gdyB8IDAsICEobyAmIDIwOTcxNjggfCAhKG8gJiA0OTUpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBlW2sgPj4gMl0sIGEgPSBlW2sgKyA4ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQ6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyA9IChmIHwgMCkgIT0gMjU1LCBoID0gZVtrICsgMTYgPj4gMl0sIGYgPSBJW2ggfCAwXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGYgPj4+IDAgPj0gMTQ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gMjU1LCBlW2sgPj4gMl0gPSAyNTU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgPj4gMl0gPSBmLCBlW2sgKyAxNiA+PiAyXSA9IGggKyAxLCBhID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayA+PiAyXSA9IGYsIGVbayArIDE2ID4+IDJdID0gaCArIDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IGEgLSAxIHwgMCwgZVtrICsgOCA+PiAyXSA9IGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoZiA+Pj4gYSAmIDEpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaCA9IChaKHQsIEIpIDw8IDIpICsgbiB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gPSAoZiB8IDApICE9IDI1NSwgciA9IGVbayArIDE2ID4+IDJdLCBmID0gSVtyIHwgMF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGc6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW8pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmID4+PiAwID49IDE0NCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gMjU1LCBlW2sgPj4gMl0gPSAyNTU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgPj4gMl0gPSBmLCBlW2sgKyAxNiA+PiAyXSA9IHIgKyAxLCBhID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayA+PiAyXSA9IGYsIGVbayArIDE2ID4+IDJdID0gciArIDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobyA9IGEgLSAxIHwgMCwgZVtrICsgOCA+PiAyXSA9IG8sIGEgPSBoLCBoID0gZiA+Pj4gbyAmIDEsIGVbYSA+PiAyXSA9IGggPyB2IDogQywgbyA9IGVbayArIDEyNCA+PiAyXSwgZVt1ID4+IDJdID0gZVt1ID4+IDJdIHwgMzIgPDwgdywgZVtpID4+IDJdID0gZVtpID4+IDJdIHwgKGggPDwgMTkgfCAxNikgPDwgdywgZVtpICsgNCA+PiAyXSA9IGVbaSArIDQgPj4gMl0gfCA4IDw8IHcsIEIgfCB4IHx8IChmID0gKC0yIC0gbyA8PCAyKSArIGkgfCAwLCBlW2YgKyA0ID4+IDJdID0gZVtmICsgNCA+PiAyXSB8IDMyNzY4LCBlW2YgPj4gMl0gPSBlW2YgPj4gMl0gfCBoIDw8IDMxIHwgNjU1MzYsIGYgPSBmIC0gNCB8IDAsIGVbZiA+PiAyXSA9IGVbZiA+PiAyXSB8IDEzMTA3MiksIChCIHwgMCkgIT0gMykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSAobyA8PCAyKSArIGkgfCAwLCBlW2YgKyA0ID4+IDJdID0gZVtmICsgNCA+PiAyXSB8IDQsIGVbZiArIDEyID4+IDJdID0gZVtmICsgMTIgPj4gMl0gfCAxLCBlW2YgKyA4ID4+IDJdID0gZVtmICsgOCA+PiAyXSB8IGggPDwgMTggfCAyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gZVtpID4+IDJdIHwgMjA5NzE1MiA8PCB3LCBlW2kgPj4gMl0gPSBsLCBmID0gZVtrICsgMTI4ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoID0gZiwgQiA9IEIgKyAxIHwgMCwgIShCID4+PiAwIDwgZiAtIGcgPj4+IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9IG4gKyA0IHwgMCwgaSA9IGkgKyA0IHwgMCwgbSA9IG0gKyAxIHwgMCwgKHQgfCAwKSA9PSAobSB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSAwLCBDID0gMCwgbSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQ6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUCA9IGVbayArIDEyNCA+PiAyXSwgISgoUCB8IDApICE9IDY0IHwgZVtrICsgMTI4ID4+IDJdICE9IDY0KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IDEgPDwgcDIsIGggPSBpID4+PiAxIHwgaSwgbyA9IDAgLSBoIHwgMCwgSCA9IGsgKyAyOCB8IDAsIG4gPSBlW2sgKyAxMjAgPj4gMl0gKyAyNjggfCAwLCBsID0gZVtrICsgOCA+PiAyXSwgZiA9IGVbayArIDQgPj4gMl0sIGEgPSBlW2sgPj4gMl0sIGcgPSBlW2sgKyAxMDQgPj4gMl0sIGkgPSBlW2sgKyAxMTYgPj4gMl0sIFMyICYgOCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKG0gPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYgPSBpLCByID0gbiwgbiA9IGVbciA+PiAyXSwgbikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gJiAyMDk3MTY4IHx8IChpID0gbiAmIDQ5NSwgIWkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gSCArIChJW2kgKyBlW2sgKyAxMDggPj4gMl0gfCAwXSA8PCAyKSB8IDAsIHQgPSBlW2cgPj4gMl0sIGkgPSBlW3QgPj4gMl0sIGYgPSBmIC0gaSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEgPj4+IDE2ID4+PiAwIDwgaSA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHcgPSBlW3QgKyA0ID4+IDJdLCB1ID0gaSA+Pj4gMCA+IGYgPj4+IDAsIGVbZyA+PiAyXSA9IGVbdCArICh1ID8gOCA6IDEyKSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gZVtrICsgMTYgPj4gMl0sIGYgPSBsICsgMSB8IDAsIHQgPSBJW2wgKyAxIHwgMF0sIElbbCB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA+Pj4gMCA+PSAxNDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgYSA9IGEgKyA2NTI4MCB8IDAsIGwgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBmLCBhID0gKHQgPDwgOSkgKyBhIHwgMCwgbCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGYsIGwgPSA4LCBhID0gKHQgPDwgOCkgKyBhIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBsIC0gMSB8IDAsIGEgPSBhIDw8IDEsIGkgPSBpIDw8IDEsICEoaSA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBpLCBpID0gdSA/IHcgOiAhdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhID0gYSAtIChpIDw8IDE2KSB8IDAsICEoZiAmIDMyNzY4KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHcgPSBlW3QgKyA0ID4+IDJdLCBpID0gaSA+Pj4gMCA+IGYgPj4+IDAsIGVbZyA+PiAyXSA9IGVbdCArIChpID8gMTIgOiA4KSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gZVtrICsgMTYgPj4gMl0sIHUgPSBsICsgMSB8IDAsIHQgPSBJW2wgKyAxIHwgMF0sIElbbCB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA+Pj4gMCA+PSAxNDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgYSA9IGEgKyA2NTI4MCB8IDAsIGwgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSB1LCBhID0gKHQgPDwgOSkgKyBhIHwgMCwgbCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IHUsIGwgPSA4LCBhID0gKHQgPDwgOCkgKyBhIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBsIC0gMSB8IDAsIGEgPSBhIDw8IDEsIGYgPSBmIDw8IDEsICEoZiA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBpID8gIXcgOiB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVbdCArIDQgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzID0gciAtIDQgfCAwLCB1ID0gZVtyICsgNCA+PiAyXSA+Pj4gMTcgJiA0IHwgKGVbcyA+PiAyXSA+Pj4gMTkgJiAxIHwgKG4gPj4+IDE0ICYgMTYgfCAobiA+Pj4gMTYgJiA2NCB8IG4gJiAxNzApKSksIGcgPSBIICsgKElbdSArIDM5NTIwIHwgMF0gPDwgMikgfCAwLCBjID0gZVtnID4+IDJdLCBpID0gZVtjID4+IDJdLCBmID0gZiAtIGkgfCAwLCB3ID0gSVt1ICsgMzk3NzYgfCAwXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGg6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEgPj4+IDE2ID4+PiAwIDwgaSA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodCA9IGVbYyArIDQgPj4gMl0sIHUgPSBpID4+PiAwID4gZiA+Pj4gMCwgZVtnID4+IDJdID0gZVtjICsgKHUgPyA4IDogMTIpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGVbayArIDE2ID4+IDJdLCBmID0gbCArIDEgfCAwLCBjID0gSVtsICsgMSB8IDBdLCBJW2wgfCAwXSA9PSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA+Pj4gMCA+PSAxNDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCBhID0gYSArIDY1MjgwIHwgMCwgbCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGYsIGEgPSAoYyA8PCA5KSArIGEgfCAwLCBsID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gZiwgbCA9IDgsIGEgPSAoYyA8PCA4KSArIGEgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBsIC0gMSB8IDAsIGEgPSBhIDw8IDEsIGkgPSBpIDw8IDEsICEoaSA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBpLCB1ID0gdSA/IHQgOiAhdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhID0gYSAtIChpIDw8IDE2KSB8IDAsICEoZiAmIDMyNzY4KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodCA9IGVbYyArIDQgPj4gMl0sIGkgPSBpID4+PiAwID4gZiA+Pj4gMCwgZVtnID4+IDJdID0gZVtjICsgKGkgPyAxMiA6IDgpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGVbayArIDE2ID4+IDJdLCB1ID0gbCArIDEgfCAwLCBjID0gSVtsICsgMSB8IDBdLCBJW2wgfCAwXSA9PSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA+Pj4gMCA+PSAxNDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCBhID0gYSArIDY1MjgwIHwgMCwgbCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IHUsIGEgPSAoYyA8PCA5KSArIGEgfCAwLCBsID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gdSwgbCA9IDgsIGEgPSAoYyA8PCA4KSArIGEgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBsIC0gMSB8IDAsIGEgPSBhIDw8IDEsIGYgPSBmIDw8IDEsICEoZiA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBpID8gIXQgOiB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IGVbYyArIDQgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW3YgPj4gMl0gPSAodyB8IDApID09ICh1IHwgMCkgPyBoIDogbywgZVtzID4+IDJdID0gZVtzID4+IDJdIHwgMzIsIGVbciArIDQgPj4gMl0gPSBlW3IgKyA0ID4+IDJdIHwgOCwgaSA9IHIgLSAyNjggfCAwLCBlW2kgPj4gMl0gPSBlW2kgPj4gMl0gfCAxMzEwNzIsIGkgPSByIC0gMjYwIHwgMCwgZVtpID4+IDJdID0gZVtpID4+IDJdIHwgMzI3NjgsIGkgPSByIC0gMjY0IHwgMCwgSiA9IGksIHQgPSBlW2kgPj4gMl0sIGkgPSB1IF4gdywgZVtKID4+IDJdID0gdCB8IGkgPDwgMzEgfCA2NTUzNiwgbiA9IGkgPDwgMTkgfCBuIHwgMTY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBuIHwgMjA5NzE1MjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISghKG4gJiAzOTYwKSB8IG4gJiAxNjc3NzM0NCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ID0gbiA+Pj4gMyB8IDAsIGcgPSBIICsgKElbZVtrICsgMTA4ID4+IDJdICsgKHcgJiA0OTUpIHwgMF0gPDwgMikgfCAwLCBzID0gZVtnID4+IDJdLCBpID0gZVtzID4+IDJdLCBmID0gZiAtIGkgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGc6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhID4+PiAxNiA+Pj4gMCA8IGkgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh0ID0gZVtzICsgNCA+PiAyXSwgdSA9IGkgPj4+IDAgPiBmID4+PiAwLCBlW2cgPj4gMl0gPSBlW3MgKyAodSA/IDggOiAxMikgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGVbayArIDE2ID4+IDJdLCBmID0gbCArIDEgfCAwLCBzID0gSVtsICsgMSB8IDBdLCBJW2wgfCAwXSA9PSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPj4+IDAgPj0gMTQ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIGEgPSBhICsgNjUyODAgfCAwLCBsID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gZiwgYSA9IChzIDw8IDkpICsgYSB8IDAsIGwgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBmLCBsID0gOCwgYSA9IChzIDw8IDgpICsgYSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gbCAtIDEgfCAwLCBhID0gYSA8PCAxLCBpID0gaSA8PCAxLCAhKGkgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gaSwgaSA9IHUgPyB0IDogIXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA9IGEgLSAoaSA8PCAxNikgfCAwLCAhKGYgJiAzMjc2OCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh0ID0gZVtzICsgNCA+PiAyXSwgaSA9IGkgPj4+IDAgPiBmID4+PiAwLCBlW2cgPj4gMl0gPSBlW3MgKyAoaSA/IDEyIDogOCkgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGVbayArIDE2ID4+IDJdLCB1ID0gbCArIDEgfCAwLCBzID0gSVtsICsgMSB8IDBdLCBJW2wgfCAwXSA9PSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPj4+IDAgPj0gMTQ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIGEgPSBhICsgNjUyODAgfCAwLCBsID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gdSwgYSA9IChzIDw8IDkpICsgYSB8IDAsIGwgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSB1LCBsID0gOCwgYSA9IChzIDw8IDgpICsgYSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gbCAtIDEgfCAwLCBhID0gYSA8PCAxLCBmID0gZiA8PCAxLCAhKGYgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gaSA/ICF0IDogdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlW3MgKyA0ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9IHIgLSA0IHwgMCwgdSA9IGVbciArIDQgPj4gMl0gPj4+IDIwICYgNCB8IChlW3MgPj4gMl0gPj4+IDIyICYgMSB8IChuID4+PiAxNSAmIDE2IHwgKG4gPj4+IDE5ICYgNjQgfCB3ICYgMTcwKSkpLCBnID0gSCArIChJW3UgKyAzOTUyMCB8IDBdIDw8IDIpIHwgMCwgYyA9IGVbZyA+PiAyXSwgaSA9IGVbYyA+PiAyXSwgZiA9IGYgLSBpIHwgMCwgdyA9IElbdSArIDM5Nzc2IHwgMF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhID4+PiAxNiA+Pj4gMCA8IGkgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHQgPSBlW2MgKyA0ID4+IDJdLCB1ID0gaSA+Pj4gMCA+IGYgPj4+IDAsIGVbZyA+PiAyXSA9IGVbYyArICh1ID8gOCA6IDEyKSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGg6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBlW2sgKyAxNiA+PiAyXSwgZiA9IGwgKyAxIHwgMCwgYyA9IElbbCArIDEgfCAwXSwgSVtsIHwgMF0gPT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPj4+IDAgPj0gMTQ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgYSA9IGEgKyA2NTI4MCB8IDAsIGwgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBmLCBhID0gKGMgPDwgOSkgKyBhIHwgMCwgbCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGYsIGwgPSA4LCBhID0gKGMgPDwgOCkgKyBhIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gbCAtIDEgfCAwLCBhID0gYSA8PCAxLCBpID0gaSA8PCAxLCAhKGkgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gaSwgaSA9IHUgPyB0IDogIXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA9IGEgLSAoaSA8PCAxNikgfCAwLCAhKGYgJiAzMjc2OCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHQgPSBlW2MgKyA0ID4+IDJdLCBpID0gaSA+Pj4gMCA+IGYgPj4+IDAsIGVbZyA+PiAyXSA9IGVbYyArIChpID8gMTIgOiA4KSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGg6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBlW2sgKyAxNiA+PiAyXSwgdSA9IGwgKyAxIHwgMCwgYyA9IElbbCArIDEgfCAwXSwgSVtsIHwgMF0gPT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPj4+IDAgPj0gMTQ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgYSA9IGEgKyA2NTI4MCB8IDAsIGwgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSB1LCBhID0gKGMgPDwgOSkgKyBhIHwgMCwgbCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IHUsIGwgPSA4LCBhID0gKGMgPDwgOCkgKyBhIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gbCAtIDEgfCAwLCBhID0gYSA8PCAxLCBmID0gZiA8PCAxLCAhKGYgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gaSA/ICF0IDogdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlW2MgKyA0ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVt2ICsgMjU2ID4+IDJdID0gKHcgfCAwKSA9PSAoaSB8IDApID8gaCA6IG8sIGVbcyA+PiAyXSA9IGVbcyA+PiAyXSB8IDI1NiwgZVtyICsgNCA+PiAyXSA9IGVbciArIDQgPj4gMl0gfCA2NCwgbiA9IChpIF4gdykgPDwgMjIgfCBuIHwgMTI4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gbiB8IDE2Nzc3MjE2OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKCEobiAmIDMxNjgwKSB8IG4gJiAxMzQyMTg3NTIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdyA9IG4gPj4+IDYgfCAwLCBnID0gSCArIChJW2VbayArIDEwOCA+PiAyXSArICh3ICYgNDk1KSB8IDBdIDw8IDIpIHwgMCwgcyA9IGVbZyA+PiAyXSwgaSA9IGVbcyA+PiAyXSwgZiA9IGYgLSBpIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA+Pj4gMTYgPj4+IDAgPCBpID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodCA9IGVbcyArIDQgPj4gMl0sIHUgPSBpID4+PiAwID4gZiA+Pj4gMCwgZVtnID4+IDJdID0gZVtzICsgKHUgPyA4IDogMTIpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGg6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBlW2sgKyAxNiA+PiAyXSwgZiA9IGwgKyAxIHwgMCwgcyA9IElbbCArIDEgfCAwXSwgSVtsIHwgMF0gPT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzID4+PiAwID49IDE0NCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCBhID0gYSArIDY1MjgwIHwgMCwgbCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGYsIGEgPSAocyA8PCA5KSArIGEgfCAwLCBsID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gZiwgbCA9IDgsIGEgPSAocyA8PCA4KSArIGEgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGwgLSAxIHwgMCwgYSA9IGEgPDwgMSwgaSA9IGkgPDwgMSwgIShpID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IGksIGkgPSB1ID8gdCA6ICF0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEgPSBhIC0gKGkgPDwgMTYpIHwgMCwgIShmICYgMzI3NjgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodCA9IGVbcyArIDQgPj4gMl0sIGkgPSBpID4+PiAwID4gZiA+Pj4gMCwgZVtnID4+IDJdID0gZVtzICsgKGkgPyAxMiA6IDgpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGg6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBlW2sgKyAxNiA+PiAyXSwgdSA9IGwgKyAxIHwgMCwgcyA9IElbbCArIDEgfCAwXSwgSVtsIHwgMF0gPT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzID4+PiAwID49IDE0NCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCBhID0gYSArIDY1MjgwIHwgMCwgbCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IHUsIGEgPSAocyA8PCA5KSArIGEgfCAwLCBsID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gdSwgbCA9IDgsIGEgPSAocyA8PCA4KSArIGEgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGwgLSAxIHwgMCwgYSA9IGEgPDwgMSwgZiA9IGYgPDwgMSwgIShmID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGkgPyAhdCA6IHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gZVtzICsgNCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSByIC0gNCB8IDAsIHUgPSBlW3IgKyA0ID4+IDJdID4+PiAyMyAmIDQgfCAoZVtzID4+IDJdID4+PiAyNSAmIDEgfCAobiA+Pj4gMTggJiAxNiB8IChuID4+PiAyMiAmIDY0IHwgdyAmIDE3MCkpKSwgZyA9IEggKyAoSVt1ICsgMzk1MjAgfCAwXSA8PCAyKSB8IDAsIGMgPSBlW2cgPj4gMl0sIGkgPSBlW2MgPj4gMl0sIGYgPSBmIC0gaSB8IDAsIHcgPSBJW3UgKyAzOTc3NiB8IDBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA+Pj4gMTYgPj4+IDAgPCBpID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh0ID0gZVtjICsgNCA+PiAyXSwgdSA9IGkgPj4+IDAgPiBmID4+PiAwLCBlW2cgPj4gMl0gPSBlW2MgKyAodSA/IDggOiAxMikgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gZVtrICsgMTYgPj4gMl0sIGYgPSBsICsgMSB8IDAsIGMgPSBJW2wgKyAxIHwgMF0sIElbbCB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID4+PiAwID49IDE0NCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIGEgPSBhICsgNjUyODAgfCAwLCBsID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gZiwgYSA9IChjIDw8IDkpICsgYSB8IDAsIGwgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBmLCBsID0gOCwgYSA9IChjIDw8IDgpICsgYSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGwgLSAxIHwgMCwgYSA9IGEgPDwgMSwgaSA9IGkgPDwgMSwgIShpID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IGksIGkgPSB1ID8gdCA6ICF0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEgPSBhIC0gKGkgPDwgMTYpIHwgMCwgIShmICYgMzI3NjgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh0ID0gZVtjICsgNCA+PiAyXSwgaSA9IGkgPj4+IDAgPiBmID4+PiAwLCBlW2cgPj4gMl0gPSBlW2MgKyAoaSA/IDEyIDogOCkgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gZVtrICsgMTYgPj4gMl0sIHUgPSBsICsgMSB8IDAsIGMgPSBJW2wgKyAxIHwgMF0sIElbbCB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID4+PiAwID49IDE0NCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIGEgPSBhICsgNjUyODAgfCAwLCBsID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gdSwgYSA9IChjIDw8IDkpICsgYSB8IDAsIGwgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSB1LCBsID0gOCwgYSA9IChjIDw8IDgpICsgYSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGwgLSAxIHwgMCwgYSA9IGEgPDwgMSwgZiA9IGYgPDwgMSwgIShmID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGkgPyAhdCA6IHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gZVtjICsgNCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbdiArIDUxMiA+PiAyXSA9ICh3IHwgMCkgPT0gKGkgfCAwKSA/IGggOiBvLCBlW3MgPj4gMl0gPSBlW3MgPj4gMl0gfCAyMDQ4LCBlW3IgKyA0ID4+IDJdID0gZVtyICsgNCA+PiAyXSB8IDUxMiwgbiA9IChpIF4gdykgPDwgMjUgfCBuIHwgMTAyNDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG4gfCAxMzQyMTc3Mjg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoIShuICYgMjUzNDQwKSB8IG4gJiAxMDczNzUwMDE2KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcgPSBuID4+PiA5IHwgMCwgZyA9IEggKyAoSVtlW2sgKyAxMDggPj4gMl0gKyAodyAmIDQ5NSkgfCAwXSA8PCAyKSB8IDAsIHMgPSBlW2cgPj4gMl0sIGkgPSBlW3MgPj4gMl0sIGYgPSBmIC0gaSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEgPj4+IDE2ID4+PiAwIDwgaSA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHQgPSBlW3MgKyA0ID4+IDJdLCB1ID0gaSA+Pj4gMCA+IGYgPj4+IDAsIGVbZyA+PiAyXSA9IGVbcyArICh1ID8gOCA6IDEyKSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gZVtrICsgMTYgPj4gMl0sIGYgPSBsICsgMSB8IDAsIHMgPSBJW2wgKyAxIHwgMF0sIElbbCB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocyA+Pj4gMCA+PSAxNDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgYSA9IGEgKyA2NTI4MCB8IDAsIGwgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBmLCBhID0gKHMgPDwgOSkgKyBhIHwgMCwgbCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGYsIGwgPSA4LCBhID0gKHMgPDwgOCkgKyBhIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBsIC0gMSB8IDAsIGEgPSBhIDw8IDEsIGkgPSBpIDw8IDEsICEoaSA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBpLCBpID0gdSA/IHQgOiAhdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhID0gYSAtIChpIDw8IDE2KSB8IDAsICEoZiAmIDMyNzY4KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHQgPSBlW3MgKyA0ID4+IDJdLCBpID0gaSA+Pj4gMCA+IGYgPj4+IDAsIGVbZyA+PiAyXSA9IGVbcyArIChpID8gMTIgOiA4KSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gZVtrICsgMTYgPj4gMl0sIHUgPSBsICsgMSB8IDAsIHMgPSBJW2wgKyAxIHwgMF0sIElbbCB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocyA+Pj4gMCA+PSAxNDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgYSA9IGEgKyA2NTI4MCB8IDAsIGwgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSB1LCBhID0gKHMgPDwgOSkgKyBhIHwgMCwgbCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IHUsIGwgPSA4LCBhID0gKHMgPDwgOCkgKyBhIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBsIC0gMSB8IDAsIGEgPSBhIDw8IDEsIGYgPSBmIDw8IDEsICEoZiA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBpID8gIXQgOiB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVbcyArIDQgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzID0gciAtIDQgfCAwLCB1ID0gZVtyICsgNCA+PiAyXSA+Pj4gMjYgJiA0IHwgKGVbcyA+PiAyXSA+Pj4gMjggJiAxIHwgKG4gPj4+IDIxICYgMTYgfCAobiA+Pj4gMjUgJiA2NCB8IHcgJiAxNzApKSksIGcgPSBIICsgKElbdSArIDM5NTIwIHwgMF0gPDwgMikgfCAwLCBjID0gZVtnID4+IDJdLCBpID0gZVtjID4+IDJdLCBmID0gZiAtIGkgfCAwLCB3ID0gSVt1ICsgMzk3NzYgfCAwXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGc6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEgPj4+IDE2ID4+PiAwIDwgaSA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodCA9IGVbYyArIDQgPj4gMl0sIHUgPSBpID4+PiAwID4gZiA+Pj4gMCwgZVtnID4+IDJdID0gZVtjICsgKHUgPyA4IDogMTIpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGVbayArIDE2ID4+IDJdLCBmID0gbCArIDEgfCAwLCBjID0gSVtsICsgMSB8IDBdLCBJW2wgfCAwXSA9PSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA+Pj4gMCA+PSAxNDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCBhID0gYSArIDY1MjgwIHwgMCwgbCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGYsIGEgPSAoYyA8PCA5KSArIGEgfCAwLCBsID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gZiwgbCA9IDgsIGEgPSAoYyA8PCA4KSArIGEgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBsIC0gMSB8IDAsIGEgPSBhIDw8IDEsIGkgPSBpIDw8IDEsICEoaSA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBpLCBpID0gdSA/IHQgOiAhdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhID0gYSAtIChpIDw8IDE2KSB8IDAsICEoZiAmIDMyNzY4KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodCA9IGVbYyArIDQgPj4gMl0sIGkgPSBpID4+PiAwID4gZiA+Pj4gMCwgZVtnID4+IDJdID0gZVtjICsgKGkgPyAxMiA6IDgpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGVbayArIDE2ID4+IDJdLCB1ID0gbCArIDEgfCAwLCBjID0gSVtsICsgMSB8IDBdLCBJW2wgfCAwXSA9PSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA+Pj4gMCA+PSAxNDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCBhID0gYSArIDY1MjgwIHwgMCwgbCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IHUsIGEgPSAoYyA8PCA5KSArIGEgfCAwLCBsID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gdSwgbCA9IDgsIGEgPSAoYyA8PCA4KSArIGEgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBsIC0gMSB8IDAsIGEgPSBhIDw8IDEsIGYgPSBmIDw8IDEsICEoZiA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBpID8gIXQgOiB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVbYyArIDQgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW3YgKyA3NjggPj4gMl0gPSAodyB8IDApID09IChpIHwgMCkgPyBoIDogbywgZVtzID4+IDJdID0gZVtzID4+IDJdIHwgMTYzODQsIGVbciArIDQgPj4gMl0gPSBlW3IgKyA0ID4+IDJdIHwgNDA5NiwgZVtyICsgMjYwID4+IDJdID0gZVtyICsgMjYwID4+IDJdIHwgNCwgZVtyICsgMjY4ID4+IDJdID0gZVtyICsgMjY4ID4+IDJdIHwgMSwgaSA9IGkgXiB3LCBlW3IgKyAyNjQgPj4gMl0gPSBlW3IgKyAyNjQgPj4gMl0gfCBpIDw8IDE4IHwgMiwgbiA9IGkgPDwgMjggfCBuIHwgODE5MjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG4gfCAxMDczNzQxODI0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbciA+PiAyXSA9IG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9IHIgKyA0IHwgMCwgaSA9IHYgKyA0IHwgMCwgbSA9IG0gKyAxIHwgMCwgKG0gfCAwKSA9PSA2NCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID0gciArIDEyIHwgMCwgaSA9IHYgKyA3NzIgfCAwLCB2ID0gQyA+Pj4gMCA8IDYwLCBDID0gQyArIDQgfCAwLCAhdikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gMSA8PCBwMiwgbyA9IGkgPj4+IDEgfCBpLCB2ID0gZVtrICsgMTIwID4+IDJdLCBuID0gKHYgKyAoUCA8PCAyKSB8IDApICsgMTIgfCAwLCBpID0gZVtrICsgMTI4ID4+IDJdLCBsID0gZVtrICsgOCA+PiAyXSwgZiA9IGVbayArIDQgPj4gMl0sIGEgPSBlW2sgPj4gMl0sIGcgPSBlW2sgKyAxMDQgPj4gMl0sIHcgPSBlW2sgKyAxMTYgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTMiAmIDgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA+Pj4gMCA8IDQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKEUgPSBaKFAsIDEyKSwgcyA9IFAgPDwgMywgdiA9IDAgLSBvIHwgMCwgTyA9IGsgKyAyOCB8IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChIID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0gbiwgbiA9IGVbciA+PiAyXSwgbikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gJiAyMDk3MTY4IHx8IChpID0gbiAmIDQ5NSwgIWkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gTyArIChJW2kgKyBlW2sgKyAxMDggPj4gMl0gfCAwXSA8PCAyKSB8IDAsIEMgPSBlW2cgPj4gMl0sIGkgPSBlW0MgPj4gMl0sIGYgPSBmIC0gaSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEgPj4+IDE2ID4+PiAwID49IGkgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEgPSBhIC0gKGkgPDwgMTYpIHwgMCwgdSA9IGVbQyArIDQgPj4gMl0sIGYgJiAzMjc2OCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHQgPSBlW0MgKyA0ID4+IDJdLCBpID0gaSA+Pj4gMCA+IGYgPj4+IDAsIGVbZyA+PiAyXSA9IGVbQyArIChpID8gMTIgOiA4KSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gZVtrICsgMTYgPj4gMl0sIHUgPSBsICsgMSB8IDAsIEMgPSBJW2wgKyAxIHwgMF0sIElbbCB8IDBdICE9IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IHUsIGwgPSA4LCBhID0gKEMgPDwgOCkgKyBhIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChDID4+PiAwIDw9IDE0MykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IHUsIGEgPSAoQyA8PCA5KSArIGEgfCAwLCBsID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCBhID0gYSArIDY1MjgwIHwgMCwgbCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gbCAtIDEgfCAwLCBhID0gYSA8PCAxLCBmID0gZiA8PCAxLCAhKGYgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gaSA/ICF0IDogdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodCA9IGVbQyArIDQgPj4gMl0sIHUgPSBpID4+PiAwID4gZiA+Pj4gMCwgZVtnID4+IDJdID0gZVtDICsgKHUgPyA4IDogMTIpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gZVtrICsgMTYgPj4gMl0sIGYgPSBsICsgMSB8IDAsIEMgPSBJW2wgKyAxIHwgMF0sIElbbCB8IDBdICE9IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBmLCBsID0gOCwgYSA9IChDIDw8IDgpICsgYSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQyA+Pj4gMCA8PSAxNDMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gZiwgYSA9IChDIDw8IDkpICsgYSB8IDAsIGwgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIGEgPSBhICsgNjUyODAgfCAwLCBsID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGwgLSAxIHwgMCwgYSA9IGEgPDwgMSwgaSA9IGkgPDwgMSwgIShpID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IGksIHUgPSB1ID8gdCA6ICF0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IHIgLSA0IHwgMCwgdSA9IGVbciArIDQgPj4gMl0gPj4+IDE3ICYgNCB8IChlW2MgPj4gMl0gPj4+IDE5ICYgMSB8IChuID4+PiAxNCAmIDE2IHwgKG4gPj4+IDE2ICYgNjQgfCBuICYgMTcwKSkpLCBnID0gTyArIChJW3UgKyAzOTUyMCB8IDBdIDw8IDIpIHwgMCwgQiA9IGVbZyA+PiAyXSwgaSA9IGVbQiA+PiAyXSwgZiA9IGYgLSBpIHwgMCwgdCA9IElbdSArIDM5Nzc2IHwgMF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhID4+PiAxNiA+Pj4gMCA+PSBpID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEgPSBhIC0gKGkgPDwgMTYpIHwgMCwgdSA9IGVbQiArIDQgPj4gMl0sIGYgJiAzMjc2OCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChDID0gZVtCICsgNCA+PiAyXSwgaSA9IGkgPj4+IDAgPiBmID4+PiAwLCBlW2cgPj4gMl0gPSBlW0IgKyAoaSA/IDEyIDogOCkgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gZVtrICsgMTYgPj4gMl0sIHUgPSBsICsgMSB8IDAsIEIgPSBJW2wgKyAxIHwgMF0sIElbbCB8IDBdICE9IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gdSwgbCA9IDgsIGEgPSAoQiA8PCA4KSArIGEgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEIgPj4+IDAgPD0gMTQzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSB1LCBhID0gKEIgPDwgOSkgKyBhIHwgMCwgbCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgYSA9IGEgKyA2NTI4MCB8IDAsIGwgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBsIC0gMSB8IDAsIGEgPSBhIDw8IDEsIGYgPSBmIDw8IDEsICEoZiA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBpID8gIUMgOiBDOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChDID0gZVtCICsgNCA+PiAyXSwgdSA9IGkgPj4+IDAgPiBmID4+PiAwLCBlW2cgPj4gMl0gPSBlW0IgKyAodSA/IDggOiAxMikgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGVbayArIDE2ID4+IDJdLCBmID0gbCArIDEgfCAwLCBCID0gSVtsICsgMSB8IDBdLCBJW2wgfCAwXSAhPSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBmLCBsID0gOCwgYSA9IChCIDw8IDgpICsgYSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQiA+Pj4gMCA8PSAxNDMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBmLCBhID0gKEIgPDwgOSkgKyBhIHwgMCwgbCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgYSA9IGEgKyA2NTI4MCB8IDAsIGwgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGwgLSAxIHwgMCwgYSA9IGEgPDwgMSwgaSA9IGkgPDwgMSwgIShpID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IGksIHUgPSB1ID8gQyA6ICFDOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IHUsIGVbdyA+PiAyXSA9ICh0IHwgMCkgPT0gKGkgfCAwKSA/IG8gOiB2LCBlW2MgPj4gMl0gPSBlW2MgPj4gMl0gfCAzMiwgZVtyICsgNCA+PiAyXSA9IGVbciArIDQgPj4gMl0gfCA4LCBuID0gKGkgXiB0KSA8PCAxOSB8IG4gfCAxNjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG4gfCAyMDk3MTUyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKCEobiAmIDM5NjApIHwgbiAmIDE2Nzc3MzQ0KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBuID4+PiAzIHwgMCwgZyA9IE8gKyAoSVtlW2sgKyAxMDggPj4gMl0gKyAodCAmIDQ5NSkgfCAwXSA8PCAyKSB8IDAsIGMgPSBlW2cgPj4gMl0sIGkgPSBlW2MgPj4gMl0sIGYgPSBmIC0gaSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEgPj4+IDE2ID4+PiAwID49IGkgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEgPSBhIC0gKGkgPDwgMTYpIHwgMCwgdSA9IGVbYyArIDQgPj4gMl0sIGYgJiAzMjc2OCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKEMgPSBlW2MgKyA0ID4+IDJdLCBpID0gaSA+Pj4gMCA+IGYgPj4+IDAsIGVbZyA+PiAyXSA9IGVbYyArIChpID8gMTIgOiA4KSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gZVtrICsgMTYgPj4gMl0sIHUgPSBsICsgMSB8IDAsIGMgPSBJW2wgKyAxIHwgMF0sIElbbCB8IDBdICE9IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IHUsIGwgPSA4LCBhID0gKGMgPDwgOCkgKyBhIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID4+PiAwIDw9IDE0MykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IHUsIGEgPSAoYyA8PCA5KSArIGEgfCAwLCBsID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCBhID0gYSArIDY1MjgwIHwgMCwgbCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gbCAtIDEgfCAwLCBhID0gYSA8PCAxLCBmID0gZiA8PCAxLCAhKGYgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gaSA/ICFDIDogQzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoQyA9IGVbYyArIDQgPj4gMl0sIHUgPSBpID4+PiAwID4gZiA+Pj4gMCwgZVtnID4+IDJdID0gZVtjICsgKHUgPyA4IDogMTIpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gZVtrICsgMTYgPj4gMl0sIGYgPSBsICsgMSB8IDAsIGMgPSBJW2wgKyAxIHwgMF0sIElbbCB8IDBdICE9IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBmLCBsID0gOCwgYSA9IChjIDw8IDgpICsgYSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA+Pj4gMCA8PSAxNDMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gZiwgYSA9IChjIDw8IDkpICsgYSB8IDAsIGwgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIGEgPSBhICsgNjUyODAgfCAwLCBsID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGwgLSAxIHwgMCwgYSA9IGEgPDwgMSwgaSA9IGkgPDwgMSwgIShpID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IGksIHUgPSB1ID8gQyA6ICFDOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiA9IHIgLSA0IHwgMCwgdSA9IGVbciArIDQgPj4gMl0gPj4+IDIwICYgNCB8IChlW0IgPj4gMl0gPj4+IDIyICYgMSB8IChuID4+PiAxNSAmIDE2IHwgKG4gPj4+IDE5ICYgNjQgfCB0ICYgMTcwKSkpLCBnID0gTyArIChJW3UgKyAzOTUyMCB8IDBdIDw8IDIpIHwgMCwgeSA9IGVbZyA+PiAyXSwgaSA9IGVbeSA+PiAyXSwgZiA9IGYgLSBpIHwgMCwgSiA9IChQIDw8IDIpICsgdyB8IDAsIHQgPSBJW3UgKyAzOTc3NiB8IDBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA+Pj4gMTYgPj4+IDAgPj0gaSA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhID0gYSAtIChpIDw8IDE2KSB8IDAsIHUgPSBlW3kgKyA0ID4+IDJdLCBmICYgMzI3NjgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoYyA9IGVbeSArIDQgPj4gMl0sIGkgPSBpID4+PiAwID4gZiA+Pj4gMCwgZVtnID4+IDJdID0gZVt5ICsgKGkgPyAxMiA6IDgpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGVbayArIDE2ID4+IDJdLCB1ID0gbCArIDEgfCAwLCB5ID0gSVtsICsgMSB8IDBdLCBJW2wgfCAwXSAhPSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IHUsIGwgPSA4LCBhID0gKHkgPDwgOCkgKyBhIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5ID4+PiAwIDw9IDE0MykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gdSwgYSA9ICh5IDw8IDkpICsgYSB8IDAsIGwgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIGEgPSBhICsgNjUyODAgfCAwLCBsID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gbCAtIDEgfCAwLCBhID0gYSA8PCAxLCBmID0gZiA8PCAxLCAhKGYgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gaSA/ICFjIDogYzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoYyA9IGVbeSArIDQgPj4gMl0sIHUgPSBpID4+PiAwID4gZiA+Pj4gMCwgZVtnID4+IDJdID0gZVt5ICsgKHUgPyA4IDogMTIpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG46IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBlW2sgKyAxNiA+PiAyXSwgZiA9IGwgKyAxIHwgMCwgeSA9IElbbCArIDEgfCAwXSwgSVtsIHwgMF0gIT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gZiwgbCA9IDgsIGEgPSAoeSA8PCA4KSArIGEgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHkgPj4+IDAgPD0gMTQzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gZiwgYSA9ICh5IDw8IDkpICsgYSB8IDAsIGwgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIGEgPSBhICsgNjUyODAgfCAwLCBsID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBsIC0gMSB8IDAsIGEgPSBhIDw8IDEsIGkgPSBpIDw8IDEsICEoaSA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBpLCB1ID0gdSA/IGMgOiAhYzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSB1LCBlW0ogPj4gMl0gPSAodCB8IDApID09IChpIHwgMCkgPyBvIDogdiwgZVtCID4+IDJdID0gZVtCID4+IDJdIHwgMjU2LCBlW3IgKyA0ID4+IDJdID0gZVtyICsgNCA+PiAyXSB8IDY0LCBuID0gKGkgXiB0KSA8PCAyMiB8IG4gfCAxMjg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBuIHwgMTY3NzcyMTY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoIShuICYgMzE2ODApIHwgbiAmIDEzNDIxODc1MikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gbiA+Pj4gNiB8IDAsIGcgPSBPICsgKElbZVtrICsgMTA4ID4+IDJdICsgKHQgJiA0OTUpIHwgMF0gPDwgMikgfCAwLCBjID0gZVtnID4+IDJdLCBpID0gZVtjID4+IDJdLCBmID0gZiAtIGkgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHc6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhID4+PiAxNiA+Pj4gMCA+PSBpID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhID0gYSAtIChpIDw8IDE2KSB8IDAsIHUgPSBlW2MgKyA0ID4+IDJdLCBmICYgMzI3NjgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChDID0gZVtjICsgNCA+PiAyXSwgaSA9IGkgPj4+IDAgPiBmID4+PiAwLCBlW2cgPj4gMl0gPSBlW2MgKyAoaSA/IDEyIDogOCkgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGVbayArIDE2ID4+IDJdLCB1ID0gbCArIDEgfCAwLCBjID0gSVtsICsgMSB8IDBdLCBJW2wgfCAwXSAhPSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSB1LCBsID0gOCwgYSA9IChjIDw8IDgpICsgYSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA+Pj4gMCA8PSAxNDMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSB1LCBhID0gKGMgPDwgOSkgKyBhIHwgMCwgbCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgYSA9IGEgKyA2NTI4MCB8IDAsIGwgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGwgLSAxIHwgMCwgYSA9IGEgPDwgMSwgZiA9IGYgPDwgMSwgIShmID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IGkgPyAhQyA6IEM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKEMgPSBlW2MgKyA0ID4+IDJdLCB1ID0gaSA+Pj4gMCA+IGYgPj4+IDAsIGVbZyA+PiAyXSA9IGVbYyArICh1ID8gOCA6IDEyKSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGVbayArIDE2ID4+IDJdLCBmID0gbCArIDEgfCAwLCBjID0gSVtsICsgMSB8IDBdLCBJW2wgfCAwXSAhPSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gZiwgbCA9IDgsIGEgPSAoYyA8PCA4KSArIGEgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPj4+IDAgPD0gMTQzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGYsIGEgPSAoYyA8PCA5KSArIGEgfCAwLCBsID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCBhID0gYSArIDY1MjgwIHwgMCwgbCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBsIC0gMSB8IDAsIGEgPSBhIDw8IDEsIGkgPSBpIDw8IDEsICEoaSA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBpLCB1ID0gdSA/IEMgOiAhQzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgPSByIC0gNCB8IDAsIHUgPSBlW3IgKyA0ID4+IDJdID4+PiAyMyAmIDQgfCAoZVtCID4+IDJdID4+PiAyNSAmIDEgfCAobiA+Pj4gMTggJiAxNiB8IChuID4+PiAyMiAmIDY0IHwgdCAmIDE3MCkpKSwgZyA9IE8gKyAoSVt1ICsgMzk1MjAgfCAwXSA8PCAyKSB8IDAsIHkgPSBlW2cgPj4gMl0sIGkgPSBlW3kgPj4gMl0sIGYgPSBmIC0gaSB8IDAsIEogPSBzICsgdyB8IDAsIHQgPSBJW3UgKyAzOTc3NiB8IDBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA+Pj4gMTYgPj4+IDAgPj0gaSA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhID0gYSAtIChpIDw8IDE2KSB8IDAsIHUgPSBlW3kgKyA0ID4+IDJdLCBmICYgMzI3NjgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoYyA9IGVbeSArIDQgPj4gMl0sIGkgPSBpID4+PiAwID4gZiA+Pj4gMCwgZVtnID4+IDJdID0gZVt5ICsgKGkgPyAxMiA6IDgpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGVbayArIDE2ID4+IDJdLCB1ID0gbCArIDEgfCAwLCB5ID0gSVtsICsgMSB8IDBdLCBJW2wgfCAwXSAhPSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IHUsIGwgPSA4LCBhID0gKHkgPDwgOCkgKyBhIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5ID4+PiAwIDw9IDE0MykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gdSwgYSA9ICh5IDw8IDkpICsgYSB8IDAsIGwgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIGEgPSBhICsgNjUyODAgfCAwLCBsID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gbCAtIDEgfCAwLCBhID0gYSA8PCAxLCBmID0gZiA8PCAxLCAhKGYgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gaSA/ICFjIDogYzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoYyA9IGVbeSArIDQgPj4gMl0sIHUgPSBpID4+PiAwID4gZiA+Pj4gMCwgZVtnID4+IDJdID0gZVt5ICsgKHUgPyA4IDogMTIpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG46IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBlW2sgKyAxNiA+PiAyXSwgZiA9IGwgKyAxIHwgMCwgeSA9IElbbCArIDEgfCAwXSwgSVtsIHwgMF0gIT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gZiwgbCA9IDgsIGEgPSAoeSA8PCA4KSArIGEgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHkgPj4+IDAgPD0gMTQzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gZiwgYSA9ICh5IDw8IDkpICsgYSB8IDAsIGwgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIGEgPSBhICsgNjUyODAgfCAwLCBsID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBsIC0gMSB8IDAsIGEgPSBhIDw8IDEsIGkgPSBpIDw8IDEsICEoaSA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBpLCB1ID0gdSA/IGMgOiAhYzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSB1LCBlW0ogPj4gMl0gPSAodCB8IDApID09IChpIHwgMCkgPyBvIDogdiwgZVtCID4+IDJdID0gZVtCID4+IDJdIHwgMjA0OCwgZVtyICsgNCA+PiAyXSA9IGVbciArIDQgPj4gMl0gfCA1MTIsIG4gPSAoaSBeIHQpIDw8IDI1IHwgbiB8IDEwMjQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBuIHwgMTM0MjE3NzI4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKCEobiAmIDI1MzQ0MCkgfCBuICYgMTA3Mzc1MDAxNikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gbiA+Pj4gOSB8IDAsIGcgPSBPICsgKElbZVtrICsgMTA4ID4+IDJdICsgKHQgJiA0OTUpIHwgMF0gPDwgMikgfCAwLCBjID0gZVtnID4+IDJdLCBpID0gZVtjID4+IDJdLCBmID0gZiAtIGkgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHc6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhID4+PiAxNiA+Pj4gMCA+PSBpID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhID0gYSAtIChpIDw8IDE2KSB8IDAsIHUgPSBlW2MgKyA0ID4+IDJdLCBmICYgMzI3NjgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChDID0gZVtjICsgNCA+PiAyXSwgaSA9IGkgPj4+IDAgPiBmID4+PiAwLCBlW2cgPj4gMl0gPSBlW2MgKyAoaSA/IDEyIDogOCkgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGVbayArIDE2ID4+IDJdLCB1ID0gbCArIDEgfCAwLCBjID0gSVtsICsgMSB8IDBdLCBJW2wgfCAwXSAhPSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSB1LCBsID0gOCwgYSA9IChjIDw8IDgpICsgYSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA+Pj4gMCA8PSAxNDMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSB1LCBhID0gKGMgPDwgOSkgKyBhIHwgMCwgbCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgYSA9IGEgKyA2NTI4MCB8IDAsIGwgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGwgLSAxIHwgMCwgYSA9IGEgPDwgMSwgZiA9IGYgPDwgMSwgIShmID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IGkgPyAhQyA6IEM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKEMgPSBlW2MgKyA0ID4+IDJdLCB1ID0gaSA+Pj4gMCA+IGYgPj4+IDAsIGVbZyA+PiAyXSA9IGVbYyArICh1ID8gOCA6IDEyKSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGVbayArIDE2ID4+IDJdLCBmID0gbCArIDEgfCAwLCBjID0gSVtsICsgMSB8IDBdLCBJW2wgfCAwXSAhPSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gZiwgbCA9IDgsIGEgPSAoYyA8PCA4KSArIGEgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPj4+IDAgPD0gMTQzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGYsIGEgPSAoYyA8PCA5KSArIGEgfCAwLCBsID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCBhID0gYSArIDY1MjgwIHwgMCwgbCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBsIC0gMSB8IDAsIGEgPSBhIDw8IDEsIGkgPSBpIDw8IDEsICEoaSA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBpLCB1ID0gdSA/IEMgOiAhQzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgPSByIC0gNCB8IDAsIHUgPSBlW3IgKyA0ID4+IDJdID4+PiAyNiAmIDQgfCAoZVtCID4+IDJdID4+PiAyOCAmIDEgfCAobiA+Pj4gMjEgJiAxNiB8IChuID4+PiAyNSAmIDY0IHwgdCAmIDE3MCkpKSwgZyA9IE8gKyAoSVt1ICsgMzk1MjAgfCAwXSA8PCAyKSB8IDAsIHkgPSBlW2cgPj4gMl0sIGkgPSBlW3kgPj4gMl0sIGYgPSBmIC0gaSB8IDAsIEogPSB3ICsgRSB8IDAsIHQgPSBJW3UgKyAzOTc3NiB8IDBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA+Pj4gMTYgPj4+IDAgPj0gaSA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhID0gYSAtIChpIDw8IDE2KSB8IDAsIHUgPSBlW3kgKyA0ID4+IDJdLCBmICYgMzI3NjgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoYyA9IGVbeSArIDQgPj4gMl0sIGkgPSBpID4+PiAwID4gZiA+Pj4gMCwgZVtnID4+IDJdID0gZVt5ICsgKGkgPyAxMiA6IDgpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGVbayArIDE2ID4+IDJdLCB1ID0gbCArIDEgfCAwLCB5ID0gSVtsICsgMSB8IDBdLCBJW2wgfCAwXSAhPSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IHUsIGwgPSA4LCBhID0gKHkgPDwgOCkgKyBhIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5ID4+PiAwIDw9IDE0MykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gdSwgYSA9ICh5IDw8IDkpICsgYSB8IDAsIGwgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIGEgPSBhICsgNjUyODAgfCAwLCBsID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gbCAtIDEgfCAwLCBhID0gYSA8PCAxLCBmID0gZiA8PCAxLCAhKGYgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gaSA/ICFjIDogYzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoYyA9IGVbeSArIDQgPj4gMl0sIHUgPSBpID4+PiAwID4gZiA+Pj4gMCwgZVtnID4+IDJdID0gZVt5ICsgKHUgPyA4IDogMTIpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG46IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBlW2sgKyAxNiA+PiAyXSwgZiA9IGwgKyAxIHwgMCwgeSA9IElbbCArIDEgfCAwXSwgSVtsIHwgMF0gIT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gZiwgbCA9IDgsIGEgPSAoeSA8PCA4KSArIGEgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHkgPj4+IDAgPD0gMTQzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gZiwgYSA9ICh5IDw8IDkpICsgYSB8IDAsIGwgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIGEgPSBhICsgNjUyODAgfCAwLCBsID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBsIC0gMSB8IDAsIGEgPSBhIDw8IDEsIGkgPSBpIDw8IDEsICEoaSA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBpLCB1ID0gdSA/IGMgOiAhYzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSB1LCBlW0ogPj4gMl0gPSAodCB8IDApID09IChpIHwgMCkgPyBvIDogdiwgZVtCID4+IDJdID0gZVtCID4+IDJdIHwgMTYzODQsIGVbciArIDQgPj4gMl0gPSBlW3IgKyA0ID4+IDJdIHwgNDA5NiwgdSA9IHIgKyAoZVtrICsgMTI0ID4+IDJdIDw8IDIpIHwgMCwgZVt1ICsgNCA+PiAyXSA9IGVbdSArIDQgPj4gMl0gfCA0LCBlW3UgKyAxMiA+PiAyXSA9IGVbdSArIDEyID4+IDJdIHwgMSwgaSA9IGkgXiB0LCBlW3UgKyA4ID4+IDJdID0gZVt1ICsgOCA+PiAyXSB8IGkgPDwgMTggfCAyLCBuID0gaSA8PCAyOCB8IG4gfCA4MTkyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gbiB8IDEwNzM3NDE4MjQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtyID4+IDJdID0gbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID0gciArIDQgfCAwLCB3ID0gdyArIDQgfCAwLCBIID0gSCArIDEgfCAwLCAoUCB8IDApID09IChIIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9IHIgKyAxMiB8IDAsIHcgPSB3ICsgRSB8IDAsIGggPSBoICsgNCB8IDAsIGkgPSBlW2sgKyAxMjggPj4gMl0sICEoaCA+Pj4gMCA8IChpICYgLTQpID4+PiAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gaSAmIC00LCBuID0gKG4gPj4+IDAgPD0gNCA/IDQgOiBuKSAtIDEgfCAwLCBoID0gKG4gJiAtNCkgKyA0IHwgMCwgbiA9ICh2ICsgKG4gPDwgMSAmIC04KSB8IDApICsgMjAgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtrICsgOCA+PiAyXSA9IGwsIGVbayArIDQgPj4gMl0gPSBmLCBlW2sgPj4gMl0gPSBhLCBlW2sgKyAxMDQgPj4gMl0gPSBnLCAhUCB8IGkgPj4+IDAgPD0gaCA+Pj4gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZiA9IChpIHwgMCkgPT0gKGggfCAwKSwgbCA9IDAsIGkgPSBoLCAhZikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IEg0KGssIG4sIChaKGwsIFApIDw8IDIpICsgdyB8IDAsIG8sIGwsIGVbayArIDEyNCA+PiAyXSArIDIgfCAwLCAxKSwgbCA9IGwgKyAxIHwgMCwgaSA9IGVbayArIDEyOCA+PiAyXSwgbCA+Pj4gMCA8IGkgLSBoID4+PiAwOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPSBuICsgNCB8IDAsIHcgPSB3ICsgNCB8IDAsIG0gPSBtICsgMSB8IDAsIChQIHwgMCkgPT0gKG0gfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID4+PiAwIDwgNCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoRSA9IFooUCwgMTIpLCBzID0gUCA8PCAzLCB2ID0gMCAtIG8gfCAwLCBPID0gayArIDI4IHwgMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChIID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9IG4sIG4gPSBlW3IgPj4gMl0sIG4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHc6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gJiAyMDk3MTY4IHx8IChpID0gbiAmIDQ5NSwgIWkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcgPSBPICsgKElbaSArIGVbayArIDEwOCA+PiAyXSB8IDBdIDw8IDIpIHwgMCwgQyA9IGVbZyA+PiAyXSwgaSA9IGVbQyA+PiAyXSwgZiA9IGYgLSBpIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhID4+PiAxNiA+Pj4gMCA+PSBpID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA9IGEgLSAoaSA8PCAxNikgfCAwLCB1ID0gZVtDICsgNCA+PiAyXSwgZiAmIDMyNzY4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh0ID0gZVtDICsgNCA+PiAyXSwgaSA9IGkgPj4+IDAgPiBmID4+PiAwLCBlW2cgPj4gMl0gPSBlW0MgKyAoaSA/IDEyIDogOCkgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG86IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBlW2sgKyAxNiA+PiAyXSwgdSA9IGwgKyAxIHwgMCwgQyA9IElbbCArIDEgfCAwXSwgSVtsIHwgMF0gIT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IHUsIGwgPSA4LCBhID0gKEMgPDwgOCkgKyBhIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChDID4+PiAwIDw9IDE0MykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSB1LCBhID0gKEMgPDwgOSkgKyBhIHwgMCwgbCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgYSA9IGEgKyA2NTI4MCB8IDAsIGwgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gbCAtIDEgfCAwLCBhID0gYSA8PCAxLCBmID0gZiA8PCAxLCAhKGYgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gaSA/ICF0IDogdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodCA9IGVbQyArIDQgPj4gMl0sIHUgPSBpID4+PiAwID4gZiA+Pj4gMCwgZVtnID4+IDJdID0gZVtDICsgKHUgPyA4IDogMTIpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGVbayArIDE2ID4+IDJdLCBmID0gbCArIDEgfCAwLCBDID0gSVtsICsgMSB8IDBdLCBJW2wgfCAwXSAhPSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGYsIGwgPSA4LCBhID0gKEMgPDwgOCkgKyBhIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChDID4+PiAwIDw9IDE0MykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gZiwgYSA9IChDIDw8IDkpICsgYSB8IDAsIGwgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIGEgPSBhICsgNjUyODAgfCAwLCBsID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gbCAtIDEgfCAwLCBhID0gYSA8PCAxLCBpID0gaSA8PCAxLCAhKGkgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gaSwgdSA9IHUgPyB0IDogIXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gciAtIDQgfCAwLCB1ID0gZVtyICsgNCA+PiAyXSA+Pj4gMTcgJiA0IHwgKGVbYyA+PiAyXSA+Pj4gMTkgJiAxIHwgKG4gPj4+IDE0ICYgMTYgfCAobiA+Pj4gMTYgJiA2NCB8IG4gJiAxNzApKSksIGcgPSBPICsgKElbdSArIDM5NTIwIHwgMF0gPDwgMikgfCAwLCBCID0gZVtnID4+IDJdLCBpID0gZVtCID4+IDJdLCBmID0gZiAtIGkgfCAwLCB0ID0gSVt1ICsgMzk3NzYgfCAwXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA+Pj4gMTYgPj4+IDAgPj0gaSA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA9IGEgLSAoaSA8PCAxNikgfCAwLCB1ID0gZVtCICsgNCA+PiAyXSwgZiAmIDMyNzY4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoQyA9IGVbQiArIDQgPj4gMl0sIGkgPSBpID4+PiAwID4gZiA+Pj4gMCwgZVtnID4+IDJdID0gZVtCICsgKGkgPyAxMiA6IDgpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG86IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBlW2sgKyAxNiA+PiAyXSwgdSA9IGwgKyAxIHwgMCwgQiA9IElbbCArIDEgfCAwXSwgSVtsIHwgMF0gIT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gdSwgbCA9IDgsIGEgPSAoQiA8PCA4KSArIGEgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEIgPj4+IDAgPD0gMTQzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gdSwgYSA9IChCIDw8IDkpICsgYSB8IDAsIGwgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIGEgPSBhICsgNjUyODAgfCAwLCBsID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBsIC0gMSB8IDAsIGEgPSBhIDw8IDEsIGYgPSBmIDw8IDEsICEoZiA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBpID8gIUMgOiBDOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChDID0gZVtCICsgNCA+PiAyXSwgdSA9IGkgPj4+IDAgPiBmID4+PiAwLCBlW2cgPj4gMl0gPSBlW0IgKyAodSA/IDggOiAxMikgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG86IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBlW2sgKyAxNiA+PiAyXSwgZiA9IGwgKyAxIHwgMCwgQiA9IElbbCArIDEgfCAwXSwgSVtsIHwgMF0gIT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGYsIGwgPSA4LCBhID0gKEIgPDwgOCkgKyBhIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChCID4+PiAwIDw9IDE0MykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBmLCBhID0gKEIgPDwgOSkgKyBhIHwgMCwgbCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgYSA9IGEgKyA2NTI4MCB8IDAsIGwgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gbCAtIDEgfCAwLCBhID0gYSA8PCAxLCBpID0gaSA8PCAxLCAhKGkgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gaSwgdSA9IHUgPyBDIDogIUM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbdyA+PiAyXSA9ICh0IHwgMCkgPT0gKHUgfCAwKSA/IG8gOiB2LCBlW2MgPj4gMl0gPSBlW2MgPj4gMl0gfCAzMiwgZVtyICsgNCA+PiAyXSA9IGVbciArIDQgPj4gMl0gfCA4LCBpID0gciArICgtMiAtIGVbayArIDEyNCA+PiAyXSA8PCAyKSB8IDAsIGVbaSArIDQgPj4gMl0gPSBlW2kgKyA0ID4+IDJdIHwgMzI3NjgsIHUgPSB0IF4gdSwgZVtpID4+IDJdID0gZVtpID4+IDJdIHwgdSA8PCAzMSB8IDY1NTM2LCBpID0gaSAtIDQgfCAwLCBlW2kgPj4gMl0gPSBlW2kgPj4gMl0gfCAxMzEwNzIsIG4gPSB1IDw8IDE5IHwgbiB8IDE2OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBuIHwgMjA5NzE1MjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKCEobiAmIDM5NjApIHwgbiAmIDE2Nzc3MzQ0KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gbiA+Pj4gMyB8IDAsIGcgPSBPICsgKElbZVtrICsgMTA4ID4+IDJdICsgKHQgJiA0OTUpIHwgMF0gPDwgMikgfCAwLCBjID0gZVtnID4+IDJdLCBpID0gZVtjID4+IDJdLCBmID0gZiAtIGkgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEgPj4+IDE2ID4+PiAwID49IGkgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhID0gYSAtIChpIDw8IDE2KSB8IDAsIHUgPSBlW2MgKyA0ID4+IDJdLCBmICYgMzI3NjgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKEMgPSBlW2MgKyA0ID4+IDJdLCBpID0gaSA+Pj4gMCA+IGYgPj4+IDAsIGVbZyA+PiAyXSA9IGVbYyArIChpID8gMTIgOiA4KSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGVbayArIDE2ID4+IDJdLCB1ID0gbCArIDEgfCAwLCBjID0gSVtsICsgMSB8IDBdLCBJW2wgfCAwXSAhPSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gdSwgbCA9IDgsIGEgPSAoYyA8PCA4KSArIGEgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPj4+IDAgPD0gMTQzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IHUsIGEgPSAoYyA8PCA5KSArIGEgfCAwLCBsID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCBhID0gYSArIDY1MjgwIHwgMCwgbCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBsIC0gMSB8IDAsIGEgPSBhIDw8IDEsIGYgPSBmIDw8IDEsICEoZiA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBpID8gIUMgOiBDOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChDID0gZVtjICsgNCA+PiAyXSwgdSA9IGkgPj4+IDAgPiBmID4+PiAwLCBlW2cgPj4gMl0gPSBlW2MgKyAodSA/IDggOiAxMikgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gZVtrICsgMTYgPj4gMl0sIGYgPSBsICsgMSB8IDAsIGMgPSBJW2wgKyAxIHwgMF0sIElbbCB8IDBdICE9IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gZiwgbCA9IDgsIGEgPSAoYyA8PCA4KSArIGEgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPj4+IDAgPD0gMTQzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBmLCBhID0gKGMgPDwgOSkgKyBhIHwgMCwgbCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgYSA9IGEgKyA2NTI4MCB8IDAsIGwgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBsIC0gMSB8IDAsIGEgPSBhIDw8IDEsIGkgPSBpIDw8IDEsICEoaSA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBpLCB1ID0gdSA/IEMgOiAhQzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgPSByIC0gNCB8IDAsIHUgPSBlW3IgKyA0ID4+IDJdID4+PiAyMCAmIDQgfCAoZVtCID4+IDJdID4+PiAyMiAmIDEgfCAobiA+Pj4gMTUgJiAxNiB8IChuID4+PiAxOSAmIDY0IHwgdCAmIDE3MCkpKSwgZyA9IE8gKyAoSVt1ICsgMzk1MjAgfCAwXSA8PCAyKSB8IDAsIHkgPSBlW2cgPj4gMl0sIGkgPSBlW3kgPj4gMl0sIGYgPSBmIC0gaSB8IDAsIEogPSAoUCA8PCAyKSArIHcgfCAwLCB0ID0gSVt1ICsgMzk3NzYgfCAwXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA+Pj4gMTYgPj4+IDAgPj0gaSA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA9IGEgLSAoaSA8PCAxNikgfCAwLCB1ID0gZVt5ICsgNCA+PiAyXSwgZiAmIDMyNzY4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoYyA9IGVbeSArIDQgPj4gMl0sIGkgPSBpID4+PiAwID4gZiA+Pj4gMCwgZVtnID4+IDJdID0gZVt5ICsgKGkgPyAxMiA6IDgpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG46IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBlW2sgKyAxNiA+PiAyXSwgdSA9IGwgKyAxIHwgMCwgeSA9IElbbCArIDEgfCAwXSwgSVtsIHwgMF0gIT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gdSwgbCA9IDgsIGEgPSAoeSA8PCA4KSArIGEgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHkgPj4+IDAgPD0gMTQzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gdSwgYSA9ICh5IDw8IDkpICsgYSB8IDAsIGwgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIGEgPSBhICsgNjUyODAgfCAwLCBsID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBsIC0gMSB8IDAsIGEgPSBhIDw8IDEsIGYgPSBmIDw8IDEsICEoZiA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBpID8gIWMgOiBjOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjID0gZVt5ICsgNCA+PiAyXSwgdSA9IGkgPj4+IDAgPiBmID4+PiAwLCBlW2cgPj4gMl0gPSBlW3kgKyAodSA/IDggOiAxMikgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG46IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBlW2sgKyAxNiA+PiAyXSwgZiA9IGwgKyAxIHwgMCwgeSA9IElbbCArIDEgfCAwXSwgSVtsIHwgMF0gIT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGYsIGwgPSA4LCBhID0gKHkgPDwgOCkgKyBhIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5ID4+PiAwIDw9IDE0MykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBmLCBhID0gKHkgPDwgOSkgKyBhIHwgMCwgbCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgYSA9IGEgKyA2NTI4MCB8IDAsIGwgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gbCAtIDEgfCAwLCBhID0gYSA8PCAxLCBpID0gaSA8PCAxLCAhKGkgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gaSwgdSA9IHUgPyBjIDogIWM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSB1LCBlW0ogPj4gMl0gPSAodCB8IDApID09IChpIHwgMCkgPyBvIDogdiwgZVtCID4+IDJdID0gZVtCID4+IDJdIHwgMjU2LCBlW3IgKyA0ID4+IDJdID0gZVtyICsgNCA+PiAyXSB8IDY0LCBuID0gKGkgXiB0KSA8PCAyMiB8IG4gfCAxMjg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG4gfCAxNjc3NzIxNjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKCEobiAmIDMxNjgwKSB8IG4gJiAxMzQyMTg3NTIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBuID4+PiA2IHwgMCwgZyA9IE8gKyAoSVtlW2sgKyAxMDggPj4gMl0gKyAodCAmIDQ5NSkgfCAwXSA8PCAyKSB8IDAsIGMgPSBlW2cgPj4gMl0sIGkgPSBlW2MgPj4gMl0sIGYgPSBmIC0gaSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHc6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA+Pj4gMTYgPj4+IDAgPj0gaSA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEgPSBhIC0gKGkgPDwgMTYpIHwgMCwgdSA9IGVbYyArIDQgPj4gMl0sIGYgJiAzMjc2OCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoQyA9IGVbYyArIDQgPj4gMl0sIGkgPSBpID4+PiAwID4gZiA+Pj4gMCwgZVtnID4+IDJdID0gZVtjICsgKGkgPyAxMiA6IDgpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gZVtrICsgMTYgPj4gMl0sIHUgPSBsICsgMSB8IDAsIGMgPSBJW2wgKyAxIHwgMF0sIElbbCB8IDBdICE9IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSB1LCBsID0gOCwgYSA9IChjIDw8IDgpICsgYSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA+Pj4gMCA8PSAxNDMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gdSwgYSA9IChjIDw8IDkpICsgYSB8IDAsIGwgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIGEgPSBhICsgNjUyODAgfCAwLCBsID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGwgLSAxIHwgMCwgYSA9IGEgPDwgMSwgZiA9IGYgPDwgMSwgIShmID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IGkgPyAhQyA6IEM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKEMgPSBlW2MgKyA0ID4+IDJdLCB1ID0gaSA+Pj4gMCA+IGYgPj4+IDAsIGVbZyA+PiAyXSA9IGVbYyArICh1ID8gOCA6IDEyKSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG46IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBlW2sgKyAxNiA+PiAyXSwgZiA9IGwgKyAxIHwgMCwgYyA9IElbbCArIDEgfCAwXSwgSVtsIHwgMF0gIT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBmLCBsID0gOCwgYSA9IChjIDw8IDgpICsgYSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA+Pj4gMCA8PSAxNDMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGYsIGEgPSAoYyA8PCA5KSArIGEgfCAwLCBsID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCBhID0gYSArIDY1MjgwIHwgMCwgbCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGwgLSAxIHwgMCwgYSA9IGEgPDwgMSwgaSA9IGkgPDwgMSwgIShpID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IGksIHUgPSB1ID8gQyA6ICFDOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiA9IHIgLSA0IHwgMCwgdSA9IGVbciArIDQgPj4gMl0gPj4+IDIzICYgNCB8IChlW0IgPj4gMl0gPj4+IDI1ICYgMSB8IChuID4+PiAxOCAmIDE2IHwgKG4gPj4+IDIyICYgNjQgfCB0ICYgMTcwKSkpLCBnID0gTyArIChJW3UgKyAzOTUyMCB8IDBdIDw8IDIpIHwgMCwgeSA9IGVbZyA+PiAyXSwgaSA9IGVbeSA+PiAyXSwgZiA9IGYgLSBpIHwgMCwgSiA9IHMgKyB3IHwgMCwgdCA9IElbdSArIDM5Nzc2IHwgMF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEgPj4+IDE2ID4+PiAwID49IGkgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEgPSBhIC0gKGkgPDwgMTYpIHwgMCwgdSA9IGVbeSArIDQgPj4gMl0sIGYgJiAzMjc2OCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGMgPSBlW3kgKyA0ID4+IDJdLCBpID0gaSA+Pj4gMCA+IGYgPj4+IDAsIGVbZyA+PiAyXSA9IGVbeSArIChpID8gMTIgOiA4KSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gZVtrICsgMTYgPj4gMl0sIHUgPSBsICsgMSB8IDAsIHkgPSBJW2wgKyAxIHwgMF0sIElbbCB8IDBdICE9IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IHUsIGwgPSA4LCBhID0gKHkgPDwgOCkgKyBhIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5ID4+PiAwIDw9IDE0MykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IHUsIGEgPSAoeSA8PCA5KSArIGEgfCAwLCBsID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCBhID0gYSArIDY1MjgwIHwgMCwgbCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gbCAtIDEgfCAwLCBhID0gYSA8PCAxLCBmID0gZiA8PCAxLCAhKGYgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gaSA/ICFjIDogYzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoYyA9IGVbeSArIDQgPj4gMl0sIHUgPSBpID4+PiAwID4gZiA+Pj4gMCwgZVtnID4+IDJdID0gZVt5ICsgKHUgPyA4IDogMTIpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gZVtrICsgMTYgPj4gMl0sIGYgPSBsICsgMSB8IDAsIHkgPSBJW2wgKyAxIHwgMF0sIElbbCB8IDBdICE9IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBmLCBsID0gOCwgYSA9ICh5IDw8IDgpICsgYSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeSA+Pj4gMCA8PSAxNDMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gZiwgYSA9ICh5IDw8IDkpICsgYSB8IDAsIGwgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIGEgPSBhICsgNjUyODAgfCAwLCBsID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGwgLSAxIHwgMCwgYSA9IGEgPDwgMSwgaSA9IGkgPDwgMSwgIShpID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IGksIHUgPSB1ID8gYyA6ICFjOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gdSwgZVtKID4+IDJdID0gKHQgfCAwKSA9PSAoaSB8IDApID8gbyA6IHYsIGVbQiA+PiAyXSA9IGVbQiA+PiAyXSB8IDIwNDgsIGVbciArIDQgPj4gMl0gPSBlW3IgKyA0ID4+IDJdIHwgNTEyLCBuID0gKGkgXiB0KSA8PCAyNSB8IG4gfCAxMDI0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBuIHwgMTM0MjE3NzI4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoIShuICYgMjUzNDQwKSB8IG4gJiAxMDczNzUwMDE2KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gbiA+Pj4gOSB8IDAsIGcgPSBPICsgKElbZVtrICsgMTA4ID4+IDJdICsgKHQgJiA0OTUpIHwgMF0gPDwgMikgfCAwLCBjID0gZVtnID4+IDJdLCBpID0gZVtjID4+IDJdLCBmID0gZiAtIGkgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEgPj4+IDE2ID4+PiAwID49IGkgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhID0gYSAtIChpIDw8IDE2KSB8IDAsIHUgPSBlW2MgKyA0ID4+IDJdLCBmICYgMzI3NjgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKEMgPSBlW2MgKyA0ID4+IDJdLCBpID0gaSA+Pj4gMCA+IGYgPj4+IDAsIGVbZyA+PiAyXSA9IGVbYyArIChpID8gMTIgOiA4KSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGVbayArIDE2ID4+IDJdLCB1ID0gbCArIDEgfCAwLCBjID0gSVtsICsgMSB8IDBdLCBJW2wgfCAwXSAhPSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gdSwgbCA9IDgsIGEgPSAoYyA8PCA4KSArIGEgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPj4+IDAgPD0gMTQzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IHUsIGEgPSAoYyA8PCA5KSArIGEgfCAwLCBsID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCBhID0gYSArIDY1MjgwIHwgMCwgbCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBsIC0gMSB8IDAsIGEgPSBhIDw8IDEsIGYgPSBmIDw8IDEsICEoZiA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBpID8gIUMgOiBDOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChDID0gZVtjICsgNCA+PiAyXSwgdSA9IGkgPj4+IDAgPiBmID4+PiAwLCBlW2cgPj4gMl0gPSBlW2MgKyAodSA/IDggOiAxMikgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gZVtrICsgMTYgPj4gMl0sIGYgPSBsICsgMSB8IDAsIGMgPSBJW2wgKyAxIHwgMF0sIElbbCB8IDBdICE9IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gZiwgbCA9IDgsIGEgPSAoYyA8PCA4KSArIGEgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPj4+IDAgPD0gMTQzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBmLCBhID0gKGMgPDwgOSkgKyBhIHwgMCwgbCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgYSA9IGEgKyA2NTI4MCB8IDAsIGwgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBsIC0gMSB8IDAsIGEgPSBhIDw8IDEsIGkgPSBpIDw8IDEsICEoaSA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBpLCB1ID0gdSA/IEMgOiAhQzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgPSByIC0gNCB8IDAsIHUgPSBlW3IgKyA0ID4+IDJdID4+PiAyNiAmIDQgfCAoZVtCID4+IDJdID4+PiAyOCAmIDEgfCAobiA+Pj4gMjEgJiAxNiB8IChuID4+PiAyNSAmIDY0IHwgdCAmIDE3MCkpKSwgZyA9IE8gKyAoSVt1ICsgMzk1MjAgfCAwXSA8PCAyKSB8IDAsIHkgPSBlW2cgPj4gMl0sIGkgPSBlW3kgPj4gMl0sIGYgPSBmIC0gaSB8IDAsIEogPSB3ICsgRSB8IDAsIHQgPSBJW3UgKyAzOTc3NiB8IDBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHc6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhID4+PiAxNiA+Pj4gMCA+PSBpID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhID0gYSAtIChpIDw8IDE2KSB8IDAsIHUgPSBlW3kgKyA0ID4+IDJdLCBmICYgMzI3NjgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjID0gZVt5ICsgNCA+PiAyXSwgaSA9IGkgPj4+IDAgPiBmID4+PiAwLCBlW2cgPj4gMl0gPSBlW3kgKyAoaSA/IDEyIDogOCkgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGVbayArIDE2ID4+IDJdLCB1ID0gbCArIDEgfCAwLCB5ID0gSVtsICsgMSB8IDBdLCBJW2wgfCAwXSAhPSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSB1LCBsID0gOCwgYSA9ICh5IDw8IDgpICsgYSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeSA+Pj4gMCA8PSAxNDMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSB1LCBhID0gKHkgPDwgOSkgKyBhIHwgMCwgbCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgYSA9IGEgKyA2NTI4MCB8IDAsIGwgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGwgLSAxIHwgMCwgYSA9IGEgPDwgMSwgZiA9IGYgPDwgMSwgIShmID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IGkgPyAhYyA6IGM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGMgPSBlW3kgKyA0ID4+IDJdLCB1ID0gaSA+Pj4gMCA+IGYgPj4+IDAsIGVbZyA+PiAyXSA9IGVbeSArICh1ID8gOCA6IDEyKSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGVbayArIDE2ID4+IDJdLCBmID0gbCArIDEgfCAwLCB5ID0gSVtsICsgMSB8IDBdLCBJW2wgfCAwXSAhPSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gZiwgbCA9IDgsIGEgPSAoeSA8PCA4KSArIGEgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHkgPj4+IDAgPD0gMTQzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGYsIGEgPSAoeSA8PCA5KSArIGEgfCAwLCBsID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCBhID0gYSArIDY1MjgwIHwgMCwgbCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBsIC0gMSB8IDAsIGEgPSBhIDw8IDEsIGkgPSBpIDw8IDEsICEoaSA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBpLCB1ID0gdSA/IGMgOiAhYzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IHUsIGVbSiA+PiAyXSA9ICh0IHwgMCkgPT0gKGkgfCAwKSA/IG8gOiB2LCBlW0IgPj4gMl0gPSBlW0IgPj4gMl0gfCAxNjM4NCwgZVtyICsgNCA+PiAyXSA9IGVbciArIDQgPj4gMl0gfCA0MDk2LCB1ID0gciArIChlW2sgKyAxMjQgPj4gMl0gPDwgMikgfCAwLCBlW3UgKyA0ID4+IDJdID0gZVt1ICsgNCA+PiAyXSB8IDQsIGVbdSArIDEyID4+IDJdID0gZVt1ICsgMTIgPj4gMl0gfCAxLCBpID0gaSBeIHQsIGVbdSArIDggPj4gMl0gPSBlW3UgKyA4ID4+IDJdIHwgaSA8PCAxOCB8IDIsIG4gPSBpIDw8IDI4IHwgbiB8IDgxOTI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG4gfCAxMDczNzQxODI0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtyID4+IDJdID0gbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPSByICsgNCB8IDAsIHcgPSB3ICsgNCB8IDAsIEggPSBIICsgMSB8IDAsIChQIHwgMCkgPT0gKEggfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID0gciArIDEyIHwgMCwgdyA9IHcgKyBFIHwgMCwgaCA9IGggKyA0IHwgMCwgaSA9IGVbayArIDEyOCA+PiAyXSwgIShoID4+PiAwIDwgKGkgJiAtNCkgPj4+IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IGkgJiAtNCwgbiA9IChuID4+PiAwIDw9IDQgPyA0IDogbikgLSAxIHwgMCwgaCA9IChuICYgLTQpICsgNCB8IDAsIG4gPSAodiArIChuIDw8IDEgJiAtOCkgfCAwKSArIDIwIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtrICsgOCA+PiAyXSA9IGwsIGVbayArIDQgPj4gMl0gPSBmLCBlW2sgPj4gMl0gPSBhLCBlW2sgKyAxMDQgPj4gMl0gPSBnLCAhUCB8IGkgPj4+IDAgPD0gaCA+Pj4gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZiA9IChpIHwgMCkgPT0gKGggfCAwKSwgbCA9IDAsIGkgPSBoLCAhZikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBINChrLCBuLCAoWihsLCBQKSA8PCAyKSArIHcgfCAwLCBvLCBsLCBlW2sgKyAxMjQgPj4gMl0gKyAyIHwgMCwgMCksIGwgPSBsICsgMSB8IDAsIGkgPSBlW2sgKyAxMjggPj4gMl0sIGwgPj4+IDAgPCBpIC0gaCA+Pj4gMDsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPSBuICsgNCB8IDAsIHcgPSB3ICsgNCB8IDAsIG0gPSBtICsgMSB8IDAsIChQIHwgMCkgPT0gKG0gfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobSA9IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ID0gaSwgciA9IG4sIG4gPSBlW3IgPj4gMl0sIG4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiAmIDIwOTcxNjggfHwgKGkgPSBuICYgNDk1LCAhaSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gSCArIChJW2kgKyBlW2sgKyAxMDggPj4gMl0gfCAwXSA8PCAyKSB8IDAsIHQgPSBlW2cgPj4gMl0sIGkgPSBlW3QgPj4gMl0sIGYgPSBmIC0gaSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhID4+PiAxNiA+Pj4gMCA8IGkgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHcgPSBlW3QgKyA0ID4+IDJdLCB1ID0gaSA+Pj4gMCA+IGYgPj4+IDAsIGVbZyA+PiAyXSA9IGVbdCArICh1ID8gOCA6IDEyKSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGg6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBlW2sgKyAxNiA+PiAyXSwgZiA9IGwgKyAxIHwgMCwgdCA9IElbbCArIDEgfCAwXSwgSVtsIHwgMF0gPT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPj4+IDAgPj0gMTQ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgYSA9IGEgKyA2NTI4MCB8IDAsIGwgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBmLCBhID0gKHQgPDwgOSkgKyBhIHwgMCwgbCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGYsIGwgPSA4LCBhID0gKHQgPDwgOCkgKyBhIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gbCAtIDEgfCAwLCBhID0gYSA8PCAxLCBpID0gaSA8PCAxLCAhKGkgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gaSwgaSA9IHUgPyB3IDogIXc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA9IGEgLSAoaSA8PCAxNikgfCAwLCAhKGYgJiAzMjc2OCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHcgPSBlW3QgKyA0ID4+IDJdLCBpID0gaSA+Pj4gMCA+IGYgPj4+IDAsIGVbZyA+PiAyXSA9IGVbdCArIChpID8gMTIgOiA4KSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGg6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBlW2sgKyAxNiA+PiAyXSwgdSA9IGwgKyAxIHwgMCwgdCA9IElbbCArIDEgfCAwXSwgSVtsIHwgMF0gPT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPj4+IDAgPj0gMTQ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgYSA9IGEgKyA2NTI4MCB8IDAsIGwgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSB1LCBhID0gKHQgPDwgOSkgKyBhIHwgMCwgbCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IHUsIGwgPSA4LCBhID0gKHQgPDwgOCkgKyBhIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gbCAtIDEgfCAwLCBhID0gYSA8PCAxLCBmID0gZiA8PCAxLCAhKGYgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gaSA/ICF3IDogdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlW3QgKyA0ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9IHIgLSA0IHwgMCwgdSA9IGVbciArIDQgPj4gMl0gPj4+IDE3ICYgNCB8IChlW3MgPj4gMl0gPj4+IDE5ICYgMSB8IChuID4+PiAxNCAmIDE2IHwgKG4gPj4+IDE2ICYgNjQgfCBuICYgMTcwKSkpLCBnID0gSCArIChJW3UgKyAzOTUyMCB8IDBdIDw8IDIpIHwgMCwgYyA9IGVbZyA+PiAyXSwgaSA9IGVbYyA+PiAyXSwgZiA9IGYgLSBpIHwgMCwgdyA9IElbdSArIDM5Nzc2IHwgMF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGc6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA+Pj4gMTYgPj4+IDAgPCBpID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHQgPSBlW2MgKyA0ID4+IDJdLCB1ID0gaSA+Pj4gMCA+IGYgPj4+IDAsIGVbZyA+PiAyXSA9IGVbYyArICh1ID8gOCA6IDEyKSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGVbayArIDE2ID4+IDJdLCBmID0gbCArIDEgfCAwLCBjID0gSVtsICsgMSB8IDBdLCBJW2wgfCAwXSA9PSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID4+PiAwID49IDE0NCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgYSA9IGEgKyA2NTI4MCB8IDAsIGwgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBmLCBhID0gKGMgPDwgOSkgKyBhIHwgMCwgbCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGYsIGwgPSA4LCBhID0gKGMgPDwgOCkgKyBhIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGwgLSAxIHwgMCwgYSA9IGEgPDwgMSwgaSA9IGkgPDwgMSwgIShpID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IGksIGkgPSB1ID8gdCA6ICF0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEgPSBhIC0gKGkgPDwgMTYpIHwgMCwgIShmICYgMzI3NjgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHQgPSBlW2MgKyA0ID4+IDJdLCBpID0gaSA+Pj4gMCA+IGYgPj4+IDAsIGVbZyA+PiAyXSA9IGVbYyArIChpID8gMTIgOiA4KSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGVbayArIDE2ID4+IDJdLCB1ID0gbCArIDEgfCAwLCBjID0gSVtsICsgMSB8IDBdLCBJW2wgfCAwXSA9PSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID4+PiAwID49IDE0NCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgYSA9IGEgKyA2NTI4MCB8IDAsIGwgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSB1LCBhID0gKGMgPDwgOSkgKyBhIHwgMCwgbCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IHUsIGwgPSA4LCBhID0gKGMgPDwgOCkgKyBhIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGwgLSAxIHwgMCwgYSA9IGEgPDwgMSwgZiA9IGYgPDwgMSwgIShmID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGkgPyAhdCA6IHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gZVtjICsgNCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW3YgPj4gMl0gPSAodyB8IDApID09IChpIHwgMCkgPyBoIDogbywgZVtzID4+IDJdID0gZVtzID4+IDJdIHwgMzIsIGVbciArIDQgPj4gMl0gPSBlW3IgKyA0ID4+IDJdIHwgOCwgbiA9IChpIF4gdykgPDwgMTkgfCBuIHwgMTY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gbiB8IDIwOTcxNTI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKCEobiAmIDM5NjApIHwgbiAmIDE2Nzc3MzQ0KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdyA9IG4gPj4+IDMgfCAwLCBnID0gSCArIChJW2VbayArIDEwOCA+PiAyXSArICh3ICYgNDk1KSB8IDBdIDw8IDIpIHwgMCwgcyA9IGVbZyA+PiAyXSwgaSA9IGVbcyA+PiAyXSwgZiA9IGYgLSBpIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEgPj4+IDE2ID4+PiAwIDwgaSA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodCA9IGVbcyArIDQgPj4gMl0sIHUgPSBpID4+PiAwID4gZiA+Pj4gMCwgZVtnID4+IDJdID0gZVtzICsgKHUgPyA4IDogMTIpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGVbayArIDE2ID4+IDJdLCBmID0gbCArIDEgfCAwLCBzID0gSVtsICsgMSB8IDBdLCBJW2wgfCAwXSA9PSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocyA+Pj4gMCA+PSAxNDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCBhID0gYSArIDY1MjgwIHwgMCwgbCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGYsIGEgPSAocyA8PCA5KSArIGEgfCAwLCBsID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gZiwgbCA9IDgsIGEgPSAocyA8PCA4KSArIGEgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBsIC0gMSB8IDAsIGEgPSBhIDw8IDEsIGkgPSBpIDw8IDEsICEoaSA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBpLCBpID0gdSA/IHQgOiAhdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhID0gYSAtIChpIDw8IDE2KSB8IDAsICEoZiAmIDMyNzY4KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodCA9IGVbcyArIDQgPj4gMl0sIGkgPSBpID4+PiAwID4gZiA+Pj4gMCwgZVtnID4+IDJdID0gZVtzICsgKGkgPyAxMiA6IDgpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGVbayArIDE2ID4+IDJdLCB1ID0gbCArIDEgfCAwLCBzID0gSVtsICsgMSB8IDBdLCBJW2wgfCAwXSA9PSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocyA+Pj4gMCA+PSAxNDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCBhID0gYSArIDY1MjgwIHwgMCwgbCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IHUsIGEgPSAocyA8PCA5KSArIGEgfCAwLCBsID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gdSwgbCA9IDgsIGEgPSAocyA8PCA4KSArIGEgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBsIC0gMSB8IDAsIGEgPSBhIDw8IDEsIGYgPSBmIDw8IDEsICEoZiA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBpID8gIXQgOiB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVbcyArIDQgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzID0gciAtIDQgfCAwLCB1ID0gZVtyICsgNCA+PiAyXSA+Pj4gMjAgJiA0IHwgKGVbcyA+PiAyXSA+Pj4gMjIgJiAxIHwgKG4gPj4+IDE1ICYgMTYgfCAobiA+Pj4gMTkgJiA2NCB8IHcgJiAxNzApKSksIGcgPSBIICsgKElbdSArIDM5NTIwIHwgMF0gPDwgMikgfCAwLCBjID0gZVtnID4+IDJdLCBpID0gZVtjID4+IDJdLCBmID0gZiAtIGkgfCAwLCB3ID0gSVt1ICsgMzk3NzYgfCAwXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhID4+PiAxNiA+Pj4gMCA8IGkgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodCA9IGVbYyArIDQgPj4gMl0sIHUgPSBpID4+PiAwID4gZiA+Pj4gMCwgZVtnID4+IDJdID0gZVtjICsgKHUgPyA4IDogMTIpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gZVtrICsgMTYgPj4gMl0sIGYgPSBsICsgMSB8IDAsIGMgPSBJW2wgKyAxIHwgMF0sIElbbCB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPj4+IDAgPj0gMTQ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCBhID0gYSArIDY1MjgwIHwgMCwgbCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGYsIGEgPSAoYyA8PCA5KSArIGEgfCAwLCBsID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gZiwgbCA9IDgsIGEgPSAoYyA8PCA4KSArIGEgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gbCAtIDEgfCAwLCBhID0gYSA8PCAxLCBpID0gaSA8PCAxLCAhKGkgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gaSwgaSA9IHUgPyB0IDogIXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA9IGEgLSAoaSA8PCAxNikgfCAwLCAhKGYgJiAzMjc2OCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodCA9IGVbYyArIDQgPj4gMl0sIGkgPSBpID4+PiAwID4gZiA+Pj4gMCwgZVtnID4+IDJdID0gZVtjICsgKGkgPyAxMiA6IDgpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gZVtrICsgMTYgPj4gMl0sIHUgPSBsICsgMSB8IDAsIGMgPSBJW2wgKyAxIHwgMF0sIElbbCB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPj4+IDAgPj0gMTQ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCBhID0gYSArIDY1MjgwIHwgMCwgbCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IHUsIGEgPSAoYyA8PCA5KSArIGEgfCAwLCBsID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gdSwgbCA9IDgsIGEgPSAoYyA8PCA4KSArIGEgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gbCAtIDEgfCAwLCBhID0gYSA8PCAxLCBmID0gZiA8PCAxLCAhKGYgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gaSA/ICF0IDogdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlW2MgKyA0ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbdiArIDI1NiA+PiAyXSA9ICh3IHwgMCkgPT0gKGkgfCAwKSA/IGggOiBvLCBlW3MgPj4gMl0gPSBlW3MgPj4gMl0gfCAyNTYsIGVbciArIDQgPj4gMl0gPSBlW3IgKyA0ID4+IDJdIHwgNjQsIG4gPSAoaSBeIHcpIDw8IDIyIHwgbiB8IDEyODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBuIHwgMTY3NzcyMTY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKCEobiAmIDMxNjgwKSB8IG4gJiAxMzQyMTg3NTIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ID0gbiA+Pj4gNiB8IDAsIGcgPSBIICsgKElbZVtrICsgMTA4ID4+IDJdICsgKHcgJiA0OTUpIHwgMF0gPDwgMikgfCAwLCBzID0gZVtnID4+IDJdLCBpID0gZVtzID4+IDJdLCBmID0gZiAtIGkgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA+Pj4gMTYgPj4+IDAgPCBpID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh0ID0gZVtzICsgNCA+PiAyXSwgdSA9IGkgPj4+IDAgPiBmID4+PiAwLCBlW2cgPj4gMl0gPSBlW3MgKyAodSA/IDggOiAxMikgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gZVtrICsgMTYgPj4gMl0sIGYgPSBsICsgMSB8IDAsIHMgPSBJW2wgKyAxIHwgMF0sIElbbCB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzID4+PiAwID49IDE0NCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIGEgPSBhICsgNjUyODAgfCAwLCBsID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gZiwgYSA9IChzIDw8IDkpICsgYSB8IDAsIGwgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBmLCBsID0gOCwgYSA9IChzIDw8IDgpICsgYSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGwgLSAxIHwgMCwgYSA9IGEgPDwgMSwgaSA9IGkgPDwgMSwgIShpID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IGksIGkgPSB1ID8gdCA6ICF0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEgPSBhIC0gKGkgPDwgMTYpIHwgMCwgIShmICYgMzI3NjgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh0ID0gZVtzICsgNCA+PiAyXSwgaSA9IGkgPj4+IDAgPiBmID4+PiAwLCBlW2cgPj4gMl0gPSBlW3MgKyAoaSA/IDEyIDogOCkgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gZVtrICsgMTYgPj4gMl0sIHUgPSBsICsgMSB8IDAsIHMgPSBJW2wgKyAxIHwgMF0sIElbbCB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzID4+PiAwID49IDE0NCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIGEgPSBhICsgNjUyODAgfCAwLCBsID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gdSwgYSA9IChzIDw8IDkpICsgYSB8IDAsIGwgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSB1LCBsID0gOCwgYSA9IChzIDw8IDgpICsgYSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGwgLSAxIHwgMCwgYSA9IGEgPDwgMSwgZiA9IGYgPDwgMSwgIShmID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGkgPyAhdCA6IHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gZVtzICsgNCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSByIC0gNCB8IDAsIHUgPSBlW3IgKyA0ID4+IDJdID4+PiAyMyAmIDQgfCAoZVtzID4+IDJdID4+PiAyNSAmIDEgfCAobiA+Pj4gMTggJiAxNiB8IChuID4+PiAyMiAmIDY0IHwgdyAmIDE3MCkpKSwgZyA9IEggKyAoSVt1ICsgMzk1MjAgfCAwXSA8PCAyKSB8IDAsIGMgPSBlW2cgPj4gMl0sIGkgPSBlW2MgPj4gMl0sIGYgPSBmIC0gaSB8IDAsIHcgPSBJW3UgKyAzOTc3NiB8IDBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEgPj4+IDE2ID4+PiAwIDwgaSA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh0ID0gZVtjICsgNCA+PiAyXSwgdSA9IGkgPj4+IDAgPiBmID4+PiAwLCBlW2cgPj4gMl0gPSBlW2MgKyAodSA/IDggOiAxMikgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGc6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBlW2sgKyAxNiA+PiAyXSwgZiA9IGwgKyAxIHwgMCwgYyA9IElbbCArIDEgfCAwXSwgSVtsIHwgMF0gPT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA+Pj4gMCA+PSAxNDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIGEgPSBhICsgNjUyODAgfCAwLCBsID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gZiwgYSA9IChjIDw8IDkpICsgYSB8IDAsIGwgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBmLCBsID0gOCwgYSA9IChjIDw8IDgpICsgYSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBsIC0gMSB8IDAsIGEgPSBhIDw8IDEsIGkgPSBpIDw8IDEsICEoaSA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBpLCBpID0gdSA/IHQgOiAhdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhID0gYSAtIChpIDw8IDE2KSB8IDAsICEoZiAmIDMyNzY4KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh0ID0gZVtjICsgNCA+PiAyXSwgaSA9IGkgPj4+IDAgPiBmID4+PiAwLCBlW2cgPj4gMl0gPSBlW2MgKyAoaSA/IDEyIDogOCkgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGc6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBlW2sgKyAxNiA+PiAyXSwgdSA9IGwgKyAxIHwgMCwgYyA9IElbbCArIDEgfCAwXSwgSVtsIHwgMF0gPT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA+Pj4gMCA+PSAxNDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIGEgPSBhICsgNjUyODAgfCAwLCBsID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gdSwgYSA9IChjIDw8IDkpICsgYSB8IDAsIGwgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSB1LCBsID0gOCwgYSA9IChjIDw8IDgpICsgYSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBsIC0gMSB8IDAsIGEgPSBhIDw8IDEsIGYgPSBmIDw8IDEsICEoZiA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBpID8gIXQgOiB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVbYyArIDQgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVt2ICsgNTEyID4+IDJdID0gKHcgfCAwKSA9PSAoaSB8IDApID8gaCA6IG8sIGVbcyA+PiAyXSA9IGVbcyA+PiAyXSB8IDIwNDgsIGVbciArIDQgPj4gMl0gPSBlW3IgKyA0ID4+IDJdIHwgNTEyLCBuID0gKGkgXiB3KSA8PCAyNSB8IG4gfCAxMDI0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG4gfCAxMzQyMTc3Mjg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKCEobiAmIDI1MzQ0MCkgfCBuICYgMTA3Mzc1MDAxNikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcgPSBuID4+PiA5IHwgMCwgZyA9IEggKyAoSVtlW2sgKyAxMDggPj4gMl0gKyAodyAmIDQ5NSkgfCAwXSA8PCAyKSB8IDAsIHMgPSBlW2cgPj4gMl0sIGkgPSBlW3MgPj4gMl0sIGYgPSBmIC0gaSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhID4+PiAxNiA+Pj4gMCA8IGkgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHQgPSBlW3MgKyA0ID4+IDJdLCB1ID0gaSA+Pj4gMCA+IGYgPj4+IDAsIGVbZyA+PiAyXSA9IGVbcyArICh1ID8gOCA6IDEyKSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGc6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBlW2sgKyAxNiA+PiAyXSwgZiA9IGwgKyAxIHwgMCwgcyA9IElbbCArIDEgfCAwXSwgSVtsIHwgMF0gPT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPj4+IDAgPj0gMTQ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgYSA9IGEgKyA2NTI4MCB8IDAsIGwgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBmLCBhID0gKHMgPDwgOSkgKyBhIHwgMCwgbCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGYsIGwgPSA4LCBhID0gKHMgPDwgOCkgKyBhIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gbCAtIDEgfCAwLCBhID0gYSA8PCAxLCBpID0gaSA8PCAxLCAhKGkgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gaSwgaSA9IHUgPyB0IDogIXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA9IGEgLSAoaSA8PCAxNikgfCAwLCAhKGYgJiAzMjc2OCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHQgPSBlW3MgKyA0ID4+IDJdLCBpID0gaSA+Pj4gMCA+IGYgPj4+IDAsIGVbZyA+PiAyXSA9IGVbcyArIChpID8gMTIgOiA4KSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGc6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBlW2sgKyAxNiA+PiAyXSwgdSA9IGwgKyAxIHwgMCwgcyA9IElbbCArIDEgfCAwXSwgSVtsIHwgMF0gPT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPj4+IDAgPj0gMTQ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgYSA9IGEgKyA2NTI4MCB8IDAsIGwgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSB1LCBhID0gKHMgPDwgOSkgKyBhIHwgMCwgbCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IHUsIGwgPSA4LCBhID0gKHMgPDwgOCkgKyBhIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gbCAtIDEgfCAwLCBhID0gYSA8PCAxLCBmID0gZiA8PCAxLCAhKGYgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gaSA/ICF0IDogdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlW3MgKyA0ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9IHIgLSA0IHwgMCwgdSA9IGVbciArIDQgPj4gMl0gPj4+IDI2ICYgNCB8IChlW3MgPj4gMl0gPj4+IDI4ICYgMSB8IChuID4+PiAyMSAmIDE2IHwgKG4gPj4+IDI1ICYgNjQgfCB3ICYgMTcwKSkpLCBnID0gSCArIChJW3UgKyAzOTUyMCB8IDBdIDw8IDIpIHwgMCwgYyA9IGVbZyA+PiAyXSwgaSA9IGVbYyA+PiAyXSwgZiA9IGYgLSBpIHwgMCwgdyA9IElbdSArIDM5Nzc2IHwgMF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA+Pj4gMTYgPj4+IDAgPCBpID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHQgPSBlW2MgKyA0ID4+IDJdLCB1ID0gaSA+Pj4gMCA+IGYgPj4+IDAsIGVbZyA+PiAyXSA9IGVbYyArICh1ID8gOCA6IDEyKSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGVbayArIDE2ID4+IDJdLCBmID0gbCArIDEgfCAwLCBjID0gSVtsICsgMSB8IDBdLCBJW2wgfCAwXSA9PSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID4+PiAwID49IDE0NCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgYSA9IGEgKyA2NTI4MCB8IDAsIGwgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBmLCBhID0gKGMgPDwgOSkgKyBhIHwgMCwgbCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGYsIGwgPSA4LCBhID0gKGMgPDwgOCkgKyBhIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGwgLSAxIHwgMCwgYSA9IGEgPDwgMSwgaSA9IGkgPDwgMSwgIShpID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IGksIGkgPSB1ID8gdCA6ICF0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEgPSBhIC0gKGkgPDwgMTYpIHwgMCwgIShmICYgMzI3NjgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHQgPSBlW2MgKyA0ID4+IDJdLCBpID0gaSA+Pj4gMCA+IGYgPj4+IDAsIGVbZyA+PiAyXSA9IGVbYyArIChpID8gMTIgOiA4KSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGVbayArIDE2ID4+IDJdLCB1ID0gbCArIDEgfCAwLCBjID0gSVtsICsgMSB8IDBdLCBJW2wgfCAwXSA9PSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID4+PiAwID49IDE0NCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgYSA9IGEgKyA2NTI4MCB8IDAsIGwgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSB1LCBhID0gKGMgPDwgOSkgKyBhIHwgMCwgbCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IHUsIGwgPSA4LCBhID0gKGMgPDwgOCkgKyBhIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGwgLSAxIHwgMCwgYSA9IGEgPDwgMSwgZiA9IGYgPDwgMSwgIShmID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGkgPyAhdCA6IHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gZVtjICsgNCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW3YgKyA3NjggPj4gMl0gPSAodyB8IDApID09IChpIHwgMCkgPyBoIDogbywgZVtzID4+IDJdID0gZVtzID4+IDJdIHwgMTYzODQsIGVbciArIDQgPj4gMl0gPSBlW3IgKyA0ID4+IDJdIHwgNDA5NiwgZVtyICsgMjYwID4+IDJdID0gZVtyICsgMjYwID4+IDJdIHwgNCwgZVtyICsgMjY4ID4+IDJdID0gZVtyICsgMjY4ID4+IDJdIHwgMSwgaSA9IGkgXiB3LCBlW3IgKyAyNjQgPj4gMl0gPSBlW3IgKyAyNjQgPj4gMl0gfCBpIDw8IDE4IHwgMiwgbiA9IGkgPDwgMjggfCBuIHwgODE5MjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBuIHwgMTA3Mzc0MTgyNDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtyID4+IDJdID0gbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9IHIgKyA0IHwgMCwgaSA9IHYgKyA0IHwgMCwgbSA9IG0gKyAxIHwgMCwgKG0gfCAwKSA9PSA2NCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID0gciArIDEyIHwgMCwgaSA9IHYgKyA3NzIgfCAwLCB2ID0gQyA+Pj4gMCA8IDYwLCBDID0gQyArIDQgfCAwLCAhdikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDggPj4gMl0gPSBsLCBlW2sgKyA0ID4+IDJdID0gZiwgZVtrID4+IDJdID0gYSwgZVtrICsgMTA0ID4+IDJdID0gZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFIMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA9IDEgPDwgcDIgPj4+IDEgfCAwLCBzID0gZVtrICsgMTI0ID4+IDJdLCB1ID0gcyA8PCAyLCBpID0gKHUgKyBlW2sgKyAxMjAgPj4gMl0gfCAwKSArIDEyIHwgMCwgbiA9IGVbayArIDExNiA+PiAyXSwgbCA9IDAsIGYgPSBlW2sgKyAxMjggPj4gMl0sIGYgPj4+IDAgPj0gNCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh3ID0gWihzLCAxMiksIHIgPSBzIDw8IDMsIEMgPSAwIC0gYyB8IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGYgPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvID0gaSwgaSA9IGVbaSA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChpICYgMjA5NzE2OCkgPT0gMTYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlW2sgPj4gMl0sIHQgPSBlW2sgKyA4ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoID0gKGkgfCAwKSA9PSAyNTUsIHYgPSBlW2sgKyAxNiA+PiAyXSwgaSA9IElbdiB8IDBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgPj4gMl0gPSBpLCBlW2sgKyAxNiA+PiAyXSA9IHYgKyAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPj4+IDAgPD0gMTQzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgPj4gMl0gPSBpLCBlW2sgKyAxNiA+PiAyXSA9IHYgKyAxLCB0ID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAyNTUsIGVbayA+PiAyXSA9IDI1NTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSB0IC0gMSB8IDAsIGVbayArIDggPj4gMl0gPSBoLCB2ID0gaSA+Pj4gaCAmIDEsIGkgPSBlW24gPj4gMl0sIGVbbiA+PiAyXSA9ICgodiB8IDApID09IChpID4+PiAzMSB8IDApID8gQyA6IGMpICsgaSwgaSA9IGVbbyA+PiAyXSB8IDEwNDg1NzYsIGVbbyA+PiAyXSA9IGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoaSAmIDE2Nzc3MzQ0KSA9PSAxMjgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlW2sgPj4gMl0sIHQgPSBlW2sgKyA4ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoID0gKGkgfCAwKSA9PSAyNTUsIHYgPSBlW2sgKyAxNiA+PiAyXSwgaSA9IElbdiB8IDBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgPj4gMl0gPSBpLCBlW2sgKyAxNiA+PiAyXSA9IHYgKyAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPj4+IDAgPD0gMTQzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgPj4gMl0gPSBpLCBlW2sgKyAxNiA+PiAyXSA9IHYgKyAxLCB0ID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAyNTUsIGVbayA+PiAyXSA9IDI1NTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgPSB0IC0gMSB8IDAsIGVbayArIDggPj4gMl0gPSB2LCBoID0gbiArIHUgfCAwLCBhID0gZVtoID4+IDJdLCBlW2ggPj4gMl0gPSBhICsgKChpID4+PiB2ICYgMSkgPT0gKGEgPj4+IDMxIHwgMCkgPyBDIDogYyksIGkgPSBlW28gPj4gMl0gfCA4Mzg4NjA4LCBlW28gPj4gMl0gPSBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGkgJiAxMzQyMTg3NTIpID09IDEwMjQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlW2sgPj4gMl0sIHQgPSBlW2sgKyA4ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoID0gKGkgfCAwKSA9PSAyNTUsIHYgPSBlW2sgKyAxNiA+PiAyXSwgaSA9IElbdiB8IDBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgPj4gMl0gPSBpLCBlW2sgKyAxNiA+PiAyXSA9IHYgKyAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPj4+IDAgPD0gMTQzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgPj4gMl0gPSBpLCBlW2sgKyAxNiA+PiAyXSA9IHYgKyAxLCB0ID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAyNTUsIGVbayA+PiAyXSA9IDI1NTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgPSB0IC0gMSB8IDAsIGVbayArIDggPj4gMl0gPSB2LCBoID0gciArIG4gfCAwLCBhID0gZVtoID4+IDJdLCBlW2ggPj4gMl0gPSBhICsgKChpID4+PiB2ICYgMSkgPT0gKGEgPj4+IDMxIHwgMCkgPyBDIDogYyksIGkgPSBlW28gPj4gMl0gfCA2NzEwODg2NCwgZVtvID4+IDJdID0gaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChpICYgMTA3Mzc1MDAxNikgIT0gODE5MikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVbayA+PiAyXSwgdCA9IGVbayArIDggPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoID0gKGkgfCAwKSA9PSAyNTUsIHYgPSBlW2sgKyAxNiA+PiAyXSwgaSA9IElbdiB8IDBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgPj4gMl0gPSBpLCBlW2sgKyAxNiA+PiAyXSA9IHYgKyAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPj4+IDAgPD0gMTQzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrID4+IDJdID0gaSwgZVtrICsgMTYgPj4gMl0gPSB2ICsgMSwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gMjU1LCBlW2sgPj4gMl0gPSAyNTU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiA9IHQgLSAxIHwgMCwgZVtrICsgOCA+PiAyXSA9IHYsIGggPSBuICsgdyB8IDAsIGEgPSBlW2ggPj4gMl0sIGVbaCA+PiAyXSA9IGEgKyAoKGkgPj4+IHYgJiAxKSA9PSAoYSA+Pj4gMzEgfCAwKSA/IEMgOiBjKSwgZVtvID4+IDJdID0gZVtvID4+IDJdIHwgNTM2ODcwOTEyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID0gbiArIDQgfCAwLCBpID0gbyArIDQgfCAwLCBmID0gZiArIDEgfCAwLCAocyB8IDApID09IChmIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9IG4gKyB3IHwgMCwgaSA9IG8gKyAxMiB8IDAsIGwgPSBsICsgNCB8IDAsIGYgPSBlW2sgKyAxMjggPj4gMl0sICEobCA+Pj4gMCA8IChmICYgLTQpID4+PiAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcyB8IGYgPj4+IDAgPD0gbCA+Pj4gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKG0gPSAwLCBoID0gMCAtIGMgfCAwLCByID0gZjsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHIgfCAwKSA9PSAobCB8IDApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh0ID0gZVtpID4+IDJdLCBCID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHUgPSBaKEIsIDMpLCAoMjA5NzE2OCA8PCB1ICYgdCkgPT0gMTYgPDwgdSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSAoWihzLCBCKSA8PCAyKSArIG4gfCAwLCBmID0gZVtrID4+IDJdLCBnID0gZVtrICsgOCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gPSAoZiB8IDApICE9IDI1NSwgdiA9IGVbayArIDE2ID4+IDJdLCBmID0gSVt2IHwgMF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmID4+PiAwID49IDE0NCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IDI1NSwgZVtrID4+IDJdID0gMjU1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrID4+IDJdID0gZiwgZVtrICsgMTYgPj4gMl0gPSB2ICsgMSwgZyA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgPj4gMl0gPSBmLCBlW2sgKyAxNiA+PiAyXSA9IHYgKyAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZyA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gPSBnIC0gMSB8IDAsIGVbayArIDggPj4gMl0gPSBvLCBvID0gZiA+Pj4gbyAmIDEsIGYgPSBlW3IgPj4gMl0sIGVbciA+PiAyXSA9ICgobyB8IDApID09IChmID4+PiAzMSB8IDApID8gaCA6IGMpICsgZiwgdCA9IGVbaSA+PiAyXSB8IDEwNDg1NzYgPDwgdSwgZVtpID4+IDJdID0gdCwgZiA9IGVbayArIDEyOCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQiA9IEIgKyAxIHwgMCwgciA9IGYsICEoQiA+Pj4gMCA8IGYgLSBsID4+PiAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPSBuICsgNCB8IDAsIGkgPSBpICsgNCB8IDAsIG0gPSBtICsgMSB8IDAsIChzIHwgMCkgPT0gKG0gfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaCA9IGVbayArIDEyMCA+PiAyXSwgciA9IGVbayArIDExNiA+PiAyXSwgRSA9IGVbayArIDEyNCA+PiAyXSwgZiA9IGVbayArIDEyOCA+PiAyXSwgISgoRSB8IDApICE9IDY0IHwgKGYgfCAwKSAhPSA2NCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChmID0gaCArIDI2OCB8IDAsIG0gPSAwLCBzID0gMSA8PCBwMiA+Pj4gMSB8IDAsIEMgPSAwIC0gcyB8IDAsIEIgPSBlW2sgKyA4ID4+IDJdLCBuID0gZVtrICsgNCA+PiAyXSwgaSA9IGVbayA+PiAyXSwgbCA9IGVbayArIDEwNCA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGcgPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYgPSByLCBoID0gZiwgciA9IGVbZiA+PiAyXSwgcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobyA9IGYsIChyICYgMjA5NzE2OCkgPT0gMTYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gTDIgKyAoKHIgJiAxMDQ4NTc2ID8gMTYgOiByICYgNDk1ID8gMTUgOiAxNCkgPDwgMikgfCAwLCBhID0gZVtsID4+IDJdLCBmID0gZVthID4+IDJdLCBuID0gbiAtIGYgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID4+PiAxNiA+Pj4gMCA8IGYgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh3ID0gZVthICsgNCA+PiAyXSwgdSA9IGYgPj4+IDAgPiBuID4+PiAwLCBlW2wgPj4gMl0gPSBlW2EgKyAodSA/IDggOiAxMikgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA9IGVbayArIDE2ID4+IDJdLCBuID0gYSArIDEgfCAwLCB0ID0gSVthICsgMSB8IDBdLCBJW2EgfCAwXSA9PSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPj4+IDAgPj0gMTQ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIGkgPSBpICsgNjUyODAgfCAwLCBCID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gbiwgaSA9ICh0IDw8IDkpICsgaSB8IDAsIEIgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBuLCBCID0gOCwgaSA9ICh0IDw8IDgpICsgaSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChCID0gQiAtIDEgfCAwLCBpID0gaSA8PCAxLCBmID0gZiA8PCAxLCAhKGYgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gZiwgdSA9IHUgPyB3IDogIXc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IGkgLSAoZiA8PCAxNikgfCAwLCAhKG4gJiAzMjc2OCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh3ID0gZVthICsgNCA+PiAyXSwgZiA9IGYgPj4+IDAgPiBuID4+PiAwLCBlW2wgPj4gMl0gPSBlW2EgKyAoZiA/IDEyIDogOCkgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA9IGVbayArIDE2ID4+IDJdLCB1ID0gYSArIDEgfCAwLCB0ID0gSVthICsgMSB8IDBdLCBJW2EgfCAwXSA9PSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPj4+IDAgPj0gMTQ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIGkgPSBpICsgNjUyODAgfCAwLCBCID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gdSwgaSA9ICh0IDw8IDkpICsgaSB8IDAsIEIgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSB1LCBCID0gOCwgaSA9ICh0IDw8IDgpICsgaSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChCID0gQiAtIDEgfCAwLCBpID0gaSA8PCAxLCBuID0gbiA8PCAxLCAhKG4gPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gZiA/ICF3IDogdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBlW2EgKyA0ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gZVt2ID4+IDJdLCBlW3YgPj4gMl0gPSAoKHUgfCAwKSA9PSAoZiA+Pj4gMzEgfCAwKSA/IEMgOiBzKSArIGYsIHIgPSByIHwgMTA0ODU3NjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHIgJiAxNjc3NzM0NCkgPT0gMTI4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IEwyICsgKChyICYgODM4ODYwOCA/IDE2IDogciAmIDM5NjAgPyAxNSA6IDE0KSA8PCAyKSB8IDAsIGEgPSBlW2wgPj4gMl0sIGYgPSBlW2EgPj4gMl0sIG4gPSBuIC0gZiB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPj4+IDE2ID4+PiAwIDwgZiA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHcgPSBlW2EgKyA0ID4+IDJdLCB1ID0gZiA+Pj4gMCA+IG4gPj4+IDAsIGVbbCA+PiAyXSA9IGVbYSArICh1ID8gOCA6IDEyKSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhID0gZVtrICsgMTYgPj4gMl0sIG4gPSBhICsgMSB8IDAsIHQgPSBJW2EgKyAxIHwgMF0sIElbYSB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA+Pj4gMCA+PSAxNDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgaSA9IGkgKyA2NTI4MCB8IDAsIEIgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBuLCBpID0gKHQgPDwgOSkgKyBpIHwgMCwgQiA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IG4sIEIgPSA4LCBpID0gKHQgPDwgOCkgKyBpIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEIgPSBCIC0gMSB8IDAsIGkgPSBpIDw8IDEsIGYgPSBmIDw8IDEsICEoZiA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBmLCB1ID0gdSA/IHcgOiAhdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID0gaSAtIChmIDw8IDE2KSB8IDAsICEobiAmIDMyNzY4KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHcgPSBlW2EgKyA0ID4+IDJdLCBmID0gZiA+Pj4gMCA+IG4gPj4+IDAsIGVbbCA+PiAyXSA9IGVbYSArIChmID8gMTIgOiA4KSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhID0gZVtrICsgMTYgPj4gMl0sIHUgPSBhICsgMSB8IDAsIHQgPSBJW2EgKyAxIHwgMF0sIElbYSB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA+Pj4gMCA+PSAxNDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgaSA9IGkgKyA2NTI4MCB8IDAsIEIgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSB1LCBpID0gKHQgPDwgOSkgKyBpIHwgMCwgQiA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IHUsIEIgPSA4LCBpID0gKHQgPDwgOCkgKyBpIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEIgPSBCIC0gMSB8IDAsIGkgPSBpIDw8IDEsIG4gPSBuIDw8IDEsICEobiA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBmID8gIXcgOiB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IGVbYSArIDQgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBlW3YgKyAyNTYgPj4gMl0sIGVbdiArIDI1NiA+PiAyXSA9ICgodSB8IDApID09IChmID4+PiAzMSB8IDApID8gQyA6IHMpICsgZiwgciA9IHIgfCA4Mzg4NjA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgociAmIDEzNDIxODc1MikgPT0gMTAyNCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBMMiArICgociAmIDY3MTA4ODY0ID8gMTYgOiByICYgMzE2ODAgPyAxNSA6IDE0KSA8PCAyKSB8IDAsIGEgPSBlW2wgPj4gMl0sIGYgPSBlW2EgPj4gMl0sIG4gPSBuIC0gZiB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPj4+IDE2ID4+PiAwIDwgZiA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHcgPSBlW2EgKyA0ID4+IDJdLCB1ID0gZiA+Pj4gMCA+IG4gPj4+IDAsIGVbbCA+PiAyXSA9IGVbYSArICh1ID8gOCA6IDEyKSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhID0gZVtrICsgMTYgPj4gMl0sIG4gPSBhICsgMSB8IDAsIHQgPSBJW2EgKyAxIHwgMF0sIElbYSB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA+Pj4gMCA+PSAxNDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgaSA9IGkgKyA2NTI4MCB8IDAsIEIgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBuLCBpID0gKHQgPDwgOSkgKyBpIHwgMCwgQiA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IG4sIEIgPSA4LCBpID0gKHQgPDwgOCkgKyBpIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEIgPSBCIC0gMSB8IDAsIGkgPSBpIDw8IDEsIGYgPSBmIDw8IDEsICEoZiA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBmLCB1ID0gdSA/IHcgOiAhdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID0gaSAtIChmIDw8IDE2KSB8IDAsICEobiAmIDMyNzY4KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHcgPSBlW2EgKyA0ID4+IDJdLCBmID0gZiA+Pj4gMCA+IG4gPj4+IDAsIGVbbCA+PiAyXSA9IGVbYSArIChmID8gMTIgOiA4KSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhID0gZVtrICsgMTYgPj4gMl0sIHUgPSBhICsgMSB8IDAsIHQgPSBJW2EgKyAxIHwgMF0sIElbYSB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA+Pj4gMCA+PSAxNDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgaSA9IGkgKyA2NTI4MCB8IDAsIEIgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSB1LCBpID0gKHQgPDwgOSkgKyBpIHwgMCwgQiA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IHUsIEIgPSA4LCBpID0gKHQgPDwgOCkgKyBpIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEIgPSBCIC0gMSB8IDAsIGkgPSBpIDw8IDEsIG4gPSBuIDw8IDEsICEobiA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBmID8gIXcgOiB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IGVbYSArIDQgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBlW3YgKyA1MTIgPj4gMl0sIGVbdiArIDUxMiA+PiAyXSA9ICgodSB8IDApID09IChmID4+PiAzMSB8IDApID8gQyA6IHMpICsgZiwgciA9IHIgfCA2NzEwODg2NDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHIgJiAxMDczNzUwMDE2KSA9PSA4MTkyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IEwyICsgKChyICYgNTM2ODcwOTEyID8gMTYgOiByICYgMjUzNDQwID8gMTUgOiAxNCkgPDwgMikgfCAwLCBhID0gZVtsID4+IDJdLCBmID0gZVthID4+IDJdLCBuID0gbiAtIGYgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID4+PiAxNiA+Pj4gMCA8IGYgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh3ID0gZVthICsgNCA+PiAyXSwgdSA9IGYgPj4+IDAgPiBuID4+PiAwLCBlW2wgPj4gMl0gPSBlW2EgKyAodSA/IDggOiAxMikgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA9IGVbayArIDE2ID4+IDJdLCBuID0gYSArIDEgfCAwLCB0ID0gSVthICsgMSB8IDBdLCBJW2EgfCAwXSA9PSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPj4+IDAgPj0gMTQ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIGkgPSBpICsgNjUyODAgfCAwLCBCID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gbiwgaSA9ICh0IDw8IDkpICsgaSB8IDAsIEIgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBuLCBCID0gOCwgaSA9ICh0IDw8IDgpICsgaSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChCID0gQiAtIDEgfCAwLCBpID0gaSA8PCAxLCBmID0gZiA8PCAxLCAhKGYgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gZiwgdSA9IHUgPyB3IDogIXc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IGkgLSAoZiA8PCAxNikgfCAwLCAhKG4gJiAzMjc2OCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh3ID0gZVthICsgNCA+PiAyXSwgZiA9IGYgPj4+IDAgPiBuID4+PiAwLCBlW2wgPj4gMl0gPSBlW2EgKyAoZiA/IDEyIDogOCkgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA9IGVbayArIDE2ID4+IDJdLCB1ID0gYSArIDEgfCAwLCB0ID0gSVthICsgMSB8IDBdLCBJW2EgfCAwXSA9PSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPj4+IDAgPj0gMTQ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIGkgPSBpICsgNjUyODAgfCAwLCBCID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gdSwgaSA9ICh0IDw8IDkpICsgaSB8IDAsIEIgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSB1LCBCID0gOCwgaSA9ICh0IDw8IDgpICsgaSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChCID0gQiAtIDEgfCAwLCBpID0gaSA8PCAxLCBuID0gbiA8PCAxLCAhKG4gPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gZiA/ICF3IDogdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBlW2EgKyA0ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gZVt2ICsgNzY4ID4+IDJdLCBlW3YgKyA3NjggPj4gMl0gPSAoKHUgfCAwKSA9PSAoZiA+Pj4gMzEgfCAwKSA/IEMgOiBzKSArIGYsIHIgPSByIHwgNTM2ODcwOTEyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbbyA+PiAyXSA9IHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZiA9IGggKyA0IHwgMCwgciA9IHYgKyA0IHwgMCwgZyA9IGcgKyAxIHwgMCwgKGcgfCAwKSA9PSA2NCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmID0gaCArIDEyIHwgMCwgciA9IHYgKyA3NzIgfCAwLCBvID0gbSA+Pj4gMCA8IDYwLCBtID0gbSArIDQgfCAwLCAhbykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDggPj4gMl0gPSBCLCBlW2sgKyA0ID4+IDJdID0gbiwgZVtrID4+IDJdID0gaSwgZVtrICsgMTA0ID4+IDJdID0gbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0gPSAxIDw8IHAyID4+PiAxIHwgMCwgdCA9IEUgPDwgMiwgYSA9ICh0ICsgaCB8IDApICsgMTIgfCAwLCBCID0gZVtrICsgOCA+PiAyXSwgbiA9IGVbayArIDQgPj4gMl0sIGkgPSBlW2sgPj4gMl0sIGwgPSBlW2sgKyAxMDQgPj4gMl0sIHcgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZiA+Pj4gMCA8IDQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHMgPSBaKEUsIDEyKSwgdSA9IEUgPDwgMywgSCA9IDAgLSBtIHwgMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZyA9IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvID0gYSwgaCA9IGVbYSA+PiAyXSwgaCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoaCAmIDIwOTcxNjgpID09IDE2KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gTDIgKyAoKGggJiAxMDQ4NTc2ID8gMTYgOiBoICYgNDk1ID8gMTUgOiAxNCkgPDwgMikgfCAwLCBhID0gZVtsID4+IDJdLCBmID0gZVthID4+IDJdLCBuID0gbiAtIGYgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA+Pj4gMTYgPj4+IDAgPj0gZiA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID0gaSAtIChmIDw8IDE2KSB8IDAsIHYgPSBlW2EgKyA0ID4+IDJdLCBuICYgMzI3NjgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoQyA9IGVbYSArIDQgPj4gMl0sIGYgPSBmID4+PiAwID4gbiA+Pj4gMCwgZVtsID4+IDJdID0gZVthICsgKGYgPyAxMiA6IDgpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA9IGVbayArIDE2ID4+IDJdLCB2ID0gYSArIDEgfCAwLCBjID0gSVthICsgMSB8IDBdLCBJW2EgfCAwXSAhPSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IHYsIEIgPSA4LCBpID0gKGMgPDwgOCkgKyBpIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID4+PiAwIDw9IDE0MykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gdiwgaSA9IChjIDw8IDkpICsgaSB8IDAsIEIgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIGkgPSBpICsgNjUyODAgfCAwLCBCID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChCID0gQiAtIDEgfCAwLCBpID0gaSA8PCAxLCBuID0gbiA8PCAxLCAhKG4gPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ID0gZiA/ICFDIDogQzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoQyA9IGVbYSArIDQgPj4gMl0sIHYgPSBmID4+PiAwID4gbiA+Pj4gMCwgZVtsID4+IDJdID0gZVthICsgKHYgPyA4IDogMTIpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChCKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEgPSBlW2sgKyAxNiA+PiAyXSwgbiA9IGEgKyAxIHwgMCwgYyA9IElbYSArIDEgfCAwXSwgSVthIHwgMF0gIT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gbiwgQiA9IDgsIGkgPSAoYyA8PCA4KSArIGkgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPj4+IDAgPD0gMTQzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gbiwgaSA9IChjIDw8IDkpICsgaSB8IDAsIEIgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIGkgPSBpICsgNjUyODAgfCAwLCBCID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEIgPSBCIC0gMSB8IDAsIGkgPSBpIDw8IDEsIGYgPSBmIDw8IDEsICEoZiA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBmLCB2ID0gdiA/IEMgOiAhQzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBlW3IgPj4gMl0sIGVbciA+PiAyXSA9ICgodiB8IDApID09IChmID4+PiAzMSB8IDApID8gSCA6IG0pICsgZiwgaCA9IGggfCAxMDQ4NTc2OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGggJiAxNjc3NzM0NCkgPT0gMTI4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gTDIgKyAoKGggJiA4Mzg4NjA4ID8gMTYgOiBoICYgMzk2MCA/IDE1IDogMTQpIDw8IDIpIHwgMCwgYSA9IGVbbCA+PiAyXSwgZiA9IGVbYSA+PiAyXSwgbiA9IG4gLSBmIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQ6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPj4+IDE2ID4+PiAwID49IGYgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IGkgLSAoZiA8PCAxNikgfCAwLCB2ID0gZVthICsgNCA+PiAyXSwgbiAmIDMyNzY4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKEMgPSBlW2EgKyA0ID4+IDJdLCBmID0gZiA+Pj4gMCA+IG4gPj4+IDAsIGVbbCA+PiAyXSA9IGVbYSArIChmID8gMTIgOiA4KSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEgPSBlW2sgKyAxNiA+PiAyXSwgdiA9IGEgKyAxIHwgMCwgYyA9IElbYSArIDEgfCAwXSwgSVthIHwgMF0gIT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSB2LCBCID0gOCwgaSA9IChjIDw8IDgpICsgaSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA+Pj4gMCA8PSAxNDMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IHYsIGkgPSAoYyA8PCA5KSArIGkgfCAwLCBCID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCBpID0gaSArIDY1MjgwIHwgMCwgQiA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQiA9IEIgLSAxIHwgMCwgaSA9IGkgPDwgMSwgbiA9IG4gPDwgMSwgIShuID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiA9IGYgPyAhQyA6IEM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKEMgPSBlW2EgKyA0ID4+IDJdLCB2ID0gZiA+Pj4gMCA+IG4gPj4+IDAsIGVbbCA+PiAyXSA9IGVbYSArICh2ID8gOCA6IDEyKSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhID0gZVtrICsgMTYgPj4gMl0sIG4gPSBhICsgMSB8IDAsIGMgPSBJW2EgKyAxIHwgMF0sIElbYSB8IDBdICE9IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IG4sIEIgPSA4LCBpID0gKGMgPDwgOCkgKyBpIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID4+PiAwIDw9IDE0MykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IG4sIGkgPSAoYyA8PCA5KSArIGkgfCAwLCBCID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCBpID0gaSArIDY1MjgwIHwgMCwgQiA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChCID0gQiAtIDEgfCAwLCBpID0gaSA8PCAxLCBmID0gZiA8PCAxLCAhKGYgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gZiwgdiA9IHYgPyBDIDogIUM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gdiwgZiA9IHIgKyB0IHwgMCwgdiA9IGVbZiA+PiAyXSwgZVtmID4+IDJdID0gdiArICgoYSB8IDApID09ICh2ID4+PiAzMSB8IDApID8gSCA6IG0pLCBoID0gaCB8IDgzODg2MDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoaCAmIDEzNDIxODc1MikgPT0gMTAyNCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IEwyICsgKChoICYgNjcxMDg4NjQgPyAxNiA6IGggJiAzMTY4MCA/IDE1IDogMTQpIDw8IDIpIHwgMCwgYSA9IGVbbCA+PiAyXSwgZiA9IGVbYSA+PiAyXSwgbiA9IG4gLSBmIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQ6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPj4+IDE2ID4+PiAwID49IGYgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IGkgLSAoZiA8PCAxNikgfCAwLCB2ID0gZVthICsgNCA+PiAyXSwgbiAmIDMyNzY4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKEMgPSBlW2EgKyA0ID4+IDJdLCBmID0gZiA+Pj4gMCA+IG4gPj4+IDAsIGVbbCA+PiAyXSA9IGVbYSArIChmID8gMTIgOiA4KSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEgPSBlW2sgKyAxNiA+PiAyXSwgdiA9IGEgKyAxIHwgMCwgYyA9IElbYSArIDEgfCAwXSwgSVthIHwgMF0gIT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSB2LCBCID0gOCwgaSA9IChjIDw8IDgpICsgaSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA+Pj4gMCA8PSAxNDMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IHYsIGkgPSAoYyA8PCA5KSArIGkgfCAwLCBCID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCBpID0gaSArIDY1MjgwIHwgMCwgQiA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQiA9IEIgLSAxIHwgMCwgaSA9IGkgPDwgMSwgbiA9IG4gPDwgMSwgIShuID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiA9IGYgPyAhQyA6IEM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKEMgPSBlW2EgKyA0ID4+IDJdLCB2ID0gZiA+Pj4gMCA+IG4gPj4+IDAsIGVbbCA+PiAyXSA9IGVbYSArICh2ID8gOCA6IDEyKSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhID0gZVtrICsgMTYgPj4gMl0sIG4gPSBhICsgMSB8IDAsIGMgPSBJW2EgKyAxIHwgMF0sIElbYSB8IDBdICE9IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IG4sIEIgPSA4LCBpID0gKGMgPDwgOCkgKyBpIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID4+PiAwIDw9IDE0MykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IG4sIGkgPSAoYyA8PCA5KSArIGkgfCAwLCBCID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCBpID0gaSArIDY1MjgwIHwgMCwgQiA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChCID0gQiAtIDEgfCAwLCBpID0gaSA8PCAxLCBmID0gZiA8PCAxLCAhKGYgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gZiwgdiA9IHYgPyBDIDogIUM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gdiwgZiA9IHIgKyB1IHwgMCwgdiA9IGVbZiA+PiAyXSwgZVtmID4+IDJdID0gdiArICgoYSB8IDApID09ICh2ID4+PiAzMSB8IDApID8gSCA6IG0pLCBoID0gaCB8IDY3MTA4ODY0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGggJiAxMDczNzUwMDE2KSA9PSA4MTkyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gTDIgKyAoKGggJiA1MzY4NzA5MTIgPyAxNiA6IGggJiAyNTM0NDAgPyAxNSA6IDE0KSA8PCAyKSB8IDAsIGEgPSBlW2wgPj4gMl0sIGYgPSBlW2EgPj4gMl0sIG4gPSBuIC0gZiB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID4+PiAxNiA+Pj4gMCA+PSBmID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSBpIC0gKGYgPDwgMTYpIHwgMCwgdiA9IGVbYSArIDQgPj4gMl0sIG4gJiAzMjc2OCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChDID0gZVthICsgNCA+PiAyXSwgZiA9IGYgPj4+IDAgPiBuID4+PiAwLCBlW2wgPj4gMl0gPSBlW2EgKyAoZiA/IDEyIDogOCkgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChCKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhID0gZVtrICsgMTYgPj4gMl0sIHYgPSBhICsgMSB8IDAsIGMgPSBJW2EgKyAxIHwgMF0sIElbYSB8IDBdICE9IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gdiwgQiA9IDgsIGkgPSAoYyA8PCA4KSArIGkgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPj4+IDAgPD0gMTQzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSB2LCBpID0gKGMgPDwgOSkgKyBpIHwgMCwgQiA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgaSA9IGkgKyA2NTI4MCB8IDAsIEIgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEIgPSBCIC0gMSB8IDAsIGkgPSBpIDw8IDEsIG4gPSBuIDw8IDEsICEobiA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgPSBmID8gIUMgOiBDOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChDID0gZVthICsgNCA+PiAyXSwgdiA9IGYgPj4+IDAgPiBuID4+PiAwLCBlW2wgPj4gMl0gPSBlW2EgKyAodiA/IDggOiAxMikgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA9IGVbayArIDE2ID4+IDJdLCBuID0gYSArIDEgfCAwLCBjID0gSVthICsgMSB8IDBdLCBJW2EgfCAwXSAhPSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBuLCBCID0gOCwgaSA9IChjIDw8IDgpICsgaSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA+Pj4gMCA8PSAxNDMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBuLCBpID0gKGMgPDwgOSkgKyBpIHwgMCwgQiA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgaSA9IGkgKyA2NTI4MCB8IDAsIEIgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQiA9IEIgLSAxIHwgMCwgaSA9IGkgPDwgMSwgZiA9IGYgPDwgMSwgIShmID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IGYsIHYgPSB2ID8gQyA6ICFDOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IHYsIGYgPSByICsgcyB8IDAsIHYgPSBlW2YgPj4gMl0sIGVbZiA+PiAyXSA9IHYgKyAoKGEgfCAwKSA9PSAodiA+Pj4gMzEgfCAwKSA/IEggOiBtKSwgaCA9IGggfCA1MzY4NzA5MTI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbbyA+PiAyXSA9IGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEgPSBvICsgNCB8IDAsIHIgPSByICsgNCB8IDAsIGcgPSBnICsgMSB8IDAsIChFIHwgMCkgPT0gKGcgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhID0gbyArIDEyIHwgMCwgciA9IHIgKyBzIHwgMCwgdyA9IHcgKyA0IHwgMCwgZiA9IGVbayArIDEyOCA+PiAyXSwgISh3ID4+PiAwIDwgKGYgJiAtNCkgPj4+IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvID0gZiAmIC00LCBvID0gKG8gPj4+IDAgPD0gNCA/IDQgOiBvKSAtIDEgfCAwLCB3ID0gKG8gJiAtNCkgKyA0IHwgMCwgYSA9IChoICsgKG8gPDwgMSAmIC04KSB8IDApICsgMjAgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbayArIDggPj4gMl0gPSBCLCBlW2sgKyA0ID4+IDJdID0gbiwgZVtrID4+IDJdID0gaSwgZVtrICsgMTA0ID4+IDJdID0gbCwgIUUgfCBmID4+PiAwIDw9IHcgPj4+IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKEggPSAwLCBvID0gMCAtIG0gfCAwLCBpID0gZjsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoaSB8IDApID09ICh3IHwgMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChCID0gZVthID4+IDJdLCB0ID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnID0gWih0LCAzKSwgKDIwOTcxNjggPDwgZyAmIEIpID09IDE2IDw8IGcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IChaKHQsIEUpIDw8IDIpICsgciB8IDAsIGkgPSBCID4+PiBnIHwgMCwgaCA9IEwyICsgKChpICYgMTA0ODU3NiA/IDE2IDogaSAmIDQ5NSA/IDE1IDogMTQpIDw8IDIpIHwgMCwgZVtrICsgMTA0ID4+IDJdID0gaCwgdiA9IGVbaCA+PiAyXSwgaSA9IGVbdiA+PiAyXSwgZiA9IGVbayArIDQgPj4gMl0gLSBpIHwgMCwgZVtrICsgNCA+PiAyXSA9IGYsIG4gPSBlW2sgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQ6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA+Pj4gMTYgPj4+IDAgPCBpID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHUgPSBlW3YgKyA0ID4+IDJdLCBlW2sgKyA0ID4+IDJdID0gaSwgZiA9IGkgPj4+IDAgPiBmID4+PiAwLCBlW2ggPj4gMl0gPSBlW3YgKyAoZiA/IDggOiAxMikgPj4gMl0sIEIgPSBlW2sgKyA4ID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ID0gZVtrICsgMTYgPj4gMl0sIGggPSB2ICsgMSB8IDAsIEMgPSBJW3YgKyAxIHwgMF0sIElbdiB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEMgPj4+IDAgPj0gMTQ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCBuID0gbiArIDY1MjgwIHwgMCwgQiA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGgsIG4gPSAoQyA8PCA5KSArIG4gfCAwLCBCID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaCwgQiA9IDgsIG4gPSAoQyA8PCA4KSArIG4gfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChCID0gQiAtIDEgfCAwLCBlW2sgKyA4ID4+IDJdID0gQiwgbiA9IG4gPDwgMSwgZVtrID4+IDJdID0gbiwgaSA9IGkgPDwgMSwgZVtrICsgNCA+PiAyXSA9IGksICEoaSA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBmID8gdSA6ICF1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPSBuIC0gKGkgPDwgMTYpIHwgMCwgZVtrID4+IDJdID0gbiwgIShmICYgMzI3NjgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHUgPSBlW3YgKyA0ID4+IDJdLCBpID0gaSA+Pj4gMCA+IGYgPj4+IDAsIGVbaCA+PiAyXSA9IGVbdiArIChpID8gMTIgOiA4KSA+PiAyXSwgQiA9IGVbayArIDggPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYgPSBlW2sgKyAxNiA+PiAyXSwgaCA9IHYgKyAxIHwgMCwgQyA9IElbdiArIDEgfCAwXSwgSVt2IHwgMF0gPT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQyA+Pj4gMCA+PSAxNDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIG4gPSBuICsgNjUyODAgfCAwLCBCID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaCwgbiA9IChDIDw8IDkpICsgbiB8IDAsIEIgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBoLCBCID0gOCwgbiA9IChDIDw8IDgpICsgbiB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEIgPSBCIC0gMSB8IDAsIGVbayArIDggPj4gMl0gPSBCLCBuID0gbiA8PCAxLCBlW2sgPj4gMl0gPSBuLCBmID0gZiA8PCAxLCBlW2sgKyA0ID4+IDJdID0gZiwgIShmID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IGkgPyAhdSA6IHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gZVt2ICsgNCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gZVtsID4+IDJdLCBlW2wgPj4gMl0gPSAoKGYgfCAwKSA9PSAoaSA+Pj4gMzEgfCAwKSA/IG8gOiBtKSArIGksIEIgPSBlW2EgPj4gMl0gfCAxMDQ4NTc2IDw8IGcsIGVbYSA+PiAyXSA9IEIsIGYgPSBlW2sgKyAxMjggPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgKyAxIHwgMCwgaSA9IGYsICEodCA+Pj4gMCA8IGkgLSB3ID4+PiAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhID0gYSArIDQgfCAwLCByID0gciArIDQgfCAwLCBIID0gSCArIDEgfCAwLCAoRSB8IDApID09IChIIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSAwLCBDID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQ6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjMiA9IGVbayArIDEyNCA+PiAyXSwgISgoYzIgfCAwKSAhPSA2NCB8IGVbayArIDEyOCA+PiAyXSAhPSA2NCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSAxIDw8IHAyLCBFID0gaSA+Pj4gMSB8IGksIG0gPSAwIC0gRSB8IDAsIHYgPSBrICsgMTAwIHwgMCwgbyA9IGsgKyA5NiB8IDAsIHkgPSBrICsgMjggfCAwLCBuID0gZVtrICsgMTIwID4+IDJdICsgMjY4IHwgMCwgdCA9IGVbayArIDggPj4gMl0sIGkgPSBlW2sgKyA0ID4+IDJdLCByID0gZVtrID4+IDJdLCBoID0gZVtrICsgMTA0ID4+IDJdLCBmID0gZVtrICsgMTE2ID4+IDJdLCBTMiAmIDgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChIID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBmLCBsID0gbiwgbiA9IGVbbiA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGg6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoID0gZVtvID4+IDJdLCBuID0gZVtoID4+IDJdLCBpID0gaSAtIG4gfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPj4+IDE2ID4+PiAwIDwgbiA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1ID0gZVtoICsgNCA+PiAyXSwgZiA9IGkgPj4+IDAgPCBuID4+PiAwLCBlW28gPj4gMl0gPSBlW2ggKyAoZiA/IDggOiAxMikgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG46IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGggPSBlW2sgKyAxNiA+PiAyXSwgaSA9IGggKyAxIHwgMCwgdyA9IElbaCArIDEgfCAwXSwgSVtoIHwgMF0gPT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodyA+Pj4gMCA+PSAxNDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHIgPSByICsgNjUyODAgfCAwLCB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgciA9ICh3IDw8IDkpICsgciB8IDAsIHQgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBpLCB0ID0gOCwgciA9ICh3IDw8IDgpICsgciB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0IC0gMSB8IDAsIHIgPSByIDw8IDEsIG4gPSBuIDw8IDEsICEobiA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBuLCBmID0gZiA/IHUgOiAhdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0gciAtIChuIDw8IDE2KSB8IDAsICEoaSAmIDMyNzY4KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1ID0gZVtoICsgNCA+PiAyXSwgZiA9IGkgPj4+IDAgPCBuID4+PiAwLCBlW28gPj4gMl0gPSBlW2ggKyAoZiA/IDEyIDogOCkgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG46IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGggPSBlW2sgKyAxNiA+PiAyXSwgbiA9IGggKyAxIHwgMCwgdyA9IElbaCArIDEgfCAwXSwgSVtoIHwgMF0gPT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodyA+Pj4gMCA+PSAxNDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHIgPSByICsgNjUyODAgfCAwLCB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gbiwgciA9ICh3IDw8IDkpICsgciB8IDAsIHQgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBuLCB0ID0gOCwgciA9ICh3IDw8IDgpICsgciB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0IC0gMSB8IDAsIHIgPSByIDw8IDEsIGkgPSBpIDw8IDEsICEoaSA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBmID8gIXUgOiB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IGVbaCArIDQgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaCA9IG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gZVt2ID4+IDJdLCBuID0gZVtmID4+IDJdLCBpID0gaSAtIG4gfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPj4+IDE2ID4+PiAwIDwgbiA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh3ID0gZVtmICsgNCA+PiAyXSwgaCA9IGkgPj4+IDAgPCBuID4+PiAwLCBmID0gZVsoaCA/IDggOiAxMikgKyBmID4+IDJdLCBlW3YgPj4gMl0gPSBmOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1ID0gZVtrICsgMTYgPj4gMl0sIGkgPSB1ICsgMSB8IDAsIGcgPSBJW3UgKyAxIHwgMF0sIElbdSB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGcgPj4+IDAgPj0gMTQ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCByID0gciArIDY1MjgwIHwgMCwgdCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGksIHIgPSAoZyA8PCA5KSArIHIgfCAwLCB0ID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgdCA9IDgsIHIgPSAoZyA8PCA4KSArIHIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gdCAtIDEgfCAwLCByID0gciA8PCAxLCBuID0gbiA8PCAxLCAhKG4gPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gbiwgdSA9IGggPyB3IDogIXc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9IHIgLSAobiA8PCAxNikgfCAwLCAhKGkgJiAzMjc2OCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodyA9IGVbZiArIDQgPj4gMl0sIG4gPSBpID4+PiAwIDwgbiA+Pj4gMCwgZiA9IGVbKG4gPyAxMiA6IDgpICsgZiA+PiAyXSwgZVt2ID4+IDJdID0gZjsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodSA9IGVbayArIDE2ID4+IDJdLCBoID0gdSArIDEgfCAwLCBnID0gSVt1ICsgMSB8IDBdLCBJW3UgfCAwXSA9PSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnID4+PiAwID49IDE0NCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgciA9IHIgKyA2NTI4MCB8IDAsIHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBoLCByID0gKGcgPDwgOSkgKyByIHwgMCwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGgsIHQgPSA4LCByID0gKGcgPDwgOCkgKyByIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgLSAxIHwgMCwgciA9IHIgPDwgMSwgaSA9IGkgPDwgMSwgIShpID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IG4gPyAhdyA6IHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gZVtmICsgNCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gZVtmID4+IDJdLCBpID0gaSAtIG4gfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPj4+IDE2ID4+PiAwIDwgbiA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh3ID0gZVtmICsgNCA+PiAyXSwgaCA9IGYsIGYgPSBpID4+PiAwIDwgbiA+Pj4gMCwgZVt2ID4+IDJdID0gZVtoICsgKGYgPyA4IDogMTIpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoID0gZVtrICsgMTYgPj4gMl0sIGkgPSBoICsgMSB8IDAsIGcgPSBJW2ggKyAxIHwgMF0sIElbaCB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGcgPj4+IDAgPj0gMTQ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCByID0gciArIDY1MjgwIHwgMCwgdCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGksIHIgPSAoZyA8PCA5KSArIHIgfCAwLCB0ID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgdCA9IDgsIHIgPSAoZyA8PCA4KSArIHIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gdCAtIDEgfCAwLCByID0gciA8PCAxLCBuID0gbiA8PCAxLCAhKG4gPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gbiwgZiA9IGYgPyB3IDogIXc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9IHIgLSAobiA8PCAxNikgfCAwLCAhKGkgJiAzMjc2OCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodyA9IGVbZiArIDQgPj4gMl0sIGggPSBmLCBmID0gaSA+Pj4gMCA8IG4gPj4+IDAsIGVbdiA+PiAyXSA9IGVbaCArIChmID8gMTIgOiA4KSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaCA9IGVbayArIDE2ID4+IDJdLCBuID0gaCArIDEgfCAwLCBnID0gSVtoICsgMSB8IDBdLCBJW2ggfCAwXSA9PSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnID4+PiAwID49IDE0NCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgciA9IHIgKyA2NTI4MCB8IDAsIHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBuLCByID0gKGcgPDwgOSkgKyByIHwgMCwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IG4sIHQgPSA4LCByID0gKGcgPDwgOCkgKyByIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgLSAxIHwgMCwgciA9IHIgPDwgMSwgaSA9IGkgPDwgMSwgIShpID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IGYgPyAhdyA6IHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gZVtmICsgNCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMCwgaCA9IHY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHc6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChmIHwgdSA8PCAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gbCAtIDQgfCAwLCBoID0gZVtsICsgNCA+PiAyXSA+Pj4gMTcgJiA0IHwgZVtnID4+IDJdID4+PiAxOSAmIDEsIGYgPSB5ICsgKElbaCArIDM5NTIwIHwgMF0gPDwgMikgfCAwLCB1ID0gZVtmID4+IDJdLCBuID0gZVt1ID4+IDJdLCBpID0gaSAtIG4gfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID4+PiAxNiA+Pj4gMCA8IG4gPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh3ID0gZVt1ICsgNCA+PiAyXSwgSiA9IGYsIGYgPSBpID4+PiAwIDwgbiA+Pj4gMCwgZVtKID4+IDJdID0gZVt1ICsgKGYgPyA4IDogMTIpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEk6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBJOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHUgPSBlW2sgKyAxNiA+PiAyXSwgaSA9IHUgKyAxIHwgMCwgcyA9IElbdSArIDEgfCAwXSwgSVt1IHwgMF0gPT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzID4+PiAwID49IDE0NCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCByID0gciArIDY1MjgwIHwgMCwgdCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgSTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGksIHIgPSAocyA8PCA5KSArIHIgfCAwLCB0ID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgSTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgdCA9IDgsIHIgPSAocyA8PCA4KSArIHIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgLSAxIHwgMCwgciA9IHIgPDwgMSwgbiA9IG4gPDwgMSwgIShuID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IG4sIHUgPSBmID8gdyA6ICF3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBjOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSByIC0gKG4gPDwgMTYpIHwgMCwgIShpICYgMzI3NjgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodyA9IGVbdSArIDQgPj4gMl0sIEogPSBmLCBmID0gaSA+Pj4gMCA8IG4gPj4+IDAsIGVbSiA+PiAyXSA9IGVbdSArIChmID8gMTIgOiA4KSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgSTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1ID0gZVtrICsgMTYgPj4gMl0sIG4gPSB1ICsgMSB8IDAsIHMgPSBJW3UgKyAxIHwgMF0sIElbdSB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocyA+Pj4gMCA+PSAxNDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgciA9IHIgKyA2NTI4MCB8IDAsIHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBuLCByID0gKHMgPDwgOSkgKyByIHwgMCwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IG4sIHQgPSA4LCByID0gKHMgPDwgOCkgKyByIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0IC0gMSB8IDAsIHIgPSByIDw8IDEsIGkgPSBpIDw8IDEsICEoaSA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBmID8gIXcgOiB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBjOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IGVbdSArIDQgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBJW2ggKyAzOTc3NiB8IDBdLCBlW2EgPj4gMl0gPSAodSB8IDApID09IChuIHwgMCkgPyBFIDogbSwgZVtnID4+IDJdID0gZVtnID4+IDJdIHwgMzIsIGVbbCArIDQgPj4gMl0gPSBlW2wgKyA0ID4+IDJdIHwgOCwgZiA9IGwgLSAyNjggfCAwLCBlW2YgPj4gMl0gPSBlW2YgPj4gMl0gfCAxMzEwNzIsIGYgPSBsIC0gMjYwIHwgMCwgZVtmID4+IDJdID0gZVtmID4+IDJdIHwgMzI3NjgsIGYgPSBsIC0gMjY0IHwgMCwgaCA9IGYsIHcgPSBlW2YgPj4gMl0sIGYgPSBuIF4gdSwgZVtoID4+IDJdID0gdyB8IGYgPDwgMzEgfCA2NTUzNiwgaCA9IGYgPDwgMTksIEIgPSBlW2sgKyAxMDggPj4gMl0sIGYgPSB5ICsgKElbQiArIDIgfCAwXSA8PCAyKSB8IDAsIHUgPSBlW2YgPj4gMl0sIG4gPSBlW3UgPj4gMl0sIGkgPSBpIC0gbiB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPj4+IDE2ID4+PiAwIDwgbiA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHcgPSBlW3UgKyA0ID4+IDJdLCBKID0gZiwgZiA9IGkgPj4+IDAgPCBuID4+PiAwLCBlW0ogPj4gMl0gPSBlW3UgKyAoZiA/IDggOiAxMikgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodSA9IGVbayArIDE2ID4+IDJdLCBpID0gdSArIDEgfCAwLCBnID0gSVt1ICsgMSB8IDBdLCBJW3UgfCAwXSA9PSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGcgPj4+IDAgPj0gMTQ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHIgPSByICsgNjUyODAgfCAwLCB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBJOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgciA9IChnIDw8IDkpICsgciB8IDAsIHQgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBJOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBpLCB0ID0gOCwgciA9IChnIDw8IDgpICsgciB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gdCAtIDEgfCAwLCByID0gciA8PCAxLCBuID0gbiA8PCAxLCAhKG4gPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gbiwgZiA9IGYgPyB3IDogIXc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9IHIgLSAobiA8PCAxNikgfCAwLCAhKGkgJiAzMjc2OCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh3ID0gZVt1ICsgNCA+PiAyXSwgSiA9IGYsIGYgPSBpID4+PiAwIDwgbiA+Pj4gMCwgZVtKID4+IDJdID0gZVt1ICsgKGYgPyAxMiA6IDgpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEk6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBJOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHUgPSBlW2sgKyAxNiA+PiAyXSwgbiA9IHUgKyAxIHwgMCwgZyA9IElbdSArIDEgfCAwXSwgSVt1IHwgMF0gPT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnID4+PiAwID49IDE0NCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCByID0gciArIDY1MjgwIHwgMCwgdCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgSTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IG4sIHIgPSAoZyA8PCA5KSArIHIgfCAwLCB0ID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgSTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gbiwgdCA9IDgsIHIgPSAoZyA8PCA4KSArIHIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgLSAxIHwgMCwgciA9IHIgPDwgMSwgaSA9IGkgPDwgMSwgIShpID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IGYgPyAhdyA6IHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gZVt1ICsgNCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPSBoIHwgMTYsICFmKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBsIC0gNCB8IDAsIHUgPSBlW2wgKyA0ID4+IDJdID4+PiAyMCAmIDQgfCAoZVtzID4+IDJdID4+PiAyMiAmIDEgfCAobiA+Pj4gMTUgJiAxNiB8IChuID4+PiAxOSAmIDY0IHwgbiA+Pj4gMyAmIDE3MCkpKSwgaCA9IHkgKyAoSVt1ICsgMzk1MjAgfCAwXSA8PCAyKSB8IDAsIHcgPSBlW2ggPj4gMl0sIGYgPSBlW3cgPj4gMl0sIGkgPSBpIC0gZiB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPj4+IDE2ID4+PiAwIDwgZiA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGcgPSBlW3cgKyA0ID4+IDJdLCBKID0gaCwgaCA9IGkgPj4+IDAgPCBmID4+PiAwLCBlW0ogPj4gMl0gPSBlW3cgKyAoaCA/IDggOiAxMikgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodyA9IGVbayArIDE2ID4+IDJdLCBpID0gdyArIDEgfCAwLCBjID0gSVt3ICsgMSB8IDBdLCBJW3cgfCAwXSA9PSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPj4+IDAgPj0gMTQ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHIgPSByICsgNjUyODAgfCAwLCB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBjOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgciA9IChjIDw8IDkpICsgciB8IDAsIHQgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBjOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBpLCB0ID0gOCwgciA9IChjIDw8IDgpICsgciB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gdCAtIDEgfCAwLCByID0gciA8PCAxLCBmID0gZiA8PCAxLCAhKGYgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gZiwgaCA9IGggPyBnIDogIWc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9IHIgLSAoZiA8PCAxNikgfCAwLCAhKGkgJiAzMjc2OCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChnID0gZVt3ICsgNCA+PiAyXSwgZiA9IGkgPj4+IDAgPCBmID4+PiAwLCBlW2ggPj4gMl0gPSBlW3cgKyAoZiA/IDEyIDogOCkgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodyA9IGVbayArIDE2ID4+IDJdLCBoID0gdyArIDEgfCAwLCBjID0gSVt3ICsgMSB8IDBdLCBJW3cgfCAwXSA9PSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPj4+IDAgPj0gMTQ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHIgPSByICsgNjUyODAgfCAwLCB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBjOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaCwgciA9IChjIDw8IDkpICsgciB8IDAsIHQgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBjOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBoLCB0ID0gOCwgciA9IChjIDw8IDgpICsgciB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gdCAtIDEgfCAwLCByID0gciA8PCAxLCBpID0gaSA8PCAxLCAhKGkgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoID0gZiA/ICFnIDogZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSBlW3cgKyA0ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gSVt1ICsgMzk3NzYgfCAwXSwgZVthICsgMjU2ID4+IDJdID0gKGggfCAwKSA9PSAoZiB8IDApID8gRSA6IG0sIGVbcyA+PiAyXSA9IGVbcyA+PiAyXSB8IDI1NiwgZVtsICsgNCA+PiAyXSA9IGVbbCArIDQgPj4gMl0gfCA2NCwgQiA9IGVbayArIDEwOCA+PiAyXSwgbiA9IChmIF4gaCkgPDwgMjIgfCBuIHwgMTI4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSB5ICsgKElbKG4gPj4+IDYgJiA0OTUpICsgQiB8IDBdIDw8IDIpIHwgMCwgdSA9IGVbaCA+PiAyXSwgZiA9IGVbdSA+PiAyXSwgaSA9IGkgLSBmIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID4+PiAxNiA+Pj4gMCA8IGYgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodyA9IGVbdSArIDQgPj4gMl0sIEogPSBoLCBoID0gaSA+Pj4gMCA8IGYgPj4+IDAsIGVbSiA+PiAyXSA9IGVbdSArIChoID8gOCA6IDEyKSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodSA9IGVbayArIDE2ID4+IDJdLCBpID0gdSArIDEgfCAwLCBnID0gSVt1ICsgMSB8IDBdLCBJW3UgfCAwXSA9PSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnID4+PiAwID49IDE0NCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgciA9IHIgKyA2NTI4MCB8IDAsIHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB2OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBpLCByID0gKGcgPDwgOSkgKyByIHwgMCwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB2OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGksIHQgPSA4LCByID0gKGcgPDwgOCkgKyByIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgLSAxIHwgMCwgciA9IHIgPDwgMSwgZiA9IGYgPDwgMSwgIShmID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGYsIGYgPSBoID8gdyA6ICF3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSByIC0gKGYgPDwgMTYpIHwgMCwgIShpICYgMzI3NjgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHcgPSBlW3UgKyA0ID4+IDJdLCBmID0gaSA+Pj4gMCA8IGYgPj4+IDAsIGVbaCA+PiAyXSA9IGVbdSArIChmID8gMTIgOiA4KSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodSA9IGVbayArIDE2ID4+IDJdLCBoID0gdSArIDEgfCAwLCBnID0gSVt1ICsgMSB8IDBdLCBJW3UgfCAwXSA9PSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnID4+PiAwID49IDE0NCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgciA9IHIgKyA2NTI4MCB8IDAsIHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB2OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBoLCByID0gKGcgPDwgOSkgKyByIHwgMCwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB2OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGgsIHQgPSA4LCByID0gKGcgPDwgOCkgKyByIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgLSAxIHwgMCwgciA9IHIgPDwgMSwgaSA9IGkgPDwgMSwgIShpID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IGYgPyAhdyA6IHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBCOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gZVt1ICsgNCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWYpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBsIC0gNCB8IDAsIHUgPSBlW2wgKyA0ID4+IDJdID4+PiAyMyAmIDQgfCAoZVtzID4+IDJdID4+PiAyNSAmIDEgfCAobiA+Pj4gMTggJiAxNiB8IChuID4+PiAyMiAmIDY0IHwgbiA+Pj4gNiAmIDE3MCkpKSwgaCA9IHkgKyAoSVt1ICsgMzk1MjAgfCAwXSA8PCAyKSB8IDAsIHcgPSBlW2ggPj4gMl0sIGYgPSBlW3cgPj4gMl0sIGkgPSBpIC0gZiB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID4+PiAxNiA+Pj4gMCA8IGYgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGcgPSBlW3cgKyA0ID4+IDJdLCBKID0gaCwgaCA9IGkgPj4+IDAgPCBmID4+PiAwLCBlW0ogPj4gMl0gPSBlW3cgKyAoaCA/IDggOiAxMikgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3ID0gZVtrICsgMTYgPj4gMl0sIGkgPSB3ICsgMSB8IDAsIGMgPSBJW3cgKyAxIHwgMF0sIElbdyB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID4+PiAwID49IDE0NCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHIgPSByICsgNjUyODAgfCAwLCB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgciA9IChjIDw8IDkpICsgciB8IDAsIHQgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBpLCB0ID0gOCwgciA9IChjIDw8IDgpICsgciB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgLSAxIHwgMCwgciA9IHIgPDwgMSwgZiA9IGYgPDwgMSwgIShmID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGYsIGggPSBoID8gZyA6ICFnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSByIC0gKGYgPDwgMTYpIHwgMCwgIShpICYgMzI3NjgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChnID0gZVt3ICsgNCA+PiAyXSwgZiA9IGkgPj4+IDAgPCBmID4+PiAwLCBlW2ggPj4gMl0gPSBlW3cgKyAoZiA/IDEyIDogOCkgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3ID0gZVtrICsgMTYgPj4gMl0sIGggPSB3ICsgMSB8IDAsIGMgPSBJW3cgKyAxIHwgMF0sIElbdyB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID4+PiAwID49IDE0NCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHIgPSByICsgNjUyODAgfCAwLCB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaCwgciA9IChjIDw8IDkpICsgciB8IDAsIHQgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBoLCB0ID0gOCwgciA9IChjIDw8IDgpICsgciB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgLSAxIHwgMCwgciA9IHIgPDwgMSwgaSA9IGkgPDwgMSwgIShpID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaCA9IGYgPyAhZyA6IGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoID0gZVt3ICsgNCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBJW3UgKyAzOTc3NiB8IDBdLCBlW2EgKyA1MTIgPj4gMl0gPSAoaCB8IDApID09IChmIHwgMCkgPyBFIDogbSwgZVtzID4+IDJdID0gZVtzID4+IDJdIHwgMjA0OCwgZVtsICsgNCA+PiAyXSA9IGVbbCArIDQgPj4gMl0gfCA1MTIsIG4gPSAoZiBeIGgpIDw8IDI1IHwgbiB8IDEwMjQsIEIgPSBlW2sgKyAxMDggPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSB5ICsgKElbKG4gPj4+IDkgJiA0OTUpICsgQiB8IDBdIDw8IDIpIHwgMCwgdyA9IGVbaCA+PiAyXSwgZiA9IGVbdyA+PiAyXSwgaSA9IGkgLSBmIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA+Pj4gMTYgPj4+IDAgPCBmID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZyA9IGVbdyArIDQgPj4gMl0sIHUgPSBpID4+PiAwIDwgZiA+Pj4gMCwgZVtoID4+IDJdID0gZVt3ICsgKHUgPyA4IDogMTIpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG86IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHcgPSBlW2sgKyAxNiA+PiAyXSwgaSA9IHcgKyAxIHwgMCwgcyA9IElbdyArIDEgfCAwXSwgSVt3IHwgMF0gPT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzID4+PiAwID49IDE0NCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCByID0gciArIDY1MjgwIHwgMCwgdCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGksIHIgPSAocyA8PCA5KSArIHIgfCAwLCB0ID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgdCA9IDgsIHIgPSAocyA8PCA4KSArIHIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgLSAxIHwgMCwgciA9IHIgPDwgMSwgZiA9IGYgPDwgMSwgIShmID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGYsIGYgPSB1ID8gZyA6ICFnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSByIC0gKGYgPDwgMTYpIHwgMCwgIShpICYgMzI3NjgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZyA9IGVbdyArIDQgPj4gMl0sIGYgPSBpID4+PiAwIDwgZiA+Pj4gMCwgZVtoID4+IDJdID0gZVt3ICsgKGYgPyAxMiA6IDgpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG86IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHcgPSBlW2sgKyAxNiA+PiAyXSwgdSA9IHcgKyAxIHwgMCwgcyA9IElbdyArIDEgfCAwXSwgSVt3IHwgMF0gPT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzID4+PiAwID49IDE0NCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCByID0gciArIDY1MjgwIHwgMCwgdCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IHUsIHIgPSAocyA8PCA5KSArIHIgfCAwLCB0ID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gdSwgdCA9IDgsIHIgPSAocyA8PCA4KSArIHIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgLSAxIHwgMCwgciA9IHIgPDwgMSwgaSA9IGkgPDwgMSwgIShpID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IGYgPyAhZyA6IGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gZVt3ICsgNCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gbCAtIDQgfCAwLCBPID0gZVtsICsgNCA+PiAyXSA+Pj4gMjYgJiA0IHwgKGVbYyA+PiAyXSA+Pj4gMjggJiAxIHwgKG4gPj4+IDIxICYgMTYgfCAobiA+Pj4gMjUgJiA2NCB8IG4gPj4+IDkgJiAxNzApKSksIGggPSB5ICsgKElbTyArIDM5NTIwIHwgMF0gPDwgMikgfCAwLCBCID0gZVtoID4+IDJdLCBmID0gZVtCID4+IDJdLCBpID0gaSAtIGYgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiAmIDIwOTcxNjgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaCA9IHkgKyAoSVtlW2sgKyAxMDggPj4gMl0gKyAobiAmIDQ5NSkgfCAwXSA8PCAyKSB8IDAsIHcgPSBlW2ggPj4gMl0sIGYgPSBlW3cgPj4gMl0sIGkgPSBpIC0gZiB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG46IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA+Pj4gMTYgPj4+IDAgPCBmID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGcgPSBlW3cgKyA0ID4+IDJdLCB1ID0gaSA+Pj4gMCA8IGYgPj4+IDAsIGVbaCA+PiAyXSA9IGVbdyArICh1ID8gOCA6IDEyKSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodyA9IGVbayArIDE2ID4+IDJdLCBpID0gdyArIDEgfCAwLCBzID0gSVt3ICsgMSB8IDBdLCBJW3cgfCAwXSA9PSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzID4+PiAwID49IDE0NCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgciA9IHIgKyA2NTI4MCB8IDAsIHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBpLCByID0gKHMgPDwgOSkgKyByIHwgMCwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGksIHQgPSA4LCByID0gKHMgPDwgOCkgKyByIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgLSAxIHwgMCwgciA9IHIgPDwgMSwgZiA9IGYgPDwgMSwgIShmID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGYsIGYgPSB1ID8gZyA6ICFnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSByIC0gKGYgPDwgMTYpIHwgMCwgIShpICYgMzI3NjgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGcgPSBlW3cgKyA0ID4+IDJdLCBmID0gaSA+Pj4gMCA8IGYgPj4+IDAsIGVbaCA+PiAyXSA9IGVbdyArIChmID8gMTIgOiA4KSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodyA9IGVbayArIDE2ID4+IDJdLCB1ID0gdyArIDEgfCAwLCBzID0gSVt3ICsgMSB8IDBdLCBJW3cgfCAwXSA9PSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzID4+PiAwID49IDE0NCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgciA9IHIgKyA2NTI4MCB8IDAsIHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSB1LCByID0gKHMgPDwgOSkgKyByIHwgMCwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IHUsIHQgPSA4LCByID0gKHMgPDwgOCkgKyByIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgLSAxIHwgMCwgciA9IHIgPDwgMSwgaSA9IGkgPDwgMSwgIShpID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IGYgPyAhZyA6IGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gZVt3ICsgNCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWYpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9IGwgLSA0IHwgMCwgdyA9IGVbbCArIDQgPj4gMl0gPj4+IDE3ICYgNCB8IChlW3MgPj4gMl0gPj4+IDE5ICYgMSB8IChuID4+PiAxNCAmIDE2IHwgKG4gPj4+IDE2ICYgNjQgfCBuICYgMTcwKSkpLCBoID0geSArIChJW3cgKyAzOTUyMCB8IDBdIDw8IDIpIHwgMCwgYyA9IGVbaCA+PiAyXSwgZiA9IGVbYyA+PiAyXSwgaSA9IGkgLSBmIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID4+PiAxNiA+Pj4gMCA8IGYgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZyA9IGVbYyArIDQgPj4gMl0sIHUgPSBpID4+PiAwIDwgZiA+Pj4gMCwgZVtoID4+IDJdID0gZVtjICsgKHUgPyA4IDogMTIpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gZVtrICsgMTYgPj4gMl0sIGkgPSB0ICsgMSB8IDAsIGMgPSBJW3QgKyAxIHwgMF0sIElbdCB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPj4+IDAgPj0gMTQ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCByID0gciArIDY1MjgwIHwgMCwgdCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGksIHIgPSAoYyA8PCA5KSArIHIgfCAwLCB0ID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgdCA9IDgsIHIgPSAoYyA8PCA4KSArIHIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gdCAtIDEgfCAwLCByID0gciA8PCAxLCBmID0gZiA8PCAxLCAhKGYgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gZiwgZyA9IHUgPyBnIDogIWc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9IHIgLSAoZiA8PCAxNikgfCAwLCAhKGkgJiAzMjc2OCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZyA9IGVbYyArIDQgPj4gMl0sIGYgPSBpID4+PiAwIDwgZiA+Pj4gMCwgZVtoID4+IDJdID0gZVtjICsgKGYgPyAxMiA6IDgpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gZVtrICsgMTYgPj4gMl0sIHUgPSB0ICsgMSB8IDAsIGMgPSBJW3QgKyAxIHwgMF0sIElbdCB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPj4+IDAgPj0gMTQ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCByID0gciArIDY1MjgwIHwgMCwgdCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IHUsIHIgPSAoYyA8PCA5KSArIHIgfCAwLCB0ID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gdSwgdCA9IDgsIHIgPSAoYyA8PCA4KSArIHIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gdCAtIDEgfCAwLCByID0gciA8PCAxLCBpID0gaSA8PCAxLCAhKGkgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gZiA/ICFnIDogZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcgPSBlW2MgKyA0ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBJW3cgKyAzOTc3NiB8IDBdLCBlW2EgPj4gMl0gPSAoZyB8IDApID09ICh1IHwgMCkgPyBFIDogbSwgZVtzID4+IDJdID0gZVtzID4+IDJdIHwgMzIsIGVbbCArIDQgPj4gMl0gPSBlW2wgKyA0ID4+IDJdIHwgOCwgZiA9IGwgLSAyNjggfCAwLCBlW2YgPj4gMl0gPSBlW2YgPj4gMl0gfCAxMzEwNzIsIGYgPSBsIC0gMjYwIHwgMCwgZVtmID4+IDJdID0gZVtmID4+IDJdIHwgMzI3NjgsIGYgPSBsIC0gMjY0IHwgMCwgdyA9IGYsIEogPSBlW2YgPj4gMl0sIGYgPSBnIF4gdSwgZVt3ID4+IDJdID0gSiB8IGYgPDwgMzEgfCA2NTUzNiwgbiA9IGYgPDwgMTkgfCBuIHwgMTY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuICYgMTY3NzczNDQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdyA9IG4gPj4+IDMgfCAwLCBoID0geSArIChJW2VbayArIDEwOCA+PiAyXSArICh3ICYgNDk1KSB8IDBdIDw8IDIpIHwgMCwgcyA9IGVbaCA+PiAyXSwgZiA9IGVbcyA+PiAyXSwgaSA9IGkgLSBmIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID4+PiAxNiA+Pj4gMCA8IGYgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZyA9IGVbcyArIDQgPj4gMl0sIHUgPSBpID4+PiAwIDwgZiA+Pj4gMCwgZVtoID4+IDJdID0gZVtzICsgKHUgPyA4IDogMTIpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gZVtrICsgMTYgPj4gMl0sIGkgPSB0ICsgMSB8IDAsIHMgPSBJW3QgKyAxIHwgMF0sIElbdCB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPj4+IDAgPj0gMTQ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCByID0gciArIDY1MjgwIHwgMCwgdCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGksIHIgPSAocyA8PCA5KSArIHIgfCAwLCB0ID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgdCA9IDgsIHIgPSAocyA8PCA4KSArIHIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gdCAtIDEgfCAwLCByID0gciA8PCAxLCBmID0gZiA8PCAxLCAhKGYgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gZiwgZiA9IHUgPyBnIDogIWc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9IHIgLSAoZiA8PCAxNikgfCAwLCAhKGkgJiAzMjc2OCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZyA9IGVbcyArIDQgPj4gMl0sIGYgPSBpID4+PiAwIDwgZiA+Pj4gMCwgZVtoID4+IDJdID0gZVtzICsgKGYgPyAxMiA6IDgpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gZVtrICsgMTYgPj4gMl0sIHUgPSB0ICsgMSB8IDAsIHMgPSBJW3QgKyAxIHwgMF0sIElbdCB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPj4+IDAgPj0gMTQ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCByID0gciArIDY1MjgwIHwgMCwgdCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IHUsIHIgPSAocyA8PCA5KSArIHIgfCAwLCB0ID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gdSwgdCA9IDgsIHIgPSAocyA8PCA4KSArIHIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gdCAtIDEgfCAwLCByID0gciA8PCAxLCBpID0gaSA8PCAxLCAhKGkgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gZiA/ICFnIDogZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBlW3MgKyA0ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzID0gbCAtIDQgfCAwLCB3ID0gZVtsICsgNCA+PiAyXSA+Pj4gMjAgJiA0IHwgKGVbcyA+PiAyXSA+Pj4gMjIgJiAxIHwgKG4gPj4+IDE1ICYgMTYgfCAobiA+Pj4gMTkgJiA2NCB8IHcgJiAxNzApKSksIGggPSB5ICsgKElbdyArIDM5NTIwIHwgMF0gPDwgMikgfCAwLCBjID0gZVtoID4+IDJdLCBmID0gZVtjID4+IDJdLCBpID0gaSAtIGYgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPj4+IDE2ID4+PiAwIDwgZiA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChnID0gZVtjICsgNCA+PiAyXSwgdSA9IGkgPj4+IDAgPCBmID4+PiAwLCBlW2ggPj4gMl0gPSBlW2MgKyAodSA/IDggOiAxMikgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG86IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSBlW2sgKyAxNiA+PiAyXSwgaSA9IHQgKyAxIHwgMCwgYyA9IElbdCArIDEgfCAwXSwgSVt0IHwgMF0gPT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA+Pj4gMCA+PSAxNDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHIgPSByICsgNjUyODAgfCAwLCB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgciA9IChjIDw8IDkpICsgciB8IDAsIHQgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBpLCB0ID0gOCwgciA9IChjIDw8IDgpICsgciB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0IC0gMSB8IDAsIHIgPSByIDw8IDEsIGYgPSBmIDw8IDEsICEoZiA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBmLCB1ID0gdSA/IGcgOiAhZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0gciAtIChmIDw8IDE2KSB8IDAsICEoaSAmIDMyNzY4KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChnID0gZVtjICsgNCA+PiAyXSwgZiA9IGkgPj4+IDAgPCBmID4+PiAwLCBlW2ggPj4gMl0gPSBlW2MgKyAoZiA/IDEyIDogOCkgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG86IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSBlW2sgKyAxNiA+PiAyXSwgdSA9IHQgKyAxIHwgMCwgYyA9IElbdCArIDEgfCAwXSwgSVt0IHwgMF0gPT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA+Pj4gMCA+PSAxNDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHIgPSByICsgNjUyODAgfCAwLCB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gdSwgciA9IChjIDw8IDkpICsgciB8IDAsIHQgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSB1LCB0ID0gOCwgciA9IChjIDw8IDgpICsgciB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0IC0gMSB8IDAsIHIgPSByIDw8IDEsIGkgPSBpIDw8IDEsICEoaSA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBmID8gIWcgOiBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IGVbYyArIDQgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IElbdyArIDM5Nzc2IHwgMF0sIGVbYSArIDI1NiA+PiAyXSA9ICh1IHwgMCkgPT0gKGYgfCAwKSA/IEUgOiBtLCBlW3MgPj4gMl0gPSBlW3MgPj4gMl0gfCAyNTYsIGVbbCArIDQgPj4gMl0gPSBlW2wgKyA0ID4+IDJdIHwgNjQsIG4gPSAoZiBeIHUpIDw8IDIyIHwgbiB8IDEyODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHc6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gJiAxMzQyMTg3NTIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdyA9IG4gPj4+IDYgfCAwLCBoID0geSArIChJW2VbayArIDEwOCA+PiAyXSArICh3ICYgNDk1KSB8IDBdIDw8IDIpIHwgMCwgcyA9IGVbaCA+PiAyXSwgZiA9IGVbcyA+PiAyXSwgaSA9IGkgLSBmIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID4+PiAxNiA+Pj4gMCA8IGYgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZyA9IGVbcyArIDQgPj4gMl0sIHUgPSBpID4+PiAwIDwgZiA+Pj4gMCwgZVtoID4+IDJdID0gZVtzICsgKHUgPyA4IDogMTIpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gZVtrICsgMTYgPj4gMl0sIGkgPSB0ICsgMSB8IDAsIHMgPSBJW3QgKyAxIHwgMF0sIElbdCB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPj4+IDAgPj0gMTQ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCByID0gciArIDY1MjgwIHwgMCwgdCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGksIHIgPSAocyA8PCA5KSArIHIgfCAwLCB0ID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgdCA9IDgsIHIgPSAocyA8PCA4KSArIHIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gdCAtIDEgfCAwLCByID0gciA8PCAxLCBmID0gZiA8PCAxLCAhKGYgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gZiwgZiA9IHUgPyBnIDogIWc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9IHIgLSAoZiA8PCAxNikgfCAwLCAhKGkgJiAzMjc2OCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZyA9IGVbcyArIDQgPj4gMl0sIGYgPSBpID4+PiAwIDwgZiA+Pj4gMCwgZVtoID4+IDJdID0gZVtzICsgKGYgPyAxMiA6IDgpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gZVtrICsgMTYgPj4gMl0sIHUgPSB0ICsgMSB8IDAsIHMgPSBJW3QgKyAxIHwgMF0sIElbdCB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPj4+IDAgPj0gMTQ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCByID0gciArIDY1MjgwIHwgMCwgdCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IHUsIHIgPSAocyA8PCA5KSArIHIgfCAwLCB0ID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gdSwgdCA9IDgsIHIgPSAocyA8PCA4KSArIHIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gdCAtIDEgfCAwLCByID0gciA8PCAxLCBpID0gaSA8PCAxLCAhKGkgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gZiA/ICFnIDogZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBlW3MgKyA0ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzID0gbCAtIDQgfCAwLCB3ID0gZVtsICsgNCA+PiAyXSA+Pj4gMjMgJiA0IHwgKGVbcyA+PiAyXSA+Pj4gMjUgJiAxIHwgKG4gPj4+IDE4ICYgMTYgfCAobiA+Pj4gMjIgJiA2NCB8IHcgJiAxNzApKSksIGggPSB5ICsgKElbdyArIDM5NTIwIHwgMF0gPDwgMikgfCAwLCBjID0gZVtoID4+IDJdLCBmID0gZVtjID4+IDJdLCBpID0gaSAtIGYgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPj4+IDE2ID4+PiAwIDwgZiA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChnID0gZVtjICsgNCA+PiAyXSwgdSA9IGkgPj4+IDAgPCBmID4+PiAwLCBlW2ggPj4gMl0gPSBlW2MgKyAodSA/IDggOiAxMikgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG86IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSBlW2sgKyAxNiA+PiAyXSwgaSA9IHQgKyAxIHwgMCwgYyA9IElbdCArIDEgfCAwXSwgSVt0IHwgMF0gPT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA+Pj4gMCA+PSAxNDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHIgPSByICsgNjUyODAgfCAwLCB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgciA9IChjIDw8IDkpICsgciB8IDAsIHQgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBpLCB0ID0gOCwgciA9IChjIDw8IDgpICsgciB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0IC0gMSB8IDAsIHIgPSByIDw8IDEsIGYgPSBmIDw8IDEsICEoZiA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBmLCB1ID0gdSA/IGcgOiAhZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0gciAtIChmIDw8IDE2KSB8IDAsICEoaSAmIDMyNzY4KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChnID0gZVtjICsgNCA+PiAyXSwgZiA9IGkgPj4+IDAgPCBmID4+PiAwLCBlW2ggPj4gMl0gPSBlW2MgKyAoZiA/IDEyIDogOCkgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG86IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSBlW2sgKyAxNiA+PiAyXSwgdSA9IHQgKyAxIHwgMCwgYyA9IElbdCArIDEgfCAwXSwgSVt0IHwgMF0gPT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA+Pj4gMCA+PSAxNDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHIgPSByICsgNjUyODAgfCAwLCB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gdSwgciA9IChjIDw8IDkpICsgciB8IDAsIHQgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSB1LCB0ID0gOCwgciA9IChjIDw8IDgpICsgciB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0IC0gMSB8IDAsIHIgPSByIDw8IDEsIGkgPSBpIDw8IDEsICEoaSA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBmID8gIWcgOiBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IGVbYyArIDQgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IElbdyArIDM5Nzc2IHwgMF0sIGVbYSArIDUxMiA+PiAyXSA9ICh1IHwgMCkgPT0gKGYgfCAwKSA/IEUgOiBtLCBlW3MgPj4gMl0gPSBlW3MgPj4gMl0gfCAyMDQ4LCBlW2wgKyA0ID4+IDJdID0gZVtsICsgNCA+PiAyXSB8IDUxMiwgbiA9IChmIF4gdSkgPDwgMjUgfCBuIHwgMTAyNDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuICYgMTA3Mzc1MDAxNikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcgPSBuID4+PiA5IHwgMCwgaCA9IHkgKyAoSVtlW2sgKyAxMDggPj4gMl0gKyAodyAmIDQ5NSkgfCAwXSA8PCAyKSB8IDAsIHMgPSBlW2ggPj4gMl0sIGYgPSBlW3MgPj4gMl0sIGkgPSBpIC0gZiB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID4+PiAxNiA+Pj4gMCA8IGYgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGcgPSBlW3MgKyA0ID4+IDJdLCB1ID0gaSA+Pj4gMCA8IGYgPj4+IDAsIGVbaCA+PiAyXSA9IGVbcyArICh1ID8gOCA6IDEyKSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG46IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSBlW2sgKyAxNiA+PiAyXSwgaSA9IHQgKyAxIHwgMCwgcyA9IElbdCArIDEgfCAwXSwgSVt0IHwgMF0gPT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPj4+IDAgPj0gMTQ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgciA9IHIgKyA2NTI4MCB8IDAsIHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBpLCByID0gKHMgPDwgOSkgKyByIHwgMCwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGksIHQgPSA4LCByID0gKHMgPDwgOCkgKyByIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gdCAtIDEgfCAwLCByID0gciA8PCAxLCBmID0gZiA8PCAxLCAhKGYgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gZiwgZiA9IHUgPyBnIDogIWc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9IHIgLSAoZiA8PCAxNikgfCAwLCAhKGkgJiAzMjc2OCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGcgPSBlW3MgKyA0ID4+IDJdLCBmID0gaSA+Pj4gMCA8IGYgPj4+IDAsIGVbaCA+PiAyXSA9IGVbcyArIChmID8gMTIgOiA4KSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG46IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSBlW2sgKyAxNiA+PiAyXSwgdSA9IHQgKyAxIHwgMCwgcyA9IElbdCArIDEgfCAwXSwgSVt0IHwgMF0gPT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPj4+IDAgPj0gMTQ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgciA9IHIgKyA2NTI4MCB8IDAsIHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSB1LCByID0gKHMgPDwgOSkgKyByIHwgMCwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IHUsIHQgPSA4LCByID0gKHMgPDwgOCkgKyByIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gdCAtIDEgfCAwLCByID0gciA8PCAxLCBpID0gaSA8PCAxLCAhKGkgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gZiA/ICFnIDogZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBlW3MgKyA0ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IGwgLSA0IHwgMCwgTyA9IGVbbCArIDQgPj4gMl0gPj4+IDI2ICYgNCB8IChlW2MgPj4gMl0gPj4+IDI4ICYgMSB8IChuID4+PiAyMSAmIDE2IHwgKG4gPj4+IDI1ICYgNjQgfCB3ICYgMTcwKSkpLCBoID0geSArIChJW08gKyAzOTUyMCB8IDBdIDw8IDIpIHwgMCwgQiA9IGVbaCA+PiAyXSwgZiA9IGVbQiA+PiAyXSwgaSA9IGkgLSBmIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPj4+IDE2ID4+PiAwIDwgZiA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGcgPSBlW0IgKyA0ID4+IDJdLCB1ID0gaSA+Pj4gMCA8IGYgPj4+IDAsIGVbaCA+PiAyXSA9IGVbKHUgPyA4IDogMTIpICsgQiA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3ID0gZVtrICsgMTYgPj4gMl0sIGkgPSB3ICsgMSB8IDAsIHMgPSBJW3cgKyAxIHwgMF0sIElbdyB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocyA+Pj4gMCA+PSAxNDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgciA9IHIgKyA2NTI4MCB8IDAsIHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBpLCByID0gKHMgPDwgOSkgKyByIHwgMCwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGksIHQgPSA4LCByID0gKHMgPDwgOCkgKyByIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0IC0gMSB8IDAsIHIgPSByIDw8IDEsIGYgPSBmIDw8IDEsICEoZiA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBmLCB1ID0gdSA/IGcgOiAhZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0gciAtIChmIDw8IDE2KSB8IDAsICEoaSAmIDMyNzY4KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGcgPSBlW0IgKyA0ID4+IDJdLCBmID0gaSA+Pj4gMCA8IGYgPj4+IDAsIGVbaCA+PiAyXSA9IGVbKGYgPyAxMiA6IDgpICsgQiA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3ID0gZVtrICsgMTYgPj4gMl0sIHUgPSB3ICsgMSB8IDAsIHMgPSBJW3cgKyAxIHwgMF0sIElbdyB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocyA+Pj4gMCA+PSAxNDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgciA9IHIgKyA2NTI4MCB8IDAsIHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSB1LCByID0gKHMgPDwgOSkgKyByIHwgMCwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IHUsIHQgPSA4LCByID0gKHMgPDwgOCkgKyByIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0IC0gMSB8IDAsIHIgPSByIDw8IDEsIGkgPSBpIDw8IDEsICEoaSA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBmID8gIWcgOiBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IGVbQiArIDQgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBJW08gKyAzOTc3NiB8IDBdLCBlW2EgKyA3NjggPj4gMl0gPSAodSB8IDApID09IChmIHwgMCkgPyBFIDogbSwgZVtjID4+IDJdID0gZVtjID4+IDJdIHwgMTYzODQsIGVbbCArIDQgPj4gMl0gPSBlW2wgKyA0ID4+IDJdIHwgNDA5NiwgZVtsICsgMjYwID4+IDJdID0gZVtsICsgMjYwID4+IDJdIHwgNCwgZVtsICsgMjY4ID4+IDJdID0gZVtsICsgMjY4ID4+IDJdIHwgMSwgZiA9IGYgXiB1LCBlW2wgKyAyNjQgPj4gMl0gPSBlW2wgKyAyNjQgPj4gMl0gfCBmIDw8IDE4IHwgMiwgbiA9IGYgPDwgMjggfCBuIHwgODE5MjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2wgPj4gMl0gPSBuICYgLTEyMjY4MzM5MjE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9IGwgKyA0IHwgMCwgZiA9IGEgKyA0IHwgMCwgSCA9IEggKyAxIHwgMCwgKEggfCAwKSA9PSA2NCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID0gbCArIDEyIHwgMCwgZiA9IGEgKyA3NzIgfCAwLCB1ID0gQyA+Pj4gMCA8IDYwLCBDID0gQyArIDQgfCAwLCAhdSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IDEgPDwgcDIsIEogPSBpID4+PiAxIHwgaSwgbyA9IGVbayArIDEyMCA+PiAyXSwgZiA9IChvICsgKGMyIDw8IDIpIHwgMCkgKyAxMiB8IDAsIG4gPSBlW2sgKyAxMjggPj4gMl0sIHQgPSBlW2sgKyA4ID4+IDJdLCBpID0gZVtrICsgNCA+PiAyXSwgciA9IGVbayA+PiAyXSwgaCA9IGVbayArIDEwNCA+PiAyXSwgdyA9IGVbayArIDExNiA+PiAyXSwgUzIgJiA4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA+Pj4gMCA8IDQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjMikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1ID0gayArIDEwMCB8IDAsIHYgPSBrICsgOTYgfCAwLCBtID0gWihjMiwgMTIpLCBIID0gYzIgPDwgMywgeSA9IDAgLSBKIHwgMCwgUCA9IGsgKyAyOCB8IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoRSA9IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IGYsIGYgPSBlW2YgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG46IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGYgJiAyMDk3MTY4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSBQICsgKElbZVtrICsgMTA4ID4+IDJdICsgKGYgJiA0OTUpIHwgMF0gPDwgMikgfCAwLCBsID0gZVtoID4+IDJdLCBuID0gZVtsID4+IDJdLCBpID0gaSAtIG4gfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPj4+IDE2ID4+PiAwID49IG4gPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0gciAtIChuIDw8IDE2KSB8IDAsIG8gPSBlW2wgKyA0ID4+IDJdLCBpICYgMzI3NjgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGcgPSBlW2wgKyA0ID4+IDJdLCBuID0gaSA+Pj4gMCA8IG4gPj4+IDAsIGVbaCA+PiAyXSA9IGVbbCArIChuID8gMTIgOiA4KSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGVbayArIDE2ID4+IDJdLCBvID0gbCArIDEgfCAwLCBzID0gSVtsICsgMSB8IDBdLCBJW2wgfCAwXSAhPSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gbywgdCA9IDgsIHIgPSAocyA8PCA4KSArIHIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPj4+IDAgPD0gMTQzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IG8sIHIgPSAocyA8PCA5KSArIHIgfCAwLCB0ID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCByID0gciArIDY1MjgwIHwgMCwgdCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0IC0gMSB8IDAsIHIgPSByIDw8IDEsIGkgPSBpIDw8IDEsICEoaSA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gPSBuID8gIWcgOiBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChnID0gZVtsICsgNCA+PiAyXSwgbyA9IGkgPj4+IDAgPCBuID4+PiAwLCBlW2ggPj4gMl0gPSBlW2wgKyAobyA/IDggOiAxMikgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gZVtrICsgMTYgPj4gMl0sIGkgPSBsICsgMSB8IDAsIHMgPSBJW2wgKyAxIHwgMF0sIElbbCB8IDBdICE9IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgdCA9IDgsIHIgPSAocyA8PCA4KSArIHIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPj4+IDAgPD0gMTQzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBpLCByID0gKHMgPDwgOSkgKyByIHwgMCwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgciA9IHIgKyA2NTI4MCB8IDAsIHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0IC0gMSB8IDAsIHIgPSByIDw8IDEsIG4gPSBuIDw8IDEsICEobiA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBuLCBvID0gbyA/IGcgOiAhZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW8pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9IGEgLSA0IHwgMCwgbCA9IGVbYSArIDQgPj4gMl0gPj4+IDE3ICYgNCB8IChlW3MgPj4gMl0gPj4+IDE5ICYgMSB8IChmID4+PiAxNCAmIDE2IHwgKGYgPj4+IDE2ICYgNjQgfCBmICYgMTcwKSkpLCBoID0gUCArIChJW2wgKyAzOTUyMCB8IDBdIDw8IDIpIHwgMCwgQiA9IGVbaCA+PiAyXSwgbiA9IGVbQiA+PiAyXSwgaSA9IGkgLSBuIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID4+PiAxNiA+Pj4gMCA+PSBuID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9IHIgLSAobiA8PCAxNikgfCAwLCBvID0gZVtCICsgNCA+PiAyXSwgaSAmIDMyNzY4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChnID0gZVtCICsgNCA+PiAyXSwgbiA9IGkgPj4+IDAgPCBuID4+PiAwLCBlW2ggPj4gMl0gPSBlW0IgKyAobiA/IDEyIDogOCkgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSBlW2sgKyAxNiA+PiAyXSwgbyA9IHQgKyAxIHwgMCwgQiA9IElbdCArIDEgfCAwXSwgSVt0IHwgMF0gIT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IG8sIHQgPSA4LCByID0gKEIgPDwgOCkgKyByIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChCID4+PiAwIDw9IDE0MykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBvLCByID0gKEIgPDwgOSkgKyByIHwgMCwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBCOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgciA9IHIgKyA2NTI4MCB8IDAsIHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gdCAtIDEgfCAwLCByID0gciA8PCAxLCBpID0gaSA8PCAxLCAhKGkgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvID0gbiA/ICFnIDogZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZyA9IGVbQiArIDQgPj4gMl0sIG8gPSBpID4+PiAwIDwgbiA+Pj4gMCwgZVtoID4+IDJdID0gZVtCICsgKG8gPyA4IDogMTIpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBCOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IGVbayArIDE2ID4+IDJdLCBpID0gdCArIDEgfCAwLCBCID0gSVt0ICsgMSB8IDBdLCBJW3QgfCAwXSAhPSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGksIHQgPSA4LCByID0gKEIgPDwgOCkgKyByIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBCOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChCID4+PiAwIDw9IDE0MykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgciA9IChCIDw8IDkpICsgciB8IDAsIHQgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHIgPSByICsgNjUyODAgfCAwLCB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gdCAtIDEgfCAwLCByID0gciA8PCAxLCBuID0gbiA8PCAxLCAhKG4gPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gbiwgbyA9IG8gPyBnIDogIWc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IElbbCArIDM5Nzc2IHwgMF0sIGVbdyA+PiAyXSA9IChvIHwgMCkgPT0gKG4gfCAwKSA/IEogOiB5LCBlW3MgPj4gMl0gPSBlW3MgPj4gMl0gfCAzMiwgZVthICsgNCA+PiAyXSA9IGVbYSArIDQgPj4gMl0gfCA4LCBmID0gKG4gXiBvKSA8PCAxOSB8IGYgfCAxNjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG46IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGYgJiAxNjc3NzM0NCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gZiA+Pj4gMyB8IDAsIGggPSBQICsgKElbZVtrICsgMTA4ID4+IDJdICsgKGwgJiA0OTUpIHwgMF0gPDwgMikgfCAwLCBzID0gZVtoID4+IDJdLCBuID0gZVtzID4+IDJdLCBpID0gaSAtIG4gfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPj4+IDE2ID4+PiAwID49IG4gPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0gciAtIChuIDw8IDE2KSB8IDAsIG8gPSBlW3MgKyA0ID4+IDJdLCBpICYgMzI3NjgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGcgPSBlW3MgKyA0ID4+IDJdLCBuID0gaSA+Pj4gMCA8IG4gPj4+IDAsIGVbaCA+PiAyXSA9IGVbcyArIChuID8gMTIgOiA4KSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IGVbayArIDE2ID4+IDJdLCBvID0gdCArIDEgfCAwLCBzID0gSVt0ICsgMSB8IDBdLCBJW3QgfCAwXSAhPSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gbywgdCA9IDgsIHIgPSAocyA8PCA4KSArIHIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPj4+IDAgPD0gMTQzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IG8sIHIgPSAocyA8PCA5KSArIHIgfCAwLCB0ID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCByID0gciArIDY1MjgwIHwgMCwgdCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0IC0gMSB8IDAsIHIgPSByIDw8IDEsIGkgPSBpIDw8IDEsICEoaSA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gPSBuID8gIWcgOiBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChnID0gZVtzICsgNCA+PiAyXSwgbyA9IGkgPj4+IDAgPCBuID4+PiAwLCBlW2ggPj4gMl0gPSBlW3MgKyAobyA/IDggOiAxMikgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gZVtrICsgMTYgPj4gMl0sIGkgPSB0ICsgMSB8IDAsIHMgPSBJW3QgKyAxIHwgMF0sIElbdCB8IDBdICE9IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgdCA9IDgsIHIgPSAocyA8PCA4KSArIHIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPj4+IDAgPD0gMTQzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBpLCByID0gKHMgPDwgOSkgKyByIHwgMCwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgciA9IHIgKyA2NTI4MCB8IDAsIHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0IC0gMSB8IDAsIHIgPSByIDw8IDEsIG4gPSBuIDw8IDEsICEobiA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBuLCBvID0gbyA/IGcgOiAhZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW8pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9IGEgLSA0IHwgMCwgbCA9IGVbYSArIDQgPj4gMl0gPj4+IDIwICYgNCB8IChlW3MgPj4gMl0gPj4+IDIyICYgMSB8IChmID4+PiAxNSAmIDE2IHwgKGYgPj4+IDE5ICYgNjQgfCBsICYgMTcwKSkpLCBoID0gUCArIChJW2wgKyAzOTUyMCB8IDBdIDw8IDIpIHwgMCwgQiA9IGVbaCA+PiAyXSwgbiA9IGVbQiA+PiAyXSwgaSA9IGkgLSBuIHwgMCwgZzIgPSAoYzIgPDwgMikgKyB3IHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID4+PiAxNiA+Pj4gMCA+PSBuID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9IHIgLSAobiA8PCAxNikgfCAwLCBvID0gZVtCICsgNCA+PiAyXSwgaSAmIDMyNzY4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChnID0gZVtCICsgNCA+PiAyXSwgbiA9IGkgPj4+IDAgPCBuID4+PiAwLCBlW2ggPj4gMl0gPSBlW0IgKyAobiA/IDEyIDogOCkgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSBlW2sgKyAxNiA+PiAyXSwgbyA9IHQgKyAxIHwgMCwgQiA9IElbdCArIDEgfCAwXSwgSVt0IHwgMF0gIT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IG8sIHQgPSA4LCByID0gKEIgPDwgOCkgKyByIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChCID4+PiAwIDw9IDE0MykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBvLCByID0gKEIgPDwgOSkgKyByIHwgMCwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBCOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgciA9IHIgKyA2NTI4MCB8IDAsIHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gdCAtIDEgfCAwLCByID0gciA8PCAxLCBpID0gaSA8PCAxLCAhKGkgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvID0gbiA/ICFnIDogZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZyA9IGVbQiArIDQgPj4gMl0sIG8gPSBpID4+PiAwIDwgbiA+Pj4gMCwgZVtoID4+IDJdID0gZVtCICsgKG8gPyA4IDogMTIpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBCOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IGVbayArIDE2ID4+IDJdLCBpID0gdCArIDEgfCAwLCBCID0gSVt0ICsgMSB8IDBdLCBJW3QgfCAwXSAhPSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGksIHQgPSA4LCByID0gKEIgPDwgOCkgKyByIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBCOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChCID4+PiAwIDw9IDE0MykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgciA9IChCIDw8IDkpICsgciB8IDAsIHQgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHIgPSByICsgNjUyODAgfCAwLCB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gdCAtIDEgfCAwLCByID0gciA8PCAxLCBuID0gbiA8PCAxLCAhKG4gPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gbiwgbyA9IG8gPyBnIDogIWc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IElbbCArIDM5Nzc2IHwgMF0sIGVbZzIgPj4gMl0gPSAobyB8IDApID09IChuIHwgMCkgPyBKIDogeSwgZVtzID4+IDJdID0gZVtzID4+IDJdIHwgMjU2LCBlW2EgKyA0ID4+IDJdID0gZVthICsgNCA+PiAyXSB8IDY0LCBmID0gKG4gXiBvKSA8PCAyMiB8IGYgfCAxMjg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmICYgMTM0MjE4NzUyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBmID4+PiA2IHwgMCwgaCA9IFAgKyAoSVtlW2sgKyAxMDggPj4gMl0gKyAobCAmIDQ5NSkgfCAwXSA8PCAyKSB8IDAsIHMgPSBlW2ggPj4gMl0sIG4gPSBlW3MgPj4gMl0sIGkgPSBpIC0gbiB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG86IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA+Pj4gMTYgPj4+IDAgPj0gbiA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSByIC0gKG4gPDwgMTYpIHwgMCwgbyA9IGVbcyArIDQgPj4gMl0sIGkgJiAzMjc2OCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZyA9IGVbcyArIDQgPj4gMl0sIG4gPSBpID4+PiAwIDwgbiA+Pj4gMCwgZVtoID4+IDJdID0gZVtzICsgKG4gPyAxMiA6IDgpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBCOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gZVtrICsgMTYgPj4gMl0sIG8gPSB0ICsgMSB8IDAsIHMgPSBJW3QgKyAxIHwgMF0sIElbdCB8IDBdICE9IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBvLCB0ID0gOCwgciA9IChzIDw8IDgpICsgciB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBCOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocyA+Pj4gMCA8PSAxNDMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gbywgciA9IChzIDw8IDkpICsgciB8IDAsIHQgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHIgPSByICsgNjUyODAgfCAwLCB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgLSAxIHwgMCwgciA9IHIgPDwgMSwgaSA9IGkgPDwgMSwgIShpID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyA9IG4gPyAhZyA6IGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGcgPSBlW3MgKyA0ID4+IDJdLCBvID0gaSA+Pj4gMCA8IG4gPj4+IDAsIGVbaCA+PiAyXSA9IGVbcyArIChvID8gOCA6IDEyKSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSBlW2sgKyAxNiA+PiAyXSwgaSA9IHQgKyAxIHwgMCwgcyA9IElbdCArIDEgfCAwXSwgSVt0IHwgMF0gIT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBpLCB0ID0gOCwgciA9IChzIDw8IDgpICsgciB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocyA+Pj4gMCA8PSAxNDMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGksIHIgPSAocyA8PCA5KSArIHIgfCAwLCB0ID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBCOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCByID0gciArIDY1MjgwIHwgMCwgdCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgLSAxIHwgMCwgciA9IHIgPDwgMSwgbiA9IG4gPDwgMSwgIShuID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IG4sIG8gPSBvID8gZyA6ICFnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzID0gYSAtIDQgfCAwLCBsID0gZVthICsgNCA+PiAyXSA+Pj4gMjMgJiA0IHwgKGVbcyA+PiAyXSA+Pj4gMjUgJiAxIHwgKGYgPj4+IDE4ICYgMTYgfCAoZiA+Pj4gMjIgJiA2NCB8IGwgJiAxNzApKSksIGggPSBQICsgKElbbCArIDM5NTIwIHwgMF0gPDwgMikgfCAwLCBCID0gZVtoID4+IDJdLCBuID0gZVtCID4+IDJdLCBpID0gaSAtIG4gfCAwLCBnMiA9IHcgKyBIIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID4+PiAxNiA+Pj4gMCA+PSBuID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9IHIgLSAobiA8PCAxNikgfCAwLCBvID0gZVtCICsgNCA+PiAyXSwgaSAmIDMyNzY4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChnID0gZVtCICsgNCA+PiAyXSwgbiA9IGkgPj4+IDAgPCBuID4+PiAwLCBlW2ggPj4gMl0gPSBlW0IgKyAobiA/IDEyIDogOCkgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSBlW2sgKyAxNiA+PiAyXSwgbyA9IHQgKyAxIHwgMCwgQiA9IElbdCArIDEgfCAwXSwgSVt0IHwgMF0gIT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IG8sIHQgPSA4LCByID0gKEIgPDwgOCkgKyByIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChCID4+PiAwIDw9IDE0MykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBvLCByID0gKEIgPDwgOSkgKyByIHwgMCwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBCOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgciA9IHIgKyA2NTI4MCB8IDAsIHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gdCAtIDEgfCAwLCByID0gciA8PCAxLCBpID0gaSA8PCAxLCAhKGkgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvID0gbiA/ICFnIDogZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZyA9IGVbQiArIDQgPj4gMl0sIG8gPSBpID4+PiAwIDwgbiA+Pj4gMCwgZVtoID4+IDJdID0gZVtCICsgKG8gPyA4IDogMTIpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBCOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IGVbayArIDE2ID4+IDJdLCBpID0gdCArIDEgfCAwLCBCID0gSVt0ICsgMSB8IDBdLCBJW3QgfCAwXSAhPSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGksIHQgPSA4LCByID0gKEIgPDwgOCkgKyByIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBCOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChCID4+PiAwIDw9IDE0MykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgciA9IChCIDw8IDkpICsgciB8IDAsIHQgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHIgPSByICsgNjUyODAgfCAwLCB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gdCAtIDEgfCAwLCByID0gciA8PCAxLCBuID0gbiA8PCAxLCAhKG4gPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gbiwgbyA9IG8gPyBnIDogIWc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IElbbCArIDM5Nzc2IHwgMF0sIGVbZzIgPj4gMl0gPSAobyB8IDApID09IChuIHwgMCkgPyBKIDogeSwgZVtzID4+IDJdID0gZVtzID4+IDJdIHwgMjA0OCwgZVthICsgNCA+PiAyXSA9IGVbYSArIDQgPj4gMl0gfCA1MTIsIGYgPSAobiBeIG8pIDw8IDI1IHwgZiB8IDEwMjQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZiAmIDEwNzM3NTAwMTYpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gZiA+Pj4gOSB8IDAsIGggPSBQICsgKElbZVtrICsgMTA4ID4+IDJdICsgKGwgJiA0OTUpIHwgMF0gPDwgMikgfCAwLCBzID0gZVtoID4+IDJdLCBuID0gZVtzID4+IDJdLCBpID0gaSAtIG4gfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA+Pj4gMTYgPj4+IDAgPj0gbiA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0gciAtIChuIDw8IDE2KSB8IDAsIG8gPSBlW3MgKyA0ID4+IDJdLCBpICYgMzI3NjgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZyA9IGVbcyArIDQgPj4gMl0sIG4gPSBpID4+PiAwIDwgbiA+Pj4gMCwgZVtoID4+IDJdID0gZVtzICsgKG4gPyAxMiA6IDgpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IGVbayArIDE2ID4+IDJdLCBvID0gdCArIDEgfCAwLCBzID0gSVt0ICsgMSB8IDBdLCBJW3QgfCAwXSAhPSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IG8sIHQgPSA4LCByID0gKHMgPDwgOCkgKyByIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzID4+PiAwIDw9IDE0MykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gbywgciA9IChzIDw8IDkpICsgciB8IDAsIHQgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHIgPSByICsgNjUyODAgfCAwLCB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gdCAtIDEgfCAwLCByID0gciA8PCAxLCBpID0gaSA8PCAxLCAhKGkgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvID0gbiA/ICFnIDogZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZyA9IGVbcyArIDQgPj4gMl0sIG8gPSBpID4+PiAwIDwgbiA+Pj4gMCwgZVtoID4+IDJdID0gZVtzICsgKG8gPyA4IDogMTIpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG86IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSBlW2sgKyAxNiA+PiAyXSwgaSA9IHQgKyAxIHwgMCwgcyA9IElbdCArIDEgfCAwXSwgSVt0IHwgMF0gIT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgdCA9IDgsIHIgPSAocyA8PCA4KSArIHIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPj4+IDAgPD0gMTQzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgciA9IChzIDw8IDkpICsgciB8IDAsIHQgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHIgPSByICsgNjUyODAgfCAwLCB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0IC0gMSB8IDAsIHIgPSByIDw8IDEsIG4gPSBuIDw8IDEsICEobiA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBuLCBvID0gbyA/IGcgOiAhZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE8gPSBhIC0gNCB8IDAsIHcyID0gZVthICsgNCA+PiAyXSA+Pj4gMjYgJiA0IHwgKGVbTyA+PiAyXSA+Pj4gMjggJiAxIHwgKGYgPj4+IDIxICYgMTYgfCAoZiA+Pj4gMjUgJiA2NCB8IGwgJiAxNzApKSksIGggPSBQICsgKElbdzIgKyAzOTUyMCB8IDBdIDw8IDIpIHwgMCwgQiA9IGVbaCA+PiAyXSwgbiA9IGVbQiA+PiAyXSwgaSA9IGkgLSBuIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gPSBlW3YgPj4gMl0sIGYgPSBlW28gPj4gMl0sIGkgPSBpIC0gZiB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPj4+IDE2ID4+PiAwID49IGYgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSByIC0gKGYgPDwgMTYpIHwgMCwgbiA9IGVbbyArIDQgPj4gMl0sIGkgJiAzMjc2OCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGggPSBlW28gKyA0ID4+IDJdLCBmID0gaSA+Pj4gMCA8IGYgPj4+IDAsIGVbdiA+PiAyXSA9IGVbbyArIChmID8gMTIgOiA4KSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvID0gZVtrICsgMTYgPj4gMl0sIG4gPSBvICsgMSB8IDAsIGwgPSBJW28gKyAxIHwgMF0sIElbbyB8IDBdICE9IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IG4sIHQgPSA4LCByID0gKGwgPDwgOCkgKyByIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID4+PiAwIDw9IDE0MykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IG4sIHIgPSAobCA8PCA5KSArIHIgfCAwLCB0ID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCByID0gciArIDY1MjgwIHwgMCwgdCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gdCAtIDEgfCAwLCByID0gciA8PCAxLCBpID0gaSA8PCAxLCAhKGkgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gZiA/ICFoIDogaDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaCA9IGVbbyArIDQgPj4gMl0sIG4gPSBpID4+PiAwIDwgZiA+Pj4gMCwgZVt2ID4+IDJdID0gZVtvICsgKG4gPyA4IDogMTIpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvID0gZVtrICsgMTYgPj4gMl0sIGkgPSBvICsgMSB8IDAsIGwgPSBJW28gKyAxIHwgMF0sIElbbyB8IDBdICE9IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBpLCB0ID0gOCwgciA9IChsIDw8IDgpICsgciB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA+Pj4gMCA8PSAxNDMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgciA9IChsIDw8IDkpICsgciB8IDAsIHQgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHIgPSByICsgNjUyODAgfCAwLCB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgLSAxIHwgMCwgciA9IHIgPDwgMSwgZiA9IGYgPDwgMSwgIShmID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGYsIG4gPSBuID8gaCA6ICFoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSB2OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IGVbdSA+PiAyXSwgZiA9IGVbbiA+PiAyXSwgaSA9IGkgLSBmIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA+Pj4gMTYgPj4+IDAgPj0gZiA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9IHIgLSAoZiA8PCAxNikgfCAwLCBvID0gZVtuICsgNCA+PiAyXSwgaSAmIDMyNzY4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobCA9IGVbbiArIDQgPj4gMl0sIGYgPSBpID4+PiAwIDwgZiA+Pj4gMCwgbiA9IGVbKGYgPyAxMiA6IDgpICsgbiA+PiAyXSwgZVt1ID4+IDJdID0gbjsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoID0gZVtrICsgMTYgPj4gMl0sIG8gPSBoICsgMSB8IDAsIGcgPSBJW2ggKyAxIHwgMF0sIElbaCB8IDBdICE9IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IG8sIHQgPSA4LCByID0gKGcgPDwgOCkgKyByIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnID4+PiAwIDw9IDE0MykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IG8sIHIgPSAoZyA8PCA5KSArIHIgfCAwLCB0ID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCByID0gciArIDY1MjgwIHwgMCwgdCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gdCAtIDEgfCAwLCByID0gciA8PCAxLCBpID0gaSA8PCAxLCAhKGkgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvID0gZiA/ICFsIDogbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobCA9IGVbbiArIDQgPj4gMl0sIG8gPSBpID4+PiAwIDwgZiA+Pj4gMCwgbiA9IGVbKG8gPyA4IDogMTIpICsgbiA+PiAyXSwgZVt1ID4+IDJdID0gbjsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaCA9IGVbayArIDE2ID4+IDJdLCBpID0gaCArIDEgfCAwLCBnID0gSVtoICsgMSB8IDBdLCBJW2ggfCAwXSAhPSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgdCA9IDgsIHIgPSAoZyA8PCA4KSArIHIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGcgPj4+IDAgPD0gMTQzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGksIHIgPSAoZyA8PCA5KSArIHIgfCAwLCB0ID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCByID0gciArIDY1MjgwIHwgMCwgdCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0IC0gMSB8IDAsIHIgPSByIDw8IDEsIGYgPSBmIDw8IDEsICEoZiA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBmLCBvID0gbyA/IGwgOiAhbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IGVbbiA+PiAyXSwgaSA9IGkgLSBmIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA+Pj4gMTYgPj4+IDAgPj0gZiA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9IHIgLSAoZiA8PCAxNikgfCAwLCBoID0gZVtuICsgNCA+PiAyXSwgaSAmIDMyNzY4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobCA9IGVbbiArIDQgPj4gMl0sIGYgPSBpID4+PiAwIDwgZiA+Pj4gMCwgZVt1ID4+IDJdID0gZVsoZiA/IDEyIDogOCkgKyBuID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG86IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGggPSBlW2sgKyAxNiA+PiAyXSwgbiA9IGggKyAxIHwgMCwgZyA9IElbaCArIDEgfCAwXSwgSVtoIHwgMF0gIT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gbiwgdCA9IDgsIHIgPSAoZyA8PCA4KSArIHIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGcgPj4+IDAgPD0gMTQzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gbiwgciA9IChnIDw8IDkpICsgciB8IDAsIHQgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHIgPSByICsgNjUyODAgfCAwLCB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0IC0gMSB8IDAsIHIgPSByIDw8IDEsIGkgPSBpIDw8IDEsICEoaSA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSBmID8gIWwgOiBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsID0gZVtuICsgNCA+PiAyXSwgaCA9IG4sIG4gPSBpID4+PiAwIDwgZiA+Pj4gMCwgZVt1ID4+IDJdID0gZVtoICsgKG4gPyA4IDogMTIpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoID0gZVtrICsgMTYgPj4gMl0sIGkgPSBoICsgMSB8IDAsIGcgPSBJW2ggKyAxIHwgMF0sIElbaCB8IDBdICE9IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBpLCB0ID0gOCwgciA9IChnIDw8IDgpICsgciB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZyA+Pj4gMCA8PSAxNDMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgciA9IChnIDw8IDkpICsgciB8IDAsIHQgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHIgPSByICsgNjUyODAgfCAwLCB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgLSAxIHwgMCwgciA9IHIgPDwgMSwgZiA9IGYgPDwgMSwgIShmID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGYsIGggPSBuID8gbCA6ICFsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gaCwgZiA9IDAsIGggPSB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG46IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG86IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobiB8IG8gPDwgMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcgPSBhIC0gNCB8IDAsIG8gPSBlW2EgKyA0ID4+IDJdID4+PiAxNyAmIDQgfCBlW2cgPj4gMl0gPj4+IDE5ICYgMSwgbiA9IFAgKyAoSVtvICsgMzk1MjAgfCAwXSA8PCAyKSB8IDAsIGggPSBlW24gPj4gMl0sIGYgPSBlW2ggPj4gMl0sIGkgPSBpIC0gZiB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID4+PiAxNiA+Pj4gMCA+PSBmID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSByIC0gKGYgPDwgMTYpIHwgMCwgbCA9IGVbaCArIDQgPj4gMl0sIGkgJiAzMjc2OCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsID0gZVtoICsgNCA+PiAyXSwgZiA9IGkgPj4+IDAgPCBmID4+PiAwLCBlW24gPj4gMl0gPSBlW2ggKyAoZiA/IDEyIDogOCkgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBaOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIFo7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoID0gZVtrICsgMTYgPj4gMl0sIG4gPSBoICsgMSB8IDAsIHMgPSBJW2ggKyAxIHwgMF0sIElbaCB8IDBdICE9IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gbiwgdCA9IDgsIHIgPSAocyA8PCA4KSArIHIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIFo7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPj4+IDAgPD0gMTQzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBuLCByID0gKHMgPDwgOSkgKyByIHwgMCwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgWjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgciA9IHIgKyA2NTI4MCB8IDAsIHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0IC0gMSB8IDAsIHIgPSByIDw8IDEsIGkgPSBpIDw8IDEsICEoaSA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBmID8gIWwgOiBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsID0gZVtoICsgNCA+PiAyXSwgcyA9IG4sIG4gPSBpID4+PiAwIDwgZiA+Pj4gMCwgZVtzID4+IDJdID0gZVtoICsgKG4gPyA4IDogMTIpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFo6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBaOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGggPSBlW2sgKyAxNiA+PiAyXSwgaSA9IGggKyAxIHwgMCwgcyA9IElbaCArIDEgfCAwXSwgSVtoIHwgMF0gIT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgdCA9IDgsIHIgPSAocyA8PCA4KSArIHIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBaOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPj4+IDAgPD0gMTQzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgciA9IChzIDw8IDkpICsgciB8IDAsIHQgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBaOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHIgPSByICsgNjUyODAgfCAwLCB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0IC0gMSB8IDAsIHIgPSByIDw8IDEsIGYgPSBmIDw8IDEsICEoZiA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBmLCBsID0gbiA/IGwgOiAhbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBsLCBmID0gSVtvICsgMzk3NzYgfCAwXSwgZVt3ID4+IDJdID0gKG4gfCAwKSA9PSAoZiB8IDApID8gSiA6IHksIGVbZyA+PiAyXSA9IGVbZyA+PiAyXSB8IDMyLCBlW2EgKyA0ID4+IDJdID0gZVthICsgNCA+PiAyXSB8IDgsIG8gPSAoZiBeIG4pIDw8IDE5LCBCID0gZVtrICsgMTA4ID4+IDJdLCBuID0gUCArIChJW0IgKyAyIHwgMF0gPDwgMikgfCAwLCBoID0gZVtuID4+IDJdLCBmID0gZVtoID4+IDJdLCBpID0gaSAtIGYgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA+Pj4gMTYgPj4+IDAgPj0gZiA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0gciAtIChmIDw8IDE2KSB8IDAsIGwgPSBlW2ggKyA0ID4+IDJdLCBpICYgMzI3NjgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBJOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobCA9IGVbaCArIDQgPj4gMl0sIGYgPSBpID4+PiAwIDwgZiA+Pj4gMCwgZVtuID4+IDJdID0gZVtoICsgKGYgPyAxMiA6IDgpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBaOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaCA9IGVbayArIDE2ID4+IDJdLCBuID0gaCArIDEgfCAwLCBnID0gSVtoICsgMSB8IDBdLCBJW2ggfCAwXSAhPSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IG4sIHQgPSA4LCByID0gKGcgPDwgOCkgKyByIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBaOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnID4+PiAwIDw9IDE0MykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gbiwgciA9IChnIDw8IDkpICsgciB8IDAsIHQgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIFo7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHIgPSByICsgNjUyODAgfCAwLCB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gdCAtIDEgfCAwLCByID0gciA8PCAxLCBpID0gaSA8PCAxLCAhKGkgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gZiA/ICFsIDogbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBJOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobCA9IGVbaCArIDQgPj4gMl0sIGcgPSBuLCBuID0gaSA+Pj4gMCA8IGYgPj4+IDAsIGVbZyA+PiAyXSA9IGVbaCArIChuID8gOCA6IDEyKSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBaOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgWjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoID0gZVtrICsgMTYgPj4gMl0sIGkgPSBoICsgMSB8IDAsIGcgPSBJW2ggKyAxIHwgMF0sIElbaCB8IDBdICE9IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGksIHQgPSA4LCByID0gKGcgPDwgOCkgKyByIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgWjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnID4+PiAwIDw9IDE0MykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGksIHIgPSAoZyA8PCA5KSArIHIgfCAwLCB0ID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgWjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCByID0gciArIDY1MjgwIHwgMCwgdCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gdCAtIDEgfCAwLCByID0gciA8PCAxLCBmID0gZiA8PCAxLCAhKGYgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gZiwgbCA9IG4gPyBsIDogIWw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9IGwsIGYgPSBvIHwgMTYsICFuKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB2OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBCOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBhIC0gNCB8IDAsIGggPSBlW2EgKyA0ID4+IDJdID4+PiAyMCAmIDQgfCAoZVtzID4+IDJdID4+PiAyMiAmIDEgfCAoZiA+Pj4gMTUgJiAxNiB8IChmID4+PiAxOSAmIDY0IHwgZiA+Pj4gMyAmIDE3MCkpKSwgbyA9IFAgKyAoSVtoICsgMzk1MjAgfCAwXSA8PCAyKSB8IDAsIGwgPSBlW28gPj4gMl0sIG4gPSBlW2wgPj4gMl0sIGkgPSBpIC0gbiB8IDAsIGcyID0gKGMyIDw8IDIpICsgdyB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID4+PiAxNiA+Pj4gMCA+PSBuID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSByIC0gKG4gPDwgMTYpIHwgMCwgZyA9IGVbbCArIDQgPj4gMl0sIGkgJiAzMjc2OCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChnID0gZVtsICsgNCA+PiAyXSwgbiA9IGkgPj4+IDAgPCBuID4+PiAwLCBlW28gPj4gMl0gPSBlW2wgKyAobiA/IDEyIDogOCkgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gZVtrICsgMTYgPj4gMl0sIG8gPSBsICsgMSB8IDAsIEIgPSBJW2wgKyAxIHwgMF0sIElbbCB8IDBdICE9IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gbywgdCA9IDgsIHIgPSAoQiA8PCA4KSArIHIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEIgPj4+IDAgPD0gMTQzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBvLCByID0gKEIgPDwgOSkgKyByIHwgMCwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgSTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgciA9IHIgKyA2NTI4MCB8IDAsIHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0IC0gMSB8IDAsIHIgPSByIDw8IDEsIGkgPSBpIDw8IDEsICEoaSA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcgPSBuID8gIWcgOiBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChnID0gZVtsICsgNCA+PiAyXSwgQiA9IG8sIG8gPSBpID4+PiAwIDwgbiA+Pj4gMCwgZVtCID4+IDJdID0gZVtsICsgKG8gPyA4IDogMTIpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEk6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBJOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBlW2sgKyAxNiA+PiAyXSwgaSA9IGwgKyAxIHwgMCwgQiA9IElbbCArIDEgfCAwXSwgSVtsIHwgMF0gIT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgdCA9IDgsIHIgPSAoQiA8PCA4KSArIHIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBJOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEIgPj4+IDAgPD0gMTQzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgciA9IChCIDw8IDkpICsgciB8IDAsIHQgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBJOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHIgPSByICsgNjUyODAgfCAwLCB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0IC0gMSB8IDAsIHIgPSByIDw8IDEsIG4gPSBuIDw8IDEsICEobiA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBuLCBnID0gbyA/IGcgOiAhZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gPSBnLCBuID0gSVtoICsgMzk3NzYgfCAwXSwgZVtnMiA+PiAyXSA9IChvIHwgMCkgPT0gKG4gfCAwKSA/IEogOiB5LCBlW3MgPj4gMl0gPSBlW3MgPj4gMl0gfCAyNTYsIGVbYSArIDQgPj4gMl0gPSBlW2EgKyA0ID4+IDJdIHwgNjQsIEIgPSBlW2sgKyAxMDggPj4gMl0sIGYgPSAobiBeIG8pIDw8IDIyIHwgZiB8IDEyODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyA9IFAgKyAoSVsoZiA+Pj4gNiAmIDQ5NSkgKyBCIHwgMF0gPDwgMikgfCAwLCBoID0gZVtvID4+IDJdLCBuID0gZVtoID4+IDJdLCBpID0gaSAtIG4gfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID4+PiAxNiA+Pj4gMCA+PSBuID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0gciAtIChuIDw8IDE2KSB8IDAsIGwgPSBlW2ggKyA0ID4+IDJdLCBpICYgMzI3NjgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsID0gZVtoICsgNCA+PiAyXSwgbiA9IGkgPj4+IDAgPCBuID4+PiAwLCBlW28gPj4gMl0gPSBlW2ggKyAobiA/IDEyIDogOCkgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaCA9IGVbayArIDE2ID4+IDJdLCBvID0gaCArIDEgfCAwLCBnID0gSVtoICsgMSB8IDBdLCBJW2ggfCAwXSAhPSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBvLCB0ID0gOCwgciA9IChnIDw8IDgpICsgciB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZyA+Pj4gMCA8PSAxNDMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBvLCByID0gKGcgPDwgOSkgKyByIHwgMCwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgciA9IHIgKyA2NTI4MCB8IDAsIHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgLSAxIHwgMCwgciA9IHIgPDwgMSwgaSA9IGkgPDwgMSwgIShpID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IG4gPyAhbCA6IGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGwgPSBlW2ggKyA0ID4+IDJdLCBnID0gbywgbyA9IGkgPj4+IDAgPCBuID4+PiAwLCBlW2cgPj4gMl0gPSBlW2ggKyAobyA/IDggOiAxMikgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGggPSBlW2sgKyAxNiA+PiAyXSwgaSA9IGggKyAxIHwgMCwgZyA9IElbaCArIDEgfCAwXSwgSVtoIHwgMF0gIT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGksIHQgPSA4LCByID0gKGcgPDwgOCkgKyByIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnID4+PiAwIDw9IDE0MykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBpLCByID0gKGcgPDwgOSkgKyByIHwgMCwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBjOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgciA9IHIgKyA2NTI4MCB8IDAsIHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gdCAtIDEgfCAwLCByID0gciA8PCAxLCBuID0gbiA8PCAxLCAhKG4gPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gbiwgbCA9IG8gPyBsIDogIWw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9IGEgLSA0IHwgMCwgaCA9IGVbYSArIDQgPj4gMl0gPj4+IDIzICYgNCB8IChlW3MgPj4gMl0gPj4+IDI1ICYgMSB8IChmID4+PiAxOCAmIDE2IHwgKGYgPj4+IDIyICYgNjQgfCBmID4+PiA2ICYgMTcwKSkpLCBvID0gUCArIChJW2ggKyAzOTUyMCB8IDBdIDw8IDIpIHwgMCwgbCA9IGVbbyA+PiAyXSwgbiA9IGVbbCA+PiAyXSwgaSA9IGkgLSBuIHwgMCwgZzIgPSB3ICsgSCB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA+Pj4gMTYgPj4+IDAgPj0gbiA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSByIC0gKG4gPDwgMTYpIHwgMCwgZyA9IGVbbCArIDQgPj4gMl0sIGkgJiAzMjc2OCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZyA9IGVbbCArIDQgPj4gMl0sIG4gPSBpID4+PiAwIDwgbiA+Pj4gMCwgZVtvID4+IDJdID0gZVtsICsgKG4gPyAxMiA6IDgpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB2OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gZVtrICsgMTYgPj4gMl0sIG8gPSBsICsgMSB8IDAsIEIgPSBJW2wgKyAxIHwgMF0sIElbbCB8IDBdICE9IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBvLCB0ID0gOCwgciA9IChCIDw8IDgpICsgciB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB2OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQiA+Pj4gMCA8PSAxNDMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gbywgciA9IChCIDw8IDkpICsgciB8IDAsIHQgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHIgPSByICsgNjUyODAgfCAwLCB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgLSAxIHwgMCwgciA9IHIgPDwgMSwgaSA9IGkgPDwgMSwgIShpID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZyA9IG4gPyAhZyA6IGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBCOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGcgPSBlW2wgKyA0ID4+IDJdLCBCID0gbywgbyA9IGkgPj4+IDAgPCBuID4+PiAwLCBlW0IgPj4gMl0gPSBlW2wgKyAobyA/IDggOiAxMikgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gZVtrICsgMTYgPj4gMl0sIGkgPSBsICsgMSB8IDAsIEIgPSBJW2wgKyAxIHwgMF0sIElbbCB8IDBdICE9IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgdCA9IDgsIHIgPSAoQiA8PCA4KSArIHIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEIgPj4+IDAgPD0gMTQzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBpLCByID0gKEIgPDwgOSkgKyByIHwgMCwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgciA9IHIgKyA2NTI4MCB8IDAsIHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0IC0gMSB8IDAsIHIgPSByIDw8IDEsIG4gPSBuIDw8IDEsICEobiA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBuLCBnID0gbyA/IGcgOiAhZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvID0gZywgbiA9IElbaCArIDM5Nzc2IHwgMF0sIGVbZzIgPj4gMl0gPSAobyB8IDApID09IChuIHwgMCkgPyBKIDogeSwgZVtzID4+IDJdID0gZVtzID4+IDJdIHwgMjA0OCwgZVthICsgNCA+PiAyXSA9IGVbYSArIDQgPj4gMl0gfCA1MTIsIGYgPSAobiBeIG8pIDw8IDI1IHwgZiB8IDEwMjQsIEIgPSBlW2sgKyAxMDggPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoID0gUCArIChJWyhmID4+PiA5ICYgNDk1KSArIEIgfCAwXSA8PCAyKSB8IDAsIGwgPSBlW2ggPj4gMl0sIG4gPSBlW2wgPj4gMl0sIGkgPSBpIC0gbiB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID4+PiAxNiA+Pj4gMCA+PSBuID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSByIC0gKG4gPDwgMTYpIHwgMCwgbyA9IGVbbCArIDQgPj4gMl0sIGkgJiAzMjc2OCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChnID0gZVtsICsgNCA+PiAyXSwgbiA9IGkgPj4+IDAgPCBuID4+PiAwLCBlW2ggPj4gMl0gPSBlW2wgKyAobiA/IDEyIDogOCkgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gZVtrICsgMTYgPj4gMl0sIG8gPSBsICsgMSB8IDAsIHMgPSBJW2wgKyAxIHwgMF0sIElbbCB8IDBdICE9IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gbywgdCA9IDgsIHIgPSAocyA8PCA4KSArIHIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPj4+IDAgPD0gMTQzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBvLCByID0gKHMgPDwgOSkgKyByIHwgMCwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgciA9IHIgKyA2NTI4MCB8IDAsIHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0IC0gMSB8IDAsIHIgPSByIDw8IDEsIGkgPSBpIDw8IDEsICEoaSA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gPSBuID8gIWcgOiBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChnID0gZVtsICsgNCA+PiAyXSwgbyA9IGkgPj4+IDAgPCBuID4+PiAwLCBlW2ggPj4gMl0gPSBlW2wgKyAobyA/IDggOiAxMikgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGVbayArIDE2ID4+IDJdLCBpID0gbCArIDEgfCAwLCBzID0gSVtsICsgMSB8IDBdLCBJW2wgfCAwXSAhPSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBpLCB0ID0gOCwgciA9IChzIDw8IDgpICsgciB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocyA+Pj4gMCA8PSAxNDMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBpLCByID0gKHMgPDwgOSkgKyByIHwgMCwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgciA9IHIgKyA2NTI4MCB8IDAsIHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgLSAxIHwgMCwgciA9IHIgPDwgMSwgbiA9IG4gPDwgMSwgIShuID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IG4sIG8gPSBvID8gZyA6ICFnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPID0gYSAtIDQgfCAwLCB3MiA9IGVbYSArIDQgPj4gMl0gPj4+IDI2ICYgNCB8IChlW08gPj4gMl0gPj4+IDI4ICYgMSB8IChmID4+PiAyMSAmIDE2IHwgKGYgPj4+IDI1ICYgNjQgfCBmID4+PiA5ICYgMTcwKSkpLCBoID0gUCArIChJW3cyICsgMzk1MjAgfCAwXSA8PCAyKSB8IDAsIEIgPSBlW2ggPj4gMl0sIG4gPSBlW0IgPj4gMl0sIGkgPSBpIC0gbiB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZzIgPSB3ICsgbSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHc6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA+Pj4gMTYgPj4+IDAgPj0gbiA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSByIC0gKG4gPDwgMTYpIHwgMCwgbyA9IGVbQiArIDQgPj4gMl0sIGkgJiAzMjc2OCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZyA9IGVbQiArIDQgPj4gMl0sIG4gPSBpID4+PiAwIDwgbiA+Pj4gMCwgZVtoID4+IDJdID0gZVsobiA/IDEyIDogOCkgKyBCID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gZVtrICsgMTYgPj4gMl0sIG8gPSBsICsgMSB8IDAsIHMgPSBJW2wgKyAxIHwgMF0sIElbbCB8IDBdICE9IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBvLCB0ID0gOCwgciA9IChzIDw8IDgpICsgciB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocyA+Pj4gMCA8PSAxNDMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gbywgciA9IChzIDw8IDkpICsgciB8IDAsIHQgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHIgPSByICsgNjUyODAgfCAwLCB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgLSAxIHwgMCwgciA9IHIgPDwgMSwgaSA9IGkgPDwgMSwgIShpID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyA9IG4gPyAhZyA6IGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGcgPSBlW0IgKyA0ID4+IDJdLCBvID0gaSA+Pj4gMCA8IG4gPj4+IDAsIGVbaCA+PiAyXSA9IGVbKG8gPyA4IDogMTIpICsgQiA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG46IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBlW2sgKyAxNiA+PiAyXSwgaSA9IGwgKyAxIHwgMCwgcyA9IElbbCArIDEgfCAwXSwgSVtsIHwgMF0gIT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBpLCB0ID0gOCwgciA9IChzIDw8IDgpICsgciB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocyA+Pj4gMCA8PSAxNDMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGksIHIgPSAocyA8PCA5KSArIHIgfCAwLCB0ID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCByID0gciArIDY1MjgwIHwgMCwgdCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgLSAxIHwgMCwgciA9IHIgPDwgMSwgbiA9IG4gPDwgMSwgIShuID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IG4sIG8gPSBvID8gZyA6ICFnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBJW3cyICsgMzk3NzYgfCAwXSwgZVtnMiA+PiAyXSA9IChvIHwgMCkgPT0gKG4gfCAwKSA/IEogOiB5LCBlW08gPj4gMl0gPSBlW08gPj4gMl0gfCAxNjM4NCwgZVthICsgNCA+PiAyXSA9IGVbYSArIDQgPj4gMl0gfCA0MDk2LCBsID0gYSArIChlW2sgKyAxMjQgPj4gMl0gPDwgMikgfCAwLCBlW2wgKyA0ID4+IDJdID0gZVtsICsgNCA+PiAyXSB8IDQsIGVbbCArIDEyID4+IDJdID0gZVtsICsgMTIgPj4gMl0gfCAxLCBuID0gbiBeIG8sIGVbbCArIDggPj4gMl0gPSBlW2wgKyA4ID4+IDJdIHwgbiA8PCAxOCB8IDIsIGYgPSBuIDw8IDI4IHwgZiB8IDgxOTI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2EgPj4gMl0gPSBmICYgLTEyMjY4MzM5MjE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmID0gYSArIDQgfCAwLCB3ID0gdyArIDQgfCAwLCBFID0gRSArIDEgfCAwLCAoYzIgfCAwKSA9PSAoRSB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGYgPSBhICsgMTIgfCAwLCB3ID0gdyArIG0gfCAwLCBDID0gQyArIDQgfCAwLCBuID0gZVtrICsgMTI4ID4+IDJdLCAhKEMgPj4+IDAgPCAobiAmIC00KSA+Pj4gMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gbiAmIC00LCBmID0gKGYgPj4+IDAgPD0gNCA/IDQgOiBmKSAtIDEgfCAwLCBDID0gKGYgJiAtNCkgKyA0IHwgMCwgZiA9IChvICsgKGYgPDwgMSAmIC04KSB8IDApICsgMjAgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW2sgKyA4ID4+IDJdID0gdCwgZVtrICsgNCA+PiAyXSA9IGksIGVbayA+PiAyXSA9IHIsIGVbayArIDEwNCA+PiAyXSA9IGgsICFjMiB8IG4gPj4+IDAgPD0gQyA+Pj4gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IDAsIGVbayArIDEyOCA+PiAyXSAhPSAoQyB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IFg0KGssIGYsIChaKHQsIGMyKSA8PCAyKSArIHcgfCAwLCBKLCB0LCAxKSwgdCA9IHQgKyAxIHwgMCwgdCA+Pj4gMCA8IGVbayArIDEyOCA+PiAyXSAtIEMgPj4+IDA7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW2YgPj4gMl0gPSBlW2YgPj4gMl0gJiAtMTIyNjgzMzkyMSwgdyA9IHcgKyA0IHwgMCwgZiA9IGYgKyA0IHwgMCwgYyA9IGMgKyAxIHwgMCwgKGMyIHwgMCkgPT0gKGMgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID4+PiAwIDwgNCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYzIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHUgPSBrICsgMTAwIHwgMCwgdiA9IGsgKyA5NiB8IDAsIG0gPSBaKGMyLCAxMiksIEggPSBjMiA8PCAzLCB5ID0gMCAtIEogfCAwLCBQID0gayArIDI4IHwgMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoRSA9IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBmLCBmID0gZVtmID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG46IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmICYgMjA5NzE2OCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSBQICsgKElbZVtrICsgMTA4ID4+IDJdICsgKGYgJiA0OTUpIHwgMF0gPDwgMikgfCAwLCBsID0gZVtoID4+IDJdLCBuID0gZVtsID4+IDJdLCBpID0gaSAtIG4gfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA+Pj4gMTYgPj4+IDAgPj0gbiA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0gciAtIChuIDw8IDE2KSB8IDAsIG8gPSBlW2wgKyA0ID4+IDJdLCBpICYgMzI3NjgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZyA9IGVbbCArIDQgPj4gMl0sIG4gPSBpID4+PiAwIDwgbiA+Pj4gMCwgZVtoID4+IDJdID0gZVtsICsgKG4gPyAxMiA6IDgpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBCOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGVbayArIDE2ID4+IDJdLCBvID0gbCArIDEgfCAwLCBzID0gSVtsICsgMSB8IDBdLCBJW2wgfCAwXSAhPSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IG8sIHQgPSA4LCByID0gKHMgPDwgOCkgKyByIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBCOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzID4+PiAwIDw9IDE0MykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gbywgciA9IChzIDw8IDkpICsgciB8IDAsIHQgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHIgPSByICsgNjUyODAgfCAwLCB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gdCAtIDEgfCAwLCByID0gciA8PCAxLCBpID0gaSA8PCAxLCAhKGkgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvID0gbiA/ICFnIDogZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZyA9IGVbbCArIDQgPj4gMl0sIG8gPSBpID4+PiAwIDwgbiA+Pj4gMCwgZVtoID4+IDJdID0gZVtsICsgKG8gPyA4IDogMTIpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBCOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBlW2sgKyAxNiA+PiAyXSwgaSA9IGwgKyAxIHwgMCwgcyA9IElbbCArIDEgfCAwXSwgSVtsIHwgMF0gIT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgdCA9IDgsIHIgPSAocyA8PCA4KSArIHIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBCOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPj4+IDAgPD0gMTQzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgciA9IChzIDw8IDkpICsgciB8IDAsIHQgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBCOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHIgPSByICsgNjUyODAgfCAwLCB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0IC0gMSB8IDAsIHIgPSByIDw8IDEsIG4gPSBuIDw8IDEsICEobiA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBuLCBvID0gbyA/IGcgOiAhZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBhIC0gNCB8IDAsIGwgPSBlW2EgKyA0ID4+IDJdID4+PiAxNyAmIDQgfCAoZVtzID4+IDJdID4+PiAxOSAmIDEgfCAoZiA+Pj4gMTQgJiAxNiB8IChmID4+PiAxNiAmIDY0IHwgZiAmIDE3MCkpKSwgaCA9IFAgKyAoSVtsICsgMzk1MjAgfCAwXSA8PCAyKSB8IDAsIEIgPSBlW2ggPj4gMl0sIG4gPSBlW0IgPj4gMl0sIGkgPSBpIC0gbiB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID4+PiAxNiA+Pj4gMCA+PSBuID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSByIC0gKG4gPDwgMTYpIHwgMCwgbyA9IGVbQiArIDQgPj4gMl0sIGkgJiAzMjc2OCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChnID0gZVtCICsgNCA+PiAyXSwgbiA9IGkgPj4+IDAgPCBuID4+PiAwLCBlW2ggPj4gMl0gPSBlW0IgKyAobiA/IDEyIDogOCkgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gZVtrICsgMTYgPj4gMl0sIG8gPSB0ICsgMSB8IDAsIEIgPSBJW3QgKyAxIHwgMF0sIElbdCB8IDBdICE9IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gbywgdCA9IDgsIHIgPSAoQiA8PCA4KSArIHIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEIgPj4+IDAgPD0gMTQzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBvLCByID0gKEIgPDwgOSkgKyByIHwgMCwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgciA9IHIgKyA2NTI4MCB8IDAsIHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0IC0gMSB8IDAsIHIgPSByIDw8IDEsIGkgPSBpIDw8IDEsICEoaSA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gPSBuID8gIWcgOiBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChnID0gZVtCICsgNCA+PiAyXSwgbyA9IGkgPj4+IDAgPCBuID4+PiAwLCBlW2ggPj4gMl0gPSBlW0IgKyAobyA/IDggOiAxMikgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IGVbayArIDE2ID4+IDJdLCBpID0gdCArIDEgfCAwLCBCID0gSVt0ICsgMSB8IDBdLCBJW3QgfCAwXSAhPSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBpLCB0ID0gOCwgciA9IChCIDw8IDgpICsgciB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQiA+Pj4gMCA8PSAxNDMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBpLCByID0gKEIgPDwgOSkgKyByIHwgMCwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgciA9IHIgKyA2NTI4MCB8IDAsIHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgLSAxIHwgMCwgciA9IHIgPDwgMSwgbiA9IG4gPDwgMSwgIShuID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IG4sIG8gPSBvID8gZyA6ICFnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IElbbCArIDM5Nzc2IHwgMF0sIGVbdyA+PiAyXSA9IChvIHwgMCkgPT0gKG4gfCAwKSA/IEogOiB5LCBlW3MgPj4gMl0gPSBlW3MgPj4gMl0gfCAzMiwgZVthICsgNCA+PiAyXSA9IGVbYSArIDQgPj4gMl0gfCA4LCBsID0gYSArICgtMiAtIGVbayArIDEyNCA+PiAyXSA8PCAyKSB8IDAsIGVbbCArIDQgPj4gMl0gPSBlW2wgKyA0ID4+IDJdIHwgMzI3NjgsIG8gPSBuIF4gbywgZVtsID4+IDJdID0gZVtsID4+IDJdIHwgbyA8PCAzMSB8IDY1NTM2LCBuID0gbCAtIDQgfCAwLCBlW24gPj4gMl0gPSBlW24gPj4gMl0gfCAxMzEwNzIsIGYgPSBvIDw8IDE5IHwgZiB8IDE2OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZiAmIDE2Nzc3MzQ0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IGYgPj4+IDMgfCAwLCBoID0gUCArIChJW2VbayArIDEwOCA+PiAyXSArIChsICYgNDk1KSB8IDBdIDw8IDIpIHwgMCwgcyA9IGVbaCA+PiAyXSwgbiA9IGVbcyA+PiAyXSwgaSA9IGkgLSBuIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG86IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPj4+IDE2ID4+PiAwID49IG4gPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9IHIgLSAobiA8PCAxNikgfCAwLCBvID0gZVtzICsgNCA+PiAyXSwgaSAmIDMyNzY4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGcgPSBlW3MgKyA0ID4+IDJdLCBuID0gaSA+Pj4gMCA8IG4gPj4+IDAsIGVbaCA+PiAyXSA9IGVbcyArIChuID8gMTIgOiA4KSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSBlW2sgKyAxNiA+PiAyXSwgbyA9IHQgKyAxIHwgMCwgcyA9IElbdCArIDEgfCAwXSwgSVt0IHwgMF0gIT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBvLCB0ID0gOCwgciA9IChzIDw8IDgpICsgciB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocyA+Pj4gMCA8PSAxNDMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IG8sIHIgPSAocyA8PCA5KSArIHIgfCAwLCB0ID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBCOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCByID0gciArIDY1MjgwIHwgMCwgdCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgLSAxIHwgMCwgciA9IHIgPDwgMSwgaSA9IGkgPDwgMSwgIShpID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyA9IG4gPyAhZyA6IGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGcgPSBlW3MgKyA0ID4+IDJdLCBvID0gaSA+Pj4gMCA8IG4gPj4+IDAsIGVbaCA+PiAyXSA9IGVbcyArIChvID8gOCA6IDEyKSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gZVtrICsgMTYgPj4gMl0sIGkgPSB0ICsgMSB8IDAsIHMgPSBJW3QgKyAxIHwgMF0sIElbdCB8IDBdICE9IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGksIHQgPSA4LCByID0gKHMgPDwgOCkgKyByIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzID4+PiAwIDw9IDE0MykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGksIHIgPSAocyA8PCA5KSArIHIgfCAwLCB0ID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCByID0gciArIDY1MjgwIHwgMCwgdCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gdCAtIDEgfCAwLCByID0gciA8PCAxLCBuID0gbiA8PCAxLCAhKG4gPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gbiwgbyA9IG8gPyBnIDogIWc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW8pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzID0gYSAtIDQgfCAwLCBsID0gZVthICsgNCA+PiAyXSA+Pj4gMjAgJiA0IHwgKGVbcyA+PiAyXSA+Pj4gMjIgJiAxIHwgKGYgPj4+IDE1ICYgMTYgfCAoZiA+Pj4gMTkgJiA2NCB8IGwgJiAxNzApKSksIGggPSBQICsgKElbbCArIDM5NTIwIHwgMF0gPDwgMikgfCAwLCBCID0gZVtoID4+IDJdLCBuID0gZVtCID4+IDJdLCBpID0gaSAtIG4gfCAwLCBnMiA9IChjMiA8PCAyKSArIHcgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA+Pj4gMTYgPj4+IDAgPj0gbiA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0gciAtIChuIDw8IDE2KSB8IDAsIG8gPSBlW0IgKyA0ID4+IDJdLCBpICYgMzI3NjgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZyA9IGVbQiArIDQgPj4gMl0sIG4gPSBpID4+PiAwIDwgbiA+Pj4gMCwgZVtoID4+IDJdID0gZVtCICsgKG4gPyAxMiA6IDgpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBCOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IGVbayArIDE2ID4+IDJdLCBvID0gdCArIDEgfCAwLCBCID0gSVt0ICsgMSB8IDBdLCBJW3QgfCAwXSAhPSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IG8sIHQgPSA4LCByID0gKEIgPDwgOCkgKyByIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBCOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChCID4+PiAwIDw9IDE0MykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gbywgciA9IChCIDw8IDkpICsgciB8IDAsIHQgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHIgPSByICsgNjUyODAgfCAwLCB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gdCAtIDEgfCAwLCByID0gciA8PCAxLCBpID0gaSA8PCAxLCAhKGkgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvID0gbiA/ICFnIDogZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZyA9IGVbQiArIDQgPj4gMl0sIG8gPSBpID4+PiAwIDwgbiA+Pj4gMCwgZVtoID4+IDJdID0gZVtCICsgKG8gPyA4IDogMTIpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBCOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSBlW2sgKyAxNiA+PiAyXSwgaSA9IHQgKyAxIHwgMCwgQiA9IElbdCArIDEgfCAwXSwgSVt0IHwgMF0gIT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgdCA9IDgsIHIgPSAoQiA8PCA4KSArIHIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBCOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEIgPj4+IDAgPD0gMTQzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgciA9IChCIDw8IDkpICsgciB8IDAsIHQgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBCOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHIgPSByICsgNjUyODAgfCAwLCB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0IC0gMSB8IDAsIHIgPSByIDw8IDEsIG4gPSBuIDw8IDEsICEobiA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBuLCBvID0gbyA/IGcgOiAhZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBJW2wgKyAzOTc3NiB8IDBdLCBlW2cyID4+IDJdID0gKG8gfCAwKSA9PSAobiB8IDApID8gSiA6IHksIGVbcyA+PiAyXSA9IGVbcyA+PiAyXSB8IDI1NiwgZVthICsgNCA+PiAyXSA9IGVbYSArIDQgPj4gMl0gfCA2NCwgZiA9IChuIF4gbykgPDwgMjIgfCBmIHwgMTI4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZiAmIDEzNDIxODc1MikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBmID4+PiA2IHwgMCwgaCA9IFAgKyAoSVtlW2sgKyAxMDggPj4gMl0gKyAobCAmIDQ5NSkgfCAwXSA8PCAyKSB8IDAsIHMgPSBlW2ggPj4gMl0sIG4gPSBlW3MgPj4gMl0sIGkgPSBpIC0gbiB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID4+PiAxNiA+Pj4gMCA+PSBuID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSByIC0gKG4gPDwgMTYpIHwgMCwgbyA9IGVbcyArIDQgPj4gMl0sIGkgJiAzMjc2OCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChnID0gZVtzICsgNCA+PiAyXSwgbiA9IGkgPj4+IDAgPCBuID4+PiAwLCBlW2ggPj4gMl0gPSBlW3MgKyAobiA/IDEyIDogOCkgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gZVtrICsgMTYgPj4gMl0sIG8gPSB0ICsgMSB8IDAsIHMgPSBJW3QgKyAxIHwgMF0sIElbdCB8IDBdICE9IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gbywgdCA9IDgsIHIgPSAocyA8PCA4KSArIHIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPj4+IDAgPD0gMTQzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBvLCByID0gKHMgPDwgOSkgKyByIHwgMCwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgciA9IHIgKyA2NTI4MCB8IDAsIHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0IC0gMSB8IDAsIHIgPSByIDw8IDEsIGkgPSBpIDw8IDEsICEoaSA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gPSBuID8gIWcgOiBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChnID0gZVtzICsgNCA+PiAyXSwgbyA9IGkgPj4+IDAgPCBuID4+PiAwLCBlW2ggPj4gMl0gPSBlW3MgKyAobyA/IDggOiAxMikgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IGVbayArIDE2ID4+IDJdLCBpID0gdCArIDEgfCAwLCBzID0gSVt0ICsgMSB8IDBdLCBJW3QgfCAwXSAhPSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBpLCB0ID0gOCwgciA9IChzIDw8IDgpICsgciB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocyA+Pj4gMCA8PSAxNDMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBpLCByID0gKHMgPDwgOSkgKyByIHwgMCwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgciA9IHIgKyA2NTI4MCB8IDAsIHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgLSAxIHwgMCwgciA9IHIgPDwgMSwgbiA9IG4gPDwgMSwgIShuID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IG4sIG8gPSBvID8gZyA6ICFnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9IGEgLSA0IHwgMCwgbCA9IGVbYSArIDQgPj4gMl0gPj4+IDIzICYgNCB8IChlW3MgPj4gMl0gPj4+IDI1ICYgMSB8IChmID4+PiAxOCAmIDE2IHwgKGYgPj4+IDIyICYgNjQgfCBsICYgMTcwKSkpLCBoID0gUCArIChJW2wgKyAzOTUyMCB8IDBdIDw8IDIpIHwgMCwgQiA9IGVbaCA+PiAyXSwgbiA9IGVbQiA+PiAyXSwgaSA9IGkgLSBuIHwgMCwgZzIgPSB3ICsgSCB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID4+PiAxNiA+Pj4gMCA+PSBuID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSByIC0gKG4gPDwgMTYpIHwgMCwgbyA9IGVbQiArIDQgPj4gMl0sIGkgJiAzMjc2OCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChnID0gZVtCICsgNCA+PiAyXSwgbiA9IGkgPj4+IDAgPCBuID4+PiAwLCBlW2ggPj4gMl0gPSBlW0IgKyAobiA/IDEyIDogOCkgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gZVtrICsgMTYgPj4gMl0sIG8gPSB0ICsgMSB8IDAsIEIgPSBJW3QgKyAxIHwgMF0sIElbdCB8IDBdICE9IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gbywgdCA9IDgsIHIgPSAoQiA8PCA4KSArIHIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEIgPj4+IDAgPD0gMTQzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBvLCByID0gKEIgPDwgOSkgKyByIHwgMCwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgciA9IHIgKyA2NTI4MCB8IDAsIHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0IC0gMSB8IDAsIHIgPSByIDw8IDEsIGkgPSBpIDw8IDEsICEoaSA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gPSBuID8gIWcgOiBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChnID0gZVtCICsgNCA+PiAyXSwgbyA9IGkgPj4+IDAgPCBuID4+PiAwLCBlW2ggPj4gMl0gPSBlW0IgKyAobyA/IDggOiAxMikgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IGVbayArIDE2ID4+IDJdLCBpID0gdCArIDEgfCAwLCBCID0gSVt0ICsgMSB8IDBdLCBJW3QgfCAwXSAhPSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBpLCB0ID0gOCwgciA9IChCIDw8IDgpICsgciB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQiA+Pj4gMCA8PSAxNDMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBpLCByID0gKEIgPDwgOSkgKyByIHwgMCwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgciA9IHIgKyA2NTI4MCB8IDAsIHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgLSAxIHwgMCwgciA9IHIgPDwgMSwgbiA9IG4gPDwgMSwgIShuID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IG4sIG8gPSBvID8gZyA6ICFnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IElbbCArIDM5Nzc2IHwgMF0sIGVbZzIgPj4gMl0gPSAobyB8IDApID09IChuIHwgMCkgPyBKIDogeSwgZVtzID4+IDJdID0gZVtzID4+IDJdIHwgMjA0OCwgZVthICsgNCA+PiAyXSA9IGVbYSArIDQgPj4gMl0gfCA1MTIsIGYgPSAobiBeIG8pIDw8IDI1IHwgZiB8IDEwMjQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmICYgMTA3Mzc1MDAxNikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IGYgPj4+IDkgfCAwLCBoID0gUCArIChJW2VbayArIDEwOCA+PiAyXSArIChsICYgNDk1KSB8IDBdIDw8IDIpIHwgMCwgcyA9IGVbaCA+PiAyXSwgbiA9IGVbcyA+PiAyXSwgaSA9IGkgLSBuIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA+Pj4gMTYgPj4+IDAgPj0gbiA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9IHIgLSAobiA8PCAxNikgfCAwLCBvID0gZVtzICsgNCA+PiAyXSwgaSAmIDMyNzY4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZyA9IGVbcyArIDQgPj4gMl0sIG4gPSBpID4+PiAwIDwgbiA+Pj4gMCwgZVtoID4+IDJdID0gZVtzICsgKG4gPyAxMiA6IDgpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG86IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSBlW2sgKyAxNiA+PiAyXSwgbyA9IHQgKyAxIHwgMCwgcyA9IElbdCArIDEgfCAwXSwgSVt0IHwgMF0gIT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gbywgdCA9IDgsIHIgPSAocyA8PCA4KSArIHIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPj4+IDAgPD0gMTQzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gbywgciA9IChzIDw8IDkpICsgciB8IDAsIHQgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHIgPSByICsgNjUyODAgfCAwLCB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0IC0gMSB8IDAsIHIgPSByIDw8IDEsIGkgPSBpIDw8IDEsICEoaSA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gPSBuID8gIWcgOiBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChnID0gZVtzICsgNCA+PiAyXSwgbyA9IGkgPj4+IDAgPCBuID4+PiAwLCBlW2ggPj4gMl0gPSBlW3MgKyAobyA/IDggOiAxMikgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG86IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSBlW2sgKyAxNiA+PiAyXSwgaSA9IHQgKyAxIHwgMCwgcyA9IElbdCArIDEgfCAwXSwgSVt0IHwgMF0gIT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGksIHQgPSA4LCByID0gKHMgPDwgOCkgKyByIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzID4+PiAwIDw9IDE0MykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBpLCByID0gKHMgPDwgOSkgKyByIHwgMCwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgciA9IHIgKyA2NTI4MCB8IDAsIHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gdCAtIDEgfCAwLCByID0gciA8PCAxLCBuID0gbiA8PCAxLCAhKG4gPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gbiwgbyA9IG8gPyBnIDogIWc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTyA9IGEgLSA0IHwgMCwgdzIgPSBlW2EgKyA0ID4+IDJdID4+PiAyNiAmIDQgfCAoZVtPID4+IDJdID4+PiAyOCAmIDEgfCAoZiA+Pj4gMjEgJiAxNiB8IChmID4+PiAyNSAmIDY0IHwgbCAmIDE3MCkpKSwgaCA9IFAgKyAoSVt3MiArIDM5NTIwIHwgMF0gPDwgMikgfCAwLCBCID0gZVtoID4+IDJdLCBuID0gZVtCID4+IDJdLCBpID0gaSAtIG4gfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyA9IGVbdiA+PiAyXSwgZiA9IGVbbyA+PiAyXSwgaSA9IGkgLSBmIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID4+PiAxNiA+Pj4gMCA+PSBmID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9IHIgLSAoZiA8PCAxNikgfCAwLCBuID0gZVtvICsgNCA+PiAyXSwgaSAmIDMyNzY4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChoID0gZVtvICsgNCA+PiAyXSwgZiA9IGkgPj4+IDAgPCBmID4+PiAwLCBlW3YgPj4gMl0gPSBlW28gKyAoZiA/IDEyIDogOCkgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG86IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG8gPSBlW2sgKyAxNiA+PiAyXSwgbiA9IG8gKyAxIHwgMCwgbCA9IElbbyArIDEgfCAwXSwgSVtvIHwgMF0gIT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IG4sIHQgPSA4LCByID0gKGwgPDwgOCkgKyByIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID4+PiAwIDw9IDE0MykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBuLCByID0gKGwgPDwgOSkgKyByIHwgMCwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgciA9IHIgKyA2NTI4MCB8IDAsIHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gdCAtIDEgfCAwLCByID0gciA8PCAxLCBpID0gaSA8PCAxLCAhKGkgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gZiA/ICFoIDogaDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaCA9IGVbbyArIDQgPj4gMl0sIG4gPSBpID4+PiAwIDwgZiA+Pj4gMCwgZVt2ID4+IDJdID0gZVtvICsgKG4gPyA4IDogMTIpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobyA9IGVbayArIDE2ID4+IDJdLCBpID0gbyArIDEgfCAwLCBsID0gSVtvICsgMSB8IDBdLCBJW28gfCAwXSAhPSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGksIHQgPSA4LCByID0gKGwgPDwgOCkgKyByIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID4+PiAwIDw9IDE0MykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgciA9IChsIDw8IDkpICsgciB8IDAsIHQgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHIgPSByICsgNjUyODAgfCAwLCB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gdCAtIDEgfCAwLCByID0gciA8PCAxLCBmID0gZiA8PCAxLCAhKGYgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gZiwgbiA9IG4gPyBoIDogIWg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFuKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaCA9IHY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gZVt1ID4+IDJdLCBmID0gZVtuID4+IDJdLCBpID0gaSAtIGYgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPj4+IDE2ID4+PiAwID49IGYgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0gciAtIChmIDw8IDE2KSB8IDAsIG8gPSBlW24gKyA0ID4+IDJdLCBpICYgMzI3NjgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGwgPSBlW24gKyA0ID4+IDJdLCBmID0gaSA+Pj4gMCA8IGYgPj4+IDAsIG4gPSBlWyhmID8gMTIgOiA4KSArIG4gPj4gMl0sIGVbdSA+PiAyXSA9IG47IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG86IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGggPSBlW2sgKyAxNiA+PiAyXSwgbyA9IGggKyAxIHwgMCwgZyA9IElbaCArIDEgfCAwXSwgSVtoIHwgMF0gIT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IG8sIHQgPSA4LCByID0gKGcgPDwgOCkgKyByIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnID4+PiAwIDw9IDE0MykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBvLCByID0gKGcgPDwgOSkgKyByIHwgMCwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgciA9IHIgKyA2NTI4MCB8IDAsIHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gdCAtIDEgfCAwLCByID0gciA8PCAxLCBpID0gaSA8PCAxLCAhKGkgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvID0gZiA/ICFsIDogbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobCA9IGVbbiArIDQgPj4gMl0sIG8gPSBpID4+PiAwIDwgZiA+Pj4gMCwgbiA9IGVbKG8gPyA4IDogMTIpICsgbiA+PiAyXSwgZVt1ID4+IDJdID0gbjsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG86IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGggPSBlW2sgKyAxNiA+PiAyXSwgaSA9IGggKyAxIHwgMCwgZyA9IElbaCArIDEgfCAwXSwgSVtoIHwgMF0gIT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBpLCB0ID0gOCwgciA9IChnIDw8IDgpICsgciB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZyA+Pj4gMCA8PSAxNDMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGksIHIgPSAoZyA8PCA5KSArIHIgfCAwLCB0ID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCByID0gciArIDY1MjgwIHwgMCwgdCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgLSAxIHwgMCwgciA9IHIgPDwgMSwgZiA9IGYgPDwgMSwgIShmID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGYsIG8gPSBvID8gbCA6ICFsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBlW24gPj4gMl0sIGkgPSBpIC0gZiB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG46IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA+Pj4gMTYgPj4+IDAgPj0gZiA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSByIC0gKGYgPDwgMTYpIHwgMCwgaCA9IGVbbiArIDQgPj4gMl0sIGkgJiAzMjc2OCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobCA9IGVbbiArIDQgPj4gMl0sIGYgPSBpID4+PiAwIDwgZiA+Pj4gMCwgZVt1ID4+IDJdID0gZVsoZiA/IDEyIDogOCkgKyBuID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoID0gZVtrICsgMTYgPj4gMl0sIG4gPSBoICsgMSB8IDAsIGcgPSBJW2ggKyAxIHwgMF0sIElbaCB8IDBdICE9IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBuLCB0ID0gOCwgciA9IChnIDw8IDgpICsgciB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZyA+Pj4gMCA8PSAxNDMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gbiwgciA9IChnIDw8IDkpICsgciB8IDAsIHQgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHIgPSByICsgNjUyODAgfCAwLCB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgLSAxIHwgMCwgciA9IHIgPDwgMSwgaSA9IGkgPDwgMSwgIShpID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaCA9IGYgPyAhbCA6IGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGwgPSBlW24gKyA0ID4+IDJdLCBoID0gbiwgbiA9IGkgPj4+IDAgPCBmID4+PiAwLCBlW3UgPj4gMl0gPSBlW2ggKyAobiA/IDggOiAxMikgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoID0gZVtrICsgMTYgPj4gMl0sIGkgPSBoICsgMSB8IDAsIGcgPSBJW2ggKyAxIHwgMF0sIElbaCB8IDBdICE9IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgdCA9IDgsIHIgPSAoZyA8PCA4KSArIHIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGcgPj4+IDAgPD0gMTQzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBpLCByID0gKGcgPDwgOSkgKyByIHwgMCwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgciA9IHIgKyA2NTI4MCB8IDAsIHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0IC0gMSB8IDAsIHIgPSByIDw8IDEsIGYgPSBmIDw8IDEsICEoZiA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBmLCBoID0gbiA/IGwgOiAhbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gaCwgZiA9IDAsIGggPSB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobiB8IG8gPDwgMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZyA9IGEgLSA0IHwgMCwgbyA9IGVbYSArIDQgPj4gMl0gPj4+IDE3ICYgNCB8IGVbZyA+PiAyXSA+Pj4gMTkgJiAxLCBuID0gUCArIChJW28gKyAzOTUyMCB8IDBdIDw8IDIpIHwgMCwgaCA9IGVbbiA+PiAyXSwgZiA9IGVbaCA+PiAyXSwgaSA9IGkgLSBmIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA+Pj4gMTYgPj4+IDAgPj0gZiA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9IHIgLSAoZiA8PCAxNikgfCAwLCBsID0gZVtoICsgNCA+PiAyXSwgaSAmIDMyNzY4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobCA9IGVbaCArIDQgPj4gMl0sIGYgPSBpID4+PiAwIDwgZiA+Pj4gMCwgZVtuID4+IDJdID0gZVtoICsgKGYgPyAxMiA6IDgpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFo6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBaOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGggPSBlW2sgKyAxNiA+PiAyXSwgbiA9IGggKyAxIHwgMCwgcyA9IElbaCArIDEgfCAwXSwgSVtoIHwgMF0gIT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gbiwgdCA9IDgsIHIgPSAocyA8PCA4KSArIHIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBaOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPj4+IDAgPD0gMTQzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gbiwgciA9IChzIDw8IDkpICsgciB8IDAsIHQgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBaOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHIgPSByICsgNjUyODAgfCAwLCB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0IC0gMSB8IDAsIHIgPSByIDw8IDEsIGkgPSBpIDw8IDEsICEoaSA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBmID8gIWwgOiBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBJOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsID0gZVtoICsgNCA+PiAyXSwgcyA9IG4sIG4gPSBpID4+PiAwIDwgZiA+Pj4gMCwgZVtzID4+IDJdID0gZVtoICsgKG4gPyA4IDogMTIpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBaOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBaOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoID0gZVtrICsgMTYgPj4gMl0sIGkgPSBoICsgMSB8IDAsIHMgPSBJW2ggKyAxIHwgMF0sIElbaCB8IDBdICE9IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBpLCB0ID0gOCwgciA9IChzIDw8IDgpICsgciB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBaOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocyA+Pj4gMCA8PSAxNDMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgciA9IChzIDw8IDkpICsgciB8IDAsIHQgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgWjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHIgPSByICsgNjUyODAgfCAwLCB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgLSAxIHwgMCwgciA9IHIgPDwgMSwgZiA9IGYgPDwgMSwgIShmID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGYsIGwgPSBuID8gbCA6ICFsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gbCwgZiA9IElbbyArIDM5Nzc2IHwgMF0sIGVbdyA+PiAyXSA9IChuIHwgMCkgPT0gKGYgfCAwKSA/IEogOiB5LCBlW2cgPj4gMl0gPSBlW2cgPj4gMl0gfCAzMiwgZVthICsgNCA+PiAyXSA9IGVbYSArIDQgPj4gMl0gfCA4LCBvID0gYSArICgtMiAtIGVbayArIDEyNCA+PiAyXSA8PCAyKSB8IDAsIGVbbyArIDQgPj4gMl0gPSBlW28gKyA0ID4+IDJdIHwgMzI3NjgsIG4gPSBmIF4gbiwgZVtvID4+IDJdID0gZVtvID4+IDJdIHwgbiA8PCAzMSB8IDY1NTM2LCBmID0gbyAtIDQgfCAwLCBlW2YgPj4gMl0gPSBlW2YgPj4gMl0gfCAxMzEwNzIsIG8gPSBuIDw8IDE5LCBCID0gZVtrICsgMTA4ID4+IDJdLCBuID0gUCArIChJW0IgKyAyIHwgMF0gPDwgMikgfCAwLCBoID0gZVtuID4+IDJdLCBmID0gZVtoID4+IDJdLCBpID0gaSAtIGYgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEk6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID4+PiAxNiA+Pj4gMCA+PSBmID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0gciAtIChmIDw8IDE2KSB8IDAsIGwgPSBlW2ggKyA0ID4+IDJdLCBpICYgMzI3NjgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgSTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsID0gZVtoICsgNCA+PiAyXSwgZiA9IGkgPj4+IDAgPCBmID4+PiAwLCBlW24gPj4gMl0gPSBlW2ggKyAoZiA/IDEyIDogOCkgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIFo7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaCA9IGVbayArIDE2ID4+IDJdLCBuID0gaCArIDEgfCAwLCBnID0gSVtoICsgMSB8IDBdLCBJW2ggfCAwXSAhPSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBuLCB0ID0gOCwgciA9IChnIDw8IDgpICsgciB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIFo7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZyA+Pj4gMCA8PSAxNDMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBuLCByID0gKGcgPDwgOSkgKyByIHwgMCwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIFo7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgciA9IHIgKyA2NTI4MCB8IDAsIHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgLSAxIHwgMCwgciA9IHIgPDwgMSwgaSA9IGkgPDwgMSwgIShpID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IGYgPyAhbCA6IGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGwgPSBlW2ggKyA0ID4+IDJdLCBnID0gbiwgbiA9IGkgPj4+IDAgPCBmID4+PiAwLCBlW2cgPj4gMl0gPSBlW2ggKyAobiA/IDggOiAxMikgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFo6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIFo7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGggPSBlW2sgKyAxNiA+PiAyXSwgaSA9IGggKyAxIHwgMCwgZyA9IElbaCArIDEgfCAwXSwgSVtoIHwgMF0gIT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGksIHQgPSA4LCByID0gKGcgPDwgOCkgKyByIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIFo7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnID4+PiAwIDw9IDE0MykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBpLCByID0gKGcgPDwgOSkgKyByIHwgMCwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBaOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgciA9IHIgKyA2NTI4MCB8IDAsIHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gdCAtIDEgfCAwLCByID0gciA8PCAxLCBmID0gZiA8PCAxLCAhKGYgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gZiwgbCA9IG4gPyBsIDogIWw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID0gbCwgZiA9IG8gfCAxNiwgIW4pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB2OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9IGEgLSA0IHwgMCwgaCA9IGVbYSArIDQgPj4gMl0gPj4+IDIwICYgNCB8IChlW3MgPj4gMl0gPj4+IDIyICYgMSB8IChmID4+PiAxNSAmIDE2IHwgKGYgPj4+IDE5ICYgNjQgfCBmID4+PiAzICYgMTcwKSkpLCBvID0gUCArIChJW2ggKyAzOTUyMCB8IDBdIDw8IDIpIHwgMCwgbCA9IGVbbyA+PiAyXSwgbiA9IGVbbCA+PiAyXSwgaSA9IGkgLSBuIHwgMCwgZzIgPSAoYzIgPDwgMikgKyB3IHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA+Pj4gMTYgPj4+IDAgPj0gbiA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9IHIgLSAobiA8PCAxNikgfCAwLCBnID0gZVtsICsgNCA+PiAyXSwgaSAmIDMyNzY4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZyA9IGVbbCArIDQgPj4gMl0sIG4gPSBpID4+PiAwIDwgbiA+Pj4gMCwgZVtvID4+IDJdID0gZVtsICsgKG4gPyAxMiA6IDgpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEk6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBJOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBlW2sgKyAxNiA+PiAyXSwgbyA9IGwgKyAxIHwgMCwgQiA9IElbbCArIDEgfCAwXSwgSVtsIHwgMF0gIT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gbywgdCA9IDgsIHIgPSAoQiA8PCA4KSArIHIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBJOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEIgPj4+IDAgPD0gMTQzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gbywgciA9IChCIDw8IDkpICsgciB8IDAsIHQgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBJOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHIgPSByICsgNjUyODAgfCAwLCB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0IC0gMSB8IDAsIHIgPSByIDw8IDEsIGkgPSBpIDw8IDEsICEoaSA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcgPSBuID8gIWcgOiBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBjOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChnID0gZVtsICsgNCA+PiAyXSwgQiA9IG8sIG8gPSBpID4+PiAwIDwgbiA+Pj4gMCwgZVtCID4+IDJdID0gZVtsICsgKG8gPyA4IDogMTIpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBJOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gZVtrICsgMTYgPj4gMl0sIGkgPSBsICsgMSB8IDAsIEIgPSBJW2wgKyAxIHwgMF0sIElbbCB8IDBdICE9IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBpLCB0ID0gOCwgciA9IChCIDw8IDgpICsgciB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBJOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQiA+Pj4gMCA8PSAxNDMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgciA9IChCIDw8IDkpICsgciB8IDAsIHQgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgSTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHIgPSByICsgNjUyODAgfCAwLCB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgLSAxIHwgMCwgciA9IHIgPDwgMSwgbiA9IG4gPDwgMSwgIShuID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IG4sIGcgPSBvID8gZyA6ICFnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvID0gZywgbiA9IElbaCArIDM5Nzc2IHwgMF0sIGVbZzIgPj4gMl0gPSAobyB8IDApID09IChuIHwgMCkgPyBKIDogeSwgZVtzID4+IDJdID0gZVtzID4+IDJdIHwgMjU2LCBlW2EgKyA0ID4+IDJdID0gZVthICsgNCA+PiAyXSB8IDY0LCBCID0gZVtrICsgMTA4ID4+IDJdLCBmID0gKG4gXiBvKSA8PCAyMiB8IGYgfCAxMjg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyA9IFAgKyAoSVsoZiA+Pj4gNiAmIDQ5NSkgKyBCIHwgMF0gPDwgMikgfCAwLCBoID0gZVtvID4+IDJdLCBuID0gZVtoID4+IDJdLCBpID0gaSAtIG4gfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPj4+IDE2ID4+PiAwID49IG4gPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0gciAtIChuIDw8IDE2KSB8IDAsIGwgPSBlW2ggKyA0ID4+IDJdLCBpICYgMzI3NjgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGwgPSBlW2ggKyA0ID4+IDJdLCBuID0gaSA+Pj4gMCA8IG4gPj4+IDAsIGVbbyA+PiAyXSA9IGVbaCArIChuID8gMTIgOiA4KSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaCA9IGVbayArIDE2ID4+IDJdLCBvID0gaCArIDEgfCAwLCBnID0gSVtoICsgMSB8IDBdLCBJW2ggfCAwXSAhPSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gbywgdCA9IDgsIHIgPSAoZyA8PCA4KSArIHIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGcgPj4+IDAgPD0gMTQzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IG8sIHIgPSAoZyA8PCA5KSArIHIgfCAwLCB0ID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCByID0gciArIDY1MjgwIHwgMCwgdCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0IC0gMSB8IDAsIHIgPSByIDw8IDEsIGkgPSBpIDw8IDEsICEoaSA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBuID8gIWwgOiBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsID0gZVtoICsgNCA+PiAyXSwgZyA9IG8sIG8gPSBpID4+PiAwIDwgbiA+Pj4gMCwgZVtnID4+IDJdID0gZVtoICsgKG8gPyA4IDogMTIpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBjOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaCA9IGVbayArIDE2ID4+IDJdLCBpID0gaCArIDEgfCAwLCBnID0gSVtoICsgMSB8IDBdLCBJW2ggfCAwXSAhPSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGksIHQgPSA4LCByID0gKGcgPDwgOCkgKyByIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBjOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnID4+PiAwIDw9IDE0MykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgciA9IChnIDw8IDkpICsgciB8IDAsIHQgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHIgPSByICsgNjUyODAgfCAwLCB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gdCAtIDEgfCAwLCByID0gciA8PCAxLCBuID0gbiA8PCAxLCAhKG4gPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gbiwgbCA9IG8gPyBsIDogIWw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzID0gYSAtIDQgfCAwLCBoID0gZVthICsgNCA+PiAyXSA+Pj4gMjMgJiA0IHwgKGVbcyA+PiAyXSA+Pj4gMjUgJiAxIHwgKGYgPj4+IDE4ICYgMTYgfCAoZiA+Pj4gMjIgJiA2NCB8IGYgPj4+IDYgJiAxNzApKSksIG8gPSBQICsgKElbaCArIDM5NTIwIHwgMF0gPDwgMikgfCAwLCBsID0gZVtvID4+IDJdLCBuID0gZVtsID4+IDJdLCBpID0gaSAtIG4gfCAwLCBnMiA9IHcgKyBIIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPj4+IDE2ID4+PiAwID49IG4gPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9IHIgLSAobiA8PCAxNikgfCAwLCBnID0gZVtsICsgNCA+PiAyXSwgaSAmIDMyNzY4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGcgPSBlW2wgKyA0ID4+IDJdLCBuID0gaSA+Pj4gMCA8IG4gPj4+IDAsIGVbbyA+PiAyXSA9IGVbbCArIChuID8gMTIgOiA4KSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBlW2sgKyAxNiA+PiAyXSwgbyA9IGwgKyAxIHwgMCwgQiA9IElbbCArIDEgfCAwXSwgSVtsIHwgMF0gIT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBvLCB0ID0gOCwgciA9IChCIDw8IDgpICsgciB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQiA+Pj4gMCA8PSAxNDMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IG8sIHIgPSAoQiA8PCA5KSArIHIgfCAwLCB0ID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB2OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCByID0gciArIDY1MjgwIHwgMCwgdCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgLSAxIHwgMCwgciA9IHIgPDwgMSwgaSA9IGkgPDwgMSwgIShpID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZyA9IG4gPyAhZyA6IGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGcgPSBlW2wgKyA0ID4+IDJdLCBCID0gbywgbyA9IGkgPj4+IDAgPCBuID4+PiAwLCBlW0IgPj4gMl0gPSBlW2wgKyAobyA/IDggOiAxMikgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGVbayArIDE2ID4+IDJdLCBpID0gbCArIDEgfCAwLCBCID0gSVtsICsgMSB8IDBdLCBJW2wgfCAwXSAhPSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBpLCB0ID0gOCwgciA9IChCIDw8IDgpICsgciB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQiA+Pj4gMCA8PSAxNDMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBpLCByID0gKEIgPDwgOSkgKyByIHwgMCwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgciA9IHIgKyA2NTI4MCB8IDAsIHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgLSAxIHwgMCwgciA9IHIgPDwgMSwgbiA9IG4gPDwgMSwgIShuID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IG4sIGcgPSBvID8gZyA6ICFnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyA9IGcsIG4gPSBJW2ggKyAzOTc3NiB8IDBdLCBlW2cyID4+IDJdID0gKG8gfCAwKSA9PSAobiB8IDApID8gSiA6IHksIGVbcyA+PiAyXSA9IGVbcyA+PiAyXSB8IDIwNDgsIGVbYSArIDQgPj4gMl0gPSBlW2EgKyA0ID4+IDJdIHwgNTEyLCBmID0gKG4gXiBvKSA8PCAyNSB8IGYgfCAxMDI0LCBCID0gZVtrICsgMTA4ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoID0gUCArIChJWyhmID4+PiA5ICYgNDk1KSArIEIgfCAwXSA8PCAyKSB8IDAsIGwgPSBlW2ggPj4gMl0sIG4gPSBlW2wgPj4gMl0sIGkgPSBpIC0gbiB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPj4+IDE2ID4+PiAwID49IG4gPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSByIC0gKG4gPDwgMTYpIHwgMCwgbyA9IGVbbCArIDQgPj4gMl0sIGkgJiAzMjc2OCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGcgPSBlW2wgKyA0ID4+IDJdLCBuID0gaSA+Pj4gMCA8IG4gPj4+IDAsIGVbaCA+PiAyXSA9IGVbbCArIChuID8gMTIgOiA4KSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gZVtrICsgMTYgPj4gMl0sIG8gPSBsICsgMSB8IDAsIHMgPSBJW2wgKyAxIHwgMF0sIElbbCB8IDBdICE9IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IG8sIHQgPSA4LCByID0gKHMgPDwgOCkgKyByIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzID4+PiAwIDw9IDE0MykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IG8sIHIgPSAocyA8PCA5KSArIHIgfCAwLCB0ID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCByID0gciArIDY1MjgwIHwgMCwgdCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gdCAtIDEgfCAwLCByID0gciA8PCAxLCBpID0gaSA8PCAxLCAhKGkgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvID0gbiA/ICFnIDogZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZyA9IGVbbCArIDQgPj4gMl0sIG8gPSBpID4+PiAwIDwgbiA+Pj4gMCwgZVtoID4+IDJdID0gZVtsICsgKG8gPyA4IDogMTIpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBCOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gZVtrICsgMTYgPj4gMl0sIGkgPSBsICsgMSB8IDAsIHMgPSBJW2wgKyAxIHwgMF0sIElbbCB8IDBdICE9IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBpLCB0ID0gOCwgciA9IChzIDw8IDgpICsgciB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBCOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocyA+Pj4gMCA8PSAxNDMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgciA9IChzIDw8IDkpICsgciB8IDAsIHQgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHIgPSByICsgNjUyODAgfCAwLCB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgLSAxIHwgMCwgciA9IHIgPDwgMSwgbiA9IG4gPDwgMSwgIShuID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IG4sIG8gPSBvID8gZyA6ICFnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW8pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE8gPSBhIC0gNCB8IDAsIHcyID0gZVthICsgNCA+PiAyXSA+Pj4gMjYgJiA0IHwgKGVbTyA+PiAyXSA+Pj4gMjggJiAxIHwgKGYgPj4+IDIxICYgMTYgfCAoZiA+Pj4gMjUgJiA2NCB8IGYgPj4+IDkgJiAxNzApKSksIGggPSBQICsgKElbdzIgKyAzOTUyMCB8IDBdIDw8IDIpIHwgMCwgQiA9IGVbaCA+PiAyXSwgbiA9IGVbQiA+PiAyXSwgaSA9IGkgLSBuIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcyID0gdyArIG0gfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA+Pj4gMTYgPj4+IDAgPj0gbiA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0gciAtIChuIDw8IDE2KSB8IDAsIG8gPSBlW0IgKyA0ID4+IDJdLCBpICYgMzI3NjgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZyA9IGVbQiArIDQgPj4gMl0sIG4gPSBpID4+PiAwIDwgbiA+Pj4gMCwgZVtoID4+IDJdID0gZVsobiA/IDEyIDogOCkgKyBCID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGVbayArIDE2ID4+IDJdLCBvID0gbCArIDEgfCAwLCBzID0gSVtsICsgMSB8IDBdLCBJW2wgfCAwXSAhPSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IG8sIHQgPSA4LCByID0gKHMgPDwgOCkgKyByIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzID4+PiAwIDw9IDE0MykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gbywgciA9IChzIDw8IDkpICsgciB8IDAsIHQgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHIgPSByICsgNjUyODAgfCAwLCB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gdCAtIDEgfCAwLCByID0gciA8PCAxLCBpID0gaSA8PCAxLCAhKGkgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvID0gbiA/ICFnIDogZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZyA9IGVbQiArIDQgPj4gMl0sIG8gPSBpID4+PiAwIDwgbiA+Pj4gMCwgZVtoID4+IDJdID0gZVsobyA/IDggOiAxMikgKyBCID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG46IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBlW2sgKyAxNiA+PiAyXSwgaSA9IGwgKyAxIHwgMCwgcyA9IElbbCArIDEgfCAwXSwgSVtsIHwgMF0gIT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgdCA9IDgsIHIgPSAocyA8PCA4KSArIHIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPj4+IDAgPD0gMTQzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgciA9IChzIDw8IDkpICsgciB8IDAsIHQgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHIgPSByICsgNjUyODAgfCAwLCB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0IC0gMSB8IDAsIHIgPSByIDw8IDEsIG4gPSBuIDw8IDEsICEobiA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBuLCBvID0gbyA/IGcgOiAhZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBJW3cyICsgMzk3NzYgfCAwXSwgZVtnMiA+PiAyXSA9IChvIHwgMCkgPT0gKG4gfCAwKSA/IEogOiB5LCBlW08gPj4gMl0gPSBlW08gPj4gMl0gfCAxNjM4NCwgZVthICsgNCA+PiAyXSA9IGVbYSArIDQgPj4gMl0gfCA0MDk2LCBsID0gYSArIChlW2sgKyAxMjQgPj4gMl0gPDwgMikgfCAwLCBlW2wgKyA0ID4+IDJdID0gZVtsICsgNCA+PiAyXSB8IDQsIGVbbCArIDEyID4+IDJdID0gZVtsICsgMTIgPj4gMl0gfCAxLCBuID0gbiBeIG8sIGVbbCArIDggPj4gMl0gPSBlW2wgKyA4ID4+IDJdIHwgbiA8PCAxOCB8IDIsIGYgPSBuIDw8IDI4IHwgZiB8IDgxOTI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbYSA+PiAyXSA9IGYgJiAtMTIyNjgzMzkyMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZiA9IGEgKyA0IHwgMCwgdyA9IHcgKyA0IHwgMCwgRSA9IEUgKyAxIHwgMCwgKGMyIHwgMCkgPT0gKEUgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmID0gYSArIDEyIHwgMCwgdyA9IHcgKyBtIHwgMCwgQyA9IEMgKyA0IHwgMCwgbiA9IGVbayArIDEyOCA+PiAyXSwgIShDID4+PiAwIDwgKG4gJiAtNCkgPj4+IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gbiAmIC00LCBmID0gKGYgPj4+IDAgPD0gNCA/IDQgOiBmKSAtIDEgfCAwLCBDID0gKGYgJiAtNCkgKyA0IHwgMCwgZiA9IChvICsgKGYgPDwgMSAmIC04KSB8IDApICsgMjAgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbayArIDggPj4gMl0gPSB0LCBlW2sgKyA0ID4+IDJdID0gaSwgZVtrID4+IDJdID0gciwgZVtrICsgMTA0ID4+IDJdID0gaCwgIWMyIHwgbiA+Pj4gMCA8PSBDID4+PiAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gMCwgZVtrICsgMTI4ID4+IDJdICE9IChDIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IFg0KGssIGYsIChaKHQsIGMyKSA8PCAyKSArIHcgfCAwLCBKLCB0LCAwKSwgdCA9IHQgKyAxIHwgMCwgdCA+Pj4gMCA8IGVbayArIDEyOCA+PiAyXSAtIEMgPj4+IDA7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbZiA+PiAyXSA9IGVbZiA+PiAyXSAmIC0xMjI2ODMzOTIxLCB3ID0gdyArIDQgfCAwLCBmID0gZiArIDQgfCAwLCBjID0gYyArIDEgfCAwLCAoYzIgfCAwKSA9PSAoYyB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKEggPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gZiwgbCA9IG4sIG4gPSBlW24gPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQ6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSBlW28gPj4gMl0sIG4gPSBlW2ggPj4gMl0sIGkgPSBpIC0gbiB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPj4+IDE2ID4+PiAwIDwgbiA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHUgPSBlW2ggKyA0ID4+IDJdLCBmID0gaSA+Pj4gMCA8IG4gPj4+IDAsIGVbbyA+PiAyXSA9IGVbaCArIChmID8gOCA6IDEyKSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoID0gZVtrICsgMTYgPj4gMl0sIGkgPSBoICsgMSB8IDAsIHcgPSBJW2ggKyAxIHwgMF0sIElbaCB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodyA+Pj4gMCA+PSAxNDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgciA9IHIgKyA2NTI4MCB8IDAsIHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBpLCByID0gKHcgPDwgOSkgKyByIHwgMCwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGksIHQgPSA4LCByID0gKHcgPDwgOCkgKyByIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0IC0gMSB8IDAsIHIgPSByIDw8IDEsIG4gPSBuIDw8IDEsICEobiA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBuLCBmID0gZiA/IHUgOiAhdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0gciAtIChuIDw8IDE2KSB8IDAsICEoaSAmIDMyNzY4KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHUgPSBlW2ggKyA0ID4+IDJdLCBmID0gaSA+Pj4gMCA8IG4gPj4+IDAsIGVbbyA+PiAyXSA9IGVbaCArIChmID8gMTIgOiA4KSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoID0gZVtrICsgMTYgPj4gMl0sIG4gPSBoICsgMSB8IDAsIHcgPSBJW2ggKyAxIHwgMF0sIElbaCB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodyA+Pj4gMCA+PSAxNDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgciA9IHIgKyA2NTI4MCB8IDAsIHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBuLCByID0gKHcgPDwgOSkgKyByIHwgMCwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IG4sIHQgPSA4LCByID0gKHcgPDwgOCkgKyByIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0IC0gMSB8IDAsIHIgPSByIDw8IDEsIGkgPSBpIDw8IDEsICEoaSA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBmID8gIXUgOiB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IGVbaCArIDQgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaCA9IG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gZVt2ID4+IDJdLCBuID0gZVtmID4+IDJdLCBpID0gaSAtIG4gfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGg6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID4+PiAxNiA+Pj4gMCA8IG4gPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh3ID0gZVtmICsgNCA+PiAyXSwgaCA9IGkgPj4+IDAgPCBuID4+PiAwLCBmID0gZVsoaCA/IDggOiAxMikgKyBmID4+IDJdLCBlW3YgPj4gMl0gPSBmOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHc6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHUgPSBlW2sgKyAxNiA+PiAyXSwgaSA9IHUgKyAxIHwgMCwgZyA9IElbdSArIDEgfCAwXSwgSVt1IHwgMF0gPT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnID4+PiAwID49IDE0NCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCByID0gciArIDY1MjgwIHwgMCwgdCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGksIHIgPSAoZyA8PCA5KSArIHIgfCAwLCB0ID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgdCA9IDgsIHIgPSAoZyA8PCA4KSArIHIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgLSAxIHwgMCwgciA9IHIgPDwgMSwgbiA9IG4gPDwgMSwgIShuID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IG4sIHUgPSBoID8gdyA6ICF3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSByIC0gKG4gPDwgMTYpIHwgMCwgIShpICYgMzI3NjgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodyA9IGVbZiArIDQgPj4gMl0sIG4gPSBpID4+PiAwIDwgbiA+Pj4gMCwgZiA9IGVbKG4gPyAxMiA6IDgpICsgZiA+PiAyXSwgZVt2ID4+IDJdID0gZjsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1ID0gZVtrICsgMTYgPj4gMl0sIGggPSB1ICsgMSB8IDAsIGcgPSBJW3UgKyAxIHwgMF0sIElbdSB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZyA+Pj4gMCA+PSAxNDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgciA9IHIgKyA2NTI4MCB8IDAsIHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBoLCByID0gKGcgPDwgOSkgKyByIHwgMCwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGgsIHQgPSA4LCByID0gKGcgPDwgOCkgKyByIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0IC0gMSB8IDAsIHIgPSByIDw8IDEsIGkgPSBpIDw8IDEsICEoaSA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBuID8gIXcgOiB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IGVbZiArIDQgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBlW2YgPj4gMl0sIGkgPSBpIC0gbiB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPj4+IDE2ID4+PiAwIDwgbiA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHcgPSBlW2YgKyA0ID4+IDJdLCBoID0gZiwgZiA9IGkgPj4+IDAgPCBuID4+PiAwLCBlW3YgPj4gMl0gPSBlW2ggKyAoZiA/IDggOiAxMikgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaCA9IGVbayArIDE2ID4+IDJdLCBpID0gaCArIDEgfCAwLCBnID0gSVtoICsgMSB8IDBdLCBJW2ggfCAwXSA9PSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGcgPj4+IDAgPj0gMTQ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHIgPSByICsgNjUyODAgfCAwLCB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgciA9IChnIDw8IDkpICsgciB8IDAsIHQgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBpLCB0ID0gOCwgciA9IChnIDw8IDgpICsgciB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gdCAtIDEgfCAwLCByID0gciA8PCAxLCBuID0gbiA8PCAxLCAhKG4gPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gbiwgZiA9IGYgPyB3IDogIXc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9IHIgLSAobiA8PCAxNikgfCAwLCAhKGkgJiAzMjc2OCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh3ID0gZVtmICsgNCA+PiAyXSwgaCA9IGYsIGYgPSBpID4+PiAwIDwgbiA+Pj4gMCwgZVt2ID4+IDJdID0gZVtoICsgKGYgPyAxMiA6IDgpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHc6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGggPSBlW2sgKyAxNiA+PiAyXSwgbiA9IGggKyAxIHwgMCwgZyA9IElbaCArIDEgfCAwXSwgSVtoIHwgMF0gPT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnID4+PiAwID49IDE0NCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCByID0gciArIDY1MjgwIHwgMCwgdCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IG4sIHIgPSAoZyA8PCA5KSArIHIgfCAwLCB0ID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gbiwgdCA9IDgsIHIgPSAoZyA8PCA4KSArIHIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgLSAxIHwgMCwgciA9IHIgPDwgMSwgaSA9IGkgPDwgMSwgIShpID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IGYgPyAhdyA6IHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gZVtmICsgNCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IDAsIGggPSB2OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGg6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHc6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG86IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZiB8IHUgPDwgMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcgPSBsIC0gNCB8IDAsIGggPSBlW2wgKyA0ID4+IDJdID4+PiAxNyAmIDQgfCBlW2cgPj4gMl0gPj4+IDE5ICYgMSwgZiA9IHkgKyAoSVtoICsgMzk1MjAgfCAwXSA8PCAyKSB8IDAsIHUgPSBlW2YgPj4gMl0sIG4gPSBlW3UgPj4gMl0sIGkgPSBpIC0gbiB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID4+PiAxNiA+Pj4gMCA8IG4gPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHcgPSBlW3UgKyA0ID4+IDJdLCBKID0gZiwgZiA9IGkgPj4+IDAgPCBuID4+PiAwLCBlW0ogPj4gMl0gPSBlW3UgKyAoZiA/IDggOiAxMikgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1ID0gZVtrICsgMTYgPj4gMl0sIGkgPSB1ICsgMSB8IDAsIHMgPSBJW3UgKyAxIHwgMF0sIElbdSB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzID4+PiAwID49IDE0NCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHIgPSByICsgNjUyODAgfCAwLCB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgciA9IChzIDw8IDkpICsgciB8IDAsIHQgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBpLCB0ID0gOCwgciA9IChzIDw8IDgpICsgciB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgLSAxIHwgMCwgciA9IHIgPDwgMSwgbiA9IG4gPDwgMSwgIShuID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IG4sIG4gPSBmID8gdyA6ICF3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSByIC0gKG4gPDwgMTYpIHwgMCwgIShpICYgMzI3NjgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh3ID0gZVt1ICsgNCA+PiAyXSwgSiA9IGYsIGYgPSBpID4+PiAwIDwgbiA+Pj4gMCwgZVtKID4+IDJdID0gZVt1ICsgKGYgPyAxMiA6IDgpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBjOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodSA9IGVbayArIDE2ID4+IDJdLCBuID0gdSArIDEgfCAwLCBzID0gSVt1ICsgMSB8IDBdLCBJW3UgfCAwXSA9PSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocyA+Pj4gMCA+PSAxNDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCByID0gciArIDY1MjgwIHwgMCwgdCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBjOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IG4sIHIgPSAocyA8PCA5KSArIHIgfCAwLCB0ID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBjOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gbiwgdCA9IDgsIHIgPSAocyA8PCA4KSArIHIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0IC0gMSB8IDAsIHIgPSByIDw8IDEsIGkgPSBpIDw8IDEsICEoaSA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBmID8gIXcgOiB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IGVbdSArIDQgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gSVtoICsgMzk3NzYgfCAwXSwgZVthID4+IDJdID0gKG4gfCAwKSA9PSAoZiB8IDApID8gRSA6IG0sIGVbZyA+PiAyXSA9IGVbZyA+PiAyXSB8IDMyLCBlW2wgKyA0ID4+IDJdID0gZVtsICsgNCA+PiAyXSB8IDgsIGggPSAoZiBeIG4pIDw8IDE5LCBCID0gZVtrICsgMTA4ID4+IDJdLCBmID0geSArIChJW0IgKyAyIHwgMF0gPDwgMikgfCAwLCB1ID0gZVtmID4+IDJdLCBuID0gZVt1ID4+IDJdLCBpID0gaSAtIG4gfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA+Pj4gMTYgPj4+IDAgPCBuID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh3ID0gZVt1ICsgNCA+PiAyXSwgSiA9IGYsIGYgPSBpID4+PiAwIDwgbiA+Pj4gMCwgZVtKID4+IDJdID0gZVt1ICsgKGYgPyA4IDogMTIpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBjOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodSA9IGVbayArIDE2ID4+IDJdLCBpID0gdSArIDEgfCAwLCBnID0gSVt1ICsgMSB8IDBdLCBJW3UgfCAwXSA9PSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZyA+Pj4gMCA+PSAxNDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCByID0gciArIDY1MjgwIHwgMCwgdCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBjOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGksIHIgPSAoZyA8PCA5KSArIHIgfCAwLCB0ID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBjOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgdCA9IDgsIHIgPSAoZyA8PCA4KSArIHIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0IC0gMSB8IDAsIHIgPSByIDw8IDEsIG4gPSBuIDw8IDEsICEobiA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBuLCBmID0gZiA/IHcgOiAhdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB2OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0gciAtIChuIDw8IDE2KSB8IDAsICEoaSAmIDMyNzY4KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodyA9IGVbdSArIDQgPj4gMl0sIEogPSBmLCBmID0gaSA+Pj4gMCA8IG4gPj4+IDAsIGVbSiA+PiAyXSA9IGVbdSArIChmID8gMTIgOiA4KSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHUgPSBlW2sgKyAxNiA+PiAyXSwgbiA9IHUgKyAxIHwgMCwgZyA9IElbdSArIDEgfCAwXSwgSVt1IHwgMF0gPT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGcgPj4+IDAgPj0gMTQ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgciA9IHIgKyA2NTI4MCB8IDAsIHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBuLCByID0gKGcgPDwgOSkgKyByIHwgMCwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IG4sIHQgPSA4LCByID0gKGcgPDwgOCkgKyByIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gdCAtIDEgfCAwLCByID0gciA8PCAxLCBpID0gaSA8PCAxLCAhKGkgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gZiA/ICF3IDogdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB2OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBlW3UgKyA0ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPSBoIHwgMTYsICFmKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBsIC0gNCB8IDAsIHUgPSBlW2wgKyA0ID4+IDJdID4+PiAyMCAmIDQgfCAoZVtzID4+IDJdID4+PiAyMiAmIDEgfCAobiA+Pj4gMTUgJiAxNiB8IChuID4+PiAxOSAmIDY0IHwgbiA+Pj4gMyAmIDE3MCkpKSwgaCA9IHkgKyAoSVt1ICsgMzk1MjAgfCAwXSA8PCAyKSB8IDAsIHcgPSBlW2ggPj4gMl0sIGYgPSBlW3cgPj4gMl0sIGkgPSBpIC0gZiB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID4+PiAxNiA+Pj4gMCA8IGYgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGcgPSBlW3cgKyA0ID4+IDJdLCBKID0gaCwgaCA9IGkgPj4+IDAgPCBmID4+PiAwLCBlW0ogPj4gMl0gPSBlW3cgKyAoaCA/IDggOiAxMikgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3ID0gZVtrICsgMTYgPj4gMl0sIGkgPSB3ICsgMSB8IDAsIGMgPSBJW3cgKyAxIHwgMF0sIElbdyB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID4+PiAwID49IDE0NCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHIgPSByICsgNjUyODAgfCAwLCB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgciA9IChjIDw8IDkpICsgciB8IDAsIHQgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBpLCB0ID0gOCwgciA9IChjIDw8IDgpICsgciB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgLSAxIHwgMCwgciA9IHIgPDwgMSwgZiA9IGYgPDwgMSwgIShmID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGYsIGggPSBoID8gZyA6ICFnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSByIC0gKGYgPDwgMTYpIHwgMCwgIShpICYgMzI3NjgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChnID0gZVt3ICsgNCA+PiAyXSwgZiA9IGkgPj4+IDAgPCBmID4+PiAwLCBlW2ggPj4gMl0gPSBlW3cgKyAoZiA/IDEyIDogOCkgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3ID0gZVtrICsgMTYgPj4gMl0sIGggPSB3ICsgMSB8IDAsIGMgPSBJW3cgKyAxIHwgMF0sIElbdyB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID4+PiAwID49IDE0NCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHIgPSByICsgNjUyODAgfCAwLCB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaCwgciA9IChjIDw8IDkpICsgciB8IDAsIHQgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBoLCB0ID0gOCwgciA9IChjIDw8IDgpICsgciB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgLSAxIHwgMCwgciA9IHIgPDwgMSwgaSA9IGkgPDwgMSwgIShpID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaCA9IGYgPyAhZyA6IGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoID0gZVt3ICsgNCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBJW3UgKyAzOTc3NiB8IDBdLCBlW2EgKyAyNTYgPj4gMl0gPSAoaCB8IDApID09IChmIHwgMCkgPyBFIDogbSwgZVtzID4+IDJdID0gZVtzID4+IDJdIHwgMjU2LCBlW2wgKyA0ID4+IDJdID0gZVtsICsgNCA+PiAyXSB8IDY0LCBCID0gZVtrICsgMTA4ID4+IDJdLCBuID0gKGYgXiBoKSA8PCAyMiB8IG4gfCAxMjg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSB5ICsgKElbKG4gPj4+IDYgJiA0OTUpICsgQiB8IDBdIDw8IDIpIHwgMCwgdSA9IGVbaCA+PiAyXSwgZiA9IGVbdSA+PiAyXSwgaSA9IGkgLSBmIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA+Pj4gMTYgPj4+IDAgPCBmID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodyA9IGVbdSArIDQgPj4gMl0sIEogPSBoLCBoID0gaSA+Pj4gMCA8IGYgPj4+IDAsIGVbSiA+PiAyXSA9IGVbdSArIChoID8gOCA6IDEyKSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1ID0gZVtrICsgMTYgPj4gMl0sIGkgPSB1ICsgMSB8IDAsIGcgPSBJW3UgKyAxIHwgMF0sIElbdSB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZyA+Pj4gMCA+PSAxNDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgciA9IHIgKyA2NTI4MCB8IDAsIHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBpLCByID0gKGcgPDwgOSkgKyByIHwgMCwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGksIHQgPSA4LCByID0gKGcgPDwgOCkgKyByIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0IC0gMSB8IDAsIHIgPSByIDw8IDEsIGYgPSBmIDw8IDEsICEoZiA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBmLCBmID0gaCA/IHcgOiAhdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0gciAtIChmIDw8IDE2KSB8IDAsICEoaSAmIDMyNzY4KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHcgPSBlW3UgKyA0ID4+IDJdLCBmID0gaSA+Pj4gMCA8IGYgPj4+IDAsIGVbaCA+PiAyXSA9IGVbdSArIChmID8gMTIgOiA4KSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1ID0gZVtrICsgMTYgPj4gMl0sIGggPSB1ICsgMSB8IDAsIGcgPSBJW3UgKyAxIHwgMF0sIElbdSB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZyA+Pj4gMCA+PSAxNDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgciA9IHIgKyA2NTI4MCB8IDAsIHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBoLCByID0gKGcgPDwgOSkgKyByIHwgMCwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGgsIHQgPSA4LCByID0gKGcgPDwgOCkgKyByIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0IC0gMSB8IDAsIHIgPSByIDw8IDEsIGkgPSBpIDw8IDEsICEoaSA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBmID8gIXcgOiB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IGVbdSArIDQgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9IGwgLSA0IHwgMCwgdSA9IGVbbCArIDQgPj4gMl0gPj4+IDIzICYgNCB8IChlW3MgPj4gMl0gPj4+IDI1ICYgMSB8IChuID4+PiAxOCAmIDE2IHwgKG4gPj4+IDIyICYgNjQgfCBuID4+PiA2ICYgMTcwKSkpLCBoID0geSArIChJW3UgKyAzOTUyMCB8IDBdIDw8IDIpIHwgMCwgdyA9IGVbaCA+PiAyXSwgZiA9IGVbdyA+PiAyXSwgaSA9IGkgLSBmIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID4+PiAxNiA+Pj4gMCA8IGYgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZyA9IGVbdyArIDQgPj4gMl0sIEogPSBoLCBoID0gaSA+Pj4gMCA8IGYgPj4+IDAsIGVbSiA+PiAyXSA9IGVbdyArIChoID8gOCA6IDEyKSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodyA9IGVbayArIDE2ID4+IDJdLCBpID0gdyArIDEgfCAwLCBjID0gSVt3ICsgMSB8IDBdLCBJW3cgfCAwXSA9PSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID4+PiAwID49IDE0NCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgciA9IHIgKyA2NTI4MCB8IDAsIHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBpLCByID0gKGMgPDwgOSkgKyByIHwgMCwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGksIHQgPSA4LCByID0gKGMgPDwgOCkgKyByIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgLSAxIHwgMCwgciA9IHIgPDwgMSwgZiA9IGYgPDwgMSwgIShmID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGYsIGggPSBoID8gZyA6ICFnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSByIC0gKGYgPDwgMTYpIHwgMCwgIShpICYgMzI3NjgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGcgPSBlW3cgKyA0ID4+IDJdLCBmID0gaSA+Pj4gMCA8IGYgPj4+IDAsIGVbaCA+PiAyXSA9IGVbdyArIChmID8gMTIgOiA4KSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodyA9IGVbayArIDE2ID4+IDJdLCBoID0gdyArIDEgfCAwLCBjID0gSVt3ICsgMSB8IDBdLCBJW3cgfCAwXSA9PSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID4+PiAwID49IDE0NCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgciA9IHIgKyA2NTI4MCB8IDAsIHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBoLCByID0gKGMgPDwgOSkgKyByIHwgMCwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGgsIHQgPSA4LCByID0gKGMgPDwgOCkgKyByIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgLSAxIHwgMCwgciA9IHIgPDwgMSwgaSA9IGkgPDwgMSwgIShpID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaCA9IGYgPyAhZyA6IGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoID0gZVt3ICsgNCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gSVt1ICsgMzk3NzYgfCAwXSwgZVthICsgNTEyID4+IDJdID0gKGggfCAwKSA9PSAoZiB8IDApID8gRSA6IG0sIGVbcyA+PiAyXSA9IGVbcyA+PiAyXSB8IDIwNDgsIGVbbCArIDQgPj4gMl0gPSBlW2wgKyA0ID4+IDJdIHwgNTEyLCBuID0gKGYgXiBoKSA8PCAyNSB8IG4gfCAxMDI0LCBCID0gZVtrICsgMTA4ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaCA9IHkgKyAoSVsobiA+Pj4gOSAmIDQ5NSkgKyBCIHwgMF0gPDwgMikgfCAwLCB3ID0gZVtoID4+IDJdLCBmID0gZVt3ID4+IDJdLCBpID0gaSAtIGYgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA+Pj4gMTYgPj4+IDAgPCBmID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChnID0gZVt3ICsgNCA+PiAyXSwgdSA9IGkgPj4+IDAgPCBmID4+PiAwLCBlW2ggPj4gMl0gPSBlW3cgKyAodSA/IDggOiAxMikgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3ID0gZVtrICsgMTYgPj4gMl0sIGkgPSB3ICsgMSB8IDAsIHMgPSBJW3cgKyAxIHwgMF0sIElbdyB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzID4+PiAwID49IDE0NCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHIgPSByICsgNjUyODAgfCAwLCB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgciA9IChzIDw8IDkpICsgciB8IDAsIHQgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBpLCB0ID0gOCwgciA9IChzIDw8IDgpICsgciB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgLSAxIHwgMCwgciA9IHIgPDwgMSwgZiA9IGYgPDwgMSwgIShmID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGYsIGYgPSB1ID8gZyA6ICFnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSByIC0gKGYgPDwgMTYpIHwgMCwgIShpICYgMzI3NjgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChnID0gZVt3ICsgNCA+PiAyXSwgZiA9IGkgPj4+IDAgPCBmID4+PiAwLCBlW2ggPj4gMl0gPSBlW3cgKyAoZiA/IDEyIDogOCkgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3ID0gZVtrICsgMTYgPj4gMl0sIHUgPSB3ICsgMSB8IDAsIHMgPSBJW3cgKyAxIHwgMF0sIElbdyB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzID4+PiAwID49IDE0NCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHIgPSByICsgNjUyODAgfCAwLCB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gdSwgciA9IChzIDw8IDkpICsgciB8IDAsIHQgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSB1LCB0ID0gOCwgciA9IChzIDw8IDgpICsgciB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgLSAxIHwgMCwgciA9IHIgPDwgMSwgaSA9IGkgPDwgMSwgIShpID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IGYgPyAhZyA6IGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gZVt3ICsgNCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IGwgLSA0IHwgMCwgTyA9IGVbbCArIDQgPj4gMl0gPj4+IDI2ICYgNCB8IChlW2MgPj4gMl0gPj4+IDI4ICYgMSB8IChuID4+PiAyMSAmIDE2IHwgKG4gPj4+IDI1ICYgNjQgfCBuID4+PiA5ICYgMTcwKSkpLCBoID0geSArIChJW08gKyAzOTUyMCB8IDBdIDw8IDIpIHwgMCwgQiA9IGVbaCA+PiAyXSwgZiA9IGVbQiA+PiAyXSwgaSA9IGkgLSBmIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGg6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiAmIDIwOTcxNjgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSB5ICsgKElbZVtrICsgMTA4ID4+IDJdICsgKG4gJiA0OTUpIHwgMF0gPDwgMikgfCAwLCB3ID0gZVtoID4+IDJdLCBmID0gZVt3ID4+IDJdLCBpID0gaSAtIGYgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHc6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID4+PiAxNiA+Pj4gMCA8IGYgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChnID0gZVt3ICsgNCA+PiAyXSwgdSA9IGkgPj4+IDAgPCBmID4+PiAwLCBlW2ggPj4gMl0gPSBlW3cgKyAodSA/IDggOiAxMikgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodyA9IGVbayArIDE2ID4+IDJdLCBpID0gdyArIDEgfCAwLCBzID0gSVt3ICsgMSB8IDBdLCBJW3cgfCAwXSA9PSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPj4+IDAgPj0gMTQ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHIgPSByICsgNjUyODAgfCAwLCB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgciA9IChzIDw8IDkpICsgciB8IDAsIHQgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBpLCB0ID0gOCwgciA9IChzIDw8IDgpICsgciB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gdCAtIDEgfCAwLCByID0gciA8PCAxLCBmID0gZiA8PCAxLCAhKGYgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gZiwgZiA9IHUgPyBnIDogIWc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9IHIgLSAoZiA8PCAxNikgfCAwLCAhKGkgJiAzMjc2OCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChnID0gZVt3ICsgNCA+PiAyXSwgZiA9IGkgPj4+IDAgPCBmID4+PiAwLCBlW2ggPj4gMl0gPSBlW3cgKyAoZiA/IDEyIDogOCkgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodyA9IGVbayArIDE2ID4+IDJdLCB1ID0gdyArIDEgfCAwLCBzID0gSVt3ICsgMSB8IDBdLCBJW3cgfCAwXSA9PSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPj4+IDAgPj0gMTQ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHIgPSByICsgNjUyODAgfCAwLCB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gdSwgciA9IChzIDw8IDkpICsgciB8IDAsIHQgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSB1LCB0ID0gOCwgciA9IChzIDw8IDgpICsgciB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gdCAtIDEgfCAwLCByID0gciA8PCAxLCBpID0gaSA8PCAxLCAhKGkgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gZiA/ICFnIDogZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBlW3cgKyA0ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWYpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBsIC0gNCB8IDAsIHcgPSBlW2wgKyA0ID4+IDJdID4+PiAxNyAmIDQgfCAoZVtzID4+IDJdID4+PiAxOSAmIDEgfCAobiA+Pj4gMTQgJiAxNiB8IChuID4+PiAxNiAmIDY0IHwgbiAmIDE3MCkpKSwgaCA9IHkgKyAoSVt3ICsgMzk1MjAgfCAwXSA8PCAyKSB8IDAsIGMgPSBlW2ggPj4gMl0sIGYgPSBlW2MgPj4gMl0sIGkgPSBpIC0gZiB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPj4+IDE2ID4+PiAwIDwgZiA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGcgPSBlW2MgKyA0ID4+IDJdLCB1ID0gaSA+Pj4gMCA8IGYgPj4+IDAsIGVbaCA+PiAyXSA9IGVbYyArICh1ID8gOCA6IDEyKSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gZVtrICsgMTYgPj4gMl0sIGkgPSB0ICsgMSB8IDAsIGMgPSBJW3QgKyAxIHwgMF0sIElbdCB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA+Pj4gMCA+PSAxNDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgciA9IHIgKyA2NTI4MCB8IDAsIHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBpLCByID0gKGMgPDwgOSkgKyByIHwgMCwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGksIHQgPSA4LCByID0gKGMgPDwgOCkgKyByIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0IC0gMSB8IDAsIHIgPSByIDw8IDEsIGYgPSBmIDw8IDEsICEoZiA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBmLCB1ID0gdSA/IGcgOiAhZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0gciAtIChmIDw8IDE2KSB8IDAsICEoaSAmIDMyNzY4KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGcgPSBlW2MgKyA0ID4+IDJdLCBmID0gaSA+Pj4gMCA8IGYgPj4+IDAsIGVbaCA+PiAyXSA9IGVbYyArIChmID8gMTIgOiA4KSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gZVtrICsgMTYgPj4gMl0sIHUgPSB0ICsgMSB8IDAsIGMgPSBJW3QgKyAxIHwgMF0sIElbdCB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA+Pj4gMCA+PSAxNDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgciA9IHIgKyA2NTI4MCB8IDAsIHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSB1LCByID0gKGMgPDwgOSkgKyByIHwgMCwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IHUsIHQgPSA4LCByID0gKGMgPDwgOCkgKyByIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0IC0gMSB8IDAsIHIgPSByIDw8IDEsIGkgPSBpIDw8IDEsICEoaSA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBmID8gIWcgOiBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IGVbYyArIDQgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBJW3cgKyAzOTc3NiB8IDBdLCBlW2EgPj4gMl0gPSAodSB8IDApID09IChmIHwgMCkgPyBFIDogbSwgZVtzID4+IDJdID0gZVtzID4+IDJdIHwgMzIsIGVbbCArIDQgPj4gMl0gPSBlW2wgKyA0ID4+IDJdIHwgOCwgbiA9IChmIF4gdSkgPDwgMTkgfCBuIHwgMTY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuICYgMTY3NzczNDQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcgPSBuID4+PiAzIHwgMCwgaCA9IHkgKyAoSVtlW2sgKyAxMDggPj4gMl0gKyAodyAmIDQ5NSkgfCAwXSA8PCAyKSB8IDAsIHMgPSBlW2ggPj4gMl0sIGYgPSBlW3MgPj4gMl0sIGkgPSBpIC0gZiB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPj4+IDE2ID4+PiAwIDwgZiA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGcgPSBlW3MgKyA0ID4+IDJdLCB1ID0gaSA+Pj4gMCA8IGYgPj4+IDAsIGVbaCA+PiAyXSA9IGVbcyArICh1ID8gOCA6IDEyKSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gZVtrICsgMTYgPj4gMl0sIGkgPSB0ICsgMSB8IDAsIHMgPSBJW3QgKyAxIHwgMF0sIElbdCB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocyA+Pj4gMCA+PSAxNDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgciA9IHIgKyA2NTI4MCB8IDAsIHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBpLCByID0gKHMgPDwgOSkgKyByIHwgMCwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGksIHQgPSA4LCByID0gKHMgPDwgOCkgKyByIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0IC0gMSB8IDAsIHIgPSByIDw8IDEsIGYgPSBmIDw8IDEsICEoZiA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBmLCBmID0gdSA/IGcgOiAhZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0gciAtIChmIDw8IDE2KSB8IDAsICEoaSAmIDMyNzY4KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGcgPSBlW3MgKyA0ID4+IDJdLCBmID0gaSA+Pj4gMCA8IGYgPj4+IDAsIGVbaCA+PiAyXSA9IGVbcyArIChmID8gMTIgOiA4KSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gZVtrICsgMTYgPj4gMl0sIHUgPSB0ICsgMSB8IDAsIHMgPSBJW3QgKyAxIHwgMF0sIElbdCB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocyA+Pj4gMCA+PSAxNDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgciA9IHIgKyA2NTI4MCB8IDAsIHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSB1LCByID0gKHMgPDwgOSkgKyByIHwgMCwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IHUsIHQgPSA4LCByID0gKHMgPDwgOCkgKyByIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0IC0gMSB8IDAsIHIgPSByIDw8IDEsIGkgPSBpIDw8IDEsICEoaSA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBmID8gIWcgOiBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IGVbcyArIDQgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9IGwgLSA0IHwgMCwgdyA9IGVbbCArIDQgPj4gMl0gPj4+IDIwICYgNCB8IChlW3MgPj4gMl0gPj4+IDIyICYgMSB8IChuID4+PiAxNSAmIDE2IHwgKG4gPj4+IDE5ICYgNjQgfCB3ICYgMTcwKSkpLCBoID0geSArIChJW3cgKyAzOTUyMCB8IDBdIDw8IDIpIHwgMCwgYyA9IGVbaCA+PiAyXSwgZiA9IGVbYyA+PiAyXSwgaSA9IGkgLSBmIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA+Pj4gMTYgPj4+IDAgPCBmID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZyA9IGVbYyArIDQgPj4gMl0sIHUgPSBpID4+PiAwIDwgZiA+Pj4gMCwgZVtoID4+IDJdID0gZVtjICsgKHUgPyA4IDogMTIpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG46IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSBlW2sgKyAxNiA+PiAyXSwgaSA9IHQgKyAxIHwgMCwgYyA9IElbdCArIDEgfCAwXSwgSVt0IHwgMF0gPT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID4+PiAwID49IDE0NCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCByID0gciArIDY1MjgwIHwgMCwgdCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGksIHIgPSAoYyA8PCA5KSArIHIgfCAwLCB0ID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgdCA9IDgsIHIgPSAoYyA8PCA4KSArIHIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgLSAxIHwgMCwgciA9IHIgPDwgMSwgZiA9IGYgPDwgMSwgIShmID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGYsIHUgPSB1ID8gZyA6ICFnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSByIC0gKGYgPDwgMTYpIHwgMCwgIShpICYgMzI3NjgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZyA9IGVbYyArIDQgPj4gMl0sIGYgPSBpID4+PiAwIDwgZiA+Pj4gMCwgZVtoID4+IDJdID0gZVtjICsgKGYgPyAxMiA6IDgpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG46IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSBlW2sgKyAxNiA+PiAyXSwgdSA9IHQgKyAxIHwgMCwgYyA9IElbdCArIDEgfCAwXSwgSVt0IHwgMF0gPT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID4+PiAwID49IDE0NCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCByID0gciArIDY1MjgwIHwgMCwgdCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IHUsIHIgPSAoYyA8PCA5KSArIHIgfCAwLCB0ID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gdSwgdCA9IDgsIHIgPSAoYyA8PCA4KSArIHIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgLSAxIHwgMCwgciA9IHIgPDwgMSwgaSA9IGkgPDwgMSwgIShpID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IGYgPyAhZyA6IGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gZVtjICsgNCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IElbdyArIDM5Nzc2IHwgMF0sIGVbYSArIDI1NiA+PiAyXSA9ICh1IHwgMCkgPT0gKGYgfCAwKSA/IEUgOiBtLCBlW3MgPj4gMl0gPSBlW3MgPj4gMl0gfCAyNTYsIGVbbCArIDQgPj4gMl0gPSBlW2wgKyA0ID4+IDJdIHwgNjQsIG4gPSAoZiBeIHUpIDw8IDIyIHwgbiB8IDEyODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gJiAxMzQyMTg3NTIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcgPSBuID4+PiA2IHwgMCwgaCA9IHkgKyAoSVtlW2sgKyAxMDggPj4gMl0gKyAodyAmIDQ5NSkgfCAwXSA8PCAyKSB8IDAsIHMgPSBlW2ggPj4gMl0sIGYgPSBlW3MgPj4gMl0sIGkgPSBpIC0gZiB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPj4+IDE2ID4+PiAwIDwgZiA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGcgPSBlW3MgKyA0ID4+IDJdLCB1ID0gaSA+Pj4gMCA8IGYgPj4+IDAsIGVbaCA+PiAyXSA9IGVbcyArICh1ID8gOCA6IDEyKSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gZVtrICsgMTYgPj4gMl0sIGkgPSB0ICsgMSB8IDAsIHMgPSBJW3QgKyAxIHwgMF0sIElbdCB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocyA+Pj4gMCA+PSAxNDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgciA9IHIgKyA2NTI4MCB8IDAsIHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBpLCByID0gKHMgPDwgOSkgKyByIHwgMCwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGksIHQgPSA4LCByID0gKHMgPDwgOCkgKyByIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0IC0gMSB8IDAsIHIgPSByIDw8IDEsIGYgPSBmIDw8IDEsICEoZiA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBmLCBmID0gdSA/IGcgOiAhZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0gciAtIChmIDw8IDE2KSB8IDAsICEoaSAmIDMyNzY4KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGcgPSBlW3MgKyA0ID4+IDJdLCBmID0gaSA+Pj4gMCA8IGYgPj4+IDAsIGVbaCA+PiAyXSA9IGVbcyArIChmID8gMTIgOiA4KSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gZVtrICsgMTYgPj4gMl0sIHUgPSB0ICsgMSB8IDAsIHMgPSBJW3QgKyAxIHwgMF0sIElbdCB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocyA+Pj4gMCA+PSAxNDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgciA9IHIgKyA2NTI4MCB8IDAsIHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSB1LCByID0gKHMgPDwgOSkgKyByIHwgMCwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IHUsIHQgPSA4LCByID0gKHMgPDwgOCkgKyByIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0IC0gMSB8IDAsIHIgPSByIDw8IDEsIGkgPSBpIDw8IDEsICEoaSA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBmID8gIWcgOiBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IGVbcyArIDQgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9IGwgLSA0IHwgMCwgdyA9IGVbbCArIDQgPj4gMl0gPj4+IDIzICYgNCB8IChlW3MgPj4gMl0gPj4+IDI1ICYgMSB8IChuID4+PiAxOCAmIDE2IHwgKG4gPj4+IDIyICYgNjQgfCB3ICYgMTcwKSkpLCBoID0geSArIChJW3cgKyAzOTUyMCB8IDBdIDw8IDIpIHwgMCwgYyA9IGVbaCA+PiAyXSwgZiA9IGVbYyA+PiAyXSwgaSA9IGkgLSBmIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA+Pj4gMTYgPj4+IDAgPCBmID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZyA9IGVbYyArIDQgPj4gMl0sIHUgPSBpID4+PiAwIDwgZiA+Pj4gMCwgZVtoID4+IDJdID0gZVtjICsgKHUgPyA4IDogMTIpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG46IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSBlW2sgKyAxNiA+PiAyXSwgaSA9IHQgKyAxIHwgMCwgYyA9IElbdCArIDEgfCAwXSwgSVt0IHwgMF0gPT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID4+PiAwID49IDE0NCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCByID0gciArIDY1MjgwIHwgMCwgdCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGksIHIgPSAoYyA8PCA5KSArIHIgfCAwLCB0ID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgdCA9IDgsIHIgPSAoYyA8PCA4KSArIHIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgLSAxIHwgMCwgciA9IHIgPDwgMSwgZiA9IGYgPDwgMSwgIShmID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGYsIHUgPSB1ID8gZyA6ICFnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSByIC0gKGYgPDwgMTYpIHwgMCwgIShpICYgMzI3NjgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZyA9IGVbYyArIDQgPj4gMl0sIGYgPSBpID4+PiAwIDwgZiA+Pj4gMCwgZVtoID4+IDJdID0gZVtjICsgKGYgPyAxMiA6IDgpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG46IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSBlW2sgKyAxNiA+PiAyXSwgdSA9IHQgKyAxIHwgMCwgYyA9IElbdCArIDEgfCAwXSwgSVt0IHwgMF0gPT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID4+PiAwID49IDE0NCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCByID0gciArIDY1MjgwIHwgMCwgdCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IHUsIHIgPSAoYyA8PCA5KSArIHIgfCAwLCB0ID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gdSwgdCA9IDgsIHIgPSAoYyA8PCA4KSArIHIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgLSAxIHwgMCwgciA9IHIgPDwgMSwgaSA9IGkgPDwgMSwgIShpID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IGYgPyAhZyA6IGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gZVtjICsgNCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IElbdyArIDM5Nzc2IHwgMF0sIGVbYSArIDUxMiA+PiAyXSA9ICh1IHwgMCkgPT0gKGYgfCAwKSA/IEUgOiBtLCBlW3MgPj4gMl0gPSBlW3MgPj4gMl0gfCAyMDQ4LCBlW2wgKyA0ID4+IDJdID0gZVtsICsgNCA+PiAyXSB8IDUxMiwgbiA9IChmIF4gdSkgPDwgMjUgfCBuIHwgMTAyNDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiAmIDEwNzM3NTAwMTYpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdyA9IG4gPj4+IDkgfCAwLCBoID0geSArIChJW2VbayArIDEwOCA+PiAyXSArICh3ICYgNDk1KSB8IDBdIDw8IDIpIHwgMCwgcyA9IGVbaCA+PiAyXSwgZiA9IGVbcyA+PiAyXSwgaSA9IGkgLSBmIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID4+PiAxNiA+Pj4gMCA8IGYgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZyA9IGVbcyArIDQgPj4gMl0sIHUgPSBpID4+PiAwIDwgZiA+Pj4gMCwgZVtoID4+IDJdID0gZVtzICsgKHUgPyA4IDogMTIpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gZVtrICsgMTYgPj4gMl0sIGkgPSB0ICsgMSB8IDAsIHMgPSBJW3QgKyAxIHwgMF0sIElbdCB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPj4+IDAgPj0gMTQ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCByID0gciArIDY1MjgwIHwgMCwgdCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGksIHIgPSAocyA8PCA5KSArIHIgfCAwLCB0ID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgdCA9IDgsIHIgPSAocyA8PCA4KSArIHIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gdCAtIDEgfCAwLCByID0gciA8PCAxLCBmID0gZiA8PCAxLCAhKGYgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gZiwgZiA9IHUgPyBnIDogIWc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9IHIgLSAoZiA8PCAxNikgfCAwLCAhKGkgJiAzMjc2OCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZyA9IGVbcyArIDQgPj4gMl0sIGYgPSBpID4+PiAwIDwgZiA+Pj4gMCwgZVtoID4+IDJdID0gZVtzICsgKGYgPyAxMiA6IDgpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gZVtrICsgMTYgPj4gMl0sIHUgPSB0ICsgMSB8IDAsIHMgPSBJW3QgKyAxIHwgMF0sIElbdCB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPj4+IDAgPj0gMTQ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCByID0gciArIDY1MjgwIHwgMCwgdCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IHUsIHIgPSAocyA8PCA5KSArIHIgfCAwLCB0ID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gdSwgdCA9IDgsIHIgPSAocyA8PCA4KSArIHIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gdCAtIDEgfCAwLCByID0gciA8PCAxLCBpID0gaSA8PCAxLCAhKGkgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gZiA/ICFnIDogZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBlW3MgKyA0ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gbCAtIDQgfCAwLCBPID0gZVtsICsgNCA+PiAyXSA+Pj4gMjYgJiA0IHwgKGVbYyA+PiAyXSA+Pj4gMjggJiAxIHwgKG4gPj4+IDIxICYgMTYgfCAobiA+Pj4gMjUgJiA2NCB8IHcgJiAxNzApKSksIGggPSB5ICsgKElbTyArIDM5NTIwIHwgMF0gPDwgMikgfCAwLCBCID0gZVtoID4+IDJdLCBmID0gZVtCID4+IDJdLCBpID0gaSAtIGYgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA+Pj4gMTYgPj4+IDAgPCBmID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChnID0gZVtCICsgNCA+PiAyXSwgdSA9IGkgPj4+IDAgPCBmID4+PiAwLCBlW2ggPj4gMl0gPSBlWyh1ID8gOCA6IDEyKSArIEIgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3ID0gZVtrICsgMTYgPj4gMl0sIGkgPSB3ICsgMSB8IDAsIHMgPSBJW3cgKyAxIHwgMF0sIElbdyB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzID4+PiAwID49IDE0NCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHIgPSByICsgNjUyODAgfCAwLCB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgciA9IChzIDw8IDkpICsgciB8IDAsIHQgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBpLCB0ID0gOCwgciA9IChzIDw8IDgpICsgciB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgLSAxIHwgMCwgciA9IHIgPDwgMSwgZiA9IGYgPDwgMSwgIShmID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGYsIHUgPSB1ID8gZyA6ICFnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSByIC0gKGYgPDwgMTYpIHwgMCwgIShpICYgMzI3NjgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChnID0gZVtCICsgNCA+PiAyXSwgZiA9IGkgPj4+IDAgPCBmID4+PiAwLCBlW2ggPj4gMl0gPSBlWyhmID8gMTIgOiA4KSArIEIgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3ID0gZVtrICsgMTYgPj4gMl0sIHUgPSB3ICsgMSB8IDAsIHMgPSBJW3cgKyAxIHwgMF0sIElbdyB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzID4+PiAwID49IDE0NCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHIgPSByICsgNjUyODAgfCAwLCB0ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gdSwgciA9IChzIDw8IDkpICsgciB8IDAsIHQgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSB1LCB0ID0gOCwgciA9IChzIDw8IDgpICsgciB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgLSAxIHwgMCwgciA9IHIgPDwgMSwgaSA9IGkgPDwgMSwgIShpID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IGYgPyAhZyA6IGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gZVtCICsgNCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBJW08gKyAzOTc3NiB8IDBdLCBlW2EgKyA3NjggPj4gMl0gPSAodSB8IDApID09IChmIHwgMCkgPyBFIDogbSwgZVtjID4+IDJdID0gZVtjID4+IDJdIHwgMTYzODQsIGVbbCArIDQgPj4gMl0gPSBlW2wgKyA0ID4+IDJdIHwgNDA5NiwgZVtsICsgMjYwID4+IDJdID0gZVtsICsgMjYwID4+IDJdIHwgNCwgZVtsICsgMjY4ID4+IDJdID0gZVtsICsgMjY4ID4+IDJdIHwgMSwgZiA9IGYgXiB1LCBlW2wgKyAyNjQgPj4gMl0gPSBlW2wgKyAyNjQgPj4gMl0gfCBmIDw8IDE4IHwgMiwgbiA9IGYgPDwgMjggfCBuIHwgODE5MjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtsID4+IDJdID0gbiAmIC0xMjI2ODMzOTIxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID0gbCArIDQgfCAwLCBmID0gYSArIDQgfCAwLCBIID0gSCArIDEgfCAwLCAoSCB8IDApID09IDY0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPSBsICsgMTIgfCAwLCBmID0gYSArIDc3MiB8IDAsIHUgPSBDID4+PiAwIDwgNjAsIEMgPSBDICsgNCB8IDAsICF1KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgOCA+PiAyXSA9IHQsIGVbayArIDQgPj4gMl0gPSBpLCBlW2sgPj4gMl0gPSByLCBlW2sgKyAxMDQgPj4gMl0gPSBoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShTMiAmIDMyKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMDQgPj4gMl0gPSBrICsgMTAwLCBuID0gZVtrICsgMTAwID4+IDJdLCBpID0gZVtuID4+IDJdLCByID0gZVtrICsgNCA+PiAyXSAtIGkgfCAwLCBlW2sgKyA0ID4+IDJdID0gciwgdCA9IGVbayA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID4+PiAxNiA+Pj4gMCA8IGkgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZVtrICsgNCA+PiAyXSA9IGksIG4gPSBlWyhpID4+PiAwID4gciA+Pj4gMCA/IDggOiAxMikgKyBuID4+IDJdLCBlW2sgKyAxMDAgPj4gMl0gPSBuLCByID0gZVtrICsgOCA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobyA9IGVbayArIDE2ID4+IDJdLCBmID0gbyArIDEgfCAwLCBoID0gSVtvICsgMSB8IDBdLCBJW28gfCAwXSA9PSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoID4+PiAwID49IDE0NCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgdCA9IHQgKyA2NTI4MCB8IDAsIHIgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBmLCB0ID0gKGggPDwgOSkgKyB0IHwgMCwgciA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGYsIHIgPSA4LCB0ID0gKGggPDwgOCkgKyB0IHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9IHIgLSAxIHwgMCwgZVtrICsgOCA+PiAyXSA9IHIsIHQgPSB0IDw8IDEsIGVbayA+PiAyXSA9IHQsIGkgPSBpIDw8IDEsIGVbayArIDQgPj4gMl0gPSBpLCAhKGkgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gdCAtIChpIDw8IDE2KSB8IDAsIGVbayA+PiAyXSA9IHQsIHIgJiAzMjc2OCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChuID0gZVsoaSA+Pj4gMCA+IHIgPj4+IDAgPyAxMiA6IDgpICsgbiA+PiAyXSwgZVtrICsgMTAwID4+IDJdID0gbiwgaSA9IGVbayArIDggPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmID0gZVtrICsgMTYgPj4gMl0sIGkgPSBmICsgMSB8IDAsIG8gPSBJW2YgKyAxIHwgMF0sIElbZiB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvID4+PiAwID49IDE0NCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHQgPSB0ICsgNjUyODAgfCAwLCBpID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgdCA9IChvIDw8IDkpICsgdCB8IDAsIGkgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBpLCBpID0gOCwgdCA9IChvIDw8IDgpICsgdCB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IGkgLSAxIHwgMCwgZVtrICsgOCA+PiAyXSA9IGksIHQgPSB0IDw8IDEsIGVbayA+PiAyXSA9IHQsIHIgPSByIDw8IDEsIGVbayArIDQgPj4gMl0gPSByLCAhKHIgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gZVtuID4+IDJdLCByID0gciAtIGkgfCAwLCBlW2sgKyA0ID4+IDJdID0gcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID4+PiAxNiA+Pj4gMCA8IGkgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZVtrICsgNCA+PiAyXSA9IGksIG4gPSBlWyhpID4+PiAwID4gciA+Pj4gMCA/IDggOiAxMikgKyBuID4+IDJdLCBlW2sgKyAxMDAgPj4gMl0gPSBuLCByID0gZVtrICsgOCA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobyA9IGVbayArIDE2ID4+IDJdLCBmID0gbyArIDEgfCAwLCBoID0gSVtvICsgMSB8IDBdLCBJW28gfCAwXSA9PSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoID4+PiAwID49IDE0NCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgdCA9IHQgKyA2NTI4MCB8IDAsIHIgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBmLCB0ID0gKGggPDwgOSkgKyB0IHwgMCwgciA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGYsIHIgPSA4LCB0ID0gKGggPDwgOCkgKyB0IHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9IHIgLSAxIHwgMCwgZVtrICsgOCA+PiAyXSA9IHIsIHQgPSB0IDw8IDEsIGVbayA+PiAyXSA9IHQsIGkgPSBpIDw8IDEsIGVbayArIDQgPj4gMl0gPSBpLCAhKGkgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gdCAtIChpIDw8IDE2KSB8IDAsIGVbayA+PiAyXSA9IHQsIHIgJiAzMjc2OCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChuID0gZVsoaSA+Pj4gMCA+IHIgPj4+IDAgPyAxMiA6IDgpICsgbiA+PiAyXSwgZVtrICsgMTAwID4+IDJdID0gbiwgaSA9IGVbayArIDggPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmID0gZVtrICsgMTYgPj4gMl0sIGkgPSBmICsgMSB8IDAsIG8gPSBJW2YgKyAxIHwgMF0sIElbZiB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvID4+PiAwID49IDE0NCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHQgPSB0ICsgNjUyODAgfCAwLCBpID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgdCA9IChvIDw8IDkpICsgdCB8IDAsIGkgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBpLCBpID0gOCwgdCA9IChvIDw8IDgpICsgdCB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IGkgLSAxIHwgMCwgZVtrICsgOCA+PiAyXSA9IGksIHQgPSB0IDw8IDEsIGVbayA+PiAyXSA9IHQsIHIgPSByIDw8IDEsIGVbayArIDQgPj4gMl0gPSByLCAhKHIgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gZVtuID4+IDJdLCByID0gciAtIGkgfCAwLCBlW2sgKyA0ID4+IDJdID0gcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID4+PiAxNiA+Pj4gMCA8IGkgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZVtrICsgNCA+PiAyXSA9IGksIG4gPSBlWyhpID4+PiAwID4gciA+Pj4gMCA/IDggOiAxMikgKyBuID4+IDJdLCBlW2sgKyAxMDAgPj4gMl0gPSBuLCByID0gZVtrICsgOCA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobyA9IGVbayArIDE2ID4+IDJdLCBmID0gbyArIDEgfCAwLCBoID0gSVtvICsgMSB8IDBdLCBJW28gfCAwXSA9PSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoID4+PiAwID49IDE0NCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgdCA9IHQgKyA2NTI4MCB8IDAsIHIgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBmLCB0ID0gKGggPDwgOSkgKyB0IHwgMCwgciA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGYsIHIgPSA4LCB0ID0gKGggPDwgOCkgKyB0IHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9IHIgLSAxIHwgMCwgZVtrICsgOCA+PiAyXSA9IHIsIHQgPSB0IDw8IDEsIGVbayA+PiAyXSA9IHQsIGkgPSBpIDw8IDEsIGVbayArIDQgPj4gMl0gPSBpLCAhKGkgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gdCAtIChpIDw8IDE2KSB8IDAsIGVbayA+PiAyXSA9IHQsIHIgJiAzMjc2OCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChuID0gZVsoaSA+Pj4gMCA+IHIgPj4+IDAgPyAxMiA6IDgpICsgbiA+PiAyXSwgZVtrICsgMTAwID4+IDJdID0gbiwgaSA9IGVbayArIDggPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmID0gZVtrICsgMTYgPj4gMl0sIGkgPSBmICsgMSB8IDAsIG8gPSBJW2YgKyAxIHwgMF0sIElbZiB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvID4+PiAwID49IDE0NCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSArIDEsIHQgPSB0ICsgNjUyODAgfCAwLCBpID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gaSwgdCA9IChvIDw8IDkpICsgdCB8IDAsIGkgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBpLCBpID0gOCwgdCA9IChvIDw8IDgpICsgdCB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IGkgLSAxIHwgMCwgZVtrICsgOCA+PiAyXSA9IGksIHQgPSB0IDw8IDEsIGVbayA+PiAyXSA9IHQsIHIgPSByIDw8IDEsIGVbayArIDQgPj4gMl0gPSByLCAhKHIgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IGVbbiA+PiAyXSwgciA9IHIgLSBpIHwgMCwgZVtrICsgNCA+PiAyXSA9IHIsIHQgPj4+IDE2ID4+PiAwIDwgaSA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZVtrICsgNCA+PiAyXSA9IGksIGVbayArIDEwMCA+PiAyXSA9IGVbKGkgPj4+IDAgPiByID4+PiAwID8gOCA6IDEyKSArIG4gPj4gMl0sIHIgPSBlW2sgKyA4ID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9IGVbayArIDE2ID4+IDJdLCBmID0gbiArIDEgfCAwLCBvID0gSVtuICsgMSB8IDBdLCBJW24gfCAwXSA9PSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobyA+Pj4gMCA+PSAxNDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZVtrICsgMTIgPj4gMl0gKyAxLCB0ID0gdCArIDY1MjgwIHwgMCwgciA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGYsIHQgPSAobyA8PCA5KSArIHQgfCAwLCByID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDE2ID4+IDJdID0gZiwgciA9IDgsIHQgPSAobyA8PCA4KSArIHQgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSByIC0gMSB8IDAsIGVbayArIDggPj4gMl0gPSByLCB0ID0gdCA8PCAxLCBlW2sgPj4gMl0gPSB0LCBpID0gaSA8PCAxLCBlW2sgKyA0ID4+IDJdID0gaSwgIShpID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZiA9IHQgLSAoaSA8PCAxNikgfCAwLCBlW2sgPj4gMl0gPSBmLCByICYgMzI3NjgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChlW2sgKyAxMDAgPj4gMl0gPSBlWyhpID4+PiAwID4gciA+Pj4gMCA/IDEyIDogOCkgKyBuID4+IDJdLCB0ID0gZVtrICsgOCA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID0gZVtrICsgMTYgPj4gMl0sIGkgPSBuICsgMSB8IDAsIG8gPSBJW24gKyAxIHwgMF0sIElbbiB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobyA+Pj4gMCA+PSAxNDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGVbayArIDEyID4+IDJdICsgMSwgZiA9IGYgKyA2NTI4MCB8IDAsIHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSBpLCBmID0gKG8gPDwgOSkgKyBmIHwgMCwgdCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IGksIHQgPSA4LCBmID0gKG8gPDwgOCkgKyBmIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0IC0gMSB8IDAsIGVbayArIDggPj4gMl0gPSB0LCBmID0gZiA8PCAxLCBlW2sgPj4gMl0gPSBmLCByID0gciA8PCAxLCBlW2sgKyA0ID4+IDJdID0gciwgIShyID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFQMikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3IoayksIGVbayArIDEwMCA+PiAyXSA9IDM3NDQwLCBlW2sgKyA5NiA+PiAyXSA9IDM2MDY0LCBlW2sgKyAyOCA+PiAyXSA9IDM2MDk2OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID0gWTIgKyAxIHwgMCwgZiA9IChpIHwgMCkgPT0gMywgWTIgPSBmID8gMCA6IGksIHAyID0gcDIgLSBmIHwgMCwgaiA9IGogKyAxIHwgMCwgaiA+Pj4gMCA+PSBkW3QwICsgOCA+PiAyXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgocDIgfCAwKSA+IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobjIgPSBwICsgbjIgfCAwLCBmID0gZVtrICsgMjQgPj4gMl0sIGkgPSBHMltrICsgMTEyID4+IDFdLCBGW2YgfCAwXSA9IGksIEZbZiArIDEgfCAwXSA9IGkgPj4+IDgsIHEgPSBxICsgMSB8IDAsICEocSA+Pj4gMCA8IGRbeiArIDQ0ID4+IDJdKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghRDIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgQTogewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmID0gZVtrICsgMjQgPj4gMl0sIG4gPSBlW2sgKyAxNiA+PiAyXSwgZiA+Pj4gMCA+IG4gKyAyID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXgyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVbayArIDIwID4+IDJdLCBlW1gyICsgNTYgPj4gMl0gPSBmIC0gaSwgZVtYMiArIDUyID4+IDJdID0gbiAtIGksIGVbWDIgKyA0OCA+PiAyXSA9IChmIC0gbiB8IDApIC0gMiwgUShmMiwgMiwgMjcyMzAsIFgyICsgNDggfCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID0gZVtrICsgMTIgPj4gMl0sIGkgPj4+IDAgPCAzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeDIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbWDIgKyA4MCA+PiAyXSA9IGksIFEoZjIsIDIsIDE2NzEwLCBYMiArIDgwIHwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBlW1gyICsgNjQgPj4gMl0gPSBpLCBRKGYyLCAyLCAxNjcxMCwgWDIgLSAtNjQgfCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlW2sgKyAyMCA+PiAyXSwgZVtYMiArIDQwID4+IDJdID0gZiAtIGksIGVbWDIgKyAzNiA+PiAyXSA9IG4gLSBpLCBlW1gyICsgMzIgPj4gMl0gPSAoZiAtIG4gfCAwKSAtIDIsIFEoZjIsIDIsIDI3MjMwLCBYMiArIDMyIHwgMCk7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBpZiAoIWVbeiArIDYwID4+IDJdKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTE2ID4+IDJdID0gazA7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIG8gPSBlW3gwICsgNCA+PiAyXSwgbiA9IGVbeiArIDEyID4+IDJdLCBnID0gZVt6ICsgOCA+PiAyXSAtIGVbeDAgPj4gMl0gfCAwLCBmID0gZVt4MCArIDE2ID4+IDJdLCBmICYgMSAmJiAoaSA9IGVbRTAgKyAyOCA+PiAyXSArIFooYjAsIDE1MikgfCAwLCBnID0gKGVbaSAtIDE0NCA+PiAyXSArIGcgfCAwKSAtIGVbaSAtIDE1MiA+PiAyXSB8IDApLCBoID0gbiAtIG8gfCAwLCBmICYgMiAmJiAoaSA9IGVbRTAgKyAyOCA+PiAyXSArIFooYjAsIDE1MikgfCAwLCBoID0gKGVbaSAtIDE0MCA+PiAyXSArIGggfCAwKSAtIGVbaSAtIDE0OCA+PiAyXSB8IDApLCB1ID0gZVt6ICsgNjAgPj4gMl0sIEIgPSB1IHx8IGVbayArIDExNiA+PiAyXSwgQyA9IGVbayArIDEyOCA+PiAyXSwgcyA9IGVbayArIDEyNCA+PiAyXSwgciA9IGVbTTAgKyA4MDggPj4gMl07CiAgICAgICAgICAgICAgICAgICAgazogewogICAgICAgICAgICAgICAgICAgICAgaWYgKCFyKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSAhQyB8ICFzLCAociB8IDApIDw9IDMwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpKQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodCA9IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChvID0gKFoodCwgcykgPDwgMikgKyBCIHwgMCwgaSA9IDA7IG4gPSBvICsgKGkgPDwgMikgfCAwLCB2ID0gZVtuID4+IDJdLCBmID0gdiA+PiAzMSwgZiA9IChmIF4gdikgLSBmIHwgMCwgZiA+Pj4gciB8IDAgJiYgKGYgPSBmID4+PiBlW00wICsgODA4ID4+IDJdIHwgMCwgZVtuID4+IDJdID0gKHYgfCAwKSA8IDAgPyAwIC0gZiB8IDAgOiBmKSwgaSA9IGkgKyAxIHwgMCwgKHMgfCAwKSAhPSAoaSB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0ICsgMSB8IDAsIChDIHwgMCkgPT0gKHQgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBpZiAoaSkKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgIGQyKEIsIDAsIFoocywgQykgPDwgMik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICh1KSB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoaCA9IFoocywgQyksIGVbTTAgKyAyMCA+PiAyXSA9PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaCkKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IDAsIChoIHwgMCkgIT0gMSkKICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGYgPSBoICYgLTIsIG4gPSAwOyBvID0gKGkgPDwgMikgKyBCIHwgMCwgZVtvID4+IDJdID0gZVtvID4+IDJdIC8gMiwgZVtvICsgNCA+PiAyXSA9IGVbbyArIDQgPj4gMl0gLyAyLCBpID0gaSArIDIgfCAwLCBuID0gbiArIDIgfCAwLCAoZiB8IDApICE9IChuIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoaCAmIDEpKQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAoaSA8PCAyKSArIEIgfCAwLCBlW2kgPj4gMl0gPSBlW2kgPj4gMl0gLyAyOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgaWYgKCFoKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgaWYgKGkwID0gVyhHW3gwICsgMzIgPj4gMl0gKiBXKDAuNSkpLCBoID4+PiAwID49IDQpCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZiA9IGggJiAtNCwgaSA9IDA7IEdbQiA+PiAyXSA9IGkwICogVyhlW0IgPj4gMl0pLCBHW0IgKyA0ID4+IDJdID0gaTAgKiBXKGVbQiArIDQgPj4gMl0pLCBHW0IgKyA4ID4+IDJdID0gaTAgKiBXKGVbQiArIDggPj4gMl0pLCBHW0IgKyAxMiA+PiAyXSA9IGkwICogVyhlW0IgKyAxMiA+PiAyXSksIEIgPSBCICsgMTYgfCAwLCBpID0gaSArIDQgfCAwLCAoZiB8IDApICE9IChpIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoZiA9IGggJiAzLCAhZikKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IEdbQiA+PiAyXSA9IGkwICogVyhlW0IgPj4gMl0pLCBCID0gQiArIDQgfCAwLCBpID0gaSArIDEgfCAwLCAoZiB8IDApICE9IChpIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSBhMSAtIGYxIHwgMCwgZVtNMCArIDIwID4+IDJdID09IDEpIHsKICAgICAgICAgICAgICAgICAgICAgIGlmICghQykKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgIGZvciAobCA9IChlW0UwICsgMzYgPj4gMl0gKyAoWih0LCBoKSA8PCAyKSB8IDApICsgKGcgPDwgMikgfCAwLCBhID0gcyAmIC00LCBoID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSAwLCBhKQogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodSA9IGwgKyAoWih0LCBoKSA8PCAyKSB8IDAsIHIgPSAoWihoLCBzKSA8PCAyKSArIEIgfCAwOyB2ID0gaSA8PCAyLCB3ID0gdiArIHIgfCAwLCBvID0gZVt3ICsgNCA+PiAyXSwgbiA9IGVbdyArIDggPj4gMl0sIGYgPSBlW3cgKyAxMiA+PiAyXSwgdiA9IHUgKyB2IHwgMCwgZVt2ID4+IDJdID0gZVt3ID4+IDJdIC8gMiwgZVt2ICsgMTIgPj4gMl0gPSAoZiB8IDApIC8gMiwgZVt2ICsgOCA+PiAyXSA9IChuIHwgMCkgLyAyLCBlW3YgKyA0ID4+IDJdID0gKG8gfCAwKSAvIDIsIGkgPSBpICsgNCB8IDAsIGEgPj4+IDAgPiBpID4+PiAwOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgIGs6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA+Pj4gMCA+PSBzID4+PiAwIHx8IChmID0gaSArIDEgfCAwLCBvID0gbCArIChaKHQsIGgpIDw8IDIpIHwgMCwgbiA9IChaKGgsIHMpIDw8IDIpICsgQiB8IDAsIHMgLSBpICYgMSAmJiAoaSA9IGkgPDwgMiwgZVtpICsgbyA+PiAyXSA9IGVbaSArIG4gPj4gMl0gLyAyLCBpID0gZiksIChmIHwgMCkgPT0gKHMgfCAwKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBmID0gaSA8PCAyLCBlW2YgKyBvID4+IDJdID0gZVtmICsgbiA+PiAyXSAvIDIsIGYgPSBmICsgNCB8IDAsIGVbZiArIG8gPj4gMl0gPSBlW2YgKyBuID4+IDJdIC8gMiwgaSA9IGkgKyAyIHwgMCwgKHMgfCAwKSAhPSAoaSB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGggPSBoICsgMSB8IDAsIChDIHwgMCkgPT0gKGggfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICghQyB8ICFzKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICBmb3IgKGkwID0gVyhHW3gwICsgMzIgPj4gMl0gKiBXKDAuNSkpLCBoID0gKGVbRTAgKyAzNiA+PiAyXSArIChaKHQsIGgpIDw8IDIpIHwgMCkgKyAoZyA8PCAyKSB8IDAsIG4gPSBzICYgLTQsIG8gPSBzICYgMywgYSA9IDAsIGYgPSBzIC0gMSA+Pj4gMCA8IDM7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IGgsIGsgPSAwLCAhZikKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IEdbaSA+PiAyXSA9IGkwICogVyhlW0IgPj4gMl0pLCBHW2kgKyA0ID4+IDJdID0gaTAgKiBXKGVbQiArIDQgPj4gMl0pLCBHW2kgKyA4ID4+IDJdID0gaTAgKiBXKGVbQiArIDggPj4gMl0pLCBHW2kgKyAxMiA+PiAyXSA9IGkwICogVyhlW0IgKyAxMiA+PiAyXSksIGkgPSBpICsgMTYgfCAwLCBCID0gQiArIDE2IHwgMCwgayA9IGsgKyA0IHwgMCwgKG4gfCAwKSAhPSAoayB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPSAwLCBvKQogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgR1tpID4+IDJdID0gaTAgKiBXKGVbQiA+PiAyXSksIGkgPSBpICsgNCB8IDAsIEIgPSBCICsgNCB8IDAsIGsgPSBrICsgMSB8IDAsIChvIHwgMCkgIT0gKGsgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgIGlmIChoID0gKHQgPDwgMikgKyBoIHwgMCwgYSA9IGEgKyAxIHwgMCwgKEMgfCAwKSA9PSAoYSB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlW1gyID4+IDJdID0gcDIsIFEoZjIsIDIsIDE5MDAxLCBYMik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlW2VbaCA+PiAyXSA+PiAyXSA9IDA7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIFIoQSksIFggPSBYMiArIDk2IHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBQZShBLCBpLCByLCBmLCBrLCB0KSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDAsIHIgPSByIHwgMCwgZiA9IGYgfCAwLCBrID0gayB8IDAsIHQgPSB0IHwgMDsKICAgICAgICAgICAgICB2YXIgbiA9IDAsIGwgPSAwLCBhID0gMCwgdSA9IDAsIG8gPSAwLCBnID0gMCwgaCA9IDAsIHMgPSAwLCB3ID0gMCwgQiA9IDAsIGMgPSAwLCB2ID0gMCwgQyA9IDAsIG0gPSAwLCB5ID0gMCwgcCA9IDAsIEggPSAwLCBKID0gMCwgRSA9IDAsIEQgPSAwLCBVID0gMCwgUCA9IDAsIHggPSAwLCB6ID0gMCwgaiA9IDAsIE8gPSAwLCBxID0gMCwgZjIgPSAwLCBuMiA9IDAsIGcyID0gMCwgdzIgPSAwLCBjMiA9IDAsIG0yID0gMCwgcDIgPSAwLCBZMiA9IDAsIFgyID0gMCwgRDIgPSAwLCBTMiA9IDAsIFAyID0gMCwgeDIgPSAwLCB6MiA9IDAsIEwyID0gMCwgZTAgPSBXKDApLCBpMCA9IDAsIHIwID0gMCwgazAgPSAwLCB0MCA9IDAsIGgwID0gMCwgQzAgPSAwLCBIMCA9IDAsIEUwID0gMCwgTTAgPSAwLCB4MCA9IDAsIFQwID0gMCwgYjAgPSAwLCBmMSA9IDAsIGExID0gMCwgWjEgPSAwLCBwMSA9IDAsIGoxID0gMCwgZWUgPSAwLCB3ZSA9IDAsIEJlID0gMCwgY2UgPSAwLCBZZSA9IDAsIEhlID0gMCwgWGUgPSAwLCBGZSA9IDAsIE9lID0gMCwgX2UgPSAwLCBiZSA9IDAsICRlID0gMCwgUWkgPSAwLCBWaSA9IDAsIFlpID0gMCwgSGkgPSAwLCBYaSA9IDAsIEZpID0gMCwgSmkgPSAwLCBSaSA9IDAsIEVpID0gMCwgRGkgPSAwLCBVaSA9IDAsIE1pID0gMCwgUXIgPSAwLCBWciA9IDAsIFlyID0gMCwgSHIgPSAwLCBYciA9IDAsIEZyID0gMCwgR2YgPSAwLCBXZiA9IDAsIG1mID0gMCwgeWYgPSAwLCBwZiA9IDAsIFFmID0gMCwgVmYgPSAwLCBZZiA9IDAsIEhmID0gMCwgWGYgPSAwLCBGZiA9IDAsIEpmID0gMCwgUmYgPSAwLCBFZiA9IDAsIERmID0gMCwgVWYgPSAwLCBNZiA9IDAsIFNmID0gMCwgTmYgPSAwLCBQZiA9IDAsIHhmID0gMCwgVGYgPSAwLCB6ZiA9IDAsIGRmID0gMCwgS2YgPSAwLCBqZiA9IDA7CiAgICAgICAgICAgICAgd2UgPSBYIC0gMTYgfCAwLCBYID0gd2U7CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKCEoSVtBICsgOCB8IDBdICYgMTI4KSB8IGVbQSArIDIwNCA+PiAyXSAhPSAoaSB8IDApKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgaWYgKGVlID0gZVtBICsgMTU2ID4+IDJdICsgWihpLCA1NjQ0KSB8IDAsIEIgPSBlW2VlICsgNTU5NiA+PiAyXSwgIUIpIHsKICAgICAgICAgICAgICAgICAgdmkoZWUpOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgRCA9IGVbQSArIDIwOCA+PiAyXSwgVSA9IGVbQSArIDc2ID4+IDJdLCBVIHx8IChVID0gZVtBICsgNzIgPj4gMl0pLCBuID0gZVtVID4+IDJdLCBvID0gZVtVICsgNCA+PiAyXSwgYSA9IGVbVSArIDggPj4gMl0sIGggPSBlW1UgKyAxMiA+PiAyXSwgbCA9IGVbQSArIDYwID4+IDJdLCBnID0gZVtBICsgNjQgPj4gMl0sIHkgPSBlW2VlICsgNTYwMCA+PiAyXSwgTTAgPSBYIC0gMTYgfCAwLCBYID0gTTAsIGVbRCArIDM2ID4+IDJdID0gaSwgdSA9IGVbZVtEICsgMjggPj4gMl0gKyA3NiA+PiAyXSwgZVtEICsgNjQgPj4gMl0gPSAxLCBlW0QgKyA2MCA+PiAyXSA9IGgsIGVbRCArIDU2ID4+IDJdID0gYSwgZVtEICsgNTIgPj4gMl0gPSBvLCBlW0QgKyA0OCA+PiAyXSA9IG4sIGVbRCArIDMyID4+IDJdID0gdSArIFooaSwgNTY0NCksIFIoZVtEICsgNjggPj4gMl0pLCBlW0QgKyA2OCA+PiAyXSA9IDA7CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIGlmIChsKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHcyID0gRTIoNCwgZVtlW0QgKyAyNCA+PiAyXSArIDE2ID4+IDJdKSwgIXcyKSB7CiAgICAgICAgICAgICAgICAgICAgICBVID0gMDsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChVID0gMCwgbCA+Pj4gMCA+PSA0KQogICAgICAgICAgICAgICAgICAgICAgZm9yIChvID0gbCAmIC00LCBuID0gMDsgaSA9IGcgKyAoVSA8PCAyKSB8IDAsIGVbKGVbaSA+PiAyXSA8PCAyKSArIHcyID4+IDJdID0gMSwgZVsoZVtpICsgNCA+PiAyXSA8PCAyKSArIHcyID4+IDJdID0gMSwgZVsoZVtpICsgOCA+PiAyXSA8PCAyKSArIHcyID4+IDJdID0gMSwgZVsoZVtpICsgMTIgPj4gMl0gPDwgMikgKyB3MiA+PiAyXSA9IDEsIFUgPSBVICsgNCB8IDAsIG4gPSBuICsgNCB8IDAsIChvIHwgMCkgIT0gKG4gfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSBsICYgMywgaSkKICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBlWyhlW2cgKyAoVSA8PCAyKSA+PiAyXSA8PCAyKSArIHcyID4+IDJdID0gMSwgVSA9IFUgKyAxIHwgMCwgbTIgPSBtMiArIDEgfCAwLCAoaSB8IDApICE9IChtMiB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICBlW0QgKyA2OCA+PiAyXSA9IHcyOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICBpID0gZVtEICsgMjQgPj4gMl0sIFAgPSBlW2kgKyAxNiA+PiAyXTsKICAgICAgICAgICAgICAgICAgICBrOiB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoIVApCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICBVID0gMDsKICAgICAgICAgICAgICAgICAgICAgIGY6IHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgQTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlWyhVIDw8IDIpICsgdzIgPj4gMl0gJiYgdzIgfHwgKHUgPSBlW2kgKyAyNCA+PiAyXSArIFooVSwgNTIpIHwgMCwgbiA9IGVbdSArIDQgPj4gMl0sIGcgPSBuIC0gMSB8IDAsIGggPSBlW0QgKyA2MCA+PiAyXSwgbCA9IGcgKyBoIHwgMCwgbyA9IDAgLSAhbiB8IDAsIGEgPSBvLCBoID0gbjAobCwgbCA+Pj4gMCA8IGggPj4+IDAgPyBhICsgMSB8IDAgOiBhLCBuLCAwKSwgbCA9IGVbdSA+PiAyXSwgdSA9IGwgLSAxIHwgMCwgYyA9IGVbRCArIDU2ID4+IDJdLCBzID0gdSArIGMgfCAwLCB3ID0gMCAtICFsIHwgMCwgYSA9IHcsIHMgPSBuMChzLCBzID4+PiAwIDwgYyA+Pj4gMCA/IGEgKyAxIHwgMCA6IGEsIGwsIDApLCBhID0gbywgYyA9IGVbRCArIDUyID4+IDJdLCBnID0gYyArIGcgfCAwLCBuID0gbjAoZywgZyA+Pj4gMCA8IGMgPj4+IDAgPyBhICsgMSB8IDAgOiBhLCBuLCAwKSwgZyA9IGVbZVtlW0QgKyAyMCA+PiAyXSA+PiAyXSArIDIwID4+IDJdICsgWihVLCA3NikgfCAwLCBvID0gZVtnICsgMjAgPj4gMl0gLSBlW2cgKyAyNCA+PiAyXSB8IDAsIG8gPj4+IDAgPiAzMSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gZVtEICsgNDggPj4gMl0sIGEgPSBjICsgdSB8IDAsIHUgPSB3LCBsID0gbjAoYSwgYSA+Pj4gMCA8IGMgPj4+IDAgPyB1ICsgMSB8IDAgOiB1LCBsLCAwKSwgYSA9IGwgLSBlW2cgPj4gMl0gfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGwgPj4+IDAgPj0gYSA+Pj4gMCA/IGEgOiAwKSA+Pj4gbyB8IDAgfHwgKGwgPSBuIC0gZVtnICsgNCA+PiAyXSB8IDAsIChuID4+PiAwID49IGwgPj4+IDAgPyBsIDogMCkgPj4+IG8gfCAwKSB8fCAobiA9IGVbZyArIDggPj4gMl0sIGwgPSBuIC0gcyB8IDAsIChuID4+PiAwID49IGwgPj4+IDAgPyBsIDogMCkgPj4+IG8gfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9IGVbZyArIDEyID4+IDJdLCBsID0gbiAtIGggfCAwLCAhKChuID4+PiAwID49IGwgPj4+IDAgPyBsIDogMCkgPj4+IG8gfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtEICsgNjQgPj4gMl0gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFUgPSBVICsgMSB8IDAsIChQIHwgMCkgPT0gKFUgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZVtEICsgNjQgPj4gMl0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChtMiA9IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVbZVtlW0QgKyAyMCA+PiAyXSA+PiAyXSArIDIwID4+IDJdICsgWihtMiwgNzYpIHwgMCwgbiA9IGVbaSArIDI4ID4+IDJdICsgWihlW2kgKyAyNCA+PiAyXSwgMTUyKSB8IDAsIGwgPSBlW24gLSAxNDggPj4gMl0sIGcgPSBlW24gLSAxNDAgPj4gMl0sIG8gPSBlW24gLSAxNTIgPj4gMl0sIGEgPSBlW24gLSAxNDQgPj4gMl0sIG4gPSBlW0QgKyA2OCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICBBOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWVbbiArIChtMiA8PCAyKSA+PiAyXSAmJiBuKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IGcgLSBsIHwgMCwgbyA9IGEgLSBvIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGw6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChsIHwgMCkgPT0gKGcgfCAwKSB8fCAoZDAobiwgMCwgbywgMCksICFxMikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVSA9IDAsIFEodCwgMSwgNDk1MSwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9IFoobiwgbyksIG4gPj4+IDAgPj0gMTA3Mzc0MTgyNCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVID0gMCwgUSh0LCAxLCA0OTUxLCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBuIDw8IDIsIGVbaSArIDQ0ID4+IDJdID0gbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGw6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gZVtpICsgMzYgPj4gMl0sIGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPj4+IDAgPD0gZFtpICsgNDggPj4gMl0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbaSArIDQwID4+IDJdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9IFAwKG4pLCBlW2kgKyAzNiA+PiAyXSA9IG4sIGwgPSBuLCBuID0gZVtpICsgNDQgPj4gMl0sICEoIW4gfHwgbCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2kgKyA0MCA+PiAyXSA9IDEsIGVbaSArIDQ4ID4+IDJdID0gbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSKGwpLCBuID0gUDAoZVtpICsgNDQgPj4gMl0pLCBlW2kgKyAzNiA+PiAyXSA9IG4sIG4pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbaSArIDQ4ID4+IDJdID0gMCwgZVtpICsgNDAgPj4gMl0gPSAwLCBlW2kgKyA0NCA+PiAyXSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVSA9IDAsIFEodCwgMSwgNDk1MSwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2kgKyA0MCA+PiAyXSA9IDEsIGVbaSArIDQ4ID4+IDJdID0gZVtpICsgNDQgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtMiA9IG0yICsgMSB8IDAsIGkgPSBlW0QgKyAyNCA+PiAyXSwgIShtMiA+Pj4gMCA8IGRbaSArIDE2ID4+IDJdKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSBlW2kgKyAyNCA+PiAyXSwgRSA9IGVbZVtlW0QgKyAyMCA+PiAyXSA+PiAyXSArIDIwID4+IDJdLCBuID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZVsobiA8PCAyKSArIHcyID4+IDJdICYmIHcyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IEUgKyBaKG4sIDc2KSB8IDAsIHcgPSBlW2wgPj4gMl0sIHMgPSBqICsgWihuLCA1MikgfCAwLCBnID0gZVtzID4+IDJdLCBoID0gZyAtIDEgfCAwLCBjID0gZVtEICsgNDggPj4gMl0sIG8gPSBoICsgYyB8IDAsIHUgPSAwIC0gIWcgfCAwLCBhID0gdSwgbyA9IG4wKG8sIG8gPj4+IDAgPCBjID4+PiAwID8gYSArIDEgfCAwIDogYSwgZywgMCksIHYgPSBvID4+PiAwIDwgdyA+Pj4gMCA/IHcgOiBvLCBlW2wgKyA1NiA+PiAyXSA9IHYsIG8gPSBlW3MgKyA0ID4+IDJdLCB3ID0gbyAtIDEgfCAwLCBDID0gZVtEICsgNTIgPj4gMl0sIGMgPSB3ICsgQyB8IDAsIHMgPSAwIC0gIW8gfCAwLCBhID0gcywgbSA9IGVbbCArIDQgPj4gMl0sIGEgPSBuMChjLCBjID4+PiAwIDwgQyA+Pj4gMCA/IGEgKyAxIHwgMCA6IGEsIG8sIDApLCBDID0gYSA+Pj4gMCA8IG0gPj4+IDAgPyBtIDogYSwgZVtsICsgNjAgPj4gMl0gPSBDLCBhID0gdSwgYyA9IGVbbCArIDggPj4gMl0sIG0gPSBlW0QgKyA1NiA+PiAyXSwgaCA9IG0gKyBoIHwgMCwgZyA9IG4wKGgsIGggPj4+IDAgPCBtID4+PiAwID8gYSArIDEgfCAwIDogYSwgZywgMCksIGEgPSBnID4+PiAwID4gYyA+Pj4gMCA/IGMgOiBnLCBlW2wgKyA2NCA+PiAyXSA9IGEsIHUgPSBzLCBoID0gZVtsICsgMTIgPj4gMl0sIGcgPSB3LCB3ID0gZVtEICsgNjAgPj4gMl0sIGcgPSBnICsgdyB8IDAsIGcgPSBuMChnLCBnID4+PiAwIDwgdyA+Pj4gMCA/IHUgKyAxIHwgMCA6IHUsIG8sIDApLCBnID0gZyA+Pj4gMCA+IGggPj4+IDAgPyBoIDogZywgZVtsICsgNjggPj4gMl0gPSBnLCBhID4+PiAwIDwgdiA+Pj4gMCB8IGcgPj4+IDAgPCBDID4+PiAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocyA9IGVbbCArIDIwID4+IDJdLCAhcykKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjID0gZyAtIDEgfCAwLCB4ID0gMCAtICFnIHwgMCwgVSA9IGEgLSAxIHwgMCwgZjIgPSAwIC0gIWEgfCAwLCBtID0gQyAtIDEgfCAwLCBKID0gMCAtICFDIHwgMCwgQyA9IHYgLSAxIHwgMCwgcCA9IDAgLSAhdiB8IDAsIG4yID0gZVtsICsgMjggPj4gMl0sIGggPSAwLCBnID0gMDsgbCA9IG4yICsgWihoLCAxNTIpIHwgMCwgbyA9IHMgKyAoaCBeIC0xKSB8IDAsIHUgPSBvICYgMzEsIChvICYgNjMpID4+PiAwID49IDMyID8gKGEgPSAxIDw8IHUsIHcgPSAwKSA6ICh3ID0gMSA8PCB1LCBhID0gdyAtIDEgJiAxID4+PiAzMiAtIHUpLCB2ID0gdywgeiA9IGMgKyB2IHwgMCwgdyA9IGEsIHUgPSB4ICsgYSB8IDAsIHUgPSBjID4+PiAwID4geiA+Pj4gMCA/IHUgKyAxIHwgMCA6IHUsIGEgPSBvICYgMzEsIChvICYgNjMpID4+PiAwID49IDMyID8gYSA9IHUgPj4+IGEgfCAwIDogYSA9ICgoMSA8PCBhKSAtIDEgJiB1KSA8PCAzMiAtIGEgfCB6ID4+PiBhLCBlW2wgKyAxNDggPj4gMl0gPSBhLCBhID0gdyArIGYyIHwgMCwgdSA9IHYgKyBVIHwgMCwgYSA9IHUgPj4+IDAgPCB2ID4+PiAwID8gYSArIDEgfCAwIDogYSwgeiA9IHUsIHUgPSBvICYgMzEsIChvICYgNjMpID4+PiAwID49IDMyID8gYSA9IGEgPj4+IHUgfCAwIDogYSA9ICgoMSA8PCB1KSAtIDEgJiBhKSA8PCAzMiAtIHUgfCB6ID4+PiB1LCBlW2wgKyAxNDQgPj4gMl0gPSBhLCB1ID0gdyArIEogfCAwLCBhID0gdiArIG0gfCAwLCB1ID0gYSA+Pj4gMCA8IG0gPj4+IDAgPyB1ICsgMSB8IDAgOiB1LCB6ID0gYSwgYSA9IG8gJiAzMSwgKG8gJiA2MykgPj4+IDAgPj0gMzIgPyBhID0gdSA+Pj4gYSB8IDAgOiBhID0gKCgxIDw8IGEpIC0gMSAmIHUpIDw8IDMyIC0gYSB8IHogPj4+IGEsIGVbbCArIDE0MCA+PiAyXSA9IGEsIGEgPSB3ICsgcCB8IDAsIHUgPSB2ICsgQyB8IDAsIGEgPSB1ID4+PiAwIDwgQyA+Pj4gMCA/IGEgKyAxIHwgMCA6IGEsIHcgPSBsLCBsID0gbyAmIDMxLCAobyAmIDYzKSA+Pj4gMCA+PSAzMiA/IGwgPSBhID4+PiBsIHwgMCA6IGwgPSAoKDEgPDwgbCkgLSAxICYgYSkgPDwgMzIgLSBsIHwgdSA+Pj4gbCwgZVt3ICsgMTM2ID4+IDJdID0gbCwgdSA9IGcsIGggPSBoICsgMSB8IDAsIHUgPSBoID8gdSA6IHUgKyAxIHwgMCwgZyA9IHUsICEhKChoIHwgMCkgIT0gKHMgfCAwKSB8IHUpOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPSBuICsgMSB8IDAsIChQIHwgMCkgPT0gKG4gfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKFUgPSAwLCBlW00wICsgOCA+PiAyXSA9IDAsIFAgPSBHcihpLCBlW0QgKyAyOCA+PiAyXSksICFQKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICBuMiA9IGVbZVtEICsgMjAgPj4gMl0gPj4gMl0sIHYgPSBYIC0gMTQ0IHwgMCwgWCA9IHYsIHMgPSBlW1AgKyA0ID4+IDJdLCBnID0gZVtEICsgMzYgPj4gMl0sIFMyID0gZVtzICsgNzYgPj4gMl0gKyBaKGcsIDU2NDQpIHwgMCwgRDIgPSBlW1MyICsgNDIwID4+IDJdLCBZMiA9IGVbUCA+PiAyXSwgbSA9IFkyLCB3ID0gMCwgYyA9IDAsIG8gPSAwLCBoID0gWCAtIDMyIHwgMCwgWCA9IGgsIHogPSBlW3MgKyA3NiA+PiAyXSArIFooZywgNTY0NCkgfCAwLCBmMiA9IGVbeiArIDQyMCA+PiAyXSwgQyA9IGVbbSArIDE2ID4+IDJdLCBhID0gVTIoWihDLCA1MjgpKTsKICAgICAgICAgICAgICAgICAgICBrOiB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoIWEpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICBsID0gVTIoQyA8PCAyKTsKICAgICAgICAgICAgICAgICAgICAgIGY6IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IG42KG0sIGVbcyArIDc2ID4+IDJdLCBnLCB0KSwgaSkgewogICAgICAgICAgICAgICAgICAgICAgICAgIEE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID0gYSwgQyA+Pj4gMCA+PSA4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSBDICYgLTg7IHUgPSAoYyA8PCAyKSArIGwgfCAwLCBlW3UgPj4gMl0gPSBuLCBlW3UgKyA0ID4+IDJdID0gbiArIDUyOCwgZVt1ICsgOCA+PiAyXSA9IG4gKyAxMDU2LCBlW3UgKyAxMiA+PiAyXSA9IG4gKyAxNTg0LCBlW3UgKyAxNiA+PiAyXSA9IG4gKyAyMTEyLCBlW3UgKyAyMCA+PiAyXSA9IG4gKyAyNjQwLCBlW3UgKyAyNCA+PiAyXSA9IG4gKyAzMTY4LCBlW3UgKyAyOCA+PiAyXSA9IG4gKyAzNjk2LCBjID0gYyArIDggfCAwLCBuID0gbiArIDQyMjQgfCAwLCB3ID0gdyArIDggfCAwLCAoaiB8IDApICE9ICh3IHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodSA9IEMgJiA3LCAhdSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBlWyhjIDw8IDIpICsgbCA+PiAyXSA9IG4sIGMgPSBjICsgMSB8IDAsIG4gPSBuICsgNTI4IHwgMCwgSCA9IEggKyAxIHwgMCwgKHUgfCAwKSAhPSAoSCB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgcCA9IGYyICsgMSB8IDAsIHRyKG0sIHMsIGcsIGggKyAyMCB8IDAsIGggKyAxNiB8IDAsIGggKyAxMiB8IDAsIGggKyA4IHwgMCwgaCArIDQgfCAwLCBoLCBoICsgMjQgfCAwLCBoICsgMjggfCAwLCBsKSwgRSA9IGVbaCArIDI4ID4+IDJdLCBqID0gZVtoICsgMjQgPj4gMl0sIGVbaSArIDQgPj4gMl0gPSAwLCBuID0gZVt6ICsgOCA+PiAyXSArIDEgfCAwLCBnMiA9IFooQywgaiksIHggPSBaKGcyLCBFKSwgZDAobiwgMCwgeCwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgQTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFxMiAmJiAobiA9IFoobiwgeCksIGVbaSArIDggPj4gMl0gPSBuLCBuID0gRTIobiwgMiksIGVbaSArIDQgPj4gMl0gPSBuLCBuKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSKGEpLCBSKGwpLCBuID0gZVtpICsgNCA+PiAyXSwgbiAmJiAoUihuKSwgZVtpICsgNCA+PiAyXSA9IDApLCAhcCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZyA9IDAsIHcgPSBpOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9IGVbdyArIDIwMCA+PiAyXSwgbikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtID0gMCwgYyA9IGVbdyArIDE5NiA+PiAyXSwgYykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGwgPSBlW24gKyAxMiA+PiAyXSwgbCAmJiAoUihsKSwgZVtuICsgMTIgPj4gMl0gPSAwLCBjID0gZVt3ICsgMTk2ID4+IDJdKSwgbiA9IG4gKyAxNiB8IDAsIG0gPSBtICsgMSB8IDAsIGMgPj4+IDAgPiBtID4+PiAwOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBlW3cgKyAyMDAgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFIobiksIGVbdyArIDIwMCA+PiAyXSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHcgPSB3ICsgMjQwIHwgMCwgbiA9IChnIHwgMCkgPT0gKGYyIHwgMCksIGcgPSBnICsgMSB8IDAsICEhbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG8gPSBlW20gKyAyNCA+PiAyXSwgWDIgPSBlW2ggKyAyMCA+PiAyXSwgZVtpICsgMjA0ID4+IDJdID0gWDIsIHoyID0gZVtoICsgMTIgPj4gMl0sIGVbaSArIDIwOCA+PiAyXSA9IHoyLCBpMCA9IGVbaCArIDE2ID4+IDJdLCBlW2kgKyAyMTIgPj4gMl0gPSBpMCwgTDIgPSBlW2ggKyA4ID4+IDJdLCBlW2kgKyAyMTYgPj4gMl0gPSBMMiwgZVtpICsgMTIgPj4gMl0gPSB4LCBlW2kgKyAxNiA+PiAyXSA9IGcyLCBlW2kgKyAyMCA+PiAyXSA9IGosIEogPSAxLCBlW2kgKyAyNCA+PiAyXSA9IDEsIEMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHcgPSBlW2kgKyAyMDAgPj4gMl0sIEggPSAwLCBnID0gbzsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IGVbKEggPDwgMikgKyBsID4+IDJdLCBlW3cgPj4gMl0gPSBlW2cgPj4gMl0sIGVbdyArIDQgPj4gMl0gPSBlW2cgKyA0ID4+IDJdLCB1ID0gZVt3ICsgOCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG0gPSBlW3cgKyAxMiA+PiAyXSwgKHUgfCAwKSAhPSAxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzID0gdSAmIC0yLCBjID0gMDsgZVttID4+IDJdID0gZVtuID4+IDJdLCBlW20gKyA0ID4+IDJdID0gZVtuICsgNCA+PiAyXSwgZVttICsgOCA+PiAyXSA9IGVbbiArIDggPj4gMl0sIGVbbSArIDEyID4+IDJdID0gZVtuICsgMTIgPj4gMl0sIGVbbSArIDE2ID4+IDJdID0gZVtuICsgMTYgPj4gMl0sIGVbbSArIDIwID4+IDJdID0gZVtuICsgMjAgPj4gMl0sIGVbbSArIDI0ID4+IDJdID0gZVtuICsgMjQgPj4gMl0sIGVbbSArIDI4ID4+IDJdID0gZVtuICsgMjggPj4gMl0sIG0gPSBtICsgMzIgfCAwLCBuID0gbiArIDMyIHwgMCwgYyA9IGMgKyAyIHwgMCwgKHMgfCAwKSAhPSAoYyB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISh1ICYgMSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbbSA+PiAyXSA9IGVbbiA+PiAyXSwgZVttICsgNCA+PiAyXSA9IGVbbiArIDQgPj4gMl0sIGVbbSArIDggPj4gMl0gPSBlW24gKyA4ID4+IDJdLCBlW20gKyAxMiA+PiAyXSA9IGVbbiArIDEyID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnID0gZyArIDUyIHwgMCwgdyA9IHcgKyAxNiB8IDAsIEggPSBIICsgMSB8IDAsIChDIHwgMCkgPT0gKEggfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocCA+Pj4gMCA+IDEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHMgPSBpOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtzICsgNDU2ID4+IDJdID0gTDIsIGVbcyArIDQ1MiA+PiAyXSA9IGkwLCBlW3MgKyA0NDggPj4gMl0gPSB6MiwgZVtzICsgNDQ0ID4+IDJdID0gWDIsIGVbcyArIDI2NCA+PiAyXSA9IDEsIGVbcyArIDI2MCA+PiAyXSA9IGosIGVbcyArIDI1NiA+PiAyXSA9IGcyLCBlW3MgKyAyNTIgPj4gMl0gPSB4LCBDKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodyA9IGVbcyArIDQ0MCA+PiAyXSwgSCA9IDAsIGcgPSBvOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IGVbKEggPDwgMikgKyBsID4+IDJdLCBlW3cgPj4gMl0gPSBlW2cgPj4gMl0sIGVbdyArIDQgPj4gMl0gPSBlW2cgKyA0ID4+IDJdLCB1ID0gZVt3ICsgOCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF1KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtID0gZVt3ICsgMTIgPj4gMl0sICh1IHwgMCkgIT0gMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHAgPSB1ICYgLTIsIGMgPSAwOyBlW20gPj4gMl0gPSBlW24gPj4gMl0sIGVbbSArIDQgPj4gMl0gPSBlW24gKyA0ID4+IDJdLCBlW20gKyA4ID4+IDJdID0gZVtuICsgOCA+PiAyXSwgZVttICsgMTIgPj4gMl0gPSBlW24gKyAxMiA+PiAyXSwgZVttICsgMTYgPj4gMl0gPSBlW24gKyAxNiA+PiAyXSwgZVttICsgMjAgPj4gMl0gPSBlW24gKyAyMCA+PiAyXSwgZVttICsgMjQgPj4gMl0gPSBlW24gKyAyNCA+PiAyXSwgZVttICsgMjggPj4gMl0gPSBlW24gKyAyOCA+PiAyXSwgbSA9IG0gKyAzMiB8IDAsIG4gPSBuICsgMzIgfCAwLCBjID0gYyArIDIgfCAwLCAocCB8IDApICE9IChjIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEodSAmIDEpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbbSA+PiAyXSA9IGVbbiA+PiAyXSwgZVttICsgNCA+PiAyXSA9IGVbbiArIDQgPj4gMl0sIGVbbSArIDggPj4gMl0gPSBlW24gKyA4ID4+IDJdLCBlW20gKyAxMiA+PiAyXSA9IGVbbiArIDEyID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGcgPSBnICsgNTIgfCAwLCB3ID0gdyArIDE2IHwgMCwgSCA9IEggKyAxIHwgMCwgKEMgfCAwKSA9PSAoSCB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID0gZVtzICsgOCA+PiAyXSwgZVtzICsgMjQ0ID4+IDJdID0gZVtzICsgNCA+PiAyXSwgZVtzICsgMjQ4ID4+IDJdID0gbiwgbiA9IChKIHwgMCkgIT0gKGYyIHwgMCksIHMgPSBzICsgMjQwIHwgMCwgSiA9IEogKyAxIHwgMCwgIW4pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgUihhKSwgUihsKSwgbCA9IGVbeiArIDQyMCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICBBOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSVt6ICsgNTY0MCB8IDBdICYgNCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGwgfCAwKSA9PSAtMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKG0gPSB6ICsgNDI0IHwgMCwgZyA9IGVbeiArIDggPj4gMl0sIGMgPSAwLCBuID0gaTsgbyA9IGVbbSArIDM2ID4+IDJdLCBlW24gKyA0NCA+PiAyXSA9IDEsIGVbbiArIDg0ID4+IDJdID0gbywgZVtuICsgNDggPj4gMl0gPSBlW20gPj4gMl0sIG8gPSBlW20gKyA0ID4+IDJdLCBlW24gKyA2OCA+PiAyXSA9IDAsIGVbbiArIDcyID4+IDJdID0gMCwgZVtuICsgNTIgPj4gMl0gPSBvLCBlW24gKyA2MCA+PiAyXSA9IGVbbSArIDEyID4+IDJdLCBlW24gKyA2NCA+PiAyXSA9IGVbbSArIDE2ID4+IDJdLCBvID0gZVttICsgOCA+PiAyXSwgZVtuICsgNzYgPj4gMl0gPSBqLCBlW24gKyA1NiA+PiAyXSA9IG8gPj4+IDAgPCBnID4+PiAwID8gbyA6IGcsIG0gPSBtICsgMTQ4IHwgMCwgbiA9IG4gKyAyNDAgfCAwLCBvID0gKGwgfCAwKSA9PSAoYyB8IDApLCBjID0gYyArIDEgfCAwLCAhbzsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobCB8IDApID09IC0xKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGcgPSBlW3ogKyA4ID4+IDJdLCBvID0gZVt6ICsgNCA+PiAyXSwgbiA9IGksIGwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoYSA9IGwgKyAxICYgLTIsIEggPSAwOyBlW24gKyA2OCA+PiAyXSA9IDAsIGVbbiArIDcyID4+IDJdID0gMCwgZVtuICsgNTIgPj4gMl0gPSAwLCBlW24gKyA0NCA+PiAyXSA9IDEsIGVbbiArIDQ4ID4+IDJdID0gMCwgZVtuICsgODQgPj4gMl0gPSBvLCBlW24gKyA2MCA+PiAyXSA9IEUsIGVbbiArIDMyNCA+PiAyXSA9IG8sIGVbbiArIDc2ID4+IDJdID0gaiwgZVtuICsgNTYgPj4gMl0gPSBnLCBlW24gKyAzMDggPj4gMl0gPSAwLCBlW24gKyAzMTIgPj4gMl0gPSAwLCBlW24gKyAyOTIgPj4gMl0gPSAwLCBlW24gKyAyODQgPj4gMl0gPSAxLCBlW24gKyAyODggPj4gMl0gPSAwLCBlW24gKyAzMDAgPj4gMl0gPSBFLCBlW24gKyAyOTYgPj4gMl0gPSBnLCBlW24gKyAzMTYgPj4gMl0gPSBqLCBlW24gKyA2NCA+PiAyXSA9IGVbbiArIDE5NiA+PiAyXSwgZVtuICsgMzA0ID4+IDJdID0gZVtuICsgNDM2ID4+IDJdLCBuID0gbiArIDQ4MCB8IDAsIEggPSBIICsgMiB8IDAsIChhIHwgMCkgIT0gKEggfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsICYgMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbbiArIDY4ID4+IDJdID0gMCwgZVtuICsgNzIgPj4gMl0gPSAwLCBlW24gKyA1MiA+PiAyXSA9IDAsIGVbbiArIDQ0ID4+IDJdID0gMSwgZVtuICsgNDggPj4gMl0gPSAwLCBlW24gKyA4NCA+PiAyXSA9IG8sIGVbbiArIDYwID4+IDJdID0gRSwgZVtuICsgNzYgPj4gMl0gPSBqLCBlW24gKyA1NiA+PiAyXSA9IGcsIGVbbiArIDY0ID4+IDJdID0gZVtuICsgMTk2ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBvID0gaTsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIFIoYSk7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBSKGwpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBYID0gaCArIDMyIHwgMDsKICAgICAgICAgICAgICAgICAgICBrOiB7CiAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbykKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICBoID0gbywgaiA9IEQyICsgMSB8IDAsIHMgPSBCLCBjID0gbzsKICAgICAgICAgICAgICAgICAgICAgICAgQTogewogICAgICAgICAgICAgICAgICAgICAgICAgIGw6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtjICsgODQgPj4gMl0gPT0gLTEgfHwgKGkgPSBVMihlW1kyICsgMTYgPj4gMl0gPDwgMiksICFpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeiA9IGQyKGksIDEsIGVbWTIgKyAxNiA+PiAyXSA8PCAyKSwgbGUoYykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDID0gZVtuMiArIDIwID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRbYyArIDQwID4+IDJdID49IGRbUzIgKyAxMiA+PiAyXSB8fCAobiA9IGVbYyArIDMyID4+IDJdLCBpID0gWihlW2MgKyAyOCA+PiAyXSwgNzYpICsgQyB8IDAsIG4gPj4+IDAgPj0gZFtpICsgMjQgPj4gMl0pIHx8IChuID0gZVtpICsgMjggPj4gMl0gKyBaKG4sIDE1MikgfCAwLCAhZVtuICsgMjQgPj4gMl0pKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gbiArIDI4IHwgMCwgbCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvID0gZyArIFoobCwgMzYpIHwgMCwgaSA9IGVbbyArIDIwID4+IDJdICsgWihlW2MgKyAzNiA+PiAyXSwgNDApIHwgMCwgIWxyKEQsIGVbYyArIDI4ID4+IDJdLCBlW2MgKyAzMiA+PiAyXSwgZVtvICsgMTYgPj4gMl0sIGVbaSA+PiAyXSwgZVtpICsgNCA+PiAyXSwgZVtpICsgOCA+PiAyXSwgZVtpICsgMTIgPj4gMl0pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBsICsgMSB8IDAsIGwgPj4+IDAgPCBkW24gKyAyNCA+PiAyXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVt6ICsgKGVbYyArIDI4ID4+IDJdIDw8IDIpID4+IDJdID0gMCwgZVt2ICsgMTM2ID4+IDJdID0gMCwgIXk0KGVbUCArIDQgPj4gMl0sIGVbbjIgKyAyMCA+PiAyXSwgUzIsIGMsIHYgKyAxNDAgfCAwLCBzLCB2ICsgMTM2IHwgMCwgeSwgdCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IGVbYyArIDMyID4+IDJdLCBsID0gZVtjICsgMjggPj4gMl0sIGYyID0gZVt2ICsgMTM2ID4+IDJdLCBlW3YgKyAxNDAgPj4gMl0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEgPSAwLCBlW3YgKyAxMzYgPj4gMl0gPSAwLCBEMiA9IGVbKGVbbjIgKyAyMCA+PiAyXSArIFoobCwgNzYpIHwgMCkgKyAyOCA+PiAyXSArIFooaSwgMTUyKSB8IDAsIEMgPSBlW0QyICsgMjQgPj4gMl0sIEMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGcyID0geSAtIGYyIHwgMCwgWDIgPSBzICsgeSB8IDAsIHUgPSBEMiArIDI4IHwgMCwgdyA9IDAsIHAgPSAwLCBpMCA9IHMgKyBmMiB8IDAsIGEgPSBpMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbdSArIDggPj4gMl0gPT0gZVt1ID4+IDJdIHwgZVt1ICsgMTIgPj4gMl0gPT0gZVt1ICsgNCA+PiAyXSB8fCAoaSA9IGVbdSArIDIwID4+IDJdICsgWihlW2MgKyAzNiA+PiAyXSwgNDApIHwgMCwgTDIgPSBaKGVbaSArIDIwID4+IDJdLCBlW2kgKyAxNiA+PiAyXSksICFMMikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChDID0gZVtpICsgMjQgPj4gMl0sIEogPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwICYmIChlW0MgKyA1MiA+PiAyXSA9IDApLCBvID0gZVtDICsgMzYgPj4gMl0sIG8pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBlW0MgPj4gMl0sIEggPSBlW0MgKyA0MCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGc6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IFooSCwgMjQpICsgbCB8IDAsIGVbbCAtIDIwID4+IDJdICE9IGVbbCAtIDEyID4+IDJdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gbCAtIDI0IHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEggPSBIICsgMSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEggPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW0MgKyA0MCA+PiAyXSA9IEg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGg6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IGVbbCArIDIwID4+IDJdLCBwIHwgaSA+Pj4gMCA+IChhIF4gLTEpID4+PiAwIHwgWDIgPj4+IDAgPCBpICsgYSA+Pj4gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRSA9IGVbQyArIDQgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPSBlW0MgKyA1MiA+PiAyXSwgeCA9IGVbQyArIDU2ID4+IDJdLCAobiB8IDApID09ICh4IHwgMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHggPSBuIDw8IDEgfCAxLCBFID0gbzAoRSwgeCA8PCAzKSwgIUUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtDICsgNTYgPj4gMl0gPSB4LCBlW0MgKyA0ID4+IDJdID0gRSwgSCA9IGVbQyArIDQwID4+IDJdLCBvID0gZVtDICsgMzYgPj4gMl0sIG4gPSBlW0MgKyA1MiA+PiAyXSwgaSA9IGVbbCArIDIwID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGcgPSAobiA8PCAzKSArIEUgfCAwLCBlW2cgKyA0ID4+IDJdID0gaSwgZVtnID4+IDJdID0gYSwgbiA9IG4gKyAxIHwgMCwgZVtDICsgNTIgPj4gMl0gPSBuLCBlW2wgPj4gMl0gPSBlW2wgPj4gMl0gKyBpLCBnID0gZVtsICsgMTYgPj4gMl0sIHAgPSBnICsgZVtsICsgNCA+PiAyXSB8IDAsIGVbbCArIDQgPj4gMl0gPSBwLCBtID0gbyAtIGcgfCAwLCBlW0MgKyAzNiA+PiAyXSA9IG0sIGVbbCArIDggPj4gMl0gPSBwLCBhID0gaSArIGEgfCAwLCBwID0gMCwgKG8gfCAwKSA9PSAoZyB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChIID0gSCArIDEgfCAwLCBlW0MgKyA0MCA+PiAyXSA9IEgsIGcgPSBsICsgMjQgfCAwLCBpID0gZVtsICsgNDQgPj4gMl0sICEoaSA+Pj4gMCA8PSAoYSBeIC0xKSA+Pj4gMCAmIFgyID4+PiAwID49IGkgKyBhID4+PiAwKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChuIHwgMCkgIT0gKHggfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHggPSB4IDw8IDEgfCAxLCBFID0gbzAoRSwgeCA8PCAzKSwgIUUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbQyArIDU2ID4+IDJdID0geCwgZVtDICsgNCA+PiAyXSA9IEUsIEggPSBlW0MgKyA0MCA+PiAyXSwgbiA9IGVbQyArIDUyID4+IDJdLCBpID0gZVtsICsgNDQgPj4gMl0sIG8gPSBlW0MgKyAzNiA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobSA9IChuIDw8IDMpICsgRSB8IDAsIGVbbSArIDQgPj4gMl0gPSBpLCBlW20gPj4gMl0gPSBhLCBuID0gbiArIDEgfCAwLCBlW0MgKyA1MiA+PiAyXSA9IG4sIGVbbCArIDI0ID4+IDJdID0gZVtsICsgMjQgPj4gMl0gKyBpLCB6MiA9IGVbbCArIDQwID4+IDJdLCBPID0gejIgKyBlW2wgKyAyOCA+PiAyXSB8IDAsIGVbbCArIDI4ID4+IDJdID0gTywgbSA9IG8gLSB6MiB8IDAsIGVbQyArIDM2ID4+IDJdID0gbSwgZVtsICsgMzIgPj4gMl0gPSBPLCBhID0gaSArIGEgfCAwLCBsID0gZywgKG8gfCAwKSA9PSAoejIgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFEodCwgMSwgMTAzNSwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9IGVbYyArIDI4ID4+IDJdLCBnID0gZVtjICsgMzIgPj4gMl0sIG8gPSBlW2MgKyAzNiA+PiAyXSwgZVtlW1AgKyA0ID4+IDJdICsgMTA0ID4+IDJdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVt2ICsgMTIwID4+IDJdID0gbiwgZVt2ICsgMTE2ID4+IDJdID0gZywgZVt2ICsgMTEyID4+IDJdID0gdywgZVt2ICsgMTA4ID4+IDJdID0gbywgZVt2ICsgMTA0ID4+IDJdID0gSiwgZVt2ICsgMTAwID4+IDJdID0gZzIsIGVbdiArIDk2ID4+IDJdID0gaSwgUSh0LCAxLCAyNjIzNCwgdiArIDk2IHwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVt2ICsgODggPj4gMl0gPSBuLCBlW3YgKyA4NCA+PiAyXSA9IGcsIGVbdiArIDgwID4+IDJdID0gdywgZVt2ICsgNzYgPj4gMl0gPSBvLCBlW3YgKyA3MiA+PiAyXSA9IEosIGVbdiArIDY4ID4+IDJdID0gZzIsIGVbdiArIDY0ID4+IDJdID0gaSwgUSh0LCAyLCAyNjIzNCwgdiAtIC02NCB8IDApLCBlW0MgKyA1MiA+PiAyXSA9IDAsIGkgPSBlW2wgKyAxNiA+PiAyXSwgZVtsICsgNCA+PiAyXSA9IGkgKyBlW2wgKyA0ID4+IDJdLCBuID0gZVtDICsgMzYgPj4gMl0sIGVbQyArIDM2ID4+IDJdID0gbiAtIGksIEggPSBlW0MgKyA0MCA+PiAyXSwgcCA9IDEsIChpIHwgMCkgPT0gKG4gfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIID0gSCArIDEgfCAwLCBlW0MgKyA0MCA+PiAyXSA9IEg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW0MgKyA0NCA+PiAyXSA9IEg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChDID0gQyAtIC02NCB8IDAsIEogPSBKICsgMSB8IDAsIChMMiB8IDApID09IChKIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDID0gZVtEMiArIDI0ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHUgPSB1ICsgMzYgfCAwLCB3ID0gdyArIDEgfCAwLCAhKHcgPj4+IDAgPCBDID4+PiAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBwID8gZzIgOiBhIC0gaTAgfCAwLCBsID0gZVtjICsgMjggPj4gMl0sIGkgPSBlW2MgKyAzMiA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmMiA9IGEgKyBmMiB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gZVtZMiArIDI0ID4+IDJdICsgWihsLCA1MikgfCAwLCBuID0gZVtnICsgMzYgPj4gMl0sIGVbZyArIDM2ID4+IDJdID0gaSA+Pj4gMCA+IG4gPj4+IDAgPyBpIDogbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMgPSBlW24yICsgMjAgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbdiArIDEzNiA+PiAyXSA9IDAsICF5NChlW1AgKyA0ID4+IDJdLCBDLCBTMiwgYywgdiArIDE0MCB8IDAsIHMsIHYgKyAxMzYgfCAwLCB5LCB0KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGVbYyArIDI4ID4+IDJdLCBmMiA9IGVbdiArIDEzNiA+PiAyXSwgIWVbdiArIDE0MCA+PiAyXSB8fCAodyA9IGVbKGVbbjIgKyAyMCA+PiAyXSArIFoobCwgNzYpIHwgMCkgKyAyOCA+PiAyXSArIFooZVtjICsgMzIgPj4gMl0sIDE1MikgfCAwLCBDID0gZVt3ICsgMjQgPj4gMl0sICFDKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGcgPSB5IC0gZjIgfCAwLCBvID0gdyArIDI4IHwgMCwgbiA9IDAsIHggPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW28gKyA4ID4+IDJdID09IGVbbyA+PiAyXSB8IGVbbyArIDEyID4+IDJdID09IGVbbyArIDQgPj4gMl0gfHwgKGkgPSBlW28gKyAyMCA+PiAyXSArIFooZVtjICsgMzYgPj4gMl0sIDQwKSB8IDAsIEggPSBaKGVbaSArIDIwID4+IDJdLCBlW2kgKyAxNiA+PiAyXSksICFIKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobCA9IGVbaSArIDI0ID4+IDJdLCBFID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhID0gZVtsICsgMzYgPj4gMl0sICFhKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDID0gZVtsID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGc6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSBlW2wgKyA0MCA+PiAyXSwgaSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChDID0gWihpLCAyNCkgKyBDIHwgMCwgZVtDIC0gMjAgPj4gMl0gIT0gZVtDIC0gMTIgPj4gMl0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMgPSBDIC0gMjQgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcDIgPSBpICsgMSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAyID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtsICsgNDAgPj4gMl0gPSBwMiwgaSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHUgPSBlW0MgKyAyMCA+PiAyXSwgaSA9IHUgKyBuIHwgMCwgIShpID4+PiAwID49IHUgPj4+IDAgJiBpID4+PiAwIDw9IGcgPj4+IDApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IGVbYyArIDI4ID4+IDJdLCBhID0gZVtjICsgMzIgPj4gMl0sIG0gPSBlW2MgKyAzNiA+PiAyXSwgZVtlW1AgKyA0ID4+IDJdICsgMTA0ID4+IDJdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVt2ICsgMjQgPj4gMl0gPSBpLCBlW3YgKyAyMCA+PiAyXSA9IGEsIGVbdiArIDE2ID4+IDJdID0geCwgZVt2ICsgMTIgPj4gMl0gPSBtLCBlW3YgKyA4ID4+IDJdID0gRSwgZVt2ICsgNCA+PiAyXSA9IGcsIGVbdiA+PiAyXSA9IHUsIFEodCwgMiwgMjYxNDksIHYpLCBhID0gZVtsICsgMzYgPj4gMl0sIGkgPSBlW0MgKyAyMCA+PiAyXSArIG4gfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodSA9IGVbQyArIDE2ID4+IDJdLCBlW0MgKyA0ID4+IDJdID0gdSArIGVbQyArIDQgPj4gMl0sIG4gPSBhIC0gdSB8IDAsIGVbbCArIDM2ID4+IDJdID0gbiwgKGEgfCAwKSAhPSAodSB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbdiArIDU2ID4+IDJdID0gaSwgZVt2ICsgNTIgPj4gMl0gPSBhLCBlW3YgKyA0OCA+PiAyXSA9IHgsIGVbdiArIDQ0ID4+IDJdID0gbSwgZVt2ICsgNDAgPj4gMl0gPSBFLCBlW3YgKyAzNiA+PiAyXSA9IGcsIGVbdiArIDMyID4+IDJdID0gdSwgUSh0LCAxLCAyNjE0OSwgdiArIDMyIHwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDID0gQyArIDI0IHwgMCwgcDIgPSBlW2wgKyA0MCA+PiAyXSArIDEgfCAwLCBhID0gbiwgbiA9IGksIGkgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGwgLSAtNjQgfCAwLCBFID0gRSArIDEgfCAwLCAoSCB8IDApID09IChFIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDID0gZVt3ICsgMjQgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvID0gbyArIDM2IHwgMCwgeCA9IHggKyAxIHwgMCwgISh4ID4+PiAwIDwgQyA+Pj4gMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gZVtjICsgMjggPj4gMl0sIGYyID0gbiArIGYyIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlW3ogKyAobCA8PCAyKSA+PiAyXSB8fCAoaSA9IGVbWTIgKyAyNCA+PiAyXSArIFoobCwgNTIpIHwgMCwgZVtpICsgMzYgPj4gMl0pKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbaSArIDM2ID4+IDJdID0gZVsoZVtuMiArIDIwID4+IDJdICsgWihsLCA3NikgfCAwKSArIDI0ID4+IDJdIC0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5ID0geSAtIGYyIHwgMCwgcyA9IHMgKyBmMiB8IDAsICFsZShjKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUih6KSwgYyA9IGMgKyAyNDAgfCAwLCBQMiA9IFAyICsgMSB8IDAsICEoUDIgPj4+IDAgPD0gZFtTMiArIDQyMCA+PiAyXSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaShoLCBqKSwgZVtNMCArIDggPj4gMl0gPSBzIC0gQiwgaSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBDaShoLCBqKSwgUih6KTsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIENpKGgsIGopOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgaSA9IDA7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChYID0gdiArIDE0NCB8IDAsIEkxKFApLCAhaSkKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgVSA9IGVbZVtEICsgMzIgPj4gMl0gKyA1NTg0ID4+IDJdLCBDID0gZVtlW0QgKyAyMCA+PiAyXSA+PiAyXSwgYyA9IGVbQyArIDIwID4+IDJdLCBlW00wICsgMTIgPj4gMl0gPSAxLCB5ID0gYWYoKSwgbTIgPSAwLCBnID0gMCwgaSA9IGVbRCArIDMyID4+IDJdLCBnID0gZVtpICsgMTIgPj4gMl0gPT0gZVtpICsgOCA+PiAyXSA/IGVbVSArIDE2ID4+IDJdID4+PiA0ICYgMSA6IGcsIGkgPSBlW0MgKyAxNiA+PiAyXTsKICAgICAgICAgICAgICAgICAgICBrOiB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoIWkpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPSBlW0QgKyA2OCA+PiAyXSwgISghZVtuICsgKG0yIDw8IDIpID4+IDJdICYmIG4pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgdiA9IE0wICsgMTIgfCAwLCBhID0gMCwgbCA9IGVbYyArIDI0ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgIGY6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoQiA9IGVbRCArIDQ0ID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaCA9IGVbYyArIDI4ID4+IDJdICsgWihhLCAxNTIpIHwgMCwgbyA9IGVbaCArIDI0ID4+IDJdLCBvKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChwMiA9IGggKyAyOCB8IDAsIGwgPSBlW2ggKyAyMCA+PiAyXSwgaSA9IGVbaCArIDE2ID4+IDJdLCBtID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChaKGksIGwpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodyA9IHAyICsgWihtLCAzNikgfCAwLCB1ID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gZVt3ICsgMjAgPj4gMl0gKyBaKHUsIDQwKSB8IDAsIGwgPSBscihELCBlW2MgKyAxNiA+PiAyXSwgYSwgZVt3ICsgMTYgPj4gMl0sIGVbbiA+PiAyXSwgZVtuICsgNCA+PiAyXSwgZVtuICsgOCA+PiAyXSwgZVtuICsgMTIgPj4gMl0pLCBvID0gZVtuICsgMjAgPj4gMl0sIHMgPSBlW24gKyAxNiA+PiAyXSwgaSA9IFoobywgcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAocyA9IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IGVbbiArIDI0ID4+IDJdICsgKHMgPDwgNikgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGw6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbHIoRCwgZVtjICsgMTYgPj4gMl0sIGEsIGVbdyArIDE2ID4+IDJdLCBlW2wgKyA4ID4+IDJdLCBlW2wgKyAxMiA+PiAyXSwgZVtsICsgMTYgPj4gMl0sIGVbbCArIDIwID4+IDJdKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IGVbbCArIDYwID4+IDJdLCAhaSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSKGkpLCBlW2wgKyA2MCA+PiAyXSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWVbRCArIDY0ID4+IDJdICYmIGVbbCArIDYwID4+IDJdIHwgZVtsICsgMTYgPj4gMl0gPT0gZVtsICsgOCA+PiAyXSB8IGVbbCArIDIwID4+IDJdID09IGVbbCArIDEyID4+IDJdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSBFMigxLCA0NCksICFpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbTTAgKyAxMiA+PiAyXSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobyA9IGVbRCArIDY0ID4+IDJdLCBlW2kgKyAzNiA+PiAyXSA9IHksIGVbaSArIDI4ID4+IDJdID0gdiwgZVtpICsgMjAgPj4gMl0gPSBVLCBlW2kgKyAxNiA+PiAyXSA9IGMsIGVbaSArIDEyID4+IDJdID0gdywgZVtpICsgOCA+PiAyXSA9IGwsIGVbaSArIDQgPj4gMl0gPSBhLCBlW2kgPj4gMl0gPSBvLCBlW2kgKyA0MCA+PiAyXSA9IGcsIGVbaSArIDMyID4+IDJdID0gdCwgZVtpICsgMjQgPj4gMl0gPSBlW0IgKyA0ID4+IDJdID4gMSwgYjEoQiwgMjQ5LCBpKSwgIWVbTTAgKyAxMiA+PiAyXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPSBzICsgMSB8IDAsICEocyA+Pj4gMCA8IFooZVtuICsgMjAgPj4gMl0sIGVbbiArIDE2ID4+IDJdKSA+Pj4gMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgbCA9IGVbbiArIDI0ID4+IDJdICsgKGkgPDwgNikgfCAwLCBQID0gZVtsICsgNjAgPj4gMl0sIFAgJiYgKFIoUCksIGVbbCArIDYwID4+IDJdID0gMCwgcyA9IGVbbiArIDE2ID4+IDJdLCBvID0gZVtuICsgMjAgPj4gMl0pLCBpID0gaSArIDEgfCAwLCBpID4+PiAwIDwgWihvLCBzKSA+Pj4gMDsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1ID0gdSArIDEgfCAwLCBpID0gZVtoICsgMTYgPj4gMl0sIGwgPSBlW2ggKyAyMCA+PiAyXSwgISh1ID4+PiAwIDwgWihpLCBsKSA+Pj4gMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvID0gZVtoICsgMjQgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobSA9IG0gKyAxIHwgMCwgIShtID4+PiAwIDwgbyA+Pj4gMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gZVtjICsgMjQgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEgPSBhICsgMSB8IDAsICEoYSA+Pj4gMCA8IGwgPj4+IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWVbTTAgKyAxMiA+PiAyXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVbQyArIDE2ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChVID0gVSArIDEwODAgfCAwLCBjID0gYyArIDc2IHwgMCwgbTIgPSBtMiArIDEgfCAwLCAhKG0yID4+PiAwIDwgaSA+Pj4gMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChVID0gMCwgbDEoZVtEICsgNDQgPj4gMl0pLCB5ICYmIEkxKHkpLCAhZVtNMCArIDEyID4+IDJdKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICBrOiB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtEICsgNjQgPj4gMl0gfHwgKG0yID0gZVtEICsgMjQgPj4gMl0sICFlW20yICsgMTYgPj4gMl0pKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgZm9yIChjID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVbZVtlW0QgKyAyMCA+PiAyXSA+PiAyXSArIDIwID4+IDJdICsgWihjLCA3NikgfCAwLCBuID0gZVtpICsgMjggPj4gMl0gKyBaKGVbKGVbbTIgKyAyNCA+PiAyXSArIFooYywgNTIpIHwgMCkgKyAzNiA+PiAyXSwgMTUyKSB8IDAsIGwgPSBlW24gKyAxMzYgPj4gMl0sIGcgPSBlW24gKyAxNDQgPj4gMl0sIG8gPSBlW24gKyAxNDAgPj4gMl0sIG4gPSBlW24gKyAxNDggPj4gMl0sIFIoZVtpICsgNTIgPj4gMl0pLCBlW2kgKyA1MiA+PiAyXSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIGY6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA9IGVbRCArIDY4ID4+IDJdLCAobCB8IDApID09IChnIHwgMCkgfCAoZVthICsgKGMgPDwgMikgPj4gMl0gPyAwIDogYSkgfCAobiB8IDApID09IChvIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID0gbiAtIG8gfCAwLCBsID0gZyAtIGwgfCAwLCBkMChuLCAwLCBsLCAwKSwgcTIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFEodCwgMSwgNDk1MSwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9IFoobiwgbCksIG4gPj4+IDAgPj0gMTA3Mzc0MTgyNCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgUSh0LCAxLCA0OTUxLCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gaSwgaSA9IFAwKG4gPDwgMiksIGVbbCArIDUyID4+IDJdID0gaSwgaSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgUSh0LCAxLCA0OTUxLCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID0gYyArIDEgfCAwLCBtMiA9IGVbRCArIDI0ID4+IDJdLCAhKGMgPj4+IDAgPCBkW20yICsgMTYgPj4gMl0pKQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAobTIgPSBlW0QgKyAzMiA+PiAyXSwgcjAgPSBlW2VbRCArIDIwID4+IDJdID4+IDJdLCBlW3IwICsgMTYgPj4gMl0pIHsKICAgICAgICAgICAgICAgICAgICAgIGZvciAoYyA9IGVbcjAgKyAyMCA+PiAyXSwgbTIgPSBlW20yICsgNTU4NCA+PiAyXSwgaSA9IGVbZVtEICsgMjQgPj4gMl0gKyAyNCA+PiAyXSwgdzIgPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICBrOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPSBlW0QgKyA2OCA+PiAyXSwgIWVbbiArICh3MiA8PCAyKSA+PiAyXSAmJiBuKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaCA9IGVbaSArIDM2ID4+IDJdICsgMSB8IDAsIGVbbTIgKyAyMCA+PiAyXSA9PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwID0gaCwgbiA9IDAsIHgyID0gWCAtIDMyIHwgMCwgWCA9IHgyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbRCArIDY0ID4+IDJdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IDEsIChoIHwgMCkgPT0gMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBlW2MgKyAyOCA+PiAyXSwgZyA9IGggLSAxIHwgMCwgYSA9IGcgJiAxLCB1ID0gZVtEICsgNDQgPj4gMl0sIHMgPSBlW3UgKyA0ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGggfCAwKSA9PSAyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyA9IHk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGggPSBnICYgLTIsIG8gPSB5LCBsID0gMDsgdyA9IGVbbyArIDE2MCA+PiAyXSAtIGVbbyArIDE1MiA+PiAyXSB8IDAsIG4gPSBuID4+PiAwID4gdyA+Pj4gMCA/IG4gOiB3LCB3ID0gZVtvICsgMTY0ID4+IDJdIC0gZVtvICsgMTU2ID4+IDJdIHwgMCwgbiA9IG4gPj4+IDAgPiB3ID4+PiAwID8gbiA6IHcsIHcgPSBlW28gKyAzMTIgPj4gMl0gLSBlW28gKyAzMDQgPj4gMl0gfCAwLCBuID0gbiA+Pj4gMCA+IHcgPj4+IDAgPyBuIDogdywgdyA9IGVbbyArIDMxNiA+PiAyXSAtIGVbbyArIDMwOCA+PiAyXSB8IDAsIG4gPSBuID4+PiAwID4gdyA+Pj4gMCA/IG4gOiB3LCBvID0gbyArIDMwNCB8IDAsIGwgPSBsICsgMiB8IDAsIChoIHwgMCkgIT0gKGwgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gMCwgYSAmJiAoYSA9IGVbbyArIDE2MCA+PiAyXSAtIGVbbyArIDE1MiA+PiAyXSB8IDAsIG4gPSBuID4+PiAwID4gYSA+Pj4gMCA/IG4gOiBhLCBvID0gZVtvICsgMTY0ID4+IDJdIC0gZVtvICsgMTU2ID4+IDJdIHwgMCwgbiA9IG4gPj4+IDAgPiBvID4+PiAwID8gbiA6IG8pLCBuID4+PiAwID4gMTM0MjE3NzI3IHx8IChvID0gWihlW2MgKyAyNCA+PiAyXSwgMTUyKSArIHkgfCAwLCBhID0gZVtvIC0gMTUyID4+IDJdLCBvID0gZVtvIC0gMTQ0ID4+IDJdLCBoID0gZVt5ICsgNCA+PiAyXSwgQyA9IGVbeSArIDEyID4+IDJdLCB2ID0gZVt5ID4+IDJdLCBwMiA9IGVbeSArIDggPj4gMl0sIEIgPSBuIDw8IDUsIHcgPSBoZShCKSwgZVt4MiArIDE2ID4+IDJdID0gdywgIXcpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbeDIgPj4gMl0gPSB3LCBnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKG0gPSBvIC0gYSB8IDAsIGEgPSBDIC0gaCB8IDAsIGwgPSBwMiAtIHYgfCAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMgPSBlW2MgKyAzNiA+PiAyXSwgaCA9IGEsIGVbeDIgKyA4ID4+IDJdID0gYSwgbiA9IGwsIGVbeDIgKyAyNCA+PiAyXSA9IG4sIG8gPSBlW3kgKyAxNTYgPj4gMl0sIGEgPSBlW3kgKyAxNjQgPj4gMl0sIGwgPSBlW3kgKyAxNjAgPj4gMl0sIHYgPSBlW3kgKyAxNTIgPj4gMl0sIGVbeDIgKyAyOCA+PiAyXSA9ICh2IHwgMCkgJSAyLCBsID0gbCAtIHYgfCAwLCBlW3gyICsgMjAgPj4gMl0gPSBsIC0gbiwgUCA9IChzIHwgMCkgPCAyLCBhID0gYSAtIG8gfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGw6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKCFQICYgYSA+Pj4gMCA+IDEpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvID0gMCwgIWEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7ICQ0KHgyICsgMTYgfCAwLCBDICsgKFoobywgbSkgPDwgMikgfCAwKSwgbyA9IG8gKyAxIHwgMCwgKG8gfCAwKSAhPSAoYSB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2ID0gYSA+Pj4gMCA8IHMgPj4+IDAgPyBhIDogcywgSCA9IHYgLSAxIHwgMCwgcDIgPSAoYSA+Pj4gMCkgLyAodiA+Pj4gMCkgfCAwLCBuID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG8gPSBVMigzNiksICFvKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh6ID0gZVt4MiArIDIwID4+IDJdLCBlW28gPj4gMl0gPSBlW3gyICsgMTYgPj4gMl0sIGVbbyArIDQgPj4gMl0gPSB6LCB6ID0gZVt4MiArIDI4ID4+IDJdLCBlW28gKyA4ID4+IDJdID0gZVt4MiArIDI0ID4+IDJdLCBlW28gKyAxMiA+PiAyXSA9IHosIGVbbyArIDI4ID4+IDJdID0gWihuLCBwMiksIGVbbyArIDI0ID4+IDJdID0gQywgZVtvICsgMjAgPj4gMl0gPSBtLCBlW28gKyAxNiA+PiAyXSA9IGwsIHogPSAobiB8IDApID09IChIIHwgMCksIG4gPSBuICsgMSB8IDAsIGVbbyArIDMyID4+IDJdID0geiA/IGEgOiBaKHAyLCBuKSwgeiA9IGhlKEIpLCBlW28gPj4gMl0gPSB6LCAheikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSAwLCBsMSh1KSwgUihvKSwgUih3KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiMSh1LCAxMTQsIG8pLCAobiB8IDApID09ICh2IHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsMSh1KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVt4MiArIDQgPj4gMl0gPSBhIC0gaCwgZVt4MiArIDEyID4+IDJdID0gZVt5ICsgMTU2ID4+IDJdICUgMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISghUCAmIGwgPj4+IDAgPiAxKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9IDgsIG8gPSAwLCBsID4+PiAwID49IDgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IG9pKHgyLCBDICsgKG8gPDwgMikgfCAwLCBtLCA4KSwgbyA9IG4sIG4gPSBuICsgOCB8IDAsIGwgPj4+IDAgPj0gbiA+Pj4gMDsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA+Pj4gMCA8PSBvID4+PiAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pKHgyLCBDICsgKG8gPDwgMikgfCAwLCBtLCBsIC0gbyB8IDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChoID0gbCA+Pj4gMCA8IHMgPj4+IDAgPyBsIDogcywgcDIgPSBoIC0gMSB8IDAsIHYgPSAobCA+Pj4gMCkgLyAoaCA+Pj4gMCkgfCAwLCBuID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG8gPSBVMigzNiksICFvKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQID0gZVt4MiArIDQgPj4gMl0sIGVbbyA+PiAyXSA9IGVbeDIgPj4gMl0sIGVbbyArIDQgPj4gMl0gPSBQLCBQID0gZVt4MiArIDEyID4+IDJdLCBlW28gKyA4ID4+IDJdID0gZVt4MiArIDggPj4gMl0sIGVbbyArIDEyID4+IDJdID0gUCwgZVtvICsgMjggPj4gMl0gPSBaKG4sIHYpLCBlW28gKyAyNCA+PiAyXSA9IEMsIGVbbyArIDIwID4+IDJdID0gbSwgZVtvICsgMTYgPj4gMl0gPSBhLCBQID0gKG4gfCAwKSA9PSAocDIgfCAwKSwgbiA9IG4gKyAxIHwgMCwgZVtvICsgMzIgPj4gMl0gPSBQID8gbCA6IFoodiwgbiksIFAgPSBoZShCKSwgZVtvID4+IDJdID0gUCwgIVApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gMCwgbDEodSksIFIobyksIFIodyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYjEodSwgMTE1LCBvKSwgKG4gfCAwKSA9PSAoaCB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbDEodSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5ID0geSArIDE1MiB8IDAsIGcgPSBnIC0gMSB8IDAsICFnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSAxLCBSKHcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSAxLCB3ID0gZVtjICsgMjggPj4gMl0sIHAxID0gdyArIFoocCwgMTUyKSB8IDAsIFFyID0gcDEgLSAxNTIgfCAwLCBlW1FyID4+IDJdID09IGVbcDEgLSAxNDQgPj4gMl0gfHwgKFZyID0gcDEgLSAxNDggfCAwLCBlW1ZyID4+IDJdID09IGVbcDEgLSAxNDAgPj4gMl0pKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZyA9IGVbdyArIDQgPj4gMl0sIGEgPSBlW3cgKyAxMiA+PiAyXSwgaCA9IGVbdyA+PiAyXSwgdSA9IGVbdyArIDggPj4gMl0sIFAgPSBlW2MgKyA2OCA+PiAyXSwgSCA9IGVbYyArIDY0ID4+IDJdLCB6ID0gZVtjICsgNjAgPj4gMl0sIGogPSBlW2MgKyA1NiA+PiAyXSwgYjAgPSBLNChjLCBwKSwgIWIwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGw6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChwIHwgMCkgIT0gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBwIC0gMSB8IDAsIHkgPSBsICYgMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHAgfCAwKSA9PSAyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gPSB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzID0gbCAmIC0yLCBvID0gdywgbCA9IDA7IG0gPSBlW28gKyAxNjAgPj4gMl0gLSBlW28gKyAxNTIgPj4gMl0gfCAwLCBuID0gbiA+Pj4gMCA+IG0gPj4+IDAgPyBuIDogbSwgbSA9IGVbbyArIDE2NCA+PiAyXSAtIGVbbyArIDE1NiA+PiAyXSB8IDAsIG4gPSBuID4+PiAwID4gbSA+Pj4gMCA/IG4gOiBtLCBtID0gZVtvICsgMzEyID4+IDJdIC0gZVtvICsgMzA0ID4+IDJdIHwgMCwgbiA9IG4gPj4+IDAgPiBtID4+PiAwID8gbiA6IG0sIG0gPSBlW28gKyAzMTYgPj4gMl0gLSBlW28gKyAzMDggPj4gMl0gfCAwLCBuID0gbiA+Pj4gMCA+IG0gPj4+IDAgPyBuIDogbSwgbyA9IG8gKyAzMDQgfCAwLCBsID0gbCArIDIgfCAwLCAocyB8IDApICE9IChsIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeSAmJiAobCA9IGVbbyArIDE2MCA+PiAyXSAtIGVbbyArIDE1MiA+PiAyXSB8IDAsIG4gPSBuID4+PiAwID4gbCA+Pj4gMCA/IG4gOiBsLCBsID0gZVtvICsgMTY0ID4+IDJdIC0gZVtvICsgMTU2ID4+IDJdIHwgMCwgbiA9IG4gPj4+IDAgPiBsID4+PiAwID8gbiA6IGwpLCBuID4+PiAwID49IDI2ODQzNTQ1NiB8fCAocyA9IGhlKG4gPDwgNCksICFzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbSA9IGEgLSBnIHwgMCwgRSA9IHUgLSBoIHwgMCwgYTEgPSBzIC0gNCB8IDAsIEdmID0gcyArIDQ0IHwgMCwgV2YgPSBzICsgNDAgfCAwLCBtZiA9IHMgKyAzNiB8IDAsIHoyID0gcyArIDI4IHwgMCwgaTAgPSBzICsgMjQgfCAwLCBMMiA9IHMgKyAyMCB8IDAsIE9lID0gcyAtIDEyIHwgMCwgcSA9IHMgKyAxMiB8IDAsIGMyID0gcyArIDggfCAwLCBfZSA9IHMgLSAxNiB8IDAsIEJlID0gcyAtIDggfCAwLCB5ID0gcyArIDQgfCAwLCBZZSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0OiBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IGVbdyArIDE1NiA+PiAyXSwgYmUgPSAobiB8IDApICUgMiB8IDAsIGwgPSBlW3cgKyAxNTIgPj4gMl0sIGoxID0gKGwgfCAwKSAlIDIgfCAwLCBTMiA9IGVbdyArIDE2NCA+PiAyXSAtIG4gfCAwLCBDMCA9IFMyIC0gbSB8IDAsIGcyID0gZVt3ICsgMTYwID4+IDJdIC0gbCB8IDAsIHQwID0gZzIgLSBFIHwgMCwgbyA9IGosIGwgPSBvLCBhID0geiwgZjIgPSBhLCBuID0gSCwgSDAgPSBuLCBnID0gUCwgQyA9IGcsIGggPSBlW2MgKyAyMCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoaCB8IDApID09IChZZSB8IDApIHx8IChoID0gaCAtIFllIHwgMCwgZjIgPSAwLCBsID0gMCwgbyAmJiAobiA9IGggJiAzMSwgKGggJiA2MykgPj4+IDAgPj0gMzIgPyAodSA9IC0xIDw8IG4sIGEgPSAwKSA6IChhID0gLTEgPDwgbiwgdSA9IGEgfCAoMSA8PCBuKSAtIDEgJiAtMSA+Pj4gMzIgLSBuKSwgbiA9IG8gKyAoYSBeIC0xKSB8IDAsIHUgPSB1IF4gLTEsIHUgPSBuID4+PiAwIDwgaiA+Pj4gMCA/IHUgKyAxIHwgMCA6IHUsIGwgPSBuLCBuID0gaCAmIDMxLCAoaCAmIDYzKSA+Pj4gMCA+PSAzMiA/IGwgPSB1ID4+PiBuIHwgMCA6IGwgPSAoKDEgPDwgbikgLSAxICYgdSkgPDwgMzIgLSBuIHwgbCA+Pj4gbiksIHogJiYgKG4gPSBoICYgMzEsIChoICYgNjMpID4+PiAwID49IDMyID8gKGEgPSAtMSA8PCBuLCB1ID0gMCkgOiAodSA9IC0xIDw8IG4sIGEgPSB1IHwgKDEgPDwgbikgLSAxICYgLTEgPj4+IDMyIC0gbiksIG4gPSB6ICsgKHUgXiAtMSkgfCAwLCBhID0gYSBeIC0xLCBhID0gbiA+Pj4gMCA8IHogPj4+IDAgPyBhICsgMSB8IDAgOiBhLCBnID0gbiwgbiA9IGggJiAzMSwgKGggJiA2MykgPj4+IDAgPj0gMzIgPyBmMiA9IGEgPj4+IG4gfCAwIDogZjIgPSAoKDEgPDwgbikgLSAxICYgYSkgPDwgMzIgLSBuIHwgZyA+Pj4gbiksIGcgPSAwLCBuID0gMCwgSCAmJiAobiA9IGggJiAzMSwgKGggJiA2MykgPj4+IDAgPj0gMzIgPyAodSA9IC0xIDw8IG4sIGEgPSAwKSA6IChhID0gLTEgPDwgbiwgdSA9IGEgfCAoMSA8PCBuKSAtIDEgJiAtMSA+Pj4gMzIgLSBuKSwgbiA9IEggKyAoYSBeIC0xKSB8IDAsIHUgPSB1IF4gLTEsIHUgPSBuID4+PiAwIDwgSCA+Pj4gMCA/IHUgKyAxIHwgMCA6IHUsIG8gPSBuLCBuID0gaCAmIDMxLCAoaCAmIDYzKSA+Pj4gMCA+PSAzMiA/IG4gPSB1ID4+PiBuIHwgMCA6IG4gPSAoKDEgPDwgbikgLSAxICYgdSkgPDwgMzIgLSBuIHwgbyA+Pj4gbiksIFAgJiYgKGcgPSBoICYgMzEsIChoICYgNjMpID4+PiAwID49IDMyID8gKGEgPSAtMSA8PCBnLCB1ID0gMCkgOiAodSA9IC0xIDw8IGcsIGEgPSB1IHwgKDEgPDwgZykgLSAxICYgLTEgPj4+IDMyIC0gZyksIGcgPSBQICsgKHUgXiAtMSkgfCAwLCB1ID0gYSBeIC0xLCB1ID0gZyA+Pj4gMCA8IFAgPj4+IDAgPyB1ICsgMSB8IDAgOiB1LCBvID0gZywgZyA9IGggJiAzMSwgKGggJiA2MykgPj4+IDAgPj0gMzIgPyBnID0gdSA+Pj4gZyB8IDAgOiBnID0gKCgxIDw8IGcpIC0gMSAmIHUpIDw8IDMyIC0gZyB8IG8gPj4+IGcpLCBIMCA9IDAsIG8gPSAwLCBCID0gMSA8PCBoIC0gMSwgQiA+Pj4gMCA8IGogPj4+IDAgJiYgKG8gPSBoICYgMzEsIChoICYgNjMpID4+PiAwID49IDMyID8gKHUgPSAtMSA8PCBvLCBhID0gMCkgOiAoYSA9IC0xIDw8IG8sIHUgPSBhIHwgKDEgPDwgbykgLSAxICYgLTEgPj4+IDMyIC0gbyksIEMgPSBhIF4gLTEsIG8gPSBDICsgKGogLSBCIHwgMCkgfCAwLCBhID0gdSBeIC0xLCBhID0gbyA+Pj4gMCA8IEMgPj4+IDAgPyBhICsgMSB8IDAgOiBhLCB1ID0gbywgbyA9IGggJiAzMSwgKGggJiA2MykgPj4+IDAgPj0gMzIgPyBvID0gYSA+Pj4gbyB8IDAgOiBvID0gKCgxIDw8IG8pIC0gMSAmIGEpIDw8IDMyIC0gbyB8IHUgPj4+IG8pLCBCID4+PiAwIDwgSCA+Pj4gMCAmJiAoYSA9IGggJiAzMSwgKGggJiA2MykgPj4+IDAgPj0gMzIgPyAodSA9IC0xIDw8IGEsIGEgPSAwKSA6ICh1ID0gKDEgPDwgYSkgLSAxICYgLTEgPj4+IDMyIC0gYSwgYSA9IC0xIDw8IGEsIHUgPSB1IHwgYSksIEMgPSBhIF4gLTEsIGEgPSBDICsgKEggLSBCIHwgMCkgfCAwLCB1ID0gdSBeIC0xLCB1ID0gYSA+Pj4gMCA8IEMgPj4+IDAgPyB1ICsgMSB8IDAgOiB1LCBDID0gYSwgYSA9IGggJiAzMSwgKGggJiA2MykgPj4+IDAgPj0gMzIgPyBIMCA9IHUgPj4+IGEgfCAwIDogSDAgPSAoKDEgPDwgYSkgLSAxICYgdSkgPDwgMzIgLSBhIHwgQyA+Pj4gYSksIEMgPSAwLCBhID0gMCwgQiA+Pj4gMCA8IHogPj4+IDAgJiYgKHUgPSBoICYgMzEsIChoICYgNjMpID4+PiAwID49IDMyID8gKGEgPSAtMSA8PCB1LCB1ID0gMCkgOiAoYSA9ICgxIDw8IHUpIC0gMSAmIC0xID4+PiAzMiAtIHUsIHUgPSAtMSA8PCB1LCBhID0gYSB8IHUpLCB2ID0gdSBeIC0xLCB1ID0gdiArICh6IC0gQiB8IDApIHwgMCwgYSA9IGEgXiAtMSwgYSA9IHUgPj4+IDAgPCB2ID4+PiAwID8gYSArIDEgfCAwIDogYSwgdiA9IHUsIHUgPSBoICYgMzEsIChoICYgNjMpID4+PiAwID49IDMyID8gYSA9IGEgPj4+IHUgfCAwIDogYSA9ICgoMSA8PCB1KSAtIDEgJiBhKSA8PCAzMiAtIHUgfCB2ID4+PiB1KSwgQiA+Pj4gMCA+PSBQID4+PiAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQyA9IGggJiAzMSwgdiA9IFAgLSBCIHwgMCwgKGggJiA2MykgPj4+IDAgPj0gMzIgPyAodSA9IC0xIDw8IEMsIEIgPSAwKSA6IChCID0gLTEgPDwgQywgdSA9IEIgfCAoMSA8PCBDKSAtIDEgJiAtMSA+Pj4gMzIgLSBDKSwgQiA9IEIgXiAtMSwgQyA9IHYgKyBCIHwgMCwgdSA9IHUgXiAtMSwgdSA9IEIgPj4+IDAgPiBDID4+PiAwID8gdSArIDEgfCAwIDogdSwgQiA9IEMsIEMgPSBoICYgMzEsIChoICYgNjMpID4+PiAwID49IDMyID8gQyA9IHUgPj4+IEMgfCAwIDogQyA9ICgoMSA8PCBDKSAtIDEgJiB1KSA8PCAzMiAtIEMgfCBCID4+PiBDOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoID0gZVt3ICsgMTgwID4+IDJdLCB1ID0gSDAgLSBoIHwgMCwgdSA9IHUgPj4+IDAgPD0gSDAgPj4+IDAgPyB1IDogMCwgQiA9IHUgKyAyIHwgMCwgdSA9IHUgPj4+IDAgPiBCID4+PiAwID8gLTEgOiBCLCBFMCA9IHUgPj4+IDAgPCB0MCA+Pj4gMCA/IHUgOiB0MCwgdSA9IGVbdyArIDIxNiA+PiAyXSwgQiA9IG4gLSB1IHwgMCwgbiA9IG4gPj4+IDAgPj0gQiA+Pj4gMCA/IEIgOiAwLCBCID0gbiArIDIgfCAwLCBuID0gbiA+Pj4gMCA+IEIgPj4+IDAgPyAtMSA6IEIsIGswID0gbiA+Pj4gMCA8IEUgPj4+IDAgPyBuIDogRSwgbiA9IChqMSA/IEUwIDogazApIDw8IDEsIEIgPSAoajEgPyBrMCA6IEUwKSA8PCAxIHwgMSwgSGUgPSBuID4+PiAwID4gQiA+Pj4gMCA/IG4gOiBCLCBuID0gSGUgPj4+IDAgPCBnMiA+Pj4gMCwgaCA9IG8gLSBoIHwgMCwgbyA9IG8gPj4+IDAgPj0gaCA+Pj4gMCA/IGggOiAwLCBoID0gbyAtIDIgfCAwLCB2ID0gbyA+Pj4gMCA+PSBoID4+PiAwID8gaCA6IDAsIG8gPSBsIC0gdSB8IDAsIGwgPSBsID4+PiAwID49IG8gPj4+IDAgPyBvIDogMCwgbyA9IGwgLSAyIHwgMCwgQiA9IGwgPj4+IDAgPj0gbyA+Pj4gMCA/IG8gOiAwLCBsID0gKGoxID8gdiA6IEIpIDw8IDEsIG8gPSAoajEgPyBCIDogdikgPDwgMSB8IDEsIHggPSBsID4+PiAwIDwgbyA+Pj4gMCwgSiA9IGVbdyArIDE4NCA+PiAyXSwgaCA9IGYyIC0gSiB8IDAsIGggPSBoID4+PiAwIDw9IGYyID4+PiAwID8gaCA6IDAsIHUgPSBoIC0gMiB8IDAsIGggPSB1ID4+PiAwIDw9IGggPj4+IDAgPyB1IDogMCwgTyA9IGgsIGYyID0gZVt3ICsgMjIwID4+IDJdLCB1ID0gYSAtIGYyIHwgMCwgYSA9IGEgPj4+IDAgPj0gdSA+Pj4gMCA/IHUgOiAwLCB1ID0gYSAtIDIgfCAwLCB1ID0gYSA+Pj4gMCA+PSB1ID4+PiAwID8gdSA6IDAsIHAyID0gdSwgYSA9IGcgLSBKIHwgMCwgZyA9IGEgPj4+IDAgPD0gZyA+Pj4gMCA/IGEgOiAwLCBhID0gZyArIDIgfCAwLCBnID0gYSA+Pj4gMCA8IGcgPj4+IDAgPyAtMSA6IGEsIG4yID0gZyA+Pj4gMCA8IG0gPj4+IDAgPyBnIDogbSwgUDIgPSBuMiwgZyA9IEMgLSBmMiB8IDAsIGcgPSBnID4+PiAwIDw9IEMgPj4+IDAgPyBnIDogMCwgYSA9IGcgKyAyIHwgMCwgZyA9IGEgPj4+IDAgPCBnID4+PiAwID8gLTEgOiBhLCBZMiA9IGcgPj4+IDAgPCBDMCA+Pj4gMCA/IGcgOiBDMCwgZjIgPSBZMiwgYmUgJiYgKFAyID0gWTIsIE8gPSB1LCBmMiA9IG4yLCBwMiA9IGgpLCAkZSA9IG4gPyBIZSA6IGcyLCB4ID0geCA/IGwgOiBvLCBZciA9IG0gKyBZMiB8IDAsIEhyID0gdSArIG0gfCAwLCBTMikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNlID0gcyArIChCIDw8IDMpIHwgMCwgbiA9IHQwIDw8IDMsIGgwID0gbiArIGExIHwgMCwgbCA9IChCIHwgMCkgPCAodDAgfCAwKSwgUWkgPSBsID8gY2UgKyA0IHwgMCA6IGgwLCBEMiA9IChFIHwgMCkgPiAoRTAgfCAwKSA/IEUwIDogRSAtIDEgfCAwLCBDID0gMCwgVmkgPSAoRSB8IDApID4gMSB8ICh0MCB8IDApID4gMCwgZyA9IGoxIDw8IDIsIFlpID0gKHkgLSBnIHwgMCkgKyAodiA8PCAzKSB8IDAsIEhpID0gZyArIGNlIHwgMCwgWDIgPSAodDAgfCAwKSA+IChrMCB8IDApID8gazAgOiB0MCwgWjEgPSBCICsgMSB8IDAsIFhpID0gRSArIEUwIHwgMCwgRmkgPSB2ICsgRSB8IDAsIEppID0gcyArICh4IDw8IDIpIHwgMCwgZyA9IEUgPDwgMywgeDAgPSBnICsgQmUgfCAwLCBUMCA9IGcgKyBhMSB8IDAsIGYxID0gbiArIEJlIHwgMCwgUmkgPSAhRSAmICh0MCB8IDApID09IDEsIG4gPSAkZSA8PCAyLCBFaSA9IG4gKyBzIHwgMCwgRGkgPSBuICsgYTEgfCAwLCBVaSA9IGExICsgKChsID8gQiA6IHQwKSA8PCAzKSB8IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKEMgPj4+IDAgPCBuMiA+Pj4gMCAmIGggPj4+IDAgPD0gQyA+Pj4gMCB8IEMgPj4+IDAgPCBZciA+Pj4gMCAmIEMgPj4+IDAgPj0gSHIgPj4+IDApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSiA9IEMgKyAxIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcyID4+PiAwID4gSGUgPj4+IDAgJiYgKGVbRGkgPj4gMl0gPSAwLCBlW0VpID4+IDJdID0gMCksIEogPSBDICsgMSB8IDAsIEcxKGIwLCBCLCBDLCBrMCwgSiwgSGksIDIsIDApLCBHMShiMCwgRmksIEMsIFhpLCBKLCBZaSwgMiwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGc6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghajEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVZpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEIgfCAwKSA+PSAoazAgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEIgfCAwKSA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gZVtVaSA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID0gZVt5ID4+IDJdLCBsID0gbiwgKEIgfCAwKSA8IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBuLCBuID0gZVtRaSA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbY2UgPj4gMl0gPSBlW2NlID4+IDJdIC0gKChuICsgbCB8IDApICsgMiA+PiAyKSwgZyA9IEIsIG4gPSBaMSwgbCA9IG4sIChuIHwgMCkgPj0gKFgyIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBuID0gcyArIChsIDw8IDMpIHwgMCwgZVtuID4+IDJdID0gZVtuID4+IDJdIC0gKChlWyhzICsgKGcgPDwgMykgfCAwKSArIDQgPj4gMl0gKyBlW24gKyA0ID4+IDJdIHwgMCkgKyAyID4+IDIpLCBnID0gbCwgbCA9IGwgKyAxIHwgMCwgKFgyIHwgMCkgIT0gKGwgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBYMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG46IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVJpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9IEIsIChrMCB8IDApIDw9IChuIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IHMgKyAobiA8PCAzKSB8IDAsIG8gPSBsLCBhID0gZVtsICsgNCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobiB8IDApID49IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSDAgPSBlWygobiB8IDApIDwgKHQwIHwgMCkgPyBsIDogZjEpID4+IDJdLCBsID0gbiArIDEgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBCOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEgwID0gZVtzID4+IDJdLCBsID0gMCwgbiA9IG4gKyAxIHwgMCwgZyA9IHMsIG4pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobCB8IDApID49ICh0MCB8IDApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gbCwgZyA9IGYxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IGwsIGcgPSBzICsgKG4gPDwgMykgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW28gKyA0ID4+IDJdID0gYSAtICgoZVtnID4+IDJdICsgSDAgfCAwKSArIDIgPj4gMiksICEoKG4gfCAwKSA8IChrMCB8IDApKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbcyA+PiAyXSA9IGVbcyA+PiAyXSAvIDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9IHYsIChFMCB8IDApIDw9IChuIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZyA9IG4gPDwgMywgbyA9IGcgKyBzIHwgMCwgSDAgPSBlW28gPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChuIHwgMCkgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBlW3kgPj4gMl0sIGwgPSB5OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEgPSBlWygobiB8IDApIDwgKEUgfCAwKSA/IChzICsgKG4gPDwgMykgfCAwKSArIDQgfCAwIDogVDApID4+IDJdLCBsID0geSwgIW4gfHwgKGwgPSBUMCwgKG4gfCAwKSA+IChFIHwgMCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IGcgKyBhMSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW28gPj4gMl0gPSBIMCArIChlW2wgPj4gMl0gKyBhID4+IDEpLCBuID0gbiArIDEgfCAwLCAoRTAgfCAwKSA9PSAobiB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobiB8IDApID49IChrMCB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBzICsgKG4gPDwgMykgfCAwLCBvID0gbCwgYSA9IGVbbCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG46IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobiB8IDApID4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gZVthMSArICgoKG4gfCAwKSA8ICh0MCB8IDApID8gbiA6IHQwKSA8PCAzKSA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnID0gZVt5ID4+IDJdLCBsID0geSwgKG4gfCAwKSA8IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gaDAsIChuIHwgMCkgPj0gKHQwIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSAocyArIChuIDw8IDMpIHwgMCkgKyA0IHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtvID4+IDJdID0gYSAtICgoZVtsID4+IDJdICsgZyB8IDApICsgMiA+PiAyKSwgbiA9IG4gKyAxIHwgMCwgKGswIHwgMCkgPT0gKG4gfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh2IHwgMCkgPj0gKEUwIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gdiwgbiA9IGwsIChEMiB8IDApID4gKG4gfCAwKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGwgPSBzICsgKG4gPDwgMykgfCAwLCBuID0gbiArIDEgfCAwLCBlW2wgKyA0ID4+IDJdID0gZVtsICsgNCA+PiAyXSArIChlW3MgKyAobiA8PCAzKSA+PiAyXSArIGVbbCA+PiAyXSA+PiAxKSwgKG4gfCAwKSAhPSAoRDIgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gRDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobCB8IDApID49IChFMCB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChsIHwgMCkgPj0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyA9IGVbKChsIHwgMCkgPCAoRSB8IDApID8gcyArIChsIDw8IDMpIHwgMCA6IHgwKSA+PiAyXSwgZyA9IGwgKyAxIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvID0gZVtzID4+IDJdLCBnID0gMCwgbCA9IGEgKyAxIHwgMCwgbiA9IHMsIGwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZyB8IDApID49IChFIHwgMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gZywgbiA9IHgwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IGcsIG4gPSBzICsgKGwgPDwgMykgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGcgPSBzICsgKGEgPDwgMykgfCAwLCBlW2cgKyA0ID4+IDJdID0gZVtnICsgNCA+PiAyXSArIChlW24gPj4gMl0gKyBvID4+IDEpLCAhKChsIHwgMCkgPCAoRTAgfCAwKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFlKGIwLCB4LCBDLCAkZSwgSiwgSmksIDEsIDAsIDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQyA9IEosIChTMiB8IDApID09IChDIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh3ID0gdyArIDE1MiB8IDAsIG4gPSBQMiA8PCAxLCBsID0gZjIgPDwgMSB8IDEsIG4gPSBuID4+PiAwID4gbCA+Pj4gMCA/IG4gOiBsLCBIMCA9IG4gPj4+IDAgPCBTMiA+Pj4gMCA/IG4gOiBTMiwgbiA9IGggPDwgNSwgZyA9IG4gfCAxNiwgbyA9IEMwIDw8IDUsIGwgPSAoaCB8IDApIDwgKEMwIHwgMCksIGoxID0gbCA/IGcgKyBxIHwgMCA6IG8gKyBhMSB8IDAsIGNlID0gbCA/IGcgKyBjMiB8IDAgOiBvICsgQmUgfCAwLCBIZSA9IGwgPyBnICsgeSB8IDAgOiBvICsgT2UgfCAwLCBRaSA9IGwgPyBnICsgcyB8IDAgOiBvICsgX2UgfCAwLCBvID0gKG0gfCAwKSA+IChZMiB8IDApID8gWTIgOiBtIC0gMSB8IDAsIEMgPSAoQzAgfCAwKSA+IDAsIFZpID0gQyB8IChtIHwgMCkgPiAxLCBKID0gbiArIHMgfCAwLCBZaSA9IEogKyAoYmUgPDwgNCkgfCAwLCBnID0gbSA8PCAzLCB4MCA9IGcgLSA4IHwgMCwgYSA9ICgobSB8IDApIDw9IDAgPyB4MCA6IDApIDw8IDIsIEhpID0gYSArIHEgfCAwLCBYaSA9IGEgKyBjMiB8IDAsIEZpID0gYSArIHkgfCAwLCBKaSA9IGEgKyBzIHwgMCwgYSA9IEMwIDw8IDMsIFQwID0gYSAtIDggfCAwLCBDID0gKEMgPyAwIDogVDApIDw8IDIsIFJpID0gQyArIHEgfCAwLCBFaSA9IEMgKyBjMiB8IDAsIERpID0gQyArIHkgfCAwLCBVaSA9IHMgKyBDIHwgMCwgeWYgPSAocyArICg0IC0gKGJlIDw8IDIpIDw8IDIpIHwgMCkgKyAodSA8PCA1KSB8IDAsIEMgPSAobjIgfCAwKSA8IChDMCB8IDApID8gbjIgOiBDMCwgdiA9IGggKyAxIHwgMCwgQiA9IE8gPDwgMSwgcDIgPSBwMiA8PCAxIHwgMSwgWHIgPSBCID4+PiAwIDwgcDIgPj4+IDAgPyBCIDogcDIsIHBmID0gcyArIChYciA8PCA0KSB8IDAsIGYxID0gbiArIHEgfCAwLCBEMiA9IG4gKyBjMiB8IDAsIFgyID0gbiArIHkgfCAwLCBuID0gbSA8PCA1LCBRZiA9IG4gKyBxIHwgMCwgaDAgPSBnIC0gMSB8IDAsIFZmID0gbiArIGMyIHwgMCwgWjEgPSBnIC0gMiB8IDAsIFlmID0gbiArIHkgfCAwLCB0MCA9IGcgLSAzIHwgMCwgSGYgPSBuICsgcyB8IDAsIEUwID0gZyAtIDQgfCAwLCBYZiA9IGEgLSA1IHwgMCwgRmYgPSBhIC0gNiB8IDAsIEpmID0gYSAtIDcgfCAwLCBSZiA9ICFtICYgKEMwIHwgMCkgPT0gMSwgbiA9IHgwIDw8IDIsIEVmID0gbiArIHEgfCAwLCBEZiA9IG4gKyBjMiB8IDAsIFVmID0gbiArIHkgfCAwLCBNZiA9IG4gKyBzIHwgMCwgRnIgPSBhIC0gNCB8IDAsIG4gPSBGciA8PCAyLCBTZiA9IG4gKyBxIHwgMCwgTmYgPSBuICsgYzIgfCAwLCBQZiA9IG4gKyB5IHwgMCwgeGYgPSBuICsgcyB8IDAsIG4gPSAobCA/IGggOiBDMCkgPDwgNSwgcDIgPSBuICsgYTEgfCAwLCBFID0gbiArIEJlIHwgMCwgZjIgPSBuICsgT2UgfCAwLCBUZiA9IG4gKyBfZSB8IDAsIG4gPSBUMCA8PCAyLCB6ZiA9IG4gKyBxIHwgMCwgZGYgPSBuICsgYzIgfCAwLCBLZiA9IG4gKyB5IHwgMCwgamYgPSBuICsgcyB8IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEIgPSB4LCBCID4+PiAwIDwgJGUgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPSAkZSAtIEIgfCAwLCB4ID0gQiArIChuID4+PiAwID49IDQgPyA0IDogbikgfCAwLCBHMShiMCwgQiwgaCwgeCwgbjIsIFlpLCAxLCA4KSwgRzEoYjAsIEIsIEhyLCB4LCBZciwgeWYsIDEsIDgpLCAhYmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVZpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGggfCAwKSA+PSAobjIgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChoIHwgMCkgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBlW1RmID4+IDJdLCBhID0gRSwgZyA9IGYyLCBsID0gcDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9IGVbcyArIDE2ID4+IDJdLCAoaCB8IDApIDwgMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBpMCwgZyA9IEwyLCBsID0gejI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbSiA+PiAyXSA9IGVbSiA+PiAyXSAtICgoZVtRaSA+PiAyXSArIG4gfCAwKSArIDIgPj4gMiksIGVbWDIgPj4gMl0gPSBlW1gyID4+IDJdIC0gKChlW2cgPj4gMl0gKyBlW0hlID4+IDJdIHwgMCkgKyAyID4+IDIpLCBlW0QyID4+IDJdID0gZVtEMiA+PiAyXSAtICgoZVthID4+IDJdICsgZVtjZSA+PiAyXSB8IDApICsgMiA+PiAyKSwgbiA9IGVbajEgPj4gMl0sIGwgPSBlW2wgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUmYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW3MgPj4gMl0gPSBlW3MgPj4gMl0gLyAyLCBlW3MgKyA0ID4+IDJdID0gZVtzICsgNCA+PiAyXSAvIDIsIGVbYzIgPj4gMl0gPSBlW2MyID4+IDJdIC8gMiwgZVtxID4+IDJdID0gZVtxID4+IDJdIC8gMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID0gaCwgKG4yIHwgMCkgPiAobiB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZyA9IG4gPDwgMzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG46IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobiB8IDApIDwgMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChuIHwgMCkgPT0gLTEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gcyArIChnIDw8IDIpIHwgMCwgZVtsICsgMTYgPj4gMl0gPSBlW2wgKyAxNiA+PiAyXSAtICgoZVtzID4+IDJdIDw8IDEpICsgMiA+PiAyKSwgZVtsICsgMjAgPj4gMl0gPSBlW2wgKyAyMCA+PiAyXSAtICgoZVtzICsgNCA+PiAyXSA8PCAxKSArIDIgPj4gMiksIGVbbCArIDI0ID4+IDJdID0gZVtsICsgMjQgPj4gMl0gLSAoKGVbYzIgPj4gMl0gPDwgMSkgKyAyID4+IDIpLCBlW2wgKyAyOCA+PiAyXSA9IGVbbCArIDI4ID4+IDJdIC0gKChlW3EgPj4gMl0gPDwgMSkgKyAyID4+IDIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBzICsgKGcgPDwgMikgfCAwLCBhID0gZVtsICsgMTYgPj4gMl0sIE8gPSBuICsgMSB8IDAsIChPIHwgMCkgPj0gKEMwIHwgMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFAyID0gYSwgYSA9IChuIHwgMCkgPCAoQzAgfCAwKSwgZVtsICsgMTYgPj4gMl0gPSBQMiAtICgoZVtzICsgKChhID8gZyA6IFQwKSA8PCAyKSA+PiAyXSArIGVbamYgPj4gMl0gfCAwKSArIDIgPj4gMiksIGVbbCArIDIwID4+IDJdID0gZVtsICsgMjAgPj4gMl0gLSAoKGVbcyArICgoYSA/IGcgfCAxIDogSmYpIDw8IDIpID4+IDJdICsgZVtLZiA+PiAyXSB8IDApICsgMiA+PiAyKSwgZVtsICsgMjQgPj4gMl0gPSBlW2wgKyAyNCA+PiAyXSAtICgoZVtzICsgKChhID8gZyB8IDIgOiBGZikgPDwgMikgPj4gMl0gKyBlW2RmID4+IDJdIHwgMCkgKyAyID4+IDIpLCBlW2wgKyAyOCA+PiAyXSA9IGVbbCArIDI4ID4+IDJdIC0gKChlW3MgKyAoKGEgPyBnIHwgMyA6IFhmKSA8PCAyKSA+PiAyXSArIGVbemYgPj4gMl0gfCAwKSArIDIgPj4gMik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gcyArIChPIDw8IDUpIHwgMCwgZVtsICsgMTYgPj4gMl0gPSBhIC0gKChlW2wgPj4gMl0gKyBlW2cgPj4gMl0gfCAwKSArIDIgPj4gMiksIGVbbCArIDIwID4+IDJdID0gZVtsICsgMjAgPj4gMl0gLSAoKGVbbCArIDQgPj4gMl0gKyBlW2cgKyA0ID4+IDJdIHwgMCkgKyAyID4+IDIpLCBlW2wgKyAyNCA+PiAyXSA9IGVbbCArIDI0ID4+IDJdIC0gKChlW2wgKyA4ID4+IDJdICsgZVtnICsgOCA+PiAyXSB8IDApICsgMiA+PiAyKSwgZVtsICsgMjggPj4gMl0gPSBlW2wgKyAyOCA+PiAyXSAtICgoZVtsICsgMTIgPj4gMl0gKyBlW2cgKyAxMiA+PiAyXSB8IDApICsgMiA+PiAyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbX2UgPj4gMl0gPSBlW19lID4+IDJdIC0gKChlW3MgPj4gMl0gKyBlW1VpID4+IDJdIHwgMCkgKyAyID4+IDIpLCBlW09lID4+IDJdID0gZVtPZSA+PiAyXSAtICgoZVtzICsgNCA+PiAyXSArIGVbRGkgPj4gMl0gfCAwKSArIDIgPj4gMiksIGVbQmUgPj4gMl0gPSBlW0JlID4+IDJdIC0gKChlW2MyID4+IDJdICsgZVtFaSA+PiAyXSB8IDApICsgMiA+PiAyKSwgZVthMSA+PiAyXSA9IGVbYTEgPj4gMl0gLSAoKGVbcSA+PiAyXSArIGVbUmkgPj4gMl0gfCAwKSArIDIgPj4gMik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9IG4gKyAxIHwgMCwgKG4yIHwgMCkgPT0gKG4gfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9IHUsIChZMiB8IDApIDw9IChuIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZyA9IG4gPDwgMzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKG4gfCAwKSA8IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IHMgKyAoZyA8PCAyKSB8IDAsIGVbbCA+PiAyXSA9IGVbbCA+PiAyXSArIChlW3MgKyAxNiA+PiAyXSA8PCAxID4+IDEpLCBlW2wgKyA0ID4+IDJdID0gZVtsICsgNCA+PiAyXSArIChlW3MgKyAyMCA+PiAyXSA8PCAxID4+IDEpLCBlW2wgKyA4ID4+IDJdID0gZVtsICsgOCA+PiAyXSArIChlW3MgKyAyNCA+PiAyXSA8PCAxID4+IDEpLCBlW2wgKyAxMiA+PiAyXSA9IGVbbCArIDEyID4+IDJdICsgKGVbcyArIDI4ID4+IDJdIDw8IDEgPj4gMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gZyA8PCAyLCBsID0gYSArIHMgfCAwLCBPID0gKG4gfCAwKSA+IChtIHwgMCksIFAyID0gKG4gfCAwKSA8IChtIHwgMCksIGVbbCA+PiAyXSA9IGVbbCA+PiAyXSArIChlWyhPID8gSGYgOiBsKSAtIDE2ID4+IDJdICsgZVtzICsgKChQMiA/IGcgfCA0IDogRTApIDw8IDIpID4+IDJdID4+IDEpLCBlW2wgKyA0ID4+IDJdID0gZVtsICsgNCA+PiAyXSArIChlWyhPID8gWWYgOiBhICsgeSB8IDApIC0gMTYgPj4gMl0gKyBlW3MgKyAoKFAyID8gZyB8IDUgOiB0MCkgPDwgMikgPj4gMl0gPj4gMSksIGVbbCArIDggPj4gMl0gPSBlW2wgKyA4ID4+IDJdICsgKGVbKE8gPyBWZiA6IGEgKyBjMiB8IDApIC0gMTYgPj4gMl0gKyBlW3MgKyAoKFAyID8gZyB8IDYgOiBaMSkgPDwgMikgPj4gMl0gPj4gMSksIGVbbCArIDEyID4+IDJdID0gZVtsICsgMTIgPj4gMl0gKyAoZVsoTyA/IFFmIDogYSArIHEgfCAwKSAtIDE2ID4+IDJdICsgZVtzICsgKChQMiA/IGcgfCA3IDogaDApIDw8IDIpID4+IDJdID4+IDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IChuIHwgMCkgPCAobSB8IDApLCBlW3MgPj4gMl0gPSBlW3MgPj4gMl0gKyAoZVtzICsgMTYgPj4gMl0gKyBlW3MgKyAoKGwgPyA0IDogRTApIDw8IDIpID4+IDJdID4+IDEpLCBlW3MgKyA0ID4+IDJdID0gZVtzICsgNCA+PiAyXSArIChlW3MgKyAyMCA+PiAyXSArIGVbcyArICgobCA/IDUgOiB0MCkgPDwgMikgPj4gMl0gPj4gMSksIGVbYzIgPj4gMl0gPSBlW2MyID4+IDJdICsgKGVbcyArIDI0ID4+IDJdICsgZVtzICsgKChsID8gNiA6IFoxKSA8PCAyKSA+PiAyXSA+PiAxKSwgZVtxID4+IDJdID0gZVtxID4+IDJdICsgKGVbcyArIDI4ID4+IDJdICsgZVtzICsgKChsID8gNyA6IGgwKSA8PCAyKSA+PiAyXSA+PiAxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPSBuICsgMSB8IDAsIChZMiB8IDApID09IChuIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEUgPSBnMiwgbSA9IFMyLCBZZSA9IFllICsgMSB8IDAsIChwIHwgMCkgIT0gKFllIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW0ogPj4gMl0gPSBlW0ogPj4gMl0gLSAoKG4gPDwgMSkgKyAyID4+IDIpLCBlW1gyID4+IDJdID0gZVtYMiA+PiAyXSAtICgoZVtMMiA+PiAyXSA8PCAxKSArIDIgPj4gMiksIGVbRDIgPj4gMl0gPSBlW0QyID4+IDJdIC0gKChlW2kwID4+IDJdIDw8IDEpICsgMiA+PiAyKSwgbiA9IGVbejIgPj4gMl0sIGwgPSBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW2YxID4+IDJdID0gZVtmMSA+PiAyXSAtICgobiArIGwgfCAwKSArIDIgPj4gMiksIGcgPSBoLCBsID0gdiwgbiA9IGwsIChDIHwgMCkgPiAobiB8IDApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IG4gPSBzICsgKGwgPDwgNSkgfCAwLCBnID0gZyA8PCA1IHwgMTYsIGVbbiA+PiAyXSA9IGVbbiA+PiAyXSAtICgoZVtnICsgcyA+PiAyXSArIGVbbiArIDE2ID4+IDJdIHwgMCkgKyAyID4+IDIpLCBlW24gKyA0ID4+IDJdID0gZVtuICsgNCA+PiAyXSAtICgoZVtnICsgeSA+PiAyXSArIGVbbiArIDIwID4+IDJdIHwgMCkgKyAyID4+IDIpLCBlW24gKyA4ID4+IDJdID0gZVtuICsgOCA+PiAyXSAtICgoZVtnICsgYzIgPj4gMl0gKyBlW24gKyAyNCA+PiAyXSB8IDApICsgMiA+PiAyKSwgZVtuICsgMTIgPj4gMl0gPSBlW24gKyAxMiA+PiAyXSAtICgoZVtnICsgcSA+PiAyXSArIGVbbiArIDI4ID4+IDJdIHwgMCkgKyAyID4+IDIpLCBnID0gbCwgbCA9IGwgKyAxIHwgMCwgKEMgfCAwKSAhPSAobCB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IEM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChuIHwgMCkgPj0gKG4yIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZyA9IG4gPDwgMywgTyA9IGcgfCA0LCBhID0gKG4gfCAwKSA8IChDMCB8IDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGg6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobiB8IDApIDw9IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFAyID0gZVtzICsgMTYgPj4gMl0sIChuIHwgMCkgPj0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGswID0gZyA8PCAyLCBsID0gazAgKyBzIHwgMCwgWGUgPSBsLCBGZSA9IGVbbCA+PiAyXSwgbCA9IChhID8gTyA6IEZyKSA8PCAyLCBlW1hlID4+IDJdID0gRmUgLSAoKFAyICsgZVtsICsgcyA+PiAyXSB8IDApICsgMiA+PiAyKSwgYSA9IHkgKyBrMCB8IDAsIGVbYSA+PiAyXSA9IGVbYSA+PiAyXSAtICgoZVtzICsgMjAgPj4gMl0gKyBlW2wgKyB5ID4+IDJdIHwgMCkgKyAyID4+IDIpLCBhID0gYzIgKyBrMCB8IDAsIGVbYSA+PiAyXSA9IGVbYSA+PiAyXSAtICgoZVtzICsgMjQgPj4gMl0gKyBlW2wgKyBjMiA+PiAyXSB8IDApICsgMiA+PiAyKSwgbCA9IChlW3MgKyAyOCA+PiAyXSArIGVbbCArIHEgPj4gMl0gfCAwKSArIDIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IGcgPDwgMiwgYSA9IGwgKyBzIHwgMCwgZVthID4+IDJdID0gZVthID4+IDJdIC0gKChQMiA8PCAxKSArIDIgPj4gMiksIGEgPSBsICsgeSB8IDAsIGVbYSA+PiAyXSA9IGVbYSA+PiAyXSAtICgoZVtzICsgMjAgPj4gMl0gPDwgMSkgKyAyID4+IDIpLCBsID0gbCArIGMyIHwgMCwgZVtsID4+IDJdID0gZVtsID4+IDJdIC0gKChlW3MgKyAyNCA+PiAyXSA8PCAxKSArIDIgPj4gMiksIGwgPSAoZVtzICsgMjggPj4gMl0gPDwgMSkgKyAyIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gKChhID8gbiA6IEMwKSA8PCAzKSAtIDQgPDwgMiwgUDIgPSBlW2wgKyBzID4+IDJdLCAhYSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gZyA8PCAyLCBPID0gYSArIHMgfCAwLCBlW08gPj4gMl0gPSBlW08gPj4gMl0gLSAoKFAyICsgZVt4ZiA+PiAyXSB8IDApICsgMiA+PiAyKSwgTyA9IGEgKyB5IHwgMCwgZVtPID4+IDJdID0gZVtPID4+IDJdIC0gKChlW2wgKyB5ID4+IDJdICsgZVtQZiA+PiAyXSB8IDApICsgMiA+PiAyKSwgYSA9IGEgKyBjMiB8IDAsIGVbYSA+PiAyXSA9IGVbYSA+PiAyXSAtICgoZVtsICsgYzIgPj4gMl0gKyBlW05mID4+IDJdIHwgMCkgKyAyID4+IDIpLCBsID0gKGVbbCArIHEgPj4gMl0gKyBlW1NmID4+IDJdIHwgMCkgKyAyIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGswID0gZyA8PCAyLCBhID0gazAgKyBzIHwgMCwgWGUgPSBhLCBGZSA9IGVbYSA+PiAyXSwgYSA9IE8gPDwgMiwgZVtYZSA+PiAyXSA9IEZlIC0gKChQMiArIGVbYSArIHMgPj4gMl0gfCAwKSArIDIgPj4gMiksIE8gPSB5ICsgazAgfCAwLCBlW08gPj4gMl0gPSBlW08gPj4gMl0gLSAoKGVbbCArIHkgPj4gMl0gKyBlW2EgKyB5ID4+IDJdIHwgMCkgKyAyID4+IDIpLCBPID0gYzIgKyBrMCB8IDAsIGVbTyA+PiAyXSA9IGVbTyA+PiAyXSAtICgoZVtsICsgYzIgPj4gMl0gKyBlW2EgKyBjMiA+PiAyXSB8IDApICsgMiA+PiAyKSwgbCA9IChlW2wgKyBxID4+IDJdICsgZVthICsgcSA+PiAyXSB8IDApICsgMiB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnID0gcSArIChnIDw8IDIpIHwgMCwgZVtnID4+IDJdID0gZVtnID4+IDJdIC0gKGwgPj4gMiksIG4gPSBuICsgMSB8IDAsIChuMiB8IDApID09IChuIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh1IHwgMCkgPj0gKFkyIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA9IHUsIG4gPSBhLCAobyB8IDApID4gKG4gfCAwKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgbCA9IGEgPDwgNSwgbiA9IGwgKyBzIHwgMCwgZVtuICsgMTYgPj4gMl0gPSBlW24gKyAxNiA+PiAyXSArIChlW24gKyAzMiA+PiAyXSArIGVbbiA+PiAyXSA+PiAxKSwgZVtuICsgMjAgPj4gMl0gPSBlW24gKyAyMCA+PiAyXSArIChlW2wgKyBtZiA+PiAyXSArIGVbbiArIDQgPj4gMl0gPj4gMSksIGVbbiArIDI0ID4+IDJdID0gZVtuICsgMjQgPj4gMl0gKyAoZVtsICsgV2YgPj4gMl0gKyBlW24gKyA4ID4+IDJdID4+IDEpLCBlW24gKyAyOCA+PiAyXSA9IGVbbiArIDI4ID4+IDJdICsgKGVbbCArIEdmID4+IDJdICsgZVtuICsgMTIgPj4gMl0gPj4gMSksIGEgPSBhICsgMSB8IDAsIChvIHwgMCkgIT0gKGEgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKG4gfCAwKSA+PSAoWTIgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gbiA8PCAzLCBnID0gbCB8IDQsIFAyID0gcSArIChnIDw8IDIpIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobiB8IDApIDwgMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBlW3MgPj4gMl0sIChuIHwgMCkgIT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZyA9IGcgPDwgMiwgYSA9IGcgKyBzIHwgMCwgZVthID4+IDJdID0gbCArIGVbYSA+PiAyXSwgbCA9IGcgKyB5IHwgMCwgZVtsID4+IDJdID0gZVtsID4+IDJdICsgZVt5ID4+IDJdLCBsID0gZyArIGMyIHwgMCwgZVtsID4+IDJdID0gZVtsID4+IDJdICsgZVtjMiA+PiAyXSwgbCA9IGVbcSA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcgPSBnIDw8IDIsIGEgPSBnICsgcyB8IDAsIGVbYSA+PiAyXSA9IGVbYSA+PiAyXSArIChsICsgZVtKaSA+PiAyXSA+PiAxKSwgbCA9IGcgKyB5IHwgMCwgZVtsID4+IDJdID0gZVtsID4+IDJdICsgKGVbRmkgPj4gMl0gKyBlW3kgPj4gMl0gPj4gMSksIGwgPSBnICsgYzIgfCAwLCBlW2wgPj4gMl0gPSBlW2wgPj4gMl0gKyAoZVtYaSA+PiAyXSArIGVbYzIgPj4gMl0gPj4gMSksIGwgPSBlW0hpID4+IDJdICsgZVtxID4+IDJdID4+IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IHMgKyAoKChuIHwgMCkgPCAobSB8IDApID8gbCA6IHgwKSA8PCAyKSB8IDAsIGEgPSBlW2wgPj4gMl0sIGswID0gbiArIDEgfCAwLCAoazAgfCAwKSA+PSAobSB8IDApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gZyA8PCAyLCBPID0gZyArIHMgfCAwLCBlW08gPj4gMl0gPSBlW08gPj4gMl0gKyAoYSArIGVbTWYgPj4gMl0gPj4gMSksIGEgPSBnICsgeSB8IDAsIGVbYSA+PiAyXSA9IGVbYSA+PiAyXSArIChlW1VmID4+IDJdICsgZVtsICsgNCA+PiAyXSA+PiAxKSwgZyA9IGcgKyBjMiB8IDAsIGVbZyA+PiAyXSA9IGVbZyA+PiAyXSArIChlW0RmID4+IDJdICsgZVtsICsgOCA+PiAyXSA+PiAxKSwgbCA9IGVbRWYgPj4gMl0gKyBlW2wgKyAxMiA+PiAyXSA+PiAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTyA9IGcgPDwgMiwgZyA9IE8gKyBzIHwgMCwgWGUgPSBnLCBGZSA9IGVbZyA+PiAyXSwgZyA9IHMgKyAoazAgPDwgNSkgfCAwLCBlW1hlID4+IDJdID0gRmUgKyAoYSArIGVbZyA+PiAyXSA+PiAxKSwgYSA9IHkgKyBPIHwgMCwgZVthID4+IDJdID0gZVthID4+IDJdICsgKGVbZyArIDQgPj4gMl0gKyBlW2wgKyA0ID4+IDJdID4+IDEpLCBhID0gYzIgKyBPIHwgMCwgZVthID4+IDJdID0gZVthID4+IDJdICsgKGVbZyArIDggPj4gMl0gKyBlW2wgKyA4ID4+IDJdID4+IDEpLCBsID0gZVtnICsgMTIgPj4gMl0gKyBlW2wgKyAxMiA+PiAyXSA+PiAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW1AyID4+IDJdID0gbCArIGVbUDIgPj4gMl0sIG4gPSBuICsgMSB8IDAsIChZMiB8IDApID09IChuIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYWUoYjAsIEIsIFhyLCB4LCBIMCwgcGYsIDEsIDQsIDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSKHMpLCBsID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gZVtwMSAtIDE2ID4+IDJdLCBnID0gZVtRciA+PiAyXSwgbyA9IGVbVnIgPj4gMl0sIGEgPSBlW3AxIC0gOCA+PiAyXSwgRzEoYjAsIG4gLSBnIHwgMCwgZVtwMSAtIDEyID4+IDJdIC0gbyB8IDAsIGEgLSBnIHwgMCwgZVtwMSAtIDQgPj4gMl0gLSBvIHwgMCwgZVtjICsgNTIgPj4gMl0sIDEsIGEgLSBuIHwgMCksICQxKGIwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQxKGIwKSwgUihzKSwgbCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkMShiMCksIGwgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IDAsIGwxKHUpLCBSKHcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFggPSB4MiArIDMyIHwgMCwgbCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSAwLCBhID0gMCwgSiA9IFggKyAtNjQgfCAwLCBYID0gSjsKICAgICAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGw6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtEICsgNjQgPj4gMl0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnID0gZVtjICsgMjggPj4gMl0sIG4gPSBnICsgWihlW2MgKyAyNCA+PiAyXSwgMTUyKSB8IDAsIGwgPSBlW24gLSAxNTIgPj4gMl0sIHUgPSBlW24gLSAxNDQgPj4gMl0sIHcgPSBlW2cgKyA0ID4+IDJdLCB5ID0gZVtnICsgMTIgPj4gMl0sIEIgPSBlW2cgPj4gMl0sIHYgPSBlW2cgKyA4ID4+IDJdLCBvID0gMSwgQyA9IGVbRCArIDQ0ID4+IDJdLCB6ID0gZVtDICsgNCA+PiAyXSwgKGggfCAwKSA9PSAxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSCA9IGggLSAxIHwgMCwgbSA9IEggJiAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGggfCAwKSA9PSAyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9IDAsIG4gPSBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChvID0gSCAmIC0yLCBzID0gMCwgbiA9IGc7IGggPSBlW24gKyAxNjAgPj4gMl0gLSBlW24gKyAxNTIgPj4gMl0gfCAwLCBoID0gaCA+Pj4gMCA8IHMgPj4+IDAgPyBzIDogaCwgcyA9IGVbbiArIDE2NCA+PiAyXSAtIGVbbiArIDE1NiA+PiAyXSB8IDAsIGggPSBoID4+PiAwID4gcyA+Pj4gMCA/IGggOiBzLCBzID0gZVtuICsgMzEyID4+IDJdIC0gZVtuICsgMzA0ID4+IDJdIHwgMCwgaCA9IGggPj4+IDAgPiBzID4+PiAwID8gaCA6IHMsIHMgPSBlW24gKyAzMTYgPj4gMl0gLSBlW24gKyAzMDggPj4gMl0gfCAwLCBzID0gaCA+Pj4gMCA+IHMgPj4+IDAgPyBoIDogcywgbiA9IG4gKyAzMDQgfCAwLCBhID0gYSArIDIgfCAwLCAobyB8IDApICE9IChhIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobyA9IDAsIG0gJiYgKGEgPSBlW24gKyAxNjAgPj4gMl0gLSBlW24gKyAxNTIgPj4gMl0gfCAwLCBhID0gYSA+Pj4gMCA8IHMgPj4+IDAgPyBzIDogYSwgbiA9IGVbbiArIDE2NCA+PiAyXSAtIGVbbiArIDE1NiA+PiAyXSB8IDAsIHMgPSBuID4+PiAwIDwgYSA+Pj4gMCA/IGEgOiBuKSwgcyA+Pj4gMCA+IDEzNDIxNzcyNyB8fCAobjIgPSBzIDw8IDUsIG4gPSBQMChuMiksIGVbSiArIDMyID4+IDJdID0gbiwgIW4pKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbSiA+PiAyXSA9IG4sICFIKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gPSAxLCBSKG4pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChtID0geSAtIHcgfCAwLCB5ID0gdiAtIEIgfCAwLCBuID0geiA+Pj4gMSB8IDAsIFkyID0gbiA+Pj4gMCA8PSAyID8gMiA6IG4sIGggPSB1IC0gbCB8IDAsIGcyID0gaCA8PCA1LCBEMiA9IFooaCwgMjgpLCBYMiA9IFooaCwgMjQpLCB6MiA9IFooaCwgMjApLCBpMCA9IGggPDwgNCwgTDIgPSBaKGgsIDEyKSwgTyA9IGggPDwgMywgbyA9IGVbYyArIDM2ID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW0ogKyA4ID4+IDJdID0gbSwgbiA9IHksIGVbSiArIDQwID4+IDJdID0gbiwgcDIgPSBlW2cgKyAxNTYgPj4gMl0sIFAgPSBlW2cgKyAxNjQgPj4gMl0sIGEgPSBlW2cgKyAxNjAgPj4gMl0sIGwgPSBlW2cgKyAxNTIgPj4gMl0sIGVbSiArIDU2ID4+IDJdID0gMCwgZVtKICsgNTIgPj4gMl0gPSBuLCBlW0ogKyA0OCA+PiAyXSA9IDAsIGogPSAobCB8IDApICUgMiB8IDAsIGVbSiArIDQ0ID4+IDJdID0gaiwgeSA9IGEgLSBsIHwgMCwgcyA9IHkgLSBuIHwgMCwgZVtKICsgNjAgPj4gMl0gPSBzLCBlW0ogKyAzNiA+PiAyXSA9IHMsIHggPSAoeiB8IDApIDwgMiwgbSA9IFAgLSBwMiB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgheCAmIG0gPj4+IDAgPiAxNSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3ID0gMCwgbCA9IG8sIG0gPj4+IDAgPCA4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzID0gZVtKICsgMzIgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID0gSiArIDMyIHwgMCwgbnIobiwgbCwgaCwgOCksIEsxKG4pLCBuID0gMCwgeSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBhID0gKG4gPDwgMikgKyBsIHwgMCwgdSA9IHMgKyAobiA8PCA1KSB8IDAsIEdbYSA+PiAyXSA9IEdbdSA+PiAyXSwgR1thICsgKGggPDwgMikgPj4gMl0gPSBHW3UgKyA0ID4+IDJdLCBHW2EgKyBPID4+IDJdID0gR1t1ICsgOCA+PiAyXSwgR1thICsgTDIgPj4gMl0gPSBHW3UgKyAxMiA+PiAyXSwgbiA9IG4gKyAxIHwgMCwgKHkgfCAwKSAhPSAobiB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChuID0gMDsgYSA9IChuIDw8IDIpICsgbCB8IDAsIHUgPSBzICsgKG4gPDwgNSkgfCAwLCBHW2EgKyBpMCA+PiAyXSA9IEdbdSArIDE2ID4+IDJdLCBHW2EgKyB6MiA+PiAyXSA9IEdbdSArIDIwID4+IDJdLCBHW2EgKyBYMiA+PiAyXSA9IEdbdSArIDI0ID4+IDJdLCBHW2EgKyBEMiA+PiAyXSA9IEdbdSArIDI4ID4+IDJdLCBuID0gbiArIDEgfCAwLCAoeSB8IDApICE9IChuIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGwgKyBnMiB8IDAsIG4gPSB3ICsgMTUgfCAwLCB3ID0gdyArIDggfCAwLCAhKG4gPj4+IDAgPCBtID4+PiAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobCA9IG0gPj4+IDMgfCAwLCBCID0gbCA+Pj4gMCA8IHogPj4+IDAgPyBsIDogeiwgdiA9IChtID4+PiAwKSAvIChCID4+PiAwKSAmIC04LCB3ID0gbSAmIC04LCBhID0gMCwgbCA9IG87IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodSA9IFUyKDQ4KSwgIXUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRSA9IFAwKG4yKSwgZVt1ID4+IDJdID0gRSwgIUUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbDEoQyksIFIodSksIG8gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbdSArIDQwID4+IDJdID0gbCwgZVt1ICsgMzYgPj4gMl0gPSBoLCBlW3UgKyAzMiA+PiAyXSA9IHksIGVbdSArIDI4ID4+IDJdID0gcywgZVt1ICsgMjQgPj4gMl0gPSAwLCBlW3UgKyAyMCA+PiAyXSA9IG4sIGVbdSArIDE2ID4+IDJdID0gMCwgZVt1ICsgMTIgPj4gMl0gPSBqLCBlW3UgKyA4ID4+IDJdID0gbiwgZVt1ICsgNCA+PiAyXSA9IHMsIGYyID0gdyAtIFooYSwgdikgfCAwLCBhID0gYSArIDEgfCAwLCBFID0gKEIgfCAwKSA9PSAoYSB8IDApID8gZjIgOiB2LCBlW3UgKyA0NCA+PiAyXSA9IEUsIGIxKEMsIDExOCwgdSksIGwgPSAoWihoLCBFKSA8PCAyKSArIGwgfCAwLCAoYSB8IDApID09IChCIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsMShDKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHcgPj4+IDAgPj0gbSA+Pj4gMCB8fCAoYSA9IEogKyAzMiB8IDAsIG4gPSBtIC0gdyB8IDAsIG5yKGEsIGwsIGgsIG4pLCBLMShhKSwgIXkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKEIgPSBuICYgLTQsIHMgPSBuICYgMywgcCA9IDAsIHYgPSBlW0ogKyAzMiA+PiAyXSwgaiA9IHAyICsgKHcgLSBQIHwgMCkgPj4+IDAgPiA0Mjk0OTY3MjkyOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEgPSAocCA8PCAyKSArIGwgfCAwLCB1ID0gdiArIChwIDw8IDUpIHwgMCwgbiA9IDAsIHcgPSAwLCAhaikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IEdbYSArIChaKG4sIGgpIDw8IDIpID4+IDJdID0gR1t1ICsgKG4gPDwgMikgPj4gMl0sIEUgPSBuIHwgMSwgR1thICsgKFooRSwgaCkgPDwgMikgPj4gMl0gPSBHW3UgKyAoRSA8PCAyKSA+PiAyXSwgRSA9IG4gfCAyLCBHW2EgKyAoWihFLCBoKSA8PCAyKSA+PiAyXSA9IEdbdSArIChFIDw8IDIpID4+IDJdLCBFID0gbiB8IDMsIEdbYSArIChaKEUsIGgpIDw8IDIpID4+IDJdID0gR1t1ICsgKEUgPDwgMikgPj4gMl0sIG4gPSBuICsgNCB8IDAsIHcgPSB3ICsgNCB8IDAsIChCIHwgMCkgIT0gKHcgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3ID0gMCwgcykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IEdbYSArIChaKG4sIGgpIDw8IDIpID4+IDJdID0gR1t1ICsgKG4gPDwgMikgPj4gMl0sIG4gPSBuICsgMSB8IDAsIHcgPSB3ICsgMSB8IDAsIChzIHwgMCkgIT0gKHcgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwID0gcCArIDEgfCAwLCAocCB8IDApID09ICh5IHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gZVtKICsgOCA+PiAyXSwgcyA9IG0gLSB1IHwgMCwgZVtKICsgNCA+PiAyXSA9IHMsIG4gPSBlW2cgKyAxNTYgPj4gMl0sIGVbSiArIDE2ID4+IDJdID0gMCwgZVtKICsgMjAgPj4gMl0gPSB1LCBlW0ogKyAyNCA+PiAyXSA9IDAsIGVbSiArIDI4ID4+IDJdID0gcywgRSA9IChuIHwgMCkgJSAyIHwgMCwgZVtKICsgMTIgPj4gMl0gPSBFOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoIXggJiB5ID4+PiAwID4gMTUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IG8sIHkgPj4+IDAgPCA4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChQMiA9IG0gJiAtMiwgeDAgPSBtICYgMSwgVDAgPSBzICYgLTIsIGYxID0gcyAmIDEsIGgwID0gdSAmIC0yLCBaMSA9IHUgJiAxLCBTMiA9IFAgKyAocDIgXiAtMSkgfCAwLCBqID0gZVtKID4+IDJdLCBuID0gRSA8PCA1LCB4ID0gaiArIG4gfCAwLCBmMiA9IChqIC0gbiB8IDApICsgMzIgfCAwLCBjMiA9IFoodSwgaCkgPDwgMiwgYSA9IHk7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAwLCB3ID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHUgfCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IEIgPSAoWihuLCBoKSA8PCAyKSArIGwgfCAwLCBwID0gZVtCICsgNCA+PiAyXSwgdiA9IHggKyAobiA8PCA2KSB8IDAsIGVbdiA+PiAyXSA9IGVbQiA+PiAyXSwgZVt2ICsgNCA+PiAyXSA9IHAsIHAgPSBlW0IgKyAyOCA+PiAyXSwgZVt2ICsgMjQgPj4gMl0gPSBlW0IgKyAyNCA+PiAyXSwgZVt2ICsgMjggPj4gMl0gPSBwLCBwID0gZVtCICsgMjAgPj4gMl0sIGVbdiArIDE2ID4+IDJdID0gZVtCICsgMTYgPj4gMl0sIGVbdiArIDIwID4+IDJdID0gcCwgcCA9IGVbQiArIDEyID4+IDJdLCBlW3YgKyA4ID4+IDJdID0gZVtCICsgOCA+PiAyXSwgZVt2ICsgMTIgPj4gMl0gPSBwLCBCID0gbiB8IDEsIHYgPSB4ICsgKEIgPDwgNikgfCAwLCBCID0gKFooaCwgQikgPDwgMikgKyBsIHwgMCwgcCA9IGVbQiArIDI4ID4+IDJdLCBlW3YgKyAyNCA+PiAyXSA9IGVbQiArIDI0ID4+IDJdLCBlW3YgKyAyOCA+PiAyXSA9IHAsIHAgPSBlW0IgKyAyMCA+PiAyXSwgZVt2ICsgMTYgPj4gMl0gPSBlW0IgKyAxNiA+PiAyXSwgZVt2ICsgMjAgPj4gMl0gPSBwLCBwID0gZVtCICsgMTIgPj4gMl0sIGVbdiArIDggPj4gMl0gPSBlW0IgKyA4ID4+IDJdLCBlW3YgKyAxMiA+PiAyXSA9IHAsIHAgPSBlW0IgKyA0ID4+IDJdLCBlW3YgPj4gMl0gPSBlW0IgPj4gMl0sIGVbdiArIDQgPj4gMl0gPSBwLCBuID0gbiArIDIgfCAwLCB3ID0gdyArIDIgfCAwLCAoaDAgfCAwKSAhPSAodyB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVoxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ID0geCArIChuIDw8IDYpIHwgMCwgbiA9IChaKG4sIGgpIDw8IDIpICsgbCB8IDAsIEIgPSBlW24gKyA0ID4+IDJdLCBlW3cgPj4gMl0gPSBlW24gPj4gMl0sIGVbdyArIDQgPj4gMl0gPSBCLCBCID0gZVtuICsgMjggPj4gMl0sIGVbdyArIDI0ID4+IDJdID0gZVtuICsgMjQgPj4gMl0sIGVbdyArIDI4ID4+IDJdID0gQiwgQiA9IGVbbiArIDIwID4+IDJdLCBlW3cgKyAxNiA+PiAyXSA9IGVbbiArIDE2ID4+IDJdLCBlW3cgKyAyMCA+PiAyXSA9IEIsIEIgPSBlW24gKyAxMiA+PiAyXSwgZVt3ICsgOCA+PiAyXSA9IGVbbiArIDggPj4gMl0sIGVbdyArIDEyID4+IDJdID0gQjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh1IHwgMCkgPT0gKG0gfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHAgPSBsICsgYzIgfCAwLCBuID0gMCwgdyA9IDAsICh1IHwgMCkgIT0gKFMyIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgQiA9IHAgKyAoWihuLCBoKSA8PCAyKSB8IDAsIHEgPSBlW0IgKyA0ID4+IDJdLCB2ID0gZjIgKyAobiA8PCA2KSB8IDAsIGVbdiA+PiAyXSA9IGVbQiA+PiAyXSwgZVt2ICsgNCA+PiAyXSA9IHEsIHEgPSBlW0IgKyAyOCA+PiAyXSwgZVt2ICsgMjQgPj4gMl0gPSBlW0IgKyAyNCA+PiAyXSwgZVt2ICsgMjggPj4gMl0gPSBxLCBxID0gZVtCICsgMjAgPj4gMl0sIGVbdiArIDE2ID4+IDJdID0gZVtCICsgMTYgPj4gMl0sIGVbdiArIDIwID4+IDJdID0gcSwgcSA9IGVbQiArIDEyID4+IDJdLCBlW3YgKyA4ID4+IDJdID0gZVtCICsgOCA+PiAyXSwgZVt2ICsgMTIgPj4gMl0gPSBxLCBCID0gbiB8IDEsIHYgPSBmMiArIChCIDw8IDYpIHwgMCwgQiA9IHAgKyAoWihoLCBCKSA8PCAyKSB8IDAsIHEgPSBlW0IgKyAyOCA+PiAyXSwgZVt2ICsgMjQgPj4gMl0gPSBlW0IgKyAyNCA+PiAyXSwgZVt2ICsgMjggPj4gMl0gPSBxLCBxID0gZVtCICsgMjAgPj4gMl0sIGVbdiArIDE2ID4+IDJdID0gZVtCICsgMTYgPj4gMl0sIGVbdiArIDIwID4+IDJdID0gcSwgcSA9IGVbQiArIDEyID4+IDJdLCBlW3YgKyA4ID4+IDJdID0gZVtCICsgOCA+PiAyXSwgZVt2ICsgMTIgPj4gMl0gPSBxLCBxID0gZVtCICsgNCA+PiAyXSwgZVt2ID4+IDJdID0gZVtCID4+IDJdLCBlW3YgKyA0ID4+IDJdID0gcSwgbiA9IG4gKyAyIHwgMCwgdyA9IHcgKyAyIHwgMCwgKFQwIHwgMCkgIT0gKHcgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdyA9IGYyICsgKG4gPDwgNikgfCAwLCBuID0gcCArIChaKG4sIGgpIDw8IDIpIHwgMCwgQiA9IGVbbiArIDQgPj4gMl0sIGVbdyA+PiAyXSA9IGVbbiA+PiAyXSwgZVt3ICsgNCA+PiAyXSA9IEIsIEIgPSBlW24gKyAyOCA+PiAyXSwgZVt3ICsgMjQgPj4gMl0gPSBlW24gKyAyNCA+PiAyXSwgZVt3ICsgMjggPj4gMl0gPSBCLCBCID0gZVtuICsgMjAgPj4gMl0sIGVbdyArIDE2ID4+IDJdID0gZVtuICsgMTYgPj4gMl0sIGVbdyArIDIwID4+IDJdID0gQiwgQiA9IGVbbiArIDEyID4+IDJdLCBlW3cgKyA4ID4+IDJdID0gZVtuICsgOCA+PiAyXSwgZVt3ICsgMTIgPj4gMl0gPSBCOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEsxKEopOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9IDAsIHcgPSAwLCBTMikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBCID0gaiArIChuIDw8IDUpIHwgMCwgcCA9IGVbQiArIDQgPj4gMl0sIHYgPSAoWihuLCBoKSA8PCAyKSArIGwgfCAwLCBlW3YgPj4gMl0gPSBlW0IgPj4gMl0sIGVbdiArIDQgPj4gMl0gPSBwLCBwID0gZVtCICsgMjggPj4gMl0sIGVbdiArIDI0ID4+IDJdID0gZVtCICsgMjQgPj4gMl0sIGVbdiArIDI4ID4+IDJdID0gcCwgcCA9IGVbQiArIDIwID4+IDJdLCBlW3YgKyAxNiA+PiAyXSA9IGVbQiArIDE2ID4+IDJdLCBlW3YgKyAyMCA+PiAyXSA9IHAsIHAgPSBlW0IgKyAxMiA+PiAyXSwgZVt2ICsgOCA+PiAyXSA9IGVbQiArIDggPj4gMl0sIGVbdiArIDEyID4+IDJdID0gcCwgQiA9IG4gfCAxLCB2ID0gKFooQiwgaCkgPDwgMikgKyBsIHwgMCwgQiA9IGogKyAoQiA8PCA1KSB8IDAsIHAgPSBlW0IgKyAyOCA+PiAyXSwgZVt2ICsgMjQgPj4gMl0gPSBlW0IgKyAyNCA+PiAyXSwgZVt2ICsgMjggPj4gMl0gPSBwLCBwID0gZVtCICsgMjAgPj4gMl0sIGVbdiArIDE2ID4+IDJdID0gZVtCICsgMTYgPj4gMl0sIGVbdiArIDIwID4+IDJdID0gcCwgcCA9IGVbQiArIDEyID4+IDJdLCBlW3YgKyA4ID4+IDJdID0gZVtCICsgOCA+PiAyXSwgZVt2ICsgMTIgPj4gMl0gPSBwLCBwID0gZVtCICsgNCA+PiAyXSwgZVt2ID4+IDJdID0gZVtCID4+IDJdLCBlW3YgKyA0ID4+IDJdID0gcCwgbiA9IG4gKyAyIHwgMCwgdyA9IHcgKyAyIHwgMCwgKFAyIHwgMCkgIT0gKHcgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF4MCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdyA9IChaKG4sIGgpIDw8IDIpICsgbCB8IDAsIG4gPSBqICsgKG4gPDwgNSkgfCAwLCBCID0gZVtuICsgNCA+PiAyXSwgZVt3ID4+IDJdID0gZVtuID4+IDJdLCBlW3cgKyA0ID4+IDJdID0gQiwgQiA9IGVbbiArIDI4ID4+IDJdLCBlW3cgKyAyNCA+PiAyXSA9IGVbbiArIDI0ID4+IDJdLCBlW3cgKyAyOCA+PiAyXSA9IEIsIEIgPSBlW24gKyAyMCA+PiAyXSwgZVt3ICsgMTYgPj4gMl0gPSBlW24gKyAxNiA+PiAyXSwgZVt3ICsgMjAgPj4gMl0gPSBCLCBCID0gZVtuICsgMTIgPj4gMl0sIGVbdyArIDggPj4gMl0gPSBlW24gKyA4ID4+IDJdLCBlW3cgKyAxMiA+PiAyXSA9IEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBsICsgMzIgfCAwLCBhID0gYSAtIDggfCAwLCAhKGEgPj4+IDAgPiA3KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobiA9IHkgPj4+IDMgfCAwLCB3ID0gbiA+Pj4gMCA8IFkyID4+PiAwID8gbiA6IFkyLCB2ID0gdyA+Pj4gMCA8PSAxID8gMSA6IHcsIEIgPSAoeSA+Pj4gMCkgLyAodyA+Pj4gMCkgJiAtOCwgaiA9IHkgJiAtOCwgYSA9IDAsIGwgPSBvOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPSBVMig0OCksICFuKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHggPSBQMChuMiksIGVbbiA+PiAyXSA9IHgsICF4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwxKEMpLCBSKG4pLCBvID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW24gKyA0MCA+PiAyXSA9IGwsIGVbbiArIDM2ID4+IDJdID0gaCwgZVtuICsgMzIgPj4gMl0gPSBtLCBlW24gKyAyOCA+PiAyXSA9IHMsIGVbbiArIDI0ID4+IDJdID0gMCwgZVtuICsgMjAgPj4gMl0gPSB1LCBlW24gKyAxNiA+PiAyXSA9IDAsIGVbbiArIDEyID4+IDJdID0gRSwgZVtuICsgOCA+PiAyXSA9IHUsIGVbbiArIDQgPj4gMl0gPSBzLCBmMiA9IGogLSBaKGEsIEIpIHwgMCwgYSA9IGEgKyAxIHwgMCwgeCA9ICh3IHwgMCkgPT0gKGEgfCAwKSA/IGYyIDogQiwgZVtuICsgNDQgPj4gMl0gPSB4LCBiMShDLCAxMTksIG4pLCBsID0gKHggPDwgMikgKyBsIHwgMCwgKGEgfCAwKSA9PSAodiB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbDEoQyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiA9IHkgJiA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFCKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFID0gRSA8PCA1LCBhID0gZVtKID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ID0gYSArIEUgfCAwLCBqID0gQiA8PCAyLCBuID0gMCwgKHUgfCAwKSAhPSAxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHggPSB1ICYgLTIsIHcgPSAwOyBGMih2ICsgKG4gPDwgNikgfCAwLCAoWihuLCBoKSA8PCAyKSArIGwgfCAwLCBqKSwgZjIgPSBuIHwgMSwgRjIodiArIChmMiA8PCA2KSB8IDAsIChaKGgsIGYyKSA8PCAyKSArIGwgfCAwLCBqKSwgbiA9IG4gKyAyIHwgMCwgdyA9IHcgKyAyIHwgMCwgKHggfCAwKSAhPSAodyB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEodSAmIDEpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRjIodiArIChuIDw8IDYpIHwgMCwgKFoobiwgaCkgPDwgMikgKyBsIHwgMCwgaik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodSB8IDApID09IChtIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodiA9IChhIC0gRSB8IDApICsgMzIgfCAwLCBqID0gKFoodSwgaCkgPDwgMikgKyBsIHwgMCwgRSA9IEIgPDwgMiwgbiA9IDAsICh1IHwgMCkgIT0gKFAgKyAocDIgXiAtMSkgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1ID0gcyAmIC0yLCB3ID0gMDsgRjIodiArIChuIDw8IDYpIHwgMCwgaiArIChaKG4sIGgpIDw8IDIpIHwgMCwgRSksIHggPSBuIHwgMSwgRjIodiArICh4IDw8IDYpIHwgMCwgaiArIChaKGgsIHgpIDw8IDIpIHwgMCwgRSksIG4gPSBuICsgMiB8IDAsIHcgPSB3ICsgMiB8IDAsICh1IHwgMCkgIT0gKHcgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHMgJiAxKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEYyKHYgKyAobiA8PCA2KSB8IDAsIGogKyAoWihuLCBoKSA8PCAyKSB8IDAsIEUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSzEoSiksICFtKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodSA9IEIgPDwgMiwgbiA9IDAsIChQIHwgMCkgIT0gKHAyICsgMSB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzID0gbSAmIC0yLCB3ID0gMDsgRjIoKFoobiwgaCkgPDwgMikgKyBsIHwgMCwgYSArIChuIDw8IDUpIHwgMCwgdSksIEIgPSBuIHwgMSwgRjIoKFooQiwgaCkgPDwgMikgKyBsIHwgMCwgYSArIChCIDw8IDUpIHwgMCwgdSksIG4gPSBuICsgMiB8IDAsIHcgPSB3ICsgMiB8IDAsIChzIHwgMCkgIT0gKHcgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobSAmIDEpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGMigoWihuLCBoKSA8PCAyKSArIGwgfCAwLCBhICsgKG4gPDwgNSkgfCAwLCB1KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZyA9IGcgKyAxNTIgfCAwLCBIID0gSCAtIDEgfCAwLCAhSCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG8gPSAxLCBnID0gZVtjICsgMjggPj4gMl0sIFkyID0gZyArIFooaCwgMTUyKSB8IDAsIFAyID0gWTIgLSAxNTIgfCAwLCBlW1AyID4+IDJdID09IGVbWTIgLSAxNDQgPj4gMl0gfHwgKHgwID0gWTIgLSAxNDggfCAwLCBlW3gwID4+IDJdID09IGVbWTIgLSAxNDAgPj4gMl0pKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA9IGVbZyArIDQgPj4gMl0sIHUgPSBlW2cgKyAxMiA+PiAyXSwgdyA9IGVbZyA+PiAyXSwgeSA9IGVbZyArIDggPj4gMl0sIEMgPSBlW2MgKyA2OCA+PiAyXSwgQiA9IGVbYyArIDY0ID4+IDJdLCB2ID0gZVtjICsgNjAgPj4gMl0sIHAyID0gZVtjICsgNTYgPj4gMl0sIG4yID0gSzQoYywgaCksICFuMikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGggfCAwKSA9PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gZVtZMiAtIDE2ID4+IDJdLCBsID0gZVtQMiA+PiAyXSwgZyA9IGVbeDAgPj4gMl0sIGEgPSBlW1kyIC0gOCA+PiAyXSwgRzEobjIsIG4gLSBsIHwgMCwgZVtZMiAtIDEyID4+IDJdIC0gZyB8IDAsIGEgLSBsIHwgMCwgZVtZMiAtIDQgPj4gMl0gLSBnIHwgMCwgZVtjICsgNTIgPj4gMl0sIDEsIGEgLSBuIHwgMCksICQxKG4yKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBoIC0gMSB8IDAsIHMgPSBuICYgMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGggfCAwKSA9PSAyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gPSAwLCBuID0gZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobSA9IG4gJiAtMiwgbyA9IDAsIG4gPSBnOyBQID0gZVtuICsgMTYwID4+IDJdIC0gZVtuICsgMTUyID4+IDJdIHwgMCwgbyA9IG8gPj4+IDAgPiBQID4+PiAwID8gbyA6IFAsIFAgPSBlW24gKyAxNjQgPj4gMl0gLSBlW24gKyAxNTYgPj4gMl0gfCAwLCBvID0gbyA+Pj4gMCA+IFAgPj4+IDAgPyBvIDogUCwgUCA9IGVbbiArIDMxMiA+PiAyXSAtIGVbbiArIDMwNCA+PiAyXSB8IDAsIG8gPSBvID4+PiAwID4gUCA+Pj4gMCA/IG8gOiBQLCBQID0gZVtuICsgMzE2ID4+IDJdIC0gZVtuICsgMzA4ID4+IDJdIHwgMCwgbyA9IG8gPj4+IDAgPiBQID4+PiAwID8gbyA6IFAsIG4gPSBuICsgMzA0IHwgMCwgbCA9IGwgKyAyIHwgMCwgKG0gfCAwKSAhPSAobCB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyAmJiAobCA9IGVbbiArIDE2MCA+PiAyXSAtIGVbbiArIDE1MiA+PiAyXSB8IDAsIGwgPSBsID4+PiAwIDwgbyA+Pj4gMCA/IG8gOiBsLCBuID0gZVtuICsgMTY0ID4+IDJdIC0gZVtuICsgMTU2ID4+IDJdIHwgMCwgbyA9IG4gPj4+IDAgPCBsID4+PiAwID8gbCA6IG4pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvID4+PiAwID49IDEzNDIxNzcyOCB8fCAoUzIgPSBQMChvIDw8IDUpLCBlW0ogKyAzMiA+PiAyXSA9IFMyLCAhUzIpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtKID4+IDJdID0gUzI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobSA9IHUgLSBhIHwgMCwgbiA9IHkgLSB3IHwgMCwgVDAgPSBTMiArIDMyIHwgMCwgZjIgPSBoLCB4ID0gZVtjICsgMjAgPj4gMl0sIGogPSAxLCBQID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbSiArIDggPj4gMl0gPSBtLCBlW0ogKyA0MCA+PiAyXSA9IG4sIG8gPSBlW2cgKyAxNjQgPj4gMl0sIGEgPSBlW2cgKyAxNjAgPj4gMl0sIGwgPSBlW2cgKyAxNTYgPj4gMl0sIGggPSBlW2cgKyAxNTIgPj4gMl0sIEQyID0gKGggfCAwKSAlIDIgfCAwLCBlW0ogKyA0NCA+PiAyXSA9IEQyLCBmMSA9IChsIHwgMCkgJSAyIHwgMCwgZVtKICsgMTIgPj4gMl0gPSBmMSwgRSA9IGEgLSBoIHwgMCwgWDIgPSBFIC0gbiB8IDAsIGVbSiArIDM2ID4+IDJdID0gWDIsIHogPSBvIC0gbCB8IDAsIGgwID0geiAtIG0gfCAwLCBlW0ogKyA0ID4+IDJdID0gaDAsIHMgPSBwMiwgbCA9IHMsIGEgPSB2LCB5ID0gYSwgbyA9IEIsIEggPSBvLCB3ID0gQywgcCA9IHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghUCAmIChqIHwgMCkgPT0gKHggfCAwKSB8fCAoaCA9IHggLSBqIHwgMCwgeSA9IDAsIGwgPSAwLCBzICYmIChsID0gaCAmIDMxLCAoaCAmIDYzKSA+Pj4gMCA+PSAzMiA/ICh1ID0gLTEgPDwgbCwgYSA9IDApIDogKGEgPSAtMSA8PCBsLCB1ID0gYSB8ICgxIDw8IGwpIC0gMSAmIC0xID4+PiAzMiAtIGwpLCBsID0gcyArIChhIF4gLTEpIHwgMCwgdSA9IHUgXiAtMSwgdSA9IGwgPj4+IDAgPCBwMiA+Pj4gMCA/IHUgKyAxIHwgMCA6IHUsIG8gPSBsLCBsID0gaCAmIDMxLCAoaCAmIDYzKSA+Pj4gMCA+PSAzMiA/IGwgPSB1ID4+PiBsIHwgMCA6IGwgPSAoKDEgPDwgbCkgLSAxICYgdSkgPDwgMzIgLSBsIHwgbyA+Pj4gbCksIHYgJiYgKG8gPSBoICYgMzEsIChoICYgNjMpID4+PiAwID49IDMyID8gKHUgPSAtMSA8PCBvLCBhID0gMCkgOiAoYSA9IC0xIDw8IG8sIHUgPSBhIHwgKDEgPDwgbykgLSAxICYgLTEgPj4+IDMyIC0gbyksIG8gPSB2ICsgKGEgXiAtMSkgfCAwLCBhID0gdSBeIC0xLCBhID0gbyA+Pj4gMCA8IHYgPj4+IDAgPyBhICsgMSB8IDAgOiBhLCB1ID0gbywgbyA9IGggJiAzMSwgKGggJiA2MykgPj4+IDAgPj0gMzIgPyB5ID0gYSA+Pj4gbyB8IDAgOiB5ID0gKCgxIDw8IG8pIC0gMSAmIGEpIDw8IDMyIC0gbyB8IHUgPj4+IG8pLCB3ID0gMCwgbyA9IDAsIEIgJiYgKG8gPSBoICYgMzEsIChoICYgNjMpID4+PiAwID49IDMyID8gKHUgPSAtMSA8PCBvLCBhID0gMCkgOiAoYSA9IC0xIDw8IG8sIHUgPSBhIHwgKDEgPDwgbykgLSAxICYgLTEgPj4+IDMyIC0gbyksIG8gPSBCICsgKGEgXiAtMSkgfCAwLCB1ID0gdSBeIC0xLCB1ID0gbyA+Pj4gMCA8IEIgPj4+IDAgPyB1ICsgMSB8IDAgOiB1LCBhID0gbywgbyA9IGggJiAzMSwgKGggJiA2MykgPj4+IDAgPj0gMzIgPyBvID0gdSA+Pj4gbyB8IDAgOiBvID0gKCgxIDw8IG8pIC0gMSAmIHUpIDw8IDMyIC0gbyB8IGEgPj4+IG8pLCBDICYmICh1ID0gaCAmIDMxLCAoaCAmIDYzKSA+Pj4gMCA+PSAzMiA/IChhID0gLTEgPDwgdSwgdSA9IDApIDogKGEgPSAoMSA8PCB1KSAtIDEgJiAtMSA+Pj4gMzIgLSB1LCB1ID0gLTEgPDwgdSwgYSA9IGEgfCB1KSwgdyA9IEMgKyAodSBeIC0xKSB8IDAsIHUgPSBhIF4gLTEsIHUgPSB3ID4+PiAwIDwgQyA+Pj4gMCA/IHUgKyAxIHwgMCA6IHUsIGEgPSBoICYgMzEsIChoICYgNjMpID4+PiAwID49IDMyID8gdyA9IHUgPj4+IGEgfCAwIDogdyA9ICgoMSA8PCBhKSAtIDEgJiB1KSA8PCAzMiAtIGEgfCB3ID4+PiBhKSwgSCA9IDAsIHMgPSAwLCBnMiA9IDEgPDwgaCAtIDEsIGcyID4+PiAwIDwgcDIgPj4+IDAgJiYgKGEgPSBoICYgMzEsIChoICYgNjMpID4+PiAwID49IDMyID8gKHUgPSAtMSA8PCBhLCBhID0gMCkgOiAodSA9ICgxIDw8IGEpIC0gMSAmIC0xID4+PiAzMiAtIGEsIGEgPSAtMSA8PCBhLCB1ID0gdSB8IGEpLCBzID0gYSBeIC0xLCBhID0gcyArIChwMiAtIGcyIHwgMCkgfCAwLCB1ID0gdSBeIC0xLCB1ID0gYSA+Pj4gMCA8IHMgPj4+IDAgPyB1ICsgMSB8IDAgOiB1LCBzID0gYSwgYSA9IGggJiAzMSwgKGggJiA2MykgPj4+IDAgPj0gMzIgPyBzID0gdSA+Pj4gYSB8IDAgOiBzID0gKCgxIDw8IGEpIC0gMSAmIHUpIDw8IDMyIC0gYSB8IHMgPj4+IGEpLCBCID4+PiAwID4gZzIgPj4+IDAgJiYgKGEgPSBoICYgMzEsIChoICYgNjMpID4+PiAwID49IDMyID8gKHUgPSAtMSA8PCBhLCBhID0gMCkgOiAodSA9ICgxIDw8IGEpIC0gMSAmIC0xID4+PiAzMiAtIGEsIGEgPSAtMSA8PCBhLCB1ID0gdSB8IGEpLCBIID0gYSBeIC0xLCBhID0gSCArIChCIC0gZzIgfCAwKSB8IDAsIHUgPSB1IF4gLTEsIHUgPSBhID4+PiAwIDwgSCA+Pj4gMCA/IHUgKyAxIHwgMCA6IHUsIEggPSBhLCBhID0gaCAmIDMxLCAoaCAmIDYzKSA+Pj4gMCA+PSAzMiA/IEggPSB1ID4+PiBhIHwgMCA6IEggPSAoKDEgPDwgYSkgLSAxICYgdSkgPDwgMzIgLSBhIHwgSCA+Pj4gYSksIHAgPSAwLCBhID0gMCwgdiA+Pj4gMCA+IGcyID4+PiAwICYmIChhID0gaCAmIDMxLCAoaCAmIDYzKSA+Pj4gMCA+PSAzMiA/ICh1ID0gLTEgPDwgYSwgYSA9IDApIDogKHUgPSAoMSA8PCBhKSAtIDEgJiAtMSA+Pj4gMzIgLSBhLCBhID0gLTEgPDwgYSwgdSA9IHUgfCBhKSwgaTAgPSBhIF4gLTEsIHoyID0gaTAgKyAodiAtIGcyIHwgMCkgfCAwLCBhID0gdSBeIC0xLCBhID0gejIgPj4+IDAgPCBpMCA+Pj4gMCA/IGEgKyAxIHwgMCA6IGEsIHUgPSBoICYgMzEsIChoICYgNjMpID4+PiAwID49IDMyID8gYSA9IGEgPj4+IHUgfCAwIDogYSA9ICgoMSA8PCB1KSAtIDEgJiBhKSA8PCAzMiAtIHUgfCB6MiA+Pj4gdSksIEMgPj4+IDAgPD0gZzIgPj4+IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSBoICYgMzEsIGkwID0gQyAtIGcyIHwgMCwgKGggJiA2MykgPj4+IDAgPj0gMzIgPyAodSA9IC0xIDw8IHAsIHAgPSAwKSA6ICh1ID0gKDEgPDwgcCkgLSAxICYgLTEgPj4+IDMyIC0gcCwgcCA9IC0xIDw8IHAsIHUgPSB1IHwgcCksIGcyID0gcCBeIC0xLCBwID0gaTAgKyBnMiB8IDAsIHUgPSB1IF4gLTEsIHUgPSBwID4+PiAwIDwgZzIgPj4+IDAgPyB1ICsgMSB8IDAgOiB1LCBnMiA9IHAsIHAgPSBoICYgMzEsIChoICYgNjMpID4+PiAwID49IDMyID8gcCA9IHUgPj4+IHAgfCAwIDogcCA9ICgoMSA8PCBwKSAtIDEgJiB1KSA8PCAzMiAtIHAgfCBnMiA+Pj4gcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSBlW2cgKyAxODAgPj4gMl0sIHUgPSBIIC0gaCB8IDAsIHUgPSB1ID4+PiAwIDw9IEggPj4+IDAgPyB1IDogMCwgSCA9IHUgKyA0IHwgMCwgdSA9IHUgPj4+IDAgPiBIID4+PiAwID8gLTEgOiBILCBMMiA9IHUgPj4+IDAgPCBYMiA+Pj4gMCA/IHUgOiBYMiwgdSA9IGVbZyArIDIxNiA+PiAyXSwgSCA9IG8gLSB1IHwgMCwgbyA9IG8gPj4+IDAgPj0gSCA+Pj4gMCA/IEggOiAwLCBIID0gbyArIDQgfCAwLCBvID0gbyA+Pj4gMCA+IEggPj4+IDAgPyAtMSA6IEgsIE8gPSBuID4+PiAwID4gbyA+Pj4gMCA/IG8gOiBuLCBvID0gKEQyID8gTDIgOiBPKSA8PCAxLCBIID0gKEQyID8gTyA6IEwyKSA8PCAxIHwgMSwgZzIgPSBvID4+PiAwID4gSCA+Pj4gMCA/IG8gOiBILCBaMSA9IGcyID4+PiAwIDwgRSA+Pj4gMCwgbyA9IHMgLSBoIHwgMCwgbyA9IG8gPj4+IDAgPD0gcyA+Pj4gMCA/IG8gOiAwLCBoID0gbyAtIDQgfCAwLCBYMiA9IG8gPj4+IDAgPj0gaCA+Pj4gMCA/IGggOiAwLCBvID0gbCAtIHUgfCAwLCBsID0gbCA+Pj4gMCA+PSBvID4+PiAwID8gbyA6IDAsIG8gPSBsIC0gNCB8IDAsIHoyID0gbCA+Pj4gMCA+PSBvID4+PiAwID8gbyA6IDAsIGMyID0gKEQyID8gWDIgOiB6MikgPDwgMSwgcSA9IChEMiA/IHoyIDogWDIpIDw8IDEgfCAxLCB4MiA9IGMyID4+PiAwIDwgcSA+Pj4gMCwgbCA9IGVbZyArIDE4NCA+PiAyXSwgbyA9IHkgLSBsIHwgMCwgbyA9IG8gPj4+IDAgPD0geSA+Pj4gMCA/IG8gOiAwLCBoID0gbyAtIDQgfCAwLCBoID0gbyA+Pj4gMCA+PSBoID4+PiAwID8gaCA6IDAsIG8gPSBoLCB1ID0gZVtnICsgMjIwID4+IDJdLCB5ID0gYSAtIHUgfCAwLCBhID0gYSA+Pj4gMCA+PSB5ID4+PiAwID8geSA6IDAsIHkgPSBhIC0gNCB8IDAsIEggPSBhID4+PiAwID49IHkgPj4+IDAgPyB5IDogMCwgYSA9IEgsIGwgPSB3IC0gbCB8IDAsIGwgPSBsID4+PiAwIDw9IHcgPj4+IDAgPyBsIDogMCwgdyA9IGwgKyA0IHwgMCwgbCA9IGwgPj4+IDAgPiB3ID4+PiAwID8gLTEgOiB3LCBpMCA9IGwgPj4+IDAgPCBtID4+PiAwID8gbCA6IG0sIGwgPSBpMCwgdSA9IHAgLSB1IHwgMCwgdSA9IHUgPj4+IDAgPD0gcCA+Pj4gMCA/IHUgOiAwLCB3ID0gdSArIDQgfCAwLCB1ID0gdSA+Pj4gMCA+IHcgPj4+IDAgPyAtMSA6IHcsIHUgPSB1ID4+PiAwIDwgaDAgPj4+IDAgPyB1IDogaDAsIHMgPSB1LCBmMSAmJiAobyA9IGEsIGEgPSBoLCBzID0gbCwgbCA9IHUpLCBnMiA9IFoxID8gZzIgOiBFLCBwID0geDIgPyBjMiA6IHEsIGVbSiArIDYwID4+IDJdID0gTDIsIGVbSiArIDU2ID4+IDJdID0gWDIsIGVbSiArIDUyID4+IDJdID0gTywgZVtKICsgNDggPj4gMl0gPSB6MjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQ6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHogPj4+IDAgPCA4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IDcsIHkgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh3ID0gRDIgPDwgNSwgaDAgPSAoVDAgLSB3IHwgMCkgKyAoWDIgPDwgNikgfCAwLCBaMSA9ICh3ICsgUzIgfCAwKSArICh6MiA8PCA2KSB8IDAsIEwyID0gbiArIEwyIHwgMCwgWDIgPSBuICsgWDIgfCAwLCBjMiA9IHUgKyBtIHwgMCwgcSA9IG0gKyBIIHwgMCwgeDIgPSBTMiArIChwIDw8IDUpIHwgMCwgeSA9IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IHkgfCA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHkgPj4+IDAgPCBpMCA+Pj4gMCAmIG4gPj4+IDAgPj0gaCA+Pj4gMCB8IHkgPj4+IDAgPCBjMiA+Pj4gMCAmIG4gPj4+IDAgPj0gcSA+Pj4gMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IHkgKyA4IHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobiA9IHogLSB5IHwgMCwgQzAgPSBuID4+PiAwID49IDggPyA4IDogbiwgbiA9IDA7IHcgPSBuICsgeSB8IDAsIEQyID0gdyArIDEgfCAwLCB0MCA9IG4gPDwgMiwgRzEobjIsIHoyLCB3LCBPLCBEMiwgdDAgKyBaMSB8IDAsIDE2LCAwKSwgRzEobjIsIFgyLCB3LCBMMiwgRDIsIHQwICsgaDAgfCAwLCAxNiwgMCksIG4gPSBuICsgMSB8IDAsIChDMCB8IDApICE9IChuIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEsxKEogKyAzMiB8IDApLCBuID0geSwgeSA9IHkgKyA4IHwgMCwgIWFlKG4yLCBwLCBuLCBnMiwgeSwgeDIsIDgsIDEsIDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9IHkgfCA3LCAhKHogPj4+IDAgPiBuID4+PiAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISghKHkgPj4+IDAgPCBpMCA+Pj4gMCAmIG4gPj4+IDAgPj0gaCA+Pj4gMCkgJiAodSArIG0gPj4+IDAgPD0geSA+Pj4gMCB8IG0gKyBIID4+PiAwID4gbiA+Pj4gMCkgfCB5ID4+PiAwID49IHogPj4+IDApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID0gSiArIDMyIHwgMCwgdyA9IDAsIHoyID0geiAtIHkgfCAwLCB6MikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgRDIgPSB3ICsgeSB8IDAsIFgyID0gRDIgKyAxIHwgMCwgTDIgPSBlW24gKyAxNiA+PiAyXSwgTyA9IEwyLCBIMCA9IChlW24gPj4gMl0gKyAoZVtuICsgMTIgPj4gMl0gPDwgNSkgfCAwKSArIChMMiA8PCA2KSB8IDAsIEwyID0gdyA8PCAyLCBHMShuMiwgTywgRDIsIGVbbiArIDIwID4+IDJdLCBYMiwgSDAgKyBMMiB8IDAsIDE2LCAwKSwgTyA9IGVbbiArIDI0ID4+IDJdLCBoMCA9IGVbbiArIDggPj4gMl0sIEcxKG4yLCBPICsgaDAgfCAwLCBEMiwgaDAgKyBlW24gKyAyOCA+PiAyXSB8IDAsIFgyLCAoTDIgKyAoKGVbbiA+PiAyXSAtIChlW24gKyAxMiA+PiAyXSA8PCA1KSB8IDApICsgKE8gPDwgNikgfCAwKSB8IDApICsgMzIgfCAwLCAxNiwgMCksIHcgPSB3ICsgMSB8IDAsICh6MiB8IDApICE9ICh3IHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEsxKG4pLCAhYWUobjIsIHAsIHksIGcyLCB6LCBTMiArIChwIDw8IDUpIHwgMCwgOCwgMSwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW0ogKyAyOCA+PiAyXSA9IHUsIGVbSiArIDI0ID4+IDJdID0gSCwgZVtKICsgMjAgPj4gMl0gPSBpMCwgZVtKICsgMTYgPj4gMl0gPSBoLCBwID4+PiAwIDwgZzIgPj4+IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobiA9IGwgPDwgMSwgbCA9IHMgPDwgMSB8IDEsIG4gPSBuID4+PiAwID4gbCA+Pj4gMCA/IG4gOiBsLCBsID0gbiA+Pj4gMCA8IHogPj4+IDAgPyBuIDogeiwgbiA9IGYxIDw8IDUsIHcgPSAoVDAgLSBuIHwgMCkgKyAoSCA8PCA2KSB8IDAsIHkgPSAobiArIFMyIHwgMCkgKyAoaCA8PCA2KSB8IDAsIHUgPSB1ICsgbSB8IDAsIHMgPSBtICsgSCB8IDAsIG4gPSBvIDw8IDEsIG8gPSBhIDw8IDEgfCAxLCBvID0gbiA+Pj4gMCA8IG8gPj4+IDAgPyBuIDogbywgYSA9IFMyICsgKG8gPDwgNSkgfCAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID0gZzIgLSBwIHwgMCwgbiA9IChuID4+PiAwID49IDggPyA4IDogbikgKyBwIHwgMCwgRzEobjIsIHAsIGgsIG4sIGkwLCB5LCAxLCAxNiksIEcxKG4yLCBwLCBzLCBuLCB1LCB3LCAxLCAxNiksIEsxKEopLCAhYWUobjIsIHAsIG8sIG4sIGwsIGEsIDEsIDgsIDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocCA9IHAgKyA4IHwgMCwgIShnMiA+Pj4gMCA+IHAgPj4+IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnID0gZyArIDE1MiB8IDAsIG4gPSBFLCBtID0geiwgdSA9IFAsIGogPSBqICsgMSB8IDAsIHUgPSBqID8gdSA6IHUgKyAxIHwgMCwgUCA9IHUsICEoKGogfCAwKSAhPSAoZjIgfCAwKSB8IHUpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gPSAxLCBuID0gZVtZMiAtIDE2ID4+IDJdLCBsID0gZVtQMiA+PiAyXSwgZyA9IGVbeDAgPj4gMl0sIGEgPSBlW1kyIC0gOCA+PiAyXSwgRzEobjIsIG4gLSBsIHwgMCwgZVtZMiAtIDEyID4+IDJdIC0gZyB8IDAsIGEgLSBsIHwgMCwgZVtZMiAtIDQgPj4gMl0gLSBnIHwgMCwgZVtjICsgNTIgPj4gMl0sIDEsIGEgLSBuIHwgMCksICQxKG4yKSwgUihTMik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkMShuMiksIFIoUzIpLCBvID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQxKG4yKSwgbyA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsMShDKSwgbyA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSKGVbSiArIDMyID4+IDJdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFggPSBKIC0gLTY0IHwgMCwgbykKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAobTIgPSBtMiArIDEwODAgfCAwLCBpID0gaSArIDUyIHwgMCwgYyA9IGMgKyA3NiB8IDAsIHcyID0gdzIgKyAxIHwgMCwgISh3MiA+Pj4gMCA8IGRbcjAgKyAxNiA+PiAyXSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICByMCA9IGVbZVtEICsgMjAgPj4gMl0gPj4gMl0sIG0yID0gZVtEICsgMzIgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGggPSBlW20yICsgMTYgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgazogewogICAgICAgICAgICAgICAgICAgICAgaWYgKGVbRCArIDY4ID4+IDJdIHwgIWgpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICBpID0gZVtyMCArIDIwID4+IDJdLCBsID0gZVtpICsgMjggPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIEE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZyA9IGVbRCArIDY0ID4+IDJdLCBnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodzIgPSBlW3IwICsgMTYgPj4gMl0sIHcyID4+PiAwIDwgMykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID0gZVtpICsgMjQgPj4gMl0sICEoKG4gfCAwKSA9PSBlW2kgKyAxMDAgPj4gMl0gJiAobiB8IDApID09IGVbaSArIDE3NiA+PiAyXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUSh0LCAxLCAyMDU5OCwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvID0gZVtlW0QgKyAyNCA+PiAyXSArIDI0ID4+IDJdLCBhID0gZVtvICsgMzYgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYSB8IDApICE9IGVbbyArIDg4ID4+IDJdIHwgKGEgfCAwKSAhPSBlW28gKyAxNDAgPj4gMl0gfHwgKG8gPSBaKG4sIDE1MiksIG4gPSBvICsgbCB8IDAsIG4gPSBaKGVbbiAtIDE0MCA+PiAyXSAtIGVbbiAtIDE0OCA+PiAyXSB8IDAsIGVbbiAtIDE0NCA+PiAyXSAtIGVbbiAtIDE1MiA+PiAyXSB8IDApLCBsID0gbyArIGVbaSArIDEwNCA+PiAyXSB8IDAsIChuIHwgMCkgIT0gKFooZVtsIC0gMTQwID4+IDJdIC0gZVtsIC0gMTQ4ID4+IDJdIHwgMCwgZVtsIC0gMTQ0ID4+IDJdIC0gZVtsIC0gMTUyID4+IDJdIHwgMCkgfCAwKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBvICsgZVtpICsgMTgwID4+IDJdIHwgMCwgKFooZVtsIC0gMTQwID4+IDJdIC0gZVtsIC0gMTQ4ID4+IDJdIHwgMCwgZVtsIC0gMTQ0ID4+IDJdIC0gZVtsIC0gMTUyID4+IDJdIHwgMCkgfCAwKSA9PSAobiB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBRKHQsIDEsIDIwNTk4LCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3MiA9IGVbcjAgKyAxNiA+PiAyXSwgdzIgPj4+IDAgPCAzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICBvID0gZVtlW0QgKyAyNCA+PiAyXSArIDI0ID4+IDJdLCBuID0gZVtvICsgMzYgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgbDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChuIHwgMCkgIT0gZVtvICsgODggPj4gMl0gfHwgKG8gPSBlW28gKyAxNDAgPj4gMl0sIChvIHwgMCkgIT0gKG4gfCAwKSkgfHwgKGEgPSBsLCBsID0gWihuLCAxNTIpLCBuID0gYSArIGwgfCAwLCBuID0gWihlW24gKyAxNDggPj4gMl0gLSBlW24gKyAxNDAgPj4gMl0gfCAwLCBlW24gKyAxNDQgPj4gMl0gLSBlW24gKyAxMzYgPj4gMl0gfCAwKSwgbCA9IGwgKyBlW2kgKyAxMDQgPj4gMl0gfCAwLCAobiB8IDApICE9IChaKGVbbCArIDE0OCA+PiAyXSAtIGVbbCArIDE0MCA+PiAyXSB8IDAsIGVbbCArIDE0NCA+PiAyXSAtIGVbbCArIDEzNiA+PiAyXSB8IDApIHwgMCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBlW2kgKyAxODAgPj4gMl0gKyBaKG8sIDE1MikgfCAwLCAoWihlW2wgKyAxNDggPj4gMl0gLSBlW2wgKyAxNDAgPj4gMl0gfCAwLCBlW2wgKyAxNDQgPj4gMl0gLSBlW2wgKyAxMzYgPj4gMl0gfCAwKSB8IDApID09IChuIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIFEodCwgMSwgMjA1OTgsIDApOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChoIHwgMCkgPT0gMikgewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZVttMiArIDU2MDggPj4gMl0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoID0gVTIodzIgPDwgMiksICFoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgICBvID0gZVtyMCArIDE2ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgIEE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGw6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW0QgKyA2NCA+PiAyXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHUgPSBvICYgMywgZyA9IDAsIG8gPj4+IDAgPj0gNCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IG8gJiAzLCBnID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobyA+Pj4gMCA8IDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHcgPSBvICYgLTQsIGMgPSAwLCBhID0gMDsgbCA9IGggKyAoYyA8PCAyKSB8IDAsIGVbbCA+PiAyXSA9IGVbaSArIDUyID4+IDJdLCBlW2wgKyA0ID4+IDJdID0gZVtpICsgMTI4ID4+IDJdLCBlW2wgKyA4ID4+IDJdID0gZVtpICsgMjA0ID4+IDJdLCBlW2wgKyAxMiA+PiAyXSA9IGVbaSArIDI4MCA+PiAyXSwgYyA9IGMgKyA0IHwgMCwgaSA9IGkgKyAzMDQgfCAwLCBhID0gYSArIDQgfCAwLCAodyB8IDApICE9IChhIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBlW2ggKyAoYyA8PCAyKSA+PiAyXSA9IGVbaSArIDUyID4+IDJdLCBjID0gYyArIDEgfCAwLCBpID0gaSArIDc2IHwgMCwgZyA9IGcgKyAxIHwgMCwgKHUgfCAwKSAhPSAoZyB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHcgPSBvICYgLTQsIGMgPSAwLCBhID0gMDsgbCA9IGggKyAoYyA8PCAyKSB8IDAsIGVbbCA+PiAyXSA9IGVbaSArIDM2ID4+IDJdLCBlW2wgKyA0ID4+IDJdID0gZVtpICsgMTEyID4+IDJdLCBlW2wgKyA4ID4+IDJdID0gZVtpICsgMTg4ID4+IDJdLCBlW2wgKyAxMiA+PiAyXSA9IGVbaSArIDI2NCA+PiAyXSwgYyA9IGMgKyA0IHwgMCwgaSA9IGkgKyAzMDQgfCAwLCBhID0gYSArIDQgfCAwLCAodyB8IDApICE9IChhIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgZVtoICsgKGMgPDwgMikgPj4gMl0gPSBlW2kgKyAzNiA+PiAyXSwgYyA9IGMgKyAxIHwgMCwgaSA9IGkgKyA3NiB8IDAsIGcgPSBnICsgMSB8IDAsICh1IHwgMCkgIT0gKGcgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBlW20yICsgNTYwOCA+PiAyXSwgdSA9IDAsIGcgPSBVMihvIDw8IDMpLCBpID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICBBOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISghbiB8ICFvKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChwMiA9IGcgKyAobyA8PCAyKSB8IDAsIEIgPSBvICYgLTQsIHMgPSBvICYgMywgdiA9IG8gLSAxIHwgMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IDAsIHkgPSAwLCB2ID4+PiAwID49IDMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgYSA9IGkgPDwgMiwgR1thICsgZyA+PiAyXSA9IEdbZVthICsgaCA+PiAyXSA+PiAyXSwgdyA9IGEgfCA0LCBHW3cgKyBnID4+IDJdID0gR1tlW2ggKyB3ID4+IDJdID4+IDJdLCB3ID0gYSB8IDgsIEdbdyArIGcgPj4gMl0gPSBHW2VbaCArIHcgPj4gMl0gPj4gMl0sIGEgPSBhIHwgMTIsIEdbYSArIGcgPj4gMl0gPSBHW2VbYSArIGggPj4gMl0gPj4gMl0sIGkgPSBpICsgNCB8IDAsIHkgPSB5ICsgNCB8IDAsIChCIHwgMCkgIT0gKHkgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPSAwLCBzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGEgPSBpIDw8IDIsIEdbYSArIGcgPj4gMl0gPSBHW2VbYSArIGggPj4gMl0gPj4gMl0sIGkgPSBpICsgMSB8IDAsIGMgPSBjICsgMSB8IDAsIChzIHwgMCkgIT0gKGMgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh3ID0gMCwgaSA9IGw7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUCA9IHcgPDwgMiwgYSA9IFAgKyBwMiB8IDAsIGVbYSA+PiAyXSA9IDAsIGUwID0gVygwKSwgYyA9IDAsIEMgPSAwLCB2ID4+PiAwID4gMikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IHkgPSBnICsgKGMgPDwgMikgfCAwLCBlMCA9IFcoVyhHW2kgPj4gMl0gKiBHW3kgPj4gMl0pICsgZTApLCBHW2EgPj4gMl0gPSBlMCwgZTAgPSBXKFcoR1tpICsgNCA+PiAyXSAqIEdbeSArIDQgPj4gMl0pICsgZTApLCBHW2EgPj4gMl0gPSBlMCwgZTAgPSBXKFcoR1tpICsgOCA+PiAyXSAqIEdbeSArIDggPj4gMl0pICsgZTApLCBHW2EgPj4gMl0gPSBlMCwgZTAgPSBXKFcoR1tpICsgMTIgPj4gMl0gKiBHW3kgKyAxMiA+PiAyXSkgKyBlMCksIEdbYSA+PiAyXSA9IGUwLCBjID0gYyArIDQgfCAwLCBpID0gaSArIDE2IHwgMCwgQyA9IEMgKyA0IHwgMCwgKEIgfCAwKSAhPSAoQyB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG0gPSAwLCBzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgZTAgPSBXKFcoR1tpID4+IDJdICogR1tnICsgKGMgPDwgMikgPj4gMl0pICsgZTApLCBHW2EgPj4gMl0gPSBlMCwgYyA9IGMgKyAxIHwgMCwgaSA9IGkgKyA0IHwgMCwgbSA9IG0gKyAxIHwgMCwgKHMgfCAwKSAhPSAobSB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHkgPSBoICsgUCB8IDAsIGEgPSBlW3kgPj4gMl0sIGVbeSA+PiAyXSA9IGEgKyA0LCBHW2EgPj4gMl0gPSBlMCwgdyA9IHcgKyAxIHwgMCwgKG8gfCAwKSA9PSAodyB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHUgPSB1ICsgMSB8IDAsICh1IHwgMCkgPT0gKG4gfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSKGcpLCBpID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFIoaCksIGkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbZVttMiArIDU1ODQgPj4gMl0gKyAyMCA+PiAyXSA9PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFA2KGVbaSArIDM2ID4+IDJdLCBlW2kgKyAxMTIgPj4gMl0sIGVbaSArIDE4OCA+PiAyXSwgbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBQNihlW2kgKyA1MiA+PiAyXSwgZVtpICsgMTI4ID4+IDJdLCBlW2kgKyAyMDQgPj4gMl0sIG4pOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBYNihlW2kgKyAzNiA+PiAyXSwgZVtpICsgMTEyID4+IDJdLCBlW2kgKyAxODggPj4gMl0sIG4pOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgWDYoZVtpICsgNTIgPj4gMl0sIGVbaSArIDEyOCA+PiAyXSwgZVtpICsgMjA0ID4+IDJdLCBuKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGVbTTAgPj4gMl0gPSB3MiwgUSh0LCAxLCAyMDY1OSwgTTApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoQyA9IGVbZVtEICsgMjAgPj4gMl0gPj4gMl0sICFlW0MgKyAxNiA+PiAyXSkgewogICAgICAgICAgICAgICAgICAgICAgVSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBmb3IgKEIgPSBlW0QgKyA2OCA+PiAyXSwgbyA9IGVbQyArIDIwID4+IDJdLCBuID0gZVtlW0QgKyAzMiA+PiAyXSArIDU1ODQgPj4gMl0sIHkgPSBlW2VbRCArIDI0ID4+IDJdICsgMjQgPj4gMl0sIHMgPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgazogewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWVbQiArIChzIDw8IDIpID4+IDJdICYmIEIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgbCA9IGVbbyArIDI4ID4+IDJdLCBpID0gbCArIFooZVt5ICsgMzYgPj4gMl0sIDE1MikgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlW0QgKyA2NCA+PiAyXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IGVbaSArIDE0OCA+PiAyXSAtIGVbaSArIDE0MCA+PiAyXSB8IDAsIHIwID0gZVtpICsgMTQ0ID4+IDJdIC0gZVtpICsgMTM2ID4+IDJdIHwgMCwgdyA9IDAsIGkgPSA1MjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBsICsgWihlW28gKyAyNCA+PiAyXSwgMTUyKSB8IDAsIHIwID0gZVtpICsgOCA+PiAyXSAtIGVbaSA+PiAyXSB8IDAsIHcgPSBlW2wgLSAxNDQgPj4gMl0gLSAocjAgKyBlW2wgLSAxNTIgPj4gMl0gfCAwKSB8IDAsIGEgPSBlW2kgKyAxMiA+PiAyXSAtIGVbaSArIDQgPj4gMl0gfCAwLCBpID0gMzY7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZyA9IGkgKyBvIHwgMCwgaSA9IGVbeSArIDI0ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbeSArIDMyID4+IDJdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gMSA8PCBpIC0gMSwgYyA9IGkgLSAxIHwgMCwgbCA9IDAgLSBpIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSAtMSA8PCBpIF4gLTEsIGwgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChVID0gZVtnID4+IDJdLCBlW24gKyAyMCA+PiAyXSAhPSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhIHwgIXIwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHYgPSBsID4+IDMxLCBnID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodzIgPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlMCA9IEdbVSA+PiAyXSwgaSA9IGM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGY6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZTAgPiBXKDIxNDc0ODM2NDgpIHx8IChpID0gbCwgZTAgPCBXKC0yMTQ3NDgzNjQ4KSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSBsLCBpID0gZVtuICsgMTA3NiA+PiAyXSwgbSA9IGksIHUgPSBpID4+IDMxLCBlMCA9IHExKGUwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVyhSMihlMCkpIDwgVygyMTQ3NDgzNjQ4KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIID0gfn5lMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEggPSAtMjE0NzQ4MzY0ODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IEgsIHUgPSB1ICsgKGkgPj4gMzEpIHwgMCwgaSA9IGkgKyBtIHwgMCwgdSA9IEggPj4+IDAgPiBpID4+PiAwID8gdSArIDEgfCAwIDogdSwgaSA9IGkgPj4+IDAgPCBsID4+PiAwICYgKHUgfCAwKSA8PSAodiB8IDApIHwgKHUgfCAwKSA8ICh2IHwgMCkgPyBoIDogaSA+Pj4gMCA8IGMgPj4+IDAgJiAodSB8IDApIDw9IDAgfCAodSB8IDApIDwgMCA/IGkgOiBjOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW1UgPj4gMl0gPSBpLCBVID0gVSArIDQgfCAwLCB3MiA9IHcyICsgMSB8IDAsIChyMCB8IDApID09ICh3MiB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFUgPSAodyA8PCAyKSArIFUgfCAwLCBnID0gZyArIDEgfCAwLCAoZyB8IDApID09IChhIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYSB8ICFyMCkKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGggPSByMCAmIC0yLCB1ID0gcjAgJiAxLCBpID0gMCwgdyA9IHcgPDwgMjsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodzIgPSAwLCAocjAgfCAwKSAhPSAxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGcgPSBlW24gKyAxMDc2ID4+IDJdICsgZVtVID4+IDJdIHwgMCwgZVtVID4+IDJdID0gKGwgfCAwKSA+IChnIHwgMCkgPyBsIDogKGcgfCAwKSA8IChjIHwgMCkgPyBnIDogYywgZyA9IGVbbiArIDEwNzYgPj4gMl0gKyBlW1UgKyA0ID4+IDJdIHwgMCwgZVtVICsgNCA+PiAyXSA9IChsIHwgMCkgPiAoZyB8IDApID8gbCA6IChnIHwgMCkgPCAoYyB8IDApID8gZyA6IGMsIFUgPSBVICsgOCB8IDAsIHcyID0gdzIgKyAyIHwgMCwgKGggfCAwKSAhPSAodzIgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHUgJiYgKGcgPSBlW24gKyAxMDc2ID4+IDJdICsgZVtVID4+IDJdIHwgMCwgZVtVID4+IDJdID0gKGwgfCAwKSA+IChnIHwgMCkgPyBsIDogKGcgfCAwKSA8IChjIHwgMCkgPyBnIDogYywgVSA9IFUgKyA0IHwgMCksIFUgPSB3ICsgVSB8IDAsIGkgPSBpICsgMSB8IDAsIChhIHwgMCkgPT0gKGkgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBpZiAobyA9IG8gKyA3NiB8IDAsIG4gPSBuICsgMTA4MCB8IDAsIHkgPSB5ICsgNTIgfCAwLCBVID0gMSwgcyA9IHMgKyAxIHwgMCwgIShzID4+PiAwIDwgZFtDICsgMTYgPj4gMl0pKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBVID0gMCwgUSh0LCAxLCA1Nzc0LCAwKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChYID0gTTAgKyAxNiB8IDAsICFVKSB7CiAgICAgICAgICAgICAgICAgIHZpKGVlKSwgZVtBICsgOCA+PiAyXSA9IGVbQSArIDggPj4gMl0gfCAzMjc2OCwgUSh0LCAxLCAyMjAzMCwgMCk7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIGlmICghcikKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICBpZiAoaSA9IDAsIHIwID0gMCwgbCA9IGVbQSArIDIwOCA+PiAyXSwgbiA9IGQ0KGwsIDEpLCAhKChuIHwgMCkgPT0gLTEgfCBmID4+PiAwIDwgbiA+Pj4gMCkpCiAgICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSAxLCBmID0gZVtsICsgMjQgPj4gMl0sICFlW2YgKyAxNiA+PiAyXSkKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgIGZvciAoVSA9IGVbZiArIDI0ID4+IDJdLCBtMiA9IGVbZVtlW2wgKyAyMCA+PiAyXSA+PiAyXSArIDIwID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICBpID0gZVtVICsgMjQgPj4gMl0sIGcgPSBpICYgNywgbyA9IGkgPj4+IDMgfCAwLCBmID0gZVttMiArIDI4ID4+IDJdLCBpID0gZiArIFooZVtVICsgMzYgPj4gMl0sIDE1MikgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICBrOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbbCArIDY0ID4+IDJdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gZiArIFooZVttMiArIDI0ID4+IDJdLCAxNTIpIHwgMCwgZiA9IGVbaSArIDggPj4gMl0gLSBlW2kgPj4gMl0gfCAwLCB3MiA9IGVbbiAtIDE0NCA+PiAyXSAtIChmICsgZVtuIC0gMTUyID4+IDJdIHwgMCkgfCAwLCBuID0gZVtpICsgMTIgPj4gMl0gLSBlW2kgKyA0ID4+IDJdIHwgMCwgaSA9IDM2OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IGVbaSArIDE0OCA+PiAyXSAtIGVbaSArIDE0MCA+PiAyXSB8IDAsIGYgPSBlW2kgKyAxNDQgPj4gMl0gLSBlW2kgKyAxMzYgPj4gMl0gfCAwLCB3MiA9IDAsIGkgPSA1MjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpID0gZVtpICsgbTIgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgIGs6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGw6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChnID0gbyArICgoZyB8IDApICE9IDApIHwgMCwgKChnIHwgMCkgPT0gMyA/IDQgOiBnKSAtIDEgfCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFuKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmID0gZiA8PCAyLCAobiB8IDApICE9IDEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChnID0gbiAmIC0yLCBjID0gMDsgciA9IEYyKHIsIGksIGYpICsgZiB8IDAsIGEgPSBpICsgZiB8IDAsIGkgPSB3MiA8PCAyLCBvID0gYSArIGkgfCAwLCByID0gRjIociwgbywgZikgKyBmIHwgMCwgaSA9IGkgKyAoZiArIG8gfCAwKSB8IDAsIGMgPSBjICsgMiB8IDAsIChnIHwgMCkgIT0gKGMgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShuICYgMSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IEYyKHIsIGksIGYpICsgZiB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZyA9ICFuIHwgIWYsIGVbVSArIDMyID4+IDJdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobyA9IGYgJiAtOCwgZyA9IGYgJiA3LCBjID0gMCwgYSA9IGYgLSAxID4+PiAwIDwgNzsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZiA9IDAsICFhKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IEZbciB8IDBdID0gZVtpID4+IDJdLCBGW3IgKyAxIHwgMF0gPSBlW2kgKyA0ID4+IDJdLCBGW3IgKyAyIHwgMF0gPSBlW2kgKyA4ID4+IDJdLCBGW3IgKyAzIHwgMF0gPSBlW2kgKyAxMiA+PiAyXSwgRltyICsgNCB8IDBdID0gZVtpICsgMTYgPj4gMl0sIEZbciArIDUgfCAwXSA9IGVbaSArIDIwID4+IDJdLCBGW3IgKyA2IHwgMF0gPSBlW2kgKyAyNCA+PiAyXSwgRltyICsgNyB8IDBdID0gZVtpICsgMjggPj4gMl0sIHIgPSByICsgOCB8IDAsIGkgPSBpICsgMzIgfCAwLCBmID0gZiArIDggfCAwLCAobyB8IDApICE9IChmIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmID0gMCwgZykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBGW3IgfCAwXSA9IGVbaSA+PiAyXSwgciA9IHIgKyAxIHwgMCwgaSA9IGkgKyA0IHwgMCwgZiA9IGYgKyAxIHwgMCwgKGcgfCAwKSAhPSAoZiB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9ICh3MiA8PCAyKSArIGkgfCAwLCBjID0gYyArIDEgfCAwLCAoYyB8IDApID09IChuIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKG8gPSBmICYgLTgsIGcgPSBmICYgNywgYyA9IDAsIGEgPSBmIC0gMSA+Pj4gMCA8IDcsIGggPSB3MiA8PCAyOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZiA9IDAsICFhKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBGW3IgfCAwXSA9IGVbaSA+PiAyXSwgRltyICsgMSB8IDBdID0gZVtpICsgNCA+PiAyXSwgRltyICsgMiB8IDBdID0gZVtpICsgOCA+PiAyXSwgRltyICsgMyB8IDBdID0gZVtpICsgMTIgPj4gMl0sIEZbciArIDQgfCAwXSA9IGVbaSArIDE2ID4+IDJdLCBGW3IgKyA1IHwgMF0gPSBlW2kgKyAyMCA+PiAyXSwgRltyICsgNiB8IDBdID0gZVtpICsgMjQgPj4gMl0sIEZbciArIDcgfCAwXSA9IGVbaSArIDI4ID4+IDJdLCByID0gciArIDggfCAwLCBpID0gaSArIDMyIHwgMCwgZiA9IGYgKyA4IHwgMCwgKG8gfCAwKSAhPSAoZiB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmID0gMCwgZykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgRltyIHwgMF0gPSBlW2kgPj4gMl0sIHIgPSByICsgMSB8IDAsIGkgPSBpICsgNCB8IDAsIGYgPSBmICsgMSB8IDAsIChnIHwgMCkgIT0gKGYgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IGkgKyBoIHwgMCwgYyA9IGMgKyAxIHwgMCwgKGMgfCAwKSA9PSAobiB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGcgPSAhbiB8ICFmLCBlW1UgKyAzMiA+PiAyXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKG8gPSBmICYgLTgsIGcgPSBmICYgNywgYyA9IDAsIGEgPSBmIC0gMSA+Pj4gMCA8IDc7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmID0gMCwgIWEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IHUyW3IgPj4gMV0gPSBlW2kgPj4gMl0sIHUyW3IgKyAyID4+IDFdID0gZVtpICsgNCA+PiAyXSwgdTJbciArIDQgPj4gMV0gPSBlW2kgKyA4ID4+IDJdLCB1MltyICsgNiA+PiAxXSA9IGVbaSArIDEyID4+IDJdLCB1MltyICsgOCA+PiAxXSA9IGVbaSArIDE2ID4+IDJdLCB1MltyICsgMTAgPj4gMV0gPSBlW2kgKyAyMCA+PiAyXSwgdTJbciArIDEyID4+IDFdID0gZVtpICsgMjQgPj4gMl0sIHUyW3IgKyAxNCA+PiAxXSA9IGVbaSArIDI4ID4+IDJdLCByID0gciArIDE2IHwgMCwgaSA9IGkgKyAzMiB8IDAsIGYgPSBmICsgOCB8IDAsIChvIHwgMCkgIT0gKGYgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZiA9IDAsIGcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IHUyW3IgPj4gMV0gPSBlW2kgPj4gMl0sIHIgPSByICsgMiB8IDAsIGkgPSBpICsgNCB8IDAsIGYgPSBmICsgMSB8IDAsIChnIHwgMCkgIT0gKGYgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9ICh3MiA8PCAyKSArIGkgfCAwLCBjID0gYyArIDEgfCAwLCAoYyB8IDApID09IChuIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZykKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChvID0gZiAmIC04LCBnID0gZiAmIDcsIGMgPSAwLCBhID0gZiAtIDEgPj4+IDAgPCA3OyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGYgPSAwLCAhYSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IHUyW3IgPj4gMV0gPSBlW2kgPj4gMl0sIHUyW3IgKyAyID4+IDFdID0gZVtpICsgNCA+PiAyXSwgdTJbciArIDQgPj4gMV0gPSBlW2kgKyA4ID4+IDJdLCB1MltyICsgNiA+PiAxXSA9IGVbaSArIDEyID4+IDJdLCB1MltyICsgOCA+PiAxXSA9IGVbaSArIDE2ID4+IDJdLCB1MltyICsgMTAgPj4gMV0gPSBlW2kgKyAyMCA+PiAyXSwgdTJbciArIDEyID4+IDFdID0gZVtpICsgMjQgPj4gMl0sIHUyW3IgKyAxNCA+PiAxXSA9IGVbaSArIDI4ID4+IDJdLCByID0gciArIDE2IHwgMCwgaSA9IGkgKyAzMiB8IDAsIGYgPSBmICsgOCB8IDAsIChvIHwgMCkgIT0gKGYgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmID0gMCwgZykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IHUyW3IgPj4gMV0gPSBlW2kgPj4gMl0sIHIgPSByICsgMiB8IDAsIGkgPSBpICsgNCB8IDAsIGYgPSBmICsgMSB8IDAsIChnIHwgMCkgIT0gKGYgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID0gKHcyIDw8IDIpICsgaSB8IDAsIGMgPSBjICsgMSB8IDAsIChjIHwgMCkgPT0gKG4gfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtMiA9IG0yICsgNzYgfCAwLCBVID0gVSArIDUyIHwgMCwgaSA9IDEsIHIwID0gcjAgKyAxIHwgMCwgIShyMCA+Pj4gMCA8IGRbZVtsICsgMjQgPj4gMl0gKyAxNiA+PiAyXSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoIWkpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgaWYgKGkgPSBlW2VlICsgNTU5NiA+PiAyXSwgIWkpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgUihpKSwgZVtlZSArIDU1OTYgPj4gMl0gPSAwLCBlW2VlICsgNTYwMCA+PiAyXSA9IDA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoRltBICsgNjggfCAwXSA9IElbQSArIDY4IHwgMF0gJiAyNTQsIGVbQSArIDggPj4gMl0gPSBlW0EgKyA4ID4+IDJdICYgLTEyOSwgTWkgPSAxLCByID0gZVtrICsgMTIgPj4gMl0sIGYgPSByLCBpID0gZVtrICsgOCA+PiAyXSwgciB8IGkgPyAobiA9IGVbayArIDU2ID4+IDJdLCByID0gaSAtIG4gfCAwLCBpID0gZiAtIChlW2sgKyA2MCA+PiAyXSArIChpID4+PiAwIDwgbiA+Pj4gMCkgfCAwKSB8IDApIDogKHIgPSAwLCBpID0gMCksIHIgPSAhKGkgfCByKSwgaSA9IGVbQSArIDggPj4gMl0sIHIgJiAoaSB8IDApID09IDY0IHwgKGkgfCAwKSA9PSAyNTYpCiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICBpZiAoKGkxKGssIHdlICsgMTAgfCAwLCAyLCB0KSB8IDApICE9IDIpIHsKICAgICAgICAgICAgICAgICAgUSh0LCBlW0EgKyAxODQgPj4gMl0gPyAxIDogMiwgNDM1MiwgMCksIE1pID0gIWVbQSArIDE4NCA+PiAyXTsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChoMih3ZSArIDEwIHwgMCwgd2UgKyAxMiB8IDAsIDIpLCBpID0gZVt3ZSArIDEyID4+IDJdLCAoaSB8IDApID09IDY1NDI0KQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgaWYgKChpIHwgMCkgPT0gNjU0OTcpIHsKICAgICAgICAgICAgICAgICAgZVtBICsgOCA+PiAyXSA9IDI1NiwgZVtBICsgMjA0ID4+IDJdID0gMDsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChyID0gZVtrICsgMTIgPj4gMl0sIGYgPSByLCBpID0gZVtrICsgOCA+PiAyXSwgciB8IGkgPyAobiA9IGVbayArIDU2ID4+IDJdLCByID0gaSAtIG4gfCAwLCBpID0gZiAtIChlW2sgKyA2MCA+PiAyXSArIChpID4+PiAwIDwgbiA+Pj4gMCkgfCAwKSB8IDApIDogKHIgPSAwLCBpID0gMCksICEoaSB8IHIpKSB7CiAgICAgICAgICAgICAgICAgIGVbQSArIDggPj4gMl0gPSA2NCwgUSh0LCAyLCAxODYzOCwgMCk7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBNaSA9IDAsIFEodCwgMSwgMTg1NzQsIDApOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gWCA9IHdlICsgMTYgfCAwLCBNaSB8IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gekEoQSwgaSkgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwOwogICAgICAgICAgICAgIHZhciByID0gMCwgZiA9IDAsIGsgPSAwLCB0ID0gMCwgbiA9IDAsIGwgPSAwLCBhID0gMCwgdSA9IDAsIG8gPSAwLCBnID0gMCwgaCA9IDAsIHMgPSAwLCB3ID0gMCwgQiA9IDAsIGMgPSAwLCB2ID0gMCwgQyA9IDAsIG0gPSAwLCB5ID0gMCwgcCA9IDAsIEggPSAwLCBKID0gVygwKSwgRSA9IDAsIEQgPSAwLCBVID0gMCwgUCA9IDAsIHggPSAwLCB6ID0gMCwgaiA9IDAsIE8gPSBXKDApLCBxID0gMCwgZjIgPSAwLCBuMiA9IDAsIGcyID0gMCwgdzIgPSAwLCBjMiA9IDAsIG0yID0gMCwgcDIgPSAwLCBZMiA9IDAsIFgyID0gMCwgRDIgPSAwLCBTMiA9IDAsIFAyID0gMCwgeDIgPSAwLCB6MiA9IDAsIEwyID0gMCwgZTAgPSAwLCBpMCA9IDAsIHIwID0gMCwgazAgPSAwLCB0MCA9IDAsIGgwID0gMDsKICAgICAgICAgICAgICBnID0gZVtBICsgMTYgPj4gMl0sIHIgPSBlW2cgKyA0ID4+IDJdLCBEID0gZVtBICsgOCA+PiAyXSwgYSA9IGVbRCArIDE2ID4+IDJdLCB1ID0gZVtnID4+IDJdLCBrID0gZVtEICsgMTIgPj4gMl0sIFAgPSBlW0EgKyAyMCA+PiAyXSwgbiA9IGVbUCA+PiAyXSwgbyA9IGVbUCArIDggPj4gMl0sIGggPSBlW0EgKyA0ID4+IDJdLCB6ID0gZVtBICsgMjQgPj4gMl07CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKCFlW2VbQSArIDM2ID4+IDJdID4+IDJdKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgaWYgKGYgPSBLNihpKSwgZiB8fCAoZiA9IEUyKDEsIDE1NiksIGYgJiYgKGVbZiArIDE0MCA+PiAyXSA9IDEpLCB5NihpLCBmKSksIGkgPSBrIC0gdSB8IDAsIHUgPSBlW2cgKyAxNiA+PiAyXSwgdSAmIDEgJiYgKHQgPSBpLCBpID0gZVtQICsgMjggPj4gMl0gKyBaKGgsIDE1MikgfCAwLCBpID0gKHQgKyBlW2kgLSAxNDQgPj4gMl0gfCAwKSAtIGVbaSAtIDE1MiA+PiAyXSB8IDApLCBrID0gYSAtIHIgfCAwLCB1ICYgMiAmJiAociA9IGVbUCArIDI4ID4+IDJdICsgWihoLCAxNTIpIHwgMCwgayA9IChlW3IgLSAxNDAgPj4gMl0gKyBrIHwgMCkgLSBlW3IgLSAxNDggPj4gMl0gfCAwKSwgIXg0KGYsIGVbRCArIDIwID4+IDJdIC0gZVtEICsgMTIgPj4gMl0gfCAwLCBlW0QgKyAyNCA+PiAyXSAtIGVbRCArIDE2ID4+IDJdIHwgMCkpIHsKICAgICAgICAgICAgICAgICAgZVtlW0EgKyAzNiA+PiAyXSA+PiAyXSA9IDAsIFIoQSk7CiAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIG4gPSBvIC0gbiB8IDAsIG8gPSAoZVtQICsgMzYgPj4gMl0gKyAoWihuLCBrKSA8PCAyKSB8IDApICsgKGkgPDwgMikgfCAwLCBCID0gZVtmICsgMTI4ID4+IDJdLCB1ID0gQiAmIC00LCByID0gZVtmICsgMTE2ID4+IDJdLCB3ID0gZVtmICsgMTI0ID4+IDJdOwogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICBpZiAoZVt6ICsgMjAgPj4gMl0gPT0gMSkgewogICAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICAgIGlmICghdSkgewogICAgICAgICAgICAgICAgICAgICAgICBhID0gMCwgaSA9IHI7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBpZiAoIXcpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICBmb3IgKGEgPSAwLCBpID0gcjsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsID0gbyArIChaKG4sIGEpIDw8IDIpIHwgMCwgeSA9IG8gKyAoWihuLCBhIHwgMykgPDwgMikgfCAwLCB2ID0gbyArIChaKG4sIGEgfCAyKSA8PCAyKSB8IDAsIEMgPSBvICsgKFoobiwgYSB8IDEpIDw8IDIpIHwgMCwgdCA9IDA7IGsgPSB0IDw8IDIsIGVbaSA+PiAyXSA9IGVbayArIGwgPj4gMl0gPDwgNiwgZVtpICsgNCA+PiAyXSA9IGVbayArIEMgPj4gMl0gPDwgNiwgZVtpICsgOCA+PiAyXSA9IGVbayArIHYgPj4gMl0gPDwgNiwgZVtpICsgMTIgPj4gMl0gPSBlW2sgKyB5ID4+IDJdIDw8IDYsIGkgPSBpICsgMTYgfCAwLCB0ID0gdCArIDEgfCAwLCAodyB8IDApICE9ICh0IHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhID0gYSArIDQgfCAwLCAhKHUgPj4+IDAgPiBhID4+PiAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKCF3IHwgYSA+Pj4gMCA+PSBCID4+PiAwKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICBmb3IgKHkgPSBCIC0gYSAmIDMsIHUgPSAwLCB2ID0gYSAtIEIgPj4+IDAgPiA0Mjk0OTY3MjkyOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSBvICsgKHUgPDwgMikgfCAwLCBrID0gYSwgbCA9IDAsIHkpCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBlW2kgPj4gMl0gPSBlW3QgKyAoWihrLCBuKSA8PCAyKSA+PiAyXSA8PCA2LCBrID0gayArIDEgfCAwLCBpID0gaSArIDQgfCAwLCBsID0gbCArIDEgfCAwLCAoeSB8IDApICE9IChsIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoIXYpCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBlW2kgPj4gMl0gPSBlW3QgKyAoWihrLCBuKSA8PCAyKSA+PiAyXSA8PCA2LCBlW2kgKyA0ID4+IDJdID0gZVt0ICsgKFoobiwgayArIDEgfCAwKSA8PCAyKSA+PiAyXSA8PCA2LCBlW2kgKyA4ID4+IDJdID0gZVt0ICsgKFoobiwgayArIDIgfCAwKSA8PCAyKSA+PiAyXSA8PCA2LCBlW2kgKyAxMiA+PiAyXSA9IGVbdCArIChaKG4sIGsgKyAzIHwgMCkgPDwgMikgPj4gMl0gPDwgNiwgaSA9IGkgKyAxNiB8IDAsIGsgPSBrICsgNCB8IDAsIChCIHwgMCkgIT0gKGsgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgIGlmICh1ID0gdSArIDEgfCAwLCAodyB8IDApID09ICh1IHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICBpZiAoIXUpIHsKICAgICAgICAgICAgICAgICAgICAgIGEgPSAwLCBpID0gcjsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICghdykKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgZm9yIChPID0gR1tnICsgMzIgPj4gMl0sIGEgPSAwLCBpID0gcjsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgIGZvciAodiA9IG8gKyAoWihuLCBhKSA8PCAyKSB8IDAsIEMgPSBvICsgKFoobiwgYSB8IDMpIDw8IDIpIHwgMCwgbSA9IG8gKyAoWihuLCBhIHwgMikgPDwgMikgfCAwLCBIID0gbyArIChaKG4sIGEgfCAxKSA8PCAyKSB8IDAsIHQgPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICBrID0gdCA8PCAyLCBKID0gcTEoVyhXKEdbayArIHYgPj4gMl0gLyBPKSAqIFcoNjQpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGs6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVyhSMihKKSkgPCBXKDIxNDc0ODM2NDgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gfn5KOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IC0yMTQ3NDgzNjQ4OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVbaSA+PiAyXSA9IHksIEogPSBxMShXKFcoR1trICsgSCA+PiAyXSAvIE8pICogVyg2NCkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgazogewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChXKFIyKEopKSA8IFcoMjE0NzQ4MzY0OCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSB+fko7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gLTIxNDc0ODM2NDg7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZVtpICsgNCA+PiAyXSA9IHksIEogPSBxMShXKFcoR1trICsgbSA+PiAyXSAvIE8pICogVyg2NCkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgazogewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChXKFIyKEopKSA8IFcoMjE0NzQ4MzY0OCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSB+fko7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gLTIxNDc0ODM2NDg7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZVtpICsgOCA+PiAyXSA9IHksIEogPSBxMShXKFcoR1trICsgQyA+PiAyXSAvIE8pICogVyg2NCkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgazogewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChXKFIyKEopKSA8IFcoMjE0NzQ4MzY0OCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSB+fko7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gLTIxNDc0ODM2NDg7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbaSArIDEyID4+IDJdID0gaywgaSA9IGkgKyAxNiB8IDAsIHQgPSB0ICsgMSB8IDAsICh3IHwgMCkgPT0gKHQgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlmIChhID0gYSArIDQgfCAwLCAhKHUgPj4+IDAgPiBhID4+PiAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmICghdyB8IGEgPj4+IDAgPj0gQiA+Pj4gMCkKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICBmb3IgKHYgPSBCIC0gYSAmIDEsIE8gPSBHW2cgKyAzMiA+PiAyXSwgdSA9IGEgKyAxIHwgMCwgQyA9ICh1IHwgMCkgPT0gKEIgfCAwKSwgbSA9IFoobiwgYSkgPDwgMjsgOyApIHsKICAgICAgICAgICAgICAgICAgICBpZiAodCA9IG8gKyAobCA8PCAyKSB8IDAsIHYpIHsKICAgICAgICAgICAgICAgICAgICAgIEogPSBxMShXKFcoR1t0ICsgbSA+PiAyXSAvIE8pICogVyg2NCkpKTsKICAgICAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFcoUjIoSikpIDwgVygyMTQ3NDgzNjQ4KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSB+fko7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBrID0gLTIxNDc0ODM2NDg7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBlW2kgPj4gMl0gPSBrLCBpID0gaSArIDQgfCAwLCBrID0gdTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgIGsgPSBhOwogICAgICAgICAgICAgICAgICAgIGlmICghQykKICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICBKID0gcTEoVyhXKEdbdCArIChaKGssIG4pIDw8IDIpID4+IDJdIC8gTykgKiBXKDY0KSkpOwogICAgICAgICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFcoUjIoSikpIDwgVygyMTQ3NDgzNjQ4KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IH5+SjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSAtMjE0NzQ4MzY0ODsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlW2kgPj4gMl0gPSB5LCBKID0gcTEoVyhXKEdbdCArIChaKG4sIGsgKyAxIHwgMCkgPDwgMikgPj4gMl0gLyBPKSAqIFcoNjQpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVyhSMihKKSkgPCBXKDIxNDc0ODM2NDgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gfn5KOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IC0yMTQ3NDgzNjQ4OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW2kgKyA0ID4+IDJdID0geSwgaSA9IGkgKyA4IHwgMCwgayA9IGsgKyAyIHwgMCwgKEIgfCAwKSA9PSAoayB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChsID0gbCArIDEgfCAwLCAodyB8IDApID09IChsIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdyA9IGVbQSArIDMyID4+IDJdLCBvID0gZVtBICsgMjggPj4gMl0sIGEgPSBlW3ogKyAxNiA+PiAyXSwgeiA9IGVbeiArIDIwID4+IDJdLCBsID0gZVtBID4+IDJdLCBPID0gR1tnICsgMzIgPj4gMl0sIGkgPSBlW1AgKyAyMCA+PiAyXSwgcSA9IGVbZyArIDE2ID4+IDJdLCBlW2YgKyAxMDggPj4gMl0gPSAocSA8PCA5KSArIDM3NDcyOwogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgazogewogICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPSBlW2YgKyAxMjggPj4gMl0sICFrIHx8ICh0ID0gZVtmICsgMTI0ID4+IDJdLCAhdCkpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICBmb3IgKHcyID0gaSArIChoIF4gLTEpIHwgMCwgRDIgPSArTywgaSA9IDAsIEIgPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9IDAsIHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBlW3IgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodSB8IDApIDwgMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSB1ID4+PiAwIDw9IDIxNDc0ODM2NDkgPyAtMjE0NzQ4MzY0NyA6IHUsIGVbciA+PiAyXSA9IC0yMTQ3NDgzNjQ4IC0gdSwgdSA9IDAgLSB1IHwgMCwgaSA9IGkgPj4+IDAgPiB1ID4+PiAwID8gaSA6IHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gaSA+Pj4gMCA+IHUgPj4+IDAgPyBpIDogdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0gciArIDQgfCAwLCBuID0gbiArIDEgfCAwLCAobiB8IDApID09ICh0IHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gZVtmICsgMTI4ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChCID0gQiArIDEgfCAwLCBCID4+PiAwIDwgayA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBlW2YgKyAxMjQgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBrID0gMDsKICAgICAgICAgICAgICAgICAgICAgIGY6IHsKICAgICAgICAgICAgICAgICAgICAgICAgQToKICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGkgfCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAtNSwgZVtEICsgMjggPj4gMl0gPSAtNTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgciA9IGssIGsgPSByICsgMSB8IDAsIHUgPSBpID4+PiAwID4gMywgaSA9IGkgPj4+IDEgfCAwLCAhIXU7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID0gciAtIDQgfCAwLCBlW0QgKyAyOCA+PiAyXSA9IGksICFpKQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBpZiAoc3IoZiksIGVbZiArIDEwMCA+PiAyXSA9IDM3NDQwLCBlW2YgKyA5NiA+PiAyXSA9IDM2MDY0LCBlW2YgKyAyOCA+PiAyXSA9IDM2MDk2LCByID0gZVtEID4+IDJdLCBlW2YgPj4gMl0gPSAwLCBlW2YgKyA0ID4+IDJdID0gMzI3NjgsIGVbZiArIDIwID4+IDJdID0gciwgZVtmICsgOCA+PiAyXSA9IDEyLCBlW2YgKyAxMiA+PiAyXSA9IDAsIG0gPSBmICsgMjggfCAwLCBlW2YgKyAxMDQgPj4gMl0gPSBtLCBlW2YgKyAxNiA+PiAyXSA9IHIgLSAxLCBDID0gaSAtIDEgfCAwLCAoQyB8IDApIDwgMCkKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgIGZvciAoeDIgPSAobyB8IDApICE9IDAgJiBsID4+PiAwIDwgdyA+Pj4gMCwgejIgPSBhICYgMiwgYzIgPSBhICYgMTYsIEwyID0gYSAmIDQsIGUwID0gYSAmIDMyLCBtMiA9IGEgJiA4LCBQID0gZiArIDEwMCB8IDAsIHkgPSBmICsgOTYgfCAwLCBTMiA9IGEgJiAxLCBpMCA9IG8gKyAobCA8PCAzKSB8IDAsIHIwID0gRDIgLyArKChxID8gKHEgfCAwKSA9PSAzID8gNCA6IDIgOiAxKSA+Pj4gMCksIGswID0gKHogfCAwKSAhPSAxLCBmMiA9IDI7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEggPSBmMiA+Pj4gMCA8IDIgJiAoZVtEICsgMjggPj4gMl0gLSA0IHwgMCkgPiAoQyB8IDApICYgUzIsIHogPSBlW0QgKyA4ID4+IDJdICsgWihuMiwgMjQpIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbjIgfCAhKEZbeiAtIDQgfCAwXSAmIDEpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtmICsgOCA+PiAyXSA9IC01NTkwMzg3MzcsIGVbZiA+PiAyXSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBlW2YgKyA4ID4+IDJdID0gMTIsIGVbZiA+PiAyXSA9IDAsIGVbZiArIDQgPj4gMl0gPSAzMjc2OCwgaSA9IGVbZiArIDE2ID4+IDJdIC0gMSB8IDAsIGVbZiArIDE2ID4+IDJdID0gaSwgSVtpIHwgMF0gPT0gMjU1ICYmIChlW2YgKyA4ID4+IDJdID0gMTMpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIEUgPSA2NCA8PCBDLCB0ID0gZVtmICsgMTI4ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgQTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZjIgLSAxIHwgMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHUgPSBlW2YgKyAxMjAgPj4gMl0sIGEgPSBlW2YgKyAxMjQgPj4gMl0sIG4gPSAodSArIChhIDw8IDIpIHwgMCkgKyAxMiB8IDAsIEIgPSBlW2YgKyAxMTYgPj4gMl0sIGsgPSBlW2YgKyA4ID4+IDJdLCByID0gZVtmICsgNCA+PiAyXSwgaSA9IGVbZiA+PiAyXSwgbyA9IGVbZiArIDEwNCA+PiAyXSwgdiA9IDAsIHQgPj4+IDAgPCA0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh3ID0gQyA/IDQwMDMyIDogNDAyODgsIGcgPSBFICYgMjE0NzQ4MzU4NCwgYSA9IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHUgPSAwLCBwID0gZVtmICsgMTI0ID4+IDJdLCBwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IGVbbiA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiAyMDk3MTY4IHx8IChsID0gdCAmIDQ5NSwgIWwpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9IGcgJiBlW0IgPj4gMl0sIGggPSAocyB8IDApICE9IDAsIG8gPSAoSVtsICsgZVtmICsgMTA4ID4+IDJdIHwgMF0gPDwgMikgKyBtIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHc6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoayA9IChrIHwgMCkgPT0gLTU1OTAzODczNyA/IDcgOiBrIC0gMSB8IDAsIGkgPSAoaCA8PCBrKSArIGkgfCAwLCBrKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGW2VbZiArIDE2ID4+IDJdXSA9IGksIGkgPSBlW2YgKyAxNiA+PiAyXSwgayA9IElbaSB8IDBdLCBlW2YgKyAxNiA+PiAyXSA9IGkgKyAxLCBrID0gKGsgfCAwKSA9PSAyNTUgPyA3IDogOCwgaSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IGVbbyA+PiAyXSwgbCA9IGVbdCA+PiAyXSwgciA9IHIgLSBsIHwgMCwgKGggfCAwKSA9PSBlW3QgKyA0ID4+IDJdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEociAmIDMyNzY4KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChlW28gPj4gMl0gPSBlW3QgKyA4ID4+IDJdLCB0ID0gciA+Pj4gMCA+IGwgPj4+IDAgPyByIDogbCwgaSA9IChyID4+PiAwID49IGwgPj4+IDAgPyBsIDogMCkgKyBpIHwgMDsgaSA9IGkgPDwgMSwgayA9IGsgLSAxIHwgMCwgayB8fCAoZVtmID4+IDJdID0gaSwgZzAoZiksIGsgPSBlW2YgKyA4ID4+IDJdLCBpID0gZVtmID4+IDJdKSwgbCA9IHQgJiAxNjM4NCwgciA9IHQgPDwgMSwgdCA9IHIsICFsOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBpICsgbCB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGVbbyA+PiAyXSA9IGVbdCArIDEyID4+IDJdLCB0ID0gciwgciA9IHIgPj4+IDAgPCBsID4+PiAwLCB0ID0gciA/IHQgOiBsLCBpID0gKHIgPyBsIDogMCkgKyBpIHwgMDsgaSA9IGkgPDwgMSwgayA9IGsgLSAxIHwgMCwgayB8fCAoZVtmID4+IDJdID0gaSwgZzAoZiksIGsgPSBlW2YgKyA4ID4+IDJdLCBpID0gZVtmID4+IDJdKSwgbCA9IHQgJiAxNjM4NCwgciA9IHQgPDwgMSwgdCA9IHIsICFsOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IGVbbiA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHc6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBuIC0gNCB8IDAsIFUgPSBlW24gKyA0ID4+IDJdID4+PiAxNyAmIDQgfCAoZVtzID4+IDJdID4+PiAxOSAmIDEgfCAodCA+Pj4gMTQgJiAxNiB8ICh0ID4+PiAxNiAmIDY0IHwgdCAmIDE3MCkpKSwgbyA9IChJW1UgKyAzOTUyMCB8IDBdIDw8IDIpICsgbSB8IDAsIGMgPSBlW0IgPj4gMl0sIGggPSBjID4+PiAzMSB8IDAsIHggPSB1Mlt3ICsgKCgoYyAmIDIxNDc0ODM2NDcpID4+PiBDICYgMTI3KSA8PCAxKSA+PiAxXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChIKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoayA9IChrIHwgMCkgPT0gLTU1OTAzODczNyA/IDcgOiBrIC0gMSB8IDAsIGkgPSAoaCA8PCBrKSArIGkgfCAwLCBrKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRltlW2YgKyAxNiA+PiAyXV0gPSBpLCBpID0gZVtmICsgMTYgPj4gMl0sIGsgPSBJW2kgfCAwXSwgZVtmICsgMTYgPj4gMl0gPSBpICsgMSwgayA9IChrIHwgMCkgPT0gMjU1ID8gNyA6IDgsIGkgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSBlW28gPj4gMl0sIGwgPSBlW3QgPj4gMl0sIHIgPSByIC0gbCB8IDAsIGVbdCArIDQgPj4gMl0gPT0gKGggXiBJW1UgKyAzOTc3NiB8IDBdKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEociAmIDMyNzY4KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGVbbyA+PiAyXSA9IGVbdCArIDggPj4gMl0sIHQgPSByID4+PiAwID4gbCA+Pj4gMCA/IHIgOiBsLCBpID0gKHIgPj4+IDAgPj0gbCA+Pj4gMCA/IGwgOiAwKSArIGkgfCAwOyBpID0gaSA8PCAxLCBrID0gayAtIDEgfCAwLCBrIHx8IChlW2YgPj4gMl0gPSBpLCBnMChmKSwgayA9IGVbZiArIDggPj4gMl0sIGkgPSBlW2YgPj4gMl0pLCBsID0gdCAmIDE2Mzg0LCByID0gdCA8PCAxLCB0ID0gciwgIWw7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gaSArIGwgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChlW28gPj4gMl0gPSBlW3QgKyAxMiA+PiAyXSwgdCA9IHIsIHIgPSByID4+PiAwIDwgbCA+Pj4gMCwgdCA9IHIgPyB0IDogbCwgaSA9IChyID8gbCA6IDApICsgaSB8IDA7IGkgPSBpIDw8IDEsIGsgPSBrIC0gMSB8IDAsIGsgfHwgKGVbZiA+PiAyXSA9IGksIGcwKGYpLCBrID0gZVtmICsgOCA+PiAyXSwgaSA9IGVbZiA+PiAyXSksIGwgPSB0ICYgMTYzODQsIHIgPSB0IDw8IDEsIHQgPSByLCAhbDsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ID0gdiArIHggfCAwLCBsID0gZVtmICsgMTI0ID4+IDJdLCBlW3MgPj4gMl0gPSBlW3MgPj4gMl0gfCAzMiwgZVtuICsgNCA+PiAyXSA9IGVbbiArIDQgPj4gMl0gfCA4LCB0ID0gZVtuID4+IDJdIHwgaCA8PCAxOSB8IDE2LCBlW24gPj4gMl0gPSB0LCBtMikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gKC0yIC0gbCA8PCAyKSArIG4gfCAwLCBlW2wgKyA0ID4+IDJdID0gZVtsICsgNCA+PiAyXSB8IDMyNzY4LCBlW2wgPj4gMl0gPSBlW2wgPj4gMl0gfCBjICYgLTIxNDc0ODM2NDggfCA2NTUzNiwgbCA9IGwgLSA0IHwgMCwgZVtsID4+IDJdID0gZVtsID4+IDJdIHwgMTMxMDcyLCB0ID0gZVtuID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IHQgfCAyMDk3MTUyLCBlW24gPj4gMl0gPSB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISghKHQgJiAzOTYwKSB8IHQgJiAxNjc3NzM0NCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBnICYgZVtCICsgNCA+PiAyXSwgaCA9IChzIHwgMCkgIT0gMCwgbyA9IChJW2VbZiArIDEwOCA+PiAyXSArICh0ID4+PiAzICYgNDk1KSB8IDBdIDw8IDIpICsgbSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChIKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPSAoayB8IDApID09IC01NTkwMzg3MzcgPyA3IDogayAtIDEgfCAwLCBpID0gKGggPDwgaykgKyBpIHwgMCwgaykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRltlW2YgKyAxNiA+PiAyXV0gPSBpLCBpID0gZVtmICsgMTYgPj4gMl0sIGsgPSBJW2kgfCAwXSwgZVtmICsgMTYgPj4gMl0gPSBpICsgMSwgayA9IChrIHwgMCkgPT0gMjU1ID8gNyA6IDgsIGkgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSBlW28gPj4gMl0sIGwgPSBlW3QgPj4gMl0sIHIgPSByIC0gbCB8IDAsIChoIHwgMCkgPT0gZVt0ICsgNCA+PiAyXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHIgJiAzMjc2OCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZVtvID4+IDJdID0gZVt0ICsgOCA+PiAyXSwgdCA9IHIgPj4+IDAgPiBsID4+PiAwID8gciA6IGwsIGkgPSAociA+Pj4gMCA+PSBsID4+PiAwID8gbCA6IDApICsgaSB8IDA7IGkgPSBpIDw8IDEsIGsgPSBrIC0gMSB8IDAsIGsgfHwgKGVbZiA+PiAyXSA9IGksIGcwKGYpLCBrID0gZVtmICsgOCA+PiAyXSwgaSA9IGVbZiA+PiAyXSksIGwgPSB0ICYgMTYzODQsIHIgPSB0IDw8IDEsIHQgPSByLCAhbDsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gaSArIGwgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChlW28gPj4gMl0gPSBlW3QgKyAxMiA+PiAyXSwgdCA9IHIsIHIgPSByID4+PiAwIDwgbCA+Pj4gMCwgdCA9IHIgPyB0IDogbCwgaSA9IChyID8gbCA6IDApICsgaSB8IDA7IGkgPSBpIDw8IDEsIGsgPSBrIC0gMSB8IDAsIGsgfHwgKGVbZiA+PiAyXSA9IGksIGcwKGYpLCBrID0gZVtmICsgOCA+PiAyXSwgaSA9IGVbZiA+PiAyXSksIGwgPSB0ICYgMTYzODQsIHIgPSB0IDw8IDEsIHQgPSByLCAhbDsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gZVtuID4+IDJdLCBzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBuIC0gNCB8IDAsIGMgPSBlW24gKyA0ID4+IDJdID4+PiAyMCAmIDQgfCAoZVtzID4+IDJdID4+PiAyMiAmIDEgfCAobCA+Pj4gMTUgJiAxNiB8IChsID4+PiAxOSAmIDY0IHwgbCA+Pj4gMyAmIDE3MCkpKSwgbyA9IChJW2MgKyAzOTUyMCB8IDBdIDw8IDIpICsgbSB8IDAsIGwgPSBlW0IgKyA0ID4+IDJdLCBoID0gbCA+Pj4gMzEgfCAwLCBVID0gdTJbdyArICgoKGwgJiAyMTQ3NDgzNjQ3KSA+Pj4gQyAmIDEyNykgPDwgMSkgPj4gMV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGg6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPSAoayB8IDApID09IC01NTkwMzg3MzcgPyA3IDogayAtIDEgfCAwLCBpID0gKGggPDwgaykgKyBpIHwgMCwgaykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZbZVtmICsgMTYgPj4gMl1dID0gaSwgaSA9IGVbZiArIDE2ID4+IDJdLCBrID0gSVtpIHwgMF0sIGVbZiArIDE2ID4+IDJdID0gaSArIDEsIGsgPSAoayB8IDApID09IDI1NSA/IDcgOiA4LCBpID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gZVtvID4+IDJdLCBsID0gZVt0ID4+IDJdLCByID0gciAtIGwgfCAwLCBlW3QgKyA0ID4+IDJdID09IChoIF4gSVtjICsgMzk3NzYgfCAwXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHIgJiAzMjc2OCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChlW28gPj4gMl0gPSBlW3QgKyA4ID4+IDJdLCB0ID0gciA+Pj4gMCA+IGwgPj4+IDAgPyByIDogbCwgaSA9IChyID4+PiAwID49IGwgPj4+IDAgPyBsIDogMCkgKyBpIHwgMDsgaSA9IGkgPDwgMSwgayA9IGsgLSAxIHwgMCwgayB8fCAoZVtmID4+IDJdID0gaSwgZzAoZiksIGsgPSBlW2YgKyA4ID4+IDJdLCBpID0gZVtmID4+IDJdKSwgbCA9IHQgJiAxNjM4NCwgciA9IHQgPDwgMSwgdCA9IHIsICFsOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGkgKyBsIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZVtvID4+IDJdID0gZVt0ICsgMTIgPj4gMl0sIHQgPSByLCByID0gciA+Pj4gMCA8IGwgPj4+IDAsIHQgPSByID8gdCA6IGwsIGkgPSAociA/IGwgOiAwKSArIGkgfCAwOyBpID0gaSA8PCAxLCBrID0gayAtIDEgfCAwLCBrIHx8IChlW2YgPj4gMl0gPSBpLCBnMChmKSwgayA9IGVbZiArIDggPj4gMl0sIGkgPSBlW2YgPj4gMl0pLCBsID0gdCAmIDE2Mzg0LCByID0gdCA8PCAxLCB0ID0gciwgIWw7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ID0gdiArIFUgfCAwLCBlW3MgPj4gMl0gPSBlW3MgPj4gMl0gfCAyNTYsIGVbbiArIDQgPj4gMl0gPSBlW24gKyA0ID4+IDJdIHwgNjQsIGwgPSBlW24gPj4gMl0gfCBoIDw8IDIyIHwgMTI4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IGwgfCAxNjc3NzIxNiwgZVtuID4+IDJdID0gdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoISh0ICYgMzE2ODApIHwgdCAmIDEzNDIxODc1MikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBnICYgZVtCICsgOCA+PiAyXSwgaCA9IChzIHwgMCkgIT0gMCwgbyA9IChJW2VbZiArIDEwOCA+PiAyXSArICh0ID4+PiA2ICYgNDk1KSB8IDBdIDw8IDIpICsgbSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChIKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPSAoayB8IDApID09IC01NTkwMzg3MzcgPyA3IDogayAtIDEgfCAwLCBpID0gKGggPDwgaykgKyBpIHwgMCwgaykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRltlW2YgKyAxNiA+PiAyXV0gPSBpLCBpID0gZVtmICsgMTYgPj4gMl0sIGsgPSBJW2kgfCAwXSwgZVtmICsgMTYgPj4gMl0gPSBpICsgMSwgayA9IChrIHwgMCkgPT0gMjU1ID8gNyA6IDgsIGkgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSBlW28gPj4gMl0sIGwgPSBlW3QgPj4gMl0sIHIgPSByIC0gbCB8IDAsIChoIHwgMCkgPT0gZVt0ICsgNCA+PiAyXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHIgJiAzMjc2OCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZVtvID4+IDJdID0gZVt0ICsgOCA+PiAyXSwgdCA9IHIgPj4+IDAgPiBsID4+PiAwID8gciA6IGwsIGkgPSAociA+Pj4gMCA+PSBsID4+PiAwID8gbCA6IDApICsgaSB8IDA7IGkgPSBpIDw8IDEsIGsgPSBrIC0gMSB8IDAsIGsgfHwgKGVbZiA+PiAyXSA9IGksIGcwKGYpLCBrID0gZVtmICsgOCA+PiAyXSwgaSA9IGVbZiA+PiAyXSksIGwgPSB0ICYgMTYzODQsIHIgPSB0IDw8IDEsIHQgPSByLCAhbDsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gaSArIGwgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChlW28gPj4gMl0gPSBlW3QgKyAxMiA+PiAyXSwgdCA9IHIsIHIgPSByID4+PiAwIDwgbCA+Pj4gMCwgdCA9IHIgPyB0IDogbCwgaSA9IChyID8gbCA6IDApICsgaSB8IDA7IGkgPSBpIDw8IDEsIGsgPSBrIC0gMSB8IDAsIGsgfHwgKGVbZiA+PiAyXSA9IGksIGcwKGYpLCBrID0gZVtmICsgOCA+PiAyXSwgaSA9IGVbZiA+PiAyXSksIGwgPSB0ICYgMTYzODQsIHIgPSB0IDw8IDEsIHQgPSByLCAhbDsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gZVtuID4+IDJdLCBzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBuIC0gNCB8IDAsIGMgPSBlW24gKyA0ID4+IDJdID4+PiAyMyAmIDQgfCAoZVtzID4+IDJdID4+PiAyNSAmIDEgfCAobCA+Pj4gMTggJiAxNiB8IChsID4+PiAyMiAmIDY0IHwgbCA+Pj4gNiAmIDE3MCkpKSwgbyA9IChJW2MgKyAzOTUyMCB8IDBdIDw8IDIpICsgbSB8IDAsIGwgPSBlW0IgKyA4ID4+IDJdLCBoID0gbCA+Pj4gMzEgfCAwLCBVID0gdTJbdyArICgoKGwgJiAyMTQ3NDgzNjQ3KSA+Pj4gQyAmIDEyNykgPDwgMSkgPj4gMV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGg6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPSAoayB8IDApID09IC01NTkwMzg3MzcgPyA3IDogayAtIDEgfCAwLCBpID0gKGggPDwgaykgKyBpIHwgMCwgaykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZbZVtmICsgMTYgPj4gMl1dID0gaSwgaSA9IGVbZiArIDE2ID4+IDJdLCBrID0gSVtpIHwgMF0sIGVbZiArIDE2ID4+IDJdID0gaSArIDEsIGsgPSAoayB8IDApID09IDI1NSA/IDcgOiA4LCBpID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gZVtvID4+IDJdLCBsID0gZVt0ID4+IDJdLCByID0gciAtIGwgfCAwLCBlW3QgKyA0ID4+IDJdID09IChoIF4gSVtjICsgMzk3NzYgfCAwXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHIgJiAzMjc2OCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChlW28gPj4gMl0gPSBlW3QgKyA4ID4+IDJdLCB0ID0gciA+Pj4gMCA+IGwgPj4+IDAgPyByIDogbCwgaSA9IChyID4+PiAwID49IGwgPj4+IDAgPyBsIDogMCkgKyBpIHwgMDsgaSA9IGkgPDwgMSwgayA9IGsgLSAxIHwgMCwgayB8fCAoZVtmID4+IDJdID0gaSwgZzAoZiksIGsgPSBlW2YgKyA4ID4+IDJdLCBpID0gZVtmID4+IDJdKSwgbCA9IHQgJiAxNjM4NCwgciA9IHQgPDwgMSwgdCA9IHIsICFsOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGkgKyBsIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZVtvID4+IDJdID0gZVt0ICsgMTIgPj4gMl0sIHQgPSByLCByID0gciA+Pj4gMCA8IGwgPj4+IDAsIHQgPSByID8gdCA6IGwsIGkgPSAociA/IGwgOiAwKSArIGkgfCAwOyBpID0gaSA8PCAxLCBrID0gayAtIDEgfCAwLCBrIHx8IChlW2YgPj4gMl0gPSBpLCBnMChmKSwgayA9IGVbZiArIDggPj4gMl0sIGkgPSBlW2YgPj4gMl0pLCBsID0gdCAmIDE2Mzg0LCByID0gdCA8PCAxLCB0ID0gciwgIWw7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ID0gdiArIFUgfCAwLCBlW3MgPj4gMl0gPSBlW3MgPj4gMl0gfCAyMDQ4LCBlW24gKyA0ID4+IDJdID0gZVtuICsgNCA+PiAyXSB8IDUxMiwgbCA9IGVbbiA+PiAyXSB8IGggPDwgMjUgfCAxMDI0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IGwgfCAxMzQyMTc3MjgsIGVbbiA+PiAyXSA9IHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHQgJiAyNTM0NDApIHwgdCAmIDEwNzM3NTAwMTYpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBnICYgZVtCICsgMTIgPj4gMl0sIGggPSAocyB8IDApICE9IDAsIG8gPSAoSVtlW2YgKyAxMDggPj4gMl0gKyAodCA+Pj4gOSAmIDQ5NSkgfCAwXSA8PCAyKSArIG0gfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGg6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChIKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrID0gKGsgfCAwKSA9PSAtNTU5MDM4NzM3ID8gNyA6IGsgLSAxIHwgMCwgaSA9IChoIDw8IGspICsgaSB8IDAsIGspCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRltlW2YgKyAxNiA+PiAyXV0gPSBpLCBpID0gZVtmICsgMTYgPj4gMl0sIGsgPSBJW2kgfCAwXSwgZVtmICsgMTYgPj4gMl0gPSBpICsgMSwgayA9IChrIHwgMCkgPT0gMjU1ID8gNyA6IDgsIGkgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSBlW28gPj4gMl0sIGwgPSBlW3QgPj4gMl0sIHIgPSByIC0gbCB8IDAsIChoIHwgMCkgPT0gZVt0ICsgNCA+PiAyXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyICYgMzI3NjgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChlW28gPj4gMl0gPSBlW3QgKyA4ID4+IDJdLCB0ID0gciA+Pj4gMCA+IGwgPj4+IDAgPyByIDogbCwgaSA9IChyID4+PiAwID49IGwgPj4+IDAgPyBsIDogMCkgKyBpIHwgMDsgaSA9IGkgPDwgMSwgayA9IGsgLSAxIHwgMCwgayB8fCAoZVtmID4+IDJdID0gaSwgZzAoZiksIGsgPSBlW2YgKyA4ID4+IDJdLCBpID0gZVtmID4+IDJdKSwgbCA9IHQgJiAxNjM4NCwgciA9IHQgPDwgMSwgdCA9IHIsICFsOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gaSArIGwgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChlW28gPj4gMl0gPSBlW3QgKyAxMiA+PiAyXSwgdCA9IHIsIHIgPSByID4+PiAwIDwgbCA+Pj4gMCwgdCA9IHIgPyB0IDogbCwgaSA9IChyID8gbCA6IDApICsgaSB8IDA7IGkgPSBpIDw8IDEsIGsgPSBrIC0gMSB8IDAsIGsgfHwgKGVbZiA+PiAyXSA9IGksIGcwKGYpLCBrID0gZVtmICsgOCA+PiAyXSwgaSA9IGVbZiA+PiAyXSksIGwgPSB0ICYgMTYzODQsIHIgPSB0IDw8IDEsIHQgPSByLCAhbDsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gZVtuID4+IDJdLCBzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzID0gbiAtIDQgfCAwLCBjID0gZVtuICsgNCA+PiAyXSA+Pj4gMjYgJiA0IHwgKGVbcyA+PiAyXSA+Pj4gMjggJiAxIHwgKGwgPj4+IDIxICYgMTYgfCAobCA+Pj4gMjUgJiA2NCB8IGwgPj4+IDkgJiAxNzApKSksIG8gPSAoSVtjICsgMzk1MjAgfCAwXSA8PCAyKSArIG0gfCAwLCBsID0gZVtCICsgMTIgPj4gMl0sIGggPSBsID4+PiAzMSB8IDAsIFUgPSB1Mlt3ICsgKCgobCAmIDIxNDc0ODM2NDcpID4+PiBDICYgMTI3KSA8PCAxKSA+PiAxXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGg6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoayA9IChrIHwgMCkgPT0gLTU1OTAzODczNyA/IDcgOiBrIC0gMSB8IDAsIGkgPSAoaCA8PCBrKSArIGkgfCAwLCBrKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGW2VbZiArIDE2ID4+IDJdXSA9IGksIGkgPSBlW2YgKyAxNiA+PiAyXSwgayA9IElbaSB8IDBdLCBlW2YgKyAxNiA+PiAyXSA9IGkgKyAxLCBrID0gKGsgfCAwKSA9PSAyNTUgPyA3IDogOCwgaSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IGVbbyA+PiAyXSwgbCA9IGVbdCA+PiAyXSwgciA9IHIgLSBsIHwgMCwgZVt0ICsgNCA+PiAyXSA9PSAoaCBeIElbYyArIDM5Nzc2IHwgMF0pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEociAmIDMyNzY4KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChlW28gPj4gMl0gPSBlW3QgKyA4ID4+IDJdLCB0ID0gciA+Pj4gMCA+IGwgPj4+IDAgPyByIDogbCwgaSA9IChyID4+PiAwID49IGwgPj4+IDAgPyBsIDogMCkgKyBpIHwgMDsgaSA9IGkgPDwgMSwgayA9IGsgLSAxIHwgMCwgayB8fCAoZVtmID4+IDJdID0gaSwgZzAoZiksIGsgPSBlW2YgKyA4ID4+IDJdLCBpID0gZVtmID4+IDJdKSwgbCA9IHQgJiAxNjM4NCwgciA9IHQgPDwgMSwgdCA9IHIsICFsOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBpICsgbCB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGVbbyA+PiAyXSA9IGVbdCArIDEyID4+IDJdLCB0ID0gciwgciA9IHIgPj4+IDAgPCBsID4+PiAwLCB0ID0gciA/IHQgOiBsLCBpID0gKHIgPyBsIDogMCkgKyBpIHwgMDsgaSA9IGkgPDwgMSwgayA9IGsgLSAxIHwgMCwgayB8fCAoZVtmID4+IDJdID0gaSwgZzAoZiksIGsgPSBlW2YgKyA4ID4+IDJdLCBpID0gZVtmID4+IDJdKSwgbCA9IHQgJiAxNjM4NCwgciA9IHQgPDwgMSwgdCA9IHIsICFsOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiA9IHYgKyBVIHwgMCwgbCA9IGVbZiArIDEyNCA+PiAyXSwgZVtzID4+IDJdID0gZVtzID4+IDJdIHwgMTYzODQsIGVbbiArIDQgPj4gMl0gPSBlW24gKyA0ID4+IDJdIHwgNDA5NiwgZVtuID4+IDJdID0gZVtuID4+IDJdIHwgaCA8PCAyOCB8IDgxOTIsIGwgPSAobCA8PCAyKSArIG4gfCAwLCBlW2wgKyA0ID4+IDJdID0gZVtsICsgNCA+PiAyXSB8IDQsIGVbbCArIDEyID4+IDJdID0gZVtsICsgMTIgPj4gMl0gfCAxLCBlW2wgKyA4ID4+IDJdID0gZVtsICsgOCA+PiAyXSB8IGggPDwgMTggfCAyLCBsID0gZVtuID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW24gPj4gMl0gPSBsIHwgMTA3Mzc0MTgyNDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQiA9IEIgKyAxNiB8IDAsIG4gPSBuICsgNCB8IDAsIHUgPSB1ICsgMSB8IDAsIChwIHwgMCkgPT0gKHUgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBlW2YgKyAxMjggPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID0gbiArIDggfCAwLCBhID0gYSArIDQgfCAwLCAhKGEgPj4+IDAgPCAodCAmIC00KSA+Pj4gMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyA9IGVbZiArIDEyNCA+PiAyXSwgQiA9IChlW2YgKyAxMjAgPj4gMl0gKyAobyA8PCAyKSB8IDApICsgMTIgfCAwLCBsID0gZVtmICsgMTE2ID4+IDJdLCBrID0gZVtmICsgOCA+PiAyXSwgciA9IGVbZiArIDQgPj4gMl0sIGkgPSBlW2YgPj4gMl0sIHcgPSBlW2YgKyAxMDQgPj4gMl0sIHYgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPj4+IDAgPCA0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzID0gQyA/IDQwNTQ0IDogNDA4MDAsIGMgPSBFICYgMjE0NzQ4MzU4NCwgdSA9IDEsIGggPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGcgPSAwLCBuID0gMCwgdSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA9IGVbQiA+PiAyXSwgISghKGEgJiA5MzYwKSB8IChhICYgMTIyNjgzMzkyMCkgPT0gMTIyNjgzMzkyMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYSAmIDIwOTcxNjgpICE9IDE2KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ID0gKChhICYgMTA0ODU3NiA/IDE2IDogYSAmIDQ5NSA/IDE1IDogMTQpIDw8IDIpICsgbSB8IDAsIHUgPSBlW2wgPj4gMl0sIG8gPSAodSAmIGMpICE9IDAsIHAgPSB1MltzICsgKCgodSAmIDIxNDc0ODM2NDcpID4+PiBDICYgMTI3KSA8PCAxKSA+PiAxXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChIKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoayA9IChrIHwgMCkgPT0gLTU1OTAzODczNyA/IDcgOiBrIC0gMSB8IDAsIGkgPSAobyA8PCBrKSArIGkgfCAwLCBrKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRltlW2YgKyAxNiA+PiAyXV0gPSBpLCBpID0gZVtmICsgMTYgPj4gMl0sIHUgPSBJW2kgfCAwXSwgZVtmICsgMTYgPj4gMl0gPSBpICsgMSwgayA9ICh1IHwgMCkgPT0gMjU1ID8gNyA6IDgsIGkgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPSBlW3cgPj4gMl0sIHUgPSBlW24gPj4gMl0sIHIgPSByIC0gdSB8IDAsIChvIHwgMCkgPT0gZVtuICsgNCA+PiAyXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEociAmIDMyNzY4KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGVbdyA+PiAyXSA9IGVbbiArIDggPj4gMl0sIHQgPSByID4+PiAwID4gdSA+Pj4gMCA/IHIgOiB1LCBpID0gKHIgPj4+IDAgPj0gdSA+Pj4gMCA/IHUgOiAwKSArIGkgfCAwOyBpID0gaSA8PCAxLCBrID0gayAtIDEgfCAwLCBrIHx8IChlW2YgPj4gMl0gPSBpLCBnMChmKSwgayA9IGVbZiArIDggPj4gMl0sIGkgPSBlW2YgPj4gMl0pLCB1ID0gdCAmIDE2Mzg0LCByID0gdCA8PCAxLCB0ID0gciwgIXU7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gaSArIHUgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChlW3cgPj4gMl0gPSBlW24gKyAxMiA+PiAyXSwgdCA9IHIsIHIgPSByID4+PiAwIDwgdSA+Pj4gMCwgdCA9IHIgPyB0IDogdSwgaSA9IChyID8gdSA6IDApICsgaSB8IDA7IGkgPSBpIDw8IDEsIGsgPSBrIC0gMSB8IDAsIGsgfHwgKGVbZiA+PiAyXSA9IGksIGcwKGYpLCBrID0gZVtmICsgOCA+PiAyXSwgaSA9IGVbZiA+PiAyXSksIHUgPSB0ICYgMTYzODQsIHIgPSB0IDw8IDEsIHQgPSByLCAhdTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgPSB2ICsgcCB8IDAsIHUgPSBhIHwgMTA0ODU3NjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYSAmIDE2Nzc3MzQ0KSA9PSAxMjgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdyA9ICgoYSAmIDgzODg2MDggPyAxNiA6IGEgJiAzOTYwID8gMTUgOiAxNCkgPDwgMikgKyBtIHwgMCwgbiA9IGVbbCArIDQgPj4gMl0sIHQgPSAobiAmIGMpICE9IDAsIHAgPSB1MltzICsgKCgobiAmIDIxNDc0ODM2NDcpID4+PiBDICYgMTI3KSA8PCAxKSA+PiAxXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChIKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoayA9IChrIHwgMCkgPT0gLTU1OTAzODczNyA/IDcgOiBrIC0gMSB8IDAsIGkgPSAodCA8PCBrKSArIGkgfCAwLCBrKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRltlW2YgKyAxNiA+PiAyXV0gPSBpLCBpID0gZVtmICsgMTYgPj4gMl0sIGsgPSBJW2kgfCAwXSwgZVtmICsgMTYgPj4gMl0gPSBpICsgMSwgayA9IChrIHwgMCkgPT0gMjU1ID8gNyA6IDgsIGkgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG8gPSBlW3cgPj4gMl0sIG4gPSBlW28gPj4gMl0sIHIgPSByIC0gbiB8IDAsICh0IHwgMCkgPT0gZVtvICsgNCA+PiAyXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEociAmIDMyNzY4KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGVbdyA+PiAyXSA9IGVbbyArIDggPj4gMl0sIHQgPSByID4+PiAwID4gbiA+Pj4gMCA/IHIgOiBuLCBpID0gKHIgPj4+IDAgPj0gbiA+Pj4gMCA/IG4gOiAwKSArIGkgfCAwOyBpID0gaSA8PCAxLCBrID0gayAtIDEgfCAwLCBrIHx8IChlW2YgPj4gMl0gPSBpLCBnMChmKSwgayA9IGVbZiArIDggPj4gMl0sIGkgPSBlW2YgPj4gMl0pLCBuID0gdCAmIDE2Mzg0LCByID0gdCA8PCAxLCB0ID0gciwgIW47ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gaSArIG4gfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChlW3cgPj4gMl0gPSBlW28gKyAxMiA+PiAyXSwgdCA9IHIsIHIgPSByID4+PiAwIDwgbiA+Pj4gMCwgdCA9IHIgPyB0IDogbiwgaSA9IChyID8gbiA6IDApICsgaSB8IDA7IGkgPSBpIDw8IDEsIGsgPSBrIC0gMSB8IDAsIGsgfHwgKGVbZiA+PiAyXSA9IGksIGcwKGYpLCBrID0gZVtmICsgOCA+PiAyXSwgaSA9IGVbZiA+PiAyXSksIG4gPSB0ICYgMTYzODQsIHIgPSB0IDw8IDEsIHQgPSByLCAhbjsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgPSB2ICsgcCB8IDAsIHUgPSB1IHwgODM4ODYwODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYSAmIDEzNDIxODc1MikgPT0gMTAyNCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ID0gKChhICYgNjcxMDg4NjQgPyAxNiA6IGEgJiAzMTY4MCA/IDE1IDogMTQpIDw8IDIpICsgbSB8IDAsIG4gPSBlW2wgKyA4ID4+IDJdLCB0ID0gKG4gJiBjKSAhPSAwLCBwID0gdTJbcyArICgoKG4gJiAyMTQ3NDgzNjQ3KSA+Pj4gQyAmIDEyNykgPDwgMSkgPj4gMV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGc6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPSAoayB8IDApID09IC01NTkwMzg3MzcgPyA3IDogayAtIDEgfCAwLCBpID0gKHQgPDwgaykgKyBpIHwgMCwgaykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZbZVtmICsgMTYgPj4gMl1dID0gaSwgaSA9IGVbZiArIDE2ID4+IDJdLCBrID0gSVtpIHwgMF0sIGVbZiArIDE2ID4+IDJdID0gaSArIDEsIGsgPSAoayB8IDApID09IDI1NSA/IDcgOiA4LCBpID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvID0gZVt3ID4+IDJdLCBuID0gZVtvID4+IDJdLCByID0gciAtIG4gfCAwLCAodCB8IDApID09IGVbbyArIDQgPj4gMl0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHIgJiAzMjc2OCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChlW3cgPj4gMl0gPSBlW28gKyA4ID4+IDJdLCB0ID0gciA+Pj4gMCA+IG4gPj4+IDAgPyByIDogbiwgaSA9IChyID4+PiAwID49IG4gPj4+IDAgPyBuIDogMCkgKyBpIHwgMDsgaSA9IGkgPDwgMSwgayA9IGsgLSAxIHwgMCwgayB8fCAoZVtmID4+IDJdID0gaSwgZzAoZiksIGsgPSBlW2YgKyA4ID4+IDJdLCBpID0gZVtmID4+IDJdKSwgbiA9IHQgJiAxNjM4NCwgciA9IHQgPDwgMSwgdCA9IHIsICFuOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGkgKyBuIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZVt3ID4+IDJdID0gZVtvICsgMTIgPj4gMl0sIHQgPSByLCByID0gciA+Pj4gMCA8IG4gPj4+IDAsIHQgPSByID8gdCA6IG4sIGkgPSAociA/IG4gOiAwKSArIGkgfCAwOyBpID0gaSA8PCAxLCBrID0gayAtIDEgfCAwLCBrIHx8IChlW2YgPj4gMl0gPSBpLCBnMChmKSwgayA9IGVbZiArIDggPj4gMl0sIGkgPSBlW2YgPj4gMl0pLCBuID0gdCAmIDE2Mzg0LCByID0gdCA8PCAxLCB0ID0gciwgIW47ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ID0gdiArIHAgfCAwLCB1ID0gdSB8IDY3MTA4ODY0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChhICYgMTA3Mzc1MDAxNikgPT0gODE5MikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ID0gKChhICYgNTM2ODcwOTEyID8gMTYgOiBhICYgMjUzNDQwID8gMTUgOiAxNCkgPDwgMikgKyBtIHwgMCwgYSA9IGVbbCArIDEyID4+IDJdLCBvID0gKGEgJiBjKSAhPSAwLCB0ID0gdTJbcyArICgoKGEgJiAyMTQ3NDgzNjQ3KSA+Pj4gQyAmIDEyNykgPDwgMSkgPj4gMV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGc6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPSAoayB8IDApID09IC01NTkwMzg3MzcgPyA3IDogayAtIDEgfCAwLCBpID0gKG8gPDwgaykgKyBpIHwgMCwgaykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZbZVtmICsgMTYgPj4gMl1dID0gaSwgaSA9IGVbZiArIDE2ID4+IDJdLCBhID0gSVtpIHwgMF0sIGVbZiArIDE2ID4+IDJdID0gaSArIDEsIGsgPSAoYSB8IDApID09IDI1NSA/IDcgOiA4LCBpID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID0gZVt3ID4+IDJdLCBhID0gZVtuID4+IDJdLCByID0gciAtIGEgfCAwLCAobyB8IDApID09IGVbbiArIDQgPj4gMl0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHIgJiAzMjc2OCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChlW3cgPj4gMl0gPSBlW24gKyA4ID4+IDJdLCBuID0gciA+Pj4gMCA+IGEgPj4+IDAgPyByIDogYSwgaSA9IChyID4+PiAwID49IGEgPj4+IDAgPyBhIDogMCkgKyBpIHwgMDsgaSA9IGkgPDwgMSwgayA9IGsgLSAxIHwgMCwgayB8fCAoZVtmID4+IDJdID0gaSwgZzAoZiksIGsgPSBlW2YgKyA4ID4+IDJdLCBpID0gZVtmID4+IDJdKSwgYSA9IG4gJiAxNjM4NCwgciA9IG4gPDwgMSwgbiA9IHIsICFhOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGkgKyBhIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZVt3ID4+IDJdID0gZVtuICsgMTIgPj4gMl0sIG4gPSByLCByID0gciA+Pj4gMCA8IGEgPj4+IDAsIG4gPSByID8gbiA6IGEsIGkgPSAociA/IGEgOiAwKSArIGkgfCAwOyBpID0gaSA8PCAxLCBrID0gayAtIDEgfCAwLCBrIHx8IChlW2YgPj4gMl0gPSBpLCBnMChmKSwgayA9IGVbZiArIDggPj4gMl0sIGkgPSBlW2YgPj4gMl0pLCBhID0gbiAmIDE2Mzg0LCByID0gbiA8PCAxLCBuID0gciwgIWE7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ID0gdCArIHYgfCAwLCB1ID0gdSB8IDUzNjg3MDkxMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbQiA+PiAyXSA9IHUsIG8gPSBlW2YgKyAxMjQgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gbCArIDE2IHwgMCwgQiA9IEIgKyA0IHwgMCwgZyA9IGcgKyAxIHwgMCwgIShvID4+PiAwID4gZyA+Pj4gMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gZVtmICsgMTI4ID4+IDJdLCBuID0gbzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChCID0gQiArIDggfCAwLCB1ID0gbiwgaCA9IGggKyA0IHwgMCwgIShoID4+PiAwIDwgKHQgJiAtNCkgPj4+IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvIHwgdCA+Pj4gMCA8PSBoID4+PiAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gdCAtIGggfCAwLCBzID0gQyA/IDQwNTQ0IDogNDA4MDAsIEUgPSBFICYgMjE0NzQ4MzU4NCwgZyA9IDAsIEgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjID0gdCA8PCAyLCBoID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9IGVbQiA+PiAyXSwgbiAmIDkzNjApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobyA9IDAsIGcgPSBsOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodSA9IFoobywgMyksICgyMDk3MTY4IDw8IHUgJiBuKSA9PSAxNiA8PCB1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCA9IHIsIHIgPSBuID4+PiB1IHwgMCwgdyA9ICgociAmIDEwNDg1NzYgPyAxNiA6IHIgJiA0OTUgPyAxNSA6IDE0KSA8PCAyKSArIG0gfCAwLCBuID0gZVt3ID4+IDJdLCBhID0gZVtuID4+IDJdLCByID0gcCAtIGEgfCAwLCBwID0gZVtnID4+IDJdLCBVID0gdTJbcyArICgoKHAgJiAyMTQ3NDgzNjQ3KSA+Pj4gQyAmIDEyNykgPDwgMSkgPj4gMV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbbiArIDQgPj4gMl0gIT0gKChFICYgcCkgIT0gMCB8IDApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZVt3ID4+IDJdID0gZVtuICsgMTIgPj4gMl0sIG4gPSByLCByID0gciA+Pj4gMCA8IGEgPj4+IDAsIG4gPSByID8gbiA6IGEsIGkgPSAociA/IGEgOiAwKSArIGkgfCAwOyBpID0gaSA8PCAxLCBrID0gayAtIDEgfCAwLCBrIHx8IChlW2YgPj4gMl0gPSBpLCBnMChmKSwgayA9IGVbZiArIDggPj4gMl0sIGkgPSBlW2YgPj4gMl0pLCBhID0gbiAmIDE2Mzg0LCByID0gbiA8PCAxLCBuID0gciwgIWE7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociAmIDMyNzY4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBpICsgYSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGVbdyA+PiAyXSA9IGVbbiArIDggPj4gMl0sIG4gPSByID4+PiAwID4gYSA+Pj4gMCA/IHIgOiBhLCBpID0gKHIgPj4+IDAgPj0gYSA+Pj4gMCA/IGEgOiAwKSArIGkgfCAwOyBpID0gaSA8PCAxLCBrID0gayAtIDEgfCAwLCBrIHx8IChlW2YgPj4gMl0gPSBpLCBnMChmKSwgayA9IGVbZiArIDggPj4gMl0sIGkgPSBlW2YgPj4gMl0pLCBhID0gbiAmIDE2Mzg0LCByID0gbiA8PCAxLCBuID0gciwgIWE7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gZVtCID4+IDJdIHwgMTA0ODU3NiA8PCB1LCBlW0IgPj4gMl0gPSBuLCB2ID0gdiArIFUgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnID0gZyArIDQgfCAwLCBvID0gbyArIDEgfCAwLCAodCB8IDApID09IChvIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvID0gZVtmICsgMTI0ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGwgKyBjIHwgMCwgQiA9IEIgKyA0IHwgMCwgaCA9IGggKyAxIHwgMCwgIShoID4+PiAwIDwgbyA+Pj4gMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IHQgJiAtNCwgbiA9IChhID4+PiAwIDw9IDQgPyA0IDogYSkgLSAxIHwgMCwgYSA9IChuICYgLTQpICsgNCB8IDAsIG4gPSAodSArIChuIDw8IDEgJiAtOCkgfCAwKSArIDIwIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBlW2YgKyAxMjQgPj4gMl0sIGwgPSAoZVtmICsgMTIwID4+IDJdICsgKHIgPDwgMikgfCAwKSArIDEyIHwgMCwgdyA9IGVbZiArIDExNiA+PiAyXSwgayA9IGVbZiArIDggPj4gMl0sIG4gPSBlW2YgKyA0ID4+IDJdLCBpID0gZVtmID4+IDJdLCBhID0gZVtmICsgMTA0ID4+IDJdLCB2ID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID4+PiAwIDwgNCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoWTIgPSBDID8gNDAwMzIgOiA0MDI4OCwgYyA9IEUgJiAyMTQ3NDgzNTg0LCBvID0gMSwgZyA9IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFUgPSAwLCBCID0gMCwgbykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHc6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChCID0gZVtsID4+IDJdLCAhQikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBlW3kgPj4gMl0sIGEgPSBlW3QgPj4gMl0sIG4gPSBuIC0gYSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgJiBlW3cgPj4gMl0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyA9IDAsIGggPSAwLCB1ID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvID0gMCwgYyAmIGVbdyArIDQgPj4gMl0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdyA9IHcgKyA0IHwgMCwgaCA9IDEsIHUgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBCOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgJiBlW3cgKyA4ID4+IDJdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcgPSB3ICsgOCB8IDAsIGggPSAyLCB1ID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjICYgZVt3ICsgMTIgPj4gMl0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdyA9IHcgKyAxMiB8IDAsIGggPSAzLCB1ID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcgPSB3ICsgMTYgfCAwLCBoID0gNCwgbyA9IDEsIHUgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHUgfCAwKSA9PSBlW3QgKyA0ID4+IDJdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG4gJiAzMjc2OCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGVbeSA+PiAyXSA9IGVbdCArIDggPj4gMl0sIHIgPSBuID4+PiAwID4gYSA+Pj4gMCA/IG4gOiBhLCBpID0gKG4gPj4+IDAgPj0gYSA+Pj4gMCA/IGEgOiAwKSArIGkgfCAwOyBpID0gaSA8PCAxLCBrID0gayAtIDEgfCAwLCBrIHx8IChlW2YgPj4gMl0gPSBpLCBnMChmKSwgayA9IGVbZiArIDggPj4gMl0sIGkgPSBlW2YgPj4gMl0pLCBhID0gciAmIDE2Mzg0LCBuID0gciA8PCAxLCByID0gbiwgIWE7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBCOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBpICsgYSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGVbeSA+PiAyXSA9IGVbdCArIDEyID4+IDJdLCByID0gbiwgbiA9IG4gPj4+IDAgPCBhID4+PiAwLCByID0gbiA/IHIgOiBhLCBpID0gKG4gPyBhIDogMCkgKyBpIHwgMDsgaSA9IGkgPDwgMSwgayA9IGsgLSAxIHwgMCwgayB8fCAoZVtmID4+IDJdID0gaSwgZzAoZiksIGsgPSBlW2YgKyA4ID4+IDJdLCBpID0gZVtmID4+IDJdKSwgYSA9IHIgJiAxNjM4NCwgbiA9IHIgPDwgMSwgciA9IG4sICFhOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG8pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSB5OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IGVbUCA+PiAyXSwgYSA9IGVbciA+PiAyXSwgdCA9IG4gLSBhIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtyICsgNCA+PiAyXSA9PSAoaCA+Pj4gMSB8IDApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHQgJiAzMjc2OCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGVbUCA+PiAyXSA9IGVbciArIDggPj4gMl0sIHIgPSB0ID4+PiAwID4gYSA+Pj4gMCA/IHQgOiBhLCBpID0gKHQgPj4+IDAgPj0gYSA+Pj4gMCA/IGEgOiAwKSArIGkgfCAwOyBpID0gaSA8PCAxLCBrID0gayAtIDEgfCAwLCBrIHx8IChlW2YgPj4gMl0gPSBpLCBnMChmKSwgayA9IGVbZiArIDggPj4gMl0sIGkgPSBlW2YgPj4gMl0pLCBhID0gciAmIDE2Mzg0LCB0ID0gciA8PCAxLCByID0gdCwgIWE7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBCOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBpICsgYSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGVbUCA+PiAyXSA9IGVbciArIDEyID4+IDJdLCBuID0gdCA+Pj4gMCA8IGEgPj4+IDAsIHIgPSBuID8gdCA6IGEsIGkgPSAobiA/IGEgOiAwKSArIGkgfCAwOyBpID0gaSA8PCAxLCBrID0gayAtIDEgfCAwLCBrIHx8IChlW2YgPj4gMl0gPSBpLCBnMChmKSwgayA9IGVbZiArIDggPj4gMl0sIGkgPSBlW2YgPj4gMl0pLCBhID0gciAmIDE2Mzg0LCB0ID0gciA8PCAxLCByID0gdCwgIWE7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gZVtQID4+IDJdLCBhID0gZVtyID4+IDJdLCBuID0gdCAtIGEgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW3IgKyA0ID4+IDJdID09IChoICYgMSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobiAmIDMyNzY4KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZVtQID4+IDJdID0gZVtyICsgOCA+PiAyXSwgciA9IG4gPj4+IDAgPiBhID4+PiAwID8gbiA6IGEsIGkgPSAobiA+Pj4gMCA+PSBhID4+PiAwID8gYSA6IDApICsgaSB8IDA7IGkgPSBpIDw8IDEsIGsgPSBrIC0gMSB8IDAsIGsgfHwgKGVbZiA+PiAyXSA9IGksIGcwKGYpLCBrID0gZVtmICsgOCA+PiAyXSwgaSA9IGVbZiA+PiAyXSksIGEgPSByICYgMTYzODQsIG4gPSByIDw8IDEsIHIgPSBuLCAhYTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGkgKyBhIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZVtQID4+IDJdID0gZVtyICsgMTIgPj4gMl0sIHIgPSBuLCBuID0gbiA+Pj4gMCA8IGEgPj4+IDAsIHIgPSBuID8gciA6IGEsIGkgPSAobiA/IGEgOiAwKSArIGkgfCAwOyBpID0gaSA8PCAxLCBrID0gayAtIDEgfCAwLCBrIHx8IChlW2YgPj4gMl0gPSBpLCBnMChmKSwgayA9IGVbZiArIDggPj4gMl0sIGkgPSBlW2YgPj4gMl0pLCBhID0gciAmIDE2Mzg0LCBuID0gciA8PCAxLCByID0gbiwgIWE7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9IGVbbCA+PiAyXSwgKHIgJiAxMjI2ODQzMjgwKSA9PSAxMjI2ODQzMjgwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA9IFAsIHUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGggPSAwLCByID0gQiwgKHIgJiAxMjI2ODQzMjgwKSAhPSAxMjI2ODQzMjgwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHAgPSBsIC0gNCB8IDAsIG8gPSBoLCB1ID0gdzsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IFoobywgMyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG86IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISghQiAmIChvIHwgMCkgPT0gKGggfCAwKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0gciA+Pj4gdCB8IDAsIHIgJiAyMDk3MTY4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IChJW2VbZiArIDEwOCA+PiAyXSArIChyICYgNDk1KSB8IDBdIDw8IDIpICsgbSB8IDAsIHIgPSBlW2EgPj4gMl0sIHMgPSBlW3IgPj4gMl0sIG4gPSBuIC0gcyB8IDAsIHggPSBjICYgZVt1ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtyICsgNCA+PiAyXSA9PSAoKHggfCAwKSAhPSAwIHwgMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShuICYgMzI3NjgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGVbYSA+PiAyXSA9IGVbciArIDggPj4gMl0sIHIgPSBuID4+PiAwID4gcyA+Pj4gMCA/IG4gOiBzLCBpID0gKG4gPj4+IDAgPj0gcyA+Pj4gMCA/IHMgOiAwKSArIGkgfCAwOyBpID0gaSA8PCAxLCBrID0gayAtIDEgfCAwLCBrIHx8IChlW2YgPj4gMl0gPSBpLCBnMChmKSwgayA9IGVbZiArIDggPj4gMl0sIGkgPSBlW2YgPj4gMl0pLCBzID0gciAmIDE2Mzg0LCBuID0gciA8PCAxLCByID0gbiwgIXM7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGkgKyBzIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBCOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZVthID4+IDJdID0gZVtyICsgMTIgPj4gMl0sIHIgPSBuLCBuID0gbiA+Pj4gMCA8IHMgPj4+IDAsIHIgPSBuID8gciA6IHMsIGkgPSAobiA/IHMgOiAwKSArIGkgfCAwOyBpID0gaSA8PCAxLCBrID0gayAtIDEgfCAwLCBrIHx8IChlW2YgPj4gMl0gPSBpLCBnMChmKSwgayA9IGVbZiArIDggPj4gMl0sIGkgPSBlW2YgPj4gMl0pLCBzID0gciAmIDE2Mzg0LCBuID0gciA8PCAxLCByID0gbiwgIXM7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gZVtsID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqID0gZVtsICsgNCA+PiAyXSA+Pj4gdCArIDE3ICYgNCB8IChlW3AgPj4gMl0gPj4+IHQgKyAxOSAmIDEgfCAociA+Pj4gKG8gPyB0ICsgMTIgfCAwIDogMTQpICYgMTYgfCAociA+Pj4gKHQgfCAxNikgJiA2NCB8IHIgPj4+IHQgJiAxNzApKSksIGEgPSAoSVtqICsgMzk1MjAgfCAwXSA8PCAyKSArIG0gfCAwLCByID0gZVthID4+IDJdLCBzID0gZVtyID4+IDJdLCBuID0gbiAtIHMgfCAwLCB4ID0gZVt1ID4+IDJdLCB0MCA9IHUyW1kyICsgKCgoeCAmIDIxNDc0ODM2NDcpID4+PiBDICYgMTI3KSA8PCAxKSA+PiAxXSwgaDAgPSBJW2ogKyAzOTc3NiB8IDBdLCBqID0geCA+Pj4gMzEgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW3IgKyA0ID4+IDJdID09IChoMCBeIGopKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG4gJiAzMjc2OCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGVbYSA+PiAyXSA9IGVbciArIDggPj4gMl0sIHIgPSBuID4+PiAwID4gcyA+Pj4gMCA/IG4gOiBzLCBpID0gKG4gPj4+IDAgPj0gcyA+Pj4gMCA/IHMgOiAwKSArIGkgfCAwOyBpID0gaSA8PCAxLCBrID0gayAtIDEgfCAwLCBrIHx8IChlW2YgPj4gMl0gPSBpLCBnMChmKSwgayA9IGVbZiArIDggPj4gMl0sIGkgPSBlW2YgPj4gMl0pLCBzID0gciAmIDE2Mzg0LCBuID0gciA8PCAxLCByID0gbiwgIXM7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBCOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBpICsgcyB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGVbYSA+PiAyXSA9IGVbciArIDEyID4+IDJdLCByID0gbiwgbiA9IG4gPj4+IDAgPCBzID4+PiAwLCByID0gbiA/IHIgOiBzLCBpID0gKG4gPyBzIDogMCkgKyBpIHwgMDsgaSA9IGkgPDwgMSwgayA9IGsgLSAxIHwgMCwgayB8fCAoZVtmID4+IDJdID0gaSwgZzAoZiksIGsgPSBlW2YgKyA4ID4+IDJdLCBpID0gZVtmID4+IDJdKSwgcyA9IHIgJiAxNjM4NCwgbiA9IHIgPDwgMSwgciA9IG4sICFzOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPSBlW2YgKyAxMjQgPj4gMl0sIGVbcCA+PiAyXSA9IGVbcCA+PiAyXSB8IDMyIDw8IHQsIGVbbCA+PiAyXSA9IGVbbCA+PiAyXSB8IChqIDw8IDE5IHwgMTYpIDw8IHQsIGVbbCArIDQgPj4gMl0gPSBlW2wgKyA0ID4+IDJdIHwgOCA8PCB0LCAhbyAmIChtMiB8IDApICE9IDAgfCBvIHx8IChyID0gKC0yIC0gcyA8PCAyKSArIGwgfCAwLCBlW3IgKyA0ID4+IDJdID0gZVtyICsgNCA+PiAyXSB8IDMyNzY4LCBlW3IgPj4gMl0gPSBlW3IgPj4gMl0gfCB4ICYgLTIxNDc0ODM2NDggfCA2NTUzNiwgciA9IHIgLSA0IHwgMCwgZVtyID4+IDJdID0gZVtyID4+IDJdIHwgMTMxMDcyKSwgdiA9IHYgKyB0MCB8IDAsIChvIHwgMCkgIT0gMykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IChzIDw8IDIpICsgbCB8IDAsIGVbciArIDQgPj4gMl0gPSBlW3IgKyA0ID4+IDJdIHwgNCwgZVtyICsgMTIgPj4gMl0gPSBlW3IgKyAxMiA+PiAyXSB8IDEsIGVbciArIDggPj4gMl0gPSBlW3IgKyA4ID4+IDJdIHwgaiA8PCAxOCB8IDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSBlW2wgPj4gMl0gJiAoMjA5NzE1MiA8PCB0IF4gLTEpLCBlW2wgPj4gMl0gPSByLCB1ID0gdSArIDQgfCAwLCBvID0gbyArIDEgfCAwLCAobyB8IDApID09IDQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gUDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGggfCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaCA9IDEsIHIgPSByICYgLTEyMjQ3MzY3Njk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSAzLCByID0gciAmIC0xMDczNzQxODI1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSAyLCByID0gciAmIC0xMjA3OTU5NTUzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSAwLCByID0gciAmIC0xMjI2ODMzOTIxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtsID4+IDJdID0gcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdyA9ICg0IC0gaCA8PCAyKSArIHcgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gbCArIDQgfCAwLCByID0gZVtmICsgMTI0ID4+IDJdLCBVID0gVSArIDEgfCAwLCAhKHIgPj4+IDAgPiBVID4+PiAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBlW2YgKyAxMjggPj4gMl0sIEIgPSByOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGwgKyA4IHwgMCwgbyA9IEIsIGcgPSBnICsgNCB8IDAsICEoZyA+Pj4gMCA8ICh0ICYgLTQpID4+PiAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXIgfCB0ID4+PiAwIDw9IGcgPj4+IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHAgPSBDID8gNDAwMzIgOiA0MDI4OCwgVSA9IEUgJiAyMTQ3NDgzNTg0LCBoID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0gZVtsID4+IDJdLCAociAmIDEyMjY4NDMyODApICE9IDEyMjY4NDMyODApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh0IHwgMCkgIT0gKGcgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbbCA+PiAyXSA9IHIgJiAtMTIyNjgzMzkyMSwgdCA9IGVbZiArIDEyOCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAocyA9IGwgLSA0IHwgMCwgQiA9IDAsIHUgPSB3OyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyA9IFooQiwgMyksIHIgPSByID4+PiBvIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgJiAyMDk3MTY4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSAoSVtlW2YgKyAxMDggPj4gMl0gKyAociAmIDQ5NSkgfCAwXSA8PCAyKSArIG0gfCAwLCByID0gZVthID4+IDJdLCB0ID0gZVtyID4+IDJdLCBuID0gbiAtIHQgfCAwLCBFID0gVSAmIGVbdSA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW3IgKyA0ID4+IDJdID09ICgoRSB8IDApICE9IDAgfCAwKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobiAmIDMyNzY4KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGVbYSA+PiAyXSA9IGVbciArIDggPj4gMl0sIHIgPSB0ID4+PiAwIDwgbiA+Pj4gMCA/IG4gOiB0LCBpID0gKHQgPj4+IDAgPD0gbiA+Pj4gMCA/IHQgOiAwKSArIGkgfCAwOyBpID0gaSA8PCAxLCBrID0gayAtIDEgfCAwLCBrIHx8IChlW2YgPj4gMl0gPSBpLCBnMChmKSwgayA9IGVbZiArIDggPj4gMl0sIGkgPSBlW2YgPj4gMl0pLCB0ID0gciAmIDE2Mzg0LCBuID0gciA8PCAxLCByID0gbiwgIXQ7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gaSArIHQgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChlW2EgPj4gMl0gPSBlW3IgKyAxMiA+PiAyXSwgciA9IG4sIG4gPSB0ID4+PiAwID4gbiA+Pj4gMCwgciA9IG4gPyByIDogdCwgaSA9IChuID8gdCA6IDApICsgaSB8IDA7IGkgPSBpIDw8IDEsIGsgPSBrIC0gMSB8IDAsIGsgfHwgKGVbZiA+PiAyXSA9IGksIGcwKGYpLCBrID0gZVtmICsgOCA+PiAyXSwgaSA9IGVbZiA+PiAyXSksIHQgPSByICYgMTYzODQsIG4gPSByIDw8IDEsIHIgPSBuLCAhdDsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghRSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gZVtsID4+IDJdLCBjID0gZVtsICsgNCA+PiAyXSA+Pj4gbyArIDE3ICYgNCB8IChlW3MgPj4gMl0gPj4+IG8gKyAxOSAmIDEgfCAociA+Pj4gbyArIDE2ICYgNjQgfCByID4+PiBvICYgMTcwIHwgciA+Pj4gKEIgPyBvICsgMTIgfCAwIDogMTQpICYgMTYpKSwgYSA9IChJW2MgKyAzOTUyMCB8IDBdIDw8IDIpICsgbSB8IDAsIHIgPSBlW2EgPj4gMl0sIHQgPSBlW3IgPj4gMl0sIG4gPSBuIC0gdCB8IDAsIEUgPSBlW3UgPj4gMl0sIHggPSB1MltwICsgKCgoRSAmIDIxNDc0ODM2NDcpID4+PiBDICYgMTI3KSA8PCAxKSA+PiAxXSwgaiA9IElbYyArIDM5Nzc2IHwgMF0sIGMgPSBFID4+PiAzMSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGc6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtyICsgNCA+PiAyXSA9PSAoaiBeIGMpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShuICYgMzI3NjgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZVthID4+IDJdID0gZVtyICsgOCA+PiAyXSwgciA9IHQgPj4+IDAgPCBuID4+PiAwID8gbiA6IHQsIGkgPSAodCA+Pj4gMCA8PSBuID4+PiAwID8gdCA6IDApICsgaSB8IDA7IGkgPSBpIDw8IDEsIGsgPSBrIC0gMSB8IDAsIGsgfHwgKGVbZiA+PiAyXSA9IGksIGcwKGYpLCBrID0gZVtmICsgOCA+PiAyXSwgaSA9IGVbZiA+PiAyXSksIHQgPSByICYgMTYzODQsIG4gPSByIDw8IDEsIHIgPSBuLCAhdDsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBpICsgdCB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGVbYSA+PiAyXSA9IGVbciArIDEyID4+IDJdLCByID0gbiwgbiA9IHQgPj4+IDAgPiBuID4+PiAwLCByID0gbiA/IHIgOiB0LCBpID0gKG4gPyB0IDogMCkgKyBpIHwgMDsgaSA9IGkgPDwgMSwgayA9IGsgLSAxIHwgMCwgayB8fCAoZVtmID4+IDJdID0gaSwgZzAoZiksIGsgPSBlW2YgKyA4ID4+IDJdLCBpID0gZVtmID4+IDJdKSwgdCA9IHIgJiAxNjM4NCwgbiA9IHIgPDwgMSwgciA9IG4sICF0OyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSBlW2YgKyAxMjQgPj4gMl0sIGVbcyA+PiAyXSA9IGVbcyA+PiAyXSB8IDMyIDw8IG8sIGVbbCA+PiAyXSA9IGVbbCA+PiAyXSB8IChjIDw8IDE5IHwgMTYpIDw8IG8sIGVbbCArIDQgPj4gMl0gPSBlW2wgKyA0ID4+IDJdIHwgOCA8PCBvLCAhQiAmIChtMiB8IDApICE9IDAgfCBCIHx8IChyID0gKC0yIC0gdCA8PCAyKSArIGwgfCAwLCBlW3IgKyA0ID4+IDJdID0gZVtyICsgNCA+PiAyXSB8IDMyNzY4LCBlW3IgPj4gMl0gPSBlW3IgPj4gMl0gfCBFICYgLTIxNDc0ODM2NDggfCA2NTUzNiwgciA9IHIgLSA0IHwgMCwgZVtyID4+IDJdID0gZVtyID4+IDJdIHwgMTMxMDcyKSwgdiA9IHYgKyB4IHwgMCwgKEIgfCAwKSAhPSAzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSAodCA8PCAyKSArIGwgfCAwLCBlW3IgKyA0ID4+IDJdID0gZVtyICsgNCA+PiAyXSB8IDQsIGVbciArIDEyID4+IDJdID0gZVtyICsgMTIgPj4gMl0gfCAxLCBlW3IgKyA4ID4+IDJdID0gZVtyICsgOCA+PiAyXSB8IGMgPDwgMTggfCAyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSBlW2wgPj4gMl0gJiAoMjA5NzE1MiA8PCBvIF4gLTEpLCBlW2wgPj4gMl0gPSByLCB1ID0gdSArIDQgfCAwLCBCID0gQiArIDEgfCAwLCB0ID0gZVtmICsgMTI4ID4+IDJdLCAhKEIgPj4+IDAgPCB0IC0gZyA+Pj4gMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGwgKyA0IHwgMCwgdyA9ICh0IC0gZyA8PCAyKSArIHcgfCAwLCBoID0gaCArIDEgfCAwLCAhKGggPj4+IDAgPCBkW2YgKyAxMjQgPj4gMl0pKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtmICsgOCA+PiAyXSA9IGssIGVbZiArIDQgPj4gMl0gPSBuLCBlW2YgPj4gMl0gPSBpLCBlW2YgKyAxMDQgPj4gMl0gPSBhLCAhZTApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZVtmICsgMTA0ID4+IDJdID0gZiArIDEwMCwgciA9IGVbZiArIDQgPj4gMl0sIHUgPSAxOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IHIsIGsgPSBlW2YgKyAxMDQgPj4gMl0sIHIgPSBlW2sgPj4gMl0sIGEgPSBlW3IgPj4gMl0sIGkgPSBpIC0gYSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQ6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtyICsgNCA+PiAyXSA9PSAodSAmIDEpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtmICsgNCA+PiAyXSA9IGksIGkgJiAzMjc2OCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobiA9IGVbZiA+PiAyXSwgZVtrID4+IDJdID0gZVtyICsgOCA+PiAyXSwgciA9IGkgPj4+IDAgPiBhID4+PiAwID8gaSA6IGEsIGkgPSAoaSA+Pj4gMCA+PSBhID4+PiAwID8gYSA6IDApICsgbiB8IDAsIGsgPSBlW2YgKyA4ID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gayAtIDEgfCAwLCBlW2YgKyA4ID4+IDJdID0gaywgYSA9IGkgPDwgMSwgZVtmID4+IDJdID0gYSwgciA9IHIgPDwgMSwgZVtmICsgNCA+PiAyXSA9IHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0gZVtmICsgMTYgPj4gMl0sIGsgPSBJW3IgfCAwXSwgKGsgfCAwKSA9PSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2YgKyAxNiA+PiAyXSA9IHIgKyAxLCBGW3IgKyAxIHwgMF0gPSBhID4+PiAyMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHc6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShpICYgNjcxMDg4NjQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2YgKyAxNiA+PiAyXSA9IHIgKyAxLCBGW3IgKyAxIHwgMF0gPSBhID4+PiAxOTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChGW3IgfCAwXSA9IGsgKyAxLCBpID0gZVtmICsgMTYgPj4gMl0sIElbaSB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtmICsgMTYgPj4gMl0gPSBpICsgMSwgciA9IGVbZiA+PiAyXSAmIDEzNDIxNzcyNywgZVtmID4+IDJdID0gciwgRltpICsgMSB8IDBdID0gciA+Pj4gMjA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2YgKyAxNiA+PiAyXSA9IGkgKyAxLCBGW2kgKyAxIHwgMF0gPSBlW2YgPj4gMl0gPj4+IDE5OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSA4LCBpID0gNTI0Mjg3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgayA9IDcsIGkgPSAxMDQ4NTc1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2YgKyA4ID4+IDJdID0gaywgaSA9IGkgJiBlW2YgPj4gMl0sIGVbZiA+PiAyXSA9IGksIHIgPSBlW2YgKyA0ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyICYgMzI3NjgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKG4gPSBlW2YgPj4gMl0sIGVbayA+PiAyXSA9IGVbciArIDEyID4+IDJdLCByID0gaSwgaSA9IGkgPj4+IDAgPCBhID4+PiAwLCByID0gaSA/IHIgOiBhLCBpID0gKGkgPyBhIDogMCkgKyBuIHwgMCwgayA9IGVbZiArIDggPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gayAtIDEgfCAwLCBlW2YgKyA4ID4+IDJdID0gaywgYSA9IGkgPDwgMSwgZVtmID4+IDJdID0gYSwgciA9IHIgPDwgMSwgZVtmICsgNCA+PiAyXSA9IHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSBlW2YgKyAxNiA+PiAyXSwgayA9IElbciB8IDBdLCAoayB8IDApID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2YgKyAxNiA+PiAyXSA9IHIgKyAxLCBGW3IgKyAxIHwgMF0gPSBhID4+PiAyMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHc6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoaSAmIDY3MTA4ODY0KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbZiArIDE2ID4+IDJdID0gciArIDEsIEZbciArIDEgfCAwXSA9IGEgPj4+IDE5OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEZbciB8IDBdID0gayArIDEsIGkgPSBlW2YgKyAxNiA+PiAyXSwgSVtpIHwgMF0gPT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtmICsgMTYgPj4gMl0gPSBpICsgMSwgciA9IGVbZiA+PiAyXSAmIDEzNDIxNzcyNywgZVtmID4+IDJdID0gciwgRltpICsgMSB8IDBdID0gciA+Pj4gMjA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2YgKyAxNiA+PiAyXSA9IGkgKyAxLCBGW2kgKyAxIHwgMF0gPSBlW2YgPj4gMl0gPj4+IDE5OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgayA9IDgsIGkgPSA1MjQyODc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gNywgaSA9IDEwNDg1NzU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtmICsgOCA+PiAyXSA9IGssIGkgPSBpICYgZVtmID4+IDJdLCBlW2YgPj4gMl0gPSBpLCByID0gZVtmICsgNCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyICYgMzI3NjgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbZiA+PiAyXSA9IGEgKyBlW2YgPj4gMl0sIHIgPSBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHUgPSB1ICsgMSB8IDAsICh1IHwgMCkgPT0gNSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IGVbQiA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodSAmIDkzNjApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChuID0gMDsgYSA9IFoobiwgMyksICgyMDk3MTY4IDw8IGEgJiB1KSA9PSAxNiA8PCBhICYmIChvID0gZVtsID4+IDJdLCBrID0gKGsgfCAwKSA9PSAtNTU5MDM4NzM3ID8gNyA6IGsgLSAxIHwgMCwgaSA9ICgoKG8gJiBFKSAhPSAwKSA8PCBrKSArIGkgfCAwLCB3ID0gdSA+Pj4gYSB8IDAsIHcgPSAodyAmIDEwNDg1NzYgPyAxNiA6IHcgJiA0OTUgPyAxNSA6IDE0KSA8PCAyLCBvID0gdTJbcyArICgoKG8gJiAyMTQ3NDgzNjQ3KSA+Pj4gQyAmIDEyNykgPDwgMSkgPj4gMV0sIGsgfHwgKEZbZVtmICsgMTYgPj4gMl1dID0gaSwgaSA9IGVbZiArIDE2ID4+IDJdLCB1ID0gSVtpIHwgMF0sIGVbZiArIDE2ID4+IDJdID0gaSArIDEsIGsgPSAodSB8IDApID09IDI1NSA/IDcgOiA4LCB1ID0gZVtCID4+IDJdLCBpID0gMCksIHYgPSBvICsgdiB8IDAsIHUgPSAxMDQ4NTc2IDw8IGEgfCB1LCBlW0IgPj4gMl0gPSB1LCB3ID0gdyArIG0gfCAwKSwgbCA9IGwgKyA0IHwgMCwgbiA9IG4gKyAxIHwgMCwgKHQgfCAwKSAhPSAobiB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvID0gZVtmICsgMTI0ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9ICh0IDw8IDIpICsgbCB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChCID0gQiArIDQgfCAwLCBnID0gZyArIDEgfCAwLCAhKG8gPj4+IDAgPiBnID4+PiAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2YgKyA4ID4+IDJdID0gaywgZVtmICsgNCA+PiAyXSA9IHIsIGVbZiA+PiAyXSA9IGksIGVbZiArIDEwNCA+PiAyXSA9IHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBBOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA+Pj4gMCA8PSBhID4+PiAwIHx8IChsID0gZVtmICsgMTI0ID4+IDJdLCAhbCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHAgPSBDID8gNDAwMzIgOiA0MDI4OCwgVSA9IEUgJiAyMTQ3NDgzNTg0LCB3ID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZyA9IGVbbiA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA+Pj4gMCA8PSBhID4+PiAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzID0gbiAtIDQgfCAwLCB1ID0gYTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRSA9IHUgLSBhIHwgMCwgbCA9IFooRSwgMyksIGggPSBnID4+PiBsIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoICYgMjA5NzE2OCB8fCAoYyA9IGggJiA0OTUsICFjKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IFUgJiBlW0IgPj4gMl0sIGggPSAoeCB8IDApICE9IDAsIG8gPSAoSVtjICsgZVtmICsgMTA4ID4+IDJdIHwgMF0gPDwgMikgKyBtIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoayA9IChrIHwgMCkgPT0gLTU1OTAzODczNyA/IDcgOiBrIC0gMSB8IDAsIGkgPSAoaCA8PCBrKSArIGkgfCAwLCBrKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZbZVtmICsgMTYgPj4gMl1dID0gaSwgaSA9IGVbZiArIDE2ID4+IDJdLCBrID0gSVtpIHwgMF0sIGVbZiArIDE2ID4+IDJdID0gaSArIDEsIGsgPSAoayB8IDApID09IDI1NSA/IDcgOiA4LCBpID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gZVtvID4+IDJdLCBnID0gZVt0ID4+IDJdLCByID0gciAtIGcgfCAwLCAoaCB8IDApID09IGVbdCArIDQgPj4gMl0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEociAmIDMyNzY4KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZVtvID4+IDJdID0gZVt0ICsgOCA+PiAyXSwgdCA9IHIgPj4+IDAgPiBnID4+PiAwID8gciA6IGcsIGkgPSAociA+Pj4gMCA+PSBnID4+PiAwID8gZyA6IDApICsgaSB8IDA7IGkgPSBpIDw8IDEsIGsgPSBrIC0gMSB8IDAsIGsgfHwgKGVbZiA+PiAyXSA9IGksIGcwKGYpLCBrID0gZVtmICsgOCA+PiAyXSwgaSA9IGVbZiA+PiAyXSksIGcgPSB0ICYgMTYzODQsIHIgPSB0IDw8IDEsIHQgPSByLCAhZzsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGkgKyBnIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZVtvID4+IDJdID0gZVt0ICsgMTIgPj4gMl0sIHQgPSByLCByID0gciA+Pj4gMCA8IGcgPj4+IDAsIHQgPSByID8gdCA6IGcsIGkgPSAociA/IGcgOiAwKSArIGkgfCAwOyBpID0gaSA8PCAxLCBrID0gayAtIDEgfCAwLCBrIHx8IChlW2YgPj4gMl0gPSBpLCBnMChmKSwgayA9IGVbZiArIDggPj4gMl0sIGkgPSBlW2YgPj4gMl0pLCBnID0gdCAmIDE2Mzg0LCByID0gdCA8PCAxLCB0ID0gciwgIWc7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gKGEgfCAwKSA9PSAodSB8IDApLCB4ID0gZyAmIChtMiB8IDApICE9IDAsIG8gPSBlW24gPj4gMl0sIGogPSBlW24gKyA0ID4+IDJdID4+PiBsICsgMTcgJiA0IHwgKGVbcyA+PiAyXSA+Pj4gbCArIDE5ICYgMSB8IChvID4+PiBsICsgMTYgJiA2NCB8IG8gPj4+IGwgJiAxNzAgfCBvID4+PiAoZyA/IDE0IDogbCArIDEyIHwgMCkgJiAxNikpLCBvID0gKElbaiArIDM5NTIwIHwgMF0gPDwgMikgKyBtIHwgMCwgYyA9IGVbQiA+PiAyXSwgaCA9IGMgPj4+IDMxIHwgMCwgWTIgPSB1MltwICsgKCgoYyAmIDIxNDc0ODM2NDcpID4+PiBDICYgMTI3KSA8PCAxKSA+PiAxXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQ6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoayA9IChrIHwgMCkgPT0gLTU1OTAzODczNyA/IDcgOiBrIC0gMSB8IDAsIGkgPSAoaCA8PCBrKSArIGkgfCAwLCBrKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGW2VbZiArIDE2ID4+IDJdXSA9IGksIGkgPSBlW2YgKyAxNiA+PiAyXSwgayA9IElbaSB8IDBdLCBlW2YgKyAxNiA+PiAyXSA9IGkgKyAxLCBrID0gKGsgfCAwKSA9PSAyNTUgPyA3IDogOCwgaSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IGVbbyA+PiAyXSwgZyA9IGVbdCA+PiAyXSwgciA9IHIgLSBnIHwgMCwgZVt0ICsgNCA+PiAyXSA9PSAoaCBeIElbaiArIDM5Nzc2IHwgMF0pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEociAmIDMyNzY4KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChlW28gPj4gMl0gPSBlW3QgKyA4ID4+IDJdLCB0ID0gciA+Pj4gMCA+IGcgPj4+IDAgPyByIDogZywgaSA9IChyID4+PiAwID49IGcgPj4+IDAgPyBnIDogMCkgKyBpIHwgMDsgaSA9IGkgPDwgMSwgayA9IGsgLSAxIHwgMCwgayB8fCAoZVtmID4+IDJdID0gaSwgZzAoZiksIGsgPSBlW2YgKyA4ID4+IDJdLCBpID0gZVtmID4+IDJdKSwgZyA9IHQgJiAxNjM4NCwgciA9IHQgPDwgMSwgdCA9IHIsICFnOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBpICsgZyB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGVbbyA+PiAyXSA9IGVbdCArIDEyID4+IDJdLCB0ID0gciwgciA9IHIgPj4+IDAgPCBnID4+PiAwLCB0ID0gciA/IHQgOiBnLCBpID0gKHIgPyBnIDogMCkgKyBpIHwgMDsgaSA9IGkgPDwgMSwgayA9IGsgLSAxIHwgMCwgayB8fCAoZVtmID4+IDJdID0gaSwgZzAoZiksIGsgPSBlW2YgKyA4ID4+IDJdLCBpID0gZVtmID4+IDJdKSwgZyA9IHQgJiAxNjM4NCwgciA9IHQgPDwgMSwgdCA9IHIsICFnOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSBlW2YgKyAxMjQgPj4gMl0sIGVbcyA+PiAyXSA9IGVbcyA+PiAyXSB8IDMyIDw8IGwsIGVbbiA+PiAyXSA9IGVbbiA+PiAyXSB8IChoIDw8IDE5IHwgMTYpIDw8IGwsIGVbbiArIDQgPj4gMl0gPSBlW24gKyA0ID4+IDJdIHwgOCA8PCBsLCBFIHwgeCB8fCAoZyA9ICgtMiAtIHQgPDwgMikgKyBuIHwgMCwgZVtnICsgNCA+PiAyXSA9IGVbZyArIDQgPj4gMl0gfCAzMjc2OCwgZVtnID4+IDJdID0gZVtnID4+IDJdIHwgYyAmIC0yMTQ3NDgzNjQ4IHwgNjU1MzYsIGcgPSBnIC0gNCB8IDAsIGVbZyA+PiAyXSA9IGVbZyA+PiAyXSB8IDEzMTA3MiksIHYgPSB2ICsgWTIgfCAwLCAoRSB8IDApICE9IDMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gKHQgPDwgMikgKyBuIHwgMCwgZVtnICsgNCA+PiAyXSA9IGVbZyArIDQgPj4gMl0gfCA0LCBlW2cgKyAxMiA+PiAyXSA9IGVbZyArIDEyID4+IDJdIHwgMSwgZVtnICsgOCA+PiAyXSA9IGVbZyArIDggPj4gMl0gfCBoIDw8IDE4IHwgMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZyA9IGVbbiA+PiAyXSB8IDIwOTcxNTIgPDwgbCwgZVtuID4+IDJdID0gZywgdCA9IGVbZiArIDEyOCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQiA9IEIgKyA0IHwgMCwgdSA9IHUgKyAxIHwgMCwgISh1ID4+PiAwIDwgdCA+Pj4gMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gZVtmICsgMTI0ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiA9ICh0IC0gYSA8PCAyKSArIEIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID0gbiArIDQgfCAwLCB3ID0gdyArIDEgfCAwLCAhKGwgPj4+IDAgPiB3ID4+PiAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgZVtmICsgOCA+PiAyXSA9IGssIGVbZiArIDQgPj4gMl0gPSByLCBlW2YgPj4gMl0gPSBpLCBlW2YgKyAxMDQgPj4gMl0gPSBvOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIFgyID0gMSwgWDIgPSB4MiA/IFEyW2kwID4+IDNdIDogWDI7CiAgICAgICAgICAgICAgICAgICAgICAgIGY6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWswKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gcSA/IDggOiA5LCBQMiA9IFEyWyhaKHEsIDgwKSArICgoaSA+Pj4gMCA8IHcyID4+PiAwID8gaSA6IHcyKSA8PCAzKSB8IDApICsgMzA1MjggPj4gM10sIGcyID0gRDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gcSA/IDggOiA5LCBQMiA9IFEyWyhaKHEsIDgwKSArICgoaSA+Pj4gMCA8IHcyID4+PiAwID8gaSA6IHcyKSA8PCAzKSB8IDApICsgMzA4NDggPj4gM10sIGcyID0gcjA7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZzIgPSBYMiAqIFAyICogZzIgKiArKDEgPDwgQyksIHAyID0gcDIgKyBnMiAqIChnMiAqICsodiB8IDApICogMTIyMDcwMzEyNWUtMTMpLCBRMlt6ICsgOCA+PiAzXSA9IHAyOwogICAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgQTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTDIgfHwgKGkgPSAoZjIgfCAwKSA9PSAyLCBpICYgIUMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghUzIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSBlW0QgKyAyOCA+PiAyXSAtIDQgfCAwLCBpICYgKHIgfCAwKSA9PSAoQyB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZjIgfCAociB8IDApIDw9IChDIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGw6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlW2YgKyA4ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPj4+IDAgPj0gNykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGkgfCAwKSAhPSA3KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYzIgJiYgKHIgPSBlW2YgKyAxNiA+PiAyXSAtIDEgfCAwLCBJW3IgfCAwXSA9PSAyNTUpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBlW2YgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA9IGVbZiA+PiAyXSwgIWkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBpICYgMzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSAtIDEgPj4+IDAgPCAzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChuID0gaSAmIC00OyByID0gaSAtIDQgfCAwLCBhID0gKCgxIDw8IGkgLSAyKSArIGEgfCAwKSArICgxIDw8IHIpIHwgMCwgaSA9IHIsIGsgPSBrICsgNCB8IDAsIChuIHwgMCkgIT0gKGsgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgayA9IDA7IHIgPSByIC0gMSB8IDAsIGEgPSAoaSA8PCByKSArIGEgfCAwLCBpID0gaSBeIDEsIGsgPSBrICsgMSB8IDAsICh1IHwgMCkgIT0gKGsgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtmID4+IDJdID0gYSwgZVtmICsgOCA+PiAyXSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRltlW2YgKyAxNiA+PiAyXV0gPSBhLCBlW2YgKyAxNiA+PiAyXSA9IGVbZiArIDE2ID4+IDJdICsgMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbZiArIDE2ID4+IDJdID0gcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoaSB8IDApICE9IDggfCBjMiB8fCAoaSA9IGVbZiArIDE2ID4+IDJdLCBJW2kgLSAxIHwgMF0gIT0gMTI3KSB8fCAoaSA9IGkgLSAyIHwgMCwgSVtpIHwgMF0gIT0gMjU1KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbZiArIDE2ID4+IDJdID0gaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYzIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IGVbZiArIDggPj4gMl0sIGEgPSAxMiAtIGkgfCAwLCAoYSB8IDApID4gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAociA9IGVbZiA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtmICsgOCA+PiAyXSA9IDAsIHIgPSByIDw8IGksIGVbZiA+PiAyXSA9IHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IGVbZiArIDE2ID4+IDJdLCB1ID0gSVtpIHwgMF0sICh1IHwgMCkgPT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbZiArIDE2ID4+IDJdID0gaSArIDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHIgJiAxMzQyMTc3MjgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtmICsgMTYgPj4gMl0gPSBpICsgMSwgRltpICsgMSB8IDBdID0gciA+Pj4gMTk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRltpIHwgMF0gPSB1ICsgMSwgaSA9IGVbZiArIDE2ID4+IDJdLCBJW2kgfCAwXSA9PSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2YgKyAxNiA+PiAyXSA9IGkgKyAxLCByID0gZVtmID4+IDJdICYgMTM0MjE3NzI3LCBlW2YgPj4gMl0gPSByOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtmICsgMTYgPj4gMl0gPSBpICsgMSwgRltpICsgMSB8IDBdID0gZVtmID4+IDJdID4+PiAxOTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSA1MjQyODcsIGkgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRltpICsgMSB8IDBdID0gciA+Pj4gMjAsIHIgPSAxMDQ4NTc1LCBpID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtmICsgOCA+PiAyXSA9IGksIHIgPSBlW2YgPj4gMl0gJiByLCBlW2YgPj4gMl0gPSByLCBhID0gYSAtIGkgfCAwLCAhKChhIHwgMCkgPiAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IGVbZiArIDE2ID4+IDJdLCByID0gSVtpIHwgMF0sIChyIHwgMCkgIT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gZVtmID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoYSAmIDEzNDIxNzcyOCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbZiArIDE2ID4+IDJdID0gaSArIDEsIEZbaSArIDEgfCAwXSA9IGEgPj4+IDE5OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEZbaSB8IDBdID0gciArIDEsIGkgPSBlW2YgKyAxNiA+PiAyXSwgSVtpIHwgMF0gPT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2YgKyAxNiA+PiAyXSA9IGkgKyAxLCByID0gZVtmID4+IDJdICYgMTM0MjE3NzI3LCBlW2YgPj4gMl0gPSByLCBGW2kgKyAxIHwgMF0gPSByID4+PiAyMCwgciA9IDEwNDg1NzUsIGkgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtmICsgMTYgPj4gMl0gPSBpICsgMSwgRltpICsgMSB8IDBdID0gZVtmID4+IDJdID4+PiAxOTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gNTI0Mjg3LCBpID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbZiArIDggPj4gMl0gPSBpLCBlW2YgPj4gMl0gPSBlW2YgPj4gMl0gJiByOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBlW2YgPj4gMl0sIGkgPSByIHwgNjU1MzUsIHIgPSAoaSA+Pj4gMCA8IHIgKyBlW2YgKyA0ID4+IDJdID4+PiAwID8gaSA6IGkgLSAzMjc2OCB8IDApIDw8IGVbZiArIDggPj4gMl0sIGVbZiA+PiAyXSA9IHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IGVbZiArIDE2ID4+IDJdLCBhID0gSVtpIHwgMF0sIChhIHwgMCkgPT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbZiArIDE2ID4+IDJdID0gaSArIDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHIgJiAxMzQyMTc3MjgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtmICsgMTYgPj4gMl0gPSBpICsgMSwgRltpICsgMSB8IDBdID0gciA+Pj4gMTk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRltpIHwgMF0gPSBhICsgMSwgaSA9IGVbZiArIDE2ID4+IDJdLCBJW2kgfCAwXSA9PSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2YgKyAxNiA+PiAyXSA9IGkgKyAxLCByID0gZVtmID4+IDJdICYgMTM0MjE3NzI3LCBlW2YgPj4gMl0gPSByOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtmICsgMTYgPj4gMl0gPSBpICsgMSwgRltpICsgMSB8IDBdID0gZVtmID4+IDJdID4+PiAxOTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSA1MjQyODcsIGkgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRltpICsgMSB8IDBdID0gciA+Pj4gMjAsIHIgPSAxMDQ4NTc1LCBpID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2YgKyA4ID4+IDJdID0gaSwgciA9IChlW2YgPj4gMl0gJiByKSA8PCBpLCBlW2YgPj4gMl0gPSByOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSBlW2YgKyAxNiA+PiAyXSwgYSA9IElbaSB8IDBdLCAoYSB8IDApID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2YgKyAxNiA+PiAyXSA9IGkgKyAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyICYgMTM0MjE3NzI4KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbZiArIDE2ID4+IDJdID0gaSArIDEsIEZbaSArIDEgfCAwXSA9IHIgPj4+IDE5OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEZbaSB8IDBdID0gYSArIDEsIGkgPSBlW2YgKyAxNiA+PiAyXSwgSVtpIHwgMF0gPT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtmICsgMTYgPj4gMl0gPSBpICsgMSwgciA9IGVbZiA+PiAyXSAmIDEzNDIxNzcyNywgZVtmID4+IDJdID0gcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbZiArIDE2ID4+IDJdID0gaSArIDEsIEZbaSArIDEgfCAwXSA9IGVbZiA+PiAyXSA+Pj4gMTk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gNTI0Mjg3LCBpID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZbaSArIDEgfCAwXSA9IHIgPj4+IDIwLCByID0gMTA0ODU3NSwgaSA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtmICsgOCA+PiAyXSA9IGksIGVbZiA+PiAyXSA9IGVbZiA+PiAyXSAmIHIsIGkgPSBlW2YgKyAxNiA+PiAyXSwgSVtpIHwgMF0gIT0gMjU1ICYmIChlW2YgKyAxNiA+PiAyXSA9IGkgKyAxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZbeiArIDIwIHwgMF0gPSBJW3ogKyAyMCB8IDBdIHwgMSwgaSA9IGVbZiArIDE2ID4+IDJdIC0gZVtmICsgMjAgPj4gMl0gfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSAzLCBIKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gZVtmICsgOCA+PiAyXSwgaSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID4+PiAwIDwgNyB8fCAoaSA9IDAsIChyIHwgMCkgIT0gNykgfHwgKGkgPSAxLCBjMikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IElbZVtmICsgMTYgPj4gMl0gLSAxIHwgMF0gIT0gMjU1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBGW3ogKyAyMCB8IDBdID0gSVt6ICsgMjAgfCAwXSAmIDI1NCwgaSA9IChlW2YgKyAxNiA+PiAyXSAtIGVbZiArIDIwID4+IDJdIHwgMCkgKyBpIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVt6ID4+IDJdID0gaSwgaSA9IGYyICsgMSB8IDAsIHIgPSAoaSB8IDApID09IDMsIEMgPSBDIC0gciB8IDAsIHoyICYmIChlW2YgKyAxMDAgPj4gMl0gPSAzNzQ0MCwgZVtmICsgOTIgPj4gMl0gPSAzNTk2OCwgZVtmICsgODggPj4gMl0gPSAzNTk2OCwgZVtmICsgODQgPj4gMl0gPSAzNTk2OCwgZVtmICsgODAgPj4gMl0gPSAzNTk2OCwgZVtmICsgNzYgPj4gMl0gPSAzNTk2OCwgZVtmICsgNzIgPj4gMl0gPSAzNTk2OCwgZVtmICsgNjggPj4gMl0gPSAzNTk2OCwgZVtmICsgNjQgPj4gMl0gPSAzNTk2OCwgZVtmICsgNjAgPj4gMl0gPSAzNTk2OCwgZVtmICsgNTYgPj4gMl0gPSAzNTk2OCwgZVtmICsgNTIgPj4gMl0gPSAzNTk2OCwgZVtmICsgNDggPj4gMl0gPSAzNTk2OCwgZVtmICsgNDQgPj4gMl0gPSAzNTk2OCwgZVtmICsgNDAgPj4gMl0gPSAzNTk2OCwgZVtmICsgMzYgPj4gMl0gPSAzNTk2OCwgZVtmICsgMzIgPj4gMl0gPSAzNTk2OCwgZVtmICsgOTYgPj4gMl0gPSAzNjA2NCwgZVtmICsgMjggPj4gMl0gPSAzNjA5NiksIGYyID0gciA/IDAgOiBpLCBuMiA9IG4yICsgMSB8IDAsICEoKEMgfCAwKSA+PSAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlmIChlW0QgKyA0OCA+PiAyXSA9IG4yLCAhbjIgfHwgKGYgPSBlW2YgKyAxNiA+PiAyXSAtIGVbZiArIDIwID4+IDJdIHwgMCwgciA9IGVbRCArIDQ4ID4+IDJdLCAhcikpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICBhID0gZVtEICsgOCA+PiAyXSwgdSA9IHIgJiAzOwogICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gZiwgayA9IHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKG4gPSAwLCBrID0gcjsgayA9IGsgLSAxIHwgMCwgbyA9IGEgKyBaKGssIDI0KSB8IDAsIGkgPSBlW28gPj4gMl0sIGYgPj4+IDAgPCBpID4+PiAwICYmIChlW28gPj4gMl0gPSBmLCBpID0gZiksIGYgPSBpLCBuID0gbiArIDEgfCAwLCAodSB8IDApICE9IChuIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBpZiAociA+Pj4gMCA+PSA0KQogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKG4gPSBhIC0gNzIgfCAwLCBvID0gYSAtIDQ4IHwgMCwgQiA9IGEgLSAyNCB8IDA7IHUgPSBaKGssIDI0KSwgbCA9IHUgKyBCIHwgMCwgZiA9IGVbbCA+PiAyXSwgZiA+Pj4gMCA+IGkgPj4+IDAgJiYgKGVbbCA+PiAyXSA9IGksIGYgPSBpKSwgbCA9IG8gKyB1IHwgMCwgaSA9IGVbbCA+PiAyXSwgZiA+Pj4gMCA8IGkgPj4+IDAgJiYgKGVbbCA+PiAyXSA9IGYsIGkgPSBmKSwgdSA9IG4gKyB1IHwgMCwgZiA9IGVbdSA+PiAyXSwgZiA+Pj4gMCA+IGkgPj4+IDAgJiYgKGVbdSA+PiAyXSA9IGksIGYgPSBpKSwgayA9IGsgLSA0IHwgMCwgdSA9IGEgKyBaKGssIDI0KSB8IDAsIGkgPSBlW3UgPj4gMl0sIGYgPj4+IDAgPCBpID4+PiAwICYmIChlW3UgPj4gMl0gPSBmLCBpID0gZiksICEhazsgKQogICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgIGlmIChpID0gZVthID4+IDJdLCB1ID0gZVtEID4+IDJdIC0gMSB8IDAsIElbaSArIHUgfCAwXSA9PSAyNTUgJiYgKGkgPSBpIC0gMSB8IDAsIGVbYSA+PiAyXSA9IGkpLCBlW2EgKyAxNiA+PiAyXSA9IGksIGsgPSAxLCAociB8IDApID09IDEpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IHIgLSAxIHwgMCwgbiA9IGkgJiAxLCAociB8IDApICE9IDIpCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAociA9IGkgJiAtMiwgdCA9IDA7IGkgPSBhICsgWihrLCAyNCkgfCAwLCBmID0gZVtpID4+IDJdLCBJW3UgKyBmIHwgMF0gPT0gMjU1ICYmIChmID0gZiAtIDEgfCAwLCBlW2kgPj4gMl0gPSBmKSwgZVtpICsgMTYgPj4gMl0gPSBmIC0gZVtpIC0gMjQgPj4gMl0sIGYgPSBlW2kgKyAyNCA+PiAyXSwgSVt1ICsgZiB8IDBdID09IDI1NSAmJiAoZiA9IGYgLSAxIHwgMCwgZVtpICsgMjQgPj4gMl0gPSBmKSwgZVtpICsgNDAgPj4gMl0gPSBmIC0gZVtpID4+IDJdLCBrID0gayArIDIgfCAwLCB0ID0gdCArIDIgfCAwLCAociB8IDApICE9ICh0IHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoIW4pCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICBpID0gYSArIFooaywgMjQpIHwgMCwgayA9IGVbaSA+PiAyXSwgSVt1ICsgayB8IDBdID09IDI1NSAmJiAoayA9IGsgLSAxIHwgMCwgZVtpID4+IDJdID0gayksIGVbaSArIDE2ID4+IDJdID0gayAtIGVbaSAtIDI0ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZVtEICsgMjggPj4gMl0gPSAwOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVbRCArIDQ4ID4+IDJdID0gMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICghZVtBICsgNDAgPj4gMl0pIHsKICAgICAgICAgICAgICAgICAgaSA9IGVbQSArIDEyID4+IDJdLCBRMltpICsgMzIgPj4gM10gPSBwMiArIFEyW2kgKyAzMiA+PiAzXSwgUihBKTsKICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGkgPSBlW0EgKyA0MCA+PiAyXSwgZiA9IGVbQSArIDEyID4+IDJdLCBRMltmICsgMzIgPj4gM10gPSBwMiArIFEyW2YgKyAzMiA+PiAzXSwgIWkpCiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIFIoQSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gSTQoQSwgaSwgciwgZikgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDAsIGYgPSBmIHwgMDsKICAgICAgICAgICAgICB2YXIgayA9IDAsIHQgPSAwLCBuID0gMCwgbCA9IDAsIGEgPSAwLCB1ID0gMCwgbyA9IDAsIGcgPSAwLCBoID0gMCwgcyA9IDAsIHcgPSAwLCBCID0gVygwKSwgYyA9IDAsIHYgPSAwLCBDID0gMCwgbSA9IFcoMCksIHkgPSAwLCBwID0gMCwgSCA9IDAsIEogPSAwLCBFID0gMCwgRCA9IDAsIFUgPSAwLCBQID0gMCwgeCA9IDAsIHogPSAwLCBqID0gMCwgTyA9IFcoMCksIHEgPSAwLCBmMiA9IDAsIG4yID0gMCwgZzIgPSAwLCB3MiA9IDAsIGMyID0gMCwgbTIgPSAwLCBwMiA9IFcoMCksIFkyID0gMCwgWDIgPSAwLCBEMiA9IDAsIFMyID0gMCwgUDIgPSAwLCB4MiA9IDAsIHoyID0gMCwgTDIgPSAwLCBlMCA9IDAsIGkwID0gMCwgcjAgPSAwLCBrMCA9IDAsIHQwID0gMCwgaDAgPSAwOwogICAgICAgICAgICAgIHMgPSBYIC0gNDAwIHwgMCwgWCA9IHM7CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKCFyIHwgKCFBIHwgIWkpKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgaWYgKHUgPSBlW2kgKyA1NTkyID4+IDJdLCB1IC0gMzQgPj4+IDAgPD0gNDI5NDk2NzI2MikgewogICAgICAgICAgICAgICAgICBlW3MgKyA0ID4+IDJdID0gMzMsIGVbcyA+PiAyXSA9IHUsIFEoZiwgMSwgMTgxMjcsIHMpOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGwgPSBlW2kgKyA1NTk2ID4+IDJdLCBsIC0gMTAyNSA+Pj4gMCA8PSA0Mjk0OTY2Mjc0KSB7CiAgICAgICAgICAgICAgICAgIGVbcyArIDE2ID4+IDJdID0gbCwgUShmLCAxLCAxODM3NiwgcyArIDE2IHwgMCk7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAodCA9IGVbaSArIDU2MDAgPj4gMl0sIHQgLSAxMDI1ID4+PiAwIDw9IDQyOTQ5NjYyNzQpIHsKICAgICAgICAgICAgICAgICAgZVtzICsgMzIgPj4gMl0gPSB0LCBRKGYsIDEsIDE4MzAxLCBzICsgMzIgfCAwKTsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgIGlmIChaKHQsIGwpID4+PiAwIDwgNDA5NykgewogICAgICAgICAgICAgICAgICAgICAgZm9yIChuID0gbDsgbyA9IGssIGsgPSBrICsgMSB8IDAsIGggPSBuID4+PiAwID4gMywgbiA9IG4gPj4+IDEgfCAwLCAhIWg7ICkKICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPSAwLCAodCB8IDApID49IDIpCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobiA9IHQ7IGsgPSBrICsgMSB8IDAsIGggPSBuID4+PiAwID4gMywgbiA9IG4gPj4+IDEgfCAwLCAhIWg7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoKGwgfCAwKSAhPSAyIDw8IG8pIHsKICAgICAgICAgICAgICAgICAgICAgICAgZVtzICsgMzUyID4+IDJdID0gbCwgUShmLCAxLCAxODM3NiwgcyArIDM1MiB8IDApLCBuID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlmICgodCB8IDApICE9IDEgPDwgaykgewogICAgICAgICAgICAgICAgICAgICAgICBlW3MgKyAzMzYgPj4gMl0gPSB0LCBRKGYsIDEsIDE4Mzc2LCBzICsgMzM2IHwgMCksIG4gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgazogewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWVbaSArIDI0ID4+IDJdKQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZVtpICsgMzIgPj4gMl0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMCwgUShmLCAxLCA5NDMzLCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW2kgKyA0Nzg4ID4+IDJdID49IDExKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZVtzICsgMzA0ID4+IDJdID0gMTAsIFEoZiwgMSwgMTc1NDMsIHMgKyAzMDQgfCAwKSwgbiA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHUgfCAwKSA8IDExKQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgIGVbcyArIDMyMCA+PiAyXSA9IDEwLCBRKGYsIDEsIDE3NjAzLCBzICsgMzIwIHwgMCksIG4gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgayA9IGVbciArIDE2ID4+IDJdLCBlW0EgKyAxMDQgPj4gMl0gPSAxLCBlW0EgKyAxMDggPj4gMl0gPSAxLCBlW0EgKyA2OCA+PiAyXSA9IGs7CiAgICAgICAgICAgICAgICAgICAgICBrOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChHMltpICsgMTg3MDQgPj4gMV0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgdCA9IGVbaSArIDE4Njc2ID4+IDJdIC0gMSB8IDAsIHQgPj4+IDAgPD0gMiAmJiAobCA9IHQgPDwgMiwgZVtpICsgMTg3MDAgPj4gMl0gPSBlW2wgKyAzMTY2NCA+PiAyXSwgbiA9IHQgPDwgNCwgayA9IG4gJiAzMSwgKG4gJiA2MykgPj4+IDAgPj0gMzIgPyBrID0gNCA+Pj4gayB8IDAgOiBrID0gKCgxIDw8IGspIC0gMSAmIDQpIDw8IDMyIC0gayB8IDE5NjYxMSA+Pj4gaywgdTJbaSArIDE4NzA0ID4+IDFdID0gaywgZVtpICsgMTg2ODAgPj4gMl0gPSBlW2wgKyAzMTY3NiA+PiAyXSksIG4gPSAzOwogICAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgQTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoayA9IGVbaSArIDE4Njg0ID4+IDJdLCBrIC0gMyB8IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9IDMzMDI0LCAoayB8IDApID09IDMzMDI0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID4+PiAwIDw9IDIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSA0OwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICB1MltpICsgMTg3MDQgPj4gMV0gPSBuOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIFEoZiwgMiwgNTQ4NCwgMCk7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICB0ID0gZVtpICsgNDc4OCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgIGs6IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgayA9IDEsIGVbaSArIDIwID4+IDJdID0gMSwgZVtpICsgNDc4OCA+PiAyXSA9IDEsIGVbaSArIDQ3OTIgPj4gMl0gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbaSArIDIwID4+IDJdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPSAxLCAodCB8IDApID09IDEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodCA9IGkgKyA0NzkyIHwgMCwgbiA9IDE7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPID0gR1t0ICsgKG4gPDwgMikgPj4gMl0sIHAyID0gTyA8PSBXKDEpID8gVygxKSA6IE8sIGsgPSBuIC0gMSB8IDAsIEIgPSBHW3QgKyAoayA8PCAyKSA+PiAyXSwgbSA9IEIgPD0gVygxKSA/IFcoMSkgOiBCOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShwMiA+PSBtKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRCA9ICtPLCBPICE9IHAyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHkgPSArQiwgZzIgPSArcDIsIEIgIT0gbSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUTJbcyArIDE2OCA+PiAzXSA9IG0sIFEyW3MgKyAxNjAgPj4gM10gPSB5LCBlW3MgKyAxNTIgPj4gMl0gPSBrLCBRMltzICsgMTQ0ID4+IDNdID0gZzIsIFEyW3MgKyAxMzYgPj4gM10gPSBELCBlW3MgKyAxMjggPj4gMl0gPSBuLCBRKGYsIDIsIDI1ODg0LCBzICsgMTI4IHwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRMltzICsgMjA4ID4+IDNdID0geSwgZVtzICsgMjAwID4+IDJdID0gaywgUTJbcyArIDE5MiA+PiAzXSA9IGcyLCBRMltzICsgMTg0ID4+IDNdID0gRCwgZVtzICsgMTc2ID4+IDJdID0gbiwgUShmLCAyLCA5NzM1LCBzICsgMTc2IHwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeSA9ICtCLCBCICE9IG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRMltzICsgMjU2ID4+IDNdID0gbSwgUTJbcyArIDI0OCA+PiAzXSA9IHksIGVbcyArIDI0MCA+PiAyXSA9IGssIFEyW3MgKyAyMzIgPj4gM10gPSBELCBlW3MgKyAyMjQgPj4gMl0gPSBuLCBRKGYsIDIsIDI1ODAwLCBzICsgMjI0IHwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRMltzICsgMjk2ID4+IDNdID0geSwgZVtzICsgMjg4ID4+IDJdID0gaywgUTJbcyArIDI4MCA+PiAzXSA9IEQsIGVbcyArIDI3MiA+PiAyXSA9IG4sIFEoZiwgMiwgOTY2OSwgcyArIDI3MiB8IDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPSBlW2kgKyA0Nzg4ID4+IDJdLCBuID0gbiArIDEgfCAwLCAhKGsgPj4+IDAgPiBuID4+PiAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlW2kgKyAyOCA+PiAyXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSB0OwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPSAxLCAodCB8IDApID09IDEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsID0gaSArIDUxOTIgfCAwLCBrID0gdCwgbiA9IDE7IEIgPSBHW2wgKyAobiA8PCAyKSA+PiAyXSwgdCA9IG4gLSAxIHwgMCwgbSA9IEdbbCArICh0IDw8IDIpID4+IDJdLCAhKEIgPCBtKSB8IChrIC0gMSB8IDApID09IChuIHwgMCkgJiBCID09IFcoMCkgfHwgKFEyW3MgKyAxMjAgPj4gM10gPSBtLCBlW3MgKyAxMTIgPj4gMl0gPSB0LCBlW3MgKyA5NiA+PiAyXSA9IG4sIFEyW3MgKyAxMDQgPj4gM10gPSBCLCBRKGYsIDIsIDk4MTksIHMgKyA5NiB8IDApLCBrID0gZVtpICsgNDc4OCA+PiAyXSksIG4gPSBuICsgMSB8IDAsIG4gPj4+IDAgPCBrID4+PiAwOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPSBlW2kgKyAxODcwMCA+PiAyXSwgKG4gfCAwKSA8PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChCID0gR1soKGsgPDwgMikgKyBpIHwgMCkgKyA0Nzg4ID4+IDJdLCBCID4gVygwKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBlW3IgKyAyNCA+PiAyXSwgQiA9IFcoK2RbciArIDE2ID4+IDJdICogK2RbayArIDggPj4gMl0gKiArZFtrICsgMTIgPj4gMl0gKiArZFtrICsgMjQgPj4gMl0gLyAoK0IgKiA4ICogK2RbayA+PiAyXSAqICtkW2sgKyA0ID4+IDJdKSksIHQgPSBCID4gVygyMTQ3NDgzNjQ4KSwgQiA9IFcoTmUoQikpOwogICAgICAgICAgICAgICAgICAgICAgICAgIGs6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChXKFIyKEIpKSA8IFcoMjE0NzQ4MzY0OCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgayA9IH5+QjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSAtMjE0NzQ4MzY0ODsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgZVtpICsgMTg3MDAgPj4gMl0gPSB0ID8gMjE0NzQ4MzY0NyA6IGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlW2kgKyAxODcwMCA+PiAyXSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBpZiAoKGsgfCAwKSAhPSAxIHwgKEcyW2kgKyAxODcwNCA+PiAxXSAtIDEwMjQgJiA2NTUzNSkgPj4+IDAgPiAxNDM1IHwgR1tpICsgNDc5MiA+PiAyXSAhPSBXKDApIHx8ICh0ID0gZVtyICsgMjQgPj4gMl0sIEdbaSArIDQ3OTIgPj4gMl0gPSBXKFooWihaKGVbdCArIDggPj4gMl0sIGVbciArIDE2ID4+IDJdKSwgZVt0ICsgMTIgPj4gMl0pLCBlW3QgKyAyNCA+PiAyXSkgPj4+IDApIC8gVyhaKGVbdCArIDQgPj4gMl0sIFoobiwgZVt0ID4+IDJdKSkgPDwgMyA+Pj4gMCkpLCAhaykKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgIGZvciAodCA9IGVbciArIDI0ID4+IDJdLCBCID0gVygrZFtyICsgMTYgPj4gMl0gKiArZFt0ICsgOCA+PiAyXSAqICtkW3QgKyAxMiA+PiAyXSAqICtkW3QgKyAyNCA+PiAyXSAvICgrKG4gPj4+IDApICogOCAqICtkW3QgPj4gMl0gKiArZFt0ICsgNCA+PiAyXSkpLCB0ID0gaSArIDQ3OTIgfCAwLCBuID0gMCwgbCA9IDE7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvID0gdCArIChuIDw8IDIpIHwgMCwgIShCID4gR1tvID4+IDJdKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID0gbiArIDEgfCAwLCAobiB8IDApICE9IChrIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCAmIDEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEdbbyA+PiAyXSA9IEIsIGwgPSAwLCBuID0gbiArIDEgfCAwLCAobiB8IDApID09IChrIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBRKGYsIDEsIDE4NjY4LCAwKTsKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIFEoZiwgMiwgNTA3OCwgMCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICBrOiB7CiAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID0gRzJbaSArIDE4NzA0ID4+IDFdLCAobiAtIDMgJiA2NTUzNSkgPj4+IDAgPj0gNCAmIChuIC0gMTAyNCAmIDY1NTM1KSA+Pj4gMCA+IDE0MzUgfHwgKGVbQSArIDE2ID4+IDJdID0gMSwgbiA9IEcyW2kgKyAxODcwNCA+PiAxXSwgKG4gLSAzICYgNjU1MzUpID4+PiAwID4gMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPSAxMDgxNiwgKG4gLSA1ICYgNjU1MzUpID4+PiAwIDwgMikKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICBsID0gWCAtIDQ4IHwgMCwgWCA9IGwsIGVbaSArIDE2ID4+IDJdID0gMSwgZVtpID4+IDJdID0gMCwgZVtpICsgNCA+PiAyXSA9IDAsIHUyW2kgKyAxODY4OCA+PiAxXSA9IDE3MTUzLCBlW2kgKyAxODE4MCA+PiAyXSA9IDAsIGVbaSArIDE4MTg0ID4+IDJdID0gMCwgZVtpICsgOCA+PiAyXSA9IDAsIGVbaSArIDEyID4+IDJdID0gMSwgZVtpICsgMTgxODggPj4gMl0gPSAxLCBlW2kgKyAxODE5MiA+PiAyXSA9IDEsIGVbaSArIDU2MTIgPj4gMl0gPSAtMSwgZVtpICsgNTU5NiA+PiAyXSA9IDMyLCBlW2kgKyA1NjAwID4+IDJdID0gMzIsIGVbaSArIDU2MDQgPj4gMl0gPSAwLCBlW2kgKyA1NjA4ID4+IDJdID0gMSwgayA9IGVbaSArIDQ3ODggPj4gMl0sIChrIHwgMCkgPj0gMiAmJiAodCA9IGkgKyA0NzkyIHwgMCwgQiA9IEdbKHQgKyAoayA8PCAyKSB8IDApIC0gNCA+PiAyXSwgZVtsICsgMzIgPj4gMl0gPSBrLCBRMltsICsgNDAgPj4gM10gPSBCLCBRKGYsIDIsIDIxNjgsIGwgKyAzMiB8IDApLCBHW2kgKyA0NzkyID4+IDJdID0gR1sodCArIChlW2kgKyA0Nzg4ID4+IDJdIDw8IDIpIHwgMCkgLSA0ID4+IDJdLCBlW2kgKyA0Nzg4ID4+IDJdID0gMSksIHQgPSBlW2kgKyA1NTkyID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICBBOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgbDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoRzJbaSArIDE4NzA0ID4+IDFdIC0gMyB8IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrID0gNiwgKHQgfCAwKSA8PSA2KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMjY3ODk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHQgfCAwKSA8PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2wgKyAxNiA+PiAyXSA9IHQgKyAxLCBRKGYsIDIsIDI2OTM1LCBsICsgMTYgfCAwKSwgZVtpICsgNTU5MiA+PiAyXSA9IDEsIGVbaSArIDQwID4+IDJdID0gZVtpICsgNDAgPj4gMl0gfCAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPj4+IDAgPCA4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSA3LCBuID0gMjY2MzU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtsID4+IDJdID0gdCArIDEsIFEoZiwgMiwgbiwgbCksIGVbaSArIDU1OTIgPj4gMl0gPSBrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IGsgLSAxIHwgMCwgZVtpICsgNTYyMCA+PiAyXSA9IG4sIGVbaSArIDQwID4+IDJdID0gZVtpICsgNDAgPj4gMl0gfCAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbaSArIDQwID4+IDJdID0gZVtpICsgNDAgPj4gMl0gfCAxLCAodCB8IDApICE9IDEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbaSArIDU3NTYgPj4gMl0gPSAxMjgsIGVbaSArIDU2MjAgPj4gMl0gPSAxLCBlW2kgKyA1NjI0ID4+IDJdID0gMTI4LCB0ID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID0gdCAtIDEgfCAwLCBlW2kgKyA1NjIwID4+IDJdID0gbiwgayA9IHQsIChrIHwgMCkgPCAyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobyA9IGkgKyA1NzU2IHwgMCwgdSA9IGkgKyA1NjI0IHwgMCwgdCA9IDAsIG4gLSAxID4+PiAwID49IDMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHYgPSBuICYgLTQ7IGggPSB0IDw8IDIsIGVbaCArIHUgPj4gMl0gPSAyNTYsIGVbbyArIGggPj4gMl0gPSAyNTYsIEMgPSBoIHwgNCwgZVtDICsgdSA+PiAyXSA9IDI1NiwgZVtvICsgQyA+PiAyXSA9IDI1NiwgQyA9IGggfCA4LCBlW0MgKyB1ID4+IDJdID0gMjU2LCBlW28gKyBDID4+IDJdID0gMjU2LCBoID0gaCB8IDEyLCBlW2ggKyB1ID4+IDJdID0gMjU2LCBlW28gKyBoID4+IDJdID0gMjU2LCB0ID0gdCArIDQgfCAwLCBnID0gZyArIDQgfCAwLCAodiB8IDApICE9IChnIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID0gbiAmIDMsIG4pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgaCA9IHQgPDwgMiwgZVtoICsgdSA+PiAyXSA9IDI1NiwgZVtvICsgaCA+PiAyXSA9IDI1NiwgdCA9IHQgKyAxIHwgMCwgYSA9IGEgKyAxIHwgMCwgKG4gfCAwKSAhPSAoYSB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlW2kgKyA0NCA+PiAyXSA9IDQsIGsgPSAwLCBHMltpICsgMTg3MDQgPj4gMV0gPT0gNCAmJiAoZVtpICsgMjQ0ID4+IDJdID0gMSwgZVtpICsgODAgPj4gMl0gPSA0LCBlW2kgKyA2NCA+PiAyXSA9IDMsIGVbaSArIDU2ID4+IDJdID0gMSwgZVtpICsgNDggPj4gMl0gPSAwLCBlW2kgKyA1MiA+PiAyXSA9IDAsIGVbaSArIDk2ID4+IDJdID0gMSwgZVtpICsgMjI4ID4+IDJdID0gNCwgZVtpICsgMjEyID4+IDJdID0gMywgZVtpICsgMjA4ID4+IDJdID0gdCwgZVtpICsgMjAwID4+IDJdID0gMCwgZVtpICsgMjA0ID4+IDJdID0gMSwgayA9IHQgLSAxIHwgMCwgZVtpICsgNjAgPj4gMl0gPSBrLCBlW2kgKyAxOTYgPj4gMl0gPSBrLCBrID0gMiksIGVbaSArIDIwID4+IDJdID0gMSwgZVtpICsgNDc4NCA+PiAyXSA9IGssIGsgPSBlW2kgKyAxODcwMCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgQTogewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoayB8IDApIDw9IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbaSArIDE4NzAwID4+IDJdID0gMTMwMjA4MywgUShmLCAyLCAyMjU3NywgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoayA+Pj4gMCA8IDEzMDIwODQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgIFEoZiwgMiwgMTk5MDEsIDApLCBlW2kgKyAxODcwMCA+PiAyXSA9IDEzMDIwODM7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgayA9IGVbaSArIDE4NjgwID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICBBOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChrIHwgMCkgPD0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtpICsgMTg2ODAgPj4gMl0gPSAxMDQxNjY2LCBRKGYsIDIsIDIyNDI4LCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrID4+PiAwIDwgMTA0MTY2NykKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgUShmLCAyLCAxOTcyOCwgMCksIGVbaSArIDE4NjgwID4+IDJdID0gMTA0MTY2NjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBrID0gZVtyICsgMjQgPj4gMl0sIEdbaSArIDQ3OTIgPj4gMl0gPSBXKFooWihaKGVbayArIDggPj4gMl0sIGVbciArIDE2ID4+IDJdKSwgZVtrICsgMTIgPj4gMl0pLCBlW2sgKyAyNCA+PiAyXSkgPj4+IDApIC8gVyhaKGVbayArIDQgPj4gMl0sIFooZVtpICsgMTg3MDAgPj4gMl0sIGVbayA+PiAyXSkpIDw8IDMgPj4+IDApLCBYID0gbCArIDQ4IHwgMCwgbyA9IEcyW2kgKyAxODcwNCA+PiAxXSwgbiA9IDAsIHQgPSBYIC0gODAgfCAwLCBYID0gdDsKICAgICAgICAgICAgICAgICAgICAgICAgQTogewogICAgICAgICAgICAgICAgICAgICAgICAgIGw6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPSBlW3IgKyAxNiA+PiAyXSwgKGsgfCAwKSA9PSAzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEgPSBlW3IgKyAyNCA+PiAyXSwgbCA9IGVbYSArIDMyID4+IDJdLCBrID0gZVthICsgMjQgPj4gMl0sIGwgfCAoayB8IDApICE9IDEyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGVbYSArIDg0ID4+IDJdLCBrID0gZVthICsgNzYgPj4gMl0sIGwgfCAoayB8IDApICE9IDEyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gZVthICsgMTM2ID4+IDJdLCBrID0gZVthICsgMTI4ID4+IDJdLCBsIHwgKGsgfCAwKSAhPSAxMikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChvIC0gMyB8IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrID0gZVthICsgMTIgPj4gMl0sIG4gPSBlW2EgKyA4ID4+IDJdLCBrID4+PiAwIDwgMTA4MSAmIG4gPj4+IDAgPD0gMjA0OCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVt0ICsgNCA+PiAyXSA9IGssIGVbdCA+PiAyXSA9IG4sIFEoZiwgMiwgMTU3NjEsIHQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPSBlW2EgKyAxMiA+PiAyXSwgbiA9IGVbYSArIDggPj4gMl0sIGsgPj4+IDAgPCAyMTYxICYgbiA+Pj4gMCA8PSA0MDk2KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW3QgKyAyMCA+PiAyXSA9IGssIGVbdCArIDE2ID4+IDJdID0gbiwgUShmLCAyLCAxNTU5NiwgdCArIDE2IHwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW3QgKyA0OCA+PiAyXSA9IGssIFEoZiwgMiwgMTYxNDksIHQgKyA0OCB8IDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IElbMjM0Nl0gfCBJWzIzNDddIDw8IDggfCAoSVsyMzQ4XSA8PCAxNiB8IElbMjM0OV0gPDwgMjQpLCBGW3QgKyA3NSB8IDBdID0gYSwgRlt0ICsgNzYgfCAwXSA9IGEgPj4+IDgsIEZbdCArIDc3IHwgMF0gPSBhID4+PiAxNiwgRlt0ICsgNzggfCAwXSA9IGEgPj4+IDI0LCBlW3QgKyA3MiA+PiAyXSA9IElbMjM0M10gfCBJWzIzNDRdIDw8IDggfCAoSVsyMzQ1XSA8PCAxNiB8IElbMjM0Nl0gPDwgMjQpLCBGW3QgLSAtNjQgfCAwXSA9IElbMjM0OV0sIGVbdCArIDMyID4+IDJdID0gbiwgZVt0ICsgMzYgPj4gMl0gPSBrLCBlW3QgKyA0MCA+PiAyXSA9IGwgPyB0ICsgNzIgfCAwIDogdCArIDU2IHwgMCwgayA9IElbMjM0NV0gfCBJWzIzNDZdIDw8IDggfCAoSVsyMzQ3XSA8PCAxNiB8IElbMjM0OF0gPDwgMjQpLCBlW3QgKyA1NiA+PiAyXSA9IElbMjM0MV0gfCBJWzIzNDJdIDw8IDggfCAoSVsyMzQzXSA8PCAxNiB8IElbMjM0NF0gPDwgMjQpLCBlW3QgKyA2MCA+PiAyXSA9IGssIFEoZiwgMiwgMTU5MzIsIHQgKyAzMiB8IDApOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoWCA9IHQgKyA4MCB8IDAsICFsKQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBpZiAoayA9IDEwODc4LCAobiAmIDY1NTM1KSA9PSA3IHx8IChrID0gMTA3NjgsIChuIC0gMjU2ICYgNjU1MzUpID4+PiAwIDwgNTI0KSkKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgIGlmICgobiAtIDEwMjQgJiA2NTUzNSkgPj4+IDAgPD0gMTQzNSkgewogICAgICAgICAgICAgICAgICAgICAgICBlW2kgKyA1NTk2ID4+IDJdICE9IDY0IHwgZVtpICsgNTYwMCA+PiAyXSAhPSA2NCB8fCAoZVtpICsgNTU5NiA+PiAyXSA9IDMyLCBlW2kgKyA1NjAwID4+IDJdID0gMzIpLCB0ID0gRzJbaSArIDE4NzA0ID4+IDFdLCB1MltpICsgMTg2ODggPj4gMV0gPSAxNzE1MywgZVtpICsgNDQgPj4gMl0gfHwgKGVbaSArIDQ0ID4+IDJdID0gNCksICh0ICYgNjUwMjQpICE9IDEwMjQgJiAodCAmIDY1MjgwKSAhPSAxNTM2IHx8IChlW2kgKyA1NjA4ID4+IDJdID0gMSksIGsgPSBlW2kgKyA1NTkyID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChrIHwgMCkgIT0gNikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbciA+PiAyXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgayA9IDY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoayA9IDYsIGVbciArIDQgPj4gMl0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBlW2kgPj4gMl0sIGsgPSBlWyhsID8gaSArIDEyIHwgMCA6IHIgKyA4IHwgMCkgPj4gMl0sIG4gPSA2OwogICAgICAgICAgICAgICAgICAgICAgICAgIEE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGw6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHQgLSAxMDI0ID4+PiA4IHwgMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPj4+IDAgPiAyMDQ3KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoayA+Pj4gMCA+IDEwMjMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoayA+Pj4gMCA+IDQwOTUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrID4+PiAwID4gMjA0NykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPj4+IDAgPiAxMDIzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA1OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoayA+Pj4gMCA+IDQwOTUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrID4+PiAwID4gMjA0NykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPj4+IDAgPCAxMDI0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gNTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbaSArIDU1OTIgPj4gMl0gPSBuOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBBOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWwgJiYgKGwgPSBlW3IgKyA4ID4+IDJdLCBrID0gbiAtIDEgfCAwLCB0ID0gMSA8PCBrLCBsID4+PiAwIDwgdCA+Pj4gMCB8IHQgPj4+IDAgPiBkW3IgKyAxMiA+PiAyXSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW2kgKyA1NTkyID4+IDJdID0gaywgdCA9IG4gLSAyIHwgMCwgbyA9IDEgPDwgdCwgbyA+Pj4gMCA8PSBsID4+PiAwICYgbyA+Pj4gMCA8PSBkW3IgKyAxMiA+PiAyXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbaSArIDU1OTIgPj4gMl0gPSB0LCBrID4+PiAwIDwgMikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgayA9IHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoayA9IG4gLSAzIHwgMCwgbyA9IDEgPDwgaywgIShvID4+PiAwID4gbCA+Pj4gMCB8IG8gPj4+IDAgPiBkW3IgKyAxMiA+PiAyXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbaSArIDU1OTIgPj4gMl0gPSBrLCB0ID4+PiAwIDwgMiB8fCAodCA9IG4gLSA0IHwgMCwgbyA9IDEgPDwgdCwgbyA+Pj4gMCA8PSBsID4+PiAwICYgbyA+Pj4gMCA8PSBkW3IgKyAxMiA+PiAyXSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW2kgKyA1NTkyID4+IDJdID0gdCwgayA+Pj4gMCA8IDIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPSBuIC0gNSB8IDAsIG8gPSAxIDw8IGssICEobyA+Pj4gMCA+IGwgPj4+IDAgfCBvID4+PiAwID4gZFtyICsgMTIgPj4gMl0pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW2kgKyA1NTkyID4+IDJdID0gaywgdCA+Pj4gMCA8IDIgfHwgKHQgPSBuIC0gNiB8IDAsIG4gPSAxIDw8IHQsIG4gPj4+IDAgPD0gbCA+Pj4gMCAmIG4gPj4+IDAgPD0gZFtyICsgMTIgPj4gMl0pKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICBlW2kgKyA1NTkyID4+IDJdID0gdCwgayA9IHQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW2kgKyA0MCA+PiAyXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbaSArIDQwID4+IDJdID0gMSwgKGsgfCAwKSA9PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2kgKyA1NzU2ID4+IDJdID0gMTI4LCBlW2kgKyA1NjIwID4+IDJdID0gMSwgZVtpICsgNTYyNCA+PiAyXSA9IDEyODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1ID0gayAtIDEgfCAwLCBlW2kgKyA1NjIwID4+IDJdID0gdSwgKGsgfCAwKSA8IDIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gaSArIDU3NTYgfCAwLCBvID0gaSArIDU2MjQgfCAwLCBuID0gMCwgayAtIDIgPj4+IDAgPj0gMykKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaCA9IHUgJiAtNCwgbCA9IDA7IGsgPSBhIDw8IDIsIGVbayArIG8gPj4gMl0gPSAyNTYsIGVbayArIHQgPj4gMl0gPSAyNTYsIGcgPSBrIHwgNCwgZVtnICsgbyA+PiAyXSA9IDI1NiwgZVt0ICsgZyA+PiAyXSA9IDI1NiwgZyA9IGsgfCA4LCBlW2cgKyBvID4+IDJdID0gMjU2LCBlW3QgKyBnID4+IDJdID0gMjU2LCBrID0gayB8IDEyLCBlW2sgKyBvID4+IDJdID0gMjU2LCBlW2sgKyB0ID4+IDJdID0gMjU2LCBhID0gYSArIDQgfCAwLCBsID0gbCArIDQgfCAwLCAoaCB8IDApICE9IChsIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrID0gdSAmIDMsICFrKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgbCA9IGEgPDwgMiwgZVtsICsgbyA+PiAyXSA9IDI1NiwgZVt0ICsgbCA+PiAyXSA9IDI1NiwgYSA9IGEgKyAxIHwgMCwgbiA9IG4gKyAxIHwgMCwgKGsgfCAwKSAhPSAobiB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgayA9IFggLSA0MDAgfCAwLCBYID0gaywgbCA9IGVbKGVbaSA+PiAyXSA/IGkgKyAxMiB8IDAgOiByICsgOCB8IDApID4+IDJdLCB0ID0gZVtpICsgNTU5MiA+PiAyXSwgbyA9IEcyW2kgKyAxODcwNCA+PiAxXSwgbiA9IG8gJiAxNTsKICAgICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICAgIEE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID4+PiAwID49IDEyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDMzNiA+PiAyXSA9IG4sIFEoZiwgMiwgMTEzMDEsIGsgKyAzMzYgfCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1ID0gbyA+Pj4gNCAmIDE1LCBoID0gRzJbKG4gPDwgMSkgKyAzMTMxMiA+PiAxXSwgYSA9IDEsIHUgPj4+IDAgPD0gaCA+Pj4gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDM2MCA+PiAyXSA9IHUsIGVbayArIDM1NiA+PiAyXSA9IG4sIGVbayArIDM1MiA+PiAyXSA9IGgsIFEoZiwgMiwgMTExNzcsIGsgKyAzNTIgfCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgbiA9IGVbciArIDE2ID4+IDJdLCBuID4+PiAwID49IDQgJiYgKGVbayArIDMyMCA+PiAyXSA9IG4sIFEoZiwgMiwgMTIyNjksIGsgKyAzMjAgfCAwKSwgYSA9IDApLCB1ID0gZVtyICsgNCA+PiAyXSwgaCA9IGVbciA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICAgIEE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAodSB8IDApICE9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9IDEsICF1KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAzMDggPj4gMl0gPSBuLCBlW2sgKyAzMDQgPj4gMl0gPSBoLCBRKGYsIDIsIDExNTIxLCBrICsgMzA0IHwgMCksIGEgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBlW2kgKyA0ID4+IDJdLCB1ID0gZVtpICsgOCA+PiAyXSwgbiB8IHUgJiYgKGVbayArIDI5MiA+PiAyXSA9IHUsIGVbayArIDI4OCA+PiAyXSA9IG4sIFEoZiwgMiwgMTE0MDcsIGsgKyAyODggfCAwKSwgYSA9IDApLCBoID0gbyAmIDY1MjgwOwogICAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlW2kgPj4gMl0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBlW3IgKyA4ID4+IDJdLCBuID0gZVtpICsgMTIgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgQTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoKG8gJiA2NTAyNCkgIT0gMTAyNCAmIChoIHwgMCkgIT0gMTUzNikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGcgPSBlW3IgKyAxMiA+PiAyXSwgdiA9IGVbaSArIDE2ID4+IDJdLCBnID4+PiAwIDw9IHYgPj4+IDAgJiBuID4+PiAwID49IHUgPj4+IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMjY4ID4+IDJdID0gZywgZVtrICsgMjY0ID4+IDJdID0gdSwgZVtrICsgMjYwID4+IDJdID0gdiwgZVtrICsgMjU2ID4+IDJdID0gbiwgUShmLCAyLCAxMjQxNCwgayArIDI1NiB8IDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPj4+IDAgPj0gdSA+Pj4gMCAmIGRbaSArIDE2ID4+IDJdID49IGRbciArIDEyID4+IDJdIHx8ICh1ID0gZVtpICsgMTYgPj4gMl0sIChuIHwgMCkgPT0gMTAyNCAmICh1IHwgMCkgPT0gMTAyNCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAyNzYgPj4gMl0gPSB1LCBlW2sgKyAyNzIgPj4gMl0gPSBuLCBRKGYsIDIsIDEwOTMzLCBrICsgMjcyIHwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBlW3IgKyAxNiA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChnID0gMDsgdSA9IGVbciArIDI0ID4+IDJdICsgWihnLCA1MikgfCAwLCBlW3UgKyAyNCA+PiAyXSAtIDggPj4+IDAgPD0gOCAmICFlW3UgKyAzMiA+PiAyXSB8fCAoYSA9IDAsIG4gPSBJWzIzNDZdIHwgSVsyMzQ3XSA8PCA4IHwgKElbMjM0OF0gPDwgMTYgfCBJWzIzNDldIDw8IDI0KSwgRltrICsgMzk1IHwgMF0gPSBuLCBGW2sgKyAzOTYgfCAwXSA9IG4gPj4+IDgsIEZbayArIDM5NyB8IDBdID0gbiA+Pj4gMTYsIEZbayArIDM5OCB8IDBdID0gbiA+Pj4gMjQsIGVbayArIDM5MiA+PiAyXSA9IElbMjM0M10gfCBJWzIzNDRdIDw8IDggfCAoSVsyMzQ1XSA8PCAxNiB8IElbMjM0Nl0gPDwgMjQpLCBGW2sgKyAzODQgfCAwXSA9IElbMjM0OV0sIG4gPSBJWzIzNDVdIHwgSVsyMzQ2XSA8PCA4IHwgKElbMjM0N10gPDwgMTYgfCBJWzIzNDhdIDw8IDI0KSwgZVtrICsgMzc2ID4+IDJdID0gSVsyMzQxXSB8IElbMjM0Ml0gPDwgOCB8IChJWzIzNDNdIDw8IDE2IHwgSVsyMzQ0XSA8PCAyNCksIGVbayArIDM4MCA+PiAyXSA9IG4sIG4gPSBlW3UgKyAzMiA+PiAyXSwgZVtrICsgMjQ0ID4+IDJdID0gZVt1ICsgMjQgPj4gMl0sIGVbayArIDI0MCA+PiAyXSA9IGcsIGVbayArIDI0OCA+PiAyXSA9IG4gPyBrICsgMzkyIHwgMCA6IGsgKyAzNzYgfCAwLCBRKGYsIDIsIDEyMDgwLCBrICsgMjQwIHwgMCksIG4gPSBlW3IgKyAxNiA+PiAyXSksIGcgPSBnICsgMSB8IDAsIGcgPj4+IDAgPCBuID4+PiAwOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFuIHx8IChuID0gZVtlW3IgKyAyNCA+PiAyXSA+PiAyXSwgKG4gfCAwKSAhPSAxICYmIChlW2sgKyAyMjQgPj4gMl0gPSBuLCBRKGYsIDIsIDE1MTA5LCBrICsgMjI0IHwgMCksIGEgPSAwKSwgbiA9IGVbZVtyICsgMjQgPj4gMl0gKyA0ID4+IDJdLCAobiB8IDApICE9IDEgJiYgKGVbayArIDIxMiA+PiAyXSA9IDAsIGVbayArIDIwOCA+PiAyXSA9IG4sIFEoZiwgMiwgMTMyNzMsIGsgKyAyMDggfCAwKSwgYSA9IDApLCBkW3IgKyAxNiA+PiAyXSA8IDIpIHx8IChuID0gZVtlW3IgKyAyNCA+PiAyXSArIDUyID4+IDJdLCBuIC0gMSA+Pj4gMCA+PSAyICYmIChlW2sgKyAxOTIgPj4gMl0gPSBuLCBRKGYsIDIsIDE1MDA3LCBrICsgMTkyIHwgMCksIGEgPSAwKSwgbiA9IGVbZVtyICsgMjQgPj4gMl0gKyA1NiA+PiAyXSwgKG4gfCAwKSAhPSAxICYmIChlW2sgKyAxODAgPj4gMl0gPSAxLCBlW2sgKyAxNzYgPj4gMl0gPSBuLCBRKGYsIDIsIDEzMjczLCBrICsgMTc2IHwgMCksIGEgPSAwKSwgZyA9IDIsIGRbciArIDE2ID4+IDJdIDw9IDIpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgbiA9IFooZywgNTIpLCB1ID0gbiArIGVbciArIDI0ID4+IDJdIHwgMCwgdiA9IGVbdSA+PiAyXSwgdSA9IGVbdSAtIDUyID4+IDJdLCAodiB8IDApICE9ICh1IHwgMCkgJiYgKGVbayArIDE2OCA+PiAyXSA9IHUsIGVbayArIDE2NCA+PiAyXSA9IHYsIGVbayArIDE2MCA+PiAyXSA9IGcgKyAxLCBRKGYsIDIsIDE1MzUzLCBrICsgMTYwIHwgMCksIGEgPSAwKSwgbiA9IGVbKG4gKyBlW3IgKyAyNCA+PiAyXSB8IDApICsgNCA+PiAyXSwgKG4gfCAwKSAhPSAxICYmIChlW2sgKyAxNDggPj4gMl0gPSBnLCBlW2sgKyAxNDQgPj4gMl0gPSBuLCBRKGYsIDIsIDEzMjczLCBrICsgMTQ0IHwgMCksIGEgPSAwKSwgZyA9IGcgKyAxIHwgMCwgZyA+Pj4gMCA8IGRbciArIDE2ID4+IDJdOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG8gLSAxMDI0ID4+PiA4IHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID4+PiAwID4gNSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBBOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodSA9IDEgPDwgbiwgISh1ICYgOSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHUgJiAxOCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodSA9IGVbciArIDI0ID4+IDJdLCBnID0gZVt1ICsgMTIgPj4gMl0sIHUgPSBlW3UgKyA4ID4+IDJdLCBnID4+PiAwIDwgMzExMyAmIHUgPj4+IDAgPD0gNDA5NikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDExNiA+PiAyXSA9IGcsIGVbayArIDExMiA+PiAyXSA9IHUsIFEoZiwgMiwgMTE5MzIsIGsgKyAxMTIgfCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1ID0gZVtyICsgMjQgPj4gMl0sIGcgPSBlW3UgKyAxMiA+PiAyXSwgdSA9IGVbdSArIDggPj4gMl0sIGcgPj4+IDAgPCAxNTU3ICYgdSA+Pj4gMCA8PSAyMDQ4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMDAgPj4gMl0gPSBnLCBlW2sgKyA5NiA+PiAyXSA9IHUsIFEoZiwgMiwgMTE2MzYsIGsgKyA5NiB8IDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHUgPSBlW3IgKyAyNCA+PiAyXSwgZyA9IGVbdSArIDEyID4+IDJdLCB1ID0gZVt1ICsgOCA+PiAyXSwgZyA+Pj4gMCA8IDYyMjUgJiB1ID4+PiAwIDw9IDgxOTIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTMyID4+IDJdID0gZywgZVtrICsgMTI4ID4+IDJdID0gdSwgUShmLCAyLCAxMTc4NCwgayArIDEyOCB8IDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGVbaSArIDU2MTIgPj4gMl0gIT0gLTEgJiYgKFEoZiwgMiwgMTI1NzAsIDApLCBhID0gMCksIHUgPSBlW2kgKyA1NTk2ID4+IDJdLCBnID0gZVtpICsgNTYwMCA+PiAyXSwgKHUgfCAwKSA9PSAzMiAmIChnIHwgMCkgPT0gMzIgfHwgKGVbayArIDg0ID4+IDJdID0gZywgZVtrICsgODAgPj4gMl0gPSB1LCBRKGYsIDIsIDEzMTQwLCBrICsgODAgfCAwKSwgYSA9IDApLCB1ID0gZVtpICsgNDQgPj4gMl0sICh1IHwgMCkgIT0gNCAmJiAoZVtrICsgNjQgPj4gMl0gPSB1LCBRKGYsIDIsIDE0ODc2LCBrIC0gLTY0IHwgMCksIGEgPSAwKSwgdSA9IGVbaSArIDQ3ODQgPj4gMl0sIHUgJiYgKGVbayArIDQ4ID4+IDJdID0gdSwgUShmLCAyLCAxNTQ4NSwgayArIDQ4IHwgMCksIGEgPSAwKSwgdSA9IGVbaSArIDU2MDQgPj4gMl0sIHUgJiYgKGVbayArIDMyID4+IDJdID0gdSwgUShmLCAyLCAxNTIwNiwgayArIDMyIHwgMCksIGEgPSAwKSwgdSA9IGVbaSArIDU2MDggPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgQTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgobyAmIDY1MDI0KSAhPSAxMDI0ICYgKGggfCAwKSAhPSAxNTM2KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodSB8IDApID09IDEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gPSAxMjk5MzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvID0gMTI4NDY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gMCwgUShmLCAyLCBvLCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgbyA9IGVbaSArIDQ3ODggPj4gMl0sIChvIHwgMCkgIT0gMSAmJiAoZVtrICsgMTYgPj4gMl0gPSBvLCBRKGYsIDIsIDEzMzg2LCBrICsgMTYgfCAwKSwgYSA9IDApOwogICAgICAgICAgICAgICAgICAgICAgICAgIEE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGw6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG4gLSAxIHwgMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0IC0gMiA+Pj4gMCA8IDUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAxNDYxNjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgLSAyID4+PiAwIDwgNikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IDE0NDk2OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCAtIDIgPj4+IDAgPCA3KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMTQyMzY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID4+PiAwID49IDIwNDgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0IC0gMiA+Pj4gMCA8IDUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMTQwOTY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA+Pj4gMCA8IDEwMjQgfCB0IC0gMiA+Pj4gMCA8IDQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAxMzY1NTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPj4+IDAgPj0gNDA5NikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgLSAyID4+PiAwIDwgNikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAxNDM1NjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID4+PiAwID49IDIwNDgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0IC0gMiA+Pj4gMCA8IDUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMTM4MDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA+Pj4gMCA8IDEwMjQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0IC0gMiA+Pj4gMCA+PSA0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA+Pj4gMCA+PSA4MTkyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCAtIDIgPj4+IDAgPCA3KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IDE0NzM2OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPj4+IDAgPj0gNDA5NikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgLSAyID4+PiAwIDwgNikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAxMzk0OTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID4+PiAwID49IDIwNDgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0IC0gMiA+Pj4gMCA8IDUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMTM4MDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA+Pj4gMCA8IDEwMjQgfCB0IC0gMiA+Pj4gMCA8IDQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAxMzUwODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayA+PiAyXSA9IHQgLSAxLCBRKGYsIDIsIG4sIGspLCBhID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBlW2kgKyA1NjIwID4+IDJdLCBlW2kgKyA1NTkyID4+IDJdICE9IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobCB8IDApIDw9IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHQgPSBpICsgNTc1NiB8IDAsIG4gPSBpICsgNTYyNCB8IDAsIGcgPSAwOyBvID0gZyA8PCAyLCBlW28gKyBuID4+IDJdID09IDI1NiAmIGVbdCArIG8gPj4gMl0gPT0gMjU2IHx8IChhID0gMCwgUShmLCAyLCAxMjcwMywgMCksIGwgPSBlW2kgKyA1NjIwID4+IDJdKSwgZyA9IGcgKyAxIHwgMCwgKGcgfCAwKSA8IChsIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoKGwgfCAwKSAhPSAxIHwgZVtpICsgNTYyNCA+PiAyXSAhPSAxMjgpICYgZVtpICsgNTc1NiA+PiAyXSA9PSAxMjgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSAwLCBRKGYsIDIsIDEyNzAzLCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoWCA9IGsgKyA0MDAgfCAwLCAhYSkKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPDwgMTYgPj4gMTYgPj0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gbiAmIDY1NTM1LCBrID0gMjM1NjksICh0IHwgMCkgPT0gMzI3NjgpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoKHQgfCAwKSA9PSAzMzAyNCkKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgIGsgPSAyMzUxMDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgUShmLCAyLCBrLCAwKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB1MltpICsgMTg3MDQgPj4gMV0gPSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZVtBICsgMTYwID4+IDJdID0gZVtpICsgMTg2ODAgPj4gMl0sIHUyW0EgKyA4MCA+PiAxXSA9IEcyW2kgKyAxODcwNCA+PiAxXTsKICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgaWYgKGVbaSArIDI0ID4+IDJdKSB7CiAgICAgICAgICAgICAgICAgICAgZVtBICsgMTc2ID4+IDJdID0gMjsKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChlW2kgKyAyOCA+PiAyXSkgewogICAgICAgICAgICAgICAgICAgIGVbQSArIDE3NiA+PiAyXSA9IDE7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlW0EgKyAxNzYgPj4gMl0gPSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGVbaSArIDI0ID4+IDJdKSB7CiAgICAgICAgICAgICAgICAgIGlmICh0ID0gWihaKGVbaSArIDQ3ODggPj4gMl0sIGVbaSArIDU1OTIgPj4gMl0pLCAxMiksIGsgPSBVMih0KSwgZVtBICsgMTY4ID4+IDJdID0gaywgIWspIHsKICAgICAgICAgICAgICAgICAgICBuID0gMCwgUShmLCAxLCAyNzcxOCwgMCk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBGMihrLCBlW2kgKyAzMiA+PiAyXSwgdCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlW0EgKyA5MiA+PiAyXSA9IGVbaSArIDEyID4+IDJdLCBlW0EgKyA5NiA+PiAyXSA9IGVbaSArIDE2ID4+IDJdLCBlW0EgKyA4NCA+PiAyXSA9IGVbaSArIDQgPj4gMl0sIGVbQSArIDg4ID4+IDJdID0gZVtpICsgOCA+PiAyXSwgayA9IGVbaSArIDM2ID4+IDJdOwogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICBpZiAoaykgewogICAgICAgICAgICAgICAgICAgIGlmIChrID0gVTIodWUoaykgKyAxIHwgMCksIGVbQSArIDEwMCA+PiAyXSA9IGssICFrKSB7CiAgICAgICAgICAgICAgICAgICAgICBuID0gMCwgUShmLCAxLCA5NDc3LCAwKTsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHQgPSBlW2kgKyAzNiA+PiAyXTsKICAgICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgICBrOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodCBeIGspICYgMykgewogICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBJW3QgfCAwXTsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ICYgMykKICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID0gSVt0IHwgMF0sIEZbayB8IDBdID0gbiwgIW4pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoayA9IGsgKyAxIHwgMCwgdCA9IHQgKyAxIHwgMCwgISh0ICYgMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPSBlW3QgPj4gMl0sICgobiB8IDE2ODQzMDA4IC0gbikgJiAtMjEzOTA2MjE0NCkgIT0gLTIxMzkwNjIxNDQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGVbayA+PiAyXSA9IG4sIGsgPSBrICsgNCB8IDAsIG4gPSBlW3QgKyA0ID4+IDJdLCB0ID0gdCArIDQgfCAwLCAoKDE2ODQzMDA4IC0gbiB8IG4pICYgLTIxMzkwNjIxNDQpID09IC0yMTM5MDYyMTQ0OyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgaWYgKEZbayB8IDBdID0gbiwgIShuICYgMjU1KSkKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBuID0gSVt0ICsgMSB8IDBdLCBGW2sgKyAxIHwgMF0gPSBuLCBrID0gayArIDEgfCAwLCB0ID0gdCArIDEgfCAwLCAhIW47ICkKICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChuID0gMCwgayA9IElbMzExOTNdIHwgSVszMTE5NF0gPDwgOCB8IChJWzMxMTk1XSA8PCAxNiB8IElbMzExOTZdIDw8IDI0KSwgdCA9IElbMzExODldIHwgSVszMTE5MF0gPDwgOCB8IChJWzMxMTkxXSA8PCAxNiB8IElbMzExOTJdIDw8IDI0KSwgRltzICsgMzg5IHwgMF0gPSB0LCBGW3MgKyAzOTAgfCAwXSA9IHQgPj4+IDgsIEZbcyArIDM5MSB8IDBdID0gdCA+Pj4gMTYsIEZbcyArIDM5MiB8IDBdID0gdCA+Pj4gMjQsIEZbcyArIDM5MyB8IDBdID0gaywgRltzICsgMzk0IHwgMF0gPSBrID4+PiA4LCBGW3MgKyAzOTUgfCAwXSA9IGsgPj4+IDE2LCBGW3MgKyAzOTYgfCAwXSA9IGsgPj4+IDI0LCBrID0gZVs3Nzk3XSwgZVtzICsgMzg0ID4+IDJdID0gZVs3Nzk2XSwgZVtzICsgMzg4ID4+IDJdID0gaywgayA9IGVbNzc5NV0sIGVbcyArIDM3NiA+PiAyXSA9IGVbNzc5NF0sIGVbcyArIDM4MCA+PiAyXSA9IGssIGsgPSBlWzc3OTNdLCBlW3MgKyAzNjggPj4gMl0gPSBlWzc3OTJdLCBlW3MgKyAzNzIgPj4gMl0gPSBrLCB0ID0gVTIodWUoMzIzMykgKyAyOSB8IDApLCBlW0EgKyAxMDAgPj4gMl0gPSB0LCAhdCkgewogICAgICAgICAgICAgICAgICAgIFEoZiwgMSwgOTUzMSwgMCk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlW3MgKyA4NCA+PiAyXSA9IDMyMzMsIGVbcyArIDgwID4+IDJdID0gcyArIDM2OCwgbiA9IFggLSAxNiB8IDAsIFggPSBuLCBsID0gcyArIDgwIHwgMCwgZVtuICsgMTIgPj4gMl0gPSBsLCBrID0gWCAtIDE2MCB8IDAsIFggPSBrLCBhID0gayArIDggfCAwLCBGMihhLCA0ODM4NCwgMTQ0KSwgZVtrICsgNTIgPj4gMl0gPSB0LCBlW2sgKyAyOCA+PiAyXSA9IHQsIG8gPSAtMiAtIHQgfCAwLCBvID0gbyA+Pj4gMCA+IDIxNDc0ODM2NDcgPyAyMTQ3NDgzNjQ3IDogbywgZVtrICsgNTYgPj4gMl0gPSBvLCBvID0gdCArIG8gfCAwLCBlW2sgKyAzNiA+PiAyXSA9IG8sIGVbayArIDI0ID4+IDJdID0gbywgSWkoYSwgMTM3NywgbCwgMCwgMCksICh0IHwgMCkgIT0gLTIgJiYgKHQgPSBlW2sgKyAyOCA+PiAyXSwgRlt0IC0gKCh0IHwgMCkgPT0gZVtrICsgMjQgPj4gMl0pIHwgMF0gPSAwKSwgWCA9IGsgKyAxNjAgfCAwLCBYID0gbiArIDE2IHwgMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgaWYgKGVbaSA+PiAyXSkgewogICAgICAgICAgICAgICAgICAgIGlmIChrID0gZVtBICsgOTIgPj4gMl0sICFrKSB7CiAgICAgICAgICAgICAgICAgICAgICBuID0gMCwgUShmLCAxLCA5NDEzLCAwKTsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICh0ID0gZVtBICsgOTYgPj4gMl0sICF0KSB7CiAgICAgICAgICAgICAgICAgICAgICBuID0gMCwgUShmLCAxLCA0NzQwLCAwKTsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChsID0gZVtyICsgOCA+PiAyXSAtIGVbQSArIDg0ID4+IDJdIHwgMCwgYSA9IGwsIG4gPSBsICsgayB8IDAsIG8gPSBrID4+IDMxLCBsID0gbyArIChsID4+IDMxKSB8IDAsIGwgPSBuID4+PiAwIDwgYSA+Pj4gMCA/IGwgKyAxIHwgMCA6IGwsIGsgPSB6MChuIC0gMSB8IDAsIGwgLSAhbiB8IDAsIGssIG8pLCBlW0EgKyAxMDQgPj4gMl0gPSBrLCBsID0gZVtyICsgMTIgPj4gMl0gLSBlW0EgKyA4OCA+PiAyXSB8IDAsIGEgPSBsLCBuID0gbCArIHQgfCAwLCBvID0gdCA+PiAzMSwgbCA9IG8gKyAobCA+PiAzMSkgfCAwLCBsID0gbiA+Pj4gMCA8IGEgPj4+IDAgPyBsICsgMSB8IDAgOiBsLCB0ID0gejAobiAtIDEgfCAwLCBsIC0gIW4gfCAwLCB0LCBvKSwgZVtBICsgMTA4ID4+IDJdID0gdCwgayA+Pj4gMCA8PSA2NTUzNSAvICh0ID4+PiAwKSA+Pj4gMCkKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgZVtzICsgNjggPj4gMl0gPSB0LCBlW3MgKyA2NCA+PiAyXSA9IGssIFEoZiwgMSwgMjU0NzUsIHMgLSAtNjQgfCAwKSwgbiA9IDA7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlW0EgKyA5MiA+PiAyXSA9IGVbciArIDggPj4gMl0gLSBlW0EgKyA4NCA+PiAyXSwgZVtBICsgOTYgPj4gMl0gPSBlW3IgKyAxMiA+PiAyXSAtIGVbQSArIDg4ID4+IDJdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKElbaSArIDE4Njg4IHwgMF0gJiYgKEZbQSArIDE3MiB8IDBdID0gSVtpICsgMTg2ODkgfCAwXSwgRltBICsgMTgwIHwgMF0gPSBJW0EgKyAxODAgfCAwXSB8IDEpLCBrID0gRTIoWihlW0EgKyAxMDggPj4gMl0sIGVbQSArIDEwNCA+PiAyXSksIDU2NDQpLCBlW0EgKyAxNTYgPj4gMl0gPSBrLCBrKSB7CiAgICAgICAgICAgICAgICAgIGlmIChaKGVbQSArIDEwOCA+PiAyXSwgZVtBICsgMTA0ID4+IDJdKSkKICAgICAgICAgICAgICAgICAgICBmb3IgKFkyID0gaSArIDU3NTYgfCAwLCBYMiA9IGkgKyA1NjI0IHwgMCwgUzIgPSBpICsgOTYgfCAwLCBEMiA9IGkgKyA0OCB8IDAsIFAyID0gaSArIDUxOTIgfCAwLCB4MiA9IGkgKyA0NzkyIHwgMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChhID0gZVtBICsgMTc2ID4+IDJdLCB3ID0gZVtBICsgMTU2ID4+IDJdICsgWihmMiwgNTY0NCkgfCAwLCBvID0gZVtpICsgNDc4OCA+PiAyXSwgZVt3ICsgOCA+PiAyXSA9IG8sIG8pCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoayA9IEcyW0EgKyA4MCA+PiAxXSwgdSA9IChrIC0gMyAmIDY1NTM1KSA+Pj4gMCA8IDQgfCAoayAtIDEwMjQgJiA2NTUzNSkgPj4+IDAgPCAxNDM2LCBsID0gdyArIDUxODQgfCAwLCB0ID0gdyArIDIwIHwgMCwgbiA9IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChhIHwgMCkgIT0gMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gbiA8PCAyLCBHW2sgKyBsID4+IDJdID0gR1trICsgUDIgPj4gMl0sIGcgPSA0NzkyLCBrID0gdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnID0gNTE5MiwgayA9IGwsIChhIHwgMCkgPT0gMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPSBuIDw8IDIsIG0gPSBHW2sgKyB4MiA+PiAyXSwgR1trICsgdCA+PiAyXSA9IG0sIEIgPSBXKDApLCBrID0gdCwgIShtIDw9IFcoMSkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgPSBHWyhpICsgZyB8IDApICsgKG4gPDwgMikgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBHWyhuIDw8IDIpICsgayA+PiAyXSA9IEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID0gbiArIDEgfCAwLCAobyB8IDApID09IChuIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgZVt3ID4+IDJdID0gZVtpICsgNDAgPj4gMl0sIGVbdyArIDQgPj4gMl0gPSBlW2kgKyA0NCA+PiAyXSwgZVt3ICsgMTYgPj4gMl0gPSBGW2kgKyAxODY5MCB8IDBdLCBGW3cgKyA1NjQwIHwgMF0gPSBJW3cgKyA1NjQwIHwgMF0gJiAyNTE7CiAgICAgICAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICBrOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEUgPSBlW2kgKyA0Nzg0ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobCA9IHcgKyA0MjQgfCAwLCBvID0gZjIgKyAxIHwgMCwgYSA9IDAsIGcgPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKG8gfCAwKSA9PSBlW1ooYSwgMTQ4KSArIFMyID4+IDJdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSBaKGcsIDE0OCksIGsgPSB0ICsgRDIgfCAwLCB1ID0gZVtrICsgNCA+PiAyXSwgbiA9IGVbciArIDE2ID4+IDJdLCB1ID4+PiAwID49IG4gPj4+IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSBlW2sgPj4gMl0sIHQgPSB0ICsgbCB8IDAsIGVbdCArIDQgPj4gMl0gPSB1LCBlW3QgPj4gMl0gPSBoLCBlW3QgKyA4ID4+IDJdID0gZVtrICsgOCA+PiAyXSwgZVt0ICsgMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSwgdSA9IGVbayArIDE2ID4+IDJdLCBlW3QgKyAxNiA+PiAyXSA9IG4gPj4+IDAgPiB1ID4+PiAwID8gdSA6IG4sIGVbdCArIDMyID4+IDJdID0gZVtrICsgMzIgPj4gMl0sIGVbdCArIDQ4ID4+IDJdID0gZVtrICsgNDggPj4gMl0sIGcgPSBnICsgMSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEgPSBhICsgMSB8IDAsIChFIHwgMCkgPT0gKGEgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSAwLCBKID0gZVtpICsgNDc4OCA+PiAyXSwgcCA9IGVbaSArIDU1OTIgPj4gMl0sIHUgPSBlW3IgKyAxNiA+PiAyXSwgaiA9IFoocCwgdSksIGMgPSBFMihaKEosIGopLCA0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGw6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoeCA9IGYyICsgMSB8IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgPSBaKGssIDE0OCkgKyBEMiB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHggfCAwKSAhPSBlW3YgKyA0OCA+PiAyXSB8fCAobyA9IGVbdiA+PiAyXSwgdCA9IGVbdiArIDEyID4+IDJdLCBvID4+PiAwID49ICh0ID4+PiAwIDwgcCA+Pj4gMCA/IHQgOiBwKSA+Pj4gMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoYSA9IFoodSwgbyksIEggPSBlW3YgKyAxNiA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID0gZVt2ICsgNCA+PiAyXSwgbiA+Pj4gMCA8ICh1ID4+PiAwID4gSCA+Pj4gMCA/IEggOiB1KSA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGwgPSBuICsgYSB8IDAsIGggPSBlW3YgKyA4ID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChDID0gMCwgdCA9IGwsIGwgPSB0ICsgMSB8IDAsIGggPj4+IDAgPCBKID4+PiAwID8gaCA6IEopIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBlW2MgKyAodCA8PCAyKSA+PiAyXSA9IDEsIHQgPSB0ICsgaiB8IDAsIEMgPSBDICsgMSB8IDAsIGggPSBlW3YgKyA4ID4+IDJdLCBDID4+PiAwIDwgKGggPj4+IDAgPCBKID4+PiAwID8gaCA6IEopID4+PiAwOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEggPSBlW3YgKyAxNiA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPSBuICsgMSB8IDAsICEobiA+Pj4gMCA8ICh1ID4+PiAwID4gSCA+Pj4gMCA/IEggOiB1KSA+Pj4gMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gZVt2ICsgMTIgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA9IGEgKyB1IHwgMCwgbyA9IG8gKyAxIHwgMCwgIShvID4+PiAwIDwgKHQgPj4+IDAgPCBwID4+PiAwID8gdCA6IHApID4+PiAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrID0gayArIDEgfCAwLCAoRSB8IDApID09IChrIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF1IHwgKCFKIHwgIXApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2ID0gYyArIDEyIHwgMCwgRSA9IGMgKyA4IHwgMCwgeCA9IGMgKyA0IHwgMCwgVSA9IHUgJiAtNCwgYSA9IHUgJiAzLCBuID0gMCwgUCA9IHUgLSAxID4+PiAwIDwgMywgaCA9IDAsIEggPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGsgPSBuLCBvID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQyA9IDAsIHQgPSBrLCAhUCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBsID0gdCA8PCAyLCBoID0gZVtsICsgYyA+PiAyXSAhPSAxIHwgaCB8IGVbbCArIHggPj4gMl0gIT0gMSB8IGVbbCArIEUgPj4gMl0gIT0gMSB8IGVbbCArIHYgPj4gMl0gIT0gMSwgdCA9IHQgKyA0IHwgMCwgQyA9IEMgKyA0IHwgMCwgKFUgfCAwKSAhPSAoQyB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQyA9IDAsIGEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgaCA9IGVbYyArICh0IDw8IDIpID4+IDJdICE9IDEgfCBoLCB0ID0gdCArIDEgfCAwLCBDID0gQyArIDEgfCAwLCAoYSB8IDApICE9IChDIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrID0gayArIHUgfCAwLCBvID0gbyArIDEgfCAwLCAocCB8IDApID09IChvIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9IG4gKyBqIHwgMCwgSCA9IEggKyAxIHwgMCwgKEogfCAwKSA9PSAoSCB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUShmLCAxLCAxODAzNiwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFIoYyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRKGYsIDEsIDE5NjgwLCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZbdyArIDU2NDAgfCAwXSA9IElbdyArIDU2NDAgfCAwXSB8IDQsIGsgPSBnIC0gMSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW3cgKyA0MjAgPj4gMl0gPSBrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrID0gRTIoZVtyICsgMTYgPj4gMl0sIDEwODApLCBlW3cgKyA1NTg0ID4+IDJdID0gaywgIWspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMCwgUShmLCAxLCA1MTcwLCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW2kgKyAxODY5NiA+PiAyXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrID0gZVtyICsgMTYgPj4gMl0sIHEgPSBaKGssIGspIDw8IDIsIGsgPSBVMihxKSwgIWspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAwLCBRKGYsIDEsIDgwMDEsIDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHoyID0gZVtpICsgMTg2OTYgPj4gMl0sIGVbdyArIDE2ID4+IDJdID0gMiwgdCA9IFUyKHEpLCBlW3cgKyA1NjEyID4+IDJdID0gdCwgIXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFIoayksIG4gPSAwLCBRKGYsIDEsIDI3ODk4LCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChGMih0LCBlW2kgKyAxODY5NiA+PiAyXSwgcSksIGcgPSBGMihrLCBlW2kgKyAxODY5NiA+PiAyXSwgcSksIEggPSBVMihxKSwgZVt3ICsgNTYwOCA+PiAyXSA9IEgsICFIKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSKGcpLCBuID0gMCwgUShmLCAxLCAyNzc5MCwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IDAsIGggPSAwLCBvID0gMCwgRSA9IDAsIHcyID0gMCwgcCA9IDAsIGMgPSBlW3IgKyAxNiA+PiAyXSwgayA9IFUyKGMgPDwgNCksIGspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEogPSBjIC0gMSB8IDAsIFUgPSBjIDw8IDIsIHUgPSBkMihrLCAwLCBVKSwgYzIgPSB1ICsgVSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGw6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB1LCBKID4+PiAwID49IDcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoayA9IGMgJiAtODsgZVt0ID4+IDJdID0gbCwgZVt0ICsgMjggPj4gMl0gPSBsIHwgNywgZVt0ICsgMjQgPj4gMl0gPSBsIHwgNiwgZVt0ICsgMjAgPj4gMl0gPSBsIHwgNSwgZVt0ICsgMTYgPj4gMl0gPSBsIHwgNCwgZVt0ICsgMTIgPj4gMl0gPSBsIHwgMywgZVt0ICsgOCA+PiAyXSA9IGwgfCAyLCBlW3QgKyA0ID4+IDJdID0gbCB8IDEsIGwgPSBsICsgOCB8IDAsIHQgPSB0ICsgMzIgfCAwLCBoID0gaCArIDggfCAwLCAoayB8IDApICE9IChoIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoayA9IGMgJiA3LCBrKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGggPSAwOyBlW3QgPj4gMl0gPSBsLCBsID0gbCArIDEgfCAwLCB0ID0gdCArIDQgfCAwLCBoID0gaCArIDEgfCAwLCAoayB8IDApICE9IChoIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUopCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoeiA9IGMgLSAyIHwgMCwgdiA9IEosIGsgPSAxLCBhID0gZywgQyA9IHU7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKG8gfCAwKSA9PSAoYyB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiA9IG8gPDwgMiwgbiA9IGogKyBhIHwgMCwgQiA9IFcoMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGMgLSBvICYgMSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gbywgdCA9IG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCID0gR1tuID4+IDJdLCBCID0gQiA+IFcoMCkgPyBCIDogVygtQiksIHQgPSBCID4gVygwKSwgQiA9IHQgPyBCIDogVygwKSwgRSA9IHQgPyBvIDogRSwgbCA9IG8gKyAxIHwgMCwgdCA9IG4gKyBVIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobyB8IDApICE9IChKIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBtID0gR1t0ID4+IDJdLCBPID0gbSA+IFcoMCkgPyBtIDogVygtbSksIGggPSBPID4gQiwgeCA9IHQgKyBVIHwgMCwgbSA9IEdbeCA+PiAyXSwgbSA9IG0gPiBXKDApID8gbSA6IFcoLW0pLCBCID0gaCA/IE8gOiBCLCB0ID0gbSA+IEIsIEIgPSB0ID8gbSA6IEIsIEUgPSB0ID8gbCArIDEgfCAwIDogaCA/IGwgOiBFLCB0ID0gVSArIHggfCAwLCBsID0gbCArIDIgfCAwLCAoYyB8IDApICE9IChsIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQiA9PSBXKDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChvIHwgMCkgIT0gKEUgfCAwKSAmJiAodCA9IGVbQyA+PiAyXSwgbCA9ICgoRSA8PCAyKSArIEMgfCAwKSAtIGogfCAwLCBlW0MgPj4gMl0gPSBlW2wgPj4gMl0sIGVbbCA+PiAyXSA9IHQsIHQgPSAoWihjLCBFIC0gbyB8IDApIDw8IDIpICsgYSB8IDAsIGwgPSBGMihjMiwgdCwgVSksIEYyKHQsIGEsIFUpLCBGMihhLCBsLCBVKSksIGsgPj4+IDAgPCBjID4+PiAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKG0gPSBHW24gPj4gMl0sIHggPSBKIC0gbyAmIDMsIHQgPSBuICsgNCB8IDAsIGwgPSBuICsgVSB8IDAsIG4yID0geiAtIG8gPj4+IDAgPCAzLCBtMiA9IDAgLSB2IDw8IDIsIG4gPSBrOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChCID0gVyhHW2wgPj4gMl0gLyBtKSwgR1tsID4+IDJdID0gQiwgbCA9IGwgKyA0IHwgMCwgQiA9IFcoLUIpLCBQID0gMCwgaCA9IGssIHgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgR1tsID4+IDJdID0gVyhCICogR1t0ID4+IDJdKSArIEdbbCA+PiAyXSwgbCA9IGwgKyA0IHwgMCwgaCA9IGggKyAxIHwgMCwgdCA9IHQgKyA0IHwgMCwgUCA9IFAgKyAxIHwgMCwgKHggfCAwKSAhPSAoUCB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW4yKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IEdbbCA+PiAyXSA9IFcoQiAqIEdbdCA+PiAyXSkgKyBHW2wgPj4gMl0sIEdbbCArIDQgPj4gMl0gPSBXKEIgKiBHW3QgKyA0ID4+IDJdKSArIEdbbCArIDQgPj4gMl0sIEdbbCArIDggPj4gMl0gPSBXKEIgKiBHW3QgKyA4ID4+IDJdKSArIEdbbCArIDggPj4gMl0sIEdbbCArIDEyID4+IDJdID0gVyhCICogR1t0ICsgMTIgPj4gMl0pICsgR1tsICsgMTIgPj4gMl0sIGwgPSBsICsgMTYgfCAwLCB0ID0gdCArIDE2IHwgMCwgaCA9IGggKyA0IHwgMCwgKGMgfCAwKSAhPSAoaCB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGwgKyBqIHwgMCwgdCA9IHQgKyBtMiB8IDAsIG4gPSBuICsgMSB8IDAsIChjIHwgMCkgPT0gKG4gfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQyA9IEMgKyA0IHwgMCwgdiA9IHYgLSAxIHwgMCwgayA9IGsgKyAxIHwgMCwgYSA9IGEgKyBVIHwgMCwgbyA9IG8gKyAxIHwgMCwgKEogfCAwKSA9PSAobyB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChDID0gKGMgPDwgMykgKyBjMiB8IDAsIHogPSBjIDw8IDIsIEUgPSBDICsgeiB8IDAsIG4yID0geiArIGMyIHwgMCwgaiA9IG4yICsgeiB8IDAsIEwyID0gYyAmIC00LCBtMiA9IGMgJiAzLCB4ID0gKGcgKyAoWihjLCBjKSA8PCAyKSB8IDApIC0gNCB8IDAsIGUwID0gKGMgXiAtMSkgPDwgMjsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHYgPSBkMihjMiwgMCwgVSksIGVbdiArICh3MiA8PCAyKSA+PiAyXSA9IDEwNjUzNTMyMTYsIG4gPSB1LCBvID0gZywgayA9IEMsIGEgPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCID0gVygwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChCID0gVygwKSwgbCA9IG8sIHQgPSBDLCBhID4+PiAwID49IDQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChwID0gYSAmIC00LCBoID0gMDsgQiA9IFcoVyhHW2wgKyAxMiA+PiAyXSAqIEdbdCArIDEyID4+IDJdKSArIFcoVyhHW2wgKyA4ID4+IDJdICogR1t0ICsgOCA+PiAyXSkgKyBXKFcoR1tsICsgNCA+PiAyXSAqIEdbdCArIDQgPj4gMl0pICsgVyhXKEdbbCA+PiAyXSAqIEdbdCA+PiAyXSkgKyBCKSkpKSwgdCA9IHQgKyAxNiB8IDAsIGwgPSBsICsgMTYgfCAwLCBoID0gaCArIDQgfCAwLCAocCB8IDApICE9IChoIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGggPSAwLCBwID0gYSAmIDMsICFwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBCID0gVyhXKEdbbCA+PiAyXSAqIEdbdCA+PiAyXSkgKyBCKSwgbCA9IGwgKyA0IHwgMCwgdCA9IHQgKyA0IHwgMCwgaCA9IGggKyAxIHwgMCwgKHAgfCAwKSAhPSAoaCB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEdbayA+PiAyXSA9IEdbdiArIChlW24gPj4gMl0gPDwgMikgPj4gMl0gLSBCLCBrID0gayArIDQgfCAwLCBuID0gbiArIDQgfCAwLCBvID0gbyArIHogfCAwLCBhID0gYSArIDEgfCAwLCAoYyB8IDApID09IChhIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKG8gPSAwLCB2ID0gRSwgYSA9IGosIG4gPSB4LCBrID0gYzsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0gPSBHW24gPj4gMl0sIEIgPSBXKDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoayA+Pj4gMCA+PSBjID4+PiAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQID0gMCwgbCA9IG4sIHQgPSBhLCBoID0gaywgcCA9IG8gJiAzLCBwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBoID0gaCArIDEgfCAwLCBCID0gVyhXKEdbbCArIDQgPj4gMl0gKiBHW3QgPj4gMl0pICsgQiksIGwgPSBsICsgNCB8IDAsIHQgPSB0ICsgNCB8IDAsIFAgPSBQICsgMSB8IDAsIChwIHwgMCkgIT0gKFAgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobyAtIDEgPj4+IDAgPCAzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBCID0gVyhXKEdbbCArIDE2ID4+IDJdICogR1t0ICsgMTIgPj4gMl0pICsgVyhXKEdbbCArIDEyID4+IDJdICogR1t0ICsgOCA+PiAyXSkgKyBXKFcoR1tsICsgOCA+PiAyXSAqIEdbdCArIDQgPj4gMl0pICsgVyhXKEdbbCArIDQgPj4gMl0gKiBHW3QgPj4gMl0pICsgQikpKSksIHQgPSB0ICsgMTYgfCAwLCBsID0gbCArIDE2IHwgMCwgaCA9IGggKyA0IHwgMCwgKGMgfCAwKSAhPSAoaCB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEgPSBhIC0gNCB8IDAsIHYgPSB2IC0gNCB8IDAsIEdbYSA+PiAyXSA9IFcoR1t2ID4+IDJdIC0gQikgLyBtLCBvID0gbyArIDEgfCAwLCBuID0gbiArIGUwIHwgMCwgayA9IGsgLSAxIHwgMCwgIWspCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUCA9IDAsIGwgPSBILCB0ID0gMCwgYSA9IDAsIEogPj4+IDAgPj0gMykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBrID0gbjIgKyAodCA8PCAyKSB8IDAsIEdbbCA+PiAyXSA9IEdbayA+PiAyXSwgbiA9IGwgKyB6IHwgMCwgR1tuID4+IDJdID0gR1trICsgNCA+PiAyXSwgbiA9IG4gKyB6IHwgMCwgR1tuID4+IDJdID0gR1trICsgOCA+PiAyXSwgbiA9IG4gKyB6IHwgMCwgR1tuID4+IDJdID0gR1trICsgMTIgPj4gMl0sIGwgPSBuICsgeiB8IDAsIHQgPSB0ICsgNCB8IDAsIGEgPSBhICsgNCB8IDAsIChMMiB8IDApICE9IChhIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtMikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBHW2wgPj4gMl0gPSBHW24yICsgKHQgPDwgMikgPj4gMl0sIHQgPSB0ICsgMSB8IDAsIGwgPSBsICsgeiB8IDAsIFAgPSBQICsgMSB8IDAsIChtMiB8IDApICE9IChQIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChIID0gSCArIDQgfCAwLCBwID0gMSwgdzIgPSB3MiArIDEgfCAwLCAoYyB8IDApID09ICh3MiB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFIodSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUihnKSwgbiA9IDAsIFEoZiwgMSwgMjc4NTAsIDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG8gPSBVMihlW3IgKyAxNiA+PiAyXSA8PCAzKSwgZVt3ICsgNTYwNCA+PiAyXSA9IG8sICFvKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSKGcpLCBuID0gMCwgUShmLCAxLCAyNzk1NiwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA9IGVbdyArIDU2MDggPj4gMl0sIHQgPSAwLCBrID0gZVtyICsgMTYgPj4gMl0sIGspCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGggPSBrICYgLTQsIHUgPSBrICYgMywgdiA9IGsgKyBrIHwgMCwgQyA9IHYgKyBrIHwgMCwgYyA9IEMgKyBrIHwgMCwgSCA9IGsgPj4+IDAgPCA0OyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRCA9IDAsIG4gPSB0LCBsID0gMCwgIUgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IHkgPSArR1thICsgKG4gKyBDIDw8IDIpID4+IDJdLCBnMiA9IHkgKiB5LCB5ID0gK0dbYSArIChuICsgdiA8PCAyKSA+PiAyXSwgaTAgPSB5ICogeSwgeSA9ICtHW2EgKyAoayArIG4gPDwgMikgPj4gMl0sIHIwID0geSAqIHksIHkgPSArR1thICsgKG4gPDwgMikgPj4gMl0sIEQgPSBnMiArIChpMCArIChyMCArICh5ICogeSArIEQpKSksIG4gPSBuICsgYyB8IDAsIGwgPSBsICsgNCB8IDAsIChoIHwgMCkgIT0gKGwgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IDAsIHUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IHkgPSArR1thICsgKG4gPDwgMikgPj4gMl0sIEQgPSB5ICogeSArIEQsIG4gPSBrICsgbiB8IDAsIGwgPSBsICsgMSB8IDAsICh1IHwgMCkgIT0gKGwgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUTJbbyArICh0IDw8IDMpID4+IDNdID0gbUEoRCksIHQgPSB0ICsgMSB8IDAsIChrIHwgMCkgPT0gKHQgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSKGcpLCBhID0gZVtyICsgMTYgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPSBxICsgejIgfCAwLCB0ID0gZVt3ICsgNTU4NCA+PiAyXSwgZyA9IDAsIG4gPSAwLCBhID4+PiAwID49IDQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobyA9IGEgJiAtNCwgbCA9IDA7IGVbKHQgKyBaKG4sIDEwODApIHwgMCkgKyAxMDc2ID4+IDJdID0gZVtrICsgKG4gPDwgMikgPj4gMl0sIHUgPSBuIHwgMSwgZVsodCArIFoodSwgMTA4MCkgfCAwKSArIDEwNzYgPj4gMl0gPSBlW2sgKyAodSA8PCAyKSA+PiAyXSwgdSA9IG4gfCAyLCBlWyh0ICsgWih1LCAxMDgwKSB8IDApICsgMTA3NiA+PiAyXSA9IGVbayArICh1IDw8IDIpID4+IDJdLCB1ID0gbiB8IDMsIGVbKHQgKyBaKHUsIDEwODApIHwgMCkgKyAxMDc2ID4+IDJdID0gZVtrICsgKHUgPDwgMikgPj4gMl0sIG4gPSBuICsgNCB8IDAsIGwgPSBsICsgNCB8IDAsIChvIHwgMCkgIT0gKGwgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gYSAmIDMsICFsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGVbKHQgKyBaKG4sIDEwODApIHwgMCkgKyAxMDc2ID4+IDJdID0gZVtrICsgKG4gPDwgMikgPj4gMl0sIG4gPSBuICsgMSB8IDAsIGcgPSBnICsgMSB8IDAsIChsIHwgMCkgIT0gKGcgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSAwLCBvID0gMCwgayA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbdyArIDE2ID4+IDJdICE9IDIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gZVt3ICsgNTYyMCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGw6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZVt3ICsgNTYwOCA+PiAyXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVt3ICsgNTYyNCA+PiAyXSA9PSAobCB8IDApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoayA9IGwgKyAxMCB8IDAsIGVbdyArIDU2MjQgPj4gMl0gPSBrLCBrID0gbzAoZVt3ICsgNTYxNiA+PiAyXSwgWihrLCAyMCkpLCAhaykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbdyArIDU2MTYgPj4gMl0gPSBrLCB0ID0gZVt3ICsgNTYyMCA+PiAyXSwgZDIoayArIFoodCwgMjApIHwgMCwgMCwgWihlW3cgKyA1NjI0ID4+IDJdIC0gdCB8IDAsIDIwKSksIGwgPSBlW3cgKyA1NjIwID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA9IGVbdyArIDU2MTYgPj4gMl0gKyBaKGwsIDIwKSB8IDAsIGsgPSBlW2EgKyAxMiA+PiAyXSwgayAmJiAoUihrKSwgZVthICsgMTIgPj4gMl0gPSAwKSwgZVthICsgOCA+PiAyXSA9IDEsIGVbYSA+PiAyXSA9IDIsIGVbYSArIDQgPj4gMl0gPSAxLCBuID0gMiwgayA9IGVbciArIDE2ID4+IDJdLCBsID0gWihrLCBrKSwgdSA9IGwgPDwgMiwgdCA9IFUyKHUpLCBlW2EgKyAxMiA+PiAyXSA9IHQsIGsgPSAwLCAhdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbzJbZVsoZVthID4+IDJdIDw8IDIpICsgMzEyMTYgPj4gMl1dKGVbdyArIDU2MDggPj4gMl0sIHQsIGwpLCBlW2EgKyAxNiA+PiAyXSA9IHUsIGwgPSBlW3cgKyA1NjIwID4+IDJdICsgMSB8IDAsIGVbdyArIDU2MjAgPj4gMl0gPSBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW3cgKyA1NjI0ID4+IDJdID09IChsIHwgMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoayA9IGwgKyAxMCB8IDAsIGVbdyArIDU2MjQgPj4gMl0gPSBrLCBrID0gbzAoZVt3ICsgNTYxNiA+PiAyXSwgWihrLCAyMCkpLCAhaykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVt3ICsgNTYxNiA+PiAyXSA9IGssIHQgPSBlW3cgKyA1NjIwID4+IDJdLCBhID0gKGswID0gZDIoayArIFoodCwgMjApIHwgMCwgMCwgWihlW3cgKyA1NjI0ID4+IDJdIC0gdCB8IDAsIDIwKSkgLSAyMCB8IDAsIHQwID0gMCwgaDAgPSBhLCBoMCA/IGswIDogdDApLCBsID0gZVt3ICsgNTYyMCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodSA9IGVbdyArIDU2MTYgPj4gMl0gKyBaKGwsIDIwKSB8IDAsIGsgPSBlW3UgKyAxMiA+PiAyXSwgayAmJiAoUihrKSwgZVt1ICsgMTIgPj4gMl0gPSAwKSwgZVt1ICsgOCA+PiAyXSA9IG4sIGVbdSA+PiAyXSA9IDIsIGVbdSArIDQgPj4gMl0gPSAyLCBoID0gZVtyICsgMTYgPj4gMl0sIGcgPSBoIDw8IDIsIHQgPSBVMihnKSwgZVt1ICsgMTIgPj4gMl0gPSB0LCBrID0gMCwgIXQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPSBVMihnKSwgIWspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSKGVbdSArIDEyID4+IDJdKSwgZVt1ICsgMTIgPj4gMl0gPSAwLCBrID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgPSBoICYgMywgbCA9IGVbdyArIDU1ODQgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGggPj4+IDAgPCA0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChDID0gaCAmIC00LCB0ID0gazsgR1t0ID4+IDJdID0gZVtsICsgMTA3NiA+PiAyXSwgR1t0ICsgNCA+PiAyXSA9IGVbbCArIDIxNTYgPj4gMl0sIEdbdCArIDggPj4gMl0gPSBlW2wgKyAzMjM2ID4+IDJdLCBHW3QgKyAxMiA+PiAyXSA9IGVbbCArIDQzMTYgPj4gMl0sIGwgPSBsICsgNDMyMCB8IDAsIHQgPSB0ICsgMTYgfCAwLCBvID0gbyArIDQgfCAwLCAoQyB8IDApICE9IChvIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXYpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobyA9IDA7IEdbdCA+PiAyXSA9IGVbbCArIDEwNzYgPj4gMl0sIGwgPSBsICsgMTA4MCB8IDAsIHQgPSB0ICsgNCB8IDAsIG8gPSBvICsgMSB8IDAsICh2IHwgMCkgIT0gKG8gfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvMltlWyhlW3UgPj4gMl0gPDwgMikgKyAzMTIxNiA+PiAyXV0oaywgZVt1ICsgMTIgPj4gMl0sIGgpLCBSKGspLCBlW3UgKyAxNiA+PiAyXSA9IGcsIGVbdyArIDU2MjAgPj4gMl0gPSBlW3cgKyA1NjIwID4+IDJdICsgMSwgbCA9IGVbdyArIDU2MzIgPj4gMl0sIChsIHwgMCkgPT0gZVt3ICsgNTYzNiA+PiAyXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrID0gbCArIDEwIHwgMCwgZVt3ICsgNTYzNiA+PiAyXSA9IGssIGsgPSBvMChlW3cgKyA1NjI4ID4+IDJdLCBaKGssIDIwKSksICFrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSKGVbdyArIDU2MjggPj4gMl0pLCBlW3cgKyA1NjM2ID4+IDJdID0gMCwgZVt3ICsgNTYyOCA+PiAyXSA9IDAsIGVbdyArIDU2MzIgPj4gMl0gPSAwLCBrID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbdyArIDU2MjggPj4gMl0gPSBrLCB0ID0gZVt3ICsgNTYzMiA+PiAyXSwgZDIoayArIFoodCwgMjApIHwgMCwgMCwgWihlW3cgKyA1NjM2ID4+IDJdIC0gdCB8IDAsIDIwKSksIGwgPSBlW3cgKyA1NjMyID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBlW3cgKyA1NjI4ID4+IDJdICsgWihsLCAyMCkgfCAwLCBlW2sgKyA4ID4+IDJdID0gYSwgRltrICsgMTYgfCAwXSA9IElbayArIDE2IHwgMF0gfCAxLCB0ID0gZVtyICsgMTYgPj4gMl0sIGVbayArIDEyID4+IDJdID0gdSwgZVtrID4+IDJdID0gbiArIDEsIGVbayArIDQgPj4gMl0gPSB0LCBlW3cgKyA1NjMyID4+IDJdID0gZVt3ICsgNTYzMiA+PiAyXSArIDEsIGsgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUihlW3cgKyA1NjE2ID4+IDJdKSwgZVt3ICsgNTYyNCA+PiAyXSA9IDAsIGVbdyArIDU2MTYgPj4gMl0gPSAwLCBlW3cgKyA1NjIwID4+IDJdID0gMCwgayA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMCwgUShmLCAxLCA5NjIzLCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBlW3IgKyAxNiA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGVbdyArIDE2ID4+IDJdICE9IDEgfCBhID4+PiAwIDwgMykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBlW3IgKyAyNCA+PiAyXSwgdCA9IGVbayA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGw6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh0IHwgMCkgIT0gZVtrICsgNTIgPj4gMl0gfCAodCB8IDApICE9IGVbayArIDEwNCA+PiAyXSB8fCAodCA9IGVbayArIDQgPj4gMl0sICh0IHwgMCkgIT0gZVtrICsgNTYgPj4gMl0pKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodCB8IDApID09IGVbayArIDEwOCA+PiAyXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUShmLCAyLCAyMzQyMiwgMCksIGVbdyArIDE2ID4+IDJdID0gMCwgYSA9IGVbciArIDE2ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gYSAmIDEsIGsgPSBlW3IgKyAyNCA+PiAyXSwgbiA9IDAsIChhIHwgMCkgIT0gMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGwgPSBhICYgLTIsIGEgPSAwOyBvID0gayArIFoobiwgNTIpIHwgMCwgZVtvICsgMzIgPj4gMl0gfHwgKGVbKGVbdyArIDU1ODQgPj4gMl0gKyBaKG4sIDEwODApIHwgMCkgKyAxMDc2ID4+IDJdID0gMSA8PCBlW28gKyAyNCA+PiAyXSAtIDEpLCBvID0gbiB8IDEsIHUgPSBrICsgWihvLCA1MikgfCAwLCBlW3UgKyAzMiA+PiAyXSB8fCAoZVsoZVt3ICsgNTU4NCA+PiAyXSArIFoobywgMTA4MCkgfCAwKSArIDEwNzYgPj4gMl0gPSAxIDw8IGVbdSArIDI0ID4+IDJdIC0gMSksIG4gPSBuICsgMiB8IDAsIGEgPSBhICsgMiB8IDAsIChsIHwgMCkgIT0gKGEgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXQgfHwgKGsgPSBrICsgWihuLCA1MikgfCAwLCBlW2sgKyAzMiA+PiAyXSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVsoZVt3ICsgNTU4NCA+PiAyXSArIFoobiwgMTA4MCkgfCAwKSArIDEwNzYgPj4gMl0gPSAxIDw8IGVbayArIDI0ID4+IDJdIC0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbcyArIDQ4ID4+IDJdID0gYSwgUShmLCAxLCAxNzY2MywgcyArIDQ4IHwgMCksIG4gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlW3IgKyAxNiA+PiAyXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChoID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IGVbdyArIDU1ODQgPj4gMl0gKyBaKGgsIDEwODApIHwgMCwgbCA9IGVbaSArIDQwID4+IDJdICYgMSwgZVt0ID4+IDJdID0gbCwgdSA9IGVbaSArIDU1OTIgPj4gMl0sIGVbdCArIDQgPj4gMl0gPSB1LCBrID0gMCwgbiA9IGVbaSArIDU1OTYgPj4gMl0sIChuIHwgMCkgPj0gMikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBrID0gayArIDEgfCAwLCBhID0gbiA+Pj4gMCA+IDMsIG4gPSBuID4+PiAxIHwgMCwgISFhOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVt0ICsgOCA+PiAyXSA9IGssIGsgPSAwLCBuID0gZVtpICsgNTYwMCA+PiAyXSwgKG4gfCAwKSA+PSAyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGsgPSBrICsgMSB8IDAsIGEgPSBuID4+PiAwID4gMywgbiA9IG4gPj4+IDEgfCAwLCAhIWE7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgIGVbdCArIDEyID4+IDJdID0gaywgZVt0ICsgMTYgPj4gMl0gPSBlW2kgKyA1NjA0ID4+IDJdLCBrID0gZVtpICsgNTYwOCA+PiAyXSwgZVt0ICsgODA0ID4+IDJdID0gMiwgZVt0ICsgMjAgPj4gMl0gPSAhaywgZVt0ICsgMjQgPj4gMl0gPSAoKGsgfCAwKSAhPSAwKSA8PCAxLCBlW3QgKyA4MDggPj4gMl0gPSBlW2kgKyA1NjEyID4+IDJdID09IChoIHwgMCkgPyBlW2kgKyA1NjE2ID4+IDJdIDogMDsKICAgICAgICAgICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHUgfCAwKSA8PSAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoQyA9IHQgKyA5NDQgfCAwLCB2ID0gdCArIDgxMiB8IDAsIG8gPSAwLCBsID0gdTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gbCAtIDEgfCAwLCBrID0gZVtpICsgNTYyMCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGsgfCAwKSA+IChvIHwgMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IDEsIGEgPSAxLCBnID0gbyA8PCAyLCBrID0gZVtnICsgWDIgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGY6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGsgfCAwKSA8PSAwIHx8IChhID0gMCwgKGsgfCAwKSA9PSAxKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGEgPSBhICsgMSB8IDAsIGMgPSBrID4+PiAwID4gMywgayA9IGsgPj4+IDEgfCAwLCAhIWM7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVt2ICsgKGwgPDwgMikgPj4gMl0gPSBhLCBrID0gZVtnICsgWTIgPj4gMl0sIChrIHwgMCkgPD0gMCB8fCAobiA9IDAsIChrIHwgMCkgPT0gMSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IG4gPSBuICsgMSB8IDAsIGEgPSBrID4+PiAwID4gMywgayA9IGsgPj4+IDEgfCAwLCAhIWE7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gayAtIDEgfCAwLCBhID0gayA8PCAyLCBjID0gbyAtIGsgfCAwLCBrID0gZVthICsgWTIgPj4gMl0gPj4gYywgbiA9IDEsIGcgPSAxLCBhID0gZVthICsgWDIgPj4gMl0gPj4gYzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGY6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChhIHwgMCkgPD0gMCB8fCAoZyA9IDAsIChhIHwgMCkgPT0gMSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGcgPSBnICsgMSB8IDAsIGMgPSBhID4+PiAwID4gMywgYSA9IGEgPj4+IDEgfCAwLCAhIWM7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVt2ICsgKGwgPDwgMikgPj4gMl0gPSBnLCAoayB8IDApIDw9IDAgfHwgKG4gPSAwLCAoayB8IDApID09IDEpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IG4gPSBuICsgMSB8IDAsIGEgPSBrID4+PiAwID4gMywgayA9IGsgPj4+IDEgfCAwLCAhIWE7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtDICsgKGwgPDwgMikgPj4gMl0gPSBuLCBvID0gbyArIDEgfCAwLCAodSB8IDApID09IChvIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF1KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPSB0ICsgOTQ0IHwgMCwgYSA9IHQgKyA4MTIgfCAwLCBsID0gMCwgbiA9IDAsIHUgPj4+IDAgPj0gNCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2ID0gdSAmIC00LCBvID0gMDsgZyA9IG4gPDwgMiwgZVtnICsgYSA+PiAyXSA9IDE1LCBlW2sgKyBnID4+IDJdID0gMTUsIEMgPSBnIHwgNCwgZVtDICsgYSA+PiAyXSA9IDE1LCBlW2sgKyBDID4+IDJdID0gMTUsIEMgPSBnIHwgOCwgZVtDICsgYSA+PiAyXSA9IDE1LCBlW2sgKyBDID4+IDJdID0gMTUsIGcgPSBnIHwgMTIsIGVbZyArIGEgPj4gMl0gPSAxNSwgZVtrICsgZyA+PiAyXSA9IDE1LCBuID0gbiArIDQgfCAwLCBvID0gbyArIDQgfCAwLCAodiB8IDApICE9IChvIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobyA9IHUgJiAzLCAhbykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyB1ID0gbiA8PCAyLCBlW3UgKyBhID4+IDJdID0gMTUsIGVbayArIHUgPj4gMl0gPSAxNSwgbiA9IG4gKyAxIHwgMCwgbCA9IGwgKyAxIHwgMCwgKG8gfCAwKSAhPSAobCB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYgPSBlWyhlW3IgKyAyNCA+PiAyXSArIFooaCwgNTIpIHwgMCkgKyAyNCA+PiAyXSwgZyA9IDAsIGsgPSBlW3QgKyA0ID4+IDJdLCBDID0gWihrLCAzKSAtIDIgfCAwLCBDKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjID0gdCArIDI4IHwgMCwgSCA9IGsgLSAxIHwgMCwgSiA9IGVbdCArIDI0ID4+IDJdLCBwID0gZVt0ICsgMjAgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSAwLCB0ID0gMCwgZyAmJiAodCA9IGcgLSAxIHwgMCwgayA9ICh0ID4+PiAwKSAvIDMgfCAwLCBsID0gayBeIC0xLCB0ID0gKHQgLSBaKGssIDMpIHwgMCkgKyAxIHwgMCksIHUgPSBwICYmIHQgPyB0IC0gMSA+Pj4gMCA8IDIgPyAxIDogMiA6IDAsIEogPyAobiA9IFoodCwgODApLCBrID0gdCA/IDggOiA5LCB0ID0gbCArIEggfCAwLCB5ID0gKygxIDw8IHUgPj4+IDApIC8gUTJbKG4gKyAoKGsgPj4+IDAgPCB0ID4+PiAwID8gayA6IHQpIDw8IDMpIHwgMCkgKyAzMDg0OCA+PiAzXSAqIDgxOTIpIDogeSA9IDgxOTIsIEQgPSBOZSh5KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSMihEKSA8IDIxNDc0ODM2NDgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSB+fkQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gLTIxNDc0ODM2NDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPSAxMywgYSA9IDAsIGwgPSAwLCB0ID0gaywgKGsgfCAwKSA+PSAyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IG8gPSBsLCBsID0gbCArIDEgfCAwLCBuID0gdCA+Pj4gMCA+IDMsIHQgPSB0ID4+PiAxIHwgMCwgISFuOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh0ID0gazsgbiA9IGEsIGEgPSBuICsgMSB8IDAsIGwgPSB0ID4+PiAwID4gMywgdCA9IHQgPj4+IDEgfCAwLCAhIWw7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gKG4gPj4+IDAgPiAxMCA/IGsgPj4+IG4gLSAxMCB8IDAgOiBrIDw8IDEwIC0gbikgJiAyMDQ3LCBuID0gMTIgLSBvIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoayA9IGMgKyAoZyA8PCAzKSB8IDAsIGVbayArIDQgPj4gMl0gPSBhLCBlW2sgPj4gMl0gPSAodSArIHYgfCAwKSArIG4sIGcgPSBnICsgMSB8IDAsIChDIHwgMCkgPT0gKGcgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaCA9IGggKyAxIHwgMCwgIShoID4+PiAwIDwgZFtyICsgMTYgPj4gMl0pKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlmIChmMiA9IGYyICsgMSB8IDAsICEoZjIgPj4+IDAgPCBaKGVbQSArIDEwOCA+PiAyXSwgZVtBICsgMTA0ID4+IDJdKSA+Pj4gMCkpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKG4gPSAxLCBBID0gZVtpICsgMTg2OTYgPj4gMl0sICFBKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIFIoQSksIGVbaSArIDE4Njk2ID4+IDJdID0gMDsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIG4gPSAwLCBRKGYsIDEsIDUyMzQsIDApOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gWCA9IHMgKyA0MDAgfCAwLCBuIHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBmcihBLCBpLCByLCBmLCBrLCB0KSB7CiAgICAgICAgICAgICAgdmFyIG4gPSAwLCBsID0gMCwgYSA9IDAsIHUgPSAwLCBvID0gMCwgZyA9IDAsIGggPSAwLCBzID0gMCwgdyA9IFcoMCksIEIgPSAwLCBjID0gMCwgdiA9IDAsIEMgPSAwLCBtID0gMCwgeSA9IDAsIHAgPSAwLCBIID0gMCwgSiA9IDAsIEUgPSAwLCBEID0gMCwgVSA9IDAsIFAgPSAwLCB4ID0gMCwgeiA9IDAsIGogPSAwLCBPID0gMCwgcSA9IDAsIGYyID0gMCwgbjIgPSBXKDApLCBnMiA9IDAsIHcyID0gMCwgYzIgPSAwLCBtMiA9IDAsIHAyID0gMCwgWTIgPSAwLCBYMiA9IDAsIEQyID0gMCwgUzIgPSAwLCBQMiA9IDAsIHgyID0gMCwgejIgPSAwLCBMMiA9IDAsIGUwID0gMCwgaTAgPSAwLCByMCA9IDAsIGswID0gMCwgdDAgPSAwLCBoMCA9IDAsIEMwID0gMCwgSDAgPSAwLCBFMCA9IDAsIE0wID0gMCwgeDAgPSBXKDApLCBUMCA9IDAsIGIwID0gMCwgZjEgPSAwLCBhMSA9IDAsIFoxID0gMCwgcDEgPSAwOwogICAgICAgICAgICAgIGgwID0gWCAtIDE2IHwgMCwgWCA9IGgwOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGlmIChrID4+PiAwIDw9IDMpIHsKICAgICAgICAgICAgICAgICAgayA9IDAsIFEodCwgMSwgNzMyNiwgMCk7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBrMihyLCA2NTQyNywgMiksIGVbaSArIDQgPj4gMl0gPSBlW0EgKyA4ID4+IDJdLCB1ID0gZVtBICsgMTIgPj4gMl0sIGVbaSArIDggPj4gMl0gPSB1LCB1IHx8IChlW2VbZVtpICsgMjAgPj4gMl0gPj4gMl0gKyA4NDAgPj4gMl0gPSAwKSwgZVtmID4+IDJdID0gMDsKICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgaWYgKHUgPSBlW0EgKyA2MCA+PiAyXSwgIXUgfHwgKHAyID0gRTIoMSwgMTIpLCBwMiAmJiAoZVtwMiA+PiAyXSA9IHUpLCBwMikpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgayA9IDAsIFEodCwgMSwgMTY1NjEsIDApOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGwgPSBrIC0gNCB8IDAsIHUgPSBlW0EgKyA2NCA+PiAyXSwgbCA+Pj4gMCA8IHUgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgayA9IDAsIFEodCwgMSwgNzMyNiwgMCksIExlKHAyKTsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGsgPSAwLCBvID0gZVtBICsgMjA0ID4+IDJdLCBDMCA9IHIgKyAyIHwgMCwgazAgPSBmLCBIMCA9IGwgLSB1IHwgMCwgUzIgPSB0LCBmMiA9IFggLSAxMjE2IHwgMCwgWCA9IGYyOwogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgaCA9IGk7CiAgICAgICAgICAgICAgICAgICAgazogewogICAgICAgICAgICAgICAgICAgICAgaWYgKGVbaSArIDggPj4gMl0pCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtpICsgMzYgPj4gMl0gPSBvLCBEID0gZVtlW2kgKyAyOCA+PiAyXSArIDc2ID4+IDJdICsgWihvLCA1NjQ0KSB8IDAsIGVbaSArIDMyID4+IDJdID0gRCwgdSA9IGVbRCArIDU1ODQgPj4gMl0sIEIgPSBlW2VbaSArIDIwID4+IDJdID4+IDJdLCBsID0gZVtCICsgMjAgPj4gMl0sIGMgPSBlW0IgKyAxNiA+PiAyXSwgYykgewogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSBsLCBvID0gdTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBtID0gWihlW2kgKyAxMiA+PiAyXSAtIGVbaSArIDQgPj4gMl0gfCAwLCBlW2kgKyA4ID4+IDJdIC0gZVtpID4+IDJdIHwgMCksIHQgPSBlW2kgKyAzNiA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtvICsgMjAgPj4gMl0gIT0gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHAgPSBlW28gKyAxMDc2ID4+IDJdLCBtID4+PiAwID49IDQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChnID0gbSAmIC00LCBmID0gMDsgR1t0ID4+IDJdID0gZVt0ID4+IDJdIC0gcCB8IDAsIEdbdCArIDQgPj4gMl0gPSBlW3QgKyA0ID4+IDJdIC0gcCB8IDAsIEdbdCArIDggPj4gMl0gPSBlW3QgKyA4ID4+IDJdIC0gcCB8IDAsIEdbdCArIDEyID4+IDJdID0gZVt0ICsgMTIgPj4gMl0gLSBwIHwgMCwgdCA9IHQgKyAxNiB8IDAsIGYgPSBmICsgNCB8IDAsIChnIHwgMCkgIT0gKGYgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZiA9IDAsIGcgPSBtICYgMywgIWcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IEdbdCA+PiAyXSA9IGVbdCA+PiAyXSAtIHAgfCAwLCB0ID0gdCArIDQgfCAwLCBmID0gZiArIDEgfCAwLCAoZyB8IDApICE9IChmIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobSA+Pj4gMCA+PSA0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGcgPSBtICYgLTQsIGYgPSAwOyBlW3QgPj4gMl0gPSBlW3QgPj4gMl0gLSBlW28gKyAxMDc2ID4+IDJdLCBlW3QgKyA0ID4+IDJdID0gZVt0ICsgNCA+PiAyXSAtIGVbbyArIDEwNzYgPj4gMl0sIGVbdCArIDggPj4gMl0gPSBlW3QgKyA4ID4+IDJdIC0gZVtvICsgMTA3NiA+PiAyXSwgZVt0ICsgMTIgPj4gMl0gPSBlW3QgKyAxMiA+PiAyXSAtIGVbbyArIDEwNzYgPj4gMl0sIHQgPSB0ICsgMTYgfCAwLCBmID0gZiArIDQgfCAwLCAoZyB8IDApICE9IChmIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZiA9IDAsIGcgPSBtICYgMywgZykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGVbdCA+PiAyXSA9IGVbdCA+PiAyXSAtIGVbbyArIDEwNzYgPj4gMl0sIHQgPSB0ICsgNCB8IDAsIGYgPSBmICsgMSB8IDAsIChnIHwgMCkgIT0gKGYgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBlW0IgKyAxNiA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSBpICsgNzYgfCAwLCBvID0gbyArIDEwODAgfCAwLCBPID0gTyArIDEgfCAwLCAhKE8gPj4+IDAgPCBjID4+PiAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIE8gPSBjIDw8IDI7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBIID0gWihlW2wgKyAxMiA+PiAyXSAtIGVbbCArIDQgPj4gMl0gfCAwLCBlW2wgKyA4ID4+IDJdIC0gZVtsID4+IDJdIHwgMCk7CiAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIEE6CiAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChlW0QgKyAxNiA+PiAyXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWVbRCArIDU2MTIgPj4gMl0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG8gPSAwLCBKID0gVTIoTyksICFKKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHogPSBlW0IgKyAxNiA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgheikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZyA9IHogJiAzLCBmID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeiA+Pj4gMCA8IDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHUgPSB6ICYgLTQsIHQgPSAwLCBpID0gMDsgQiA9IEogKyAodCA8PCAyKSB8IDAsIGVbQiA+PiAyXSA9IGVbbCArIDM2ID4+IDJdLCBlW0IgKyA0ID4+IDJdID0gZVtsICsgMTEyID4+IDJdLCBlW0IgKyA4ID4+IDJdID0gZVtsICsgMTg4ID4+IDJdLCBlW0IgKyAxMiA+PiAyXSA9IGVbbCArIDI2NCA+PiAyXSwgdCA9IHQgKyA0IHwgMCwgbCA9IGwgKyAzMDQgfCAwLCBpID0gaSArIDQgfCAwLCAodSB8IDApICE9IChpIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBlW0ogKyAodCA8PCAyKSA+PiAyXSA9IGVbbCArIDM2ID4+IDJdLCB0ID0gdCArIDEgfCAwLCBsID0gbCArIDc2IHwgMCwgZiA9IGYgKyAxIHwgMCwgKGcgfCAwKSAhPSAoZiB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IGVbZVtoICsgMzIgPj4gMl0gKyA1NjEyID4+IDJdLCBnID0gWih6LCB6KSwgRSA9IFUyKGcgKyB6IDw8IDIpLCBpID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghRSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IEUgKyAoeiA8PCAyKSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGcgPj4+IDAgPj0gNCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh0ID0gZyAmIC00OyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSB1ICsgKFUgPDwgMikgfCAwLCB3ID0gVyhHW2YgPj4gMl0gKiBXKDgxOTIpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVyhSMih3KSkgPCBXKDIxNDc0ODM2NDgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSB+fnc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gLTIxNDc0ODM2NDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbaSA+PiAyXSA9IGwsIHcgPSBXKEdbZiArIDQgPj4gMl0gKiBXKDgxOTIpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVyhSMih3KSkgPCBXKDIxNDc0ODM2NDgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSB+fnc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gLTIxNDc0ODM2NDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbaSArIDQgPj4gMl0gPSBsLCB3ID0gVyhHW2YgKyA4ID4+IDJdICogVyg4MTkyKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFcoUjIodykpIDwgVygyMTQ3NDgzNjQ4KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gfn53OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IC0yMTQ3NDgzNjQ4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2kgKyA4ID4+IDJdID0gbCwgdyA9IFcoR1tmICsgMTIgPj4gMl0gKiBXKDgxOTIpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVyhSMih3KSkgPCBXKDIxNDc0ODM2NDgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSB+fnc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gLTIxNDc0ODM2NDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW2kgKyAxMiA+PiAyXSA9IGwsIFUgPSBVICsgNCB8IDAsIGYgPSBmICsgMTYgfCAwLCBzID0gcyArIDQgfCAwLCAodCB8IDApID09IChzIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSBnICYgMSwgIXQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IHUgKyAoVSA8PCAyKSB8IDAsIHcgPSBXKEdbZiA+PiAyXSAqIFcoODE5MikpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFcoUjIodykpIDwgVygyMTQ3NDgzNjQ4KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IH5+dzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAtMjE0NzQ4MzY0ODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtsID4+IDJdID0gaSwgVSA9IFUgKyAxIHwgMCwgZiA9IGYgKyA0IHwgMCwgYSA9IGEgKyAxIHwgMCwgKHQgfCAwKSA9PSAoYSB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISghSCB8ICF6KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAocCA9IHogJiAtMiwgRCA9IHogJiAxLCBCID0geiAmIC00LCBqID0geiAmIDMsIG0gPSB6IC0gMSB8IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmID0gMCwgcyA9IDAsIG0gPj4+IDAgPj0gMykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgdCA9IGYgPDwgMiwgZVt0ICsgRSA+PiAyXSA9IGVbZVt0ICsgSiA+PiAyXSA+PiAyXSwgaSA9IHQgfCA0LCBlW2kgKyBFID4+IDJdID0gZVtlW2kgKyBKID4+IDJdID4+IDJdLCBpID0gdCB8IDgsIGVbaSArIEUgPj4gMl0gPSBlW2VbaSArIEogPj4gMl0gPj4gMl0sIGkgPSB0IHwgMTIsIGVbaSArIEUgPj4gMl0gPSBlW2VbaSArIEogPj4gMl0gPj4gMl0sIGYgPSBmICsgNCB8IDAsIHMgPSBzICsgNCB8IDAsIChCIHwgMCkgIT0gKHMgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVSA9IDAsIGopCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGkgPSBmIDw8IDIsIGVbaSArIEUgPj4gMl0gPSBlW2VbaSArIEogPj4gMl0gPj4gMl0sIGYgPSBmICsgMSB8IDAsIFUgPSBVICsgMSB8IDAsIChqIHwgMCkgIT0gKFUgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGYgPSB1LCBPID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZyA9IEogKyAoTyA8PCAyKSB8IDAsIGkgPSBlW2cgPj4gMl0sIGVbaSA+PiAyXSA9IDAsIFUgPSAwLCBhID0gMCwgcyA9IDAsIG0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgbCA9IEUgKyAoVSA8PCAyKSB8IDAsIHQgPSBlW2wgPj4gMl0sIGMgPSB0LCB4ID0gdCA+PiAzMSwgdCA9IGVbZiA+PiAyXSwgdCA9IGQwKGMsIHgsIHQsIHQgPj4gMzEpLCB4ID0gcTIsIHQgPSB0ICsgNDA5NiB8IDAsIHQgPSAoKCh0ID4+PiAwIDwgNDA5NiA/IHggKyAxIHwgMCA6IHgpICYgODE5MSkgPDwgMTkgfCB0ID4+PiAxMykgKyBhIHwgMCwgZVtpID4+IDJdID0gdCwgYSA9IGVbbCArIDQgPj4gMl0sIGwgPSBhLCBjID0gYSA+PiAzMSwgYSA9IGVbZiArIDQgPj4gMl0sIGEgPSBkMChsLCBjLCBhLCBhID4+IDMxKSwgbCA9IHEyLCBhID0gYSArIDQwOTYgfCAwLCBhID0gKCgoYSA+Pj4gMCA8IDQwOTYgPyBsICsgMSB8IDAgOiBsKSAmIDgxOTEpIDw8IDE5IHwgYSA+Pj4gMTMpICsgdCB8IDAsIGVbaSA+PiAyXSA9IGEsIFUgPSBVICsgMiB8IDAsIGYgPSBmICsgOCB8IDAsIHMgPSBzICsgMiB8IDAsIChwIHwgMCkgIT0gKHMgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEQgJiYgKHQgPSBlW0UgKyAoVSA8PCAyKSA+PiAyXSwgbCA9IHQsIGMgPSB0ID4+IDMxLCB0ID0gZVtmID4+IDJdLCB0ID0gZDAobCwgYywgdCwgdCA+PiAzMSksIHMgPSBxMiwgdCA9IHQgKyA0MDk2IHwgMCwgZVtpID4+IDJdID0gKCgodCA+Pj4gMCA8IDQwOTYgPyBzICsgMSB8IDAgOiBzKSAmIDgxOTEpIDw8IDE5IHwgdCA+Pj4gMTMpICsgYSwgZiA9IGYgKyA0IHwgMCksIGVbZyA+PiAyXSA9IGkgKyA0LCBPID0gTyArIDEgfCAwLCAoeiB8IDApID09IChPIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQyA9IEMgKyAxIHwgMCwgKEggfCAwKSA9PSAoQyB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFIoRSksIGkgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSKEopLCBpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEIgPSBlW2wgKyAxODggPj4gMl0sIGcgPSBlW2wgKyAxMTIgPj4gMl0sIGwgPSBlW2wgKyAzNiA+PiAyXSwgIWVbdSArIDIwID4+IDJdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSAwLCBIKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGEgPSB0IDw8IDIsIGkgPSBhICsgbCB8IDAsIHUgPSBpLCBmID0gYSArIEIgfCAwLCB4MCA9IEdbZiA+PiAyXSwgbjIgPSBHW2kgPj4gMl0sIGkgPSBhICsgZyB8IDAsIHcgPSBHW2kgPj4gMl0sIEdbdSA+PiAyXSA9IFcoeDAgKiBXKDAuMTE0MDAwMDAwMDU5NjA0NjQpKSArIFcoVyhuMiAqIFcoMC4yOTg5OTk5OTQ5OTMyMDk4NCkpICsgVyh3ICogVygwLjU4NzAwMDAxMjM5Nzc2NjEpKSksIEdbaSA+PiAyXSA9IFcoeDAgKiBXKDAuNSkpICsgVyhXKG4yICogVygtMC4xNjg3NTAwMDI5ODAyMzIyNCkpICsgVyh3ICogVygtMC4zMzEyNTk5OTU2OTg5Mjg4MykpKSwgR1tmID4+IDJdID0gVyh4MCAqIFcoLTAuMDgxMzA5OTk2NTQ1MzE0NzkpKSArIFcoVyhuMiAqIFcoMC41KSkgKyBXKHcgKiBXKC0wLjQxODY4OTk5NjAwNDEwNDYpKSksIHQgPSB0ICsgMSB8IDAsIChIIHwgMCkgIT0gKHQgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAobyA9IDAsIEgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGYgPSBvIDw8IDIsIGkgPSBmICsgbCB8IDAsIGMgPSBpLCB0ID0gZVtpID4+IDJdLCBhID0gZiArIGcgfCAwLCB1ID0gZVthID4+IDJdLCBmID0gZiArIEIgfCAwLCBpID0gZVtmID4+IDJdLCBlW2MgPj4gMl0gPSAodCArICh1IDw8IDEpIHwgMCkgKyBpID4+IDIsIGVbYSA+PiAyXSA9IGkgLSB1LCBlW2YgPj4gMl0gPSB0IC0gdSwgbyA9IG8gKyAxIHwgMCwgKEggfCAwKSAhPSAobyB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IGVbaCArIDMyID4+IDJdLCBpID0gZVtlW2ggKyAyMCA+PiAyXSA+PiAyXSwgZVtpICsgMTYgPj4gMl0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChvID0gZVtpICsgMjAgPj4gMl0sIHQgPSBlW3QgKyA1NTg0ID4+IDJdLCBmID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGVbdCArIDIwID4+IDJdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFI0KGVbaCArIDQ0ID4+IDJdLCBvLCAxMTAsIDExMSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghUjQoZVtoICsgNDQgPj4gMl0sIG8sIDExNiwgMTE3KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0ICsgMTA4MCB8IDAsIG8gPSBvICsgNzYgfCAwLCBmID0gZiArIDEgfCAwLCAhKGYgPj4+IDAgPCBkW2kgKyAxNiA+PiAyXSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB0ID0gZVtoICsgMzIgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW3QgKyAxNiA+PiAyXSA9PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlW2VbdCArIDU1ODQgPj4gMl0gKyAyMCA+PiAyXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IDMsIGYgPSAzMDQ5NjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSAzLCBmID0gMzA0NjQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBhID0gZVtlW2ggKyAyNCA+PiAyXSArIDE2ID4+IDJdLCBmID0gZVt0ICsgNTYwNCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIEogPSBlW2VbaCArIDIwID4+IDJdID4+IDJdLCBjID0gMCwgSCA9IFggLSAxNiB8IDAsIFggPSBILCBlW0ggKyAxMiA+PiAyXSA9IDEsIGcgPSBlW2ggKyA0NCA+PiAyXSwgbSA9IGFmKCksIGVbSiArIDMyID4+IDJdID0gMCwgZVtKICsgMzYgPj4gMl0gPSAwLCBpID0gZVtKICsgMTYgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaSkKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBBOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocCA9IGVbSiArIDIwID4+IDJdICsgWihjLCA3NikgfCAwLCBDID0gZVtwICsgMjAgPj4gMl0sIEMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsID0gZVt0ICsgNTU4NCA+PiAyXSArIFooYywgMTA4MCkgfCAwLCB4ID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRSA9IGVbcCArIDI4ID4+IDJdICsgWih4LCAxNTIpIHwgMCwgZVtFICsgMjQgPj4gMl0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodSA9IEUgKyAyOCB8IDAsIG8gPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCID0gdSArIFoobywgMzYpIHwgMCwgaSA9IEIsIGVbaSArIDggPj4gMl0gIT0gZVtpID4+IDJdID8gaSA9IGVbaSArIDEyID4+IDJdID09IGVbaSArIDQgPj4gMl0gOiBpID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpIHx8IChzID0gZVtFICsgMTYgPj4gMl0sIEMgPSBlW0UgKyAyMCA+PiAyXSwgIVoocywgQykpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKEQgPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGogPSBlW0IgKyAyMCA+PiAyXSArIFooRCwgNDApIHwgMCwgWihlW2ogKyAyMCA+PiAyXSwgZVtqICsgMTYgPj4gMl0pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAocyA9IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSBlW2ogKyAyNCA+PiAyXSwgQyA9IEUyKDEsIDQ0KSwgIUMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW0MgKyAxMiA+PiAyXSA9IEosIGVbQyA+PiAyXSA9IGMsIGVbQyArIDQwID4+IDJdID0gbSwgZVtDICsgMzIgPj4gMl0gPSBhLCBlW0MgKyAyOCA+PiAyXSA9IGYsIGVbQyArIDI0ID4+IDJdID0gbCwgZVtDICsgMjAgPj4gMl0gPSBwLCBlW0MgKyAxNiA+PiAyXSA9IEIsIGVbQyArIDQgPj4gMl0gPSB4LCBlW0MgKyA4ID4+IDJdID0gaSArIFoocywgNTIpLCBlW0MgKyAzNiA+PiAyXSA9IEggKyAxMiwgYjEoZywgMjUxLCBDKSwgcyA9IHMgKyAxIHwgMCwgIShzID4+PiAwIDwgWihlW2ogKyAyMCA+PiAyXSwgZVtqICsgMTYgPj4gMl0pID4+PiAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBlW0UgKyAxNiA+PiAyXSwgQyA9IGVbRSArIDIwID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEQgPSBEICsgMSB8IDAsICEoRCA+Pj4gMCA8IFoocywgQykgPj4+IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG8gPSBvICsgMSB8IDAsICEobyA+Pj4gMCA8IGRbRSArIDI0ID4+IDJdKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMgPSBlW3AgKyAyMCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHggPSB4ICsgMSB8IDAsICEoQyA+Pj4gMCA+IHggPj4+IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVbSiArIDE2ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPSBjICsgMSB8IDAsIGMgPj4+IDAgPCBpID4+PiAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVbSCArIDEyID4+IDJdID0gMDsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlmIChsMShlW2ggKyA0NCA+PiAyXSksIG0gJiYgSTEobSksIFggPSBIICsgMTYgfCAwLCAhZVtIICsgMTIgPj4gMl0pCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoRDIgPSBlW2ggKyAyOCA+PiAyXSwgZVtmMiArIDEyID4+IDJdID0gMCwgZFtEMiArIDk2ID4+IDJdIDw9IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgTDIgPSBlW2ggKyAzMiA+PiAyXSwgbCA9IDAsIHcyID0gZVtlW2ggKyAyMCA+PiAyXSA+PiAyXSwgZVt3MiArIDI0ID4+IDJdID0gMCwgRSA9IGVbdzIgKyAxNiA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghRSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgWTIgPSAxNzk3NjkzMTM0ODYyMzE1N2UyOTI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKEggPSBlW3cyICsgMjAgPj4gMl0sIHggPSBlW2VbaCArIDI0ID4+IDJdICsgMjQgPj4gMl0sIFkyID0gMTc5NzY5MzEzNDg2MjMxNTdlMjkyLCBpID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0MCA9IEggKyBaKGksIDc2KSB8IDAsIGVbdDAgKyA3MiA+PiAyXSA9IDAsIGogPSBlW3QwICsgMjAgPj4gMl0sIGopIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChtID0gZVt0MCArIDI4ID4+IDJdLCBjID0gMCwgZzIgPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlMCA9IG0gKyBaKGcyLCAxNTIpIHwgMCwgcCA9IGVbZTAgKyAyNCA+PiAyXSwgcCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoRCA9IGUwICsgMjggfCAwLCBVID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IEQgKyBaKFUsIDM2KSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtmICsgOCA+PiAyXSA9PSBlW2YgPj4gMl0gfCBlW2YgKyAxMiA+PiAyXSA9PSBlW2YgKyA0ID4+IDJdIHx8IChCID0gWihlW2UwICsgMjAgPj4gMl0sIGVbZTAgKyAxNiA+PiAyXSksICFCKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChnID0gZVtmICsgMjAgPj4gMl0sIGEgPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPSBnICsgWihhLCA0MCkgfCAwLCBvID0gWihlW3MgKyAyMCA+PiAyXSwgZVtzICsgMTYgPj4gMl0pLCBvKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKE8gPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFgyID0gZVtzICsgMjQgPj4gMl0gKyBaKE8sIDUyKSB8IDAsIEMgPSBlW1gyICsgNDggPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFDIHx8IChKID0gZVtYMiArIDggPj4gMl0sIGYgPSBlW0ogPj4gMl0sIGYgJiYgKG4gPSBRMltKICsgOCA+PiAzXSAvICsoZiB8IDApLCBQMiA9IG4gPiBQMiA/IG4gOiBQMiwgWTIgPSBuIDwgWTIgPyBuIDogWTIpLCB0ID0gMSwgKEMgfCAwKSA9PSAxKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyB6ID0gSiArIFoodCwgMjQpIHwgMCwgdSA9IGVbeiA+PiAyXSwgZiA9IGVbeiAtIDI0ID4+IDJdLCAodSB8IDApICE9IChmIHwgMCkgJiYgKG4gPSAoUTJbeiArIDggPj4gM10gLSBRMlt6IC0gMTYgPj4gM10pIC8gKyh1IC0gZiB8IDApLCBQMiA9IG4gPiBQMiA/IG4gOiBQMiwgWTIgPSBuIDwgWTIgPyBuIDogWTIpLCB0ID0gdCArIDEgfCAwLCAoQyB8IDApICE9ICh0IHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZiA9IFooZVtYMiArIDI0ID4+IDJdIC0gZVtYMiArIDE2ID4+IDJdIHwgMCwgZVtYMiArIDIwID4+IDJdIC0gZVtYMiArIDEyID4+IDJdIHwgMCksIGwgPSBmICsgbCB8IDAsIGVbdzIgKyAyNCA+PiAyXSA9IGwsIGMgPSBmICsgYyB8IDAsIGVbdDAgKyA3MiA+PiAyXSA9IGMsIE8gPSBPICsgMSB8IDAsIChvIHwgMCkgPT0gKE8gfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA9IGEgKyAxIHwgMCwgKEIgfCAwKSA9PSAoYSB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFUgPSBVICsgMSB8IDAsIChwIHwgMCkgPT0gKFUgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZzIgPSBnMiArIDEgfCAwLCAoaiB8IDApID09IChnMiB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiA9ICsoYyA+Pj4gMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9ICsoMSA8PCBlWyh4ICsgWihpLCA1MikgfCAwKSArIDI0ID4+IDJdKSArIC0xLCBmMSA9IG4gKiBuICogdiArIGYxLCBpID0gaSArIDEgfCAwLCAoRSB8IDApID09IChpIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWVbTDIgKyA4ID4+IDJdKQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoSCA9IHcyICsgNDAgfCAwLCBEID0gTDIgKyA1MTg0IHwgMCwgQiA9IEwyICsgMjAgfCAwLCBpMCA9IChQMiArIFkyKSAqIDAuNSwgdCA9IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IHQgPDwgMiwgdyA9IEdbaSArIEIgPj4gMl0sIG4yID0gVygkaSh3KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4yIDwgVyg0Mjk0OTY3Mjk2KSAmIG4yID49IFcoMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IH5+bjIgPj4+IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgcCA9IHcgPiBXKDApLCBnID0gZVtEMiArIDk2ID4+IDJdLCB4ID0gWCAtIDE2IHwgMCwgWCA9IHgsIHcgPSBHW2kgKyBEID4+IDJdLCBjMiA9ICtXKHcgLyBXKDEwKSksIGcxKCtjMiksIGkgPSBXMCgxKSB8IDAsIGYgPSBXMCgwKSB8IDAsIG8gPSBpID4+PiAyMCB8IDAsIGwgPSBvICYgMjA0NywgdSA9IGwgLSAxMDg2IHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodSA+Pj4gMCA8PSA0Mjk0OTY3MTY3KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqID0gZiA8PCAxLCBzID0gaSA8PCAxIHwgZiA+Pj4gMzEsIG0gPSBzICsgMjA5NzE1MiB8IDAsICFqICYgKG0gfCAwKSA9PSAyMDk3MTUyIHwgbSA+Pj4gMCA8IDIwOTcxNTIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9IDEsICEocyB8IGopIHx8IChuID0gYzIgKyAxMCwgKHMgfCAwKSA9PSAtMjA5NzE1MiAmIChqIHwgMCkgIT0gMCB8IHMgPj4+IDAgPiA0MjkyODcwMTQ0KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IChpIHwgMCkgPCAwID8gMCA6IGMyICogYzI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodSA+Pj4gMCA8PSA0Mjk0OTY3MTY3KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPSBjMiArIDEsIGwgPj4+IDAgPD0gOTU3KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobyA+Pj4gMCA8PSAyMDQ3KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gWCAtIDE2IHwgMCwgUTJbaSArIDggPj4gM10gPSAzMTA1MDM2MTg0NjAxNDE4ZTIxNiwgbiA9IFEyW2kgKyA4ID4+IDNdICogMzEwNTAzNjE4NDYwMTQxOGUyMTY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gWCAtIDE2IHwgMCwgUTJbaSArIDggPj4gM10gPSAxMjg4MjI5NzUzOTE5NDI2N2UtMjQ3LCBuID0gUTJbaSArIDggPj4gM10gKiAxMjg4MjI5NzUzOTE5NDI2N2UtMjQ3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBRMls1ODM5XSwgdiA9IG4gKiAxLjI1ICsgLTEsIFAgPSBuICogMCwgbTIgPSB2ICsgUCwgeSA9IFEyWzU0MDJdICogMyArIFEyWzU4NDFdLCB4MiA9IG0yICsgeSwgbiA9IFEyWzU0MDRdLCByMCA9IG0yICogbiwgcSA9IHYsIHYgPSB2ICogbiwgbiA9IHEgKiB2LCBxID0geDIgKyBuLCB2ID0gUTJbNTQwM10gKiAzICsgUTJbNTg0Ml0gKyAobTIgKyAoeSAtIHgyKSkgKyBQICogKHIwICsgdikgKyAobiArICh4MiAtIHEpKSwgbiA9IG0yICogcjAsIG4gPSB2ICsgbTIgKiBuICogKG4gKiAobiAqIChtMiAqIFEyWzU0MTBdICsgUTJbNTQwOV0pICsgKG0yICogUTJbNTQwOF0gKyBRMls1NDA3XSkpICsgKG0yICogUTJbNTQwNl0gKyBRMls1NDA1XSkpLCB5ID0gcSArIG4sIFEyW3ggKyA4ID4+IDNdID0gbiArIChxIC0geSksIEEwKDAsIGYgJiAtMTM0MjE3NzI4KSwgQTAoMSwgaSB8IDApLCBuID0gK04wKCksIGcxKCt5KSwgaSA9IFcwKDEpIHwgMCwgQTAoMCwgVzAoMCkgJiAtMTM0MjE3NzI4KSwgQTAoMSwgaSB8IDApLCB2ID0gK04wKCksIFAgPSBuICogdiwgdiA9IChjMiAtIG4pICogdiArIGMyICogKFEyW3ggKyA4ID4+IDNdICsgKHkgLSB2KSksIGcxKCtQKSwgaSA9IFcwKDEpIHwgMCwgVzAoMCkgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgQTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGYgPSBpID4+PiAyMCAmIDIwNDcsIGYgLSA5NjkgPj4+IDAgPCA2MykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPSBQICsgMSwgZiA+Pj4gMCA8IDk2OSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHUgPSBmID4+PiAwIDwgMTAzMywgZiA9IDAsIHUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoaSB8IDApIDwgMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IFggLSAxNiB8IDAsIFEyW2kgKyA4ID4+IDNdID0gMTI4ODIyOTc1MzkxOTQyNjdlLTI0NywgbiA9IFEyW2kgKyA4ID4+IDNdICogMTI4ODIyOTc1MzkxOTQyNjdlLTI0NzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBYIC0gMTYgfCAwLCBRMltpICsgOCA+PiAzXSA9IDMxMDUwMzYxODQ2MDE0MThlMjE2LCBuID0gUTJbaSArIDggPj4gM10gKiAzMTA1MDM2MTg0NjAxNDE4ZTIxNjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5ID0gdiwgbiA9IFEyWzUxMzNdLCB2ID0gUCAqIFEyWzUxMzJdICsgbiwgbiA9IHYgLSBuLCB5ID0geSArIChuICogUTJbNTEzNV0gKyAobiAqIFEyWzUxMzRdICsgUCkpLCBuID0geSAqIHksIFAgPSBuICogbiAqICh5ICogUTJbNTEzOV0gKyBRMls1MTM4XSksIG4gPSBuICogKHkgKiBRMls1MTM3XSArIFEyWzUxMzZdKSwgZzEoK3YpLCBXMCgxKSB8IDAsIGwgPSBXMCgwKSB8IDAsIHUgPSBsIDw8IDQgJiAyMDMyLCB2ID0gUCArIChuICsgKFEyW3UgKyA0MTE2OCA+PiAzXSArIHkpKSwgbyA9IDAsIHUgPSB1ICsgNDExNzYgfCAwLCBpID0gbyArIGVbdSA+PiAyXSB8IDAsIHUgPSBlW3UgKyA0ID4+IDJdICsgKGwgPDwgMTMpIHwgMCwgdSA9IGkgPj4+IDAgPCBvID4+PiAwID8gdSArIDEgfCAwIDogdSwgIWYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShsICYgLTIxNDc0ODM2NDgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEwKDAsIGkgfCAwKSwgQTAoMSwgdSAtIDEwNTgwMTMxODQgfCAwKSwgbiA9ICtOMCgpLCBuID0gKG4gKiB2ICsgbikgKiA1NDg2MTI0MDY4NzkzNjg5ZTI4ODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEwKDAsIGkgfCAwKSwgcyA9IHUgKyAxMDcxNjQ0NjcyIHwgMCwgQTAoMSwgcyB8IDApLCBxID0gK04wKCksIHkgPSBxICogdiwgbiA9IHkgKyBxLCBSMihuKSA8IDEgJiYgKGkgPSBYIC0gMTYgfCAwLCBRMltpICsgOCA+PiAzXSA9IDIyMjUwNzM4NTg1MDcyMDE0ZS0zMjQsIFEyW2kgKyA4ID4+IDNdID0gUTJbaSArIDggPj4gM10gKiAyMjI1MDczODU4NTA3MjAxNGUtMzI0LCBBMCgwLCAwKSwgQTAoMSwgcyAmIC0yMTQ3NDgzNjQ4KSwgUCA9IG4gPCAwID8gLTEgOiAxLCB2ID0gbiArIFAsIG4gPSB2ICsgKHkgKyAocSAtIG4pICsgKG4gKyAoUCAtIHYpKSkgLSBQLCBuID0gKGExID0gK04wKCksIFoxID0gbiwgcDEgPSBuID09IDAsIHAxID8gYTEgOiBaMSkpLCBuID0gbiAqIDIyMjUwNzM4NTg1MDcyMDE0ZS0zMjQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQTAoMCwgaSB8IDApLCBBMCgxLCB1IHwgMCksIG4gPSArTjAoKSwgbiA9IG4gKiB2ICsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgWCA9IHggKyAxNiB8IDAsIHYgPSBuLCB5ID0gUTJbdzIgKyAzMiA+PiAzXSwgbiA9IC0xOwogICAgICAgICAgICAgICAgICAgICAgICAgIGY6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGcgfCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEodyA+IFcoMCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobSA9IEdyKGVbaCArIDI0ID4+IDJdLCBEMiksICFtKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgUCA9IDAsIG4gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgQTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaTAgPT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwID0gcCAmJiBhID4+PiAwIDwgSDAgPj4+IDAgPyBhIDogSDAsIG0yID0geSAtIGYxIC8gdiwgZyA9IHQgKyAxIHwgMCwgaSA9IHQgPDwgMywgbCA9IGkgKyBIIHwgMCwgdSA9IGkgKyBmMiB8IDAsIHVyKGVbZVtoICsgMjAgPj4gMl0gPj4gMl0sIHQsIGkwLCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW0QyICsgOTYgPj4gMl0gIT0gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZiA9IDAsICF4ZShtLCBlW2ggKyAzNiA+PiAyXSwgdzIsIGcsIEMwLCBmMiArIDEyIHwgMCwgcCwgMCwgZVtoICsgOCA+PiAyXSwgZVtoID4+IDJdLCBlW2ggKyAxNiA+PiAyXSwgMCwgUzIpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSAxLCB2ID0gaTAsIFAgPSB2LCB5ID0gWTI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IEcyW0QyID4+IDFdLCAhKChpIC0gMyAmIDY1NTM1KSA+Pj4gMCA8IDQgfCAoaSAtIDEwMjQgJiA2NTUzNSkgPj4+IDAgPCAxNDM2KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZiA9IDAsIHQgPyBuID0gUTJbdSArIDggPj4gM10gKyBRMltsID4+IDNdIDogbiA9IFEyW0ggPj4gM10sICEobiA8IG0yKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGYgPSAwLCB4ZShtLCBlW2ggKyAzNiA+PiAyXSwgdzIsIGcsIEMwLCBmMiArIDEyIHwgMCwgcCwgMCwgZVtoICsgOCA+PiAyXSwgZVtoID4+IDJdLCBlW2ggKyAxNiA+PiAyXSwgMCwgUzIpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ID0gUDIsIHkgPSBpMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID8gbiA9IFEyW3UgKyA4ID4+IDNdICsgUTJbbCA+PiAzXSA6IG4gPSBRMltIID4+IDNdLCBuIDwgbTIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgPSBQMiwgeSA9IGkwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUCA9IGkwLCB2ID0gUCwgeSA9IFkyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobyA9IDEsIG4gPSBpMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocSA9IG4sIG4gPSAodiArIHkpICogMC41LCBSMihuIC0gcSkgPD0gcSAqIDVlLTYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IHVyKGVbZVtoICsgMjAgPj4gMl0gPj4gMl0sIHQsIG4sIDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGw6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbRDIgKyA5NiA+PiAyXSA9PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSBHMltEMiA+PiAxXSwgISgoaSAtIDMgJiA2NTUzNSkgPj4+IDAgPj0gNCAmIChpIC0gMTAyNCAmIDY1NTM1KSA+Pj4gMCA+IDE0MzUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXhlKG0sIGVbaCArIDM2ID4+IDJdLCB3MiwgZywgQzAsIGYyICsgMTIgfCAwLCBwLCAwLCBlW2ggKyA4ID4+IDJdLCBlW2ggPj4gMl0sIGVbaCArIDE2ID4+IDJdLCAwLCBTMikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeDIgPSB2LCByMCA9IFAsIGkgPSBmLCBxID0gbiwgdiA9IG4sIFAgPSBuLCB0ID8gYzIgPSBRMlt1ICsgOCA+PiAzXSArIFEyW2wgPj4gM10gOiBjMiA9IFEyW0ggPj4gM10sICEoYzIgPCBtMikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeDIgPSB2LCByMCA9IFAsIGkgPSBmLCBxID0gbiwgdiA9IG4sIFAgPSBuLCB0ID8gYzIgPSBRMlt1ICsgOCA+PiAzXSArIFEyW2wgPj4gM10gOiBjMiA9IFEyW0ggPj4gM10sICEoYzIgPCBtMikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoZiB8ICFhKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBuLCBmID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID0gMSwgYSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEgPSB5LCB4MiA9IG4sIHIwID0gbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmID0gMCwgcSA9IHksIHgyID0gbiwgcjAgPSBuLCB5ID0gbiwgIXhlKG0sIGVbaCArIDM2ID4+IDJdLCB3MiwgZywgQzAsIGYyICsgMTIgfCAwLCBwLCAwLCBlW2ggKyA4ID4+IDJdLCBlW2ggPj4gMl0sIGVbaCArIDE2ID4+IDJdLCAwLCBTMikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBxLCB2ID0geDIsIFAgPSByMCwgZiA9IGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvID0gbyArIDEgfCAwLCAobyB8IDApID09IDEyOCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMShtKSwgbiA9IFAgPT0gMCA/IG4gOiBQOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXIoZVtlW2ggKyAyMCA+PiAyXSA+PiAyXSwgdCwgbiwgMSksIGYgPSAoZjIgKyAxNiB8IDApICsgKHQgPDwgMykgfCAwLCB0ID8gKGkgPSB0IDw8IDMsIG4gPSBRMlsoaSArIGYyIHwgMCkgKyA4ID4+IDNdICsgUTJbaSArIEggPj4gM10pIDogbiA9IFEyW0ggPj4gM10sIFEyW2YgPj4gM10gPSBuLCB0ID0gdCArIDEgfCAwLCAhKHQgPj4+IDAgPCBkW0wyICsgOCA+PiAyXSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgaWYgKEUwID0gZVtlW2ggKyAzMiA+PiAyXSArIDggPj4gMl0sICFFMCB8fCAoaSA9IGVbZVtoICsgMjAgPj4gMl0gPj4gMl0sIE8gPSBlW2kgKyAxNiA+PiAyXSwgIU8pKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgZm9yICh3MiA9IGVbaSArIDIwID4+IDJdLCBvID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgbCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIGY6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh0MCA9IG8gLSAxIHwgMCwgYyA9IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gdzIgKyBaKGMsIDc2KSB8IDAsIE0wID0gZVtsICsgMjAgPj4gMl0sIE0wKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChlMCA9IGVbKGVbZVtoICsgMjQgPj4gMl0gKyAyNCA+PiAyXSArIFooYywgNTIpIHwgMCkgKyAyNCA+PiAyXSwgbjIgPSBXKCsoZTAgPj4+IDApICogMC4wNjI1KSwgdSA9IGVbRDIgKyA4OCA+PiAyXSwgaSA9IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGEgPSBaKGksIE0wKSwgdCA9IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSAoKGYyICsgMTYgfCAwKSArIFooaSwgMTIwKSB8IDApICsgWih0LCAxMikgfCAwLCBCID0gdSArIFoodCArIGEgfCAwLCAxMikgfCAwLCB3ID0gVyhuMiAqIFcoZVtCID4+IDJdKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVyhSMih3KSkgPCBXKDIxNDc0ODM2NDgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gfn53OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZyA9IC0yMTQ3NDgzNjQ4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbZiA+PiAyXSA9IGcsIHcgPSBXKG4yICogVyhlW0IgKyA0ID4+IDJdKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVyhSMih3KSkgPCBXKDIxNDc0ODM2NDgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gfn53OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZyA9IC0yMTQ3NDgzNjQ4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbZiArIDQgPj4gMl0gPSBnLCB3ID0gVyhuMiAqIFcoZVtCICsgOCA+PiAyXSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFcoUjIodykpIDwgVygyMTQ3NDgzNjQ4KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZyA9IH5+dzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcgPSAtMjE0NzQ4MzY0ODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtmICsgOCA+PiAyXSA9IGcsIHQgPSB0ICsgMSB8IDAsIChNMCB8IDApID09ICh0IHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IGkgKyAxIHwgMCwgKEUwIHwgMCkgPT0gKGkgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoeiA9IGVbbCArIDI4ID4+IDJdLCB0ID0gMCwgcyA9IChmMiArIDE2IHwgMCkgKyBaKHQwLCAxMjApIHwgMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChVID0geiArIFoodCwgMTUyKSB8IDAsIEMgPSBlW1UgKyAyNCA+PiAyXSwgQykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChKID0gVSArIDI4IHwgMCwgaSA9IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IEogKyBaKGksIDM2KSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbdSArIDggPj4gMl0gPT0gZVt1ID4+IDJdIHwgZVt1ICsgMTIgPj4gMl0gPT0gZVt1ICsgNCA+PiAyXSB8fCAoRSA9IFooZVtVICsgMjAgPj4gMl0sIGVbVSArIDE2ID4+IDJdKSwgIUUpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChmID0gaSA8PCAyLCBhID0gWih0LCAxMiksIEggPSBmICsgKGEgKyBzIHwgMCkgfCAwLCB4ID0gZiArIChhICsgKChmMiArIDE2IHwgMCkgKyBaKG8sIDEyMCkgfCAwKSB8IDApIHwgMCwgaiA9IGVbdSArIDIwID4+IDJdLCBnMiA9IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChYMiA9IGogKyBaKGcyLCA0MCkgfCAwLCBtID0gWihlW1gyICsgMjAgPj4gMl0sIGVbWDIgKyAxNiA+PiAyXSksIG0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChwID0gZVt4ID4+IDJdLCBEID0gZVtIID4+IDJdLCBCID0gcCAtIEQgfCAwLCBmID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHoyID0gZVtYMiArIDI0ID4+IDJdICsgWihmLCA1MikgfCAwLCB1ID0gZTAgLSBlW3oyICsgMjggPj4gMl0gfCAwLCBhID0gcCAtIHUgfCAwLCBhID0gKHUgfCAwKSA8IChEIHwgMCkgPyBCIDogKGEgfCAwKSA+IDAgPyBhIDogMCwgZyA9IGVbejIgKyA0ID4+IDJdICsgWihvLCAyNCkgfCAwLCBsID0gZVt6MiArIDQ0ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IFooYSwgMykgLSAyIHwgMCwgYSA9IGEgPyBsIDogMCwgZVtnID4+IDJdID0gYSwgIWEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2cgKyA0ID4+IDJdID0gZVsoZVt6MiArIDggPj4gMl0gKyBaKGEsIDI0KSB8IDApIC0gMjQgPj4gMl0sIGEgPSBlW3oyID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHUgPSBaKGEsIDMpLCBlW2cgPj4gMl0gPSB1LCAhYSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IGVbejIgKyA4ID4+IDJdLCBMMiA9IGVbKGEgKyBaKGwsIDI0KSB8IDApIC0gMjQgPj4gMl0sIGwgPSBsICsgdSB8IDAsIGVbZyArIDQgPj4gMl0gPSBlWyhhICsgWihsLCAyNCkgfCAwKSAtIDI0ID4+IDJdIC0gTDIsIGEgPSBMMiArIGVbejIgPj4gMl0gfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbZyArIDE2ID4+IDJdID0gYSwgZVt6MiArIDQ0ID4+IDJdID0gbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmID0gZiArIDEgfCAwLCAobSB8IDApID09IChmIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGcyID0gZzIgKyAxIHwgMCwgKEUgfCAwKSA9PSAoZzIgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSBpICsgMSB8IDAsIChDIHwgMCkgPT0gKGkgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgKyAxIHwgMCwgKE0wIHwgMCkgPT0gKHQgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID0gYyArIDEgfCAwLCAoTyB8IDApID09IChjIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnID0gdzIgKyBaKGwsIDc2KSB8IDAsIEMgPSBlW2cgKyAyMCA+PiAyXSwgQykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSBlWyhlW2VbaCArIDI0ID4+IDJdICsgMjQgPj4gMl0gKyBaKGwsIDUyKSB8IDApICsgMjQgPj4gMl0sIG4yID0gVygrKGogPj4+IDApICogMC4wNjI1KSwgdSA9IGVbRDIgKyA4OCA+PiAyXSwgYyA9IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChhID0gWihDLCBjKSwgZiA9IChmMiArIDE2IHwgMCkgKyBaKGMsIDEyMCkgfCAwLCB0ID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBmICsgWih0LCAxMikgfCAwLCBEID0gdSArIFoodCArIGEgfCAwLCAxMikgfCAwLCB3ID0gVyhuMiAqIFcoZVtEID4+IDJdKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChXKFIyKHcpKSA8IFcoMjE0NzQ4MzY0OCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCID0gfn53OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiA9IC0yMTQ3NDgzNjQ4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtpID4+IDJdID0gQiwgdyA9IFcobjIgKiBXKGVbRCArIDQgPj4gMl0pKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFcoUjIodykpIDwgVygyMTQ3NDgzNjQ4KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgPSB+fnc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCID0gLTIxNDc0ODM2NDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2kgKyA0ID4+IDJdID0gQiwgdyA9IFcobjIgKiBXKGVbRCArIDggPj4gMl0pKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFcoUjIodykpIDwgVygyMTQ3NDgzNjQ4KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgPSB+fnc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCID0gLTIxNDc0ODM2NDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtpICsgOCA+PiAyXSA9IEIsIHQgPSB0ICsgMSB8IDAsIChDIHwgMCkgPT0gKHQgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID0gYyArIDEgfCAwLCAoRTAgfCAwKSA9PSAoYyB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChtID0gZVtnICsgMjggPj4gMl0sIGkgPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChKID0gbSArIFooaSwgMTUyKSB8IDAsIHAgPSBlW0ogKyAyNCA+PiAyXSwgcCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoRCA9IEogKyAyOCB8IDAsIGcyID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IEQgKyBaKGcyLCAzNikgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbZiArIDggPj4gMl0gPT0gZVtmID4+IDJdIHwgZVtmICsgMTIgPj4gMl0gPT0gZVtmICsgNCA+PiAyXSB8fCAoQiA9IFooZVtKICsgMjAgPj4gMl0sIGVbSiArIDE2ID4+IDJdKSwgIUIpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGcgPSAoKGYyICsgMTYgfCAwKSArIFooaSwgMTIpIHwgMCkgKyAoZzIgPDwgMikgfCAwLCB1ID0gZVtmICsgMjAgPj4gMl0sIGMgPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEUgPSB1ICsgWihjLCA0MCkgfCAwLCBhID0gWihlW0UgKyAyMCA+PiAyXSwgZVtFICsgMTYgPj4gMl0pLCBhKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKEggPSBlW2cgPj4gMl0sIGYgPSAwOyBzID0gZVtFICsgMjQgPj4gMl0gKyBaKGYsIDUyKSB8IDAsIGVbcyArIDQ0ID4+IDJdID0gMCwgeCA9IGVbcyArIDQgPj4gMl0sIHQgPSBqIC0gZVtzICsgMjggPj4gMl0gfCAwLCB0ID0gKHQgfCAwKSA8IChIIHwgMCkgPyBIIC0gdCB8IDAgOiAwLCB0ID0gdCA/IFoodCwgMykgLSAyIHwgMCA6IDAsIGVbeCA+PiAyXSA9IHQsIHQgJiYgKGVbeCArIDQgPj4gMl0gPSBlWyhlW3MgKyA4ID4+IDJdICsgWih0LCAyNCkgfCAwKSAtIDI0ID4+IDJdLCBlW3ggKyAxNiA+PiAyXSA9IGVbcyA+PiAyXSwgZVtzICsgNDQgPj4gMl0gPSB0KSwgZiA9IGYgKyAxIHwgMCwgKGEgfCAwKSAhPSAoZiB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPSBjICsgMSB8IDAsIChCIHwgMCkgPT0gKGMgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnMiA9IGcyICsgMSB8IDAsIChwIHwgMCkgPT0gKGcyIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSBpICsgMSB8IDAsIChDIHwgMCkgPT0gKGkgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGwgKyAxIHwgMCwgKE8gfCAwKSA9PSAobCB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG8gPSBvICsgMSB8IDAsIChFMCB8IDApID09IChvIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChmID0gR3IoZVtoICsgMjQgPj4gMl0sIGVbaCArIDI4ID4+IDJdKSwgIWYgfHwgKGkgPSB4ZShmLCBlW2ggKyAzNiA+PiAyXSwgZVtlW2ggKyAyMCA+PiAyXSA+PiAyXSwgZVtlW2ggKyAzMiA+PiAyXSArIDggPj4gMl0sIEMwLCBrMCwgSDAsIHAyLCBlW2ggKyA0ID4+IDJdLCBlW2ggPj4gMl0sIGVbaCArIDE2ID4+IDJdLCAxLCBTMiksIEkxKGYpLCAhaSkpCiAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgIG8gPSAxOwogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgbyA9IDA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoWCA9IGYyICsgMTIxNiB8IDAsICFvKSB7CiAgICAgICAgICAgICAgICAgIFEoUzIsIDEsIDEwMTE3LCAwKSwgTGUocDIpOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZVtrMCA+PiAyXSA9IGVbazAgPj4gMl0gKyAyOwogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICBpZiAoZVtBICsgNjAgPj4gMl0pIHsKICAgICAgICAgICAgICAgICAgICBpZiAoYSA9IFUyKGVbQSArIDY0ID4+IDJdKSwgIWEpIHsKICAgICAgICAgICAgICAgICAgICAgIFEoUzIsIDEsIDM3ODIsIDApLCBMZShwMik7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoazIoYSwgNjUzNjgsIDIpLCBrMihhICsgNCB8IDAsIDAsIDEpLCBrID0gYSArIDUgfCAwLCBsID0gYSArIDIgfCAwLCBlW3AyICsgNCA+PiAyXSkgewogICAgICAgICAgICAgICAgICAgICAgZm9yIChvID0gMzsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSBlW2VbcDIgKyA4ID4+IDJdICsgKFQwIDw8IDIpID4+IDJdLCBGW2gwICsgMTEgfCAwXSA9IGkgJiAxMjcsIEEgPSAxLCBpID4+PiAwID49IDEyOCkKICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgZiA9IGkgPj4+IDcgfCAwLCBGWyhoMCArIDExIHwgMCkgKyBBIHwgMF0gPSBmIHwgMTI4LCBBID0gQSArIDEgfCAwLCB0ID0gaSA+Pj4gMCA+IDE2MzgzLCBpID0gZiwgISF0OyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID0gQSAmIDI1NSwgZiA9IG8gJiA2NTUzNSwgaSArIGYgPj4+IDAgPj0gNjU1MzYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGIwICYgMjU1KSA9PSAyNTUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICAgIGsyKGwsIGYsIDIpLCBrMihrLCA2NTM2OCwgMiksIGIwID0gYjAgKyAxIHwgMCwgazIoayArIDQgfCAwLCBiMCAmIDI1NSwgMSksIGwgPSBrICsgMiB8IDAsIG8gPSAzLCBrID0gayArIDUgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZiA9IEEgJiAyNTU7IGkgPSBpIC0gMSB8IDAsIGsyKGssIElbaSArIChoMCArIDExIHwgMCkgfCAwXSwgMSksIGsgPSBrICsgMSB8IDAsIEEgPSBBIC0gMSB8IDAsICEhKEEgJiAyNTUpOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAobyA9IGYgKyBvIHwgMCwgVDAgPSBUMCArIDEgfCAwLCAhKFQwID4+PiAwIDwgZFtwMiArIDQgPj4gMl0pKQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgQSA9IG8gJiA2NTUzNTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgIEEgPSAzOwogICAgICAgICAgICAgICAgICAgIGsyKGwsIEEsIDIpLCBBID0gayAtIGEgfCAwLCB1NihBICsgciB8IDAsIHIsIGVbazAgPj4gMl0pLCBGMihyLCBhLCBBKSwgUihhKSwgZVtrMCA+PiAyXSA9IEEgKyBlW2swID4+IDJdOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIExlKHAyKSwgayA9IDE7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBrID0gMCwgUShTMiwgMSwgMjc2MjUsIDApLCBMZShwMiksIFIoYSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBYID0gaDAgKyAxNiB8IDAsIGs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gbGUoQSkgewogICAgICAgICAgICAgIHZhciBpID0gMCwgciA9IDAsIGYgPSAwLCBrID0gMCwgdCA9IDAsIG4gPSAwLCBsID0gMCwgYSA9IDAsIHUgPSAwLCBvID0gMCwgZyA9IDAsIGggPSAwLCBzID0gMCwgdyA9IDAsIEIgPSAwLCBjID0gMCwgdiA9IDAsIEMgPSAwLCBtID0gMCwgeSA9IDAsIHAgPSAwLCBIID0gMCwgSiA9IDAsIEUgPSAwLCBEID0gMCwgVSA9IDAsIFAgPSAwLCB4ID0gMCwgeiA9IDAsIGogPSAwLCBPID0gMCwgcSA9IDAsIGYyID0gMCwgbjIgPSAwLCBnMiA9IDAsIHcyID0gMCwgYzIgPSAwOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgIGs6IHsKICAgICAgICAgICAgICAgICAgICAgIGY6IHsKICAgICAgICAgICAgICAgICAgICAgICAgQTogewogICAgICAgICAgICAgICAgICAgICAgICAgIGw6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGVbQSArIDg0ID4+IDJdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9IGVbQSArIDUyID4+IDJdLCBpID0gZVtBICsgMTk2ID4+IDJdLCByID4+PiAwIDwgaSA+Pj4gMCAmJiAoZiA9IGVbQSArIDY0ID4+IDJdLCBmID4+PiAwIDwgaSArIDEgPj4+IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUShlW0EgKyAyMzYgPj4gMl0sIDEsIDE4Nzc2LCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZVtBICsgNDQgPj4gMl0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBlW0EgKyAzNiA+PiAyXSwgaSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW0EgKyA0NCA+PiAyXSA9IDAsIHUgPSBlW0EgKyA2OCA+PiAyXSwgaSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0gZVtBICsgNTIgPj4gMl0sIGkgPSBlW0EgKyAxOTYgPj4gMl0sIHIgPj4+IDAgPCBpID4+PiAwICYmIChmID0gZVtBICsgNjQgPj4gMl0sIGYgPj4+IDAgPCBpICsgMSA+Pj4gMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRKGVbQSArIDIzNiA+PiAyXSwgMSwgMTg4MjEsIDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlW0EgKyA0NCA+PiAyXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IGVbQSArIDM2ID4+IDJdLCBpID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbQSArIDQ0ID4+IDJdID0gMCwgdSA9IGVbQSArIDQ4ID4+IDJdLCBpID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPSBlW0EgKyA1MiA+PiAyXSwgZiA9IGVbQSArIDE5NiA+PiAyXSwgcyA+Pj4gMCA8IGYgPj4+IDAgJiYgKGogPSBlW0EgKyA2NCA+PiAyXSwgaiA+Pj4gMCA8IGYgKyAxID4+PiAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFEoZVtBICsgMjM2ID4+IDJdLCAxLCAxODk1NiwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWVbQSArIDQ0ID4+IDJdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDID0gZVtBICsgNDAgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGVbQSArIDIyOCA+PiAyXSA9IDAsIGVbQSArIDIzMiA+PiAyXSA9IDAsIGVbQSArIDQ0ID4+IDJdID0gMCwgSCA9IGVbQSArIDIwMCA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0gSCArICh3IDw8IDQpIHwgMCwgbiA9IGVbciArIDggPj4gMl0sIG4pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobSA9IGVbciArIDEyID4+IDJdLCBpID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvID0gbiArIChpIF4gLTEpIHwgMCwgbCA9IG0gKyAoaSA8PCA0KSB8IDAsIGsgPSBvICsgZVtsID4+IDJdIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoayA+Pj4gMCA+IDMxIHx8ICh5ID0gZVtyID4+IDJdLCB5ID4+PiAwID4gLTEgPj4+IGsgPj4+IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgayA9IHkgPDwgaywgdCA9IHQgJiYgayA+Pj4gMCA+IHQgPj4+IDAgPyB0IDogaywgZVtBICsgMjI4ID4+IDJdID0gdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgayA9IG8gKyBlW2wgKyA0ID4+IDJdIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoayA+Pj4gMCA+IDMxIHx8IChsID0gZVtyICsgNCA+PiAyXSwgbCA+Pj4gMCA+IC0xID4+PiBrID4+PiAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBsIDw8IGssIHUgPSB1ICYmIGsgPj4+IDAgPiB1ID4+PiAwID8gdSA6IGssIGVbQSArIDIzMiA+PiAyXSA9IHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID0gaSArIDEgfCAwLCAobiB8IDApID09IChpIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHcgPSB3ICsgMSB8IDAsIChmIHwgMCkgPT0gKHcgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdCB8ICF1KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJW0EgfCAwXSB8fCAoZVtBICsgMTA4ID4+IDJdID0gZVtBICsgMjA4ID4+IDJdLCBlW0EgKyAxMDAgPj4gMl0gPSBlW0EgKyAyMDQgPj4gMl0sIGVbQSArIDExMiA+PiAyXSA9IGVbQSArIDIxNiA+PiAyXSwgZVtBICsgMTA0ID4+IDJdID0gZVtBICsgMjEyID4+IDJdKSwgaCA9IGVbQSArIDQ4ID4+IDJdLCBpID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFAgPSBlW0EgKyA1MiA+PiAyXSwgZiA9IGVbQSArIDE5NiA+PiAyXSwgUCA+Pj4gMCA8IGYgPj4+IDAgJiYgKGcyID0gZVtBICsgNjQgPj4gMl0sIGcyID4+PiAwIDwgZiArIDEgPj4+IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUShlW0EgKyAyMzYgPj4gMl0sIDEsIDE4OTExLCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZVtBICsgNDQgPj4gMl0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEUgPSBlW0EgKyAyMDAgPj4gMl0sIGwgPSBlW0EgKyAyOCA+PiAyXSwgQyA9IEUgKyAobCA8PCA0KSB8IDAsIHAgPSBlW0EgKyA0MCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZVtBICsgMjI4ID4+IDJdID0gMCwgZVtBICsgMjMyID4+IDJdID0gMCwgZVtBICsgNDQgPj4gMl0gPSAwLCBFID0gZVtBICsgMjAwID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSAoQiA8PCA0KSArIEUgfCAwLCBuID0gZVtyICsgOCA+PiAyXSwgbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChIID0gZVtyICsgMTIgPj4gMl0sIGkgPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gPSBuICsgKGkgXiAtMSkgfCAwLCBtID0gSCArIChpIDw8IDQpIHwgMCwgayA9IG8gKyBlW20gPj4gMl0gfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrID4+PiAwID4gMzEgfHwgKHkgPSBlW3IgPj4gMl0sIHkgPj4+IDAgPiAtMSA+Pj4gayA+Pj4gMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0geSA8PCBrLCB0ID0gdCAmJiBrID4+PiAwID4gdCA+Pj4gMCA/IHQgOiBrLCBlW0EgKyAyMjggPj4gMl0gPSB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gbyArIGVbbSArIDQgPj4gMl0gfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrID4+PiAwID4gMzEgfHwgKG0gPSBlW3IgKyA0ID4+IDJdLCBtID4+PiAwID4gLTEgPj4+IGsgPj4+IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgayA9IG0gPDwgaywgdSA9IHUgJiYgayA+Pj4gMCA+IHUgPj4+IDAgPyB1IDogaywgZVtBICsgMjMyID4+IDJdID0gdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSBpICsgMSB8IDAsIChuIHwgMCkgPT0gKGkgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQiA9IEIgKyAxIHwgMCwgKGYgfCAwKSA9PSAoQiB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0IHwgIXUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJW0EgfCAwXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCID0gZVtBICsgMTA4ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiA9IGVbQSArIDIwOCA+PiAyXSwgZVtBICsgMTA4ID4+IDJdID0gQiwgZVtBICsgMTAwID4+IDJdID0gZVtBICsgMjA0ID4+IDJdLCBlW0EgKyAxMTIgPj4gMl0gPSBlW0EgKyAyMTYgPj4gMl0sIGVbQSArIDEwNCA+PiAyXSA9IGVbQSArIDIxMiA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQiA9IGVbQSArIDUyID4+IDJdLCBpID0gZVtBICsgMTk2ID4+IDJdLCBCID4+PiAwIDwgaSA+Pj4gMCAmJiAoaiA9IGVbQSArIDY0ID4+IDJdLCBqID4+PiAwIDwgaSArIDEgPj4+IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUShlW0EgKyAyMzYgPj4gMl0sIDEsIDE4ODY2LCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZVtBICsgNDQgPj4gMl0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgPSBlW0EgKyAyOCA+PiAyXSwgaCA9IGVbQSArIDIwMCA+PiAyXSArIChCIDw8IDQpIHwgMCwgdyA9IGVbQSArIDQwID4+IDJdLCBpID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbQSArIDI4ID4+IDJdID0gQiwgZVtBICsgNDQgPj4gMl0gPSAwLCBpID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU6IGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQ6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IHQgKyAxIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW0EgKyA0MCA+PiAyXSA9IHUsIGRbQSArIDU2ID4+IDJdIDw9IHUgPj4+IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IGVbQSArIDQ4ID4+IDJdLCBpID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0OiBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGg6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHc6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbQSArIDMyID4+IDJdID0gbCwgZFtBICsgNjAgPj4gMl0gPD0gbCA+Pj4gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtBICsgMjggPj4gMl0gPSByLCBpID0gciwgaCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtBICsgMzYgPj4gMl0gPSB0LCBkW0EgKyA3NiA+PiAyXSA8PSB0ID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVbQSArIDI4ID4+IDJdLCBoID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID0gKChaKGVbQSArIDE2ID4+IDJdLCBlW0EgKyAzMiA+PiAyXSkgKyBaKGVbQSArIDEyID4+IDJdLCBlW0EgKyA0MCA+PiAyXSkgfCAwKSArIFooZVtBICsgMjAgPj4gMl0sIGVbQSArIDI4ID4+IDJdKSB8IDApICsgWihlW0EgKyAyNCA+PiAyXSwgdCkgfCAwLCBpID4+PiAwID49IGRbQSArIDggPj4gMl0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSBlW0EgKyA0ID4+IDJdICsgKGkgPDwgMSkgfCAwLCBHMltpID4+IDFdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gZVtBICsgNDAgPj4gMl0gKyAxIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGc6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGg6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPj4+IDAgPj0gZiA+Pj4gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPSBlW0EgKyAzMiA+PiAyXSwgbiA9IGVbQSArIDIwMCA+PiAyXSArIChpIDw8IDQpIHwgMCwgayA+Pj4gMCA+PSBkW24gKyA4ID4+IDJdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJW0EgfCAwXSB8fCAoaSA9IGVbbiArIDEyID4+IDJdICsgKGsgPDwgNCkgfCAwLCBlW0EgKyA3NiA+PiAyXSA9IFooZVtpICsgMTIgPj4gMl0sIGVbaSArIDggPj4gMl0pKSwgdCA9IGVbQSArIDcyID4+IDJdLCBpID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBpICsgMSB8IDAsIGVbQSArIDI4ID4+IDJdID0gaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBlW0EgKyAzMiA+PiAyXSArIDEgfCAwLCBpID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgczogZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdyA9IHcgKyAxIHwgMCwgZVtBICsgNDAgPj4gMl0gPSB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEIgPj4+IDAgPj0gaiA+Pj4gMCB8fCAoZVtBICsgMjI4ID4+IDJdID0gMCwgZVtBICsgMjMyID4+IDJdID0gMCwgaCA9IGVbQSArIDIwMCA+PiAyXSArIChCIDw8IDQpIHwgMCwgciA9IGVbaCArIDggPj4gMl0sICFyKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobiA9IGVbaCArIDEyID4+IDJdLCB0ID0gMCwgbCA9IDAsIGkgPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIID0gciArIChpIF4gLTEpIHwgMCwgayA9IG4gKyAoaSA8PCA0KSB8IDAsIGYgPSBIICsgZVtrID4+IDJdIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmID4+PiAwID4gMzEgfHwgKG0gPSBlW2ggPj4gMl0sIG0gPj4+IDAgPiAtMSA+Pj4gZiA+Pj4gMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBtIDw8IGYsIGwgPSBsICYmIGYgPj4+IDAgPiBsID4+PiAwID8gbCA6IGYsIGVbQSArIDIyOCA+PiAyXSA9IGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IEggKyBlW2sgKyA0ID4+IDJdIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmID4+PiAwID4gMzEgfHwgKGsgPSBlW2ggKyA0ID4+IDJdLCBrID4+PiAwID4gLTEgPj4+IGYgPj4+IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gayA8PCBmLCB0ID0gdCAmJiBmID4+PiAwID4gdCA+Pj4gMCA/IHQgOiBmLCBlW0EgKyAyMzIgPj4gMl0gPSB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID0gaSArIDEgfCAwLCAociB8IDApID09IChpIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWwgfCAhdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElbQSB8IDBdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IGVbQSArIDEwOCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBlW0EgKyAyMDggPj4gMl0sIGVbQSArIDEwOCA+PiAyXSA9IHQsIGVbQSArIDEwMCA+PiAyXSA9IGVbQSArIDIwNCA+PiAyXSwgZVtBICsgMTEyID4+IDJdID0gZVtBICsgMjE2ID4+IDJdLCBlW0EgKyAxMDQgPj4gMl0gPSBlW0EgKyAyMTIgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU6IGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQ6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGg6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtBICsgMjI0ID4+IDJdID0gdCwgZFtBICsgMTEyID4+IDJdIDw9IHQgPj4+IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRSA9IGVbQSArIDEwMCA+PiAyXSwgaSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZFtBICsgNTYgPj4gMl0gPD0gdyA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gZVtBICsgMzIgPj4gMl0sIGkgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSAoKFooZVtBICsgMTYgPj4gMl0sIGVbQSArIDMyID4+IDJdKSArIFooZVtBICsgMTIgPj4gMl0sIHcpIHwgMCkgKyBaKGVbQSArIDIwID4+IDJdLCBCKSB8IDApICsgWihlW0EgKyAyNCA+PiAyXSwgZVtBICsgMzYgPj4gMl0pIHwgMCwgaSA+Pj4gMCA+PSBkW0EgKyA4ID4+IDJdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSBlW0EgKyA0ID4+IDJdICsgKGkgPDwgMSkgfCAwLCBHMltpID4+IDFdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiA9IEIgKyAxIHwgMCwgZVtBICsgMjggPj4gMl0gPSBCOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtBICsgMjIwID4+IDJdID0gRSwgZFtBICsgMTA0ID4+IDJdIDw9IEUgPj4+IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBlW0EgKyA0OCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSB1ICsgMSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtBICsgMzIgPj4gMl0gPSB1LCByID0gZVtBICsgNjAgPj4gMl0sIGkgPSBlW2ggKyA4ID4+IDJdLCAoaSA+Pj4gMCA+IHIgPj4+IDAgPyByIDogaSkgPj4+IDAgPiB1ID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmID0gZVtoID4+IDJdLCBsID0gaSArICh1IF4gLTEpIHwgMCwgciA9IGwgJiAzMSwgKGwgJiA2MykgPj4+IDAgPj0gMzIgPyAoaSA9IGYgPDwgciwgQyA9IDApIDogKGkgPSAoMSA8PCByKSAtIDEgJiBmID4+PiAzMiAtIHIsIEMgPSBmIDw8IHIpLCB5ID0gaSwgbiA9IEMsIHIgPSBsICYgMzEsIChsICYgNjMpID4+PiAwID49IDMyID8gaSA9IGkgPj4+IHIgfCAwIDogaSA9ICgoMSA8PCByKSAtIDEgJiBpKSA8PCAzMiAtIHIgfCBuID4+PiByLCAoaSB8IDApICE9IChmIHwgMCkgfHwgKGkgPSBsICYgMzEsIChsICYgNjMpID4+PiAwID49IDMyID8gaSA9IC0xID4+PiBpIHwgMCA6IGkgPSAoMSA8PCBpKSAtIDEgPDwgMzIgLSBpIHwgLTEgPj4+IGksIHIgPSBlW2ggKyA0ID4+IDJdLCAoaSAmIHIpICE9IChyIHwgMCkpIHx8IChuID0gbCAmIDMxLCAobCAmIDYzKSA+Pj4gMCA+PSAzMiA/IChpID0gciA8PCBuLCBwID0gMCkgOiAoaSA9ICgxIDw8IG4pIC0gMSAmIHIgPj4+IDMyIC0gbiwgcCA9IHIgPDwgbiksIEQgPSBpLCBIID0gaSAtICFwIHwgMCwgaSA9IEgsIFAgPSBwIC0gMSB8IDAsIGsgPSBlW0EgKyAyMTYgPj4gMl0sIG4gPSBQICsgayB8IDAsIHEgPSBuMChuLCBrID4+PiAwID4gbiA+Pj4gMCA/IGkgKyAxIHwgMCA6IGksIHAsIEQpLCB2ID0gZVtBICsgMjA4ID4+IDJdLCBuID0gdiArIFAgfCAwLCBpID0gdiA+Pj4gMCA+IG4gPj4+IDAgPyBpICsgMSB8IDAgOiBpLCBuID0gbjAobiwgaSwgcCwgRCksIG0gPSB5IC0gIUMgfCAwLCBpID0gbSwgYyA9IEMgLSAxIHwgMCwgbyA9IGVbQSArIDIxMiA+PiAyXSwgayA9IGMgKyBvIHwgMCwgTyA9IG4wKGssIGsgPj4+IDAgPCBvID4+PiAwID8gaSArIDEgfCAwIDogaSwgQywgeSksIHggPSBlW0EgKyAyMDQgPj4gMl0sIGsgPSBjICsgeCB8IDAsIGkgPSB4ID4+PiAwID4gayA+Pj4gMCA/IGkgKyAxIHwgMCA6IGksIGsgPSBuMChrLCBpLCBDLCB5KSwgSiA9IGVbaCArIDEyID4+IDJdICsgKHUgPDwgNCkgfCAwLCB6ID0gZVtKID4+IDJdLCBvID0geiArIGwgfCAwLCBpID0gbyAmIDMxLCAobyAmIDYzKSA+Pj4gMCA+PSAzMiA/IGkgPSAtMSA+Pj4gaSB8IDAgOiBpID0gKDEgPDwgaSkgLSAxIDw8IDMyIC0gaSB8IC0xID4+PiBpLCAoZiB8IDApICE9IChpICYgZikpIHx8IChhID0gciwgZjIgPSByLCBzID0gciwgVSA9IGVbSiArIDQgPj4gMl0sIHIgPSBVICsgbCB8IDAsIGcgPSByICYgMzEsIChyICYgNjMpID4+PiAwID49IDMyID8gKGkgPSBhIDw8IGcsIGcgPSAwKSA6IChpID0gKDEgPDwgZykgLSAxICYgcyA+Pj4gMzIgLSBnLCBnID0gcyA8PCBnKSwgYSA9IGcsIHMgPSByICYgMzEsIChyICYgNjMpID4+PiAwID49IDMyID8gYSA9IGkgPj4+IHMgfCAwIDogYSA9ICgoMSA8PCBzKSAtIDEgJiBpKSA8PCAzMiAtIHMgfCBhID4+PiBzLCAoZjIgfCAwKSAhPSAoYSB8IDApKSB8fCAocyA9IGVbQSArIDIyNCA+PiAyXSwgVmUocywgZywgaSkgfCBxMiAmJiAoKHMgfCAwKSAhPSAodiB8IDApIHx8IChhID0gciAmIDMxLCAociAmIDYzKSA+Pj4gMCA+PSAzMiA/IChpID0gLTEgPDwgYSwgciA9IDApIDogKHIgPSAtMSA8PCBhLCBpID0gciB8ICgxIDw8IGEpIC0gMSAmIC0xID4+PiAzMiAtIGEpLCByID0gciBeIC0xLCBnID0gaSBeIC0xLCB2ID0gciwgaSA9IDAsIGEgPSBuLCByID0gbCAmIDMxLCAobCAmIDYzKSA+Pj4gMCA+PSAzMiA/IChpID0gbiA8PCByLCByID0gMCkgOiAoaSA9ICgxIDw8IHIpIC0gMSAmIGEgPj4+IDMyIC0gciB8IGkgPDwgciwgciA9IGEgPDwgciksICEodiAmIHIgfCBpICYgZykpKSkgfHwgKGEgPSBvICYgMzEsIHIgPSBlW0EgKyAyMjAgPj4gMl0sIChvICYgNjMpID4+PiAwID49IDMyID8gKGkgPSBmIDw8IGEsIGEgPSAwKSA6IChpID0gKDEgPDwgYSkgLSAxICYgZiA+Pj4gMzIgLSBhLCBhID0gZiA8PCBhKSwgVmUociwgYSwgaSkgfCBxMiAmJiAoKHIgfCAwKSAhPSAoeCB8IDApIHx8IChmID0gbyAmIDMxLCAobyAmIDYzKSA+Pj4gMCA+PSAzMiA/IChpID0gLTEgPDwgZiwgYSA9IDApIDogKGEgPSAtMSA8PCBmLCBpID0gYSB8ICgxIDw8IGYpIC0gMSAmIC0xID4+PiAzMiAtIGYpLCBmID0gYSBeIC0xLCBhID0gaSBeIC0xLCBnID0gZiwgaSA9IDAsIG8gPSBrLCBmID0gbCAmIDMxLCAobCAmIDYzKSA+Pj4gMCA+PSAzMiA/IChpID0gayA8PCBmLCBmID0gMCkgOiAoaSA9ICgxIDw8IGYpIC0gMSAmIG8gPj4+IDMyIC0gZiB8IGkgPDwgZiwgZiA9IG8gPDwgZiksICEoZyAmIGYgfCBpICYgYSkpKSkgfHwgKGYgPSBlW0ogKyA4ID4+IDJdLCAhZiB8ICFlW0ogKyAxMiA+PiAyXSB8IChrIHwgMCkgPT0gKE8gfCAwKSkgfHwgKG4gfCAwKSA9PSAocSB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcgPSBlW0EgKyA2OCA+PiAyXSwgZVtBICsgNDAgPj4gMl0gPSB3LCBpID0gbSwgciA9IHIgKyBjIHwgMCwgaSA9IHIgPj4+IDAgPCBjID4+PiAwID8gaSArIDEgfCAwIDogaSwgciA9IChuMChyLCBpLCBDLCB5KSA+Pj4geikgLSAoayA+Pj4geikgfCAwLCBpID0gSCwgayA9IHMgKyBQIHwgMCwgaSA9IGsgPj4+IDAgPCBzID4+PiAwID8gaSArIDEgfCAwIDogaSwgdzIgPSBBLCBjMiA9IFooZiwgKG4wKGssIGksIHAsIEQpID4+PiBVKSAtIChuID4+PiBVKSB8IDApICsgciB8IDAsIGVbdzIgKyAzNiA+PiAyXSA9IGMyLCBpID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlW0EgKyAyMjAgPj4gMl0sIHIgPSBlW0EgKyAyMjggPj4gMl0sIEUgPSBpICsgciAtIChpID4+PiAwKSAlIChyID4+PiAwKSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gZVtBICsgMjI0ID4+IDJdLCByID0gZVtBICsgMjMyID4+IDJdLCB0ID0gaSArIHIgLSAoaSA+Pj4gMCkgJSAociA+Pj4gMCkgfCAwLCBpID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBsOiBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCA9IHAgKyAxIHwgMCwgZVtBICsgNDAgPj4gMl0gPSBwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbQSArIDIyNCA+PiAyXSA9IEIsIGRbQSArIDExMiA+PiAyXSA8PSBCID4+PiAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gZVtBICsgMTAwID4+IDJdLCBpID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgczogZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGc6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW0EgKyAyMjAgPj4gMl0gPSB4LCBkW0EgKyAxMDQgPj4gMl0gPD0geCA+Pj4gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbQSArIDI4ID4+IDJdID0gUCwgbCA9IFAsIGkgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRbQSArIDU2ID4+IDJdIDw9IHAgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcgPSBlW0EgKyAzMiA+PiAyXSwgaSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9ICgoWihlW0EgKyAxNiA+PiAyXSwgZVtBICsgMzIgPj4gMl0pICsgWihlW0EgKyAxMiA+PiAyXSwgcCkgfCAwKSArIFooZVtBICsgMjAgPj4gMl0sIGwpIHwgMCkgKyBaKGVbQSArIDI0ID4+IDJdLCBlW0EgKyAzNiA+PiAyXSkgfCAwLCBpID4+PiAwID49IGRbQSArIDggPj4gMl0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID0gZVtBICsgNCA+PiAyXSArIChpIDw8IDEpIHwgMCwgRzJbaSA+PiAxXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gZVtBICsgMjI0ID4+IDJdLCByID0gZVtBICsgMjMyID4+IDJdLCBCID0gaSArIHIgLSAoaSA+Pj4gMCkgJSAociA+Pj4gMCkgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQ6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGc6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA+Pj4gMCA+PSBnMiA+Pj4gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ID0gZVtBICsgNDggPj4gMl0sIGVbQSArIDMyID4+IDJdID0gdywgQyA9IChsIDw8IDQpICsgRSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ID0gdyArIDEgfCAwLCBlW0EgKyAzMiA+PiAyXSA9IHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0gZVtBICsgNjAgPj4gMl0sIGkgPSBlW0MgKyA4ID4+IDJdLCAoaSA+Pj4gMCA+IHIgPj4+IDAgPyByIDogaSkgPj4+IDAgPiB3ID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZiA9IGVbQyA+PiAyXSwgdSA9IGkgKyAodyBeIC0xKSB8IDAsIHIgPSB1ICYgMzEsICh1ICYgNjMpID4+PiAwID49IDMyID8gKGkgPSBmIDw8IHIsIGggPSAwKSA6IChpID0gKDEgPDwgcikgLSAxICYgZiA+Pj4gMzIgLSByLCBoID0gZiA8PCByKSwgeSA9IGksIG4gPSBoLCByID0gdSAmIDMxLCAodSAmIDYzKSA+Pj4gMCA+PSAzMiA/IGkgPSBpID4+PiByIHwgMCA6IGkgPSAoKDEgPDwgcikgLSAxICYgaSkgPDwgMzIgLSByIHwgbiA+Pj4gciwgKGkgfCAwKSAhPSAoZiB8IDApIHx8IChpID0gdSAmIDMxLCAodSAmIDYzKSA+Pj4gMCA+PSAzMiA/IGkgPSAtMSA+Pj4gaSB8IDAgOiBpID0gKDEgPDwgaSkgLSAxIDw8IDMyIC0gaSB8IC0xID4+PiBpLCByID0gZVtDICsgNCA+PiAyXSwgKGkgJiByKSAhPSAociB8IDApKSB8fCAobiA9IHUgJiAzMSwgKHUgJiA2MykgPj4+IDAgPj0gMzIgPyAoaSA9IHIgPDwgbiwgZyA9IDApIDogKGkgPSAoMSA8PCBuKSAtIDEgJiByID4+PiAzMiAtIG4sIGcgPSByIDw8IG4pLCBEID0gaSwgSCA9IGkgLSAhZyB8IDAsIGkgPSBILCBxID0gZyAtIDEgfCAwLCBrID0gZVtBICsgMjE2ID4+IDJdLCBuID0gcSArIGsgfCAwLCBPID0gbjAobiwgayA+Pj4gMCA+IG4gPj4+IDAgPyBpICsgMSB8IDAgOiBpLCBnLCBEKSwgSiA9IGVbQSArIDIwOCA+PiAyXSwgbiA9IEogKyBxIHwgMCwgaSA9IEogPj4+IDAgPiBuID4+PiAwID8gaSArIDEgfCAwIDogaSwgbiA9IG4wKG4sIGksIGcsIEQpLCBtID0geSAtICFoIHwgMCwgaSA9IG0sIGMgPSBoIC0gMSB8IDAsIG8gPSBlW0EgKyAyMTIgPj4gMl0sIGsgPSBjICsgbyB8IDAsIGEgPSBuMChrLCBrID4+PiAwIDwgbyA+Pj4gMCA/IGkgKyAxIHwgMCA6IGksIGgsIHkpLCB6ID0gZVtBICsgMjA0ID4+IDJdLCBrID0gYyArIHogfCAwLCBpID0geiA+Pj4gMCA+IGsgPj4+IDAgPyBpICsgMSB8IDAgOiBpLCBrID0gbjAoaywgaSwgaCwgeSksIFUgPSBlW0MgKyAxMiA+PiAyXSArICh3IDw8IDQpIHwgMCwgaiA9IGVbVSA+PiAyXSwgbyA9IGogKyB1IHwgMCwgaSA9IG8gJiAzMSwgKG8gJiA2MykgPj4+IDAgPj0gMzIgPyBpID0gLTEgPj4+IGkgfCAwIDogaSA9ICgxIDw8IGkpIC0gMSA8PCAzMiAtIGkgfCAtMSA+Pj4gaSwgKGYgfCAwKSAhPSAoaSAmIGYpKSB8fCAodCA9IHIsIGYyID0gciwgcyA9IHIsIG4yID0gZVtVICsgNCA+PiAyXSwgciA9IG4yICsgdSB8IDAsIHYgPSByICYgMzEsIChyICYgNjMpID4+PiAwID49IDMyID8gKGkgPSB0IDw8IHYsIHYgPSAwKSA6IChpID0gKDEgPDwgdikgLSAxICYgcyA+Pj4gMzIgLSB2LCB2ID0gcyA8PCB2KSwgdCA9IHYsIHMgPSByICYgMzEsIChyICYgNjMpID4+PiAwID49IDMyID8gdCA9IGkgPj4+IHMgfCAwIDogdCA9ICgoMSA8PCBzKSAtIDEgJiBpKSA8PCAzMiAtIHMgfCB0ID4+PiBzLCAoZjIgfCAwKSAhPSAodCB8IDApKSB8fCAocyA9IGVbQSArIDIyNCA+PiAyXSwgVmUocywgdiwgaSkgfCBxMiAmJiAoKHMgfCAwKSAhPSAoSiB8IDApIHx8ICh0ID0gciAmIDMxLCAociAmIDYzKSA+Pj4gMCA+PSAzMiA/IChpID0gLTEgPDwgdCwgciA9IDApIDogKHIgPSAtMSA8PCB0LCBpID0gciB8ICgxIDw8IHQpIC0gMSAmIC0xID4+PiAzMiAtIHQpLCByID0gciBeIC0xLCB2ID0gaSBeIC0xLCBmMiA9IHIsIGkgPSAwLCB0ID0gbiwgciA9IHUgJiAzMSwgKHUgJiA2MykgPj4+IDAgPj0gMzIgPyAoaSA9IG4gPDwgciwgciA9IDApIDogKGkgPSAoMSA8PCByKSAtIDEgJiB0ID4+PiAzMiAtIHIgfCBpIDw8IHIsIHIgPSB0IDw8IHIpLCAhKGYyICYgciB8IGkgJiB2KSkpKSB8fCAodCA9IG8gJiAzMSwgciA9IGVbQSArIDIyMCA+PiAyXSwgKG8gJiA2MykgPj4+IDAgPj0gMzIgPyAoaSA9IGYgPDwgdCwgZiA9IDApIDogKGkgPSAoMSA8PCB0KSAtIDEgJiBmID4+PiAzMiAtIHQsIGYgPSBmIDw8IHQpLCBWZShyLCBmLCBpKSB8IHEyICYmICgociB8IDApICE9ICh6IHwgMCkgfHwgKGYgPSBvICYgMzEsIChvICYgNjMpID4+PiAwID49IDMyID8gKGkgPSAtMSA8PCBmLCB0ID0gMCkgOiAodCA9IC0xIDw8IGYsIGkgPSB0IHwgKDEgPDwgZikgLSAxICYgLTEgPj4+IDMyIC0gZiksIGYgPSB0IF4gLTEsIHQgPSBpIF4gLTEsIHYgPSBmLCBpID0gMCwgbyA9IGssIGYgPSB1ICYgMzEsICh1ICYgNjMpID4+PiAwID49IDMyID8gKGkgPSBrIDw8IGYsIGYgPSAwKSA6IChpID0gKDEgPDwgZikgLSAxICYgbyA+Pj4gMzIgLSBmIHwgaSA8PCBmLCBmID0gbyA8PCBmKSwgISh2ICYgZiB8IGkgJiB0KSkpKSB8fCAoZiA9IGVbVSArIDggPj4gMl0sICFmIHwgIWVbVSArIDEyID4+IDJdIHwgKGsgfCAwKSA9PSAoYSB8IDApKSB8fCAobiB8IDApID09IChPIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwID0gZVtBICsgNjggPj4gMl0sIGVbQSArIDQwID4+IDJdID0gcCwgaSA9IG0sIHIgPSByICsgYyB8IDAsIGkgPSByID4+PiAwIDwgYyA+Pj4gMCA/IGkgKyAxIHwgMCA6IGksIHIgPSAobjAociwgaSwgaCwgeSkgPj4+IGopIC0gKGsgPj4+IGopIHwgMCwgaSA9IEgsIGsgPSBzICsgcSB8IDAsIGkgPSBrID4+PiAwIDwgcyA+Pj4gMCA/IGkgKyAxIHwgMCA6IGksIHcyID0gQSwgYzIgPSBaKGYsIChuMChrLCBpLCBnLCBEKSA+Pj4gbjIpIC0gKG4gPj4+IG4yKSB8IDApICsgciB8IDAsIGVbdzIgKyAzNiA+PiAyXSA9IGMyLCBpID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBsICsgMSB8IDAsIGVbQSArIDI4ID4+IDJdID0gbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlW0EgKyAyMjAgPj4gMl0sIHIgPSBlW0EgKyAyMjggPj4gMl0sIHggPSBpICsgciAtIChpID4+PiAwKSAlIChyID4+PiAwKSB8IDAsIGkgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgQTogZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgbDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDID0gQyArIDEgfCAwLCBlW0EgKyA0MCA+PiAyXSA9IEM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtBICsgMzIgPj4gMl0gPSBoLCBkW0EgKyA2MCA+PiAyXSA8PSBoID4+PiAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSBlW0EgKyAxMDggPj4gMl0sIGkgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGw6IGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtBICsgMjI0ID4+IDJdID0gcCwgZFtBICsgMTEyID4+IDJdIDw9IHAgPj4+IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEUgPSBlW0EgKyAxMDAgPj4gMl0sIGkgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRbQSArIDU2ID4+IDJdIDw9IEMgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCID0gZVtBICsgMjggPj4gMl0sIGkgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSAoKFooZVtBICsgMTYgPj4gMl0sIGVbQSArIDMyID4+IDJdKSArIFooZVtBICsgMTIgPj4gMl0sIEMpIHwgMCkgKyBaKGVbQSArIDIwID4+IDJdLCBlW0EgKyAyOCA+PiAyXSkgfCAwKSArIFooZVtBICsgMjQgPj4gMl0sIGVbQSArIDM2ID4+IDJdKSB8IDAsIGkgPj4+IDAgPj0gZFtBICsgOCA+PiAyXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IGVbQSArIDQgPj4gMl0gKyAoaSA8PCAxKSB8IDAsIEcyW2kgPj4gMV0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSBlW0EgKyAzMiA+PiAyXSArIDEgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtBICsgMjIwID4+IDJdID0gRSwgZFtBICsgMTA0ID4+IDJdIDw9IEUgPj4+IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW0EgKyAyOCA+PiAyXSA9IHMsIEIgPSBzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiA9IEIgKyAxIHwgMCwgZVtBICsgMjggPj4gMl0gPSBCOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChCID4+PiAwIDwgaiA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID0gZVtBICsgMzIgPj4gMl0sIGwgPSBlW0EgKyAyMDAgPj4gMl0gKyAoQiA8PCA0KSB8IDAsIGkgPSBlW2wgKyA4ID4+IDJdLCBjID4+PiAwID49IGkgPj4+IDAgfHwgKGYgPSBlW2wgPj4gMl0sIHUgPSBpICsgKGMgXiAtMSkgfCAwLCByID0gdSAmIDMxLCAodSAmIDYzKSA+Pj4gMCA+PSAzMiA/IChpID0gZiA8PCByLCB0ID0gMCkgOiAoaSA9ICgxIDw8IHIpIC0gMSAmIGYgPj4+IDMyIC0gciwgdCA9IGYgPDwgciksIG8gPSBpLCBuID0gdCwgciA9IHUgJiAzMSwgKHUgJiA2MykgPj4+IDAgPj0gMzIgPyBpID0gaSA+Pj4gciB8IDAgOiBpID0gKCgxIDw8IHIpIC0gMSAmIGkpIDw8IDMyIC0gciB8IG4gPj4+IHIsIChpIHwgMCkgIT0gKGYgfCAwKSkgfHwgKGkgPSB1ICYgMzEsICh1ICYgNjMpID4+PiAwID49IDMyID8gaSA9IC0xID4+PiBpIHwgMCA6IGkgPSAoMSA8PCBpKSAtIDEgPDwgMzIgLSBpIHwgLTEgPj4+IGksIHIgPSBlW2wgKyA0ID4+IDJdLCAoaSAmIHIpICE9IChyIHwgMCkpIHx8IChuID0gdSAmIDMxLCAodSAmIDYzKSA+Pj4gMCA+PSAzMiA/IChpID0gciA8PCBuLCB3ID0gMCkgOiAoaSA9ICgxIDw8IG4pIC0gMSAmIHIgPj4+IDMyIC0gbiwgdyA9IHIgPDwgbiksIHkgPSBpLCBIID0gaSAtICF3IHwgMCwgaSA9IEgsIFAgPSB3IC0gMSB8IDAsIGsgPSBlW0EgKyAyMTYgPj4gMl0sIG4gPSBQICsgayB8IDAsIHEgPSBuMChuLCBrID4+PiAwID4gbiA+Pj4gMCA/IGkgKyAxIHwgMCA6IGksIHcsIHkpLCB2ID0gZVtBICsgMjA4ID4+IDJdLCBuID0gdiArIFAgfCAwLCBpID0gdiA+Pj4gMCA+IG4gPj4+IDAgPyBpICsgMSB8IDAgOiBpLCBuID0gbjAobiwgaSwgdywgeSksIG0gPSBvIC0gIXQgfCAwLCBpID0gbSwgRCA9IHQgLSAxIHwgMCwgTyA9IGVbQSArIDIxMiA+PiAyXSwgayA9IEQgKyBPIHwgMCwgTyA9IG4wKGssIGsgPj4+IDAgPCBPID4+PiAwID8gaSArIDEgfCAwIDogaSwgdCwgbyksIHggPSBlW0EgKyAyMDQgPj4gMl0sIGsgPSBEICsgeCB8IDAsIGkgPSB4ID4+PiAwID4gayA+Pj4gMCA/IGkgKyAxIHwgMCA6IGksIGsgPSBuMChrLCBpLCB0LCBvKSwgSiA9IGVbbCArIDEyID4+IDJdICsgKGMgPDwgNCkgfCAwLCB6ID0gZVtKID4+IDJdLCBsID0geiArIHUgfCAwLCBpID0gbCAmIDMxLCAobCAmIDYzKSA+Pj4gMCA+PSAzMiA/IGkgPSAtMSA+Pj4gaSB8IDAgOiBpID0gKDEgPDwgaSkgLSAxIDw8IDMyIC0gaSB8IC0xID4+PiBpLCAoZiB8IDApICE9IChpICYgZikpIHx8IChhID0gciwgZjIgPSByLCBjID0gciwgVSA9IGVbSiArIDQgPj4gMl0sIHIgPSBVICsgdSB8IDAsIGcgPSByICYgMzEsIChyICYgNjMpID4+PiAwID49IDMyID8gKGkgPSBhIDw8IGcsIGcgPSAwKSA6IChpID0gKDEgPDwgZykgLSAxICYgYyA+Pj4gMzIgLSBnLCBnID0gYyA8PCBnKSwgYSA9IGcsIGMgPSByICYgMzEsIChyICYgNjMpID4+PiAwID49IDMyID8gYSA9IGkgPj4+IGMgfCAwIDogYSA9ICgoMSA8PCBjKSAtIDEgJiBpKSA8PCAzMiAtIGMgfCBhID4+PiBjLCAoZjIgfCAwKSAhPSAoYSB8IDApKSB8fCAoYyA9IGVbQSArIDIyNCA+PiAyXSwgVmUoYywgZywgaSkgfCBxMiAmJiAoKGMgfCAwKSAhPSAodiB8IDApIHx8IChhID0gciAmIDMxLCAociAmIDYzKSA+Pj4gMCA+PSAzMiA/IChpID0gLTEgPDwgYSwgciA9IDApIDogKHIgPSAtMSA8PCBhLCBpID0gciB8ICgxIDw8IGEpIC0gMSAmIC0xID4+PiAzMiAtIGEpLCByID0gciBeIC0xLCBnID0gaSBeIC0xLCB2ID0gciwgaSA9IDAsIGEgPSBuLCByID0gdSAmIDMxLCAodSAmIDYzKSA+Pj4gMCA+PSAzMiA/IChpID0gbiA8PCByLCByID0gMCkgOiAoaSA9ICgxIDw8IHIpIC0gMSAmIGEgPj4+IDMyIC0gciB8IGkgPDwgciwgciA9IGEgPDwgciksICEodiAmIHIgfCBpICYgZykpKSkgfHwgKGEgPSBsICYgMzEsIHIgPSBlW0EgKyAyMjAgPj4gMl0sIChsICYgNjMpID4+PiAwID49IDMyID8gKGkgPSBmIDw8IGEsIGEgPSAwKSA6IChpID0gKDEgPDwgYSkgLSAxICYgZiA+Pj4gMzIgLSBhLCBhID0gZiA8PCBhKSwgVmUociwgYSwgaSkgfCBxMiAmJiAoKHIgfCAwKSAhPSAoeCB8IDApIHx8IChmID0gbCAmIDMxLCAobCAmIDYzKSA+Pj4gMCA+PSAzMiA/IChpID0gLTEgPDwgZiwgYSA9IDApIDogKGEgPSAtMSA8PCBmLCBpID0gYSB8ICgxIDw8IGYpIC0gMSAmIC0xID4+PiAzMiAtIGYpLCBmID0gYSBeIC0xLCBhID0gaSBeIC0xLCBnID0gZiwgaSA9IDAsIGwgPSBrLCBmID0gdSAmIDMxLCAodSAmIDYzKSA+Pj4gMCA+PSAzMiA/IChpID0gayA8PCBmLCBmID0gMCkgOiAoaSA9ICgxIDw8IGYpIC0gMSAmIGwgPj4+IDMyIC0gZiB8IGkgPDwgZiwgZiA9IGwgPDwgZiksICEoZyAmIGYgfCBpICYgYSkpKSkgfHwgKGYgPSBlW0ogKyA4ID4+IDJdLCAhZiB8ICFlW0ogKyAxMiA+PiAyXSB8IChrIHwgMCkgPT0gKE8gfCAwKSkgfHwgKG4gfCAwKSA9PSAocSB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDID0gZVtBICsgNjggPj4gMl0sIGVbQSArIDQwID4+IDJdID0gQywgaSA9IG0sIHIgPSByICsgRCB8IDAsIGkgPSByID4+PiAwIDwgRCA+Pj4gMCA/IGkgKyAxIHwgMCA6IGksIHIgPSAobjAociwgaSwgdCwgbykgPj4+IHopIC0gKGsgPj4+IHopIHwgMCwgaSA9IEgsIGsgPSBjICsgUCB8IDAsIGkgPSBrID4+PiAwIDwgYyA+Pj4gMCA/IGkgKyAxIHwgMCA6IGksIHcyID0gQSwgYzIgPSBaKGYsIChuMChrLCBpLCB3LCB5KSA+Pj4gVSkgLSAobiA+Pj4gVSkgfCAwKSArIHIgfCAwLCBlW3cyICsgMzYgPj4gMl0gPSBjMiwgaSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gZVtBICsgMjIwID4+IDJdLCByID0gZVtBICsgMjI4ID4+IDJdLCBFID0gaSArIHIgLSAoaSA+Pj4gMCkgJSAociA+Pj4gMCkgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVbQSArIDIyNCA+PiAyXSwgciA9IGVbQSArIDIzMiA+PiAyXSwgcCA9IGkgKyByIC0gKGkgPj4+IDApICUgKHIgPj4+IDApIHwgMCwgaSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGY6IGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICBBOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgbDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBsICsgMSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtBICsgMzIgPj4gMl0gPSB1LCBkW0EgKyA2MCA+PiAyXSA8PSB1ID4+PiAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IGVbQSArIDY4ID4+IDJdLCBpID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIEE6IGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGw6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQ6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtBICsgNDAgPj4gMl0gPSB0LCBkW0EgKyA1NiA+PiAyXSA8PSB0ID4+PiAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbQSArIDI4ID4+IDJdID0gciwgaSA9IHIsIGggPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbQSArIDM2ID4+IDJdID0gbCwgZFtBICsgNzYgPj4gMl0gPD0gbCA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gZVtBICsgMjggPj4gMl0sIGggPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSAoKFooZVtBICsgMTYgPj4gMl0sIGVbQSArIDMyID4+IDJdKSArIFooZVtBICsgMTIgPj4gMl0sIGVbQSArIDQwID4+IDJdKSB8IDApICsgWihlW0EgKyAyMCA+PiAyXSwgZVtBICsgMjggPj4gMl0pIHwgMCkgKyBaKGVbQSArIDI0ID4+IDJdLCBsKSB8IDAsIGkgPj4+IDAgPj0gZFtBICsgOCA+PiAyXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID0gZVtBICsgNCA+PiAyXSArIChpIDw8IDEpIHwgMCwgRzJbaSA+PiAxXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBlW0EgKyAzMiA+PiAyXSArIDEgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID4+PiAwID49IGYgPj4+IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPSBlW0EgKyAzMiA+PiAyXSwgbiA9IGVbQSArIDIwMCA+PiAyXSArIChpIDw8IDQpIHwgMCwgayA+Pj4gMCA+PSBkW24gKyA4ID4+IDJdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElbQSB8IDBdIHx8IChpID0gZVtuICsgMTIgPj4gMl0gKyAoayA8PCA0KSB8IDAsIGVbQSArIDc2ID4+IDJdID0gWihlW2kgKyAxMiA+PiAyXSwgZVtpICsgOCA+PiAyXSkpLCBsID0gZVtBICsgNzIgPj4gMl0sIGkgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGkgKyAxIHwgMCwgZVtBICsgMjggPj4gMl0gPSBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IGVbQSArIDQwID4+IDJdICsgMSB8IDAsIGkgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaCA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIFEoZVtBICsgMjM2ID4+IDJdLCAxLCAyMTA1LCAwKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gdTJbaSA+PiAxXSA9IDEsIDE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gWjQoQSkgewogICAgICAgICAgICAgIHZhciBpID0gMCwgciA9IDAsIGYgPSAwLCBrID0gMCwgdCA9IDAsIG4gPSAwLCBsID0gMCwgYSA9IDAsIHUgPSAwLCBvID0gMCwgZyA9IDAsIGggPSAwLCBzID0gMCwgdyA9IDAsIEIgPSAwLCBjID0gMCwgdiA9IDAsIEMgPSAwLCBtID0gMCwgeSA9IDAsIHAgPSAwLCBIID0gMCwgSiA9IDAsIEUgPSAwLCBEID0gMCwgVSA9IDAsIFAgPSAwLCB4ID0gMCwgeiA9IDAsIGogPSAwLCBPID0gMCwgcSA9IDAsIGYyID0gMCwgbjIgPSAwLCBnMiA9IDAsIHcyID0gMDsKICAgICAgICAgICAgICBxID0gWCAtIDE2IHwgMCwgWCA9IHE7CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKGRbQSArIDE2ID4+IDJdIDw9IDIpIHsKICAgICAgICAgICAgICAgICAgZVtBICsgMjAgPj4gMl0gPSAyOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICBpZiAociA9IGVbQSArIDI0ID4+IDJdLCBlW3IgPj4gMl0gIT0gMSkKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICByOgogICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZVtyICsgNTIgPj4gMl0gLSAxIHwgMCkgewogICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShlW3IgKyAxMDQgPj4gMl0gIT0gMiB8IGVbciArIDQgPj4gMl0gIT0gMSB8IChlW3IgKyA1NiA+PiAyXSAhPSAyIHwgZVtyICsgMTA4ID4+IDJdICE9IDIpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgIHggPSBBLCByID0gZVtBICsgMjQgPj4gMl0sIGYgPSBlW3IgKyAyNCA+PiAyXSwgQiA9IGVbciArIDE0OCA+PiAyXSwgeSA9IGVbciArIDk2ID4+IDJdLCBzID0gZVtyICsgNDQgPj4gMl0sIGogPSBlW3IgKyA4ID4+IDJdLCByID0gZVtyICsgMTIgPj4gMl0sIGwgPSBaKGosIHIpIDw8IDIsIEogPSBQMChsKSwgRCA9IFAwKGwpLCBVID0gUDAobCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgazogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoIVUgfCAoIUogfCAhRCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9IC0xIDw8IGYgXiAtMSwgbSA9IDEgPDwgZiAtIDEsIGwgPSByLCByID0gZVtBICsgNCA+PiAyXSAmIDEsIGcyID0gbCAtIHIgfCAwLCBDID0gZVtBID4+IDJdLCAhciB8ICFqKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9ICtXKDAgLSBtIHwgMCksIGkgPSBhICogMC4zNDQgKyBhICogMC43MTQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSMihpKSA8IDIxNDc0ODM2NDgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gfn5pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgayA9IC0yMTQ3NDgzNjQ4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGEgKiAxLjc3MjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGw6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFIyKGkpIDwgMjE0NzQ4MzY0OCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSB+fmk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gLTIxNDc0ODM2NDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gYSAqIDEuNDAyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUjIoaSkgPCAyMTQ3NDgzNjQ4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IH5+aTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSAtMjE0NzQ4MzY0ODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoQSA9IEosIGwgPSBELCByID0gVTsgcCA9IGVbcyA+PiAyXSwgdiA9IHAgKyBmIHwgMCwgZVtBID4+IDJdID0gKHYgfCAwKSA+PSAwID8gKG4gfCAwKSA+ICh2IHwgMCkgPyB2IDogbiA6IDAsIHYgPSBwIC0gayB8IDAsIGVbbCA+PiAyXSA9ICh2IHwgMCkgPj0gMCA/IChuIHwgMCkgPiAodiB8IDApID8gdiA6IG4gOiAwLCB2ID0gdSArIHAgfCAwLCBlW3IgPj4gMl0gPSAodiB8IDApID49IDAgPyAobiB8IDApID4gKHYgfCAwKSA/IHYgOiBuIDogMCwgciA9IHIgKyA0IHwgMCwgbCA9IGwgKyA0IHwgMCwgQSA9IEEgKyA0IHwgMCwgcyA9IHMgKyA0IHwgMCwgdyA9IHcgKyAxIHwgMCwgKGogfCAwKSAhPSAodyB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFIoSiksIFIoRCksIFIoVSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gVSwgbCA9IEQsIEEgPSBKOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4yID0gZzIgJiAtMiwgbjIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTyA9IEMgJiAxLCB3MiA9IGogLSBPIHwgMCwgYSA9ICtXKDAgLSBtIHwgMCksIGkgPSBhICogMC4zNDQgKyBhICogMC43MTQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGY6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUjIoaSkgPCAyMTQ3NDgzNjQ4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gfn5pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZyA9IC0yMTQ3NDgzNjQ4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSB3MiAmIC0yLCBmID0gYyAtIDEgfCAwLCBpID0gYSAqIDEuNzcyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFIyKGkpIDwgMjE0NzQ4MzY0OCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCA9IH5+aTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSAtMjE0NzQ4MzY0ODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gbjIgLSAxIHwgMCwgZiA9IGYgJiAtMiwgaSA9IGEgKiAxLjQwMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSMihpKSA8IDIxNDc0ODM2NDgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgPSB+fmk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ID0gLTIxNDc0ODM2NDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChmMiA9IHUgJiAtMiwgQyA9IGYgKyAyIHwgMCwgeiA9IGogPDwgMjsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodSA9IHIgKyB6IHwgMCwgZiA9IGwgKyB6IHwgMCwgdyA9IEEgKyB6IHwgMCwgUCA9IHMgKyB6IHwgMCwgTykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyA9IGVbcyA+PiAyXSwgayA9IG8gKyB2IHwgMCwgZVtBID4+IDJdID0gKGsgfCAwKSA+PSAwID8gKG4gfCAwKSA+IChrIHwgMCkgPyBrIDogbiA6IDAsIGsgPSBvIC0gZyB8IDAsIGVbbCA+PiAyXSA9IChrIHwgMCkgPj0gMCA/IChuIHwgMCkgPiAoayB8IDApID8gayA6IG4gOiAwLCBrID0gbyArIHAgfCAwLCBlW3IgPj4gMl0gPSAoayB8IDApID49IDAgPyAobiB8IDApID4gKGsgfCAwKSA/IGsgOiBuIDogMCwgbyA9IGVbeSA+PiAyXSwgaCA9ICtXKGVbQiA+PiAyXSAtIG0gfCAwKSwgaSA9IGggKiAxLjQwMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGY6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFIyKGkpIDwgMjE0NzQ4MzY0OCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSB+fmk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gLTIxNDc0ODM2NDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gZVtQID4+IDJdLCB0ID0gdCArIGsgfCAwLCBlW3cgPj4gMl0gPSAodCB8IDApID49IDAgPyAobiB8IDApID4gKHQgfCAwKSA/IHQgOiBuIDogMCwgYSA9ICtXKG8gLSBtIHwgMCksIGkgPSBhICogMC4zNDQgKyBoICogMC43MTQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSMihpKSA8IDIxNDc0ODM2NDgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gfn5pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IC0yMTQ3NDgzNjQ4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyA9IGsgLSB0IHwgMCwgZVtmID4+IDJdID0gKG8gfCAwKSA+PSAwID8gKG4gfCAwKSA+IChvIHwgMCkgPyBvIDogbiA6IDAsIGkgPSBhICogMS43NzI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSMihpKSA8IDIxNDc0ODM2NDgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gfn5pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IC0yMTQ3NDgzNjQ4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgayA9IHQgKyBrIHwgMCwgZVt1ID4+IDJdID0gKGsgfCAwKSA+PSAwID8gKG4gfCAwKSA+IChrIHwgMCkgPyBrIDogbiA6IDAsIHUgPSB1ICsgNCB8IDAsIGYgPSBmICsgNCB8IDAsIHcgPSB3ICsgNCB8IDAsIFAgPSBQICsgNCB8IDAsIHIgPSByICsgNCB8IDAsIGwgPSBsICsgNCB8IDAsIHMgPSBzICsgNCB8IDAsIEEgPSBBICsgNCB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChIID0gMCwgYykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gPSBlW3kgPj4gMl0sIGggPSArVyhlW0IgPj4gMl0gLSBtIHwgMCksIGkgPSBoICogMS40MDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGY6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUjIoaSkgPCAyMTQ3NDgzNjQ4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gfn5pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IC0yMTQ3NDgzNjQ4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBlW3MgPj4gMl0sIHQgPSB0ICsgayB8IDAsIGVbQSA+PiAyXSA9ICh0IHwgMCkgPj0gMCA/IChuIHwgMCkgPiAodCB8IDApID8gdCA6IG4gOiAwLCBhID0gK1cobyAtIG0gfCAwKSwgaSA9IGEgKiAwLjM0NCArIGggKiAwLjcxNDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSMihpKSA8IDIxNDc0ODM2NDgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSB+fmk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gLTIxNDc0ODM2NDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyA9IGsgLSB0IHwgMCwgZVtsID4+IDJdID0gKG8gfCAwKSA+PSAwID8gKG4gfCAwKSA+IChvIHwgMCkgPyBvIDogbiA6IDAsIGkgPSBhICogMS43NzI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGY6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUjIoaSkgPCAyMTQ3NDgzNjQ4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gfn5pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IC0yMTQ3NDgzNjQ4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSB0ICsgayB8IDAsIGVbciA+PiAyXSA9IChrIHwgMCkgPj0gMCA/IChuIHwgMCkgPiAoayB8IDApID8gayA6IG4gOiAwLCBvID0gZVt5ID4+IDJdLCBoID0gK1coZVtCID4+IDJdIC0gbSB8IDApLCBpID0gaCAqIDEuNDAyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFIyKGkpIDwgMjE0NzQ4MzY0OCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IH5+aTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSAtMjE0NzQ4MzY0ODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gZVtzICsgNCA+PiAyXSwgdCA9IHQgKyBrIHwgMCwgZVtBICsgNCA+PiAyXSA9ICh0IHwgMCkgPj0gMCA/IChuIHwgMCkgPiAodCB8IDApID8gdCA6IG4gOiAwLCBhID0gK1cobyAtIG0gfCAwKSwgaSA9IGEgKiAwLjM0NCArIGggKiAwLjcxNDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSMihpKSA8IDIxNDc0ODM2NDgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSB+fmk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gLTIxNDc0ODM2NDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyA9IGsgLSB0IHwgMCwgZVtsICsgNCA+PiAyXSA9IChvIHwgMCkgPj0gMCA/IChuIHwgMCkgPiAobyB8IDApID8gbyA6IG4gOiAwLCBpID0gYSAqIDEuNzcyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFIyKGkpIDwgMjE0NzQ4MzY0OCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IH5+aTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSAtMjE0NzQ4MzY0ODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gdCArIGsgfCAwLCBlW3IgKyA0ID4+IDJdID0gKGsgfCAwKSA+PSAwID8gKG4gfCAwKSA+IChrIHwgMCkgPyBrIDogbiA6IDAsIG8gPSBlW3kgPj4gMl0sIGggPSArVyhlW0IgPj4gMl0gLSBtIHwgMCksIGkgPSBoICogMS40MDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGY6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUjIoaSkgPCAyMTQ3NDgzNjQ4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gfn5pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IC0yMTQ3NDgzNjQ4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBlW1AgPj4gMl0sIHQgPSB0ICsgayB8IDAsIGVbdyA+PiAyXSA9ICh0IHwgMCkgPj0gMCA/IChuIHwgMCkgPiAodCB8IDApID8gdCA6IG4gOiAwLCBhID0gK1cobyAtIG0gfCAwKSwgaSA9IGEgKiAwLjM0NCArIGggKiAwLjcxNDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSMihpKSA8IDIxNDc0ODM2NDgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSB+fmk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gLTIxNDc0ODM2NDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyA9IGsgLSB0IHwgMCwgZVtmID4+IDJdID0gKG8gfCAwKSA+PSAwID8gKG4gfCAwKSA+IChvIHwgMCkgPyBvIDogbiA6IDAsIGkgPSBhICogMS43NzI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGY6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUjIoaSkgPCAyMTQ3NDgzNjQ4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gfn5pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IC0yMTQ3NDgzNjQ4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSB0ICsgayB8IDAsIGVbdSA+PiAyXSA9IChrIHwgMCkgPj0gMCA/IChuIHwgMCkgPiAoayB8IDApID8gayA6IG4gOiAwLCBvID0gZVt5ID4+IDJdLCBoID0gK1coZVtCID4+IDJdIC0gbSB8IDApLCBpID0gaCAqIDEuNDAyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFIyKGkpIDwgMjE0NzQ4MzY0OCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IH5+aTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSAtMjE0NzQ4MzY0ODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gZVtQICsgNCA+PiAyXSwgdCA9IHQgKyBrIHwgMCwgZVt3ICsgNCA+PiAyXSA9ICh0IHwgMCkgPj0gMCA/IChuIHwgMCkgPiAodCB8IDApID8gdCA6IG4gOiAwLCBhID0gK1cobyAtIG0gfCAwKSwgaSA9IGEgKiAwLjM0NCArIGggKiAwLjcxNDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSMihpKSA8IDIxNDc0ODM2NDgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSB+fmk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gLTIxNDc0ODM2NDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyA9IGsgLSB0IHwgMCwgZVtmICsgNCA+PiAyXSA9IChvIHwgMCkgPj0gMCA/IChuIHwgMCkgPiAobyB8IDApID8gbyA6IG4gOiAwLCBpID0gYSAqIDEuNzcyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFIyKGkpIDwgMjE0NzQ4MzY0OCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IH5+aTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSAtMjE0NzQ4MzY0ODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoayA9IHQgKyBrIHwgMCwgZVt1ICsgNCA+PiAyXSA9IChrIHwgMCkgPj0gMCA/IChuIHwgMCkgPiAoayB8IDApID8gayA6IG4gOiAwLCBCID0gQiArIDQgfCAwLCB5ID0geSArIDQgfCAwLCB1ID0gdSArIDggfCAwLCBmID0gZiArIDggfCAwLCB3ID0gdyArIDggfCAwLCBQID0gUCArIDggfCAwLCByID0gciArIDggfCAwLCBsID0gbCArIDggfCAwLCBBID0gQSArIDggfCAwLCBzID0gcyArIDggfCAwLCBIID0gSCArIDIgfCAwLCAhKGMgPj4+IDAgPiBIID4+PiAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBDOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgayA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPj4+IDAgPCB3MiA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyA9IGVbeSA+PiAyXSwgaCA9ICtXKGVbQiA+PiAyXSAtIG0gfCAwKSwgaSA9IGggKiAxLjQwMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGY6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFIyKGkpIDwgMjE0NzQ4MzY0OCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSB+fmk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gLTIxNDc0ODM2NDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gZVtzID4+IDJdLCB0ID0gdCArIGsgfCAwLCBlW0EgPj4gMl0gPSAodCB8IDApID49IDAgPyAobiB8IDApID4gKHQgfCAwKSA/IHQgOiBuIDogMCwgYSA9ICtXKG8gLSBtIHwgMCksIGkgPSBhICogMC4zNDQgKyBoICogMC43MTQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSMihpKSA8IDIxNDc0ODM2NDgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gfn5pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IC0yMTQ3NDgzNjQ4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyA9IGsgLSB0IHwgMCwgZVtsID4+IDJdID0gKG8gfCAwKSA+PSAwID8gKG4gfCAwKSA+IChvIHwgMCkgPyBvIDogbiA6IDAsIGkgPSBhICogMS43NzI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSMihpKSA8IDIxNDc0ODM2NDgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gfn5pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IC0yMTQ3NDgzNjQ4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgayA9IHQgKyBrIHwgMCwgZVtyID4+IDJdID0gKGsgfCAwKSA+PSAwID8gKG4gfCAwKSA+IChrIHwgMCkgPyBrIDogbiA6IDAsIG8gPSBlW3kgPj4gMl0sIHQgPSB3LCBoID0gK1coZVtCID4+IDJdIC0gbSB8IDApLCBpID0gaCAqIDEuNDAyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUjIoaSkgPCAyMTQ3NDgzNjQ4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdyA9IH5+aTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcgPSAtMjE0NzQ4MzY0ODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBlW1AgPj4gMl0sIHcgPSB3ICsgayB8IDAsIGVbdCA+PiAyXSA9ICh3IHwgMCkgPj0gMCA/IChuIHwgMCkgPiAodyB8IDApID8gdyA6IG4gOiAwLCB3ID0gZiwgYSA9ICtXKG8gLSBtIHwgMCksIGkgPSBhICogMC4zNDQgKyBoICogMC43MTQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSMihpKSA8IDIxNDc0ODM2NDgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gfn5pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IC0yMTQ3NDgzNjQ4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IGsgLSBmIHwgMCwgZVt3ID4+IDJdID0gKGYgfCAwKSA+PSAwID8gKG4gfCAwKSA+IChmIHwgMCkgPyBmIDogbiA6IDAsIGkgPSBhICogMS43NzI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSMihpKSA8IDIxNDc0ODM2NDgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gfn5pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IC0yMTQ3NDgzNjQ4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IGYgKyBrIHwgMCwgZVt1ID4+IDJdID0gKGYgfCAwKSA+PSAwID8gKG4gfCAwKSA+IChmIHwgMCkgPyBmIDogbiA6IDAsIEIgPSBCICsgNCB8IDAsIHkgPSB5ICsgNCB8IDAsIHIgPSByICsgNCB8IDAsIGwgPSBsICsgNCB8IDAsIHMgPSBzICsgNCB8IDAsIEEgPSBBICsgNCB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0gciArIHogfCAwLCBsID0gbCArIHogfCAwLCBBID0gQSArIHogfCAwLCBzID0gcyArIHogfCAwLCBFID0gRSArIDIgfCAwLCAhKG4yID4+PiAwID4gRSA+Pj4gMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gZjIgKyAyIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGY6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGYgPj4+IDAgPj0gZzIgPj4+IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYgPSBqICYgLTIsIHYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGsgPSB2IC0gMSAmIC0yLCB3ID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBlW3kgPj4gMl0sIGggPSArVyhlW0IgPj4gMl0gLSBtIHwgMCksIGkgPSBoICogMS40MDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSMihpKSA8IDIxNDc0ODM2NDgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDID0gfn5pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQyA9IC0yMTQ3NDgzNjQ4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IGVbcyA+PiAyXSwgQyA9IEMgKyBmIHwgMCwgZVtBID4+IDJdID0gKEMgfCAwKSA+PSAwID8gKG4gfCAwKSA+IChDIHwgMCkgPyBDIDogbiA6IDAsIGEgPSArVyh1IC0gbSB8IDApLCBpID0gYSAqIDAuMzQ0ICsgaCAqIDAuNzE0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUjIoaSkgPCAyMTQ3NDgzNjQ4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IH5+aTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSAtMjE0NzQ4MzY0ODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBmIC0gdSB8IDAsIGVbbCA+PiAyXSA9ICh1IHwgMCkgPj0gMCA/IChuIHwgMCkgPiAodSB8IDApID8gdSA6IG4gOiAwLCBpID0gYSAqIDEuNzcyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUjIoaSkgPCAyMTQ3NDgzNjQ4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IH5+aTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSAtMjE0NzQ4MzY0ODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSB1ICsgZiB8IDAsIGVbciA+PiAyXSA9IChmIHwgMCkgPj0gMCA/IChuIHwgMCkgPiAoZiB8IDApID8gZiA6IG4gOiAwLCB1ID0gZVt5ID4+IDJdLCBoID0gK1coZVtCID4+IDJdIC0gbSB8IDApLCBpID0gaCAqIDEuNDAyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUjIoaSkgPCAyMTQ3NDgzNjQ4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQyA9IH5+aTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMgPSAtMjE0NzQ4MzY0ODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBlW3MgKyA0ID4+IDJdLCBDID0gQyArIGYgfCAwLCBlW0EgKyA0ID4+IDJdID0gKEMgfCAwKSA+PSAwID8gKG4gfCAwKSA+IChDIHwgMCkgPyBDIDogbiA6IDAsIGEgPSArVyh1IC0gbSB8IDApLCBpID0gYSAqIDAuMzQ0ICsgaCAqIDAuNzE0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUjIoaSkgPCAyMTQ3NDgzNjQ4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IH5+aTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSAtMjE0NzQ4MzY0ODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBmIC0gdSB8IDAsIGVbbCArIDQgPj4gMl0gPSAodSB8IDApID49IDAgPyAobiB8IDApID4gKHUgfCAwKSA/IHUgOiBuIDogMCwgaSA9IGEgKiAxLjc3MjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFIyKGkpIDwgMjE0NzQ4MzY0OCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSB+fmk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gLTIxNDc0ODM2NDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZiA9IHUgKyBmIHwgMCwgZVtyICsgNCA+PiAyXSA9IChmIHwgMCkgPj0gMCA/IChuIHwgMCkgPiAoZiB8IDApID8gZiA6IG4gOiAwLCBCID0gQiArIDQgfCAwLCB5ID0geSArIDQgfCAwLCByID0gciArIDggfCAwLCBsID0gbCArIDggfCAwLCBBID0gQSArIDggfCAwLCBzID0gcyArIDggfCAwLCB3ID0gdyArIDIgfCAwLCAhKHYgPj4+IDAgPiB3ID4+PiAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBrICsgMiB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZiA+Pj4gMCA+PSBqID4+PiAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBlW3kgPj4gMl0sIGsgPSBBLCBoID0gK1coZVtCID4+IDJdIC0gbSB8IDApLCBpID0gaCAqIDEuNDAyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFIyKGkpIDwgMjE0NzQ4MzY0OCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IH5+aTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSAtMjE0NzQ4MzY0ODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBID0gZVtzID4+IDJdLCB1ID0gdSArIEEgfCAwLCBlW2sgPj4gMl0gPSAodSB8IDApID49IDAgPyAobiB8IDApID4gKHUgfCAwKSA/IHUgOiBuIDogMCwgayA9IGwsIGEgPSArVyhmIC0gbSB8IDApLCBpID0gYSAqIDAuMzQ0ICsgaCAqIDAuNzE0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFIyKGkpIDwgMjE0NzQ4MzY0OCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IH5+aTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSAtMjE0NzQ4MzY0ODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gQSAtIGwgfCAwLCBlW2sgPj4gMl0gPSAobCB8IDApID49IDAgPyAobiB8IDApID4gKGwgfCAwKSA/IGwgOiBuIDogMCwgaSA9IGEgKiAxLjc3MjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSMihpKSA8IDIxNDc0ODM2NDgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSB+fmk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gLTIxNDc0ODM2NDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQSA9IGwgKyBBIHwgMCwgZVtyID4+IDJdID0gKEEgfCAwKSA+PSAwID8gKEEgfCAwKSA8IChuIHwgMCkgPyBBIDogbiA6IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSKGVbZVt4ICsgMjQgPj4gMl0gKyA0NCA+PiAyXSksIEEgPSBlW3ggKyAyNCA+PiAyXSwgZVtBICsgNDQgPj4gMl0gPSBKLCBSKGVbQSArIDk2ID4+IDJdKSwgQSA9IGVbeCArIDI0ID4+IDJdLCBlW0EgKyA5NiA+PiAyXSA9IEQsIFIoZVtBICsgMTQ4ID4+IDJdKSwgciA9IGVbeCArIDI0ID4+IDJdLCBlW3IgKyAxNDggPj4gMl0gPSBVLCBBID0gZVtyICsgOCA+PiAyXSwgZVtyICsgMTEyID4+IDJdID0gQSwgZVtyICsgNjAgPj4gMl0gPSBBLCBBID0gZVtyICsgMTIgPj4gMl0sIGVbciArIDExNiA+PiAyXSA9IEEsIGVbciArIDY0ID4+IDJdID0gQSwgQSA9IGVbciA+PiAyXSwgZVtyICsgMTA0ID4+IDJdID0gQSwgZVtyICsgNTIgPj4gMl0gPSBBLCBBID0gZVtyICsgNCA+PiAyXSwgZVtyICsgMTA4ID4+IDJdID0gQSwgZVtyICsgNTYgPj4gMl0gPSBBLCBlW3ggKyAyMCA+PiAyXSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbciArIDEwNCA+PiAyXSAhPSAyIHwgZVtyICsgNCA+PiAyXSAhPSAxIHwgKGVbciArIDU2ID4+IDJdICE9IDEgfCBlW3IgKyAxMDggPj4gMl0gIT0gMSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgcCA9IEEsIGwgPSBlW0EgKyAyNCA+PiAyXSwgZiA9IGVbbCArIDI0ID4+IDJdLCBzID0gZVtsICsgMTQ4ID4+IDJdLCBCID0gZVtsICsgOTYgPj4gMl0sIEggPSBlW2wgKyA0NCA+PiAyXSwgciA9IGVbbCArIDggPj4gMl0sIE8gPSBlW2wgKyAxMiA+PiAyXSwgbCA9IFoociwgTykgPDwgMiwgdiA9IFAwKGwpLCBDID0gUDAobCksIGsgPSBQMChsKTsKICAgICAgICAgICAgICAgICAgICAgICAgazogewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKCFrIHwgKCF2IHwgIUMpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE8pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IGVbQSA+PiAyXSAmIDEsIGYyID0gciAtIHggfCAwLCB0ID0gMSA8PCBmIC0gMSwgYSA9ICtXKDAgLSB0IHwgMCksIGkgPSBhICogMC4zNDQgKyBhICogMC43MTQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGY6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUjIoaSkgPCAyMTQ3NDgzNjQ4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKID0gfn5pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSiA9IC0yMTQ3NDgzNjQ4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gPSBmMiAmIC0yLCBBID0gbyAtIDEgfCAwLCBpID0gYSAqIDEuNzcyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFIyKGkpIDwgMjE0NzQ4MzY0OCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRCA9IH5+aTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQgPSAtMjE0NzQ4MzY0ODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gLTEgPDwgZiwgQSA9IEEgJiAtMiwgaSA9IGEgKiAxLjQwMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSMihpKSA8IDIxNDc0ODM2NDgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFUgPSB+fmk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVID0gLTIxNDc0ODM2NDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjID0gciBeIC0xLCB1ID0gQSArIDIgfCAwLCBBID0gdiwgbCA9IEMsIHIgPSBrOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4ICYmIChnID0gZVtIID4+IDJdLCBmID0gZyArIFUgfCAwLCBlW0EgPj4gMl0gPSAoZiB8IDApID49IDAgPyAoZiB8IDApIDwgKGMgfCAwKSA/IGYgOiBjIDogMCwgZiA9IGcgLSBKIHwgMCwgZVtsID4+IDJdID0gKGYgfCAwKSA+PSAwID8gKGYgfCAwKSA8IChjIHwgMCkgPyBmIDogYyA6IDAsIGYgPSBnICsgRCB8IDAsIGVbciA+PiAyXSA9IChmIHwgMCkgPj0gMCA/IChmIHwgMCkgPCAoYyB8IDApID8gZiA6IGMgOiAwLCBsID0gbCArIDQgfCAwLCBIID0gSCArIDQgfCAwLCByID0gciArIDQgfCAwLCBBID0gQSArIDQgfCAwKSwgUCA9IDAsIG8pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gZVtCID4+IDJdLCBoID0gK1coZVtzID4+IDJdIC0gdCB8IDApLCBpID0gaCAqIDEuNDAyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFIyKGkpIDwgMjE0NzQ4MzY0OCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IH5+aTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAtMjE0NzQ4MzY0ODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gZVtIID4+IDJdLCBFID0gbiArIGYgfCAwLCBlW0EgPj4gMl0gPSAoRSB8IDApID49IDAgPyAoYyB8IDApID4gKEUgfCAwKSA/IEUgOiBjIDogMCwgYSA9ICtXKGcgLSB0IHwgMCksIGkgPSBhICogMC4zNDQgKyBoICogMC43MTQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGY6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUjIoaSkgPCAyMTQ3NDgzNjQ4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gfn5pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZyA9IC0yMTQ3NDgzNjQ4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcgPSBmIC0gZyB8IDAsIGVbbCA+PiAyXSA9IChnIHwgMCkgPj0gMCA/IChjIHwgMCkgPiAoZyB8IDApID8gZyA6IGMgOiAwLCBpID0gYSAqIDEuNzcyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFIyKGkpIDwgMjE0NzQ4MzY0OCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZyA9IH5+aTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcgPSAtMjE0NzQ4MzY0ODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gZyArIGYgfCAwLCBlW3IgPj4gMl0gPSAoZiB8IDApID49IDAgPyAoZiB8IDApIDwgKGMgfCAwKSA/IGYgOiBjIDogMCwgZyA9IGVbQiA+PiAyXSwgaCA9ICtXKGVbcyA+PiAyXSAtIHQgfCAwKSwgaSA9IGggKiAxLjQwMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSMihpKSA8IDIxNDc0ODM2NDgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSB+fmk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gLTIxNDc0ODM2NDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IGVbSCArIDQgPj4gMl0sIEUgPSBuICsgZiB8IDAsIGVbQSArIDQgPj4gMl0gPSAoRSB8IDApID49IDAgPyAoYyB8IDApID4gKEUgfCAwKSA/IEUgOiBjIDogMCwgYSA9ICtXKGcgLSB0IHwgMCksIGkgPSBhICogMC4zNDQgKyBoICogMC43MTQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGY6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUjIoaSkgPCAyMTQ3NDgzNjQ4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gfn5pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZyA9IC0yMTQ3NDgzNjQ4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcgPSBmIC0gZyB8IDAsIGVbbCArIDQgPj4gMl0gPSAoZyB8IDApID49IDAgPyAoYyB8IDApID4gKGcgfCAwKSA/IGcgOiBjIDogMCwgaSA9IGEgKiAxLjc3MjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSMihpKSA8IDIxNDc0ODM2NDgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcgPSB+fmk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gLTIxNDc0ODM2NDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGYgPSBnICsgZiB8IDAsIGVbciArIDQgPj4gMl0gPSAoZiB8IDApID49IDAgPyAoZiB8IDApIDwgKGMgfCAwKSA/IGYgOiBjIDogMCwgcyA9IHMgKyA0IHwgMCwgQiA9IEIgKyA0IHwgMCwgciA9IHIgKyA4IHwgMCwgbCA9IGwgKyA4IHwgMCwgQSA9IEEgKyA4IHwgMCwgSCA9IEggKyA4IHwgMCwgUCA9IFAgKyAyIHwgMCwgIShvID4+PiAwID4gUCA+Pj4gMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmID4+PiAwIDwgZjIgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcgPSBlW0IgPj4gMl0sIGggPSArVyhlW3MgPj4gMl0gLSB0IHwgMCksIGkgPSBoICogMS40MDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSMihpKSA8IDIxNDc0ODM2NDgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gfn5pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IC0yMTQ3NDgzNjQ4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IGVbSCA+PiAyXSwgRSA9IG4gKyBmIHwgMCwgZVtBID4+IDJdID0gKEUgfCAwKSA+PSAwID8gKGMgfCAwKSA+IChFIHwgMCkgPyBFIDogYyA6IDAsIGEgPSArVyhnIC0gdCB8IDApLCBpID0gYSAqIDAuMzQ0ICsgaCAqIDAuNzE0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUjIoaSkgPCAyMTQ3NDgzNjQ4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZyA9IH5+aTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcgPSAtMjE0NzQ4MzY0ODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcgPSBmIC0gZyB8IDAsIGVbbCA+PiAyXSA9IChnIHwgMCkgPj0gMCA/IChjIHwgMCkgPiAoZyB8IDApID8gZyA6IGMgOiAwLCBpID0gYSAqIDEuNzcyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUjIoaSkgPCAyMTQ3NDgzNjQ4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZyA9IH5+aTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcgPSAtMjE0NzQ4MzY0ODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBnICsgZiB8IDAsIGVbciA+PiAyXSA9IChmIHwgMCkgPj0gMCA/IChmIHwgMCkgPCAoYyB8IDApID8gZiA6IGMgOiAwLCBzID0gcyArIDQgfCAwLCBCID0gQiArIDQgfCAwLCBsID0gbCArIDQgfCAwLCBIID0gSCArIDQgfCAwLCByID0gciArIDQgfCAwLCBBID0gQSArIDQgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodyA9IHcgKyAxIHwgMCwgKE8gfCAwKSA9PSAodyB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFIoZVtlW3AgKyAyNCA+PiAyXSArIDQ0ID4+IDJdKSwgQSA9IGVbcCArIDI0ID4+IDJdLCBlW0EgKyA0NCA+PiAyXSA9IHYsIFIoZVtBICsgOTYgPj4gMl0pLCBBID0gZVtwICsgMjQgPj4gMl0sIGVbQSArIDk2ID4+IDJdID0gQywgUihlW0EgKyAxNDggPj4gMl0pLCByID0gZVtwICsgMjQgPj4gMl0sIGVbciArIDE0OCA+PiAyXSA9IGssIEEgPSBlW3IgKyA4ID4+IDJdLCBlW3IgKyAxMTIgPj4gMl0gPSBBLCBlW3IgKyA2MCA+PiAyXSA9IEEsIEEgPSBlW3IgKyAxMiA+PiAyXSwgZVtyICsgMTE2ID4+IDJdID0gQSwgZVtyICsgNjQgPj4gMl0gPSBBLCBBID0gZVtyID4+IDJdLCBlW3IgKyAxMDQgPj4gMl0gPSBBLCBlW3IgKyA1MiA+PiAyXSA9IEEsIEEgPSBlW3IgKyA0ID4+IDJdLCBlW3IgKyAxMDggPj4gMl0gPSBBLCBlW3IgKyA1NiA+PiAyXSA9IEEsIGVbcCArIDIwID4+IDJdID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIFIodiksIFIoQyksIFIoayk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoZVtyICsgMTA0ID4+IDJdICE9IDEgfCBlW3IgKyA0ID4+IDJdICE9IDEgfCAoZVtyICsgNTYgPj4gMl0gIT0gMSB8IGVbciArIDEwOCA+PiAyXSAhPSAxKSkKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICByID0gZVtBICsgMjQgPj4gMl0sIGwgPSBlW3IgKyAyNCA+PiAyXSwgSCA9IGVbciArIDE0OCA+PiAyXSwgcyA9IGVbciArIDk2ID4+IDJdLCBCID0gZVtyICsgNDQgPj4gMl0sIHYgPSBaKGVbciArIDEyID4+IDJdLCBlW3IgKyA4ID4+IDJdKSwgciA9IHYgPDwgMiwgRCA9IFAwKHIpLCBVID0gUDAociksIHcgPSBQMChyKTsKICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgIGlmICghKCF3IHwgKCFEIHwgIVUpKSkgewogICAgICAgICAgICAgICAgICAgICAgaWYgKHYpCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAocCA9IC0xIDw8IGwgXiAtMSwgQyA9IDEgPDwgbCAtIDEsIGYgPSBELCBsID0gVSwgciA9IHc7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgSiA9IGVbcyA+PiAyXSwgaCA9ICtXKGVbSCA+PiAyXSAtIEMgfCAwKSwgaSA9IGggKiAxLjQwMjsKICAgICAgICAgICAgICAgICAgICAgICAgICBrOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUjIoaSkgPCAyMTQ3NDgzNjQ4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSB+fmk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gLTIxNDc0ODM2NDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBlW0IgPj4gMl0sIGsgPSBrICsgdSB8IDAsIGVbZiA+PiAyXSA9IChrIHwgMCkgPj0gMCA/IChrIHwgMCkgPCAocCB8IDApID8gayA6IHAgOiAwLCBhID0gK1coSiAtIEMgfCAwKSwgaSA9IGEgKiAwLjM0NCArIGggKiAwLjcxNDsKICAgICAgICAgICAgICAgICAgICAgICAgICBrOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUjIoaSkgPCAyMTQ3NDgzNjQ4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSB+fmk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gLTIxNDc0ODM2NDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIEogPSB1IC0gayB8IDAsIGVbbCA+PiAyXSA9IChKIHwgMCkgPj0gMCA/IChwIHwgMCkgPiAoSiB8IDApID8gSiA6IHAgOiAwLCBpID0gYSAqIDEuNzcyOwogICAgICAgICAgICAgICAgICAgICAgICAgIGs6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSMihpKSA8IDIxNDc0ODM2NDgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgayA9IH5+aTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSAtMjE0NzQ4MzY0ODsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHUgPSBrICsgdSB8IDAsIGVbciA+PiAyXSA9ICh1IHwgMCkgPj0gMCA/ICh1IHwgMCkgPCAocCB8IDApID8gdSA6IHAgOiAwLCByID0gciArIDQgfCAwLCBsID0gbCArIDQgfCAwLCBmID0gZiArIDQgfCAwLCBIID0gSCArIDQgfCAwLCBzID0gcyArIDQgfCAwLCBCID0gQiArIDQgfCAwLCB5ID0geSArIDEgfCAwLCAodiB8IDApID09ICh5IHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgUihlW2VbQSArIDI0ID4+IDJdICsgNDQgPj4gMl0pLCByID0gZVtBICsgMjQgPj4gMl0sIGVbciArIDQ0ID4+IDJdID0gRCwgUihlW3IgKyA5NiA+PiAyXSksIHIgPSBlW0EgKyAyNCA+PiAyXSwgZVtyICsgOTYgPj4gMl0gPSBVLCBSKGVbciArIDE0OCA+PiAyXSksIGVbZVtBICsgMjQgPj4gMl0gKyAxNDggPj4gMl0gPSB3LCBlW0EgKyAyMCA+PiAyXSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBSKEQpLCBSKFUpLCBSKHcpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlW3EgKyA0ID4+IDJdID0gMjYyLCBlW3EgPj4gMl0gPSAxNjQ2LCBJMChlWzExODQ2XSwgMTg1MzIsIHEpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBYID0gcSArIDE2IHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiB2MShBKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwOwogICAgICAgICAgICAgIHZhciBpID0gMCwgciA9IDAsIGYgPSAwLCBrID0gMCwgdCA9IDAsIG4gPSAwLCBsID0gMCwgYSA9IDAsIHUgPSAwLCBvID0gMCwgZyA9IDAsIGggPSAwLCBzID0gMDsKICAgICAgICAgICAgICBvID0gWCAtIDE2IHwgMCwgWCA9IG87CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgazogewogICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICBBOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgbDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEEgPj4+IDAgPD0gMjQ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrID0gZVsxMjk1OF0sIG4gPSBBID4+PiAwIDwgMTEgPyAxNiA6IEEgKyAxMSAmIDUwNCwgQSA9IG4gPj4+IDMgfCAwLCBpID0gayA+Pj4gQSB8IDAsIGkgJiAzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IEEgKyAoKGkgXiAtMSkgJiAxKSB8IDAsIGkgPSByIDw8IDMsIEEgPSBpICsgNTE4NzIgfCAwLCBpID0gZVtpICsgNTE4ODAgPj4gMl0sIGYgPSBlW2kgKyA4ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoQSB8IDApID09IChmIHwgMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaCA9IDUxODMyLCBzID0gaDEocikgJiBrLCBlW2ggPj4gMl0gPSBzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtmICsgMTIgPj4gMl0gPSBBLCBlW0EgKyA4ID4+IDJdID0gZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQSA9IGkgKyA4IHwgMCwgciA9IHIgPDwgMywgZVtpICsgNCA+PiAyXSA9IHIgfCAzLCBpID0gaSArIHIgfCAwLCBlW2kgKyA0ID4+IDJdID0gZVtpICsgNCA+PiAyXSB8IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA9IGVbMTI5NjBdLCBhID4+PiAwID49IG4gPj4+IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gMiA8PCBBLCBBID0gamUoKDAgLSByIHwgcikgJiBpIDw8IEEpLCByID0gQSA8PCAzLCBpID0gciArIDUxODcyIHwgMCwgciA9IGVbciArIDUxODgwID4+IDJdLCBmID0gZVtyICsgOCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGkgfCAwKSA9PSAoZiB8IDApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBoMShBKSAmIGssIGVbMTI5NThdID0gazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbZiArIDEyID4+IDJdID0gaSwgZVtpICsgOCA+PiAyXSA9IGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW3IgKyA0ID4+IDJdID0gbiB8IDMsIGwgPSByICsgbiB8IDAsIEEgPSBBIDw8IDMsIHQgPSBBIC0gbiB8IDAsIGVbbCArIDQgPj4gMl0gPSB0IHwgMSwgZVtBICsgciA+PiAyXSA9IHQsIGEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgPSAoYSAmIC04KSArIDUxODcyIHwgMCwgZiA9IGVbMTI5NjNdLCBpID0gMSA8PCAoYSA+Pj4gMyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGkgJiBrKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbMTI5NThdID0gaSB8IGssIGkgPSBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVbQSArIDggPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW0EgKyA4ID4+IDJdID0gZiwgZVtpICsgMTIgPj4gMl0gPSBmLCBlW2YgKyAxMiA+PiAyXSA9IEEsIGVbZiArIDggPj4gMl0gPSBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBID0gciArIDggfCAwLCBlWzEyOTYzXSA9IGwsIGVbMTI5NjBdID0gdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnID0gZVsxMjk1OV0sICFnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAociA9IGVbKGplKGcpIDw8IDIpICsgNTIxMzYgPj4gMl0sIHQgPSAoZVtyICsgNCA+PiAyXSAmIC04KSAtIG4gfCAwLCBpID0gcjsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQSA9IGVbaSArIDE2ID4+IDJdLCAhQSAmJiAoQSA9IGVbaSArIDIwID4+IDJdLCAhQSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gKGVbQSArIDQgPj4gMl0gJiAtOCkgLSBuIHwgMCwgaSA9IGYgPj4+IDAgPCB0ID4+PiAwLCB0ID0gaSA/IGYgOiB0LCByID0gaSA/IEEgOiByLCBpID0gQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodSA9IGVbciArIDI0ID4+IDJdLCBBID0gZVtyICsgMTIgPj4gMl0sIChyIHwgMCkgIT0gKEEgfCAwKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlW3IgKyA4ID4+IDJdLCBlW2kgKyAxMiA+PiAyXSA9IEEsIGVbQSArIDggPj4gMl0gPSBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSBlW3IgKyAyMCA+PiAyXSwgaSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gciArIDIwIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSBlW3IgKyAxNiA+PiAyXSwgIWkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSByICsgMTYgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBsID0gZiwgQSA9IGksIGYgPSBBICsgMjAgfCAwLCBpID0gZVtBICsgMjAgPj4gMl0sICEoIWkgJiYgKGYgPSBBICsgMTYgfCAwLCBpID0gZVtBICsgMTYgPj4gMl0sICFpKSk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbbCA+PiAyXSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9IC0xLCBBID4+PiAwID4gNDI5NDk2NzIzMSB8fCAoaSA9IEEgKyAxMSB8IDAsIG4gPSBpICYgLTgsIGwgPSBlWzEyOTU5XSwgIWwpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IDMxLCB0ID0gMCAtIG4gfCAwLCBBID4+PiAwIDw9IDE2Nzc3MjA0ICYmIChBID0gTzAoaSA+Pj4gOCB8IDApLCBhID0gKChuID4+PiAzOCAtIEEgJiAxKSAtIChBIDw8IDEpIHwgMCkgKyA2MiB8IDApLCBpID0gZVsoYSA8PCAyKSArIDUyMTM2ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChBID0gMCwgciA9IG4gPDwgKChhIHwgMCkgIT0gMzEgPyAyNSAtIChhID4+PiAxIHwgMCkgfCAwIDogMCk7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHc6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoayA9IChlW2kgKyA0ID4+IDJdICYgLTgpIC0gbiB8IDAsIGsgPj4+IDAgPj0gdCA+Pj4gMCB8fCAoZiA9IGksIHQgPSBrLCB0KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IDAsIEEgPSBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPSBlW2kgKyAyMCA+PiAyXSwgaSA9IGVbKChyID4+PiAyOSAmIDQpICsgaSB8IDApICsgMTYgPj4gMl0sIEEgPSBrID8gKGsgfCAwKSA9PSAoaSB8IDApID8gQSA6IGsgOiBBLCByID0gciA8PCAxLCAhaSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoQSB8IGYpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZiA9IDAsIEEgPSAyIDw8IGEsIEEgPSAoMCAtIEEgfCBBKSAmIGwsICFBKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQSA9IGVbKGplKEEpIDw8IDIpICsgNTIxMzYgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IHIgPSAoZVtBICsgNCA+PiAyXSAmIC04KSAtIG4gfCAwLCBpID0gciA+Pj4gMCA8IHQgPj4+IDAsIHQgPSBpID8gciA6IHQsIGYgPSBpID8gQSA6IGYsIGkgPSBlW0EgKyAxNiA+PiAyXSwgaSA/IEEgPSBpIDogQSA9IGVbQSArIDIwID4+IDJdLCAhIUE7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWYgfCBlWzEyOTYwXSAtIG4gPj4+IDAgPD0gdCA+Pj4gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhID0gZVtmICsgMjQgPj4gMl0sIEEgPSBlW2YgKyAxMiA+PiAyXSwgKGYgfCAwKSAhPSAoQSB8IDApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlW2YgKyA4ID4+IDJdLCBlW2kgKyAxMiA+PiAyXSA9IEEsIGVbQSArIDggPj4gMl0gPSBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSBlW2YgKyAyMCA+PiAyXSwgaSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IGYgKyAyMCB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSBlW2YgKyAxNiA+PiAyXSwgIWkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IGYgKyAxNiB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgayA9IHIsIEEgPSBpLCByID0gQSArIDIwIHwgMCwgaSA9IGVbQSArIDIwID4+IDJdLCAhKCFpICYmIChyID0gQSArIDE2IHwgMCwgaSA9IGVbQSArIDE2ID4+IDJdLCAhaSkpOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayA+PiAyXSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZiA9IGVbMTI5NjBdLCBmID4+PiAwID49IG4gPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgPSBlWzEyOTYzXSwgaSA9IGYgLSBuIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQ6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPj4+IDAgPj0gMTYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gQSArIG4gfCAwLCBlW3IgKyA0ID4+IDJdID0gaSB8IDEsIGVbQSArIGYgPj4gMl0gPSBpLCBlW0EgKyA0ID4+IDJdID0gbiB8IDM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW0EgKyA0ID4+IDJdID0gZiB8IDMsIGkgPSBBICsgZiB8IDAsIGVbaSArIDQgPj4gMl0gPSBlW2kgKyA0ID4+IDJdIHwgMSwgciA9IDAsIGkgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVsxMjk2MF0gPSBpLCBlWzEyOTYzXSA9IHIsIEEgPSBBICsgOCB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9IGVbMTI5NjFdLCByID4+PiAwID4gbiA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IHIgLSBuIHwgMCwgZVsxMjk2MV0gPSBpLCBBID0gZVsxMjk2NF0sIHIgPSBBICsgbiB8IDAsIGVbMTI5NjRdID0gciwgZVtyICsgNCA+PiAyXSA9IGkgfCAxLCBlW0EgKyA0ID4+IDJdID0gbiB8IDMsIEEgPSBBICsgOCB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQSA9IDAsIHQgPSBuICsgNDcgfCAwLCBlWzEzMDc2XSA/IGkgPSBlWzEzMDc4XSA6IChlWzEzMDc5XSA9IC0xLCBlWzEzMDgwXSA9IC0xLCBlWzEzMDc3XSA9IDQwOTYsIGVbMTMwNzhdID0gNDA5NiwgZVsxMzA3Nl0gPSBvICsgMTIgJiAtMTYgXiAxNDMxNjU1NzY4LCBlWzEzMDgxXSA9IDAsIGVbMTMwNjldID0gMCwgaSA9IDQwOTYpLCBrID0gdCArIGkgfCAwLCBsID0gMCAtIGkgfCAwLCBpID0gayAmIGwsIGkgPj4+IDAgPD0gbiA+Pj4gMCB8fCAoYSA9IGVbMTMwNjhdLCBhICYmICh1ID0gZVsxMzA2Nl0sIGYgPSB1ICsgaSB8IDAsIGYgPj4+IDAgPD0gdSA+Pj4gMCB8IGYgPj4+IDAgPiBhID4+PiAwKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQ6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKElbNTIyNzZdICYgNCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGc6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGg6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmID0gZVsxMjk2NF0sIGYpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKEEgPSA1MjI4MDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEgPSBlW0EgPj4gMl0sIGEgPj4+IDAgPD0gZiA+Pj4gMCAmIGYgPj4+IDAgPCBhICsgZVtBICsgNCA+PiAyXSA+Pj4gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQSA9IGVbQSArIDggPj4gMl0sICFBKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0geWUoMCksIChyIHwgMCkgPT0gLTEgfHwgKGsgPSBpLCBBID0gZVsxMzA3N10sIGYgPSBBIC0gMSB8IDAsIGYgJiByICYmIChrID0gKGkgLSByIHwgMCkgKyAociArIGYgJiAwIC0gQSkgfCAwKSwgayA+Pj4gMCA8PSBuID4+PiAwKSB8fCAoZiA9IGVbMTMwNjhdLCBmICYmIChsID0gZVsxMzA2Nl0sIEEgPSBsICsgayB8IDAsIEEgPj4+IDAgPD0gbCA+Pj4gMCB8IEEgPj4+IDAgPiBmID4+PiAwKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBID0geWUoayksIChyIHwgMCkgIT0gKEEgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoayA9IGwgJiBrIC0gciwgciA9IHllKGspLCAociB8IDApID09IChlW0EgPj4gMl0gKyBlW0EgKyA0ID4+IDJdIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQSA9IHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEEgfCAwKSA9PSAtMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuICsgNDggPj4+IDAgPD0gayA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0gZVsxMzA3OF0sIHIgPSByICsgKHQgLSBrIHwgMCkgJiAwIC0gciwgKHllKHIpIHwgMCkgPT0gLTEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gciArIGsgfCAwLCByID0gQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgociB8IDApICE9IC0xKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlWzEzMDY5XSA9IGVbMTMwNjldIHwgNDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0geWUoaSksIEEgPSB5ZSgwKSwgKHIgfCAwKSA9PSAtMSB8IChBIHwgMCkgPT0gLTEgfCBBID4+PiAwIDw9IHIgPj4+IDAgfHwgKGsgPSBBIC0gciB8IDAsIGsgPj4+IDAgPD0gbiArIDQwID4+PiAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQSA9IGVbMTMwNjZdICsgayB8IDAsIGVbMTMwNjZdID0gQSwgQSA+Pj4gMCA+IGRbMTMwNjddICYmIChlWzEzMDY3XSA9IEEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQ6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gZVsxMjk2NF0sIHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChBID0gNTIyODA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSBlW0EgPj4gMl0sIGYgPSBlW0EgKyA0ID4+IDJdLCAoaSArIGYgfCAwKSA9PSAociB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQSA9IGVbQSArIDggPj4gMl0sICFBKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoQSA9IGVbMTI5NjJdLCBBID4+PiAwIDw9IHIgPj4+IDAgJiYgQSB8fCAoZVsxMjk2Ml0gPSByKSwgQSA9IDAsIGVbMTMwNzFdID0gaywgZVsxMzA3MF0gPSByLCBlWzEyOTY2XSA9IC0xLCBlWzEyOTY3XSA9IGVbMTMwNzZdLCBlWzEzMDczXSA9IDA7IGkgPSBBIDw8IDMsIGYgPSBpICsgNTE4NzIgfCAwLCBlW2kgKyA1MTg4MCA+PiAyXSA9IGYsIGVbaSArIDUxODg0ID4+IDJdID0gZiwgQSA9IEEgKyAxIHwgMCwgKEEgfCAwKSAhPSAzMjsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBID0gayAtIDQwIHwgMCwgaSA9IC04IC0gciAmIDcsIGYgPSBBIC0gaSB8IDAsIGVbMTI5NjFdID0gZiwgaSA9IGkgKyByIHwgMCwgZVsxMjk2NF0gPSBpLCBlW2kgKyA0ID4+IDJdID0gZiB8IDEsIGVbKEEgKyByIHwgMCkgKyA0ID4+IDJdID0gNDAsIGVbMTI5NjVdID0gZVsxMzA4MF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtBICsgMTIgPj4gMl0gJiA4IHwgKHIgPj4+IDAgPD0gdCA+Pj4gMCB8IGkgPj4+IDAgPiB0ID4+PiAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtBICsgNCA+PiAyXSA9IGYgKyBrLCBBID0gLTggLSB0ICYgNywgaSA9IEEgKyB0IHwgMCwgZVsxMjk2NF0gPSBpLCByID0gZVsxMjk2MV0gKyBrIHwgMCwgQSA9IHIgLSBBIHwgMCwgZVsxMjk2MV0gPSBBLCBlW2kgKyA0ID4+IDJdID0gQSB8IDEsIGVbKHIgKyB0IHwgMCkgKyA0ID4+IDJdID0gNDAsIGVbMTI5NjVdID0gZVsxMzA4MF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgZFsxMjk2Ml0gPiByID4+PiAwICYmIChlWzEyOTYyXSA9IHIpLCBmID0gciArIGsgfCAwLCBBID0gNTIyODA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgbDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID0gZVtBID4+IDJdLCAoaSB8IDApICE9IChmIHwgMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQSA9IGVbQSArIDggPj4gMl0sIEEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoSVtBICsgMTIgfCAwXSAmIDgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKEEgPSA1MjI4MDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGw6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSBlW0EgPj4gMl0sIGkgPj4+IDAgPD0gdCA+Pj4gMCAmJiAoZiA9IGkgKyBlW0EgKyA0ID4+IDJdIHwgMCwgZiA+Pj4gMCA+IHQgPj4+IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgPSBlW0EgKyA4ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKEEgPSBrIC0gNDAgfCAwLCBpID0gLTggLSByICYgNywgbCA9IEEgLSBpIHwgMCwgZVsxMjk2MV0gPSBsLCBpID0gaSArIHIgfCAwLCBlWzEyOTY0XSA9IGksIGVbaSArIDQgPj4gMl0gPSBsIHwgMSwgZVsoQSArIHIgfCAwKSArIDQgPj4gMl0gPSA0MCwgZVsxMjk2NV0gPSBlWzEzMDgwXSwgQSA9IChmICsgKDM5IC0gZiAmIDcpIHwgMCkgLSA0NyB8IDAsIGkgPSBBID4+PiAwIDwgdCArIDE2ID4+PiAwID8gdCA6IEEsIGVbaSArIDQgPj4gMl0gPSAyNywgQSA9IGVbMTMwNzNdLCBlW2kgKyAxNiA+PiAyXSA9IGVbMTMwNzJdLCBlW2kgKyAyMCA+PiAyXSA9IEEsIEEgPSBlWzEzMDcxXSwgZVtpICsgOCA+PiAyXSA9IGVbMTMwNzBdLCBlW2kgKyAxMiA+PiAyXSA9IEEsIGVbMTMwNzJdID0gaSArIDgsIGVbMTMwNzFdID0gaywgZVsxMzA3MF0gPSByLCBlWzEzMDczXSA9IDAsIEEgPSBpICsgMjQgfCAwOyBlW0EgKyA0ID4+IDJdID0gNywgciA9IEEgKyA4IHwgMCwgQSA9IEEgKyA0IHwgMCwgciA+Pj4gMCA8IGYgPj4+IDA7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGkgfCAwKSA9PSAodCB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICBlW2kgKyA0ID4+IDJdID0gZVtpICsgNCA+PiAyXSAmIC0yLCByID0gaSAtIHQgfCAwLCBlW3QgKyA0ID4+IDJdID0gciB8IDEsIGVbaSA+PiAyXSA9IHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgbDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPj4+IDAgPD0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgPSAociAmIC04KSArIDUxODcyIHwgMCwgaSA9IGVbMTI5NThdLCByID0gMSA8PCAociA+Pj4gMyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShpICYgcikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbMTI5NThdID0gaSB8IHIsIGkgPSBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVbQSArIDggPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtBICsgOCA+PiAyXSA9IHQsIGVbaSArIDEyID4+IDJdID0gdCwgZiA9IDgsIHIgPSAxMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgPSAzMSwgciA+Pj4gMCA8PSAxNjc3NzIxNSAmJiAoQSA9IE8wKHIgPj4+IDggfCAwKSwgQSA9ICgociA+Pj4gMzggLSBBICYgMSkgLSAoQSA8PCAxKSB8IDApICsgNjIgfCAwKSwgZVt0ICsgMjggPj4gMl0gPSBBLCBlW3QgKyAxNiA+PiAyXSA9IDAsIGVbdCArIDIwID4+IDJdID0gMCwgaSA9IChBIDw8IDIpICsgNTIxMzYgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gZVsxMjk1OV0sIGsgPSAxIDw8IEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShmICYgaykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbMTI5NTldID0gZiB8IGssIGVbaSA+PiAyXSA9IHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKEEgPSByIDw8ICgoQSB8IDApICE9IDMxID8gMjUgLSAoQSA+Pj4gMSB8IDApIHwgMCA6IDApLCBmID0gZVtpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSBmLCAociB8IDApID09IChlW2kgKyA0ID4+IDJdICYgLTgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGYgPSBBID4+PiAyOSB8IDAsIEEgPSBBIDw8IDEsIGsgPSAoZiAmIDQpICsgaSB8IDAsIGYgPSBlW2sgKyAxNiA+PiAyXSwgIWYpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxNiA+PiAyXSA9IHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVt0ICsgMjQgPj4gMl0gPSBpLCBpID0gdCwgQSA9IGksIGYgPSAxMiwgciA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBID0gZVtpICsgOCA+PiAyXSwgZVtBICsgMTIgPj4gMl0gPSB0LCBlW2kgKyA4ID4+IDJdID0gdCwgZVt0ICsgOCA+PiAyXSA9IEEsIEEgPSAwLCBmID0gMTIsIHIgPSAyNDsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgZVtmICsgdCA+PiAyXSA9IGksIGVbciArIHQgPj4gMl0gPSBBOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBID0gZVsxMjk2MV0sIEEgPj4+IDAgPD0gbiA+Pj4gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICBpID0gQSAtIG4gfCAwLCBlWzEyOTYxXSA9IGksIEEgPSBlWzEyOTY0XSwgciA9IEEgKyBuIHwgMCwgZVsxMjk2NF0gPSByLCBlW3IgKyA0ID4+IDJdID0gaSB8IDEsIGVbQSArIDQgPj4gMl0gPSBuIHwgMywgQSA9IEEgKyA4IHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGVbMTI0ODVdID0gNDgsIEEgPSAwOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZVtBID4+IDJdID0gciwgZVtBICsgNCA+PiAyXSA9IGVbQSArIDQgPj4gMl0gKyBrLCBhID0gKC04IC0gciAmIDcpICsgciB8IDAsIGVbYSArIDQgPj4gMl0gPSBuIHwgMywgayA9IGkgKyAoLTggLSBpICYgNykgfCAwLCB0ID0gbiArIGEgfCAwLCBsID0gayAtIHQgfCAwOwogICAgICAgICAgICAgICAgICAgIGs6IHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChlWzEyOTY0XSA9PSAoayB8IDApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVbMTI5NjRdID0gdCwgQSA9IGVbMTI5NjFdICsgbCB8IDAsIGVbMTI5NjFdID0gQSwgZVt0ICsgNCA+PiAyXSA9IEEgfCAxOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgaWYgKGVbMTI5NjNdID09IChrIHwgMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZVsxMjk2M10gPSB0LCBBID0gZVsxMjk2MF0gKyBsIHwgMCwgZVsxMjk2MF0gPSBBLCBlW3QgKyA0ID4+IDJdID0gQSB8IDEsIGVbQSArIHQgPj4gMl0gPSBBOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgaWYgKEEgPSBlW2sgKyA0ID4+IDJdLCAoQSAmIDMpID09IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdSA9IEEgJiAtOCwgciA9IGVbayArIDEyID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEEgPj4+IDAgPD0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IGVbayArIDggPj4gMl0sIChpIHwgMCkgPT0gKHIgfCAwKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoID0gNTE4MzIsIHMgPSBlWzEyOTU4XSAmIGgxKEEgPj4+IDMgfCAwKSwgZVtoID4+IDJdID0gczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbaSArIDEyID4+IDJdID0gciwgZVtyICsgOCA+PiAyXSA9IGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gZVtrICsgMjQgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgQTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChyIHwgMCkgIT0gKGsgfCAwKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBID0gZVtrICsgOCA+PiAyXSwgZVtBICsgMTIgPj4gMl0gPSByLCBlW3IgKyA4ID4+IDJdID0gQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGw6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEEgPSBlW2sgKyAyMCA+PiAyXSwgQSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gayArIDIwIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEEgPSBlW2sgKyAxNiA+PiAyXSwgIUEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBrICsgMTYgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBmID0gaSwgciA9IEEsIGkgPSBBICsgMjAgfCAwLCBBID0gZVtBICsgMjAgPj4gMl0sICEoIUEgJiYgKGkgPSByICsgMTYgfCAwLCBBID0gZVtyICsgMTYgPj4gMl0sICFBKSk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbZiA+PiAyXSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFuKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICBBID0gZVtrICsgMjggPj4gMl0sIGkgPSAoQSA8PCAyKSArIDUyMTM2IHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICBBOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtpID4+IDJdID09IChrIHwgMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbaSA+PiAyXSA9IHIsIHIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaCA9IDUxODM2LCBzID0gZVsxMjk1OV0gJiBoMShBKSwgZVtoID4+IDJdID0gczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGw6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbbiArIDE2ID4+IDJdID09IChrIHwgMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW24gKyAxNiA+PiAyXSA9IHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW24gKyAyMCA+PiAyXSA9IHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW3IgKyAyNCA+PiAyXSA9IG4sIEEgPSBlW2sgKyAxNiA+PiAyXSwgQSAmJiAoZVtyICsgMTYgPj4gMl0gPSBBLCBlW0EgKyAyNCA+PiAyXSA9IHIpLCBBID0gZVtrICsgMjAgPj4gMl0sICFBKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICBlW3IgKyAyMCA+PiAyXSA9IEEsIGVbQSArIDI0ID4+IDJdID0gcjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBsID0gbCArIHUgfCAwLCBrID0gayArIHUgfCAwLCBBID0gZVtrICsgNCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlmIChlW2sgKyA0ID4+IDJdID0gQSAmIC0yLCBlW3QgKyA0ID4+IDJdID0gbCB8IDEsIGVbdCArIGwgPj4gMl0gPSBsLCBsID4+PiAwIDw9IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICBBID0gKGwgJiAtOCkgKyA1MTg3MiB8IDAsIGkgPSBlWzEyOTU4XSwgciA9IDEgPDwgKGwgPj4+IDMpOwogICAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoaSAmIHIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlWzEyOTU4XSA9IGkgfCByLCBpID0gQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlW0EgKyA4ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVbQSArIDggPj4gMl0gPSB0LCBlW2kgKyAxMiA+PiAyXSA9IHQsIGVbdCArIDEyID4+IDJdID0gQSwgZVt0ICsgOCA+PiAyXSA9IGk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICByID0gMzEsIGwgPj4+IDAgPD0gMTY3NzcyMTUgJiYgKEEgPSBPMChsID4+PiA4IHwgMCksIHIgPSAoKGwgPj4+IDM4IC0gQSAmIDEpIC0gKEEgPDwgMSkgfCAwKSArIDYyIHwgMCksIGVbdCArIDI4ID4+IDJdID0gciwgZVt0ICsgMTYgPj4gMl0gPSAwLCBlW3QgKyAyMCA+PiAyXSA9IDAsIEEgPSAociA8PCAyKSArIDUyMTM2IHwgMDsKICAgICAgICAgICAgICAgICAgICAgIGY6IHsKICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVbMTI5NTldLCBmID0gMSA8PCByOwogICAgICAgICAgICAgICAgICAgICAgICBBOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoaSAmIGYpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlWzEyOTU5XSA9IGkgfCBmLCBlW0EgPj4gMl0gPSB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChyID0gbCA8PCAoKHIgfCAwKSAhPSAzMSA/IDI1IC0gKHIgPj4+IDEgfCAwKSB8IDAgOiAwKSwgaSA9IGVbQSA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBID0gaSwgKGVbQSArIDQgPj4gMl0gJiAtOCkgPT0gKGwgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID0gciA+Pj4gMjkgfCAwLCByID0gciA8PCAxLCBmID0gKGkgJiA0KSArIEEgfCAwLCBpID0gZVtmICsgMTYgPj4gMl0sICFpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgZVtmICsgMTYgPj4gMl0gPSB0OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVbdCArIDI0ID4+IDJdID0gQSwgZVt0ICsgMTIgPj4gMl0gPSB0LCBlW3QgKyA4ID4+IDJdID0gdDsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGkgPSBlW0EgKyA4ID4+IDJdLCBlW2kgKyAxMiA+PiAyXSA9IHQsIGVbQSArIDggPj4gMl0gPSB0LCBlW3QgKyAyNCA+PiAyXSA9IDAsIGVbdCArIDEyID4+IDJdID0gQSwgZVt0ICsgOCA+PiAyXSA9IGk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIEEgPSBhICsgOCB8IDA7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFhKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICBpID0gZVtmICsgMjggPj4gMl0sIHIgPSAoaSA8PCAyKSArIDUyMTM2IHwgMDsKICAgICAgICAgICAgICAgICAgICBrOiB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtyID4+IDJdID09IChmIHwgMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbciA+PiAyXSA9IEEsIEEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgbCA9IGgxKGkpICYgbCwgZVsxMjk1OV0gPSBsOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVthICsgMTYgPj4gMl0gPT0gKGYgfCAwKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGVbYSArIDE2ID4+IDJdID0gQTsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVbYSArIDIwID4+IDJdID0gQTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlmICghQSkKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKGVbQSArIDI0ID4+IDJdID0gYSwgaSA9IGVbZiArIDE2ID4+IDJdLCBpICYmIChlW0EgKyAxNiA+PiAyXSA9IGksIGVbaSArIDI0ID4+IDJdID0gQSksIGkgPSBlW2YgKyAyMCA+PiAyXSwgIWkpCiAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgIGVbQSArIDIwID4+IDJdID0gaSwgZVtpICsgMjQgPj4gMl0gPSBBOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICBpZiAodCA+Pj4gMCA8PSAxNSkgewogICAgICAgICAgICAgICAgICAgICAgQSA9IHQgKyBuIHwgMCwgZVtmICsgNCA+PiAyXSA9IEEgfCAzLCBBID0gQSArIGYgfCAwLCBlW0EgKyA0ID4+IDJdID0gZVtBICsgNCA+PiAyXSB8IDE7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoZVtmICsgNCA+PiAyXSA9IG4gfCAzLCBrID0gZiArIG4gfCAwLCBlW2sgKyA0ID4+IDJdID0gdCB8IDEsIGVbdCArIGsgPj4gMl0gPSB0LCB0ID4+PiAwIDw9IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgQSA9ICh0ICYgLTgpICsgNTE4NzIgfCAwLCBpID0gZVsxMjk1OF0sIHIgPSAxIDw8ICh0ID4+PiAzKTsKICAgICAgICAgICAgICAgICAgICAgIGs6IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoaSAmIHIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZVsxMjk1OF0gPSBpIHwgciwgaSA9IEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpID0gZVtBICsgOCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGVbQSArIDggPj4gMl0gPSBrLCBlW2kgKyAxMiA+PiAyXSA9IGssIGVbayArIDEyID4+IDJdID0gQSwgZVtrICsgOCA+PiAyXSA9IGk7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBBID0gMzEsIHQgPj4+IDAgPD0gMTY3NzcyMTUgJiYgKEEgPSBPMCh0ID4+PiA4IHwgMCksIEEgPSAoKHQgPj4+IDM4IC0gQSAmIDEpIC0gKEEgPDwgMSkgfCAwKSArIDYyIHwgMCksIGVbayArIDI4ID4+IDJdID0gQSwgZVtrICsgMTYgPj4gMl0gPSAwLCBlW2sgKyAyMCA+PiAyXSA9IDAsIGkgPSAoQSA8PCAyKSArIDUyMTM2IHwgMDsKICAgICAgICAgICAgICAgICAgICBrOiB7CiAgICAgICAgICAgICAgICAgICAgICByID0gMSA8PCBBOwogICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyICYgbCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBlWzEyOTU5XSA9IHIgfCBsLCBlW2kgPj4gMl0gPSBrLCBlW2sgKyAyNCA+PiAyXSA9IGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKEEgPSB0IDw8ICgoQSB8IDApICE9IDMxID8gMjUgLSAoQSA+Pj4gMSB8IDApIHwgMCA6IDApLCBpID0gZVtpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0gaSwgKGVbaSArIDQgPj4gMl0gJiAtOCkgPT0gKHQgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBBID4+PiAyOSB8IDAsIEEgPSBBIDw8IDEsIGwgPSBpICsgKGwgJiA0KSB8IDAsIGkgPSBlW2wgKyAxNiA+PiAyXSwgIWkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlW2wgKyAxNiA+PiAyXSA9IGssIGVbayArIDI0ID4+IDJdID0gcjsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gaywgZVtrICsgOCA+PiAyXSA9IGs7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBBID0gZVtyICsgOCA+PiAyXSwgZVtBICsgMTIgPj4gMl0gPSBrLCBlW3IgKyA4ID4+IDJdID0gaywgZVtrICsgMjQgPj4gMl0gPSAwLCBlW2sgKyAxMiA+PiAyXSA9IHIsIGVbayArIDggPj4gMl0gPSBBOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIEEgPSBmICsgOCB8IDA7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIGlmICghdSkKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICBpID0gZVtyICsgMjggPj4gMl0sIGYgPSAoaSA8PCAyKSArIDUyMTM2IHwgMDsKICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgIGlmIChlW2YgPj4gMl0gPT0gKHIgfCAwKSkgewogICAgICAgICAgICAgICAgICAgICAgaWYgKGVbZiA+PiAyXSA9IEEsIEEpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICBoID0gNTE4MzYsIHMgPSBoMShpKSAmIGcsIGVbaCA+PiAyXSA9IHM7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBrOiB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoZVt1ICsgMTYgPj4gMl0gPT0gKHIgfCAwKSkgewogICAgICAgICAgICAgICAgICAgICAgICBlW3UgKyAxNiA+PiAyXSA9IEE7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBlW3UgKyAyMCA+PiAyXSA9IEE7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICghQSkKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKGVbQSArIDI0ID4+IDJdID0gdSwgaSA9IGVbciArIDE2ID4+IDJdLCBpICYmIChlW0EgKyAxNiA+PiAyXSA9IGksIGVbaSArIDI0ID4+IDJdID0gQSksIGkgPSBlW3IgKyAyMCA+PiAyXSwgIWkpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgZVtBICsgMjAgPj4gMl0gPSBpLCBlW2kgKyAyNCA+PiAyXSA9IEE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIGlmICh0ID4+PiAwIDw9IDE1KSB7CiAgICAgICAgICAgICAgICAgICAgQSA9IHQgKyBuIHwgMCwgZVtyICsgNCA+PiAyXSA9IEEgfCAzLCBBID0gQSArIHIgfCAwLCBlW0EgKyA0ID4+IDJdID0gZVtBICsgNCA+PiAyXSB8IDE7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoZVtyICsgNCA+PiAyXSA9IG4gfCAzLCBsID0gciArIG4gfCAwLCBlW2wgKyA0ID4+IDJdID0gdCB8IDEsIGVbdCArIGwgPj4gMl0gPSB0LCBhKSB7CiAgICAgICAgICAgICAgICAgICAgQSA9IChhICYgLTgpICsgNTE4NzIgfCAwLCBmID0gZVsxMjk2M10sIGkgPSAxIDw8IChhID4+PiAzKTsKICAgICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoIShpICYgaykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZVsxMjk1OF0gPSBpIHwgaywgaSA9IEE7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBpID0gZVtBICsgOCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZVtBICsgOCA+PiAyXSA9IGYsIGVbaSArIDEyID4+IDJdID0gZiwgZVtmICsgMTIgPj4gMl0gPSBBLCBlW2YgKyA4ID4+IDJdID0gaTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlWzEyOTYzXSA9IGwsIGVbMTI5NjBdID0gdDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIEEgPSByICsgOCB8IDA7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBYID0gbyArIDE2IHwgMCwgQSB8IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gQXIoQSwgaSwgciwgZiwgaykgewogICAgICAgICAgICAgIHZhciB0ID0gMCwgbiA9IDAsIGwgPSAwLCBhID0gMCwgdSA9IDAsIG8gPSAwLCBnID0gMCwgaCA9IDAsIHMgPSAwLCB3ID0gMCwgQiA9IDAsIGMgPSAwLCB2ID0gMCwgQyA9IDAsIG0gPSAwLCB5ID0gMCwgcCA9IDAsIEggPSAwLCBKID0gMCwgRSA9IDAsIEQgPSAwLCBVID0gMCwgUCA9IDAsIHggPSAwLCB6ID0gMCwgaiA9IDAsIE8gPSAwLCBxID0gMCwgZjIgPSAwLCBuMiA9IDAsIGcyID0gMCwgdzIgPSAwLCBjMiA9IDAsIG0yID0gMCwgcDIgPSAwLCBZMiA9IDAsIFgyID0gMCwgRDIgPSAwLCBTMiA9IDAsIFAyID0gMCwgeDIgPSAwLCB6MiA9IDAsIEwyID0gMCwgZTAgPSAwLCBpMCA9IDAsIHIwID0gMCwgazAgPSAwLCB0MCA9IDAsIGgwID0gMCwgQzAgPSBXKDApOwogICAgICAgICAgICAgIHggPSBlW0EgKyAyOCA+PiAyXSwgRCA9IGVbKGVbeCArIDc2ID4+IDJdICsgWihpLCA1NjQ0KSB8IDApICsgNTU4NCA+PiAyXSwgZyA9IGVbQSArIDI0ID4+IDJdLCBPID0gZVtnICsgMjQgPj4gMl0sIG8gPSBlW3ggKyAyNCA+PiAyXSwgbiA9IChpID4+PiAwKSAvIChvID4+PiAwKSB8IDAsIFUgPSBlW2VbQSArIDIwID4+IDJdID4+IDJdLCBBID0gaSAtIFoobiwgbykgfCAwLCBvID0gZVt4ICsgMTIgPj4gMl0sIEEgPSBlW3ggKyA0ID4+IDJdICsgWihBLCBvKSB8IDAsIGkgPSBlW2cgPj4gMl0sIGkgPSBBID4+PiAwID4gaSA+Pj4gMCA/IEEgOiBpLCBlW1UgPj4gMl0gPSBpLCBvID0gQSArIG8gfCAwLCBBID0gQSA+Pj4gMCA+IG8gPj4+IDAgPyAtMSA6IG8sIG8gPSBlW2cgKyA4ID4+IDJdLCBBID0gQSA+Pj4gMCA8IG8gPj4+IDAgPyBBIDogbywgZVtVICsgOCA+PiAyXSA9IEE7CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKCEoKEEgfCAwKSA+IChpIHwgMCkgJiAoaSB8IDApID49IDApKSB7CiAgICAgICAgICAgICAgICAgIFEoaywgMSwgMTA2NzksIDApOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKG8gPSBlW1UgKyAyMCA+PiAyXSwgQSA9IG4sIG4gPSBlW3ggKyAxNiA+PiAyXSwgQSA9IGVbeCArIDggPj4gMl0gKyBaKEEsIG4pIHwgMCwgaSA9IGVbZyArIDQgPj4gMl0sIGkgPSBBID4+PiAwID4gaSA+Pj4gMCA/IEEgOiBpLCBlW1UgKyA0ID4+IDJdID0gaSwgbiA9IEEgKyBuIHwgMCwgQSA9IEEgPj4+IDAgPiBuID4+PiAwID8gLTEgOiBuLCBnID0gZVtnICsgMTIgPj4gMl0sIEEgPSBBID4+PiAwIDwgZyA+Pj4gMCA/IEEgOiBnLCBlW1UgKyAxMiA+PiAyXSA9IEEsICEoKEEgfCAwKSA+IChpIHwgMCkgJiAoaSB8IDApID49IDApKSB7CiAgICAgICAgICAgICAgICAgIFEoaywgMSwgMTA2NDEsIDApOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICBpZiAoZVtEICsgNCA+PiAyXSkgewogICAgICAgICAgICAgICAgICAgIGlmIChlW1UgKyAxNiA+PiAyXSkKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgUShrLCAxLCA4ODU5LCAwKTsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgIGs6IHsKICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtPICsgMzYgPj4gMl0gPSAwLCBBID0gZVtPID4+IDJdLCBuID0gQSA+PiAzMSwgbSA9IEEgLSAxIHwgMCwgaSA9IGVbVSA+PiAyXSwgYSA9IGksIGcgPSBtICsgaSB8IDAsIGwgPSBuIC0gIUEgfCAwLCBpID0gbCArIChpID4+IDMxKSB8IDAsIGkgPSB6MChnLCBhID4+PiAwID4gZyA+Pj4gMCA/IGkgKyAxIHwgMCA6IGksIEEsIG4pLCB0ID0gaSwgZVtvID4+IDJdID0gaSwgZyA9IGVbTyArIDQgPj4gMl0sIEIgPSBnID4+IDMxLCBhID0gZyAtIDEgfCAwLCBpID0gZVtVICsgNCA+PiAyXSwgcyA9IGksIEogPSBhICsgaSB8IDAsIHkgPSBCIC0gIWcgfCAwLCBpID0geSArIChpID4+IDMxKSB8IDAsIEogPSB6MChKLCBzID4+PiAwID4gSiA+Pj4gMCA/IGkgKyAxIHwgMCA6IGksIGcsIEIpLCBlW28gKyA0ID4+IDJdID0gSiwgaSA9IGVbVSArIDggPj4gMl0sIHMgPSBpLCBtID0gaSArIG0gfCAwLCBpID0gKGkgPj4gMzEpICsgbCB8IDAsIEEgPSB6MChtLCBzID4+PiAwID4gbSA+Pj4gMCA/IGkgKyAxIHwgMCA6IGksIEEsIG4pLCBlW28gKyA4ID4+IDJdID0gQSwgbiA9IGVbVSArIDEyID4+IDJdLCBlW28gKyAxNiA+PiAyXSA9IFgyLCBpID0geSArIChuID4+IDMxKSB8IDAsIG4gPSBuICsgYSB8IDAsIGkgPSBuID4+PiAwIDwgYSA+Pj4gMCA/IGkgKyAxIHwgMCA6IGksIGkgPSB6MChuLCBpLCBnLCBCKSwgZVtvICsgMTIgPj4gMl0gPSBpLCBnID0gZVtEICsgNCA+PiAyXSwgZVtvICsgMjAgPj4gMl0gPSBnLCBuID0gZVt4ICsgODAgPj4gMl0sIGVbbyArIDI0ID4+IDJdID0gbiA+Pj4gMCA+IGcgPj4+IDAgPyAxIDogZyAtIG4gfCAwLCByKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IGkgLSBKIHwgMCwgQSA9IEEgLSB0IHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGkgfCAwKSA9PSAoSiB8IDApIHx8IChkMChuLCAwLCBBLCAwKSwgIXEyKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBID0gWihBLCBuKSwgQSA+Pj4gMCA+PSAxMDczNzQxODI0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgICBlW28gKyA0NCA+PiAyXSA9IEEgPDwgMjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBSKGVbbyArIDUyID4+IDJdKSwgZVtvICsgNjggPj4gMl0gPSAwLCBlW28gKyA2MCA+PiAyXSA9IDAsIGVbbyArIDY0ID4+IDJdID0gMCwgZVtvICsgNTIgPj4gMl0gPSAwLCBlW28gKyA1NiA+PiAyXSA9IDAsIEEgPSBaKGcsIDE1MiksIGkgPSBlW28gKyAyOCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSBVMihBKSwgZVtvICsgMjggPj4gMl0gPSBpLCAhaSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbbyArIDMyID4+IDJdID0gQSwgZDIoaSwgMCwgQSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQSA+Pj4gMCA8PSBkW28gKyAzMiA+PiAyXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSBvMChpLCBBKSwgIWkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFEoaywgMSwgNTM1NSwgMCksIFIoZVtvICsgMjggPj4gMl0pLCBlW28gKyAyOCA+PiAyXSA9IDAsIGVbbyArIDMyID4+IDJdID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGVbbyArIDI4ID4+IDJdID0gaSwgdCA9IGksIGkgPSBlW28gKyAzMiA+PiAyXSwgZDIodCArIGkgfCAwLCAwLCBBIC0gaSB8IDApLCBlW28gKyAzMiA+PiAyXSA9IEE7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEEgPSBlW28gKyAyMCA+PiAyXSwgQSkKICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFMyID0gRCArIDk0NCB8IDAsIFAyID0gRCArIDgxMiB8IDAsIHAyID0gRCArIDI4IHwgMCwgZyA9IGVbbyArIDI4ID4+IDJdLCBxID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChCID0gQSAtIDEgfCAwLCBuID0gQiAmIDMxLCAoQiAmIDYzKSA+Pj4gMCA+PSAzMiA/IChpID0gLTEgPDwgbiwgdCA9IDApIDogKHQgPSAtMSA8PCBuLCBpID0gdCB8ICgxIDw8IG4pIC0gMSAmIC0xID4+PiAzMiAtIG4pLCB6ID0gdCBeIC0xLCBhID0gZVtvID4+IDJdLCBuID0geiArIGEgfCAwLCBKID0gaSBeIC0xLCBpID0gSiArIChhID4+IDMxKSB8IDAsIGkgPSBuID4+PiAwIDwgYSA+Pj4gMCA/IGkgKyAxIHwgMCA6IGksIGEgPSBuLCBuID0gQiAmIDMxLCAoQiAmIDYzKSA+Pj4gMCA+PSAzMiA/IG0gPSBpID4+IG4gOiBtID0gKCgxIDw8IG4pIC0gMSAmIGkpIDw8IDMyIC0gbiB8IGEgPj4+IG4sIGVbZyA+PiAyXSA9IG0sIGkgPSBlW28gKyA0ID4+IDJdLCBhID0gaSwgbiA9IGkgKyB6IHwgMCwgaSA9IChpID4+IDMxKSArIEogfCAwLCBpID0gbiA+Pj4gMCA8IGEgPj4+IDAgPyBpICsgMSB8IDAgOiBpLCBhID0gbiwgbiA9IEIgJiAzMSwgKEIgJiA2MykgPj4+IDAgPj0gMzIgPyB0ID0gaSA+PiBuIDogdCA9ICgoMSA8PCBuKSAtIDEgJiBpKSA8PCAzMiAtIG4gfCBhID4+PiBuLCBlW2cgKyA0ID4+IDJdID0gdCwgaSA9IGVbbyArIDggPj4gMl0sIGEgPSBpLCBuID0gaSArIHogfCAwLCBpID0gKGkgPj4gMzEpICsgSiB8IDAsIGkgPSBuID4+PiAwIDwgYSA+Pj4gMCA/IGkgKyAxIHwgMCA6IGksIGEgPSBuLCBuID0gQiAmIDMxLCAoQiAmIDYzKSA+Pj4gMCA+PSAzMiA/IGwgPSBpID4+IG4gOiBsID0gKCgxIDw8IG4pIC0gMSAmIGkpIDw8IDMyIC0gbiB8IGEgPj4+IG4sIGVbZyArIDggPj4gMl0gPSBsLCBpID0gZVtvICsgMTIgPj4gMl0sIGEgPSBpLCBuID0gaSArIHogfCAwLCBpID0gKGkgPj4gMzEpICsgSiB8IDAsIGkgPSBuID4+PiAwIDwgYSA+Pj4gMCA/IGkgKyAxIHwgMCA6IGksIGEgPSBuLCBuID0gQiAmIDMxLCAoQiAmIDYzKSA+Pj4gMCA+PSAzMiA/IGEgPSBpID4+IG4gOiBhID0gKCgxIDw8IG4pIC0gMSAmIGkpIDw8IDMyIC0gbiB8IGEgPj4+IG4sIGVbZyArIDEyID4+IDJdID0gYSwgcyA9IGwgPj4gMzEsIHAgPSBxIDw8IDIsIHkgPSBlW3AgKyBQMiA+PiAyXSwgbiA9IHkgJiAzMSwgKHkgJiA2MykgPj4+IDAgPj0gMzIgPyAoaSA9IDEgPDwgbiwgdSA9IDApIDogKHUgPSAxIDw8IG4sIGkgPSB1IC0gMSAmIDEgPj4+IDMyIC0gbiksIHYgPSB1LCBuID0gdiArIGwgfCAwLCBpID0gaSArIHMgfCAwLCBzID0gbiAtIDEgfCAwLCBuID0gKG4gPj4+IDAgPCB2ID4+PiAwID8gaSArIDEgfCAwIDogaSkgLSAhbiB8IDAsIGkgPSB5ICYgMzEsICh5ICYgNjMpID4+PiAwID49IDMyID8gaSA9IG4gPj4gaSA6IGkgPSAoKDEgPDwgaSkgLSAxICYgbikgPDwgMzIgLSBpIHwgcyA+Pj4gaSwgcyA9IGkgPDwgeSwgKHMgfCAwKSA8IDAgfHwgKHYgPSBhID4+IDMxLCBwID0gZVtwICsgUzIgPj4gMl0sIG4gPSBwICYgMzEsIChwICYgNjMpID4+PiAwID49IDMyID8gKGkgPSAtMSA8PCBuLCBuID0gMCkgOiAoaSA9ICgxIDw8IG4pIC0gMSAmIC0xID4+PiAzMiAtIG4sIG4gPSAtMSA8PCBuLCBpID0gaSB8IG4pLCBFID0gbiBeIC0xLCBuID0gRSArIGEgfCAwLCBpID0gKGkgXiAtMSkgKyB2IHwgMCwgaSA9IG4gPj4+IDAgPCBFID4+PiAwID8gaSArIDEgfCAwIDogaSwgdiA9IG4sIG4gPSBwICYgMzEsIChwICYgNjMpID4+PiAwID49IDMyID8gaSA9IGkgPj4gbiA6IGkgPSAoKDEgPDwgbikgLSAxICYgaSkgPDwgMzIgLSBuIHwgdiA+Pj4gbiwgaSA9IGkgPDwgcCwgKGkgfCAwKSA8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZjIgPSB0ICYgLTEgPDwgcCwgYSA9ICh0IHwgMCkgIT0gKGEgfCAwKSA/IGkgLSBmMiA+PiBwIDogMCwgZVtnICsgMjAgPj4gMl0gPSBhLCBuMiA9IG0gJiAtMSA8PCB5LCBuID0gKGwgfCAwKSAhPSAobSB8IDApID8gcyAtIG4yID4+IHkgOiAwLCBlW2cgKyAxNiA+PiAyXSA9IG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbiB8fCAoZDAobiwgMCwgYSwgMCksICFxMikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjMiA9IFoobiwgYSksIGMyID4+PiAwID49IDEwNzM3NDE4MykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IFooYzIsIDQwKSwgcSA/IChwID0gcCAtIDEgfCAwLCB5ID0geSAtIDEgfCAwLCBpID0gZjIgPj4gMzEsIG4gPSBmMiArIDEgfCAwLCBmMiA9ICgobiA/IGkgOiBpICsgMSB8IDApICYgMSkgPDwgMzEgfCBuID4+PiAxLCBpID0gbjIgPj4gMzEsIG4gPSBuMiArIDEgfCAwLCBuMiA9ICgobiA/IGkgOiBpICsgMSB8IDApICYgMSkgPDwgMzEgfCBuID4+PiAxLCBpID0gMykgOiBpID0gMSwgZVtnICsgMjQgPj4gMl0gPSBpLCBhID0gZyArIDI4IHwgMCwgeDIgPSAoMSA8PCBwKSArIGYyIHwgMCwgejIgPSAoMSA8PCB5KSArIG4yIHwgMCwgbSA9IEEsIG4gPSBBICYgMzEsIChBICYgNjMpID4+PiAwID49IDMyID8gKGkgPSAxIDw8IG4sIEEgPSAwKSA6IChBID0gMSA8PCBuLCBpID0gQSAtIDEgJiAxID4+PiAzMiAtIG4pLCBEMiA9IEEsIG4gPSBpLCBBID0gZVtEICsgMTIgPj4gMl0sIHYgPSBBID4+PiAwIDwgcCA+Pj4gMCA/IEEgOiBwLCBBID0gdiAmIDMxLCAodiAmIDYzKSA+Pj4gMCA+PSAzMiA/IChpID0gLTEgPDwgQSwgQSA9IDApIDogKGkgPSAoMSA8PCBBKSAtIDEgJiAtMSA+Pj4gMzIgLSBBLCBBID0gLTEgPDwgQSwgaSA9IGkgfCBBKSwgTDIgPSBBIF4gLTEsIGUwID0gaSBeIC0xLCBBID0gZVtEICsgOCA+PiAyXSwgRSA9IEEgPj4+IDAgPCB5ID4+PiAwID8gQSA6IHksIEEgPSBFICYgMzEsIChFICYgNjMpID4+PiAwID49IDMyID8gKGkgPSAtMSA8PCBBLCBBID0gMCkgOiAoaSA9ICgxIDw8IEEpIC0gMSAmIC0xID4+PiAzMiAtIEEsIEEgPSAtMSA8PCBBLCBpID0gaSB8IEEpLCBpMCA9IEEgXiAtMSwgcjAgPSBpIF4gLTEsIFkyID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVbbyArIDQgPj4gMl0sIHQgPSBpLCBBID0gaSArIHogfCAwLCBpID0gKGkgPj4gMzEpICsgSiB8IDAsIGkgPSBBID4+PiAwIDwgdCA+Pj4gMCA/IGkgKyAxIHwgMCA6IGksIHQgPSBBLCBBID0gQiAmIDMxLCAoQiAmIDYzKSA+Pj4gMCA+PSAzMiA/IEggPSBpID4+IEEgOiBIID0gKCgxIDw8IEEpIC0gMSAmIGkpIDw8IDMyIC0gQSB8IHQgPj4+IEEsIGkgPSBlW28gPj4gMl0sIHQgPSBpLCBBID0gaSArIHogfCAwLCBpID0gKGkgPj4gMzEpICsgSiB8IDAsIGkgPSBBID4+PiAwIDwgdCA+Pj4gMCA/IGkgKyAxIHwgMCA6IGksIHQgPSBBLCBBID0gQiAmIDMxLCAoQiAmIDYzKSA+Pj4gMCA+PSAzMiA/IHUgPSBpID4+IEEgOiB1ID0gKCgxIDw8IEEpIC0gMSAmIGkpIDw8IDMyIC0gQSB8IHQgPj4+IEEsIEEgPSAwLCBsID0geiwgaCA9IGwsIHQgPSBKLCBzID0gdCwgaSA9IEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBID0gWTIgKyAxIHwgMCwgdCA9IEEgPj4+IDEgfCAwLCBsID0gQiAmIDMxLCAoQiAmIDYzKSA+Pj4gMCA+PSAzMiA/IChpID0gdCA8PCBsLCB0ID0gMCkgOiAoaSA9ICgxIDw8IGwpIC0gMSAmIHQgPj4+IDMyIC0gbCwgdCA9IHQgPDwgbCksIGwgPSB0IF4gLTEsIHQgPSBsICsgRDIgfCAwLCBpID0gKGkgXiAtMSkgKyBuIHwgMCwgaSA9IHQgPj4+IDAgPCBsID4+PiAwID8gaSArIDEgfCAwIDogaSwgaCA9IHQsIGwgPSBlW28gKyA0ID4+IDJdLCB0ID0gbCArIHQgfCAwLCBzID0gaSwgaSA9IGkgKyAobCA+PiAzMSkgfCAwLCBpID0gdCA+Pj4gMCA8IGwgPj4+IDAgPyBpICsgMSB8IDAgOiBpLCBsID0gdCwgdCA9IG0gJiAzMSwgKG0gJiA2MykgPj4+IDAgPj0gMzIgPyBIID0gaSA+PiB0IDogSCA9ICgoMSA8PCB0KSAtIDEgJiBpKSA8PCAzMiAtIHQgfCBsID4+PiB0LCB0ID0gQSAmIDEsIGwgPSBCICYgMzEsIChCICYgNjMpID4+PiAwID49IDMyID8gKGkgPSB0IDw8IGwsIHQgPSAwKSA6IChpID0gKDEgPDwgbCkgLSAxICYgdCA+Pj4gMzIgLSBsLCB0ID0gdCA8PCBsKSwgdCA9IHQgXiAtMSwgbCA9IHQgKyBEMiB8IDAsIGkgPSAoaSBeIC0xKSArIG4gfCAwLCB1ID0gZVtvID4+IDJdLCBjID0gdSArIGwgfCAwLCB0ID0gdCA+Pj4gMCA+IGwgPj4+IDAgPyBpICsgMSB8IDAgOiBpLCBpID0gdCArICh1ID4+IDMxKSB8IDAsIGkgPSB1ID4+PiAwID4gYyA+Pj4gMCA/IGkgKyAxIHwgMCA6IGksIHUgPSBjLCBjID0gbSAmIDMxLCAobSAmIDYzKSA+Pj4gMCA+PSAzMiA/IHUgPSBpID4+IGMgOiB1ID0gKCgxIDw8IGMpIC0gMSAmIGkpIDw8IDMyIC0gYyB8IHUgPj4+IGMsIGkgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBpLCBnMiA9IGVbbyArIDggPj4gMl0sIHcgPSBnMiA+PiAzMSwgdzIgPSBlW28gKyAxMiA+PiAyXSwgZVthICsgNCA+PiAyXSA9IEgsIGVbYSA+PiAyXSA9IHUsIGVbYSArIDE2ID4+IDJdID0gQSwgaSA9ICh3MiA+PiAzMSkgKyBzIHwgMCwgcyA9IGggKyB3MiB8IDAsIGkgPSBzID4+PiAwIDwgdzIgPj4+IDAgPyBpICsgMSB8IDAgOiBpLCBoID0gcywgcyA9IGMgJiAzMSwgKGMgJiA2MykgPj4+IDAgPj0gMzIgPyBzID0gaSA+PiBzIDogcyA9ICgoMSA8PCBzKSAtIDEgJiBpKSA8PCAzMiAtIHMgfCBoID4+PiBzLCBlW2EgKyAxMiA+PiAyXSA9IHMsIGkgPSB0ICsgdyB8IDAsIHQgPSBsICsgZzIgfCAwLCBpID0gdCA+Pj4gMCA8IGcyID4+PiAwID8gaSArIDEgfCAwIDogaSwgbCA9IHQsIHQgPSBjICYgMzEsIChjICYgNjMpID4+PiAwID49IDMyID8gaSA9IGkgPj4gdCA6IGkgPSAoKDEgPDwgdCkgLSAxICYgaSkgPDwgMzIgLSB0IHwgbCA+Pj4gdCwgZVthICsgOCA+PiAyXSA9IGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGY6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChpIHwgMCkgPT0gKHUgfCAwKSB8IChzIHwgMCkgPT0gKEggfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSAwLCAhZVtEICsgMjAgPj4gMl0gfCAhQSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IChBIHwgMCkgPT0gMyA/IDIgOiAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtMiA9IDEsIHQgPSBlW3AyID4+IDJdLCBBID0gKGVbTyArIDI0ID4+IDJdICsgaSB8IDApIC0gdCB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChBIHwgMCkgPj0gMTAyNCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobTIgPSA4OTg4NDY1Njc0MzExNThlMjkzLCBBID4+PiAwIDwgMjA0NykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgPSBBIC0gMTAyMyB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtMiA9IDEgLyAwLCBBID0gKEEgPj4+IDAgPj0gMzA2OSA/IDMwNjkgOiBBKSAtIDIwNDYgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChBIHwgMCkgPiAtMTAyMykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtMiA9IDIwMDQxNjgzNjAwMDg5NzNlLTMwNywgQSA+Pj4gMCA+IDQyOTQ5NjUzMDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQSA9IEEgKyA5NjkgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbTIgPSAwLCBBID0gKEEgPj4+IDAgPD0gNDI5NDk2NDMzNiA/IC0yOTYwIDogQSkgKyAxOTM4IHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgazAgPSArZVtwMiArIDQgPj4gMl0gKiA0ODgyODEyNWUtMTEgKyAxLCBBMCgwLCAwKSwgQTAoMSwgQSArIDEwMjMgPDwgMjApLCBoMCA9IGEsIEMwID0gVyhrMCAqIChtMiAqICtOMCgpKSksIEdbaDAgKyAzMiA+PiAyXSA9IEMwLCBlW2EgKyAyOCA+PiAyXSA9ICh0ICsgZVtEICsgODA0ID4+IDJdIHwgMCkgLSAxLCBBID0gZVthICsgMjAgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoQSB8ICFjMikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEEgPSBVMihqKSwgZVthICsgMjAgPj4gMl0gPSBBLCAhQSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFEoaywgMSwgNDgyMywgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkMihBLCAwLCBqKSwgZVthICsgMjQgPj4gMl0gPSBqOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGogPj4+IDAgPiBkW2EgKyAyNCA+PiAyXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQSA9IG8wKEEsIGopLCAhQSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFEoaywgMSwgNDgyMywgMCksIFIoZVthICsgMjAgPj4gMl0pLCBlW2EgKyAyMCA+PiAyXSA9IDAsIGVbYSArIDI0ID4+IDJdID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbYSArIDIwID4+IDJdID0gQSwgaSA9IEEsIEEgPSBlW2EgKyAyNCA+PiAyXSwgZDIoaSArIEEgfCAwLCAwLCBqIC0gQSB8IDApLCBlW2EgKyAyNCA+PiAyXSA9IGo7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWMyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKEEgPSBlW2EgKyAyMCA+PiAyXSwgcyA9IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IGVbZyArIDE2ID4+IDJdLCBpID0gKHMgPj4+IDApIC8gKHQgPj4+IDApIHwgMCwgdCA9IHMgLSBaKGksIHQpIDw8IHksIGwgPSB0ICsgbjIgfCAwLCBjID0gZVthID4+IDJdLCBjID0gKGwgfCAwKSA+IChjIHwgMCkgPyBsIDogYywgZVtBID4+IDJdID0gYywgaSA9IGkgPDwgcCwgbCA9IGkgKyBmMiB8IDAsIEggPSBlW2EgKyA0ID4+IDJdLCBIID0gKGwgfCAwKSA+IChIIHwgMCkgPyBsIDogSCwgZVtBICsgNCA+PiAyXSA9IEgsIHQgPSB0ICsgejIgfCAwLCBsID0gZVthICsgOCA+PiAyXSwgdCA9ICh0IHwgMCkgPCAobCB8IDApID8gdCA6IGwsIGVbQSArIDggPj4gMl0gPSB0LCBpID0gaSArIHgyIHwgMCwgbCA9IGVbYSArIDEyID4+IDJdLCBsID0gKGkgfCAwKSA8IChsIHwgMCkgPyBpIDogbCwgZVtBICsgMTIgPj4gMl0gPSBsLCBpID0gKHQgPj4gMzEpICsgcjAgfCAwLCB1ID0gdCwgdCA9IHQgKyBpMCB8IDAsIGkgPSB1ID4+PiAwID4gdCA+Pj4gMCA/IGkgKyAxIHwgMCA6IGksIGMgPSBjID4+IEUsIHUgPSB0LCB0ID0gRSAmIDMxLCAoRSAmIDYzKSA+Pj4gMCA+PSAzMiA/IGkgPSBpID4+IHQgOiBpID0gKCgxIDw8IHQpIC0gMSAmIGkpIDw8IDMyIC0gdCB8IHUgPj4+IHQsIHUgPSBpIC0gYyA8PCBFID4+IEUsIGVbQSArIDE2ID4+IDJdID0gdSwgaSA9IChsID4+IDMxKSArIGUwIHwgMCwgdCA9IGwgKyBMMiB8IDAsIGkgPSB0ID4+PiAwIDwgbCA+Pj4gMCA/IGkgKyAxIHwgMCA6IGksIEggPSBIID4+IHYsIGwgPSB0LCB0ID0gdiAmIDMxLCAodiAmIDYzKSA+Pj4gMCA+PSAzMiA/IGkgPSBpID4+IHQgOiBpID0gKCgxIDw8IHQpIC0gMSAmIGkpIDw8IDMyIC0gdCB8IGwgPj4+IHQsIGkgPSBpIC0gSCA8PCB2ID4+IHYsIGVbQSArIDIwID4+IDJdID0gaSwgbCA9IFooaSwgdSksIGQwKGYsIDAsIGwsIDApLCBxMikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRKGssIDEsIDQ5MDQsIDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IFooZiwgbCksIHQgPSBlW0EgKyAyNCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHQgfCAhbCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gVTIoaSksIGVbQSArIDI0ID4+IDJdID0gdCwgIXQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkMih0LCAwLCBpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID4+PiAwIDw9IGRbQSArIDI4ID4+IDJdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IG8wKHQsIGkpLCAhdCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUihlW0EgKyAyNCA+PiAyXSksIGVbQSArIDI0ID4+IDJdID0gMCwgZVtBICsgMjggPj4gMl0gPSAwLCBRKGssIDEsIDQ0MjksIDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtBICsgMjQgPj4gMl0gPSB0LCB1ID0gdCwgdCA9IGVbQSArIDI4ID4+IDJdLCBkMih1ICsgdCB8IDAsIDAsIGkgLSB0IHwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtBICsgMjggPj4gMl0gPSBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVbQSArIDIwID4+IDJdLCB0ID0gZVtBICsgMTYgPj4gMl0sIHUgPSBlW0EgKyAzMiA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IFQ0KHQsIGksIGspOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IFM0KHUsIHQsIGksIGspOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtBICsgMzIgPj4gMl0gPSBpLCBpID0gZVtBICsgMjAgPj4gMl0sIHQgPSBlW0EgKyAxNiA+PiAyXSwgdSA9IGVbQSArIDM2ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gVDQodCwgaSwgayk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gUzQodSwgdCwgaSwgayk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW0EgKyAzNiA+PiAyXSA9IGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZzIgPSBIICsgMSB8IDAsIHcyID0gYyArIDEgfCAwLCB0ID0gMCwgIXIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDID0gZVtBICsgMTYgPj4gMl0sIHUgPSAodCA+Pj4gMCkgLyAoQyA+Pj4gMCkgfCAwLCBpID0gZVtBICsgMjQgPj4gMl0gKyAodCA8PCA2KSB8IDAsIHcgPSBlW2kgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUCA9IGVbaSArIDU2ID4+IDJdLCBoID0gZVtpICsgNDggPj4gMl0sIHQwID0gZVtpICsgNCA+PiAyXSwgUihlW2kgKyA2MCA+PiAyXSksIGVbaSArIDQ4ID4+IDJdID0gMCwgZVtpICsgNTIgPj4gMl0gPSAwLCBlW2kgKyA1NiA+PiAyXSA9IDAsIGVbaSArIDYwID4+IDJdID0gMCwgZVtpICsgNDAgPj4gMl0gPSAwLCBlW2kgKyA0NCA+PiAyXSA9IDAsIGVbaSArIDMyID4+IDJdID0gMCwgZVtpICsgMzYgPj4gMl0gPSAwLCBlW2kgKyAyNCA+PiAyXSA9IDAsIGVbaSArIDI4ID4+IDJdID0gMCwgZVtpICsgMTYgPj4gMl0gPSAwLCBlW2kgKyAyMCA+PiAyXSA9IDAsIGVbaSArIDggPj4gMl0gPSAwLCBlW2kgKyAxMiA+PiAyXSA9IDAsIGVbaSA+PiAyXSA9IHcsIGVbaSArIDQ4ID4+IDJdID0gaCwgaCAmJiBkMih3LCAwLCBaKGgsIDI0KSksIGVbaSArIDU2ID4+IDJdID0gUCwgZVtpICsgNCA+PiAyXSA9IHQwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGggPSBFMigxMCwgMjQpLCBlW2kgPj4gMl0gPSBoLCAhaCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2kgKyA0OCA+PiAyXSA9IDEwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGggPSB0IC0gWih1LCBDKSB8IDAsIHcgPSBoICsgYyA8PCBFLCBDID0gZVtBID4+IDJdLCBlW2kgKyA4ID4+IDJdID0gKHcgfCAwKSA+IChDIHwgMCkgPyB3IDogQywgdyA9IHUgKyBIIDw8IHYsIEMgPSBlW0EgKyA0ID4+IDJdLCBlW2kgKyAxMiA+PiAyXSA9ICh3IHwgMCkgPiAoQyB8IDApID8gdyA6IEMsIGggPSBoICsgdzIgPDwgRSwgdyA9IGVbQSArIDggPj4gMl0sIGVbaSArIDE2ID4+IDJdID0gKGggfCAwKSA8ICh3IHwgMCkgPyBoIDogdywgaCA9IGksIGkgPSB1ICsgZzIgPDwgdiwgdSA9IGVbQSArIDEyID4+IDJdLCBlW2ggKyAyMCA+PiAyXSA9IChpIHwgMCkgPCAodSB8IDApID8gaSA6IHUsIHQgPSB0ICsgMSB8IDAsIChsIHwgMCkgPT0gKHQgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSBlW0EgKyAxNiA+PiAyXSwgdSA9ICh0ID4+PiAwKSAvIChoID4+PiAwKSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSBlW0EgKyAyNCA+PiAyXSArIFoodCwgNTIpIHwgMCwgZVtpICsgNCA+PiAyXSB8fCAodyA9IEUyKDEwMCwgMjQpLCBlW2kgKyA0ID4+IDJdID0gdywgdykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtpICsgOCA+PiAyXSB8fCAodyA9IEUyKDEwMCwgMjQpLCBlW2kgKyA4ID4+IDJdID0gdywgdykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaCA9IHQgLSBaKHUsIGgpIHwgMCwgdyA9IGggKyBjIDw8IEUsIEMgPSBlW0EgPj4gMl0sIHcgPSAodyB8IDApID4gKEMgfCAwKSA/IHcgOiBDLCBlW2kgKyAxMiA+PiAyXSA9IHcsIEMgPSB1ICsgSCA8PCB2LCBQID0gZVtBICsgNCA+PiAyXSwgQyA9IChDIHwgMCkgPiAoUCB8IDApID8gQyA6IFAsIGVbaSArIDE2ID4+IDJdID0gQywgaCA9IGggKyB3MiA8PCBFLCBQID0gZVtBICsgOCA+PiAyXSwgaCA9IChoIHwgMCkgPCAoUCB8IDApID8gaCA6IFAsIGVbaSArIDIwID4+IDJdID0gaCwgdSA9IHUgKyBnMiA8PCB2LCBQID0gZVtBICsgMTIgPj4gMl0sIHUgPSAodSB8IDApIDwgKFAgfCAwKSA/IHUgOiBQLCBlW2kgKyAyNCA+PiAyXSA9IHUsIHUgPSBaKGggLSB3IHwgMCwgdSAtIEMgfCAwKSA8PCAyLCBoID0gdSArIDc0IHwgMCwgaCA+Pj4gMCA+IGRbaSArIDM2ID4+IDJdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodyA9IGVbaSA+PiAyXSwgdyAmJiBSKHcgLSAxIHwgMCksIHUgPSBVMih1ICsgNzUgfCAwKSwgZVtpID4+IDJdID0gdSwgIXUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2kgKyAzNiA+PiAyXSA9IGgsIEZbdSB8IDBdID0gMCwgZVtpID4+IDJdID0gZVtpID4+IDJdICsgMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0ICsgMSB8IDAsIChsIHwgMCkgPT0gKHQgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQSA9IEEgKyA0MCB8IDAsIHMgPSBzICsgMSB8IDAsIChjMiB8IDApID09IChzIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocDIgPSBwMiArIDggfCAwLCBhID0gYSArIDM2IHwgMCwgWTIgPSBZMiArIDEgfCAwLCAhKFkyID4+PiAwIDwgZFtnICsgMjQgPj4gMl0pKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGcgPSBnICsgMTUyIHwgMCwgQSA9IEIsIHEgPSBxICsgMSB8IDAsICEocSA+Pj4gMCA8IGRbbyArIDIwID4+IDJdKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoTyA9IE8gKyA1MiB8IDAsIG8gPSBvICsgNzYgfCAwLCBEID0gRCArIDEwODAgfCAwLCBYMiA9IFgyICsgMSB8IDAsICEoWDIgPj4+IDAgPCBkW1UgKyAxNiA+PiAyXSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVbaSArIDM2ID4+IDJdID0gMCwgMDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBRKGssIDEsIDQ5NTEsIDApOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgUShrLCAxLCA0MjU0LCAwKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gZEEoQSwgaSwgciwgZiwgaywgdCkgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDAsIGYgPSBmIHwgMCwgayA9IGsgfCAwLCB0ID0gdCB8IDA7CiAgICAgICAgICAgICAgdmFyIG4gPSAwLCBsID0gMCwgYSA9IDAsIHUgPSAwLCBvID0gMCwgZyA9IDAsIGggPSAwLCBzID0gMCwgdyA9IDAsIEIgPSAwLCBjID0gMCwgdiA9IDAsIEMgPSAwLCBtID0gMCwgeSA9IDAsIHAgPSAwLCBIID0gMCwgSiA9IDAsIEUgPSAwLCBEID0gMCwgVSA9IDA7CiAgICAgICAgICAgICAgbSA9ICgoZiB8IDApICE9IDApICsgciB8IDAsIEIgPSBtID4+PiAxIHwgMDsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIGlmICgodCB8IDApICE9IDgpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIXIpCiAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgIGlmICghdCkKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgZm9yIChuID0gNyAtIHQgfCAwLCBjID0gKChuID4+PiAwIDw9IDcgPyBuIDogMCkgPDwgMikgKyA0IHwgMCwgdiA9IHQgJiAtNCwgaCA9IHQgJiAzLCBDID0gKHQgPDwgMikgKyBpIHwgMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgIGlmICh3ID0gbyA8PCA1LCBuID0gdyArIGkgfCAwLCB1ID0gKFooaywgbykgPDwgMikgKyBBIHwgMCwgbCA9IDAsIGcgPSAwLCB0ID4+PiAwID49IDQpCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBhID0gbCA8PCAyLCBlW2EgKyBuID4+IDJdID0gZVthICsgdSA+PiAyXSwgcyA9IGEgfCA0LCBlW3MgKyBuID4+IDJdID0gZVt1ICsgcyA+PiAyXSwgYSA9IGEgfCA4LCBlW2EgKyBuID4+IDJdID0gZVthICsgdSA+PiAyXSwgYSA9IGwgfCAzLCBzID0gYSA8PCAyLCBlW3MgKyBuID4+IDJdID0gZVt1ICsgcyA+PiAyXSwgbCA9IGwgKyA0IHwgMCwgZyA9IGcgKyA0IHwgMCwgKHYgfCAwKSAhPSAoZyB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgaWYgKGcgPSAwLCBoKQogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgYSA9IGwgPDwgMiwgZVthICsgbiA+PiAyXSA9IGVbYSArIHUgPj4gMl0sIGEgPSBsLCBsID0gbCArIDEgfCAwLCBnID0gZyArIDEgfCAwLCAoaCB8IDApICE9IChnIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA+Pj4gMCA8PSA2ICYmIGQyKEMgKyB3IHwgMCwgMCwgYyksIG8gPSBvICsgMSB8IDAsIChvIHwgMCkgPT0gKHIgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKCFyKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIGlmICgociB8IDApICE9IDEpCiAgICAgICAgICAgICAgICAgICAgZm9yIChnID0gciAmIC0yOyB1ID0gKFooaywgbCkgPDwgMikgKyBBIHwgMCwgbyA9IGVbdSArIDQgPj4gMl0sIG4gPSAobCA8PCA1KSArIGkgfCAwLCBlW24gPj4gMl0gPSBlW3UgPj4gMl0sIGVbbiArIDQgPj4gMl0gPSBvLCBvID0gZVt1ICsgMjggPj4gMl0sIGVbbiArIDI0ID4+IDJdID0gZVt1ICsgMjQgPj4gMl0sIGVbbiArIDI4ID4+IDJdID0gbywgbyA9IGVbdSArIDIwID4+IDJdLCBlW24gKyAxNiA+PiAyXSA9IGVbdSArIDE2ID4+IDJdLCBlW24gKyAyMCA+PiAyXSA9IG8sIG8gPSBlW3UgKyAxMiA+PiAyXSwgZVtuICsgOCA+PiAyXSA9IGVbdSArIDggPj4gMl0sIGVbbiArIDEyID4+IDJdID0gbywgdSA9IGwgfCAxLCBuID0gKHUgPDwgNSkgKyBpIHwgMCwgdSA9IChaKGssIHUpIDw8IDIpICsgQSB8IDAsIG8gPSBlW3UgKyAyOCA+PiAyXSwgZVtuICsgMjQgPj4gMl0gPSBlW3UgKyAyNCA+PiAyXSwgZVtuICsgMjggPj4gMl0gPSBvLCBvID0gZVt1ICsgMjAgPj4gMl0sIGVbbiArIDE2ID4+IDJdID0gZVt1ICsgMTYgPj4gMl0sIGVbbiArIDIwID4+IDJdID0gbywgbyA9IGVbdSArIDEyID4+IDJdLCBlW24gKyA4ID4+IDJdID0gZVt1ICsgOCA+PiAyXSwgZVtuICsgMTIgPj4gMl0gPSBvLCBvID0gZVt1ICsgNCA+PiAyXSwgZVtuID4+IDJdID0gZVt1ID4+IDJdLCBlW24gKyA0ID4+IDJdID0gbywgbCA9IGwgKyAyIHwgMCwgYSA9IGEgKyAyIHwgMCwgKGcgfCAwKSAhPSAoYSB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgIGlmICghKHIgJiAxKSkKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICBuID0gKGwgPDwgNSkgKyBpIHwgMCwgbCA9IChaKGssIGwpIDw8IDIpICsgQSB8IDAsIGEgPSBlW2wgKyA0ID4+IDJdLCBlW24gPj4gMl0gPSBlW2wgPj4gMl0sIGVbbiArIDQgPj4gMl0gPSBhLCBhID0gZVtsICsgMjggPj4gMl0sIGVbbiArIDI0ID4+IDJdID0gZVtsICsgMjQgPj4gMl0sIGVbbiArIDI4ID4+IDJdID0gYSwgYSA9IGVbbCArIDIwID4+IDJdLCBlW24gKyAxNiA+PiAyXSA9IGVbbCArIDE2ID4+IDJdLCBlW24gKyAyMCA+PiAyXSA9IGEsIGEgPSBlW2wgKyAxMiA+PiAyXSwgZVtuICsgOCA+PiAyXSA9IGVbbCArIDggPj4gMl0sIGVbbiArIDEyID4+IDJdID0gYTsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGQyKGksIDAsIHIgPDwgNSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHUgPSByIC0gQiB8IDA7CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKGYpIHsKICAgICAgICAgICAgICAgICAgaWYgKHIgPj4+IDAgPCAyKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIGlmIChsID0gMCwgbSA+Pj4gMCA+PSA0KSB7CiAgICAgICAgICAgICAgICAgICAgZm9yIChnID0gQiA+Pj4gMCA8PSAyID8gMiA6IEIsIG8gPSBpICsgMjggfCAwLCBoID0gaSArIDI0IHwgMCwgYyA9IGkgKyAyMCB8IDAsIHYgPSBpICsgMTYgfCAwLCBDID0gaSArIDEyIHwgMCwgdyA9IGkgKyA4IHwgMCwgcyA9IGkgKyA0IHwgMCwgbiA9IDE7IGwgPSAobCA8PCA2KSArIGkgfCAwLCBhID0gbiA8PCA2LCBlW2wgKyAzMiA+PiAyXSA9IGVbbCArIDMyID4+IDJdIC0gKGVbYSArIGkgPj4gMl0gKyBlW2wgPj4gMl0gPj4gMSksIGVbbCArIDM2ID4+IDJdID0gZVtsICsgMzYgPj4gMl0gLSAoZVthICsgcyA+PiAyXSArIGVbbCArIDQgPj4gMl0gPj4gMSksIGVbbCArIDQwID4+IDJdID0gZVtsICsgNDAgPj4gMl0gLSAoZVthICsgdyA+PiAyXSArIGVbbCArIDggPj4gMl0gPj4gMSksIGVbbCArIDQ0ID4+IDJdID0gZVtsICsgNDQgPj4gMl0gLSAoZVthICsgQyA+PiAyXSArIGVbbCArIDEyID4+IDJdID4+IDEpLCBlW2wgKyA0OCA+PiAyXSA9IGVbbCArIDQ4ID4+IDJdIC0gKGVbYSArIHYgPj4gMl0gKyBlW2wgKyAxNiA+PiAyXSA+PiAxKSwgZVtsICsgNTIgPj4gMl0gPSBlW2wgKyA1MiA+PiAyXSAtIChlW2EgKyBjID4+IDJdICsgZVtsICsgMjAgPj4gMl0gPj4gMSksIGVbbCArIDU2ID4+IDJdID0gZVtsICsgNTYgPj4gMl0gLSAoZVthICsgaCA+PiAyXSArIGVbbCArIDI0ID4+IDJdID4+IDEpLCBlW2wgKyA2MCA+PiAyXSA9IGVbbCArIDYwID4+IDJdIC0gKGVbYSArIG8gPj4gMl0gKyBlW2wgKyAyOCA+PiAyXSA+PiAxKSwgbCA9IG4sIG4gPSBsICsgMSB8IDAsIChnIHwgMCkgIT0gKG4gfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgIGwgPSBsIDw8IDQ7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKHMgPSByICYgMSwgcyB8fCAobiA9IChsIDw8IDIpICsgaSB8IDAsIGVbbiArIDMyID4+IDJdID0gZVtuICsgMzIgPj4gMl0gLSBlW24gPj4gMl0sIGVbbiArIDM2ID4+IDJdID0gZVtuICsgMzYgPj4gMl0gLSBlW24gKyA0ID4+IDJdLCBlW24gKyA0MCA+PiAyXSA9IGVbbiArIDQwID4+IDJdIC0gZVtuICsgOCA+PiAyXSwgZVtuICsgNDQgPj4gMl0gPSBlW24gKyA0NCA+PiAyXSAtIGVbbiArIDEyID4+IDJdLCBlW24gKyA0OCA+PiAyXSA9IGVbbiArIDQ4ID4+IDJdIC0gZVtuICsgMTYgPj4gMl0sIGVbbiArIDUyID4+IDJdID0gZVtuICsgNTIgPj4gMl0gLSBlW24gKyAyMCA+PiAyXSwgZVtuICsgNTYgPj4gMl0gPSBlW24gKyA1NiA+PiAyXSAtIGVbbiArIDI0ID4+IDJdLCBlW24gKyA2MCA+PiAyXSA9IGVbbiArIDYwID4+IDJdIC0gZVtuICsgMjggPj4gMl0pLCBlW2kgPj4gMl0gPSBlW2kgPj4gMl0gKyAoKGVbaSArIDMyID4+IDJdIDw8IDEpICsgMiA+PiAyKSwgZyA9IGkgKyA0IHwgMCwgZVtnID4+IDJdID0gZVtnID4+IDJdICsgKChlW2kgKyAzNiA+PiAyXSA8PCAxKSArIDIgPj4gMiksIG8gPSBpICsgOCB8IDAsIGVbbyA+PiAyXSA9IGVbbyA+PiAyXSArICgoZVtpICsgNDAgPj4gMl0gPDwgMSkgKyAyID4+IDIpLCBoID0gaSArIDEyIHwgMCwgZVtoID4+IDJdID0gZVtoID4+IDJdICsgKChlW2kgKyA0NCA+PiAyXSA8PCAxKSArIDIgPj4gMiksIGwgPSAxNiwgYyA9IGkgKyAxNiB8IDAsIGVbYyA+PiAyXSA9IGVbYyA+PiAyXSArICgoZVtpICsgNDggPj4gMl0gPDwgMSkgKyAyID4+IDIpLCB2ID0gaSArIDIwIHwgMCwgZVt2ID4+IDJdID0gZVt2ID4+IDJdICsgKChlW2kgKyA1MiA+PiAyXSA8PCAxKSArIDIgPj4gMiksIEMgPSBpICsgMjQgfCAwLCBlW0MgPj4gMl0gPSBlW0MgPj4gMl0gKyAoKGVbaSArIDU2ID4+IDJdIDw8IDEpICsgMiA+PiAyKSwgdyA9IGkgKyAyOCB8IDAsIGVbdyA+PiAyXSA9IGVbdyA+PiAyXSArICgoZVtpICsgNjAgPj4gMl0gPDwgMSkgKyAyID4+IDIpLCB1ID4+PiAwID49IDIpIHsKICAgICAgICAgICAgICAgICAgICBmb3IgKHkgPSBpIC0gNCB8IDAsIHAgPSBpIC0gOCB8IDAsIEggPSBpIC0gMTIgfCAwLCBKID0gaSAtIDE2IHwgMCwgRSA9IGkgLSAyMCB8IDAsIEQgPSBpIC0gMjQgfCAwLCBVID0gaSAtIDI4IHwgMCwgYSA9IDE7IGwgPSBhIDw8IDYsIG4gPSBsICsgaSB8IDAsIGVbbiA+PiAyXSA9IGVbbiA+PiAyXSArICgoZVtuIC0gMzIgPj4gMl0gKyBlW24gKyAzMiA+PiAyXSB8IDApICsgMiA+PiAyKSwgZVtuICsgNCA+PiAyXSA9IGVbbiArIDQgPj4gMl0gKyAoKGVbbCArIFUgPj4gMl0gKyBlW24gKyAzNiA+PiAyXSB8IDApICsgMiA+PiAyKSwgZVtuICsgOCA+PiAyXSA9IGVbbiArIDggPj4gMl0gKyAoKGVbbCArIEQgPj4gMl0gKyBlW24gKyA0MCA+PiAyXSB8IDApICsgMiA+PiAyKSwgZVtuICsgMTIgPj4gMl0gPSBlW24gKyAxMiA+PiAyXSArICgoZVtsICsgRSA+PiAyXSArIGVbbiArIDQ0ID4+IDJdIHwgMCkgKyAyID4+IDIpLCBlW24gKyAxNiA+PiAyXSA9IGVbbiArIDE2ID4+IDJdICsgKChlW2wgKyBKID4+IDJdICsgZVtuICsgNDggPj4gMl0gfCAwKSArIDIgPj4gMiksIGVbbiArIDIwID4+IDJdID0gZVtuICsgMjAgPj4gMl0gKyAoKGVbbCArIEggPj4gMl0gKyBlW24gKyA1MiA+PiAyXSB8IDApICsgMiA+PiAyKSwgZVtuICsgMjQgPj4gMl0gPSBlW24gKyAyNCA+PiAyXSArICgoZVtsICsgcCA+PiAyXSArIGVbbiArIDU2ID4+IDJdIHwgMCkgKyAyID4+IDIpLCBlW24gKyAyOCA+PiAyXSA9IGVbbiArIDI4ID4+IDJdICsgKChlW2wgKyB5ID4+IDJdICsgZVtuICsgNjAgPj4gMl0gfCAwKSArIDIgPj4gMiksIGEgPSBhICsgMSB8IDAsICh1IHwgMCkgIT0gKGEgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgIGwgPSB1IDw8IDQ7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKCFzKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIGwgPSBsIDw8IDIsIG4gPSBsICsgaSB8IDAsIGVbbiA+PiAyXSA9IGVbbiA+PiAyXSArICgoZVtuIC0gMzIgPj4gMl0gPDwgMSkgKyAyID4+IDIpLCBlW24gKyA0ID4+IDJdID0gZVtuICsgNCA+PiAyXSArICgoZVsobCArIGcgfCAwKSAtIDMyID4+IDJdIDw8IDEpICsgMiA+PiAyKSwgZVtuICsgOCA+PiAyXSA9IGVbbiArIDggPj4gMl0gKyAoKGVbKGwgKyBvIHwgMCkgLSAzMiA+PiAyXSA8PCAxKSArIDIgPj4gMiksIGVbbiArIDEyID4+IDJdID0gZVtuICsgMTIgPj4gMl0gKyAoKGVbKGwgKyBoIHwgMCkgLSAzMiA+PiAyXSA8PCAxKSArIDIgPj4gMiksIGVbbiArIDE2ID4+IDJdID0gZVtuICsgMTYgPj4gMl0gKyAoKGVbKGwgKyBjIHwgMCkgLSAzMiA+PiAyXSA8PCAxKSArIDIgPj4gMiksIGVbbiArIDIwID4+IDJdID0gZVtuICsgMjAgPj4gMl0gKyAoKGVbKGwgKyB2IHwgMCkgLSAzMiA+PiAyXSA8PCAxKSArIDIgPj4gMiksIGVbbiArIDI0ID4+IDJdID0gZVtuICsgMjQgPj4gMl0gKyAoKGVbKGwgKyBDIHwgMCkgLSAzMiA+PiAyXSA8PCAxKSArIDIgPj4gMiksIGVbbiArIDI4ID4+IDJdID0gZVtuICsgMjggPj4gMl0gKyAoKGVbKGwgKyB3IHwgMCkgLSAzMiA+PiAyXSA8PCAxKSArIDIgPj4gMik7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoKHIgfCAwKSAhPSAxKSB7CiAgICAgICAgICAgICAgICAgIGlmIChlW2kgPj4gMl0gPSBlW2kgPj4gMl0gLSBlW2kgKyAzMiA+PiAyXSwgZyA9IGkgKyA0IHwgMCwgZVtnID4+IDJdID0gZVtnID4+IDJdIC0gZVtpICsgMzYgPj4gMl0sIG8gPSBpICsgOCB8IDAsIGVbbyA+PiAyXSA9IGVbbyA+PiAyXSAtIGVbaSArIDQwID4+IDJdLCBoID0gaSArIDEyIHwgMCwgZVtoID4+IDJdID0gZVtoID4+IDJdIC0gZVtpICsgNDQgPj4gMl0sIGwgPSAxNiwgYyA9IGkgKyAxNiB8IDAsIGVbYyA+PiAyXSA9IGVbYyA+PiAyXSAtIGVbaSArIDQ4ID4+IDJdLCB2ID0gaSArIDIwIHwgMCwgZVt2ID4+IDJdID0gZVt2ID4+IDJdIC0gZVtpICsgNTIgPj4gMl0sIEMgPSBpICsgMjQgfCAwLCBlW0MgPj4gMl0gPSBlW0MgPj4gMl0gLSBlW2kgKyA1NiA+PiAyXSwgdyA9IGkgKyAyOCB8IDAsIGVbdyA+PiAyXSA9IGVbdyA+PiAyXSAtIGVbaSArIDYwID4+IDJdLCBtID4+PiAwID4gMykgewogICAgICAgICAgICAgICAgICAgIGZvciAocyA9IEIgPj4+IDAgPD0gMiA/IDIgOiBCLCB5ID0gaSAtIDQgfCAwLCBwID0gaSAtIDggfCAwLCBIID0gaSAtIDEyIHwgMCwgSiA9IGkgLSAxNiB8IDAsIEUgPSBpIC0gMjAgfCAwLCBEID0gaSAtIDI0IHwgMCwgVSA9IGkgLSAyOCB8IDAsIGEgPSAxOyBsID0gYSA8PCA2LCBuID0gbCArIGkgfCAwLCBlW24gPj4gMl0gPSBlW24gPj4gMl0gLSAoZVtuIC0gMzIgPj4gMl0gKyBlW24gKyAzMiA+PiAyXSA+PiAxKSwgZVtuICsgNCA+PiAyXSA9IGVbbiArIDQgPj4gMl0gLSAoZVtsICsgVSA+PiAyXSArIGVbbiArIDM2ID4+IDJdID4+IDEpLCBlW24gKyA4ID4+IDJdID0gZVtuICsgOCA+PiAyXSAtIChlW2wgKyBEID4+IDJdICsgZVtuICsgNDAgPj4gMl0gPj4gMSksIGVbbiArIDEyID4+IDJdID0gZVtuICsgMTIgPj4gMl0gLSAoZVtsICsgRSA+PiAyXSArIGVbbiArIDQ0ID4+IDJdID4+IDEpLCBlW24gKyAxNiA+PiAyXSA9IGVbbiArIDE2ID4+IDJdIC0gKGVbbCArIEogPj4gMl0gKyBlW24gKyA0OCA+PiAyXSA+PiAxKSwgZVtuICsgMjAgPj4gMl0gPSBlW24gKyAyMCA+PiAyXSAtIChlW2wgKyBIID4+IDJdICsgZVtuICsgNTIgPj4gMl0gPj4gMSksIGVbbiArIDI0ID4+IDJdID0gZVtuICsgMjQgPj4gMl0gLSAoZVtsICsgcCA+PiAyXSArIGVbbiArIDU2ID4+IDJdID4+IDEpLCBlW24gKyAyOCA+PiAyXSA9IGVbbiArIDI4ID4+IDJdIC0gKGVbbCArIHkgPj4gMl0gKyBlW24gKyA2MCA+PiAyXSA+PiAxKSwgYSA9IGEgKyAxIHwgMCwgKHMgfCAwKSAhPSAoYSB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgbCA9IHMgPDwgNDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAobiA9IDEsIHMgPSByICYgMSwgcyAmJiAoYSA9IGwgPDwgMiwgbCA9IGEgKyBpIHwgMCwgZVtsID4+IDJdID0gZVtsID4+IDJdIC0gZVtsIC0gMzIgPj4gMl0sIGVbbCArIDQgPj4gMl0gPSBlW2wgKyA0ID4+IDJdIC0gZVsoYSArIGcgfCAwKSAtIDMyID4+IDJdLCBlW2wgKyA4ID4+IDJdID0gZVtsICsgOCA+PiAyXSAtIGVbKGEgKyBvIHwgMCkgLSAzMiA+PiAyXSwgZVtsICsgMTIgPj4gMl0gPSBlW2wgKyAxMiA+PiAyXSAtIGVbKGEgKyBoIHwgMCkgLSAzMiA+PiAyXSwgZVtsICsgMTYgPj4gMl0gPSBlW2wgKyAxNiA+PiAyXSAtIGVbKGEgKyBjIHwgMCkgLSAzMiA+PiAyXSwgZVtsICsgMjAgPj4gMl0gPSBlW2wgKyAyMCA+PiAyXSAtIGVbKGEgKyB2IHwgMCkgLSAzMiA+PiAyXSwgZVtsICsgMjQgPj4gMl0gPSBlW2wgKyAyNCA+PiAyXSAtIGVbKGEgKyBDIHwgMCkgLSAzMiA+PiAyXSwgZVtsICsgMjggPj4gMl0gPSBlW2wgKyAyOCA+PiAyXSAtIGVbKGEgKyB3IHwgMCkgLSAzMiA+PiAyXSksIGwgPSAwLCB1ID4+PiAwID49IDIpIHsKICAgICAgICAgICAgICAgICAgICBmb3IgKDsgbCA9IChsIDw8IDYpICsgaSB8IDAsIGEgPSBuIDw8IDYsIGVbbCArIDMyID4+IDJdID0gZVtsICsgMzIgPj4gMl0gKyAoKGVbbCA+PiAyXSArIGVbYSArIGkgPj4gMl0gfCAwKSArIDIgPj4gMiksIGVbbCArIDM2ID4+IDJdID0gZVtsICsgMzYgPj4gMl0gKyAoKGVbbCArIDQgPj4gMl0gKyBlW2EgKyBnID4+IDJdIHwgMCkgKyAyID4+IDIpLCBlW2wgKyA0MCA+PiAyXSA9IGVbbCArIDQwID4+IDJdICsgKChlW2wgKyA4ID4+IDJdICsgZVthICsgbyA+PiAyXSB8IDApICsgMiA+PiAyKSwgZVtsICsgNDQgPj4gMl0gPSBlW2wgKyA0NCA+PiAyXSArICgoZVtsICsgMTIgPj4gMl0gKyBlW2EgKyBoID4+IDJdIHwgMCkgKyAyID4+IDIpLCBlW2wgKyA0OCA+PiAyXSA9IGVbbCArIDQ4ID4+IDJdICsgKChlW2wgKyAxNiA+PiAyXSArIGVbYSArIGMgPj4gMl0gfCAwKSArIDIgPj4gMiksIGVbbCArIDUyID4+IDJdID0gZVtsICsgNTIgPj4gMl0gKyAoKGVbbCArIDIwID4+IDJdICsgZVthICsgdiA+PiAyXSB8IDApICsgMiA+PiAyKSwgZVtsICsgNTYgPj4gMl0gPSBlW2wgKyA1NiA+PiAyXSArICgoZVtsICsgMjQgPj4gMl0gKyBlW2EgKyBDID4+IDJdIHwgMCkgKyAyID4+IDIpLCBlW2wgKyA2MCA+PiAyXSA9IGVbbCArIDYwID4+IDJdICsgKChlW2wgKyAyOCA+PiAyXSArIGVbYSArIHcgPj4gMl0gfCAwKSArIDIgPj4gMiksIGwgPSBuLCBuID0gbCArIDEgfCAwLCAodSB8IDApICE9IChuIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICBsID0gbCA8PCA0OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChzKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIG4gPSAobCA8PCAyKSArIGkgfCAwLCBlW24gKyAzMiA+PiAyXSA9IGVbbiArIDMyID4+IDJdICsgKChlW24gPj4gMl0gPDwgMSkgKyAyID4+IDIpLCBlW24gKyAzNiA+PiAyXSA9IGVbbiArIDM2ID4+IDJdICsgKChlW24gKyA0ID4+IDJdIDw8IDEpICsgMiA+PiAyKSwgZVtuICsgNDAgPj4gMl0gPSBlW24gKyA0MCA+PiAyXSArICgoZVtuICsgOCA+PiAyXSA8PCAxKSArIDIgPj4gMiksIGVbbiArIDQ0ID4+IDJdID0gZVtuICsgNDQgPj4gMl0gKyAoKGVbbiArIDEyID4+IDJdIDw8IDEpICsgMiA+PiAyKSwgZVtuICsgNDggPj4gMl0gPSBlW24gKyA0OCA+PiAyXSArICgoZVtuICsgMTYgPj4gMl0gPDwgMSkgKyAyID4+IDIpLCBlW24gKyA1MiA+PiAyXSA9IGVbbiArIDUyID4+IDJdICsgKChlW24gKyAyMCA+PiAyXSA8PCAxKSArIDIgPj4gMiksIGVbbiArIDU2ID4+IDJdID0gZVtuICsgNTYgPj4gMl0gKyAoKGVbbiArIDI0ID4+IDJdIDw8IDEpICsgMiA+PiAyKSwgZVtuICsgNjAgPj4gMl0gPSBlW24gKyA2MCA+PiAyXSArICgoZVtuICsgMjggPj4gMl0gPDwgMSkgKyAyID4+IDIpOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZVtpID4+IDJdID0gZVtpID4+IDJdIDw8IDEsIGVbaSArIDQgPj4gMl0gPSBlW2kgKyA0ID4+IDJdIDw8IDEsIGVbaSArIDggPj4gMl0gPSBlW2kgKyA4ID4+IDJdIDw8IDEsIGVbaSArIDEyID4+IDJdID0gZVtpICsgMTIgPj4gMl0gPDwgMSwgZVtpICsgMTYgPj4gMl0gPSBlW2kgKyAxNiA+PiAyXSA8PCAxLCBlW2kgKyAyMCA+PiAyXSA9IGVbaSArIDIwID4+IDJdIDw8IDEsIGVbaSArIDI0ID4+IDJdID0gZVtpICsgMjQgPj4gMl0gPDwgMSwgZVtpICsgMjggPj4gMl0gPSBlW2kgKyAyOCA+PiAyXSA8PCAxOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAoKHQgfCAwKSA9PSA4KSB7CiAgICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgICBpZiAobSA+Pj4gMCA8IDIpCiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgIHQgPSBCIC0gMSB8IDAsIGwgPSAoIWYgPDwgNSkgKyBpIHwgMCwgbSA9IEIgJiAzOwogICAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICAgIGlmICghbSkgewogICAgICAgICAgICAgICAgICAgICAgICBhID0gQiwgbiA9IEE7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBmb3IgKG8gPSBrIDw8IDIsIGEgPSBCLCBuID0gQSwgZyA9IDA7IGggPSBlW2wgKyA0ID4+IDJdLCBlW24gPj4gMl0gPSBlW2wgPj4gMl0sIGVbbiArIDQgPj4gMl0gPSBoLCBoID0gZVtsICsgMjggPj4gMl0sIGVbbiArIDI0ID4+IDJdID0gZVtsICsgMjQgPj4gMl0sIGVbbiArIDI4ID4+IDJdID0gaCwgaCA9IGVbbCArIDIwID4+IDJdLCBlW24gKyAxNiA+PiAyXSA9IGVbbCArIDE2ID4+IDJdLCBlW24gKyAyMCA+PiAyXSA9IGgsIGggPSBlW2wgKyAxMiA+PiAyXSwgZVtuICsgOCA+PiAyXSA9IGVbbCArIDggPj4gMl0sIGVbbiArIDEyID4+IDJdID0gaCwgbCA9IGwgLSAtNjQgfCAwLCBhID0gYSAtIDEgfCAwLCBuID0gbiArIG8gfCAwLCBnID0gZyArIDEgfCAwLCAobSB8IDApICE9IChnIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAodCA+Pj4gMCA8IDMpCiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgIGZvciAoZyA9IGsgPDwgMjsgdCA9IGVbbCArIDQgPj4gMl0sIGVbbiA+PiAyXSA9IGVbbCA+PiAyXSwgZVtuICsgNCA+PiAyXSA9IHQsIHQgPSBlW2wgKyAyOCA+PiAyXSwgZVtuICsgMjQgPj4gMl0gPSBlW2wgKyAyNCA+PiAyXSwgZVtuICsgMjggPj4gMl0gPSB0LCB0ID0gZVtsICsgMjAgPj4gMl0sIGVbbiArIDE2ID4+IDJdID0gZVtsICsgMTYgPj4gMl0sIGVbbiArIDIwID4+IDJdID0gdCwgdCA9IGVbbCArIDEyID4+IDJdLCBlW24gKyA4ID4+IDJdID0gZVtsICsgOCA+PiAyXSwgZVtuICsgMTIgPj4gMl0gPSB0LCB0ID0gbiArIGcgfCAwLCBuID0gZVtsICsgOTIgPj4gMl0sIGVbdCArIDI0ID4+IDJdID0gZVtsICsgODggPj4gMl0sIGVbdCArIDI4ID4+IDJdID0gbiwgbiA9IGVbbCArIDg0ID4+IDJdLCBlW3QgKyAxNiA+PiAyXSA9IGVbbCArIDgwID4+IDJdLCBlW3QgKyAyMCA+PiAyXSA9IG4sIG4gPSBlW2wgKyA3NiA+PiAyXSwgZVt0ICsgOCA+PiAyXSA9IGVbbCArIDcyID4+IDJdLCBlW3QgKyAxMiA+PiAyXSA9IG4sIG4gPSBlW2wgKyA2OCA+PiAyXSwgZVt0ID4+IDJdID0gZVtsICsgNjQgPj4gMl0sIGVbdCArIDQgPj4gMl0gPSBuLCBuID0gZVtsICsgMTU2ID4+IDJdLCB0ID0gdCArIGcgfCAwLCBlW3QgKyAyNCA+PiAyXSA9IGVbbCArIDE1MiA+PiAyXSwgZVt0ICsgMjggPj4gMl0gPSBuLCBuID0gZVtsICsgMTQ4ID4+IDJdLCBlW3QgKyAxNiA+PiAyXSA9IGVbbCArIDE0NCA+PiAyXSwgZVt0ICsgMjAgPj4gMl0gPSBuLCBuID0gZVtsICsgMTQwID4+IDJdLCBlW3QgKyA4ID4+IDJdID0gZVtsICsgMTM2ID4+IDJdLCBlW3QgKyAxMiA+PiAyXSA9IG4sIG4gPSBlW2wgKyAxMzIgPj4gMl0sIGVbdCA+PiAyXSA9IGVbbCArIDEyOCA+PiAyXSwgZVt0ICsgNCA+PiAyXSA9IG4sIG4gPSBlW2wgKyAyMjAgPj4gMl0sIHQgPSB0ICsgZyB8IDAsIGVbdCArIDI0ID4+IDJdID0gZVtsICsgMjE2ID4+IDJdLCBlW3QgKyAyOCA+PiAyXSA9IG4sIG4gPSBlW2wgKyAyMTIgPj4gMl0sIGVbdCArIDE2ID4+IDJdID0gZVtsICsgMjA4ID4+IDJdLCBlW3QgKyAyMCA+PiAyXSA9IG4sIG4gPSBlW2wgKyAyMDQgPj4gMl0sIGVbdCArIDggPj4gMl0gPSBlW2wgKyAyMDAgPj4gMl0sIGVbdCArIDEyID4+IDJdID0gbiwgbiA9IGVbbCArIDE5NiA+PiAyXSwgZVt0ID4+IDJdID0gZVtsICsgMTkyID4+IDJdLCBlW3QgKyA0ID4+IDJdID0gbiwgbiA9IHQgKyBnIHwgMCwgbCA9IGwgKyAyNTYgfCAwLCBhID0gYSAtIDQgfCAwLCAhIWE7ICkKICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoIXUpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgaWYgKGwgPSAoKChmIHwgMCkgIT0gMCkgPDwgNSkgKyBpIHwgMCwgbiA9IChaKGssIEIpIDw8IDIpICsgQSB8IDAsIEEgPSB1ICYgMywgQSkKICAgICAgICAgICAgICAgICAgICBmb3IgKGEgPSAwLCBpID0gayA8PCAyOyBmID0gZVtsICsgNCA+PiAyXSwgZVtuID4+IDJdID0gZVtsID4+IDJdLCBlW24gKyA0ID4+IDJdID0gZiwgZiA9IGVbbCArIDI4ID4+IDJdLCBlW24gKyAyNCA+PiAyXSA9IGVbbCArIDI0ID4+IDJdLCBlW24gKyAyOCA+PiAyXSA9IGYsIGYgPSBlW2wgKyAyMCA+PiAyXSwgZVtuICsgMTYgPj4gMl0gPSBlW2wgKyAxNiA+PiAyXSwgZVtuICsgMjAgPj4gMl0gPSBmLCBmID0gZVtsICsgMTIgPj4gMl0sIGVbbiArIDggPj4gMl0gPSBlW2wgKyA4ID4+IDJdLCBlW24gKyAxMiA+PiAyXSA9IGYsIGwgPSBsIC0gLTY0IHwgMCwgdSA9IHUgLSAxIHwgMCwgbiA9IGkgKyBuIHwgMCwgYSA9IGEgKyAxIHwgMCwgKEEgfCAwKSAhPSAoYSB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgIGlmIChCIC0gciA+Pj4gMCA+IDQyOTQ5NjcyOTIpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgZm9yIChpID0gayA8PCAyOyBBID0gZVtsICsgNCA+PiAyXSwgZVtuID4+IDJdID0gZVtsID4+IDJdLCBlW24gKyA0ID4+IDJdID0gQSwgQSA9IGVbbCArIDI4ID4+IDJdLCBlW24gKyAyNCA+PiAyXSA9IGVbbCArIDI0ID4+IDJdLCBlW24gKyAyOCA+PiAyXSA9IEEsIEEgPSBlW2wgKyAyMCA+PiAyXSwgZVtuICsgMTYgPj4gMl0gPSBlW2wgKyAxNiA+PiAyXSwgZVtuICsgMjAgPj4gMl0gPSBBLCBBID0gZVtsICsgMTIgPj4gMl0sIGVbbiArIDggPj4gMl0gPSBlW2wgKyA4ID4+IDJdLCBlW24gKyAxMiA+PiAyXSA9IEEsIHIgPSBlW2wgKyA5MiA+PiAyXSwgQSA9IGkgKyBuIHwgMCwgZVtBICsgMjQgPj4gMl0gPSBlW2wgKyA4OCA+PiAyXSwgZVtBICsgMjggPj4gMl0gPSByLCByID0gZVtsICsgODQgPj4gMl0sIGVbQSArIDE2ID4+IDJdID0gZVtsICsgODAgPj4gMl0sIGVbQSArIDIwID4+IDJdID0gciwgciA9IGVbbCArIDc2ID4+IDJdLCBlW0EgKyA4ID4+IDJdID0gZVtsICsgNzIgPj4gMl0sIGVbQSArIDEyID4+IDJdID0gciwgciA9IGVbbCArIDY4ID4+IDJdLCBlW0EgPj4gMl0gPSBlW2wgKyA2NCA+PiAyXSwgZVtBICsgNCA+PiAyXSA9IHIsIHIgPSBlW2wgKyAxNTYgPj4gMl0sIEEgPSBBICsgaSB8IDAsIGVbQSArIDI0ID4+IDJdID0gZVtsICsgMTUyID4+IDJdLCBlW0EgKyAyOCA+PiAyXSA9IHIsIHIgPSBlW2wgKyAxNDggPj4gMl0sIGVbQSArIDE2ID4+IDJdID0gZVtsICsgMTQ0ID4+IDJdLCBlW0EgKyAyMCA+PiAyXSA9IHIsIHIgPSBlW2wgKyAxNDAgPj4gMl0sIGVbQSArIDggPj4gMl0gPSBlW2wgKyAxMzYgPj4gMl0sIGVbQSArIDEyID4+IDJdID0gciwgciA9IGVbbCArIDEzMiA+PiAyXSwgZVtBID4+IDJdID0gZVtsICsgMTI4ID4+IDJdLCBlW0EgKyA0ID4+IDJdID0gciwgciA9IGVbbCArIDIyMCA+PiAyXSwgQSA9IEEgKyBpIHwgMCwgZVtBICsgMjQgPj4gMl0gPSBlW2wgKyAyMTYgPj4gMl0sIGVbQSArIDI4ID4+IDJdID0gciwgciA9IGVbbCArIDIxMiA+PiAyXSwgZVtBICsgMTYgPj4gMl0gPSBlW2wgKyAyMDggPj4gMl0sIGVbQSArIDIwID4+IDJdID0gciwgciA9IGVbbCArIDIwNCA+PiAyXSwgZVtBICsgOCA+PiAyXSA9IGVbbCArIDIwMCA+PiAyXSwgZVtBICsgMTIgPj4gMl0gPSByLCByID0gZVtsICsgMTk2ID4+IDJdLCBlW0EgPj4gMl0gPSBlW2wgKyAxOTIgPj4gMl0sIGVbQSArIDQgPj4gMl0gPSByLCBuID0gQSArIGkgfCAwLCBsID0gbCArIDI1NiB8IDAsIHUgPSB1IC0gNCB8IDAsICEhdTsgKQogICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIF80KGksIEEsIHUsIEIsIGssICFmLCB0KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gQzQoQSwgaSkgewogICAgICAgICAgICAgIHZhciByID0gMCwgZiA9IDAsIGsgPSAwLCB0ID0gMCwgbiA9IDAsIGwgPSAwLCBhID0gMCwgdSA9IDAsIG8gPSAwLCBnID0gMCwgaCA9IDAsIHMgPSAwLCB3ID0gMCwgQiA9IFcoMCksIGMgPSAwLCB2ID0gMCwgQyA9IFcoMCksIG0gPSAwLCB5ID0gMCwgcCA9IDAsIEggPSBXKDApLCBKID0gVygwKSwgRSA9IFcoMCksIEQgPSAwLCBVID0gVygwKTsKICAgICAgICAgICAgICBvID0gWCAtIDgyNzIgfCAwLCBYID0gbywgZVtvICsgMTYgPj4gMl0gPSAwLCBsID0gZVtlW0EgPj4gMl0gPj4gMl0sIHIgPSBFMigxLCA5NiksIGsgPSAwOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGlmICghcikKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIGVbciArIDc2ID4+IDJdID0gMTsKICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgIGs6CiAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKCgobCB8IDApICE9IDEzNzU2ODY2NTUpIDw8IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW3IgKyA4OCA+PiAyXSA9IDIwNSwgZVtyICsgODQgPj4gMl0gPSAyMDYsIGVbciArIDgwID4+IDJdID0gMjA3LCBlW3IgKyAxNiA+PiAyXSA9IDIwOCwgZVtyICsgNCA+PiAyXSA9IDIwOSwgZVtyICsgMjggPj4gMl0gPSAyMTAsIGVbciArIDI0ID4+IDJdID0gMjExLCBlW3IgKyAyMCA+PiAyXSA9IDIxMiwgZVtyID4+IDJdID0gMjEzLCBlW3IgKyA5MiA+PiAyXSA9IDIxNCwgZVtyICsgNDQgPj4gMl0gPSAyMTUsIGVbciArIDQwID4+IDJdID0gMjE2LCBlW3IgKyAzNiA+PiAyXSA9IDIxNywgZVtyICsgMzIgPj4gMl0gPSAyMTgsIGVbciArIDEyID4+IDJdID0gMjE5LCBlW3IgKyA4ID4+IDJdID0gMjIwLCB0ID0gZzYoKSwgZVtyICsgNDggPj4gMl0gPSB0LCB0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVbciArIDg4ID4+IDJdID0gMjIxLCBlW3IgKyA4NCA+PiAyXSA9IDIyMiwgZVtyICsgODAgPj4gMl0gPSAyMjMsIGVbciArIDE2ID4+IDJdID0gMjI0LCBlW3IgKyA0ID4+IDJdID0gMjI1LCBlW3IgKyA5MiA+PiAyXSA9IDIyNiwgZVtyICsgNDQgPj4gMl0gPSAyMjcsIGVbciArIDQwID4+IDJdID0gMjI4LCBlW3IgKyAzNiA+PiAyXSA9IDIyOSwgZVtyICsgMzIgPj4gMl0gPSAyMzAsIGVbciArIDI4ID4+IDJdID0gMjMxLCBlW3IgKyAyNCA+PiAyXSA9IDIzMiwgZVtyICsgMjAgPj4gMl0gPSAyMzMsIGVbciArIDEyID4+IDJdID0gMjM0LCBlW3IgKyA4ID4+IDJdID0gMjM1LCBlW3IgPj4gMl0gPSAyMzYsIHQgPSBFMigxLCAxMzYpOwogICAgICAgICAgICAgICAgICAgIGs6IHsKICAgICAgICAgICAgICAgICAgICAgIGlmICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBnNigpLCBlW3QgPj4gMl0gPSBsOwogICAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsIHx8IChlW3QgKyAxMDggPj4gMl0gPSAwLCBlW3QgKyAxMTIgPj4gMl0gPSAwLCBGW3QgKyAxMjQgfCAwXSA9IDAsIGVbdCArIDExNiA+PiAyXSA9IDAsIGVbdCArIDEyMCA+PiAyXSA9IDAsIGwgPSBwZSgpLCBlW3QgKyA0ID4+IDJdID0gbCwgIWwpIHx8IChsID0gcGUoKSwgZVt0ICsgOCA+PiAyXSA9IGwsICFsKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBCNih0KTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIHQgPSAwOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoZVtyICsgNDggPj4gMl0gPSB0LCAhdCkKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZVtyICsgNzIgPj4gMl0gPSAxMDcsIGVbciArIDY0ID4+IDJdID0gMTA3LCBlW3IgKyA2MCA+PiAyXSA9IDAsIGVbciArIDUyID4+IDJdID0gMCwgZVtyICsgNTYgPj4gMl0gPSAwLCBlW3IgKyA2OCA+PiAyXSA9IDEwNywgayA9IHI7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBSKHIpLCBrID0gMDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKHQgPSBrLCB0ICYmIChlW3QgKyA2MCA+PiAyXSA9IDAsIGVbdCArIDcyID4+IDJdID0gNTYpLCB0ICYmIChlW3QgKyA1NiA+PiAyXSA9IDAsIGVbdCArIDY4ID4+IDJdID0gNTcpLCB0ICYmIChlW3QgKyA1MiA+PiAyXSA9IDAsIGVbdCArIDY0ID4+IDJdID0gNTgpLCByID0gbyArIDIwIHwgMCwgciAmJiAociA9IGQyKHIsIDAsIDgyNDgpLCBlW3IgKyA4MjQ4ID4+IDJdID0gMCwgZVtyICsgODIwMCA+PiAyXSA9IC0xLCBlW3IgKyA4MjA0ID4+IDJdID0gLTEpLCBlW28gKyAyMCA+PiAyXSA9IGksIGVbbyArIDI0ID4+IDJdID0gZVtBICsgODQgPj4gMl0sIHIgPSBlW0EgPj4gMl0sIGVbbyArIDggPj4gMl0gPSByLCBlW28gKyA0ID4+IDJdID0gciwgZVtvICsgMTIgPj4gMl0gPSBlW0EgKyA0ID4+IDJdIC0gciwgZyA9IEY2KDEpLCBnICYmIChnICYmIChlW2cgKyA0ID4+IDJdID0gMCwgZVtnID4+IDJdID0gbyArIDQpLCByID0gZVtvICsgMTIgPj4gMl0sIGcgJiYgKGVbZyArIDggPj4gMl0gPSByLCBlW2cgKyAxMiA+PiAyXSA9IDApLCAhZyB8ICEoSVtnICsgNjggfCAwXSAmIDIpIHx8IChlW2cgKyAxNiA+PiAyXSA9IDU5KSwgZyAmJiAoZVtnICsgMjQgPj4gMl0gPSA2MCksIGcgJiYgKGVbZyArIDI4ID4+IDJdID0gNjEpKSwgciA9IG8gKyAyMCB8IDAsICEoIXQgfCAhcikpCiAgICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICAgIGlmICghZVt0ICsgNzYgPj4gMl0pIHsKICAgICAgICAgICAgICAgICAgICBRKHQgKyA1MiB8IDAsIDEsIDIwNDM4LCAwKSwgZiA9IDA7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBvMltlW3QgKyAyNCA+PiAyXV0oZVt0ICsgNDggPj4gMl0sIHIpLCBmID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAoIWYpIHsKICAgICAgICAgICAgICAgICAgSXIoMTUwOCksIG1pKGcpLCBLZSh0KTsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGYgPSBvICsgMTYgfCAwLCByID0gMDsKICAgICAgICAgICAgICAgIGk6CiAgICAgICAgICAgICAgICAgIGlmICghZyB8ICF0KQogICAgICAgICAgICAgICAgICAgIGsgPSByOwogICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIWVbdCArIDc2ID4+IDJdKSB7CiAgICAgICAgICAgICAgICAgICAgICBRKHQgKyA1MiB8IDAsIDEsIDIwNTE5LCAwKSwgayA9IDA7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBrID0gbzJbZVt0ID4+IDJdXShnLCBlW3QgKyA0OCA+PiAyXSwgZiwgdCArIDUyIHwgMCkgfCAwOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoIWspIHsKICAgICAgICAgICAgICAgICAgSXIoMTU3MSksIG1pKGcpLCBLZSh0KSwgeTEoZVtvICsgMTYgPj4gMl0pOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGYgPSBlW28gKyAxNiA+PiAyXSwgIWVbdCArIDc2ID4+IDJdIHwgKCF0IHwgIWcpIHx8IChyID0gbzJbZVt0ICsgNCA+PiAyXV0oZVt0ICsgNDggPj4gMl0sIGcsIGYsIHQgKyA1MiB8IDApIHwgMCksICFyKSB7CiAgICAgICAgICAgICAgICAgIElyKDM0NjApLCBLZSh0KSwgbWkoZyksIHkxKGVbbyArIDE2ID4+IDJdKTsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGggPSBlW28gKyAxNiA+PiAyXSwgciA9IGVbaCArIDE2ID4+IDJdOwogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgazogewogICAgICAgICAgICAgICAgICAgICAgaWYgKGYgPSBlW2ggKyAyMCA+PiAyXSwgKGYgfCAwKSAhPSAzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgociB8IDApID09IDMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9IGVbaCArIDI0ID4+IDJdLCBlW3IgPj4gMl0gIT0gZVtyICsgNCA+PiAyXSB8IGVbciArIDUyID4+IDJdID09IDEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICAgIGVbaCArIDIwID4+IDJdID0gMywgWjQoaCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAociA+Pj4gMCA+IDIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlmIChyID4+PiAwIDwgMykKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgIFo0KGgpOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKCEoZVtvICsgODIyNCA+PiAyXSA9PSAxNCB8IChmIHwgMCkgIT0gNSkpIHsKICAgICAgICAgICAgICAgICAgICAgIGsgPSBYIC0gMTYgfCAwLCBYID0gazsKICAgICAgICAgICAgICAgICAgICAgIGs6IHsKICAgICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICAgIEE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkW2ggKyAxNiA+PiAyXSA8IDQgfHwgKHIgPSBlW2ggKyAyNCA+PiAyXSwgZiA9IGVbciA+PiAyXSwgKGYgfCAwKSAhPSBlW3IgKyA1MiA+PiAyXSB8IChmIHwgMCkgIT0gZVtyICsgMTA0ID4+IDJdIHwgKGYgfCAwKSAhPSBlW3IgKyAxNTYgPj4gMl0pIHx8IChmID0gZVtyICsgNCA+PiAyXSwgKGYgfCAwKSAhPSBlW3IgKyA1NiA+PiAyXSB8IChmIHwgMCkgIT0gZVtyICsgMTA4ID4+IDJdKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZiB8IDApID09IGVbciArIDE2MCA+PiAyXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgNCA+PiAyXSA9IDYxOSwgZVtrID4+IDJdID0gMTY0NiwgSTAoZVsxMTg0Nl0sIDE4NDQ3LCBrKTsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBaKGVbciArIDEyID4+IDJdLCBlW3IgKyA4ID4+IDJdKTsKICAgICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IGVbciArIDIwMCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoSCA9IFcoVygxKSAvIFcoKC0xIDw8IGVbciArIDE4MCA+PiAyXSBeIC0xKSA+Pj4gMCkpLCBKID0gVyhXKDEpIC8gVygoLTEgPDwgZVtyICsgMTI4ID4+IDJdIF4gLTEpID4+PiAwKSksIEMgPSBXKFcoMSkgLyBXKCgtMSA8PCBlW3IgKyA3NiA+PiAyXSBeIC0xKSA+Pj4gMCkpLCBVID0gVyhXKDEpIC8gVygoLTEgPDwgZVtyICsgMjQgPj4gMl0gXiAtMSkgPj4+IDApKSwgbCA9IGVbciArIDIwMCA+PiAyXSwgbSA9IGVbciArIDE0OCA+PiAyXSwgbiA9IGVbciArIDk2ID4+IDJdLCBwID0gZVtyICsgNDQgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gYSA8PCAyLCBzID0gZiArIHAgfCAwLCBCID0gVyhXKDEpIC0gVyhIICogVyhlW2YgKyBsID4+IDJdKSkpLCBFID0gVyhXKFcoVygxKSAtIFcoVSAqIFcoZVtzID4+IDJdKSkpICogVygyNTUpKSAqIEIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgQTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVyhSMihFKSkgPCBXKDIxNDc0ODM2NDgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdyA9IH5+RTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcgPSAtMjE0NzQ4MzY0ODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBmICsgbSB8IDAsIHkgPSBlW3IgPj4gMl0sIGYgPSBmICsgbiB8IDAsIHYgPSBlW2YgPj4gMl0sIGVbcyA+PiAyXSA9IHcsIEUgPSBXKFcoVyhXKDEpIC0gVyhDICogVyh2IHwgMCkpKSAqIFcoMjU1KSkgKiBCKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFcoUjIoRSkpIDwgVygyMTQ3NDgzNjQ4KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcgPSB+fkU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ID0gLTIxNDc0ODM2NDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2YgPj4gMl0gPSB3LCBCID0gVyhXKFcoVygxKSAtIFcoSiAqIFcoeSB8IDApKSkgKiBXKDI1NSkpICogQik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChXKFIyKEIpKSA8IFcoMjE0NzQ4MzY0OCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gfn5COwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IC0yMTQ3NDgzNjQ4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbciA+PiAyXSA9IGYsIGEgPSBhICsgMSB8IDAsIChjIHwgMCkgPT0gKGEgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSKGwpLCByID0gZVtoICsgMjQgPj4gMl0sIGVbciArIDEyOCA+PiAyXSA9IDgsIGVbciArIDc2ID4+IDJdID0gOCwgZVtyICsgMjQgPj4gMl0gPSA4LCBlW3IgKyAyMDAgPj4gMl0gPSAwLCBlW2ggKyAyMCA+PiAyXSA9IDEsIHIgPSBlW2ggKyAxNiA+PiAyXSAtIDEgfCAwLCBlW2ggKyAxNiA+PiAyXSA9IHIsIHIgPj4+IDAgPCA0KQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoYSA9IDM7IHIgPSBlW2ggKyAyNCA+PiAyXSArIFooYSwgNTIpIHwgMCwgZVtyICsgNDggPj4gMl0gPSBlW3IgKyAxMDAgPj4gMl0sIGYgPSBlW3IgKyA5NiA+PiAyXSwgZVtyICsgNDAgPj4gMl0gPSBlW3IgKyA5MiA+PiAyXSwgZVtyICsgNDQgPj4gMl0gPSBmLCBmID0gZVtyICsgODggPj4gMl0sIGVbciArIDMyID4+IDJdID0gZVtyICsgODQgPj4gMl0sIGVbciArIDM2ID4+IDJdID0gZiwgZiA9IGVbciArIDgwID4+IDJdLCBlW3IgKyAyNCA+PiAyXSA9IGVbciArIDc2ID4+IDJdLCBlW3IgKyAyOCA+PiAyXSA9IGYsIGYgPSBlW3IgKyA3MiA+PiAyXSwgZVtyICsgMTYgPj4gMl0gPSBlW3IgKyA2OCA+PiAyXSwgZVtyICsgMjAgPj4gMl0gPSBmLCBmID0gZVtyICsgNjQgPj4gMl0sIGVbciArIDggPj4gMl0gPSBlW3IgKyA2MCA+PiAyXSwgZVtyICsgMTIgPj4gMl0gPSBmLCBmID0gZVtyICsgNTYgPj4gMl0sIGVbciA+PiAyXSA9IGVbciArIDUyID4+IDJdLCBlW3IgKyA0ID4+IDJdID0gZiwgYSA9IGEgKyAxIHwgMCwgYSA+Pj4gMCA8IGRbaCArIDE2ID4+IDJdOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgWCA9IGsgKyAxNiB8IDA7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoKGYgfCAwKSAhPSA0KQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICB3ID0gWCAtIDE2IHwgMCwgWCA9IHc7CiAgICAgICAgICAgICAgICAgICAgazogewogICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICBBOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRbaCArIDE2ID4+IDJdIDwgMyB8fCAoZiA9IGVbaCArIDI0ID4+IDJdLCByID0gZVtmID4+IDJdLCAociB8IDApICE9IGVbZiArIDUyID4+IDJdIHwgKHIgfCAwKSAhPSBlW2YgKyAxMDQgPj4gMl0pIHx8IChyID0gZVtmICsgNCA+PiAyXSwgKHIgfCAwKSAhPSBlW2YgKyA1NiA+PiAyXSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgociB8IDApID09IGVbZiArIDEwOCA+PiAyXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZVt3ICsgNCA+PiAyXSA9IDY4MCwgZVt3ID4+IDJdID0gMTY0NiwgSTAoZVsxMTg0Nl0sIDE4NDg5LCB3KTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlmIChjID0gWihlW2YgKyAxMiA+PiAyXSwgZVtmICsgOCA+PiAyXSksIGMpCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobCA9IGVbZiArIDI0ID4+IDJdLCByID0gLTEgPDwgbCBeIC0xLCBsID0gMSA8PCBsIC0gMSwgbSA9IGVbZiArIDEzNiA+PiAyXSA/IDAgOiBsLCBuID0gZVtmICsgODQgPj4gMl0gPyAwIDogbCwgcCA9IGVbZiArIDE0OCA+PiAyXSwgcyA9IGVbZiArIDk2ID4+IDJdLCB5ID0gZVtmICsgNDQgPj4gMl0sIGYgPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBmIDw8IDIsIGEgPSBsICsgcCB8IDAsIEIgPSBXKGVbYSA+PiAyXSAtIG0gfCAwKSwgayA9IGwgKyBzIHwgMCwgSCA9IFcoZVtrID4+IDJdIC0gbiB8IDApLCB2ID0gbCArIHkgfCAwLCBKID0gVyhlW3YgPj4gMl0pLCBDID0gVyhXKFcoQiAqIFcoMS40MDE5OTAwNTYwMzc5MDI4KSkgKyBXKFcoSCAqIFcoLTM2ODAwMDAwMDg4OTg3ODdlLTIwKSkgKyBKKSkgKyBXKDAuNSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgIGY6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChXKFIyKEMpKSA8IFcoMjE0NzQ4MzY0OCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IH5+QzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSAtMjE0NzQ4MzY0ODsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgZVt2ID4+IDJdID0gKHIgfCAwKSA8IChsIHwgMCkgPyByIDogKGwgfCAwKSA+IDAgPyBsIDogMCwgQyA9IFcoVyhXKEIgKiBXKC0wLjcxNDExMjgxODI0MTExOTQpKSArIFcoVyhKICogVygxLjAwMDMwMDA0OTc4MTc5OTMpKSArIFcoSCAqIFcoLTAuMzQ0MTI1MDAyNjIyNjA0MzcpKSkpICsgVygwLjUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVyhSMihDKSkgPCBXKDIxNDc0ODM2NDgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSB+fkM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gLTIxNDc0ODM2NDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGVbayA+PiAyXSA9IChyIHwgMCkgPCAobCB8IDApID8gciA6IChsIHwgMCkgPiAwID8gbCA6IDAsIEIgPSBXKFcoVyhCICogVygtNzk5OTk5OTk3OTgwMTk0MmUtMjEpKSArIFcoVyhKICogVygwLjk5OTgyMjk3NDIwNTAxNzEpKSArIFcoSCAqIFcoMS43NzIwNDAwMDk0OTg1OTYyKSkpKSArIFcoMC41KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFcoUjIoQikpIDwgVygyMTQ3NDgzNjQ4KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gfn5COwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IC0yMTQ3NDgzNjQ4OwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVthID4+IDJdID0gKHIgfCAwKSA8IChsIHwgMCkgPyByIDogKGwgfCAwKSA+IDAgPyBsIDogMCwgZiA9IGYgKyAxIHwgMCwgKGMgfCAwKSA9PSAoZiB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGVbaCArIDIwID4+IDJdID0gMTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgWCA9IHcgKyAxNiB8IDA7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlW2ggKyAyMCA+PiAyXSA9IDI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByID0gZVtvICsgMTYgPj4gMl0sIHUyW0EgKyAyNCA+PiAxXSA9IGVbciArIDggPj4gMl0sIHUyW0EgKyAyNiA+PiAxXSA9IGVbciArIDEyID4+IDJdLCBGW0EgKyAyOSB8IDBdID0gZVtyICsgMTYgPj4gMl0sIGEgPSAwLCBmID0gZVtyICsgMjQgPj4gMl0sIEZbQSArIDMwIHwgMF0gPSBlW2YgKyAzMiA+PiAyXSAhPSAwLCBGW0EgKyAyOCB8IDBdID0gZVtmICsgMjQgPj4gMl0sIGVbQSArIDgwID4+IDJdID0gZVtyICsgMjAgPj4gMl0sIGVbQSArIDQ0ID4+IDJdID0gZVtyID4+IDJdLCBlW0EgKyA0OCA+PiAyXSA9IGVbciArIDQgPj4gMl0sIHQgPyByID0gbzJbZVt0ICsgODQgPj4gMl1dKGVbdCArIDQ4ID4+IDJdKSB8IDAgOiByID0gMCwgZVtBICsgNzYgPj4gMl0gPSBlW3IgKyA0MCA+PiAyXSwgZVtBICsgNDAgPj4gMl0gPSBlW3IgKyAzNiA+PiAyXSwgZiA9IGVbciArIDQ4ID4+IDJdLCBGW0EgKyAzNiB8IDBdID0gZVtmICsgMjQgPj4gMl0gPT0gMSwgZVtBICsgNjggPj4gMl0gPSAxIDw8IGVbZiArIDEyID4+IDJdLCBlW0EgKyA3MiA+PiAyXSA9IDEgPDwgZVtmICsgMTYgPj4gMl0sIGVbQSArIDYwID4+IDJdID0gZVtyID4+IDJdLCBlW0EgKyA2NCA+PiAyXSA9IGVbciArIDQgPj4gMl0sIGVbQSArIDUyID4+IDJdID0gZVtyICsgOCA+PiAyXSwgZVtBICsgNTYgPj4gMl0gPSBlW3IgKyAxMiA+PiAyXSwgZVtBICsgMzIgPj4gMl0gPSBlW2YgKyA4ID4+IDJdIC0gMSwgbCA9IEcyW0EgKyAyNiA+PiAxXSwgZiA9IEcyW0EgKyAyNCA+PiAxXTsKICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgaWYgKCFpKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIGsgPSBpICYgMzsKICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgIGlmICghaykgewogICAgICAgICAgICAgICAgICAgICAgciA9IGk7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBmb3IgKHIgPSBpOyByID0gciAtIDEgfCAwLCBsID0gbCArIDEgPj4+IDEgfCAwLCBmID0gZiArIDEgPj4+IDEgfCAwLCBhID0gYSArIDEgfCAwLCAoayB8IDApICE9IChhIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoaSA+Pj4gMCA8IDQpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgZm9yICg7IGwgPSAoKChsICsgMSA+Pj4gMSB8IDApICsgMSA+Pj4gMSB8IDApICsgMSA+Pj4gMSB8IDApICsgMSA+Pj4gMSB8IDAsIGYgPSAoKChmICsgMSA+Pj4gMSB8IDApICsgMSA+Pj4gMSB8IDApICsgMSA+Pj4gMSB8IDApICsgMSA+Pj4gMSB8IDAsIHIgPSByIC0gNCB8IDAsICEhcjsgKQogICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGggPSBBICsgMTIgfCAwLCBwID0gSVtBICsgMjggfCAwXSArIDcgPj4+IDMgfCAwLCBpID0gWihwLCBaKElbQSArIDI5IHwgMF0sIFooZiwgbCkpKSwgYSA9IGVbQSArIDEyID4+IDJdLCByID0gZVtBICsgMTYgPj4gMl0gLSBhIHwgMDsKICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgaWYgKGkgPj4+IDAgPiByID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgVGUoaCwgaSAtIHIgfCAwKTsKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChpID4+PiAwID49IHIgPj4+IDApCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgZVtBICsgMTYgPj4gMl0gPSBpICsgYTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChsKQogICAgICAgICAgICAgICAgICBmb3IgKHcgPSBmICYgLTIsIGMgPSBmICYgMSwgbSA9IGYgLSAxIHwgMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICBhID0gSVtBICsgMjkgfCAwXSwgaSA9IFooZiwgRCksIHIgPSBaKGEsIFooaSwgcCkpOwogICAgICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgICAgIGlmICgoYSB8IDApID09IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEgPSBlW2VbZVtvICsgMTYgPj4gMl0gKyAyNCA+PiAyXSArIDQ0ID4+IDJdICsgKGkgPDwgMikgfCAwLCBJW0EgKyAyOCB8IDBdIDw9IDgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWYpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrID0gciArIGVbaCA+PiAyXSB8IDAsIHIgPSAwLCBpID0gMCwgbSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBuID0gZVthICsgKHIgPDwgMikgPj4gMl0sIG4gPSAobiB8IDApID49IDI1NSA/IDI1NSA6IG4sIEZbciArIGsgfCAwXSA9IChuIHwgMCkgPiAwID8gbiA6IDAsIHMgPSByIHwgMSwgbiA9IGVbYSArIChzIDw8IDIpID4+IDJdLCBuID0gKG4gfCAwKSA+PSAyNTUgPyAyNTUgOiBuLCBGW2sgKyBzIHwgMF0gPSAobiB8IDApID4gMCA/IG4gOiAwLCByID0gciArIDIgfCAwLCBpID0gaSArIDIgfCAwLCAodyB8IDApICE9IChpIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYykKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVbYSArIChyIDw8IDIpID4+IDJdLCBpID0gKGkgfCAwKSA+PSAyNTUgPyAyNTUgOiBpLCBGW3IgKyBrIHwgMF0gPSAoaSB8IDApID4gMCA/IGkgOiAwOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPSByICsgZVtBICsgMTIgPj4gMl0gfCAwLCBJW0EgKyAzMCB8IDBdID09IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWYpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0gMCwgaSA9IDAsIG0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgbiA9IGVbYSArIChyIDw8IDIpID4+IDJdLCBuID0gKG4gfCAwKSA+PSAzMjc2NyA/IDMyNzY3IDogbiwgdTJbayArIChyIDw8IDEpID4+IDFdID0gKG4gfCAwKSA8PSAtMzI3NjggPyAtMzI3NjggOiBuLCBzID0gciB8IDEsIG4gPSBlW2EgKyAocyA8PCAyKSA+PiAyXSwgbiA9IChuIHwgMCkgPj0gMzI3NjcgPyAzMjc2NyA6IG4sIHUyW2sgKyAocyA8PCAxKSA+PiAxXSA9IChuIHwgMCkgPD0gLTMyNzY4ID8gLTMyNzY4IDogbiwgciA9IHIgKyAyIHwgMCwgaSA9IGkgKyAyIHwgMCwgKHcgfCAwKSAhPSAoaSB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlW2EgKyAociA8PCAyKSA+PiAyXSwgaSA9IChpIHwgMCkgPj0gMzI3NjcgPyAzMjc2NyA6IGksIHUyW2sgKyAociA8PCAxKSA+PiAxXSA9IChpIHwgMCkgPD0gLTMyNzY4ID8gLTMyNzY4IDogaTsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZikKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9IDAsIGkgPSAwLCBtKQogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBuID0gZVthICsgKHIgPDwgMikgPj4gMl0sIG4gPSAobiB8IDApID49IDY1NTM1ID8gNjU1MzUgOiBuLCB1MltrICsgKHIgPDwgMSkgPj4gMV0gPSAobiB8IDApID4gMCA/IG4gOiAwLCBzID0gciB8IDEsIG4gPSBlW2EgKyAocyA8PCAyKSA+PiAyXSwgbiA9IChuIHwgMCkgPj0gNjU1MzUgPyA2NTUzNSA6IG4sIHUyW2sgKyAocyA8PCAxKSA+PiAxXSA9IChuIHwgMCkgPiAwID8gbiA6IDAsIHIgPSByICsgMiB8IDAsIGkgPSBpICsgMiB8IDAsICh3IHwgMCkgIT0gKGkgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVbYSArIChyIDw8IDIpID4+IDJdLCBpID0gKGkgfCAwKSA+PSA2NTUzNSA/IDY1NTM1IDogaSwgdTJbayArIChyIDw8IDEpID4+IDFdID0gKGkgfCAwKSA+IDAgPyBpIDogMDsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlmIChJW0EgKyAyOCB8IDBdIDw9IDgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmKQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobiA9IHIgKyBlW2ggPj4gMl0gfCAwLCByID0gMDsgYSA9IG4gKyBaKHIsIDMpIHwgMCwgayA9IGkgKyByIDw8IDIsIEZbYSB8IDBdID0gZVtrICsgZVtlW2VbbyArIDE2ID4+IDJdICsgMjQgPj4gMl0gKyA0NCA+PiAyXSA+PiAyXSwgRlthICsgMSB8IDBdID0gZVtrICsgZVtlW2VbbyArIDE2ID4+IDJdICsgMjQgPj4gMl0gKyA5NiA+PiAyXSA+PiAyXSwgRlthICsgMiB8IDBdID0gZVtrICsgZVtlW2VbbyArIDE2ID4+IDJdICsgMjQgPj4gMl0gKyAxNDggPj4gMl0gPj4gMl0sIHIgPSByICsgMSB8IDAsIChmIHwgMCkgIT0gKHIgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlmIChhID0gciArIGVbQSArIDEyID4+IDJdIHwgMCwgSVtBICsgMzAgfCAwXSA9PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZikKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHIgPSBlW2VbbyArIDE2ID4+IDJdICsgMjQgPj4gMl0sIHMgPSBlW3IgKyAxNDggPj4gMl0sIHkgPSBlW3IgKyA5NiA+PiAyXSwgdiA9IGVbciArIDQ0ID4+IDJdLCByID0gMDsgayA9IGEgKyBaKHIsIDYpIHwgMCwgbiA9IGkgKyByIDw8IDIsIHUgPSBlW24gKyB2ID4+IDJdLCB1ID0gKHUgfCAwKSA+PSAzMjc2NyA/IDMyNzY3IDogdSwgdTJbayA+PiAxXSA9ICh1IHwgMCkgPD0gLTMyNzY4ID8gLTMyNzY4IDogdSwgdSA9IGVbbiArIHkgPj4gMl0sIHUgPSAodSB8IDApID49IDMyNzY3ID8gMzI3NjcgOiB1LCB1MltrICsgMiA+PiAxXSA9ICh1IHwgMCkgPD0gLTMyNzY4ID8gLTMyNzY4IDogdSwgdSA9IGssIGsgPSBlW24gKyBzID4+IDJdLCBrID0gKGsgfCAwKSA+PSAzMjc2NyA/IDMyNzY3IDogaywgdTJbdSArIDQgPj4gMV0gPSAoayB8IDApIDw9IC0zMjc2OCA/IC0zMjc2OCA6IGssIHIgPSByICsgMSB8IDAsIChmIHwgMCkgIT0gKHIgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlmICghZikKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgIGZvciAociA9IGVbZVtvICsgMTYgPj4gMl0gKyAyNCA+PiAyXSwgcyA9IGVbciArIDE0OCA+PiAyXSwgeSA9IGVbciArIDk2ID4+IDJdLCB2ID0gZVtyICsgNDQgPj4gMl0sIHIgPSAwOyBrID0gYSArIFoociwgNikgfCAwLCBuID0gaSArIHIgPDwgMiwgdSA9IGVbbiArIHYgPj4gMl0sIHUgPSAodSB8IDApID49IDY1NTM1ID8gNjU1MzUgOiB1LCB1MltrID4+IDFdID0gKHUgfCAwKSA+IDAgPyB1IDogMCwgdSA9IGVbbiArIHkgPj4gMl0sIHUgPSAodSB8IDApID49IDY1NTM1ID8gNjU1MzUgOiB1LCB1MltrICsgMiA+PiAxXSA9ICh1IHwgMCkgPiAwID8gdSA6IDAsIHUgPSBrLCBrID0gZVtuICsgcyA+PiAyXSwgayA9IChrIHwgMCkgPj0gNjU1MzUgPyA2NTUzNSA6IGssIHUyW3UgKyA0ID4+IDFdID0gKGsgfCAwKSA+IDAgPyBrIDogMCwgciA9IHIgKyAxIHwgMCwgKGYgfCAwKSAhPSAociB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKEQgPSBEICsgMSB8IDAsIChEIHwgMCkgPT0gKGwgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBtaShnKSwgS2UodCksIHkxKGVbbyArIDE2ID4+IDJdKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgWCA9IG8gKyA4MjcyIHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBDZShBLCBpLCByLCBmLCBrLCB0LCBuLCBsLCBhLCB1LCBvKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDAsIHIgPSByIHwgMCwgZiA9IGYgfCAwLCBrID0gayB8IDAsIHQgPSB0IHwgMCwgbiA9IG4gfCAwLCBsID0gbCB8IDAsIGEgPSBhIHwgMCwgdSA9IHUgfCAwLCBvID0gbyB8IDA7CiAgICAgICAgICAgICAgdmFyIGcgPSAwLCBoID0gMCwgcyA9IDAsIHcgPSAwLCBCID0gMCwgYyA9IDAsIHYgPSAwLCBDID0gMCwgbSA9IDAsIHkgPSAwLCBwID0gMCwgSCA9IDAsIEogPSBXKDApLCBFID0gMCwgRCA9IDAsIFUgPSAwLCBQID0gMCwgeCA9IDAsIHogPSAwLCBqID0gMDsKICAgICAgICAgICAgICBCID0gWCAtIDgwIHwgMCwgWCA9IEIsIGVbQiArIDQwID4+IDJdID0gNjU0MjQsIG0gPSBaKGVbQSArIDEwOCA+PiAyXSwgZVtBICsgMTA0ID4+IDJdKTsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICBoID0gZVtBICsgOCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICBrOiB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoKGggfCAwKSAhPSA4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1ID0gMCwgKGggfCAwKSAhPSAyNTYpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgZVtCICsgNDAgPj4gMl0gPSA2NTQ5NzsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlmIChGW0EgKyA2OCB8IDBdICYgMSkKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgIFUgPSBtICYgLTIsIFAgPSBtICYgMSwgeCA9IEIgKyA3NyB8IDAsIHogPSBCICsgNzYgfCAwLCBqID0gQiArIDcyIHwgMCwgcyA9IDY1NDI0OwogICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICBBOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgbDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHMgfCAwKSA9PSA2NTQyNykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnID0gZVt1ICsgMTIgPj4gMl0sIHcgPSBnLCBoID0gZVt1ICsgOCA+PiAyXSwgZyB8IGggPyAocyA9IGVbdSArIDU2ID4+IDJdLCBnID0gaCAtIHMgfCAwLCBoID0gdyAtIChlW3UgKyA2MCA+PiAyXSArIChoID4+PiAwIDwgcyA+Pj4gMCkgfCAwKSB8IDApIDogKGcgPSAwLCBoID0gMCksICEoZyB8IGgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtBICsgOCA+PiAyXSA9IDY0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChpMSh1LCBlW0EgKyAxNiA+PiAyXSwgMiwgbykgfCAwKSAhPSAyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUShvLCAxLCA0MzUyLCAwKSwgdSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaDIoZVtBICsgMTYgPj4gMl0sIEIgKyAzNiB8IDAsIDIpLCBzID0gZVtCICsgMzYgPj4gMl0sIHMgPj4+IDAgPD0gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFEobywgMSwgOTk4OSwgMCksIHUgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW0IgKyA0MCA+PiAyXSA9PSAzMjg5NikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGcgPSBlW3UgKyAxMiA+PiAyXSwgdyA9IGcsIGggPSBlW3UgKyA4ID4+IDJdLCBnIHwgaCA/IChzID0gZVt1ICsgNTYgPj4gMl0sIGcgPSBoIC0gcyB8IDAsIGggPSB3IC0gKGVbdSArIDYwID4+IDJdICsgKGggPj4+IDAgPCBzID4+PiAwKSB8IDApIHwgMCkgOiAoZyA9IDAsIGggPSAwKSwgIShnIHwgaCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzID0gZVtCICsgMzYgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaCA9IGVbQSArIDggPj4gMl0sIGggJiAxNiAmJiAoZVtBICsgMjQgPj4gMl0gPSAoZVtBICsgMjQgPj4gMl0gLSBzIHwgMCkgLSAyKSwgdyA9IHMgLSAyIHwgMCwgZVtCICsgMzYgPj4gMl0gPSB3LCBnID0gMzEzNDQsIGMgPSBlW0IgKyA0MCA+PiAyXTsgcyA9IGcsIHYgPSBlW2cgPj4gMl0sICEhKHYgJiYgKGcgPSBnICsgMTIgfCAwLCAoYyB8IDApICE9ICh2IHwgMCkpKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGggJiBlW3MgKyA0ID4+IDJdKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUShvLCAxLCA4ODk4LCAwKSwgdSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZFtBICsgMjAgPj4gMl0gPj0gdyA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gZVtBICsgMTYgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaCA9IGVbdSArIDEyID4+IDJdLCBjID0gaCwgZyA9IGVbdSArIDggPj4gMl0sIGggfCBnID8gKEMgPSBlW3UgKyA1NiA+PiAyXSwgaCA9IGcgLSBDIHwgMCwgZyA9IGMgLSAoZVt1ICsgNjAgPj4gMl0gKyAoZyA+Pj4gMCA8IEMgPj4+IDApIHwgMCkgfCAwKSA6IChoID0gMCwgZyA9IDApLCAoZyB8IDApIDwgMCA/IGcgPSAxIDogZyA9IGggPj4+IDAgPCB3ID4+PiAwICYgKGcgfCAwKSA8PSAwLCBnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFEobywgMSwgOTMxMywgMCksIHUgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGcgPSBvMChlW0EgKyAxNiA+PiAyXSwgZVtCICsgMzYgPj4gMl0pLCAhZykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSKGVbQSArIDE2ID4+IDJdKSwgZVtBICsgMTYgPj4gMl0gPSAwLCBlW0EgKyAyMCA+PiAyXSA9IDAsIFEobywgMSwgODQ3NCwgMCksIHUgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtBICsgMTYgPj4gMl0gPSBnLCB3ID0gZVtCICsgMzYgPj4gMl0sIGVbQSArIDIwID4+IDJdID0gdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGggPSBpMSh1LCBnLCB3LCBvKSwgKGggfCAwKSAhPSBlW0IgKyAzNiA+PiAyXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUShvLCAxLCA0MzUyLCAwKSwgdSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZyA9IGVbcyArIDggPj4gMl0sICFnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRKG8sIDEsIDIyNzg0LCAwKSwgdSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShvMltnIHwgMF0oQSwgZVtBICsgMTYgPj4gMl0sIGgsIG8pIHwgMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbQiArIDMyID4+IDJdID0gZVtCICsgNDAgPj4gMl0sIFEobywgMSwgMjUzMTQsIEIgKyAzMiB8IDApLCB1ID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnID0gZVt1ICsgNTYgPj4gMl0sIEMgPSBlW0IgKyAzNiA+PiAyXSwgSCA9IGVbQSArIDIwMCA+PiAyXSwgdyA9IGVbSCArIDQwID4+IDJdLCBFID0gZVtBICsgMjA0ID4+IDJdLCB5ID0gWihFLCA0MCksIGggPSB3ICsgeSB8IDAsIHMgPSBlW2ggKyAyMCA+PiAyXSwgYyA9IHMgKyAxIHwgMCwgcCA9IGVbaCArIDI4ID4+IDJdLCBjID4+PiAwID4gcCA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSiA9IFcoVyhwID4+PiAwKSArIFcoMTAwKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChKIDwgVyg0Mjk0OTY3Mjk2KSAmIEogPj0gVygwKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcgPSB+fkogPj4+IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW2ggKyAyOCA+PiAyXSA9IHcsIHMgPSBvMChlW2ggKyAyNCA+PiAyXSwgWih3LCAyNCkpLCB3ID0gZVtIICsgNDAgPj4gMl0sIGggPSB5ICsgdyB8IDAsICFzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtoICsgMjQgPj4gMl0gPSBzLCBzID0gZVtoICsgMjAgPj4gMl0sIGMgPSBzICsgMSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcgPSB3ICsgeSB8IDAsIGggPSBlW3cgKyAyNCA+PiAyXSArIFoocywgMjQpIHwgMCwgZVtoICsgMTYgPj4gMl0gPSBDICsgNCwgZyA9IChnIC0gQyB8IDApIC0gNCB8IDAsIGVbaCArIDggPj4gMl0gPSBnLCBlW2ggKyAxMiA+PiAyXSA9IGcgPj4gMzEsIHUyW2ggPj4gMV0gPSB2LCBlW3cgKyAyMCA+PiAyXSA9IGM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh2IHwgMCkgIT0gNjU0MjQgfHwgKGggPSBlW3cgKyAxNiA+PiAyXSwgaCAmJiAoaCA9IGggKyBaKGVbdyArIDEyID4+IDJdLCAyNCkgfCAwLCBlW2ggPj4gMl0gPSBnLCBlW2ggKyA0ID4+IDJdID0gMCksIGggPSAoZVt1ICsgNTYgPj4gMl0gLSBlW0IgKyAzNiA+PiAyXSB8IDApIC0gNCB8IDAsIGcgPSBlW0EgKyA0OCA+PiAyXSwgdyA9IGVbQSArIDUyID4+IDJdLCAodyB8IDApID4gMCA/IGcgPSAxIDogZyA9ICh3IHwgMCkgPj0gMCAmIGcgPj4+IDAgPj0gaCA+Pj4gMCwgZykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW0EgKyA0OCA+PiAyXSA9IGgsIGVbQSArIDUyID4+IDJdID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElbQSArIDY4IHwgMF0gJiA0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKG8yW2VbdSArIDQwID4+IDJdXSh1LCBlW0EgKyAyNCA+PiAyXSwgMCwgbykgfCAwKSAhPSBlW0EgKyAyNCA+PiAyXSB8IHEyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFEobywgMSwgNDM1MiwgMCksIHUgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtCICsgNDAgPj4gMl0gPSA2NTQyNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoaTEodSwgZVtBICsgMTYgPj4gMl0sIDIsIG8pIHwgMCkgIT0gMikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUShvLCAxLCA0MzUyLCAwKSwgdSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaDIoZVtBICsgMTYgPj4gMl0sIEIgKyA0MCB8IDAsIDIpLCBlW0IgKyA0MCA+PiAyXSAhPSA2NTQyNykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW0EgKyA4ID4+IDJdID0gNjQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSKGVbaCArIDI0ID4+IDJdKSwgQSA9IGVbSCArIDQwID4+IDJdICsgWihFLCA0MCkgfCAwLCBlW0EgKyAyOCA+PiAyXSA9IDAsIGVbQSArIDIwID4+IDJdID0gMCwgZVtBICsgMjQgPj4gMl0gPSAwLCBRKG8sIDEsIDYzNzQsIDApLCB1ID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcgPSBlW3UgKyAxMiA+PiAyXSwgdyA9IGcsIGggPSBlW3UgKyA4ID4+IDJdLCBnIHwgaCA/IChzID0gZVt1ICsgNTYgPj4gMl0sIGcgPSBoIC0gcyB8IDAsIGggPSB3IC0gKGVbdSArIDYwID4+IDJdICsgKGggPj4+IDAgPCBzID4+PiAwKSB8IDApIHwgMCkgOiAoZyA9IDAsIGggPSAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGcgfCBoKSAmIGVbQSArIDggPj4gMl0gPT0gNjQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQ6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGggPSBJW0EgKyA2OCB8IDBdLCAhKGggJiA0KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcgPSBaKGVbQSArIDIwNCA+PiAyXSwgNTY0NCksIHcgPSBlW0EgKyAxNTYgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtBICsgNTYgPj4gMl0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoID0gZVt1ICsgOCA+PiAyXSwgaCB8IGVbdSArIDEyID4+IDJdID8gaCA9IGggLSBlW3UgKyA1NiA+PiAyXSB8IDAgOiBoID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoID0gZVtBICsgMjQgPj4gMl0sIGggPj4+IDAgPCAyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoID0gaCAtIDIgfCAwLCBlW0EgKyAyNCA+PiAyXSA9IGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChDID0gZyArIHcgfCAwLCAhaCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGcgPSBlW3UgKyAxMiA+PiAyXSwgcyA9IGcsIHcgPSBlW3UgKyA4ID4+IDJdLCBnIHwgdyA/IChjID0gZVt1ICsgNTYgPj4gMl0sIGcgPSB3IC0gYyB8IDAsIHcgPSBzIC0gKGVbdSArIDYwID4+IDJdICsgKHcgPj4+IDAgPCBjID4+PiAwKSB8IDApIHwgMCkgOiAoZyA9IDAsIHcgPSAwKSwgKHcgfCAwKSA8IDAgPyBnID0gMSA6IGcgPSBnID4+PiAwIDwgaCA+Pj4gMCAmICh3IHwgMCkgPD0gMCwgZykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbQSArIDE4NCA+PiAyXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRKG8sIDEsIDkzNTgsIDApLCB1ID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFEobywgMiwgOTM1OCwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnID0gZVtBICsgMjQgPj4gMl0sIGcgPj4+IDAgPj0gNDI5NDk2NzI5NCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUShvLCAxLCAyNDM3LCAwKSwgdSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ID0gZVtDICsgNTU5NiA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocyA9IGVbQyArIDU2MDAgPj4gMl0sIHMgPj4+IDAgPiAtMyAtIGcgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRKG8sIDEsIDE4MzcsIDApLCB1ID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnID0gbzAodywgKGcgKyBzIHwgMCkgKyAyIHwgMCksIGcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW0MgKyA1NTk2ID4+IDJdID0gZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFIoZVtDICsgNTU5NiA+PiAyXSksIGVbQyArIDU1OTYgPj4gMl0gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGcgPSBVMihnICsgMiB8IDApLCBlW0MgKyA1NTk2ID4+IDJdID0gZywgZykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUShvLCAxLCAxMDEzNywgMCksIHUgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtBICsgOCA+PiAyXSA9IDgsIEZbQSArIDY4IHwgMF0gPSBoICYgMjUwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEggPSBlW0EgKyAyMDAgPj4gMl0sIEgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IGVbdSArIDU2ID4+IDJdLCB2ID0geSAtIDIgfCAwLCBzID0gZVt1ICsgNjAgPj4gMl0sIHAgPSBzIC0gKHkgPj4+IDAgPCAyKSB8IDAsIHcgPSBlW0ggKyA0MCA+PiAyXSwgRCA9IGVbQSArIDIwNCA+PiAyXSwgRSA9IFooRCwgNDApLCBnID0gdyArIEUgfCAwLCBjID0gZVtnICsgMTYgPj4gMl0gKyBaKGVbZyArIDEyID4+IDJdLCAyNCkgfCAwLCBlW2MgKyA4ID4+IDJdID0gdiwgZVtjICsgMTIgPj4gMl0gPSBwLCBwID0gZVtBICsgMjQgPj4gMl0sIHkgPSBwICsgeSB8IDAsIGVbYyArIDE2ID4+IDJdID0geSwgZVtjICsgMjAgPj4gMl0gPSB5ID4+PiAwIDwgcCA+Pj4gMCA/IHMgKyAxIHwgMCA6IHMsIHkgPSBlW0EgKyAyNCA+PiAyXSwgcyA9IGVbZyArIDIwID4+IDJdLCBjID0gcyArIDEgfCAwLCBwID0gZVtnICsgMjggPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQ6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA+Pj4gMCA8PSBwID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gZVtnICsgMjQgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKID0gVyhXKHAgPj4+IDApICsgVygxMDApKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSiA8IFcoNDI5NDk2NzI5NikgJiBKID49IFcoMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdyA9IH5+SiA+Pj4gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtnICsgMjggPj4gMl0gPSB3LCBnID0gbzAoZVtnICsgMjQgPj4gMl0sIFoodywgMjQpKSwgdyA9IGVbSCArIDQwID4+IDJdLCBzID0gRSArIHcgfCAwLCAhZykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtzICsgMjQgPj4gMl0gPSBnLCBzID0gZVtzICsgMjAgPj4gMl0sIGMgPSBzICsgMSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZyA9IFoocywgMjQpICsgZyB8IDAsIGVbZyArIDE2ID4+IDJdID0geSArIDIsIGVbZyArIDggPj4gMl0gPSB2LCBlW2cgKyAxMiA+PiAyXSA9IHYgPj4gMzEsIHUyW2cgPj4gMV0gPSA2NTQyNywgZVsodyArIEUgfCAwKSArIDIwID4+IDJdID0gYzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcgPSBlW0EgKyAyNCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQ6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoID0gaTEodSwgZVtDICsgNTU5NiA+PiAyXSArIGVbQyArIDU2MDAgPj4gMl0gfCAwLCBnLCBvKSwgZyA9IGVbQSArIDI0ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbQSArIDggPj4gMl0gPSAoZyB8IDApID09IChoIHwgMCkgPyA4IDogNjQsIGVbQyArIDU2MDAgPj4gMl0gPSBlW0MgKyA1NjAwID4+IDJdICsgaCwgaCA9IElbQSArIDY4IHwgMF0sIChoICYgOSkgIT0gMSB8fCAoRltBICsgNjggfCAwXSA9IGggfCA4LCBlW3UgKyAyOCA+PiAyXSA9PSA5OSkgfHwgKGcgPSBlW3UgKyA2MCA+PiAyXSwgYyA9IGcsIHcgPSBlW3UgKyA1NiA+PiAyXSwgKGcgJiB3KSA9PSAtMSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ID0gZVtBICsgMjA0ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZyA9IDEsIHMgPSBCICsgNzAgfCAwLCAoaTEodSwgcywgMiwgbykgfCAwKSAhPSAyIHx8IChoMihzLCBCIC0gLTY0IHwgMCwgMiksIGVbQiArIDY0ID4+IDJdICE9IDY1NDI0KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGggPSA0MzUyLCAoaTEodSwgcywgMiwgbykgfCAwKSAhPSAyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaDIocywgQiArIDYwIHwgMCwgMiksIGVbQiArIDYwID4+IDJdICE9IDEwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoID0gOTk4OTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW0IgKyA2MCA+PiAyXSA9IDgsIHMgPSBpMSh1LCBCICsgNzAgfCAwLCA4LCBvKSwgKHMgfCAwKSAhPSBlW0IgKyA2MCA+PiAyXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChzIHwgMCkgIT0gOCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaCA9IDY1OTY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaDIoQiArIDcwIHwgMCwgQiArIDU2IHwgMCwgMiksIGgyKGosIEIgKyA1MiB8IDAsIDQpLCBoMih6LCBCICsgNDggfCAwLCAxKSwgaDIoeCwgQiArIDQ0IHwgMCwgMSksICh2IHwgMCkgIT0gZVtCICsgNTYgPj4gMl0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoID0gZVtCICsgNTIgPj4gMl0sIGggPj4+IDAgPCAxNCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoID0gaCAtIDEyIHwgMCwgZVtCICsgNTIgPj4gMl0gPSBoLCBoID0gbzJbZVt1ICsgNDAgPj4gMl1dKHUsIGgsIDAsIG8pIHwgMCwgIXEyICYgZVtCICsgNTIgPj4gMl0gPT0gKGggfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gZVtCICsgNDggPj4gMl0gIT0gZVtCICsgNDQgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShvMltlW3UgKyA0NCA+PiAyXV0odSwgdywgYywgbykgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRltBICsgNjggfCAwXSA9IElbQSArIDY4IHwgMF0gJiAyMzggfCAxNjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQ6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoID0gZVtBICsgMTU2ID4+IDJdLCBzID0gMCwgZyA9IDAsIChtIHwgMCkgIT0gMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgdyA9IGggKyBaKHMsIDU2NDQpIHwgMCwgYyA9IGVbdyArIDU1OTIgPj4gMl0sIGMgJiYgKGVbdyArIDU1OTIgPj4gMl0gPSBjICsgMSksIHcgPSBoICsgWihzIHwgMSwgNTY0NCkgfCAwLCBjID0gZVt3ICsgNTU5MiA+PiAyXSwgYyAmJiAoZVt3ICsgNTU5MiA+PiAyXSA9IGMgKyAxKSwgcyA9IHMgKyAyIHwgMCwgZyA9IGcgKyAyIHwgMCwgKFUgfCAwKSAhPSAoZyB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghUCB8fCAoaCA9IGggKyBaKHMsIDU2NDQpIHwgMCwgZyA9IGVbaCArIDU1OTIgPj4gMl0sICFnKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2ggKyA1NTkyID4+IDJdID0gZyArIDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRKG8sIDIsIDE5MzIwLCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEZbQSArIDY4IHwgMF0gJiAxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGkxKHUsIGVbQSArIDE2ID4+IDJdLCAyLCBvKSB8IDApICE9IDIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKCFtIHwgKG0gfCAwKSAhPSAoZVtBICsgMjA0ID4+IDJdICsgMSB8IDApKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1ID0gZVtBICsgMTU2ID4+IDJdLCBzID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaCA9IHUgKyBaKHMsIDU2NDQpIHwgMCwgIShlW2ggKyA1NTg4ID4+IDJdIHwgZVtoICsgNTU5MiA+PiAyXSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzID0gcyArIDEgfCAwLCAobSB8IDApID09IChzIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUShvLCAxLCA0MzUyLCAwKSwgdSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaDIoZVtBICsgMTYgPj4gMl0sIEIgKyA0MCB8IDAsIDIpLCBzID0gZVtCICsgNDAgPj4gMl0sIEZbQSArIDY4IHwgMF0gJiAxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHMgfCAwKSAhPSA2NTQ5NykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzID0gZVtCICsgNDAgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW0EgKyA4ID4+IDJdID09IDI1NiB8IChzIHwgMCkgIT0gNjU0OTcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICAgIGVbQSArIDggPj4gMl0gPSAyNTYsIGVbQSArIDIwNCA+PiAyXSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBSKGVbcyArIDI0ID4+IDJdKSwgQSA9IGVbSCArIDQwID4+IDJdICsgWihELCA0MCkgfCAwLCBlW0EgKyAyOCA+PiAyXSA9IDAsIGVbQSArIDIwID4+IDJdID0gMCwgZVtBICsgMjQgPj4gMl0gPSAwLCBRKG8sIDEsIDYzNzQsIDApLCB1ID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGVbQiArIDE2ID4+IDJdID0gcywgUShvLCA0LCAyMTYzNywgQiArIDE2IHwgMCksIGVbQSArIDIwNCA+PiAyXSA9IHMsIGVbQiArIDQwID4+IDJdID0gNjU0OTcsIGVbQSArIDggPj4gMl0gPSAyNTY7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHMgPSBlW0EgKyAyMDQgPj4gMl0sIHUgPSBlW0EgKyAxNTYgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgazogewogICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoRltBICsgNjggfCAwXSAmIDEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgQTogewogICAgICAgICAgICAgICAgICAgICAgICAgIGw6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzID4+PiAwID49IG0gPj4+IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGggPSB1ICsgWihzLCA1NjQ0KSB8IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW2ggKyA1NTk2ID4+IDJdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzID0gcyArIDEgfCAwLCBlW0EgKyAyMDQgPj4gMl0gPSBzLCBoID0gaCArIDU2NDQgfCAwLCAocyB8IDApID09IChtIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHMgfCAwKSAhPSAobSB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlW2EgPj4gMl0gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICBBOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGcgPSB1ICsgWihzLCA1NjQ0KSB8IDAsIGVbZyArIDUxNzIgPj4gMl0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBID0gMTY0NDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShJW2cgKyA1NjQwIHwgMF0gJiAyKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBlW2cgKyA1MTYwID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtID0gZVtnICsgNTE2NCA+PiAyXSwgdSA9IDAsIGggPSAwLCBzID0gMCwgYyA+Pj4gMCA+PSA0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoQyA9IGMgJiAtNCwgdyA9IDA7IHYgPSBtICsgKHMgPDwgMykgfCAwLCBoID0gZVt2ICsgMjggPj4gMl0gKyAoZVt2ICsgMjAgPj4gMl0gKyAoZVt2ICsgMTIgPj4gMl0gKyAoZVt2ICsgNCA+PiAyXSArIGggfCAwKSB8IDApIHwgMCkgfCAwLCBzID0gcyArIDQgfCAwLCB3ID0gdyArIDQgfCAwLCAoQyB8IDApICE9ICh3IHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHcgPSBjICYgMywgIXcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGggPSBlWyhtICsgKHMgPDwgMykgfCAwKSArIDQgPj4gMl0gKyBoIHwgMCwgcyA9IHMgKyAxIHwgMCwgdSA9IHUgKyAxIHwgMCwgKHcgfCAwKSAhPSAodSB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHUgPSBVMihoKSwgZVtnICsgNTE3MiA+PiAyXSA9IHUsIHUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBID0gNjU1ODsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgUShvLCAxLCBBLCAwKSwgUShvLCAxLCAxODA3NSwgMCksIHUgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbZyArIDUxODAgPj4gMl0gPSBoLCB1ID0gZVtnICsgNTE2NCA+PiAyXSwgdyA9IGVbZyArIDUxNjAgPj4gMl0sIHcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChoID0gMCwgcyA9IDA7IGMgPSBzIDw8IDMsIHYgPSBjICsgdSB8IDAsIG0gPSBlW3YgPj4gMl0sIG0gJiYgKEYyKGVbZyArIDUxNzIgPj4gMl0gKyBoIHwgMCwgbSwgZVt2ICsgNCA+PiAyXSksIHUgPSBjICsgZVtnICsgNTE2NCA+PiAyXSB8IDAsIHcgPSBlW3UgKyA0ID4+IDJdLCBSKGVbdSA+PiAyXSksIHUgPSBlW2cgKyA1MTY0ID4+IDJdLCBjID0gYyArIHUgfCAwLCBlW2MgPj4gMl0gPSAwLCBlW2MgKyA0ID4+IDJdID0gMCwgaCA9IGggKyB3IHwgMCwgdyA9IGVbZyArIDUxNjAgPj4gMl0pLCBzID0gcyArIDEgfCAwLCB3ID4+PiAwID4gcyA+Pj4gMDsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICBlW2cgKyA1MTYwID4+IDJdID0gMCwgUih1KSwgZVtnICsgNTE2NCA+PiAyXSA9IDAsIGVbZyArIDUxNjggPj4gMl0gPSBlW2cgKyA1MTcyID4+IDJdLCBlW2cgKyA1MTc2ID4+IDJdID0gZVtnICsgNTE4MCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlmICghQXIoZVtBICsgMjA4ID4+IDJdLCBlW0EgKyAyMDQgPj4gMl0sIDAsIDY0LCBvKSkgewogICAgICAgICAgICAgICAgICAgICAgICBRKG8sIDEsIDYxNzksIDApLCB1ID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlmICh1ID0gZVtBICsgMjA0ID4+IDJdLCBlW0IgKyA0ID4+IDJdID0gWihlW0EgKyAxMDQgPj4gMl0sIGVbQSArIDEwOCA+PiAyXSksIGVbQiA+PiAyXSA9IHUgKyAxLCBRKG8sIDQsIDIyOTYyLCBCKSwgZVtpID4+IDJdID0gZVtBICsgMjA0ID4+IDJdLCBlW2EgPj4gMl0gPSAxLCByICYmIChpID0gZDQoZVtBICsgMjA4ID4+IDJdLCAwKSwgZVtyID4+IDJdID0gaSwgdSA9IDAsIChpIHwgMCkgPT0gLTEpKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgaSA9IGVbZVtlW0EgKyAyMDggPj4gMl0gKyAyMCA+PiAyXSA+PiAyXSwgZVtmID4+IDJdID0gZVtpID4+IDJdLCBlW2sgPj4gMl0gPSBlW2kgKyA0ID4+IDJdLCBlW3QgPj4gMl0gPSBlW2kgKyA4ID4+IDJdLCBlW24gPj4gMl0gPSBlW2kgKyAxMiA+PiAyXSwgZVtsID4+IDJdID0gZVtpICsgMTYgPj4gMl0sIGVbQSArIDggPj4gMl0gPSBlW0EgKyA4ID4+IDJdIHwgMTI4OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB1ID0gMTsKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIFEobywgMSwgaCwgMCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBRKG8sIDEsIDYyMTMsIDApLCB1ID0gMDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIFggPSBCICsgODAgfCAwLCB1IHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBhZShBLCBpLCByLCBmLCBrLCB0LCBuLCBsLCBhKSB7CiAgICAgICAgICAgICAgdmFyIHUgPSAwLCBvID0gMCwgZyA9IDAsIGggPSAwLCBzID0gMCwgdyA9IDAsIEIgPSAwLCBjID0gMCwgdiA9IDAsIEMgPSAwLCBtID0gMCwgeSA9IDAsIHAgPSAwLCBIID0gMCwgSiA9IDAsIEUgPSAwLCBEID0gMCwgVSA9IDAsIFAgPSAwLCB4ID0gMCwgeiA9IDAsIGogPSAwLCBPID0gMCwgcSA9IDAsIGYyID0gMCwgbjIgPSAwLCBnMiA9IDA7CiAgICAgICAgICAgICAgdSA9IGVbQSA+PiAyXTsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAodSA+Pj4gMCA8IGYgPj4+IDAgfCBpID4+PiAwID49IGYgPj4+IDAgfCBpID4+PiAwID49IHUgPj4+IDAgfHwgKHUgPSBlW0EgKyA0ID4+IDJdLCB1ID4+PiAwIDwgayA+Pj4gMCB8IHIgPj4+IDAgPj0gayA+Pj4gMCB8IHIgPj4+IDAgPj0gdSA+Pj4gMCkpCiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICBmb3IgKHggPSAociA+Pj4gMCkgLyBkW0EgKyAxMiA+PiAyXSB8IDAsIHYgPSBlW0EgKyA4ID4+IDJdLCBqID0gKGkgPj4+IDApIC8gKHYgPj4+IDApIHwgMCwgZjIgPSAoWih2LCBqKSAtIGkgfCAwKSArIHYgfCAwLCBEID0gcjsgOyApIHsKICAgICAgICAgICAgICAgICAgZm9yICh1ID0gZVtBICsgMTIgPj4gMl0sIG8gPSAociB8IDApID09IChEIHwgMCkgPyB1IC0gKChyID4+PiAwKSAlICh1ID4+PiAwKSB8IDApIHwgMCA6IHUsIGcgPSBrIC0gRCB8IDAsIGMgPSBvID4+PiAwIDwgZyA+Pj4gMCA/IG8gOiBnLCBVID0gYyAmIC00LCB5ID0gYyAmIDMsIG4yID0gYyAmIC04LCBPID0gYyAmIDcsIEUgPSBjIC0gMSB8IDAsIGcyID0gKG4gfCAwKSA9PSAyICYgKGMgfCAwKSA9PSAxLCBxID0gWih1IC0gbyB8IDAsIHYpLCBQID0gKFooRCAtIHIgfCAwLCBsKSA8PCAyKSArIHQgfCAwLCB6ID0gaiwgSCA9IGk7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgdSA9IChpIHwgMCkgPT0gKEggfCAwKSA/IGYyIDogdiwgZyA9IGYgLSBIIHwgMCwgQiA9IHUgPj4+IDAgPCBnID4+PiAwID8gdSA6IGcsIHUgPSB2IC0gdSB8IDAsIGcgPSB6IDw8IDIsIG8gPSBlW2cgKyAoZVtBICsgMjQgPj4gMl0gKyAoWihlW0EgKyAxNiA+PiAyXSwgeCkgPDwgMikgfCAwKSA+PiAyXTsKICAgICAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgazogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG8pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG8gPSAoKHEgPDwgMikgKyBvIHwgMCkgKyAodSA8PCAyKSB8IDAsIHUgPSBIIC0gaSB8IDAsIChuIHwgMCkgPT0gMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaCA9IChaKG4sIHUpIDw8IDIpICsgUCB8IDAsIChCIHwgMCkgPT0gMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZzIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChuIHwgMCkgIT0gOCB8IEIgPj4+IDAgPD0gNykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChDID0gQiAmIC00LCBzID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodSA9IDAsIEMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgZVsodSA8PCA1KSArIGggPj4gMl0gPSBlWyh1IDw8IDIpICsgbyA+PiAyXSwgZyA9IHUgfCAxLCBlWyhnIDw8IDUpICsgaCA+PiAyXSA9IGVbKGcgPDwgMikgKyBvID4+IDJdLCBnID0gdSB8IDIsIGVbKGcgPDwgNSkgKyBoID4+IDJdID0gZVsoZyA8PCAyKSArIG8gPj4gMl0sIGcgPSB1IHwgMywgZVsoZyA8PCA1KSArIGggPj4gMl0gPSBlWyhnIDw8IDIpICsgbyA+PiAyXSwgdSA9IHUgKyA0IHwgMCwgQyA+Pj4gMCA+IHUgPj4+IDA7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1ID4+PiAwID49IEIgPj4+IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodyA9IDAsIGcgPSB1LCBtID0gQiAtIHUgJiAzLCBtKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgZVsoZyA8PCA1KSArIGggPj4gMl0gPSBlWyhnIDw8IDIpICsgbyA+PiAyXSwgZyA9IGcgKyAxIHwgMCwgdyA9IHcgKyAxIHwgMCwgKG0gfCAwKSAhPSAodyB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHUgLSBCID4+PiAwID4gNDI5NDk2NzI5MikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBlWyhnIDw8IDUpICsgaCA+PiAyXSA9IGVbKGcgPDwgMikgKyBvID4+IDJdLCB1ID0gZyArIDEgfCAwLCBlWyh1IDw8IDUpICsgaCA+PiAyXSA9IGVbKHUgPDwgMikgKyBvID4+IDJdLCB1ID0gZyArIDIgfCAwLCBlWyh1IDw8IDUpICsgaCA+PiAyXSA9IGVbKHUgPDwgMikgKyBvID4+IDJdLCB1ID0gZyArIDMgfCAwLCBlWyh1IDw8IDUpICsgaCA+PiAyXSA9IGVbKHUgPDwgMikgKyBvID4+IDJdLCBnID0gZyArIDQgfCAwLCAoQiB8IDApICE9IChnIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobyA9ICh2IDw8IDIpICsgbyB8IDAsIGggPSAobCA8PCAyKSArIGggfCAwLCBzID0gcyArIDEgfCAwLCAoYyB8IDApID09IChzIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChuIHwgMCkgIT0gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChDID0gQiAmIC00LCBzID0gQiAmIDMsIGggPSAoWihIIC0gaSB8IDAsIG4pIDw8IDIpICsgUCB8IDAsIHcgPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1ID0gMCwgbyA9IDAsIGcgPSAwLCBCID4+PiAwID49IDQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBlWyhaKG4sIG8pIDw8IDIpICsgaCA+PiAyXSA9IDAsIGVbKFoobyB8IDEsIG4pIDw8IDIpICsgaCA+PiAyXSA9IDAsIGVbKFoobyB8IDIsIG4pIDw8IDIpICsgaCA+PiAyXSA9IDAsIGVbKFoobyB8IDMsIG4pIDw8IDIpICsgaCA+PiAyXSA9IDAsIG8gPSBvICsgNCB8IDAsIGcgPSBnICsgNCB8IDAsIChDIHwgMCkgIT0gKGcgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBlWyhaKG4sIG8pIDw8IDIpICsgaCA+PiAyXSA9IDAsIG8gPSBvICsgMSB8IDAsIHUgPSB1ICsgMSB8IDAsIChzIHwgMCkgIT0gKHUgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoID0gKGwgPDwgMikgKyBoIHwgMCwgdyA9IHcgKyAxIHwgMCwgKHcgfCAwKSA9PSAoYyB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnID0gQiA8PCAyLCBoID0gKEggLSBpIDw8IDIpICsgUCB8IDAsIHUgPSAwLCBFID4+PiAwID49IDcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBvID0gbCA8PCAyLCBoID0gZDIoZDIoZDIoZDIoZDIoZDIoZDIoZDIoaCwgMCwgZykgKyBvIHwgMCwgMCwgZykgKyBvIHwgMCwgMCwgZykgKyBvIHwgMCwgMCwgZykgKyBvIHwgMCwgMCwgZykgKyBvIHwgMCwgMCwgZykgKyBvIHwgMCwgMCwgZykgKyBvIHwgMCwgMCwgZykgKyBvIHwgMCwgdSA9IHUgKyA4IHwgMCwgKG4yIHwgMCkgIT0gKHUgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1ID0gMCwgIU8pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgaCA9IGQyKGgsIDAsIGcpICsgKGwgPDwgMikgfCAwLCB1ID0gdSArIDEgfCAwLCAoTyB8IDApICE9ICh1IHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtID0gQiAmIC00LCBDID0gQiAmIDMsIHcgPSAwLCBwID0gQiAtIDEgPj4+IDAgPCAzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHUgPSAwLCBnID0gQiAmIC00LCBnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBlWyh1IDw8IDMpICsgaCA+PiAyXSA9IGVbKHUgPDwgMikgKyBvID4+IDJdLCBzID0gdSB8IDEsIGVbKHMgPDwgMykgKyBoID4+IDJdID0gZVsocyA8PCAyKSArIG8gPj4gMl0sIHMgPSB1IHwgMiwgZVsocyA8PCAzKSArIGggPj4gMl0gPSBlWyhzIDw8IDIpICsgbyA+PiAyXSwgcyA9IHUgfCAzLCBlWyhzIDw8IDMpICsgaCA+PiAyXSA9IGVbKHMgPDwgMikgKyBvID4+IDJdLCB1ID0gdSArIDQgfCAwLCBnID4+PiAwID4gdSA+Pj4gMDsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodSA+Pj4gMCA+PSBCID4+PiAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzID0gMCwgZyA9IHUsIHcgPSBCIC0gdSAmIDMsIHcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGVbKGcgPDwgMykgKyBoID4+IDJdID0gZVsoZyA8PCAyKSArIG8gPj4gMl0sIGcgPSBnICsgMSB8IDAsIHMgPSBzICsgMSB8IDAsICh3IHwgMCkgIT0gKHMgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodSAtIEIgPj4+IDAgPiA0Mjk0OTY3MjkyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBlWyhnIDw8IDMpICsgaCA+PiAyXSA9IGVbKGcgPDwgMikgKyBvID4+IDJdLCB1ID0gZyArIDEgfCAwLCBlWyh1IDw8IDMpICsgaCA+PiAyXSA9IGVbKHUgPDwgMikgKyBvID4+IDJdLCB1ID0gZyArIDIgfCAwLCBlWyh1IDw8IDMpICsgaCA+PiAyXSA9IGVbKHUgPDwgMikgKyBvID4+IDJdLCB1ID0gZyArIDMgfCAwLCBlWyh1IDw8IDMpICsgaCA+PiAyXSA9IGVbKHUgPDwgMikgKyBvID4+IDJdLCBnID0gZyArIDQgfCAwLCAoQiB8IDApICE9IChnIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZyA9IDAsIEUgPj4+IDAgPj0gMykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGVbaCA+PiAyXSA9IGVbbyA+PiAyXSwgdSA9IGwgPDwgMiwgaCA9IHUgKyBoIHwgMCwgbSA9IG8sIG8gPSB2IDw8IDIsIHMgPSBtICsgbyB8IDAsIGVbaCA+PiAyXSA9IGVbcyA+PiAyXSwgaCA9IHUgKyBoIHwgMCwgcyA9IG8gKyBzIHwgMCwgZVtoID4+IDJdID0gZVtzID4+IDJdLCBoID0gdSArIGggfCAwLCBzID0gbyArIHMgfCAwLCBlW2ggPj4gMl0gPSBlW3MgPj4gMl0sIG8gPSBvICsgcyB8IDAsIGggPSB1ICsgaCB8IDAsIGcgPSBnICsgNCB8IDAsIChVIHwgMCkgIT0gKGcgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1ID0gMCwgIXkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgZVtoID4+IDJdID0gZVtvID4+IDJdLCBvID0gKHYgPDwgMikgKyBvIHwgMCwgaCA9IChsIDw8IDIpICsgaCB8IDAsIHUgPSB1ICsgMSB8IDAsICh5IHwgMCkgIT0gKHUgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaCA9ICh1IDw8IDIpICsgUCB8IDAsIChCIHwgMCkgIT0gNCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHUgPSBCIDw8IDIsIGcgPSAwLCBFID4+PiAwID49IDMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBoID0gRjIoaCwgbywgdSksIG0gPSBvLCBvID0gdiA8PCAyLCBzID0gbSArIG8gfCAwLCB3ID0gbyArIHMgfCAwLCBDID0gdyArIG8gfCAwLCBvID0gQyArIG8gfCAwLCBtID0gaCwgaCA9IGwgPDwgMiwgaCA9IEYyKEYyKEYyKG0gKyBoIHwgMCwgcywgdSkgKyBoIHwgMCwgdywgdSkgKyBoIHwgMCwgQywgdSkgKyBoIHwgMCwgZyA9IGcgKyA0IHwgMCwgKFUgfCAwKSAhPSAoZyB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGcgPSAwLCAheSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBoID0gRjIoaCwgbywgdSksIG8gPSAodiA8PCAyKSArIG8gfCAwLCBoID0gKGwgPDwgMikgKyBoIHwgMCwgZyA9IGcgKyAxIHwgMCwgKHkgfCAwKSAhPSAoZyB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYykKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPSAwLCBFID4+PiAwID49IDMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgdSA9IGVbbyArIDQgPj4gMl0sIGVbaCA+PiAyXSA9IGVbbyA+PiAyXSwgZVtoICsgNCA+PiAyXSA9IHUsIHUgPSBlW28gKyAxMiA+PiAyXSwgZVtoICsgOCA+PiAyXSA9IGVbbyArIDggPj4gMl0sIGVbaCArIDEyID4+IDJdID0gdSwgdSA9IG8sIG8gPSB2IDw8IDIsIGcgPSB1ICsgbyB8IDAsIHcgPSBlW2cgKyAxMiA+PiAyXSwgdSA9IGgsIGggPSBsIDw8IDIsIHUgPSB1ICsgaCB8IDAsIGVbdSArIDggPj4gMl0gPSBlW2cgKyA4ID4+IDJdLCBlW3UgKyAxMiA+PiAyXSA9IHcsIHcgPSBlW2cgKyA0ID4+IDJdLCBlW3UgPj4gMl0gPSBlW2cgPj4gMl0sIGVbdSArIDQgPj4gMl0gPSB3LCBnID0gbyArIGcgfCAwLCB3ID0gZVtnICsgMTIgPj4gMl0sIHUgPSB1ICsgaCB8IDAsIGVbdSArIDggPj4gMl0gPSBlW2cgKyA4ID4+IDJdLCBlW3UgKyAxMiA+PiAyXSA9IHcsIHcgPSBlW2cgKyA0ID4+IDJdLCBlW3UgPj4gMl0gPSBlW2cgPj4gMl0sIGVbdSArIDQgPj4gMl0gPSB3LCBnID0gbyArIGcgfCAwLCB3ID0gZVtnICsgMTIgPj4gMl0sIHUgPSB1ICsgaCB8IDAsIGVbdSArIDggPj4gMl0gPSBlW2cgKyA4ID4+IDJdLCBlW3UgKyAxMiA+PiAyXSA9IHcsIHcgPSBlW2cgKyA0ID4+IDJdLCBlW3UgPj4gMl0gPSBlW2cgPj4gMl0sIGVbdSArIDQgPj4gMl0gPSB3LCBvID0gbyArIGcgfCAwLCBoID0gdSArIGggfCAwLCBzID0gcyArIDQgfCAwLCAoVSB8IDApICE9IChzIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1ID0gMCwgIXkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBnID0gZVtvICsgNCA+PiAyXSwgZVtoID4+IDJdID0gZVtvID4+IDJdLCBlW2ggKyA0ID4+IDJdID0gZywgZyA9IGVbbyArIDEyID4+IDJdLCBlW2ggKyA4ID4+IDJdID0gZVtvICsgOCA+PiAyXSwgZVtoICsgMTIgPj4gMl0gPSBnLCBvID0gKHYgPDwgMikgKyBvIHwgMCwgaCA9IChsIDw8IDIpICsgaCB8IDAsIHUgPSB1ICsgMSB8IDAsICh5IHwgMCkgIT0gKHUgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG8gPSBFMigxLCBaKGVbQSArIDggPj4gMl0sIGVbQSArIDEyID4+IDJdKSA8PCAyKSwgIW8pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICBlW2cgKyAoZVtBICsgMjQgPj4gMl0gKyAoWihlW0EgKyAxNiA+PiAyXSwgeCkgPDwgMikgfCAwKSA+PiAyXSA9IG87CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgbyA9ICgocSA8PCAyKSArIG8gfCAwKSArICh1IDw8IDIpIHwgMCwgdSA9IEggLSBpIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgazogewogICAgICAgICAgICAgICAgICAgICAgICAgIGY6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobiB8IDApICE9IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoID0gKFoobiwgdSkgPDwgMikgKyBQIHwgMCwgKEIgfCAwKSA9PSAxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChuIHwgMCkgIT0gOCB8IEIgPj4+IDAgPD0gNykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoQyA9IEIgJiAtNCwgcyA9IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1ID0gMCwgQykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgZVsodSA8PCAyKSArIG8gPj4gMl0gPSBlWyh1IDw8IDUpICsgaCA+PiAyXSwgZyA9IHUgfCAxLCBlWyhnIDw8IDIpICsgbyA+PiAyXSA9IGVbKGcgPDwgNSkgKyBoID4+IDJdLCBnID0gdSB8IDIsIGVbKGcgPDwgMikgKyBvID4+IDJdID0gZVsoZyA8PCA1KSArIGggPj4gMl0sIGcgPSB1IHwgMywgZVsoZyA8PCAyKSArIG8gPj4gMl0gPSBlWyhnIDw8IDUpICsgaCA+PiAyXSwgdSA9IHUgKyA0IHwgMCwgQyA+Pj4gMCA+IHUgPj4+IDA7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1ID4+PiAwID49IEIgPj4+IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3ID0gMCwgZyA9IHUsIG0gPSBCIC0gdSAmIDMsIG0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgZVsoZyA8PCAyKSArIG8gPj4gMl0gPSBlWyhnIDw8IDUpICsgaCA+PiAyXSwgZyA9IGcgKyAxIHwgMCwgdyA9IHcgKyAxIHwgMCwgKG0gfCAwKSAhPSAodyB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodSAtIEIgPj4+IDAgPiA0Mjk0OTY3MjkyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgZVsoZyA8PCAyKSArIG8gPj4gMl0gPSBlWyhnIDw8IDUpICsgaCA+PiAyXSwgdSA9IGcgKyAxIHwgMCwgZVsodSA8PCAyKSArIG8gPj4gMl0gPSBlWyh1IDw8IDUpICsgaCA+PiAyXSwgdSA9IGcgKyAyIHwgMCwgZVsodSA8PCAyKSArIG8gPj4gMl0gPSBlWyh1IDw8IDUpICsgaCA+PiAyXSwgdSA9IGcgKyAzIHwgMCwgZVsodSA8PCAyKSArIG8gPj4gMl0gPSBlWyh1IDw8IDUpICsgaCA+PiAyXSwgZyA9IGcgKyA0IHwgMCwgKEIgfCAwKSAhPSAoZyB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG8gPSAodiA8PCAyKSArIG8gfCAwLCBoID0gKGwgPDwgMikgKyBoIHwgMCwgcyA9IHMgKyAxIHwgMCwgKGMgfCAwKSA9PSAocyB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGggPSAodSA8PCAyKSArIFAgfCAwLCAoQiB8IDApID09IDQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHUgPSBCIDw8IDIsIGcgPSAwLCBFID4+PiAwID49IDMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgdyA9IEYyKG8sIGgsIHUpLCBvID0gbCA8PCAyLCBzID0gbyArIGggfCAwLCBDID0gbyArIHMgfCAwLCBtID0gQyArIG8gfCAwLCBoID0gbSArIG8gfCAwLCBvID0gdiA8PCAyLCBvID0gRjIoRjIoRjIobyArIHcgfCAwLCBzLCB1KSArIG8gfCAwLCBDLCB1KSArIG8gfCAwLCBtLCB1KSArIG8gfCAwLCBnID0gZyArIDQgfCAwLCAoVSB8IDApICE9IChnIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnID0gMCwgIXkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBvID0gRjIobywgaCwgdSksIGggPSAobCA8PCAyKSArIGggfCAwLCBvID0gKHYgPDwgMikgKyBvIHwgMCwgZyA9IGcgKyAxIHwgMCwgKHkgfCAwKSAhPSAoZyB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPSAwLCBFID4+PiAwID49IDMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGVbbyA+PiAyXSA9IGVbaCA+PiAyXSwgdSA9IHYgPDwgMiwgbyA9IHUgKyBvIHwgMCwgZyA9IGwgPDwgMiwgaCA9IGcgKyBoIHwgMCwgZVtvID4+IDJdID0gZVtoID4+IDJdLCBvID0gdSArIG8gfCAwLCBoID0gaCArIGcgfCAwLCBlW28gPj4gMl0gPSBlW2ggPj4gMl0sIG8gPSB1ICsgbyB8IDAsIGggPSBoICsgZyB8IDAsIGVbbyA+PiAyXSA9IGVbaCA+PiAyXSwgbyA9IHUgKyBvIHwgMCwgaCA9IGggKyBnIHwgMCwgcyA9IHMgKyA0IHwgMCwgKFUgfCAwKSAhPSAocyB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1ID0gMCwgIXkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGVbbyA+PiAyXSA9IGVbaCA+PiAyXSwgbyA9ICh2IDw8IDIpICsgbyB8IDAsIGggPSAobCA8PCAyKSArIGggfCAwLCB1ID0gdSArIDEgfCAwLCAoeSB8IDApICE9ICh1IHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtID0gQiAmIC00LCBDID0gQiAmIDMsIHcgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocyA9IDAsIEUgPj4+IDAgPj0gMykKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyB1ID0gZVtoICsgNCA+PiAyXSwgZVtvID4+IDJdID0gZVtoID4+IDJdLCBlW28gKyA0ID4+IDJdID0gdSwgdSA9IGVbaCArIDEyID4+IDJdLCBlW28gKyA4ID4+IDJdID0gZVtoICsgOCA+PiAyXSwgZVtvICsgMTIgPj4gMl0gPSB1LCB1ID0gaCwgaCA9IGwgPDwgMiwgZyA9IHUgKyBoIHwgMCwgdyA9IGVbZyArIDEyID4+IDJdLCB1ID0gbywgbyA9IHYgPDwgMiwgdSA9IHUgKyBvIHwgMCwgZVt1ICsgOCA+PiAyXSA9IGVbZyArIDggPj4gMl0sIGVbdSArIDEyID4+IDJdID0gdywgdyA9IGVbZyArIDQgPj4gMl0sIGVbdSA+PiAyXSA9IGVbZyA+PiAyXSwgZVt1ICsgNCA+PiAyXSA9IHcsIGcgPSBoICsgZyB8IDAsIHcgPSBlW2cgKyAxMiA+PiAyXSwgdSA9IHUgKyBvIHwgMCwgZVt1ICsgOCA+PiAyXSA9IGVbZyArIDggPj4gMl0sIGVbdSArIDEyID4+IDJdID0gdywgdyA9IGVbZyArIDQgPj4gMl0sIGVbdSA+PiAyXSA9IGVbZyA+PiAyXSwgZVt1ICsgNCA+PiAyXSA9IHcsIGcgPSBoICsgZyB8IDAsIHcgPSBlW2cgKyAxMiA+PiAyXSwgdSA9IHUgKyBvIHwgMCwgZVt1ICsgOCA+PiAyXSA9IGVbZyArIDggPj4gMl0sIGVbdSArIDEyID4+IDJdID0gdywgdyA9IGVbZyArIDQgPj4gMl0sIGVbdSA+PiAyXSA9IGVbZyA+PiAyXSwgZVt1ICsgNCA+PiAyXSA9IHcsIGggPSBoICsgZyB8IDAsIG8gPSB1ICsgbyB8IDAsIHMgPSBzICsgNCB8IDAsIChVIHwgMCkgIT0gKHMgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHUgPSAwLCAheSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGcgPSBlW2ggKyA0ID4+IDJdLCBlW28gPj4gMl0gPSBlW2ggPj4gMl0sIGVbbyArIDQgPj4gMl0gPSBnLCBnID0gZVtoICsgMTIgPj4gMl0sIGVbbyArIDggPj4gMl0gPSBlW2ggKyA4ID4+IDJdLCBlW28gKyAxMiA+PiAyXSA9IGcsIGggPSAobCA8PCAyKSArIGggfCAwLCBvID0gKHYgPDwgMikgKyBvIHwgMCwgdSA9IHUgKyAxIHwgMCwgKHkgfCAwKSAhPSAodSB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBrOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZyA9IDAsIHUgPSAwLCBzID0gMCwgQiA+Pj4gMCA+PSA0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgZVsodSA8PCAyKSArIG8gPj4gMl0gPSBlWyhaKG4sIHUpIDw8IDIpICsgaCA+PiAyXSwgcCA9IHUgfCAxLCBlWyhwIDw8IDIpICsgbyA+PiAyXSA9IGVbKFoobiwgcCkgPDwgMikgKyBoID4+IDJdLCBwID0gdSB8IDIsIGVbKHAgPDwgMikgKyBvID4+IDJdID0gZVsoWihuLCBwKSA8PCAyKSArIGggPj4gMl0sIHAgPSB1IHwgMywgZVsocCA8PCAyKSArIG8gPj4gMl0gPSBlWyhaKG4sIHApIDw8IDIpICsgaCA+PiAyXSwgdSA9IHUgKyA0IHwgMCwgcyA9IHMgKyA0IHwgMCwgKG0gfCAwKSAhPSAocyB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFDKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGVbKHUgPDwgMikgKyBvID4+IDJdID0gZVsoWihuLCB1KSA8PCAyKSArIGggPj4gMl0sIHUgPSB1ICsgMSB8IDAsIGcgPSBnICsgMSB8IDAsIChDIHwgMCkgIT0gKGcgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvID0gKHYgPDwgMikgKyBvIHwgMCwgaCA9IChsIDw8IDIpICsgaCB8IDAsIHcgPSB3ICsgMSB8IDAsICh3IHwgMCkgPT0gKGMgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGcgPSAwLCB1ID0gMCwgcyA9IDAsICFwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGVbKFoobiwgdSkgPDwgMikgKyBoID4+IDJdID0gZVsodSA8PCAyKSArIG8gPj4gMl0sIEogPSB1IHwgMSwgZVsoWihKLCBuKSA8PCAyKSArIGggPj4gMl0gPSBlWyhKIDw8IDIpICsgbyA+PiAyXSwgSiA9IHUgfCAyLCBlWyhaKEosIG4pIDw8IDIpICsgaCA+PiAyXSA9IGVbKEogPDwgMikgKyBvID4+IDJdLCBKID0gdSB8IDMsIGVbKFooSiwgbikgPDwgMikgKyBoID4+IDJdID0gZVsoSiA8PCAyKSArIG8gPj4gMl0sIHUgPSB1ICsgNCB8IDAsIHMgPSBzICsgNCB8IDAsIChtIHwgMCkgIT0gKHMgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFDKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgZVsoWihuLCB1KSA8PCAyKSArIGggPj4gMl0gPSBlWyh1IDw8IDIpICsgbyA+PiAyXSwgdSA9IHUgKyAxIHwgMCwgZyA9IGcgKyAxIHwgMCwgKEMgfCAwKSAhPSAoZyB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG8gPSAodiA8PCAyKSArIG8gfCAwLCBoID0gKGwgPDwgMikgKyBoIHwgMCwgdyA9IHcgKyAxIHwgMCwgKHcgfCAwKSA9PSAoYyB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoeiA9IHogKyAxIHwgMCwgSCA9IEIgKyBIIHwgMCwgIShIID4+PiAwIDwgZiA+Pj4gMCkpCiAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoeCA9IHggKyAxIHwgMCwgRCA9IGMgKyBEIHwgMCwgIShEID4+PiAwIDwgayA+Pj4gMCkpCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIEtBKEEsIGksIHIsIGYpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIGkgPSBpIHwgMCwgciA9IHIgfCAwLCBmID0gZiB8IDA7CiAgICAgICAgICAgICAgdmFyIGsgPSAwLCB0ID0gMCwgbiA9IDAsIGwgPSBXKDApLCBhID0gMCwgdSA9IDAsIG8gPSBXKDApLCBnID0gMCwgaCA9IDAsIHMgPSAwLCB3ID0gMCwgQiA9IDAsIGMgPSAwLCB2ID0gVygwKSwgQyA9IDAsIG0gPSAwLCB5ID0gMDsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAoKHIgfCAwKSA9PSAxKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgYyA9IEYyKGksIEEsIHIgPDwgMiksIGggPSAhZiwgdSA9IGMgKyAoaCA8PCAyKSB8IDAsIHQgPSAoZiB8IDApICE9IDAsIEIgPSAodCA8PCAyKSArIGMgfCAwLCBpID0gQiArIDQgfCAwLCBrID0gaSwgbSA9IHIgKyB0IHwgMCwgcyA9IG0gPj4+IDEgfCAwLCB3ID0gciAtIHMgfCAwLCB0ID0gcyAtIHQgfCAwLCBhID0gKHQgfCAwKSA+ICh3IHwgMCkgPyB3IDogdCwgZyA9IGEgPj4+IDAgPiB3ID4+PiAwID8gdyA6IGE7CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIGlmICghZykKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICBpZiAoR1tCID4+IDJdID0gVyhXKEdbdSA+PiAyXSArIEdbQiArIDQgPj4gMl0pICogVygtMS41ODYxMzQzMTQ1MzcwNDgzKSkgKyBHW0IgPj4gMl0sIGsgPSBCICsgMTIgfCAwLCBuID0gMSwgZyA+Pj4gMCA+IDQpIHsKICAgICAgICAgICAgICAgICAgICBmb3IgKDsgbCA9IEdbayA+PiAyXSwgbyA9IEdbayArIDggPj4gMl0sIEdbayArIDQgPj4gMl0gPSBXKFcobCArIG8pICogVygtMS41ODYxMzQzMTQ1MzcwNDgzKSkgKyBHW2sgKyA0ID4+IDJdLCB2ID0gbywgbyA9IEdbayArIDE2ID4+IDJdLCBHW2sgKyAxMiA+PiAyXSA9IFcoVyh2ICsgbykgKiBXKC0xLjU4NjEzNDMxNDUzNzA0ODMpKSArIEdbayArIDEyID4+IDJdLCBHW2sgKyAyMCA+PiAyXSA9IFcoVyhvICsgR1trICsgMjQgPj4gMl0pICogVygtMS41ODYxMzQzMTQ1MzcwNDgzKSkgKyBHW2sgKyAyMCA+PiAyXSwgdCA9IGsgLSA0IHwgMCwgR1t0ID4+IDJdID0gVyhXKGwgKyBHW2sgLSA4ID4+IDJdKSAqIFcoLTEuNTg2MTM0MzE0NTM3MDQ4MykpICsgR1t0ID4+IDJdLCBrID0gayArIDMyIHwgMCwgdCA9IG4gKyA3IHwgMCwgbiA9IG4gKyA0IHwgMCwgdCA+Pj4gMCA8IGcgPj4+IDA7ICkKICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICBuID0gKGcgLSA1ICYgLTQpICsgNSB8IDA7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKG4gPj4+IDAgPj0gZyA+Pj4gMCB8fCAodCA9IG4gKyAxIHwgMCwgZyAtIG4gJiAxICYmIChuID0gayAtIDQgfCAwLCBHW24gPj4gMl0gPSBXKFcoR1trIC0gOCA+PiAyXSArIEdbayA+PiAyXSkgKiBXKC0xLjU4NjEzNDMxNDUzNzA0ODMpKSArIEdbbiA+PiAyXSwgbiA9IHQsIGsgPSBrICsgOCB8IDApLCAodCB8IDApID09IChnIHwgMCkpKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIGZvciAoOyBsID0gR1trID4+IDJdLCBHW2sgKyA0ID4+IDJdID0gVyhXKGwgKyBHW2sgKyA4ID4+IDJdKSAqIFcoLTEuNTg2MTM0MzE0NTM3MDQ4MykpICsgR1trICsgNCA+PiAyXSwgdCA9IGsgLSA0IHwgMCwgR1t0ID4+IDJdID0gVyhXKGwgKyBHW2sgLSA4ID4+IDJdKSAqIFcoLTEuNTg2MTM0MzE0NTM3MDQ4MykpICsgR1t0ID4+IDJdLCBrID0gayArIDE2IHwgMCwgbiA9IG4gKyAyIHwgMCwgKGcgfCAwKSAhPSAobiB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgeSA9IGEgPj4+IDAgPj0gdyA+Pj4gMCwgeSB8fCAodCA9IGsgLSA0IHwgMCwgbCA9IEdbayAtIDggPj4gMl0sIEdbdCA+PiAyXSA9IFcoVyhsICsgbCkgKiBXKC0xLjU4NjEzNDMxNDUzNzA0ODMpKSArIEdbdCA+PiAyXSksIGsgPSB1ICsgNCB8IDAsIG4gPSBrLCB0ID0gdyAtIGggfCAwLCBDID0gKHQgfCAwKSA+IChzIHwgMCkgPyBzIDogdCwgaCA9IHMgPj4+IDAgPCBDID4+PiAwID8gcyA6IEM7CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIGlmICghaCkKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICBpZiAoR1t1ID4+IDJdID0gVyhXKEdbQiA+PiAyXSArIEdbdSArIDQgPj4gMl0pICogVygtMC4wNTI5ODAxMTc0OTk4MjgzNCkpICsgR1t1ID4+IDJdLCBuID0gdSArIDEyIHwgMCwgdCA9IDEsIGggPj4+IDAgPiA0KSB7CiAgICAgICAgICAgICAgICAgICAgZm9yICg7IGwgPSBHW24gPj4gMl0sIG8gPSBHW24gKyA4ID4+IDJdLCBHW24gKyA0ID4+IDJdID0gVyhXKGwgKyBvKSAqIFcoLTAuMDUyOTgwMTE3NDk5ODI4MzQpKSArIEdbbiArIDQgPj4gMl0sIHYgPSBvLCBvID0gR1tuICsgMTYgPj4gMl0sIEdbbiArIDEyID4+IDJdID0gVyhXKHYgKyBvKSAqIFcoLTAuMDUyOTgwMTE3NDk5ODI4MzQpKSArIEdbbiArIDEyID4+IDJdLCBHW24gKyAyMCA+PiAyXSA9IFcoVyhvICsgR1tuICsgMjQgPj4gMl0pICogVygtMC4wNTI5ODAxMTc0OTk4MjgzNCkpICsgR1tuICsgMjAgPj4gMl0sIGEgPSBuIC0gNCB8IDAsIEdbYSA+PiAyXSA9IFcoVyhsICsgR1tuIC0gOCA+PiAyXSkgKiBXKC0wLjA1Mjk4MDExNzQ5OTgyODM0KSkgKyBHW2EgPj4gMl0sIG4gPSBuICsgMzIgfCAwLCBhID0gdCArIDcgfCAwLCB0ID0gdCArIDQgfCAwLCBhID4+PiAwIDwgaCA+Pj4gMDsgKQogICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgIHQgPSAoaCAtIDUgJiAtNCkgKyA1IHwgMDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAodCA+Pj4gMCA+PSBoID4+PiAwIHx8IChhID0gdCArIDEgfCAwLCBoIC0gdCAmIDEgJiYgKHQgPSBuIC0gNCB8IDAsIEdbdCA+PiAyXSA9IFcoVyhHW24gLSA4ID4+IDJdICsgR1tuID4+IDJdKSAqIFcoLTAuMDUyOTgwMTE3NDk5ODI4MzQpKSArIEdbdCA+PiAyXSwgbiA9IG4gKyA4IHwgMCwgdCA9IGEpLCAoYSB8IDApID09IChoIHwgMCkpKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIGZvciAoOyBsID0gR1tuID4+IDJdLCBHW24gKyA0ID4+IDJdID0gVyhXKGwgKyBHW24gKyA4ID4+IDJdKSAqIFcoLTAuMDUyOTgwMTE3NDk5ODI4MzQpKSArIEdbbiArIDQgPj4gMl0sIGEgPSBuIC0gNCB8IDAsIEdbYSA+PiAyXSA9IFcoVyhsICsgR1tuIC0gOCA+PiAyXSkgKiBXKC0wLjA1Mjk4MDExNzQ5OTgyODM0KSkgKyBHW2EgPj4gMl0sIG4gPSBuICsgMTYgfCAwLCB0ID0gdCArIDIgfCAwLCAoaCB8IDApICE9ICh0IHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBhID0gcyA+Pj4gMCA8PSBDID4+PiAwLCBhIHx8ICh0ID0gbiAtIDQgfCAwLCBsID0gR1tuIC0gOCA+PiAyXSwgR1t0ID4+IDJdID0gVyhXKGwgKyBsKSAqIFcoLTAuMDUyOTgwMTE3NDk5ODI4MzQpKSArIEdbdCA+PiAyXSk7CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIGlmICghZykKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICBpZiAoR1tCID4+IDJdID0gVyhXKEdbdSA+PiAyXSArIEdbQiArIDQgPj4gMl0pICogVygwLjg4MjkxMTA4NjA4MjQ1ODUpKSArIEdbQiA+PiAyXSwgaSA9IEIgKyAxMiB8IDAsIG4gPSAxLCBnID4+PiAwID4gNCkgewogICAgICAgICAgICAgICAgICAgIGZvciAoOyBsID0gR1tpID4+IDJdLCBvID0gR1tpICsgOCA+PiAyXSwgR1tpICsgNCA+PiAyXSA9IFcoVyhsICsgbykgKiBXKDAuODgyOTExMDg2MDgyNDU4NSkpICsgR1tpICsgNCA+PiAyXSwgdiA9IG8sIG8gPSBHW2kgKyAxNiA+PiAyXSwgR1tpICsgMTIgPj4gMl0gPSBXKFcodiArIG8pICogVygwLjg4MjkxMTA4NjA4MjQ1ODUpKSArIEdbaSArIDEyID4+IDJdLCBHW2kgKyAyMCA+PiAyXSA9IFcoVyhvICsgR1tpICsgMjQgPj4gMl0pICogVygwLjg4MjkxMTA4NjA4MjQ1ODUpKSArIEdbaSArIDIwID4+IDJdLCB0ID0gaSAtIDQgfCAwLCBHW3QgPj4gMl0gPSBXKFcobCArIEdbaSAtIDggPj4gMl0pICogVygwLjg4MjkxMTA4NjA4MjQ1ODUpKSArIEdbdCA+PiAyXSwgaSA9IGkgKyAzMiB8IDAsIHQgPSBuICsgNyB8IDAsIG4gPSBuICsgNCB8IDAsIHQgPj4+IDAgPCBnID4+PiAwOyApCiAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgbiA9IChnIC0gNSAmIC00KSArIDUgfCAwOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChuID4+PiAwID49IGcgPj4+IDAgfHwgKHQgPSBuICsgMSB8IDAsIGcgLSBuICYgMSAmJiAobiA9IGkgLSA0IHwgMCwgR1tuID4+IDJdID0gVyhXKEdbaSAtIDggPj4gMl0gKyBHW2kgPj4gMl0pICogVygwLjg4MjkxMTA4NjA4MjQ1ODUpKSArIEdbbiA+PiAyXSwgbiA9IHQsIGkgPSBpICsgOCB8IDApLCAodCB8IDApID09IChnIHwgMCkpKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIGZvciAoOyBsID0gR1tpID4+IDJdLCBHW2kgKyA0ID4+IDJdID0gVyhXKGwgKyBHW2kgKyA4ID4+IDJdKSAqIFcoMC44ODI5MTEwODYwODI0NTg1KSkgKyBHW2kgKyA0ID4+IDJdLCB0ID0gaSAtIDQgfCAwLCBHW3QgPj4gMl0gPSBXKFcobCArIEdbaSAtIDggPj4gMl0pICogVygwLjg4MjkxMTA4NjA4MjQ1ODUpKSArIEdbdCA+PiAyXSwgaSA9IGkgKyAxNiB8IDAsIG4gPSBuICsgMiB8IDAsIChnIHwgMCkgIT0gKG4gfCAwKTsgKQogICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHkgfHwgKHQgPSBpIC0gNCB8IDAsIGwgPSBHW2kgLSA4ID4+IDJdLCBHW3QgPj4gMl0gPSBXKFcobCArIGwpICogVygwLjg4MjkxMTA4NjA4MjQ1ODUpKSArIEdbdCA+PiAyXSk7CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIGlmICghaCkKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICBpZiAoR1t1ID4+IDJdID0gVyhXKEdbQiA+PiAyXSArIEdbdSArIDQgPj4gMl0pICogVygwLjQ0MzUwNjg2NjY5MzQ5NjcpKSArIEdbdSA+PiAyXSwgayA9IHUgKyAxMiB8IDAsIGkgPSAxLCBoID4+PiAwID4gNCkgewogICAgICAgICAgICAgICAgICAgIGZvciAoOyBsID0gR1trID4+IDJdLCBvID0gR1trICsgOCA+PiAyXSwgR1trICsgNCA+PiAyXSA9IFcoVyhsICsgbykgKiBXKDAuNDQzNTA2ODY2NjkzNDk2NykpICsgR1trICsgNCA+PiAyXSwgdiA9IG8sIG8gPSBHW2sgKyAxNiA+PiAyXSwgR1trICsgMTIgPj4gMl0gPSBXKFcodiArIG8pICogVygwLjQ0MzUwNjg2NjY5MzQ5NjcpKSArIEdbayArIDEyID4+IDJdLCBHW2sgKyAyMCA+PiAyXSA9IFcoVyhvICsgR1trICsgMjQgPj4gMl0pICogVygwLjQ0MzUwNjg2NjY5MzQ5NjcpKSArIEdbayArIDIwID4+IDJdLCB0ID0gayAtIDQgfCAwLCBHW3QgPj4gMl0gPSBXKFcobCArIEdbayAtIDggPj4gMl0pICogVygwLjQ0MzUwNjg2NjY5MzQ5NjcpKSArIEdbdCA+PiAyXSwgayA9IGsgKyAzMiB8IDAsIHQgPSBpICsgNyB8IDAsIGkgPSBpICsgNCB8IDAsIHQgPj4+IDAgPCBoID4+PiAwOyApCiAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgaSA9IChoIC0gNSAmIC00KSArIDUgfCAwOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChpID4+PiAwID49IGggPj4+IDAgfHwgKHQgPSBpICsgMSB8IDAsIGggLSBpICYgMSAmJiAoaSA9IGsgLSA0IHwgMCwgR1tpID4+IDJdID0gVyhXKEdbayAtIDggPj4gMl0gKyBHW2sgPj4gMl0pICogVygwLjQ0MzUwNjg2NjY5MzQ5NjcpKSArIEdbaSA+PiAyXSwgayA9IGsgKyA4IHwgMCwgaSA9IHQpLCAodCB8IDApID09IChoIHwgMCkpKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIGZvciAoOyBsID0gR1trID4+IDJdLCBHW2sgKyA0ID4+IDJdID0gVyhXKGwgKyBHW2sgKyA4ID4+IDJdKSAqIFcoMC40NDM1MDY4NjY2OTM0OTY3KSkgKyBHW2sgKyA0ID4+IDJdLCB0ID0gayAtIDQgfCAwLCBHW3QgPj4gMl0gPSBXKFcobCArIEdbayAtIDggPj4gMl0pICogVygwLjQ0MzUwNjg2NjY5MzQ5NjcpKSArIEdbdCA+PiAyXSwgayA9IGsgKyAxNiB8IDAsIGkgPSBpICsgMiB8IDAsIChoIHwgMCkgIT0gKGkgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGEgfHwgKGkgPSBrIC0gNCB8IDAsIGwgPSBHW2sgLSA4ID4+IDJdLCBHW2kgPj4gMl0gPSBXKFcobCArIGwpICogVygwLjQ0MzUwNjg2NjY5MzQ5NjcpKSArIEdbaSA+PiAyXSksIG4gPSBzID4+PiAwIDwgdyA+Pj4gMCA/IHMgOiB3OwogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgazogewogICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICBBOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrID0gMCwgbiA+Pj4gMCA8PSAzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBjOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gYzsgR1tpID4+IDJdID0gR1tpID4+IDJdICogVygwLjgxMjg5MzA5MjYzMjI5MzcpLCBHW2kgKyA0ID4+IDJdID0gR1tpICsgNCA+PiAyXSAqIFcoMS4yMzAxNzQwNjQ2MzYyMzA1KSwgR1tpICsgOCA+PiAyXSA9IEdbaSArIDggPj4gMl0gKiBXKDAuODEyODkzMDkyNjMyMjkzNyksIEdbaSArIDEyID4+IDJdID0gR1tpICsgMTIgPj4gMl0gKiBXKDEuMjMwMTc0MDY0NjM2MjMwNSksIEdbaSArIDE2ID4+IDJdID0gR1tpICsgMTYgPj4gMl0gKiBXKDAuODEyODkzMDkyNjMyMjkzNyksIEdbaSArIDIwID4+IDJdID0gR1tpICsgMjAgPj4gMl0gKiBXKDEuMjMwMTc0MDY0NjM2MjMwNSksIEdbaSArIDI0ID4+IDJdID0gR1tpICsgMjQgPj4gMl0gKiBXKDAuODEyODkzMDkyNjMyMjkzNyksIEdbaSArIDI4ID4+IDJdID0gR1tpICsgMjggPj4gMl0gKiBXKDEuMjMwMTc0MDY0NjM2MjMwNSksIGkgPSBpICsgMzIgfCAwLCB0ID0gayArIDcgfCAwLCBrID0gayArIDQgfCAwLCBuID4+PiAwID4gdCA+Pj4gMDsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICBsOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA+Pj4gMCA8PSAzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBjOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gYzsgR1tpID4+IDJdID0gR1tpID4+IDJdICogVygxLjIzMDE3NDA2NDYzNjIzMDUpLCBHW2kgKyA0ID4+IDJdID0gR1tpICsgNCA+PiAyXSAqIFcoMC44MTI4OTMwOTI2MzIyOTM3KSwgR1tpICsgOCA+PiAyXSA9IEdbaSArIDggPj4gMl0gKiBXKDEuMjMwMTc0MDY0NjM2MjMwNSksIEdbaSArIDEyID4+IDJdID0gR1tpICsgMTIgPj4gMl0gKiBXKDAuODEyODkzMDkyNjMyMjkzNyksIEdbaSArIDE2ID4+IDJdID0gR1tpICsgMTYgPj4gMl0gKiBXKDEuMjMwMTc0MDY0NjM2MjMwNSksIEdbaSArIDIwID4+IDJdID0gR1tpICsgMjAgPj4gMl0gKiBXKDAuODEyODkzMDkyNjMyMjkzNyksIEdbaSArIDI0ID4+IDJdID0gR1tpICsgMjQgPj4gMl0gKiBXKDEuMjMwMTc0MDY0NjM2MjMwNSksIEdbaSArIDI4ID4+IDJdID0gR1tpICsgMjggPj4gMl0gKiBXKDAuODEyODkzMDkyNjMyMjkzNyksIGkgPSBpICsgMzIgfCAwLCB0ID0gayArIDcgfCAwLCBrID0gayArIDQgfCAwLCBuID4+PiAwID4gdCA+Pj4gMDsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gbiAmIDIxNDc0ODM2NDQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrID4+PiAwIDwgbiA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZyA9IG4gJiAzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoYSA9IDAsIHQgPSBrOyBHW2kgPj4gMl0gPSBHW2kgPj4gMl0gKiBXKDEuMjMwMTc0MDY0NjM2MjMwNSksIEdbaSArIDQgPj4gMl0gPSBHW2kgKyA0ID4+IDJdICogVygwLjgxMjg5MzA5MjYzMjI5MzcpLCB0ID0gdCArIDEgfCAwLCBpID0gaSArIDggfCAwLCBhID0gYSArIDEgfCAwLCAoZyB8IDApICE9IChhIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoayAtIG4gPj4+IDAgPD0gNDI5NDk2NzI5MikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IEdbaSA+PiAyXSA9IEdbaSA+PiAyXSAqIFcoMS4yMzAxNzQwNjQ2MzYyMzA1KSwgR1tpICsgNCA+PiAyXSA9IEdbaSArIDQgPj4gMl0gKiBXKDAuODEyODkzMDkyNjMyMjkzNyksIEdbaSArIDggPj4gMl0gPSBHW2kgKyA4ID4+IDJdICogVygxLjIzMDE3NDA2NDYzNjIzMDUpLCBHW2kgKyAxMiA+PiAyXSA9IEdbaSArIDEyID4+IDJdICogVygwLjgxMjg5MzA5MjYzMjI5MzcpLCBHW2kgKyAxNiA+PiAyXSA9IEdbaSArIDE2ID4+IDJdICogVygxLjIzMDE3NDA2NDYzNjIzMDUpLCBHW2kgKyAyMCA+PiAyXSA9IEdbaSArIDIwID4+IDJdICogVygwLjgxMjg5MzA5MjYzMjI5MzcpLCBHW2kgKyAyNCA+PiAyXSA9IEdbaSArIDI0ID4+IDJdICogVygxLjIzMDE3NDA2NDYzNjIzMDUpLCBHW2kgKyAyOCA+PiAyXSA9IEdbaSArIDI4ID4+IDJdICogVygwLjgxMjg5MzA5MjYzMjI5MzcpLCBpID0gaSArIDMyIHwgMCwgdCA9IHQgKyA0IHwgMCwgKG4gfCAwKSAhPSAodCB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgayA9IG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrID4+PiAwIDwgdyA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgR1tpID4+IDJdID0gR1tpID4+IDJdICogVygxLjIzMDE3NDA2NDYzNjIzMDUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPj4+IDAgPj0gcyA+Pj4gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgR1tpICsgNCA+PiAyXSA9IEdbaSArIDQgPj4gMl0gKiBXKDAuODEyODkzMDkyNjMyMjkzNyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBrID0gbiAmIDIxNDc0ODM2NDQ7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBpZiAoayA+Pj4gMCA8IG4gPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZyA9IG4gJiAzOwogICAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoYSA9IDAsIHQgPSBrOyBHW2kgPj4gMl0gPSBHW2kgPj4gMl0gKiBXKDAuODEyODkzMDkyNjMyMjkzNyksIEdbaSArIDQgPj4gMl0gPSBHW2kgKyA0ID4+IDJdICogVygxLjIzMDE3NDA2NDYzNjIzMDUpLCB0ID0gdCArIDEgfCAwLCBpID0gaSArIDggfCAwLCBhID0gYSArIDEgfCAwLCAoZyB8IDApICE9IChhIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoayAtIG4gPj4+IDAgPD0gNDI5NDk2NzI5MikKICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgR1tpID4+IDJdID0gR1tpID4+IDJdICogVygwLjgxMjg5MzA5MjYzMjI5MzcpLCBHW2kgKyA0ID4+IDJdID0gR1tpICsgNCA+PiAyXSAqIFcoMS4yMzAxNzQwNjQ2MzYyMzA1KSwgR1tpICsgOCA+PiAyXSA9IEdbaSArIDggPj4gMl0gKiBXKDAuODEyODkzMDkyNjMyMjkzNyksIEdbaSArIDEyID4+IDJdID0gR1tpICsgMTIgPj4gMl0gKiBXKDEuMjMwMTc0MDY0NjM2MjMwNSksIEdbaSArIDE2ID4+IDJdID0gR1tpICsgMTYgPj4gMl0gKiBXKDAuODEyODkzMDkyNjMyMjkzNyksIEdbaSArIDIwID4+IDJdID0gR1tpICsgMjAgPj4gMl0gKiBXKDEuMjMwMTc0MDY0NjM2MjMwNSksIEdbaSArIDI0ID4+IDJdID0gR1tpICsgMjQgPj4gMl0gKiBXKDAuODEyODkzMDkyNjMyMjkzNyksIEdbaSArIDI4ID4+IDJdID0gR1tpICsgMjggPj4gMl0gKiBXKDEuMjMwMTc0MDY0NjM2MjMwNSksIGkgPSBpICsgMzIgfCAwLCB0ID0gdCArIDQgfCAwLCAobiB8IDApICE9ICh0IHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgayA9IG47CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBpZiAoayA+Pj4gMCA8IHMgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgR1tpID4+IDJdID0gR1tpID4+IDJdICogVygwLjgxMjg5MzA5MjYzMjI5MzcpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPj4+IDAgPj0gdyA+Pj4gMCkKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgIEdbaSArIDQgPj4gMl0gPSBHW2kgKyA0ID4+IDJdICogVygxLjIzMDE3NDA2NDYzNjIzMDUpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAobSA+Pj4gMCA8IDIpCiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIHQgPSBzICYgNzsKICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgIGlmIChzIC0gMSA+Pj4gMCA8IDcpIHsKICAgICAgICAgICAgICAgICAgICAgIGkgPSBBOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZm9yIChuID0gcyAmIDIxNDc0ODM2NDAsIGsgPSAwLCBpID0gQTsgZVtpID4+IDJdID0gZVt1ID4+IDJdLCBlW2kgKyA0ID4+IDJdID0gZVt1ICsgOCA+PiAyXSwgZVtpICsgOCA+PiAyXSA9IGVbdSArIDE2ID4+IDJdLCBlW2kgKyAxMiA+PiAyXSA9IGVbdSArIDI0ID4+IDJdLCBlW2kgKyAxNiA+PiAyXSA9IGVbdSArIDMyID4+IDJdLCBlW2kgKyAyMCA+PiAyXSA9IGVbdSArIDQwID4+IDJdLCBlW2kgKyAyNCA+PiAyXSA9IGVbdSArIDQ4ID4+IDJdLCBlW2kgKyAyOCA+PiAyXSA9IGVbdSArIDU2ID4+IDJdLCB1ID0gdSAtIC02NCB8IDAsIGkgPSBpICsgMzIgfCAwLCBrID0gayArIDggfCAwLCAobiB8IDApICE9IChrIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoIXQpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgZm9yIChrID0gMDsgZVtpID4+IDJdID0gZVt1ID4+IDJdLCB1ID0gdSArIDggfCAwLCBpID0gaSArIDQgfCAwLCBrID0gayArIDEgfCAwLCAodCB8IDApICE9IChrIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoKHcgfCAwKSA8PSAwKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgaWYgKGkgPSAocyA8PCAyKSArIEEgfCAwLCBrID0gKChmID8gMCA6IC00KSArIGMgfCAwKSArIDQgfCAwLCBzIC0gciA+Pj4gMCA8PSA0Mjk0OTY3Mjg4KQogICAgICAgICAgICAgICAgICBmb3IgKEEgPSB3ICYgMjE0NzQ4MzY0MCwgbiA9IDA7IGVbaSA+PiAyXSA9IGVbayA+PiAyXSwgZVtpICsgNCA+PiAyXSA9IGVbayArIDggPj4gMl0sIGVbaSArIDggPj4gMl0gPSBlW2sgKyAxNiA+PiAyXSwgZVtpICsgMTIgPj4gMl0gPSBlW2sgKyAyNCA+PiAyXSwgZVtpICsgMTYgPj4gMl0gPSBlW2sgKyAzMiA+PiAyXSwgZVtpICsgMjAgPj4gMl0gPSBlW2sgKyA0MCA+PiAyXSwgZVtpICsgMjQgPj4gMl0gPSBlW2sgKyA0OCA+PiAyXSwgZVtpICsgMjggPj4gMl0gPSBlW2sgKyA1NiA+PiAyXSwgayA9IGsgLSAtNjQgfCAwLCBpID0gaSArIDMyIHwgMCwgbiA9IG4gKyA4IHwgMCwgKEEgfCAwKSAhPSAobiB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgaWYgKEEgPSB3ICYgNywgIUEpCiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICBmb3IgKG4gPSAwOyBlW2kgPj4gMl0gPSBlW2sgPj4gMl0sIGsgPSBrICsgOCB8IDAsIGkgPSBpICsgNCB8IDAsIG4gPSBuICsgMSB8IDAsIChBIHwgMCkgIT0gKG4gfCAwKTsgKQogICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIEc0KEEsIGksIHIsIGYsIGssIHQsIG4pIHsKICAgICAgICAgICAgICB2YXIgbCA9IDAsIGEgPSAwLCB1ID0gMCwgbyA9IDAsIGcgPSAwLCBoID0gMDsKICAgICAgICAgICAgICBhID0gMzEyMzI7CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgazogewogICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICBBOgogICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobCA9IChlW2kgKyA3NiA+PiAyXSArIFoociwgNTY0NCkgfCAwKSArIFooZiwgMTQ4KSB8IDAsIGVbbCArIDQ2MCA+PiAyXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGEgPSAzMTI5MjsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGEgPSAzMTI0NDsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGEgPSAzMTI1NjsKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGEgPSAzMTI2ODsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGEgPSAzMTI4MDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgbyA9IGEgKyA0IHwgMCwgYSA9IFooZiwgMjQwKSArIEEgfCAwLCBlW2EgKyA0NCA+PiAyXSA9IDEsIGcgPSBlW2wgKyA0NjAgPj4gMl0sIGVbYSArIDg0ID4+IDJdID0gZzsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIGlmICghKEZbaSArIDEwMCB8IDBdICYgMSkpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgaWYgKEEgPSBHMltpID4+IDFdLCAoQSAtIDMgJiA2NTUzNSkgPj4+IDAgPCA0KQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIGlmIChBID4+PiAwID49IDEwMjQpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoKG4gfCAwKSA9PSAxKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICBpZiAoQSA+Pj4gMCA+PSAyNDYwKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmICgobiB8IDApID09IDEpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVbYSArIDQ4ID4+IDJdID0gZVtsICsgNDk2ID4+IDJdLCBlW2EgKyA2MCA+PiAyXSA9IGVbbCArIDUxMiA+PiAyXSwgZVthICsgNTIgPj4gMl0gPSBlW2wgKyA1MDAgPj4gMl0sIGVbYSArIDY0ID4+IDJdID0gZVtsICsgNTE2ID4+IDJdLCBlW2EgKyA2OCA+PiAyXSA9IGVbbCArIDQ5MiA+PiAyXSwgZVthICsgNTYgPj4gMl0gPSBlW2wgKyA1MDggPj4gMl0sIGVbYSArIDcyID4+IDJdID0gZVtsICsgNTA0ID4+IDJdLCBlW2EgKyA3NiA+PiAyXSA9IGVbbCArIDUyMCA+PiAyXSwgZVthICsgMTAwID4+IDJdID0gZVtsICsgNTI0ID4+IDJdLCBlW2EgKyAxMDggPj4gMl0gPSBlW2wgKyA1MzIgPj4gMl0sIGVbYSArIDEwNCA+PiAyXSA9IGVbbCArIDUyOCA+PiAyXSwgZVthICsgMTEyID4+IDJdID0gZVtsICsgNTM2ID4+IDJdOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoKHQgfCAwKSA8PSAyKQogICAgICAgICAgICAgICAgZm9yIChuID0gdDsgOyApIHsKICAgICAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgazogewogICAgICAgICAgICAgICAgICAgICAgICAgIGY6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG4gPSBuICsgMSB8IDAsIElbbyArIG4gfCAwXSAtIDY3IHwgMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE1OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgZVthICsgNDggPj4gMl0gPSBlW2wgKyA0OTYgPj4gMl0sIGVbYSArIDYwID4+IDJdID0gZVtsICsgNTEyID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZVthICsgNTIgPj4gMl0gPSBlW2wgKyA1MDAgPj4gMl0sIGVbYSArIDY0ID4+IDJdID0gZVtsICsgNTE2ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgZVthICsgNjggPj4gMl0gPSBlW2wgKyA0OTIgPj4gMl0sIGVbYSArIDU2ID4+IDJdID0gZVtsICsgNTA4ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKGcgPj4+IDAgPD0gMSkgewogICAgICAgICAgICAgICAgICAgICAgZVthICsgNzIgPj4gMl0gPSBlW2wgKyA1MDQgPj4gMl0sIGVbYSArIDc2ID4+IDJdID0gZVtsICsgNTIwID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZVthICsgMTAwID4+IDJdID0gZVtsICsgNTI0ID4+IDJdLCBlW2EgKyAxMDggPj4gMl0gPSBlW2wgKyA1MzIgPj4gMl0sIGVbYSArIDEwNCA+PiAyXSA9IGVbbCArIDUyOCA+PiAyXSwgZVthICsgMTEyID4+IDJdID0gZVtsICsgNTM2ID4+IDJdOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmICgobiB8IDApID09IDMpCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKGspIHsKICAgICAgICAgICAgICAgICAgaWYgKCh0IHwgMCkgPCAwKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIGZvciAoZiA9IFooZiwgMTQ4KSwgaCA9IFoociwgNTY0NCksIG4gPSAxOyA7ICkgewogICAgICAgICAgICAgICAgICAgIEEgPSB0OwogICAgICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgazogewogICAgICAgICAgICAgICAgICAgICAgICAgIGY6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEE6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodCA9IHQgKyBvIHwgMCwgSVt0IHwgMF0gLSA2NyB8IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgOToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxNToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBlW2wgKyA1NTYgPj4gMl0sIGVbYSArIDY0ID4+IDJdID0gciwgZVthICsgNTIgPj4gMl0gPSByIC0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBlW2wgKyA1NTIgPj4gMl0sIGVbYSArIDYwID4+IDJdID0gciwgZVthICsgNDggPj4gMl0gPSByIC0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBlW2wgKyA1NDggPj4gMl0sIGVbYSArIDU2ID4+IDJdID0gciwgZVthICsgNjggPj4gMl0gPSByIC0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlmIChnID4+PiAwIDw9IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgciA9IGVbbCArIDU2MCA+PiAyXSwgZVthICsgNzYgPj4gMl0gPSByLCBlW2EgKyA3MiA+PiAyXSA9IHIgLSAxOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgciA9IGVbbCArIDU0MCA+PiAyXSwgayA9IGVbbCArIDU2NCA+PiAyXSwgZVthICsgMTA0ID4+IDJdID0gaywgZVthICsgMTAwID4+IDJdID0gayAtIChyICsgKChrID4+PiAwKSAlIChyID4+PiAwKSB8IDApIHwgMCksIHIgPSBlW2wgKyA1NDQgPj4gMl0sIGsgPSBlW2wgKyA1NjggPj4gMl0sIGVbYSArIDExMiA+PiAyXSA9IGssIGVbYSArIDEwOCA+PiAyXSA9IGsgLSAociArICgoayA+Pj4gMCkgJSAociA+Pj4gMCkgfCAwKSB8IDApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByID0gKG4gfCAwKSAhPSAxLCBuID0gMDsKICAgICAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAocikKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgIG4gPSAxOwogICAgICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgICAgICBrOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoSVt0IHwgMF0gLSA2NyB8IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxNToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9IGVbbCArIDU1MiA+PiAyXSwgKHIgfCAwKSAhPSBlW2wgKyA1MTIgPj4gMl0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChyID0gZiArIChlW2kgKyA3NiA+PiAyXSArIGggfCAwKSB8IDAsIGsgPSBBOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgayA9IGsgLSAxIHwgMCwgdCA9IGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGw6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoSVt0ICsgbyB8IDBdIC0gNjcgfCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxNToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW3IgKyA1NTIgPj4gMl0gIT0gZVtyICsgNTEyID4+IDJdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtyICsgNTQ4ID4+IDJdID09IGVbciArIDUwOCA+PiAyXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkW3IgKyA0NjAgPj4gMl0gPD0gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoayA9IHQsIGVbciArIDU2MCA+PiAyXSA9PSBlW3IgKyA1MjAgPj4gMl0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW3IgKyA1NjQgPj4gMl0gIT0gZVtyICsgNTI4ID4+IDJdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPSB0LCBlW3IgKyA1NjggPj4gMl0gPT0gZVtyICsgNTM2ID4+IDJdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPSAwLCB1ID0gKHQgfCAwKSA+IDAsIHQgPSB0IC0gMSB8IDAsIHUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbciArIDU1NiA+PiAyXSA9PSBlW3IgKyA1MTYgPj4gMl0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBlW2wgKyA0OTYgPj4gMl0sIGVbYSArIDQ4ID4+IDJdID0gciwgbiA9IDEsIHIgPSByICsgMSB8IDAsIGVbYSArIDYwID4+IDJdID0gciwgZVtsICsgNTUyID4+IDJdID0gcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID0gMCwgISgoayB8IDApID4gMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDEzOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnID4+PiAwIDw9IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSBlW2wgKyA1NjAgPj4gMl0sIChyIHwgMCkgIT0gZVtsICsgNTIwID4+IDJdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHIgPSBmICsgKGVbaSArIDc2ID4+IDJdICsgaCB8IDApIHwgMCwgayA9IEE7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgayA9IGsgLSAxIHwgMCwgdCA9IGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChJW3QgKyBvIHwgMF0gLSA2NyB8IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxNToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtyICsgNTUyID4+IDJdICE9IGVbciArIDUxMiA+PiAyXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA5OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW3IgKyA1NDggPj4gMl0gPT0gZVtyICsgNTA4ID4+IDJdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDEzOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkW3IgKyA0NjAgPj4gMl0gPD0gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPSB0LCBlW3IgKyA1NjAgPj4gMl0gPT0gZVtyICsgNTIwID4+IDJdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbciArIDU2NCA+PiAyXSAhPSBlW3IgKyA1MjggPj4gMl0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrID0gdCwgZVtyICsgNTY4ID4+IDJdID09IGVbciArIDUzNiA+PiAyXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9IDAsIHUgPSAodCB8IDApID4gMCwgdCA9IHQgLSAxIHwgMCwgdSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW3IgKyA1NTYgPj4gMl0gPT0gZVtyICsgNTE2ID4+IDJdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gZVtsICsgNTA0ID4+IDJdLCBlW2EgKyA3MiA+PiAyXSA9IHIsIG4gPSAxLCByID0gciArIDEgfCAwLCBlW2EgKyA3NiA+PiAyXSA9IHIsIGVbbCArIDU2MCA+PiAyXSA9IHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9IDAsICEoKGsgfCAwKSA+IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGw6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSBlW2wgKyA1NjQgPj4gMl0sIHIgPj4+IDAgPj0gZFtsICsgNTI4ID4+IDJdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPSAwLCB0ID0gZVtsICsgNTY4ID4+IDJdLCB0ID4+PiAwIDwgZFtsICsgNTM2ID4+IDJdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAociA9IGYgKyAoZVtpICsgNzYgPj4gMl0gKyBoIHwgMCkgfCAwLCBrID0gQTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBrIC0gMSB8IDAsIHQgPSBrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKElbdCArIG8gfCAwXSAtIDY3IHwgMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtyICsgNTUyID4+IDJdICE9IGVbciArIDUxMiA+PiAyXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA5OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbciArIDU0OCA+PiAyXSA9PSBlW3IgKyA1MDggPj4gMl0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZFtyICsgNDYwID4+IDJdIDw9IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPSB0LCBlW3IgKyA1NjAgPj4gMl0gPT0gZVtyICsgNTIwID4+IDJdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtyICsgNTY0ID4+IDJdICE9IGVbciArIDUyOCA+PiAyXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrID0gdCwgZVtyICsgNTY4ID4+IDJdID09IGVbciArIDUzNiA+PiAyXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1ID0gKHQgfCAwKSA+IDAsIHQgPSB0IC0gMSB8IDAsIHUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbciArIDU1NiA+PiAyXSA9PSBlW3IgKyA1MTYgPj4gMl0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBlW2wgKyA1MzIgPj4gMl0sIG4gPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoKGsgfCAwKSA+IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2EgKyAxMDAgPj4gMl0gPSByLCBrID0gZVtsICsgNTQwID4+IDJdLCByID0gayArIHIgLSAociA+Pj4gMCkgJSAoayA+Pj4gMCkgfCAwLCBlW2EgKyAxMDQgPj4gMl0gPSByLCBlW2wgKyA1NjQgPj4gMl0gPSByOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVthICsgMTA4ID4+IDJdID0gdCwgciA9IGVbbCArIDU0NCA+PiAyXSwgciA9IHIgKyB0IC0gKHQgPj4+IDApICUgKHIgPj4+IDApIHwgMCwgZVthICsgMTEyID4+IDJdID0gciwgZVtsICsgNTY4ID4+IDJdID0gciwgciA9IGVbbCArIDUyNCA+PiAyXSwgZVthICsgMTAwID4+IDJdID0gciwgayA9IGVbbCArIDU0MCA+PiAyXSwgciA9IGsgKyByIC0gKHIgPj4+IDApICUgKGsgPj4+IDApIHwgMCwgZVthICsgMTA0ID4+IDJdID0gciwgZVtsICsgNTY0ID4+IDJdID0gcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbYSArIDcyID4+IDJdID0gciwgciA9IHIgKyAxIHwgMCwgZVthICsgNzYgPj4gMl0gPSByLCBlW2wgKyA1NjAgPj4gMl0gPSByOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgOToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9IGVbbCArIDU0OCA+PiAyXSwgKHIgfCAwKSA9PSBlW2wgKyA1MDggPj4gMl0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAociA9IGYgKyAoZVtpICsgNzYgPj4gMl0gKyBoIHwgMCkgfCAwLCBrID0gQTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgayA9IGsgLSAxIHwgMCwgdCA9IGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKElbdCArIG8gfCAwXSAtIDY3IHwgMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxNToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbciArIDU1MiA+PiAyXSAhPSBlW3IgKyA1MTIgPj4gMl0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgOToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbciArIDU0OCA+PiAyXSA9PSBlW3IgKyA1MDggPj4gMl0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkW3IgKyA0NjAgPj4gMl0gPD0gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrID0gdCwgZVtyICsgNTYwID4+IDJdID09IGVbciArIDUyMCA+PiAyXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtyICsgNTY0ID4+IDJdICE9IGVbciArIDUyOCA+PiAyXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoayA9IHQsIGVbciArIDU2OCA+PiAyXSA9PSBlW3IgKyA1MzYgPj4gMl0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID0gMCwgdSA9ICh0IHwgMCkgPiAwLCB0ID0gdCAtIDEgfCAwLCB1KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtyICsgNTU2ID4+IDJdID09IGVbciArIDUxNiA+PiAyXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IGVbbCArIDQ5MiA+PiAyXSwgZVthICsgNjggPj4gMl0gPSByLCBuID0gMSwgciA9IHIgKyAxIHwgMCwgZVthICsgNTYgPj4gMl0gPSByLCBlW2wgKyA1NDggPj4gMl0gPSByOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPSAwLCAhKChrIHwgMCkgPiAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbYSArIDY4ID4+IDJdID0gciwgciA9IHIgKyAxIHwgMCwgZVthICsgNTYgPj4gMl0gPSByLCBlW2wgKyA1NDggPj4gMl0gPSByOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSBlW2wgKyA1NTYgPj4gMl0sIChyIHwgMCkgPT0gZVtsICsgNTE2ID4+IDJdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHIgPSBmICsgKGVbaSArIDc2ID4+IDJdICsgaCB8IDApIHwgMCwgayA9IEE7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBrIC0gMSB8IDAsIHQgPSBrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGw6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChJW3QgKyBvIHwgMF0gLSA2NyB8IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW3IgKyA1NTIgPj4gMl0gIT0gZVtyICsgNTEyID4+IDJdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW3IgKyA1NDggPj4gMl0gPT0gZVtyICsgNTA4ID4+IDJdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDEzOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZFtyICsgNDYwID4+IDJdIDw9IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoayA9IHQsIGVbciArIDU2MCA+PiAyXSA9PSBlW3IgKyA1MjAgPj4gMl0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbciArIDU2NCA+PiAyXSAhPSBlW3IgKyA1MjggPj4gMl0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPSB0LCBlW3IgKyA1NjggPj4gMl0gPT0gZVtyICsgNTM2ID4+IDJdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9IDAsIHUgPSAodCB8IDApID4gMCwgdCA9IHQgLSAxIHwgMCwgdSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbciArIDU1NiA+PiAyXSA9PSBlW3IgKyA1MTYgPj4gMl0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBlW2wgKyA1MDAgPj4gMl0sIGVbYSArIDUyID4+IDJdID0gciwgbiA9IDEsIHIgPSByICsgMSB8IDAsIGVbYSArIDY0ID4+IDJdID0gciwgZVtsICsgNTU2ID4+IDJdID0gcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID0gMCwgISgoayB8IDApID4gMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBlW2EgKyA1MiA+PiAyXSA9IHIsIHIgPSByICsgMSB8IDAsIGVbYSArIDY0ID4+IDJdID0gciwgZVtsICsgNTU2ID4+IDJdID0gcjsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVbYSArIDQ4ID4+IDJdID0gciwgciA9IHIgKyAxIHwgMCwgZVthICsgNjAgPj4gMl0gPSByLCBlW2wgKyA1NTIgPj4gMl0gPSByOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgbiA9IDA7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICh0ID0gQSAtIDEgfCAwLCAhKChBIHwgMCkgPiAwKSkKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoKHQgfCAwKSA8IDApCiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgQSA9IHQ7CiAgICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgICByOgogICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChJW3QgKyBvIHwgMF0gLSA2NyB8IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlW2wgKyA1MDAgPj4gMl0sIGVbYSArIDUyID4+IDJdID0gaSwgaSA9IGkgKyAxIHwgMCwgZVthICsgNjQgPj4gMl0gPSBpLCBlW2wgKyA1NTYgPj4gMl0gPSBpOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVbbCArIDQ5NiA+PiAyXSwgZVthICsgNDggPj4gMl0gPSBpLCBpID0gaSArIDEgfCAwLCBlW2EgKyA2MCA+PiAyXSA9IGksIGVbbCArIDU1MiA+PiAyXSA9IGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA5OgogICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlW2wgKyA0OTIgPj4gMl0sIGVbYSArIDY4ID4+IDJdID0gaSwgaSA9IGkgKyAxIHwgMCwgZVthICsgNTYgPj4gMl0gPSBpLCBlW2wgKyA1NDggPj4gMl0gPSBpOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChnID4+PiAwIDw9IDEpIHsKICAgICAgICAgICAgICAgICAgICAgIGkgPSBlW2wgKyA1MDQgPj4gMl0sIGVbYSArIDcyID4+IDJdID0gaSwgaSA9IGkgKyAxIHwgMCwgZVthICsgNzYgPj4gMl0gPSBpLCBlW2wgKyA1NjAgPj4gMl0gPSBpOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaSA9IGVbbCArIDUzMiA+PiAyXSwgciA9IGVbbCArIDUyNCA+PiAyXSwgZVthICsgMTAwID4+IDJdID0gciwgZiA9IGVbbCArIDU0MCA+PiAyXSwgZVthICsgMTA4ID4+IDJdID0gaSwgciA9IHIgKyBmIC0gKHIgPj4+IDApICUgKGYgPj4+IDApIHwgMCwgZVthICsgMTA0ID4+IDJdID0gciwgZiA9IGVbbCArIDU0NCA+PiAyXSwgaSA9IGYgKyBpIC0gKGkgPj4+IDApICUgKGYgPj4+IDApIHwgMCwgZVthICsgMTEyID4+IDJdID0gaSwgZVtsICsgNTY4ID4+IDJdID0gaSwgZVtsICsgNTY0ID4+IDJdID0gcjsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAodCA9IEEgLSAxIHwgMCwgISgoQSB8IDApID4gMCkpCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIGpBKEEpIHsKICAgICAgICAgICAgICBBID0gQSB8IDA7CiAgICAgICAgICAgICAgdmFyIGkgPSAwLCByID0gMCwgZiA9IDAsIGsgPSAwLCB0ID0gMCwgbiA9IDAsIGwgPSAwLCBhID0gMCwgdSA9IDAsIG8gPSAwLCBnID0gMCwgaCA9IDAsIHMgPSAwLCB3ID0gMDsKICAgICAgICAgICAgICBhID0gWCAtIDE4NzM2IHwgMCwgWCA9IGEsIG4gPSBJW0EgKyAyOSB8IDBdLCBlW2EgKyAyNCA+PiAyXSA9IDAsIGVbYSArIDE2ID4+IDJdID0gMCwgZVthICsgMjAgPj4gMl0gPSAwLCB0ID0gbiA+Pj4gMCA+IDEgPyAxIDogMjsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAoIW4pCiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIGlmIChpID0gZVthICsgMjQgPj4gMl0sIHIgPSBlW2EgKyAyMCA+PiAyXSwgbiA+Pj4gMCA8PSAoaSAtIHIgfCAwKSAvIDM2ID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgbiAmJiAoZiA9IFoobiwgMzYpIC0gMzYgfCAwLCBmID0gKGYgLSAoKGYgPj4+IDApICUgMzYgfCAwKSB8IDApICsgMzYgfCAwLCByID0gZDIociwgMCwgZikgKyBmIHwgMCksIGVbYSArIDIwID4+IDJdID0gcjsKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICBpZiAocyA9IGVbYSArIDE2ID4+IDJdLCBsID0gciAtIHMgfCAwLCB1ID0gbiArICgobCB8IDApIC8gMzYgfCAwKSB8IDAsIHUgPj4+IDAgPCAxMTkzMDQ2NDgpIHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChmID0gKGkgLSBzIHwgMCkgLyAzNiB8IDAsIGkgPSBmIDw8IDEsIHUgPSBmID4+PiAwID49IDU5NjUyMzIzID8gMTE5MzA0NjQ3IDogaSA+Pj4gMCA+IHUgPj4+IDAgPyBpIDogdSwgdSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodSA+Pj4gMCA+PSAxMTkzMDQ2NDgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgbyA9IF8yKFoodSwgMzYpKTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gbCArIG8gfCAwLCBpID0gWihuLCAzNikgLSAzNiB8IDAsIGkgPSAoaSAtICgoaSA+Pj4gMCkgJSAzNiB8IDApIHwgMCkgKyAzNiB8IDAsIGYgPSBkMihsLCAwLCBpKSArIGkgfCAwLCAociB8IDApICE9IChzIHwgMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IHIgPSByIC0gMzYgfCAwLCBpID0gZVtyICsgNCA+PiAyXSwgbCA9IGwgLSAzNiB8IDAsIGVbbCA+PiAyXSA9IGVbciA+PiAyXSwgZVtsICsgNCA+PiAyXSA9IGksIGVbbCArIDMyID4+IDJdID0gZVtyICsgMzIgPj4gMl0sIGkgPSBlW3IgKyAyOCA+PiAyXSwgZVtsICsgMjQgPj4gMl0gPSBlW3IgKyAyNCA+PiAyXSwgZVtsICsgMjggPj4gMl0gPSBpLCBpID0gZVtyICsgMjAgPj4gMl0sIGVbbCArIDE2ID4+IDJdID0gZVtyICsgMTYgPj4gMl0sIGVbbCArIDIwID4+IDJdID0gaSwgaSA9IGVbciArIDEyID4+IDJdLCBlW2wgKyA4ID4+IDJdID0gZVtyICsgOCA+PiAyXSwgZVtsICsgMTIgPj4gMl0gPSBpLCAociB8IDApICE9IChzIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBlW2EgKyAxNiA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGVbYSArIDI0ID4+IDJdID0gWih1LCAzNikgKyBvLCBlW2EgKyAyMCA+PiAyXSA9IGYsIGVbYSArIDE2ID4+IDJdID0gbCwgcyAmJiBSKHMpOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcGkoKSwgVTAoKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBacigpLCBVMCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHIgPSBlW2EgKyAxNiA+PiAyXSwgaSA9IElbQSArIDI5IHwgMF0sICFpKSB7CiAgICAgICAgICAgICAgICAgIGkgPSAwOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKG8gPSBHMltBICsgMjYgPj4gMV0sIHUgPSBHMltBICsgMjQgPj4gMV0sIGwgPSBJW0EgKyAzMCB8IDBdLCBnID0gSVtBICsgMjggfCAwXSwgKGkgfCAwKSAhPSAxKQogICAgICAgICAgICAgICAgICBmb3IgKGYgPSBpICYgMjU0OyBuID0gWihoLCAzNikgKyByIHwgMCwgZVtuICsgMzIgPj4gMl0gPSBsLCBlW24gKyAyOCA+PiAyXSA9IGcsIGVbbiArIDI0ID4+IDJdID0gZywgZVtuICsgMTIgPj4gMl0gPSBvLCBlW24gKyA4ID4+IDJdID0gdSwgZVtuID4+IDJdID0gMSwgZVtuICsgNCA+PiAyXSA9IDEsIG4gPSBaKGggfCAxLCAzNikgKyByIHwgMCwgZVtuICsgMzIgPj4gMl0gPSBsLCBlW24gKyAyOCA+PiAyXSA9IGcsIGVbbiArIDI0ID4+IDJdID0gZywgZVtuICsgMTIgPj4gMl0gPSBvLCBlW24gKyA4ID4+IDJdID0gdSwgZVtuID4+IDJdID0gMSwgZVtuICsgNCA+PiAyXSA9IDEsIGggPSBoICsgMiB8IDAsIGsgPSBrICsgMiB8IDAsIChmIHwgMCkgIT0gKGsgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgIGlmICghKGkgJiAxKSkKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIGYgPSBaKGgsIDM2KSArIHIgfCAwLCBlW2YgKyAzMiA+PiAyXSA9IGwsIGVbZiArIDI4ID4+IDJdID0gZywgZVtmICsgMjQgPj4gMl0gPSBnLCBlW2YgKyAxMiA+PiAyXSA9IG8sIGVbZiArIDggPj4gMl0gPSB1LCBlW2YgPj4gMl0gPSAxLCBlW2YgKyA0ID4+IDJdID0gMTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgbyA9IDA7CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICBpZiAoayA9IEUyKDEsIDM2KSwgaykgewogICAgICAgICAgICAgICAgICAgIGlmIChlW2sgKyAxNiA+PiAyXSA9IGksIGVbayArIDIwID4+IDJdID0gdCwgZiA9IEUyKGksIDUyKSwgZVtrICsgMjQgPj4gMl0gPSBmLCAhZikKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgaWYgKGkpCiAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGYgPSBlW2sgKyAyNCA+PiAyXSwgbiA9IGYgKyBaKG8sIDUyKSB8IDAsIHUgPSBaKG8sIDM2KSArIHIgfCAwLCBlW24gPj4gMl0gPSBlW3UgPj4gMl0sIGVbbiArIDQgPj4gMl0gPSBlW3UgKyA0ID4+IDJdLCBsID0gZVt1ICsgOCA+PiAyXSwgZVtuICsgOCA+PiAyXSA9IGwsIHQgPSBlW3UgKyAxMiA+PiAyXSwgZVtuICsgMTIgPj4gMl0gPSB0LCBlW24gKyAxNiA+PiAyXSA9IGVbdSArIDE2ID4+IDJdLCBlW24gKyAyMCA+PiAyXSA9IGVbdSArIDIwID4+IDJdLCBlW24gKyAyNCA+PiAyXSA9IGVbdSArIDI0ID4+IDJdLCBlW24gKyAzMiA+PiAyXSA9IGVbdSArIDMyID4+IDJdLCAhKCF0IHwgbCA+Pj4gMCA8PSA0Mjk0OTY3Mjk1IC8gKHQgPj4+IDApID4+PiAyID4+PiAwKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0gZVtrICsgMTYgPj4gMl0sIHIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGYgPSBlWyhlW2sgKyAyNCA+PiAyXSArIFooaSwgNTIpIHwgMCkgKyA0NCA+PiAyXSwgZiAmJiAoUihmKSwgciA9IGVbayArIDE2ID4+IDJdKSwgaSA9IGkgKyAxIHwgMCwgciA+Pj4gMCA+IGkgPj4+IDA7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IGVbayArIDI0ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBSKGYpOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGYgPSBQMChaKHQsIGwpIDw8IDIpLCBlW24gKyA0NCA+PiAyXSA9IGYsICFmKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSBlW2sgKyAyNCA+PiAyXSwgIWkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0gZVtrICsgMTYgPj4gMl0sIHIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGYgPSBlWyhlW2sgKyAyNCA+PiAyXSArIFooaSwgNTIpIHwgMCkgKyA0NCA+PiAyXSwgZiAmJiAoUihmKSwgciA9IGVbayArIDE2ID4+IDJdKSwgaSA9IGkgKyAxIHwgMCwgciA+Pj4gMCA+IGkgPj4+IDA7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVbayArIDI0ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBSKGkpOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGQyKGYsIDAsIFooZVtuICsgOCA+PiAyXSwgZVtuICsgMTIgPj4gMl0pIDw8IDIpLCBvID0gbyArIDEgfCAwLCAobyB8IDApID09IChpIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgIGsgPSAwOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaSA9IGVbayArIDI4ID4+IDJdLCBpICYmIFIoaSksIFIoayksIGsgPSAwOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBsID0gaywgZVtsID4+IDJdID0gZVtBICsgNjggPj4gMl0sIGVbbCArIDQgPj4gMl0gPSBlW0EgKyA3MiA+PiAyXSwgayA9IEcyW0EgKyAyNCA+PiAxXSwgZVtsICsgOCA+PiAyXSA9IGssIGYgPSBHMltBICsgMjYgPj4gMV0sIGVbbCArIDEyID4+IDJdID0gZiwgaSA9IElbQSArIDI4IHwgMF07CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKGkgPj4+IDAgPCA5KSB7CiAgICAgICAgICAgICAgICAgIGlmICh3ID0gSVtBICsgMjkgfCAwXSwgKHcgfCAwKSAhPSAxKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCF3IHx8IChpID0gWihmLCBrKSwgIWkpKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICBmb3IgKG8gPSBlW0EgPj4gMl0sIHUgPSBpICYgMjE0NzQ4MzY0NCwgbiA9IGkgJiAzLCB0ID0gZVtsICsgMjQgPj4gMl0sIHMgPSAwLCBrID0gaSA+Pj4gMCA8IDQ7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoaCA9IG8gKyBzIHwgMCwgZyA9IGVbKHQgKyBaKHMsIDUyKSB8IDApICsgNDQgPj4gMl0sIHIgPSAwLCBpID0gMCwgIWspCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBlW2cgKyAociA8PCAyKSA+PiAyXSA9IElbaCArIFoociwgdykgfCAwXSwgZiA9IHIgfCAxLCBlW2cgKyAoZiA8PCAyKSA+PiAyXSA9IElbaCArIFooZiwgdykgfCAwXSwgZiA9IHIgfCAyLCBlW2cgKyAoZiA8PCAyKSA+PiAyXSA9IElbaCArIFooZiwgdykgfCAwXSwgZiA9IHIgfCAzLCBlW2cgKyAoZiA8PCAyKSA+PiAyXSA9IElbaCArIFooZiwgdykgfCAwXSwgciA9IHIgKyA0IHwgMCwgaSA9IGkgKyA0IHwgMCwgKHUgfCAwKSAhPSAoaSB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSAwLCBuKQogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgZVtnICsgKHIgPDwgMikgPj4gMl0gPSBJW2ggKyBaKHIsIHcpIHwgMF0sIHIgPSByICsgMSB8IDAsIGkgPSBpICsgMSB8IDAsIChuIHwgMCkgIT0gKGkgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgIGlmIChzID0gcyArIDEgfCAwLCAodyB8IDApID09IChzIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChmID0gZVtBID4+IDJdLCB0ID0gZVtBICsgNCA+PiAyXSwgKGYgfCAwKSA9PSAodCB8IDApKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIHIgPSBlW2VbbCArIDI0ID4+IDJdICsgNDQgPj4gMl0sIGsgPSB0IC0gZiAmIDc7CiAgICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgICBpZiAoIWspIHsKICAgICAgICAgICAgICAgICAgICAgIGkgPSBmOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZm9yIChoID0gMCwgaSA9IGY7IGVbciA+PiAyXSA9IElbaSB8IDBdLCByID0gciArIDQgfCAwLCBpID0gaSArIDEgfCAwLCBoID0gaCArIDEgfCAwLCAoayB8IDApICE9IChoIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoZiAtIHQgPj4+IDAgPiA0Mjk0OTY3Mjg4KQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIGZvciAoOyBlW3IgPj4gMl0gPSBJW2kgfCAwXSwgZVtyICsgNCA+PiAyXSA9IElbaSArIDEgfCAwXSwgZVtyICsgOCA+PiAyXSA9IElbaSArIDIgfCAwXSwgZVtyICsgMTIgPj4gMl0gPSBJW2kgKyAzIHwgMF0sIGVbciArIDE2ID4+IDJdID0gSVtpICsgNCB8IDBdLCBlW3IgKyAyMCA+PiAyXSA9IElbaSArIDUgfCAwXSwgZVtyICsgMjQgPj4gMl0gPSBJW2kgKyA2IHwgMF0sIGVbciArIDI4ID4+IDJdID0gSVtpICsgNyB8IDBdLCByID0gciArIDMyIHwgMCwgaSA9IGkgKyA4IHwgMCwgKHQgfCAwKSAhPSAoaSB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGkgPj4+IDAgPiAxNikKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIGlmIChmID0gZVtBICsgNCA+PiAyXSwgciA9IGVbQSA+PiAyXSwgSVtBICsgMzAgfCAwXSA9PSAxKSB7CiAgICAgICAgICAgICAgICAgIGlmICgociB8IDApID09IChmIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgZm9yIChpID0gZVtlW2wgKyAyNCA+PiAyXSArIDQ0ID4+IDJdOyBlW2kgPj4gMl0gPSB1MltyID4+IDFdLCBpID0gaSArIDQgfCAwLCByID0gciArIDIgfCAwLCAoZiB8IDApICE9IChyIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoKHIgfCAwKSA9PSAoZiB8IDApKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgZm9yIChpID0gZVtlW2wgKyAyNCA+PiAyXSArIDQ0ID4+IDJdOyBlW2kgPj4gMl0gPSBHMltyID4+IDFdLCBpID0gaSArIDQgfCAwLCByID0gciArIDIgfCAwLCAoZiB8IDApICE9IChyIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpID0gYSArIDI4IHwgMCwgaSAmJiAoaSA9IGQyKGksIDAsIDE4NzA4KSwgZVtpICsgMTgxOTYgPj4gMl0gPSAtMSwgZVtpICsgMTgyMDAgPj4gMl0gPSAtMSwgZVtpICsgMTgxODggPj4gMl0gPSAxLCBlW2kgKyAxODE5MiA+PiAyXSA9IDEsIGVbaSArIDU2MTIgPj4gMl0gPSAtMSwgZVtpICsgNTYwMCA+PiAyXSA9IDY0LCBlW2kgKyA1NTkyID4+IDJdID0gNiwgZVtpICsgNTU5NiA+PiAyXSA9IDY0LCBlW2kgKyA0Nzg4ID4+IDJdID0gMCwgZVtpICsgMTg2OTIgPj4gMl0gPSAwLCBlW2kgKyAyNCA+PiAyXSA9IDApLCBGW2EgKyAxODcxOCB8IDBdID0gRltBICsgMjkgfCAwXSA+IDEsIGVbYSArIDcyID4+IDJdID0gZVtBICsgNTIgPj4gMl0sIGVbYSArIDU2MjAgPj4gMl0gPSBlW0EgKyAzMiA+PiAyXSArIDEsIGVbYSArIDU2MzYgPj4gMl0gPSBJW0EgKyAzNiB8IDBdIF4gMSwgaSA9IGVbQSArIDQ0ID4+IDJdLCBnID0gZVtBICsgNDAgPj4gMl0sIGsgPSBpIC0gZyA+PiAyLCBlW2EgKyA0ODE2ID4+IDJdID0gazsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAoKGkgfCAwKSA9PSAoZyB8IDApKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgaWYgKGYgPSBrID4+PiAwIDw9IDEgPyAxIDogaywgdSA9IGYgJiAzLCBuID0gYSArIDQ4MjAgfCAwLCBpID0gMCwgciA9IDAsIGsgPj4+IDAgPj0gNCkKICAgICAgICAgICAgICAgICAgZm9yIChrID0gZiAmIC00LCB0ID0gMDsgbyA9IHIgPDwgMiwgR1tvICsgbiA+PiAyXSA9IEdbZyArIG8gPj4gMl0sIGYgPSBvIHwgNCwgR1tmICsgbiA+PiAyXSA9IEdbZiArIGcgPj4gMl0sIGYgPSBvIHwgOCwgR1tmICsgbiA+PiAyXSA9IEdbZiArIGcgPj4gMl0sIGYgPSBvIHwgMTIsIEdbZiArIG4gPj4gMl0gPSBHW2YgKyBnID4+IDJdLCByID0gciArIDQgfCAwLCB0ID0gdCArIDQgfCAwLCAoayB8IDApICE9ICh0IHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICBpZiAoIXUpCiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICBmb3IgKDsgZiA9IHIgPDwgMiwgR1tmICsgbiA+PiAyXSA9IEdbZiArIGcgPj4gMl0sIHIgPSByICsgMSB8IDAsIGkgPSBpICsgMSB8IDAsICh1IHwgMCkgIT0gKGkgfCAwKTsgKQogICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVbYSArIDQ4ID4+IDJdID0gMSwgayA9IEUyKDEsIDk2KSwgaSA9IDA7CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKCFrKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgZVtrICsgNzYgPj4gMl0gPSAwLCBlW2sgKyAxMiA+PiAyXSA9IDIzNywgZVtrICsgNCA+PiAyXSA9IDIzOCwgZVtrICsgOTIgPj4gMl0gPSAyMTQsIGVbayArIDI0ID4+IDJdID0gMjM5LCBlW2sgKyAyMCA+PiAyXSA9IDI0MCwgZVtrICsgMTYgPj4gMl0gPSAyMTIsIGVbayArIDggPj4gMl0gPSAyNDEsIGVbayA+PiAyXSA9IDI0MiwgZiA9IEUyKDEsIDIzMiksIGkgPSAwOwogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICBpZiAoIWYpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgZVtmID4+IDJdID0gMCwgRltmICsgMTg4IHwgMF0gPSBJW2YgKyAxODggfCAwXSAmIDI1MywgaSA9IFUyKDFlMyksIGVbZiArIDUyID4+IDJdID0gaTsKICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgIGlmICghaSB8fCAoZVtmICsgNTYgPj4gMl0gPSAxZTMsIGkgPSBwZSgpLCBlW2YgKyAxOTYgPj4gMl0gPSBpLCAhaSkgfHwgKGkgPSBwZSgpLCBlW2YgKyAxOTIgPj4gMl0gPSBpLCAhaSkpCiAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgIGkgPSAwLCB0ID0gbzYoKTsKICAgICAgICAgICAgICAgICAgICBrOiB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoIXQpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICBpZiAociA9IFE2KCksICFnZSh0LCAyMzc0KSkgewogICAgICAgICAgICAgICAgICAgICAgICBpID0gcjsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gd3IodCksICh0IHwgMCkgPCAwKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgaSA9IHIgPyByIDw8IDEgOiA2NCwgaSA9IChpIHwgMCkgPiAodCB8IDApID8gdCA6IGk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChyID0gV2UoaSksIGVbZiArIDIxMiA+PiAyXSA9IHIsIGkgPSBmLCByKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IFdlKDApLCBlW2YgKyAyMTIgPj4gMl0gPSBpLCAhaSkKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgaSA9IGY7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBzaShmKSwgaSA9IDA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoZVtrICsgNDggPj4gMl0gPSBpLCBpKSB7CiAgICAgICAgICAgICAgICAgIGVbayArIDcyID4+IDJdID0gMTA3LCBlW2sgKyA2NCA+PiAyXSA9IDEwNywgZVtrICsgNjAgPj4gMl0gPSAwLCBlW2sgKyA1MiA+PiAyXSA9IDAsIGVbayArIDU2ID4+IDJdID0gMCwgZVtrICsgNjggPj4gMl0gPSAxMDcsIGkgPSBrOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgUihrKSwgaSA9IDA7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGkgJiYgKGVbaSArIDU2ID4+IDJdID0gMCwgZVtpICsgNjggPj4gMl0gPSA5MCksIGkgJiYgKGVbaSArIDUyID4+IDJdID0gMCwgZVtpICsgNjQgPj4gMl0gPSA5MSksIHIgPSAwLCBmID0gYSArIDI4IHwgMCwgIWkgfCAhZiB8IChlW2kgKyA3NiA+PiAyXSB8ICFsKSB8fCAociA9IG8yW2VbaSArIDIwID4+IDJdXShlW2kgKyA0OCA+PiAyXSwgZiwgbCwgaSArIDUyIHwgMCkgfCAwKTsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAoIXIpIHsKICAgICAgICAgICAgICAgICAgXzAoODA0NCwgNDIsIDEsIGVbMTE4NDZdKSwgS2UoaSksIHkxKGwpOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgayA9IEEgKyAxMiB8IDAsIHQgPSBlW0EgKyA0ID4+IDJdIC0gZVtBID4+IDJdIHwgMCwgaCA9IGVbQSArIDE2ID4+IDJdLCByID0gZVtBICsgMTIgPj4gMl0sIGYgPSBoIC0gciB8IDA7CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIGlmICh0ID4+PiAwID4gZiA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgIFRlKGssIHQgLSBmIHwgMCksIHIgPSBlW0EgKyAxMiA+PiAyXSwgaCA9IGVbQSArIDE2ID4+IDJdOwogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKGYgPj4+IDAgPD0gdCA+Pj4gMCkKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICBoID0gciArIHQgfCAwLCBlW0EgKyAxNiA+PiAyXSA9IGg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoZVthICsgOCA+PiAyXSA9IHIsIGVbYSArIDQgPj4gMl0gPSByLCBlW2EgKyAxMiA+PiAyXSA9IGggLSByLCB0ID0gRjYoMCksIHQgJiYgKHQgJiYgKGVbdCArIDQgPj4gMl0gPSAwLCBlW3QgPj4gMl0gPSBhICsgNCksIGYgPSBlW2EgKyAxMiA+PiAyXSwgdCAmJiAoZVt0ICsgOCA+PiAyXSA9IGYsIGVbdCArIDEyID4+IDJdID0gMCksICF0IHwgIShGW3QgKyA2OCB8IDBdICYgMSkgfHwgKGVbdCArIDIwID4+IDJdID0gOTIpLCB0ICYmIChlW3QgKyAyNCA+PiAyXSA9IDYwKSwgdCAmJiAoZVt0ICsgMjggPj4gMl0gPSA2MSkpLCByID0gMCwgZVtpICsgNzYgPj4gMl0gfCAoIWkgfCAhdCkgfHwgKHIgPSBvMltlW2kgPj4gMl1dKGVbaSArIDQ4ID4+IDJdLCB0LCBsLCBpICsgNTIgfCAwKSB8IDApLCAhcikgewogICAgICAgICAgICAgICAgICBfMCg0OTkyLCA0MywgMSwgZVsxMTg0Nl0pOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHIgPSAwLCBlW2kgKyA3NiA+PiAyXSB8ICghaSB8ICF0KSB8fCAociA9IG8yW2VbaSArIDQgPj4gMl1dKGVbaSArIDQ4ID4+IDJdLCB0LCBpICsgNTIgfCAwKSB8IDApLCAhcikgewogICAgICAgICAgICAgICAgICBfMCgxMDQ2MCwgMzUsIDEsIGVbMTE4NDZdKTsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChyID0gMCwgZVtpICsgNzYgPj4gMl0gfCAoIWkgfCAhdCkgfHwgKHIgPSBvMltlW2kgKyAxMiA+PiAyXV0oZVtpICsgNDggPj4gMl0sIHQsIGkgKyA1MiB8IDApIHwgMCksICFyKSB7CiAgICAgICAgICAgICAgICAgIF8wKDUwMzYsIDQxLCAxLCBlWzExODQ2XSk7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAociA9IGVbYSArIDggPj4gMl0gLSBlW2EgKyA0ID4+IDJdIHwgMCwgaSA9IGVbQSArIDEyID4+IDJdLCBmID0gZVtBICsgMTYgPj4gMl0gLSBpIHwgMCwgciA+Pj4gMCA+IGYgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgVGUoaywgciAtIGYgfCAwKTsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChyID4+PiAwID49IGYgPj4+IDApCiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICBlW0EgKyAxNiA+PiAyXSA9IGkgKyByOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBBID0gZVthICsgMTYgPj4gMl0sIEEgJiYgKGVbYSArIDIwID4+IDJdID0gQSwgUihBKSksIFggPSBhICsgMTg3MzYgfCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIFc0KEEsIGksIHIsIGYsIGssIHQsIG4pIHsKICAgICAgICAgICAgICB2YXIgbCA9IDAsIGEgPSAwLCB1ID0gMCwgbyA9IDAsIGcgPSAwLCBoID0gMCwgcyA9IDAsIHcgPSAwLCBCID0gMCwgYyA9IDAsIHYgPSAwLCBDID0gMCwgbSA9IDAsIHkgPSAwLCBwID0gMCwgSCA9IDAsIEogPSAwLCBFID0gMCwgRCA9IDAsIFUgPSAwOwogICAgICAgICAgICAgIHUgPSBYICsgLTY0IHwgMCwgWCA9IHUsIGVbdSArIDYwID4+IDJdID0gaSwgRCA9IHUgKyAzOSB8IDAsIG0gPSB1ICsgNDAgfCAwOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgIGs6IHsKICAgICAgICAgICAgICAgICAgICAgIGY6IGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICBsID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgQTogZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG8gPSBpLCAodyBeIDIxNDc0ODM2NDcpIDwgKGwgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgdyA9IGwgKyB3IHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICBsOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGksIGEgPSBJW2wgfCAwXSwgYSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGEgJiAyNTU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChpIHwgMCkgIT0gMzcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChhID0gbDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSVthICsgMSB8IDBdICE9IDM3KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gbCArIDEgfCAwLCBoID0gSVthICsgMiB8IDBdLCBpID0gYSArIDIgfCAwLCBhID0gaSwgKGggfCAwKSAhPSAzNykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGwgLSBvIHwgMCwgRSA9IHcgXiAyMTQ3NDgzNjQ3LCAobCB8IDApID4gKEUgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBICYmIHIxKEEsIG8sIGwpLCBsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVt1ICsgNjAgPj4gMl0gPSBpLCBsID0gaSArIDEgfCAwLCBjID0gLTEsIGEgPSBGW2kgKyAxIHwgMF0gLSA0OCB8IDAsIElbaSArIDIgfCAwXSAhPSAzNiB8IGEgPj4+IDAgPiA5IHx8IChKID0gMSwgYyA9IGEsIGwgPSBpICsgMyB8IDApLCBlW3UgKyA2MCA+PiAyXSA9IGwsIHMgPSAwLCBhID0gRltsIHwgMF0sIGkgPSBhIC0gMzIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA+Pj4gMCA+IDMxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaCA9IGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaCA9IGwsIGkgPSAxIDw8IGksICEoaSAmIDc1OTEzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaCA9IGwgKyAxIHwgMCwgZVt1ICsgNjAgPj4gMl0gPSBoLCBzID0gaSB8IHMsIGEgPSBGW2wgKyAxIHwgMF0sIGkgPSBhIC0gMzIgfCAwLCBpID4+PiAwID49IDMyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGgsIGkgPSAxIDw8IGksICEoaSAmIDc1OTEzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYSB8IDApID09IDQyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IEZbaCArIDEgfCAwXSAtIDQ4IHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShJW2ggKyAyIHwgMF0gIT0gMzYgfCBpID4+PiAwID4gOSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVsoaSA8PCAyKSArIGsgPj4gMl0gPSAxMCwgaSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gZVsoaSA8PCAzKSArIGYgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiA9IGksIGkgPSBoICsgMyB8IDAsIGEgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEopCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IGggKyAxIHwgMCwgIUEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVt1ICsgNjAgPj4gMl0gPSBpLCBKID0gMCwgQiA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gZVtyID4+IDJdLCBlW3IgPj4gMl0gPSBsICsgNCwgQiA9IGVbbCA+PiAyXSwgYSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChKID0gYSwgZVt1ICsgNjAgPj4gMl0gPSBpLCAoQiB8IDApID49IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgPSAwIC0gQiB8IDAsIHMgPSBzIHwgODE5MjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChCID0gRTYodSArIDYwIHwgMCksIChCIHwgMCkgPCAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlW3UgKyA2MCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSAwLCBnID0gLTEsIHkgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSVtpIHwgMF0gIT0gNDYpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElbaSArIDEgfCAwXSA9PSA0MikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBGW2kgKyAyIHwgMF0gLSA0OCB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoSVtpICsgMyB8IDBdICE9IDM2IHwgYSA+Pj4gMCA+IDkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBpICsgNCB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHc6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbKGEgPDwgMikgKyBrID4+IDJdID0gMTAsIGcgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZyA9IGVbKGEgPDwgMykgKyBmID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID0gaSArIDIgfCAwLCBnID0gMCwgIUEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gZVtyID4+IDJdLCBlW3IgPj4gMl0gPSBhICsgNCwgZyA9IGVbYSA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVt1ICsgNjAgPj4gMl0gPSBpLCB5ID0gKGcgfCAwKSA+PSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVt1ICsgNjAgPj4gMl0gPSBpICsgMSwgZyA9IEU2KHUgKyA2MCB8IDApLCBpID0gZVt1ICsgNjAgPj4gMl0sIHkgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwID0gbCwgaCA9IDI4LCB2ID0gaSwgYSA9IEZbaSB8IDBdLCBhIC0gMTIzID4+PiAwIDwgNDI5NDk2NzIzOCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IGkgKyAxIHwgMCwgbCA9IElbKGEgKyBaKGwsIDU4KSB8IDApICsgNDc4MzkgfCAwXSwgISgobCAtIDEgJiAyNTUpID4+PiAwIDwgOCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW3UgKyA2MCA+PiAyXSA9IGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobCB8IDApICE9IDI3KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGMgfCAwKSA+PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVsoYyA8PCAyKSArIGsgPj4gMl0gPSBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IChjIDw8IDMpICsgZiB8IDAsIGEgPSBlW2wgKyA0ID4+IDJdLCBlW3UgKyA0OCA+PiAyXSA9IGVbbCA+PiAyXSwgZVt1ICsgNTIgPj4gMl0gPSBhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsNih1ICsgNDggfCAwLCBsLCByLCBuKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYyB8IDApID49IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSAwLCAhQSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElbQSB8IDBdICYgMzIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gcyAmIC02NTUzNywgcyA9IHMgJiA4MTkyID8gYSA6IHMsIGMgPSAwLCBIID0gMTEwMSwgaCA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGg6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG86IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBaOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFc6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBROiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh2ID0gSVt2IHwgMF0sIGwgPSB2IDw8IDI0ID4+IDI0LCBsID0gcCAmJiAodiAmIDE1KSA9PSAzID8gbCAmIC00NSA6IGwsIGwgLSA4OCB8IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDY6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDg6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDEwOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxNjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTg6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE5OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyMDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjE6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI1OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyNjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjg6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDMwOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzMToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgOToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxNToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTE6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDEyOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxNzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgVzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDIzOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBtOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyNDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI5OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBROwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgRzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChsIC0gNjUgfCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDY6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBHOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChsIHwgMCkgPT0gODMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBlW3UgKyA0OCA+PiAyXSwgdiA9IGVbdSArIDUyID4+IDJdLCBIID0gMTEwMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIFo7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHAgfCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2VbdSArIDQ4ID4+IDJdID4+IDJdID0gdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtlW3UgKyA0OCA+PiAyXSA+PiAyXSA9IHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gPSBlW3UgKyA0OCA+PiAyXSwgZVtvID4+IDJdID0gdywgZVtvICsgNCA+PiAyXSA9IHcgPj4gMzE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUyW2VbdSArIDQ4ID4+IDJdID4+IDFdID0gdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRltlW3UgKyA0OCA+PiAyXV0gPSB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2VbdSArIDQ4ID4+IDJdID4+IDJdID0gdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gPSBlW3UgKyA0OCA+PiAyXSwgZVtvID4+IDJdID0gdywgZVtvICsgNCA+PiAyXSA9IHcgPj4gMzE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gZyA+Pj4gMCA8PSA4ID8gOCA6IGcsIHMgPSBzIHwgOCwgbCA9IDEyMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID0gbSwgbyA9IGVbdSArIDUyID4+IDJdLCB2ID0gbywgYSA9IGVbdSArIDQ4ID4+IDJdLCBDID0gYSwgYSB8IG8pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoVSA9IGwgJiAzMjsgaSA9IGkgLSAxIHwgMCwgRltpIHwgMF0gPSBVIHwgSVsoQyAmIDE1KSArIDQ4MzY4IHwgMF0sIHAgPSAhbyAmIEMgPj4+IDAgPiAxNSB8IChvIHwgMCkgIT0gMCwgQyA9IChvICYgMTUpIDw8IDI4IHwgQyA+Pj4gNCwgbyA9IG8gPj4+IDQgfCAwLCAhIXA7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobyA9IGksICEoYSB8IHYpIHwgIShzICYgOCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIID0gKGwgPj4+IDQgfCAwKSArIDExMDEgfCAwLCBjID0gMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID0gbSwgbyA9IGVbdSArIDUyID4+IDJdLCB2ID0gbywgYSA9IGVbdSArIDQ4ID4+IDJdLCBDID0gYSwgYSB8IG8pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgaSA9IGkgLSAxIHwgMCwgRltpIHwgMF0gPSBDICYgNyB8IDQ4LCBwID0gIW8gJiBDID4+PiAwID4gNyB8IChvIHwgMCkgIT0gMCwgQyA9IChvICYgNykgPDwgMjkgfCBDID4+PiAzLCBvID0gbyA+Pj4gMyB8IDAsICEhcDsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG8gPSBpLCAhKHMgJiA4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IG0gLSBpIHwgMCwgZyA9IChpIHwgMCkgPCAoZyB8IDApID8gZyA6IGkgKyAxIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBJOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhID0gZVt1ICsgNDggPj4gMl0sIGkgPSBlW3UgKyA1MiA+PiAyXSwgdiA9IGksIChpIHwgMCkgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IDAgLSAoaSArICgoYSB8IDApICE9IDApIHwgMCkgfCAwLCB2ID0gbCwgYSA9IDAgLSBhIHwgMCwgZVt1ICsgNDggPj4gMl0gPSBhLCBlW3UgKyA1MiA+PiAyXSA9IGwsIGMgPSAxLCBIID0gMTEwMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBaOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzICYgMjA0OCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSAxLCBIID0gMTEwMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBaOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBzICYgMSwgSCA9IGMgPyAxMTAzIDogMTEwMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gPSBtZShhLCB2LCBtKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChnIHwgMCkgPCAwICYgeSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPSB5ID8gcyAmIC02NTUzNyA6IHMsICEoZyB8IChhIHwgdikgIT0gMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gPSBtLCBnID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAhKGEgfCB2KSArIChtIC0gbyB8IDApIHwgMCwgZyA9IChpIHwgMCkgPCAoZyB8IDApID8gZyA6IGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gSVt1ICsgNDggfCAwXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBnID4+PiAwID49IDIxNDc0ODM2NDcgPyAyMTQ3NDgzNjQ3IDogZywgbCA9IHMsIGggPSAobCB8IDApICE9IDAsIGkgPSBlW3UgKyA0OCA+PiAyXSwgbyA9IGkgfHwgMzM5NCwgaSA9IG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBaOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGkgJiAzKSB8ICFsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIFo7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghSVtpIHwgMF0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBJOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gbCAtIDEgfCAwLCBoID0gKGwgfCAwKSAhPSAwLCBpID0gaSArIDEgfCAwLCAhKGkgJiAzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIFo7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKCFJW2kgfCAwXSB8IGwgPj4+IDAgPCA0KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGggPSBlW2kgPj4gMl0sICgoMTY4NDMwMDggLSBoIHwgaCkgJiAtMjEzOTA2MjE0NCkgIT0gLTIxMzkwNjIxNDQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBJOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID0gaSArIDQgfCAwLCBsID0gbCAtIDQgfCAwLCAhKGwgPj4+IDAgPiAzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFJW2kgfCAwXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID0gaSArIDEgfCAwLCBsID0gbCAtIDEgfCAwLCAhbCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSBpID8gaSAtIG8gfCAwIDogcywgaCA9IGkgKyBvIHwgMCwgKGcgfCAwKSA+PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBhLCBnID0gaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzID0gYSwgZyA9IGksIElbaCB8IDBdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBlW3UgKyA0OCA+PiAyXSwgbCB8IGVbdSArIDUyID4+IDJdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IGVbdSArIDQ4ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IDAsIG4xKEEsIDMyLCBCLCAwLCBzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbdSArIDEyID4+IDJdID0gMCwgZVt1ICsgOCA+PiAyXSA9IGwsIGEgPSB1ICsgOCB8IDAsIGVbdSArIDQ4ID4+IDJdID0gYSwgZyA9IC0xOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGwgPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobyA9IGVbYSA+PiAyXSwgIW8pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG8gPSBtNih1ICsgNCB8IDAsIG8pLCAobyB8IDApIDwgMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobyA+Pj4gMCA+IGcgLSBsID4+PiAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhID0gYSArIDQgfCAwLCBsID0gbCArIG8gfCAwLCBnID4+PiAwID4gbCA+Pj4gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaCA9IDYxLCAobCB8IDApIDwgMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4xKEEsIDMyLCBCLCBsLCBzKSwgIWwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChoID0gMCwgYSA9IGVbdSArIDQ4ID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG8gPSBlW2EgPj4gMl0sICFvIHx8IChnID0gdSArIDQgfCAwLCBvID0gbTYoZywgbyksIGggPSBvICsgaCB8IDAsIGggPj4+IDAgPiBsID4+PiAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyMShBLCBnLCBvKSwgYSA9IGEgKyA0IHwgMCwgIShsID4+PiAwID4gaCA+Pj4gMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuMShBLCAzMiwgQiwgbCwgcyBeIDgxOTIpLCBsID0gKGwgfCAwKSA8IChCIHwgMCkgPyBCIDogbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZyB8IDApIDwgMCAmIHkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaCA9IDYxLCBsID0gbzJbdCB8IDBdKEEsIFEyW3UgKyA0OCA+PiAzXSwgQiwgZywgcywgbCkgfCAwLCAobCB8IDApID49IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gSVtsICsgMSB8IDBdLCBsID0gbCArIDEgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghSikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobCA9IDE7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBID0gZVsobCA8PCAyKSArIGsgPj4gMl0sIEEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobDYoKGwgPDwgMykgKyBmIHwgMCwgQSwgciwgbiksIHcgPSAxLCBsID0gbCArIDEgfCAwLCAobCB8IDApICE9IDEwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID4+PiAwID49IDEwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlWyhsIDw8IDIpICsgayA+PiAyXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodyA9IDEsIGwgPSBsICsgMSB8IDAsIChsIHwgMCkgPT0gMTApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoID0gMjg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGW3UgKyAzOSB8IDBdID0gbCwgZyA9IDEsIG8gPSBELCBzID0gYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhID0gaCAtIG8gfCAwLCBnID0gKGEgfCAwKSA8IChnIHwgMCkgPyBnIDogYSwgKGcgfCAwKSA+IChjIF4gMjE0NzQ4MzY0NykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaCA9IDYxLCBpID0gZyArIGMgfCAwLCBsID0gKGkgfCAwKSA8IChCIHwgMCkgPyBCIDogaSwgKEUgfCAwKSA8IChsIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuMShBLCAzMiwgbCwgaSwgcyksIHIxKEEsIEgsIGMpLCBuMShBLCA0OCwgbCwgaSwgcyBeIDY1NTM2KSwgbjEoQSwgNDgsIGcsIGEsIDApLCByMShBLCBvLCBhKSwgbjEoQSwgMzIsIGwsIGksIHMgXiA4MTkyKSwgaSA9IGVbdSArIDYwID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgdyA9IDA7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBoID0gNjE7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZVsxMjQ4NV0gPSBoOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdyA9IC0xOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gWCA9IHUgLSAtNjQgfCAwLCB3OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIExBKEEsIGksIHIsIGYsIGssIHQpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIGkgPSAraSwgciA9IHIgfCAwLCBmID0gZiB8IDAsIGsgPSBrIHwgMCwgdCA9IHQgfCAwOwogICAgICAgICAgICAgIHZhciBuID0gMCwgbCA9IDAsIGEgPSAwLCB1ID0gMCwgbyA9IDAsIGcgPSAwLCBoID0gMCwgcyA9IDAsIHcgPSAwLCBCID0gMCwgYyA9IDAsIHYgPSAwLCBDID0gMCwgbSA9IDAsIHkgPSAwLCBwID0gMCwgSCA9IDAsIEogPSAwLCBFID0gMCwgRCA9IDAsIFUgPSAwOwogICAgICAgICAgICAgIHMgPSBYIC0gNTYwIHwgMCwgWCA9IHMsIGVbcyArIDQ0ID4+IDJdID0gMCwgZzEoK2kpLCBsID0gVzAoMSkgfCAwLCBXMCgwKSB8IDA7CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKChsIHwgMCkgPCAwKSB7CiAgICAgICAgICAgICAgICAgIEMgPSAxLCBIID0gMTExMSwgaSA9IC1pLCBnMSgraSksIGwgPSBXMCgxKSB8IDAsIFcwKDApIHwgMDsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChrICYgMjA0OCkgewogICAgICAgICAgICAgICAgICBDID0gMSwgSCA9IDExMTQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBDID0gayAmIDEsIEggPSBDID8gMTExNyA6IDExMTIsIEUgPSAhQzsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKChsICYgMjE0NjQzNTA3MikgPT0gMjE0NjQzNTA3MikgewogICAgICAgICAgICAgICAgICBsID0gQyArIDMgfCAwLCBuMShBLCAzMiwgciwgbCwgayAmIC02NTUzNyksIHIxKEEsIEgsIEMpLCBmID0gdCAmIDMyLCByMShBLCBpICE9IGkgPyBmID8gMTc3MyA6IDI0MjkgOiBmID8gMjAyNiA6IDI0MzMsIDMpLCBuMShBLCAzMiwgciwgbCwgayBeIDgxOTIpLCBnID0gKHIgfCAwKSA+IChsIHwgMCkgPyByIDogbDsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHkgPSBzICsgMTYgfCAwOwogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgazogewogICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSBENihpLCBzICsgNDQgfCAwKSwgaSA9IGkgKyBpLCBpICE9IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBlW3MgKyA0NCA+PiAyXSwgZVtzICsgNDQgPj4gMl0gPSBsIC0gMSwgcCA9IHQgfCAzMiwgKHAgfCAwKSAhPSA5NykKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgaWYgKHAgPSB0IHwgMzIsIChwIHwgMCkgPT0gOTcpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICBoID0gZVtzICsgNDQgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBoID0gbCAtIDI5IHwgMCwgZVtzICsgNDQgPj4gMl0gPSBoLCBpID0gaSAqIDI2ODQzNTQ1NjsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBmb3IgKG8gPSAoZiB8IDApIDwgMCA/IDYgOiBmLCBjID0gKHMgKyA0OCB8IDApICsgKChoIHwgMCkgPj0gMCA/IDI4OCA6IDApIHwgMCwgbCA9IGM7IGkgPCA0Mjk0OTY3Mjk2ICYgaSA+PSAwID8gZiA9IH5+aSA+Pj4gMCA6IGYgPSAwLCBlW2wgPj4gMl0gPSBmLCBsID0gbCArIDQgfCAwLCBpID0gKGkgLSArKGYgPj4+IDApKSAqIDFlOSwgaSAhPSAwOyApCiAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgaWYgKChoIHwgMCkgPD0gMCkgewogICAgICAgICAgICAgICAgICAgICAgYSA9IGgsIG4gPSBsLCB1ID0gYzsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGZvciAodSA9IGMsIGEgPSBoOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgYSA9IGEgPj4+IDAgPj0gMjkgPyAyOSA6IGEsIG4gPSBsIC0gNCB8IDA7CiAgICAgICAgICAgICAgICAgICAgICBrOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1ID4+PiAwID4gbiA+Pj4gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHcgPSAwOyBmID0gZVtuID4+IDJdLCBCID0gYSAmIDMxLCBnID0gdywgKGEgJiA2MykgPj4+IDAgPj0gMzIgPyAodyA9IGYgPDwgQiwgZiA9IDApIDogKHcgPSAoMSA8PCBCKSAtIDEgJiBmID4+PiAzMiAtIEIsIGYgPSBmIDw8IEIpLCBnID0gZyArIGYgfCAwLCBCID0gdyArIEogfCAwLCBCID0gZiA+Pj4gMCA+IGcgPj4+IDAgPyBCICsgMSB8IDAgOiBCLCB3ID0gbjAoZywgQiwgMWU5LCAwKSwgRCA9IG4sIFUgPSBnIC0gZDAodywgcTIsIDFlOSwgMCkgfCAwLCBlW0QgPj4gMl0gPSBVLCBuID0gbiAtIDQgfCAwLCB1ID4+PiAwIDw9IG4gPj4+IDA7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQiAmIGcgPj4+IDAgPCAxZTkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgdSA9IHUgLSA0IHwgMCwgZVt1ID4+IDJdID0gdzsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBuID0gbCwgdSA+Pj4gMCA8IG4gPj4+IDAgJiYgKGwgPSBuIC0gNCB8IDAsICFlW2wgPj4gMl0pOyApCiAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgIGlmIChhID0gZVtzICsgNDQgPj4gMl0gLSBhIHwgMCwgZVtzICsgNDQgPj4gMl0gPSBhLCBsID0gbiwgISgoYSB8IDApID4gMCkpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoKGEgfCAwKSA8IDApCiAgICAgICAgICAgICAgICAgICAgZm9yIChtID0gKChvICsgMjUgPj4+IDApIC8gOSB8IDApICsgMSB8IDAsIEIgPSAocCB8IDApID09IDEwMjsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgIGYgPSAwIC0gYSB8IDAsIGcgPSBmID4+PiAwID49IDkgPyA5IDogZjsKICAgICAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPj4+IDAgPD0gdSA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSAhZVt1ID4+IDJdIDw8IDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKEogPSAxZTkgPj4+IGcgfCAwLCB3ID0gLTEgPDwgZyBeIC0xLCBhID0gMCwgbCA9IHU7IGYgPSBlW2wgPj4gMl0sIGVbbCA+PiAyXSA9IChmID4+PiBnIHwgMCkgKyBhLCBhID0gWihKLCBmICYgdyksIGwgPSBsICsgNCB8IDAsIGwgPj4+IDAgPCBuID4+PiAwOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9ICFlW3UgPj4gMl0gPDwgMiwgIWEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgZVtuID4+IDJdID0gYSwgbiA9IG4gKyA0IHwgMDsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlmIChhID0gZyArIGVbcyArIDQ0ID4+IDJdIHwgMCwgZVtzICsgNDQgPj4gMl0gPSBhLCB1ID0gbCArIHUgfCAwLCBmID0gQiA/IGMgOiB1LCBuID0gbiAtIGYgPj4gMiA+IChtIHwgMCkgPyBmICsgKG0gPDwgMikgfCAwIDogbiwgISgoYSB8IDApIDwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgYSA9IDA7CiAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICBpZiAobiA+Pj4gMCA8PSB1ID4+PiAwIHx8IChhID0gWihjIC0gdSA+PiAyLCA5KSwgbCA9IDEwLCBmID0gZVt1ID4+IDJdLCBmID4+PiAwIDwgMTApKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICBmb3IgKDsgYSA9IGEgKyAxIHwgMCwgbCA9IFoobCwgMTApLCBmID4+PiAwID49IGwgPj4+IDA7ICkKICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoZiA9IChvIC0gKChwIHwgMCkgIT0gMTAyID8gYSA6IDApIHwgMCkgLSAoKHAgfCAwKSA9PSAxMDMgJiAobyB8IDApICE9IDApIHwgMCwgKGYgfCAwKSA8IChaKG4gLSBjID4+IDIsIDkpIC0gOSB8IDApKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSAocyArIDQ4IHwgMCkgKyAoKGggfCAwKSA8IDAgPyAtNDA5MiA6IC0zODA0KSB8IDAsIGggPSBmICsgOTIxNiB8IDAsIGYgPSAoaCB8IDApIC8gOSB8IDAsIGcgPSBsICsgKGYgPDwgMikgfCAwLCBsID0gMTAsIGYgPSBoIC0gWihmLCA5KSB8IDAsIChmIHwgMCkgPD0gNykKICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBsID0gWihsLCAxMCksIGYgPSBmICsgMSB8IDAsIChmIHwgMCkgIT0gODsgKQogICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgaCA9IGVbZyA+PiAyXSwgbSA9IChoID4+PiAwKSAvIChsID4+PiAwKSB8IDAsIHcgPSBoIC0gWihsLCBtKSB8IDAsIGYgPSBnICsgNCB8IDA7CiAgICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgICAgaWYgKCF3ICYgKGYgfCAwKSA9PSAobiB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgazogewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShtICYgMSkgJiYgKGkgPSA5MDA3MTk5MjU0NzQwOTkyLCAhKEZbZyAtIDQgfCAwXSAmIDEpIHwgKChsIHwgMCkgIT0gMWU5IHwgdSA+Pj4gMCA+PSBnID4+PiAwKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDkwMDcxOTkyNTQ3NDA5OTQ7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBpZiAodiA9IChmIHwgMCkgPT0gKG4gfCAwKSA/IDEgOiAxLjUsIGYgPSBsID4+PiAxIHwgMCwgdiA9IGYgPj4+IDAgPiB3ID4+PiAwID8gMC41IDogKGYgfCAwKSA9PSAodyB8IDApID8gdiA6IDEuNSwgSVtIIHwgMF0gIT0gNDUgfCBFIHx8ICh2ID0gLXYsIGkgPSAtaSksIGYgPSBoIC0gdyB8IDAsIGVbZyA+PiAyXSA9IGYsIGkgKyB2ID09IGkpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoZiA9IGYgKyBsIHwgMCwgZVtnID4+IDJdID0gZiwgZiA+Pj4gMCA+PSAxZTkpCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBlW2cgPj4gMl0gPSAwLCBnID0gZyAtIDQgfCAwLCBnID4+PiAwIDwgdSA+Pj4gMCAmJiAodSA9IHUgLSA0IHwgMCwgZVt1ID4+IDJdID0gMCksIGYgPSBlW2cgPj4gMl0gKyAxIHwgMCwgZVtnID4+IDJdID0gZiwgZiA+Pj4gMCA+IDk5OTk5OTk5OTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgIGlmIChhID0gWihjIC0gdSA+PiAyLCA5KSwgbCA9IDEwLCBmID0gZVt1ID4+IDJdLCBmID4+PiAwIDwgMTApCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgYSA9IGEgKyAxIHwgMCwgbCA9IFoobCwgMTApLCBmID4+PiAwID49IGwgPj4+IDA7ICkKICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBmID0gZyArIDQgfCAwLCBuID0gZiA+Pj4gMCA8IG4gPj4+IDAgPyBmIDogbjsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBmb3IgKDsgaCA9IG4sIHcgPSBuID4+PiAwIDw9IHUgPj4+IDAsICF3ICYmIChuID0gbiAtIDQgfCAwLCAhZVtuID4+IDJdKTsgKQogICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgIGlmICgocCB8IDApICE9IDEwMykgewogICAgICAgICAgICAgICAgICAgICAgQiA9IGsgJiA4OwogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBvIHx8IDEsIGYgPSAobCB8IDApID4gKGEgfCAwKSAmIChhIHwgMCkgPiAtNSwgbyA9IChmID8gYSBeIC0xIDogLTEpICsgbCB8IDAsIHQgPSAoZiA/IC0xIDogLTIpICsgdCB8IDAsIEIgPSBrICYgOCwgQikKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgbiA9IC05OwogICAgICAgICAgICAgICAgICAgIGs6IHsKICAgICAgICAgICAgICAgICAgICAgIGlmICh3IHx8ICh3ID0gZVtoIC0gNCA+PiAyXSwgIXcpIHx8IChmID0gMTAsIG4gPSAwLCAodyA+Pj4gMCkgJSAxMCB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGwgPSBuLCBuID0gbiArIDEgfCAwLCBmID0gWihmLCAxMCksICEoKHcgPj4+IDApICUgKGYgPj4+IDApIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgbiA9IGwgXiAtMTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKGYgPSBaKGggLSBjID4+IDIsIDkpLCAodCAmIC0zMykgPT0gNzApIHsKICAgICAgICAgICAgICAgICAgICAgIEIgPSAwLCBmID0gKGYgKyBuIHwgMCkgLSA5IHwgMCwgZiA9IChmIHwgMCkgPiAwID8gZiA6IDAsIG8gPSAoZiB8IDApID4gKG8gfCAwKSA/IG8gOiBmOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgQiA9IDAsIGYgPSAoKGYgKyBhIHwgMCkgKyBuIHwgMCkgLSA5IHwgMCwgZiA9IChmIHwgMCkgPiAwID8gZiA6IDAsIG8gPSAoZiB8IDApID4gKG8gfCAwKSA/IG8gOiBmOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChnID0gLTEsIHcgPSBvIHwgQiwgKCh3ID8gMjE0NzQ4MzY0NSA6IDIxNDc0ODM2NDYpIHwgMCkgPCAobyB8IDApKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIEogPSAoKCh3IHwgMCkgIT0gMCkgKyBvIHwgMCkgKyAxIHwgMCwgbCA9IHQgJiAtMzM7CiAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICBpZiAoKGwgfCAwKSA9PSA3MCkgewogICAgICAgICAgICAgICAgICAgICAgaWYgKChKIF4gMjE0NzQ4MzY0NykgPCAoYSB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgbiA9IChhIHwgMCkgPiAwID8gYSA6IDA7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoZiA9IGEgPj4gMzEsIG4gPSBtZSgoZiBeIGEpIC0gZiB8IDAsIDAsIHkpLCAoeSAtIG4gfCAwKSA8PSAxKQogICAgICAgICAgICAgICAgICAgICAgZm9yICg7IG4gPSBuIC0gMSB8IDAsIEZbbiB8IDBdID0gNDgsICh5IC0gbiB8IDApIDwgMjsgKQogICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgaWYgKG0gPSBuIC0gMiB8IDAsIEZbbSB8IDBdID0gdCwgRltuIC0gMSB8IDBdID0gKGEgfCAwKSA8IDAgPyA0NSA6IDQzLCBuID0geSAtIG0gfCAwLCAobiB8IDApID4gKEogXiAyMTQ3NDgzNjQ3KSkKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKGYgPSBuICsgSiB8IDAsIChmIHwgMCkgPiAoQyBeIDIxNDc0ODM2NDcpKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIGEgPSBmICsgQyB8IDAsIG4xKEEsIDMyLCByLCBhLCBrKSwgcjEoQSwgSCwgQyksIG4xKEEsIDQ4LCByLCBhLCBrIF4gNjU1MzYpOwogICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgazogewogICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGwgfCAwKSA9PSA3MCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobCA9IHMgKyAxNiB8IDksIHQgPSB1ID4+PiAwID4gYyA+Pj4gMCA/IGMgOiB1LCB1ID0gdDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBtZShlW3UgPj4gMl0sIDAsIGwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgQTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHQgfCAwKSAhPSAodSB8IDApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgKyAxNiA+Pj4gMCA+PSBuID4+PiAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgbiA9IG4gLSAxIHwgMCwgRltuIHwgMF0gPSA0OCwgcyArIDE2ID4+PiAwIDwgbiA+Pj4gMDsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChuIHwgMCkgIT0gKGwgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gbiAtIDEgfCAwLCBGW24gfCAwXSA9IDQ4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIxKEEsIG4sIGwgLSBuIHwgMCksIHUgPSB1ICsgNCB8IDAsICEoYyA+Pj4gMCA+PSB1ID4+PiAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3ICYmIHIxKEEsIDMzOTIsIDEpLCAobyB8IDApIDw9IDAgfCB1ID4+PiAwID49IGggPj4+IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPSBtZShlW3UgPj4gMl0sIDAsIGwpLCBuID4+PiAwID4gcyArIDE2ID4+PiAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgbiA9IG4gLSAxIHwgMCwgRltuIHwgMF0gPSA0OCwgcyArIDE2ID4+PiAwIDwgbiA+Pj4gMDsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyMShBLCBuLCAobyB8IDApID49IDkgPyA5IDogbyksIG4gPSBvIC0gOSB8IDAsIHUgPSB1ICsgNCB8IDAsIGggPj4+IDAgPD0gdSA+Pj4gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmID0gKG8gfCAwKSA+IDksIG8gPSBuLCAhZikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgQTogewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobyB8IDApIDwgMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh0ID0gdSA+Pj4gMCA8IGggPj4+IDAgPyBoIDogdSArIDQgfCAwLCBoID0gcyArIDE2IHwgOSwgbCA9IHU7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gbWUoZVtsID4+IDJdLCAwLCBoKSwgKGggfCAwKSA9PSAobiB8IDApICYmIChuID0gbiAtIDEgfCAwLCBGW24gfCAwXSA9IDQ4KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGw6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChsIHwgMCkgIT0gKHUgfCAwKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzICsgMTYgPj4+IDAgPj0gbiA+Pj4gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IG4gPSBuIC0gMSB8IDAsIEZbbiB8IDBdID0gNDgsIHMgKyAxNiA+Pj4gMCA8IG4gPj4+IDA7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyMShBLCBuLCAxKSwgbiA9IG4gKyAxIHwgMCwgIShvIHwgQikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcjEoQSwgMzM5MiwgMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZiA9IGggLSBuIHwgMCwgcjEoQSwgbiwgKGYgfCAwKSA8IChvIHwgMCkgPyBmIDogbyksIG8gPSBvIC0gZiB8IDAsIGwgPSBsICsgNCB8IDAsIHQgPj4+IDAgPD0gbCA+Pj4gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKChvIHwgMCkgPj0gMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBuMShBLCA0OCwgbyArIDE4IHwgMCwgMTgsIDApLCByMShBLCBtLCB5IC0gbSB8IDApOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgbiA9IG87CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIG4xKEEsIDQ4LCBuICsgOSB8IDAsIDksIDApOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIG4xKEEsIDMyLCByLCBhLCBrIF4gODE5MiksIGcgPSAociB8IDApID4gKGEgfCAwKSA/IHIgOiBhOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgbyA9ICh0IDw8IDI2ID4+IDMxICYgOSkgKyBIIHwgMDsKICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgaWYgKGYgPj4+IDAgPiAxMSkKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICBmb3IgKG4gPSAxMiAtIGYgfCAwLCB2ID0gMTY7IHYgPSB2ICogMTYsIG4gPSBuIC0gMSB8IDAsICEhbjsgKQogICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgaWYgKElbbyB8IDBdID09IDQ1KSB7CiAgICAgICAgICAgICAgICAgICAgaSA9IC0odiArICgtaSAtIHYpKTsKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGkgPSBpICsgdiAtIHY7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmb3IgKGwgPSBlW3MgKyA0NCA+PiAyXSwgbiA9IGwgPj4gMzEsIG4gPSBtZSgobiBeIGwpIC0gbiB8IDAsIDAsIHkpLCAoeSB8IDApID09IChuIHwgMCkgJiYgKG4gPSBuIC0gMSB8IDAsIEZbbiB8IDBdID0gNDgsIGwgPSBlW3MgKyA0NCA+PiAyXSksIGMgPSBDIHwgMiwgdSA9IHQgJiAzMiwgaCA9IG4gLSAyIHwgMCwgRltoIHwgMF0gPSB0ICsgMTUsIEZbbiAtIDEgfCAwXSA9IChsIHwgMCkgPCAwID8gNDUgOiA0MywgbiA9ICEoayAmIDgpICYgKGYgfCAwKSA8PSAwLCBsID0gcyArIDE2IHwgMDsgdCA9IGwsIFIyKGkpIDwgMjE0NzQ4MzY0OCA/IGEgPSB+fmkgOiBhID0gLTIxNDc0ODM2NDgsIEZbbCB8IDBdID0gdSB8IElbYSArIDQ4MzY4IHwgMF0sIGkgPSAoaSAtICsoYSB8IDApKSAqIDE2LCBsID0gdCArIDEgfCAwLCBuICYgaSA9PSAwIHwgKGwgLSAocyArIDE2IHwgMCkgfCAwKSAhPSAxIHx8IChGW3QgKyAxIHwgMF0gPSA0NiwgbCA9IHQgKyAyIHwgMCksIGkgIT0gMDsgKQogICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICBpZiAoZyA9IC0xLCBuID0geSAtIGggfCAwLCB0ID0gbiArIGMgfCAwLCAoMjE0NzQ4MzY0NSAtIHQgfCAwKSA8IChmIHwgMCkpCiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICBhID0gdCwgdCA9IHMgKyAxNiB8IDAsIHUgPSBsIC0gdCB8IDAsIGYgPSBmICYmICh1IC0gMiB8IDApIDwgKGYgfCAwKSA/IGYgKyAyIHwgMCA6IHUsIGwgPSBhICsgZiB8IDAsIG4xKEEsIDMyLCByLCBsLCBrKSwgcjEoQSwgbywgYyksIG4xKEEsIDQ4LCByLCBsLCBrIF4gNjU1MzYpLCByMShBLCB0LCB1KSwgbjEoQSwgNDgsIGYgLSB1IHwgMCwgMCwgMCksIHIxKEEsIGgsIG4pLCBuMShBLCAzMiwgciwgbCwgayBeIDgxOTIpLCBnID0gKHIgfCAwKSA+IChsIHwgMCkgPyByIDogbDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIFggPSBzICsgNTYwIHwgMCwgZyB8IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gT0EoQSwgaSwgciwgZikgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDAsIGYgPSBmIHwgMDsKICAgICAgICAgICAgICB2YXIgayA9IDAsIHQgPSAwLCBuID0gMCwgbCA9IDAsIGEgPSAwLCB1ID0gMCwgbyA9IDAsIGcgPSAwLCBoID0gMCwgcyA9IDAsIHcgPSAwLCBCID0gMCwgYyA9IDAsIHYgPSAwLCBDID0gMCwgbSA9IDAsIHkgPSAwLCBwID0gMCwgSCA9IDA7CiAgICAgICAgICAgICAgdCA9IFggLSAxNjAgfCAwLCBYID0gdDsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAociA+Pj4gMCA8PSAzNSkgewogICAgICAgICAgICAgICAgICByID0gMCwgUShmLCAxLCAxMDAzNiwgMCk7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAociA9IHIgLSAzNiB8IDAsIGwgPSAociA+Pj4gMCkgLyAzIHwgMCwgKFoobCwgMykgfCAwKSAhPSAociB8IDApKSB7CiAgICAgICAgICAgICAgICAgIHIgPSAwLCBRKGYsIDEsIDEwMDM2LCAwKTsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHUgPSBlW0EgKyA3MiA+PiAyXSwgciA9IHQgKyAxNTYgfCAwLCBoMihpLCByLCAyKSwgdTJbQSArIDgwID4+IDFdID0gZVt0ICsgMTU2ID4+IDJdLCBoMihpICsgMiB8IDAsIHUgKyA4IHwgMCwgNCksIGgyKGkgKyA2IHwgMCwgdSArIDEyIHwgMCwgNCksIGgyKGkgKyAxMCB8IDAsIHUsIDQpLCBoMihpICsgMTQgfCAwLCB1ICsgNCB8IDAsIDQpLCBoMihpICsgMTggfCAwLCBBICsgOTIgfCAwLCA0KSwgaDIoaSArIDIyIHwgMCwgQSArIDk2IHwgMCwgNCksIGgyKGkgKyAyNiB8IDAsIEEgKyA4NCB8IDAsIDQpLCBoMihpICsgMzAgfCAwLCBBICsgODggfCAwLCA0KSwgaDIoaSArIDM0IHwgMCwgciwgMik7CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICBrOiB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAociA9IGVbdCArIDE1NiA+PiAyXSwgciA+Pj4gMCA8PSAxNjM4NCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVt1ICsgMTYgPj4gMl0gPSByLCAociB8IDApICE9IChsIHwgMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBlW3QgKyAxMzIgPj4gMl0gPSBsLCBlW3QgKyAxMjggPj4gMl0gPSByLCBRKGYsIDEsIDI2NTIxLCB0ICsgMTI4IHwgMCksIHIgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSBlW3UgKyA0ID4+IDJdLCBuID0gZVt1ICsgMTIgPj4gMl0sIGcgPSBlW3UgKyA4ID4+IDJdLCBrID0gZVt1ID4+IDJdLCAhKHIgPj4+IDAgPCBuID4+PiAwICYgZyA+Pj4gMCA+IGsgPj4+IDApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZVt0ICsgMTIwID4+IDJdID0gbiAtIHIsIGVbdCArIDEyNCA+PiAyXSA9IDAgLSAociA+Pj4gMCA+IG4gPj4+IDApLCBlW3QgKyAxMTIgPj4gMl0gPSBnIC0gaywgZVt0ICsgMTE2ID4+IDJdID0gMCAtIChrID4+PiAwID4gZyA+Pj4gMCksIFEoZiwgMSwgMjYwODMsIHQgKyAxMTIgfCAwKSwgciA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA9IGVbQSArIDkyID4+IDJdLCBvID0gZVtBICsgOTYgPj4gMl0sICEobyAmJiBhKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGVbdCArIDQgPj4gMl0gPSBvLCBlW3QgPj4gMl0gPSBhLCBRKGYsIDEsIDI3MDg5LCB0KSwgciA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaCA9IGVbQSArIDg0ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgIEE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoID4+PiAwID4gayA+Pj4gMCB8fCAoYSA9IGEgKyBoIHwgMCwgayA+Pj4gMCA+PSAoYSA+Pj4gMCA8IGggPj4+IDAgPyAtMSA6IGEpID4+PiAwKSB8fCAoYSA9IGVbQSArIDg4ID4+IDJdLCBhID4+PiAwID4gciA+Pj4gMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobyA9IGEgKyBvIHwgMCwgciA+Pj4gMCA8IChhID4+PiAwID4gbyA+Pj4gMCA/IC0xIDogbykgPj4+IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSAwLCBRKGYsIDEsIDQ3NjEsIDApOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW0EgKyAyMjQgPj4gMl0gfHwgKGEgPSBlW0EgKyAyMTYgPj4gMl0sICFhKSB8fCAobyA9IGVbQSArIDIyMCA+PiAyXSwgIW8pIHx8IChrID0gZyAtIGsgfCAwLCByID0gbiAtIHIgfCAwLCAoayB8IDApID09IChhIHwgMCkgJiAociB8IDApID09IChvIHwgMCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICBlW3QgKyAxMDggPj4gMl0gPSByLCBlW3QgKyAxMDQgPj4gMl0gPSBrLCBlW3QgKyAxMDAgPj4gMl0gPSBvLCBlW3QgKyA5NiA+PiAyXSA9IGEsIFEoZiwgMSwgMjUzNjEsIHQgKyA5NiB8IDApLCByID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrID0gRTIobCwgNTIpLCBlW3UgKyAyNCA+PiAyXSA9IGssICFrKQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgIGY6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWVbdSArIDE2ID4+IDJdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9IHQgKyAxNTIgfCAwLCBoMihpICsgMzYgfCAwLCByLCAxKSwgbCA9IGVbdCArIDE1MiA+PiAyXSwgbyA9IGwgPj4+IDcgfCAwLCBlW2sgKyAzMiA+PiAyXSA9IG8sIGggPSAobCAmIDEyNykgKyAxIHwgMCwgZVtrICsgMjQgPj4gMl0gPSBoLCBnID0gZVtBICsgMjI0ID4+IDJdLCBoMihpICsgMzcgfCAwLCByLCAxKSwgZVtrID4+IDJdID0gZVt0ICsgMTUyID4+IDJdLCBoMihpICsgMzggfCAwLCByLCAxKSwgbiA9IGVbdCArIDE1MiA+PiAyXSwgZVtrICsgNCA+PiAyXSA9IG4sIHIgPSAwLCBhID0gZVtrID4+IDJdLCBhIC0gMjU2ID4+PiAwIDwgNDI5NDk2NzA0MSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IDAsIG4gLSAyNTYgPj4+IDAgPCA0Mjk0OTY3MDQxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9IGVbayArIDI0ID4+IDJdLCBuID4+PiAwID4gMzEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW2sgKyAzNiA+PiAyXSA9IDAsIGVbayArIDQwID4+IDJdID0gZVtBICsgMTYwID4+IDJdLCBsID0gMSwgZFt1ICsgMTYgPj4gMl0gPD0gMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChvID0gZyA/IDAgOiBvLCBnID0gZyA/IDAgOiBoLCBpID0gaSArIDM5IHwgMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoMihpLCB0ICsgMTUyIHwgMCwgMSksIGEgPSBlW3QgKyAxNTIgPj4gMl0sIG4gPSBhID4+PiA3IHwgMCwgZVtrICsgODQgPj4gMl0gPSBuLCBhID0gKGEgJiAxMjcpICsgMSB8IDAsIGVbayArIDc2ID4+IDJdID0gYSwgKGEgfCAwKSA9PSAoZyB8IDApICYgKG4gfCAwKSA9PSAobyB8IDApIHwgKGVbQSArIDIyNCA+PiAyXSB8IElbQSArIDE4OCB8IDBdICYgNCkgfHwgKGVbdCArIDg0ID4+IDJdID0gbiwgZVt0ICsgODAgPj4gMl0gPSBhLCBlW3QgKyA3NiA+PiAyXSA9IGwsIGVbdCArIDcyID4+IDJdID0gbywgZVt0ICsgNjggPj4gMl0gPSBnLCBlW3QgKyA2NCA+PiAyXSA9IGwsIFEoZiwgMiwgMjYzMTksIHQgLSAtNjQgfCAwKSksIG4gPSB0ICsgMTUyIHwgMCwgaDIoaSArIDEgfCAwLCBuLCAxKSwgZVtrICsgNTIgPj4gMl0gPSBlW3QgKyAxNTIgPj4gMl0sIGgyKGkgKyAyIHwgMCwgbiwgMSksIG4gPSBlW3QgKyAxNTIgPj4gMl0sIGVbayArIDU2ID4+IDJdID0gbiwgYSA9IGVbayArIDUyID4+IDJdLCBhIC0gMjU2ID4+PiAwIDwgNDI5NDk2NzA0MSB8IG4gLSAyNTYgPj4+IDAgPD0gNDI5NDk2NzA0MCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID0gZVtrICsgNzYgPj4gMl0sIG4gPj4+IDAgPj0gMzIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IGkgKyAzIHwgMCwgZVtrICsgODggPj4gMl0gPSAwLCBlW2sgKyA5MiA+PiAyXSA9IGVbQSArIDE2MCA+PiAyXSwgayA9IGsgKyA1MiB8IDAsIGwgPSBsICsgMSB8IDAsICEobCA+Pj4gMCA8IGRbdSArIDE2ID4+IDJdKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0gMCwgbCA9IGVbQSArIDkyID4+IDJdLCAhbCB8fCAobiA9IGVbQSArIDk2ID4+IDJdLCAhbikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgZyA9IGwgLSAxIHwgMCwgaCA9IGVbQSArIDg0ID4+IDJdLCBrID0gZVt1ICsgOCA+PiAyXSAtIGggfCAwLCBhID0gaywgaSA9IGcgKyBrIHwgMCwgdyA9IGwgPj4gMzEsIHYgPSB3IC0gIWwgfCAwLCBrID0gdiArIChrID4+IDMxKSB8IDAsIGkgPSB6MChpLCBpID4+PiAwIDwgYSA+Pj4gMCA/IGsgKyAxIHwgMCA6IGssIGwsIHcpLCBlW0EgKyAxMDQgPj4gMl0gPSBpLCBhID0gbiAtIDEgfCAwLCBCID0gZVtBICsgODggPj4gMl0sIGsgPSBlW3UgKyAxMiA+PiAyXSAtIEIgfCAwLCBDID0gaywgbyA9IGEgKyBrIHwgMCwgYyA9IG4gPj4gMzEsIHMgPSBjIC0gIW4gfCAwLCBrID0gcyArIChrID4+IDMxKSB8IDAsIGsgPSB6MChvLCBvID4+PiAwIDwgQyA+Pj4gMCA/IGsgKyAxIHwgMCA6IGssIG4sIGMpLCBlW0EgKyAxMDggPj4gMl0gPSBrOwogICAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoIWkgfCAhaykgJiYgaSA+Pj4gMCA8PSA2NTUzNSAvIChrID4+PiAwKSA+Pj4gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZVt0ICsgMjAgPj4gMl0gPSBrLCBlW3QgKyAxNiA+PiAyXSA9IGksIFEoZiwgMSwgMjU0NzUsIHQgKyAxNiB8IDApOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgbyA9IFooaSwgayk7CiAgICAgICAgICAgICAgICAgICAgICAgIGY6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSVtBICsgNjggfCAwXSAmIDIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbQSArIDI4ID4+IDJdID0gKGVbQSArIDI4ID4+IDJdIC0gaCA+Pj4gMCkgLyAobCA+Pj4gMCksIGVbQSArIDMyID4+IDJdID0gKGVbQSArIDMyID4+IDJdIC0gQiA+Pj4gMCkgLyAobiA+Pj4gMCksIGkgPSBnLCBrID0gZVtBICsgMzYgPj4gMl0gLSBoIHwgMCwgZyA9IGssIGkgPSBpICsgayB8IDAsIGsgPSAoayA+PiAzMSkgKyB2IHwgMCwgcCA9IEEsIEggPSB6MChpLCBpID4+PiAwIDwgZyA+Pj4gMCA/IGsgKyAxIHwgMCA6IGssIGwsIHcpLCBlW3AgKyAzNiA+PiAyXSA9IEgsIGsgPSBlW0EgKyA0MCA+PiAyXSAtIEIgfCAwLCBsID0gaywgaSA9IGsgKyBhIHwgMCwgayA9IChrID4+IDMxKSArIHMgfCAwLCBwID0gQSwgSCA9IHowKGksIGkgPj4+IDAgPCBsID4+PiAwID8gayArIDEgfCAwIDogaywgbiwgYyksIGVbcCArIDQwID4+IDJdID0gSDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGVbQSArIDQwID4+IDJdID0gaywgZVtBICsgMzYgPj4gMl0gPSBpLCBlW0EgKyAyOCA+PiAyXSA9IDAsIGVbQSArIDMyID4+IDJdID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IEUyKG8sIDU2NDQpLCBlW0EgKyAxNTYgPj4gMl0gPSBpLCAhaSkgewogICAgICAgICAgICAgICAgICAgICAgICAgIFEoZiwgMSwgNjQ4NCwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IEUyKGVbdSArIDE2ID4+IDJdLCAxMDgwKSwgZVtlW0EgKyAxMiA+PiAyXSArIDU1ODQgPj4gMl0gPSBpLCAhZVtlW0EgKyAxMiA+PiAyXSArIDU1ODQgPj4gMl0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBRKGYsIDEsIDY0ODQsIDApOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSBFMigxMCwgMjApLCBlW2VbQSArIDEyID4+IDJdICsgNTYxNiA+PiAyXSA9IGksIGkgPSBlW0EgKyAxMiA+PiAyXSwgIWVbaSArIDU2MTYgPj4gMl0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBRKGYsIDEsIDY0ODQsIDApOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbaSArIDU2MjQgPj4gMl0gPSAxMCwgaSA9IEUyKDEwLCAyMCksIGVbZVtBICsgMTIgPj4gMl0gKyA1NjI4ID4+IDJdID0gaSwgaSA9IGVbQSArIDEyID4+IDJdLCAhZVtpICsgNTYyOCA+PiAyXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgIFEoZiwgMSwgNjQ4NCwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlW2kgKyA1NjM2ID4+IDJdID0gMTAsIGsgPSBlW3UgKyAxNiA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaykKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBlW3UgKyAyNCA+PiAyXSwgaSA9IDAsIChrIHwgMCkgIT0gMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobiA9IGsgJiAtMjsgZyA9IGwgKyBaKGksIDUyKSB8IDAsIGVbZyArIDMyID4+IDJdIHx8IChlWyhlW2VbQSArIDEyID4+IDJdICsgNTU4NCA+PiAyXSArIFooaSwgMTA4MCkgfCAwKSArIDEwNzYgPj4gMl0gPSAxIDw8IGVbZyArIDI0ID4+IDJdIC0gMSksIGcgPSBpIHwgMSwgYSA9IGwgKyBaKGcsIDUyKSB8IDAsIGVbYSArIDMyID4+IDJdIHx8IChlWyhlW2VbQSArIDEyID4+IDJdICsgNTU4NCA+PiAyXSArIFooZywgMTA4MCkgfCAwKSArIDEwNzYgPj4gMl0gPSAxIDw8IGVbYSArIDI0ID4+IDJdIC0gMSksIGkgPSBpICsgMiB8IDAsIHIgPSByICsgMiB8IDAsIChuIHwgMCkgIT0gKHIgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoayAmIDEpIHx8IChyID0gbCArIFooaSwgNTIpIHwgMCwgZVtyICsgMzIgPj4gMl0pKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICBlWyhlW2VbQSArIDEyID4+IDJdICsgNTU4NCA+PiAyXSArIFooaSwgMTA4MCkgfCAwKSArIDEwNzYgPj4gMl0gPSAxIDw8IGVbciArIDI0ID4+IDJdIC0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAobykKICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSBlW0EgKyAxNTYgPj4gMl0sIHIgPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPSBFMihlW3UgKyAxNiA+PiAyXSwgMTA4MCksIGVbaSArIDU1ODQgPj4gMl0gPSBrLCAhaykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gMCwgUShmLCAxLCA2NDg0LCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID0gaSArIDU2NDQgfCAwLCByID0gciArIDEgfCAwLCAobyB8IDApID09IChyIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbQSArIDggPj4gMl0gPSA0LCBtID0gZVt1ICsgMTYgPj4gMl0sIG0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gZVtBICsgODggPj4gMl0sIGYgPSBlW0EgKyA5NiA+PiAyXSwgciA9IGkgKyBaKGYsIGVbQSArIDEwOCA+PiAyXSAtIDEgfCAwKSB8IDAsIGYgPSByICsgZiB8IDAsIHIgPSByID4+PiAwID4gZiA+Pj4gMCA/IC0xIDogZiwgZiA9IGVbdSArIDEyID4+IDJdLCByID0gciA+Pj4gMCA8IGYgPj4+IDAgPyByIDogZiwgZyA9IHIgLSAxIHwgMCwgbyA9IDAgLSAhciB8IDAsIHIgPSBlW0EgKyA4NCA+PiAyXSwgZiA9IGVbQSArIDkyID4+IDJdLCBBID0gciArIFooZiwgZVtBICsgMTA0ID4+IDJdIC0gMSB8IDApIHwgMCwgZiA9IEEgKyBmIHwgMCwgQSA9IEEgPj4+IDAgPiBmID4+PiAwID8gLTEgOiBmLCBmID0gZVt1ICsgOCA+PiAyXSwgQSA9IEEgPj4+IDAgPCBmID4+PiAwID8gQSA6IGYsIGEgPSBBIC0gMSB8IDAsIGggPSAwIC0gIUEgfCAwLCBBID0gZVt1ICsgNCA+PiAyXSwgaSA9IEEgPj4+IDAgPCBpID4+PiAwID8gaSA6IEEsIHcgPSBpIC0gMSB8IDAsIEIgPSAwIC0gIWkgfCAwLCBBID0gZVt1ID4+IDJdLCBpID0gQSA+Pj4gMCA8IHIgPj4+IDAgPyByIDogQSwgYyA9IGkgLSAxIHwgMCwgdiA9IDAgLSAhaSB8IDAsIEEgPSBlW3UgKyAyNCA+PiAyXSwgaSA9IDA7IGsgPSBCLCBmID0gZVtBICsgNCA+PiAyXSwgciA9IGYgKyB3IHwgMCwgdSA9IG4wKHIsIHIgPj4+IDAgPCBmID4+PiAwID8gayArIDEgfCAwIDogaywgZiwgMCksIGVbQSArIDIwID4+IDJdID0gdSwgayA9IHYsIGwgPSBlW0EgPj4gMl0sIHIgPSBsICsgYyB8IDAsIEMgPSBuMChyLCByID4+PiAwIDwgbCA+Pj4gMCA/IGsgKyAxIHwgMCA6IGssIGwsIDApLCBlW0EgKyAxNiA+PiAyXSA9IEMsIHIgPSBlW0EgKyA0MCA+PiAyXSwgbiA9IHIgJiAzMSwgKHIgJiA2MykgPj4+IDAgPj0gMzIgPyAoayA9IC0xIDw8IG4sIHMgPSAwKSA6IChzID0gLTEgPDwgbiwgayA9IHMgfCAoMSA8PCBuKSAtIDEgJiAtMSA+Pj4gMzIgLSBuKSwgbiA9IHMgXiAtMSwgayA9IGsgXiAtMSwgcyA9IGssIGsgPSBvLCB5ID0gZiArIGcgfCAwLCBrID0geSA+Pj4gMCA8IGcgPj4+IDAgPyBrICsgMSB8IDAgOiBrLCBrID0gbjAoeSwgaywgZiwgMCkgLSB1IHwgMCwgZiA9IHMsIHUgPSBrLCBrID0gayArIG4gfCAwLCBmID0gdSA+Pj4gMCA+IGsgPj4+IDAgPyBmICsgMSB8IDAgOiBmLCB1ID0gaywgayA9IHIgJiAzMSwgKHIgJiA2MykgPj4+IDAgPj0gMzIgPyBmID0gZiA+Pj4gayB8IDAgOiBmID0gKCgxIDw8IGspIC0gMSAmIGYpIDw8IDMyIC0gayB8IHUgPj4+IGssIGVbQSArIDEyID4+IDJdID0gZiwgayA9IGgsIGYgPSBsICsgYSB8IDAsIGsgPSBmID4+PiAwIDwgYSA+Pj4gMCA/IGsgKyAxIHwgMCA6IGssIGYgPSBuMChmLCBrLCBsLCAwKSAtIEMgfCAwLCBrID0gcywgZiA9IGYgKyBuIHwgMCwgayA9IGYgPj4+IDAgPCBuID4+PiAwID8gayArIDEgfCAwIDogaywgbCA9IGYsIGYgPSByICYgMzEsIChyICYgNjMpID4+PiAwID49IDMyID8gciA9IGsgPj4+IGYgfCAwIDogciA9ICgoMSA8PCBmKSAtIDEgJiBrKSA8PCAzMiAtIGYgfCBsID4+PiBmLCBlW0EgKyA4ID4+IDJdID0gciwgQSA9IEEgKyA1MiB8IDAsIGkgPSBpICsgMSB8IDAsIChtIHwgMCkgIT0gKGkgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICByID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGVbdCArIDE0NCA+PiAyXSA9IHIsIFEoZiwgMSwgMTc2OTEsIHQgKyAxNDQgfCAwKSwgciA9IDA7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByID0gMCwgZVt1ICsgMTYgPj4gMl0gPSAwLCBRKGYsIDEsIDY0ODQsIDApOwogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZVt0ICsgNTIgPj4gMl0gPSBuLCBlW3QgKyA0OCA+PiAyXSA9IGwsIFEoZiwgMSwgMjczOTcsIHQgKyA0OCB8IDApOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZVt0ICsgNDAgPj4gMl0gPSBuLCBlW3QgKyAzNiA+PiAyXSA9IGEsIGVbdCArIDMyID4+IDJdID0gbCwgUShmLCAxLCAyNTY5NSwgdCArIDMyIHwgMCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBYID0gdCArIDE2MCB8IDAsIHIgfCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIHhlKEEsIGksIHIsIGYsIGssIHQsIG4sIGwsIGEsIHUsIG8sIGcsIGgpIHsKICAgICAgICAgICAgICB2YXIgcyA9IDAsIHcgPSAwLCBCID0gMCwgYyA9IDAsIHYgPSAwLCBDID0gMCwgbSA9IDAsIHkgPSAwLCBwID0gMCwgSCA9IDAsIEogPSAwLCBFID0gMCwgRCA9IDAsIFUgPSAwLCBQID0gMCwgeCA9IDAsIHogPSAwLCBqID0gMCwgTyA9IDAsIHEgPSAwLCBmMiA9IDAsIG4yID0gMCwgZzIgPSAwLCB3MiA9IDAsIGMyID0gMCwgbTIgPSAwLCBwMiA9IDAsIFkyID0gMCwgWDIgPSAwLCBEMiA9IDAsIFMyID0gMCwgUDIgPSAwLCB4MiA9IDAsIHoyID0gMDsKICAgICAgICAgICAgICB5ID0gWCAtIDE2IHwgMCwgWCA9IHksIEMgPSBlW0EgKyA0ID4+IDJdLCBnMiA9IGVbQyArIDc2ID4+IDJdICsgWihpLCA1NjQ0KSB8IDAsIEQgPSBlW0EgPj4gMl0sIHcyID0gMSwgdzIgPSBlW0MgKyA4MCA+PiAyXSA/IGVbRCArIDE2ID4+IDJdIDogdzIsIFAyID0gRzJbQyA+PiAxXSwgeDIgPSBlW2cyICsgNDIwID4+IDJdLCBVID0gZywgYzIgPSBoLCBnID0gMCwgYyA9IFggLSAzMiB8IDAsIFggPSBjLCBKID0gaSwgcDIgPSBlW0MgKyA3NiA+PiAyXSArIFooaSwgNTY0NCkgfCAwLCBZMiA9IGVbcDIgKyA0MjAgPj4gMl0sIG0gPSBlW0QgKyAxNiA+PiAyXSwgcCA9IFUyKFoobSwgNTI4KSk7CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKCFwKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICBpID0gVTIobSA8PCAyKTsKICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgIGlmICghaSkgewogICAgICAgICAgICAgICAgICAgICAgaSA9IHA7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoQSA9IG42KEQsIGVbQyArIDc2ID4+IDJdLCBKLCBjMiksIEEpIHsKICAgICAgICAgICAgICAgICAgICAgIGs6IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtKQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoID0gcCwgbSA+Pj4gMCA+PSA4KQogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobTIgPSBtICYgLTg7IHcgPSAodiA8PCAyKSArIGkgfCAwLCBlW3cgPj4gMl0gPSBoLCBlW3cgKyA0ID4+IDJdID0gaCArIDUyOCwgZVt3ICsgOCA+PiAyXSA9IGggKyAxMDU2LCBlW3cgKyAxMiA+PiAyXSA9IGggKyAxNTg0LCBlW3cgKyAxNiA+PiAyXSA9IGggKyAyMTEyLCBlW3cgKyAyMCA+PiAyXSA9IGggKyAyNjQwLCBlW3cgKyAyNCA+PiAyXSA9IGggKyAzMTY4LCBlW3cgKyAyOCA+PiAyXSA9IGggKyAzNjk2LCB2ID0gdiArIDggfCAwLCBoID0gaCArIDQyMjQgfCAwLCBCID0gQiArIDggfCAwLCAobTIgfCAwKSAhPSAoQiB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3ID0gbSAmIDcsICF3KQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBlWyh2IDw8IDIpICsgaSA+PiAyXSA9IGgsIHYgPSB2ICsgMSB8IDAsIGggPSBoICsgNTI4IHwgMCwgcyA9IHMgKyAxIHwgMCwgKHcgfCAwKSAhPSAocyB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgaWYgKEUgPSBZMiArIDEgfCAwLCB0cihELCBDLCBKLCBjICsgMjAgfCAwLCBjICsgMTYgfCAwLCBjICsgMTIgfCAwLCBjICsgOCB8IDAsIGMgKyA0IHwgMCwgYywgYyArIDI0IHwgMCwgYyArIDI4IHwgMCwgaSksIFMyID0gZVtjICsgMjggPj4gMl0sIFAgPSBlW2MgKyAyNCA+PiAyXSwgRltBIHwgMF0gPSBGW0MgKyAxMDAgfCAwXSAmIDEsIFgyID0gWihtLCBQKSwgRDIgPSBaKFgyLCBTMiksIGggPSBaKEQyLCBlW3AyICsgOCA+PiAyXSksIGVbQSArIDggPj4gMl0gPSBoLCBoID0gRTIoaCwgMiksIGVbQSArIDQgPj4gMl0gPSBoLCAhaCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoUihwKSwgUihpKSwgaSA9IGVbQSArIDQgPj4gMl0sIGkgJiYgKFIoaSksIGVbQSArIDQgPj4gMl0gPSAwKSwgIUUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gQTsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodyA9IDAsIEIgPSBBOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoID0gZVtCICsgMjAwID4+IDJdLCBoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocyA9IDAsIHYgPSBlW0IgKyAxOTYgPj4gMl0sIHYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGkgPSBlW2ggKyAxMiA+PiAyXSwgaSAmJiAoUihpKSwgZVtoICsgMTIgPj4gMl0gPSAwLCB2ID0gZVtCICsgMTk2ID4+IDJdKSwgaCA9IGggKyAxNiB8IDAsIHMgPSBzICsgMSB8IDAsIHYgPj4+IDAgPiBzID4+PiAwOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoID0gZVtCICsgMjAwID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgUihoKSwgZVtCICsgMjAwID4+IDJdID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEIgPSBCICsgMjQwIHwgMCwgaSA9ICh3IHwgMCkgPT0gKFkyIHwgMCksIHcgPSB3ICsgMSB8IDAsICEhaSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBBOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgaWYgKG0yID0gZVtEICsgMjQgPj4gMl0sIHggPSBlW2MgKyAyMCA+PiAyXSwgZVtBICsgMjA0ID4+IDJdID0geCwgeiA9IGVbYyArIDEyID4+IDJdLCBlW0EgKyAyMDggPj4gMl0gPSB6LCBqID0gZVtjICsgMTYgPj4gMl0sIGVbQSArIDIxMiA+PiAyXSA9IGosIE8gPSBlW2MgKyA4ID4+IDJdLCBlW0EgKyAyMTYgPj4gMl0gPSBPLCBxID0gZVtjICsgNCA+PiAyXSwgZVtBICsgMjI4ID4+IDJdID0gcSwgZjIgPSBlW2MgPj4gMl0sIGVbQSArIDIzMiA+PiAyXSA9IGYyLCBlW0EgKyAxMiA+PiAyXSA9IEQyLCBlW0EgKyAxNiA+PiAyXSA9IFgyLCBlW0EgKyAyMCA+PiAyXSA9IFAsIGVbQSArIDI0ID4+IDJdID0gMSwgbSkKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChCID0gZVtBICsgMjAwID4+IDJdLCB3ID0gbTI7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaCA9IGVbKEggPDwgMikgKyBpID4+IDJdLCBlW0IgPj4gMl0gPSBlW3cgPj4gMl0sIGVbQiArIDQgPj4gMl0gPSBlW3cgKyA0ID4+IDJdLCBnID0gZVtCICsgOCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICBrOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocyA9IGVbQiArIDEyID4+IDJdLCAoZyB8IDApICE9IDEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobjIgPSBnICYgLTIsIHYgPSAwOyBlW3MgPj4gMl0gPSBlW2ggPj4gMl0sIGVbcyArIDQgPj4gMl0gPSBlW2ggKyA0ID4+IDJdLCBlW3MgKyA4ID4+IDJdID0gZVtoICsgOCA+PiAyXSwgZVtzICsgMTIgPj4gMl0gPSBlW2ggKyAxMiA+PiAyXSwgZVtzICsgMTYgPj4gMl0gPSBlW2ggKyAxNiA+PiAyXSwgZVtzICsgMjAgPj4gMl0gPSBlW2ggKyAyMCA+PiAyXSwgZVtzICsgMjQgPj4gMl0gPSBlW2ggKyAyNCA+PiAyXSwgZVtzICsgMjggPj4gMl0gPSBlW2ggKyAyOCA+PiAyXSwgcyA9IHMgKyAzMiB8IDAsIGggPSBoICsgMzIgfCAwLCB2ID0gdiArIDIgfCAwLCAobjIgfCAwKSAhPSAodiB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoZyAmIDEpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtzID4+IDJdID0gZVtoID4+IDJdLCBlW3MgKyA0ID4+IDJdID0gZVtoICsgNCA+PiAyXSwgZVtzICsgOCA+PiAyXSA9IGVbaCArIDggPj4gMl0sIGVbcyArIDEyID4+IDJdID0gZVtoICsgMTIgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3ID0gdyArIDUyIHwgMCwgQiA9IEIgKyAxNiB8IDAsIEggPSBIICsgMSB8IDAsIChIIHwgMCkgPT0gKG0gfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBpZiAobjIgPSAxLCBFID4+PiAwID4gMSkKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChnID0gQTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtnICsgNDcyID4+IDJdID0gZjIsIGVbZyArIDQ2OCA+PiAyXSA9IHEsIGVbZyArIDQ1NiA+PiAyXSA9IE8sIGVbZyArIDQ1MiA+PiAyXSA9IGosIGVbZyArIDQ0OCA+PiAyXSA9IHosIGVbZyArIDQ0NCA+PiAyXSA9IHgsIGVbZyArIDI2NCA+PiAyXSA9IDEsIGVbZyArIDI2MCA+PiAyXSA9IFAsIGVbZyArIDI1NiA+PiAyXSA9IFgyLCBlW2cgKyAyNTIgPj4gMl0gPSBEMiwgbSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoQiA9IGVbZyArIDQ0MCA+PiAyXSwgSCA9IDAsIHcgPSBtMjsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaCA9IGVbKEggPDwgMikgKyBpID4+IDJdLCBlW0IgPj4gMl0gPSBlW3cgPj4gMl0sIGVbQiArIDQgPj4gMl0gPSBlW3cgKyA0ID4+IDJdLCBFID0gZVtCICsgOCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgazogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghRSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPSBlW0IgKyAxMiA+PiAyXSwgKEUgfCAwKSAhPSAxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh6MiA9IEUgJiAtMiwgdiA9IDA7IGVbcyA+PiAyXSA9IGVbaCA+PiAyXSwgZVtzICsgNCA+PiAyXSA9IGVbaCArIDQgPj4gMl0sIGVbcyArIDggPj4gMl0gPSBlW2ggKyA4ID4+IDJdLCBlW3MgKyAxMiA+PiAyXSA9IGVbaCArIDEyID4+IDJdLCBlW3MgKyAxNiA+PiAyXSA9IGVbaCArIDE2ID4+IDJdLCBlW3MgKyAyMCA+PiAyXSA9IGVbaCArIDIwID4+IDJdLCBlW3MgKyAyNCA+PiAyXSA9IGVbaCArIDI0ID4+IDJdLCBlW3MgKyAyOCA+PiAyXSA9IGVbaCArIDI4ID4+IDJdLCBzID0gcyArIDMyIHwgMCwgaCA9IGggKyAzMiB8IDAsIHYgPSB2ICsgMiB8IDAsICh6MiB8IDApICE9ICh2IHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKEUgJiAxKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtzID4+IDJdID0gZVtoID4+IDJdLCBlW3MgKyA0ID4+IDJdID0gZVtoICsgNCA+PiAyXSwgZVtzICsgOCA+PiAyXSA9IGVbaCArIDggPj4gMl0sIGVbcyArIDEyID4+IDJdID0gZVtoICsgMTIgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHcgPSB3ICsgNTIgfCAwLCBCID0gQiArIDE2IHwgMCwgSCA9IEggKyAxIHwgMCwgKEggfCAwKSA9PSAobSB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoID0gZVtnICsgOCA+PiAyXSwgZVtnICsgMjQ0ID4+IDJdID0gZVtnICsgNCA+PiAyXSwgZVtnICsgMjQ4ID4+IDJdID0gaCwgaCA9IChuMiB8IDApICE9IChZMiB8IDApLCBnID0gZyArIDI0MCB8IDAsIG4yID0gbjIgKyAxIHwgMCwgIWgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgaWYgKFIocCksIFIoaSksICEoSVtwMiArIDU2NDAgfCAwXSAmIDQpKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgaSA9IEcyW0MgPj4gMV07CiAgICAgICAgICAgICAgICAgICAgICBrOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID4+PiAwID49IDMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKFUgfCAwKSA9PSAxIHwgaSA+Pj4gMCA8IDcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChVIHwgMCkgIT0gMSkKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSBlW0MgKyA3NiA+PiAyXSArIFooSiwgNTY0NCkgfCAwLCBlW2kgKyA0OTIgPj4gMl0gPSAwLCBlW2kgKyA1NDQgPj4gMl0gPSBmMiwgZVtpICsgNTQwID4+IDJdID0gcSwgZVtpICsgNTM2ID4+IDJdID0gTywgZVtpICsgNTMyID4+IDJdID0geiwgZVtpICsgNTI4ID4+IDJdID0gaiwgZVtpICsgNTI0ID4+IDJdID0geCwgZVtpICsgNTIwID4+IDJdID0gUCwgZVtpICsgNTA0ID4+IDJdID0gMCwgZVtpICsgNTE2ID4+IDJdID0gZVtpICsgNDQwID4+IDJdLCBnID0gZVtpICsgNDI4ID4+IDJdLCBlW2kgKyA0OTYgPj4gMl0gPSBlW2kgKyA0MjQgPj4gMl0sIGVbaSArIDUwMCA+PiAyXSA9IGcsIGcgPSBlW2kgKyA0MzYgPj4gMl0sIGVbaSArIDUwOCA+PiAyXSA9IGVbaSArIDQzMiA+PiAyXSwgZVtpICsgNTEyID4+IDJdID0gZywgZVtpICsgNDYwID4+IDJdID0gZVtpICsgNDU2ID4+IDJdLCBnID0gZVtpICsgNDIwID4+IDJdLCBnIC0gMSA+Pj4gMCA+IDQyOTQ5NjcyOTMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZyA9IEE7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBmb3IgKGggPSBpICsgNTcyIHwgMCwgcyA9IDE7IGVbaCArIDgwID4+IDJdID0gMCwgZVtoICsgMTIwID4+IDJdID0gZjIsIGVbaCArIDExNiA+PiAyXSA9IHEsIGVbaCArIDExMiA+PiAyXSA9IE8sIGVbaCArIDEwOCA+PiAyXSA9IHosIGVbaCArIDEwNCA+PiAyXSA9IGosIGVbaCArIDEwMCA+PiAyXSA9IHgsIGVbaCArIDk2ID4+IDJdID0gUCwgaSA9IGVbaCArIDQgPj4gMl0sIGVbaCArIDcyID4+IDJdID0gZVtoID4+IDJdLCBlW2ggKyA3NiA+PiAyXSA9IGksIGkgPSBlW2ggKyAxNiA+PiAyXSwgZVtoICsgODggPj4gMl0gPSBlW2ggKyAxMiA+PiAyXSwgZVtoICsgOTIgPj4gMl0gPSBpLCBpID0gZVtoICsgOCA+PiAyXSwgZVtoICsgODQgPj4gMl0gPSBpLCBlW2ggKyAzNiA+PiAyXSA9IGVbaCArIDMyID4+IDJdLCBlW2ggKyA2OCA+PiAyXSA9IGkgPj4+IDAgPiBkW2ggKyAtNjQgPj4gMl0gPyBpIDogMCwgaCA9IGggKyAxNDggfCAwLCBpID0gKGcgfCAwKSA9PSAocyB8IDApLCBzID0gcyArIDEgfCAwLCAhaTsgKQogICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICBnID0gQTsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIFIocCk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgUihpKTsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChpID0gZVtDICsgNzYgPj4gMl0gKyBaKEosIDU2NDQpIHwgMCwgZyA9IGVbaSArIDQyMCA+PiAyXSwgKGcgfCAwKSA9PSAtMSkgewogICAgICAgICAgICAgICAgICBnID0gQTsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZvciAoaCA9IGkgKyA0MjQgfCAwLCB3ID0gZVtpICsgNCA+PiAyXSwgaSA9IGVbaSArIDggPj4gMl0sIHMgPSAwOyBlW2ggKyA5MiA+PiAyXSA9IG0sIGVbaCArIDc2ID4+IDJdID0gMCwgZVtoICsgODAgPj4gMl0gPSAwLCBlW2ggKyA4OCA+PiAyXSA9IFMyLCBlW2ggKyA4NCA+PiAyXSA9IGksIGVbaCArIDY4ID4+IDJdID0gMCwgZVtoICsgNzIgPj4gMl0gPSAwLCBlW2ggKyAxMjAgPj4gMl0gPSBmMiwgZVtoICsgMTE2ID4+IDJdID0gcSwgZVtoICsgMTEyID4+IDJdID0gTywgZVtoICsgMTA4ID4+IDJdID0geiwgZVtoICsgMTA0ID4+IDJdID0gaiwgZVtoICsgMTAwID4+IDJdID0geCwgZVtoICsgOTYgPj4gMl0gPSBQLCBlW2ggKyAzNiA+PiAyXSA9IHcsIGggPSBoICsgMTQ4IHwgMCwgcCA9IChnIHwgMCkgPT0gKHMgfCAwKSwgcyA9IHMgKyAxIHwgMCwgIXA7ICkKICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgZyA9IEE7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIFggPSBjICsgMzIgfCAwLCBpID0gZzsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAoIWkpIHsKICAgICAgICAgICAgICAgICAgdyA9IDA7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBoID0geDIgKyAxIHwgMCwgdyA9IDAsIGVbdCA+PiAyXSA9IDA7CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICBpZiAoIVUpIHsKICAgICAgICAgICAgICAgICAgICAgIGlmICghdzIpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICBmb3IgKG8gPSAwLCBwID0gKFAyIHwgMCkgPT0gNDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChnID0gMSwgbCA9IDAsIHcgPSAwLCBBID0gaTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRzQoaSwgQywgSiwgdywgbywgdSwgMCksIGVbQSArIDg0ID4+IDJdID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZShBKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZFtBICsgNDAgPj4gMl0gPCBmID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHcgPSAwLCBlW3kgKyAxMiA+PiAyXSA9IDAsICFrcihyLCBnMiwgQSwgaywgeSArIDEyIHwgMCwgbiwgMCwgYzIpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gZVt5ICsgMTIgPj4gMl0sIGVbdCA+PiAyXSA9IGEgKyBlW3QgPj4gMl0sIG4gPSBuIC0gYSB8IDAsIGwgPSBsICsgYSB8IDAsIGsgPSBrICsgYSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsZShBKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA9IGVbQyArIDgwID4+IDJdLCAhKCFhIHwgbCA+Pj4gMCA8PSBhID4+PiAwKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdyA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQSA9IEEgKyAyNDAgfCAwLCBhID0gZyAmIHAsIHcgPSAxLCBnID0gMCwgIWEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAobyA9IG8gKyAxIHwgMCwgKHcyIHwgMCkgPT0gKG8gfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChHNChpLCBDLCBKLCBvLCBhLCB1LCBVKSwgQSA9IGkgKyBaKG8sIDI0MCkgfCAwLCBlW0EgKyA4NCA+PiAyXSA9PSAtMSB8fCAhKCFsIHwgIWVbbCA+PiAyXSkgJiYgKGEgPSBVMihkNihELCBDLCBKKSA8PCAyKSwgZVtsICsgOCA+PiAyXSA9IGEsICFhKSkKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFsZShBKSkKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFsKQogICAgICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkW0EgKyA0MCA+PiAyXSA8IGYgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodyA9IDAsIGVbeSArIDEyID4+IDJdID0gMCwgIWtyKHIsIGcyLCBBLCBrLCB5ICsgMTIgfCAwLCBuLCBVLCBjMikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBlW3kgKyAxMiA+PiAyXSwgZVt0ID4+IDJdID0gbCArIGVbdCA+PiAyXSwgZVtyICsgODQwID4+IDJdID0gZVtyICsgODQwID4+IDJdICsgMSwgbiA9IG4gLSBsIHwgMCwgayA9IGsgKyBsIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAodyA9IDEsICFsZShBKSkKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgaWYgKGRbQSArIDQwID4+IDJdIDwgZiA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVt5ICsgMTIgPj4gMl0gPSAwLCAha3IociwgZzIsIEEsIGssIHkgKyAxMiB8IDAsIG4sIFUsIGMyKSkKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICBhID0gZVt5ICsgMTIgPj4gMl0sIGVbdCA+PiAyXSA9IGEgKyBlW3QgPj4gMl0sIGVbbCA+PiAyXSAmJiAoZVtlW2wgKyA4ID4+IDJdICsgKGVbbCArIDQgPj4gMl0gPDwgMikgPj4gMl0gPSBhLCBlW2wgKyA0ID4+IDJdID0gZVtsICsgNCA+PiAyXSArIDEpLCBuID0gbiAtIGEgfCAwLCBlW3IgKyA4NDAgPj4gMl0gPSBlW3IgKyA4NDAgPj4gMl0gKyAxLCBrID0gayArIGEgfCAwOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgaWYgKCFsZShBKSkKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIHcgPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgQ2koaSwgaCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBYID0geSArIDE2IHwgMCwgdzsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBfQShBLCBpLCByLCBmLCBrLCB0KSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDAsIHIgPSByIHwgMCwgZiA9IGYgfCAwLCBrID0gayB8IDAsIHQgPSB0IHwgMDsKICAgICAgICAgICAgICB2YXIgbiA9IDAsIGwgPSAwLCBhID0gMCwgdSA9IDAsIG8gPSAwLCBnID0gMCwgaCA9IDAsIHMgPSAwLCB3ID0gMCwgQiA9IDAsIGMgPSAwLCB2ID0gMCwgQyA9IDAsIG0gPSAwLCB5ID0gMCwgcCA9IDA7CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKChyIHwgMCkgPT0gMSkKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIHAgPSAoKGYgfCAwKSAhPSAwKSArIHIgfCAwLCBjID0gcCA+Pj4gMSB8IDAsIHcgPSByIC0gYyB8IDA7CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICBpZiAoKHQgfCAwKSAhPSA4KSB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoIXIpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoIXQpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICBmb3IgKG4gPSA3IC0gdCB8IDAsIHYgPSAoKG4gPj4+IDAgPD0gNyA/IG4gOiAwKSA8PCAyKSArIDQgfCAwLCBtID0gdCAmIC00LCBvID0gdCAmIDMsIHkgPSAodCA8PCAyKSArIGkgfCAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZyA9IEIgPDwgNSwgYSA9IGcgKyBpIHwgMCwgbCA9IChaKGssIEIpIDw8IDIpICsgQSB8IDAsIG4gPSAwLCBzID0gMCwgdCA+Pj4gMCA+PSA0KQogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyB1ID0gbiA8PCAyLCBlW3UgKyBhID4+IDJdID0gZVtsICsgdSA+PiAyXSwgQyA9IHUgfCA0LCBlW0MgKyBhID4+IDJdID0gZVtsICsgQyA+PiAyXSwgdSA9IHUgfCA4LCBlW3UgKyBhID4+IDJdID0gZVtsICsgdSA+PiAyXSwgdSA9IG4gfCAzLCBDID0gdSA8PCAyLCBlW0MgKyBhID4+IDJdID0gZVtsICsgQyA+PiAyXSwgbiA9IG4gKyA0IHwgMCwgcyA9IHMgKyA0IHwgMCwgKG0gfCAwKSAhPSAocyB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzID0gMCwgbykKICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgdSA9IG4gPDwgMiwgZVt1ICsgYSA+PiAyXSA9IGVbbCArIHUgPj4gMl0sIHUgPSBuLCBuID0gbiArIDEgfCAwLCBzID0gcyArIDEgfCAwLCAobyB8IDApICE9IChzIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHUgPj4+IDAgPD0gNiAmJiBkMihnICsgeSB8IDAsIDAsIHYpLCBCID0gQiArIDEgfCAwLCAoQiB8IDApID09IChyIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoIXIpCiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgIGZvciAocyA9IHIgJiAtMiwgQiA9IHIgJiAxOyBhID0gKFooaywgbikgPDwgMikgKyBBIHwgMCwgbyA9IGVbYSArIDQgPj4gMl0sIGwgPSAobiA8PCA1KSArIGkgfCAwLCBlW2wgPj4gMl0gPSBlW2EgPj4gMl0sIGVbbCArIDQgPj4gMl0gPSBvLCBvID0gZVthICsgMjggPj4gMl0sIGVbbCArIDI0ID4+IDJdID0gZVthICsgMjQgPj4gMl0sIGVbbCArIDI4ID4+IDJdID0gbywgbyA9IGVbYSArIDIwID4+IDJdLCBlW2wgKyAxNiA+PiAyXSA9IGVbYSArIDE2ID4+IDJdLCBlW2wgKyAyMCA+PiAyXSA9IG8sIG8gPSBlW2EgKyAxMiA+PiAyXSwgZVtsICsgOCA+PiAyXSA9IGVbYSArIDggPj4gMl0sIGVbbCArIDEyID4+IDJdID0gbywgYSA9IG4gfCAxLCBsID0gKGEgPDwgNSkgKyBpIHwgMCwgYSA9IChaKGssIGEpIDw8IDIpICsgQSB8IDAsIG8gPSBlW2EgKyAyOCA+PiAyXSwgZVtsICsgMjQgPj4gMl0gPSBlW2EgKyAyNCA+PiAyXSwgZVtsICsgMjggPj4gMl0gPSBvLCBvID0gZVthICsgMjAgPj4gMl0sIGVbbCArIDE2ID4+IDJdID0gZVthICsgMTYgPj4gMl0sIGVbbCArIDIwID4+IDJdID0gbywgbyA9IGVbYSArIDEyID4+IDJdLCBlW2wgKyA4ID4+IDJdID0gZVthICsgOCA+PiAyXSwgZVtsICsgMTIgPj4gMl0gPSBvLCBvID0gZVthICsgNCA+PiAyXSwgZVtsID4+IDJdID0gZVthID4+IDJdLCBlW2wgKyA0ID4+IDJdID0gbywgbiA9IG4gKyAyIHwgMCwgdSA9IHUgKyAyIHwgMCwgKHMgfCAwKSAhPSAodSB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFCKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICBhID0gKG4gPDwgNSkgKyBpIHwgMCwgbiA9IChaKGssIG4pIDw8IDIpICsgQSB8IDAsIGwgPSBlW24gKyA0ID4+IDJdLCBlW2EgPj4gMl0gPSBlW24gPj4gMl0sIGVbYSArIDQgPj4gMl0gPSBsLCBsID0gZVtuICsgMjggPj4gMl0sIGVbYSArIDI0ID4+IDJdID0gZVtuICsgMjQgPj4gMl0sIGVbYSArIDI4ID4+IDJdID0gbCwgbCA9IGVbbiArIDIwID4+IDJdLCBlW2EgKyAxNiA+PiAyXSA9IGVbbiArIDE2ID4+IDJdLCBlW2EgKyAyMCA+PiAyXSA9IGwsIGwgPSBlW24gKyAxMiA+PiAyXSwgZVthICsgOCA+PiAyXSA9IGVbbiArIDggPj4gMl0sIGVbYSArIDEyID4+IDJdID0gbDsKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGQyKGksIDAsIHIgPDwgNSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoYSA9IDAsIHMgPSAhZiwgbCA9IChzIDw8IDUpICsgaSB8IDAsIHUgPSAoZiB8IDApICE9IDAsIG4gPSAodSA8PCA1KSArIGkgfCAwLCBCID0gbiArIDMyIHwgMCwgdSA9IGMgLSB1IHwgMCwgdSA9ICh1IHwgMCkgPiAodyB8IDApID8gdyA6IHUsIGhpKGwsIEIsIHcsIHUsIFcoLTEuNTg2MTM0MzE0NTM3MDQ4MykpLCBvID0gbCArIDMyIHwgMCwgdiA9IHcgLSBzIHwgMCwgdiA9IChjIHwgMCkgPCAodiB8IDApID8gYyA6IHYsIGhpKG4sIG8sIGMsIHYsIFcoLTAuMDUyOTgwMTE3NDk5ODI4MzQpKSwgaGkobCwgQiwgdywgdSwgVygwLjg4MjkxMTA4NjA4MjQ1ODUpKSwgaGkobiwgbywgYywgdiwgVygwLjQ0MzUwNjg2NjY5MzQ5NjcpKSwgdykKICAgICAgICAgICAgICAgICAgZm9yIChCID0gbiArIDI4IHwgMCwgbyA9IG4gKyAyNCB8IDAsIHYgPSBuICsgMjAgfCAwLCBtID0gbiArIDE2IHwgMCwgeSA9IG4gKyAxMiB8IDAsIGcgPSBuICsgOCB8IDAsIEMgPSBuICsgNCB8IDA7IHUgPSBhIDw8IDYsIGggPSB1ICsgbiB8IDAsIEdbaCA+PiAyXSA9IEdbaCA+PiAyXSAqIFcoMS4yMzAxNzQwNjQ2MzYyMzA1KSwgaCA9IHUgKyBDIHwgMCwgR1toID4+IDJdID0gR1toID4+IDJdICogVygxLjIzMDE3NDA2NDYzNjIzMDUpLCBoID0gdSArIGcgfCAwLCBHW2ggPj4gMl0gPSBHW2ggPj4gMl0gKiBXKDEuMjMwMTc0MDY0NjM2MjMwNSksIGggPSB1ICsgeSB8IDAsIEdbaCA+PiAyXSA9IEdbaCA+PiAyXSAqIFcoMS4yMzAxNzQwNjQ2MzYyMzA1KSwgaCA9IHUgKyBtIHwgMCwgR1toID4+IDJdID0gR1toID4+IDJdICogVygxLjIzMDE3NDA2NDYzNjIzMDUpLCBoID0gdSArIHYgfCAwLCBHW2ggPj4gMl0gPSBHW2ggPj4gMl0gKiBXKDEuMjMwMTc0MDY0NjM2MjMwNSksIGggPSB1ICsgbyB8IDAsIEdbaCA+PiAyXSA9IEdbaCA+PiAyXSAqIFcoMS4yMzAxNzQwNjQ2MzYyMzA1KSwgdSA9IHUgKyBCIHwgMCwgR1t1ID4+IDJdID0gR1t1ID4+IDJdICogVygxLjIzMDE3NDA2NDYzNjIzMDUpLCBhID0gYSArIDEgfCAwLCAodyB8IDApICE9IChhIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICBrOiB7CiAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwID4+PiAwID49IDIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHUgPSBsICsgMjggfCAwLCBCID0gbCArIDI0IHwgMCwgbyA9IGwgKyAyMCB8IDAsIHAgPSBsICsgMTYgfCAwLCB2ID0gbCArIDEyIHwgMCwgbSA9IGwgKyA4IHwgMCwgeSA9IGwgKyA0IHwgMCwgYSA9IDA7IG4gPSBhIDw8IDYsIGcgPSBuICsgbCB8IDAsIEdbZyA+PiAyXSA9IEdbZyA+PiAyXSAqIFcoMC44MTI4OTMwOTI2MzIyOTM3KSwgZyA9IG4gKyB5IHwgMCwgR1tnID4+IDJdID0gR1tnID4+IDJdICogVygwLjgxMjg5MzA5MjYzMjI5MzcpLCBnID0gbiArIG0gfCAwLCBHW2cgPj4gMl0gPSBHW2cgPj4gMl0gKiBXKDAuODEyODkzMDkyNjMyMjkzNyksIGcgPSBuICsgdiB8IDAsIEdbZyA+PiAyXSA9IEdbZyA+PiAyXSAqIFcoMC44MTI4OTMwOTI2MzIyOTM3KSwgZyA9IG4gKyBwIHwgMCwgR1tnID4+IDJdID0gR1tnID4+IDJdICogVygwLjgxMjg5MzA5MjYzMjI5MzcpLCBnID0gbiArIG8gfCAwLCBHW2cgPj4gMl0gPSBHW2cgPj4gMl0gKiBXKDAuODEyODkzMDkyNjMyMjkzNyksIGcgPSBuICsgQiB8IDAsIEdbZyA+PiAyXSA9IEdbZyA+PiAyXSAqIFcoMC44MTI4OTMwOTI2MzIyOTM3KSwgbiA9IG4gKyB1IHwgMCwgR1tuID4+IDJdID0gR1tuID4+IDJdICogVygwLjgxMjg5MzA5MjYzMjI5MzcpLCBhID0gYSArIDEgfCAwLCAoYyB8IDApICE9IChhIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHQgfCAwKSAhPSA4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IGMgLSAxIHwgMCwgdSA9IDAsIGYgPSAoZiB8IDApICE9IDAsIHMgPSBjICYgMywgcykKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IGMsIG4gPSBBOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh0IHwgMCkgIT0gOCkKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICBzID0gKChmIHwgMCkgIT0gMCkgPDwgMzsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGZvciAoQiA9IGsgPDwgMiwgYSA9IGMsIG4gPSBBOyBvID0gZVtsICsgNCA+PiAyXSwgZVtuID4+IDJdID0gZVtsID4+IDJdLCBlW24gKyA0ID4+IDJdID0gbywgbyA9IGVbbCArIDI4ID4+IDJdLCBlW24gKyAyNCA+PiAyXSA9IGVbbCArIDI0ID4+IDJdLCBlW24gKyAyOCA+PiAyXSA9IG8sIG8gPSBlW2wgKyAyMCA+PiAyXSwgZVtuICsgMTYgPj4gMl0gPSBlW2wgKyAxNiA+PiAyXSwgZVtuICsgMjAgPj4gMl0gPSBvLCBvID0gZVtsICsgMTIgPj4gMl0sIGVbbiArIDggPj4gMl0gPSBlW2wgKyA4ID4+IDJdLCBlW24gKyAxMiA+PiAyXSA9IG8sIGwgPSBsIC0gLTY0IHwgMCwgYSA9IGEgLSAxIHwgMCwgbiA9IG4gKyBCIHwgMCwgdSA9IHUgKyAxIHwgMCwgKHMgfCAwKSAhPSAodSB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKHMgPSBmIDw8IDMsIHQgPj4+IDAgPCAzKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICBmb3IgKHQgPSBrIDw8IDI7IGYgPSBlW2wgKyA0ID4+IDJdLCBlW24gPj4gMl0gPSBlW2wgPj4gMl0sIGVbbiArIDQgPj4gMl0gPSBmLCBmID0gZVtsICsgMjggPj4gMl0sIGVbbiArIDI0ID4+IDJdID0gZVtsICsgMjQgPj4gMl0sIGVbbiArIDI4ID4+IDJdID0gZiwgZiA9IGVbbCArIDIwID4+IDJdLCBlW24gKyAxNiA+PiAyXSA9IGVbbCArIDE2ID4+IDJdLCBlW24gKyAyMCA+PiAyXSA9IGYsIGYgPSBlW2wgKyAxMiA+PiAyXSwgZVtuICsgOCA+PiAyXSA9IGVbbCArIDggPj4gMl0sIGVbbiArIDEyID4+IDJdID0gZiwgZiA9IHQgKyBuIHwgMCwgbiA9IGVbbCArIDkyID4+IDJdLCBlW2YgKyAyNCA+PiAyXSA9IGVbbCArIDg4ID4+IDJdLCBlW2YgKyAyOCA+PiAyXSA9IG4sIG4gPSBlW2wgKyA4NCA+PiAyXSwgZVtmICsgMTYgPj4gMl0gPSBlW2wgKyA4MCA+PiAyXSwgZVtmICsgMjAgPj4gMl0gPSBuLCBuID0gZVtsICsgNzYgPj4gMl0sIGVbZiArIDggPj4gMl0gPSBlW2wgKyA3MiA+PiAyXSwgZVtmICsgMTIgPj4gMl0gPSBuLCBuID0gZVtsICsgNjggPj4gMl0sIGVbZiA+PiAyXSA9IGVbbCArIDY0ID4+IDJdLCBlW2YgKyA0ID4+IDJdID0gbiwgbiA9IGVbbCArIDE1NiA+PiAyXSwgZiA9IGYgKyB0IHwgMCwgZVtmICsgMjQgPj4gMl0gPSBlW2wgKyAxNTIgPj4gMl0sIGVbZiArIDI4ID4+IDJdID0gbiwgbiA9IGVbbCArIDE0OCA+PiAyXSwgZVtmICsgMTYgPj4gMl0gPSBlW2wgKyAxNDQgPj4gMl0sIGVbZiArIDIwID4+IDJdID0gbiwgbiA9IGVbbCArIDE0MCA+PiAyXSwgZVtmICsgOCA+PiAyXSA9IGVbbCArIDEzNiA+PiAyXSwgZVtmICsgMTIgPj4gMl0gPSBuLCBuID0gZVtsICsgMTMyID4+IDJdLCBlW2YgPj4gMl0gPSBlW2wgKyAxMjggPj4gMl0sIGVbZiArIDQgPj4gMl0gPSBuLCBuID0gZVtsICsgMjIwID4+IDJdLCBmID0gZiArIHQgfCAwLCBlW2YgKyAyNCA+PiAyXSA9IGVbbCArIDIxNiA+PiAyXSwgZVtmICsgMjggPj4gMl0gPSBuLCBuID0gZVtsICsgMjEyID4+IDJdLCBlW2YgKyAxNiA+PiAyXSA9IGVbbCArIDIwOCA+PiAyXSwgZVtmICsgMjAgPj4gMl0gPSBuLCBuID0gZVtsICsgMjA0ID4+IDJdLCBlW2YgKyA4ID4+IDJdID0gZVtsICsgMjAwID4+IDJdLCBlW2YgKyAxMiA+PiAyXSA9IG4sIG4gPSBlW2wgKyAxOTYgPj4gMl0sIGVbZiA+PiAyXSA9IGVbbCArIDE5MiA+PiAyXSwgZVtmICsgNCA+PiAyXSA9IG4sIG4gPSBmICsgdCB8IDAsIGwgPSBsICsgMjU2IHwgMCwgYSA9IGEgLSA0IHwgMCwgISFhOyApCiAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKCF3KQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIGlmIChuID0gKHMgPDwgMikgKyBpIHwgMCwgbCA9IChaKGssIGMpIDw8IDIpICsgQSB8IDAsIEEgPSB3ICYgMywgQSkKICAgICAgICAgICAgICAgICAgICBmb3IgKGEgPSAwLCBpID0gayA8PCAyOyBmID0gZVtuICsgNCA+PiAyXSwgZVtsID4+IDJdID0gZVtuID4+IDJdLCBlW2wgKyA0ID4+IDJdID0gZiwgZiA9IGVbbiArIDI4ID4+IDJdLCBlW2wgKyAyNCA+PiAyXSA9IGVbbiArIDI0ID4+IDJdLCBlW2wgKyAyOCA+PiAyXSA9IGYsIGYgPSBlW24gKyAyMCA+PiAyXSwgZVtsICsgMTYgPj4gMl0gPSBlW24gKyAxNiA+PiAyXSwgZVtsICsgMjAgPj4gMl0gPSBmLCBmID0gZVtuICsgMTIgPj4gMl0sIGVbbCArIDggPj4gMl0gPSBlW24gKyA4ID4+IDJdLCBlW2wgKyAxMiA+PiAyXSA9IGYsIG4gPSBuIC0gLTY0IHwgMCwgdyA9IHcgLSAxIHwgMCwgbCA9IGkgKyBsIHwgMCwgYSA9IGEgKyAxIHwgMCwgKEEgfCAwKSAhPSAoYSB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgIGlmIChjIC0gciA+Pj4gMCA+IDQyOTQ5NjcyOTIpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgZm9yIChpID0gayA8PCAyOyBBID0gZVtuICsgNCA+PiAyXSwgZVtsID4+IDJdID0gZVtuID4+IDJdLCBlW2wgKyA0ID4+IDJdID0gQSwgQSA9IGVbbiArIDI4ID4+IDJdLCBlW2wgKyAyNCA+PiAyXSA9IGVbbiArIDI0ID4+IDJdLCBlW2wgKyAyOCA+PiAyXSA9IEEsIEEgPSBlW24gKyAyMCA+PiAyXSwgZVtsICsgMTYgPj4gMl0gPSBlW24gKyAxNiA+PiAyXSwgZVtsICsgMjAgPj4gMl0gPSBBLCBBID0gZVtuICsgMTIgPj4gMl0sIGVbbCArIDggPj4gMl0gPSBlW24gKyA4ID4+IDJdLCBlW2wgKyAxMiA+PiAyXSA9IEEsIHIgPSBlW24gKyA5MiA+PiAyXSwgQSA9IGkgKyBsIHwgMCwgZVtBICsgMjQgPj4gMl0gPSBlW24gKyA4OCA+PiAyXSwgZVtBICsgMjggPj4gMl0gPSByLCByID0gZVtuICsgODQgPj4gMl0sIGVbQSArIDE2ID4+IDJdID0gZVtuICsgODAgPj4gMl0sIGVbQSArIDIwID4+IDJdID0gciwgciA9IGVbbiArIDc2ID4+IDJdLCBlW0EgKyA4ID4+IDJdID0gZVtuICsgNzIgPj4gMl0sIGVbQSArIDEyID4+IDJdID0gciwgciA9IGVbbiArIDY4ID4+IDJdLCBlW0EgPj4gMl0gPSBlW24gKyA2NCA+PiAyXSwgZVtBICsgNCA+PiAyXSA9IHIsIHIgPSBlW24gKyAxNTYgPj4gMl0sIEEgPSBBICsgaSB8IDAsIGVbQSArIDI0ID4+IDJdID0gZVtuICsgMTUyID4+IDJdLCBlW0EgKyAyOCA+PiAyXSA9IHIsIHIgPSBlW24gKyAxNDggPj4gMl0sIGVbQSArIDE2ID4+IDJdID0gZVtuICsgMTQ0ID4+IDJdLCBlW0EgKyAyMCA+PiAyXSA9IHIsIHIgPSBlW24gKyAxNDAgPj4gMl0sIGVbQSArIDggPj4gMl0gPSBlW24gKyAxMzYgPj4gMl0sIGVbQSArIDEyID4+IDJdID0gciwgciA9IGVbbiArIDEzMiA+PiAyXSwgZVtBID4+IDJdID0gZVtuICsgMTI4ID4+IDJdLCBlW0EgKyA0ID4+IDJdID0gciwgciA9IGVbbiArIDIyMCA+PiAyXSwgQSA9IEEgKyBpIHwgMCwgZVtBICsgMjQgPj4gMl0gPSBlW24gKyAyMTYgPj4gMl0sIGVbQSArIDI4ID4+IDJdID0gciwgciA9IGVbbiArIDIxMiA+PiAyXSwgZVtBICsgMTYgPj4gMl0gPSBlW24gKyAyMDggPj4gMl0sIGVbQSArIDIwID4+IDJdID0gciwgciA9IGVbbiArIDIwNCA+PiAyXSwgZVtBICsgOCA+PiAyXSA9IGVbbiArIDIwMCA+PiAyXSwgZVtBICsgMTIgPj4gMl0gPSByLCByID0gZVtuICsgMTk2ID4+IDJdLCBlW0EgPj4gMl0gPSBlW24gKyAxOTIgPj4gMl0sIGVbQSArIDQgPj4gMl0gPSByLCBsID0gQSArIGkgfCAwLCBuID0gbiArIDI1NiB8IDAsIHcgPSB3IC0gNCB8IDAsICEhdzsgKQogICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIF80KGksIEEsIHcsIGMsIGssIHMsIHQpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBHZShBKSB7CiAgICAgICAgICAgICAgdmFyIGkgPSAwLCByID0gMCwgZiA9IDAsIGsgPSAwLCB0ID0gMCwgbiA9IDAsIGwgPSAwLCBhID0gMCwgdSA9IDAsIG8gPSAwLCBnID0gMCwgaCA9IDA7CiAgICAgICAgICAgICAgayA9IGVbQSArIDMyID4+IDJdOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGlmIChrKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICBpZiAobCA9IGVbQSArIDE2ID4+IDJdLCAobCB8IDApID4gNSkgewogICAgICAgICAgICAgICAgICAgIGsgPSBsOwogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgciA9IGVbQSArIDIwID4+IDJdOwogICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgazogewogICAgICAgICAgICAgICAgICAgICAgaWYgKChyIHwgMCkgPj0gNSkgewogICAgICAgICAgICAgICAgICAgICAgICBpID0gZVtBID4+IDJdLCBrID0gZVtpID4+IDJdLCBlW0EgPj4gMl0gPSBpICsgNCwgYSA9IHIgLSA0IHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlmICgociB8IDApIDw9IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgayA9IC0xOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgaSA9IGVbQSA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgIGY6IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChyIHwgMCkgPT0gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAtMSwgciA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBuID0gLTEsIHQgPSByIC0gMSB8IDAsIG8gPSB0ICYgMTsKICAgICAgICAgICAgICAgICAgICAgICAgQTogewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgociB8IDApID09IDIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSAwLCBmID0gcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodSA9IHQgJiAtMiwgayA9IDAsIHQgPSBpLCBmID0gcjsgZVtBID4+IDJdID0gdCArIDEsIGcgPSBJW3QgfCAwXSwgaSA9IHQgKyAyIHwgMCwgZVtBID4+IDJdID0gaSwgZVtBICsgMjAgPj4gMl0gPSBmIC0gMSwgdCA9IElbdCArIDEgfCAwXSwgZiA9IGYgLSAyIHwgMCwgZVtBICsgMjAgPj4gMl0gPSBmLCBuID0gKCgyNTUgPDwgayBeIC0xKSAmIG4gfCBnIDw8IGspICYgKDY1MjgwIDw8IGsgXiAtMSkgfCB0IDw8IChrIHwgOCksIGsgPSBrICsgMTYgfCAwLCB0ID0gaSwgaCA9IGggKyAyIHwgMCwgKHUgfCAwKSAhPSAoaCB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgbyAmJiAodCA9IGkgKyAxIHwgMCwgZVtBID4+IDJdID0gdCwgaSA9IElbaSB8IDBdLCBlW0EgKyAyMCA+PiAyXSA9IGYgLSAxLCBuID0gKDI1NSA8PCBrIF4gLTEpICYgbiB8IGkgPDwgaywgaSA9IHQpLCByID0gKHIgPDwgMykgLSA4IHwgMDsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGVbQSA+PiAyXSA9IGkgKyAxLCBrID0gKDI1NSA8PCByIF4gLTEpICYgbiB8IChJW2kgfCAwXSB8IDE1KSA8PCByOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlW0EgKyAyMCA+PiAyXSA9IGE7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKGkgPSBlW0EgKyAyNCA+PiAyXSwgciA9IGsgPj4+IDI0IHwgMCwgZVtBICsgMjQgPj4gMl0gPSAociB8IDApID09IDI1NSwgYSA9IGsgPj4+IDE2ICYgMjU1LCBvID0gKGEgfCAwKSA9PSAyNTUsIG4gPSBrICYgMjU1LCB0ID0gKG4gfCAwKSA9PSAyNTUsIHUgPSBpICsgdCB8IDAsIGkgPSBrID4+PiA4ICYgMjU1LCBmID0gKGkgfCAwKSA9PSAyNTUsIHUgPSBvICsgKHUgKyBmIHwgMCkgfCAwLCBrID0gKGwgLSB1IHwgMCkgKyAzMiB8IDAsIGVbQSArIDE2ID4+IDJdID0gaywgZyA9IGVbQSArIDEyID4+IDJdLCBpID0gciB8IChhIHwgKGkgfCBuIDw8ICh0ID8gNyA6IDgpKSA8PCAoZiA/IDcgOiA4KSkgPDwgKG8gPyA3IDogOCksIHIgPSAodSAtIGwgfCAwKSArIDMyIHwgMCwgbiA9IHIgJiAzMSwgKHIgJiA2MykgPj4+IDAgPj0gMzIgPyAociA9IGkgPDwgbiwgdCA9IDApIDogKHIgPSAoMSA8PCBuKSAtIDEgJiBpID4+PiAzMiAtIG4sIHQgPSBpIDw8IG4pLCBlW0EgKyA4ID4+IDJdID0gdCB8IGVbQSArIDggPj4gMl0sIGVbQSArIDEyID4+IDJdID0gciB8IGcsIChrIHwgMCkgPj0gNikKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICBrID0gMDsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGYgPSBlW0EgKyAyOCA+PiAyXSwgciA9IGVbKGYgPDwgMikgKyAzNTg4OCA+PiAyXSwgdCA9IGVbQSArIDggPj4gMl0sIGkgPSBlW0EgKyAxMiA+PiAyXSwgbiA9IGk7CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIGlmICgoaSB8IDApIDwgMCkgewogICAgICAgICAgICAgICAgICAgIGsgPSBrIC0gMSB8IDAsIGkgPSAoLTEgPDwgciBeIC0xKSA8PCAxLCByID0gMSwgZiA9ICgoZiB8IDApID49IDExID8gMTEgOiBmKSArIDEgfCAwOwogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgYSA9IHQsIGwgPSA2MyAtIHIgfCAwLCBpID0gbCAmIDMxLCAobCAmIDYzKSA+Pj4gMCA+PSAzMiA/IGkgPSBuID4+PiBpIHwgMCA6IGkgPSAoKDEgPDwgaSkgLSAxICYgbikgPDwgMzIgLSBpIHwgYSA+Pj4gaSwgaSA9IChpICYgKC0xIDw8IHIgXiAtMSkpIDw8IDEgfCAxLCByID0gciArIDEgfCAwLCBrID0gayAtIHIgfCAwLCBmID0gKChmIHwgMCkgPD0gMSA/IDEgOiBmKSAtIDEgfCAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGVbQSArIDE2ID4+IDJdID0gaywgZVtBICsgMjggPj4gMl0gPSBmLCBsID0gdCwgZiA9IHIgJiAzMSwgKHIgJiA2MykgPj4+IDAgPj0gMzIgPyAociA9IHQgPDwgZiwgdCA9IDApIDogKHIgPSAoMSA8PCBmKSAtIDEgJiBsID4+PiAzMiAtIGYgfCBuIDw8IGYsIHQgPSBsIDw8IGYpLCBlW0EgKyA4ID4+IDJdID0gdCwgZVtBICsgMTIgPj4gMl0gPSByLCBuID0gZVtBICsgNDQgPj4gMl0gfCBpID4+IDMxLCBlW0EgKyA0MCA+PiAyXSA9IGVbQSArIDQwID4+IDJdICYgLTY0IHwgaSwgZVtBICsgNDQgPj4gMl0gPSBuLCAoayB8IDApIDwgNikgewogICAgICAgICAgICAgICAgICBrID0gMTsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGYgPSBlW0EgKyAyOCA+PiAyXSwgciA9IGVbKGYgPDwgMikgKyAzNTg4OCA+PiAyXSwgdCA9IGVbQSArIDggPj4gMl0sIGkgPSBlW0EgKyAxMiA+PiAyXSwgbiA9IGk7CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIGlmICgoaSB8IDApIDwgMCkgewogICAgICAgICAgICAgICAgICAgIGsgPSBrIC0gMSB8IDAsIGkgPSAoLTEgPDwgciBeIC0xKSA8PCAxLCByID0gMSwgZiA9ICgoZiB8IDApID49IDExID8gMTEgOiBmKSArIDEgfCAwOwogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgYSA9IHQsIGwgPSA2MyAtIHIgfCAwLCBpID0gbCAmIDMxLCAobCAmIDYzKSA+Pj4gMCA+PSAzMiA/IGkgPSBuID4+PiBpIHwgMCA6IGkgPSAoKDEgPDwgaSkgLSAxICYgbikgPDwgMzIgLSBpIHwgYSA+Pj4gaSwgaSA9IChpICYgKC0xIDw8IHIgXiAtMSkpIDw8IDEgfCAxLCByID0gciArIDEgfCAwLCBrID0gayAtIHIgfCAwLCBmID0gKChmIHwgMCkgPD0gMSA/IDEgOiBmKSAtIDEgfCAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGVbQSArIDE2ID4+IDJdID0gaywgZVtBICsgMjggPj4gMl0gPSBmLCBsID0gdCwgZiA9IHIgJiAzMSwgKHIgJiA2MykgPj4+IDAgPj0gMzIgPyAociA9IHQgPDwgZiwgdCA9IDApIDogKHIgPSAoMSA8PCBmKSAtIDEgJiBsID4+PiAzMiAtIGYgfCBuIDw8IGYsIHQgPSBsIDw8IGYpLCBlW0EgKyA4ID4+IDJdID0gdCwgZVtBICsgMTIgPj4gMl0gPSByLCBuID0gZVtBICsgNDQgPj4gMl0sIGVbQSArIDQwID4+IDJdID0gZVtBICsgNDAgPj4gMl0gJiAtODA2NSB8IGkgPDwgNywgZVtBICsgNDQgPj4gMl0gPSBpID4+IDMxIDw8IDcgfCBpID4+PiAyNSB8IG4sIChrIHwgMCkgPCA2KSB7CiAgICAgICAgICAgICAgICAgIGsgPSAyOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZiA9IGVbQSArIDI4ID4+IDJdLCByID0gZVsoZiA8PCAyKSArIDM1ODg4ID4+IDJdLCB0ID0gZVtBICsgOCA+PiAyXSwgaSA9IGVbQSArIDEyID4+IDJdLCBuID0gaTsKICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgaWYgKChpIHwgMCkgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgayA9IGsgLSAxIHwgMCwgaSA9ICgtMSA8PCByIF4gLTEpIDw8IDEsIHIgPSAxLCBmID0gKChmIHwgMCkgPj0gMTEgPyAxMSA6IGYpICsgMSB8IDA7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBhID0gdCwgbCA9IDYzIC0gciB8IDAsIGkgPSBsICYgMzEsIChsICYgNjMpID4+PiAwID49IDMyID8gaSA9IG4gPj4+IGkgfCAwIDogaSA9ICgoMSA8PCBpKSAtIDEgJiBuKSA8PCAzMiAtIGkgfCBhID4+PiBpLCBpID0gKGkgJiAoLTEgPDwgciBeIC0xKSkgPDwgMSB8IDEsIHIgPSByICsgMSB8IDAsIGsgPSBrIC0gciB8IDAsIGYgPSAoKGYgfCAwKSA8PSAxID8gMSA6IGYpIC0gMSB8IDA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoZVtBICsgMTYgPj4gMl0gPSBrLCBlW0EgKyAyOCA+PiAyXSA9IGYsIGwgPSB0LCBmID0gciAmIDMxLCAociAmIDYzKSA+Pj4gMCA+PSAzMiA/IChyID0gdCA8PCBmLCB0ID0gMCkgOiAociA9ICgxIDw8IGYpIC0gMSAmIGwgPj4+IDMyIC0gZiB8IG4gPDwgZiwgdCA9IGwgPDwgZiksIGVbQSArIDggPj4gMl0gPSB0LCBlW0EgKyAxMiA+PiAyXSA9IHIsIG4gPSBlW0EgKyA0NCA+PiAyXSwgZVtBICsgNDAgPj4gMl0gPSBlW0EgKyA0MCA+PiAyXSAmIC0xMDMyMTkzIHwgaSA8PCAxNCwgZVtBICsgNDQgPj4gMl0gPSBpID4+IDMxIDw8IDE0IHwgaSA+Pj4gMTggfCBuLCAoayB8IDApIDwgNikgewogICAgICAgICAgICAgICAgICBrID0gMzsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGYgPSBlW0EgKyAyOCA+PiAyXSwgciA9IGVbKGYgPDwgMikgKyAzNTg4OCA+PiAyXSwgdCA9IGVbQSArIDggPj4gMl0sIGkgPSBlW0EgKyAxMiA+PiAyXSwgbiA9IGk7CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIGlmICgoaSB8IDApIDwgMCkgewogICAgICAgICAgICAgICAgICAgIGsgPSBrIC0gMSB8IDAsIGkgPSAoLTEgPDwgciBeIC0xKSA8PCAxLCByID0gMSwgZiA9ICgoZiB8IDApID49IDExID8gMTEgOiBmKSArIDEgfCAwOwogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgYSA9IHQsIGwgPSA2MyAtIHIgfCAwLCBpID0gbCAmIDMxLCAobCAmIDYzKSA+Pj4gMCA+PSAzMiA/IGkgPSBuID4+PiBpIHwgMCA6IGkgPSAoKDEgPDwgaSkgLSAxICYgbikgPDwgMzIgLSBpIHwgYSA+Pj4gaSwgaSA9IChpICYgKC0xIDw8IHIgXiAtMSkpIDw8IDEgfCAxLCByID0gciArIDEgfCAwLCBrID0gayAtIHIgfCAwLCBmID0gKChmIHwgMCkgPD0gMSA/IDEgOiBmKSAtIDEgfCAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGVbQSArIDE2ID4+IDJdID0gaywgZVtBICsgMjggPj4gMl0gPSBmLCBsID0gdCwgZiA9IHIgJiAzMSwgKHIgJiA2MykgPj4+IDAgPj0gMzIgPyAociA9IHQgPDwgZiwgdCA9IDApIDogKHIgPSAoMSA8PCBmKSAtIDEgJiBsID4+PiAzMiAtIGYgfCBuIDw8IGYsIHQgPSBsIDw8IGYpLCBlW0EgKyA4ID4+IDJdID0gdCwgZVtBICsgMTIgPj4gMl0gPSByLCBuID0gZVtBICsgNDQgPj4gMl0sIGVbQSArIDQwID4+IDJdID0gZVtBICsgNDAgPj4gMl0gJiAtMTMyMTIwNTc3IHwgaSA8PCAyMSwgZVtBICsgNDQgPj4gMl0gPSBpID4+IDMxIDw8IDIxIHwgaSA+Pj4gMTEgfCBuLCAoayB8IDApIDwgNikgewogICAgICAgICAgICAgICAgICBrID0gNDsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGYgPSBlW0EgKyAyOCA+PiAyXSwgciA9IGVbKGYgPDwgMikgKyAzNTg4OCA+PiAyXSwgdCA9IGVbQSArIDggPj4gMl0sIGkgPSBlW0EgKyAxMiA+PiAyXSwgbiA9IGk7CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIGlmICgoaSB8IDApIDwgMCkgewogICAgICAgICAgICAgICAgICAgIGsgPSBrIC0gMSB8IDAsIGkgPSAoLTEgPDwgciBeIC0xKSA8PCAxLCByID0gMSwgZiA9ICgoZiB8IDApID49IDExID8gMTEgOiBmKSArIDEgfCAwOwogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgYSA9IHQsIGwgPSA2MyAtIHIgfCAwLCBpID0gbCAmIDMxLCAobCAmIDYzKSA+Pj4gMCA+PSAzMiA/IGkgPSBuID4+PiBpIHwgMCA6IGkgPSAoKDEgPDwgaSkgLSAxICYgbikgPDwgMzIgLSBpIHwgYSA+Pj4gaSwgaSA9IChpICYgKC0xIDw8IHIgXiAtMSkpIDw8IDEgfCAxLCByID0gciArIDEgfCAwLCBrID0gayAtIHIgfCAwLCBmID0gKChmIHwgMCkgPD0gMSA/IDEgOiBmKSAtIDEgfCAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGVbQSArIDE2ID4+IDJdID0gaywgZVtBICsgMjggPj4gMl0gPSBmLCBsID0gdCwgZiA9IHIgJiAzMSwgKHIgJiA2MykgPj4+IDAgPj0gMzIgPyAociA9IHQgPDwgZiwgdCA9IDApIDogKHIgPSAoMSA8PCBmKSAtIDEgJiBsID4+PiAzMiAtIGYgfCBuIDw8IGYsIHQgPSBsIDw8IGYpLCBlW0EgKyA4ID4+IDJdID0gdCwgZVtBICsgMTIgPj4gMl0gPSByLCBuID0gZVtBICsgNDQgPj4gMl0gJiAtNCwgZVtBICsgNDAgPj4gMl0gPSBlW0EgKyA0MCA+PiAyXSAmIDI2ODQzNTQ1NSB8IGkgPDwgMjgsIGVbQSArIDQ0ID4+IDJdID0gaSA+PiAzMSA8PCAyOCB8IGkgPj4+IDQgfCBuLCAoayB8IDApIDwgNikgewogICAgICAgICAgICAgICAgICBrID0gNTsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGwgPSBlW0EgKyAyOCA+PiAyXSwgciA9IGVbKGwgPDwgMikgKyAzNTg4OCA+PiAyXSwgZiA9IGVbQSArIDggPj4gMl0sIGkgPSBlW0EgKyAxMiA+PiAyXTsKICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgaWYgKChpIHwgMCkgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgdCA9IGsgLSAxIHwgMCwgbiA9ICgtMSA8PCByIF4gLTEpIDw8IDEsIHIgPSAxLCBrID0gKChsIHwgMCkgPj0gMTEgPyAxMSA6IGwpICsgMSB8IDA7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBhID0gZiwgdCA9IDYzIC0gciB8IDAsIG4gPSB0ICYgMzEsICh0ICYgNjMpID4+PiAwID49IDMyID8gdCA9IGkgPj4+IG4gfCAwIDogdCA9ICgoMSA8PCBuKSAtIDEgJiBpKSA8PCAzMiAtIG4gfCBhID4+PiBuLCBuID0gKHQgJiAoLTEgPDwgciBeIC0xKSkgPDwgMSB8IDEsIHIgPSByICsgMSB8IDAsIHQgPSBrIC0gciB8IDAsIGsgPSAoKGwgfCAwKSA8PSAxID8gMSA6IGwpIC0gMSB8IDA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoZVtBICsgMTYgPj4gMl0gPSB0LCBlW0EgKyAyOCA+PiAyXSA9IGssIGwgPSBmLCBrID0gciAmIDMxLCAociAmIDYzKSA+Pj4gMCA+PSAzMiA/IChyID0gZiA8PCBrLCBmID0gMCkgOiAociA9ICgxIDw8IGspIC0gMSAmIGwgPj4+IDMyIC0gayB8IGkgPDwgaywgZiA9IGwgPDwgayksIGVbQSArIDggPj4gMl0gPSBmLCBlW0EgKyAxMiA+PiAyXSA9IHIsIGYgPSBlW0EgKyA0NCA+PiAyXSAmIC01MDUsIGVbQSArIDQwID4+IDJdID0gZVtBICsgNDAgPj4gMl0sIGVbQSArIDQ0ID4+IDJdID0gbiA8PCAzIHwgZiwgayA9IDYsICh0IHwgMCkgPCA2KQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgbCA9IGVbQSArIDI4ID4+IDJdLCByID0gZVsobCA8PCAyKSArIDM1ODg4ID4+IDJdLCBmID0gZVtBICsgOCA+PiAyXSwgaSA9IGVbQSArIDEyID4+IDJdOwogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICBpZiAoKGkgfCAwKSA8IDApIHsKICAgICAgICAgICAgICAgICAgICBrID0gdCAtIDEgfCAwLCBuID0gKC0xIDw8IHIgXiAtMSkgPDwgMSwgciA9IDEsIHQgPSAoKGwgfCAwKSA+PSAxMSA/IDExIDogbCkgKyAxIHwgMDsKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGEgPSBmLCBrID0gNjMgLSByIHwgMCwgbiA9IGsgJiAzMSwgKGsgJiA2MykgPj4+IDAgPj0gMzIgPyBhID0gaSA+Pj4gbiB8IDAgOiBhID0gKCgxIDw8IG4pIC0gMSAmIGkpIDw8IDMyIC0gbiB8IGEgPj4+IG4sIG4gPSAoYSAmICgtMSA8PCByIF4gLTEpKSA8PCAxIHwgMSwgciA9IHIgKyAxIHwgMCwgayA9IHQgLSByIHwgMCwgdCA9ICgobCB8IDApIDw9IDEgPyAxIDogbCkgLSAxIHwgMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChlW0EgKyAxNiA+PiAyXSA9IGssIGVbQSArIDI4ID4+IDJdID0gdCwgbCA9IGYsIHQgPSByICYgMzEsIChyICYgNjMpID4+PiAwID49IDMyID8gKHIgPSBmIDw8IHQsIHQgPSAwKSA6IChyID0gKDEgPDwgdCkgLSAxICYgbCA+Pj4gMzIgLSB0IHwgaSA8PCB0LCB0ID0gbCA8PCB0KSwgZVtBICsgOCA+PiAyXSA9IHQsIGVbQSArIDEyID4+IDJdID0gciwgdCA9IGVbQSArIDQ0ID4+IDJdICYgLTY0NTEzLCBlW0EgKyA0MCA+PiAyXSA9IGVbQSArIDQwID4+IDJdLCBlW0EgKyA0NCA+PiAyXSA9IG4gPDwgMTAgfCB0LCAoayB8IDApIDwgNikgewogICAgICAgICAgICAgICAgICBrID0gNzsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGYgPSBlW0EgKyAyOCA+PiAyXSwgciA9IGVbKGYgPDwgMikgKyAzNTg4OCA+PiAyXSwgdCA9IGVbQSArIDggPj4gMl0sIGkgPSBlW0EgKyAxMiA+PiAyXSwgbiA9IGk7CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIGlmICgoaSB8IDApIDwgMCkgewogICAgICAgICAgICAgICAgICAgIGsgPSBrIC0gMSB8IDAsIGkgPSAoLTEgPDwgciBeIC0xKSA8PCAxLCByID0gMSwgZiA9ICgoZiB8IDApID49IDExID8gMTEgOiBmKSArIDEgfCAwOwogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgYSA9IHQsIGwgPSA2MyAtIHIgfCAwLCBpID0gbCAmIDMxLCAobCAmIDYzKSA+Pj4gMCA+PSAzMiA/IGkgPSBuID4+PiBpIHwgMCA6IGkgPSAoKDEgPDwgaSkgLSAxICYgbikgPDwgMzIgLSBpIHwgYSA+Pj4gaSwgaSA9IChpICYgKC0xIDw8IHIgXiAtMSkpIDw8IDEgfCAxLCByID0gciArIDEgfCAwLCBrID0gayAtIHIgfCAwLCBmID0gKChmIHwgMCkgPD0gMSA/IDEgOiBmKSAtIDEgfCAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZVtBICsgMTYgPj4gMl0gPSBrLCBlW0EgKyAyOCA+PiAyXSA9IGYsIGsgPSB0LCBmID0gciAmIDMxLCAociAmIDYzKSA+Pj4gMCA+PSAzMiA/IChyID0gayA8PCBmLCB0ID0gMCkgOiAociA9ICgxIDw8IGYpIC0gMSAmIGsgPj4+IDMyIC0gZiB8IG4gPDwgZiwgdCA9IGsgPDwgZiksIGVbQSArIDggPj4gMl0gPSB0LCBlW0EgKyAxMiA+PiAyXSA9IHIsIG4gPSBlW0EgKyA0NCA+PiAyXSAmIC04MjU3NTM3LCBlW0EgKyA0MCA+PiAyXSA9IGVbQSArIDQwID4+IDJdLCBlW0EgKyA0NCA+PiAyXSA9IGkgPDwgMTcgfCBuLCBrID0gODsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIGVbQSArIDMyID4+IDJdID0gayAtIDEsIG4gPSBlW0EgKyA0NCA+PiAyXSwgciA9IG4gPj4+IDcgfCAwLCBpID0gZVtBICsgNDAgPj4gMl0sIGVbQSArIDQwID4+IDJdID0gKG4gJiAxMjcpIDw8IDI1IHwgaSA+Pj4gNywgZVtBICsgNDQgPj4gMl0gPSByLCBpICYgMTI3OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIGJBKEEsIGksIHIpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIGkgPSBpIHwgMCwgciA9IHIgfCAwOwogICAgICAgICAgICAgIHZhciBmID0gMCwgayA9IDAsIHQgPSBXKDApLCBuID0gMCwgbCA9IDAsIGEgPSAwLCB1ID0gMCwgbyA9IDAsIGcgPSAwLCBoID0gMCwgcyA9IDAsIHcgPSAwLCBCID0gMCwgYyA9IDAsIHYgPSBXKDApLCBDID0gMCwgbSA9IDAsIHkgPSAwLCBwID0gVygwKSwgSCA9IFcoMCksIEogPSAwLCBFID0gMCwgRCA9IDAsIFUgPSAwOwogICAgICAgICAgICAgIEUgPSBYIC0gMTYgfCAwLCBYID0gRSwgcyA9IGVbQSArIDE1NiA+PiAyXSwgbyA9IGVbQSArIDcyID4+IDJdLCBjID0gZVtvICsgMTYgPj4gMl0sIGEgPSBlW28gKyAyNCA+PiAyXSwgayA9IGVbYSArIDI0ID4+IDJdLCBuID0gZVthICsgNCA+PiAyXSwgdSA9IGVbYSA+PiAyXSwgYSA9IGVbaSArIDU2ID4+IDJdLCBpID0gZVtpICsgNjAgPj4gMl07CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICBpZiAoaCA9IGVbQSArIDEwOCA+PiAyXSwgIWgpIHsKICAgICAgICAgICAgICAgICAgICBoID0gMDsKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChsID0gZVtBICsgMTA0ID4+IDJdLCAhbCkKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICBmb3IgKGYgPSAxLCBnID0gRltBICsgMTgwIHwgMF0gJiAxID8gMTQ5IDogMTUwLCBwID0gVyhXKCsoYSA+Pj4gMCkgKyArKGkgfCAwKSAqIDQyOTQ5NjcyOTYpIC8gVyhaKGwsIGgpID4+PiAwKSksIG0gPSArKFooaywgYykgPj4+IDApLCBIID0gVyhaKG4sIHUpIDw8IDMgPj4+IDApLCBhID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICBpZiAodSA9IGEgKyAxIHwgMCwgayA9IDAsIGYpIHsKICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICBpID0gaywgayA9IGkgKyAxIHwgMCwgdCA9IFcobzJbZyB8IDBdKHMpKSwgQiA9IGVbcyArIDggPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ID0gVyh0IC8gVyhCID4+PiAwKSksIGwgPSBlW0EgKyA4NCA+PiAyXSwgYyA9IGVbQSArIDkyID4+IDJdLCBmID0gbCArIFooYywgaykgfCAwLCBuID0gZVtvICsgOCA+PiAyXSwgZiA9IChmIHwgMCkgPCAobiB8IDApID8gZiA6IG4sIG4gPSBsICsgWihpLCBjKSB8IDAsIGkgPSBlW28gPj4gMl0sIEogPSBtICogKyhmIC0gKChpIHwgMCkgPCAobiB8IDApID8gbiA6IGkpID4+PiAwKSwgZiA9IGVbQSArIDg4ID4+IDJdLCBsID0gZVtBICsgOTYgPj4gMl0sIG4gPSBmICsgWihsLCB1KSB8IDAsIGkgPSBlW28gKyAxMiA+PiAyXSwgYyA9IChpIHwgMCkgPiAobiB8IDApID8gbiA6IGksIG4gPSBmICsgWihhLCBsKSB8IDAsIGkgPSBlW28gKyA0ID4+IDJdLCBKID0gSiAqICsoYyAtICgoaSB8IDApIDwgKG4gfCAwKSA/IG4gOiBpKSA+Pj4gMCksIGYgPSBzICsgMjAgfCAwLCAoQiB8IDApICE9IDEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKG4gPSBCICYgLTIsIGkgPSAwOyB0ID0gR1tmID4+IDJdLCB0ID4gVygwKSAmJiAoR1tmID4+IDJdID0gVyhKIC8gK1codCAqIEgpKSAtIHYpLCB0ID0gR1tmICsgNCA+PiAyXSwgdCA+IFcoMCkgJiYgKEdbZiArIDQgPj4gMl0gPSBXKEogLyArVyh0ICogSCkpIC0gdiksIGYgPSBmICsgOCB8IDAsIGkgPSBpICsgMiB8IDAsIChuIHwgMCkgIT0gKGkgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoQiAmIDEpIHx8ICh0ID0gR1tmID4+IDJdLCAhKHQgPiBXKDApKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgICAgIEdbZiA+PiAyXSA9IFcoSiAvICtXKHQgKiBIKSkgLSB2OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzID0gcyArIDU2NDQgfCAwLCBsID0gZVtBICsgMTA0ID4+IDJdLCAhKGwgPj4+IDAgPiBrID4+PiAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGggPSBlW0EgKyAxMDggPj4gMl0sIGYgPSBsOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAgZiA9IDA7CiAgICAgICAgICAgICAgICAgICAgaWYgKGEgPSB1LCAhKGggPj4+IDAgPiBhID4+PiAwKSkKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChhID0gZVtBICsgMTU2ID4+IDJdLCAhaCkgewogICAgICAgICAgICAgICAgICAgIGggPSAwOwogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKCFsKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIGZvciAoSCA9IFcocCArIFcoMikpLCBrID0gYTsgOyApIHsKICAgICAgICAgICAgICAgICAgICBmb3IgKEMgPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgdCA9IEdbayArIDIwID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID4gVygwKSkgfHwgKHQgPSBXKHQgLSBwKSwgR1trICsgMjAgPj4gMl0gPSB0LCAhKHQgPCBXKDMwKSkpKQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDIwID4+IDJdID0gMTEwNjI0NzY4MDsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGYgPSBrICsgMjQgfCAwLCBuID0gZVtrICsgOCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gLSAzID4+PiAwID4gNDI5NDk2NzI5MykKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoKG4gfCAwKSAhPSAzKQogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodSA9IChuICYgLTIpIC0gNCB8IDAsIGcgPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGcsIHQgPSBHW2YgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHQgPiBXKDApKSB8fCAodiA9IFcodCAtIHApLCBHW2YgPj4gMl0gPSB2LCB0ID0gR1tmIC0gNCA+PiAyXSwgISh2IDwgVyh0ICsgVygxMCkpKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1tmID4+IDJdID0gdCArIFcoMjApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IEdbZiArIDQgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHQgPiBXKDApKSB8fCAodiA9IFcodCAtIHApLCBHW2YgKyA0ID4+IDJdID0gdiwgdCA9IEdbZiA+PiAyXSwgISh2IDwgVyh0ICsgVygxMCkpKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1tmICsgNCA+PiAyXSA9IHQgKyBXKDIwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnID0gaSArIDIgfCAwLCBmID0gZiArIDggfCAwLCAoaSB8IDApID09ICh1IHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobiAmIDEpKQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBHW2YgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgIGs6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID4gVygwKSkgfHwgKHYgPSBXKHQgLSBwKSwgR1tmID4+IDJdID0gdiwgdCA9IEdbZiAtIDQgPj4gMl0sICEodiA8IFcodCArIFcoMTApKSkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgICBHW2YgPj4gMl0gPSB0ICsgVygyMCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZiA9IGYgKyA0IHwgMDsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIHQgPSBHW2YgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHQgPiBXKDApKSB8fCAodiA9IFcodCAtIEgpLCBHW2YgPj4gMl0gPSB2LCB0ID0gR1tmIC0gNCA+PiAyXSwgISh2IDwgVyh0ICsgVygxMCkpKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgR1tmID4+IDJdID0gdCArIFcoMjApOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPSBrICsgNTY0NCB8IDAsIEMgPSBDICsgMSB8IDAsIChDIHwgMCkgPT0gKGwgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICh3ID0gdyArIDEgfCAwLCAodyB8IDApID09IChoIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYSA9IGVbQSArIDE1NiA+PiAyXTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKEMgPSBlW28gKyAxNiA+PiAyXSwgQykgewogICAgICAgICAgICAgICAgZm9yIChpID0gZVtBICsgOTYgPj4gMl0sIEIgPSBpIC0gMSB8IDAsIHkgPSAwIC0gIWkgfCAwLCBpID0gZVtBICsgOTIgPj4gMl0sIGcgPSBpIC0gMSB8IDAsIGMgPSAwIC0gIWkgfCAwLCBmID0gZVtvICsgMjQgPj4gMl0sIGkgPSAwLCBuID0gMCwgdSA9IDA7IGwgPSBuLCBrID0gdSwgRCA9IGVbZiArIDI0ID4+IDJdLCBuID0gZVtmICsgNCA+PiAyXSwgbyA9IG4gKyBCIHwgMCwgdSA9IHksIG4gPSBuMChvLCBuID4+PiAwID4gbyA+Pj4gMCA/IHUgKyAxIHwgMCA6IHUsIG4sIDApLCBvID0gZVtmID4+IDJdLCB3ID0gbyArIGcgfCAwLCB1ID0gYywgcyA9IGwsIGwgPSBkMChELCAwLCBkMChuLCAwLCBuMCh3LCBvID4+PiAwID4gdyA+Pj4gMCA/IHUgKyAxIHwgMCA6IHUsIG8sIDApLCAwKSwgcTIpLCBuID0gcyArIGwgfCAwLCB1ID0gcTIgKyBrIHwgMCwgdSA9IG4gPj4+IDAgPCBsID4+PiAwID8gdSArIDEgfCAwIDogdSwgZiA9IGYgKyA1MiB8IDAsIGkgPSBpICsgMSB8IDAsIChDIHwgMCkgIT0gKGkgfCAwKTsgKQogICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICBtID0gKCsobiA+Pj4gMCkgKyArKHUgPj4+IDApICogNDI5NDk2NzI5NikgKiAxLjQgKiAwLjEyNTsKICAgICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgICAgaWYgKG0gPCAxODQ0Njc0NDA3MzcwOTU1MmUzICYgbSA+PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgaSA9IH5+bSA+Pj4gMCwgUjIobSkgPj0gMSA/IHUgPSB+fihtID4gMCA/IFdBKE5lKG0gKiAyMzI4MzA2NDM2NTM4Njk2M2UtMjYpLCA0Mjk0OTY3Mjk1KSA6ICRpKChtIC0gKyh+fm0gPj4+IDAgPj4+IDApKSAqIDIzMjgzMDY0MzY1Mzg2OTYzZS0yNikpID4+PiAwIDogdSA9IDA7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpID0gMCwgdSA9IDA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBuID0gaSArIDUwMCB8IDAsIHUgPSBuID4+PiAwIDwgNTAwID8gdSArIDEgfCAwIDogdTsKICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgIG4gPSA1MDAsIHUgPSAwOwogICAgICAgICAgICAgIGlmIChoID0gWihlW0EgKyAxMDQgPj4gMl0sIGgpLCBoKSB7CiAgICAgICAgICAgICAgICBpZiAoZyA9IDAsIGYgPSBhLCBpID0gMCwgaCA+Pj4gMCA+PSA0KQogICAgICAgICAgICAgICAgICBmb3IgKGwgPSBoICYgLTQsIHMgPSAwOyBrID0gZVtmICsgNTU5MiA+PiAyXSwgayA9IGkgPj4+IDAgPiBrID4+PiAwID8gaSA6IGssIGkgPSBlW2YgKyAxMTIzNiA+PiAyXSwgayA9IGkgPj4+IDAgPCBrID4+PiAwID8gayA6IGksIGkgPSBlW2YgKyAxNjg4MCA+PiAyXSwgayA9IGkgPj4+IDAgPCBrID4+PiAwID8gayA6IGksIGkgPSBlW2YgKyAyMjUyNCA+PiAyXSwgaSA9IGkgPj4+IDAgPCBrID4+PiAwID8gayA6IGksIGYgPSBmICsgMjI1NzYgfCAwLCBzID0gcyArIDQgfCAwLCAobCB8IDApICE9IChzIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICBpZiAobCA9IGggJiAzLCBsKQogICAgICAgICAgICAgICAgICBmb3IgKDsgayA9IGVbZiArIDU1OTIgPj4gMl0sIGkgPSBpID4+PiAwID4gayA+Pj4gMCA/IGkgOiBrLCBmID0gZiArIDU2NDQgfCAwLCBnID0gZyArIDEgfCAwLCAobCB8IDApICE9IChnIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICBjID0gWihpLCAxMik7CiAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICBjID0gMDsKICAgICAgICAgICAgICBpZiAoKEcyW0EgKyA4MCA+PiAxXSAtIDMgJiA2NTUzNSkgPj4+IDAgPj0gNCkgewogICAgICAgICAgICAgICAgaWYgKHcgPSBlW2VbQSArIDcyID4+IDJdICsgMTYgPj4gMl0sIFUgPSB3IC0gMSB8IDAsIGYgPSAxMiwgISghaCB8ICF3KSkgewogICAgICAgICAgICAgICAgICBmb3IgKG8gPSB3ICYgLTIsIEIgPSB3ICYgMSwgRCA9IHcgLSAxIHwgMCwgcyA9IDAsIGwgPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgIGlmICh5ID0gZVsoWihsLCA1NjQ0KSArIGEgfCAwKSArIDU1ODQgPj4gMl0sIGYgPSAwLCBDID0gMCwgRCkKICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBpID0gNSwgZyA9IDUsIGsgPSB5ICsgWihmLCAxMDgwKSB8IDAsIEZbayB8IDBdICYgMSAmJiAoZyA9IGVbayArIDQgPj4gMl0gKyA1IHwgMCksIGsgPSB5ICsgWihmIHwgMSwgMTA4MCkgfCAwLCBGW2sgfCAwXSAmIDEgJiYgKGkgPSBlW2sgKyA0ID4+IDJdICsgNSB8IDApLCBrID0gZyA+Pj4gMCA8IHMgPj4+IDAgPyBzIDogZywgcyA9IGkgPj4+IDAgPCBrID4+PiAwID8gayA6IGksIGYgPSBmICsgMiB8IDAsIEMgPSBDICsgMiB8IDAsIChvIHwgMCkgIT0gKEMgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgaWYgKEIgJiYgKGkgPSA1LCBrID0geSArIFooZiwgMTA4MCkgfCAwLCBGW2sgfCAwXSAmIDEgJiYgKGkgPSBlW2sgKyA0ID4+IDJdICsgNSB8IDApLCBzID0gaSA+Pj4gMCA8IHMgPj4+IDAgPyBzIDogaSksIGwgPSBsICsgMSB8IDAsIChoIHwgMCkgPT0gKGwgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGZvciAoeSA9IHcgJiAtMiwgbyA9IHcgJiAxLCBrID0gMCwgdyA9IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKEMgPSBlWyhaKHcsIDU2NDQpICsgYSB8IDApICsgNTU4NCA+PiAyXSwgZiA9IDAsIGwgPSAwLCBEKQogICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGkgPSA1LCBnID0gNSwgQiA9IEMgKyBaKGYsIDEwODApIHwgMCwgRltCIHwgMF0gJiAxICYmIChnID0gZVtCICsgNCA+PiAyXSArIDUgfCAwKSwgQiA9IEMgKyBaKGYgfCAxLCAxMDgwKSB8IDAsIEZbQiB8IDBdICYgMSAmJiAoaSA9IGVbQiArIDQgPj4gMl0gKyA1IHwgMCksIGsgPSBrID4+PiAwID4gZyA+Pj4gMCA/IGsgOiBnLCBrID0gaSA+Pj4gMCA8IGsgPj4+IDAgPyBrIDogaSwgZiA9IGYgKyAyIHwgMCwgbCA9IGwgKyAyIHwgMCwgKHkgfCAwKSAhPSAobCB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICBpZiAobyAmJiAoaSA9IDUsIGYgPSBDICsgWihmLCAxMDgwKSB8IDAsIEZbZiB8IDBdICYgMSAmJiAoaSA9IGVbZiArIDQgPj4gMl0gKyA1IHwgMCksIGsgPSBpID4+PiAwIDwgayA+Pj4gMCA/IGsgOiBpKSwgdyA9IHcgKyAxIHwgMCwgKGggfCAwKSA9PSAodyB8IDApKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZiA9IChrICsgcyB8IDApICsgMTIgfCAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYyA9IFooZiwgVSkgKyBjIHwgMDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgbCA9IEEsIHkgPSB1ICsgMSB8IDA7CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICBpZiAoaCkgewogICAgICAgICAgICAgICAgICAgIG8gPSBoICYgMywgaSA9IDA7CiAgICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgICAgaWYgKGggPj4+IDAgPCA0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGYgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgZm9yIChCID0gaCAmIC00LCBmID0gMCwgZyA9IDA7IGsgPSBlW2EgKyA0MjAgPj4gMl0sIGYgPSBmID4+PiAwID4gayA+Pj4gMCA/IGYgOiBrLCBrID0gZVthICsgNjA2NCA+PiAyXSwgZiA9IGYgPj4+IDAgPiBrID4+PiAwID8gZiA6IGssIGsgPSBlW2EgKyAxMTcwOCA+PiAyXSwgZiA9IGYgPj4+IDAgPiBrID4+PiAwID8gZiA6IGssIGsgPSBlW2EgKyAxNzM1MiA+PiAyXSwgZiA9IGYgPj4+IDAgPiBrID4+PiAwID8gZiA6IGssIGEgPSBhICsgMjI1NzYgfCAwLCBnID0gZyArIDQgfCAwLCAoQiB8IDApICE9IChnIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAobykKICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBrID0gZVthICsgNDIwID4+IDJdLCBmID0gZiA+Pj4gMCA+IGsgPj4+IDAgPyBmIDogaywgYSA9IGEgKyA1NjQ0IHwgMCwgaSA9IGkgKyAxIHwgMCwgKG8gfCAwKSAhPSAoaSB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICBpZiAoayA9IChaKGYsIDkpICsgYyB8IDApICsgMTMgfCAwLCAhZVtBICsgNjAgPj4gMl0pCiAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgIGZvciAoYyA9IEEgKyA4MCB8IDAsIGYgPSAwLCBpID0gMDsgYSA9IGQ2KGVbQSArIDcyID4+IDJdLCBjLCBpKSwgZiA9IGYgPj4+IDAgPiBhID4+PiAwID8gZiA6IGEsIGkgPSBpICsgMSB8IDAsIGkgPj4+IDAgPCBaKGVbQSArIDEwNCA+PiAyXSwgZVtBICsgMTA4ID4+IDJdKSA+Pj4gMDsgKQogICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKGYgPSAwLCBrID0gYyArIDEzIHwgMCwgIWVbQSArIDYwID4+IDJdKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBhID0gWihmLCA1KSArIGsgfCAwLCBrID0gMCwgaSA9IGYgKyAxNjM4MSB8IDAsIGsgPSBpID4+PiAwIDwgMTYzODEgPyAxIDogaywgaSA9IChaKG4wKGksIGssIDE2MzgyLCAwKSwgNikgKyBhIHwgMCkgKyAxIHwgMCwgZVtBICsgNjQgPj4gMl0gPSBpLCBrID0gaSArIGEgfCAwOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpID0gaywgaSA9IGkgKyBuIHwgMCwgdSA9IGsgPj4+IDAgPiBpID4+PiAwID8geSA6IHUsIGsgPSBpLCBpID0gIXUgJiAoaSB8IDApID09IC0xIHwgKHUgfCAwKSAhPSAwLCBuID0gaSA/IC0xIDogaywgYSA9IGkgPyAwIDogdSwgZVtsICsgNDggPj4gMl0gPSBuLCBpID0gVTIobiksIGVbQSArIDQ0ID4+IDJdID0gaTsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAoIWkpIHsKICAgICAgICAgICAgICAgICAgZVtFID4+IDJdID0gKGEgJiAxMDQ4NTc1KSA8PCAxMiB8IG4gPj4+IDIwLCBRKHIsIDEsIDE2MzgxLCBFKSwgZiA9IDA7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoZiA9IDEsICFlW0EgKyAxNiA+PiAyXSkKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIGlmIChpID0gVTIoWihlW0EgKyA0MCA+PiAyXSwgNikpLCBlW0EgKyAzMiA+PiAyXSA9IGksICFpKSB7CiAgICAgICAgICAgICAgICAgIGYgPSAwOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZVtBICsgMzYgPj4gMl0gPSBpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gWCA9IEUgKyAxNiB8IDAsIGYgfCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIG00KEEsIGksIHIpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIGkgPSBpIHwgMCwgciA9IHIgfCAwOwogICAgICAgICAgICAgIHZhciBmID0gMCwgayA9IDAsIHQgPSAwLCBuID0gMCwgbCA9IDAsIGEgPSAwLCB1ID0gMCwgbyA9IDAsIGcgPSAwLCBoID0gMCwgcyA9IDAsIHcgPSAwLCBCID0gMCwgYyA9IDAsIHYgPSAwLCBDID0gMCwgbSA9IDAsIHkgPSAwLCBwID0gMCwgSCA9IDAsIEogPSAwLCBFID0gMCwgRCA9IDAsIFUgPSAwOwogICAgICAgICAgICAgIEMgPSBYIC0gMTYgfCAwLCBYID0gQywgcCA9IFooZVtBICsgMTA0ID4+IDJdLCBlW0EgKyAxMDggPj4gMl0pOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGlmICghcCkgewogICAgICAgICAgICAgICAgICBmID0gMTsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIEUgPSBlW0EgKyAyMDggPj4gMl07CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICBrOiB7CiAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW0EgKyAyMDQgPj4gMl0gIT0gKGYgfCAwKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgUShyLCAxLCAzMjcyLCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvID0gZVtBICsgMTA4ID4+IDJdLCBoID0gZVtBICsgMTA0ID4+IDJdLCBEID0gZiArIDEgfCAwLCBlW0MgPj4gMl0gPSBELCBlW0MgKyA0ID4+IDJdID0gWihvLCBoKSwgUShyLCA0LCAxNzg2NywgQyksIGVbQSArIDEyID4+IDJdID0gMCwgbyA9IGVbQSArIDIwOCA+PiAyXSwgZVtvICsgMTIgPj4gMl0gPSBlWyhlW0EgKyAxNTYgPj4gMl0gKyBaKGYsIDU2NDQpIHwgMCkgKyA1NTkyID4+IDJdLCBlW0EgKyA4ID4+IDJdID0gMCwgIUFyKG8sIGVbQSArIDIwNCA+PiAyXSwgMSwgNTIsIHIpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICBBOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9IGVbQSArIDIwOCA+PiAyXSwgdCA9IGVbZVtuICsgMjQgPj4gMl0gKyAxNiA+PiAyXSwgIXQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZiA9IDAsIChwIHwgMCkgPT0gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobyA9IGVbZVtFICsgMjQgPj4gMl0gKyAyNCA+PiAyXSwgaCA9IGVbZVtlW0UgKyAyMCA+PiAyXSA+PiAyXSArIDIwID4+IDJdLCBzID0gMCwgdCA+Pj4gMCA+PSA0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodSA9IHQgJiAtNCwgZyA9IDA7IGwgPSBlWyhvICsgWihmLCA1MikgfCAwKSArIDQ0ID4+IDJdLCBhID0gaCArIFooZiwgNzYpIHwgMCwgZVthICsgNDAgPj4gMl0gPSAwLCBlW2EgKyAzNiA+PiAyXSA9IGwsIGwgPSBmIHwgMSwgYSA9IGVbKG8gKyBaKGwsIDUyKSB8IDApICsgNDQgPj4gMl0sIGwgPSBoICsgWihsLCA3NikgfCAwLCBlW2wgKyA0MCA+PiAyXSA9IDAsIGVbbCArIDM2ID4+IDJdID0gYSwgbCA9IGYgfCAyLCBhID0gZVsobyArIFoobCwgNTIpIHwgMCkgKyA0NCA+PiAyXSwgbCA9IGggKyBaKGwsIDc2KSB8IDAsIGVbbCArIDQwID4+IDJdID0gMCwgZVtsICsgMzYgPj4gMl0gPSBhLCBsID0gZiB8IDMsIGEgPSBlWyhvICsgWihsLCA1MikgfCAwKSArIDQ0ID4+IDJdLCBsID0gaCArIFoobCwgNzYpIHwgMCwgZVtsICsgNDAgPj4gMl0gPSAwLCBlW2wgKyAzNiA+PiAyXSA9IGEsIGYgPSBmICsgNCB8IDAsIGcgPSBnICsgNCB8IDAsICh1IHwgMCkgIT0gKGcgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgJiAzLCAhdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgZyA9IGVbKG8gKyBaKGYsIDUyKSB8IDApICsgNDQgPj4gMl0sIHUgPSBoICsgWihmLCA3NikgfCAwLCBlW3UgKyA0MCA+PiAyXSA9IDAsIGVbdSArIDM2ID4+IDJdID0gZywgZiA9IGYgKyAxIHwgMCwgcyA9IHMgKyAxIHwgMCwgKHQgfCAwKSAhPSAocyB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChINihlW2VbZVtFICsgMjAgPj4gMl0gPj4gMl0gKyAyMCA+PiAyXSArIFooZiwgNzYpIHwgMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZiA9IGYgKyAxIHwgMCwgbiA9IGVbQSArIDIwOCA+PiAyXSwgZiA+Pj4gMCA8IGRbZVtuICsgMjQgPj4gMl0gKyAxNiA+PiAyXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZiA9IDAsIFEociwgMSwgMzM1NiwgMCksIGspCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IDAsIGYgPSAwLCBvID0gZVtuICsgMjQgPj4gMl0sIHMgPSBlW28gKyAxNiA+PiAyXSwgcykKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaCA9IGVbbyArIDI0ID4+IDJdLCBvID0gZVtlW2VbbiArIDIwID4+IDJdID4+IDJdICsgMjAgPj4gMl07IHcgPSBmLCBmID0gZVtoICsgMjQgPj4gMl0sIGYgPSAoZiA+Pj4gMyB8IDApICsgKChmICYgNykgIT0gMCkgfCAwLCBmID0gdyArIFooWihlW28gKyAxMiA+PiAyXSAtIGVbbyArIDQgPj4gMl0gfCAwLCBlW28gKyA4ID4+IDJdIC0gZVtvID4+IDJdIHwgMCksIChmIHwgMCkgPT0gMyA/IDQgOiBmKSB8IDAsIG8gPSBvICsgNzYgfCAwLCBoID0gaCArIDUyIHwgMCwgdCA9IHQgKyAxIHwgMCwgKHMgfCAwKSAhPSAodCB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaCA9IGYsIChwIHwgMCkgIT0gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgQTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZiA+Pj4gMCA+IFUgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVSA9IGYsIG8gPSBvMChrLCBmKSwgbykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgayAmJiBSKGspLCBmID0gMCwgUShyLCAxLCA1OTI4LCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvID0gaywgaykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzID0gZVtBICsgMjA4ID4+IDJdLCBmID0gZVtzICsgMjQgPj4gMl0sIGVbZiArIDE2ID4+IDJdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobSA9IDAsIGsgPSBvOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBlW2YgKyAyNCA+PiAyXSArIFoobSwgNTIpIHwgMCwgbiA9IGVbYyA+PiAyXSwgZyA9IG4gPj4gMzEsIHUgPSBuIC0gMSB8IDAsIHYgPSBlW2YgPj4gMl0sIHQgPSBlW2YgKyA4ID4+IDJdIC0gdiB8IDAsIGEgPSB0LCBsID0gdSArIHQgfCAwLCB3ID0gZyAtICFuIHwgMCwgdCA9IHcgKyAodCA+PiAzMSkgfCAwLCB0ID0gejAobCwgbCA+Pj4gMCA8IGEgPj4+IDAgPyB0ICsgMSB8IDAgOiB0LCBuLCBnKSwgbCA9IHQsIEggPSBlW2VbZVtzICsgMjAgPj4gMl0gPj4gMl0gKyAyMCA+PiAyXSArIFoobSwgNzYpIHwgMCwgQiA9IGVbSCArIDggPj4gMl0sIHQgPSBlW0ggPj4gMl0sIGEgPSBCIC0gdCB8IDAsIHkgPSBsIC0gYSB8IDAsIEogPSBlW2MgKyA0NCA+PiAyXSwgdyA9ICh2ID4+IDMxKSArIHcgfCAwLCB1ID0gdSArIHYgfCAwLCB3ID0gdSA+Pj4gMCA8IHYgPj4+IDAgPyB3ICsgMSB8IDAgOiB3LCB2ID0gKHQgLSB6MCh1LCB3LCBuLCBnKSA8PCAyKSArIEogfCAwLCB1ID0gZVtIICsgNCA+PiAyXSwgbiA9IGVbYyArIDQgPj4gMl0sIGcgPSBlW2YgKyA0ID4+IDJdLCB3ID0gZywgZiA9IG4gKyBnIHwgMCwgSiA9IG4gPj4gMzEsIGcgPSBKICsgKGcgPj4gMzEpIHwgMCwgZyA9IGYgPj4+IDAgPCB3ID4+PiAwID8gZyArIDEgfCAwIDogZywgZiA9IChaKGwsIHUgLSB6MChmIC0gMSB8IDAsIGcgLSAhZiB8IDAsIG4sIEopIHwgMCkgPDwgMikgKyB2IHwgMCwgbiA9IGVbSCArIDEyID4+IDJdLCBnID0gbiAtIHUgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGw6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGwgPSBlW2MgKyAyNCA+PiAyXSwgbCA9IChsID4+PiAzIHwgMCkgKyAoKGwgJiA3KSAhPSAwKSB8IDAsICgobCB8IDApID09IDMgPyA0IDogbCkgLSAxIHwgMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChuIHwgMCkgPT0gKHUgfCAwKSB8ICh0IHwgMCkgPT0gKEIgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsID0gYSAmIC04LCB1ID0gYSAmIDcsIG4gPSAwLCBhID0gdCAtIEIgPj4+IDAgPiA0Mjk0OTY3Mjg4OyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSAwLCAhYSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGVbayA+PiAyXSA9IGVbZiA+PiAyXSwgZVtrICsgNCA+PiAyXSA9IGVbZiArIDQgPj4gMl0sIGVbayArIDggPj4gMl0gPSBlW2YgKyA4ID4+IDJdLCBlW2sgKyAxMiA+PiAyXSA9IGVbZiArIDEyID4+IDJdLCBlW2sgKyAxNiA+PiAyXSA9IGVbZiArIDE2ID4+IDJdLCBlW2sgKyAyMCA+PiAyXSA9IGVbZiArIDIwID4+IDJdLCBlW2sgKyAyNCA+PiAyXSA9IGVbZiArIDI0ID4+IDJdLCBlW2sgKyAyOCA+PiAyXSA9IGVbZiArIDI4ID4+IDJdLCBrID0gayArIDMyIHwgMCwgZiA9IGYgKyAzMiB8IDAsIHQgPSB0ICsgOCB8IDAsIChsIHwgMCkgIT0gKHQgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gMCwgdSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGVbayA+PiAyXSA9IGVbZiA+PiAyXSwgayA9IGsgKyA0IHwgMCwgZiA9IGYgKyA0IHwgMCwgdCA9IHQgKyAxIHwgMCwgKHUgfCAwKSAhPSAodCB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGYgPSAoeSA8PCAyKSArIGYgfCAwLCBuID0gbiArIDEgfCAwLCAoZyB8IDApID09IChuIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID0gKG4gfCAwKSA9PSAodSB8IDApIHwgKHQgfCAwKSA9PSAoQiB8IDApLCBlW2MgKyAzMiA+PiAyXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGwgPSBhICYgLTgsIHUgPSBhICYgNywgbiA9IDAsIGEgPSB0IC0gQiA+Pj4gMCA+IDQyOTQ5NjcyODg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IDAsICFhKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgRltrIHwgMF0gPSBlW2YgPj4gMl0sIEZbayArIDEgfCAwXSA9IGVbZiArIDQgPj4gMl0sIEZbayArIDIgfCAwXSA9IGVbZiArIDggPj4gMl0sIEZbayArIDMgfCAwXSA9IGVbZiArIDEyID4+IDJdLCBGW2sgKyA0IHwgMF0gPSBlW2YgKyAxNiA+PiAyXSwgRltrICsgNSB8IDBdID0gZVtmICsgMjAgPj4gMl0sIEZbayArIDYgfCAwXSA9IGVbZiArIDI0ID4+IDJdLCBGW2sgKyA3IHwgMF0gPSBlW2YgKyAyOCA+PiAyXSwgZiA9IGYgKyAzMiB8IDAsIGsgPSBrICsgOCB8IDAsIHQgPSB0ICsgOCB8IDAsIChsIHwgMCkgIT0gKHQgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gMCwgdSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IEZbayB8IDBdID0gZVtmID4+IDJdLCBmID0gZiArIDQgfCAwLCBrID0gayArIDEgfCAwLCB0ID0gdCArIDEgfCAwLCAodSB8IDApICE9ICh0IHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZiA9ICh5IDw8IDIpICsgZiB8IDAsIG4gPSBuICsgMSB8IDAsIChnIHwgMCkgPT0gKG4gfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsID0gYSAmIC04LCB1ID0gYSAmIDcsIG4gPSAwLCBhID0gdCAtIEIgPj4+IDAgPiA0Mjk0OTY3Mjg4OyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gMCwgIWEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgRltrIHwgMF0gPSBlW2YgPj4gMl0sIEZbayArIDEgfCAwXSA9IGVbZiArIDQgPj4gMl0sIEZbayArIDIgfCAwXSA9IGVbZiArIDggPj4gMl0sIEZbayArIDMgfCAwXSA9IGVbZiArIDEyID4+IDJdLCBGW2sgKyA0IHwgMF0gPSBlW2YgKyAxNiA+PiAyXSwgRltrICsgNSB8IDBdID0gZVtmICsgMjAgPj4gMl0sIEZbayArIDYgfCAwXSA9IGVbZiArIDI0ID4+IDJdLCBGW2sgKyA3IHwgMF0gPSBlW2YgKyAyOCA+PiAyXSwgZiA9IGYgKyAzMiB8IDAsIGsgPSBrICsgOCB8IDAsIHQgPSB0ICsgOCB8IDAsIChsIHwgMCkgIT0gKHQgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSAwLCB1KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IEZbayB8IDBdID0gZVtmID4+IDJdLCBmID0gZiArIDQgfCAwLCBrID0gayArIDEgfCAwLCB0ID0gdCArIDEgfCAwLCAodSB8IDApICE9ICh0IHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmID0gKHkgPDwgMikgKyBmIHwgMCwgbiA9IG4gKyAxIHwgMCwgKGcgfCAwKSA9PSAobiB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID0gKG4gfCAwKSA9PSAodSB8IDApIHwgKHQgfCAwKSA9PSAoQiB8IDApLCBlW2MgKyAzMiA+PiAyXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGwgPSBhICYgLTgsIHUgPSBhICYgNywgbiA9IDAsIGEgPSB0IC0gQiA+Pj4gMCA+IDQyOTQ5NjcyODg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSAwLCAhYSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyB1MltrID4+IDFdID0gZVtmID4+IDJdLCB1MltrICsgMiA+PiAxXSA9IGVbZiArIDQgPj4gMl0sIHUyW2sgKyA0ID4+IDFdID0gZVtmICsgOCA+PiAyXSwgdTJbayArIDYgPj4gMV0gPSBlW2YgKyAxMiA+PiAyXSwgdTJbayArIDggPj4gMV0gPSBlW2YgKyAxNiA+PiAyXSwgdTJbayArIDEwID4+IDFdID0gZVtmICsgMjAgPj4gMl0sIHUyW2sgKyAxMiA+PiAxXSA9IGVbZiArIDI0ID4+IDJdLCB1MltrICsgMTQgPj4gMV0gPSBlW2YgKyAyOCA+PiAyXSwgayA9IGsgKyAxNiB8IDAsIGYgPSBmICsgMzIgfCAwLCB0ID0gdCArIDggfCAwLCAobCB8IDApICE9ICh0IHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gMCwgdSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyB1MltrID4+IDFdID0gZVtmID4+IDJdLCBrID0gayArIDIgfCAwLCBmID0gZiArIDQgfCAwLCB0ID0gdCArIDEgfCAwLCAodSB8IDApICE9ICh0IHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmID0gKHkgPDwgMikgKyBmIHwgMCwgbiA9IG4gKyAxIHwgMCwgKGcgfCAwKSA9PSAobiB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsID0gYSAmIC04LCB1ID0gYSAmIDcsIG4gPSAwLCBhID0gdCAtIEIgPj4+IDAgPiA0Mjk0OTY3Mjg4OyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IDAsICFhKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyB1MltrID4+IDFdID0gZVtmID4+IDJdLCB1MltrICsgMiA+PiAxXSA9IGVbZiArIDQgPj4gMl0sIHUyW2sgKyA0ID4+IDFdID0gZVtmICsgOCA+PiAyXSwgdTJbayArIDYgPj4gMV0gPSBlW2YgKyAxMiA+PiAyXSwgdTJbayArIDggPj4gMV0gPSBlW2YgKyAxNiA+PiAyXSwgdTJbayArIDEwID4+IDFdID0gZVtmICsgMjAgPj4gMl0sIHUyW2sgKyAxMiA+PiAxXSA9IGVbZiArIDI0ID4+IDJdLCB1MltrICsgMTQgPj4gMV0gPSBlW2YgKyAyOCA+PiAyXSwgayA9IGsgKyAxNiB8IDAsIGYgPSBmICsgMzIgfCAwLCB0ID0gdCArIDggfCAwLCAobCB8IDApICE9ICh0IHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSAwLCB1KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyB1MltrID4+IDFdID0gZVtmID4+IDJdLCBrID0gayArIDIgfCAwLCBmID0gZiArIDQgfCAwLCB0ID0gdCArIDEgfCAwLCAodSB8IDApICE9ICh0IHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGYgPSAoeSA8PCAyKSArIGYgfCAwLCBuID0gbiArIDEgfCAwLCAoZyB8IDApID09IChuIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtID0gbSArIDEgfCAwLCBmID0gZVtzICsgMjQgPj4gMl0sICEobSA+Pj4gMCA8IGRbZiArIDE2ID4+IDJdKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBlW0EgKyAyMDggPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVE0KHMsIG8sIGgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgayA9IG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghTTQoQSwgaSwgcikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmID0gRCwgKHAgfCAwKSAhPSAoZiB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlmIChmID0gMCwgaykKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChmID0gMSwgIWspCiAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIFIoayk7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmID0gMCwgUShyLCAxLCAzMzA5LCAwKSwgUihvKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIFggPSBDICsgMTYgfCAwLCBmIHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiB5NChBLCBpLCByLCBmLCBrLCB0LCBuLCBsLCBhKSB7CiAgICAgICAgICAgICAgdmFyIHUgPSAwLCBvID0gMCwgZyA9IDAsIGggPSAwLCBzID0gMCwgdyA9IDAsIEIgPSAwLCBjID0gMCwgdiA9IDAsIEMgPSAwLCBtID0gMCwgeSA9IDAsIHAgPSAwLCBIID0gMCwgSiA9IDAsIEUgPSAwLCBEID0gMDsKICAgICAgICAgICAgICBCID0gWCAtIDMyIHwgMCwgWCA9IEIsIGVbQiArIDI0ID4+IDJdID0gdCwgQyA9IGVbKFooZVtmICsgMjggPj4gMl0sIDc2KSArIGkgfCAwKSArIDI4ID4+IDJdICsgWihlW2YgKyAzMiA+PiAyXSwgMTUyKSB8IDA7CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKCEoZVtmICsgNDAgPj4gMl0gfCAhZVtDICsgMjQgPj4gMl0pKQogICAgICAgICAgICAgICAgICBmb3IgKHUgPSBDICsgMjggfCAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChlW3UgKyAxMiA+PiAyXSA9PSBlW3UgKyA0ID4+IDJdIHwgZVt1ICsgOCA+PiAyXSA9PSBlW3UgPj4gMl0pCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IGVbZiArIDM2ID4+IDJdLCBpID4+PiAwID49IGRbdSArIDI0ID4+IDJdIC8gNDAgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgUShhLCAxLCA0ODA1LCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlmIChpID0gZVt1ICsgMjAgPj4gMl0gKyBaKGksIDQwKSB8IDAsIFppKGVbaSArIDMyID4+IDJdKSwgWmkoZVtpICsgMzYgPj4gMl0pLCB3ID0gWihlW2kgKyAyMCA+PiAyXSwgZVtpICsgMTYgPj4gMl0pLCAhdykKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgIGlmIChpID0gZVtpICsgMjQgPj4gMl0sIHcgPj4+IDAgPj0gOCkKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjID0gdyAmIC04LCBvID0gMDsgZVtpICsgNDg4ID4+IDJdID0gMCwgZVtpICsgNDkyID4+IDJdID0gMCwgZVtpICsgNDI0ID4+IDJdID0gMCwgZVtpICsgNDI4ID4+IDJdID0gMCwgZVtpICsgMzYwID4+IDJdID0gMCwgZVtpICsgMzY0ID4+IDJdID0gMCwgZVtpICsgMjk2ID4+IDJdID0gMCwgZVtpICsgMzAwID4+IDJdID0gMCwgZVtpICsgMjMyID4+IDJdID0gMCwgZVtpICsgMjM2ID4+IDJdID0gMCwgZVtpICsgMTY4ID4+IDJdID0gMCwgZVtpICsgMTcyID4+IDJdID0gMCwgZVtpICsgMTA0ID4+IDJdID0gMCwgZVtpICsgMTA4ID4+IDJdID0gMCwgZVtpICsgNDAgPj4gMl0gPSAwLCBlW2kgKyA0NCA+PiAyXSA9IDAsIGkgPSBpICsgNTEyIHwgMCwgbyA9IG8gKyA4IHwgMCwgKGMgfCAwKSAhPSAobyB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgaWYgKG8gPSAwLCB3ID0gdyAmIDcsICF3KQogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGVbaSArIDQwID4+IDJdID0gMCwgZVtpICsgNDQgPj4gMl0gPSAwLCBpID0gaSAtIC02NCB8IDAsIG8gPSBvICsgMSB8IDAsICh3IHwgMCkgIT0gKG8gfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICh1ID0gdSArIDM2IHwgMCwgZyA9IGcgKyAxIHwgMCwgIShnID4+PiAwIDwgZFtDICsgMjQgPj4gMl0pKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHcgPSB0OwogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICBpZiAoIShJW3IgfCAwXSAmIDIpKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIGlmIChsID4+PiAwIDw9IDUpIHsKICAgICAgICAgICAgICAgICAgICBRKGEsIDIsIDY4MDYsIDApOwogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKCEoSVt0IHwgMF0gPT0gMjU1ICYgSVt0ICsgMSB8IDBdID09IDE0NSkpIHsKICAgICAgICAgICAgICAgICAgICBRKGEsIDIsIDY4NDgsIDApOwogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgdyA9IHQgKyA2IHwgMCwgZVtCICsgMjQgPj4gMl0gPSB3OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGggPSBVMigyMCksICFoKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICBpZiAoRltBICsgMTA4IHwgMF0gJiAxKSB7CiAgICAgICAgICAgICAgICAgICAgdyA9IGVbQSArIDQwID4+IDJdLCBjID0gQSArIDQ0IHwgMCwgbCA9IEEgKyA0MCB8IDA7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoSVtyICsgNTY0MCB8IDBdICYgMikgewogICAgICAgICAgICAgICAgICAgIHcgPSBlW3IgKyA1MTY4ID4+IDJdLCBjID0gciArIDUxODAgfCAwLCBsID0gciArIDUxNjggfCAwOwogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZVtCICsgMjggPj4gMl0gPSAodCArIGwgfCAwKSAtIHcsIGMgPSBCICsgMjggfCAwLCBsID0gQiArIDI0IHwgMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChBID0gZVtjID4+IDJdLCBlW2ggKyAxMiA+PiAyXSA9IDAsIGVbaCArIDE2ID4+IDJdID0gMCwgZVtoICsgOCA+PiAyXSA9IHcsIGVbaCA+PiAyXSA9IHcsIGVbaCArIDQgPj4gMl0gPSBBICsgdywgIUgxKGgsIDEpKSB7CiAgICAgICAgICAgICAgICAgIGo2KGgpLCBBID0gZVtoICsgOCA+PiAyXSwgaSA9IGVbaCA+PiAyXSwgSTEoaCksIGkgPSAoQSAtIGkgfCAwKSArIHcgfCAwOwogICAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCEoSVtyIHwgMF0gJiA0KSkKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgaWYgKGVbbCA+PiAyXSArIChlW2MgPj4gMl0gLSBpIHwgMCkgPj4+IDAgPD0gMSkgewogICAgICAgICAgICAgICAgICAgICAgUShhLCAyLCA3MjM3LCAwKTsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICghKElbaSB8IDBdID09IDI1NSAmIElbaSArIDEgfCAwXSA9PSAxNDYpKSB7CiAgICAgICAgICAgICAgICAgICAgICBRKGEsIDIsIDcyNzksIDApOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaSA9IGkgKyAyIHwgMDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlW2MgPj4gMl0gPSBlW2MgPj4gMl0gKyAoZVtsID4+IDJdIC0gaSB8IDApLCBlW2wgPj4gMl0gPSBpLCBlW2sgPj4gMl0gPSAwLCBlW24gPj4gMl0gPSBlW0IgKyAyNCA+PiAyXSAtIHQsIEogPSAxOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGVbQyArIDI0ID4+IDJdKQogICAgICAgICAgICAgICAgICBmb3IgKHYgPSBDICsgMjggfCAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgIGkgPSBlW2YgKyAzNiA+PiAyXSwgdSA9IGVbdiArIDIwID4+IDJdOwogICAgICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChlW3YgKyAxMiA+PiAyXSA9PSBlW3YgKyA0ID4+IDJdIHwgZVt2ICsgOCA+PiAyXSA9PSBlW3YgPj4gMl0gfHwgKHkgPSB1ICsgWihpLCA0MCkgfCAwLCBFID0gWihlW3kgKyAyMCA+PiAyXSwgZVt5ICsgMTYgPj4gMl0pLCAhRSkpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICBmb3IgKHUgPSBlW3kgKyAyNCA+PiAyXSwgcCA9IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICBrOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWVbdSArIDQwID4+IDJdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgPSBHNihoLCBlW3kgKyAzMiA+PiAyXSwgcCwgZVtmICsgNDAgPj4gMl0gKyAxIHwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBID0gSDEoaCwgMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZVt1ICsgMzYgPj4gMl0gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlW3UgKyA0MCA+PiAyXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgQSA9IGksIGkgPSBpICsgMSB8IDAsICFHNihoLCBlW3kgKyAzNiA+PiAyXSwgcCwgQSk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVbdiArIDI4ID4+IDJdLCBlW3UgKyAzMiA+PiAyXSA9IDMsIGVbdSArIDI0ID4+IDJdID0gaSwgZVt1ICsgMjggPj4gMl0gPSAoaSAtIEEgfCAwKSArIDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIEEgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgIGs6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghSDEoaCwgMSkgfHwgKEEgPSAyLCAhSDEoaCwgMSkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEEgPSBIMShoLCAyKSwgKEEgfCAwKSAhPSAzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgPSBBICsgMyB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQSA9IEgxKGgsIDUpLCAoQSB8IDApICE9IDMxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgPSBBICsgNiB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBID0gSDEoaCwgNykgKyAzNyB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZVt1ICsgMzYgPj4gMl0gPSBBLCBpID0gMDsgQSA9IGksIGkgPSBpICsgMSB8IDAsICEhSDEoaCwgMSk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICBlW3UgKyAzMiA+PiAyXSA9IEEgKyBlW3UgKyAzMiA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICBrOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBID0gZVt1ICsgNDAgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID0gZVsoZVtyICsgNTU4NCA+PiAyXSArIFooZVtmICsgMjggPj4gMl0sIDEwODApIHwgMCkgKyAxNiA+PiAyXSwgIWVbdSArIDQ4ID4+IDJdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBID0gbzAoZVt1ID4+IDJdLCAyNDApLCAhQSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW3UgPj4gMl0gPSBBLCBkMihBICsgWihlW3UgKyA0OCA+PiAyXSwgMjQpIHwgMCwgMCwgMjQwKSwgZVt1ICsgNDggPj4gMl0gPSAxMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gPSBlW3UgPj4gMl0sIEEgPSBvLCBlW0EgPj4gMl0gPSAwLCBlW0EgKyA0ID4+IDJdID0gMCwgZVtBICsgMTYgPj4gMl0gPSAwLCBlW0EgKyAyMCA+PiAyXSA9IDAsIGVbQSArIDggPj4gMl0gPSAwLCBlW0EgKyAxMiA+PiAyXSA9IDAsIEEgPSAwLCBpID0gaSAmIDQgPyAxIDogaSAmIDEgPyAxMCA6IDEwOTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID0gZVt1ID4+IDJdLCBnID0gQSAtIDEgfCAwLCBvID0gaSArIFooZywgMjQpIHwgMCwgZVtvICsgNCA+PiAyXSAhPSBlW28gKyAxMiA+PiAyXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPSBlWyhlW3IgKyA1NTg0ID4+IDJdICsgWihlW2YgKyAyOCA+PiAyXSwgMTA4MCkgfCAwKSArIDE2ID4+IDJdLCBnID0gZVt1ICsgNDggPj4gMl0sIGcgPj4+IDAgPCBBICsgMSA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGcgPSBnICsgMTAgfCAwLCBpID0gbzAoaSwgWihnLCAyNCkpLCAhaSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbdSA+PiAyXSA9IGksIGQyKGkgKyBaKGVbdSArIDQ4ID4+IDJdLCAyNCkgfCAwLCAwLCAyNDApLCBlW3UgKyA0OCA+PiAyXSA9IGcsIGkgPSBlW3UgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gPSBaKEEsIDI0KSArIGkgfCAwLCBnID0gbywgZVtnID4+IDJdID0gMCwgZVtnICsgNCA+PiAyXSA9IDAsIGVbZyArIDE2ID4+IDJdID0gMCwgZVtnICsgMjAgPj4gMl0gPSAwLCBlW2cgKyA4ID4+IDJdID0gMCwgZVtnICsgMTIgPj4gMl0gPSAwLCBpID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocyAmIDQgfHwgKGkgPSAxMDksICEocyAmIDEpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlW2cgLSAxMiA+PiAyXSwgaSA9IChpIHwgMCkgPT0gMSB8fCAoaSB8IDApID09IDEwID8gMiA6IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcgPSBBLCBlW28gKyAxMiA+PiAyXSA9IGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQSA9IGVbdSArIDM2ID4+IDJdLCBJWyhlW3IgKyA1NTg0ID4+IDJdICsgWihlW2YgKyAyOCA+PiAyXSwgMTA4MCkgfCAwKSArIDE2IHwgMF0gJiA2NCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPSBaKGcsIDI0KSwgbSA9IGcgPyBBIDogMSwgZVsocyArIGVbdSA+PiAyXSB8IDApICsgMTYgPj4gMl0gPSBtLCBIID0gZVt1ICsgMzIgPj4gMl0sIG8gPSAwLCBpID0gQSwgbSA+Pj4gMCA+PSAyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IG8gPSBvICsgMSB8IDAsIG0gPSBpID4+PiAwID4gMywgaSA9IGkgPj4+IDEgfCAwLCAhIW07ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID0gbyArIEggfCAwLCBpID4+PiAwID49IDMzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW0IgKyAxNiA+PiAyXSA9IGksIFEoYSwgMSwgMjc1MzAsIEIgKyAxNiB8IDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG8gPSBIMShoLCBpKSwgaSA9IGVbdSA+PiAyXSwgcyA9IHMgKyBpIHwgMCwgZVtzICsgMjAgPj4gMl0gPSBvLCBBID0gQSAtIGVbcyArIDE2ID4+IDJdIHwgMCwgKEEgfCAwKSA8PSAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobyA9IGVbKGVbciArIDU1ODQgPj4gMl0gKyBaKGVbZiArIDI4ID4+IDJdLCAxMDgwKSB8IDApICsgMTYgPj4gMl0sIHMgPSBlW3UgKyA0OCA+PiAyXSwgcyA+Pj4gMCA8IGcgKyAyID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocyA9IHMgKyAxMCB8IDAsIGkgPSBvMChpLCBaKHMsIDI0KSksICFpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVt1ID4+IDJdID0gaSwgZDIoaSArIFooZVt1ICsgNDggPj4gMl0sIDI0KSB8IDAsIDAsIDI0MCksIGVbdSArIDQ4ID4+IDJdID0gcywgaSA9IGVbdSA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGcgPSBnICsgMSB8IDAsIGkgPSBpICsgWihnLCAyNCkgfCAwLCBlW2kgPj4gMl0gPSAwLCBlW2kgKyA0ID4+IDJdID0gMCwgZVtpICsgMTYgPj4gMl0gPSAwLCBlW2kgKyAyMCA+PiAyXSA9IDAsIGVbaSArIDggPj4gMl0gPSAwLCBlW2kgKyAxMiA+PiAyXSA9IDAsIG8gJiA0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2kgKyAxMiA+PiAyXSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyAmIDEgPyAobyA9IGksIGkgPSBlW2kgLSAxMiA+PiAyXSwgZVtvICsgMTIgPj4gMl0gPSAoaSB8IDApID09IDEgfHwgKGkgfCAwKSA9PSAxMCA/IDIgOiAxKSA6IGVbaSArIDEyID4+IDJdID0gMTA5OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPSBaKGcsIDI0KSwgbyA9IHMgKyBlW3UgPj4gMl0gfCAwLCBpID0gZVtvICsgMTIgPj4gMl0gLSBlW28gKyA0ID4+IDJdIHwgMCwgaSA9IChBIHwgMCkgPiAoaSB8IDApID8gaSA6IEEsIGVbbyArIDE2ID4+IDJdID0gaSwgbSA9IGVbdSArIDMyID4+IDJdLCBvID0gMCwgaSA+Pj4gMCA+PSAyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBvID0gbyArIDEgfCAwLCBIID0gaSA+Pj4gMCA+IDMsIGkgPSBpID4+PiAxIHwgMCwgISFIOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID0gbyArIG0gfCAwLCBpID4+PiAwID49IDMzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtCID4+IDJdID0gaSwgUShhLCAxLCAyNzUzMCwgQik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobyA9IEgxKGgsIGkpLCBpID0gZVt1ID4+IDJdLCBzID0gcyArIGkgfCAwLCBlW3MgKyAyMCA+PiAyXSA9IG8sIEEgPSBBIC0gZVtzICsgMTYgPj4gMl0gfCAwLCAoQSB8IDApIDw9IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG8gPSBlWyhlW3IgKyA1NTg0ID4+IDJdICsgWihlW2YgKyAyOCA+PiAyXSwgMTA4MCkgfCAwKSArIDE2ID4+IDJdLCBzID0gZVt1ICsgNDggPj4gMl0sIHMgPj4+IDAgPCBnICsgMiA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzID0gcyArIDEwIHwgMCwgaSA9IG8wKGksIFoocywgMjQpKSwgIWkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbdSA+PiAyXSA9IGksIGQyKGkgKyBaKGVbdSArIDQ4ID4+IDJdLCAyNCkgfCAwLCAwLCAyNDApLCBlW3UgKyA0OCA+PiAyXSA9IHMsIGkgPSBlW3UgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGcgPSBnICsgMSB8IDAsIGkgPSBpICsgWihnLCAyNCkgfCAwLCBlW2kgPj4gMl0gPSAwLCBlW2kgKyA0ID4+IDJdID0gMCwgZVtpICsgMTYgPj4gMl0gPSAwLCBlW2kgKyAyMCA+PiAyXSA9IDAsIGVbaSArIDggPj4gMl0gPSAwLCBlW2kgKyAxMiA+PiAyXSA9IDAsIG8gJiA0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtpICsgMTIgPj4gMl0gPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gJiAxID8gKG8gPSBpLCBpID0gZVtpIC0gMTIgPj4gMl0sIGVbbyArIDEyID4+IDJdID0gKGkgfCAwKSA9PSAxIHx8IChpIHwgMCkgPT0gMTAgPyAyIDogMSkgOiBlW2kgKyAxMiA+PiAyXSA9IDEwOTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgSTEoaCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAodSA9IHUgLSAtNjQgfCAwLCBwID0gcCArIDEgfCAwLCAoRSB8IDApID09IChwIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICh2ID0gdiArIDM2IHwgMCwgRCA9IEQgKyAxIHwgMCwgIShEID4+PiAwIDwgZFtDICsgMjQgPj4gMl0pKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICghajYoaCkpIHsKICAgICAgICAgICAgICAgICAgSTEoaCk7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBBID0gZVtoICsgOCA+PiAyXSwgaSA9IGVbaCA+PiAyXSwgSTEoaCksIGkgPSAoQSAtIGkgfCAwKSArIHcgfCAwOwogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICBpZiAoIShJW3IgfCAwXSAmIDQpKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIGlmIChlW2wgPj4gMl0gKyAoZVtjID4+IDJdIC0gaSB8IDApID4+PiAwIDw9IDEpIHsKICAgICAgICAgICAgICAgICAgICBRKGEsIDIsIDcyMzcsIDApOwogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKCEoSVtpIHwgMF0gPT0gMjU1ICYgSVtpICsgMSB8IDBdID09IDE0NikpIHsKICAgICAgICAgICAgICAgICAgICBRKGEsIDIsIDcyNzksIDApOwogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaSA9IGkgKyAyIHwgMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVbYyA+PiAyXSA9IGVbYyA+PiAyXSArIChlW2wgPj4gMl0gLSBpIHwgMCksIGVbbCA+PiAyXSA9IGksIEogPSAxLCBlW2sgPj4gMl0gPSAxLCBlW24gPj4gMl0gPSBlW0IgKyAyNCA+PiAyXSAtIHQ7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBYID0gQiArIDMyIHwgMCwgSjsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiAkQShBLCBpLCByKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDAsIHIgPSByIHwgMDsKICAgICAgICAgICAgICB2YXIgZiA9IDAsIGsgPSAwLCB0ID0gMCwgbiA9IDAsIGwgPSAwLCBhID0gMCwgdSA9IDAsIG8gPSAwLCBnID0gMCwgaCA9IFcoMCksIHMgPSAwLCB3ID0gMDsKICAgICAgICAgICAgICBhID0gWCAtIDQ4IHwgMCwgWCA9IGEsIGVbQSArIDggPj4gMl0gPSAxOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgZiA9IGEgKyA0MCB8IDA7CiAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICBpZiAoKGkxKGksIGYsIDIsIHIpIHwgMCkgIT0gMiB8fCAoaDIoZiwgYSArIDQ0IHwgMCwgMiksIGVbYSArIDQ0ID4+IDJdICE9IDY1MzU5KSkKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgaWYgKGVbQSArIDggPj4gMl0gPSAyLCBmID0gZVtpICsgNTYgPj4gMl0sIGsgPSBmIC0gMiB8IDAsIGYgPSBlW2kgKyA2MCA+PiAyXSAtIChmID4+PiAwIDwgMikgfCAwLCB0ID0gZVtBICsgMjAwID4+IDJdLCBlW3QgPj4gMl0gPSBrLCBlW3QgKyA0ID4+IDJdID0gZiwgZVthICsgMTYgPj4gMl0gPSBrLCBlW2EgKyAyMCA+PiAyXSA9IGYsIFEociwgNCwgMjQxMjQsIGEgKyAxNiB8IDApLCB0ID0gZVtBICsgMjAwID4+IDJdLCBvID0gZVt0ID4+IDJdLCBrID0gZVt0ICsgMjQgPj4gMl0sIGYgPSBrICsgMSB8IDAsIG4gPSBlW3QgKyAzMiA+PiAyXSwgZiA+Pj4gMCA8PSBuID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICBuID0gZVt0ICsgMjggPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBoID0gVyhXKG4gPj4+IDApICsgVygxMDApKTsKICAgICAgICAgICAgICAgICAgICBrOiB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoaCA8IFcoNDI5NDk2NzI5NikgJiBoID49IFcoMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZiA9IH5+aCA+Pj4gMDsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGYgPSAwOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoZVt0ICsgMzIgPj4gMl0gPSBmLCBuID0gbzAoZVt0ICsgMjggPj4gMl0sIFooZiwgMjQpKSwgbikgewogICAgICAgICAgICAgICAgICAgICAgZVt0ICsgMjggPj4gMl0gPSBuLCBrID0gZVt0ICsgMjQgPj4gMl0sIGYgPSBrICsgMSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBSKGVbdCArIDI4ID4+IDJdKSwgZVt0ICsgMzIgPj4gMl0gPSAwLCBlW3QgKyAyNCA+PiAyXSA9IDAsIGVbdCArIDI4ID4+IDJdID0gMCwgUShyLCAxLCA2NDEwLCAwKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBRKHIsIDEsIDI4MDA2LCAwKSwgQSA9IDA7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoayA9IFooaywgMjQpICsgbiB8IDAsIGVbayArIDE2ID4+IDJdID0gMiwgZVtrICsgOCA+PiAyXSA9IG8sIGVbayArIDEyID4+IDJdID0gbyA+PiAzMSwgdTJbayA+PiAxXSA9IDY1MzU5LCBlW3QgKyAyNCA+PiAyXSA9IGYsIChpMShpLCBlW0EgKyAxNiA+PiAyXSwgMiwgcikgfCAwKSAhPSAyKSB7CiAgICAgICAgICAgICAgICAgIFEociwgMSwgNDM1MiwgMCksIEEgPSAwOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaDIoZVtBICsgMTYgPj4gMl0sIGEgKyA0MCB8IDAsIDIpOwogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgaWYgKG4gPSBlW2EgKyA0MCA+PiAyXSwgKG4gfCAwKSAhPSA2NTQyNCkgewogICAgICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrID0gMzEzNDQsIG4gPj4+IDAgPD0gNjUyNzkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBlW2EgPj4gMl0gPSBuLCBRKHIsIDEsIDQxNDksIGEpLCBBID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBmID0gaywgdCA9IGVbZiA+PiAyXSwgISEodCAmJiAoayA9IGYgKyAxMiB8IDAsICh0IHwgMCkgIT0gKG4gfCAwKSkpOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICBrOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gMiwgUShyLCAyLCA2MzU4LCAwKSwgayA9IDQzNTI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGw6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGkxKGksIGVbQSArIDE2ID4+IDJdLCAyLCByKSB8IDApICE9IDIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGgyKGVbQSArIDE2ID4+IDJdLCBhICsgNDQgfCAwLCAyKSwgdCA9IDMxMzQ0LCBuID0gZVthICsgNDQgPj4gMl0sIG4gPj4+IDAgPj0gNjUyODApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGYgPSB0LCBnID0gZVtmID4+IDJdLCAhIShnICYmICh0ID0gZiArIDEyIHwgMCwgKG4gfCAwKSAhPSAoZyB8IDApKSk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGVbZiArIDQgPj4gMl0gJiBlW0EgKyA4ID4+IDJdKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSA4ODk4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGcgfCAwKSA9PSA2NTQyNCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVthICsgNDAgPj4gMl0gPSA2NTQyNDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvID0gZVtpICsgNTYgPj4gMl0sIHQgPSBlW0EgKyAyMDAgPj4gMl0sIGYgPSBlW3QgKyAyNCA+PiAyXSwgbiA9IGYgKyAxIHwgMCwgayA9IGVbdCArIDMyID4+IDJdLCBuID4+PiAwIDw9IGsgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBlW3QgKyAyOCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSBXKFcoayA+Pj4gMCkgKyBXKDEwMCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoIDwgVyg0Mjk0OTY3Mjk2KSAmIGggPj0gVygwKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gfn5oID4+PiAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW3QgKyAzMiA+PiAyXSA9IGYsIGsgPSBvMChlW3QgKyAyOCA+PiAyXSwgWihmLCAyNCkpLCBrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW3QgKyAyOCA+PiAyXSA9IGssIGYgPSBlW3QgKyAyNCA+PiAyXSwgbiA9IGYgKyAxIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFIoZVt0ICsgMjggPj4gMl0pLCBlW3QgKyAzMiA+PiAyXSA9IDAsIGVbdCArIDI0ID4+IDJdID0gMCwgZVt0ICsgMjggPj4gMl0gPSAwLCBrID0gNjQxMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSB1ICsgMiB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGkxKGksIGVbQSArIDE2ID4+IDJdLCAyLCByKSB8IDApICE9IDIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRKHIsIDEsIGssIDApLCBRKHIsIDEsIDIwMzgzLCAwKSwgQSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGYgPSBaKGYsIDI0KSArIGsgfCAwLCBlW2YgKyAxNiA+PiAyXSA9IHUsIGsgPSBvIC0gdSB8IDAsIGVbZiArIDggPj4gMl0gPSBrLCBlW2YgKyAxMiA+PiAyXSA9IGsgPj4gMzEsIHUyW2YgPj4gMV0gPSAwLCBlW3QgKyAyNCA+PiAyXSA9IG4sIGVbYSArIDQwID4+IDJdID0gZywgbiA9IDMxMzQ0OyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZiA9IG4sIHQgPSBlW2YgPj4gMl0sICF0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID0gZiArIDEyIHwgMCwgKHQgfCAwKSA9PSAoZyB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShlW2YgKyA0ID4+IDJdICYgZVtBICsgOCA+PiAyXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFEociwgMSwgODg5OCwgMCksIEEgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChpMShpLCBlW0EgKyAxNiA+PiAyXSwgMiwgcikgfCAwKSAhPSAyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBRKHIsIDEsIDQzNTIsIDApLCBBID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoMihlW0EgKyAxNiA+PiAyXSwgYSArIDM2IHwgMCwgMiksIGsgPSBlW2EgKyAzNiA+PiAyXSwgayA+Pj4gMCA8PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBRKHIsIDEsIDEwMDE1LCAwKSwgQSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoayA9IGsgLSAyIHwgMCwgZVthICsgMzYgPj4gMl0gPSBrLCBuID0gZVtBICsgMTYgPj4gMl0sIGRbQSArIDIwID4+IDJdIDwgayA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPSBvMChuLCBrKSwgIW4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUihlW0EgKyAxNiA+PiAyXSksIGVbQSArIDE2ID4+IDJdID0gMCwgZVtBICsgMjAgPj4gMl0gPSAwLCBRKHIsIDEsIDg0NzQsIDApLCBBID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbQSArIDE2ID4+IDJdID0gbiwgayA9IGVbYSArIDM2ID4+IDJdLCBlW0EgKyAyMCA+PiAyXSA9IGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrID0gaTEoaSwgbiwgaywgciksIChrIHwgMCkgIT0gZVthICsgMzYgPj4gMl0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFEociwgMSwgNDM1MiwgMCksIEEgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobzJbZVtmICsgOCA+PiAyXV0oQSwgZVtBICsgMTYgPj4gMl0sIGssIHIpIHwgMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFEociwgMSwgNDM3MCwgMCksIEEgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgbyA9IGVbaSArIDU2ID4+IDJdLCBnID0gZVthICsgMzYgPj4gMl0sIGYgPSBlW0EgKyAyMDAgPj4gMl0sIHUgPSBlW2YgKyAyNCA+PiAyXSwgayA9IHUgKyAxIHwgMCwgbiA9IGVbZiArIDMyID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgIGY6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrID4+PiAwIDw9IG4gPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IGVbZiArIDI4ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaCA9IFcoVyhuID4+PiAwKSArIFcoMTAwKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoIDwgVyg0Mjk0OTY3Mjk2KSAmIGggPj0gVygwKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSB+fmggPj4+IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW2YgKyAzMiA+PiAyXSA9IGssIG4gPSBvMChlW2YgKyAyOCA+PiAyXSwgWihrLCAyNCkpLCAhbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbZiArIDI4ID4+IDJdID0gbiwgdSA9IGVbZiArIDI0ID4+IDJdLCBrID0gdSArIDEgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9IFoodSwgMjQpICsgbiB8IDAsIGVbbiArIDE2ID4+IDJdID0gZyArIDQsIG8gPSAobyAtIGcgfCAwKSAtIDQgfCAwLCBlW24gKyA4ID4+IDJdID0gbywgZVtuICsgMTIgPj4gMl0gPSBvID4+IDMxLCB1MltuID4+IDFdID0gdCwgZVtmICsgMjQgPj4gMl0gPSBrLCAoaTEoaSwgZVtBICsgMTYgPj4gMl0sIDIsIHIpIHwgMCkgIT0gMikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgUShyLCAxLCA0MzUyLCAwKSwgQSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodyA9ICh0IHwgMCkgPT0gNjUzNzIgPyAxIDogdywgbCA9ICh0IHwgMCkgPT0gNjUzNjIgPyAxIDogbCwgcyA9ICh0IHwgMCkgPT0gNjUzNjEgPyAxIDogcywgaDIoZVtBICsgMTYgPj4gMl0sIGEgKyA0MCB8IDAsIDIpLCBuID0gZVthICsgNDAgPj4gMl0sIChuIHwgMCkgIT0gNjU0MjQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlmIChzKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBRKHIsIDEsIDgyODYsIDApLCBBID0gMDsKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmICghbCkgewogICAgICAgICAgICAgICAgICAgIFEociwgMSwgODMzMiwgMCksIEEgPSAwOwogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKCF3KSB7CiAgICAgICAgICAgICAgICAgICAgUShyLCAxLCA4Mzc4LCAwKSwgQSA9IDA7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB0ID0gMCwgdSA9IDAsIHMgPSAwLCBvID0gWCAtIDE2IHwgMCwgWCA9IG8sIHcgPSAxOwogICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCEoRltBICsgMTg4IHwgMF0gJiAxKSkKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgazogewogICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPSBlW0EgKyAxMTIgPj4gMl0sICFrKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZiA9IGVbQSArIDExNiA+PiAyXSArIChzIDw8IDMpIHwgMCwgbCA9IGVbZiA+PiAyXSwgbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPSBlW2YgKyA0ID4+IDJdLCBmID0gdCAtIG4gfCAwLCBmID0gdCA+Pj4gMCA+PSBmID4+PiAwID8gZiA6IDAsIHQgPj4+IDAgPCBuID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoayA9IG4gLSB0IHwgMCwgbiA9IHQgKyBsIHwgMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoayA+Pj4gMCA8IDQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoMihuLCBvICsgMTIgfCAwLCA0KSwgdCA9IGVbbyArIDEyID4+IDJdLCBsID0gayAtIDQgfCAwLCBnID0gdCA+Pj4gMCA+IGwgPj4+IDAsIGYgPSBnID8gdCAtIGwgfCAwIDogZiwgayA9IGwgLSB0IHwgMCwgdSA9IHQgKyB1IHwgMCwgbiA9ICgoZyA/IDAgOiB0KSArIG4gfCAwKSArIDQgfCAwLCAhKHQgPj4+IDAgPCBsID4+PiAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBlW0EgKyAxMTIgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gZjsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPSBzICsgMSB8IDAsICEocyA+Pj4gMCA8IGsgPj4+IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0KQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgIHcgPSAwLCBRKHIsIDEsIDUzMzIsIDApOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgdyA9IDAsIFEociwgMSwgOTE0NiwgMCk7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAodCA9IFUyKHUpLCBlW0EgKyAxMzYgPj4gMl0gPSB0LCAhdCkgewogICAgICAgICAgICAgICAgICAgICAgdyA9IDAsIFEociwgMSwgNjk4NiwgMCk7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlW0EgKyAxMjQgPj4gMl0gPSB1LCBsID0gZVtBICsgMTE2ID4+IDJdOwogICAgICAgICAgICAgICAgICAgIGs6IHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChmID0gZVtBICsgMTEyID4+IDJdLCBmKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoayA9IDAsIHQgPSAwLCB1ID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocyA9IHUgPDwgMywgZyA9IHMgKyBsIHwgMCwgbiA9IGVbZyA+PiAyXSwgbikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IGVbQSArIDEzNiA+PiAyXSArIHQgfCAwLCBmID0gZVtnICsgNCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGY6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGYgPj4+IDAgPD0gayA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEYyKGwsIG4sIGYpLCB0ID0gdCArIGYgfCAwLCBrID0gayAtIGYgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChGMihsLCBuLCBrKSwgdCA9IHQgKyBrIHwgMCwgbCA9IGYgLSBrIHwgMCwgayA9IGsgKyBuIHwgMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA+Pj4gMCA8IDQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoMihrLCBvICsgOCB8IDAsIDQpLCBrID0gayArIDQgfCAwLCBuID0gZVtBICsgMTM2ID4+IDJdICsgdCB8IDAsIGYgPSBsIC0gNCB8IDAsIGwgPSBlW28gKyA4ID4+IDJdLCBmID4+PiAwIDwgbCA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRjIobiwgaywgZiksIHQgPSB0ICsgZiB8IDAsIGsgPSBlW28gKyA4ID4+IDJdIC0gZiB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRjIobiwgaywgbCksIG4gPSBlW28gKyA4ID4+IDJdLCB0ID0gbiArIHQgfCAwLCBrID0gayArIG4gfCAwLCBsID0gZiAtIG4gfCAwLCAhbCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgUihlW3MgKyBlW0EgKyAxMTYgPj4gMl0gPj4gMl0pLCBsID0gZVtBICsgMTE2ID4+IDJdLCBmID0gcyArIGwgfCAwLCBlW2YgPj4gMl0gPSAwLCBlW2YgKyA0ID4+IDJdID0gMCwgZiA9IGVbQSArIDExMiA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHUgPSB1ICsgMSB8IDAsICEodSA+Pj4gMCA8IGYgPj4+IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgdSA9IGVbQSArIDEyNCA+PiAyXSwgdCA9IGVbQSArIDEzNiA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGVbQSArIDE0NCA+PiAyXSA9IHUsIGVbQSArIDEyMCA+PiAyXSA9IHQsIGVbQSArIDExMiA+PiAyXSA9IDAsIFIobCksIGVbQSArIDExNiA+PiAyXSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB3ID0gMCwgUShyLCAxLCA5MTQ2LCAwKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoWCA9IG8gKyAxNiB8IDAsICF3KSB7CiAgICAgICAgICAgICAgICAgICAgUShyLCAxLCAxODEwMSwgMCksIEEgPSAwOwogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgUShyLCA0LCAyMjgxMywgMCksIHIgPSBlW0EgKyAyMDAgPj4gMl0sIGYgPSBlW2kgKyA1NiA+PiAyXSwgZiA9IGYgLSAyIHwgMCwgZVtyICsgOCA+PiAyXSA9IGYsIGVbciArIDEyID4+IDJdID0gMCwgZVtBICsgOCA+PiAyXSA9IDgsIEEgPSAxOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgUihlW2YgKyAyOCA+PiAyXSksIGVbZiArIDMyID4+IDJdID0gMCwgZVtmICsgMjQgPj4gMl0gPSAwLCBlW2YgKyAyOCA+PiAyXSA9IDAsIFEociwgMSwgNjQxMCwgMCksIEEgPSAwOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gWCA9IGEgKyA0OCB8IDAsIEEgfCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIGtyKEEsIGksIHIsIGYsIGssIHQsIG4sIGwpIHsKICAgICAgICAgICAgICB2YXIgYSA9IDAsIHUgPSAwLCBvID0gMCwgZyA9IDAsIGggPSAwLCBzID0gMCwgdyA9IDAsIEIgPSAwLCBjID0gMCwgdiA9IDAsIEMgPSAwLCBtID0gMCwgeSA9IDAsIHAgPSAwLCBIID0gMCwgSiA9IDAsIEUgPSAwLCBEID0gMCwgVSA9IDAsIFAgPSAwLCB4ID0gMCwgeiA9IDAsIGogPSAwLCBPID0gMCwgcSA9IDAsIGYyID0gMCwgbjIgPSAwOwogICAgICAgICAgICAgIHMgPSBYIC0gODAgfCAwLCBYID0gcywgdSA9IGVbciArIDMyID4+IDJdLCBnID0gZVsoZVtBICsgMjAgPj4gMl0gKyBaKGVbciArIDI4ID4+IDJdLCA3NikgfCAwKSArIDI4ID4+IDJdLCBIID0gZVtyICsgNDAgPj4gMl0sIG0gPSBlW3IgKyAzNiA+PiAyXTsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAoSVtpIHwgMF0gJiAyKSB7CiAgICAgICAgICAgICAgICAgIGlmICh0ID4+PiAwIDw9IDUpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoKG4gfCAwKSAhPSAxKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICBlW3MgKyA2OCA+PiAyXSA9IDYsIGVbcyArIDY0ID4+IDJdID0gdCwgUShsLCAxLCAyMjg4NCwgcyAtIC02NCB8IDApOwogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgRltmIHwgMF0gPSAyNTUsIEZbZiArIDEgfCAwXSA9IDE0NSwgRltmICsgMiB8IDBdID0gMCwgRltmICsgMyB8IDBdID0gNCwgRltmICsgNCB8IDBdID0gZVtBICsgODQwID4+IDJdID4+PiA4LCBGW2YgKyA1IHwgMF0gPSBlW0EgKyA4NDAgPj4gMl0sIHQgPSB0IC0gNiB8IDAsIEEgPSBmICsgNiB8IDA7CiAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgQSA9IGY7CiAgICAgICAgICAgICAgICB5ID0gQTsKICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgIGs6IHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChDID0gZyArIFoodSwgMTUyKSB8IDAsICEoIWVbQyArIDI0ID4+IDJdIHwgSCkpCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodSA9IEMgKyAyOCB8IDAsIGcgPSBaKG0sIDQwKTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVt1ICsgMTIgPj4gMl0gPT0gZVt1ICsgNCA+PiAyXSB8IGVbdSArIDggPj4gMl0gPT0gZVt1ID4+IDJdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEEgPSBaKGVbQyArIDIwID4+IDJdLCBlW0MgKyAxNiA+PiAyXSksIEEgPj4+IDAgPD0gbSA+Pj4gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBID0gZyArIGVbdSArIDIwID4+IDJdIHwgMCwgWmkoZVtBICsgMzIgPj4gMl0pLCBaaShlW0EgKyAzNiA+PiAyXSksIG8gPSBaKGVbQSArIDIwID4+IDJdLCBlW0EgKyAxNiA+PiAyXSksICFvKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChyID0gMDsgaCA9IGVbQSArIDI0ID4+IDJdICsgWihyLCA1MikgfCAwLCBlW2ggKyA0MCA+PiAyXSA9IDAsICQ2KGVbQSArIDM2ID4+IDJdLCByLCBlW3UgKyAyOCA+PiAyXSAtIGVbaCArIDI4ID4+IDJdIHwgMCksIHIgPSByICsgMSB8IDAsIChvIHwgMCkgIT0gKHIgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1ID0gdSArIDM2IHwgMCwgdyA9IHcgKyAxIHwgMCwgISh3ID4+PiAwIDwgZFtDICsgMjQgPj4gMl0pKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlmIChhID0gVTIoMjApLCAhYSkKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgIGlmIChlW2EgKyAxMiA+PiAyXSA9IDAsIGVbYSArIDE2ID4+IDJdID0gOCwgZVthICsgOCA+PiAyXSA9IHksIGVbYSA+PiAyXSA9IHksIGVbYSArIDQgPj4gMl0gPSB0ICsgeSwgb2UoYSwgMSksIGggPSBDICsgMjggfCAwLCBlW0MgKyAyNCA+PiAyXSkKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gSCArIDEgfCAwLCBPID0gWihtLCA0MCksIHggPSBaKEgsIDI0KSwgYyA9IGg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbYyArIDEyID4+IDJdID09IGVbYyArIDQgPj4gMl0gfCBlW2MgKyA4ID4+IDJdID09IGVbYyA+PiAyXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBID0gWihlW0MgKyAyMCA+PiAyXSwgZVtDICsgMTYgPj4gMl0pLCBBID4+PiAwIDw9IG0gPj4+IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocCA9IGVbYyArIDIwID4+IDJdICsgTyB8IDAsIFAgPSBaKGVbcCArIDIwID4+IDJdLCBlW3AgKyAxNiA+PiAyXSksICFQKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChyID0gZVtwICsgMjQgPj4gMl0sIEEgPSAwOyBlW3IgKyA0MCA+PiAyXSB8ICFlW2VbciArIDQgPj4gMl0gKyB4ID4+IDJdIHx8ICQ2KGVbcCArIDMyID4+IDJdLCBBLCBIKSwgciA9IHIgKyA1MiB8IDAsIEEgPSBBICsgMSB8IDAsIChQIHwgMCkgIT0gKEEgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKEIgPSBlW3AgKyAyNCA+PiAyXSwgSiA9IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEUgPSBlW0IgKyA0ID4+IDJdICsgeCB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWVbQiArIDQwID4+IDJdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXNihhLCBlW3AgKyAzMiA+PiAyXSwgSiwgaik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZShhLCBlW0UgPj4gMl0gIT0gMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IGVbRSA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtCICsgNDAgPj4gMl0gfHwgKGVbQiArIDMyID4+IDJdID0gMywgVzYoYSwgZVtwICsgMzYgPj4gMl0sIEosIDk5OSksIHIgPSBlW0UgPj4gMl0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGw6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAociAtIDEgfCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2UoYSwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHplKGEsIDIsIDIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPj4+IDAgPD0gNSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZShhLCByIC0gMyB8IDEyLCA0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID4+PiAwIDw9IDM2KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHplKGEsIHIgLSA2IHwgNDgwLCA5KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID4+PiAwID4gMTY0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemUoYSwgciAtIDM3IHwgNjU0MDgsIDE2KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQSA9IDAsIGcgPSAwLCB1ID0gMCwgdiA9IGVbQiArIDQwID4+IDJdLCBEID0gdiArIGVbRSA+PiAyXSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYgPj4+IDAgPj0gRCA+Pj4gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAocSA9IEQgLSAxIHwgMCwgdyA9IGVbQiArIDggPj4gMl0gKyBaKHYsIDI0KSB8IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBnICsgMSB8IDAsIEEgPSBlW3cgKyAxNiA+PiAyXSArIEEgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoRlt3ICsgMjAgfCAwXSAmIDEgfCAodiB8IDApID09IChxIHwgMCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChVID0gMSwgbyA9IDAsIChBIHwgMCkgPj0gMikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGcgPSBvLCBvID0gbyArIDEgfCAwLCBVID0gQSA+Pj4gMCA+IDMsIEEgPSBBID4+PiAxIHwgMCwgISFVOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFUgPSBnICsgMiB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnID0gMCwgQSA9IDAsIChyIHwgMCkgPj0gMikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IG8gPSBBLCBBID0gQSArIDEgfCAwLCBmMiA9IHIgPj4+IDAgPiAzLCByID0gciA+Pj4gMSB8IDAsICEhZjI7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQSA9IG8gXiAtMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgPSBBICsgKFUgLSBlW0IgKyAzMiA+PiAyXSB8IDApIHwgMCwgdSA9IChBIHwgMCkgPCAodSB8IDApID8gdSA6IEEsIEEgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3ID0gdyArIDI0IHwgMCwgdiA9IHYgKyAxIHwgMCwgKEQgfCAwKSA9PSAodiB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSB1LCAociB8IDApIDw9IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgb2UoYSwgMSksIG8gPSByID4+PiAwID4gMSwgciA9IHIgLSAxIHwgMCwgISFvOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9lKGEsIDApLCBlW0IgKyAzMiA+PiAyXSA9IGVbQiArIDMyID4+IDJdICsgdSwgdiA9IGVbQiArIDQwID4+IDJdLCBEID4+PiAwIDw9IHYgPj4+IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodyA9IGVbQiArIDggPj4gMl0gKyBaKHYsIDI0KSB8IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gZyArIDEgfCAwLCBBID0gZVt3ICsgMTYgPj4gMl0gKyBBIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGw6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoRlt3ICsgMjAgfCAwXSAmIDEgfCAoKGVbQiArIDQwID4+IDJdICsgZVtFID4+IDJdIHwgMCkgLSAxIHwgMCkgPT0gKHYgfCAwKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnID0gMCwgbyA9IDAsIChyIHwgMCkgPj0gMikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgbyA9IG8gKyAxIHwgMCwgdSA9IHIgPj4+IDAgPiAzLCByID0gciA+Pj4gMSB8IDAsICEhdTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZShhLCBBLCBlW0IgKyAzMiA+PiAyXSArIG8gfCAwKSwgQSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodyA9IHcgKyAyNCB8IDAsIHYgPSB2ICsgMSB8IDAsIChEIHwgMCkgPT0gKHYgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChCID0gQiArIDUyIHwgMCwgSiA9IEogKyAxIHwgMCwgKFAgfCAwKSA9PSAoSiB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA9IGMgKyAzNiB8IDAsIHogPSB6ICsgMSB8IDAsICEoeiA+Pj4gMCA8IGRbQyArIDI0ID4+IDJdKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICB1ID0gZVthICsgMTIgPj4gMl0sIEEgPSB1IDw8IDggJiA2NTI4MCwgZVthICsgMTIgPj4gMl0gPSBBLCBlW2EgKyAxNiA+PiAyXSA9IChBIHwgMCkgPT0gNjUyODAgPyA3IDogOCwgciA9IGVbYSArIDggPj4gMl0sIEEgPSAwOwogICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICBpZiAociA+Pj4gMCA+PSBkW2EgKyA0ID4+IDJdIHx8IChlW2EgKyA4ID4+IDJdID0gciArIDEsIEZbciB8IDBdID0gdSwgQSA9IDEsIGVbYSArIDE2ID4+IDJdICE9IDcpIHx8ICh1ID0gZVthICsgMTIgPj4gMl0sIEEgPSB1IDw8IDggJiA2NTI4MCwgZVthICsgMTIgPj4gMl0gPSBBLCBlW2EgKyAxNiA+PiAyXSA9IChBIHwgMCkgPT0gNjUyODAgPyA3IDogOCwgciA9IGVbYSArIDggPj4gMl0sIEEgPSAwLCByID4+PiAwID49IGRbYSArIDQgPj4gMl0pKQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgIGVbYSArIDggPj4gMl0gPSByICsgMSwgRltyIHwgMF0gPSB1LCBBID0gMTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlmICghQSkgewogICAgICAgICAgICAgICAgICAgICAgICBJMShhKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlmIChBID0gZVthICsgOCA+PiAyXSAtIGVbYSA+PiAyXSB8IDAsIEkxKGEpLCBvID0gdCAtIEEgfCAwLCBnID0gQSArIHkgfCAwLCBJW2kgfCAwXSAmIDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG8gPj4+IDAgPD0gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobiB8IDApICE9IDEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICAgIGVbcyArIDIwID4+IDJdID0gMiwgZVtzICsgMTYgPj4gMl0gPSBvLCBRKGwsIDEsIDIyODg0LCBzICsgMTYgfCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIEZbZyB8IDBdID0gMjU1LCBGW2cgKyAxIHwgMF0gPSAxNDYsIG8gPSBvIC0gMiB8IDAsIGcgPSBnICsgMiB8IDA7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZVtDICsgMjQgPj4gMl0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPSAwLCAobiB8IDApID09IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHQgPSBaKG0sIDQwKSwgbiA9IFooSCwgMjQpOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgQTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtoICsgMTIgPj4gMl0gPT0gZVtoICsgNCA+PiAyXSB8IGVbaCArIDggPj4gMl0gPT0gZVtoID4+IDJdIHx8IChBID0gdCArIGVbaCArIDIwID4+IDJdIHwgMCwgdSA9IFooZVtBICsgMjAgPj4gMl0sIGVbQSArIDE2ID4+IDJdKSwgIXUpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAociA9IGVbQSArIDI0ID4+IDJdLCB3ID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IG4gKyBlW3IgKyA0ID4+IDJdIHwgMCwgZVtpID4+IDJdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQSA9IGVbaSArIDQgPj4gMl0sIG8gPj4+IDAgPCBBID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQSA9IEYyKGcsIGVbaSArIDE2ID4+IDJdLCBBKSwgZVtyICsgNDAgPj4gMl0gPSBlW3IgKyA0MCA+PiAyXSArIGVbaSA+PiAyXSwgaSA9IGVbaSArIDQgPj4gMl0sIG8gPSBvIC0gaSB8IDAsIGcgPSBBICsgaSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0gciArIDUyIHwgMCwgdyA9IHcgKyAxIHwgMCwgKHUgfCAwKSA9PSAodyB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoID0gaCArIDM2IHwgMCwgYyA9IGMgKyAxIHwgMCwgIShjID4+PiAwIDwgZFtDICsgMjQgPj4gMl0pKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSBaKG0sIDQwKSwgdCA9IFooSCwgMjQpOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgIEE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW2ggKyAxMiA+PiAyXSA9PSBlW2ggKyA0ID4+IDJdIHwgZVtoICsgOCA+PiAyXSA9PSBlW2ggPj4gMl0gfHwgKEEgPSBpICsgZVtoICsgMjAgPj4gMl0gfCAwLCBuID0gWihlW0EgKyAyMCA+PiAyXSwgZVtBICsgMTYgPj4gMl0pLCAhbikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHIgPSBlW0EgKyAyNCA+PiAyXSwgdSA9IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBID0gdCArIGVbciArIDQgPj4gMl0gfCAwLCB5ID0gZVtBID4+IDJdLCB5KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEEgPSBlW0EgKyA0ID4+IDJdLCBvID4+PiAwIDwgQSA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW3IgKyA0MCA+PiAyXSA9IHkgKyBlW3IgKyA0MCA+PiAyXSwgbyA9IG8gLSBBIHwgMCwgZyA9IEEgKyBnIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9IHIgKyA1MiB8IDAsIHUgPSB1ICsgMSB8IDAsIChuIHwgMCkgPT0gKHUgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGggPSBoICsgMzYgfCAwLCBjID0gYyArIDEgfCAwLCAhKGMgPj4+IDAgPCBkW0MgKyAyNCA+PiAyXSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgZVtrID4+IDJdID0gZVtrID4+IDJdICsgKGcgLSBmIHwgMCksIG4yID0gMTsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVbcyArIDUyID4+IDJdID0gQSwgZVtzICsgNDggPj4gMl0gPSBtLCBRKGwsIDEsIDQyNzIsIHMgKyA0OCB8IDApOwogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZVtzICsgMzYgPj4gMl0gPSBBLCBlW3MgKyAzMiA+PiAyXSA9IG0sIFEobCwgMSwgNDI3MiwgcyArIDMyIHwgMCk7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoIWkpCiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICBlW3MgKyA0ID4+IDJdID0gQSwgZVtzID4+IDJdID0gbywgUShsLCAxLCAyMjg4NCwgcyk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBYID0gcyArIDgwIHwgMCwgbjI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gcUEoQSwgaSwgcikgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDA7CiAgICAgICAgICAgICAgdmFyIGYgPSAwLCBrID0gMCwgdCA9IDAsIG4gPSAwLCBsID0gMCwgYSA9IDAsIHUgPSAwLCBvID0gMCwgZyA9IDAsIGggPSAwLCBzID0gMCwgdyA9IDAsIEIgPSAwLCBjID0gMCwgdiA9IDAsIEMgPSAwLCBtID0gMCwgeSA9IDAsIHAgPSAwLCBIID0gMCwgSiA9IDAsIEUgPSAwLCBEID0gMCwgVSA9IDAsIFAgPSAwLCB4ID0gMCwgeiA9IDAsIGogPSAwLCBPID0gMCwgcSA9IDAsIGYyID0gMCwgbjIgPSAwLCBnMiA9IDAsIHcyID0gMCwgYzIgPSAwLCBtMiA9IDAsIHAyID0gMCwgWTIgPSAwLCBYMiA9IDAsIEQyID0gMCwgUzIgPSAwLCBQMiA9IDAsIHgyID0gMCwgejIgPSAwLCBMMiA9IDAsIGUwID0gMCwgaTAgPSAwLCByMCA9IDAsIGswID0gMCwgdDAgPSAwOwogICAgICAgICAgICAgIGlmIChpID0gMCwgZVtBICsgNDAgPj4gMl0gPSAwLCBxID0gWihlW0EgKyAxMDggPj4gMl0sIGVbQSArIDEwNCA+PiAyXSksIHEpCiAgICAgICAgICAgICAgICBmb3IgKHYgPSBBICsgODAgfCAwLCBwID0gZVtBICsgNzIgPj4gMl0sIHIgPSBlW0EgKyAxNTYgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgIGogPSAwLCB0ID0gZVt2ICsgMTYgPj4gMl0sIGEgPSBlW3YgKyAyNCA+PiAyXSwgdSA9IChpID4+PiAwKSAvIChhID4+PiAwKSB8IDAsIGYgPSBlW3YgKyA4ID4+IDJdICsgWih0LCB1KSB8IDAsIHQgPSBmICsgdCB8IDAsIHQgPSBmID4+PiAwID4gdCA+Pj4gMCA/IC0xIDogdCwgZyA9IGVbcCArIDEyID4+IDJdLCBIID0gdCA+Pj4gMCA8IGcgPj4+IDAgPyB0IDogZywgdCA9IGVbdiArIDEyID4+IDJdLCBQID0gaSwgaSA9IGVbdiArIDQgPj4gMl0gKyBaKHQsIGkgLSBaKGEsIHUpIHwgMCkgfCAwLCB0ID0gaSArIHQgfCAwLCB0ID0gaSA+Pj4gMCA+IHQgPj4+IDAgPyAtMSA6IHQsIGEgPSBlW3AgKyA4ID4+IDJdLCBKID0gdCA+Pj4gMCA8IGEgPj4+IDAgPyB0IDogYSwgdCA9IGVbcCArIDQgPj4gMl0sIEUgPSBmID4+PiAwID4gdCA+Pj4gMCA/IGYgOiB0LCBmID0gZVtwID4+IDJdLCBEID0gaSA+Pj4gMCA+IGYgPj4+IDAgPyBpIDogZiwgZjIgPSBlW3YgKyA3NiA+PiAyXSwgTyA9IGVbcCArIDE2ID4+IDJdOwogICAgICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFPKSB7CiAgICAgICAgICAgICAgICAgICAgICBzID0gMjE0NzQ4MzY0NywgQyA9IDAsIHQgPSAwLCB3ID0gMjE0NzQ4MzY0NzsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGZvciAocDIgPSBIIC0gMSB8IDAsIFkyID0gMCAtICFIIHwgMCwgWDIgPSBKIC0gMSB8IDAsIEQyID0gMCAtICFKIHwgMCwgbjIgPSBFIC0gMSB8IDAsIFMyID0gMCAtICFFIHwgMCwgZzIgPSBEIC0gMSB8IDAsIFAyID0gMCAtICFEIHwgMCwgVSA9IGVbKGYyICsgWihQLCA1NjQ0KSB8IDApICsgNTU4NCA+PiAyXSwgeCA9IGVbcCArIDI0ID4+IDJdLCBzID0gMjE0NzQ4MzY0NywgQyA9IDAsIHQgPSAwLCB3ID0gMjE0NzQ4MzY0NzsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgIGYgPSBZMiwgYSA9IGVbeCArIDQgPj4gMl0sIGkgPSBhICsgcDIgfCAwLCBnID0gbjAoaSwgaSA+Pj4gMCA8IGEgPj4+IDAgPyBmICsgMSB8IDAgOiBmLCBhLCAwKSwgZiA9IEQyLCB1ID0gZVt4ID4+IDJdLCBpID0gdSArIFgyIHwgMCwgbCA9IG4wKGksIGkgPj4+IDAgPCB1ID4+PiAwID8gZiArIDEgfCAwIDogZiwgdSwgMCksIGYgPSBTMiwgaSA9IGEgKyBuMiB8IDAsIGYgPSBpID4+PiAwIDwgbjIgPj4+IDAgPyBmICsgMSB8IDAgOiBmLCBrID0gbjAoaSwgZiwgYSwgMCksIGYgPSBQMiwgaSA9IHUgKyBnMiB8IDAsIGYgPSBpID4+PiAwIDwgZzIgPj4+IDAgPyBmICsgMSB8IDAgOiBmLCBmID0gbjAoaSwgZiwgdSwgMCksIHogPSBlW1UgKyA0ID4+IDJdLCBpID0gejsKICAgICAgICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPj4+IDAgPj0gaSA+Pj4gMCAmJiAoaSA9IHQsICF6KSkKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHgyID0gVSArIDk0NCB8IDAsIHoyID0gVSArIDgxMiB8IDAsIHcyID0gZyAtIDEgfCAwLCBMMiA9IDAgLSAhZyB8IDAsIGUwID0gbCAtIDEgfCAwLCBpMCA9IDAgLSAhbCB8IDAsIGMyID0gayAtIDEgfCAwLCByMCA9IDAgLSAhayB8IDAsIGswID0gZiAtIDEgfCAwLCB0MCA9IDAgLSAhZiB8IDAsIHQgPSAwLCBnID0gMDsgbCA9ICh0IF4gLTEpICsgeiB8IDAsIGsgPSBsICYgMzEsIChsICYgNjMpID4+PiAwID49IDMyID8gKGYgPSAxIDw8IGssIG4gPSAwKSA6IChuID0gMSA8PCBrLCBmID0gbiAtIDEgJiAxID4+PiAzMiAtIGspLCBtID0gbiwgaCA9IG0sIGsgPSBoICsgZTAgfCAwLCBvID0gZiwgZiA9IGYgKyBpMCB8IDAsIGYgPSBrID4+PiAwIDwgaCA+Pj4gMCA/IGYgKyAxIHwgMCA6IGYsIG4gPSAwLCBCID0gdCA8PCAyLCBoID0gZVtCICsgejIgPj4gMl0sIHkgPSBrLCBrID0gbCAmIDMxLCAobCAmIDYzKSA+Pj4gMCA+PSAzMiA/IHkgPSBmID4+PiBrIHwgMCA6IHkgPSAoKDEgPDwgaykgLSAxICYgZikgPDwgMzIgLSBrIHwgeSA+Pj4gaywgayA9IGggJiAzMSwgKGggJiA2MykgPj4+IDAgPj0gMzIgPyAoZiA9IC0xIDw8IGssIGsgPSAwKSA6IChmID0gKDEgPDwgaykgLSAxICYgLTEgPj4+IDMyIC0gaywgayA9IC0xIDw8IGssIGYgPSBmIHwgayksIGMgPSBrIF4gLTEsIGsgPSB5ICsgYyB8IDAsIGYgPSAoZiBeIC0xKSArIG4gfCAwLCBmID0gayA+Pj4gMCA8IGMgPj4+IDAgPyBmICsgMSB8IDAgOiBmLCBuID0gaywgayA9IGggJiAzMSwgKGggJiA2MykgPj4+IDAgPj0gMzIgPyBrID0gZiA+Pj4gayB8IDAgOiBrID0gKCgxIDw8IGspIC0gMSAmIGYpIDw8IDMyIC0gayB8IG4gPj4+IGssIGYgPSBvICsgdDAgfCAwLCBuID0gbSArIGswIHwgMCwgZiA9IG4gPj4+IDAgPCBtID4+PiAwID8gZiArIDEgfCAwIDogZiwgYyA9IGssIGsgPSBsICYgMzEsIChsICYgNjMpID4+PiAwID49IDMyID8gZiA9IGYgPj4+IGsgfCAwIDogZiA9ICgoMSA8PCBrKSAtIDEgJiBmKSA8PCAzMiAtIGsgfCBuID4+PiBrLCB5ID0gKGYgfCAwKSAhPSAoeSB8IDApID8gYyAtIChmID4+PiBoIHwgMCkgJiAtMSA+Pj4gaCA6IDAsIGYgPSBvICsgTDIgfCAwLCBuID0gbSArIHcyIHwgMCwgZiA9IG4gPj4+IDAgPCB3MiA+Pj4gMCA/IGYgKyAxIHwgMCA6IGYsIGMgPSAwLCBrID0gZVtCICsgeDIgPj4gMl0sIEIgPSBuLCBuID0gbCAmIDMxLCAobCAmIDYzKSA+Pj4gMCA+PSAzMiA/IEIgPSBmID4+PiBuIHwgMCA6IEIgPSAoKDEgPDwgbikgLSAxICYgZikgPDwgMzIgLSBuIHwgQiA+Pj4gbiwgbiA9IGsgJiAzMSwgKGsgJiA2MykgPj4+IDAgPj0gMzIgPyAoZiA9IC0xIDw8IG4sIG4gPSAwKSA6IChmID0gKDEgPDwgbikgLSAxICYgLTEgPj4+IDMyIC0gbiwgbiA9IC0xIDw8IG4sIGYgPSBmIHwgbiksIG0yID0gbiBeIC0xLCBuID0gQiArIG0yIHwgMCwgZiA9IChmIF4gLTEpICsgYyB8IDAsIGYgPSBuID4+PiAwIDwgbTIgPj4+IDAgPyBmICsgMSB8IDAgOiBmLCBjID0gbiwgbiA9IGsgJiAzMSwgKGsgJiA2MykgPj4+IDAgPj0gMzIgPyBuID0gZiA+Pj4gbiB8IDAgOiBuID0gKCgxIDw8IG4pIC0gMSAmIGYpIDw8IDMyIC0gbiB8IGMgPj4+IG4sIGYgPSBvICsgcjAgfCAwLCBvID0gbSArIGMyIHwgMCwgZiA9IG8gPj4+IDAgPCBjMiA+Pj4gMCA/IGYgKyAxIHwgMCA6IGYsIG0gPSBuLCBuID0gbywgbyA9IGwgJiAzMSwgKGwgJiA2MykgPj4+IDAgPj0gMzIgPyBmID0gZiA+Pj4gbyB8IDAgOiBmID0gKCgxIDw8IG8pIC0gMSAmIGYpIDw8IDMyIC0gbyB8IG4gPj4+IG8sIGYgPSBaKChmIHwgMCkgIT0gKEIgfCAwKSA/IG0gLSAoZiA+Pj4gayB8IDApICYgLTEgPj4+IGsgOiAwLCB5KSwgQyA9IGYgPj4+IDAgPiBDID4+PiAwID8gZiA6IEMsIGYgPSBrICsgbCB8IDAsIGsgPSBmICYgMzEsIChmICYgNjMpID4+PiAwID49IDMyID8gKGYgPSBhIDw8IGssIGsgPSAwKSA6IChmID0gKDEgPDwgaykgLSAxICYgYSA+Pj4gMzIgLSBrLCBrID0gYSA8PCBrKSwgdyA9IGYgfHwgayA+Pj4gMCA+IHcgPj4+IDAgPyB3IDogaywgZiA9IGwgKyBoIHwgMCwgbCA9IGYgJiAzMSwgKGYgJiA2MykgPj4+IDAgPj0gMzIgPyAoZiA9IHUgPDwgbCwgbCA9IDApIDogKGYgPSAoMSA8PCBsKSAtIDEgJiB1ID4+PiAzMiAtIGwsIGwgPSB1IDw8IGwpLCBzID0gZiB8fCBsID4+PiAwID4gcyA+Pj4gMCA/IHMgOiBsLCBmID0gZywgdCA9IHQgKyAxIHwgMCwgZiA9IHQgPyBmIDogZiArIDEgfCAwLCBnID0gZiwgISEoKHQgfCAwKSAhPSAoeiB8IDApIHwgZik7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBpOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgaWYgKFUgPSBVICsgMTA4MCB8IDAsIHggPSB4ICsgNTIgfCAwLCBqID0gaiArIDEgfCAwLCAoTyB8IDApID09IChqIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpID0gZjIgKyBaKFAsIDU2NDQpIHwgMCwgYSA9IGVbaSArIDQyMCA+PiAyXTsKICAgICAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgICAgIGlmIChJW2kgKyA1NjQwIHwgMF0gJiA0KSB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtpICsgNDkyID4+IDJdID0gMCwgZVtpICsgNTQ0ID4+IDJdID0gdywgZVtpICsgNTQwID4+IDJdID0gcywgZVtpICsgNTM2ID4+IDJdID0gSCwgZVtpICsgNTMyID4+IDJdID0gRSwgZVtpICsgNTI4ID4+IDJdID0gSiwgZVtpICsgNTI0ID4+IDJdID0gRCwgZVtpICsgNTIwID4+IDJdID0gQywgZVtpICsgNTA0ID4+IDJdID0gMCwgZVtpICsgNTE2ID4+IDJdID0gZVtpICsgNDQwID4+IDJdLCBmID0gZVtpICsgNDI4ID4+IDJdLCBlW2kgKyA0OTYgPj4gMl0gPSBlW2kgKyA0MjQgPj4gMl0sIGVbaSArIDUwMCA+PiAyXSA9IGYsIGYgPSBlW2kgKyA0MzYgPj4gMl0sIGVbaSArIDUwOCA+PiAyXSA9IGVbaSArIDQzMiA+PiAyXSwgZVtpICsgNTEyID4+IDJdID0gZiwgZVtpICsgNDYwID4+IDJdID0gZVtpICsgNDU2ID4+IDJdLCBhIC0gMSA+Pj4gMCA+IDQyOTQ5NjcyOTMpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgICBmb3IgKGYgPSBpICsgNTcyIHwgMCwgdCA9IDE7IGVbZiArIDgwID4+IDJdID0gMCwgZVtmICsgMTIwID4+IDJdID0gdywgZVtmICsgMTE2ID4+IDJdID0gcywgZVtmICsgMTEyID4+IDJdID0gSCwgZVtmICsgMTA4ID4+IDJdID0gRSwgZVtmICsgMTA0ID4+IDJdID0gSiwgZVtmICsgMTAwID4+IDJdID0gRCwgZVtmICsgOTYgPj4gMl0gPSBDLCBpID0gZVtmICsgNCA+PiAyXSwgZVtmICsgNzIgPj4gMl0gPSBlW2YgPj4gMl0sIGVbZiArIDc2ID4+IDJdID0gaSwgaSA9IGVbZiArIDE2ID4+IDJdLCBlW2YgKyA4OCA+PiAyXSA9IGVbZiArIDEyID4+IDJdLCBlW2YgKyA5MiA+PiAyXSA9IGksIGkgPSBlW2YgKyA4ID4+IDJdLCBlW2YgKyA4NCA+PiAyXSA9IGksIGVbZiArIDM2ID4+IDJdID0gZVtmICsgMzIgPj4gMl0sIGVbZiArIDY4ID4+IDJdID0gaSA+Pj4gMCA+IGRbZiArIC02NCA+PiAyXSA/IGkgOiAwLCBmID0gZiArIDE0OCB8IDAsIGkgPSAodCB8IDApID09IChhIHwgMCksIHQgPSB0ICsgMSB8IDAsICFpOyApCiAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICgoYSB8IDApID09IC0xKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICBmb3IgKGYgPSBpICsgNDI0IHwgMCwgdSA9IGVbaSArIDQgPj4gMl0sIGcgPSBlW2kgKyA4ID4+IDJdLCBpID0gMDsgZVtmICsgOTIgPj4gMl0gPSBPLCBlW2YgKyA3NiA+PiAyXSA9IDAsIGVbZiArIDgwID4+IDJdID0gMCwgZVtmICsgODggPj4gMl0gPSB0LCBlW2YgKyA4NCA+PiAyXSA9IGcsIGVbZiArIDY4ID4+IDJdID0gMCwgZVtmICsgNzIgPj4gMl0gPSAwLCBlW2YgKyAxMjAgPj4gMl0gPSB3LCBlW2YgKyAxMTYgPj4gMl0gPSBzLCBlW2YgKyAxMTIgPj4gMl0gPSBILCBlW2YgKyAxMDggPj4gMl0gPSBFLCBlW2YgKyAxMDQgPj4gMl0gPSBKLCBlW2YgKyAxMDAgPj4gMl0gPSBELCBlW2YgKyA5NiA+PiAyXSA9IEMsIGVbZiArIDM2ID4+IDJdID0gdSwgZiA9IGYgKyAxNDggfCAwLCBsID0gKGkgfCAwKSAhPSAoYSB8IDApLCBpID0gaSArIDEgfCAwLCAhIWw7ICkKICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCB0ID0gMDsgZiA9IG9yKHYsIGksIFApLCBlW0EgKyA0MCA+PiAyXSA9IGYgKyBlW0EgKyA0MCA+PiAyXSwgdCA9IGYgKyB0IHwgMCwgaSA9IGkgKyAxIHwgMCwgaSA+Pj4gMCA8PSBkW3IgKyA0MjAgPj4gMl07ICkKICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgIGlmIChlW3IgKyA1NTkyID4+IDJdID0gdCwgciA9IHIgKyA1NjQ0IHwgMCwgaSA9IFAgKyAxIHwgMCwgKHEgfCAwKSA9PSAoaSB8IDApKQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIG5yKEEsIGksIHIsIGYpIHsKICAgICAgICAgICAgICB2YXIgayA9IDAsIHQgPSAwLCBuID0gMCwgbCA9IDAsIGEgPSAwLCB1ID0gMCwgbyA9IDAsIGcgPSAwLCBoID0gMCwgcyA9IDAsIHcgPSAwLCBCID0gMCwgYyA9IDAsIHYgPSAwLCBDID0gMCwgbSA9IDA7CiAgICAgICAgICAgICAgdyA9IFoociwgNSksIHUgPSAociA8PCAyKSArIGkgfCAwLCBrID0gZVtBID4+IDJdLCB0ID0gZVtBICsgMTIgPj4gMl0gPDwgNSwgbCA9IGsgKyB0IHwgMCwgZyA9IGsgLSB0IHwgMCwgayA9IGVbQSArIDE2ID4+IDJdLCBvID0gZVtBICsgMjggPj4gMl0sIGEgPSBlW0EgKyAyMCA+PiAyXSwgYyA9IGVbQSArIDggPj4gMl07CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICBpZiAoaSAmIDE1IHwgZiA+Pj4gMCA8IDggfCBsICYgMTUpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoayA+Pj4gMCA+PSBhID4+PiAwKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICByOgogICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChmIC0gMSB8IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gayArIDEgfCAwLCBhIC0gayAmIDEgJiYgKG4gPSBsICsgKGsgPDwgNikgfCAwLCBrID0gKGsgPDwgMikgKyBpIHwgMCwgR1tuID4+IDJdID0gR1trID4+IDJdLCBHW24gKyA0ID4+IDJdID0gR1trICsgKHIgPDwgMikgPj4gMl0sIGsgPSB0KSwgKHQgfCAwKSA9PSAoYSB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgdCA9IGwgKyAoayA8PCA2KSB8IDAsIG4gPSAoayA8PCAyKSArIGkgfCAwLCBHW3QgPj4gMl0gPSBHW24gPj4gMl0sIHYgPSB0LCB0ID0gciA8PCAyLCBHW3YgKyA0ID4+IDJdID0gR1t0ICsgbiA+PiAyXSwgbiA9IGsgKyAxIHwgMCwgdSA9IGwgKyAobiA8PCA2KSB8IDAsIG4gPSAobiA8PCAyKSArIGkgfCAwLCBHW3UgPj4gMl0gPSBHW24gPj4gMl0sIEdbdSArIDQgPj4gMl0gPSBHW3QgKyBuID4+IDJdLCBrID0gayArIDIgfCAwLCAoYSB8IDApICE9IChrIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICh0ID0gaywgdSA9IGEgLSBrICYgMywgdSkKICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBHW2wgKyAodCA8PCA2KSA+PiAyXSA9IEdbKHQgPDwgMikgKyBpID4+IDJdLCB0ID0gdCArIDEgfCAwLCBuID0gbiArIDEgfCAwLCAodSB8IDApICE9IChuIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgIGlmIChrIC0gYSA+Pj4gMCA+IDQyOTQ5NjcyOTIpCiAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgIGZvciAoOyBHW2wgKyAodCA8PCA2KSA+PiAyXSA9IEdbKHQgPDwgMikgKyBpID4+IDJdLCBrID0gdCArIDEgfCAwLCBHW2wgKyAoayA8PCA2KSA+PiAyXSA9IEdbKGsgPDwgMikgKyBpID4+IDJdLCBrID0gdCArIDIgfCAwLCBHW2wgKyAoayA8PCA2KSA+PiAyXSA9IEdbKGsgPDwgMikgKyBpID4+IDJdLCBrID0gdCArIDMgfCAwLCBHW2wgKyAoayA8PCA2KSA+PiAyXSA9IEdbKGsgPDwgMikgKyBpID4+IDJdLCB0ID0gdCArIDQgfCAwLCAoYSB8IDApICE9ICh0IHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChrID4+PiAwID49IGEgPj4+IDApCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgZm9yIChzID0gciA8PCA0LCBoID0gWihyLCAxMiksIEMgPSByIDw8IDM7IHQgPSBsICsgKGsgPDwgNikgfCAwLCBuID0gKGsgPDwgMikgKyBpIHwgMCwgR1t0ID4+IDJdID0gR1tuID4+IDJdLCBCID0gciA8PCAyLCBHW3QgKyA0ID4+IDJdID0gR1tCICsgbiA+PiAyXSwgR1t0ICsgOCA+PiAyXSA9IEdbbiArIEMgPj4gMl0sIEdbdCArIDEyID4+IDJdID0gR1tuICsgaCA+PiAyXSwgR1t0ICsgMTYgPj4gMl0gPSBHW24gKyBzID4+IDJdLCBuID0gayArIHcgPDwgMiwgR1t0ICsgMjAgPj4gMl0gPSBHW24gKyBpID4+IDJdLCBuID0gbiArIHUgfCAwLCBHW3QgKyAyNCA+PiAyXSA9IEdbbiA+PiAyXSwgR1t0ICsgMjggPj4gMl0gPSBHW24gKyBCID4+IDJdLCBrID0gayArIDEgfCAwLCAoYSB8IDApICE9IChrIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmb3IgKHMgPSByIDw8IDQsIGggPSBaKHIsIDEyKSwgQyA9IHIgPDwgMywgQiA9IChmIHwgMCkgPT0gNSwgdiA9IChmIHwgMCkgPT0gNzsgOyApIHsKICAgICAgICAgICAgICAgICAgdCA9IGwgKyAoayA8PCA2KSB8IDAsIG4gPSAoayA8PCAyKSArIGkgfCAwLCBHW3QgPj4gMl0gPSBHW24gPj4gMl0sIG0gPSByIDw8IDIsIEdbdCArIDQgPj4gMl0gPSBHW24gKyBtID4+IDJdLCBHW3QgKyA4ID4+IDJdID0gR1tuICsgQyA+PiAyXTsKICAgICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICAgIGlmICgoZiB8IDApID09IDMgfHwgKEdbdCArIDEyID4+IDJdID0gR1tuICsgaCA+PiAyXSwgKGYgfCAwKSA9PSA0KSB8fCAoR1t0ICsgMTYgPj4gMl0gPSBHW24gKyBzID4+IDJdLCBCKSB8fCAobiA9IGsgKyB3IDw8IDIsIEdbdCArIDIwID4+IDJdID0gR1tuICsgaSA+PiAyXSwgKGYgfCAwKSA9PSA2KSB8fCAobiA9IG4gKyB1IHwgMCwgR1t0ICsgMjQgPj4gMl0gPSBHW24gPj4gMl0sIHYpKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICBHW3QgKyAyOCA+PiAyXSA9IEdbbiArIG0gPj4gMl07CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKGsgPSBrICsgMSB8IDAsIChhIHwgMCkgPT0gKGsgfCAwKSkKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgbCA9IGcgKyAzMiB8IDAsIGkgPSAoYyA8PCAyKSArIGkgfCAwLCBhID0gaSArIChyIDw8IDIpIHwgMCwgayA9IGVbQSArIDI0ID4+IDJdOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGlmIChpICYgMTUgfCBmID4+PiAwIDwgOCB8IGwgJiAxNSkgewogICAgICAgICAgICAgICAgICBpZiAoayA+Pj4gMCA+PSBvID4+PiAwKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIGk6CiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChmIC0gMSB8IDApIHsKICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEEgPSBrICsgMSB8IDAsIG8gLSBrICYgMSAmJiAoZiA9IGwgKyAoayA8PCA2KSB8IDAsIGsgPSBpICsgKGsgPDwgMikgfCAwLCBHW2YgPj4gMl0gPSBHW2sgPj4gMl0sIEdbZiArIDQgPj4gMl0gPSBHW2sgKyAociA8PCAyKSA+PiAyXSwgayA9IEEpLCAoQSB8IDApID09IChvIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IEEgPSBsICsgKGsgPDwgNikgfCAwLCBmID0gaSArIChrIDw8IDIpIHwgMCwgR1tBID4+IDJdID0gR1tmID4+IDJdLCB0ID0gQSwgQSA9IHIgPDwgMiwgR1t0ICsgNCA+PiAyXSA9IEdbQSArIGYgPj4gMl0sIGYgPSBrICsgMSB8IDAsIHQgPSBsICsgKGYgPDwgNikgfCAwLCBmID0gaSArIChmIDw8IDIpIHwgMCwgR1t0ID4+IDJdID0gR1tmID4+IDJdLCBHW3QgKyA0ID4+IDJdID0gR1tBICsgZiA+PiAyXSwgayA9IGsgKyAyIHwgMCwgKG8gfCAwKSAhPSAoayB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IGssIEEgPSBvIC0gayAmIDMsIEEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChuID0gMDsgR1tsICsgKHQgPDwgNikgPj4gMl0gPSBHW2kgKyAodCA8PCAyKSA+PiAyXSwgdCA9IHQgKyAxIHwgMCwgbiA9IG4gKyAxIHwgMCwgKEEgfCAwKSAhPSAobiB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrIC0gbyA+Pj4gMCA+IDQyOTQ5NjcyOTIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IEdbbCArICh0IDw8IDYpID4+IDJdID0gR1tpICsgKHQgPDwgMikgPj4gMl0sIEEgPSB0ICsgMSB8IDAsIEdbbCArIChBIDw8IDYpID4+IDJdID0gR1tpICsgKEEgPDwgMikgPj4gMl0sIEEgPSB0ICsgMiB8IDAsIEdbbCArIChBIDw8IDYpID4+IDJdID0gR1tpICsgKEEgPDwgMikgPj4gMl0sIEEgPSB0ICsgMyB8IDAsIEdbbCArIChBIDw8IDYpID4+IDJdID0gR1tpICsgKEEgPDwgMikgPj4gMl0sIHQgPSB0ICsgNCB8IDAsIChvIHwgMCkgIT0gKHQgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBmb3IgKG4gPSByIDw8IDQsIHUgPSBaKHIsIDEyKSwgZyA9IHIgPDwgMywgYyA9IChmIHwgMCkgPT0gNSwgcyA9IChmIHwgMCkgPT0gNzsgOyApIHsKICAgICAgICAgICAgICAgICAgICBBID0gbCArIChrIDw8IDYpIHwgMCwgdCA9IGkgKyAoayA8PCAyKSB8IDAsIEdbQSA+PiAyXSA9IEdbdCA+PiAyXSwgaCA9IHIgPDwgMiwgR1tBICsgNCA+PiAyXSA9IEdbaCArIHQgPj4gMl0sIEdbQSArIDggPj4gMl0gPSBHW3QgKyBnID4+IDJdOwogICAgICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgICAgIGlmICgoZiB8IDApID09IDMgfHwgKEdbQSArIDEyID4+IDJdID0gR1t0ICsgdSA+PiAyXSwgKGYgfCAwKSA9PSA0KSB8fCAoR1tBICsgMTYgPj4gMl0gPSBHW3QgKyBuID4+IDJdLCBjKSB8fCAodCA9IGsgKyB3IDw8IDIsIEdbQSArIDIwID4+IDJdID0gR1t0ICsgaSA+PiAyXSwgKGYgfCAwKSA9PSA2KSB8fCAodCA9IHQgKyBhIHwgMCwgR1tBICsgMjQgPj4gMl0gPSBHW3QgPj4gMl0sIHMpKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgR1tBICsgMjggPj4gMl0gPSBHW3QgKyBoID4+IDJdOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoayA9IGsgKyAxIHwgMCwgKG8gfCAwKSA9PSAoayB8IDApKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChrID4+PiAwID49IG8gPj4+IDApCiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICBmb3IgKHQgPSByIDw8IDQsIG4gPSBaKHIsIDEyKSwgdSA9IHIgPDwgMzsgQSA9IGwgKyAoayA8PCA2KSB8IDAsIGYgPSBpICsgKGsgPDwgMikgfCAwLCBHW0EgPj4gMl0gPSBHW2YgPj4gMl0sIGcgPSByIDw8IDIsIEdbQSArIDQgPj4gMl0gPSBHW2cgKyBmID4+IDJdLCBHW0EgKyA4ID4+IDJdID0gR1tmICsgdSA+PiAyXSwgR1tBICsgMTIgPj4gMl0gPSBHW2YgKyBuID4+IDJdLCBHW0EgKyAxNiA+PiAyXSA9IEdbZiArIHQgPj4gMl0sIGYgPSBrICsgdyA8PCAyLCBHW0EgKyAyMCA+PiAyXSA9IEdbZiArIGkgPj4gMl0sIGYgPSBmICsgYSB8IDAsIEdbQSArIDI0ID4+IDJdID0gR1tmID4+IDJdLCBHW0EgKyAyOCA+PiAyXSA9IEdbZiArIGcgPj4gMl0sIGsgPSBrICsgMSB8IDAsIChvIHwgMCkgIT0gKGsgfCAwKTsgKQogICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIGVrKEEsIGksIHIsIGYpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIGkgPSBpIHwgMCwgciA9IHIgfCAwLCBmID0gZiB8IDA7CiAgICAgICAgICAgICAgdmFyIGsgPSAwLCB0ID0gMCwgbiA9IDAsIGwgPSAwLCBhID0gMCwgdSA9IDAsIG8gPSAwLCBnID0gMCwgaCA9IDAsIHMgPSAwLCB3ID0gMCwgQiA9IDAsIGMgPSAwLCB2ID0gMCwgQyA9IDA7CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFyIHwgKCFBIHwgIWkpKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICBpZiAoZVtyICsgMTYgPj4gMl0gLSAxNjM4NSA+Pj4gMCA8PSA0Mjk0OTUwOTExKQogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFEoZiwgMSwgODA4NywgMCksIDA7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFJNChlW0EgPj4gMl0sIGksIHIsIGYpKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICBpZiAoZVtBICsgNjQgPj4gMl0gPSAxLCBlW0EgKyA1NiA+PiAyXSA9IDE3ODU3Mzc3NjAsIGVbQSArIDYwID4+IDJdID0gMCwgayA9IFUyKDQpLCBlW0EgKyA2OCA+PiAyXSA9IGssICFrIHx8IChlW2sgPj4gMl0gPSAxNzg1NzM3NzYwLCBrID0gZVtyICsgMTYgPj4gMl0sIGVbQSArIDIwID4+IDJdID0gaywgZyA9IFUyKFooaywgMTIpKSwgZVtBICsgNzIgPj4gMl0gPSBnLCAhZykpCiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgIGVbQSArIDE2ID4+IDJdID0gZVtyICsgMTIgPj4gMl0gLSBlW3IgKyA0ID4+IDJdLCBlW0EgKyAxMiA+PiAyXSA9IGVbciArIDggPj4gMl0gLSBlW3IgPj4gMl0sIGwgPSBlW3IgKyAyNCA+PiAyXSwgbiA9IGVbbCArIDI0ID4+IDJdLCBlW0EgKyAyNCA+PiAyXSA9IChuICsgKGVbbCArIDMyID4+IDJdIDw8IDcpIHwgMCkgLSAxOwogICAgICAgICAgICAgICAgICAgIGs6IHsKICAgICAgICAgICAgICAgICAgICAgIGY6IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHUgPSBlW3IgKyAxNiA+PiAyXSwgdSA+Pj4gMCA+PSAyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB1IC0gMSB8IDAsIGEgPSB0ICYgMywgayA9IDEsIHUgLSAyID4+PiAwID49IDMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGggPSB0ICYgLTQ7IHQgPSBsICsgWihrLCA1MikgfCAwLCAobiB8IDApICE9IGVbdCArIDI0ID4+IDJdICYmIChlW0EgKyAyNCA+PiAyXSA9IDI1NSksIChuIHwgMCkgIT0gZVt0ICsgNzYgPj4gMl0gJiYgKGVbQSArIDI0ID4+IDJdID0gMjU1KSwgKG4gfCAwKSAhPSBlW3QgKyAxMjggPj4gMl0gJiYgKGVbQSArIDI0ID4+IDJdID0gMjU1KSwgKG4gfCAwKSAhPSBlW3QgKyAxODAgPj4gMl0gJiYgKGVbQSArIDI0ID4+IDJdID0gMjU1KSwgayA9IGsgKyA0IHwgMCwgbyA9IG8gKyA0IHwgMCwgKGggfCAwKSAhPSAobyB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodCA9IDA7IChuIHwgMCkgIT0gZVsobCArIFooaywgNTIpIHwgMCkgKyAyNCA+PiAyXSAmJiAoZVtBICsgMjQgPj4gMl0gPSAyNTUpLCBrID0gayArIDEgfCAwLCB0ID0gdCArIDEgfCAwLCAoYSB8IDApICE9ICh0IHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgIGVbQSArIDM2ID4+IDJdID0gMCwgZVtBICsgMjggPj4gMl0gPSA3LCBlW0EgKyAzMiA+PiAyXSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtBICsgMzYgPj4gMl0gPSAwLCBlW0EgKyAyOCA+PiAyXSA9IDcsIGVbQSArIDMyID4+IDJdID0gMCwgdSkKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICBuID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlmIChuID0gMCwgayA9IDAsICh1IHwgMCkgIT0gMSkKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChvID0gdSAmIC0yLCBhID0gMDsgdCA9IGwgKyBaKGssIDUyKSB8IDAsIGVbKGcgKyBaKGssIDEyKSB8IDApICsgOCA+PiAyXSA9IChlW3QgKyAyNCA+PiAyXSArIChlW3QgKyAzMiA+PiAyXSA8PCA3KSB8IDApIC0gMSwgaCA9IGsgfCAxLCB0ID0gbCArIFooaCwgNTIpIHwgMCwgZVsoZyArIFooaCwgMTIpIHwgMCkgKyA4ID4+IDJdID0gKGVbdCArIDI0ID4+IDJdICsgKGVbdCArIDMyID4+IDJdIDw8IDcpIHwgMCkgLSAxLCBrID0gayArIDIgfCAwLCBhID0gYSArIDIgfCAwLCAobyB8IDApICE9IChhIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoISh1ICYgMSkpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICBzID0gZyArIFooaywgMTIpIHwgMCwgayA9IGwgKyBaKGssIDUyKSB8IDAsIGVbcyArIDggPj4gMl0gPSAoZVtrICsgMjQgPj4gMl0gKyAoZVtrICsgMzIgPj4gMl0gPDwgNykgfCAwKSAtIDE7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGs6IHsKICAgICAgICAgICAgICAgICAgICAgIGY6IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbciArIDMyID4+IDJdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZVtBICsgNDAgPj4gMl0gPSAyLCBrID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW0EgKyA0MCA+PiAyXSA9IDEsIGsgPSBlW3IgKyAyMCA+PiAyXSwgayAtIDEgPj4+IDAgPiAyKQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBrICsgMTUgfCAwOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgZVtBICsgNDggPj4gMl0gPSBrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBrOiB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAobikKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgIGlmIChuID0gMCwgdCA9IDAsIGEgPSAwLCBrID0gMCwgdSAtIDEgPj4+IDAgPj0gMykKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2ID0gdSAmIC00LCBvID0gMDsgcyA9IGsgfCAxLCBnID0gRzJbKGwgKyBaKHMsIDUyKSB8IDApICsgNDggPj4gMV0sIHcgPSBrIHwgMiwgaCA9IEcyWyhsICsgWih3LCA1MikgfCAwKSArIDQ4ID4+IDFdLCBCID0gayB8IDMsIGMgPSBHMlsobCArIFooQiwgNTIpIHwgMCkgKyA0OCA+PiAxXSwgQyA9IHMsIHMgPSBHMlsobCArIFooaywgNTIpIHwgMCkgKyA0OCA+PiAxXSwgdCA9IGMgPyBCIDogaCA/IHcgOiBnID8gQyA6IHMgPyBrIDogdCwgYSA9ICgoKCgocyB8IDApICE9IDApICsgYSB8IDApICsgKChnIHwgMCkgIT0gMCkgfCAwKSArICgoaCB8IDApICE9IDApIHwgMCkgKyAoKGMgfCAwKSAhPSAwKSB8IDAsIGsgPSBrICsgNCB8IDAsIG8gPSBvICsgNCB8IDAsICh2IHwgMCkgIT0gKG8gfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgIGlmIChvID0gdSAmIDMsIG8pCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBnID0gRzJbKGwgKyBaKGssIDUyKSB8IDApICsgNDggPj4gMV0sIHQgPSBnID8gayA6IHQsIGsgPSBrICsgMSB8IDAsIGEgPSAoKGcgfCAwKSAhPSAwKSArIGEgfCAwLCBuID0gbiArIDEgfCAwLCAobyB8IDApICE9IChuIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICBrID0gMjIzNjM7CiAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIEE6CiAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChhIHwgMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrID0gZVtBICsgNDggPj4gMl0gLSAxNiB8IDAsIGsgPj4+IDAgPiAyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgayA9IDIyMjA2OwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPSBlWyhrIDw8IDIpICsgMzE3NzYgPj4gMl0sIHUgPj4+IDAgPD0gbiA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSAyMDgwODsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID4+PiAwIDwgbiA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSAyMjI4MDsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrID0gVTIoOCksIGVbQSArIDExNiA+PiAyXSA9IGssICFrIHx8IChsID0gVTIoWihlW3IgKyAxNiA+PiAyXSwgNikpLCBrID0gZVtBICsgMTE2ID4+IDJdLCBlW2sgPj4gMl0gPSBsLCAhbCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHUgPSBlW3IgKyAxNiA+PiAyXSwgdTJbayArIDQgPj4gMV0gPSB1LCBrID0gMCwgbiAtIDEgPj4+IDAgPj0gMykKICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGcgPSBuICYgLTQsIG8gPSAwOyBmID0gbCArIFooaywgNikgfCAwLCB0ID0gayB8IDEsIHUyW2YgKyA0ID4+IDFdID0gdCwgdTJbZiArIDIgPj4gMV0gPSAwLCB1MltmID4+IDFdID0gaywgZiA9IGwgKyBaKHQsIDYpIHwgMCwgYSA9IGsgfCAyLCB1MltmICsgNCA+PiAxXSA9IGEsIHUyW2YgKyAyID4+IDFdID0gMCwgdTJbZiA+PiAxXSA9IHQsIGYgPSBsICsgWihhLCA2KSB8IDAsIHQgPSBrIHwgMywgdTJbZiArIDQgPj4gMV0gPSB0LCB1MltmICsgMiA+PiAxXSA9IDAsIHUyW2YgPj4gMV0gPSBhLCBmID0gbCArIFoodCwgNikgfCAwLCBrID0gayArIDQgfCAwLCB1MltmICsgNCA+PiAxXSA9IGssIHUyW2YgKyAyID4+IDFdID0gMCwgdTJbZiA+PiAxXSA9IHQsIG8gPSBvICsgNCB8IDAsIChnIHwgMCkgIT0gKG8gfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKG8gPSBuICYgMywgdCA9IDA7IGEgPSBsICsgWihrLCA2KSB8IDAsIGYgPSBrICsgMSB8IDAsIHUyW2EgKyA0ID4+IDFdID0gZiwgdTJbYSArIDIgPj4gMV0gPSAwLCB1MlthID4+IDFdID0gaywgayA9IGYsIHQgPSB0ICsgMSB8IDAsIChvIHwgMCkgIT0gKHQgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPj4+IDAgPj0gdSA+Pj4gMCB8fCAoZiA9IG4gKyAxIHwgMCwgayA9IGVbciArIDI0ID4+IDJdLCB1IC0gbiAmIDEgJiYgKHIgPSBHMlsoayArIFoobiwgNTIpIHwgMCkgKyA0OCA+PiAxXSwgdCA9IGwgKyBaKG4sIDYpIHwgMCwgdTJbdCA+PiAxXSA9IG4sIHUyW3QgKyA0ID4+IDFdID0gciA/IDAgOiAtMSwgdTJbdCArIDIgPj4gMV0gPSByID8gMSA6IC0xLCBuID0gZiksIChmIHwgMCkgPT0gKHUgfCAwKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IHQgPSBrICsgWihuLCA1MikgfCAwLCBmID0gRzJbdCArIDQ4ID4+IDFdLCByID0gbCArIFoobiwgNikgfCAwLCB1MltyID4+IDFdID0gbiwgdTJbciArIDQgPj4gMV0gPSBmID8gMCA6IC0xLCB1MltyICsgMiA+PiAxXSA9IGYgPyAxIDogLTEsIGYgPSBHMlt0ICsgMTAwID4+IDFdLCB1MltyICsgNiA+PiAxXSA9IG4gKyAxLCB1MltyICsgMTAgPj4gMV0gPSBmID8gMCA6IC0xLCB1MltyICsgOCA+PiAxXSA9IGYgPyAxIDogLTEsIG4gPSBuICsgMiB8IDAsICh1IHwgMCkgIT0gKG4gfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIFEoZiwgMiwgaywgMCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVbQSArIDQ0ID4+IDJdID0gMCwgZVtBICsgNTIgPj4gMl0gPSAwLCBlW0EgKyA5NiA+PiAyXSA9IGVbaSArIDE4NjkyID4+IDJdLCBrID0gMTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICByZXR1cm4gayB8IDA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gUShmLCAxLCA4MjAwLCAwKSwgMDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIFEoZiwgMSwgODE1NiwgMCksIDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gcDQoQSwgaSwgcikgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDA7CiAgICAgICAgICAgICAgdmFyIGYgPSAwLCBrID0gMCwgdCA9IDAsIG4gPSAwLCBsID0gMCwgYSA9IDAsIHUgPSAwLCBvID0gMCwgZyA9IDAsIGggPSAwLCBzID0gMDsKICAgICAgICAgICAgICBrID0gWCAtIDE3NiB8IDAsIFggPSBrOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGlmIChpICYgMzg0KSB7CiAgICAgICAgICAgICAgICAgIF8wKDk2NTcsIDExLCAxLCByKTsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgaWYgKCEoaSAmIDEpIHx8IChuID0gZVtBICsgNzIgPj4gMl0sICFuKSkKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICBpZiAoZiA9IFggLSA4MCB8IDAsIFggPSBmLCBfMCgzNjA2LCAxMywgMSwgciksIEZbZiArIDc5IHwgMF0gPSAwLCBGW2YgKyA3OCB8IDBdID0gOSwgdCA9IGVbbiArIDQgPj4gMl0sIGVbZiArIDY4ID4+IDJdID0gZVtuID4+IDJdLCBlW2YgKyA3MiA+PiAyXSA9IHQsIGEgPSBmICsgNzggfCAwLCBlW2YgKyA2NCA+PiAyXSA9IGEsIEkwKHIsIDE3MTc1LCBmIC0gLTY0IHwgMCksIHQgPSBlW24gKyAxMiA+PiAyXSwgZVtmICsgNTIgPj4gMl0gPSBlW24gKyA4ID4+IDJdLCBlW2YgKyA1NiA+PiAyXSA9IHQsIGVbZiArIDQ4ID4+IDJdID0gYSwgSTAociwgMTcxNDAsIGYgKyA0OCB8IDApLCBlW2YgKyAzNiA+PiAyXSA9IGVbbiArIDE2ID4+IDJdLCBlW2YgKyAzMiA+PiAyXSA9IGEsIEkwKHIsIDE2ODk4LCBmICsgMzIgfCAwKSwgISghZVtuICsgMjQgPj4gMl0gfCAhZVtuICsgMTYgPj4gMl0pKQogICAgICAgICAgICAgICAgICAgIGZvciAoOyBnID0gZiArIDc4IHwgMCwgZVtmICsgMTYgPj4gMl0gPSBnLCBlW2YgKyAyMCA+PiAyXSA9IGwsIEkwKHIsIDM2MzgsIGYgKyAxNiB8IDApLCBhID0gZVtuICsgMjQgPj4gMl0sIHQgPSBYIC0gNDggfCAwLCBYID0gdCwgRlt0ICsgNDYgfCAwXSA9IDksIEZbdCArIDQ3IHwgMF0gPSAwLCBGW3QgKyA0NSB8IDBdID0gOSwgdSA9IFoobCwgNTIpICsgYSB8IDAsIGEgPSBlW3UgKyA0ID4+IDJdLCBlW3QgKyAzNiA+PiAyXSA9IGVbdSA+PiAyXSwgZVt0ICsgNDAgPj4gMl0gPSBhLCBhID0gdCArIDQ1IHwgMCwgZVt0ICsgMzIgPj4gMl0gPSBhLCBJMChyLCAxNjgzMCwgdCArIDMyIHwgMCksIGVbdCArIDIwID4+IDJdID0gZVt1ICsgMjQgPj4gMl0sIGVbdCArIDE2ID4+IDJdID0gYSwgSTAociwgMTcwOTIsIHQgKyAxNiB8IDApLCBlW3QgKyA0ID4+IDJdID0gZVt1ICsgMzIgPj4gMl0sIGVbdCA+PiAyXSA9IGEsIEkwKHIsIDE3MDY1LCB0KSwgWCA9IHQgKyA0OCB8IDAsIGVbZiA+PiAyXSA9IGcsIEkwKHIsIDM1MTYsIGYpLCBsID0gbCArIDEgfCAwLCBsID4+PiAwIDwgZFtuICsgMTYgPj4gMl07ICkKICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgXzAoMzUyNCwgMiwgMSwgciksIFggPSBmICsgODAgfCAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIShpICYgMikgfCAhZVtBICsgNzIgPj4gMl0gfHwgKF8wKDM3NDUsIDM2LCAxLCByKSwgbiA9IGVbQSArIDg4ID4+IDJdLCBlW2sgKyAxNjAgPj4gMl0gPSBlW0EgKyA4NCA+PiAyXSwgZVtrICsgMTY0ID4+IDJdID0gbiwgSTAociwgMTcxNTcsIGsgKyAxNjAgfCAwKSwgbiA9IGVbQSArIDk2ID4+IDJdLCBlW2sgKyAxNDQgPj4gMl0gPSBlW0EgKyA5MiA+PiAyXSwgZVtrICsgMTQ4ID4+IDJdID0gbiwgSTAociwgMTY4MTIsIGsgKyAxNDQgfCAwKSwgbiA9IGVbQSArIDEwOCA+PiAyXSwgZVtrICsgMTI4ID4+IDJdID0gZVtBICsgMTA0ID4+IDJdLCBlW2sgKyAxMzIgPj4gMl0gPSBuLCBJMChyLCAxNzA0OSwgayArIDEyOCB8IDApLCBxNChlW0EgKyAxMiA+PiAyXSwgZVtlW0EgKyA3MiA+PiAyXSArIDE2ID4+IDJdLCByKSwgXzAoMzUyNCwgMiwgMSwgcikpOwogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICBpZiAoIShpICYgOCkgfCAhZVtBICsgNzIgPj4gMl0gfHwgKG4gPSBaKGVbQSArIDEwNCA+PiAyXSwgZVtBICsgMTA4ID4+IDJdKSwgIW4pKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIGZvciAoZiA9IGVbQSArIDE1NiA+PiAyXTsgcTQoZiwgZVtlW0EgKyA3MiA+PiAyXSArIDE2ID4+IDJdLCByKSwgZiA9IGYgKyA1NjQ0IHwgMCwgbyA9IG8gKyAxIHwgMCwgKG4gfCAwKSAhPSAobyB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCEoaSAmIDE2KSkKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIGlmIChsID0gZVtBICsgMjAwID4+IDJdLCBfMCgzNzA3LCAzNywgMSwgciksIG4gPSBlW2wgPj4gMl0sIGkgPSBlW2wgKyA0ID4+IDJdLCBBID0gZVtsICsgMTIgPj4gMl0sIGVbayArIDEyMCA+PiAyXSA9IGVbbCArIDggPj4gMl0sIGVbayArIDEyNCA+PiAyXSA9IEEsIGVbayArIDExMiA+PiAyXSA9IG4sIGVbayArIDExNiA+PiAyXSA9IGksIEkwKHIsIDkyNDYsIGsgKyAxMTIgfCAwKSwgXzAoMzY4OSwgMTcsIDEsIHIpLCAhKCFlW2wgKyAyOCA+PiAyXSB8ICFlW2wgKyAyNCA+PiAyXSkpCiAgICAgICAgICAgICAgICAgIGZvciAoZiA9IDA7IEEgPSBlW2wgKyAyOCA+PiAyXSArIFooZiwgMjQpIHwgMCwgdCA9IEcyW0EgPj4gMV0sIG4gPSBlW0EgKyA4ID4+IDJdLCBpID0gZVtBICsgMTIgPj4gMl0sIGVbayArIDk2ID4+IDJdID0gZVtBICsgMTYgPj4gMl0sIGVbayArIDg4ID4+IDJdID0gbiwgZVtrICsgOTIgPj4gMl0gPSBpLCBlW2sgKyA4MCA+PiAyXSA9IHQsIEkwKHIsIDE3MDE4LCBrICsgODAgfCAwKSwgZiA9IGYgKyAxIHwgMCwgZiA+Pj4gMCA8IGRbbCArIDI0ID4+IDJdOyApCiAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgXzAoMzUyMiwgNCwgMSwgciksIHQgPSBlW2wgKyA0MCA+PiAyXTsKICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgaWYgKCF0IHx8IChuID0gZVtsICsgMzYgPj4gMl0sICFuKSkKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICBpZiAoQSA9IDAsIGYgPSAwLCBuID4+PiAwID49IDQpCiAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gbiAmIC00OyBBID0gZVsodCArIFooZiB8IDMsIDQwKSB8IDApICsgNCA+PiAyXSArIChlWyh0ICsgWihmIHwgMiwgNDApIHwgMCkgKyA0ID4+IDJdICsgKGVbKHQgKyBaKGYgfCAxLCA0MCkgfCAwKSArIDQgPj4gMl0gKyAoZVsodCArIFooZiwgNDApIHwgMCkgKyA0ID4+IDJdICsgQSB8IDApIHwgMCkgfCAwKSB8IDAsIGYgPSBmICsgNCB8IDAsIGggPSBoICsgNCB8IDAsIChpIHwgMCkgIT0gKGggfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICBpZiAoaSA9IG4gJiAzLCBpKQogICAgICAgICAgICAgICAgICAgIGZvciAoOyBBID0gZVsodCArIFooZiwgNDApIHwgMCkgKyA0ID4+IDJdICsgQSB8IDAsIGYgPSBmICsgMSB8IDAsIHMgPSBzICsgMSB8IDAsIChpIHwgMCkgIT0gKHMgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICBpZiAoIUEpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgaWYgKF8wKDM2NzIsIDE2LCAxLCByKSwgZVtsICsgMzYgPj4gMl0pCiAgICAgICAgICAgICAgICAgICAgZm9yIChvID0gZVtsICsgNDAgPj4gMl0sIGEgPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgdSA9IFooYSwgNDApLCBoID0gZVsodSArIG8gfCAwKSArIDQgPj4gMl0sIGVbayArIDY4ID4+IDJdID0gaCwgZVtrICsgNjQgPj4gMl0gPSBhLCBJMChyLCAxNzEwNCwgayAtIC02NCB8IDApLCBvID0gZVtsICsgNDAgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaCB8fCAoZiA9IDAsICFlWyh1ICsgbyB8IDApICsgMTYgPj4gMl0pKQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBnID0gZVsodSArIGVbbCArIDQwID4+IDJdIHwgMCkgKyAxNiA+PiAyXSArIFooZiwgMjQpIHwgMCwgcyA9IGVbZyA+PiAyXSwgdCA9IGVbZyArIDQgPj4gMl0sIG4gPSBlW2cgKyA4ID4+IDJdLCBpID0gZVtnICsgMTIgPj4gMl0sIEEgPSBlW2cgKyAyMCA+PiAyXSwgZVtrICsgNTYgPj4gMl0gPSBlW2cgKyAxNiA+PiAyXSwgZVtrICsgNjAgPj4gMl0gPSBBLCBlW2sgKyA0OCA+PiAyXSA9IG4sIGVbayArIDUyID4+IDJdID0gaSwgZVtrICsgNDAgPj4gMl0gPSBzLCBlW2sgKyA0NCA+PiAyXSA9IHQsIGVbayArIDMyID4+IDJdID0gZiwgSTAociwgMjE1NzEsIGsgKyAzMiB8IDApLCBmID0gZiArIDEgfCAwLCAoaCB8IDApICE9IChmIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgIG8gPSBlW2wgKyA0MCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIEEgPSB1ICsgbyB8IDA7CiAgICAgICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZVtBICsgMjQgPj4gMl0gfHwgKGYgPSAwLCAhZVtBICsgMjAgPj4gMl0pKQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBBID0gZVsodSArIG8gfCAwKSArIDI0ID4+IDJdICsgWihmLCAyNCkgfCAwLCB0ID0gRzJbQSA+PiAxXSwgbiA9IGVbQSArIDggPj4gMl0sIGkgPSBlW0EgKyAxMiA+PiAyXSwgZVtrICsgMTYgPj4gMl0gPSBlW0EgKyAxNiA+PiAyXSwgZVtrICsgOCA+PiAyXSA9IG4sIGVbayArIDEyID4+IDJdID0gaSwgZVtrID4+IDJdID0gdCwgSTAociwgMTcwMTgsIGspLCBmID0gZiArIDEgfCAwLCBvID0gZVtsICsgNDAgPj4gMl0sIGYgPj4+IDAgPCBkWyh1ICsgbyB8IDApICsgMjAgPj4gMl07ICkKICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA9IGEgKyAxIHwgMCwgIShhID4+PiAwIDwgZFtsICsgMzYgPj4gMl0pKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIF8wKDM1MjIsIDQsIDEsIHIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgXzAoMzUyNCwgMiwgMSwgcik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIFggPSBrICsgMTc2IHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBSKEEpIHsKICAgICAgICAgICAgICBBID0gQSB8IDA7CiAgICAgICAgICAgICAgdmFyIGkgPSAwLCByID0gMCwgZiA9IDAsIGsgPSAwLCB0ID0gMCwgbiA9IDAsIGwgPSAwLCBhID0gMCwgdSA9IDAsIG8gPSAwOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGlmICghQSkKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIGYgPSBBIC0gOCB8IDAsIGkgPSBlW0EgLSA0ID4+IDJdLCBBID0gaSAmIC04LCB0ID0gZiArIEEgfCAwOwogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICBpZiAoaSAmIDEpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgaWYgKCEoaSAmIDIpIHx8IChpID0gZVtmID4+IDJdLCBmID0gZiAtIGkgfCAwLCBmID4+PiAwIDwgZFsxMjk2Ml0pKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIEEgPSBBICsgaSB8IDA7CiAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICBrOiB7CiAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlWzEyOTYzXSAhPSAoZiB8IDApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSBlW2YgKyAxMiA+PiAyXSwgaSA+Pj4gMCA8PSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrID0gZVtmICsgOCA+PiAyXSwgKGsgfCAwKSAhPSAociB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IDUxODMyLCBvID0gZVsxMjk1OF0gJiBoMShpID4+PiAzIHwgMCksIGVbdSA+PiAyXSA9IG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGVbZiArIDI0ID4+IDJdLCAociB8IDApICE9IChmIHwgMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlW2YgKyA4ID4+IDJdLCBlW2kgKyAxMiA+PiAyXSA9IHIsIGVbciArIDggPj4gMl0gPSBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPSBlW2YgKyAyMCA+PiAyXSwgaykKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBmICsgMjAgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPSBlW2YgKyAxNiA+PiAyXSwgIWspCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gZiArIDE2IHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IG4gPSBpLCByID0gaywgaSA9IHIgKyAyMCB8IDAsIGsgPSBlW3IgKyAyMCA+PiAyXSwgISghayAmJiAoaSA9IHIgKyAxNiB8IDAsIGsgPSBlW3IgKyAxNiA+PiAyXSwgIWspKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgIGVbbiA+PiAyXSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IGVbdCArIDQgPj4gMl0sIChpICYgMykgIT0gMykKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICBlWzEyOTYwXSA9IEEsIGVbdCArIDQgPj4gMl0gPSBpICYgLTIsIGVbZiArIDQgPj4gMl0gPSBBIHwgMSwgZVt0ID4+IDJdID0gQTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTIgPj4gMl0gPSByLCBlW3IgKyA4ID4+IDJdID0gazsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHIgPSAwOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmICghbCkKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICBpID0gZVtmICsgMjggPj4gMl0sIGsgPSAoaSA8PCAyKSArIDUyMTM2IHwgMDsKICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgIGlmIChlW2sgPj4gMl0gPT0gKGYgfCAwKSkgewogICAgICAgICAgICAgICAgICAgICAgaWYgKGVbayA+PiAyXSA9IHIsIHIpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICB1ID0gNTE4MzYsIG8gPSBlWzEyOTU5XSAmIGgxKGkpLCBlW3UgPj4gMl0gPSBvOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgazogewogICAgICAgICAgICAgICAgICAgICAgaWYgKGVbbCArIDE2ID4+IDJdID09IChmIHwgMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZVtsICsgMTYgPj4gMl0gPSByOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgZVtsICsgMjAgPj4gMl0gPSByOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoIXIpCiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChlW3IgKyAyNCA+PiAyXSA9IGwsIGkgPSBlW2YgKyAxNiA+PiAyXSwgaSAmJiAoZVtyICsgMTYgPj4gMl0gPSBpLCBlW2kgKyAyNCA+PiAyXSA9IHIpLCBpID0gZVtmICsgMjAgPj4gMl0sICFpKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIGVbciArIDIwID4+IDJdID0gaSwgZVtpICsgMjQgPj4gMl0gPSByOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGYgPj4+IDAgPj0gdCA+Pj4gMCB8fCAoaSA9IGVbdCArIDQgPj4gMl0sICEoaSAmIDEpKSkKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgIGs6IHsKICAgICAgICAgICAgICAgICAgICAgIGY6IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoaSAmIDIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbMTI5NjRdID09ICh0IHwgMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlWzEyOTY0XSA9IGYsIEEgPSBlWzEyOTYxXSArIEEgfCAwLCBlWzEyOTYxXSA9IEEsIGVbZiArIDQgPj4gMl0gPSBBIHwgMSwgZVsxMjk2M10gIT0gKGYgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbMTI5NjBdID0gMCwgZVsxMjk2M10gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA9IGVbMTI5NjNdLCAoYSB8IDApID09ICh0IHwgMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbMTI5NjNdID0gZiwgQSA9IGVbMTI5NjBdICsgQSB8IDAsIGVbMTI5NjBdID0gQSwgZVtmICsgNCA+PiAyXSA9IEEgfCAxLCBlW0EgKyBmID4+IDJdID0gQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEEgPSAoaSAmIC04KSArIEEgfCAwLCByID0gZVt0ICsgMTIgPj4gMl0sIGkgPj4+IDAgPD0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoayA9IGVbdCArIDggPj4gMl0sIChrIHwgMCkgPT0gKHIgfCAwKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gNTE4MzIsIG8gPSBlWzEyOTU4XSAmIGgxKGkgPj4+IDMgfCAwKSwgZVt1ID4+IDJdID0gbzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gciwgZVtyICsgOCA+PiAyXSA9IGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGVbdCArIDI0ID4+IDJdLCAociB8IDApICE9ICh0IHwgMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlW3QgKyA4ID4+IDJdLCBlW2kgKyAxMiA+PiAyXSA9IHIsIGVbciArIDggPj4gMl0gPSBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPSBlW3QgKyAyMCA+PiAyXSwgaykKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSB0ICsgMjAgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPSBlW3QgKyAxNiA+PiAyXSwgIWspCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gdCArIDE2IHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IG4gPSBpLCByID0gaywgaSA9IHIgKyAyMCB8IDAsIGsgPSBlW3IgKyAyMCA+PiAyXSwgISghayAmJiAoaSA9IHIgKyAxNiB8IDAsIGsgPSBlW3IgKyAxNiA+PiAyXSwgIWspKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgIGVbbiA+PiAyXSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlW3QgKyA0ID4+IDJdID0gaSAmIC0yLCBlW2YgKyA0ID4+IDJdID0gQSB8IDEsIGVbQSArIGYgPj4gMl0gPSBBOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgciA9IDA7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICghbCkKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgaSA9IGVbdCArIDI4ID4+IDJdLCBrID0gKGkgPDwgMikgKyA1MjEzNiB8IDA7CiAgICAgICAgICAgICAgICAgICAgazogewogICAgICAgICAgICAgICAgICAgICAgaWYgKGVbayA+PiAyXSA9PSAodCB8IDApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW2sgPj4gMl0gPSByLCByKQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgIHUgPSA1MTgzNiwgbyA9IGVbMTI5NTldICYgaDEoaSksIGVbdSA+PiAyXSA9IG87CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW2wgKyAxNiA+PiAyXSA9PSAodCB8IDApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZVtsICsgMTYgPj4gMl0gPSByOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZVtsICsgMjAgPj4gMl0gPSByOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgaWYgKCFyKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoZVtyICsgMjQgPj4gMl0gPSBsLCBpID0gZVt0ICsgMTYgPj4gMl0sIGkgJiYgKGVbciArIDE2ID4+IDJdID0gaSwgZVtpICsgMjQgPj4gMl0gPSByKSwgaSA9IGVbdCArIDIwID4+IDJdLCAhaSkKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgZVtyICsgMjAgPj4gMl0gPSBpLCBlW2kgKyAyNCA+PiAyXSA9IHI7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKGVbZiArIDQgPj4gMl0gPSBBIHwgMSwgZVtBICsgZiA+PiAyXSA9IEEsIChmIHwgMCkgIT0gKGEgfCAwKSkKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICBlWzEyOTYwXSA9IEE7CiAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChBID4+PiAwIDw9IDI1NSkgewogICAgICAgICAgICAgICAgICBpID0gKEEgJiAtOCkgKyA1MTg3MiB8IDAsIGsgPSBlWzEyOTU4XSwgQSA9IDEgPDwgKEEgPj4+IDMpOwogICAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCEoayAmIEEpKSB7CiAgICAgICAgICAgICAgICAgICAgICBlWzEyOTU4XSA9IEEgfCBrLCBBID0gaTsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIEEgPSBlW2kgKyA4ID4+IDJdOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVbaSArIDggPj4gMl0gPSBmLCBlW0EgKyAxMiA+PiAyXSA9IGYsIGVbZiArIDEyID4+IDJdID0gaSwgZVtmICsgOCA+PiAyXSA9IEE7CiAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHIgPSAzMSwgQSA+Pj4gMCA8PSAxNjc3NzIxNSAmJiAoaSA9IE8wKEEgPj4+IDggfCAwKSwgciA9ICgoQSA+Pj4gMzggLSBpICYgMSkgLSAoaSA8PCAxKSB8IDApICsgNjIgfCAwKSwgZVtmICsgMjggPj4gMl0gPSByLCBlW2YgKyAxNiA+PiAyXSA9IDAsIGVbZiArIDIwID4+IDJdID0gMCwgaSA9IChyIDw8IDIpICsgNTIxMzYgfCAwOwogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgayA9IGVbMTI5NTldLCBuID0gMSA8PCByOwogICAgICAgICAgICAgICAgICAgIGs6IHsKICAgICAgICAgICAgICAgICAgICAgIGlmICghKGsgJiBuKSkgewogICAgICAgICAgICAgICAgICAgICAgICBlWzEyOTU5XSA9IGsgfCBuLCBlW2kgPj4gMl0gPSBmLCByID0gMjQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBmb3IgKHIgPSBBIDw8ICgociB8IDApICE9IDMxID8gMjUgLSAociA+Pj4gMSB8IDApIHwgMCA6IDApLCBpID0gZVtpID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoayA9IGksIChlW2kgKyA0ID4+IDJdICYgLTgpID09IChBIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSByID4+PiAyOSB8IDAsIHIgPSByIDw8IDEsIG4gPSAoaSAmIDQpICsgayB8IDAsIGkgPSBlW24gKyAxNiA+PiAyXSwgIWkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBlW24gKyAxNiA+PiAyXSA9IGYsIGkgPSBrLCByID0gMjQ7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGsgPSBmLCBuID0gZiwgQSA9IDg7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpID0gZVtrICsgOCA+PiAyXSwgZVtpICsgMTIgPj4gMl0gPSBmLCBlW2sgKyA4ID4+IDJdID0gZiwgciA9IDgsIG4gPSAwLCBBID0gMjQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlW3IgKyBmID4+IDJdID0gaSwgZVtmICsgMTIgPj4gMl0gPSBrLCBlW0EgKyBmID4+IDJdID0gbiwgQSA9IGVbMTI5NjZdIC0gMSB8IDAsIGVbMTI5NjZdID0gQSB8fCAtMTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gdWkoQSwgaSkgewogICAgICAgICAgICAgIHZhciByID0gMCwgZiA9IDAsIGsgPSAwLCB0ID0gMCwgbiA9IDAsIGwgPSAwLCBhID0gMCwgdSA9IDAsIG8gPSAwOwogICAgICAgICAgICAgIHQgPSBBICsgaSB8IDAsIHIgPSBlW0EgKyA0ID4+IDJdOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgaWYgKHIgJiAxKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIGlmICghKHIgJiAyKSkKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICByID0gZVtBID4+IDJdLCBpID0gciArIGkgfCAwOwogICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgazogewogICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoQSA9IEEgLSByIHwgMCwgKEEgfCAwKSAhPSBlWzEyOTYzXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmID0gZVtBICsgMTIgPj4gMl0sIHIgPj4+IDAgPD0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoayA9IGVbQSArIDggPj4gMl0sIChrIHwgMCkgIT0gKGYgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSA1MTgzMiwgbyA9IGVbMTI5NThdICYgaDEociA+Pj4gMyB8IDApLCBlW3UgPj4gMl0gPSBvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPSBlW0EgKyAyNCA+PiAyXSwgKEEgfCAwKSAhPSAoZiB8IDApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gZVtBICsgOCA+PiAyXSwgZVtyICsgMTIgPj4gMl0gPSBmLCBlW2YgKyA4ID4+IDJdID0gcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrID0gZVtBICsgMjAgPj4gMl0sIGspCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gQSArIDIwIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrID0gZVtBICsgMTYgPj4gMl0sICFrKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IEEgKyAxNiB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBsID0gciwgZiA9IGssIHIgPSBmICsgMjAgfCAwLCBrID0gZVtmICsgMjAgPj4gMl0sICEoIWsgJiYgKHIgPSBmICsgMTYgfCAwLCBrID0gZVtmICsgMTYgPj4gMl0sICFrKSk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICBlW2wgPj4gMl0gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSBlW3QgKyA0ID4+IDJdLCAociAmIDMpICE9IDMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgZVsxMjk2MF0gPSBpLCBlW3QgKyA0ID4+IDJdID0gciAmIC0yLCBlW0EgKyA0ID4+IDJdID0gaSB8IDEsIGVbdCA+PiAyXSA9IGk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEyID4+IDJdID0gZiwgZVtmICsgOCA+PiAyXSA9IGs7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBmID0gMDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoIW4pCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgciA9IGVbQSArIDI4ID4+IDJdLCBrID0gKHIgPDwgMikgKyA1MjEzNiB8IDA7CiAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICBpZiAoZVtrID4+IDJdID09IChBIHwgMCkpIHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChlW2sgPj4gMl0gPSBmLCBmKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgdSA9IDUxODM2LCBvID0gZVsxMjk1OV0gJiBoMShyKSwgZVt1ID4+IDJdID0gbzsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGs6IHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChlW24gKyAxNiA+PiAyXSA9PSAoQSB8IDApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVbbiArIDE2ID4+IDJdID0gZjsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGVbbiArIDIwID4+IDJdID0gZjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKCFmKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoZVtmICsgMjQgPj4gMl0gPSBuLCByID0gZVtBICsgMTYgPj4gMl0sIHIgJiYgKGVbZiArIDE2ID4+IDJdID0gciwgZVtyICsgMjQgPj4gMl0gPSBmKSwgciA9IGVbQSArIDIwID4+IDJdLCAhcikKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICBlW2YgKyAyMCA+PiAyXSA9IHIsIGVbciArIDI0ID4+IDJdID0gZjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgIGs6IHsKICAgICAgICAgICAgICAgICAgICAgIGY6IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSBlW3QgKyA0ID4+IDJdLCAhKHIgJiAyKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlWzEyOTY0XSA9PSAodCB8IDApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVsxMjk2NF0gPSBBLCBpID0gZVsxMjk2MV0gKyBpIHwgMCwgZVsxMjk2MV0gPSBpLCBlW0EgKyA0ID4+IDJdID0gaSB8IDEsIGVbMTI5NjNdICE9IChBIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlWzEyOTYwXSA9IDAsIGVbMTI5NjNdID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEgPSBlWzEyOTYzXSwgKGEgfCAwKSA9PSAodCB8IDApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlWzEyOTYzXSA9IEEsIGkgPSBlWzEyOTYwXSArIGkgfCAwLCBlWzEyOTYwXSA9IGksIGVbQSArIDQgPj4gMl0gPSBpIHwgMSwgZVtBICsgaSA+PiAyXSA9IGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID0gKHIgJiAtOCkgKyBpIHwgMCwgZiA9IGVbdCArIDEyID4+IDJdLCByID4+PiAwIDw9IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPSBlW3QgKyA4ID4+IDJdLCAoayB8IDApID09IChmIHwgMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IDUxODMyLCBvID0gZVsxMjk1OF0gJiBoMShyID4+PiAzIHwgMCksIGVbdSA+PiAyXSA9IG87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAxMiA+PiAyXSA9IGYsIGVbZiArIDggPj4gMl0gPSBrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPSBlW3QgKyAyNCA+PiAyXSwgKGYgfCAwKSAhPSAodCB8IDApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gZVt0ICsgOCA+PiAyXSwgZVtyICsgMTIgPj4gMl0gPSBmLCBlW2YgKyA4ID4+IDJdID0gcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrID0gZVt0ICsgMjAgPj4gMl0sIGspCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gdCArIDIwIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrID0gZVt0ICsgMTYgPj4gMl0sICFrKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IHQgKyAxNiB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBsID0gciwgZiA9IGssIHIgPSBmICsgMjAgfCAwLCBrID0gZVtmICsgMjAgPj4gMl0sICEoIWsgJiYgKHIgPSBmICsgMTYgfCAwLCBrID0gZVtmICsgMTYgPj4gMl0sICFrKSk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICBlW2wgPj4gMl0gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZVt0ICsgNCA+PiAyXSA9IHIgJiAtMiwgZVtBICsgNCA+PiAyXSA9IGkgfCAxLCBlW0EgKyBpID4+IDJdID0gaTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGYgPSAwOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoIW4pCiAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgIHIgPSBlW3QgKyAyOCA+PiAyXSwgayA9IChyIDw8IDIpICsgNTIxMzYgfCAwOwogICAgICAgICAgICAgICAgICAgIGs6IHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChlW2sgPj4gMl0gPT0gKHQgfCAwKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtrID4+IDJdID0gZiwgZikKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICB1ID0gNTE4MzYsIG8gPSBlWzEyOTU5XSAmIGgxKHIpLCBlW3UgPj4gMl0gPSBvOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtuICsgMTYgPj4gMl0gPT0gKHQgfCAwKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGVbbiArIDE2ID4+IDJdID0gZjsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVbbiArIDIwID4+IDJdID0gZjsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlmICghZikKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKGVbZiArIDI0ID4+IDJdID0gbiwgciA9IGVbdCArIDE2ID4+IDJdLCByICYmIChlW2YgKyAxNiA+PiAyXSA9IHIsIGVbciArIDI0ID4+IDJdID0gZiksIHIgPSBlW3QgKyAyMCA+PiAyXSwgIXIpCiAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgIGVbZiArIDIwID4+IDJdID0gciwgZVtyICsgMjQgPj4gMl0gPSBmOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChlW0EgKyA0ID4+IDJdID0gaSB8IDEsIGVbQSArIGkgPj4gMl0gPSBpLCAoQSB8IDApICE9IChhIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgZVsxMjk2MF0gPSBpOwogICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoaSA+Pj4gMCA8PSAyNTUpIHsKICAgICAgICAgICAgICAgICAgciA9IChpICYgLTgpICsgNTE4NzIgfCAwLCBmID0gZVsxMjk1OF0sIGkgPSAxIDw8IChpID4+PiAzKTsKICAgICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICAgIGlmICghKGYgJiBpKSkgewogICAgICAgICAgICAgICAgICAgICAgZVsxMjk1OF0gPSBpIHwgZiwgaSA9IHI7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpID0gZVtyICsgOCA+PiAyXTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlW3IgKyA4ID4+IDJdID0gQSwgZVtpICsgMTIgPj4gMl0gPSBBLCBlW0EgKyAxMiA+PiAyXSA9IHIsIGVbQSArIDggPj4gMl0gPSBpOwogICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmID0gMzEsIGkgPj4+IDAgPD0gMTY3NzcyMTUgJiYgKHIgPSBPMChpID4+PiA4IHwgMCksIGYgPSAoKGkgPj4+IDM4IC0gciAmIDEpIC0gKHIgPDwgMSkgfCAwKSArIDYyIHwgMCksIGVbQSArIDI4ID4+IDJdID0gZiwgZVtBICsgMTYgPj4gMl0gPSAwLCBlW0EgKyAyMCA+PiAyXSA9IDAsIHIgPSAoZiA8PCAyKSArIDUyMTM2IHwgMDsKICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgayA9IGVbMTI5NTldLCBsID0gMSA8PCBmOwogICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCEoayAmIGwpKSB7CiAgICAgICAgICAgICAgICAgICAgICBlWzEyOTU5XSA9IGsgfCBsLCBlW3IgPj4gMl0gPSBBLCBlW0EgKyAyNCA+PiAyXSA9IHI7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBmb3IgKGYgPSBpIDw8ICgoZiB8IDApICE9IDMxID8gMjUgLSAoZiA+Pj4gMSB8IDApIHwgMCA6IDApLCByID0gZVtyID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPSByLCAoZVtyICsgNCA+PiAyXSAmIC04KSA9PSAoaSB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSBmID4+PiAyOSB8IDAsIGYgPSBmIDw8IDEsIGwgPSBrICsgKHIgJiA0KSB8IDAsIHIgPSBlW2wgKyAxNiA+PiAyXSwgIXIpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlW2wgKyAxNiA+PiAyXSA9IEEsIGVbQSArIDI0ID4+IDJdID0gazsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlW0EgKyAxMiA+PiAyXSA9IEEsIGVbQSArIDggPj4gMl0gPSBBOwogICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpID0gZVtrICsgOCA+PiAyXSwgZVtpICsgMTIgPj4gMl0gPSBBLCBlW2sgKyA4ID4+IDJdID0gQSwgZVtBICsgMjQgPj4gMl0gPSAwLCBlW0EgKyAxMiA+PiAyXSA9IGssIGVbQSArIDggPj4gMl0gPSBpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBpayhBLCBpLCByKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDAsIHIgPSByIHwgMDsKICAgICAgICAgICAgICB2YXIgZiA9IDAsIGsgPSAwLCB0ID0gMCwgbiA9IDAsIGwgPSAwLCBhID0gMCwgdSA9IDAsIG8gPSAwLCBnID0gMCwgaCA9IDAsIHMgPSAwOwogICAgICAgICAgICAgIHQgPSBYIC0gMTEyIHwgMCwgWCA9IHQsIG8gPSAxMDI0OwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgaWYgKGwgPSBFMigxLCAxMDI0KSwgbCkgewogICAgICAgICAgICAgICAgICAgIGZvciAocyA9IHQgKyA5MiB8IDAsIGcgPSB0ICsgMTA4IHwgMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgazogewogICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSB0ICsgMTA0IHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGkxKGksIGYsIDgsIHIpIHwgMCkgIT0gOCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgyKGYsIHQgKyA4OCB8IDAsIDQpLCBoMihnLCBzLCA0KSwgYSA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGw6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGVbdCArIDg4ID4+IDJdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGYgPSBlW2kgKyAxMiA+PiAyXSwgbiA9IGYsIGsgPSBlW2kgKyA4ID4+IDJdLCBmIHwgayA/ICh1ID0gZVtpICsgNTYgPj4gMl0sIGYgPSBrIC0gdSB8IDAsIGsgPSBuIC0gKGVbaSArIDYwID4+IDJdICsgKGsgPj4+IDAgPCB1ID4+PiAwKSB8IDApIHwgMCkgOiAoZiA9IDAsIGsgPSAwKSwgKGsgfCAwKSA8IDAgPyBrID0gMSA6IGsgPSBmID4+PiAwIDwgNDI5NDk2NzI4OCAmIChrIHwgMCkgPD0gMCwgaykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFEociwgMSwgMTg3MzQsIDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZiA9IHQgKyAxMDQgfCAwLCAoaTEoaSwgZiwgOCwgcikgfCAwKSAhPSA4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGgyKGYsIHQgKyAxMDAgfCAwLCA0KSwgIWVbdCArIDEwMCA+PiAyXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFEociwgMSwgMTg3MzQsIDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVt0ICsgODggPj4gMl0gPSBmICsgODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgyKGcsIHQgKyA4OCB8IDAsIDQpLCBhID0gMTY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZiA9IGVbdCArIDkyID4+IDJdLCAoZiB8IDApID09IDE3ODU3Mzc4MjcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSBlW0EgKyAxMDAgPj4gMl0sIGkgJiA0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtBICsgMTAwID4+IDJdID0gaSB8IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRKHIsIDEsIDkxNzcsIDApLCBSKGwpLCBBID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrID0gZVt0ICsgODggPj4gMl0sICFrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFEociwgMSwgNTY3MCwgMCksIFIobCksIEEgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPj4+IDAgPCBhID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbdCArIDQgPj4gMl0gPSBmLCBlW3QgPj4gMl0gPSBrLCBRKHIsIDEsIDI1Mjg4LCB0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIEE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGc6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHc6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG46IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChmIHwgMCkgPD0gMTY2ODI0NjY0MSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZiB8IDApID09IDE2NTE1MzI2NDMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZiB8IDApID09IDE2Njc1MjM5NDIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZiB8IDApICE9IDE2NjgxMTI3NTIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAzMTc2MDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZiB8IDApIDw9IDE3ODM2MzU5OTkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGYgfCAwKSA9PSAxNjY4MjQ2NjQyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9IDMxNzI4LCAoZiB8IDApID09IDE3Njg0NDkxMzgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZiB8IDApICE9IDE3MTg5MDkyOTYpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAzMTcwNDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZiB8IDApID09IDE4ODU1NjQwMTgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChmIHwgMCkgPT0gMTc4MzYzNmUzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID0gMzE3MTIsIChmIHwgMCkgPT0gMTc4NTczNzgzMikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGYgPSBlW0EgKyAxMDAgPj4gMl0sIGYgJiAxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUShyLCAxLCAzOTQzLCAwKSwgUihsKSwgQSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMzE3NDQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMzE3NTI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMzE3Njg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMzE3MzY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbdCArIDc2ID4+IDJdID0gZiAmIDI1NSwgZVt0ICsgNjQgPj4gMl0gPSBmID4+PiAyNCwgZVt0ICsgNzIgPj4gMl0gPSBmID4+PiA4ICYgMjU1LCBlW3QgKyA2OCA+PiAyXSA9IGYgPj4+IDE2ICYgMjU1LCBRKHIsIDIsIDM4OTIsIHQgLSAtNjQgfCAwKSwgayA9IGsgLSBhIHwgMCwgSVtBICsgMTAwIHwgMF0gJiA0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmID0gZVt0ICsgOTIgPj4gMl0sIGVbdCArIDQ4ID4+IDJdID0gZiA+Pj4gMjQsIGVbdCArIDYwID4+IDJdID0gZiAmIDI1NSwgZVt0ICsgNTIgPj4gMl0gPSBmID4+PiAxNiAmIDI1NSwgZVt0ICsgNTYgPj4gMl0gPSBmID4+PiA4ICYgMjU1LCBRKHIsIDIsIDE2MzE1LCB0ICsgNDggfCAwKSwgZVtBICsgMTAwID4+IDJdID0gZVtBICsgMTAwID4+IDJdIHwgMjE0NzQ4MzY0NywgZiA9IG8yW2VbaSArIDQwID4+IDJdXShpLCBrLCAwLCByKSB8IDAsICFxMiAmIChmIHwgMCkgPT0gKGsgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUShyLCAxLCA2MjU5LCAwKSwgUihsKSwgQSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMzE2OTY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBrIC0gYSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGYgPSBrLCBrID0gZVtpICsgMTIgPj4gMl0sIHUgPSBrLCBhID0gZVtpICsgOCA+PiAyXSwgayB8IGEgPyAoaCA9IGVbaSArIDU2ID4+IDJdLCBrID0gYSAtIGggfCAwLCBhID0gdSAtIChlW2kgKyA2MCA+PiAyXSArIChhID4+PiAwIDwgaCA+Pj4gMCkgfCAwKSB8IDApIDogKGsgPSAwLCBhID0gMCksIChhIHwgMCkgPCAwID8gayA9IDEgOiBrID0gKGEgfCAwKSA8PSAwICYgZiA+Pj4gMCA+IGsgPj4+IDAsIGspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gZVt0ICsgODggPj4gMl0sIGsgPSBlW3QgKyA5MiA+PiAyXSwgQSA9IGVbaSArIDggPj4gMl0sIEEgfCBlW2kgKyAxMiA+PiAyXSA/IEEgPSBBIC0gZVtpICsgNTYgPj4gMl0gfCAwIDogQSA9IDAsIGVbdCArIDQwID4+IDJdID0gQSwgZVt0ICsgMzYgPj4gMl0gPSBmLCBlW3QgKyAzMiA+PiAyXSA9IGsgJiAyNTUsIGVbdCArIDIwID4+IDJdID0gayA+Pj4gMjQsIGVbdCArIDE2ID4+IDJdID0gbiwgZVt0ICsgMjggPj4gMl0gPSBrID4+PiA4ICYgMjU1LCBlW3QgKyAyNCA+PiAyXSA9IGsgPj4+IDE2ICYgMjU1LCBRKHIsIDEsIDI4MDMwLCB0ICsgMTYgfCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmID4+PiAwIDw9IG8gPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvID0gZiwgayA9IG8wKGwsIGYpLCBrKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFIobCksIFEociwgMSwgNDA3NCwgMCksIEEgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoZiAmIDIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFEociwgMSwgNDAxMywgMCksIFIobCksIEEgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbQSArIDEwMCA+PiAyXSA9IGYgfCAyMTQ3NDgzNjQ3LCBmID0gayAtIGEgfCAwLCBrID0gbzJbZVtpICsgNDAgPj4gMl1dKGksIGYsIDAsIHIpIHwgMCwgIXEyICYgKGYgfCAwKSA9PSAoayB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKElbQSArIDEwMCB8IDBdICYgOCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBRKHIsIDIsIDYyNTksIDApOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBSKGwpLCBBID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIFEociwgMSwgNjI1OSwgMCksIFIobCksIEEgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgaWYgKChpMShpLCBrLCBmLCByKSB8IDApICE9IChmIHwgMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgUShyLCAxLCA2MzA5LCAwKSwgUihrKSwgQSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGssICEobzJbZVtuICsgNCA+PiAyXV0oQSwgaywgZiwgcikgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIFIoayksIEEgPSAwOwogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgUShyLCAxLCA4NDI0LCAwKSwgQSA9IDA7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBSKGwpLCBBID0gMDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIFggPSB0ICsgMTEyIHwgMCwgQSB8IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gUTQoQSwgaSwgcikgewogICAgICAgICAgICAgIHZhciBmID0gMCwgayA9IDAsIHQgPSAwLCBuID0gMCwgbCA9IDAsIGEgPSAwLCB1ID0gMDsKICAgICAgICAgICAgICBpZiAoYSA9IGVbQSArIDI0ID4+IDJdLCBuID0gZVthICsgMTYgPj4gMl0sIG4pIHsKICAgICAgICAgICAgICAgIGZvciAoayA9IGVbYSArIDI0ID4+IDJdLCBmID0gZVtlW2VbQSArIDIwID4+IDJdID4+IDJdICsgMjAgPj4gMl07IHUgPSB0LCB0ID0gZVtrICsgMjQgPj4gMl0sIHQgPSAodCA+Pj4gMyB8IDApICsgKCh0ICYgNykgIT0gMCkgfCAwLCB0ID0gdSArIFooWihlW2YgKyAxMiA+PiAyXSAtIGVbZiArIDQgPj4gMl0gfCAwLCBlW2YgKyA4ID4+IDJdIC0gZVtmID4+IDJdIHwgMCksICh0IHwgMCkgPT0gMyA/IDQgOiB0KSB8IDAsIGYgPSBmICsgNzYgfCAwLCBrID0gayArIDUyIHwgMCwgbCA9IGwgKyAxIHwgMCwgKG4gfCAwKSAhPSAobCB8IDApOyApCiAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgIGlmIChmID0gMCwgKHIgfCAwKSA9PSAodCB8IDApKQogICAgICAgICAgICAgICAgICBmb3IgKGwgPSBlW2EgKyAyNCA+PiAyXSwgdCA9IGVbZVtlW0EgKyAyMCA+PiAyXSA+PiAyXSArIDIwID4+IDJdLCBBID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICByID0gWihlW3QgKyAxMiA+PiAyXSAtIGVbdCArIDQgPj4gMl0gfCAwLCBlW3QgKyA4ID4+IDJdIC0gZVt0ID4+IDJdIHwgMCk7CiAgICAgICAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgazoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZiA9IGVbbCArIDI0ID4+IDJdLCBmID0gKGYgPj4+IDMgfCAwKSArICgoZiAmIDcpICE9IDApIHwgMCwgKChmIHwgMCkgPT0gMyA/IDQgOiBmKSAtIDEgfCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZiA9IGVbdCArIDM2ID4+IDJdLCBlW2wgKyAzMiA+PiAyXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPj4+IDAgPj0gOCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChuID0gciAmIC04LCBrID0gMDsgZVtmID4+IDJdID0gRltpIHwgMF0sIGVbZiArIDQgPj4gMl0gPSBGW2kgKyAxIHwgMF0sIGVbZiArIDggPj4gMl0gPSBGW2kgKyAyIHwgMF0sIGVbZiArIDEyID4+IDJdID0gRltpICsgMyB8IDBdLCBlW2YgKyAxNiA+PiAyXSA9IEZbaSArIDQgfCAwXSwgZVtmICsgMjAgPj4gMl0gPSBGW2kgKyA1IHwgMF0sIGVbZiArIDI0ID4+IDJdID0gRltpICsgNiB8IDBdLCBlW2YgKyAyOCA+PiAyXSA9IEZbaSArIDcgfCAwXSwgZiA9IGYgKyAzMiB8IDAsIGkgPSBpICsgOCB8IDAsIGsgPSBrICsgOCB8IDAsIChuIHwgMCkgIT0gKGsgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrID0gMCwgciA9IHIgJiA3LCAhcikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBlW2YgPj4gMl0gPSBGW2kgfCAwXSwgZiA9IGYgKyA0IHwgMCwgaSA9IGkgKyAxIHwgMCwgayA9IGsgKyAxIHwgMCwgKHIgfCAwKSAhPSAoayB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPj4+IDAgPj0gOCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobiA9IHIgJiAtOCwgayA9IDA7IGVbZiA+PiAyXSA9IElbaSB8IDBdLCBlW2YgKyA0ID4+IDJdID0gSVtpICsgMSB8IDBdLCBlW2YgKyA4ID4+IDJdID0gSVtpICsgMiB8IDBdLCBlW2YgKyAxMiA+PiAyXSA9IElbaSArIDMgfCAwXSwgZVtmICsgMTYgPj4gMl0gPSBJW2kgKyA0IHwgMF0sIGVbZiArIDIwID4+IDJdID0gSVtpICsgNSB8IDBdLCBlW2YgKyAyNCA+PiAyXSA9IElbaSArIDYgfCAwXSwgZVtmICsgMjggPj4gMl0gPSBJW2kgKyA3IHwgMF0sIGYgPSBmICsgMzIgfCAwLCBpID0gaSArIDggfCAwLCBrID0gayArIDggfCAwLCAobiB8IDApICE9IChrIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrID0gMCwgciA9IHIgJiA3LCAhcikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGVbZiA+PiAyXSA9IElbaSB8IDBdLCBmID0gZiArIDQgfCAwLCBpID0gaSArIDEgfCAwLCBrID0gayArIDEgfCAwLCAociB8IDApICE9IChrIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmID0gZVt0ICsgMzYgPj4gMl0sIGVbbCArIDMyID4+IDJdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA+Pj4gMCA+PSA4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChuID0gciAmIC04LCBrID0gMDsgZVtmID4+IDJdID0gdTJbaSA+PiAxXSwgZVtmICsgNCA+PiAyXSA9IHUyW2kgKyAyID4+IDFdLCBlW2YgKyA4ID4+IDJdID0gdTJbaSArIDQgPj4gMV0sIGVbZiArIDEyID4+IDJdID0gdTJbaSArIDYgPj4gMV0sIGVbZiArIDE2ID4+IDJdID0gdTJbaSArIDggPj4gMV0sIGVbZiArIDIwID4+IDJdID0gdTJbaSArIDEwID4+IDFdLCBlW2YgKyAyNCA+PiAyXSA9IHUyW2kgKyAxMiA+PiAxXSwgZVtmICsgMjggPj4gMl0gPSB1MltpICsgMTQgPj4gMV0sIGYgPSBmICsgMzIgfCAwLCBpID0gaSArIDE2IHwgMCwgayA9IGsgKyA4IHwgMCwgKG4gfCAwKSAhPSAoayB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoayA9IDAsIHIgPSByICYgNywgIXIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBlW2YgPj4gMl0gPSB1MltpID4+IDFdLCBmID0gZiArIDQgfCAwLCBpID0gaSArIDIgfCAwLCBrID0gayArIDEgfCAwLCAociB8IDApICE9IChrIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcikKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAociA+Pj4gMCA+PSA4KQogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobiA9IHIgJiAtOCwgayA9IDA7IGVbZiA+PiAyXSA9IEcyW2kgPj4gMV0sIGVbZiArIDQgPj4gMl0gPSBHMltpICsgMiA+PiAxXSwgZVtmICsgOCA+PiAyXSA9IEcyW2kgKyA0ID4+IDFdLCBlW2YgKyAxMiA+PiAyXSA9IEcyW2kgKyA2ID4+IDFdLCBlW2YgKyAxNiA+PiAyXSA9IEcyW2kgKyA4ID4+IDFdLCBlW2YgKyAyMCA+PiAyXSA9IEcyW2kgKyAxMCA+PiAxXSwgZVtmICsgMjQgPj4gMl0gPSBHMltpICsgMTIgPj4gMV0sIGVbZiArIDI4ID4+IDJdID0gRzJbaSArIDE0ID4+IDFdLCBmID0gZiArIDMyIHwgMCwgaSA9IGkgKyAxNiB8IDAsIGsgPSBrICsgOCB8IDAsIChuIHwgMCkgIT0gKGsgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoayA9IDAsIHIgPSByICYgNywgIXIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGVbZiA+PiAyXSA9IEcyW2kgPj4gMV0sIGYgPSBmICsgNCB8IDAsIGkgPSBpICsgMiB8IDAsIGsgPSBrICsgMSB8IDAsIChyIHwgMCkgIT0gKGsgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlmICghcikKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgIGlmIChmID0gZVt0ICsgMzYgPj4gMl0sIHIgPj4+IDAgPj0gOCkKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChuID0gciAmIC04LCBrID0gMDsgZVtmID4+IDJdID0gZVtpID4+IDJdLCBlW2YgKyA0ID4+IDJdID0gZVtpICsgNCA+PiAyXSwgZVtmICsgOCA+PiAyXSA9IGVbaSArIDggPj4gMl0sIGVbZiArIDEyID4+IDJdID0gZVtpICsgMTIgPj4gMl0sIGVbZiArIDE2ID4+IDJdID0gZVtpICsgMTYgPj4gMl0sIGVbZiArIDIwID4+IDJdID0gZVtpICsgMjAgPj4gMl0sIGVbZiArIDI0ID4+IDJdID0gZVtpICsgMjQgPj4gMl0sIGVbZiArIDI4ID4+IDJdID0gZVtpICsgMjggPj4gMl0sIGYgPSBmICsgMzIgfCAwLCBpID0gaSArIDMyIHwgMCwgayA9IGsgKyA4IHwgMCwgKG4gfCAwKSAhPSAoayB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPSAwLCByID0gciAmIDcsICFyKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGVbZiA+PiAyXSA9IGVbaSA+PiAyXSwgZiA9IGYgKyA0IHwgMCwgaSA9IGkgKyA0IHwgMCwgayA9IGsgKyAxIHwgMCwgKHIgfCAwKSAhPSAoayB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0ICsgNzYgfCAwLCBsID0gbCArIDUyIHwgMCwgZiA9IDEsIEEgPSBBICsgMSB8IDAsICEoQSA+Pj4gMCA8IGRbYSArIDE2ID4+IDJdKSkKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gZjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuICFyOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIG9pKEEsIGksIHIsIGYpIHsKICAgICAgICAgICAgICB2YXIgayA9IDAsIHQgPSAwLCBuID0gMCwgbCA9IDAsIGEgPSAwLCB1ID0gMCwgbyA9IDAsIGcgPSAwLCBoID0gMCwgcyA9IDAsIHcgPSAwLCBCID0gMCwgYyA9IDAsIHYgPSAwLCBDID0gMCwgbSA9IDAsIHkgPSAwLCBwID0gMCwgSCA9IDAsIEogPSAwLCBFID0gMDsKICAgICAgICAgICAgICBuID0gZVtBICsgOCA+PiAyXSwgayA9IG4gKyBlW0EgKyA0ID4+IDJdIHwgMDsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAoIWVbQSArIDEyID4+IDJdKSB7CiAgICAgICAgICAgICAgICAgIGlmICgoayB8IDApIDwgMiB8IChmIHwgMCkgPD0gMCkKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICBmb3IgKGMgPSBrICYgMjE0NzQ4MzY0NCwgaCA9IGsgJiAzLCB2ID0gayAmIDEsIEMgPSBuICsgMSB8IDAsIGwgPSBlW0EgPj4gMl0sIHcgPSBsICsgKGsgPDwgMikgfCAwLCBtID0gayAtIDQgPj4+IDEgfCAwLCBBID0gayAtIDEgfCAwLCB5ID0gbCArIChBIDw8IDIpIHwgMCwgcCA9IFoociwgbikgPDwgMiwgZyA9IGsgPj4+IDAgPCA0LCBIID0gWihBID4+PiAxIHwgMCwgcikgPDwgMjsgOyApIHsKICAgICAgICAgICAgICAgICAgICBpZiAobiA9IGVbaSArIHAgPj4gMl0sIGsgPSBlW2kgPj4gMl0gLSAobiArIDEgPj4gMSkgfCAwLCBhID0gMCwgQSA9IDAsICFnKQogICAgICAgICAgICAgICAgICAgICAgZm9yICg7IHUgPSBBICsgMSB8IDAsIEogPSBlWyhaKHUsIHIpIDw8IDIpICsgaSA+PiAyXSwgdCA9IGVbKFooQSArIEMgfCAwLCByKSA8PCAyKSArIGkgPj4gMl0sIEIgPSBsICsgKGEgPDwgMikgfCAwLCBlW0IgPj4gMl0gPSBrLCBvID0gaywgayA9IEogLSAoKG4gKyB0IHwgMCkgKyAyID4+IDIpIHwgMCwgZVtCICsgNCA+PiAyXSA9IChvICsgayA+PiAxKSArIG4sIGEgPSBhICsgMiB8IDAsIG8gPSAoQSB8IDApICE9IChtIHwgMCksIG4gPSB0LCBBID0gdSwgISFvOyApCiAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICBpZiAoZVtsICsgKGEgPDwgMikgPj4gMl0gPSBrLCB2ID8gKEEgPSBlW2kgKyBIID4+IDJdIC0gKG4gKyAxID4+IDEpIHwgMCwgZVt5ID4+IDJdID0gQSwgayA9IEEgKyBrID4+IDEsIEEgPSAtOCkgOiBBID0gLTQsIGVbQSArIHcgPj4gMl0gPSBrICsgbiwgayA9IDAsIEEgPSAwLCBuID0gMCwgIWcpCiAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgZVsoWihBLCByKSA8PCAyKSArIGkgPj4gMl0gPSBlW2wgKyAoQSA8PCAyKSA+PiAyXSwgdCA9IEEgfCAxLCBlWyhaKHQsIHIpIDw8IDIpICsgaSA+PiAyXSA9IGVbbCArICh0IDw8IDIpID4+IDJdLCB0ID0gQSB8IDIsIGVbKFoodCwgcikgPDwgMikgKyBpID4+IDJdID0gZVtsICsgKHQgPDwgMikgPj4gMl0sIHQgPSBBIHwgMywgZVsoWih0LCByKSA8PCAyKSArIGkgPj4gMl0gPSBlW2wgKyAodCA8PCAyKSA+PiAyXSwgQSA9IEEgKyA0IHwgMCwgbiA9IG4gKyA0IHwgMCwgKGMgfCAwKSAhPSAobiB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICBpZiAoaCkKICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBlWyhaKEEsIHIpIDw8IDIpICsgaSA+PiAyXSA9IGVbbCArIChBIDw8IDIpID4+IDJdLCBBID0gQSArIDEgfCAwLCBrID0gayArIDEgfCAwLCAoaCB8IDApICE9IChrIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgIGlmIChpID0gaSArIDQgfCAwLCBzID0gcyArIDEgfCAwLCAocyB8IDApID09IChmIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaToKICAgICAgICAgICAgICAgICAgc3dpdGNoIChrIC0gMSB8IDApIHsKICAgICAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgICAgICBpZiAoKGYgfCAwKSA8PSAwKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgaWYgKGYgPj4+IDAgPj0gNCkKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChyID0gZiAmIDIxNDc0ODM2NDQsIEEgPSAwOyBlW2kgPj4gMl0gPSBlW2kgPj4gMl0gLyAyLCBlW2kgKyA0ID4+IDJdID0gZVtpICsgNCA+PiAyXSAvIDIsIGVbaSArIDggPj4gMl0gPSBlW2kgKyA4ID4+IDJdIC8gMiwgZVtpICsgMTIgPj4gMl0gPSBlW2kgKyAxMiA+PiAyXSAvIDIsIGkgPSBpICsgMTYgfCAwLCBBID0gQSArIDQgfCAwLCAociB8IDApICE9IChBIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICBpZiAociA9IGYgJiAzLCAhcikKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgIGZvciAoQSA9IDA7IGVbaSA+PiAyXSA9IGVbaSA+PiAyXSAvIDIsIGkgPSBpICsgNCB8IDAsIEEgPSBBICsgMSB8IDAsIChyIHwgMCkgIT0gKEEgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgICAgICAgIGlmICgoZiB8IDApIDw9IDApCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgICBmb3IgKEEgPSBlW0EgPj4gMl0sIGsgPSAwLCBuID0gWihyLCBuKSA8PCAyOyB0ID0gaSArIG4gfCAwLCB1ID0gZVtpID4+IDJdIC0gKGVbdCA+PiAyXSArIDEgPj4gMSkgfCAwLCBlW0EgKyA0ID4+IDJdID0gdSwgdCA9IHUgKyBlW3QgPj4gMl0gfCAwLCBlW0EgPj4gMl0gPSB0LCBlW2kgPj4gMl0gPSB0LCBlWyhyIDw8IDIpICsgaSA+PiAyXSA9IGVbQSArIDQgPj4gMl0sIGkgPSBpICsgNCB8IDAsIGsgPSBrICsgMSB8IDAsIChrIHwgMCkgIT0gKGYgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoKGsgfCAwKSA8IDMgfCAoZiB8IDApIDw9IDApCiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICBmb3IgKGMgPSBrICYgMjE0NzQ4MzY0NCwgaCA9IGsgJiAzLCBsID0gZVtBID4+IDJdLCB2ID0gKGwgKyAoayA8PCAyKSB8IDApIC0gNCB8IDAsIEEgPSBrIC0gMiB8IDAsIEMgPSBsICsgKEEgPDwgMikgfCAwLCB3ID0gayAmIDEsIHQgPSAhdywgbSA9ICgoayAtIHQgfCAwKSAtIDQgPj4+IDEgfCAwKSArIDEgfCAwLCB5ID0gWihyLCBuKSA8PCAyLCBwID0gQSAtIHQgPj4+IDAgPCAyLCBIID0gWigoayA+Pj4gMSB8IDApIC0gMSB8IDAsIHIpIDw8IDIsIEogPSBrIC0gMSA+Pj4gMCA8IDM7IDsgKSB7CiAgICAgICAgICAgICAgICAgIGlmIChnID0gaSArIHkgfCAwLCBuID0gZVtnICsgKHIgPDwgMikgPj4gMl0sIEEgPSBlW2cgPj4gMl0sIGsgPSBlW2kgPj4gMl0gLSAoKG4gKyBBIHwgMCkgKyAyID4+IDIpIHwgMCwgZVtsID4+IDJdID0gayArIEEsIGEgPSAxLCBBID0gMSwgIXApCiAgICAgICAgICAgICAgICAgICAgZm9yICg7IEIgPSBlWyhaKEEsIHIpIDw8IDIpICsgaSA+PiAyXSwgdSA9IEEgKyAxIHwgMCwgdCA9IGVbZyArIChaKHUsIHIpIDw8IDIpID4+IDJdLCBFID0gbCArIChhIDw8IDIpIHwgMCwgZVtFID4+IDJdID0gaywgbyA9IGssIGsgPSBCIC0gKChuICsgdCB8IDApICsgMiA+PiAyKSB8IDAsIGVbRSArIDQgPj4gMl0gPSAobyArIGsgPj4gMSkgKyBuLCBhID0gYSArIDIgfCAwLCBvID0gKEEgfCAwKSAhPSAobSB8IDApLCBBID0gdSwgbiA9IHQsICEhbzsgKQogICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICBlW2wgKyAoYSA8PCAyKSA+PiAyXSA9IGs7CiAgICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgICBpZiAoIXcpIHsKICAgICAgICAgICAgICAgICAgICAgIEEgPSBlW2kgKyBIID4+IDJdIC0gKG4gKyAxID4+IDEpIHwgMCwgZVtDID4+IDJdID0gKGsgKyBBID4+IDEpICsgbjsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIEEgPSBrICsgbiB8IDA7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKGVbdiA+PiAyXSA9IEEsIGsgPSAwLCBBID0gMCwgbiA9IDAsICFKKQogICAgICAgICAgICAgICAgICAgIGZvciAoOyBlWyhaKEEsIHIpIDw8IDIpICsgaSA+PiAyXSA9IGVbbCArIChBIDw8IDIpID4+IDJdLCB0ID0gQSB8IDEsIGVbKFoodCwgcikgPDwgMikgKyBpID4+IDJdID0gZVtsICsgKHQgPDwgMikgPj4gMl0sIHQgPSBBIHwgMiwgZVsoWih0LCByKSA8PCAyKSArIGkgPj4gMl0gPSBlW2wgKyAodCA8PCAyKSA+PiAyXSwgdCA9IEEgfCAzLCBlWyhaKHQsIHIpIDw8IDIpICsgaSA+PiAyXSA9IGVbbCArICh0IDw8IDIpID4+IDJdLCBBID0gQSArIDQgfCAwLCBuID0gbiArIDQgfCAwLCAoYyB8IDApICE9IChuIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgaWYgKGgpCiAgICAgICAgICAgICAgICAgICAgZm9yICg7IGVbKFooQSwgcikgPDwgMikgKyBpID4+IDJdID0gZVtsICsgKEEgPDwgMikgPj4gMl0sIEEgPSBBICsgMSB8IDAsIGsgPSBrICsgMSB8IDAsIChoIHwgMCkgIT0gKGsgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICBpZiAoaSA9IGkgKyA0IHwgMCwgcyA9IHMgKyAxIHwgMCwgKHMgfCAwKSA9PSAoZiB8IDApKQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBWNChBLCBpLCByLCBmLCBrKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDAsIHIgPSByIHwgMCwgZiA9IGYgfCAwLCBrID0gayB8IDA7CiAgICAgICAgICAgICAgdmFyIHQgPSAwLCBuID0gMCwgbCA9IDAsIGEgPSAwLCB1ID0gMCwgbyA9IDAsIGcgPSAwLCBoID0gMCwgcyA9IDAsIHcgPSAwLCBCID0gMCwgYyA9IDAsIHYgPSAwLCBDID0gMCwgbSA9IDAsIHkgPSAwLCBwID0gMCwgSCA9IDAsIEogPSAwLCBFID0gMCwgRCA9IDAsIFUgPSAwLCBQID0gMCwgeCA9IDAsIHogPSAwOwogICAgICAgICAgICAgIGMgPSBYIC0gMTYgfCAwLCBYID0gYzsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAoIXIpIHsKICAgICAgICAgICAgICAgICAgUShmLCAxLCAyMjE2OCwgMCk7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoeSA9IGVbciArIDE2ID4+IDJdLCB0ID0gZVtBICsgNzIgPj4gMl0sIHkgPj4+IDAgPCBkW3QgKyAxNiA+PiAyXSkgewogICAgICAgICAgICAgICAgICBRKGYsIDEsIDIxMTcyLCAwKTsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChuID0gZVtBICsgMTA0ID4+IDJdLCBsID0gWihuLCBlW0EgKyAxMDggPj4gMl0pLCBsID4+PiAwIDw9IGsgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgZVtjID4+IDJdID0gaywgZVtjICsgNCA+PiAyXSA9IGwgLSAxLCBRKGYsIDEsIDI4NzEyLCBjKSwgbiA9IDA7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAodSA9IChrID4+PiAwKSAvIChuID4+PiAwKSB8IDAsIGwgPSBrIC0gWih1LCBuKSB8IDAsIG4gPSBlW0EgKyA4NCA+PiAyXSArIFoobCwgZVtBICsgOTIgPj4gMl0pIHwgMCwgZVtyID4+IDJdID0gbiwgdCA9IGVbdCA+PiAyXSwgdCA9IG4gPj4+IDAgPiB0ID4+PiAwID8gbiA6IHQsIGVbciA+PiAyXSA9IHQsIG4gPSBlW0EgKyA4NCA+PiAyXSArIFooZVtBICsgOTIgPj4gMl0sIGwgKyAxIHwgMCkgfCAwLCBlW3IgKyA4ID4+IDJdID0gbiwgbCA9IGVbZVtBICsgNzIgPj4gMl0gKyA4ID4+IDJdLCBuID0gbiA+Pj4gMCA8IGwgPj4+IDAgPyBuIDogbCwgZVtyICsgOCA+PiAyXSA9IG4sIGwgPSBlW0EgKyA4OCA+PiAyXSArIFoodSwgZVtBICsgOTYgPj4gMl0pIHwgMCwgZVtyICsgNCA+PiAyXSA9IGwsIGcgPSBlW2VbQSArIDcyID4+IDJdICsgNCA+PiAyXSwgbCA9IGwgPj4+IDAgPiBnID4+PiAwID8gbCA6IGcsIGVbciArIDQgPj4gMl0gPSBsLCB1ID0gZVtBICsgODggPj4gMl0gKyBaKGVbQSArIDk2ID4+IDJdLCB1ICsgMSB8IDApIHwgMCwgZVtyICsgMTIgPj4gMl0gPSB1LCBnID0gZVtlW0EgKyA3MiA+PiAyXSArIDEyID4+IDJdLCB1ID0gdSA+Pj4gMCA8IGcgPj4+IDAgPyB1IDogZywgZVtyICsgMTIgPj4gMl0gPSB1LCBnID0gZVtBICsgNzIgPj4gMl0sIGggPSBlW2cgKyAxNiA+PiAyXSwgaCkKICAgICAgICAgICAgICAgICAgZm9yIChwID0gdSAtIDEgfCAwLCBKID0gKHUgPj4gMzEpIC0gIXUgfCAwLCBIID0gbiAtIDEgfCAwLCBFID0gKG4gPj4gMzEpIC0gIW4gfCAwLCBuID0gbCwgRCA9IG4gLSAxIHwgMCwgVSA9IChuID4+IDMxKSAtICFuIHwgMCwgbiA9IHQsIFAgPSBuIC0gMSB8IDAsIHggPSAobiA+PiAzMSkgLSAhbiB8IDAsIHogPSBlW2cgKyAyNCA+PiAyXSwgbiA9IGVbciArIDI0ID4+IDJdOyB1ID0gZVsoeiArIFoodywgNTIpIHwgMCkgKyA0MCA+PiAyXSwgZVtuICsgNDAgPj4gMl0gPSB1LCBnID0gZVtuID4+IDJdLCB0ID0gZyArIFAgfCAwLCBDID0gZyA+PiAzMSwgYSA9IEMgKyB4IHwgMCwgcyA9IHowKHQsIHQgPj4+IDAgPCBnID4+PiAwID8gYSArIDEgfCAwIDogYSwgZywgQyksIGVbbiArIDE2ID4+IDJdID0gcywgbyA9IGVbbiArIDQgPj4gMl0sIGwgPSBvICsgRCB8IDAsIEIgPSBvID4+IDMxLCB0ID0gQiArIFUgfCAwLCB0ID0gejAobCwgbCA+Pj4gMCA8IG8gPj4+IDAgPyB0ICsgMSB8IDAgOiB0LCBvLCBCKSwgZVtuICsgMjAgPj4gMl0gPSB0LCBhID0gdCwgbCA9IHUgJiAzMSwgKHUgJiA2MykgPj4+IDAgPj0gMzIgPyAodCA9IC0xIDw8IGwsIGwgPSAwKSA6ICh0ID0gKDEgPDwgbCkgLSAxICYgLTEgPj4+IDMyIC0gbCwgbCA9IC0xIDw8IGwsIHQgPSB0IHwgbCksIG0gPSBsIC0gYSB8IDAsIHYgPSB0IC0gKChhID4+IDMxKSArIChsID4+PiAwIDwgYSA+Pj4gMCkgfCAwKSB8IDAsIGEgPSB1ICYgMzEsICh1ICYgNjMpID4+PiAwID49IDMyID8gdiA9IHYgPj4gYSA6IHYgPSAoKDEgPDwgYSkgLSAxICYgdikgPDwgMzIgLSBhIHwgbSA+Pj4gYSwgYSA9IEIgKyBKIHwgMCwgbSA9IG8gKyBwIHwgMCwgYSA9IG0gPj4+IDAgPCBwID4+PiAwID8gYSArIDEgfCAwIDogYSwgbyA9IHowKG0sIGEsIG8sIEIpLCBCID0gbCAtIG8gfCAwLCBhID0gdCAtICgobyA+PiAzMSkgKyAobCA+Pj4gMCA8IG8gPj4+IDApIHwgMCkgfCAwLCBvID0gdSAmIDMxLCAodSAmIDYzKSA+Pj4gMCA+PSAzMiA/IGEgPSBhID4+IG8gOiBhID0gKCgxIDw8IG8pIC0gMSAmIGEpIDw8IDMyIC0gbyB8IEIgPj4+IG8sIGVbbiArIDEyID4+IDJdID0gdiAtIGEsIG8gPSBsIC0gcyB8IDAsIHMgPSB0IC0gKChzID4+IDMxKSArIChsID4+PiAwIDwgcyA+Pj4gMCkgfCAwKSB8IDAsIGEgPSBvLCBvID0gdSAmIDMxLCAodSAmIDYzKSA+Pj4gMCA+PSAzMiA/IHMgPSBzID4+IG8gOiBzID0gKCgxIDw8IG8pIC0gMSAmIHMpIDw8IDMyIC0gbyB8IGEgPj4+IG8sIG8gPSB0LCB0ID0gQyArIEUgfCAwLCBhID0gZyArIEggfCAwLCB0ID0gYSA+Pj4gMCA8IEggPj4+IDAgPyB0ICsgMSB8IDAgOiB0LCB0ID0gejAoYSwgdCwgZywgQyksIGcgPSBsIC0gdCB8IDAsIGwgPSBvIC0gKCh0ID4+IDMxKSArICh0ID4+PiAwID4gbCA+Pj4gMCkgfCAwKSB8IDAsIHQgPSB1ICYgMzEsICh1ICYgNjMpID4+PiAwID49IDMyID8gdCA9IGwgPj4gdCA6IHQgPSAoKDEgPDwgdCkgLSAxICYgbCkgPDwgMzIgLSB0IHwgZyA+Pj4gdCwgZVtuICsgOCA+PiAyXSA9IHMgLSB0LCBuID0gbiArIDUyIHwgMCwgdyA9IHcgKyAxIHwgMCwgKHcgfCAwKSAhPSAoaCB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgaWYgKGggPj4+IDAgPCB5ID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgIGZvciAobiA9IGVbciArIDI0ID4+IDJdOyB0ID0gWihoLCA1MiksIFIoZVsodCArIG4gfCAwKSArIDQ0ID4+IDJdKSwgbiA9IGVbciArIDI0ID4+IDJdLCBlWyh0ICsgbiB8IDApICsgNDQgPj4gMl0gPSAwLCBoID0gaCArIDEgfCAwLCBoID4+PiAwIDwgZFtyICsgMTYgPj4gMl07ICkKICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgIGVbciArIDE2ID4+IDJdID0gZVtlW0EgKyA3MiA+PiAyXSArIDE2ID4+IDJdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKG4gPSBlW0EgKyA3NiA+PiAyXSwgbiAmJiB5MShuKSwgdCA9IEUyKDEsIDM2KSwgZVtBICsgNzYgPj4gMl0gPSB0LCBuID0gMCwgIXQgfHwgKEJpKHIsIHQpLCBlW0EgKyA0NCA+PiAyXSA9IGssICFjMChlW0EgKyAxOTIgPj4gMl0sIDEyNSwgZikpKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgdCA9IGVbQSArIDE5MiA+PiAyXSwgayA9IGVbdCA+PiAyXSwgaCA9IGVbdCArIDggPj4gMl07CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIGlmIChrKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKG4gPSAxLCBsID0gayAmIDEsIChrIHwgMCkgPT0gMSkKICAgICAgICAgICAgICAgICAgICAgIGsgPSAwOwogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgZm9yICh1ID0gayAmIC0yLCB3ID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgayA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW4gfHwgKGsgPSAwLCAhKG8yW2VbaCA+PiAyXV0oQSwgaSwgZikgfCAwKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSAobzJbZVtoICsgNCA+PiAyXV0oQSwgaSwgZikgfCAwKSAhPSAwOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID0gaywgaCA9IGggKyA4IHwgMCwgdyA9IHcgKyAyIHwgMCwgKHUgfCAwKSA9PSAodyB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgayA9ICFuOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAobiA9IGwgPyAwIDogbiwgayB8ICFsIHx8IChuID0gKG8yW2VbaCA+PiAyXV0oQSwgaSwgZikgfCAwKSAhPSAwKSwgZVt0ID4+IDJdID0gMCwgbikKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgeTEoZVtBICsgNzIgPj4gMl0pLCBuID0gMCwgZVtBICsgNzIgPj4gMl0gPSAwOwogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZVt0ID4+IDJdID0gMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIG4gPSBMNChBLCByKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIFggPSBjICsgMTYgfCAwLCBuIHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBZNChBLCBpLCByLCBmLCBrLCB0LCBuKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDAsIHIgPSByIHwgMCwgZiA9IGYgfCAwLCBrID0gayB8IDAsIHQgPSB0IHwgMCwgbiA9IG4gfCAwOwogICAgICAgICAgICAgIHZhciBsID0gMCwgYSA9IDAsIHUgPSAwLCBvID0gMCwgZyA9IDAsIGggPSAwLCBzID0gMCwgdyA9IDAsIEIgPSAwLCBjID0gMCwgdiA9IDA7CiAgICAgICAgICAgICAgbCA9IFggLSAyMDggfCAwLCBYID0gbCwgbyA9IGVbQSArIDcyID4+IDJdOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGlmICghKCEoIWVbZVtBICsgMTU2ID4+IDJdICsgNTU5NiA+PiAyXSB8fCBlW0EgKyAxMDQgPj4gMl0gIT0gMSB8IGVbQSArIDEwOCA+PiAyXSAhPSAxKSB8IGVbQSArIDggPj4gMl0gPT0gOCkpIHsKICAgICAgICAgICAgICAgICAgUShuLCAxLCAyMTIxNiwgMCk7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBoID0gZVtpICsgMTYgPj4gMl07CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIGlmICghaCkKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICBpZiAodSA9IGVbQSArIDE2MCA+PiAyXSwgZyA9IGVbaSArIDI0ID4+IDJdLCBoID4+PiAwID49IDgpCiAgICAgICAgICAgICAgICAgICAgZm9yIChCID0gaCAmIC04OyBlWyhaKGEsIDUyKSArIGcgfCAwKSArIDQwID4+IDJdID0gdSwgZVsoWihhIHwgMSwgNTIpICsgZyB8IDApICsgNDAgPj4gMl0gPSB1LCBlWyhaKGEgfCAyLCA1MikgKyBnIHwgMCkgKyA0MCA+PiAyXSA9IHUsIGVbKFooYSB8IDMsIDUyKSArIGcgfCAwKSArIDQwID4+IDJdID0gdSwgZVsoWihhIHwgNCwgNTIpICsgZyB8IDApICsgNDAgPj4gMl0gPSB1LCBlWyhaKGEgfCA1LCA1MikgKyBnIHwgMCkgKyA0MCA+PiAyXSA9IHUsIGVbKFooYSB8IDYsIDUyKSArIGcgfCAwKSArIDQwID4+IDJdID0gdSwgZVsoWihhIHwgNywgNTIpICsgZyB8IDApICsgNDAgPj4gMl0gPSB1LCBhID0gYSArIDggfCAwLCBzID0gcyArIDggfCAwLCAoQiB8IDApICE9IChzIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgaWYgKGggPSBoICYgNywgIWgpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgZm9yICg7IGVbKFooYSwgNTIpICsgZyB8IDApICsgNDAgPj4gMl0gPSB1LCBhID0gYSArIDEgfCAwLCB3ID0gdyArIDEgfCAwLCAoaCB8IDApICE9ICh3IHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoIShyIHwgZiB8IGsgfCB0KSkgewogICAgICAgICAgICAgICAgICBRKG4sIDQsIDEwMzA1LCAwKSwgZVtBICsgMjggPj4gMl0gPSAwLCBlW0EgKyAzMiA+PiAyXSA9IDAsIHIgPSBlW0EgKyAxMDggPj4gMl0sIGVbQSArIDM2ID4+IDJdID0gZVtBICsgMTA0ID4+IDJdLCBlW0EgKyA0MCA+PiAyXSA9IHIsIGVbaSA+PiAyXSA9IGVbbyA+PiAyXSwgZVtpICsgNCA+PiAyXSA9IGVbbyArIDQgPj4gMl0sIGVbaSArIDggPj4gMl0gPSBlW28gKyA4ID4+IDJdLCBlW2kgKyAxMiA+PiAyXSA9IGVbbyArIDEyID4+IDJdLCBhID0gYXIoaSwgbik7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoKHIgfCAwKSA8IDApIHsKICAgICAgICAgICAgICAgICAgZVtsID4+IDJdID0gciwgUShuLCAxLCAyMzk1NywgbCksIGEgPSAwOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGEgPSBlW28gKyA4ID4+IDJdLCBhID4+PiAwIDwgciA+Pj4gMCkgewogICAgICAgICAgICAgICAgICBlW2wgKyAyMCA+PiAyXSA9IGEsIGVbbCArIDE2ID4+IDJdID0gciwgUShuLCAxLCAyNDQyNSwgbCArIDE2IHwgMCksIGEgPSAwOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYSA9IGVbbyA+PiAyXTsKICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgaWYgKGEgPj4+IDAgPiByID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgZVtsICsgMTk2ID4+IDJdID0gYSwgZVtsICsgMTkyID4+IDJdID0gciwgUShuLCAyLCAyNDc3NywgbCArIDE5MiB8IDApLCBlW0EgKyAyOCA+PiAyXSA9IDAsIHIgPSBlW28gPj4gMl07CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlW0EgKyAyOCA+PiAyXSA9IChyIC0gZVtBICsgODQgPj4gMl0gPj4+IDApIC8gZFtBICsgOTIgPj4gMl07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoZVtpID4+IDJdID0gciwgKGYgfCAwKSA8IDApIHsKICAgICAgICAgICAgICAgICAgZVtsICsgMzIgPj4gMl0gPSBmLCBRKG4sIDEsIDIzODkzLCBsICsgMzIgfCAwKSwgYSA9IDA7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAociA9IGVbbyArIDEyID4+IDJdLCByID4+PiAwIDwgZiA+Pj4gMCkgewogICAgICAgICAgICAgICAgICBlW2wgKyA1MiA+PiAyXSA9IHIsIGVbbCArIDQ4ID4+IDJdID0gZiwgUShuLCAxLCAyNDI1MiwgbCArIDQ4IHwgMCksIGEgPSAwOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgciA9IGVbbyArIDQgPj4gMl07CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIGlmIChyID4+PiAwID4gZiA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgIGVbbCArIDE4MCA+PiAyXSA9IHIsIGVbbCArIDE3NiA+PiAyXSA9IGYsIFEobiwgMiwgMjQ2MDIsIGwgKyAxNzYgfCAwKSwgZVtBICsgMzIgPj4gMl0gPSAwLCBmID0gZVtvICsgNCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVbQSArIDMyID4+IDJdID0gKGYgLSBlW0EgKyA4OCA+PiAyXSA+Pj4gMCkgLyBkW0EgKyA5NiA+PiAyXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChlW2kgKyA0ID4+IDJdID0gZiwgYSA9IDAsIChrIHwgMCkgPD0gMCkgewogICAgICAgICAgICAgICAgICBlW2wgKyA2NCA+PiAyXSA9IGssIFEobiwgMSwgMjM4MjcsIGwgLSAtNjQgfCAwKTsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChyID0gZVtvID4+IDJdLCByID4+PiAwID4gayA+Pj4gMCkgewogICAgICAgICAgICAgICAgICBlW2wgKyA4NCA+PiAyXSA9IHIsIGVbbCArIDgwID4+IDJdID0gaywgUShuLCAxLCAyNDY4OCwgbCArIDgwIHwgMCk7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByID0gZVtvICsgOCA+PiAyXTsKICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgaWYgKHIgPj4+IDAgPCBrID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgZVtsICsgMTY0ID4+IDJdID0gciwgZVtsICsgMTYwID4+IDJdID0gaywgUShuLCAyLCAyNDMzNywgbCArIDE2MCB8IDApLCBlW0EgKyAzNiA+PiAyXSA9IGVbQSArIDEwNCA+PiAyXSwgayA9IGVbbyArIDggPj4gMl07CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICByID0gZVtBICsgOTIgPj4gMl0sIHUgPSBrIC0gZVtBICsgODQgPj4gMl0gfCAwLCBnID0gdSwgZiA9IHIgKyB1IHwgMCwgaCA9IHIgPj4gMzEsIHUgPSBoICsgKHUgPj4gMzEpIHwgMCwgdSA9IGYgPj4+IDAgPCBnID4+PiAwID8gdSArIDEgfCAwIDogdSwgYyA9IEEsIHYgPSB6MChmIC0gMSB8IDAsIHUgLSAhZiB8IDAsIHIsIGgpLCBlW2MgKyAzNiA+PiAyXSA9IHY7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoZVtpICsgOCA+PiAyXSA9IGssICh0IHwgMCkgPD0gMCkgewogICAgICAgICAgICAgICAgICBlW2wgKyA5NiA+PiAyXSA9IHQsIFEobiwgMSwgMjM3NjAsIGwgKyA5NiB8IDApOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHIgPSBlW28gKyA0ID4+IDJdLCByID4+PiAwID4gdCA+Pj4gMCkgewogICAgICAgICAgICAgICAgICBlW2wgKyAxMTYgPj4gMl0gPSByLCBlW2wgKyAxMTIgPj4gMl0gPSB0LCBRKG4sIDEsIDI0NTEyLCBsICsgMTEyIHwgMCk7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByID0gZVtvICsgMTIgPj4gMl07CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIGlmIChyID4+PiAwIDwgdCA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgIGVbbCArIDE0OCA+PiAyXSA9IHIsIGVbbCArIDE0NCA+PiAyXSA9IHQsIFEobiwgMiwgMjQxNjMsIGwgKyAxNDQgfCAwKSwgZVtBICsgNDAgPj4gMl0gPSBlW0EgKyAxMDggPj4gMl0sIHQgPSBlW28gKyAxMiA+PiAyXTsKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIHIgPSBlW0EgKyA5NiA+PiAyXSwgayA9IHQgLSBlW0EgKyA4OCA+PiAyXSB8IDAsIG8gPSBrLCBmID0gciArIG8gfCAwLCB1ID0gciA+PiAzMSwgayA9IHUgKyAobyA+PiAzMSkgfCAwLCBrID0gZiA+Pj4gMCA8IG8gPj4+IDAgPyBrICsgMSB8IDAgOiBrLCBjID0gQSwgdiA9IHowKGYgLSAxIHwgMCwgayAtICFmIHwgMCwgciwgdSksIGVbYyArIDQwID4+IDJdID0gdjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChlW2kgKyAxMiA+PiAyXSA9IHQsIEZbQSArIDY4IHwgMF0gPSBJW0EgKyA2OCB8IDBdIHwgMiwgIWFyKGksIG4pKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgQSA9IGVbaSA+PiAyXSwgciA9IGVbaSArIDQgPj4gMl0sIGYgPSBlW2kgKyAxMiA+PiAyXSwgZVtsICsgMTM2ID4+IDJdID0gZVtpICsgOCA+PiAyXSwgZVtsICsgMTQwID4+IDJdID0gZiwgZVtsICsgMTI4ID4+IDJdID0gQSwgZVtsICsgMTMyID4+IDJdID0gciwgUShuLCA0LCAxNzIyMSwgbCArIDEyOCB8IDApLCBhID0gMTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIFggPSBsICsgMjA4IHwgMCwgYSB8IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gdHIoQSwgaSwgciwgZiwgaywgdCwgbiwgbCwgYSwgdSwgbywgZykgewogICAgICAgICAgICAgIHZhciBoID0gMCwgcyA9IDAsIHcgPSAwLCBCID0gMCwgYyA9IDAsIHYgPSAwLCBDID0gMCwgbSA9IDAsIHkgPSAwLCBwID0gMCwgSCA9IDAsIEogPSAwLCBFID0gMCwgRCA9IDAsIFUgPSAwLCBQID0gMCwgeCA9IDAsIHogPSAwLCBqID0gMCwgTyA9IDAsIHEgPSAwLCBmMiA9IDAsIG4yID0gMCwgZzIgPSAwLCB3MiA9IDA7CiAgICAgICAgICAgICAgaWYgKEggPSBlWyhlW2kgKyA3NiA+PiAyXSArIFoociwgNTY0NCkgfCAwKSArIDU1ODQgPj4gMl0sIEogPSBlW0EgKyAyNCA+PiAyXSwgcyA9IGVbaSArIDI0ID4+IDJdLCBoID0gKHIgPj4+IDApIC8gKHMgPj4+IDApIHwgMCwgciA9IGVbaSArIDQgPj4gMl0gKyBaKGVbaSArIDEyID4+IDJdLCByIC0gWihoLCBzKSB8IDApIHwgMCwgcyA9IGVbQSA+PiAyXSwgZVtmID4+IDJdID0gciA+Pj4gMCA+IHMgPj4+IDAgPyByIDogcywgcyA9IHIgKyBlW2kgKyAxMiA+PiAyXSB8IDAsIHIgPSByID4+PiAwID4gcyA+Pj4gMCA/IC0xIDogcywgcyA9IGVbQSArIDggPj4gMl0sIGVbayA+PiAyXSA9IHIgPj4+IDAgPCBzID4+PiAwID8gciA6IHMsIHIgPSBlW2kgKyA4ID4+IDJdICsgWihoLCBlW2kgKyAxNiA+PiAyXSkgfCAwLCBoID0gZVtBICsgNCA+PiAyXSwgZVt0ID4+IDJdID0gciA+Pj4gMCA+IGggPj4+IDAgPyByIDogaCwgaSA9IHIgKyBlW2kgKyAxNiA+PiAyXSB8IDAsIGkgPSBpID4+PiAwIDwgciA+Pj4gMCA/IC0xIDogaSwgciA9IGVbQSArIDEyID4+IDJdLCBlW24gPj4gMl0gPSBpID4+PiAwIDwgciA+Pj4gMCA/IGkgOiByLCBlW3UgPj4gMl0gPSAwLCBlW28gPj4gMl0gPSAwLCBlW2wgPj4gMl0gPSAyMTQ3NDgzNjQ3LCBlW2EgPj4gMl0gPSAyMTQ3NDgzNjQ3LCBlW0EgKyAxNiA+PiAyXSkKICAgICAgICAgICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICBpZiAoaSA9IGcgPyBlWyh6IDw8IDIpICsgZyA+PiAyXSA6IDAsIGggPSBlW0ogKyA0ID4+IDJdLCBDID0gaCAtIDEgfCAwLCB2ID0gZVtuID4+IDJdLCBzID0gQyArIHYgfCAwLCB5ID0gMCAtICFoIHwgMCwgciA9IHksIHYgPSBuMChzLCBzID4+PiAwIDwgdiA+Pj4gMCA/IHIgKyAxIHwgMCA6IHIsIGgsIDApLCBzID0gZVtKID4+IDJdLCBFID0gcyAtIDEgfCAwLCBCID0gZVtrID4+IDJdLCByID0gRSArIEIgfCAwLCBEID0gMCAtICFzIHwgMCwgdyA9IEQsIEIgPSBuMChyLCByID4+PiAwIDwgQiA+Pj4gMCA/IHcgKyAxIHwgMCA6IHcsIHMsIDApLCByID0geSwgdyA9IGVbdCA+PiAyXSwgQyA9IHcgKyBDIHwgMCwgQyA9IG4wKEMsIHcgPj4+IDAgPiBDID4+PiAwID8gciArIDEgfCAwIDogciwgaCwgMCksIGggPSBELCB5ID0gZVtmID4+IDJdLCByID0geSArIEUgfCAwLCBoID0gbjAociwgciA+Pj4gMCA8IHkgPj4+IDAgPyBoICsgMSB8IDAgOiBoLCBzLCAwKSwgciA9IGVbSCArIDQgPj4gMl0sIHIgPj4+IDAgPiBkW28gPj4gMl0gJiYgKGVbbyA+PiAyXSA9IHIsIHIgPSBlW0ggKyA0ID4+IDJdKSwgcikKICAgICAgICAgICAgICAgICAgICBmb3IgKE8gPSBIICsgOTQ0IHwgMCwgcSA9IEggKyA4MTIgfCAwLCB5ID0gdiAtIDEgfCAwLCBmMiA9IDAgLSAhdiB8IDAsIEUgPSBCIC0gMSB8IDAsIG4yID0gMCAtICFCIHwgMCwgRCA9IEMgLSAxIHwgMCwgZzIgPSAwIC0gIUMgfCAwLCBDID0gaCAtIDEgfCAwLCB3MiA9IDAgLSAhaCB8IDAsIFAgPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgaCA9IFAgPDwgMiwgcyA9IGVbaCArIE8gPj4gMl0sIHYgPSBlW2ggKyBxID4+IDJdLCBVID0gMCwgaSAmJiAoZVtpICsgNCA+PiAyXSA9IHMsIGVbaSA+PiAyXSA9IHYsIFUgPSBpICsgOCB8IDApLCByID0gciAtIDEgfCAwLCBpID0gdiArIHIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA+Pj4gMCA+IDMxIHx8IChoID0gZVtKID4+IDJdLCBoID4+PiAwID4gLTEgPj4+IGkgPj4+IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgICAgIEIgPSBlW2wgPj4gMl0sIGkgPSBoIDw8IGksIGVbbCA+PiAyXSA9IGkgPj4+IDAgPiBCID4+PiAwID8gQiA6IGk7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBpID0gciArIHMgfCAwOwogICAgICAgICAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA+Pj4gMCA+IDMxIHx8IChoID0gZVtKICsgNCA+PiAyXSwgaCA+Pj4gMCA+IC0xID4+PiBpID4+PiAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICBCID0gZVthID4+IDJdLCBpID0gaCA8PCBpLCBlW2EgPj4gMl0gPSBpID4+PiAwID4gQiA+Pj4gMCA/IEIgOiBpOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSAwLCBCID0gciAmIDMxLCAociAmIDYzKSA+Pj4gMCA+PSAzMiA/IChoID0gMSA8PCBCLCB3ID0gMCkgOiAodyA9IDEgPDwgQiwgaCA9IHcgLSAxICYgMSA+Pj4gMzIgLSBCKSwgeCA9IHcsIHcgPSB5ICsgeCB8IDAsIEIgPSBoLCBoID0gZjIgKyBoIHwgMCwgaCA9IHcgPj4+IDAgPCB5ID4+PiAwID8gaCArIDEgfCAwIDogaCwgbSA9IDAsIGMgPSB3LCB3ID0gciAmIDMxLCAociAmIDYzKSA+Pj4gMCA+PSAzMiA/IHAgPSBoID4+PiB3IHwgMCA6IHAgPSAoKDEgPDwgdykgLSAxICYgaCkgPDwgMzIgLSB3IHwgYyA+Pj4gdywgdyA9IHMgJiAzMSwgKHMgJiA2MykgPj4+IDAgPj0gMzIgPyAoaCA9IDEgPDwgdywgYyA9IDApIDogKGMgPSAxIDw8IHcsIGggPSBjIC0gMSAmIDEgPj4+IDMyIC0gdyksIGogPSBjLCBjID0gcCArIGogfCAwLCB3ID0gaCArIG0gfCAwLCB3ID0gKGMgPj4+IDAgPCBqID4+PiAwID8gdyArIDEgfCAwIDogdykgLSAhYyB8IDAsIGMgPSBjIC0gMSB8IDAsIGggPSBzICYgMzEsIChzICYgNjMpID4+PiAwID49IDMyID8gdyA9IHcgPj4+IGggfCAwIDogdyA9ICgoMSA8PCBoKSAtIDEgJiB3KSA8PCAzMiAtIGggfCBjID4+PiBoLCBoID0gQiArIGcyIHwgMCwgYyA9IEQgKyB4IHwgMCwgaCA9IGMgPj4+IDAgPCBEID4+PiAwID8gaCArIDEgfCAwIDogaCwgbSA9IHcsIHcgPSByICYgMzEsIChyICYgNjMpID4+PiAwID49IDMyID8gaCA9IGggPj4+IHcgfCAwIDogaCA9ICgoMSA8PCB3KSAtIDEgJiBoKSA8PCAzMiAtIHcgfCBjID4+PiB3LCBjID0gKGggfCAwKSAhPSAocCB8IDApID8gbSAtIChoID4+PiBzIHwgMCkgJiAtMSA+Pj4gcyA6IDAsIGggPSBCICsgbjIgfCAwLCBzID0gRSArIHggfCAwLCBoID0gcyA+Pj4gMCA8IEUgPj4+IDAgPyBoICsgMSB8IDAgOiBoLCB3ID0gMCwgbSA9IHMsIHMgPSByICYgMzEsIChyICYgNjMpID4+PiAwID49IDMyID8gbSA9IGggPj4+IHMgfCAwIDogbSA9ICgoMSA8PCBzKSAtIDEgJiBoKSA8PCAzMiAtIHMgfCBtID4+PiBzLCBzID0gdiAmIDMxLCAodiAmIDYzKSA+Pj4gMCA+PSAzMiA/IChoID0gMSA8PCBzLCBwID0gMCkgOiAocCA9IDEgPDwgcywgaCA9IHAgLSAxICYgMSA+Pj4gMzIgLSBzKSwgcyA9IG0gKyBwIHwgMCwgdyA9IGggKyB3IHwgMCwgaCA9IHMgLSAxIHwgMCwgcyA9IChzID4+PiAwIDwgcCA+Pj4gMCA/IHcgKyAxIHwgMCA6IHcpIC0gIXMgfCAwLCB3ID0gaCwgaCA9IHYgJiAzMSwgKHYgJiA2MykgPj4+IDAgPj0gMzIgPyBzID0gcyA+Pj4gaCB8IDAgOiBzID0gKCgxIDw8IGgpIC0gMSAmIHMpIDw8IDMyIC0gaCB8IHcgPj4+IGgsIGggPSBCICsgdzIgfCAwLCBCID0gQyArIHggfCAwLCBoID0gQiA+Pj4gMCA8IEMgPj4+IDAgPyBoICsgMSB8IDAgOiBoLCB3ID0gcywgcyA9IHIgJiAzMSwgKHIgJiA2MykgPj4+IDAgPj0gMzIgPyBoID0gaCA+Pj4gcyB8IDAgOiBoID0gKCgxIDw8IHMpIC0gMSAmIGgpIDw8IDMyIC0gcyB8IEIgPj4+IHMsIGggPSAoaCB8IDApICE9IChtIHwgMCkgPyB3IC0gKGggPj4+IHYgfCAwKSAmIC0xID4+PiB2IDogMCwgVSAmJiAoZVtVICsgNCA+PiAyXSA9IGMsIGVbVSA+PiAyXSA9IGgsIGkgPSBVICsgOCB8IDApLCBoID0gWihoLCBjKSwgaCA+Pj4gMCA+IGRbdSA+PiAyXSAmJiAoZVt1ID4+IDJdID0gaCksIFAgPSBQICsgMSB8IDAsICEoUCA+Pj4gMCA8IGRbSCArIDQgPj4gMl0pKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChKID0gSiArIDUyIHwgMCwgSCA9IEggKyAxMDgwIHwgMCwgeiA9IHogKyAxIHwgMCwgISh6ID4+PiAwIDwgZFtBICsgMTYgPj4gMl0pKQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIHJrKEEsIGksIHIsIGYpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIGkgPSBpIHwgMCwgciA9IHIgfCAwLCBmID0gZiB8IDA7CiAgICAgICAgICAgICAgdmFyIGsgPSAwLCB0ID0gMCwgbiA9IDAsIGwgPSAwLCBhID0gMCwgdSA9IDA7CiAgICAgICAgICAgICAgayA9IFggLSAxMTIgfCAwLCBYID0gaywgZVtrICsgMTA0ID4+IDJdID0gMDsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAoKHIgfCAwKSAhPSA4KSB7CiAgICAgICAgICAgICAgICAgIFEoZiwgMSwgNjU5NiwgMCksIFEoZiwgMSwgNjU5NiwgMCk7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoaDIoaSwgQSArIDIwNCB8IDAsIDIpLCBoMihpICsgMiB8IDAsIGsgKyAxMDggfCAwLCA0KSwgaDIoaSArIDYgfCAwLCBrICsgMTAwIHwgMCwgMSksIGgyKGkgKyA3IHwgMCwgayArIDEwNCB8IDAsIDEpLCByID0gZVtBICsgMjA0ID4+IDJdLCBhID0gZVtBICsgMTA0ID4+IDJdLCByID4+PiAwID49IFooYSwgZVtBICsgMTA4ID4+IDJdKSA+Pj4gMCkgewogICAgICAgICAgICAgICAgICBlW2sgKyA5NiA+PiAyXSA9IHIsIFEoZiwgMSwgMTc0NTQsIGsgKyA5NiB8IDApOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgbiA9IGVbQSArIDE1NiA+PiAyXSArIFoociwgNTY0NCkgfCAwLCBsID0gKHIgPj4+IDApIC8gKGEgPj4+IDApIHwgMCwgaSA9IGVbayArIDEwMCA+PiAyXTsKICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgaWYgKHQgPSBlW0EgKyA0NCA+PiAyXSwgKHQgfCAwKSA+PSAwICYgKHIgfCAwKSAhPSAodCB8IDApIHx8ICh0ID0gZVtuICsgNTU4OCA+PiAyXSArIDEgfCAwLCAodCB8IDApID09IChpIHwgMCkpKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIGVbayArIDg4ID4+IDJdID0gdCwgZVtrICsgODQgPj4gMl0gPSBpLCBlW2sgKyA4MCA+PiAyXSA9IHIsIFEoZiwgMSwgMTc0NzgsIGsgKyA4MCB8IDApLCBuID0gMDsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVbbiArIDU1ODggPj4gMl0gPSBpOwogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSBlW2sgKyAxMDggPj4gMl0sIGkgLSAxID4+PiAwIDw9IDEyKSB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoKGkgfCAwKSAhPSAxMikKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgIGVbayArIDQ4ID4+IDJdID0gMTIsIFEoZiwgMiwgMjMwMDEsIGsgKyA0OCB8IDApLCBpID0gZVtrICsgMTA4ID4+IDJdOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpIHx8IChRKGYsIDQsIDIxMjk3LCAwKSwgZVtBICsgNTYgPj4gMl0gPSAxKTsKICAgICAgICAgICAgICAgICAgICBrOiB7CiAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIEE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICBsOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IGVbbiArIDU1OTIgPj4gMl0sIGkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSBlW2sgKyAxMDAgPj4gMl0sIHQgPj4+IDAgPCBpID4+PiAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDM2ID4+IDJdID0gaSwgZVtrICsgMzIgPj4gMl0gPSB0LCBRKGYsIDEsIDg2NTEsIGsgKyAzMiB8IDApLCBlW0EgKyA1NiA+PiAyXSA9IDEsIG4gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSBlW2sgKyAxMDQgPj4gMl0sIHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IGVbayArIDEwNCA+PiAyXSwgIXQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID0gKElbQSArIDY4IHwgMF0gPj4+IDQgJiAxKSArIHQgfCAwLCBlW2sgKyAxMDQgPj4gMl0gPSBpLCB0ID0gZVtrICsgMTAwID4+IDJdLCB1ID0gZVtuICsgNTU5MiA+PiAyXSwgdCA+Pj4gMCA+IHUgLSAxID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgNCA+PiAyXSA9IHUsIGVbayA+PiAyXSA9IHQsIFEoZiwgMSwgODU1MiwgayksIGVbQSArIDU2ID4+IDJdID0gMSwgbiA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA+Pj4gMCA8PSB0ID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMjAgPj4gMl0gPSBpLCBlW2sgKyAxNiA+PiAyXSA9IHQsIFEoZiwgMSwgODc1MSwgayArIDE2IHwgMCksIGVbQSArIDU2ID4+IDJdID0gMSwgbiA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlW24gKyA1NTkyID4+IDJdID0gaTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlmICgoZVtrICsgMTAwID4+IDJdICsgMSB8IDApICE9IChpIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICBGW0EgKyA2OCB8IDBdID0gSVtBICsgNjggfCAwXSB8IDE7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGkgPSBlW2sgKyAxMDggPj4gMl0sIGVbQSArIDggPj4gMl0gPSAxNiwgZVtBICsgMjQgPj4gMl0gPSBlW0EgKyA1NiA+PiAyXSA/IDAgOiBpIC0gMTIgfCAwLCBpID0gZVtBICsgNDQgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgazogewogICAgICAgICAgICAgICAgICAgICAgaWYgKChpIHwgMCkgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbiA9IDQsIGkgPSByIC0gWihsLCBhKSB8IDAsIGkgPj4+IDAgPCBkW0EgKyAyOCA+PiAyXSB8IGkgPj4+IDAgPj0gZFtBICsgMzYgPj4gMl0gfCBsID4+PiAwIDwgZFtBICsgMzIgPj4gMl0gfHwgKG4gPSAobCA+Pj4gMCA+PSBkW0EgKyA0MCA+PiAyXSkgPDwgMiksIEZbQSArIDY4IHwgMF0gPSBJW0EgKyA2OCB8IDBdICYgMjUxIHwgbjsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIEZbQSArIDY4IHwgMF0gPSBJW0EgKyA2OCB8IDBdICYgMjUxIHwgKChpIHwgMCkgIT0gZVtBICsgMjA0ID4+IDJdKSA8PCAyOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAobiA9IDEsIGkgPSBlW0EgKyAyMDAgPj4gMl0sICFpKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICBpZiAodCA9IGVbaSArIDQwID4+IDJdLCByID0gZVtBICsgMjA0ID4+IDJdLCBsID0gdCArIFoociwgNDApIHwgMCwgZVtsID4+IDJdID0gciwgYSA9IGVbayArIDEwMCA+PiAyXSwgZVtsICsgMTIgPj4gMl0gPSBhLCBpID0gZVtrICsgMTA0ID4+IDJdLCBpKSB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtsICsgNCA+PiAyXSA9IGksIGkgPSBlW2sgKyAxMDQgPj4gMl0sIGVbbCArIDggPj4gMl0gPSBpLCByID0gZVtsICsgMTYgPj4gMl0sICFyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID0gRTIoaSwgMjQpLCBlWyhlW2VbQSArIDIwMCA+PiAyXSArIDQwID4+IDJdICsgWihlW0EgKyAyMDQgPj4gMl0sIDQwKSB8IDApICsgMTYgPj4gMl0gPSBpLCBpKQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAwLCBRKGYsIDEsIDE2NDkzLCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlmIChpID0gbzAociwgWihpLCAyNCkpLCByID0gZVtlW0EgKyAyMDAgPj4gMl0gKyA0MCA+PiAyXSArIFooZVtBICsgMjA0ID4+IDJdLCA0MCkgfCAwLCAhaSkgewogICAgICAgICAgICAgICAgICAgICAgICBSKGVbciArIDE2ID4+IDJdKSwgbiA9IDAsIGVbKGVbZVtBICsgMjAwID4+IDJdICsgNDAgPj4gMl0gKyBaKGVbQSArIDIwNCA+PiAyXSwgNDApIHwgMCkgKyAxNiA+PiAyXSA9IDAsIFEoZiwgMSwgMTY0OTMsIDApOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgZVtyICsgMTYgPj4gMl0gPSBpOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSBlW2wgKyAxNiA+PiAyXSwgIWkpIHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChlW2wgKyA4ID4+IDJdID0gMTAsIGkgPSBFMigxMCwgMjQpLCB0ID0gZVtlW0EgKyAyMDAgPj4gMl0gKyA0MCA+PiAyXSwgciA9IGVbQSArIDIwNCA+PiAyXSwgbCA9IHQgKyBaKHIsIDQwKSB8IDAsIGVbbCArIDE2ID4+IDJdID0gaSwgIWkpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICBhID0gZVtrICsgMTAwID4+IDJdOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAociA9IFoociwgNDApICsgdCB8IDAsIGRbciArIDggPj4gMl0gPiBhID4+PiAwKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHIsIHIgPSBhICsgMSB8IDAsIGVbdCArIDggPj4gMl0gPSByLCBpID0gbzAoaSwgWihyLCAyNCkpLCByID0gZVtlW0EgKyAyMDAgPj4gMl0gKyA0MCA+PiAyXSArIFooZVtBICsgMjA0ID4+IDJdLCA0MCkgfCAwLCAhaSkgewogICAgICAgICAgICAgICAgICAgICAgUihlW3IgKyAxNiA+PiAyXSksIG4gPSAwLCBBID0gZVtlW0EgKyAyMDAgPj4gMl0gKyA0MCA+PiAyXSArIFooZVtBICsgMjA0ID4+IDJdLCA0MCkgfCAwLCBlW0EgKyA4ID4+IDJdID0gMCwgZVtBICsgMTYgPj4gMl0gPSAwLCBRKGYsIDEsIDE2NDkzLCAwKTsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVbciArIDE2ID4+IDJdID0gaTsKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVbayArIDY0ID4+IDJdID0gaSwgUShmLCAxLCAyMzI3MCwgayAtIC02NCB8IDApLCBuID0gMDsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIG4gPSAwLCBlW2wgKyA4ID4+IDJdID0gMCwgUShmLCAxLCAxNjQ5MywgMCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBYID0gayArIDExMiB8IDAsIG4gfCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIEg0KEEsIGksIHIsIGYsIGssIHQsIG4pIHsKICAgICAgICAgICAgICB2YXIgbCA9IDAsIGEgPSAwLCB1ID0gMCwgbyA9IDAsIGcgPSAwLCBoID0gMCwgcyA9IDAsIHcgPSAwLCBCID0gMDsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAocyA9IFooaywgMyksIGwgPSBlW2kgPj4gMl0gPj4+IHMgfCAwLCBsICYgMjA5NzE2OCB8fCAobCA9IGwgJiA0OTUsICFsKSkKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIHcgPSBBICsgMjggfCAwLCBnID0gdyArIChJW2wgKyBlW0EgKyAxMDggPj4gMl0gfCAwXSA8PCAyKSB8IDAsIGVbQSArIDEwNCA+PiAyXSA9IGcsIG8gPSBlW2cgPj4gMl0sIGEgPSBlW28gPj4gMl0sIGwgPSBlW0EgKyA0ID4+IDJdIC0gYSB8IDAsIGVbQSArIDQgPj4gMl0gPSBsLCB1ID0gZVtBID4+IDJdOwogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICBpZiAodSA+Pj4gMTYgPj4+IDAgPCBhID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgZm9yIChoID0gZVtvICsgNCA+PiAyXSwgZVtBICsgNCA+PiAyXSA9IGEsIGwgPSBsID4+PiAwIDwgYSA+Pj4gMCwgZVtnID4+IDJdID0gZVtvICsgKGwgPyA4IDogMTIpID4+IDJdLCBvID0gbCA/IGggOiAhaCwgbCA9IGVbQSArIDggPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsKQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gZVtBICsgMTYgPj4gMl0sIGggPSBsICsgMSB8IDAsIGcgPSBJW2wgKyAxIHwgMF0sIElbbCB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnID4+PiAwID49IDE0NCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtBICsgMTIgPj4gMl0gPSBlW0EgKyAxMiA+PiAyXSArIDEsIHUgPSB1ICsgNjUyODAgfCAwLCBsID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGVbQSArIDE2ID4+IDJdID0gaCwgdSA9IChnIDw8IDkpICsgdSB8IDAsIGwgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZVtBICsgMTYgPj4gMl0gPSBoLCBsID0gOCwgdSA9IChnIDw8IDgpICsgdSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGwgLSAxIHwgMCwgZVtBICsgOCA+PiAyXSA9IGwsIHUgPSB1IDw8IDEsIGVbQSA+PiAyXSA9IHUsIGEgPSBhIDw8IDEsIGVbQSArIDQgPj4gMl0gPSBhLCAhKGEgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBsID0gYTsKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmICh1ID0gdSAtIChhIDw8IDE2KSB8IDAsIGVbQSA+PiAyXSA9IHUsICEobCAmIDMyNzY4KSkgewogICAgICAgICAgICAgICAgICAgIGZvciAoaCA9IGVbbyArIDQgPj4gMl0sIGEgPSBsID4+PiAwIDwgYSA+Pj4gMCwgZVtnID4+IDJdID0gZVtvICsgKGEgPyAxMiA6IDgpID4+IDJdLCBvID0gYSA/ICFoIDogaCwgYSA9IGVbQSArIDggPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhKQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhID0gZVtBICsgMTYgPj4gMl0sIGggPSBhICsgMSB8IDAsIGcgPSBJW2EgKyAxIHwgMF0sIElbYSB8IDBdID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnID4+PiAwID49IDE0NCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtBICsgMTIgPj4gMl0gPSBlW0EgKyAxMiA+PiAyXSArIDEsIHUgPSB1ICsgNjUyODAgfCAwLCBhID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGVbQSArIDE2ID4+IDJdID0gaCwgdSA9IChnIDw8IDkpICsgdSB8IDAsIGEgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZVtBICsgMTYgPj4gMl0gPSBoLCBhID0gOCwgdSA9IChnIDw8IDgpICsgdSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA9IGEgLSAxIHwgMCwgZVtBICsgOCA+PiAyXSA9IGEsIHUgPSB1IDw8IDEsIGVbQSA+PiAyXSA9IHUsIGwgPSBsIDw8IDEsIGVbQSArIDQgPj4gMl0gPSBsLCAhKGwgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIG8gPSBlW28gKyA0ID4+IDJdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICBpZiAoIW8pCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgQiA9IGkgLSA0IHwgMCwgYSA9IGVbaSA+PiAyXSwgbyA9IGVbaSArIDQgPj4gMl0gPj4+IHMgKyAxNyAmIDQgfCAoZVtCID4+IDJdID4+PiBzICsgMTkgJiAxIHwgKGEgPj4+IHMgKyAxNiAmIDY0IHwgYSA+Pj4gcyAmIDE3MCB8IGEgPj4+IChrID8gcyArIDEyIHwgMCA6IDE0KSAmIDE2KSksIGggPSB3ICsgKElbbyArIDM5NTIwIHwgMF0gPDwgMikgfCAwLCBlW0EgKyAxMDQgPj4gMl0gPSBoLCBnID0gZVtoID4+IDJdLCBhID0gZVtnID4+IDJdLCBsID0gbCAtIGEgfCAwLCBlW0EgKyA0ID4+IDJdID0gbCwgdyA9IElbbyArIDM5Nzc2IHwgMF07CiAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICBpZiAodSA+Pj4gMTYgPj4+IDAgPCBhID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICBmb3IgKG8gPSBlW2cgKyA0ID4+IDJdLCBlW0EgKyA0ID4+IDJdID0gYSwgbCA9IGwgPj4+IDAgPCBhID4+PiAwLCBlW2ggPj4gMl0gPSBlW2cgKyAobCA/IDggOiAxMikgPj4gMl0sIGcgPSBsID8gbyA6ICFvLCBsID0gZVtBICsgOCA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgazogewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGVbQSArIDE2ID4+IDJdLCBoID0gbCArIDEgfCAwLCBvID0gSVtsICsgMSB8IDBdLCBJW2wgfCAwXSA9PSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvID4+PiAwID49IDE0NCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW0EgKyAxMiA+PiAyXSA9IGVbQSArIDEyID4+IDJdICsgMSwgdSA9IHUgKyA2NTI4MCB8IDAsIGwgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtBICsgMTYgPj4gMl0gPSBoLCB1ID0gKG8gPDwgOSkgKyB1IHwgMCwgbCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBlW0EgKyAxNiA+PiAyXSA9IGgsIGwgPSA4LCB1ID0gKG8gPDwgOCkgKyB1IHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IGwgLSAxIHwgMCwgZVtBICsgOCA+PiAyXSA9IGwsIHUgPSB1IDw8IDEsIGVbQSA+PiAyXSA9IHUsIGEgPSBhIDw8IDEsIGVbQSArIDQgPj4gMl0gPSBhLCAhKGEgPj4+IDAgPCAzMjc2OCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAobyA9IHUgLSAoYSA8PCAxNikgfCAwLCBlW0EgPj4gMl0gPSBvLCAhKGwgJiAzMjc2OCkpIHsKICAgICAgICAgICAgICAgICAgICAgIGZvciAodSA9IGVbZyArIDQgPj4gMl0sIGEgPSBsID4+PiAwIDwgYSA+Pj4gMCwgZVtoID4+IDJdID0gZVtnICsgKGEgPyAxMiA6IDgpID4+IDJdLCBnID0gYSA/ICF1IDogdSwgdSA9IGVbQSArIDggPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGs6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHUgPSBlW0EgKyAxNiA+PiAyXSwgaCA9IHUgKyAxIHwgMCwgYSA9IElbdSArIDEgfCAwXSwgSVt1IHwgMF0gPT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA+Pj4gMCA+PSAxNDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtBICsgMTIgPj4gMl0gPSBlW0EgKyAxMiA+PiAyXSArIDEsIG8gPSBvICsgNjUyODAgfCAwLCB1ID0gODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbQSArIDE2ID4+IDJdID0gaCwgbyA9IChhIDw8IDkpICsgbyB8IDAsIHUgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgZVtBICsgMTYgPj4gMl0gPSBoLCB1ID0gOCwgbyA9IChhIDw8IDgpICsgbyB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHUgPSB1IC0gMSB8IDAsIGVbQSArIDggPj4gMl0gPSB1LCBvID0gbyA8PCAxLCBlW0EgPj4gMl0gPSBvLCBsID0gbCA8PCAxLCBlW0EgKyA0ID4+IDJdID0gbCwgIShsID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZyA9IGVbZyArIDQgPj4gMl07CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKGVbciA+PiAyXSA9IChnIHwgMCkgPT0gKHcgfCAwKSA/IGYgOiAwIC0gZiB8IDAsIGVbQiA+PiAyXSA9IGVbQiA+PiAyXSB8IDMyIDw8IHMsIHIgPSBnIF4gdywgZVtpID4+IDJdID0gZVtpID4+IDJdIHwgKHIgPDwgMTkgfCAxNikgPDwgcywgZVtpICsgNCA+PiAyXSA9IGVbaSArIDQgPj4gMl0gfCA4IDw8IHMsIGsgfCBuIHx8IChBID0gaSAtICh0IDw8IDIpIHwgMCwgZVtBICsgNCA+PiAyXSA9IGVbQSArIDQgPj4gMl0gfCAzMjc2OCwgZVtBID4+IDJdID0gZVtBID4+IDJdIHwgciA8PCAzMSB8IDY1NTM2LCBBID0gQSAtIDQgfCAwLCBlW0EgPj4gMl0gPSBlW0EgPj4gMl0gfCAxMzEwNzIpLCAoayB8IDApICE9IDMpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgQSA9ICh0IDw8IDIpICsgaSB8IDAsIGVbQSArIDQgPj4gMl0gPSBlW0EgKyA0ID4+IDJdIHwgMSwgZVtBID4+IDJdID0gZVtBID4+IDJdIHwgciA8PCAxOCB8IDIsIEEgPSBBIC0gNCB8IDAsIGVbQSA+PiAyXSA9IGVbQSA+PiAyXSB8IDQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlW2kgPj4gMl0gPSBlW2kgPj4gMl0gfCAyMDk3MTUyIDw8IHM7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIFg0KEEsIGksIHIsIGYsIGssIHQpIHsKICAgICAgICAgICAgICB2YXIgbiA9IDAsIGwgPSAwLCBhID0gMCwgdSA9IDAsIG8gPSAwLCBnID0gMCwgaCA9IDAsIHMgPSAwLCB3ID0gMDsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAoaCA9IFooaywgMyksIG4gPSBlW2kgPj4gMl0gPj4+IGggfCAwLCBuICYgMjA5NzE2OCkKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIHMgPSBBICsgMjggfCAwLCBvID0gcyArIChJW2VbQSArIDEwOCA+PiAyXSArIChuICYgNDk1KSB8IDBdIDw8IDIpIHwgMCwgZVtBICsgMTA0ID4+IDJdID0gbywgdSA9IGVbbyA+PiAyXSwgbCA9IGVbdSA+PiAyXSwgbiA9IGVbQSArIDQgPj4gMl0gLSBsIHwgMCwgZVtBICsgNCA+PiAyXSA9IG4sIGEgPSBlW0EgPj4gMl07CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIGlmIChhID4+PiAxNiA+Pj4gMCA8IGwgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICBmb3IgKGcgPSBlW3UgKyA0ID4+IDJdLCBlW0EgKyA0ID4+IDJdID0gbCwgbiA9IG4gPj4+IDAgPCBsID4+PiAwLCBlW28gPj4gMl0gPSBlW3UgKyAobiA/IDggOiAxMikgPj4gMl0sIHUgPSBuID8gZyA6ICFnLCBuID0gZVtBICsgOCA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4pCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPSBlW0EgKyAxNiA+PiAyXSwgZyA9IG4gKyAxIHwgMCwgbyA9IElbbiArIDEgfCAwXSwgSVtuIHwgMF0gPT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG8gPj4+IDAgPj0gMTQ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW0EgKyAxMiA+PiAyXSA9IGVbQSArIDEyID4+IDJdICsgMSwgYSA9IGEgKyA2NTI4MCB8IDAsIG4gPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgZVtBICsgMTYgPj4gMl0gPSBnLCBhID0gKG8gPDwgOSkgKyBhIHwgMCwgbiA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlW0EgKyAxNiA+PiAyXSA9IGcsIG4gPSA4LCBhID0gKG8gPDwgOCkgKyBhIHwgMDsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlmIChuID0gbiAtIDEgfCAwLCBlW0EgKyA4ID4+IDJdID0gbiwgYSA9IGEgPDwgMSwgZVtBID4+IDJdID0gYSwgbCA9IGwgPDwgMSwgZVtBICsgNCA+PiAyXSA9IGwsICEobCA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIG4gPSBsOwogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKGEgPSBhIC0gKGwgPDwgMTYpIHwgMCwgZVtBID4+IDJdID0gYSwgIShuICYgMzI3NjgpKSB7CiAgICAgICAgICAgICAgICAgICAgZm9yIChnID0gZVt1ICsgNCA+PiAyXSwgbCA9IG4gPj4+IDAgPCBsID4+PiAwLCBlW28gPj4gMl0gPSBlW3UgKyAobCA/IDEyIDogOCkgPj4gMl0sIHUgPSBsID8gIWcgOiBnLCBsID0gZVtBICsgOCA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBlW0EgKyAxNiA+PiAyXSwgZyA9IGwgKyAxIHwgMCwgbyA9IElbbCArIDEgfCAwXSwgSVtsIHwgMF0gPT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG8gPj4+IDAgPj0gMTQ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW0EgKyAxMiA+PiAyXSA9IGVbQSArIDEyID4+IDJdICsgMSwgYSA9IGEgKyA2NTI4MCB8IDAsIGwgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgZVtBICsgMTYgPj4gMl0gPSBnLCBhID0gKG8gPDwgOSkgKyBhIHwgMCwgbCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlW0EgKyAxNiA+PiAyXSA9IGcsIGwgPSA4LCBhID0gKG8gPDwgOCkgKyBhIHwgMDsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gbCAtIDEgfCAwLCBlW0EgKyA4ID4+IDJdID0gbCwgYSA9IGEgPDwgMSwgZVtBID4+IDJdID0gYSwgbiA9IG4gPDwgMSwgZVtBICsgNCA+PiAyXSA9IG4sICEobiA+Pj4gMCA8IDMyNzY4KSkKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgdSA9IGVbdSArIDQgPj4gMl07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoIXUpCiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB1ID0gcywgcyA9IGkgLSA0IHwgMCwgbCA9IGVbaSA+PiAyXSwgdyA9IGVbaSArIDQgPj4gMl0gPj4+IGggKyAxNyAmIDQgfCAoZVtzID4+IDJdID4+PiBoICsgMTkgJiAxIHwgKGwgPj4+IGggKyAxNiAmIDY0IHwgbCA+Pj4gaCAmIDE3MCB8IGwgPj4+IChrID8gaCArIDEyIHwgMCA6IDE0KSAmIDE2KSksIGcgPSB1ICsgKElbdyArIDM5NTIwIHwgMF0gPDwgMikgfCAwLCBlW0EgKyAxMDQgPj4gMl0gPSBnLCBvID0gZVtnID4+IDJdLCBsID0gZVtvID4+IDJdLCBuID0gbiAtIGwgfCAwLCBlW0EgKyA0ID4+IDJdID0gbjsKICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgaWYgKGEgPj4+IDE2ID4+PiAwIDwgbCA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgIGZvciAodSA9IGVbbyArIDQgPj4gMl0sIGVbQSArIDQgPj4gMl0gPSBsLCBuID0gbiA+Pj4gMCA8IGwgPj4+IDAsIGVbZyA+PiAyXSA9IGVbbyArIChuID8gOCA6IDEyKSA+PiAyXSwgbyA9IG4gPyB1IDogIXUsIG4gPSBlW0EgKyA4ID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgICAgICBpZiAobikKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9IGVbQSArIDE2ID4+IDJdLCBnID0gbiArIDEgfCAwLCB1ID0gSVtuICsgMSB8IDBdLCBJW24gfCAwXSA9PSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodSA+Pj4gMCA+PSAxNDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbQSArIDEyID4+IDJdID0gZVtBICsgMTIgPj4gMl0gKyAxLCBhID0gYSArIDY1MjgwIHwgMCwgbiA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBlW0EgKyAxNiA+PiAyXSA9IGcsIGEgPSAodSA8PCA5KSArIGEgfCAwLCBuID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVbQSArIDE2ID4+IDJdID0gZywgbiA9IDgsIGEgPSAodSA8PCA4KSArIGEgfCAwOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPSBuIC0gMSB8IDAsIGVbQSArIDggPj4gMl0gPSBuLCBhID0gYSA8PCAxLCBlW0EgPj4gMl0gPSBhLCBsID0gbCA8PCAxLCBlW0EgKyA0ID4+IDJdID0gbCwgIShsID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAodSA9IGEgLSAobCA8PCAxNikgfCAwLCBlW0EgPj4gMl0gPSB1LCAhKG4gJiAzMjc2OCkpIHsKICAgICAgICAgICAgICAgICAgICBmb3IgKGEgPSBlW28gKyA0ID4+IDJdLCBsID0gbiA+Pj4gMCA8IGwgPj4+IDAsIGVbZyA+PiAyXSA9IGVbbyArIChsID8gMTIgOiA4KSA+PiAyXSwgbyA9IGwgPyAhYSA6IGEsIGEgPSBlW0EgKyA4ID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSkKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA9IGVbQSArIDE2ID4+IDJdLCBnID0gYSArIDEgfCAwLCBsID0gSVthICsgMSB8IDBdLCBJW2EgfCAwXSA9PSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA+Pj4gMCA+PSAxNDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbQSArIDEyID4+IDJdID0gZVtBICsgMTIgPj4gMl0gKyAxLCB1ID0gdSArIDY1MjgwIHwgMCwgYSA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBlW0EgKyAxNiA+PiAyXSA9IGcsIHUgPSAobCA8PCA5KSArIHUgfCAwLCBhID0gNzsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVbQSArIDE2ID4+IDJdID0gZywgYSA9IDgsIHUgPSAobCA8PCA4KSArIHUgfCAwOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgaWYgKGEgPSBhIC0gMSB8IDAsIGVbQSArIDggPj4gMl0gPSBhLCB1ID0gdSA8PCAxLCBlW0EgPj4gMl0gPSB1LCBuID0gbiA8PCAxLCBlW0EgKyA0ID4+IDJdID0gbiwgIShuID4+PiAwIDwgMzI3NjgpKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBvID0gZVtvICsgNCA+PiAyXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChuID0gciwgciA9IElbdyArIDM5Nzc2IHwgMF0sIGVbbiA+PiAyXSA9IChyIHwgMCkgPT0gKG8gfCAwKSA/IGYgOiAwIC0gZiB8IDAsIGVbcyA+PiAyXSA9IGVbcyA+PiAyXSB8IDMyIDw8IGgsIGYgPSByIF4gbywgZVtpID4+IDJdID0gZVtpID4+IDJdIHwgKGYgPDwgMTkgfCAxNikgPDwgaCwgZVtpICsgNCA+PiAyXSA9IGVbaSArIDQgPj4gMl0gfCA4IDw8IGgsIGsgfCB0IHx8IChyID0gKC0yIC0gZVtBICsgMTI0ID4+IDJdIDw8IDIpICsgaSB8IDAsIGVbciArIDQgPj4gMl0gPSBlW3IgKyA0ID4+IDJdIHwgMzI3NjgsIGVbciA+PiAyXSA9IGVbciA+PiAyXSB8IGYgPDwgMzEgfCA2NTUzNiwgciA9IHIgLSA0IHwgMCwgZVtyID4+IDJdID0gZVtyID4+IDJdIHwgMTMxMDcyKSwgKGsgfCAwKSAhPSAzKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgQSA9IChlW0EgKyAxMjQgPj4gMl0gPDwgMikgKyBpIHwgMCwgZVtBICsgNCA+PiAyXSA9IGVbQSArIDQgPj4gMl0gfCA0LCBlW0EgKyAxMiA+PiAyXSA9IGVbQSArIDEyID4+IDJdIHwgMSwgZVtBICsgOCA+PiAyXSA9IGVbQSArIDggPj4gMl0gfCBmIDw8IDE4IHwgMjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gZmsoQSwgaSwgciwgZikgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDAsIGYgPSBmIHwgMDsKICAgICAgICAgICAgICB2YXIgayA9IDAsIHQgPSAwLCBuID0gMCwgbCA9IDAsIGEgPSAwLCB1ID0gMCwgbyA9IDAsIGcgPSAwLCBoID0gMCwgcyA9IDA7CiAgICAgICAgICAgICAgbiA9IFggLSAxNiB8IDAsIFggPSBuLCBlW0EgKyA4ID4+IDJdID09IDE2ID8gbCA9IGVbQSArIDE1NiA+PiAyXSArIFooZVtBICsgMjA0ID4+IDJdLCA1NjQ0KSB8IDAgOiBsID0gZVtBICsgMTIgPj4gMl07CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKHIgPj4+IDAgPD0gMSkgewogICAgICAgICAgICAgICAgICBRKGYsIDEsIDc4OTgsIDApLCBBID0gMDsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChoMihpLCBuICsgMTIgfCAwLCAyKSwgZVtuICsgMTIgPj4gMl0pIHsKICAgICAgICAgICAgICAgICAgUShmLCAyLCA5NTc3LCAwKSwgQSA9IDE7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAociA+Pj4gMCA8PSA2KSB7CiAgICAgICAgICAgICAgICAgIFEoZiwgMSwgNzg5OCwgMCksIEEgPSAwOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaDIoaSArIDIgfCAwLCBuICsgOCB8IDAsIDEpLCB1ID0gZVtsICsgNTYyOCA+PiAyXSwgQSA9IHU7CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICBrOiB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoayA9IGVbbCArIDU2MzIgPj4gMl0sICFrKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgZm9yIChhID0gZVtuICsgOCA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChhIHwgMCkgPT0gZVtBID4+IDJdKQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBID0gQSArIDIwIHwgMCwgdCA9IHQgKyAxIHwgMCwgKGsgfCAwKSA9PSAodCB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKChrIHwgMCkgIT0gKHQgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKChrIHwgMCkgPT0gZVtsICsgNTYzNiA+PiAyXSkgewogICAgICAgICAgICAgICAgICAgIGlmIChBID0gayArIDEwIHwgMCwgZVtsICsgNTYzNiA+PiAyXSA9IEEsIEEgPSBvMCh1LCBaKEEsIDIwKSksICFBKSB7CiAgICAgICAgICAgICAgICAgICAgICBSKGVbbCArIDU2MjggPj4gMl0pLCBlW2wgKyA1NjM2ID4+IDJdID0gMCwgZVtsICsgNTYyOCA+PiAyXSA9IDAsIGVbbCArIDU2MzIgPj4gMl0gPSAwLCBRKGYsIDEsIDc5NjMsIDApLCBBID0gMDsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVbbCArIDU2MjggPj4gMl0gPSBBLCBrID0gZVtsICsgNTYzMiA+PiAyXSwgZDIoQSArIFooaywgMjApIHwgMCwgMCwgWihlW2wgKyA1NjM2ID4+IDJdIC0gayB8IDAsIDIwKSksIHUgPSBlW2wgKyA1NjI4ID4+IDJdLCBrID0gZVtsICsgNTYzMiA+PiAyXTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBBID0gWihrLCAyMCkgKyB1IHwgMCwgcyA9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoZVtBID4+IDJdID0gZVtuICsgOCA+PiAyXSwgaDIoaSArIDMgfCAwLCBuICsgMTIgfCAwLCAyKSwgZVtuICsgMTIgPj4gMl0pIHsKICAgICAgICAgICAgICAgICAgUShmLCAyLCA5NTc3LCAwKSwgQSA9IDE7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoaDIoaSArIDUgfCAwLCBuICsgNCB8IDAsIDIpLCB0ID0gZVtuICsgNCA+PiAyXSwgdCA+Pj4gMCA+PSAyKSB7CiAgICAgICAgICAgICAgICAgIFEoZiwgMiwgNTM5NSwgMCksIEEgPSAxOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGsgPSByIC0gNyB8IDAsIHQpCiAgICAgICAgICAgICAgICAgIGZvciAociA9IGkgKyA3IHwgMCwgdSA9IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGsgPj4+IDAgPD0gMikgewogICAgICAgICAgICAgICAgICAgICAgUShmLCAxLCA3ODk4LCAwKSwgQSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoaDIociwgbiArIDEyIHwgMCwgMSksIGVbbiArIDEyID4+IDJdICE9IDEpIHsKICAgICAgICAgICAgICAgICAgICAgIFEoZiwgMiwgOTA4MCwgMCksIEEgPSAxOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKGgyKHIgKyAxIHwgMCwgbiwgMiksIHQgPSBlW24gPj4gMl0sIGkgPSB0ICYgMzI3NjcsIGVbQSArIDQgPj4gMl0gPSBpLCBhID0gayAtIDMgfCAwLCBrID0gKHQgPj4+IDE1IHwgMCkgKyAxIHwgMCwgbyA9IFooaywgaSkgKyAyIHwgMCwgYSA+Pj4gMCA8IG8gPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgIFEoZiwgMSwgNzg5OCwgMCksIEEgPSAwOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSByICsgMyB8IDAsIHQgPSAwLCBpKQogICAgICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoMihyLCBuICsgMTIgfCAwLCBrKSwgZVtuICsgMTIgPj4gMl0gIT0gKHQgfCAwKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgIFEoZiwgMiwgMTAyMjAsIDApLCBBID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0gciArIGsgfCAwLCB0ID0gdCArIDEgfCAwLCAhKHQgPj4+IDAgPCBkW0EgKyA0ID4+IDJdKSkKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoaDIociwgbiwgMiksIGsgPSBlW24gPj4gMl0sIGkgPSBrICYgMzI3NjcsIGVbbiA+PiAyXSA9IGksIChpIHwgMCkgIT0gZVtBICsgNCA+PiAyXSkgewogICAgICAgICAgICAgICAgICAgICAgUShmLCAyLCA1NzA4LCAwKSwgQSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoayA9IChrID4+PiAxNSB8IDApICsgMSB8IDAsIGcgPSBaKGssIGkpICsgMyB8IDAsIG8gPSBhIC0gbyB8IDAsIGcgPj4+IDAgPiBvID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICBRKGYsIDEsIDc4OTgsIDApLCBBID0gMDsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChyID0gciArIDIgfCAwLCB0ID0gMCwgaSkKICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaDIociwgbiArIDEyIHwgMCwgayksIGVbbiArIDEyID4+IDJdICE9ICh0IHwgMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBRKGYsIDIsIDEwMjIwLCAwKSwgQSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9IHIgKyBrIHwgMCwgdCA9IHQgKyAxIHwgMCwgISh0ID4+PiAwIDwgZFtBICsgNCA+PiAyXSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaDIociwgbiArIDEyIHwgMCwgMyksIGsgPSBlW24gKyAxMiA+PiAyXSwgZVtBICsgOCA+PiAyXSA9IDAsIGVbQSArIDEyID4+IDJdID0gMCwgRltBICsgMTYgfCAwXSA9ICEoayAmIDY1NTM2KSB8IElbQSArIDE2IHwgMF0gJiAyNTQsIGEgPSBrICYgMjU1LCBlW24gKyA4ID4+IDJdID0gYTsKICAgICAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoIWEpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoaCA9IGVbbCArIDU2MjAgPj4gMl0sIGgpCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodCA9IGVbbCArIDU2MTYgPj4gMl0sIGkgPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYSB8IDApID09IGVbdCArIDggPj4gMl0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbQSArIDggPj4gMl0gPSB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0ICsgMjAgfCAwLCBpID0gaSArIDEgfCAwLCAoaCB8IDApID09IChpIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgUShmLCAxLCA3ODk4LCAwKSwgQSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBrID0gayA+Pj4gOCAmIDI1NSwgZVtuICsgOCA+PiAyXSA9IGs7CiAgICAgICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICAgICAgaWYgKCFrKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgaWYgKGEgPSBlW2wgKyA1NjIwID4+IDJdLCBhKQogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHQgPSBlW2wgKyA1NjE2ID4+IDJdLCBpID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGsgfCAwKSA9PSBlW3QgKyA4ID4+IDJdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW0EgKyAxMiA+PiAyXSA9IHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IHQgKyAyMCB8IDAsIGkgPSBpICsgMSB8IDAsIChhIHwgMCkgPT0gKGkgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBRKGYsIDEsIDc4OTgsIDApLCBBID0gMDsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChrID0gbyAtIGcgfCAwLCByID0gciArIDMgfCAwLCB1ID0gdSArIDEgfCAwLCAhKHUgPj4+IDAgPCBkW24gKyA0ID4+IDJdKSkKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoaykgewogICAgICAgICAgICAgICAgICBRKGYsIDEsIDc4OTgsIDApLCBBID0gMDsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChBID0gMSwgIXMpCiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICBlW2wgKyA1NjMyID4+IDJdID0gZVtsICsgNTYzMiA+PiAyXSArIDEsIEEgPSAxOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gWCA9IG4gKyAxNiB8IDAsIEEgfCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIEFrKEEsIGksIHIpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIGkgPSBpIHwgMCwgciA9IHIgfCAwOwogICAgICAgICAgICAgIHZhciBmID0gMCwgayA9IDAsIHQgPSAwLCBuID0gMCwgbCA9IDAsIGEgPSAwLCB1ID0gMCwgbyA9IDAsIGcgPSAwLCBoID0gMDsKICAgICAgICAgICAgICBpZiAoZiA9IGVbQSArIDUyID4+IDJdLCBuID0gZVtBICsgNzIgPj4gMl0sIGsgPSBlW24gKyAxNiA+PiAyXSwgdCA9IGsgKyA2IHwgMCwgdCA+Pj4gMCA+IGRbQSArIDU2ID4+IDJdKSB7CiAgICAgICAgICAgICAgICBpZiAoZiA9IG8wKGYsIHQpLCAhZikKICAgICAgICAgICAgICAgICAgcmV0dXJuIFIoZVtBICsgNTIgPj4gMl0pLCBlW0EgKyA1MiA+PiAyXSA9IDAsIGVbQSArIDU2ID4+IDJdID0gMCwgUShyLCAxLCA3NjY0LCAwKSwgMDsKICAgICAgICAgICAgICAgIGVbQSArIDU2ID4+IDJdID0gdCwgZVtBICsgNTIgPj4gMl0gPSBmOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoazIoZiwgNjU0MDAsIDIpLCBrMihmICsgMiB8IDAsIGsgKyA0IHwgMCwgMiksIGsyKGYgKyA0IHwgMCwgZVtuICsgMTYgPj4gMl0sIDIpLCBlW24gKyAxNiA+PiAyXSkKICAgICAgICAgICAgICAgIGZvciAoayA9IGYgKyA2IHwgMCwgZiA9IGVbbiArIDI0ID4+IDJdOyBrMihrLCBlW2YgKyAyNCA+PiAyXSAtIDEgfCBlW2YgKyAzMiA+PiAyXSA8PCA3LCAxKSwgZiA9IGYgKyA1MiB8IDAsIGsgPSBrICsgMSB8IDAsIGEgPSBhICsgMSB8IDAsIGEgPj4+IDAgPCBkW24gKyAxNiA+PiAyXTsgKQogICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKChMMChpLCBlW0EgKyA1MiA+PiAyXSwgdCwgcikgfCAwKSAhPSAodCB8IDApKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgaWYgKGcgPSBlW0EgKyAxNTYgPj4gMl0gKyBaKGVbQSArIDIwNCA+PiAyXSwgNTY0NCkgfCAwLCBlW2cgKyA1NjIwID4+IDJdKQogICAgICAgICAgICAgICAgICBmb3IgKGsgPSBlW2cgKyA1NjE2ID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgIGlmIChmID0gZVtBICsgNTIgPj4gMl0sIHQgPSBlW2sgKyAxNiA+PiAyXSwgbiA9IHQgKyAxMCB8IDAsIG4gPj4+IDAgPiBkW0EgKyA1NiA+PiAyXSkgewogICAgICAgICAgICAgICAgICAgICAgaWYgKGYgPSBvMChmLCBuKSwgIWYpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSKGVbQSArIDUyID4+IDJdKSwgZVtBICsgNTIgPj4gMl0gPSAwLCBlW0EgKyA1NiA+PiAyXSA9IDAsIFEociwgMSwgNjcyOSwgMCksIDA7CiAgICAgICAgICAgICAgICAgICAgICBlW0EgKyA1NiA+PiAyXSA9IG4sIGVbQSArIDUyID4+IDJdID0gZjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKGsyKGYsIDY1Mzk2LCAyKSwgazIoZiArIDIgfCAwLCB0ICsgOCB8IDAsIDIpLCBrMihmICsgNCB8IDAsIDAsIDIpLCBrMihmICsgNiB8IDAsIElbayArIDggfCAwXSB8IGVbayArIDQgPj4gMl0gPDwgOCB8IGVbayA+PiAyXSA8PCAxMCwgMiksIGsyKGYgKyA4IHwgMCwgMCwgMiksIEYyKGYgKyAxMCB8IDAsIGVbayArIDEyID4+IDJdLCBlW2sgKyAxNiA+PiAyXSksIChMMChpLCBlW0EgKyA1MiA+PiAyXSwgbiwgcikgfCAwKSAhPSAobiB8IDApKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICBpZiAoayA9IGsgKyAyMCB8IDAsIGwgPSBsICsgMSB8IDAsICEobCA+Pj4gMCA8IGRbZyArIDU2MjAgPj4gMl0pKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgaWYgKGVbZyArIDU2MzIgPj4gMl0pCiAgICAgICAgICAgICAgICAgICAgZm9yIChsID0gZVtnICsgNTYyOCA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChrID0gZVtBICsgNTIgPj4gMl0sIGYgPSBlW2wgKyA0ID4+IDJdLCB0ID0gZiA+Pj4gMCA+IDI1NSwgZiA9IGYgPDwgMSA8PCB0LCBoID0gZiArIDE5IHwgMCwgaCA+Pj4gMCA+IGRbQSArIDU2ID4+IDJdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrID0gbzAoaywgaCksICFrKQogICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSKGVbQSArIDUyID4+IDJdKSwgZVtBICsgNTIgPj4gMl0gPSAwLCBlW0EgKyA1NiA+PiAyXSA9IDAsIFEociwgMSwgNzkyNCwgMCksIDA7CiAgICAgICAgICAgICAgICAgICAgICAgIGVbQSArIDU2ID4+IDJdID0gaCwgZVtBICsgNTIgPj4gMl0gPSBrOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPSB0ID8gMiA6IDEsIGsyKGssIDY1Mzk3LCAyKSwgazIoayArIDIgfCAwLCBmICsgMTcgfCAwLCAyKSwgYSA9IDAsIGsyKGsgKyA0IHwgMCwgMCwgMiksIGsyKGsgKyA2IHwgMCwgZVtsID4+IDJdLCAxKSwgazIoayArIDcgfCAwLCAwLCAyKSwgazIoayArIDkgfCAwLCAxLCAyKSwgazIoayArIDExIHwgMCwgMSwgMSksIGYgPSB0IDw8IDE1LCBrMihrICsgMTIgfCAwLCBmIHwgZVtsICsgNCA+PiAyXSwgMiksIGsgPSBrICsgMTQgfCAwLCBvID0gMCwgdCA9IDAsIGVbbCArIDQgPj4gMl0pCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBrMihrLCBvLCBuKSwgayA9IGsgKyBuIHwgMCwgbyA9IG8gKyAxIHwgMCwgdCA9IGVbbCArIDQgPj4gMl0sIG8gPj4+IDAgPCB0ID4+PiAwOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgaWYgKGsyKGssIGYgfCB0LCAyKSwgayA9IGsgKyAyIHwgMCwgZVtsICsgNCA+PiAyXSkKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGsyKGssIGEsIG4pLCBrID0gayArIG4gfCAwLCBhID0gYSArIDEgfCAwLCBhID4+PiAwIDwgZFtsICsgNCA+PiAyXTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgIGlmIChmID0gKChJW2wgKyAxNiB8IDBdIF4gLTEpICYgMSkgPDwgMTYsIHQgPSBlW2wgKyA4ID4+IDJdLCB0ICYmIChmID0gZVt0ICsgOCA+PiAyXSB8IGYpLCB0ID0gZVtsICsgMTIgPj4gMl0sIHQgJiYgKGYgPSBlW3QgKyA4ID4+IDJdIDw8IDggfCBmKSwgazIoaywgZiwgMyksIChMMChpLCBlW0EgKyA1MiA+PiAyXSwgaCwgcikgfCAwKSAhPSAoaCB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBsICsgMjAgfCAwLCB1ID0gdSArIDEgfCAwLCAhKHUgPj4+IDAgPCBkW2cgKyA1NjMyID4+IDJdKSkKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoZiA9IGVbQSArIDUyID4+IDJdLCB0ID0gZVtBICsgMTU2ID4+IDJdICsgWihlW0EgKyAyMDQgPj4gMl0sIDU2NDQpIHwgMCwgayA9IGVbdCArIDU2MzIgPj4gMl0sIHUgPSBrICsgNSB8IDAsIHUgPj4+IDAgPiBkW0EgKyA1NiA+PiAyXSkgewogICAgICAgICAgICAgICAgICAgIGlmIChmID0gbzAoZiwgdSksICFmKSB7CiAgICAgICAgICAgICAgICAgICAgICBSKGVbQSArIDUyID4+IDJdKSwgZVtBICsgNTIgPj4gMl0gPSAwLCBlW0EgKyA1NiA+PiAyXSA9IDAsIFEociwgMSwgNjg5NSwgMCk7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlW0EgKyA1NiA+PiAyXSA9IHUsIGVbQSArIDUyID4+IDJdID0gZjsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoazIoZiwgNjUzOTksIDIpLCBrMihmICsgMiB8IDAsIGsgKyAzIHwgMCwgMiksIG8gPSAxLCBrMihmICsgNCB8IDAsIGVbdCArIDU2MzIgPj4gMl0sIDEpLCBlW3QgKyA1NjMyID4+IDJdKQogICAgICAgICAgICAgICAgICAgIGZvciAoZiA9IGYgKyA1IHwgMCwgayA9IGVbdCArIDU2MjggPj4gMl0sIGEgPSAwOyBrMihmLCBlW2sgPj4gMl0sIDEpLCBrID0gayArIDIwIHwgMCwgZiA9IGYgKyAxIHwgMCwgYSA9IGEgKyAxIHwgMCwgYSA+Pj4gMCA8IGRbdCArIDU2MzIgPj4gMl07ICkKICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgaWYgKChMMChpLCBlW0EgKyA1MiA+PiAyXSwgdSwgcikgfCAwKSA9PSAodSB8IDApKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBvID0gMDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIG8gfCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIEY0KEEsIGksIHIpIHsKICAgICAgICAgICAgICB2YXIgZiA9IDAsIGsgPSAwLCB0ID0gMCwgbiA9IDAsIGwgPSAwLCBhID0gMCwgdSA9IDAsIG8gPSAwLCBnID0gMCwgaCA9IDA7CiAgICAgICAgICAgICAgayA9IFggLSAxNDQgfCAwLCBYID0gazsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIGYgPSBlW2kgKyA4ID4+IDJdOwogICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFmKSB7CiAgICAgICAgICAgICAgICAgICAgICBuID0gZVtpICsgMTIgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB0ID0gZVtBICsgMTYgPj4gMl0sIGEgPSBHMltmICsgNCA+PiAxXSwgbiA9IGVbaSArIDEyID4+IDJdLCAhbiB8ICFlW24gKyAxMiA+PiAyXSB8fCAodCA9IElbbiArIDE4IHwgMF0pOwogICAgICAgICAgICAgICAgICAgIGs6IHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChhKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZiA9IGVbZiA+PiAyXSwgaSA9IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBmICsgWihpLCA2KSB8IDAsIHUgPSBHMltsID4+IDFdLCB1ID4+PiAwID49IHQgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDEzMiA+PiAyXSA9IHQsIGVbayArIDEyOCA+PiAyXSA9IHUsIFEociwgMSwgMjUwNzAsIGsgKyAxMjggfCAwKSwgbCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IEcyW2wgKyA0ID4+IDFdLCAhKCFsIHwgKGwgfCAwKSA9PSA2NTUzNSkgJiYgKGwgPSBsIC0gMSB8IDAsIGwgPj4+IDAgPj0gdCA+Pj4gMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IGkgKyAxIHwgMCwgKGEgfCAwKSA9PSAoaSB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDExNiA+PiAyXSA9IHQsIGVbayArIDExMiA+PiAyXSA9IGwsIFEociwgMSwgMjUwNzAsIGsgKyAxMTIgfCAwKSwgbCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBpZiAodCkKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgZm9yICh0ID0gdCAtIDEgfCAwLCBpID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEcyW2YgKyBaKGksIDYpID4+IDFdICE9ICh0IHwgMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IGkgKyAxIHwgMCwgKGEgfCAwKSAhPSAoaSB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlmICgoYSB8IDApID09IChpICYgNjU1MzUpKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgaWYgKCF0KQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKGwgPSAxLCAhbiB8fCAoYSA9IGVbbiArIDEyID4+IDJdLCAhYSkpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgIG4gPSBJW24gKyAxOCB8IDBdOwogICAgICAgICAgICAgICAgICAgIGs6IHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChuKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIHQgPSAxOyBmID0gZVtBICsgMTYgPj4gMl0sIHUgPSBHMlthICsgKGkgPDwgMikgPj4gMV0sIGYgPj4+IDAgPD0gdSA+Pj4gMCAmJiAoZVtrICsgMTAwID4+IDJdID0gZiwgZVtrICsgOTYgPj4gMl0gPSB1LCBRKHIsIDEsIDI1MDcwLCBrICsgOTYgfCAwKSwgdCA9IDApLCBpID0gaSArIDEgfCAwLCAobiB8IDApICE9IChpIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1ID0gRTIobiwgNCksICF1KQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IGEgKyAoaSA8PCAyKSB8IDAsIG8gPSBJW2YgKyAyIHwgMF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG8gPj4+IDAgPj0gMikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAyMCA+PiAyXSA9IG8sIGVbayArIDE2ID4+IDJdID0gaSwgUShyLCAxLCAyMzIzMSwgayArIDE2IHwgMCksIHQgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGYgPSBJW2YgKyAzIHwgMF0sIGYgPj4+IDAgPj0gbiA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyA4MCA+PiAyXSA9IGYsIFEociwgMSwgMjMxNzUsIGsgKyA4MCB8IDApLCB0ID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnID0gKG8gfCAwKSAhPSAxLCBoID0gKGYgPDwgMikgKyB1IHwgMCwgIShnIHwgIWVbaCA+PiAyXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMzIgPj4gMl0gPSBmLCBRKHIsIDEsIDIyMTA2LCBrICsgMzIgfCAwKSwgdCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISghZiB8IG8pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDUyID4+IDJdID0gZiwgZVtrICsgNDggPj4gMl0gPSBpLCBRKHIsIDEsIDIzMDM4LCBrICsgNDggfCAwKSwgdCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgoaSB8IDApID09IChmIHwgMCkgfCBnKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyA3MiA+PiAyXSA9IGYsIGVbayArIDY4ID4+IDJdID0gaSwgZVtrICsgNjQgPj4gMl0gPSBpLCBRKHIsIDEsIDIzMDc0LCBrIC0gLTY0IHwgMCksIHQgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtoID4+IDJdID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSBpICsgMSB8IDAsIChuIHwgMCkgPT0gKGkgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGYgPSBpIDw8IDIsIGVbZiArIHUgPj4gMl0gfCAhSVsoZiArIGEgfCAwKSArIDIgfCAwXSB8fCAoZVtrID4+IDJdID0gaSwgUShyLCAxLCAyMTczNCwgayksIHQgPSAwKSwgaSA9IGkgKyAxIHwgMCwgKG4gfCAwKSAhPSAoaSB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBSKHUpLCBsID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW0EgKyAxNiA+PiAyXSAhPSAxKQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIEEgPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlWyhpIDw8IDIpICsgdSA+PiAyXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEEgPSBBICsgMSB8IDAsIGkgPSBBICYgNjU1MzUsIG4gPj4+IDAgPiBpID4+PiAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBID0gMCwgUShyLCAyLCAxOTUzOCwgMCksIGkgPSAwLCBuID4+PiAwID49IDQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChyID0gbiAmIDI1MiwgdCA9IDA7IGYgPSBhICsgKGkgPDwgMikgfCAwLCBGW2YgKyAzIHwgMF0gPSBpLCBGW2YgKyAyIHwgMF0gPSAxLCBmID0gaSB8IDEsIG8gPSBhICsgKGYgPDwgMikgfCAwLCBGW28gKyAzIHwgMF0gPSBmLCBGW28gKyAyIHwgMF0gPSAxLCBmID0gaSB8IDIsIG8gPSBhICsgKGYgPDwgMikgfCAwLCBGW28gKyAzIHwgMF0gPSBmLCBGW28gKyAyIHwgMF0gPSAxLCBmID0gaSB8IDMsIG8gPSBhICsgKGYgPDwgMikgfCAwLCBGW28gKyAzIHwgMF0gPSBmLCBGW28gKyAyIHwgMF0gPSAxLCBpID0gaSArIDQgfCAwLCB0ID0gdCArIDQgfCAwLCAociB8IDApICE9ICh0IHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSBuICYgMywgIXIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IHQgPSBhICsgKGkgPDwgMikgfCAwLCBGW3QgKyAzIHwgMF0gPSBpLCBGW3QgKyAyIHwgMF0gPSAxLCBpID0gaSArIDEgfCAwLCBBID0gQSArIDEgfCAwLCAociB8IDApICE9IChBIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBpZiAodSA9IEUyKG4sIDQpLCB1KQogICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBsID0gMCwgUShyLCAxLCAyMzQ5MywgMCk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBSKHUpOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgbCA9IDAsIFEociwgMSwgMTk1ODksIDApOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gWCA9IGsgKyAxNDQgfCAwLCBsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIGtrKEEsIGkpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIGkgPSBpIHwgMDsKICAgICAgICAgICAgICB2YXIgciA9IDAsIGYgPSAwLCBrID0gMCwgdCA9IDAsIG4gPSAwLCBsID0gMCwgYSA9IDAsIHUgPSAwLCBvID0gMCwgZyA9IDA7CiAgICAgICAgICAgICAgaWYgKGRbQSArIDQ0ID4+IDJdID49IDgpCiAgICAgICAgICAgICAgICBmb3IgKGEgPSBlW0EgKyA0MCA+PiAyXSwgZyA9IDg7IDsgKSB7CiAgICAgICAgICAgICAgICAgIG8gPSBlW0EgKyAxMiA+PiAyXSA8PCA1LCBrID0gZVtBID4+IDJdLCBuID0gZVtBICsgMzYgPj4gMl0sIGkgPSBlW0EgKyAxNiA+PiAyXSwgbCA9IGVbQSArIDIwID4+IDJdOwogICAgICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPj4+IDAgPj0gbCA+Pj4gMCB8fCAodSA9IGsgKyBvIHwgMCwgZiA9IGkgKyAxIHwgMCwgbCAtIGkgJiAxICYmIChyID0gdSArIChpIDw8IDYpIHwgMCwgaSA9IChaKGksIG4pIDw8IDIpICsgYSB8IDAsIHQgPSBlW2kgKyA0ID4+IDJdLCBlW3IgPj4gMl0gPSBlW2kgPj4gMl0sIGVbciArIDQgPj4gMl0gPSB0LCB0ID0gZVtpICsgMjggPj4gMl0sIGVbciArIDI0ID4+IDJdID0gZVtpICsgMjQgPj4gMl0sIGVbciArIDI4ID4+IDJdID0gdCwgdCA9IGVbaSArIDIwID4+IDJdLCBlW3IgKyAxNiA+PiAyXSA9IGVbaSArIDE2ID4+IDJdLCBlW3IgKyAyMCA+PiAyXSA9IHQsIHQgPSBlW2kgKyAxMiA+PiAyXSwgZVtyICsgOCA+PiAyXSA9IGVbaSArIDggPj4gMl0sIGVbciArIDEyID4+IDJdID0gdCwgaSA9IGYpLCAoZiB8IDApID09IChsIHwgMCkpKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICBmb3IgKDsgZiA9IChaKGksIG4pIDw8IDIpICsgYSB8IDAsIHQgPSBlW2YgKyA0ID4+IDJdLCByID0gdSArIChpIDw8IDYpIHwgMCwgZVtyID4+IDJdID0gZVtmID4+IDJdLCBlW3IgKyA0ID4+IDJdID0gdCwgdCA9IGVbZiArIDI4ID4+IDJdLCBlW3IgKyAyNCA+PiAyXSA9IGVbZiArIDI0ID4+IDJdLCBlW3IgKyAyOCA+PiAyXSA9IHQsIHQgPSBlW2YgKyAyMCA+PiAyXSwgZVtyICsgMTYgPj4gMl0gPSBlW2YgKyAxNiA+PiAyXSwgZVtyICsgMjAgPj4gMl0gPSB0LCB0ID0gZVtmICsgMTIgPj4gMl0sIGVbciArIDggPj4gMl0gPSBlW2YgKyA4ID4+IDJdLCBlW3IgKyAxMiA+PiAyXSA9IHQsIGYgPSBpICsgMSB8IDAsIHIgPSB1ICsgKGYgPDwgNikgfCAwLCBmID0gKFooZiwgbikgPDwgMikgKyBhIHwgMCwgdCA9IGVbZiArIDI4ID4+IDJdLCBlW3IgKyAyNCA+PiAyXSA9IGVbZiArIDI0ID4+IDJdLCBlW3IgKyAyOCA+PiAyXSA9IHQsIHQgPSBlW2YgKyAyMCA+PiAyXSwgZVtyICsgMTYgPj4gMl0gPSBlW2YgKyAxNiA+PiAyXSwgZVtyICsgMjAgPj4gMl0gPSB0LCB0ID0gZVtmICsgMTIgPj4gMl0sIGVbciArIDggPj4gMl0gPSBlW2YgKyA4ID4+IDJdLCBlW3IgKyAxMiA+PiAyXSA9IHQsIHQgPSBlW2YgKyA0ID4+IDJdLCBlW3IgPj4gMl0gPSBlW2YgPj4gMl0sIGVbciArIDQgPj4gMl0gPSB0LCBpID0gaSArIDIgfCAwLCAobCB8IDApICE9IChpIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpID0gZVtBICsgMjQgPj4gMl0sIGwgPSBlW0EgKyAyOCA+PiAyXTsKICAgICAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgICAgIGlmIChpID4+PiAwID49IGwgPj4+IDAgfHwgKHUgPSAoayAtIG8gfCAwKSArIDMyIHwgMCwgbyA9IChaKG4sIGVbQSArIDggPj4gMl0pIDw8IDIpICsgYSB8IDAsIGYgPSBpICsgMSB8IDAsIGwgLSBpICYgMSAmJiAociA9IHUgKyAoaSA8PCA2KSB8IDAsIGkgPSBvICsgKFooaSwgbikgPDwgMikgfCAwLCBrID0gZVtpICsgNCA+PiAyXSwgZVtyID4+IDJdID0gZVtpID4+IDJdLCBlW3IgKyA0ID4+IDJdID0gaywgayA9IGVbaSArIDI4ID4+IDJdLCBlW3IgKyAyNCA+PiAyXSA9IGVbaSArIDI0ID4+IDJdLCBlW3IgKyAyOCA+PiAyXSA9IGssIGsgPSBlW2kgKyAyMCA+PiAyXSwgZVtyICsgMTYgPj4gMl0gPSBlW2kgKyAxNiA+PiAyXSwgZVtyICsgMjAgPj4gMl0gPSBrLCBrID0gZVtpICsgMTIgPj4gMl0sIGVbciArIDggPj4gMl0gPSBlW2kgKyA4ID4+IDJdLCBlW3IgKyAxMiA+PiAyXSA9IGssIGkgPSBmKSwgKGYgfCAwKSA9PSAobCB8IDApKSkKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgZm9yICg7IGYgPSBvICsgKFooaSwgbikgPDwgMikgfCAwLCBrID0gZVtmICsgNCA+PiAyXSwgciA9IHUgKyAoaSA8PCA2KSB8IDAsIGVbciA+PiAyXSA9IGVbZiA+PiAyXSwgZVtyICsgNCA+PiAyXSA9IGssIGsgPSBlW2YgKyAyOCA+PiAyXSwgZVtyICsgMjQgPj4gMl0gPSBlW2YgKyAyNCA+PiAyXSwgZVtyICsgMjggPj4gMl0gPSBrLCBrID0gZVtmICsgMjAgPj4gMl0sIGVbciArIDE2ID4+IDJdID0gZVtmICsgMTYgPj4gMl0sIGVbciArIDIwID4+IDJdID0gaywgayA9IGVbZiArIDEyID4+IDJdLCBlW3IgKyA4ID4+IDJdID0gZVtmICsgOCA+PiAyXSwgZVtyICsgMTIgPj4gMl0gPSBrLCBmID0gaSArIDEgfCAwLCByID0gdSArIChmIDw8IDYpIHwgMCwgZiA9IG8gKyAoWihmLCBuKSA8PCAyKSB8IDAsIGsgPSBlW2YgKyAyOCA+PiAyXSwgZVtyICsgMjQgPj4gMl0gPSBlW2YgKyAyNCA+PiAyXSwgZVtyICsgMjggPj4gMl0gPSBrLCBrID0gZVtmICsgMjAgPj4gMl0sIGVbciArIDE2ID4+IDJdID0gZVtmICsgMTYgPj4gMl0sIGVbciArIDIwID4+IDJdID0gaywgayA9IGVbZiArIDEyID4+IDJdLCBlW3IgKyA4ID4+IDJdID0gZVtmICsgOCA+PiAyXSwgZVtyICsgMTIgPj4gMl0gPSBrLCBrID0gZVtmICsgNCA+PiAyXSwgZVtyID4+IDJdID0gZVtmID4+IDJdLCBlW3IgKyA0ID4+IDJdID0gaywgaSA9IGkgKyAyIHwgMCwgKGwgfCAwKSAhPSAoaSB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKEsxKEEpLCBpID0gMCwgZVtBICsgMzIgPj4gMl0pCiAgICAgICAgICAgICAgICAgICAgZm9yICg7IGYgPSBlW0EgPj4gMl0gKyAoaSA8PCA1KSB8IDAsIHIgPSBlW2YgKyA0ID4+IDJdLCBuID0gKFooZVtBICsgMzYgPj4gMl0sIGkpIDw8IDIpICsgYSB8IDAsIGVbbiA+PiAyXSA9IGVbZiA+PiAyXSwgZVtuICsgNCA+PiAyXSA9IHIsIHIgPSBlW2YgKyAyOCA+PiAyXSwgZVtuICsgMjQgPj4gMl0gPSBlW2YgKyAyNCA+PiAyXSwgZVtuICsgMjggPj4gMl0gPSByLCByID0gZVtmICsgMjAgPj4gMl0sIGVbbiArIDE2ID4+IDJdID0gZVtmICsgMTYgPj4gMl0sIGVbbiArIDIwID4+IDJdID0gciwgciA9IGVbZiArIDEyID4+IDJdLCBlW24gKyA4ID4+IDJdID0gZVtmICsgOCA+PiAyXSwgZVtuICsgMTIgPj4gMl0gPSByLCBpID0gaSArIDEgfCAwLCBpID4+PiAwIDwgZFtBICsgMzIgPj4gMl07ICkKICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgaWYgKGEgPSBhICsgMzIgfCAwLCBnID0gZyArIDggfCAwLCAhKGcgPj4+IDAgPD0gZFtBICsgNDQgPj4gMl0pKQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIFIoZVtBID4+IDJdKSwgUihBKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBKNChBLCBpLCByKSB7CiAgICAgICAgICAgICAgdmFyIGYgPSAwLCBrID0gMCwgdCA9IDAsIG4gPSAwLCBsID0gMCwgYSA9IDAsIHUgPSAwLCBvID0gMCwgZyA9IDAsIGggPSAwLCBzID0gMCwgdyA9IDAsIEIgPSAwLCBjID0gMCwgdiA9IDAsIEMgPSAwOwogICAgICAgICAgICAgIEIgPSBYIC0gMTYgfCAwLCBYID0gQiwgcyA9IGVbQSArIDI0ID4+IDJdOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgIGs6IHsKICAgICAgICAgICAgICAgICAgICAgIGY6IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGYgPSBlW2kgKyAxMiA+PiAyXSwgYSA9IElbZiArIDE4IHwgMF0sIGEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHYgPSBlW2YgKyAxMiA+PiAyXSwgQyA9IGVbZiA+PiAyXSwgaCA9IGVbZiArIDQgPj4gMl0sIHcgPSBlW2YgKyA4ID4+IDJdLCBmID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlWyhaKEcyWyhmIDw8IDIpICsgdiA+PiAxXSwgNTIpICsgcyB8IDApICsgNDQgPj4gMl0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPSBrICsgMSB8IDAsIGYgPSBrICYgNjU1MzUsIGEgPj4+IDAgPiBmID4+PiAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGVbQiA+PiAyXSA9IGYsIFEociwgMSwgMjUyMzIsIEIpLCBBID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1ID0gVTIoWihhLCA1MikpLCAhdSkKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgaWYgKHUgPSBVMihaKGEsIDUyKSksIHUpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIFEociwgMSwgMjUxODAsIDApLCBBID0gMDsKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGZvciAoZiA9IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGsgPSAoZiA8PCAyKSArIHYgfCAwLCBuID0gRzJbayA+PiAxXSwgdCA9IFooSVtrICsgMiB8IDBdID8gSVtrICsgMyB8IDBdIDogZiwgNTIpICsgdSB8IDAsIGsgPSBaKG4sIDUyKSArIHMgfCAwLCBuID0gZVtrICsgNCA+PiAyXSwgZVt0ID4+IDJdID0gZVtrID4+IDJdLCBlW3QgKyA0ID4+IDJdID0gbiwgZVt0ICsgNDggPj4gMl0gPSBlW2sgKyA0OCA+PiAyXSwgbiA9IGVbayArIDQ0ID4+IDJdLCBlW3QgKyA0MCA+PiAyXSA9IGVbayArIDQwID4+IDJdLCBlW3QgKyA0NCA+PiAyXSA9IG4sIG4gPSBlW2sgKyAzNiA+PiAyXSwgZVt0ICsgMzIgPj4gMl0gPSBlW2sgKyAzMiA+PiAyXSwgZVt0ICsgMzYgPj4gMl0gPSBuLCBuID0gZVtrICsgMjggPj4gMl0sIGVbdCArIDI0ID4+IDJdID0gZVtrICsgMjQgPj4gMl0sIGVbdCArIDI4ID4+IDJdID0gbiwgbiA9IGVbayArIDIwID4+IDJdLCBlW3QgKyAxNiA+PiAyXSA9IGVbayArIDE2ID4+IDJdLCBlW3QgKyAyMCA+PiAyXSA9IG4sIG4gPSBlW2sgKyAxMiA+PiAyXSwgZVt0ICsgOCA+PiAyXSA9IGVbayArIDggPj4gMl0sIGVbdCArIDEyID4+IDJdID0gbiwgdCA9IFooZiwgNTIpICsgdSB8IDAsIGsgPSBQMChaKGVbayArIDggPj4gMl0sIGVbayArIDEyID4+IDJdKSA8PCAyKSwgZVt0ICsgNDQgPj4gMl0gPSBrLCAhaykgewogICAgICAgICAgICAgICAgICAgICAgaWYgKGYgPSBsICYgNjU1MzUsIGYpCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBSKGVbKFooZiwgNTIpICsgdSB8IDApIC0gOCA+PiAyXSksIGYgPSBmIC0gMSB8IDAsICEhZjsgKQogICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgIFIodSksIFEociwgMSwgMjUxODAsIDApLCBBID0gMDsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChlW3QgKyAyNCA+PiAyXSA9IElbZiArIHcgfCAwXSwgZVt0ICsgMzIgPj4gMl0gPSBJW2YgKyBoIHwgMF0sIGwgPSBsICsgMSB8IDAsIGYgPSBsICYgNjU1MzUsICEoYSA+Pj4gMCA+IGYgPj4+IDApKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZm9yIChoID0gRzJbZVtpICsgMTIgPj4gMl0gKyAxNiA+PiAxXSwgdyA9IGggLSAxIHwgMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICByID0gWihjLCA1MikgKyB1IHwgMCwgaSA9IFooZVtyICsgMTIgPj4gMl0sIGVbciArIDggPj4gMl0pLCBmID0gKGMgPDwgMikgKyB2IHwgMCwgdCA9IGVbKFooRzJbZiA+PiAxXSwgNTIpICsgcyB8IDApICsgNDQgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgICAgaWYgKCFJW2YgKyAyIHwgMF0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpKQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0gZVtyICsgNDQgPj4gMl0sIG4gPSAwLCBrID0gMCwgaSA+Pj4gMCA+PSA0KQogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobyA9IGkgJiAtNCwgZiA9IDA7IGwgPSBrIDw8IDIsIGVbbCArIHIgPj4gMl0gPSBlW3QgKyBsID4+IDJdLCBnID0gbCB8IDQsIGVbZyArIHIgPj4gMl0gPSBlW3QgKyBnID4+IDJdLCBnID0gbCB8IDgsIGVbZyArIHIgPj4gMl0gPSBlW3QgKyBnID4+IDJdLCBsID0gbCB8IDEyLCBlW2wgKyByID4+IDJdID0gZVt0ICsgbCA+PiAyXSwgayA9IGsgKyA0IHwgMCwgZiA9IGYgKyA0IHwgMCwgKG8gfCAwKSAhPSAoZiB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID0gaSAmIDMsICFpKQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBmID0gayA8PCAyLCBlW2YgKyByID4+IDJdID0gZVtmICsgdCA+PiAyXSwgayA9IGsgKyAxIHwgMCwgbiA9IG4gKyAxIHwgMCwgKGkgfCAwKSAhPSAobiB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgaWYgKCFpKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSBJW2YgKyAzIHwgMF0sIGYgPSAociA8PCAyKSArIEMgfCAwLCBsID0gZVsoWihyLCA1MikgKyB1IHwgMCkgKyA0NCA+PiAyXSwgayA9IDAsIChpIHwgMCkgIT0gMSkKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChnID0gaSAmIC0yLCByID0gMDsgbyA9IGsgPDwgMiwgbiA9IGVbbyArIHQgPj4gMl0sIGVbbCArIG8gPj4gMl0gPSBlW2YgKyAoWigobiB8IDApID49IDAgPyAobiB8IDApIDwgKGggfCAwKSA/IG4gOiB3IDogMCwgYSkgPDwgMikgPj4gMl0sIG8gPSBvIHwgNCwgbiA9IGVbbyArIHQgPj4gMl0sIGVbbCArIG8gPj4gMl0gPSBlW2YgKyAoWigobiB8IDApID49IDAgPyAobiB8IDApIDwgKGggfCAwKSA/IG4gOiB3IDogMCwgYSkgPDwgMikgPj4gMl0sIGsgPSBrICsgMiB8IDAsIHIgPSByICsgMiB8IDAsIChnIHwgMCkgIT0gKHIgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgIGlmICghKGkgJiAxKSkKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgIHIgPSBrIDw8IDIsIGkgPSBlW3IgKyB0ID4+IDJdLCBlW3IgKyBsID4+IDJdID0gZVtmICsgKFooKGkgfCAwKSA+PSAwID8gKGkgfCAwKSA8IChoIHwgMCkgPyBpIDogdyA6IDAsIGEpIDw8IDIpID4+IDJdOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoYyA9IGMgKyAxIHwgMCwgKGMgfCAwKSA9PSAoYSB8IDApKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChpID0gZVtBICsgMTYgPj4gMl0sIGkpCiAgICAgICAgICAgICAgICAgIGZvciAoZiA9IDA7IHIgPSBlWyhaKGYsIDUyKSArIHMgfCAwKSArIDQ0ID4+IDJdLCByICYmIFIociksIGYgPSBmICsgMSB8IDAsIChpIHwgMCkgIT0gKGYgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgIFIocyksIGVbQSArIDE2ID4+IDJdID0gYSwgZVtBICsgMjQgPj4gMl0gPSB1LCBBID0gMTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIFggPSBCICsgMTYgfCAwLCBBOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIG5rKEEsIGkpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIGkgPSBpIHwgMDsKICAgICAgICAgICAgICB2YXIgciA9IDAsIGYgPSAwLCBrID0gMCwgdCA9IDAsIG4gPSAwLCBsID0gMCwgYSA9IDAsIHUgPSAwLCBvID0gMCwgZyA9IDAsIGggPSAwLCBzID0gMCwgdyA9IDAsIEIgPSAwLCBjID0gMCwgdiA9IDAsIEMgPSAwLCBtID0gMDsKICAgICAgICAgICAgICBoID0gaSwgaSA9IGVbaSA+PiAyXSArIDcgJiAtOCwgZVtoID4+IDJdID0gaSArIDE2LCBjID0gQSwgbyA9IGVbaSA+PiAyXSwgQSA9IGVbaSArIDQgPj4gMl0sIHQgPSBlW2kgKyA4ID4+IDJdLCBrID0gZVtpICsgMTIgPj4gMl0sIHYgPSBrLCBuID0gWCAtIDMyIHwgMCwgWCA9IG4sIGkgPSBrICYgNjU1MzUsIHUgPSBrLCBrID0gdCwgdCA9IHUgPj4+IDE2ICYgMzI3NjcsIHcgPSB0OwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGlmICh0IC0gMTUzNjEgPj4+IDAgPD0gMjA0NSkgewogICAgICAgICAgICAgICAgICBmID0gayA8PCA0IHwgQSA+Pj4gMjgsIHIgPSBpIDw8IDQgfCBrID4+PiAyOCwgayA9IHQgLSAxNTM2MCB8IDAsIEEgPSBBICYgMjY4NDM1NDU1OwogICAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgICAgaWYgKChBIHwgMCkgPT0gMTM0MjE3NzI4ICYgKG8gfCAwKSAhPSAwIHwgQSA+Pj4gMCA+IDEzNDIxNzcyOCkgewogICAgICAgICAgICAgICAgICAgICAgZiA9IGYgKyAxIHwgMCwgciA9IGYgPyByIDogciArIDEgfCAwOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKG8gfCAoQSB8IDApICE9IDEzNDIxNzcyOCkKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgQSA9IGYsIGYgPSBmICsgKGYgJiAxKSB8IDAsIHIgPSBBID4+PiAwID4gZiA+Pj4gMCA/IHIgKyAxIHwgMCA6IHI7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgQSA9IHIgPj4+IDAgPiAxMDQ4NTc1LCBmID0gQSA/IDAgOiBmLCByID0gQSA/IDAgOiByLCBpID0gMCwgQSA9IEEgKyBrIHwgMCwgaSA9IEEgPj4+IDAgPCBrID4+PiAwID8gMSA6IGk7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoISghKGsgfCBvIHwgKEEgfCBpKSkgfCAoKHQgfCAwKSAhPSAzMjc2NyB8IChyIHwgMCkgIT0gMCkpKSB7CiAgICAgICAgICAgICAgICAgIGYgPSBrIDw8IDQgfCBBID4+PiAyOCwgciA9IGkgPDwgNCB8IGsgPj4+IDI4IHwgNTI0Mjg4LCBBID0gMjA0NywgaSA9IDA7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAodyA+Pj4gMCA+IDE3NDA2KSB7CiAgICAgICAgICAgICAgICAgIEEgPSAyMDQ3LCBpID0gMDsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICh0ID0gIShyIHwgdCksIEIgPSB0ID8gMTUzNjAgOiAxNTM2MSwgdSA9IEIgLSB3IHwgMCwgKHUgfCAwKSA+IDExMikgewogICAgICAgICAgICAgICAgICBBID0gMCwgaSA9IDA7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmID0gbywgciA9IEEsIGggPSBrLCBpID0gdCA/IGkgOiBpIHwgNjU1MzYsIGsgPSBpLCBsID0gaCwgZyA9IDEyOCAtIHUgfCAwOwogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICBpZiAoZyAmIDY0KSB7CiAgICAgICAgICAgICAgICAgICAgaSA9IGcgKyAtNjQgfCAwLCBnID0gZiwgdCA9IGkgJiAzMSwgKGkgJiA2MykgPj4+IDAgPj0gMzIgPyAoaSA9IGYgPDwgdCwgbCA9IDApIDogKGkgPSAoMSA8PCB0KSAtIDEgJiBnID4+PiAzMiAtIHQgfCByIDw8IHQsIGwgPSBnIDw8IHQpLCBmID0gMCwgciA9IDA7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoIWcpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgcyA9IGwsIGEgPSBnICYgMzEsIChnICYgNjMpID4+PiAwID49IDMyID8gKHQgPSBsIDw8IGEsIHMgPSAwKSA6ICh0ID0gKDEgPDwgYSkgLSAxICYgcyA+Pj4gMzIgLSBhIHwgaSA8PCBhLCBzID0gcyA8PCBhKSwgYSA9IGYsIGkgPSA2NCAtIGcgfCAwLCBsID0gaSAmIDMxLCAoaSAmIDYzKSA+Pj4gMCA+PSAzMiA/IChpID0gMCwgbCA9IHIgPj4+IGwgfCAwKSA6IChpID0gciA+Pj4gbCB8IDAsIGwgPSAoKDEgPDwgbCkgLSAxICYgcikgPDwgMzIgLSBsIHwgYSA+Pj4gbCksIGwgPSBzIHwgbCwgaSA9IGkgfCB0LCBzID0gZiwgYSA9IGcgJiAzMSwgKGcgJiA2MykgPj4+IDAgPj0gMzIgPyAodCA9IGYgPDwgYSwgZiA9IDApIDogKHQgPSAoMSA8PCBhKSAtIDEgJiBzID4+PiAzMiAtIGEgfCByIDw8IGEsIGYgPSBzIDw8IGEpLCByID0gdDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVbbiArIDE2ID4+IDJdID0gZiwgZVtuICsgMjAgPj4gMl0gPSByLCBlW24gKyAyNCA+PiAyXSA9IGwsIGVbbiArIDI4ID4+IDJdID0gaTsKICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgaWYgKHUgJiA2NCkgewogICAgICAgICAgICAgICAgICAgIHIgPSBoLCBpID0gdSArIC02NCB8IDAsIEEgPSBpICYgMzEsIChpICYgNjMpID4+PiAwID49IDMyID8gKGkgPSAwLCBvID0gayA+Pj4gQSB8IDApIDogKGkgPSBrID4+PiBBIHwgMCwgbyA9ICgoMSA8PCBBKSAtIDEgJiBrKSA8PCAzMiAtIEEgfCByID4+PiBBKSwgQSA9IGksIGggPSAwLCBrID0gMDsKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmICghdSkKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICBmID0gaCwgaSA9IDY0IC0gdSB8IDAsIHIgPSBpICYgMzEsIChpICYgNjMpID4+PiAwID49IDMyID8gKGkgPSBmIDw8IHIsIGwgPSAwKSA6IChpID0gKDEgPDwgcikgLSAxICYgZiA+Pj4gMzIgLSByIHwgayA8PCByLCBsID0gZiA8PCByKSwgZiA9IG8sIHIgPSB1ICYgMzEsICh1ICYgNjMpID4+PiAwID49IDMyID8gKHQgPSAwLCBBID0gQSA+Pj4gciB8IDApIDogKHQgPSBBID4+PiByIHwgMCwgQSA9ICgoMSA8PCByKSAtIDEgJiBBKSA8PCAzMiAtIHIgfCBmID4+PiByKSwgbyA9IGwgfCBBLCBBID0gaSB8IHQsIGYgPSBoLCByID0gdSAmIDMxLCAodSAmIDYzKSA+Pj4gMCA+PSAzMiA/IChpID0gMCwgaCA9IGsgPj4+IHIgfCAwKSA6IChpID0gayA+Pj4gciB8IDAsIGggPSAoKDEgPDwgcikgLSAxICYgaykgPDwgMzIgLSByIHwgZiA+Pj4gciksIGsgPSBpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZVtuID4+IDJdID0gbywgZVtuICsgNCA+PiAyXSA9IEEsIGVbbiArIDggPj4gMl0gPSBoLCBlW24gKyAxMiA+PiAyXSA9IGssIEEgPSBlW24gKyA4ID4+IDJdLCByID0gQSA8PCA0LCBBID0gZVtuICsgMTIgPj4gMl0gPDwgNCB8IEEgPj4+IDI4LCBrID0gZVtuID4+IDJdLCBmID0gZVtuICsgNCA+PiAyXSwgbyA9IGYsIGYgPSBmID4+PiAyOCB8IHIsIHIgPSBBLCBBID0gbyAmIDI2ODQzNTQ1NSwgaSA9IGsgfCAodyB8IDApICE9IChCIHwgMCkgJiAoZVtuICsgMTYgPj4gMl0gfCBlW24gKyAyNCA+PiAyXSB8IChlW24gKyAyMCA+PiAyXSB8IGVbbiArIDI4ID4+IDJdKSkgIT0gMDsKICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgaWYgKChBIHwgMCkgPT0gMTM0MjE3NzI4ICYgKGkgfCAwKSAhPSAwIHwgQSA+Pj4gMCA+IDEzNDIxNzcyOCkgewogICAgICAgICAgICAgICAgICAgIGYgPSBmICsgMSB8IDAsIHIgPSBmID8gciA6IHIgKyAxIHwgMDsKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChpIHwgKEEgfCAwKSAhPSAxMzQyMTc3MjgpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgQSA9IGYsIGYgPSBmICsgKGYgJiAxKSB8IDAsIHIgPSBBID4+PiAwID4gZiA+Pj4gMCA/IHIgKyAxIHwgMCA6IHI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBBID0gciA+Pj4gMCA+IDEwNDg1NzUsIHIgPSBBID8gciBeIDEwNDg1NzYgOiByLCBpID0gMDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgWCA9IG4gKyAzMiB8IDAsIEEwKDAsIGYgfCAwKSwgQTAoMSwgciB8ICh2ICYgLTIxNDc0ODM2NDggfCBBIDw8IDIwKSksIEMgPSBjLCBtID0gK04wKCksIFEyW0MgPj4gM10gPSBtOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIFI0KEEsIGksIHIsIGYpIHsKICAgICAgICAgICAgICB2YXIgayA9IDAsIHQgPSAwLCBuID0gMCwgbCA9IDAsIGEgPSAwLCB1ID0gMCwgbyA9IDAsIGcgPSAwLCBoID0gMCwgcyA9IDAsIHcgPSAwLCBCID0gMCwgYyA9IDAsIHYgPSAwLCBDID0gMCwgbSA9IDAsIHkgPSAwLCBwID0gMCwgSCA9IDAsIEogPSAwLCBFID0gMCwgRCA9IDA7CiAgICAgICAgICAgICAgdiA9IGVbQSArIDQgPj4gMl0sIG8gPSBlW2kgPj4gMl0sIHUgPSBlW2kgKyA4ID4+IDJdLCB3ID0gZVtpICsgMjggPj4gMl0sIEIgPSBlW2kgKyAzNiA+PiAyXSwgbCA9IGVbaSArIDIwID4+IDJdLCB0ID0gbCAtIDEgfCAwOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGlmICh0KSB7CiAgICAgICAgICAgICAgICAgIGcgPSB0ICYgMTsKICAgICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICAgIGlmICgobCB8IDApID09IDIpIHsKICAgICAgICAgICAgICAgICAgICAgIGkgPSB3OwogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZm9yIChDID0gdCAmIC0yLCBpID0gdzsgYSA9IGVbaSArIDE2MCA+PiAyXSAtIGVbaSArIDE1MiA+PiAyXSB8IDAsIG4gPSBuID4+PiAwID4gYSA+Pj4gMCA/IG4gOiBhLCBhID0gZVtpICsgMTY0ID4+IDJdIC0gZVtpICsgMTU2ID4+IDJdIHwgMCwgbiA9IG4gPj4+IDAgPiBhID4+PiAwID8gbiA6IGEsIGEgPSBlW2kgKyAzMTIgPj4gMl0gLSBlW2kgKyAzMDQgPj4gMl0gfCAwLCBuID0gbiA+Pj4gMCA+IGEgPj4+IDAgPyBuIDogYSwgYSA9IGVbaSArIDMxNiA+PiAyXSAtIGVbaSArIDMwOCA+PiAyXSB8IDAsIG4gPSBuID4+PiAwID4gYSA+Pj4gMCA/IG4gOiBhLCBpID0gaSArIDMwNCB8IDAsIGsgPSBrICsgMiB8IDAsIChDIHwgMCkgIT0gKGsgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChnICYmIChrID0gZVtpICsgMTYwID4+IDJdIC0gZVtpICsgMTUyID4+IDJdIHwgMCwgayA9IGsgPj4+IDAgPCBuID4+PiAwID8gbiA6IGssIGkgPSBlW2kgKyAxNjQgPj4gMl0gLSBlW2kgKyAxNTYgPj4gMl0gfCAwLCBuID0gaSA+Pj4gMCA8IGsgPj4+IDAgPyBrIDogaSksIGsgPSAwLCBuID4+PiAwID4gMTM0MjE3NzI3KQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoQyA9IG4gPDwgNSwgZyA9IGhlKEMpLCAhZyAmJiBuKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHQpCiAgICAgICAgICAgICAgICAgICAgICBmb3IgKG8gPSB1IC0gbyB8IDAsIHcgPSB3ICsgWih0LCAxNTIpIHwgMCwgaSA9IGwgLSAyIHwgMCwgYSA9ICh2IHwgMCkgPCAyOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICBuID0gaSwgaSA9IHcsIHcgPSBpIC0gMTUyIHwgMCwgeSA9IGVbdyA+PiAyXSwgcCA9IGVbaSAtIDE0NCA+PiAyXSwgYyA9IGVbaSArIDEyID4+IDJdLCBoID0gZVtpICsgNCA+PiAyXSwgbCA9IGMgLSBoIHwgMCwgdSA9IGggJiAxLCBIID0gZVtpID4+IDJdLCB0ID0gZVtpICsgOCA+PiAyXSAtIEggfCAwOwogICAgICAgICAgICAgICAgICAgICAgICBrOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoIWEgJiB0ID4+PiAwID4gMTUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IDAsIHQgPj4+IDAgPj0gOCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChrID0gIXU7IG8yW3IgfCAwXSgoaSA8PCAyKSArIEIgfCAwLCBnLCBsLCBrLCBvLCA4KSwgcyA9IGkgKyAxNSB8IDAsIGkgPSBpICsgOCB8IDAsIHQgPj4+IDAgPiBzID4+PiAwOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPj4+IDAgPj0gdCA+Pj4gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8yW3IgfCAwXSgoaSA8PCAyKSArIEIgfCAwLCBnLCBsLCAhdSwgbywgdCAtIGkgfCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoSiA9IGVbaSAtIDE0MCA+PiAyXSAtIGVbaSAtIDE0OCA+PiAyXSB8IDAsIEQgPSBsIC0gSiB8IDAsIHMgPSB0ID4+PiAwIDwgdiA+Pj4gMCA/IHQgOiB2LCBtID0gKHQgPj4+IDApIC8gKHMgPj4+IDApICYgLTgsIGsgPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSBVMig0MCksICFpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEUgPSBoZShDKSwgZVtpID4+IDJdID0gRSwgIUUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbDEoQSksIFIoaSksIGsgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbaSArIDM2ID4+IDJdID0gciwgZVtpICsgMjQgPj4gMl0gPSBCLCBlW2kgKyAyMCA+PiAyXSA9IG8sIGVbaSArIDE2ID4+IDJdID0gbCwgZVtpICsgMTIgPj4gMl0gPSB1LCBlW2kgKyA4ID4+IDJdID0gSiwgZVtpICsgNCA+PiAyXSA9IEQsIGVbaSArIDI4ID4+IDJdID0gWihrLCBtKSwgayA9IGsgKyAxIHwgMCwgZVtpICsgMzIgPj4gMl0gPSAoayB8IDApID09IChzIHwgMCkgPyB0IDogWihtLCBrKSwgYjEoQSwgMTEyLCBpKSwgKGsgfCAwKSA9PSAocyB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgbDEoQSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgdSA9IEggJiAxOwogICAgICAgICAgICAgICAgICAgICAgICBrOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoIWEgJiBsID4+PiAwID4gMSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoaCB8IDApID09IChjIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoayA9ICF1LCBpID0gMCwgKGwgfCAwKSAhPSAxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGggPSBsICYgLTIsIHUgPSAwOyBvMltmIHwgMF0oKFooaSwgbykgPDwgMikgKyBCIHwgMCwgZywgdCwgayksIG8yW2YgfCAwXSgoWihvLCBpIHwgMSkgPDwgMikgKyBCIHwgMCwgZywgdCwgayksIGkgPSBpICsgMiB8IDAsIHUgPSB1ICsgMiB8IDAsIChoIHwgMCkgIT0gKHUgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGwgJiAxKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8yW2YgfCAwXSgoWihpLCBvKSA8PCAyKSArIEIgfCAwLCBnLCB0LCBrKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobSA9IHAgLSB5IHwgMCwgeSA9IHQgLSBtIHwgMCwgaCA9IGwgPj4+IDAgPCB2ID4+PiAwID8gbCA6IHYsIHAgPSBoIC0gMSB8IDAsIHMgPSAobCA+Pj4gMCkgLyAoaCA+Pj4gMCkgfCAwLCBrID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID0gVTIoNDApLCAhaSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID0gaGUoQyksIGVbaSA+PiAyXSA9IGMsICFjKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwxKEEpLCBSKGkpLCBrID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW2kgKyAzNiA+PiAyXSA9IGYsIGVbaSArIDI0ID4+IDJdID0gQiwgZVtpICsgMjAgPj4gMl0gPSBvLCBlW2kgKyAxNiA+PiAyXSA9IHQsIGVbaSArIDEyID4+IDJdID0gdSwgZVtpICsgOCA+PiAyXSA9IG0sIGVbaSArIDQgPj4gMl0gPSB5LCBlW2kgKyAyOCA+PiAyXSA9IFooaywgcyksIGMgPSAoayB8IDApID09IChwIHwgMCksIGsgPSBrICsgMSB8IDAsIGVbaSArIDMyID4+IDJdID0gYyA/IGwgOiBaKHMsIGspLCBiMShBLCAxMTMsIGkpLCAoayB8IDApID09IChoIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBsMShBKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IG4gLSAxIHwgMCwgIW4pCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgayA9IDE7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBsMShBKSwgayA9IDA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBSKGcpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gazsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBFNChBLCBpLCByKSB7CiAgICAgICAgICAgICAgdmFyIGYgPSAwLCBrID0gMCwgdCA9IDAsIG4gPSAwLCBsID0gMCwgYSA9IDAsIHUgPSAwLCBvID0gMCwgZyA9IDAsIGggPSAwLCBzID0gMCwgdyA9IDAsIEIgPSAwLCBjID0gMCwgdiA9IDAsIEMgPSAwOwogICAgICAgICAgICAgIGlmICh0ID0gWCAtIDgwIHwgMCwgWCA9IHQsIGwgPSBlW2kgKyA4ID4+IDJdLCBnID0gZVtsID4+IDJdLCBzID0gRzJbbCArIDQgPj4gMV0sIHMpIHsKICAgICAgICAgICAgICAgIGZvciAodiA9IGcgKyA2IHwgMCwgbCA9IDAsIEMgPSBzIC0gMiAmIDY1NTM1LCB3ID0gMTsgOyApIHsKICAgICAgICAgICAgICAgICAgQiA9IFoobCwgNikgKyBnIHwgMCwgbyA9IEcyW0IgPj4gMV0sIGYgPSBlW0EgKyAxNiA+PiAyXTsKICAgICAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgICAgIGlmIChvID4+PiAwID49IGYgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgIGVbdCArIDIwID4+IDJdID0gZiwgZVt0ICsgMTYgPj4gMl0gPSBvLCBRKHIsIDIsIDE2OTU1LCB0ICsgMTYgfCAwKTsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChrID0gRzJbQiArIDQgPj4gMV0sIChrICsgMSAmIDY1NTM1KSA+Pj4gMCA8PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICB1MlsoZVtBICsgMjQgPj4gMl0gKyBaKG8sIDUyKSB8IDApICsgNDggPj4gMV0gPSBHMltCICsgMiA+PiAxXTsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChjID0gayAtIDEgfCAwLCBoID0gYyAmIDY1NTM1LCBmID4+PiAwIDw9IGggPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgIGVbdCArIDQgPj4gMl0gPSBmLCBlW3QgPj4gMl0gPSBoLCBRKHIsIDIsIDE2OTE0LCB0KTsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChHMltCICsgMiA+PiAxXSB8IChvIHwgMCkgPT0gKGggfCAwKSB8fCAoayA9IGVbQSArIDI0ID4+IDJdLCBmID0gayArIFoobywgNTIpIHwgMCwgZVt0ICsgNzIgPj4gMl0gPSBlW2YgKyA0OCA+PiAyXSwgbiA9IGVbZiArIDQ0ID4+IDJdLCB1ID0gdCAtIC02NCB8IDAsIGVbdSA+PiAyXSA9IGVbZiArIDQwID4+IDJdLCBlW3UgKyA0ID4+IDJdID0gbiwgbiA9IGVbZiArIDM2ID4+IDJdLCBlW3QgKyA1NiA+PiAyXSA9IGVbZiArIDMyID4+IDJdLCBlW3QgKyA2MCA+PiAyXSA9IG4sIG4gPSBlW2YgKyAyOCA+PiAyXSwgZVt0ICsgNDggPj4gMl0gPSBlW2YgKyAyNCA+PiAyXSwgZVt0ICsgNTIgPj4gMl0gPSBuLCBuID0gZVtmICsgMjAgPj4gMl0sIGVbdCArIDQwID4+IDJdID0gZVtmICsgMTYgPj4gMl0sIGVbdCArIDQ0ID4+IDJdID0gbiwgbiA9IGVbZiArIDEyID4+IDJdLCBlW3QgKyAzMiA+PiAyXSA9IGVbZiArIDggPj4gMl0sIGVbdCArIDM2ID4+IDJdID0gbiwgbiA9IGVbZiArIDQgPj4gMl0sIGVbdCArIDI0ID4+IDJdID0gZVtmID4+IDJdLCBlW3QgKyAyOCA+PiAyXSA9IG4sIG4gPSBaKGgsIDUyKSwgayA9IG4gKyBrIHwgMCwgZVtmICsgNDggPj4gMl0gPSBlW2sgKyA0OCA+PiAyXSwgYSA9IGVbayArIDQ0ID4+IDJdLCBlW2YgKyA0MCA+PiAyXSA9IGVbayArIDQwID4+IDJdLCBlW2YgKyA0NCA+PiAyXSA9IGEsIGEgPSBlW2sgKyAzNiA+PiAyXSwgZVtmICsgMzIgPj4gMl0gPSBlW2sgKyAzMiA+PiAyXSwgZVtmICsgMzYgPj4gMl0gPSBhLCBhID0gZVtrICsgMjggPj4gMl0sIGVbZiArIDI0ID4+IDJdID0gZVtrICsgMjQgPj4gMl0sIGVbZiArIDI4ID4+IDJdID0gYSwgYSA9IGVbayArIDIwID4+IDJdLCBlW2YgKyAxNiA+PiAyXSA9IGVbayArIDE2ID4+IDJdLCBlW2YgKyAyMCA+PiAyXSA9IGEsIGEgPSBlW2sgKyAxMiA+PiAyXSwgZVtmICsgOCA+PiAyXSA9IGVbayArIDggPj4gMl0sIGVbZiArIDEyID4+IDJdID0gYSwgYSA9IGVbayArIDQgPj4gMl0sIGVbZiA+PiAyXSA9IGVbayA+PiAyXSwgZVtmICsgNCA+PiAyXSA9IGEsIGsgPSBlW3QgKyAyOCA+PiAyXSwgZiA9IG4gKyBlW0EgKyAyNCA+PiAyXSB8IDAsIGVbZiA+PiAyXSA9IGVbdCArIDI0ID4+IDJdLCBlW2YgKyA0ID4+IDJdID0gaywgZVtmICsgNDggPj4gMl0gPSBlW3QgKyA3MiA+PiAyXSwgayA9IGVbdSArIDQgPj4gMl0sIGVbZiArIDQwID4+IDJdID0gZVt1ID4+IDJdLCBlW2YgKyA0NCA+PiAyXSA9IGssIGsgPSBlW3QgKyA2MCA+PiAyXSwgZVtmICsgMzIgPj4gMl0gPSBlW3QgKyA1NiA+PiAyXSwgZVtmICsgMzYgPj4gMl0gPSBrLCBrID0gZVt0ICsgNTIgPj4gMl0sIGVbZiArIDI0ID4+IDJdID0gZVt0ICsgNDggPj4gMl0sIGVbZiArIDI4ID4+IDJdID0gaywgayA9IGVbdCArIDQ0ID4+IDJdLCBlW2YgKyAxNiA+PiAyXSA9IGVbdCArIDQwID4+IDJdLCBlW2YgKyAyMCA+PiAyXSA9IGssIGsgPSBlW3QgKyAzNiA+PiAyXSwgZVtmICsgOCA+PiAyXSA9IGVbdCArIDMyID4+IDJdLCBlW2YgKyAxMiA+PiAyXSA9IGssIGwgKyAxID4+PiAwID49IHMgPj4+IDApKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPSB3LCAhKGwgLSBzICYgMSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgayA9IGMsIGYgPSBaKHcsIDYpICsgZyB8IDAsIHUgPSBHMltmID4+IDFdOwogICAgICAgICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh1IHwgMCkgIT0gKG8gfCAwKSAmJiAoayA9IG8sICh1IHwgMCkgIT0gKGggfCAwKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgICAgIHUyW2YgPj4gMV0gPSBrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGsgPSB3ICsgMSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBpZiAoKGwgJiA2NTUzNSkgPT0gKEMgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICBmID0gYywgdSA9IFooaywgNiksIG4gPSB1ICsgZyB8IDAsIGEgPSBHMltuID4+IDFdOwogICAgICAgICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChhIHwgMCkgIT0gKG8gfCAwKSAmJiAoZiA9IG8sIChhIHwgMCkgIT0gKGggfCAwKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgICAgIHUyW24gPj4gMV0gPSBmOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBjLCB1ID0gdSArIHYgfCAwLCBuID0gRzJbdSA+PiAxXTsKICAgICAgICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobiB8IDApICE9IChvIHwgMCkgJiYgKGYgPSBvLCAobiB8IDApICE9IChoIHwgMCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgICB1Mlt1ID4+IDFdID0gZjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoayA9IGsgKyAyIHwgMCwgKGsgJiA2NTUzNSkgPT0gKHMgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgdTJbKGVbQSArIDI0ID4+IDJdICsgWihvLCA1MikgfCAwKSArIDQ4ID4+IDFdID0gRzJbQiArIDIgPj4gMV07CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKHcgPSB3ICsgMSB8IDAsIGwgPSBsICsgMSB8IDAsIChzIHwgMCkgPT0gKGwgfCAwKSkKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGwgPSBlW2kgKyA4ID4+IDJdLCBnID0gZVtsID4+IDJdOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBnICYmIChSKGcpLCBsID0gZVtpICsgOCA+PiAyXSksIFIobCksIGVbaSArIDggPj4gMl0gPSAwLCBYID0gdCArIDgwIHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBENChBLCBpLCByLCBmKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDAsIHIgPSByIHwgMCwgZiA9IGYgfCAwOwogICAgICAgICAgICAgIHZhciBrID0gMCwgdCA9IDAsIG4gPSAwLCBsID0gMCwgYSA9IDAsIHUgPSAwLCBvID0gMDsKICAgICAgICAgICAgICBpZiAoayA9IEUyKDEsIDM2KSwgZVtBICsgNzIgPj4gMl0gPSBrLCAhaykKICAgICAgICAgICAgICAgIHJldHVybiBRKGYsIDEsIDMyMzksIDApLCAwOwogICAgICAgICAgICAgIEJpKHIsIGspLCBrID0gZVtyICsgMjQgPj4gMl07CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKCFrIHx8ICh0ID0gZVtyICsgMTYgPj4gMl0sICF0KSkKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIGlmIChyID0gMCwgKHQgfCAwKSAhPSAxKQogICAgICAgICAgICAgICAgICBmb3IgKHUgPSB0ICYgLTI7IG4gPSBaKHIsIDUyKSwgbCA9IG4gKyBrIHwgMCwgbyA9IGVbbCArIDQ0ID4+IDJdLCBvICYmIChlWyhuICsgZVtlW0EgKyA3MiA+PiAyXSArIDI0ID4+IDJdIHwgMCkgKyA0NCA+PiAyXSA9IG8sIGVbbCArIDQ0ID4+IDJdID0gMCksIG4gPSBaKHIgfCAxLCA1MiksIGwgPSBuICsgayB8IDAsIG8gPSBlW2wgKyA0NCA+PiAyXSwgbyAmJiAoZVsobiArIGVbZVtBICsgNzIgPj4gMl0gKyAyNCA+PiAyXSB8IDApICsgNDQgPj4gMl0gPSBvLCBlW2wgKyA0NCA+PiAyXSA9IDApLCByID0gciArIDIgfCAwLCBhID0gYSArIDIgfCAwLCAodSB8IDApICE9IChhIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICBpZiAoISh0ICYgMSkgfHwgKHIgPSBaKHIsIDUyKSwgayA9IHIgKyBrIHwgMCwgdCA9IGVbayArIDQ0ID4+IDJdLCAhdCkpCiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICBlWyhyICsgZVtlW0EgKyA3MiA+PiAyXSArIDI0ID4+IDJdIHwgMCkgKyA0NCA+PiAyXSA9IHQsIGVbayArIDQ0ID4+IDJdID0gMDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgdSA9IDA7CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKCFjMChlW0EgKyAxOTYgPj4gMl0sIDEzMSwgZikgfHwgIWMwKGVbQSArIDE5NiA+PiAyXSwgMTMyLCBmKSB8fCAhYzAoZVtBICsgMTk2ID4+IDJdLCAxMzMsIGYpKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgbiA9IGVbQSArIDE5NiA+PiAyXSwgayA9IGVbbiA+PiAyXSwgdCA9IGVbbiArIDggPj4gMl07CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIGlmIChrKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSAxLCBsID0gayAmIDEsIChrIHwgMCkgPT0gMSkKICAgICAgICAgICAgICAgICAgICAgIGsgPSAwOwogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgZm9yIChvID0gayAmIC0yLCBhID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgayA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXIgfHwgKGsgPSAwLCAhKG8yW2VbdCA+PiAyXV0oQSwgaSwgZikgfCAwKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSAobzJbZVt0ICsgNCA+PiAyXV0oQSwgaSwgZikgfCAwKSAhPSAwOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0gaywgdCA9IHQgKyA4IHwgMCwgYSA9IGEgKyAyIHwgMCwgKG8gfCAwKSA9PSAoYSB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgayA9ICFyOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAociA9IGwgPyAwIDogciwgayB8ICFsIHx8IChyID0gKG8yW2VbdCA+PiAyXV0oQSwgaSwgZikgfCAwKSAhPSAwKSwgZVtuID4+IDJdID0gMCwgcikKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZVtuID4+IDJdID0gMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICghYzAoZVtBICsgMTkyID4+IDJdLCAxMzQsIGYpIHx8ICFjMChlW0EgKyAxOTIgPj4gMl0sIDEzNSwgZikgfHwgIWMwKGVbQSArIDE5MiA+PiAyXSwgMTM2LCBmKSB8fCAhYzAoZVtBICsgMTkyID4+IDJdLCAxMzcsIGYpIHx8ICFjMChlW0EgKyAxOTIgPj4gMl0sIDEzOCwgZikgfHwgIWMwKGVbQSArIDE5MiA+PiAyXSwgMTM5LCBmKSB8fCAhYzAoZVtBICsgMTkyID4+IDJdLCAxNDAsIGYpKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICBpZiAoIWVbQSArIDE2ID4+IDJdKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIGlmICghYzAoZVtBICsgMTkyID4+IDJdLCAxNDEsIGYpKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIGlmIChHMltBICsgODAgPj4gMV0gIT0gNCkKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICBpZiAoIWMwKGVbQSArIDE5MiA+PiAyXSwgMTQyLCBmKSkKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCFjMChlW0EgKyAxOTIgPj4gMl0sIDE0MywgZikgfHwgZVtBICsgMTAwID4+IDJdICYmICFjMChlW0EgKyAxOTIgPj4gMl0sIDE0NCwgZikgfHwgKEcyW0EgKyA4MCA+PiAxXSAmIDMzMDI0KSA9PSAzMzAyNCAmJiAhYzAoZVtBICsgMTkyID4+IDJdLCAxNDUsIGYpIHx8IGVbQSArIDIwMCA+PiAyXSAmJiAhYzAoZVtBICsgMTkyID4+IDJdLCAxNDYsIGYpIHx8ICFjMChlW0EgKyAxOTIgPj4gMl0sIDE0NywgZikgfHwgIWMwKGVbQSArIDE5MiA+PiAyXSwgMTQ4LCBmKSkKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIG4gPSBlW0EgKyAxOTIgPj4gMl0sIGsgPSBlW24gPj4gMl0sIHQgPSBlW24gKyA4ID4+IDJdOwogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGspIHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0gMSwgbCA9IGsgJiAxLCAoayB8IDApICE9IDEpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICBrID0gMDsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHJldHVybiBlW24gPj4gMl0gPSAwLCAxOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGZvciAodSA9IGsgJiAtMiwgYSA9IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgayA9IDA7CiAgICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgICAgaWYgKCFyIHx8IChrID0gMCwgIShvMltlW3QgPj4gMl1dKEEsIGksIGYpIHwgMCkpKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgayA9IChvMltlW3QgKyA0ID4+IDJdXShBLCBpLCBmKSB8IDApICE9IDA7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChyID0gaywgdCA9IHQgKyA4IHwgMCwgYSA9IGEgKyAyIHwgMCwgKHUgfCAwKSA9PSAoYSB8IDApKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgayA9ICFyOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdSA9IGwgPyAwIDogciwgayB8ICFsIHx8ICh1ID0gKG8yW2VbdCA+PiAyXV0oQSwgaSwgZikgfCAwKSAhPSAwKSwgZVtuID4+IDJdID0gMDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIHUgfCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIHRrKEEsIGksIHIpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIGkgPSBpIHwgMCwgciA9IHIgfCAwOwogICAgICAgICAgICAgIHZhciBmID0gMCwgayA9IDAsIHQgPSAwLCBuID0gMCwgbCA9IDAsIGEgPSAwLCB1ID0gMCwgbyA9IDA7CiAgICAgICAgICAgICAgdCA9IFggLSA4MCB8IDAsIFggPSB0LCBlW3QgKyA3NiA+PiAyXSA9IDEsIGsgPSBlW0EgKyAyMDAgPj4gMl0sIGYgPSBlW2sgKyA0MCA+PiAyXTsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIGlmIChmKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIGlmIChmID0gWihlW0EgKyAxMDggPj4gMl0sIGVbQSArIDEwNCA+PiAyXSksIGVbayArIDM2ID4+IDJdID0gZiwgZiA9IEUyKGYsIDQwKSwgayA9IGVbQSArIDIwMCA+PiAyXSwgZVtrICsgNDAgPj4gMl0gPSBmLCAhZikgewogICAgICAgICAgICAgICAgICAgIGsgPSAwOwogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKCFlW2sgKyAzNiA+PiAyXSkKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgICBpZiAoayA9IDAsIGwgPSBaKG4sIDQwKSwgZiA9IGwgKyBmIHwgMCwgZVtmICsgMjAgPj4gMl0gPSAwLCBlW2YgKyAyOCA+PiAyXSA9IDEwMCwgdSA9IEUyKDEwMCwgMjQpLCBhID0gZVtBICsgMjAwID4+IDJdLCBmID0gZVthICsgNDAgPj4gMl0sIGVbKGwgKyBmIHwgMCkgKyAyNCA+PiAyXSA9IHUsICF1KQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICBpZiAobiA9IG4gKyAxIHwgMCwgIShuID4+PiAwIDwgZFthICsgMzYgPj4gMl0pKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHUgPSBlW0EgKyA0NCA+PiAyXTsKICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgaWYgKCFlW2YgKyAxNiA+PiAyXSkKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGYgPSBaKHUsIDQwKSArIGYgfCAwLCAhZVtmICsgNCA+PiAyXSkgewogICAgICAgICAgICAgICAgICAgICAgaWYgKGYgPSBlW0EgKyA1MiA+PiAyXSwgayA9IGVbQSArIDQ4ID4+IDJdICsgMiB8IDAsIGYgPSBrID4+PiAwIDwgMiA/IGYgKyAxIHwgMCA6IGYsIEdpKGksIGssIGYsIHIpKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgayA9IDAsIFEociwgMSwgODk0MSwgMCk7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoZiA9IGVbZiArIDE2ID4+IDJdLCBrID0gZVtmID4+IDJdLCBmID0gZVtmICsgNCA+PiAyXSwgayA9IGsgKyAyIHwgMCwgZiA9IGsgPj4+IDAgPCAyID8gZiArIDEgfCAwIDogZiwgR2koaSwgaywgZiwgcikpCiAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgIGsgPSAwLCBRKHIsIDEsIDg5NDEsIDApOwogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKGVbQSArIDggPj4gMl0gIT0gMjU2KQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIGVbQSArIDggPj4gMl0gPSA4OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgbCA9IFooZVtBICsgMTA4ID4+IDJdLCBlW0EgKyAxMDQgPj4gMl0pOwogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICBpZiAoIWwpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgaWYgKGsgPSBlW0EgKyAxNTYgPj4gMl0sIGYgPSAwLCBsID4+PiAwID49IDgpCiAgICAgICAgICAgICAgICAgICAgZm9yIChhID0gbCAmIC04LCBuID0gMDsgZVsoayArIFooZiwgNTY0NCkgfCAwKSArIDU1ODggPj4gMl0gPSAtMSwgZVsoayArIFooZiB8IDEsIDU2NDQpIHwgMCkgKyA1NTg4ID4+IDJdID0gLTEsIGVbKGsgKyBaKGYgfCAyLCA1NjQ0KSB8IDApICsgNTU4OCA+PiAyXSA9IC0xLCBlWyhrICsgWihmIHwgMywgNTY0NCkgfCAwKSArIDU1ODggPj4gMl0gPSAtMSwgZVsoayArIFooZiB8IDQsIDU2NDQpIHwgMCkgKyA1NTg4ID4+IDJdID0gLTEsIGVbKGsgKyBaKGYgfCA1LCA1NjQ0KSB8IDApICsgNTU4OCA+PiAyXSA9IC0xLCBlWyhrICsgWihmIHwgNiwgNTY0NCkgfCAwKSArIDU1ODggPj4gMl0gPSAtMSwgZVsoayArIFooZiB8IDcsIDU2NDQpIHwgMCkgKyA1NTg4ID4+IDJdID0gLTEsIGYgPSBmICsgOCB8IDAsIG4gPSBuICsgOCB8IDAsIChhIHwgMCkgIT0gKG4gfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICBpZiAobiA9IGwgJiA3LCAhbikKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICBmb3IgKDsgZVsoayArIFooZiwgNTY0NCkgfCAwKSArIDU1ODggPj4gMl0gPSAtMSwgZiA9IGYgKyAxIHwgMCwgbyA9IG8gKyAxIHwgMCwgKG4gfCAwKSAhPSAobyB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGsgPSAwLCAhQ2UoQSwgdCArIDcyIHwgMCwgMCwgdCArIDY4IHwgMCwgdCAtIC02NCB8IDAsIHQgKyA2MCB8IDAsIHQgKyA1NiB8IDAsIHQgKyA1MiB8IDAsIHQgKyA3NiB8IDAsIGksIHIpKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgZm9yIChsID0gdSArIDEgfCAwOyA7ICkgewogICAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFlW3QgKyA3NiA+PiAyXSkKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgaWYgKGYgPSBlW3QgKyA3MiA+PiAyXSwgIVBlKEEsIGYsIDAsIDAsIGksIHIpIHx8IChhID0gZVtBICsgMTA0ID4+IDJdLCBvID0gZVtBICsgMTA4ID4+IDJdLCBuID0gZiArIDEgfCAwLCBlW3QgKyAzMiA+PiAyXSA9IG4sIGVbdCArIDM2ID4+IDJdID0gWihhLCBvKSwgUShyLCA0LCAyMjg1NCwgdCArIDMyIHwgMCksICFVNChlW0EgKyAyMDggPj4gMl0sIGVbZVtBICsgNzYgPj4gMl0gKyAyNCA+PiAyXSkpKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICBpZiAoayA9IGVbQSArIDE1NiA+PiAyXSArIFooZiwgNTY0NCkgfCAwLCBhID0gZVtrICsgNTU5NiA+PiAyXSwgYSAmJiAoUihhKSwgZVtrICsgNTU5NiA+PiAyXSA9IDAsIGVbayArIDU2MDAgPj4gMl0gPSAwKSwgZVt0ICsgMTYgPj4gMl0gPSBuLCBRKHIsIDQsIDI4OTUxLCB0ICsgMTYgfCAwKSwgKGYgfCAwKSA9PSAodSB8IDApKSB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoZiA9IGVbQSArIDIwMCA+PiAyXSwgayA9IGVbZiArIDggPj4gMl0sIGYgPSBlW2YgKyAxMiA+PiAyXSwgayA9IGsgKyAyIHwgMCwgZiA9IGsgPj4+IDAgPCAyID8gZiArIDEgfCAwIDogZiwgR2koaSwgaywgZiwgcikpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICBrID0gMCwgUShyLCAxLCA4OTQxLCAwKTsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChlW3QgKyA0ID4+IDJdID0gbCwgZVt0ID4+IDJdID0gbiwgUShyLCAyLCAyNTAwMywgdCksIGsgPSAwLCBDZShBLCB0ICsgNzIgfCAwLCAwLCB0ICsgNjggfCAwLCB0IC0gLTY0IHwgMCwgdCArIDYwIHwgMCwgdCArIDU2IHwgMCwgdCArIDUyIHwgMCwgdCArIDc2IHwgMCwgaSwgcikpCiAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgayA9IEM2KEEsIHIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gWCA9IHQgKyA4MCB8IDAsIGsgfCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIFU0KEEsIGkpIHsKICAgICAgICAgICAgICB2YXIgciA9IDAsIGYgPSAwLCBrID0gMCwgdCA9IDAsIG4gPSAwLCBsID0gMCwgYSA9IDAsIHUgPSAwLCBvID0gMCwgZyA9IDAsIGggPSAwLCBzID0gMCwgdyA9IDAsIEIgPSAwLCBjID0gMCwgdiA9IDAsIEMgPSAwLCBtID0gMCwgeSA9IDAsIHAgPSAwLCBIID0gMCwgSiA9IDA7CiAgICAgICAgICAgICAgaWYgKG0gPSBlW0EgKyAyNCA+PiAyXSwgIWVbbSArIDE2ID4+IDJdKQogICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgICAgZm9yICh5ID0gZVttICsgMjQgPj4gMl0sIGggPSBlW2VbZVtBICsgMjAgPj4gMl0gPj4gMl0gKyAyMCA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgIHIgPSBlW3kgKyAzNiA+PiAyXSwgZVtpICsgMzYgPj4gMl0gPSByLCBmID0gWihyLCAxNTIpLCByID0gZVtoICsgMjggPj4gMl0sIGYgPSBmICsgciB8IDAsIHAgPSBlW0EgKyA2NCA+PiAyXTsKICAgICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgICAgaWYgKHApIHsKICAgICAgICAgICAgICAgICAgICByID0gciArIFooZVtoICsgMjQgPj4gMl0sIDE1MikgfCAwLCBjID0gZVtyIC0gMTQ0ID4+IDJdIC0gZVtyIC0gMTUyID4+IDJdIHwgMCwgbyA9IGYgKyAxMiB8IDAsIGsgPSBmICsgNCB8IDAsIHQgPSBlW2YgKyA4ID4+IDJdLCB1ID0gZVtmID4+IDJdLCBmID0gMzY7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBvID0gZiArIDE0OCB8IDAsIGsgPSBmICsgMTQwIHwgMCwgdCA9IGVbZiArIDE0NCA+PiAyXSwgdSA9IGVbZiArIDEzNiA+PiAyXSwgYyA9IHQgLSB1IHwgMCwgZiA9IDUyOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgSCA9IGVbZiArIGggPj4gMl07CiAgICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgICBpZiAoIUgpCiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgIHMgPSBlW2sgPj4gMl0sIHYgPSBlW28gPj4gMl0sIG8gPSB0IC0gdSB8IDAsIGcgPSBlW2kgKyA4ID4+IDJdLCBuID0gZywgYSA9IGVbaSArIDQwID4+IDJdLCBrID0gYSAmIDMxLCAoYSAmIDYzKSA+Pj4gMCA+PSAzMiA/IChyID0gLTEgPDwgaywgZiA9IDApIDogKGYgPSAtMSA8PCBrLCByID0gZiB8ICgxIDw8IGspIC0gMSAmIC0xID4+PiAzMiAtIGspLCBsID0gZiBeIC0xLCBrID0gZVtpICsgMTYgPj4gMl0sIHcgPSBsICsgayB8IDAsIGYgPSByIF4gLTEsIHIgPSBmLCByID0gayA+Pj4gMCA+IHcgPj4+IDAgPyByICsgMSB8IDAgOiByLCBCID0gbiwgayA9IHcsIG4gPSBhICYgMzEsIChhICYgNjMpID4+PiAwID49IDMyID8gciA9IHIgPj4+IG4gfCAwIDogciA9ICgoMSA8PCBuKSAtIDEgJiByKSA8PCAzMiAtIG4gfCBrID4+PiBuLCBuID0gQiArIHIgfCAwOwogICAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChyID4+PiAwIDwgdSA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoQiA9IHUgLSByIHwgMCwgQyA9IDAsIGsgPSAwLCB0ID4+PiAwIDw9IG4gPj4+IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgciA9IG8sIG8gPSBuIC0gdSB8IDAsIGsgPSByIC0gbyB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBpZiAoQyA9IHIgLSB1IHwgMCwgdCA+Pj4gMCA8PSBuID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG8gPSBvIC0gQyB8IDAsIEIgPSAwLCBrID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIEIgPSAwLCBvID0gZywgayA9IHQgLSBuIHwgMDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgdCA9IHYgLSBzIHwgMCwgbiA9IGVbaSArIDEyID4+IDJdLCByID0gbCwgbCA9IGVbaSArIDIwID4+IDJdLCB3ID0gciArIGwgfCAwLCByID0gZiwgciA9IGwgPj4+IDAgPiB3ID4+PiAwID8gciArIDEgfCAwIDogciwgZiA9IHcsIGwgPSBhICYgMzEsIChhICYgNjMpID4+PiAwID49IDMyID8gciA9IHIgPj4+IGwgfCAwIDogciA9ICgoMSA8PCBsKSAtIDEgJiByKSA8PCAzMiAtIGwgfCBmID4+PiBsLCBsID0gciArIG4gfCAwOwogICAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChyID4+PiAwIDwgcyA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9IHMgLSByIHwgMCwgYSA9IDAsIGYgPSAwLCBsID4+PiAwID49IHYgPj4+IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgZiA9IHQsIHQgPSBsIC0gcyB8IDAsIGYgPSBmIC0gdCB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA9IHIgLSBzIHwgMCwgbCA+Pj4gMCA+PSB2ID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHQgPSB0IC0gYSB8IDAsIHIgPSAwLCBmID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIHIgPSAwLCB0ID0gbiwgZiA9IHYgLSBsIHwgMDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKHUgPSAwLCAoQyB8IGEgfCAoayB8IGYpKSA8IDAgfHwgKG8gfCB0KSA8IDApCiAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgIGwgPSBaKHIsIGcpICsgQiB8IDA7CiAgICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgICAgazogewogICAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSBlW2kgKyA0NCA+PiAyXSwgYSA9IFooYSwgYykgKyBDIHwgMCwgciB8IGEgfCAoKGcgfCAwKSAhPSAoYyB8IDApIHwgbCkgfHwgKG8gfCAwKSAhPSAoZyB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHQgfCAwKSAhPSAobiB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgICByID0gKHAgPyAzNiA6IDUyKSArIGggfCAwLCBlW2kgKyA0NCA+PiAyXSA9IGVbciA+PiAyXSwgZVtyID4+IDJdID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyKQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBpZiAoIW4gfHwgKGQwKG4sIDAsIGcsIDApLCBxMikgfHwgKHIgPSBaKG4sIGcpLCByID4+PiAwID4gMTA3Mzc0MTgyMykgfHwgKGYgPSBQMChyIDw8IDIpLCBlW2kgKyA0NCA+PiAyXSA9IGYsICFmKSkKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgIGlmIChrID0gZVtpICsgOCA+PiAyXSwgciA9IGVbaSArIDEyID4+IDJdLCAoayB8IDApID09IChvIHwgMCkgJiAociB8IDApID09ICh0IHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICBkMihmLCAwLCBaKHIsIGspIDw8IDIpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoIXQpCiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgIGlmIChuID0gdCAmIDEsIGcgPSBvIDw8IDIsIGsgPSBlW2kgKyA0NCA+PiAyXSArIChsIDw8IDIpIHwgMCwgdSA9IChhIDw8IDIpICsgSCB8IDAsICh0IHwgMCkgIT0gMSkKICAgICAgICAgICAgICAgICAgICAgIGZvciAoZiA9IHQgJiAyMTQ3NDgzNjQ2LCB0ID0gMDsgayA9IEYyKGssIHUsIGcpLCByID0gYyA8PCAyLCBhID0gciArIHUgfCAwLCB1ID0gciArIGEgfCAwLCBrID0gRjIoKGVbaSArIDggPj4gMl0gPDwgMikgKyBrIHwgMCwgYSwgZykgKyAoZVtpICsgOCA+PiAyXSA8PCAyKSB8IDAsIHQgPSB0ICsgMiB8IDAsIChmIHwgMCkgIT0gKHQgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFuKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICBGMihrLCB1LCBnKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoaCA9IGggKyA3NiB8IDAsIHkgPSB5ICsgNTIgfCAwLCBpID0gaSArIDUyIHwgMCwgdSA9IDEsIEogPSBKICsgMSB8IDAsIEogPj4+IDAgPCBkW20gKyAxNiA+PiAyXSkKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gdTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBvMChBLCBpKSB7CiAgICAgICAgICAgICAgdmFyIHIgPSAwLCBmID0gMCwgayA9IDAsIHQgPSAwLCBuID0gMCwgbCA9IDAsIGEgPSAwLCB1ID0gMCwgbyA9IDAsIGcgPSAwLCBoID0gMCwgcyA9IDAsIHcgPSAwOwogICAgICAgICAgICAgIGlmICghaSkKICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGlmICghQSkgewogICAgICAgICAgICAgICAgICBrID0gdjEoaSk7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoaSA+Pj4gMCA+PSA0Mjk0OTY3MjMyKSB7CiAgICAgICAgICAgICAgICAgIGVbMTI0ODVdID0gNDgsIGsgPSAwOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgbCA9IGkgPj4+IDAgPCAxMSA/IDE2IDogaSArIDExICYgLTgsIGsgPSBBIC0gOCB8IDAsIHUgPSBlW2sgKyA0ID4+IDJdLCB0ID0gdSAmIC04OwogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICBpZiAoISh1ICYgMykpIHsKICAgICAgICAgICAgICAgICAgICBpZiAobCA+Pj4gMCA8IDI1NiB8fCB0ID4+PiAwID49IGwgKyA0ID4+PiAwICYmIChyID0gaywgdCAtIGwgPj4+IDAgPD0gZVsxMzA3OF0gPDwgMSA+Pj4gMCkpCiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgIHIgPSAwOwogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgYSA9IHQgKyBrIHwgMDsKICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgIGlmICh0ID4+PiAwID49IGwgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChmID0gdCAtIGwgfCAwLCBmID4+PiAwIDwgMTYpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICBlW2sgKyA0ID4+IDJdID0gdSAmIDEgfCBsIHwgMiwgciA9IGwgKyBrIHwgMCwgZVtyICsgNCA+PiAyXSA9IGYgfCAzLCBlW2EgKyA0ID4+IDJdID0gZVthICsgNCA+PiAyXSB8IDEsIHVpKHIsIGYpOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKGVbMTI5NjRdID09IChhIHwgMCkpIHsKICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gdCArIGVbMTI5NjFdIHwgMCwgdCA+Pj4gMCA8PSBsID4+PiAwKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgZVtrICsgNCA+PiAyXSA9IHUgJiAxIHwgbCB8IDIsIGYgPSBsICsgayB8IDAsIHIgPSB0IC0gbCB8IDAsIGVbZiArIDQgPj4gMl0gPSByIHwgMSwgZVsxMjk2MV0gPSByLCBlWzEyOTY0XSA9IGY7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoZVsxMjk2M10gPT0gKGEgfCAwKSkgewogICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0ICsgZVsxMjk2MF0gfCAwLCB0ID4+PiAwIDwgbCA+Pj4gMCkKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgIHIgPSB0IC0gbCB8IDA7CiAgICAgICAgICAgICAgICAgICAgICBrOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID4+PiAwID49IDE2KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgNCA+PiAyXSA9IHUgJiAxIHwgbCB8IDIsIGYgPSBsICsgayB8IDAsIGVbZiArIDQgPj4gMl0gPSByIHwgMSwgdCA9IHQgKyBrIHwgMCwgZVt0ID4+IDJdID0gciwgZVt0ICsgNCA+PiAyXSA9IGVbdCArIDQgPj4gMl0gJiAtMjsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVbayArIDQgPj4gMl0gPSB0IHwgdSAmIDEgfCAyLCByID0gdCArIGsgfCAwLCBlW3IgKyA0ID4+IDJdID0gZVtyICsgNCA+PiAyXSB8IDEsIHIgPSAwOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgZVsxMjk2M10gPSBmLCBlWzEyOTYwXSA9IHI7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoZiA9IGVbYSArIDQgPj4gMl0sIGYgJiAyIHx8IChvID0gdCArIChmICYgLTgpIHwgMCwgbyA+Pj4gMCA8IGwgPj4+IDApKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICBoID0gbyAtIGwgfCAwLCBuID0gZVthICsgMTIgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgazogewogICAgICAgICAgICAgICAgICAgICAgaWYgKGYgPj4+IDAgPD0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0gZVthICsgOCA+PiAyXSwgKHIgfCAwKSA9PSAobiB8IDApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9IDUxODMyLCB3ID0gZVsxMjk1OF0gJiBoMShmID4+PiAzIHwgMCksIGVbcyA+PiAyXSA9IHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlW3IgKyAxMiA+PiAyXSA9IG4sIGVbbiArIDggPj4gMl0gPSByOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgZyA9IGVbYSArIDI0ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoKG4gfCAwKSAhPSAoYSB8IDApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IGVbYSArIDggPj4gMl0sIGVbciArIDEyID4+IDJdID0gbiwgZVtuICsgOCA+PiAyXSA9IHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBBOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSBlW2EgKyAyMCA+PiAyXSwgcikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBhICsgMjAgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSBlW2EgKyAxNiA+PiAyXSwgIXIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gYSArIDE2IHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IHQgPSBmLCBuID0gciwgZiA9IHIgKyAyMCB8IDAsIHIgPSBlW3IgKyAyMCA+PiAyXSwgISghciAmJiAoZiA9IG4gKyAxNiB8IDAsIHIgPSBlW24gKyAxNiA+PiAyXSwgIXIpKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgIGVbdCA+PiAyXSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBuID0gMDsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlmICghZykKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgIGYgPSBlW2EgKyAyOCA+PiAyXSwgciA9IChmIDw8IDIpICsgNTIxMzYgfCAwOwogICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtyID4+IDJdID09IChhIHwgMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtyID4+IDJdID0gbiwgbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9IDUxODM2LCB3ID0gZVsxMjk1OV0gJiBoMShmKSwgZVtzID4+IDJdID0gdzsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIEE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtnICsgMTYgPj4gMl0gPT0gKGEgfCAwKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtnICsgMTYgPj4gMl0gPSBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgZVtnICsgMjAgPj4gMl0gPSBuOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbikKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgaWYgKGVbbiArIDI0ID4+IDJdID0gZywgciA9IGVbYSArIDE2ID4+IDJdLCByICYmIChlW24gKyAxNiA+PiAyXSA9IHIsIGVbciArIDI0ID4+IDJdID0gbiksIHIgPSBlW2EgKyAyMCA+PiAyXSwgIXIpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICBlW24gKyAyMCA+PiAyXSA9IHIsIGVbciArIDI0ID4+IDJdID0gbjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKGggPj4+IDAgPD0gMTUpIHsKICAgICAgICAgICAgICAgICAgICAgIGVbayArIDQgPj4gMl0gPSB1ICYgMSB8IG8gfCAyLCByID0gayArIG8gfCAwLCBlW3IgKyA0ID4+IDJdID0gZVtyICsgNCA+PiAyXSB8IDE7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlW2sgKyA0ID4+IDJdID0gdSAmIDEgfCBsIHwgMiwgZiA9IGwgKyBrIHwgMCwgZVtmICsgNCA+PiAyXSA9IGggfCAzLCByID0gayArIG8gfCAwLCBlW3IgKyA0ID4+IDJdID0gZVtyICsgNCA+PiAyXSB8IDEsIHVpKGYsIGgpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIHIgPSBrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGsgPSByICsgOCB8IDAsIHIgfHwgKHIgPSB2MShpKSwgayA9IDAsICFyKSkKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIGYgPSBlW0EgLSA0ID4+IDJdLCBmID0gKGYgJiAzID8gLTQgOiAtOCkgKyAoZiAmIC04KSB8IDAsIEYyKHIsIEEsIGkgPj4+IDAgPiBmID4+PiAwID8gZiA6IGkpLCBSKEEpLCBrID0gcjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIGs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gbGsoQSwgaSwgciwgZikgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDAsIGYgPSBmIHwgMDsKICAgICAgICAgICAgICB2YXIgayA9IDAsIHQgPSAwLCBuID0gMCwgbCA9IDAsIGEgPSAwLCB1ID0gMCwgbyA9IDA7CiAgICAgICAgICAgICAgbiA9IFggLSAxNiB8IDAsIFggPSBuLCBlW0EgKyA4ID4+IDJdID09IDE2ID8gbCA9IGVbQSArIDE1NiA+PiAyXSArIFooZVtBICsgMjA0ID4+IDJdLCA1NjQ0KSB8IDAgOiBsID0gZVtBICsgMTIgPj4gMl07CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKCFyKSB7CiAgICAgICAgICAgICAgICAgIFEoZiwgMSwgNjg2OSwgMCk7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoYSA9IGVbQSArIDcyID4+IDJdLCBrID0gMSwgaDIoaSwgbiArIDggfCAwLCAxKSwgdCA9IGVbbiArIDggPj4gMl0sIHQgPj4+IDAgPj0gMikgewogICAgICAgICAgICAgICAgICBRKGYsIDIsIDIwMjc2LCAwKTsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICgodCArIDEgfCAwKSAhPSAociB8IDApKSB7CiAgICAgICAgICAgICAgICAgIGsgPSAwLCBRKGYsIDIsIDY4NjksIDApOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZiA9IGVbYSArIDE2ID4+IDJdOwogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICBpZiAoIWYpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgaWYgKGsgPSBlW2wgKyA1NTg0ID4+IDJdLCBmID4+PiAwID49IDgpCiAgICAgICAgICAgICAgICAgICAgZm9yIChhID0gZiAmIC04LCByID0gMDsgZVtrICsgODYzNiA+PiAyXSA9IDAsIGVbayArIDc1NTYgPj4gMl0gPSAwLCBlW2sgKyA2NDc2ID4+IDJdID0gMCwgZVtrICsgNTM5NiA+PiAyXSA9IDAsIGVbayArIDQzMTYgPj4gMl0gPSAwLCBlW2sgKyAzMjM2ID4+IDJdID0gMCwgZVtrICsgMjE1NiA+PiAyXSA9IDAsIGVbayArIDEwNzYgPj4gMl0gPSAwLCBrID0gayArIDg2NDAgfCAwLCByID0gciArIDggfCAwLCAoYSB8IDApICE9IChyIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgaWYgKGYgPSBmICYgNywgIWYpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgZm9yIChyID0gMDsgZVtrICsgMTA3NiA+PiAyXSA9IDAsIGsgPSBrICsgMTA4MCB8IDAsIHIgPSByICsgMSB8IDAsIChmIHwgMCkgIT0gKHIgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChyID0gZVtsICsgNTYwOCA+PiAyXSwgciAmJiAoUihyKSwgZVtsICsgNTYwOCA+PiAyXSA9IDAsIHQgPSBlW24gKyA4ID4+IDJdKSwgIXQpIHsKICAgICAgICAgICAgICAgICAgayA9IDE7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmb3IgKGEgPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICBpID0gaSArIDEgfCAwLCBoMihpLCBuICsgMTIgfCAwLCAxKTsKICAgICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICAgIGlmICghZVtsICsgNTYzMiA+PiAyXSB8fCAoZiA9IGVbbCArIDU2MjggPj4gMl0sIGVbZiA+PiAyXSAhPSBlW24gKyAxMiA+PiAyXSkgfHwgKHQgPSBlW2YgKyA0ID4+IDJdLCB1ID0gZVtBICsgNzIgPj4gMl0sICh0IHwgMCkgIT0gZVt1ICsgMTYgPj4gMl0pKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICBpZiAociA9IGVbZiArIDggPj4gMl0sIHIpIHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChrID0gMCwgdCA9IFoodCwgdCksIGVbciArIDE2ID4+IDJdICE9IChaKHQsIGVbKGVbciA+PiAyXSA8PCAyKSArIDMxMjAwID4+IDJdKSB8IDApIHx8IChvID0gVTIodCA8PCAyKSwgZVtsICsgNTYwOCA+PiAyXSA9IG8sICFvKSkKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgIG8yW2VbKGVbciA+PiAyXSA8PCAyKSArIDMxNjMyID4+IDJdXShlW3IgKyAxMiA+PiAyXSwgbywgdCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChyID0gZVtmICsgMTIgPj4gMl0sICFyKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICBpZiAoayA9IDAsIGYgPSBlW3UgKyAxNiA+PiAyXSwgZVtyICsgMTYgPj4gMl0gIT0gKFooZiwgZVsoZVtyID4+IDJdIDw8IDIpICsgMzEyMDAgPj4gMl0pIHwgMCkgfHwgKHQgPSBVMihmIDw8IDIpLCAhdCkpCiAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgIG8yW2VbKGVbciA+PiAyXSA8PCAyKSArIDMxNjQ4ID4+IDJdXShlW3IgKyAxMiA+PiAyXSwgdCwgZiksIHIgPSBlW3UgKyAxNiA+PiAyXTsKICAgICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoIXIpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICB1ID0gciAmIDcsIGsgPSBlW2wgKyA1NTg0ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgazogewogICAgICAgICAgICAgICAgICAgICAgICBpZiAociA+Pj4gMCA8IDgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICByID0gdDsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobyA9IHIgJiAtOCwgZiA9IDAsIHIgPSB0OyBlW2sgKyAxMDc2ID4+IDJdID0gZVtyID4+IDJdLCBlW2sgKyAyMTU2ID4+IDJdID0gZVtyICsgNCA+PiAyXSwgZVtrICsgMzIzNiA+PiAyXSA9IGVbciArIDggPj4gMl0sIGVbayArIDQzMTYgPj4gMl0gPSBlW3IgKyAxMiA+PiAyXSwgZVtrICsgNTM5NiA+PiAyXSA9IGVbciArIDE2ID4+IDJdLCBlW2sgKyA2NDc2ID4+IDJdID0gZVtyICsgMjAgPj4gMl0sIGVbayArIDc1NTYgPj4gMl0gPSBlW3IgKyAyNCA+PiAyXSwgZVtrICsgODYzNiA+PiAyXSA9IGVbciArIDI4ID4+IDJdLCBrID0gayArIDg2NDAgfCAwLCByID0gciArIDMyIHwgMCwgZiA9IGYgKyA4IHwgMCwgKG8gfCAwKSAhPSAoZiB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgaWYgKGYgPSAwLCAhdSkKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBlW2sgKyAxMDc2ID4+IDJdID0gZVtyID4+IDJdLCBrID0gayArIDEwODAgfCAwLCByID0gciArIDQgfCAwLCBmID0gZiArIDEgfCAwLCAodSB8IDApICE9IChmIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBSKHQpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChrID0gMSwgYSA9IGEgKyAxIHwgMCwgIShhID4+PiAwIDwgZFtuICsgOCA+PiAyXSkpCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBYID0gbiArIDE2IHwgMCwgayB8IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gTTQoQSwgaSwgcikgewogICAgICAgICAgICAgIHZhciBmID0gMCwgayA9IDAsIHQgPSAwLCBuID0gMCwgbCA9IDAsIGEgPSAwLCB1ID0gMCwgbyA9IDAsIGcgPSAwLCBoID0gMCwgcyA9IDAsIHcgPSAwLCBCID0gMCwgYyA9IDAsIHYgPSAwLCBDID0gMDsKICAgICAgICAgICAgICBrID0gWCAtIDE2IHwgMCwgWCA9IGssIHQgPSBlW0EgKyA0NCA+PiAyXSwgQiA9IGVbQSArIDQ4ID4+IDJdLCBhID0gZVtBICsgMjA4ID4+IDJdLCBlW2EgKyAxNiA+PiAyXSA9IDAsIGVbQSArIDggPj4gMl0gPSAwLCBlW2sgKyA4ID4+IDJdID0gMCwgbiA9IGsgKyA4IHwgMDsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAoIWNyKEEsIHQsIEIsIG4sIHIpIHx8ICh1ID0gZVtrICsgOCA+PiAyXSwgbyA9IEIgLSB1IHwgMCwgZyA9IHQgKyB1IHwgMCwgIShJWyhlW0EgKyAxNTYgPj4gMl0gKyBaKGVbQSArIDIwNCA+PiAyXSwgNTY0NCkgfCAwKSArIDU2NDAgfCAwXSAmIDQpIHwgKEcyW0EgKyA4MCA+PiAxXSAtIDMgJiA2NTUzNSkgPj4+IDAgPCA0IHx8IChlW2sgKyA4ID4+IDJdID0gMCwgaDYoQSwgZywgbiksIG4gPSBlW2sgKyA4ID4+IDJdLCBvID0gbyAtIG4gfCAwLCBnID0gbiArIGcgfCAwLCB1ID0gbiArIHUgfCAwKSwgZVtrICsgOCA+PiAyXSA9IDAsICFmcihBLCBhLCBnLCBrICsgOCB8IDAsIG8sIHIpKSkKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIGYgPSBlW2sgKyA4ID4+IDJdICsgdSB8IDAsIGsyKHQgKyA2IHwgMCwgZiwgNCksIGVbQSArIDE2ID4+IDJdICYmICh1ID0gZVtBICsgMjAgPj4gMl0gPyAxIDogMiwgazIoZVtBICsgMzYgPj4gMl0sIGVbQSArIDIwNCA+PiAyXSwgdSksIHUgPSB1ICsgZVtBICsgMzYgPj4gMl0gfCAwLCBlW0EgKyAzNiA+PiAyXSA9IHUsIGsyKHUsIGYsIDQpLCBlW0EgKyAzNiA+PiAyXSA9IGVbQSArIDM2ID4+IDJdICsgNCksIGMgPSBlW0EgKyAxNTYgPj4gMl0sIHYgPSBlW0EgKyAyMDggPj4gMl0sIGcgPSAwLCBDID0gQSArIDgwIHwgMCwgcyA9IGVbQSArIDIwNCA+PiAyXSwgaCA9IG9yKEMsIDAsIHMpLCBlW0EgKyAxMiA+PiAyXSA9IGVbQSArIDEyID4+IDJdICsgMSwgdSA9IEIgLSBmIHwgMCwgdCA9IGYgKyB0IHwgMDsKICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgIGlmIChoID4+PiAwIDwgMikgewogICAgICAgICAgICAgICAgICAgICAgZiA9IHU7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBmb3IgKG8gPSAxLCBmID0gdTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChlW0EgKyA4ID4+IDJdID0gbywgZVtrICsgMTIgPj4gMl0gPSAwLCBhID0gayArIDEyIHwgMCwgIWNyKEEsIHQsIGYsIGEsIHIpIHx8IChuID0gZVtrICsgMTIgPj4gMl0sIGVbayArIDEyID4+IDJdID0gMCwgdyA9IHQgKyBuIHwgMCwgZiA9IGYgLSBuIHwgMCwgIWZyKEEsIHYsIHcsIGEsIGYsIHIpKSkKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gdCArIDYgfCAwLCBhID0gZVtrICsgMTIgPj4gMl0sIHQgPSBhICsgbiB8IDAsIGsyKGwsIHQsIDQpLCBlW0EgKyAxNiA+PiAyXSAmJiAobCA9IGVbQSArIDIwID4+IDJdID8gMSA6IDIsIGsyKGVbQSArIDM2ID4+IDJdLCBlW0EgKyAyMDQgPj4gMl0sIGwpLCBsID0gbCArIGVbQSArIDM2ID4+IDJdIHwgMCwgZVtBICsgMzYgPj4gMl0gPSBsLCBrMihsLCB0LCA0KSwgZVtBICsgMzYgPj4gMl0gPSBlW0EgKyAzNiA+PiAyXSArIDQpLCBmID0gZiAtIGEgfCAwLCB0ID0gYSArIHcgfCAwLCBnID0gYSArIChuICsgZyB8IDApIHwgMCwgZVtBICsgMTIgPj4gMl0gPSBlW0EgKyAxMiA+PiAyXSArIDEsIG8gPSBvICsgMSB8IDAsIChoIHwgMCkgPT0gKG8gfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChjID0gYyArIFoocywgNTY0NCkgfCAwLCBlW2MgKyA0MjAgPj4gMl0pCiAgICAgICAgICAgICAgICAgICAgZm9yIChuID0gMTsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChlW3YgKyAxNiA+PiAyXSA9IG4sIG8gPSAwLCBzID0gb3IoQywgbiwgZVtBICsgMjA0ID4+IDJdKSwgcykKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbQSArIDggPj4gMl0gPSBvLCBlW2sgKyAxMiA+PiAyXSA9IDAsIGggPSBrICsgMTIgfCAwLCAhY3IoQSwgdCwgZiwgaCwgcikgfHwgKGEgPSBlW2sgKyAxMiA+PiAyXSwgZVtrICsgMTIgPj4gMl0gPSAwLCB3ID0gdCArIGEgfCAwLCBmID0gZiAtIGEgfCAwLCAhZnIoQSwgdiwgdywgaCwgZiwgcikpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IHQgKyA2IHwgMCwgaCA9IGVbayArIDEyID4+IDJdLCB0ID0gaCArIGEgfCAwLCBrMihsLCB0LCA0KSwgZVtBICsgMTYgPj4gMl0gJiYgKGwgPSBlW0EgKyAyMCA+PiAyXSA/IDEgOiAyLCBrMihlW0EgKyAzNiA+PiAyXSwgZVtBICsgMjA0ID4+IDJdLCBsKSwgbCA9IGwgKyBlW0EgKyAzNiA+PiAyXSB8IDAsIGVbQSArIDM2ID4+IDJdID0gbCwgazIobCwgdCwgNCksIGVbQSArIDM2ID4+IDJdID0gZVtBICsgMzYgPj4gMl0gKyA0KSwgZiA9IGYgLSBoIHwgMCwgdCA9IGggKyB3IHwgMCwgZyA9IGggKyAoYSArIGcgfCAwKSB8IDAsIGVbQSArIDEyID4+IDJdID0gZVtBICsgMTIgPj4gMl0gKyAxLCBvID0gbyArIDEgfCAwLCAocyB8IDApID09IChvIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPSBuICsgMSB8IDAsICEobiA+Pj4gMCA8PSBkW2MgKyA0MjAgPj4gMl0pKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChmID0gMCwgbCA9IGksIGkgPSAoZyAtIHUgfCAwKSArIEIgfCAwLCAoTDAobCwgZVtBICsgNDQgPj4gMl0sIGksIHIpIHwgMCkgIT0gKGkgfCAwKSkKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICBmID0gMSwgZVtBICsgMjA0ID4+IDJdID0gZVtBICsgMjA0ID4+IDJdICsgMTsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGYgPSAwOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gWCA9IGsgKyAxNiB8IDAsIGY7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gbHIoQSwgaSwgciwgZiwgaywgdCwgbiwgbCkgewogICAgICAgICAgICAgIHZhciBhID0gMCwgdSA9IDAsIG8gPSAwLCBnID0gMCwgaCA9IDAsIHMgPSAwLCB3ID0gMCwgQiA9IDAsIGMgPSAwLCB2ID0gMCwgQyA9IDAsIG0gPSAwOwogICAgICAgICAgICAgIGggPSBlW2VbQSArIDI0ID4+IDJdICsgMjQgPj4gMl0gKyBaKGksIDUyKSB8IDAsIGcgPSBlW2ggKyA0ID4+IDJdLCBvID0gZyAtIDEgfCAwLCB3ID0gZVtBICsgNjAgPj4gMl0sIHUgPSBvICsgdyB8IDAsIEIgPSAwIC0gIWcgfCAwLCBhID0gQiwgdiA9IGVbZVtlW0EgKyAyMCA+PiAyXSA+PiAyXSArIDIwID4+IDJdICsgWihpLCA3NikgfCAwLCBzID0gZVt2ICsgMTIgPj4gMl0sIGEgPSBuMCh1LCB1ID4+PiAwIDwgdyA+Pj4gMCA/IGEgKyAxIHwgMCA6IGEsIGcsIDApLCBjID0gYSA+Pj4gMCA+IHMgPj4+IDAgPyBzIDogYSwgdSA9IGVbaCA+PiAyXSwgaCA9IHUgLSAxIHwgMCwgQyA9IGVbQSArIDU2ID4+IDJdLCBzID0gaCArIEMgfCAwLCB3ID0gMCAtICF1IHwgMCwgYSA9IHcsIG0gPSBlW3YgKyA4ID4+IDJdLCBhID0gbjAocywgcyA+Pj4gMCA8IEMgPj4+IDAgPyBhICsgMSB8IDAgOiBhLCB1LCAwKSwgcyA9IGEgPj4+IDAgPiBtID4+PiAwID8gbSA6IGEsIGEgPSBCLCBtID0gZVt2ICsgNCA+PiAyXSwgQyA9IGVbQSArIDUyID4+IDJdLCBvID0gQyArIG8gfCAwLCBhID0gbjAobywgbyA+Pj4gMCA8IEMgPj4+IDAgPyBhICsgMSB8IDAgOiBhLCBnLCAwKSwgbyA9IGEgPj4+IDAgPCBtID4+PiAwID8gbSA6IGEsIGEgPSB3LCBCID0gZVt2ID4+IDJdLCBnID0gaCwgaCA9IGVbQSArIDQ4ID4+IDJdLCBnID0gZyArIGggfCAwLCBhID0gbjAoZywgZyA+Pj4gMCA8IGggPj4+IDAgPyBhICsgMSB8IDAgOiBhLCB1LCAwKSwgYSA9IGEgPj4+IDAgPCBCID4+PiAwID8gQiA6IGEsIGcgPSAwLCBCID0gZVsoZVtlW0EgKyAzMiA+PiAyXSArIDU1ODQgPj4gMl0gKyBaKGksIDEwODApIHwgMCkgKyAyMCA+PiAyXSwgciA9IGVbdiArIDIwID4+IDJdICsgKHIgPyAwIC0gciB8IDAgOiAtMSkgfCAwOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGlmICghcikgewogICAgICAgICAgICAgICAgICBBID0gcywgZyA9IGEsIGkgPSBvOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGggPSByIC0gMSB8IDAsIHUgPSAoZiAmIDEpIDw8IGgsIHUgPj4+IDAgPCBhID4+PiAwICYmIChBID0gciAmIDMxLCBnID0gYSAtIHUgfCAwLCAociAmIDYzKSA+Pj4gMCA+PSAzMiA/IChhID0gLTEgPDwgQSwgQSA9IDApIDogKGkgPSAoMSA8PCBBKSAtIDEgJiAtMSA+Pj4gMzIgLSBBLCBBID0gLTEgPDwgQSwgYSA9IGkgfCBBKSwgaSA9IEEgXiAtMSwgQSA9IGcgKyBpIHwgMCwgYSA9IGEgXiAtMSwgYSA9IEEgPj4+IDAgPCBpID4+PiAwID8gYSArIDEgfCAwIDogYSwgaSA9IEEsIEEgPSByICYgMzEsIChyICYgNjMpID4+PiAwID49IDMyID8gZyA9IGEgPj4+IEEgfCAwIDogZyA9ICgoMSA8PCBBKSAtIDEgJiBhKSA8PCAzMiAtIEEgfCBpID4+PiBBKSwgQSA9IDAsIGkgPSAwLCBmID0gZiA+Pj4gMSA8PCBoLCBmID4+PiAwIDwgbyA+Pj4gMCAmJiAoaSA9IHIgJiAzMSwgdyA9IG8gLSBmIHwgMCwgKHIgJiA2MykgPj4+IDAgPj0gMzIgPyAoYSA9IC0xIDw8IGksIGkgPSAwKSA6IChhID0gKDEgPDwgaSkgLSAxICYgLTEgPj4+IDMyIC0gaSwgaSA9IC0xIDw8IGksIGEgPSBhIHwgaSksIG8gPSBpIF4gLTEsIGkgPSB3ICsgbyB8IDAsIGEgPSBhIF4gLTEsIGEgPSBpID4+PiAwIDwgbyA+Pj4gMCA/IGEgKyAxIHwgMCA6IGEsIG8gPSBpLCBpID0gciAmIDMxLCAociAmIDYzKSA+Pj4gMCA+PSAzMiA/IGkgPSBhID4+PiBpIHwgMCA6IGkgPSAoKDEgPDwgaSkgLSAxICYgYSkgPDwgMzIgLSBpIHwgbyA+Pj4gaSksIHUgPj4+IDAgPCBzID4+PiAwICYmIChBID0gciAmIDMxLCBvID0gcyAtIHUgfCAwLCAociAmIDYzKSA+Pj4gMCA+PSAzMiA/IChhID0gLTEgPDwgQSwgQSA9IDApIDogKGEgPSAoMSA8PCBBKSAtIDEgJiAtMSA+Pj4gMzIgLSBBLCBBID0gLTEgPDwgQSwgYSA9IGEgfCBBKSwgdSA9IEEgXiAtMSwgQSA9IG8gKyB1IHwgMCwgYSA9IGEgXiAtMSwgYSA9IEEgPj4+IDAgPCB1ID4+PiAwID8gYSArIDEgfCAwIDogYSwgdSA9IEEsIEEgPSByICYgMzEsIChyICYgNjMpID4+PiAwID49IDMyID8gQSA9IGEgPj4+IEEgfCAwIDogQSA9ICgoMSA8PCBBKSAtIDEgJiBhKSA8PCAzMiAtIEEgfCB1ID4+PiBBKSwgZiA+Pj4gMCA+PSBjID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgIGMgPSAwOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgbyA9IGMgLSBmIHwgMCwgZiA9IHIgJiAzMSwgKHIgJiA2MykgPj4+IDAgPj0gMzIgPyAoYSA9IC0xIDw8IGYsIGYgPSAwKSA6IChhID0gKDEgPDwgZikgLSAxICYgLTEgPj4+IDMyIC0gZiwgZiA9IC0xIDw8IGYsIGEgPSBhIHwgZiksIHUgPSBmIF4gLTEsIGYgPSBvICsgdSB8IDAsIGEgPSBhIF4gLTEsIGEgPSBmID4+PiAwIDwgdSA+Pj4gMCA/IGEgKyAxIHwgMCA6IGEsIHUgPSBmLCBmID0gciAmIDMxLCAociAmIDYzKSA+Pj4gMCA+PSAzMiA/IGMgPSBhID4+PiBmIHwgMCA6IGMgPSAoKDEgPDwgZikgLSAxICYgYSkgPDwgMzIgLSBmIHwgdSA+Pj4gZjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIHIgPSAoQiB8IDApID09IDEgPyAyIDogMywgZiA9IHIgKyBBIHwgMCwgZiA9IChBID4+PiAwID4gZiA+Pj4gMCA/IC0xIDogZikgPj4+IDAgPiBrID4+PiAwLCBBID0gciArIGMgfCAwLCBmID0gZiAmIChBID4+PiAwIDwgYyA+Pj4gMCA/IC0xIDogQSkgPj4+IDAgPiB0ID4+PiAwLCBBID0gZyAtIHIgfCAwLCBmID0gZiAmIChBID4+PiAwIDw9IGcgPj4+IDAgPyBBIDogMCkgPj4+IDAgPCBuID4+PiAwLCBBID0gaSAtIHIgfCAwLCBmICYgKEEgPj4+IDAgPD0gaSA+Pj4gMCA/IEEgOiAwKSA+Pj4gMCA8IGwgPj4+IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gUzQoQSwgaSwgciwgZikgewogICAgICAgICAgICAgIHZhciBrID0gMCwgdCA9IDAsIG4gPSAwLCBsID0gMCwgYSA9IDAsIHUgPSAwLCBvID0gMCwgZyA9IDAsIGggPSAwLCBzID0gMCwgdyA9IDA7CiAgICAgICAgICAgICAgdSA9IFggLSAyNTYgfCAwLCBYID0gdTsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAoIUEpIHsKICAgICAgICAgICAgICAgICAgQSA9IDA7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoIShlW0EgPj4gMl0gPT0gKGkgfCAwKSAmIGVbQSArIDQgPj4gMl0gPT0gKHIgfCAwKSkpIHsKICAgICAgICAgICAgICAgICAgZm9yIChlW0EgKyA0ID4+IDJdID0gciwgZVtBID4+IDJdID0gaSwgZVt1ID4+IDJdID0gciwgZVt1ICsgMTI4ID4+IDJdID0gaSwgayA9IHIsIG4gPSBpOyB3ID0gYSwgYSA9IGEgKyAxIHwgMCwgbCA9IGEgPDwgMiwgcyA9IChrICsgMSB8IDApIC8gMiB8IDAsIGVbbCArIHUgPj4gMl0gPSBzLCBvID0gbCArICh1ICsgMTI4IHwgMCkgfCAwLCBsID0gKG4gKyAxIHwgMCkgLyAyIHwgMCwgZVtvID4+IDJdID0gbCwgaCA9IFooaywgbiksIHQgPSBoICsgdCB8IDAsIGsgPSBzLCBuID0gbCwgaCA+Pj4gMCA+IDE7ICkKICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgIGVbQSArIDggPj4gMl0gPSB0OwogICAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgICAgazogewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IGVbQSArIDEyID4+IDJdLCAhaSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgUihpKSwgZVtBICsgMTIgPj4gMl0gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0IDw8IDQsIHQgPj4+IDAgPD0gZFtBICsgMTYgPj4gMl0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSBvMChlW0EgKyAxMiA+PiAyXSwgdCksIGkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFEoZiwgMSwgMTA0MTIsIDApLCBpID0gZVtBICsgMTIgPj4gMl0sICFpKQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgIFIoaSksIGVbQSArIDEyID4+IDJdID0gMDsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIFIoQSksIEEgPSAwOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZVtBICsgMTIgPj4gMl0gPSBpLCByID0gaSwgaSA9IGVbQSArIDE2ID4+IDJdLCBkMihyICsgaSB8IDAsIDAsIHQgLSBpIHwgMCksIGVbQSArIDE2ID4+IDJdID0gdCwgciA9IGVbQSArIDQgPj4gMl0sIGkgPSBlW0EgPj4gMl07CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKG4gPSBlW0EgKyAxMiA+PiAyXSwgdykKICAgICAgICAgICAgICAgICAgICBmb3IgKGYgPSAwLCBrID0gKFooaSwgcikgPDwgNCkgKyBuIHwgMCwgdCA9IGs7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICBpID0gZiA8PCAyLCBvID0gZVtpICsgdSA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChvIHwgMCkgPD0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICBoID0gbyAtIDEgfCAwLCBnID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgICAgICAgIGs6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0gZVtpICsgKHUgKyAxMjggfCAwKSA+PiAyXSwgKHIgfCAwKSA8PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzID0gbyAmIDEsIGEgPSAwLCAobyB8IDApICE9IDEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gdCwgdCA9IHI7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbbiA+PiAyXSA9IGssICh0IHwgMCkgPT0gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gbiArIDE2IHwgMCwgayA9IGsgKyAxNiB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtuICsgMTYgPj4gMl0gPSBrLCBrID0gayArIDE2IHwgMCwgbiA9IG4gKyAzMiB8IDAsIGwgPSAodCB8IDApID4gMiwgdCA9IHQgLSAyIHwgMCwgbCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gKChnIHwgMCkgPT0gKGggfCAwKSB8IGcpICYgMSwgdCA9IGwgPyBrIDogaSArIChyIDw8IDQpIHwgMCwgayA9IGwgPyBrIDogaSwgZyA9IGcgKyAxIHwgMCwgKG8gfCAwKSA9PSAoZyB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsID0gbyAmIDIxNDc0ODM2NDY7IGkgPSAoYSB8IDApID09IChoIHwgMCksIGEgPSBhICsgMiB8IDAsIGsgPSBpID8gayA6IHQsIHQgPSBrLCBpID0gaywgZyA9IGcgKyAyIHwgMCwgKGwgfCAwKSAhPSAoZyB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB0ID0gKHIgPDwgNCkgKyBpIHwgMCwgciA9ICgoYSB8IDApID09IChoIHwgMCkgfCBhKSAmIDEsIHQgPSByID8gayA6IHQsIGsgPSByID8gayA6IGk7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBpZiAoZiA9IGYgKyAxIHwgMCwgKHcgfCAwKSA9PSAoZiB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVbbiA+PiAyXSA9IDA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAociA9IGVbQSArIDggPj4gMl0sICFyKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgaWYgKGsgPSBlW0EgKyAxMiA+PiAyXSwgciA+Pj4gMCA+PSA0KQogICAgICAgICAgICAgICAgICBmb3IgKGkgPSByICYgLTQsIG4gPSAwOyBlW2sgKyA2MCA+PiAyXSA9IDAsIGVbayArIDUyID4+IDJdID0gOTk5LCBlW2sgKyA1NiA+PiAyXSA9IDAsIGVbayArIDQ0ID4+IDJdID0gMCwgZVtrICsgMzYgPj4gMl0gPSA5OTksIGVbayArIDQwID4+IDJdID0gMCwgZVtrICsgMjggPj4gMl0gPSAwLCBlW2sgKyAyMCA+PiAyXSA9IDk5OSwgZVtrICsgMjQgPj4gMl0gPSAwLCBlW2sgKyAxMiA+PiAyXSA9IDAsIGVbayArIDQgPj4gMl0gPSA5OTksIGVbayArIDggPj4gMl0gPSAwLCBrID0gayAtIC02NCB8IDAsIG4gPSBuICsgNCB8IDAsIChpIHwgMCkgIT0gKG4gfCAwKTsgKQogICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgIGlmIChpID0gciAmIDMsICFpKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgZm9yIChuID0gMDsgZVtrICsgMTIgPj4gMl0gPSAwLCBlW2sgKyA0ID4+IDJdID0gOTk5LCBlW2sgKyA4ID4+IDJdID0gMCwgayA9IGsgKyAxNiB8IDAsIG4gPSBuICsgMSB8IDAsIChpIHwgMCkgIT0gKG4gfCAwKTsgKQogICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBYID0gdSArIDI1NiB8IDAsIEE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gZ2koQSkgewogICAgICAgICAgICAgIHZhciBpID0gMCwgciA9IDAsIGYgPSAwLCBrID0gMCwgdCA9IDAsIG4gPSAwLCBsID0gMCwgYSA9IDAsIHUgPSAwLCBvID0gMCwgZyA9IDAsIGggPSAwLCBzID0gMDsKICAgICAgICAgICAgICBpZiAobiA9IGVbQSArIDE2ID4+IDJdLCBuID4+PiAwID49IDMyKQogICAgICAgICAgICAgICAgcmV0dXJuIGVbQSArIDggPj4gMl07CiAgICAgICAgICAgICAgZiA9IGVbQSArIDIwID4+IDJdOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGlmICgoZiB8IDApID49IDQpIHsKICAgICAgICAgICAgICAgICAgaSA9IGVbQSA+PiAyXSwgciA9IGVbaSAtIDMgPj4gMl0sIGYgPSBmIC0gNCB8IDAsIGVbQSArIDIwID4+IDJdID0gZiwgZVtBID4+IDJdID0gaSAtIDQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoKGYgfCAwKSA8PSAwKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgbyA9IGYgJiAxLCBpID0gZVtBID4+IDJdOwogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICBpZiAoKGYgfCAwKSA9PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgayA9IDI0OwogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZm9yICh1ID0gZiAmIDIxNDc0ODM2NDYsIGsgPSAyNDsgbCA9IGkgLSAxIHwgMCwgZVtBID4+IDJdID0gbCwgYSA9IElbaSB8IDBdLCBpID0gaSAtIDIgfCAwLCBlW0EgPj4gMl0gPSBpLCBlW0EgKyAyMCA+PiAyXSA9IGYgLSAxLCBsID0gSVtsIHwgMF0sIGYgPSBmIC0gMiB8IDAsIGVbQSArIDIwID4+IDJdID0gZiwgciA9IGEgPDwgayB8IHIgfCBsIDw8IGsgLSA4LCBrID0gayAtIDE2IHwgMCwgdCA9IHQgKyAyIHwgMCwgKHUgfCAwKSAhPSAodCB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgbyAmJiAoZVtBID4+IDJdID0gaSAtIDEsIGkgPSBJW2kgfCAwXSwgZVtBICsgMjAgPj4gMl0gPSBmIC0gMSwgciA9IGkgPDwgayB8IHIpLCBmID0gMDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKGkgPSBlW0EgKyAyNCA+PiAyXSwgdSA9IHIgJiAyNTUsIGVbQSArIDI0ID4+IDJdID0gdSA+Pj4gMCA+IDE0MywgaSA9IGkgJiYgKHIgJiAyMTMwNzA2NDMyKSA9PSAyMTMwNzA2NDMyID8gNyA6IDgsIGwgPSBpICsgKHIgPj4+IDAgPD0gMjQxNTkxOTEwMyA/IDggOiAociAmIDgzMjMwNzIpID09IDgzMjMwNzIgPyA3IDogOCkgfCAwLCB0ID0gciA+Pj4gMTYgJiAyNTUsIGEgPSBsICsgKHQgPj4+IDAgPD0gMTQzID8gOCA6IChyICYgMzI1MTIpID09IDMyNTEyID8gNyA6IDgpIHwgMCwgayA9IHIgPj4+IDggJiAyNTUsIG8gPSBhICsgKG4gKyAoayA+Pj4gMCA8PSAxNDMgPyA4IDogKHIgJiAxMjcpID09IDEyNyA/IDcgOiA4KSB8IDApIHwgMCwgZVtBICsgMTYgPj4gMl0gPSBvLCBnID0gZVtBICsgMTIgPj4gMl0sIGkgPSB0IDw8IGkgfCByID4+PiAyNCB8IGsgPDwgbCB8IHUgPDwgYSwgciA9IG4gJiAzMSwgKG4gJiA2MykgPj4+IDAgPj0gMzIgPyAoayA9IGkgPDwgciwgaSA9IDApIDogKGsgPSAoMSA8PCByKSAtIDEgJiBpID4+PiAzMiAtIHIsIGkgPSBpIDw8IHIpLCBuID0gaSB8IGVbQSArIDggPj4gMl0sIGkgPSBrIHwgZywgbCA9IGksIGVbQSArIDggPj4gMl0gPSBuLCBlW0EgKyAxMiA+PiAyXSA9IGksIG8gPj4+IDAgPD0gMzEpIHsKICAgICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgICAgaWYgKChmIHwgMCkgPj0gNCkgewogICAgICAgICAgICAgICAgICAgIGkgPSBlW0EgPj4gMl0sIHIgPSBlW2kgLSAzID4+IDJdLCBlW0EgKyAyMCA+PiAyXSA9IGYgLSA0LCBlW0EgPj4gMl0gPSBpIC0gNDsKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmICgoZiB8IDApIDw9IDApIHsKICAgICAgICAgICAgICAgICAgICByID0gMDsKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGEgPSBmICYgMSwgaSA9IGVbQSA+PiAyXTsKICAgICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICAgIGlmICgoZiB8IDApID09IDEpIHsKICAgICAgICAgICAgICAgICAgICAgIGsgPSAyNCwgciA9IDA7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBmb3IgKGcgPSBmICYgMjE0NzQ4MzY0NiwgayA9IDI0LCByID0gMCwgdCA9IDA7IGggPSBpIC0gMSB8IDAsIGVbQSA+PiAyXSA9IGgsIHMgPSBJW2kgfCAwXSwgaSA9IGkgLSAyIHwgMCwgZVtBID4+IDJdID0gaSwgZVtBICsgMjAgPj4gMl0gPSBmIC0gMSwgaCA9IElbaCB8IDBdLCBmID0gZiAtIDIgfCAwLCBlW0EgKyAyMCA+PiAyXSA9IGYsIHIgPSBzIDw8IGsgfCByIHwgaCA8PCBrIC0gOCwgayA9IGsgLSAxNiB8IDAsIHQgPSB0ICsgMiB8IDAsIChnIHwgMCkgIT0gKHQgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmICghYSkKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICBlW0EgPj4gMl0gPSBpIC0gMSwgaSA9IElbaSB8IDBdLCBlW0EgKyAyMCA+PiAyXSA9IGYgLSAxLCByID0gaSA8PCBrIHwgcjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGYgPSByICYgMjU1LCBlW0EgKyAyNCA+PiAyXSA9IGYgPj4+IDAgPiAxNDMsIHUgPSB1ID4+PiAwIDw9IDE0MyA/IDggOiAociAmIDIxMzA3MDY0MzIpID09IDIxMzA3MDY0MzIgPyA3IDogOCwgYSA9IHUgKyAociA+Pj4gMCA8PSAyNDE1OTE5MTAzID8gOCA6IChyICYgODMyMzA3MikgPT0gODMyMzA3MiA/IDcgOiA4KSB8IDAsIHQgPSByID4+PiAxNiAmIDI1NSwgZyA9IGEgKyAodCA+Pj4gMCA8PSAxNDMgPyA4IDogKHIgJiAzMjUxMikgPT0gMzI1MTIgPyA3IDogOCkgfCAwLCBrID0gciA+Pj4gOCAmIDI1NSwgZVtBICsgMTYgPj4gMl0gPSBnICsgKChrID4+PiAwIDw9IDE0MyA/IDggOiAociAmIDEyNykgPT0gMTI3ID8gNyA6IDgpICsgbyB8IDApLCBpID0gQSwgQSA9IHQgPDwgdSB8IHIgPj4+IDI0IHwgayA8PCBhIHwgZiA8PCBnLCByID0gbyAmIDMxLCAobyAmIDYzKSA+Pj4gMCA+PSAzMiA/IChmID0gQSA8PCByLCBBID0gMCkgOiAoZiA9ICgxIDw8IHIpIC0gMSAmIEEgPj4+IDMyIC0gciwgQSA9IEEgPDwgciksIG4gPSBBIHwgbiwgZVtpICsgOCA+PiAyXSA9IG4sIGVbaSArIDEyID4+IDJdID0gZiB8IGw7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIGFrKEEsIGksIHIpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIGkgPSBpIHwgMCwgciA9IHIgfCAwOwogICAgICAgICAgICAgIHZhciBmID0gMCwgayA9IDAsIHQgPSAwLCBuID0gMCwgbCA9IDAsIGEgPSAwOwogICAgICAgICAgICAgIGsgPSBYIC0gODAgfCAwLCBYID0gaywgZVtrICsgNzYgPj4gMl0gPSAxOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgaWYgKGYgPSBlW0EgKyAxMDQgPj4gMl0sIChmIHwgMCkgIT0gMSB8IGVbQSArIDEwOCA+PiAyXSAhPSAxIHwgKGVbQSArIDg0ID4+IDJdIHwgZVtBICsgODggPj4gMl0pIHx8ICh0ID0gZVtBICsgNzYgPj4gMl0sIGVbdCA+PiAyXSB8IGVbdCArIDQgPj4gMl0gfCAoZVt0ICsgOCA+PiAyXSAhPSBlW0EgKyA5MiA+PiAyXSB8IGVbdCArIDEyID4+IDJdICE9IGVbQSArIDk2ID4+IDJdKSkpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgaWYgKGYgPSAwLCAhQ2UoQSwgayArIDcyIHwgMCwgMCwgayArIDY4IHwgMCwgayAtIC02NCB8IDAsIGsgKyA2MCB8IDAsIGsgKyA1NiB8IDAsIGsgKyA1MiB8IDAsIGsgKyA3NiB8IDAsIGksIHIpKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICBpZiAoUGUoQSwgZVtrICsgNzIgPj4gMl0sIDAsIDAsIGksIHIpKSB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IGVbQSArIDc2ID4+IDJdLCBlW2kgKyAxNiA+PiAyXSkKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgIGYgPSAxOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgUShyLCAxLCAxOTA2MSwgMCk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBmb3IgKGkgPSBlW2kgKyAyNCA+PiAyXSwgciA9IDA7IGYgPSBaKHIsIDUyKSwgUihlWyhmICsgaSB8IDApICsgNDQgPj4gMl0pLCB0ID0gZVtBICsgNzYgPj4gMl0sIGkgPSBlW3QgKyAyNCA+PiAyXSwgbiA9IGYgKyBpIHwgMCwgbCA9IGVbQSArIDIwOCA+PiAyXSwgYSA9IGVbZVtlW2wgKyAyMCA+PiAyXSA+PiAyXSArIDIwID4+IDJdICsgWihyLCA3NikgfCAwLCBlW24gKyA0NCA+PiAyXSA9IGVbYSArIDM2ID4+IDJdLCBlW24gKyAzNiA+PiAyXSA9IGVbKGYgKyBlW2VbbCArIDI0ID4+IDJdICsgMjQgPj4gMl0gfCAwKSArIDM2ID4+IDJdLCBlW2EgKyAzNiA+PiAyXSA9IDAsIGYgPSAxLCByID0gciArIDEgfCAwLCByID4+PiAwIDwgZFt0ICsgMTYgPj4gMl07ICkKICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICAgIGlmICghKCFlW2VbQSArIDE1NiA+PiAyXSArIDU1OTYgPj4gMl0gfCAoKGYgfCAwKSAhPSAxIHwgZVtBICsgMTA4ID4+IDJdICE9IDEpKSkgewogICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyA3MiA+PiAyXSA9IDAsIGVbQSArIDIwNCA+PiAyXSA9IDAsIGVbQSArIDggPj4gMl0gPSBlW0EgKyA4ID4+IDJdIHwgMTI4LCBmID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlmIChmID0gMCwgIUNlKEEsIGsgKyA3MiB8IDAsIDAsIGsgKyA2OCB8IDAsIGsgLSAtNjQgfCAwLCBrICsgNjAgfCAwLCBrICsgNTYgfCAwLCBrICsgNTIgfCAwLCBrICsgNzYgfCAwLCBpLCByKSkKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgIGlmICghZVtrICsgNzYgPj4gMl0pCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICBmID0gZVtrICsgNzIgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICh0ID0gZiArIDEgfCAwLCBsID0gUGUoQSwgZiwgMCwgMCwgaSwgciksIG4gPSBaKGVbQSArIDEwNCA+PiAyXSwgZVtBICsgMTA4ID4+IDJdKSwgIWwpIHsKICAgICAgICAgICAgICAgICAgICAgIGVbayArIDQgPj4gMl0gPSBuLCBlW2sgPj4gMl0gPSB0LCBRKHIsIDEsIDE3MTkyLCBrKSwgZiA9IDA7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoZVtrICsgMzYgPj4gMl0gPSBuLCBlW2sgKyAzMiA+PiAyXSA9IHQsIFEociwgNCwgMjI4NTQsIGsgKyAzMiB8IDApLCAhVTQoZVtBICsgMjA4ID4+IDJdLCBlW2VbQSArIDc2ID4+IDJdICsgMjQgPj4gMl0pKSB7CiAgICAgICAgICAgICAgICAgICAgICBmID0gMDsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICAgIGlmICghKGVbQSArIDEwNCA+PiAyXSAhPSAxIHwgZVtBICsgMTA4ID4+IDJdICE9IDEpICYmIChuID0gZVtBICsgNzYgPj4gMl0sIGwgPSBlW0EgKyA3MiA+PiAyXSwgZVtuID4+IDJdICE9IGVbbCA+PiAyXSB8IGVbbiArIDQgPj4gMl0gIT0gZVtsICsgNCA+PiAyXSB8IChlW24gKyA4ID4+IDJdICE9IGVbbCArIDggPj4gMl0gfCBlW24gKyAxMiA+PiAyXSAhPSBlW2wgKyAxMiA+PiAyXSkpIHx8IChmID0gZVtBICsgMTU2ID4+IDJdICsgWihmLCA1NjQ0KSB8IDAsIG4gPSBlW2YgKyA1NTk2ID4+IDJdLCAhbikpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICBSKG4pLCBlW2YgKyA1NTk2ID4+IDJdID0gMCwgZVtmICsgNTYwMCA+PiAyXSA9IDA7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChlW2sgKyAxNiA+PiAyXSA9IHQsIFEociwgNCwgMjg5NTEsIGsgKyAxNiB8IDApLCB0ID0gZVtpICsgMTIgPj4gMl0sIG4gPSB0LCBmID0gZVtpICsgOCA+PiAyXSwgdCB8IGYgPyAobCA9IGVbaSArIDU2ID4+IDJdLCB0ID0gZiAtIGwgfCAwLCBmID0gbiAtIChlW2kgKyA2MCA+PiAyXSArIChmID4+PiAwIDwgbCA+Pj4gMCkgfCAwKSB8IDApIDogKHQgPSAwLCBmID0gMCksICEoZiB8IHQpICYgZVtBICsgOCA+PiAyXSA9PSA2NCkKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgaWYgKGEgPSBhICsgMSB8IDAsIGYgPSBlW0EgKyAxMDQgPj4gMl0sIChhIHwgMCkgIT0gKFooZiwgZVtBICsgMTA4ID4+IDJdKSB8IDApKQogICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmID0gQzYoQSwgcik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBYID0gayArIDgwIHwgMCwgZiB8IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gdWsoQSwgaSwgciwgZikgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDAsIGYgPSBmIHwgMDsKICAgICAgICAgICAgICB2YXIgayA9IDAsIHQgPSAwLCBuID0gMCwgbCA9IDAsIGEgPSAwLCB1ID0gMCwgbyA9IDAsIGcgPSAwLCBoID0gMDsKICAgICAgICAgICAgICBrID0gKChmIHwgMCkgIT0gMCkgKyByIHwgMCwgbiA9IGsgPj4+IDEgfCAwLCBvID0gciAtIG4gfCAwOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGlmIChmKSB7CiAgICAgICAgICAgICAgICAgIGlmIChyID4+PiAwIDwgMikKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICBpZiAoayA+Pj4gMCA+PSA0KQogICAgICAgICAgICAgICAgICAgIGZvciAoayA9IChuIDw8IDIpICsgaSB8IDAsIHQgPSAobiA+Pj4gMCA8PSAyID8gMiA6IG4pIC0gMSB8IDAsIGYgPSAwOyBoID0gayArIChmIDw8IDIpIHwgMCwgbCA9IChmIDw8IDMpICsgQSB8IDAsIGYgPSBmICsgMSB8IDAsIGVbaCA+PiAyXSA9IGVbbCArIDQgPj4gMl0gLSAoZVsoZiA8PCAzKSArIEEgPj4gMl0gKyBlW2wgPj4gMl0gPj4gMSksIChmIHwgMCkgIT0gKHQgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICBrID0gMSwgbCA9IHIgJiAxLCBsIHx8IChmID0gKHQgPDwgMykgKyBBIHwgMCwgZVsoKG4gPDwgMikgKyBpIHwgMCkgKyAodCA8PCAyKSA+PiAyXSA9IGVbZiArIDQgPj4gMl0gLSBlW2YgPj4gMl0pLCBpID0gKG4gPDwgMikgKyBpIHwgMCwgZVtBID4+IDJdID0gZVtBID4+IDJdICsgKChlW2kgPj4gMl0gPDwgMSkgKyAyID4+IDIpOwogICAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgICAgaWYgKChvIHwgMCkgPCAyKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICBpZiAoZiA9IDEsIGsgPSAobiBeIC0xKSArIHIgfCAwLCB0ID0gayAmIDEsIChyIC0gMiB8IDApICE9IChuIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICBmb3IgKGcgPSBrICYgLTIsIGsgPSAwOyB1ID0gZiA8PCAyLCByID0gdSArIGkgfCAwLCBlW0EgKyB1ID4+IDJdID0gZVsoZiA8PCAzKSArIEEgPj4gMl0gKyAoKGVbciAtIDQgPj4gMl0gKyBlW3IgPj4gMl0gfCAwKSArIDIgPj4gMiksIHUgPSBmICsgMSB8IDAsIGEgPSB1IDw8IDIsIHIgPSBhICsgaSB8IDAsIGVbQSArIGEgPj4gMl0gPSBlWyh1IDw8IDMpICsgQSA+PiAyXSArICgoZVtyIC0gNCA+PiAyXSArIGVbciA+PiAyXSB8IDApICsgMiA+PiAyKSwgZiA9IGYgKyAyIHwgMCwgayA9IGsgKyAyIHwgMCwgKGcgfCAwKSAhPSAoayB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICBpZiAoayA9IG8sICF0KQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICB0ID0gZiA8PCAyLCByID0gdCArIGkgfCAwLCBlW0EgKyB0ID4+IDJdID0gZVsoZiA8PCAzKSArIEEgPj4gMl0gKyAoKGVbciAtIDQgPj4gMl0gKyBlW3IgPj4gMl0gfCAwKSArIDIgPj4gMik7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgbCAmJiAociA9IGsgPDwgMiwgZVtyICsgQSA+PiAyXSA9IGVbKGsgPDwgMykgKyBBID4+IDJdICsgKChlWyhpICsgciB8IDApIC0gNCA+PiAyXSA8PCAxKSArIDIgPj4gMikpLCBGMigobiA8PCAyKSArIEEgfCAwLCBpLCBvIDw8IDIpOwogICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoZiA9IGVbQSA+PiAyXSwgKHIgfCAwKSA9PSAxKSB7CiAgICAgICAgICAgICAgICAgIGVbQSA+PiAyXSA9IGYgPDwgMTsKICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHQgPSAobiA8PCAyKSArIGkgfCAwLCBlW3QgPj4gMl0gPSBmIC0gZVtBICsgNCA+PiAyXSwgaSA9IDEsIGsgPj4+IDAgPj0gNCkKICAgICAgICAgICAgICAgICAgZm9yIChrID0gQSAtIDQgfCAwLCBpID0gbiA+Pj4gMCA8PSAyID8gMiA6IG4sIGYgPSAxOyBsID0gZiA8PCAzLCBnID0gbCArIEEgfCAwLCBlW3QgKyAoZiA8PCAyKSA+PiAyXSA9IGVbZyA+PiAyXSAtIChlW2sgKyBsID4+IDJdICsgZVtnICsgNCA+PiAyXSA+PiAxKSwgZiA9IGYgKyAxIHwgMCwgKGYgfCAwKSAhPSAoaSB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgbCA9IHIgJiAxLCBsICYmIChmID0gdCArIChpIDw8IDIpIHwgMCwgaSA9IChpIDw8IDMpICsgQSB8IDAsIGVbZiA+PiAyXSA9IGVbaSA+PiAyXSAtIGVbaSAtIDQgPj4gMl0pLCBpID0gMDsKICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgaWYgKChvIHwgMCkgPCAyKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIGlmIChpID0gbyAtIDEgfCAwLCBnID0gaSAmIDEsIGYgPSAwLCAociAtIDIgfCAwKSAhPSAobiB8IDApKQogICAgICAgICAgICAgICAgICAgIGZvciAodSA9IGkgJiAtMiwgayA9IDA7IGEgPSBmIDw8IDIsIHIgPSBhICsgdCB8IDAsIGVbQSArIGEgPj4gMl0gPSBlWygoZiA8PCAzKSArIEEgfCAwKSArIDQgPj4gMl0gKyAoKGVbciA+PiAyXSArIGVbciArIDQgPj4gMl0gfCAwKSArIDIgPj4gMiksIGEgPSBmIHwgMSwgaCA9IGEgPDwgMiwgciA9IHQgKyBoIHwgMCwgZVtBICsgaCA+PiAyXSA9IGVbKChhIDw8IDMpICsgQSB8IDApICsgNCA+PiAyXSArICgoZVtyID4+IDJdICsgZVtyICsgNCA+PiAyXSB8IDApICsgMiA+PiAyKSwgZiA9IGYgKyAyIHwgMCwgayA9IGsgKyAyIHwgMCwgKHUgfCAwKSAhPSAoayB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgIGlmICghZykKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICBrID0gZiA8PCAyLCByID0gayArIHQgfCAwLCBlW0EgKyBrID4+IDJdID0gZVsoKGYgPDwgMykgKyBBIHwgMCkgKyA0ID4+IDJdICsgKChlW3IgPj4gMl0gKyBlW3IgKyA0ID4+IDJdIHwgMCkgKyAyID4+IDIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgbCB8fCAociA9IGkgPDwgMiwgZVtyICsgQSA+PiAyXSA9IGVbKChpIDw8IDMpICsgQSB8IDApICsgNCA+PiAyXSArICgoZVtyICsgdCA+PiAyXSA8PCAxKSArIDIgPj4gMikpLCBGMigobiA8PCAyKSArIEEgfCAwLCB0LCBvIDw8IDIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBrMShBKSB7CiAgICAgICAgICAgICAgdmFyIGkgPSAwLCByID0gMCwgZiA9IDAsIGsgPSAwLCB0ID0gMCwgbiA9IDAsIGwgPSAwLCBhID0gMCwgdSA9IDAsIG8gPSAwLCBnID0gMCwgaCA9IDAsIHMgPSAwOwogICAgICAgICAgICAgIGlmIChsID0gZVtBICsgMTYgPj4gMl0sIGwgPj4+IDAgPj0gMzIpCiAgICAgICAgICAgICAgICByZXR1cm4gZVtBICsgOCA+PiAyXTsKICAgICAgICAgICAgICBmID0gZVtBICsgMjQgPj4gMl07CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKChmIHwgMCkgPj0gNCkgewogICAgICAgICAgICAgICAgICBpID0gZVtBID4+IDJdLCByID0gZVtpID4+IDJdLCBuID0gZiAtIDQgfCAwLCBlW0EgKyAyNCA+PiAyXSA9IG4sIGVbQSA+PiAyXSA9IGkgKyA0OwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHIgPSBlW0EgKyAyOCA+PiAyXSA/IC0xIDogMCwgKGYgfCAwKSA8PSAwKSB7CiAgICAgICAgICAgICAgICAgIG4gPSBmOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdSA9IGYgJiAxLCBpID0gZVtBID4+IDJdOwogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICBpZiAoKGYgfCAwKSA9PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgdCA9IGk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBmb3IgKGEgPSBmICYgMjE0NzQ4MzY0NjsgZVtBID4+IDJdID0gaSArIDEsIG8gPSBJW2kgfCAwXSwgdCA9IGkgKyAyIHwgMCwgZVtBID4+IDJdID0gdCwgZVtBICsgMjQgPj4gMl0gPSBmIC0gMSwgaSA9IElbaSArIDEgfCAwXSwgZiA9IGYgLSAyIHwgMCwgZVtBICsgMjQgPj4gMl0gPSBmLCByID0gKCgyNTUgPDwgayBeIC0xKSAmIHIgfCBvIDw8IGspICYgKDY1MjgwIDw8IGsgXiAtMSkgfCBpIDw8IChrIHwgOCksIGsgPSBrICsgMTYgfCAwLCBpID0gdCwgbiA9IG4gKyAyIHwgMCwgKGEgfCAwKSAhPSAobiB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKG4gPSAwLCAhdSkKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIGVbQSA+PiAyXSA9IHQgKyAxLCBpID0gSVt0IHwgMF0sIGVbQSArIDI0ID4+IDJdID0gZiAtIDEsIHIgPSAoMjU1IDw8IGsgXiAtMSkgJiByIHwgaSA8PCBrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoaSA9IGVbQSArIDIwID4+IDJdLCBhID0gciA+Pj4gMjQgfCAwLCBlW0EgKyAyMCA+PiAyXSA9IChhIHwgMCkgPT0gMjU1LCB0ID0gciA+Pj4gMTYgJiAyNTUsIGYgPSByID4+PiA4ICYgMjU1LCBpID0gaSA/IDcgOiA4LCByID0gciAmIDI1NSwgayA9IGkgKyAoKHIgfCAwKSA9PSAyNTUgPyA3IDogOCkgfCAwLCBvID0gKChmIHwgMCkgPT0gMjU1ID8gNyA6IDgpICsgayB8IDAsIHUgPSAobCArICgodCB8IDApID09IDI1NSA/IDcgOiA4KSB8IDApICsgbyB8IDAsIGVbQSArIDE2ID4+IDJdID0gdSwgZyA9IGVbQSArIDEyID4+IDJdLCBpID0gciB8IChmIDw8IGkgfCB0IDw8IGsgfCBhIDw8IG8pLCByID0gbCAmIDMxLCAobCAmIDYzKSA+Pj4gMCA+PSAzMiA/ICh0ID0gaSA8PCByLCBpID0gMCkgOiAodCA9ICgxIDw8IHIpIC0gMSAmIGkgPj4+IDMyIC0gciwgaSA9IGkgPDwgciksIGwgPSBpIHwgZVtBICsgOCA+PiAyXSwgaSA9IHQgfCBnLCBvID0gaSwgZVtBICsgOCA+PiAyXSA9IGwsIGVbQSArIDEyID4+IDJdID0gaSwgdSA+Pj4gMCA8PSAzMSkgewogICAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgICBpZiAoKG4gfCAwKSA+PSA0KSB7CiAgICAgICAgICAgICAgICAgICAgaSA9IGVbQSA+PiAyXSwgZiA9IGVbaSA+PiAyXSwgZVtBICsgMjQgPj4gMl0gPSBuIC0gNCwgZVtBID4+IDJdID0gaSArIDQ7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoayA9IDAsIGYgPSBlW0EgKyAyOCA+PiAyXSA/IC0xIDogMCwgKG4gfCAwKSA8PSAwKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIGcgPSBuICYgMSwgaSA9IGVbQSA+PiAyXTsKICAgICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICAgIGlmICgobiB8IDApID09IDEpIHsKICAgICAgICAgICAgICAgICAgICAgIHIgPSBpOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZm9yIChoID0gbiAmIDIxNDc0ODM2NDYsIHQgPSAwOyBlW0EgPj4gMl0gPSBpICsgMSwgcyA9IElbaSB8IDBdLCByID0gaSArIDIgfCAwLCBlW0EgPj4gMl0gPSByLCBlW0EgKyAyNCA+PiAyXSA9IG4gLSAxLCBpID0gSVtpICsgMSB8IDBdLCBuID0gbiAtIDIgfCAwLCBlW0EgKyAyNCA+PiAyXSA9IG4sIGYgPSAoKDI1NSA8PCBrIF4gLTEpICYgZiB8IHMgPDwgaykgJiAoNjUyODAgPDwgayBeIC0xKSB8IGkgPDwgKGsgfCA4KSwgayA9IGsgKyAxNiB8IDAsIGkgPSByLCB0ID0gdCArIDIgfCAwLCAoaCB8IDApICE9ICh0IHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoIWcpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgZVtBID4+IDJdID0gciArIDEsIGkgPSBJW3IgfCAwXSwgZVtBICsgMjQgPj4gMl0gPSBuIC0gMSwgZiA9ICgyNTUgPDwgayBeIC0xKSAmIGYgfCBpIDw8IGs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByID0gZiA+Pj4gMjQgfCAwLCBlW0EgKyAyMCA+PiAyXSA9IChyIHwgMCkgPT0gMjU1LCB0ID0gZiA+Pj4gMTYgJiAyNTUsIG4gPSBmID4+PiA4ICYgMjU1LCBrID0gKGEgfCAwKSA9PSAyNTUgPyA3IDogOCwgZiA9IGYgJiAyNTUsIGEgPSBrICsgKChmIHwgMCkgPT0gMjU1ID8gNyA6IDgpIHwgMCwgZyA9ICgobiB8IDApID09IDI1NSA/IDcgOiA4KSArIGEgfCAwLCBlW0EgKyAxNiA+PiAyXSA9ICgoKHQgfCAwKSA9PSAyNTUgPyA3IDogOCkgKyB1IHwgMCkgKyBnLCBpID0gQSwgQSA9IGYgfCAobiA8PCBrIHwgdCA8PCBhIHwgciA8PCBnKSwgciA9IHUgJiAzMSwgKHUgJiA2MykgPj4+IDAgPj0gMzIgPyAodCA9IEEgPDwgciwgQSA9IDApIDogKHQgPSAoMSA8PCByKSAtIDEgJiBBID4+PiAzMiAtIHIsIEEgPSBBIDw8IHIpLCBsID0gQSB8IGwsIGVbaSArIDggPj4gMl0gPSBsLCBlW2kgKyAxMiA+PiAyXSA9IHQgfCBvOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gbDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBONChBLCBpLCByLCBmLCBrKSB7CiAgICAgICAgICAgICAgdmFyIHQgPSAwLCBuID0gMCwgbCA9IDAsIGEgPSAwLCB1ID0gMCwgbyA9IDA7CiAgICAgICAgICAgICAgYSA9IFggLSAzMiB8IDAsIFggPSBhLCBlW0EgKyA4ID4+IDJdID09IDE2ID8gdCA9IGVbQSArIDE1NiA+PiAyXSArIFooZVtBICsgMjA0ID4+IDJdLCA1NjQ0KSB8IDAgOiB0ID0gZVtBICsgMTIgPj4gMl07CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKGRbZiA+PiAyXSA8PSA0KSB7CiAgICAgICAgICAgICAgICAgIEEgPSAwLCBRKGssIDEsIDQ1MjIsIDApOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHQgPSBlW3QgKyA1NTg0ID4+IDJdICsgWihpLCAxMDgwKSB8IDAsIGgyKHIsIHQgKyA0IHwgMCwgMSksIGwgPSBlW3QgKyA0ID4+IDJdICsgMSB8IDAsIGVbdCArIDQgPj4gMl0gPSBsLCBsID4+PiAwID49IDM0KSB7CiAgICAgICAgICAgICAgICAgIGVbYSArIDQgPj4gMl0gPSAzMywgZVthID4+IDJdID0gbCwgUShrLCAxLCAxNzI5MCwgYSksIEEgPSAwOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKG4gPSBlW0EgKyAxNjAgPj4gMl0sIG4gPj4+IDAgPj0gbCA+Pj4gMCkgewogICAgICAgICAgICAgICAgICBlW2EgKyAyNCA+PiAyXSA9IGwsIGVbYSArIDIwID4+IDJdID0gbiwgZVthICsgMTYgPj4gMl0gPSBpLCBRKGssIDEsIDI4NzczLCBhICsgMTYgfCAwKSwgZVtBICsgOCA+PiAyXSA9IGVbQSArIDggPj4gMl0gfCAzMjc2OCwgQSA9IDA7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoaDIociArIDEgfCAwLCB0ICsgOCB8IDAsIDEpLCBlW3QgKyA4ID4+IDJdID0gZVt0ICsgOCA+PiAyXSArIDIsIGgyKHIgKyAyIHwgMCwgdCArIDEyIHwgMCwgMSksIEEgPSBlW3QgKyAxMiA+PiAyXSArIDIgfCAwLCBlW3QgKyAxMiA+PiAyXSA9IEEsIGkgPSBlW3QgKyA4ID4+IDJdLCAhKCEoaSA+Pj4gMCA+IDEwIHwgQSA+Pj4gMCA+IDEwKSAmIEEgKyBpID4+PiAwIDwgMTMpKSB7CiAgICAgICAgICAgICAgICAgIEEgPSAwLCBRKGssIDEsIDg5NjksIDApOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGgyKHIgKyAzIHwgMCwgdCArIDE2IHwgMCwgMSksIElbdCArIDE2IHwgMF0gJiAxMjgpIHsKICAgICAgICAgICAgICAgICAgQSA9IDAsIFEoaywgMSwgMTA1NjEsIDApOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGgyKHIgKyA0IHwgMCwgdCArIDIwIHwgMCwgMSksIGRbdCArIDIwID4+IDJdID49IDIpIHsKICAgICAgICAgICAgICAgICAgQSA9IDAsIFEoaywgMSwgMTA0OTYsIDApOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGkgPSBlW2YgPj4gMl0gLSA1IHwgMCwgZVtmID4+IDJdID0gaSwgQSA9IDEsIGwgPSBlW3QgKyA0ID4+IDJdLCAhKEZbdCB8IDBdICYgMSkpIHsKICAgICAgICAgICAgICAgICAgaWYgKCFsKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIGlmIChmID0gdCArIDk0NCB8IDAsIGsgPSB0ICsgODEyIHwgMCwgaSA9IDAsIHIgPSAwLCBsID4+PiAwID49IDQpCiAgICAgICAgICAgICAgICAgICAgZm9yIChvID0gbCAmIC00LCBuID0gMDsgdCA9IHIgPDwgMiwgZVt0ICsgayA+PiAyXSA9IDE1LCBlW2YgKyB0ID4+IDJdID0gMTUsIHUgPSB0IHwgNCwgZVt1ICsgayA+PiAyXSA9IDE1LCBlW2YgKyB1ID4+IDJdID0gMTUsIHUgPSB0IHwgOCwgZVt1ICsgayA+PiAyXSA9IDE1LCBlW2YgKyB1ID4+IDJdID0gMTUsIHQgPSB0IHwgMTIsIGVbdCArIGsgPj4gMl0gPSAxNSwgZVtmICsgdCA+PiAyXSA9IDE1LCByID0gciArIDQgfCAwLCBuID0gbiArIDQgfCAwLCAobyB8IDApICE9IChuIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgaWYgKHQgPSBsICYgMywgIXQpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgZm9yICg7IEEgPSByIDw8IDIsIGVbQSArIGsgPj4gMl0gPSAxNSwgZVtBICsgZiA+PiAyXSA9IDE1LCBBID0gMSwgciA9IHIgKyAxIHwgMCwgaSA9IGkgKyAxIHwgMCwgKHQgfCAwKSAhPSAoaSB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGkgPj4+IDAgPj0gbCA+Pj4gMCkgewogICAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFsKSB7CiAgICAgICAgICAgICAgICAgICAgICBuID0gMDsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChoMihyICsgNSB8IDAsIGEgKyAyOCB8IDAsIDEpLCBBID0gZVthICsgMjggPj4gMl0sIGVbdCArIDk0NCA+PiAyXSA9IEEgPj4+IDQsIGVbdCArIDgxMiA+PiAyXSA9IEEgJiAxNSwgbiA9IGVbdCArIDQgPj4gMl0sIG4gPj4+IDAgPj0gMikKICAgICAgICAgICAgICAgICAgICAgIGZvciAobCA9IHQgKyA5NDQgfCAwLCBvID0gdCArIDgxMiB8IDAsIEEgPSByICsgNiB8IDAsIHIgPSAxOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICBoMihBLCBhICsgMjggfCAwLCAxKTsKICAgICAgICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID0gZVthICsgMjggPj4gMl0sIGkgPj4+IDAgPj0gMTYgJiYgKG4gPSBpICYgMTUsIG4pKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgICBBID0gMCwgUShrLCAxLCA5OTY2LCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1ID0gciA8PCAyLCBlW3UgKyBvID4+IDJdID0gbiwgZVtsICsgdSA+PiAyXSA9IGkgPj4+IDQsIEEgPSBBICsgMSB8IDAsIHIgPSByICsgMSB8IDAsIG4gPSBlW3QgKyA0ID4+IDJdLCAhKHIgPj4+IDAgPCBuID4+PiAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpID0gZVtmID4+IDJdOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVbZiA+PiAyXSA9IGkgLSBuLCBBID0gMTsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIEEgPSAwLCBRKGssIDEsIDQ1MjIsIDApOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gWCA9IGEgKyAzMiB8IDAsIEE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gUDQoQSwgaSwgciwgZikgewogICAgICAgICAgICAgIHZhciBrID0gMCwgdCA9IDAsIG4gPSAwLCBsID0gMCwgYSA9IDAsIHUgPSAwLCBvID0gMCwgZyA9IDAsIGggPSAwLCBzID0gMCwgdyA9IDA7CiAgICAgICAgICAgICAgZVtBICsgOCA+PiAyXSA9IDAsIGVbQSArIDEyID4+IDJdID0gMCwgZVtBID4+IDJdID0gaSwgZVtBICsgMjggPj4gMl0gPSBmLCBlW0EgKyAxNiA+PiAyXSA9IDAsIGVbQSArIDIwID4+IDJdID0gMCwgbCA9IHIgLSAxIHwgMCwgZVtBICsgMjQgPj4gMl0gPSBsLCBzID0gaSAmIDM7CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKChyIHwgMCkgPD0gMCkgewogICAgICAgICAgICAgICAgICBrID0gaSwgaSA9IGY7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBrID0gaSArIDEgfCAwLCBlW0EgPj4gMl0gPSBrLCBpID0gSVtpIHwgMF07CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIG4gPSBpLCBhID0gOCwgZVtBICsgMTYgPj4gMl0gPSA4LCB1ID0gKG4gfCAwKSA9PSAyNTUsIGVbQSArIDIwID4+IDJdID0gdSwgZVtBICsgOCA+PiAyXSA9IG4sIGVbQSArIDEyID4+IDJdID0gMDsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAoKHMgfCAwKSA9PSAzKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgbyA9IHIgLSAyIHwgMCwgZVtBICsgMjQgPj4gMl0gPSBvOwogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICBpZiAoKHIgfCAwKSA8IDIpIHsKICAgICAgICAgICAgICAgICAgICBpID0gaywgayA9IGY7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpID0gayArIDEgfCAwLCBlW0EgPj4gMl0gPSBpLCBrID0gSVtrIHwgMF07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAodSA9IChrIHwgMCkgPT0gMjU1LCBlW0EgKyAyMCA+PiAyXSA9IHUsIGEgPSAobiB8IDApID09IDI1NSA/IDE1IDogMTYsIGVbQSArIDE2ID4+IDJdID0gYSwgbiA9IG4gfCBrIDw8IDgsIGVbQSArIDggPj4gMl0gPSBuLCBlW0EgKyAxMiA+PiAyXSA9IDAsIChzIHwgMCkgPT0gMikgewogICAgICAgICAgICAgICAgICBrID0gaSwgciA9IGwsIGwgPSBvOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdyA9IHIgLSAzIHwgMCwgZVtBICsgMjQgPj4gMl0gPSB3OwogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICBpZiAoKHIgfCAwKSA8IDMpIHsKICAgICAgICAgICAgICAgICAgICB0ID0gaSwgaSA9IGY7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB0ID0gaSArIDEgfCAwLCBlW0EgPj4gMl0gPSB0LCBpID0gSVtpIHwgMF07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAodSA9IChpIHwgMCkgPT0gMjU1LCBlW0EgKyAyMCA+PiAyXSA9IHUsIGcgPSAoKGsgfCAwKSA9PSAyNTUgPyA3IDogOCkgKyBhIHwgMCwgZVtBICsgMTYgPj4gMl0gPSBnLCBrID0gYSAmIDMxLCAoYSAmIDYzKSA+Pj4gMCA+PSAzMiA/IChoID0gaSA8PCBrLCBrID0gMCkgOiAoaCA9ICgxIDw8IGspIC0gMSAmIGkgPj4+IDMyIC0gaywgayA9IGkgPDwgayksIG4gPSBrIHwgbiwgZVtBICsgOCA+PiAyXSA9IG4sIGVbQSArIDEyID4+IDJdID0gaCwgKHMgfCAwKSA9PSAxKSB7CiAgICAgICAgICAgICAgICAgIGsgPSB0LCBhID0gZywgciA9IG8sIGwgPSB3OwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgbCA9IHIgLSA0IHwgMCwgZVtBICsgMjQgPj4gMl0gPSBsOwogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICBpZiAoKHIgfCAwKSA8IDQpIHsKICAgICAgICAgICAgICAgICAgICBrID0gdCwgciA9IGY7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBrID0gdCArIDEgfCAwLCBlW0EgPj4gMl0gPSBrLCByID0gSVt0IHwgMF07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB1ID0gKHIgfCAwKSA9PSAyNTUsIGVbQSArIDIwID4+IDJdID0gdSwgYSA9IGcgKyAoKGkgfCAwKSA9PSAyNTUgPyA3IDogOCkgfCAwLCBlW0EgKyAxNiA+PiAyXSA9IGEsIGkgPSBnICYgMzEsIChnICYgNjMpID4+PiAwID49IDMyID8gKHQgPSByIDw8IGksIGkgPSAwKSA6ICh0ID0gKDEgPDwgaSkgLSAxICYgciA+Pj4gMzIgLSBpLCBpID0gciA8PCBpKSwgbiA9IGkgfCBuLCBpID0gdCB8IGgsIGggPSBpLCBlW0EgKyA4ID4+IDJdID0gbiwgZVtBICsgMTIgPj4gMl0gPSBpLCByID0gdzsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKChyIHwgMCkgPj0gNSkgewogICAgICAgICAgICAgICAgICBmID0gZVtrID4+IDJdLCBlW0EgKyAyNCA+PiAyXSA9IHIgLSA1LCBlW0EgPj4gMl0gPSBrICsgNDsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChpID0gMCwgZiA9IGYgPyAtMSA6IDAsIChyIHwgMCkgPCAyKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgZm9yICg7IHIgPSBrICsgMSB8IDAsIGVbQSA+PiAyXSA9IHIsIGsgPSBJW2sgfCAwXSwgdCA9IGwgLSAxIHwgMCwgZVtBICsgMjQgPj4gMl0gPSB0LCBmID0gKDI1NSA8PCBpIF4gLTEpICYgZiB8IGsgPDwgaSwgaSA9IGkgKyA4IHwgMCwgbyA9IGwgPj4+IDAgPiAxLCBrID0gciwgbCA9IHQsICEhbzsgKQogICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGkgPSBmID4+PiAyNCB8IDAsIGVbQSArIDIwID4+IDJdID0gKGkgfCAwKSA9PSAyNTUsIHIgPSBmID4+PiAxNiAmIDI1NSwgayA9IGYgPj4+IDggJiAyNTUsIGwgPSB1ID8gNyA6IDgsIGYgPSBmICYgMjU1LCB0ID0gbCArICgoZiB8IDApID09IDI1NSA/IDcgOiA4KSB8IDAsIG8gPSAoKGsgfCAwKSA9PSAyNTUgPyA3IDogOCkgKyB0IHwgMCwgZVtBICsgMTYgPj4gMl0gPSAoKChyIHwgMCkgPT0gMjU1ID8gNyA6IDgpICsgYSB8IDApICsgbywgaSA9IGYgfCAoayA8PCBsIHwgciA8PCB0IHwgaSA8PCBvKSwgciA9IEEsIHIgPSBBLCBBID0gaSwgaSA9IGEgJiAzMSwgKGEgJiA2MykgPj4+IDAgPj0gMzIgPyAoZiA9IEEgPDwgaSwgQSA9IDApIDogKGYgPSAoMSA8PCBpKSAtIDEgJiBBID4+PiAzMiAtIGksIEEgPSBBIDw8IGkpLCBlW3IgKyA4ID4+IDJdID0gQSB8IG4sIGVbciArIDEyID4+IDJdID0gZiB8IGg7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gYXIoQSwgaSkgewogICAgICAgICAgICAgIHZhciByID0gMCwgZiA9IDAsIGsgPSAwLCB0ID0gMCwgbiA9IDAsIGwgPSAwLCBhID0gMCwgdSA9IDAsIG8gPSAwLCBnID0gMCwgaCA9IDAsIHMgPSAwLCB3ID0gMCwgQiA9IDAsIGMgPSAwLCB2ID0gMCwgQyA9IDAsIG0gPSAwLCB5ID0gMCwgcCA9IDAsIEggPSAwLCBKID0gMCwgRSA9IDAsIEQgPSAwLCBVID0gMDsKICAgICAgICAgICAgICB1ID0gWCAtIDMyIHwgMCwgWCA9IHUsIHYgPSBlW0EgKyAxNiA+PiAyXTsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAoIXYpIHsKICAgICAgICAgICAgICAgICAgbyA9IDE7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBrID0gZVtBID4+IDJdLCByID0gayA+PiAzMSwgYSA9IHI7CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIGlmICgociB8IDApIDwgMCB8fCAobiA9IGVbQSArIDQgPj4gMl0sIHIgPSBuID4+IDMxLCBnID0gciwgKHIgfCAwKSA8IDApIHx8IChmID0gZVtBICsgOCA+PiAyXSwgciA9IGYgPj4gMzEsIGggPSByLCAociB8IDApIDwgMCkgfHwgKGwgPSBlW0EgKyAxMiA+PiAyXSwgciA9IGwgPj4gMzEsIChyIHwgMCkgPCAwKSkKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICBmb3IgKEEgPSBlW0EgKyAyNCA+PiAyXSwgeSA9IGsgLSAxIHwgMCwgcCA9IGEgLSAhayB8IDAsIEggPSBuIC0gMSB8IDAsIEogPSBnIC0gIW4gfCAwLCBnID0gZiAtIDEgfCAwLCBFID0gaCAtICFmIHwgMCwgaCA9IGwgLSAxIHwgMCwgRCA9IHIgLSAhbCB8IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGYgPSBlW0EgPj4gMl0sIHIgPSBmICsgeSB8IDAsIHMgPSBmID4+IDMxLCB0ID0gcyArIHAgfCAwLCBhID0gejAociwgciA+Pj4gMCA8IGYgPj4+IDAgPyB0ICsgMSB8IDAgOiB0LCBmLCBzKSwgZVtBICsgMTYgPj4gMl0gPSBhLCBsID0gZVtBICsgNCA+PiAyXSwgayA9IGwgKyBIIHwgMCwgdyA9IGwgPj4gMzEsIHIgPSB3ICsgSiB8IDAsIG8gPSB6MChrLCBrID4+PiAwIDwgbCA+Pj4gMCA/IHIgKyAxIHwgMCA6IHIsIGwsIHcpLCBlW0EgKyAyMCA+PiAyXSA9IG8sIG4gPSBlW0EgKyA0MCA+PiAyXSwgayA9IG4gJiAzMSwgKG4gJiA2MykgPj4+IDAgPj0gMzIgPyAociA9IDEgPDwgaywgdCA9IDApIDogKHQgPSAxIDw8IGssIHIgPSB0IC0gMSAmIDEgPj4+IDMyIC0gayksIEIgPSB0LCBVID0gciwgayA9IEIgLSAxIHwgMCwgciA9IHIgLSAhQiB8IDAsIEMgPSByLCB0ID0gcyArIEUgfCAwLCBtID0gZiArIGcgfCAwLCB0ID0gbSA+Pj4gMCA8IGcgPj4+IDAgPyB0ICsgMSB8IDAgOiB0LCBmID0gejAobSwgdCwgZiwgcyksIHIgPSAoZiA+PiAzMSkgKyByIHwgMCwgdCA9IGYsIGYgPSBmICsgayB8IDAsIHIgPSB0ID4+PiAwID4gZiA+Pj4gMCA/IHIgKyAxIHwgMCA6IHIsIHQgPSBmLCBmID0gbiAmIDMxLCAobiAmIDYzKSA+Pj4gMCA+PSAzMiA/IGYgPSByID4+IGYgOiBmID0gKCgxIDw8IGYpIC0gMSAmIHIpIDw8IDMyIC0gZiB8IHQgPj4+IGYsIHIgPSAoYSA+PiAzMSkgKyBDIHwgMCwgdCA9IGEsIGEgPSBrICsgYSB8IDAsIHIgPSB0ID4+PiAwID4gYSA+Pj4gMCA/IHIgKyAxIHwgMCA6IHIsIHQgPSBmLCBmID0gbiAmIDMxLCAobiAmIDYzKSA+Pj4gMCA+PSAzMiA/IGYgPSByID4+IGYgOiBmID0gKCgxIDw8IGYpIC0gMSAmIHIpIDw8IDMyIC0gZiB8IGEgPj4+IGYsIHIgPSB0IC0gZiB8IDAsIChyIHwgMCkgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICBlW3UgKyA0ID4+IDJdID0gciwgZVt1ID4+IDJdID0gYywgUShpLCAxLCAyNDg2NSwgdSksIG8gPSAwOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKGVbQSArIDggPj4gMl0gPSByLCByID0gdyArIEQgfCAwLCBmID0gbCArIGggfCAwLCByID0gZiA+Pj4gMCA8IGggPj4+IDAgPyByICsgMSB8IDAgOiByLCBmID0gejAoZiwgciwgbCwgdyksIHIgPSAoZiA+PiAzMSkgKyBDIHwgMCwgayA9IGYgKyBrIHwgMCwgciA9IGsgPj4+IDAgPCBmID4+PiAwID8gciArIDEgfCAwIDogciwgZiA9IGssIGsgPSBuICYgMzEsIChuICYgNjMpID4+PiAwID49IDMyID8gZiA9IHIgPj4gayA6IGYgPSAoKDEgPDwgaykgLSAxICYgcikgPDwgMzIgLSBrIHwgZiA+Pj4gaywgciA9IFUgKyAobyA+PiAzMSkgfCAwLCBrID0gbyArIEIgfCAwLCByID0gayA+Pj4gMCA8IEIgPj4+IDAgPyByICsgMSB8IDAgOiByLCBsID0gayAtIDEgfCAwLCB0ID0gZiwgayA9IHIgLSAhayB8IDAsIGYgPSBsLCByID0gbiAmIDMxLCAobiAmIDYzKSA+Pj4gMCA+PSAzMiA/IGYgPSBrID4+IHIgOiBmID0gKCgxIDw8IHIpIC0gMSAmIGspIDw8IDMyIC0gciB8IGYgPj4+IHIsIHIgPSB0IC0gZiB8IDAsIChyIHwgMCkgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICBlW3UgKyAyMCA+PiAyXSA9IHIsIGVbdSArIDE2ID4+IDJdID0gYywgUShpLCAxLCAyNDkzNCwgdSArIDE2IHwgMCksIG8gPSAwOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKGVbQSArIDEyID4+IDJdID0gciwgQSA9IEEgKyA1MiB8IDAsIG8gPSAxLCBjID0gYyArIDEgfCAwLCAodiB8IDApID09IChjIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgUShpLCAxLCAxMDcxNywgMCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBYID0gdSArIDMyIHwgMCwgbzsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiB4NChBLCBpLCByKSB7CiAgICAgICAgICAgICAgdmFyIGYgPSAwLCBrID0gMCwgdCA9IDAsIG4gPSAwLCBsID0gMCwgYSA9IDAsIHUgPSAwOwogICAgICAgICAgICAgIGYgPSBlW0EgKyAxMTYgPj4gMl07CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgdCA9IFooaSwgcik7CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICBrOiB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAodCA+Pj4gMCA+IGRbQSArIDEzMiA+PiAyXSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoUihmKSwgZiA9IFAwKHQgPDwgMiksIGVbQSArIDExNiA+PiAyXSA9IGYsICFmKQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgIGVbQSArIDEzMiA+PiAyXSA9IHQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBpZiAoIWYpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGQyKGYsIDAsIHQgPDwgMik7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKGYgPSBlW0EgKyAxMjAgPj4gMl0sIHQgPSBpICsgMiB8IDAsIHUgPSByICsgMyA+Pj4gMiB8IDAsIGwgPSBaKHQsIHUgKyAyIHwgMCksIGwgPj4+IDAgPD0gZFtBICsgMTM2ID4+IDJdKSB7CiAgICAgICAgICAgICAgICAgICAgbiA9IGwgPDwgMjsKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChSKGYpLCBuID0gbCA8PCAyLCBmID0gUDAobiksIGVbQSArIDEyMCA+PiAyXSA9IGYsIGYpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlW0EgKyAxMzYgPj4gMl0gPSBsLCBkMihmLCAwLCBuKTsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAoIXQpCiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICBpZiAobiA9IGVbQSArIDEyMCA+PiAyXSwgZiA9IG4sIGwgPSBpICsgMSB8IDAsIGwgPj4+IDAgPj0gNykKICAgICAgICAgICAgICAgICAgZm9yIChhID0gdCAmIC04OyBlW2YgKyAyNCA+PiAyXSA9IDEyMjY4MzM5MjAsIGVbZiArIDI4ID4+IDJdID0gMTIyNjgzMzkyMCwgZVtmICsgMTYgPj4gMl0gPSAxMjI2ODMzOTIwLCBlW2YgKyAyMCA+PiAyXSA9IDEyMjY4MzM5MjAsIGVbZiArIDggPj4gMl0gPSAxMjI2ODMzOTIwLCBlW2YgKyAxMiA+PiAyXSA9IDEyMjY4MzM5MjAsIGVbZiA+PiAyXSA9IDEyMjY4MzM5MjAsIGVbZiArIDQgPj4gMl0gPSAxMjI2ODMzOTIwLCBmID0gZiArIDMyIHwgMCwgayA9IGsgKyA4IHwgMCwgKGEgfCAwKSAhPSAoayB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgaWYgKGEgPSB0ICYgNywgYSkKICAgICAgICAgICAgICAgICAgZm9yIChrID0gMDsgZVtmID4+IDJdID0gMTIyNjgzMzkyMCwgZiA9IGYgKyA0IHwgMCwgayA9IGsgKyAxIHwgMCwgKGEgfCAwKSAhPSAoayB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgaWYgKGYgPSBuICsgKFoodCwgdSArIDEgfCAwKSA8PCAyKSB8IDAsIGwgPj4+IDAgPj0gNykKICAgICAgICAgICAgICAgICAgZm9yIChhID0gdCAmIC04LCBrID0gMDsgZVtmICsgMjQgPj4gMl0gPSAxMjI2ODMzOTIwLCBlW2YgKyAyOCA+PiAyXSA9IDEyMjY4MzM5MjAsIGVbZiArIDE2ID4+IDJdID0gMTIyNjgzMzkyMCwgZVtmICsgMjAgPj4gMl0gPSAxMjI2ODMzOTIwLCBlW2YgKyA4ID4+IDJdID0gMTIyNjgzMzkyMCwgZVtmICsgMTIgPj4gMl0gPSAxMjI2ODMzOTIwLCBlW2YgPj4gMl0gPSAxMjI2ODMzOTIwLCBlW2YgKyA0ID4+IDJdID0gMTIyNjgzMzkyMCwgZiA9IGYgKyAzMiB8IDAsIGsgPSBrICsgOCB8IDAsIChhIHwgMCkgIT0gKGsgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgIGlmIChhID0gdCAmIDcsIGEpCiAgICAgICAgICAgICAgICAgIGZvciAoayA9IDA7IGVbZiA+PiAyXSA9IDEyMjY4MzM5MjAsIGYgPSBmICsgNCB8IDAsIGsgPSBrICsgMSB8IDAsIChhIHwgMCkgIT0gKGsgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgIGlmIChmID0gciAmIDMsICFmKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgaWYgKGsgPSAoZiB8IDApID09IDEgPyAxMjI0NzM2NzY4IDogKGYgfCAwKSA9PSAyID8gMTIwNzk1OTU1MiA6IDEwNzM3NDE4MjQsIGYgPSBuICsgKFoodCwgdSkgPDwgMikgfCAwLCBsID4+PiAwID49IDcpCiAgICAgICAgICAgICAgICAgIGZvciAobCA9IHQgJiAtOCwgbiA9IDA7IGVbZiArIDI4ID4+IDJdID0gaywgZVtmICsgMjQgPj4gMl0gPSBrLCBlW2YgKyAyMCA+PiAyXSA9IGssIGVbZiArIDE2ID4+IDJdID0gaywgZVtmICsgMTIgPj4gMl0gPSBrLCBlW2YgKyA4ID4+IDJdID0gaywgZVtmICsgNCA+PiAyXSA9IGssIGVbZiA+PiAyXSA9IGssIGYgPSBmICsgMzIgfCAwLCBuID0gbiArIDggfCAwLCAobCB8IDApICE9IChuIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICBpZiAodCA9IHQgJiA3LCAhdCkKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIGZvciAobiA9IDA7IGVbZiA+PiAyXSA9IGssIGYgPSBmICsgNCB8IDAsIG4gPSBuICsgMSB8IDAsICh0IHwgMCkgIT0gKG4gfCAwKTsgKQogICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBlW0EgKyAxMjggPj4gMl0gPSByLCBlW0EgKyAxMjQgPj4gMl0gPSBpLCAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIG9rKEEsIGksIHIsIGYpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIGkgPSBpIHwgMCwgciA9IHIgfCAwLCBmID0gZiB8IDA7CiAgICAgICAgICAgICAgdmFyIGsgPSAwLCB0ID0gMCwgbiA9IDAsIGwgPSAwLCBhID0gMCwgdSA9IDAsIG8gPSAwOwogICAgICAgICAgICAgIG4gPSBYIC0gMTYgfCAwLCBYID0gbiwgZVtuICsgMTIgPj4gMl0gPSByLCBsID0gZVtBICsgNzIgPj4gMl0sIGVbQSArIDggPj4gMl0gPT0gMTYgPyBrID0gZVtBICsgMTU2ID4+IDJdICsgWihlW0EgKyAyMDQgPj4gMl0sIDU2NDQpIHwgMCA6IGsgPSBlW0EgKyAxMiA+PiAyXSwgRltrICsgNTY0MCB8IDBdID0gSVtrICsgNTY0MCB8IDBdIHwgMTsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAociA+Pj4gMCA8PSA0KSB7CiAgICAgICAgICAgICAgICAgIFEoZiwgMSwgNzQ4MiwgMCk7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoaDIoaSwgaywgMSksIGRbayA+PiAyXSA+PSA4KSB7CiAgICAgICAgICAgICAgICAgIFEoZiwgMSwgNzQyMiwgMCk7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoaDIoaSArIDEgfCAwLCBuICsgOCB8IDAsIDEpLCByID0gZVtuICsgOCA+PiAyXSwgZVtrICsgNCA+PiAyXSA9IHIsIChyIHwgMCkgPj0gNSAmJiAoUShmLCAxLCA3MzgxLCAwKSwgZVtrICsgNCA+PiAyXSA9IC0xKSwgaDIoaSArIDIgfCAwLCBrICsgOCB8IDAsIDIpLCByID0gZVtrICsgOCA+PiAyXSwgciAtIDY1NTM2ID4+PiAwIDw9IDQyOTQ5MDE3NjApIHsKICAgICAgICAgICAgICAgICAgZVtuID4+IDJdID0gciwgUShmLCAxLCAxODIzMywgbik7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoYSA9IGVbQSArIDE2NCA+PiAyXSwgZVtrICsgMTIgPj4gMl0gPSBhIHx8IHIsIGgyKGkgKyA0IHwgMCwgayArIDE2IHwgMCwgMSksIGRbayArIDE2ID4+IDJdID49IDIpIHsKICAgICAgICAgICAgICAgICAgUShmLCAxLCA5MDM3LCAwKTsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGEgPSBpICsgNSB8IDAsIGVbbiArIDEyID4+IDJdID0gZVtuICsgMTIgPj4gMl0gLSA1LCBsID0gZVtsICsgMTYgPj4gMl07CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIGlmICghbCkKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICBpZiAoaSA9IGVbayA+PiAyXSAmIDEsIHIgPSBlW2sgKyA1NTg0ID4+IDJdLCBrID0gMCwgbCA+Pj4gMCA+PSA4KQogICAgICAgICAgICAgICAgICAgIGZvciAobyA9IGwgJiAtODsgZVtyICsgWih0LCAxMDgwKSA+PiAyXSA9IGksIGVbciArIFoodCB8IDEsIDEwODApID4+IDJdID0gaSwgZVtyICsgWih0IHwgMiwgMTA4MCkgPj4gMl0gPSBpLCBlW3IgKyBaKHQgfCAzLCAxMDgwKSA+PiAyXSA9IGksIGVbciArIFoodCB8IDQsIDEwODApID4+IDJdID0gaSwgZVtyICsgWih0IHwgNSwgMTA4MCkgPj4gMl0gPSBpLCBlW3IgKyBaKHQgfCA2LCAxMDgwKSA+PiAyXSA9IGksIGVbciArIFoodCB8IDcsIDEwODApID4+IDJdID0gaSwgdCA9IHQgKyA4IHwgMCwgdSA9IHUgKyA4IHwgMCwgKG8gfCAwKSAhPSAodSB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgIGlmIChsID0gbCAmIDcsICFsKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIGZvciAoOyBlW3IgKyBaKHQsIDEwODApID4+IDJdID0gaSwgdCA9IHQgKyAxIHwgMCwgayA9IGsgKyAxIHwgMCwgKGwgfCAwKSAhPSAoayB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHQgPSAwLCAhTjQoQSwgMCwgYSwgbiArIDEyIHwgMCwgZikpIHsKICAgICAgICAgICAgICAgICAgUShmLCAxLCA3NDgyLCAwKTsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChlW24gKyAxMiA+PiAyXSkgewogICAgICAgICAgICAgICAgICBRKGYsIDEsIDc0ODIsIDApOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGVbQSArIDggPj4gMl0gPT0gMTYgPyBpID0gZVtBICsgMTU2ID4+IDJdICsgWihlW0EgKyAyMDQgPj4gMl0sIDU2NDQpIHwgMCA6IGkgPSBlW0EgKyAxMiA+PiAyXSwgZFtlW0EgKyA3MiA+PiAyXSArIDE2ID4+IDJdID49IDIpCiAgICAgICAgICAgICAgICAgIGZvciAoaSA9IGVbaSArIDU1ODQgPj4gMl0sIGYgPSBlW2kgKyA0ID4+IDJdIDw8IDIsIHQgPSBpICsgOTQ0IHwgMCwgbCA9IGkgKyA4MTIgfCAwLCBrID0gMSwgciA9IGk7IGVbciArIDEwODQgPj4gMl0gPSBlW2kgKyA0ID4+IDJdLCBlW3IgKyAxMDg4ID4+IDJdID0gZVtpICsgOCA+PiAyXSwgZVtyICsgMTA5MiA+PiAyXSA9IGVbaSArIDEyID4+IDJdLCBlW3IgKyAxMDk2ID4+IDJdID0gZVtpICsgMTYgPj4gMl0sIGVbciArIDExMDAgPj4gMl0gPSBlW2kgKyAyMCA+PiAyXSwgRjIociArIDE4OTIgfCAwLCBsLCBmKSwgRjIociArIDIwMjQgfCAwLCB0LCBmKSwgciA9IHIgKyAxMDgwIHwgMCwgayA9IGsgKyAxIHwgMCwgayA+Pj4gMCA8IGRbZVtBICsgNzIgPj4gMl0gKyAxNiA+PiAyXTsgKQogICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgIHQgPSAxOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gWCA9IG4gKyAxNiB8IDAsIHQgfCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIHVyKEEsIGksIHIsIGYpIHsKICAgICAgICAgICAgICB2YXIgayA9IDAsIHQgPSAwLCBuID0gMCwgbCA9IDAsIGEgPSAwLCB1ID0gMCwgbyA9IDAsIGcgPSAwLCBoID0gMCwgcyA9IDAsIHcgPSAwLCBCID0gMCwgYyA9IDAsIHYgPSAwLCBDID0gMCwgbSA9IDAsIHkgPSAwLCBwID0gMCwgSCA9IDAsIEogPSAwLCBFID0gMCwgRCA9IDAsIFUgPSAwLCBQID0gMCwgeCA9IDAsIHogPSAwLCBqID0gMCwgTyA9IDA7CiAgICAgICAgICAgICAgaWYgKHYgPSAoaSA8PCAzKSArIEEgfCAwLCBuID0gdiwgZVtuICsgNDAgPj4gMl0gPSAwLCBlW24gKyA0NCA+PiAyXSA9IDAsIHkgPSBlW0EgKyAxNiA+PiAyXSwgIXkpCiAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgICBmb3IgKFAgPSBlW0EgKyAyMCA+PiAyXSwgeCA9IFooaSwgMjQpLCBwID0gMTsgOyApIHsKICAgICAgICAgICAgICAgIGlmIChBID0gWihDLCA3NikgKyBQIHwgMCwgSCA9IGVbQSArIDIwID4+IDJdLCBIKQogICAgICAgICAgICAgICAgICBmb3IgKHogPSBlW0EgKyAyOCA+PiAyXSwgaCA9IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHMgPSBaKGgsIDE1MikgKyB6IHwgMCwgSiA9IGVbcyArIDI0ID4+IDJdLCBKKQogICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gcyArIDI4IHwgMCwgdyA9IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEEgPSBaKHcsIDM2KSArIGogfCAwOwogICAgICAgICAgICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbQSArIDggPj4gMl0gPT0gZVtBID4+IDJdIHwgZVtBICsgMTIgPj4gMl0gPT0gZVtBICsgNCA+PiAyXSB8fCAoRSA9IFooZVtzICsgMjAgPj4gMl0sIGVbcyArIDE2ID4+IDJdKSwgIUUpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKE8gPSBlW0EgKyAyMCA+PiAyXSwgQiA9IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobSA9IFooQiwgNDApICsgTyB8IDAsIEQgPSBaKGVbbSArIDIwID4+IDJdLCBlW20gKyAxNiA+PiAyXSksIEQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoYyA9IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IGVbbSArIDI0ID4+IDJdICsgWihjLCA1MikgfCAwLCBBID0gZVtsICsgNCA+PiAyXSwgaSB8fCAoZVtsICsgNDQgPj4gMl0gPSAwKSwgdSA9IEEgKyB4IHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA8IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgayA9IGVbbCArIDQ0ID4+IDJdLCBuID0gZVtsICsgNDggPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoayA9IGVbbCArIDQ0ID4+IDJdLCBVID0gZVtsICsgNDggPj4gMl0sIGsgPj4+IDAgPj0gVSA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZyA9IGVbbCArIDggPj4gMl0sIG4gPSBrLCBBID0gazsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyA9IGcgKyBaKEEsIDI0KSB8IDAsIHQgPSBlW28gPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBRMltvICsgOCA+PiAzXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBRMltvICsgOCA+PiAzXSwgbyA9IGcgKyBaKG4sIDI0KSB8IDAsIGEgPSBhIC0gUTJbbyAtIDE2ID4+IDNdLCB0ID0gdCAtIGVbbyAtIDI0ID4+IDJdIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQSA9IEEgKyAxIHwgMCwgbiA9ICh0ID8gciAtIGEgLyArKHQgPj4+IDApIDwgMjIyMDQ0NjA0OTI1MDMxM2UtMzEgOiBhICE9IDApID8gQSA6IG4sIChBIHwgMCkgPT0gKFUgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IGVbdSA+PiAyXSwgQSA9IG4gLSBrIHwgMCwgKHQgfCAwKSAhPSAoQSB8IDApID8gKGVbdSA+PiAyXSA9IEEsIHAgPSAwKSA6IEEgPSB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW3UgKyA4ID4+IDJdID0gMCwgZVt1ICsgMTIgPj4gMl0gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZyA9IGVbbCArIDggPj4gMl0sIHQgPSBnICsgWihuIC0gMSB8IDAsIDI0KSB8IDAsIEEgPSBlW3QgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBRMlt0ICsgOCA+PiAzXSwgdCA9IGVbbCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBnICsgWihrLCAyNCkgfCAwLCBhID0gUTJbdCArIDggPj4gM10gLSBRMltrIC0gMTYgPj4gM10sIGsgPSBlW2sgLSAyNCA+PiAyXSwgdCA9IGsgKyBlW2wgPj4gMl0gfCAwLCBBID0gQSAtIGsgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbdSArIDE2ID4+IDJdID0gdCwgZVt1ICsgNCA+PiAyXSA9IEEsIFEyW3UgKyA4ID4+IDNdID0gYSwgUTJbdiArIDQwID4+IDNdID0gYSArIFEyW3YgKyA0MCA+PiAzXSwgIWYpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2wgKyA0NCA+PiAyXSA9IG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID0gYyArIDEgfCAwLCAoRCB8IDApID09IChjIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEIgPSBCICsgMSB8IDAsIChFIHwgMCkgPT0gKEIgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3ID0gdyArIDEgfCAwLCAoSiB8IDApID09ICh3IHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKGggPSBoICsgMSB8IDAsIChIIHwgMCkgPT0gKGggfCAwKSkKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoQyA9IEMgKyAxIHwgMCwgKHkgfCAwKSA9PSAoQyB8IDApKQogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIHA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gVDQoQSwgaSwgcikgewogICAgICAgICAgICAgIHZhciBmID0gMCwgayA9IDAsIHQgPSAwLCBuID0gMCwgbCA9IDAsIGEgPSAwLCB1ID0gMCwgbyA9IDAsIGcgPSAwLCBoID0gMCwgcyA9IDAsIHcgPSAwLCBCID0gMDsKICAgICAgICAgICAgICB1ID0gWCAtIDI1NiB8IDAsIFggPSB1LCB0ID0gRTIoMSwgMjApOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGlmICghdCkgewogICAgICAgICAgICAgICAgICBRKHIsIDEsIDEwMzc0LCAwKSwgdCA9IDA7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmb3IgKGVbdCArIDQgPj4gMl0gPSBpLCBlW3QgPj4gMl0gPSBBLCBlW3UgPj4gMl0gPSBpLCBlW3UgKyAxMjggPj4gMl0gPSBBOyBCID0gbiwgbiA9IG4gKyAxIHwgMCwgbCA9IG4gPDwgMiwgZiA9IChpICsgMSB8IDApIC8gMiB8IDAsIGVbbCArIHUgPj4gMl0gPSBmLCBoID0gbCArICh1ICsgMTI4IHwgMCkgfCAwLCBsID0gKEEgKyAxIHwgMCkgLyAyIHwgMCwgZVtoID4+IDJdID0gbCwgYSA9IFooQSwgaSksIGsgPSBhICsgayB8IDAsIGkgPSBmLCBBID0gbCwgYSA+Pj4gMCA+IDE7ICkKICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgaWYgKGVbdCArIDggPj4gMl0gPSBrLCAhaykgewogICAgICAgICAgICAgICAgICBSKHQpLCB0ID0gMDsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChmID0gRTIoaywgMTYpLCBlW3QgKyAxMiA+PiAyXSA9IGYsICFmKSB7CiAgICAgICAgICAgICAgICAgIFEociwgMSwgNjA3NSwgMCksIFIodCksIHQgPSAwOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGcgPSBlW3QgKyA4ID4+IDJdLCBlW3QgKyAxNiA+PiAyXSA9IGcgPDwgNCwgQSA9IGYsIEIpCiAgICAgICAgICAgICAgICAgIGZvciAoayA9IChaKGVbdCArIDQgPj4gMl0sIGVbdCA+PiAyXSkgPDwgNCkgKyBmIHwgMCwgaSA9IGs7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgciA9IHMgPDwgMiwgYSA9IGVbciArIHUgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICAgICAgaWYgKChhIHwgMCkgPD0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgIHcgPSBhIC0gMSB8IDAsIGwgPSAwOwogICAgICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9IGVbciArICh1ICsgMTI4IHwgMCkgPj4gMl0sIChyIHwgMCkgPD0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID0gMCwgKGEgfCAwKSAhPSAxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChvID0gYSAmIDIxNDc0ODM2NDY7IGggPSAobiB8IDApID09ICh3IHwgMCksIG4gPSBuICsgMiB8IDAsIGsgPSBoID8gaSA6IGssIGkgPSBrLCBsID0gbCArIDIgfCAwLCAobyB8IDApICE9IChsIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhICYgMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKG4gPSBrLCBrID0gcjsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGs6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbQSA+PiAyXSA9IGksIChrIHwgMCkgPT0gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgPSBBICsgMTYgfCAwLCBpID0gaSArIDE2IHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW0EgKyAxNiA+PiAyXSA9IGksIGkgPSBpICsgMTYgfCAwLCBBID0gQSArIDMyIHwgMCwgbyA9IChrIHwgMCkgPiAyLCBrID0gayAtIDIgfCAwLCBvKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvID0gKChsIHwgMCkgPT0gKHcgfCAwKSB8IGwpICYgMSwgayA9IG8gPyBpIDogbiArIChyIDw8IDQpIHwgMCwgaSA9IG8gPyBpIDogbiwgbCA9IGwgKyAxIHwgMCwgKGEgfCAwKSA9PSAobCB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIG4gPSAoKG4gfCAwKSA9PSAodyB8IDApIHwgbikgJiAxLCByID0gbiA/IGkgOiAociA8PCA0KSArIGsgfCAwLCBpID0gbiA/IGkgOiBrLCBrID0gcjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKHMgPSBzICsgMSB8IDAsIChzIHwgMCkgPT0gKEIgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlW0EgPj4gMl0gPSAwOwogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICBpZiAoIWcpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgaWYgKGcgPj4+IDAgPj0gNCkKICAgICAgICAgICAgICAgICAgICBmb3IgKEEgPSBnICYgLTQsIGkgPSAwOyBlW2YgKyA2MCA+PiAyXSA9IDAsIGVbZiArIDUyID4+IDJdID0gOTk5LCBlW2YgKyA1NiA+PiAyXSA9IDAsIGVbZiArIDQ0ID4+IDJdID0gMCwgZVtmICsgMzYgPj4gMl0gPSA5OTksIGVbZiArIDQwID4+IDJdID0gMCwgZVtmICsgMjggPj4gMl0gPSAwLCBlW2YgKyAyMCA+PiAyXSA9IDk5OSwgZVtmICsgMjQgPj4gMl0gPSAwLCBlW2YgKyAxMiA+PiAyXSA9IDAsIGVbZiArIDQgPj4gMl0gPSA5OTksIGVbZiArIDggPj4gMl0gPSAwLCBmID0gZiAtIC02NCB8IDAsIGkgPSBpICsgNCB8IDAsIChBIHwgMCkgIT0gKGkgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICBpZiAoQSA9IGcgJiAzLCAhQSkKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBlW2YgKyAxMiA+PiAyXSA9IDAsIGVbZiArIDQgPj4gMl0gPSA5OTksIGVbZiArIDggPj4gMl0gPSAwLCBmID0gZiArIDE2IHwgMCwgaSA9IGkgKyAxIHwgMCwgKEEgfCAwKSAhPSAoaSB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gWCA9IHUgKyAyNTYgfCAwLCB0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIGhpKEEsIGksIHIsIGYsIGspIHsKICAgICAgICAgICAgICB2YXIgdCA9IDAsIG4gPSBXKDApLCBsID0gMCwgYSA9IDAsIHUgPSAwLCBvID0gVygwKTsKICAgICAgICAgICAgICBhID0gciA+Pj4gMCA8IGYgPj4+IDAgPyByIDogZjsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAoIWEpIHsKICAgICAgICAgICAgICAgICAgQSA9IGk7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAodCA9IGkgLSAzMiB8IDAsIG4gPSBHW2kgPj4gMl0sIEdbdCA+PiAyXSA9IFcoVyhHW0EgPj4gMl0gKyBuKSAqIGspICsgR1t0ID4+IDJdLCB0ID0gaSAtIDI4IHwgMCwgR1t0ID4+IDJdID0gVyhXKEdbQSArIDQgPj4gMl0gKyBHW2kgKyA0ID4+IDJdKSAqIGspICsgR1t0ID4+IDJdLCB0ID0gaSAtIDI0IHwgMCwgR1t0ID4+IDJdID0gVyhXKEdbQSArIDggPj4gMl0gKyBHW2kgKyA4ID4+IDJdKSAqIGspICsgR1t0ID4+IDJdLCB0ID0gaSAtIDIwIHwgMCwgR1t0ID4+IDJdID0gVyhXKEdbQSArIDEyID4+IDJdICsgR1tpICsgMTIgPj4gMl0pICogaykgKyBHW3QgPj4gMl0sIHQgPSBpIC0gMTYgfCAwLCBHW3QgPj4gMl0gPSBXKFcoR1tBICsgMTYgPj4gMl0gKyBHW2kgKyAxNiA+PiAyXSkgKiBrKSArIEdbdCA+PiAyXSwgdCA9IGkgLSAxMiB8IDAsIEdbdCA+PiAyXSA9IFcoVyhHW0EgKyAyMCA+PiAyXSArIEdbaSArIDIwID4+IDJdKSAqIGspICsgR1t0ID4+IDJdLCB0ID0gaSAtIDggfCAwLCBHW3QgPj4gMl0gPSBXKFcoR1tBICsgMjQgPj4gMl0gKyBHW2kgKyAyNCA+PiAyXSkgKiBrKSArIEdbdCA+PiAyXSwgdCA9IGkgLSA0IHwgMCwgR1t0ID4+IDJdID0gVyhXKEdbQSArIDI4ID4+IDJdICsgR1tpICsgMjggPj4gMl0pICogaykgKyBHW3QgPj4gMl0sIEEgPSBpIC0gLTY0IHwgMCwgdSA9IDEsIChhIHwgMCkgPT0gMSkKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIGZvciAoOyB0ID0gQSAtIDMyIHwgMCwgbyA9IG4sIG4gPSBHW2kgKyA2NCA+PiAyXSwgR1t0ID4+IDJdID0gVyhXKG8gKyBuKSAqIGspICsgR1t0ID4+IDJdLCB0ID0gQSwgbCA9IEEgLSAyOCB8IDAsIEdbbCA+PiAyXSA9IFcoVyhHW2kgKyA0ID4+IDJdICsgR1tBICsgNCA+PiAyXSkgKiBrKSArIEdbbCA+PiAyXSwgbCA9IEEgLSAyNCB8IDAsIEdbbCA+PiAyXSA9IFcoVyhHW2kgKyA4ID4+IDJdICsgR1tBICsgOCA+PiAyXSkgKiBrKSArIEdbbCA+PiAyXSwgbCA9IEEgLSAyMCB8IDAsIEdbbCA+PiAyXSA9IFcoVyhHW2kgKyAxMiA+PiAyXSArIEdbQSArIDEyID4+IDJdKSAqIGspICsgR1tsID4+IDJdLCBsID0gQSAtIDE2IHwgMCwgR1tsID4+IDJdID0gVyhXKEdbaSArIDE2ID4+IDJdICsgR1tBICsgMTYgPj4gMl0pICogaykgKyBHW2wgPj4gMl0sIGwgPSBBIC0gMTIgfCAwLCBHW2wgPj4gMl0gPSBXKFcoR1tpICsgMjAgPj4gMl0gKyBHW0EgKyAyMCA+PiAyXSkgKiBrKSArIEdbbCA+PiAyXSwgbCA9IEEgLSA4IHwgMCwgR1tsID4+IDJdID0gVyhXKEdbaSArIDI0ID4+IDJdICsgR1tBICsgMjQgPj4gMl0pICogaykgKyBHW2wgPj4gMl0sIGwgPSBBIC0gNCB8IDAsIEdbbCA+PiAyXSA9IFcoVyhHW2kgKyAyOCA+PiAyXSArIEdbQSArIDI4ID4+IDJdKSAqIGspICsgR1tsID4+IDJdLCBBID0gQSAtIC02NCB8IDAsIGkgPSB0LCB1ID0gdSArIDEgfCAwLCAodSB8IDApICE9IChhIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByID4+PiAwID4gZiA+Pj4gMCAmJiAoaSA9IEEgLSAzMiB8IDAsIG4gPSBHW0EgKyAtNjQgPj4gMl0sIEdbaSA+PiAyXSA9IFcoVyhuICsgbikgKiBrKSArIEdbaSA+PiAyXSwgaSA9IEEgLSAyOCB8IDAsIG4gPSBHW0EgLSA2MCA+PiAyXSwgR1tpID4+IDJdID0gVyhXKG4gKyBuKSAqIGspICsgR1tpID4+IDJdLCBpID0gQSAtIDI0IHwgMCwgbiA9IEdbQSAtIDU2ID4+IDJdLCBHW2kgPj4gMl0gPSBXKFcobiArIG4pICogaykgKyBHW2kgPj4gMl0sIGkgPSBBIC0gMjAgfCAwLCBuID0gR1tBIC0gNTIgPj4gMl0sIEdbaSA+PiAyXSA9IFcoVyhuICsgbikgKiBrKSArIEdbaSA+PiAyXSwgaSA9IEEgLSAxNiB8IDAsIG4gPSBHW0EgLSA0OCA+PiAyXSwgR1tpID4+IDJdID0gVyhXKG4gKyBuKSAqIGspICsgR1tpID4+IDJdLCBpID0gQSAtIDEyIHwgMCwgbiA9IEdbQSAtIDQ0ID4+IDJdLCBHW2kgPj4gMl0gPSBXKFcobiArIG4pICogaykgKyBHW2kgPj4gMl0sIGkgPSBBIC0gOCB8IDAsIG4gPSBHW0EgLSA0MCA+PiAyXSwgR1tpID4+IDJdID0gVyhXKG4gKyBuKSAqIGspICsgR1tpID4+IDJdLCBpID0gQSAtIDQgfCAwLCBuID0gR1tBIC0gMzYgPj4gMl0sIEdbaSA+PiAyXSA9IFcoVyhuICsgbikgKiBrKSArIEdbaSA+PiAyXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gejQoQSkgewogICAgICAgICAgICAgIEEgPSBBIHwgMDsKICAgICAgICAgICAgICB2YXIgaSA9IDAsIHIgPSAwLCBmID0gMCwgayA9IDAsIHQgPSAwLCBuID0gMDsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAoZiA9IEUyKDEsIDQ4KSwgZikgewogICAgICAgICAgICAgICAgICBpZiAoaSA9IGVbQSArIDIwMCA+PiAyXSwgciA9IGVbaSArIDQgPj4gMl0sIGVbZiA+PiAyXSA9IGVbaSA+PiAyXSwgZVtmICsgNCA+PiAyXSA9IHIsIHIgPSBlW2kgKyAxMiA+PiAyXSwgZVtmICsgOCA+PiAyXSA9IGVbaSArIDggPj4gMl0sIGVbZiArIDEyID4+IDJdID0gciwgciA9IGVbaSArIDIwID4+IDJdLCBlW2YgKyAxNiA+PiAyXSA9IGVbaSArIDE2ID4+IDJdLCBlW2YgKyAyMCA+PiAyXSA9IHIsIHIgPSBlW2kgKyAyNCA+PiAyXSwgZVtmICsgMjQgPj4gMl0gPSByLCBpID0gVTIoWihyLCAyNCkpLCBlW2YgKyAyOCA+PiAyXSA9IGksICFpKQogICAgICAgICAgICAgICAgICAgIHJldHVybiBSKGYpLCAwOwogICAgICAgICAgICAgICAgICByID0gZVtlW0EgKyAyMDAgPj4gMl0gKyAyOCA+PiAyXTsKICAgICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICAgIGlmIChyKSB7CiAgICAgICAgICAgICAgICAgICAgICBGMihpLCByLCBaKGVbZiArIDI0ID4+IDJdLCAyNCkpOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgUihpKSwgZVtmICsgMjggPj4gMl0gPSAwOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChyID0gZVtlW0EgKyAyMDAgPj4gMl0gKyAzNiA+PiAyXSwgZVtmICsgMzYgPj4gMl0gPSByLCBpID0gRTIociwgNDApLCBlW2YgKyA0MCA+PiAyXSA9IGksICFpKQogICAgICAgICAgICAgICAgICAgIHJldHVybiBSKGVbZiArIDI4ID4+IDJdKSwgUihmKSwgMDsKICAgICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICAgIGlmIChlW2VbQSArIDIwMCA+PiAyXSArIDQwID4+IDJdKSB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoIWVbZiArIDM2ID4+IDJdKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrID0gWihuLCA0MCksIHIgPSBlWyhrICsgZVtlW0EgKyAyMDAgPj4gMl0gKyA0MCA+PiAyXSB8IDApICsgMjAgPj4gMl0sIGVbKGkgKyBrIHwgMCkgKyAyMCA+PiAyXSA9IHIsIHQgPSBVMihaKHIsIDI0KSksIHIgPSBlW2YgKyA0MCA+PiAyXSwgaSA9IHIgKyBrIHwgMCwgZVtpICsgMjQgPj4gMl0gPSB0LCAhdCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBSKGVbKGVbZiArIDQwID4+IDJdICsgWihpLCA0MCkgfCAwKSArIDI0ID4+IDJdKSwgaSA9IGkgKyAxIHwgMCwgKG4gfCAwKSAhPSAoaSB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBlW2YgKyA0MCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICByID0gZVsoayArIGVbZVtBICsgMjAwID4+IDJdICsgNDAgPj4gMl0gfCAwKSArIDI0ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEYyKHQsIHIsIFooZVtpICsgMjAgPj4gMl0sIDI0KSksIGkgPSBlW2YgKyA0MCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIFIodCksIGkgPSBlW2YgKyA0MCA+PiAyXSwgZVsoayArIGkgfCAwKSArIDI0ID4+IDJdID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9IGVbKGsgKyBlW2VbQSArIDIwMCA+PiAyXSArIDQwID4+IDJdIHwgMCkgKyA0ID4+IDJdLCBlWyhpICsgayB8IDApICsgNCA+PiAyXSA9IHIsIHQgPSBVMihaKHIsIDI0KSksIHIgPSBlW2YgKyA0MCA+PiAyXSwgaSA9IHIgKyBrIHwgMCwgZVtpICsgMTYgPj4gMl0gPSB0LCAhdCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBBID0gWihpLCA0MCksIFIoZVsoQSArIGVbZiArIDQwID4+IDJdIHwgMCkgKyAyNCA+PiAyXSksIFIoZVsoQSArIGVbZiArIDQwID4+IDJdIHwgMCkgKyAxNiA+PiAyXSksIGkgPSBpICsgMSB8IDAsIChuIHwgMCkgIT0gKGkgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gZVtmICsgNDAgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgciA9IGVbKGsgKyBlW2VbQSArIDIwMCA+PiAyXSArIDQwID4+IDJdIHwgMCkgKyAxNiA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGMih0LCByLCBaKGVbaSArIDQgPj4gMl0sIDI0KSksIGkgPSBlW2YgKyA0MCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIFIodCksIGkgPSBlW2YgKyA0MCA+PiAyXSwgZVsoayArIGkgfCAwKSArIDE2ID4+IDJdID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9IGkgKyBrIHwgMCwgZVtyICsgMzIgPj4gMl0gPSAwLCBlW3IgKyAzNiA+PiAyXSA9IDAsIG4gPSBuICsgMSB8IDAsICEobiA+Pj4gMCA8IGRbZiArIDM2ID4+IDJdKSkKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIFIoaSksIGVbZiArIDQwID4+IDJdID0gMDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgIGYgPSAwOwogICAgICAgICAgICAgICAgcmV0dXJuIGYgfCAwOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gUihyKSwgUihlW2YgKyAyOCA+PiAyXSksIFIoZiksIDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gZ2soQSwgaSwgciwgZikgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDAsIGYgPSBmIHwgMDsKICAgICAgICAgICAgICB2YXIgayA9IDAsIHQgPSAwLCBuID0gMCwgbCA9IDAsIGEgPSAwLCB1ID0gMDsKICAgICAgICAgICAgICBpZiAoayA9IGVbQSArIDQ4ID4+IDJdLCBrID4+PiAwID49IGkgPj4+IDApCiAgICAgICAgICAgICAgICByZXR1cm4gZVtBICsgNDggPj4gMl0gPSBrIC0gaSwgZVtBICsgMzYgPj4gMl0gPSBlW0EgKyAzNiA+PiAyXSArIGksIGsgPSByICsgZVtBICsgNjAgPj4gMl0gfCAwLCBmID0gaSArIGVbQSArIDU2ID4+IDJdIHwgMCwgayA9IGYgPj4+IDAgPCBpID4+PiAwID8gayArIDEgfCAwIDogaywgZVtBICsgNTYgPj4gMl0gPSBmLCBlW0EgKyA2MCA+PiAyXSA9IGssIHEyID0gciwgaSB8IDA7CiAgICAgICAgICAgICAgaWYgKElbQSArIDY4IHwgMF0gJiA0KQogICAgICAgICAgICAgICAgcmV0dXJuIGVbQSArIDQ4ID4+IDJdID0gMCwgZVtBICsgMzYgPj4gMl0gPSBrICsgZVtBICsgMzYgPj4gMl0sIG4gPSBlW0EgKyA2MCA+PiAyXSwgciA9IGVbQSArIDU2ID4+IDJdLCBpID0gciArIGsgfCAwLCBlW0EgKyA1NiA+PiAyXSA9IGksIGVbQSArIDYwID4+IDJdID0gaSA+Pj4gMCA8IHIgPj4+IDAgPyBuICsgMSB8IDAgOiBuLCBxMiA9IGsgPyAwIDogLTEsIChrIHx8IC0xKSB8IDA7CiAgICAgICAgICAgICAgayAmJiAoZVtBICsgNDggPj4gMl0gPSAwLCBlW0EgKyAzNiA+PiAyXSA9IGVbQSArIDMyID4+IDJdLCBsID0gaSwgdCA9IGssIGkgPSBpIC0gayB8IDAsIHIgPSByIC0gKGsgPj4+IDAgPiBsID4+PiAwKSB8IDApOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGlmICgociB8IDApID4gMCA/IGwgPSAxIDogbCA9ICEhaSAmIChyIHwgMCkgPj0gMCwgbCkKICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBlW0EgKyAxMiA+PiAyXSwgayA9IHIgKyBuIHwgMCwgYSA9IGkgKyB0IHwgMCwgayA9IGVbQSArIDYwID4+IDJdICsgKGEgPj4+IDAgPCB0ID4+PiAwID8gayArIDEgfCAwIDogaykgfCAwLCB1ID0gYSwgYSA9IGEgKyBlW0EgKyA1NiA+PiAyXSB8IDAsIGsgPSB1ID4+PiAwID4gYSA+Pj4gMCA/IGsgKyAxIHwgMCA6IGssIChrIHwgMCkgPT0gKGwgfCAwKSAmIGEgPj4+IDAgPiBkW0EgKyA4ID4+IDJdIHwgayA+Pj4gMCA+IGwgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgIFEoZiwgNCwgMjc2OTIsIDApLCBlW0EgKyA0OCA+PiAyXSA9IDAsIGVbQSArIDM2ID4+IDJdID0gZVtBICsgMzIgPj4gMl0sIGkgPSBuICsgZVtBICsgNjAgPj4gMl0gfCAwLCByID0gdCArIGVbQSArIDU2ID4+IDJdIHwgMCwgaSA9IHIgPj4+IDAgPCB0ID4+PiAwID8gaSArIDEgfCAwIDogaSwgZVtBICsgNTYgPj4gMl0gPSByLCBlW0EgKyA2MCA+PiAyXSA9IGksIGYgPSBlW0EgKyA4ID4+IDJdLCB0ID0gZiAtIHIgfCAwLCBrID0gZVtBICsgMTIgPj4gMl0sIG4gPSBrIC0gKChyID4+PiAwID4gZiA+Pj4gMCkgKyBpIHwgMCkgfCAwLCBsID0gbzJbZVtBICsgMjggPj4gMl1dKGYsIGssIGVbQSA+PiAyXSkgfCAwLCBhID0gZVtBICsgNjggPj4gMl0sIGwgJiYgKGVbQSArIDU2ID4+IDJdID0gZiwgZVtBICsgNjAgPj4gMl0gPSBrKSwgZVtBICsgNjggPj4gMl0gPSBhIHwgNCwgQSA9IChyIHwgMCkgPT0gKGYgfCAwKSAmIChpIHwgMCkgPT0gKGsgfCAwKSwgaSA9IEEgPyAtMSA6IHQ7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoayA9IG8yW2VbQSArIDI0ID4+IDJdXShpLCByLCBlW0EgPj4gMl0pIHwgMCwgbCA9IHEyLCBhID0gbCwgKGsgJiBhKSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICAgUShmLCA0LCAyNzY5MiwgMCksIGVbQSArIDY4ID4+IDJdID0gZVtBICsgNjggPj4gMl0gfCA0LCBrID0gbiArIGVbQSArIDYwID4+IDJdIHwgMCwgaSA9IHQgKyBlW0EgKyA1NiA+PiAyXSB8IDAsIGsgPSBpID4+PiAwIDwgdCA+Pj4gMCA/IGsgKyAxIHwgMCA6IGssIGVbQSArIDU2ID4+IDJdID0gaSwgZVtBICsgNjAgPj4gMl0gPSBrLCBBID0gIShuIHwgdCksIGkgPSBBID8gLTEgOiB0OwogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKG4gPSBuICsgYSB8IDAsIHQgPSBrICsgdCB8IDAsIG4gPSB0ID4+PiAwIDwgayA+Pj4gMCA/IG4gKyAxIHwgMCA6IG4sIGwgPSBpLCBpID0gaSAtIGsgfCAwLCByID0gciAtICgoayA+Pj4gMCA+IGwgPj4+IDApICsgYSB8IDApIHwgMCwgISghIWkgJiAociB8IDApID49IDAgfCAociB8IDApID4gMCkpCiAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIGkgPSBuICsgZVtBICsgNjAgPj4gMl0gfCAwLCByID0gdCArIGVbQSArIDU2ID4+IDJdIHwgMCwgaSA9IHIgPj4+IDAgPCB0ID4+PiAwID8gaSArIDEgfCAwIDogaSwgZVtBICsgNTYgPj4gMl0gPSByLCBlW0EgKyA2MCA+PiAyXSA9IGksIHEyID0gbiwgdCB8IDA7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBxMiA9IEEgPyAtMSA6IG4sIGkgfCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIGhrKEEsIGksIHIsIGYpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIGkgPSBpIHwgMCwgciA9IHIgfCAwLCBmID0gZiB8IDA7CiAgICAgICAgICAgICAgdmFyIGsgPSAwLCB0ID0gMCwgbiA9IDAsIGwgPSAwLCBhID0gMCwgdSA9IDA7CiAgICAgICAgICAgICAgayA9IFggLSA4MCB8IDAsIFggPSBrOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGlmIChyID4+PiAwIDw9IDIpIHsKICAgICAgICAgICAgICAgICAgUShmLCAxLCAyNjAxOSwgMCk7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoSVtBICsgMTI0IHwgMF0pIHsKICAgICAgICAgICAgICAgICAgUShmLCA0LCAyMTc3MiwgMCksIG4gPSAxOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgbiA9IDEsIGgyKGksIEEgKyA0MCB8IDAsIDEpLCBoMihpICsgMSB8IDAsIEEgKyA1MiB8IDAsIDEpLCBoMihpICsgMiB8IDAsIEEgKyA0NCB8IDAsIDEpLCB0ID0gaSArIDMgfCAwOwogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgazogewogICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICBBOgogICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobCA9IGVbQSArIDQwID4+IDJdLCBsIC0gMSB8IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAociA+Pj4gMCA8PSA2KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZVtrICsgMTYgPj4gMl0gPSByLCBRKGYsIDEsIDI3MTUwLCBrICsgMTYgfCAwKSwgbiA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHIgfCAwKSA9PSA3IHwgZVtBICsgNDggPj4gMl0gPT0gMTQgfHwgKGVbayArIDQ4ID4+IDJdID0gciwgUShmLCAyLCAyNzE1MCwgayArIDQ4IHwgMCkpLCBoMih0LCBBICsgNDggfCAwLCA0KSwgZVtBICsgNDggPj4gMl0gIT0gMTQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSBVMigzNiksICF0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IDAsIFEoZiwgMSwgMTc4ODgsIDApOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZVt0ID4+IDJdID0gMTQsIGVbayArIDY0ID4+IDJdID0gMCwgZVtrICsgNTYgPj4gMl0gPSAwLCBlW2sgKyA3MiA+PiAyXSA9IDAsIGVbayArIDYwID4+IDJdID0gMCwgZVtrICsgNjggPj4gMl0gPSAwLCBlW2sgKyA3NiA+PiAyXSA9IDAsIG4gPSA0NDcwMDY0LCBlW2sgKyA1MiA+PiAyXSA9IDQ0NzAwNjQsIGVbdCArIDQgPj4gMl0gPSAxMTQ1MzkwNTkyOwogICAgICAgICAgICAgICAgICAgICAgICBBOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChyIHwgMCkgIT0gNykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChyIHwgMCkgPT0gMzUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDIoaSArIDcgfCAwLCBrICsgNzYgfCAwLCA0KSwgaDIoaSArIDExIHwgMCwgayArIDcyIHwgMCwgNCksIGgyKGkgKyAxNSB8IDAsIGsgKyA2OCB8IDAsIDQpLCBoMihpICsgMTkgfCAwLCBrIC0gLTY0IHwgMCwgNCksIGgyKGkgKyAyMyB8IDAsIGsgKyA2MCB8IDAsIDQpLCBoMihpICsgMjcgfCAwLCBrICsgNTYgfCAwLCA0KSwgaDIoaSArIDMxIHwgMCwgayArIDUyIHwgMCwgNCksIGVbdCArIDQgPj4gMl0gPSAwLCBuID0gZVtrICsgNTIgPj4gMl0sIHIgPSBlW2sgKyA1NiA+PiAyXSwgZiA9IGVbayArIDY0ID4+IDJdLCBhID0gZVtrICsgNjggPj4gMl0sIHUgPSBlW2sgKyA3NiA+PiAyXSwgbCA9IGVbayArIDcyID4+IDJdLCBpID0gZVtrICsgNjAgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2sgKyAzMiA+PiAyXSA9IHIsIFEoZiwgMiwgMjcxODYsIGsgKyAzMiB8IDApOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICByID0gMCwgZiA9IDAsIGwgPSAwLCBpID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlW3QgKyAyNCA+PiAyXSA9IGksIGVbdCArIDE2ID4+IDJdID0gYSwgZVt0ICsgOCA+PiAyXSA9IHUsIGVbdCArIDMyID4+IDJdID0gbiwgZVt0ICsgMjggPj4gMl0gPSByLCBlW3QgKyAyMCA+PiAyXSA9IGYsIGVbdCArIDEyID4+IDJdID0gbCwgZVtBICsgMTEyID4+IDJdID0gMCwgZVtBICsgMTA4ID4+IDJdID0gdDsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlmIChpID0gciAtIDMgfCAwLCBlW0EgKyAxMTIgPj4gMl0gPSBpLCBmID0gRTIoMSwgaSksIGVbQSArIDEwOCA+PiAyXSA9IGYsICFmKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgaWYgKChyIHwgMCkgPD0gMykKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgIGZvciAociA9IDA7IGgyKHQsIGsgKyA3NiB8IDAsIDEpLCBGW2VbQSArIDEwOCA+PiAyXSArIHIgfCAwXSA9IGVbayArIDc2ID4+IDJdLCB0ID0gdCArIDEgfCAwLCByID0gciArIDEgfCAwLCAoaSB8IDApICE9IChyIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKGwgPj4+IDAgPCAzKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICBlW2sgPj4gMl0gPSBsLCBRKGYsIDQsIDI4MzAwLCBrKTsKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIG4gPSAwLCBlW0EgKyAxMTIgPj4gMl0gPSAwOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgbiA9IDEsIEZbQSArIDEyNCB8IDBdID0gMTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIFggPSBrICsgODAgfCAwLCBuIHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBpMShBLCBpLCByLCBmKSB7CiAgICAgICAgICAgICAgdmFyIGsgPSAwLCB0ID0gMCwgbiA9IDAsIGwgPSAwLCBhID0gMCwgdSA9IDA7CiAgICAgICAgICAgICAgaWYgKG4gPSBlW0EgKyA0OCA+PiAyXSwgbiA+Pj4gMCA+PSByID4+PiAwKQogICAgICAgICAgICAgICAgcmV0dXJuIEYyKGksIGVbQSArIDM2ID4+IDJdLCByKSwgZVtBICsgMzYgPj4gMl0gPSBlW0EgKyAzNiA+PiAyXSArIHIsIGVbQSArIDQ4ID4+IDJdID0gZVtBICsgNDggPj4gMl0gLSByLCB0ID0gZVtBICsgNjAgPj4gMl0sIGkgPSBlW0EgKyA1NiA+PiAyXSArIHIgfCAwLCB0ID0gaSA+Pj4gMCA8IHIgPj4+IDAgPyB0ICsgMSB8IDAgOiB0LCBlW0EgKyA1NiA+PiAyXSA9IGksIGVbQSArIDYwID4+IDJdID0gdCwgcjsKICAgICAgICAgICAgICBpZiAoSVtBICsgNjggfCAwXSAmIDQpCiAgICAgICAgICAgICAgICByZXR1cm4gRjIoaSwgZVtBICsgMzYgPj4gMl0sIG4pLCByID0gZVtBICsgNDggPj4gMl0sIGVbQSArIDQ4ID4+IDJdID0gMCwgZVtBICsgMzYgPj4gMl0gPSByICsgZVtBICsgMzYgPj4gMl0sIGkgPSBlW0EgKyA2MCA+PiAyXSwgZiA9IHIsIHIgPSBlW0EgKyA1NiA+PiAyXSArIHIgfCAwLCBpID0gZiA+Pj4gMCA+IHIgPj4+IDAgPyBpICsgMSB8IDAgOiBpLCBlW0EgKyA1NiA+PiAyXSA9IHIsIGVbQSArIDYwID4+IDJdID0gaSwgbiB8fCAtMTsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAobikgewogICAgICAgICAgICAgICAgICBsID0gRjIoaSwgZVtBICsgMzYgPj4gMl0sIG4pLCBhID0gZVtBICsgMzIgPj4gMl0sIGVbQSArIDM2ID4+IDJdID0gYSwgayA9IGVbQSArIDQ4ID4+IDJdLCBlW0EgKyA0OCA+PiAyXSA9IDAsIGkgPSBlW0EgKyA2MCA+PiAyXSwgdCA9IGVbQSArIDU2ID4+IDJdICsgayB8IDAsIGkgPSB0ID4+PiAwIDwgayA+Pj4gMCA/IGkgKyAxIHwgMCA6IGksIGVbQSArIDU2ID4+IDJdID0gdCwgZVtBICsgNjAgPj4gMl0gPSBpLCByID0gciAtIGsgfCAwLCBpID0gayArIGwgfCAwOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYSA9IGVbQSArIDMyID4+IDJdLCBlW0EgKyAzNiA+PiAyXSA9IGE7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgICAgayA9IGVbQSA+PiAyXSwgbCA9IGVbQSArIDE2ID4+IDJdLCB0ID0gZVtBICsgNjQgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICBrOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID4+PiAwID4gciA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID0gbzJbbCB8IDBdKGEsIHQsIGspIHwgMCwgZVtBICsgNDggPj4gMl0gPSBsLCAobCB8IDApID09IC0xKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA+Pj4gMCA8PSBsID4+PiAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgICBGMihpLCBlW0EgKyAzNiA+PiAyXSwgbCksIGEgPSBlW0EgKyAzMiA+PiAyXSwgZVtBICsgMzYgPj4gMl0gPSBhLCBrID0gZVtBICsgNDggPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoayA9IG8yW2wgfCAwXShpLCByLCBrKSB8IDAsIGVbQSArIDQ4ID4+IDJdID0gaywgKGsgfCAwKSA9PSAtMSkKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAociA+Pj4gMCA8PSBrID4+PiAwKQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBlW0EgKyAzMiA+PiAyXSwgZVtBICsgMzYgPj4gMl0gPSBhLCBsID0gazsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGVbQSArIDQ4ID4+IDJdID0gMCwgdCA9IGVbQSArIDYwID4+IDJdLCB1ID0gZVtBICsgNTYgPj4gMl0gKyBrIHwgMCwgdCA9IHUgPj4+IDAgPCBrID4+PiAwID8gdCArIDEgfCAwIDogdCwgZVtBICsgNTYgPj4gMl0gPSB1LCBlW0EgKyA2MCA+PiAyXSA9IHQsIGkgPSBpICsgayB8IDAsIHIgPSByIC0gayB8IDAsIG4gPSBuICsgbCB8IDA7CiAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgcmV0dXJuIEYyKGksIGVbQSArIDM2ID4+IDJdLCByKSwgZVtBICsgMzYgPj4gMl0gPSBlW0EgKyAzNiA+PiAyXSArIHIsIGVbQSArIDQ4ID4+IDJdID0gZVtBICsgNDggPj4gMl0gLSByLCBpID0gZVtBICsgNjAgPj4gMl0sIGYgPSBlW0EgKyA1NiA+PiAyXSArIHIgfCAwLCBpID0gZiA+Pj4gMCA8IHIgPj4+IDAgPyBpICsgMSB8IDAgOiBpLCBlW0EgKyA1NiA+PiAyXSA9IGYsIGVbQSArIDYwID4+IDJdID0gaSwgciArIG4gfCAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIGVbQSArIDQ4ID4+IDJdID0gMCwgZVtBICsgMzYgPj4gMl0gPSBlW0EgKyAzMiA+PiAyXSwgaSA9IGVbQSArIDYwID4+IDJdLCByID0gZVtBICsgNTYgPj4gMl0gKyBrIHwgMCwgaSA9IHIgPj4+IDAgPCBrID4+PiAwID8gaSArIDEgfCAwIDogaSwgZVtBICsgNTYgPj4gMl0gPSByLCBlW0EgKyA2MCA+PiAyXSA9IGksIGsgKyBuIHwgMDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIFEoZiwgNCwgMjc2OTIsIDApLCBlW0EgKyA0OCA+PiAyXSA9IDAsIGVbQSArIDY4ID4+IDJdID0gZVtBICsgNjggPj4gMl0gfCA0LCBuIHx8IC0xOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIGQ0KEEsIGkpIHsKICAgICAgICAgICAgICB2YXIgciA9IDAsIGYgPSAwLCBrID0gMCwgdCA9IDAsIG4gPSAwLCBsID0gMCwgYSA9IDAsIHUgPSAwOwogICAgICAgICAgICAgIGlmIChrID0gZVtBICsgMjQgPj4gMl0sIHUgPSBlW2sgKyAxNiA+PiAyXSwgIXUpCiAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICB0ID0gZVtrICsgMjQgPj4gMl0sIGsgPSBlW2VbZVtBICsgMjAgPj4gMl0gPj4gMl0gKyAyMCA+PiAyXTsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIGlmICghaSkgewogICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICByID0gZVt0ICsgMjQgPj4gMl0sIEEgPSBlW2sgKyAyOCA+PiAyXSArIFooZVtrICsgMjQgPj4gMl0sIDE1MikgfCAwLCBuID0gZVtBIC0gMTQwID4+IDJdLCBsID0gZVtBIC0gMTQ4ID4+IDJdLCBmID0gbiAtIGwgfCAwLCBBID0gZVtBIC0gMTQ0ID4+IDJdIC0gZVtBIC0gMTUyID4+IDJdIHwgMDsKICAgICAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChuIHwgMCkgPT0gKGwgfCAwKSB8fCAoZDAoQSwgMCwgZiwgMCksICFxMikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGYgPSBaKEEsIGYpOwogICAgICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoQSA9IChyID4+PiAzIHwgMCkgKyAoKHIgJiA3KSAhPSAwKSB8IDAsIHIgPSAoQSB8IDApID09IDMgPyA0IDogQSwgIXIgfHwgKGQwKHIsIDAsIGYsIDApLCAhcTIpKQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBpZiAoQSA9IC0xLCByID0gWihyLCBmKSwgciA+Pj4gMCA+IChpIF4gLTEpID4+PiAwKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPSBrICsgNzYgfCAwLCB0ID0gdCArIDUyIHwgMCwgaSA9IGkgKyByIHwgMCwgQSA9IGksIGEgPSBhICsgMSB8IDAsICh1IHwgMCkgPT0gKGEgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKGkgPSAwLCAhZVtBICsgNjQgPj4gMl0pIHsKICAgICAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgIHIgPSBlW3QgKyAyNCA+PiAyXSwgQSA9IGVbayArIDI4ID4+IDJdICsgWihlW2sgKyAyNCA+PiAyXSwgMTUyKSB8IDAsIG4gPSBlW0EgLSA0ID4+IDJdLCBsID0gZVtBIC0gMTIgPj4gMl0sIGYgPSBuIC0gbCB8IDAsIEEgPSBlW0EgLSA4ID4+IDJdIC0gZVtBIC0gMTYgPj4gMl0gfCAwOwogICAgICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoKG4gfCAwKSA9PSAobCB8IDApIHx8IChkMChBLCAwLCBmLCAwKSwgIXEyKSkKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgZiA9IFooQSwgZik7CiAgICAgICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBID0gKHIgPj4+IDMgfCAwKSArICgociAmIDcpICE9IDApIHwgMCwgciA9IChBIHwgMCkgPT0gMyA/IDQgOiBBLCAhciB8fCAoZDAociwgMCwgZiwgMCksICFxMikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlmIChBID0gLTEsIHIgPSBaKHIsIGYpLCByID4+PiAwID4gKGkgXiAtMSkgPj4+IDApCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoayA9IGsgKyA3NiB8IDAsIHQgPSB0ICsgNTIgfCAwLCBpID0gaSArIHIgfCAwLCBBID0gaSwgYSA9IGEgKyAxIHwgMCwgKHUgfCAwKSA9PSAoYSB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgICByID0gZVt0ICsgMjQgPj4gMl0sIEEgPSBlW2sgKyAyOCA+PiAyXSArIFooZVtrICsgMjQgPj4gMl0sIDE1MikgfCAwLCBuID0gZVtBIC0gMTQwID4+IDJdLCBsID0gZVtBIC0gMTQ4ID4+IDJdLCBmID0gbiAtIGwgfCAwLCBBID0gZVtBIC0gMTQ0ID4+IDJdIC0gZVtBIC0gMTUyID4+IDJdIHwgMDsKICAgICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoKG4gfCAwKSA9PSAobCB8IDApIHx8IChkMChBLCAwLCBmLCAwKSwgIXEyKSkKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGYgPSBaKEEsIGYpOwogICAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChBID0gKHIgPj4+IDMgfCAwKSArICgociAmIDcpICE9IDApIHwgMCwgciA9IChBIHwgMCkgPT0gMyA/IDQgOiBBLCAhciB8fCAoZDAociwgMCwgZiwgMCksICFxMikpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoQSA9IC0xLCByID0gWihyLCBmKSwgciA+Pj4gMCA+IChpIF4gLTEpID4+PiAwKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICBpZiAoayA9IGsgKyA3NiB8IDAsIHQgPSB0ICsgNTIgfCAwLCBpID0gaSArIHIgfCAwLCBBID0gaSwgYSA9IGEgKyAxIHwgMCwgKHUgfCAwKSA9PSAoYSB8IDApKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBBOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gc2koQSkgewogICAgICAgICAgICAgIEEgPSBBIHwgMDsKICAgICAgICAgICAgICB2YXIgaSA9IDAsIHIgPSAwLCBmID0gMCwgayA9IDAsIHQgPSAwOwogICAgICAgICAgICAgIGlmIChBKSB7CiAgICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICAgIGlmIChlW0EgPj4gMl0pIHsKICAgICAgICAgICAgICAgICAgICBpID0gZVtBICsgMTIgPj4gMl0sIGkgJiYgKHZpKGkpLCBSKGVbQSArIDEyID4+IDJdKSwgZVtBICsgMTIgPj4gMl0gPSAwKSwgaSA9IGVbQSArIDE2ID4+IDJdLCBpICYmIChSKGkpLCBlW0EgKyAxNiA+PiAyXSA9IDAsIGVbQSArIDIwID4+IDJdID0gMCksIFIoZVtBICsgNjQgPj4gMl0pLCBlW0EgKyA2MCA+PiAyXSA9IDAsIGVbQSArIDY0ID4+IDJdID0gMDsKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChpID0gZVtBICsgNDQgPj4gMl0sIGkgJiYgKFIoaSksIGVbQSArIDQ0ID4+IDJdID0gMCksIGkgPSBlW0EgKyAzMiA+PiAyXSwgaSAmJiAoUihpKSwgZVtBICsgMzIgPj4gMl0gPSAwLCBlW0EgKyAzNiA+PiAyXSA9IDApLCBpID0gZVtBICsgNTIgPj4gMl0sICFpKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIFIoaSksIGVbQSArIDUyID4+IDJdID0gMCwgZVtBICsgNTYgPj4gMl0gPSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHdpKGVbQSArIDIwOCA+PiAyXSksIGkgPSBlW0EgKyAxNTYgPj4gMl0sIGkpIHsKICAgICAgICAgICAgICAgICAgaWYgKGYgPSBaKGVbQSArIDEwNCA+PiAyXSwgZVtBICsgMTA4ID4+IDJdKSwgZikgewogICAgICAgICAgICAgICAgICAgIGZvciAoOyB2aShpKSwgaSA9IGkgKyA1NjQ0IHwgMCwgciA9IHIgKyAxIHwgMCwgKGYgfCAwKSAhPSAociB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgaSA9IGVbQSArIDE1NiA+PiAyXTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBSKGkpLCBlW0EgKyAxNTYgPj4gMl0gPSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGkgPSBlW0EgKyAxMTYgPj4gMl0sIGkpIHsKICAgICAgICAgICAgICAgICAgaWYgKHIgPSBlW0EgKyAxMTIgPj4gMl0sIHIpIHsKICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBmID0gZVtlW0EgKyAxMTYgPj4gMl0gKyAoaSA8PCAzKSA+PiAyXSwgZiAmJiAoUihmKSwgciA9IGVbQSArIDExMiA+PiAyXSksIGkgPSBpICsgMSB8IDAsIHIgPj4+IDAgPiBpID4+PiAwOyApCiAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgaSA9IGVbQSArIDExNiA+PiAyXTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlW0EgKyAxMTIgPj4gMl0gPSAwLCBSKGkpLCBlW0EgKyAxMTYgPj4gMl0gPSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKFIoZVtBICsgMTM2ID4+IDJdKSwgZVtBICsgMTIwID4+IDJdID0gMCwgZVtBICsgMTM2ID4+IDJdID0gMCwgUihlW0EgKyAxMDAgPj4gMl0pLCBlW0EgKyAxMDAgPj4gMl0gPSAwLCBJW0EgKyAxODggfCAwXSAmIDIgfHwgUihlW0EgKyAxNjggPj4gMl0pLCBkMihBICsgODAgfCAwLCAwLCAxMTIpLCB5aShlW0EgKyAxOTIgPj4gMl0pLCBlW0EgKyAxOTIgPj4gMl0gPSAwLCB5aShlW0EgKyAxOTYgPj4gMl0pLCBlW0EgKyAxOTIgPj4gMl0gPSAwLCBpID0gZVtBICsgMjAwID4+IDJdLCBpKSB7CiAgICAgICAgICAgICAgICAgIGlmIChyID0gZVtpICsgMjggPj4gMl0sIHIgJiYgKFIociksIGVbaSArIDI4ID4+IDJdID0gMCksIHIgPSBlW2kgKyA0MCA+PiAyXSwgcikgewogICAgICAgICAgICAgICAgICAgIGlmIChlW2kgKyAzNiA+PiAyXSkKICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBmID0gWih0LCA0MCksIGsgPSBlWyhmICsgciB8IDApICsgMzYgPj4gMl0sIGsgJiYgKFIoayksIHIgPSBlW2kgKyA0MCA+PiAyXSwgZVsoZiArIHIgfCAwKSArIDM2ID4+IDJdID0gMCksIGsgPSBlWyhyICsgZiB8IDApICsgMTYgPj4gMl0sIGsgJiYgKFIoayksIHIgPSBlW2kgKyA0MCA+PiAyXSwgZVsoZiArIHIgfCAwKSArIDE2ID4+IDJdID0gMCksIGsgPSBlWyhyICsgZiB8IDApICsgMjQgPj4gMl0sIGsgJiYgKFIoayksIHIgPSBlW2kgKyA0MCA+PiAyXSwgZVsoZiArIHIgfCAwKSArIDI0ID4+IDJdID0gMCksIHQgPSB0ICsgMSB8IDAsIHQgPj4+IDAgPCBkW2kgKyAzNiA+PiAyXTsgKQogICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgUihyKSwgZVtpICsgNDAgPj4gMl0gPSAwOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIFIoaSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlW0EgKyAyMDAgPj4gMl0gPSAwLCB5MShlW0EgKyA3MiA+PiAyXSksIGVbQSArIDcyID4+IDJdID0gMCwgeTEoZVtBICsgNzYgPj4gMl0pLCBlW0EgKyA3NiA+PiAyXSA9IDAsIGdyKGVbQSArIDIxMiA+PiAyXSksIGVbQSArIDIxMiA+PiAyXSA9IDAsIFIoQSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIEs0KEEsIGkpIHsKICAgICAgICAgICAgICB2YXIgciA9IDAsIGYgPSAwLCBrID0gMCwgdCA9IDAsIG4gPSAwLCBsID0gMCwgYSA9IDAsIHUgPSAwLCBvID0gMCwgZyA9IDAsIGggPSAwLCBzID0gMCwgdyA9IDAsIEIgPSAwLCBjID0gMCwgdiA9IDAsIEMgPSAwLCBtID0gMDsKICAgICAgICAgICAgICBrID0gZVtBICsgMjggPj4gMl0gKyBaKGksIDE1MikgfCAwLCByID0gZVtrIC0gMTQ0ID4+IDJdIC0gZVtrIC0gMTUyID4+IDJdIHwgMCwgbiA9IHIsIGsgPSBlW2sgLSAxNDAgPj4gMl0gLSBlW2sgLSAxNDggPj4gMl0gfCAwLCB0ID0gaywgciA9IHIgPj4+IDAgPj0gNjQgPyA2NCA6IHIsIGYgPSBrID4+PiAwID49IDY0ID8gNjQgOiBrOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgaWYgKCFuIHwgIWsgfCAoIXIgfCAhZikgfHwgciA+Pj4gMCA+IDQyOTQ5NjcyOTUgLyAoZiA+Pj4gMCkgPj4+IDIgPj4+IDApCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgayA9IEUyKDEsIDI4KSwgZVtrICsgMTIgPj4gMl0gPSBmLCBlW2sgKyA4ID4+IDJdID0gciwgZVtrICsgNCA+PiAyXSA9IHQsIGVbayA+PiAyXSA9IG4sIGwgPSB0LCB0ID0gZiArIHQgfCAwLCBhID0gbCA+Pj4gMCA+IHQgPj4+IDAgPyAxIDogYSwgZiA9IG4wKHQgLSAxIHwgMCwgYSAtICF0IHwgMCwgZiwgMCksIGVbayArIDIwID4+IDJdID0gZiwgdCA9IDAsIGwgPSBuLCBuID0gciArIG4gfCAwLCB0ID0gbCA+Pj4gMCA+IG4gPj4+IDAgPyAxIDogdCwgciA9IG4wKG4gLSAxIHwgMCwgdCAtICFuIHwgMCwgciwgMCksIGVbayArIDE2ID4+IDJdID0gciwgZDAoZiwgMCwgciwgMCk7CiAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICBpZiAocTIgfHwgKHIgPSBFMig0LCBaKHIsIGYpKSwgZVtrICsgMjQgPj4gMl0gPSByLCAhcikpCiAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgUihrKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGsgPSAwOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoIWspCiAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAoaSkKICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHcgPSBaKHMsIDE1MiksIHQgPSB3ICsgZVtBICsgMjggPj4gMl0gfCAwLCByID0gZVt0ICsgMjQgPj4gMl0sIHIpCiAgICAgICAgICAgICAgICAgICAgICBmb3IgKHYgPSB0ICsgMjggfCAwLCBmID0gZVt0ICsgMjAgPj4gMl0sIG4gPSBlW3QgKyAxNiA+PiAyXSwgZyA9IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChaKGYsIG4pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChhID0gWihnLCAzNikgKyB2IHwgMCwgaCA9IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobyA9IGVbYSArIDIwID4+IDJdICsgWihoLCA0MCkgfCAwLCByID0gZVtvICsgMjAgPj4gMl0sIHUgPSBlW28gKyAxNiA+PiAyXSwgWihyLCB1KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKG4gPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmID0gZVtvICsgMjQgPj4gMl0gKyAobiA8PCA2KSB8IDAsIEIgPSBlW2YgKyA2MCA+PiAyXSwgQikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHUgPSBlW2YgKyAxMiA+PiAyXSwgQyA9IGVbZiArIDIwID4+IDJdLCBtID0gZVtmICsgMTYgPj4gMl0sIGMgPSBlW2YgKyA4ID4+IDJdLCBmID0gYyAtIGVbYSA+PiAyXSB8IDAsIGwgPSBlW2EgKyAxNiA+PiAyXSwgbCAmIDEgJiYgKHIgPSBlW0EgKyAyOCA+PiAyXSArIHcgfCAwLCBmID0gKGVbciAtIDE0NCA+PiAyXSArIGYgfCAwKSAtIGVbciAtIDE1MiA+PiAyXSB8IDApLCByID0gdSAtIGVbYSArIDQgPj4gMl0gfCAwLCBsICYgMiAmJiAobCA9IHIsIHIgPSBlW0EgKyAyOCA+PiAyXSArIHcgfCAwLCByID0gKGwgKyBlW3IgLSAxNDAgPj4gMl0gfCAwKSAtIGVbciAtIDE0OCA+PiAyXSB8IDApLCBsID0gZiwgZiA9IG0gLSBjIHwgMCwgIWFlKGssIGwsIHIsIGwgKyBmIHwgMCwgKEMgLSB1IHwgMCkgKyByIHwgMCwgQiwgMSwgZiwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gZVtvICsgMTYgPj4gMl0sIHIgPSBlW28gKyAyMCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPSBuICsgMSB8IDAsICEobiA+Pj4gMCA8IFoociwgdSkgPj4+IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IGVbdCArIDE2ID4+IDJdLCBmID0gZVt0ICsgMjAgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaCA9IGggKyAxIHwgMCwgIShoID4+PiAwIDwgWihmLCBuKSA+Pj4gMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICByID0gZVt0ICsgMjQgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGcgPSBnICsgMSB8IDAsICEoZyA+Pj4gMCA8IHIgPj4+IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChzID0gcyArIDEgfCAwLCAocyB8IDApID09IChpIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIGs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiAkMShrKSwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBqNChBLCBpLCByLCBmKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDAsIHIgPSByIHwgMCwgZiA9IGYgfCAwOwogICAgICAgICAgICAgIHZhciBrID0gMCwgdCA9IDAsIG4gPSAwLCBsID0gMCwgYSA9IDAsIHUgPSAwLCBvID0gMCwgZyA9IDA7CiAgICAgICAgICAgICAgayA9IEUyKDEsIDM2KSwgZVtpICsgNzIgPj4gMl0gPSBrOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgaWYgKCFrKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICBpZiAoYzAoZVtpICsgMTk2ID4+IDJdLCAxMjAsIGYpICYmIGMwKGVbaSArIDE5NiA+PiAyXSwgMTIxLCBmKSkKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB1ID0gZVtpICsgMTk2ID4+IDJdLCB0ID0gZVt1ID4+IDJdLCBuID0gZVt1ICsgOCA+PiAyXTsKICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgIGlmICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoayA9IDEsIG8gPSB0ICYgMSwgKHQgfCAwKSA9PSAxKQogICAgICAgICAgICAgICAgICAgICAgICB0ID0gMDsKICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHQgPSB0ICYgLTI7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgazogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFrIHx8IChhID0gMCwgIShvMltlW24gPj4gMl1dKGksIEEsIGYpIHwgMCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IChvMltlW24gKyA0ID4+IDJdXShpLCBBLCBmKSB8IDApICE9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrID0gYSwgbiA9IG4gKyA4IHwgMCwgbCA9IGwgKyAyIHwgMCwgKHQgfCAwKSA9PSAobCB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgdCA9ICFrOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPSBvID8gMCA6IGssIHQgfCAhbyB8fCAoayA9IChvMltlW24gPj4gMl1dKGksIEEsIGYpIHwgMCkgIT0gMCksIGVbdSA+PiAyXSA9IDAsIGspCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlW3UgPj4gMl0gPSAwOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICBpZiAoYzAoZVtpICsgMTkyID4+IDJdLCAxMjIsIGYpICYmIGMwKGVbaSArIDE5MiA+PiAyXSwgMTIzLCBmKSkKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB1ID0gZVtpICsgMTkyID4+IDJdLCB0ID0gZVt1ID4+IDJdLCBuID0gZVt1ICsgOCA+PiAyXTsKICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgIGlmICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoayA9IDEsIG8gPSB0ICYgMSwgKHQgfCAwKSA9PSAxKQogICAgICAgICAgICAgICAgICAgICAgICB0ID0gMDsKICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHQgPSB0ICYgLTIsIGwgPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgIGs6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghayB8fCAoYSA9IDAsICEobzJbZVtuID4+IDJdXShpLCBBLCBmKSB8IDApKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSAobzJbZVtuICsgNCA+PiAyXV0oaSwgQSwgZikgfCAwKSAhPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoayA9IGEsIG4gPSBuICsgOCB8IDAsIGwgPSBsICsgMiB8IDAsICh0IHwgMCkgPT0gKGwgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHQgPSAhazsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlmIChrID0gbyA/IDAgOiBrLCB0IHwgIW8gfHwgKGsgPSAobzJbZVtuID4+IDJdXShpLCBBLCBmKSB8IDApICE9IDApLCBlW3UgPj4gMl0gPSAwLCBrKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZVt1ID4+IDJdID0gMDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoQSA9IEUyKDEsIDM2KSwgZVtyID4+IDJdID0gQSwgIUEpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgQmkoZVtpICsgNzIgPj4gMl0sIEEpLCBBID0gWihlW2kgKyAxMDggPj4gMl0sIGVbaSArIDEwNCA+PiAyXSksIGVbZVtpICsgMjAwID4+IDJdICsgMzYgPj4gMl0gPSBBLCBsID0gRTIoQSwgNDApLCBBID0gZVtpICsgMjAwID4+IDJdLCBlW0EgKyA0MCA+PiAyXSA9IGw7CiAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICBpZiAoIWwpCiAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgIGlmICghZVtBICsgMzYgPj4gMl0pCiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgICAgICAgICBmb3IgKG4gPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgaWYgKGYgPSBaKG4sIDQwKSwgQSA9IGYgKyBsIHwgMCwgZVtBICsgMjAgPj4gMl0gPSAwLCBlW0EgKyAyOCA+PiAyXSA9IDEwMCwgQSA9IEUyKDEwMCwgMjQpLCBrID0gZVtpICsgMjAwID4+IDJdLCBsID0gZVtrICsgNDAgPj4gMl0sIGVbKGYgKyBsIHwgMCkgKyAyNCA+PiAyXSA9IEEsICFBKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgaWYgKGcgPSAxLCBuID0gbiArIDEgfCAwLCAhKG4gPj4+IDAgPCBkW2sgKyAzNiA+PiAyXSkpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIHkxKGVbciA+PiAyXSksIGcgPSAwLCBlW3IgPj4gMl0gPSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIGcgfCAwOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4geTEoZVtpICsgNzIgPj4gMl0pLCBlW2kgKyA3MiA+PiAyXSA9IDAsIDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gc2soQSwgaSwgcikgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDA7CiAgICAgICAgICAgICAgdmFyIGYgPSAwLCBrID0gMCwgdCA9IDAsIG4gPSAwLCBsID0gMCwgYSA9IDAsIHUgPSAwLCBvID0gMCwgZyA9IDAsIGggPSAwLCBzID0gMCwgdyA9IDA7CiAgICAgICAgICAgICAgdSA9IGVbQSArIDcyID4+IDJdLCBvID0gWihlW0EgKyAxMDQgPj4gMl0sIGVbQSArIDEwOCA+PiAyXSk7CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKG8pCiAgICAgICAgICAgICAgICAgIGZvciAoaSA9IGVbdSArIDE2ID4+IDJdLCB3ID0gWihpLCAxMDgwKSwgZyA9IFooaSwgaSkgPDwgMiwgayA9IGVbQSArIDEyID4+IDJdLCBmID0gZVtBICsgMTU2ID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICAgIGlmIChoID0gZVtmICsgNTU4NCA+PiAyXSwgaSA9IEYyKGYsIGssIDU2NDQpLCBlW2kgKyA1NjA4ID4+IDJdID0gMCwgZVtpICsgNTU4OCA+PiAyXSA9IC0xLCBlW2kgKyA1MTY4ID4+IDJdID0gMCwgZVtpICsgNTYzNiA+PiAyXSA9IDAsIGVbaSArIDU2MTYgPj4gMl0gPSAwLCBlW2kgKyA1NjI0ID4+IDJdID0gMCwgZVtpICsgNTYyOCA+PiAyXSA9IDAsIGVbaSArIDU1ODQgPj4gMl0gPSBoLCBGW2kgKyA1NjQwIHwgMF0gPSBJW2kgKyA1NjQwIHwgMF0gJiAyNTIsIGVbayArIDU2MDggPj4gMl0pIHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChmID0gVTIoZyksIGVbaSArIDU2MDggPj4gMl0gPSBmLCAhZikKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgICAgICBGMihmLCBlW2sgKyA1NjA4ID4+IDJdLCBnKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSBaKGVbayArIDU2MjQgPj4gMl0sIDIwKSwgZiA9IFUyKHQpLCBlW2kgKyA1NjE2ID4+IDJdID0gZiwgbCA9IDAsICFmKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICBpZiAoRjIoZiwgZVtrICsgNTYxNiA+PiAyXSwgdCksIG4gPSBlW2sgKyA1NjIwID4+IDJdLCBuKQogICAgICAgICAgICAgICAgICAgICAgZm9yIChmID0gZVtrICsgNTYxNiA+PiAyXSwgdCA9IGVbaSArIDU2MTYgPj4gMl0sIGEgPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtmICsgMTIgPj4gMl0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9IFUyKGVbZiArIDE2ID4+IDJdKSwgZVt0ICsgMTIgPj4gMl0gPSBuLCAhbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgICAgICAgICAgIEYyKG4sIGVbZiArIDEyID4+IDJdLCBlW2YgKyAxNiA+PiAyXSksIG4gPSBlW2sgKyA1NjIwID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW2kgKyA1NjI0ID4+IDJdID0gZVtpICsgNTYyNCA+PiAyXSArIDEsIHQgPSB0ICsgMjAgfCAwLCBmID0gZiArIDIwIHwgMCwgYSA9IGEgKyAxIHwgMCwgIShhID4+PiAwIDwgbiA+Pj4gMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSBaKGVbayArIDU2MzYgPj4gMl0sIDIwKSwgZiA9IFUyKHQpLCBlW2kgKyA1NjI4ID4+IDJdID0gZiwgIWYpCiAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgIGlmIChGMihmLCBlW2sgKyA1NjI4ID4+IDJdLCB0KSwgbCA9IGVbayArIDU2MzYgPj4gMl0sIGVbaSArIDU2MzYgPj4gMl0gPSBsLCBsKQogICAgICAgICAgICAgICAgICAgICAgZm9yIChmID0gZVtrICsgNTYyOCA+PiAyXSwgdCA9IGVbaSArIDU2MjggPj4gMl0sIGEgPSAwOyBuID0gZVtmICsgOCA+PiAyXSwgbiAmJiAoZVt0ICsgOCA+PiAyXSA9IGVbaSArIDU2MTYgPj4gMl0gKyAobiAtIGVbayArIDU2MTYgPj4gMl0gfCAwKSksIG4gPSBlW2YgKyAxMiA+PiAyXSwgbiAmJiAoZVt0ICsgMTIgPj4gMl0gPSBlW2kgKyA1NjE2ID4+IDJdICsgKG4gLSBlW2sgKyA1NjE2ID4+IDJdIHwgMCkpLCB0ID0gdCArIDIwIHwgMCwgZiA9IGYgKyAyMCB8IDAsIGEgPSBhICsgMSB8IDAsIChsIHwgMCkgIT0gKGEgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgaWYgKEYyKGgsIGVbayArIDU1ODQgPj4gMl0sIHcpLCBmID0gaSArIDU2NDQgfCAwLCBzID0gcyArIDEgfCAwLCAobyB8IDApID09IChzIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGwgPSAxLCBpID0gcTYoMSksIGVbQSArIDIwOCA+PiAyXSA9IGksICFpKQogICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgIGlmIChSNihpLCB1LCBBICsgODAgfCAwLCBlW0EgKyAyMTIgPj4gMl0pKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgd2koZVtBICsgMjA4ID4+IDJdKSwgbCA9IDAsIGVbQSArIDIwOCA+PiAyXSA9IDAsIFEociwgMSwgNjE3OSwgMCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBsIHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBMNChBLCBpKSB7CiAgICAgICAgICAgICAgdmFyIHIgPSAwLCBmID0gMCwgayA9IDAsIHQgPSAwLCBuID0gMCwgbCA9IDAsIGEgPSAwOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgaWYgKGsgPSBlW0EgKyA2MCA+PiAyXSwgIWspIHsKICAgICAgICAgICAgICAgICAgICBpZiAoZVtpICsgMTYgPj4gMl0pCiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChhID0gVTIoWihrLCA1MikpLCAhYSkKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICBpZiAoayA9IDAsIGVbaSArIDE2ID4+IDJdKQogICAgICAgICAgICAgICAgICAgIGZvciAoZiA9IGVbaSArIDI0ID4+IDJdOyBrID0gWih0LCA1MiksIFIoZVsoayArIGYgfCAwKSArIDQ0ID4+IDJdKSwgZiA9IGVbaSArIDI0ID4+IDJdLCBlWyhrICsgZiB8IDApICsgNDQgPj4gMl0gPSAwLCB0ID0gdCArIDEgfCAwLCBrID0gZVtpICsgMTYgPj4gMl0sIHQgPj4+IDAgPCBrID4+PiAwOyApCiAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgIGlmIChlW0EgKyA2MCA+PiAyXSkgewogICAgICAgICAgICAgICAgICAgIGZvciAodCA9IGVbZVtBICsgNzYgPj4gMl0gKyAyNCA+PiAyXSwgayA9IDA7IGwgPSBaKGVbZVtBICsgNjQgPj4gMl0gKyAoayA8PCAyKSA+PiAyXSwgNTIpLCBmID0gbCArIHQgfCAwLCByID0gZVtmICsgNCA+PiAyXSwgbiA9IGEgKyBaKGssIDUyKSB8IDAsIGVbbiA+PiAyXSA9IGVbZiA+PiAyXSwgZVtuICsgNCA+PiAyXSA9IHIsIGVbbiArIDQ4ID4+IDJdID0gZVtmICsgNDggPj4gMl0sIHIgPSBlW2YgKyA0NCA+PiAyXSwgZVtuICsgNDAgPj4gMl0gPSBlW2YgKyA0MCA+PiAyXSwgZVtuICsgNDQgPj4gMl0gPSByLCByID0gZVtmICsgMzYgPj4gMl0sIGVbbiArIDMyID4+IDJdID0gZVtmICsgMzIgPj4gMl0sIGVbbiArIDM2ID4+IDJdID0gciwgciA9IGVbZiArIDI4ID4+IDJdLCBlW24gKyAyNCA+PiAyXSA9IGVbZiArIDI0ID4+IDJdLCBlW24gKyAyOCA+PiAyXSA9IHIsIHIgPSBlW2YgKyAyMCA+PiAyXSwgZVtuICsgMTYgPj4gMl0gPSBlW2YgKyAxNiA+PiAyXSwgZVtuICsgMjAgPj4gMl0gPSByLCByID0gZVtmICsgMTIgPj4gMl0sIGVbbiArIDggPj4gMl0gPSBlW2YgKyA4ID4+IDJdLCBlW24gKyAxMiA+PiAyXSA9IHIsIHQgPSBlW2VbQSArIDc2ID4+IDJdICsgMjQgPj4gMl0sIHIgPSBsICsgdCB8IDAsIGVbbiArIDM2ID4+IDJdID0gZVtyICsgMzYgPj4gMl0sIGVbbiArIDQ0ID4+IDJdID0gZVtyICsgNDQgPj4gMl0sIGVbciArIDQ0ID4+IDJdID0gMCwgayA9IGsgKyAxIHwgMCwgciA9IGVbQSArIDYwID4+IDJdLCBrID4+PiAwIDwgciA+Pj4gMDsgKQogICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgIGsgPSBlW2kgKyAxNiA+PiAyXTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoaykgewogICAgICAgICAgICAgICAgICAgIGZvciAoZiA9IGVbZVtBICsgNzYgPj4gMl0gKyAyNCA+PiAyXSwgdCA9IDA7IHIgPSBaKHQsIDUyKSwgUihlWyhyICsgZiB8IDApICsgNDQgPj4gMl0pLCBmID0gZVtlW0EgKyA3NiA+PiAyXSArIDI0ID4+IDJdLCBlWyhyICsgZiB8IDApICsgNDQgPj4gMl0gPSAwLCB0ID0gdCArIDEgfCAwLCB0ID4+PiAwIDwgZFtpICsgMTYgPj4gMl07ICkKICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICByID0gZVtBICsgNjAgPj4gMl07CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgcmV0dXJuIGVbaSArIDE2ID4+IDJdID0gciwgUihlW2kgKyAyNCA+PiAyXSksIGVbaSArIDI0ID4+IDJdID0gYSwgMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZvciAoayA9IGVbaSArIDI0ID4+IDJdLCB0ID0gZVtlW0EgKyA3NiA+PiAyXSArIDI0ID4+IDJdOyBsID0gWihmLCA1MiksIHIgPSBsICsgayB8IDAsIGVbciArIDM2ID4+IDJdID0gZVsodCArIGwgfCAwKSArIDM2ID4+IDJdLCBSKGVbciArIDQ0ID4+IDJdKSwgayA9IGVbaSArIDI0ID4+IDJdLCB0ID0gZVtlW0EgKyA3NiA+PiAyXSArIDI0ID4+IDJdLCByID0gbCArIHQgfCAwLCBlWyhsICsgayB8IDApICsgNDQgPj4gMl0gPSBlW3IgKyA0NCA+PiAyXSwgZVtyICsgNDQgPj4gMl0gPSAwLCBmID0gZiArIDEgfCAwLCBmID4+PiAwIDwgZFtpICsgMTYgPj4gMl07ICkKICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiB5MShlW0EgKyA3MiA+PiAyXSksIGVbQSArIDcyID4+IDJdID0gMCwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBPNChBKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwOwogICAgICAgICAgICAgIHZhciBpID0gMCwgciA9IDAsIGYgPSAwLCBrID0gMCwgdCA9IDAsIG4gPSAwLCBsID0gMCwgYSA9IDAsIHUgPSAwLCBvID0gMCwgZyA9IDAsIGggPSAwLCBzID0gMCwgdyA9IDAsIEIgPSAwOwogICAgICAgICAgICAgIG4gPSBYIC0gMTYgfCAwLCBYID0gbiwgdyA9IGVbZVtBICsgNzIgPj4gMl0gKyAxNiA+PiAyXSwgaSA9IEUyKDEsIDU2KSwgZVtuICsgMTIgPj4gMl0gPSBpOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGlmICghaSkKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIGlmICh1ID0gZVtlW0EgKyA3MiA+PiAyXSArIDE2ID4+IDJdLCBlW2kgKyAyNCA+PiAyXSA9IHUsIGVbaSA+PiAyXSA9IGVbQSArIDg0ID4+IDJdLCBlW2kgKyA0ID4+IDJdID0gZVtBICsgODggPj4gMl0sIGVbaSArIDggPj4gMl0gPSBlW0EgKyA5MiA+PiAyXSwgZVtpICsgMTIgPj4gMl0gPSBlW0EgKyA5NiA+PiAyXSwgZVtpICsgMTYgPj4gMl0gPSBlW0EgKyAxMDQgPj4gMl0sIGwgPSBlW0EgKyAxMDggPj4gMl0sIGVbaSArIDUyID4+IDJdID0gMCwgZVtpICsgMjAgPj4gMl0gPSBsLCBhID0gZVtBICsgMTIgPj4gMl0sIGVbaSArIDMyID4+IDJdID0gZVthID4+IDJdLCBlW2kgKyAzNiA+PiAyXSA9IGVbYSArIDQgPj4gMl0sIGVbaSArIDQwID4+IDJdID0gZVthICsgOCA+PiAyXSwgZVtpICsgNDQgPj4gMl0gPSBlW2EgKyAxNiA+PiAyXSwgQSA9IEUyKHUsIDEwODApLCBlW2kgKyA0OCA+PiAyXSA9IEEsIEEpIHsKICAgICAgICAgICAgICAgICAgaWYgKHcpCiAgICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICBBID0gWihvLCAxMDgwKSwgZiA9IEEgKyBlW2kgKyA0OCA+PiAyXSB8IDAsIHIgPSBBICsgZVthICsgNTU4NCA+PiAyXSB8IDAsIGVbZiArIDQgPj4gMl0gPSBlW3IgPj4gMl0sIEEgPSBlW3IgKyA0ID4+IDJdLCBlW2YgKyA4ID4+IDJdID0gQSwgZVtmICsgMTIgPj4gMl0gPSBlW3IgKyA4ID4+IDJdLCBlW2YgKyAxNiA+PiAyXSA9IGVbciArIDEyID4+IDJdLCBlW2YgKyAyMCA+PiAyXSA9IGVbciArIDE2ID4+IDJdLCBlW2YgKyAyNCA+PiAyXSA9IGVbciArIDIwID4+IDJdLCBBID4+PiAwIDw9IDMyICYmIChGMihmICsgOTQ4IHwgMCwgciArIDk0NCB8IDAsIEEpLCBGMihmICsgODE2IHwgMCwgciArIDgxMiB8IDAsIGVbciArIDQgPj4gMl0pKSwgQSA9IGVbciArIDI0ID4+IDJdLCBlW2YgKyAyOCA+PiAyXSA9IEEsIGVbZiArIDgwOCA+PiAyXSA9IGVbciArIDgwNCA+PiAyXSwgdCA9IDE7CiAgICAgICAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoQSB8IDApICE9IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQSA9IFooZVtyICsgNCA+PiAyXSwgMyksIEEgLSAzID4+PiAwID4gOTUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBBIC0gMiB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEIgPSB0ICYgMSwgZyA9IGYgKyA0MjAgfCAwLCBoID0gZiArIDMyIHwgMCwgcyA9IHIgKyAyOCB8IDAsIEEgPSAwLCAodCB8IDApICE9IDEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1ID0gdCAmIC0yLCB0ID0gMDsgbCA9IEEgPDwgMiwgayA9IChBIDw8IDMpICsgcyB8IDAsIGVbbCArIGggPj4gMl0gPSBlW2sgKyA0ID4+IDJdLCBlW2wgKyBnID4+IDJdID0gZVtrID4+IDJdLCBrID0gQSB8IDEsIGwgPSBrIDw8IDIsIGsgPSAoayA8PCAzKSArIHMgfCAwLCBlW2wgKyBoID4+IDJdID0gZVtrICsgNCA+PiAyXSwgZVtsICsgZyA+PiAyXSA9IGVbayA+PiAyXSwgQSA9IEEgKyAyIHwgMCwgdCA9IHQgKyAyIHwgMCwgKHUgfCAwKSAhPSAodCB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQikKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICBrID0gQSA8PCAyLCBBID0gKEEgPDwgMykgKyBzIHwgMCwgZVtrICsgaCA+PiAyXSA9IGVbQSArIDQgPj4gMl0sIGVbayArIGcgPj4gMl0gPSBlW0EgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtmICsgODEyID4+IDJdID0gZVtyICsgODA4ID4+IDJdLCBvID0gbyArIDEgfCAwLCAobyB8IDApID09ICh3IHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgayA9IGk7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBuICsgMTIgfCAwICYmIChBID0gZVtuICsgMTIgPj4gMl0sIGkgPSBlW0EgKyA0OCA+PiAyXSwgaSAmJiAoUihpKSwgQSA9IGVbbiArIDEyID4+IDJdKSwgUihBKSwgZVtuICsgMTIgPj4gMl0gPSAwKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIFggPSBuICsgMTYgfCAwLCBrIHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBLMShBKSB7CiAgICAgICAgICAgICAgdmFyIGkgPSAwLCByID0gMCwgZiA9IDAsIGsgPSAwLCB0ID0gMCwgbiA9IDAsIGwgPSAwLCBhID0gMCwgdSA9IDAsIG8gPSAwLCBnID0gMDsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIGlmICghZVtBICsgMTIgPj4gMl0pIHsKICAgICAgICAgICAgICAgICAgICBpZiAobyA9IDEsIGVbQSArIDQgPj4gMl0gPiAwIHwgZVtBICsgOCA+PiAyXSA+IDEpCiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKGsgPSAxLCBlW0EgKyA4ID4+IDJdID4gMCkKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICBpZiAoZVtBICsgNCA+PiAyXSA8IDIpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChpID0gZVtBID4+IDJdLCB0ID0gaSArIChrIDw8IDUpIHwgMCwgbiA9IGVbQSArIDE2ID4+IDJdLCBsID0gZVtBICsgMjAgPj4gMl0sIG4gPj4+IDAgPCBsID4+PiAwKQogICAgICAgICAgICAgICAgICBmb3IgKGYgPSBuOyByID0gKGYgPDwgNikgKyB0IHwgMCwgR1tyID4+IDJdID0gR1tyID4+IDJdICogVygxLjIzMDE3NDA2NDYzNjIzMDUpLCBHW3IgKyA0ID4+IDJdID0gR1tyICsgNCA+PiAyXSAqIFcoMS4yMzAxNzQwNjQ2MzYyMzA1KSwgR1tyICsgOCA+PiAyXSA9IEdbciArIDggPj4gMl0gKiBXKDEuMjMwMTc0MDY0NjM2MjMwNSksIEdbciArIDEyID4+IDJdID0gR1tyICsgMTIgPj4gMl0gKiBXKDEuMjMwMTc0MDY0NjM2MjMwNSksIEdbciArIDE2ID4+IDJdID0gR1tyICsgMTYgPj4gMl0gKiBXKDEuMjMwMTc0MDY0NjM2MjMwNSksIEdbciArIDIwID4+IDJdID0gR1tyICsgMjAgPj4gMl0gKiBXKDEuMjMwMTc0MDY0NjM2MjMwNSksIEdbciArIDI0ID4+IDJdID0gR1tyICsgMjQgPj4gMl0gKiBXKDEuMjMwMTc0MDY0NjM2MjMwNSksIEdbciArIDI4ID4+IDJdID0gR1tyICsgMjggPj4gMl0gKiBXKDEuMjMwMTc0MDY0NjM2MjMwNSksIGYgPSBmICsgMSB8IDAsIChsIHwgMCkgIT0gKGYgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgIGlmIChhID0gaSArIChvIDw8IDUpIHwgMCwgdSA9IGVbQSArIDI4ID4+IDJdLCByID0gZVtBICsgMjQgPj4gMl0sIHUgPj4+IDAgPiByID4+PiAwKQogICAgICAgICAgICAgICAgICBmb3IgKGYgPSByOyBpID0gKGYgPDwgNikgKyBhIHwgMCwgR1tpID4+IDJdID0gR1tpID4+IDJdICogVygxLjYyNTczMjQyMTg3NSksIEdbaSArIDQgPj4gMl0gPSBHW2kgKyA0ID4+IDJdICogVygxLjYyNTczMjQyMTg3NSksIEdbaSArIDggPj4gMl0gPSBHW2kgKyA4ID4+IDJdICogVygxLjYyNTczMjQyMTg3NSksIEdbaSArIDEyID4+IDJdID0gR1tpICsgMTIgPj4gMl0gKiBXKDEuNjI1NzMyNDIxODc1KSwgR1tpICsgMTYgPj4gMl0gPSBHW2kgKyAxNiA+PiAyXSAqIFcoMS42MjU3MzI0MjE4NzUpLCBHW2kgKyAyMCA+PiAyXSA9IEdbaSArIDIwID4+IDJdICogVygxLjYyNTczMjQyMTg3NSksIEdbaSArIDI0ID4+IDJdID0gR1tpICsgMjQgPj4gMl0gKiBXKDEuNjI1NzMyNDIxODc1KSwgR1tpICsgMjggPj4gMl0gPSBHW2kgKyAyOCA+PiAyXSAqIFcoMS42MjU3MzI0MjE4NzUpLCBmID0gZiArIDEgfCAwLCAodSB8IDApICE9IChmIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICBpID0gdCArIDMyIHwgMCwgZiA9IGVbQSArIDggPj4gMl0sIEEgPSBlW0EgKyA0ID4+IDJdLCBrID0gQSAtIGsgfCAwLCBrID0gKGYgfCAwKSA8IChrIHwgMCkgPyBmIDogaywgY2koYSwgaSwgbiwgbCwgaywgVygtMC40NDM1MDY4NjY2OTM0OTY3KSksIGcgPSBhICsgMzIgfCAwLCBmID0gZiAtIG8gfCAwLCBBID0gKEEgfCAwKSA8IChmIHwgMCkgPyBBIDogZiwgY2kodCwgZywgciwgdSwgQSwgVygtMC44ODI5MTEwODYwODI0NTg1KSksIGNpKGEsIGksIG4sIGwsIGssIFcoMC4wNTI5ODAxMTc0OTk4MjgzNCkpLCBjaSh0LCBnLCByLCB1LCBBLCBXKDEuNTg2MTM0MzE0NTM3MDQ4MykpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiB3ayhBLCBpLCByLCBmKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDAsIHIgPSByIHwgMCwgZiA9IGYgfCAwOwogICAgICAgICAgICAgIHZhciBrID0gMCwgdCA9IDAsIG4gPSAwLCBsID0gMCwgYSA9IDAsIHUgPSAwLCBvID0gMCwgZyA9IDAsIGggPSAwOwogICAgICAgICAgICAgIGwgPSBYIC0gMTYgfCAwLCBYID0gbCwgZVtBICsgOCA+PiAyXSA9PSAxNiA/IHQgPSBlW0EgKyAxNTYgPj4gMl0gKyBaKGVbQSArIDIwNCA+PiAyXSwgNTY0NCkgfCAwIDogdCA9IGVbQSArIDEyID4+IDJdOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGlmIChyID4+PiAwIDw9IDEpIHsKICAgICAgICAgICAgICAgICAgUShmLCAxLCA2NzAzLCAwKSwgQSA9IDA7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBoMihpLCBsICsgMTIgfCAwLCAyKTsKICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgaWYgKGVbbCArIDEyID4+IDJdKSB7CiAgICAgICAgICAgICAgICAgICAgUShmLCAyLCA2MTE5LCAwKTsKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChyID4+PiAwIDw9IDYpIHsKICAgICAgICAgICAgICAgICAgICBRKGYsIDEsIDY3MDMsIDApLCBBID0gMDsKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGgyKGkgKyAyIHwgMCwgbCArIDEyIHwgMCwgMiksIGsgPSBlW3QgKyA1NjE2ID4+IDJdLCBvID0gSVtsICsgMTIgfCAwXTsKICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgIGs6IHsKICAgICAgICAgICAgICAgICAgICAgIGY6IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPSBlW3QgKyA1NjIwID4+IDJdLCAhbikgewogICAgICAgICAgICAgICAgICAgICAgICAgIEEgPSBrOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChBID0gazsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtBICsgOCA+PiAyXSA9PSAobyB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQSA9IEEgKyAyMCB8IDAsIGEgPSBhICsgMSB8IDAsIChhIHwgMCkgPT0gKG4gfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBpZiAoKG4gfCAwKSAhPSAoYSB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoZVt0ICsgNTYyNCA+PiAyXSA9PSAobiB8IDApKSB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoQSA9IG4gKyAxMCB8IDAsIGVbdCArIDU2MjQgPj4gMl0gPSBBLCBBID0gbzAoaywgWihBLCAyMCkpLCBrID0gZVt0ICsgNTYxNiA+PiAyXSwgIUEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgUihrKSwgZVt0ICsgNTYyNCA+PiAyXSA9IDAsIGVbdCArIDU2MTYgPj4gMl0gPSAwLCBlW3QgKyA1NjIwID4+IDJdID0gMCwgUShmLCAxLCA2NzY4LCAwKSwgQSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBrOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoQSB8IDApID09IChrIHwgMCkgfHwgKGcgPSBlW3QgKyA1NjMyID4+IDJdLCAhZykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChoID0gZVt0ICsgNTYyOCA+PiAyXSwgYSA9IDA7IG4gPSBaKGEsIDIwKSArIGggfCAwLCB1ID0gZVtuICsgOCA+PiAyXSwgdSAmJiAoZVtuICsgOCA+PiAyXSA9IEEgKyAodSAtIGsgfCAwKSksIHUgPSBlW24gKyAxMiA+PiAyXSwgdSAmJiAoZVtuICsgMTIgPj4gMl0gPSBBICsgKHUgLSBrIHwgMCkpLCBhID0gYSArIDEgfCAwLCAoZyB8IDApICE9IChhIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBlW3QgKyA1NjE2ID4+IDJdID0gQSwgayA9IGVbdCArIDU2MjAgPj4gMl0sIGQyKEEgKyBaKGssIDIwKSB8IDAsIDAsIFooZVt0ICsgNTYyNCA+PiAyXSAtIGsgfCAwLCAyMCkpLCBuID0gZVt0ICsgNTYyMCA+PiAyXSwgayA9IGVbdCArIDU2MTYgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVbdCArIDU2MjAgPj4gMl0gPSBuICsgMSwgQSA9IFoobiwgMjApICsgayB8IDA7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKGsgPSBlW0EgKyAxMiA+PiAyXSwgayAmJiAoUihrKSwgZVtBICsgMTIgPj4gMl0gPSAwLCBlW0EgKyAxNiA+PiAyXSA9IDApLCBlW0EgKyA4ID4+IDJdID0gbywgayA9IGVbbCArIDEyID4+IDJdLCBlW0EgPj4gMl0gPSBrID4+PiAxMCAmIDMsIGVbQSArIDQgPj4gMl0gPSBrID4+PiA4ICYgMywgaDIoaSArIDQgfCAwLCBsICsgMTIgfCAwLCAyKSwgZVtsICsgMTIgPj4gMl0pIHsKICAgICAgICAgICAgICAgICAgICBRKGYsIDIsIDUyODgsIDApOwogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKHIgPSByIC0gNiB8IDAsIGsgPSBVMihyKSwgZVtBICsgMTIgPj4gMl0gPSBrLCAhaykgewogICAgICAgICAgICAgICAgICAgIFEoZiwgMSwgNjcwMywgMCksIEEgPSAwOwogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgRjIoaywgaSArIDYgfCAwLCByKSwgZVtBICsgMTYgPj4gMl0gPSByOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgQSA9IDE7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBYID0gbCArIDE2IHwgMCwgQSB8IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gQmsoQSwgaSwgcikgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDA7CiAgICAgICAgICAgICAgdmFyIGYgPSAwLCBrID0gMCwgdCA9IDAsIG4gPSAwOwogICAgICAgICAgICAgIHQgPSBYICsgLTY0IHwgMCwgWCA9IHQ7CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKHQxKGksIDQ4OTI0LCAwKSkgewogICAgICAgICAgICAgICAgICBlW3IgPj4gMl0gPSAwLCBmID0gMTsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgaWYgKElbQSArIDggfCAwXSAmIDI0KQogICAgICAgICAgICAgICAgICAgIGsgPSAxOwogICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIWkgfHwgKG4gPSBtMShpLCA0ODYyNCksICFuKSkKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgayA9IChJW24gKyA4IHwgMF0gJiAyNCkgIT0gMDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBrID0gdDEoQSwgaSwgayk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoaykgewogICAgICAgICAgICAgICAgICBpZiAoZiA9IDEsIEEgPSBlW3IgPj4gMl0sICFBKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIGVbciA+PiAyXSA9IGVbQSA+PiAyXTsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgaWYgKCFpKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIGlmIChuID0gbTEoaSwgNDg2NzIpLCAhbiB8fCAoaSA9IGVbciA+PiAyXSwgaSAmJiAoZVtyID4+IDJdID0gZVtpID4+IDJdKSwgayA9IGVbbiArIDggPj4gMl0sIGkgPSBlW0EgKyA4ID4+IDJdLCBrICYgKGkgXiAtMSkgJiA3IHwgaSAmIChrIF4gLTEpICYgOTYpIHx8IChmID0gMSwgdDEoZVtBICsgMTIgPj4gMl0sIGVbbiArIDEyID4+IDJdLCAwKSkpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgaWYgKHQxKGVbQSArIDEyID4+IDJdLCA0ODkxMiwgMCkpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoQSA9IGVbbiArIDEyID4+IDJdLCAhQSkKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgZiA9ICFtMShBLCA0ODcyMCk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoayA9IGVbQSArIDEyID4+IDJdLCAhaykKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICBpZiAoZiA9IDAsIGkgPSBtMShrLCA0ODY3MiksIGkpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIShGW0EgKyA4IHwgMF0gJiAxKSkKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgQSA9IGVbbiArIDEyID4+IDJdLCByID0gMDsKICAgICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgICBrOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmID0gMCwgIUEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBID0gbTEoQSwgNDg2NzIpLCAhQSB8IGVbQSArIDggPj4gMl0gJiAoZVtpICsgOCA+PiAyXSBeIC0xKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGYgPSAxLCB0MShlW2kgKyAxMiA+PiAyXSwgZVtBICsgMTIgPj4gMl0sIDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShGW2kgKyA4IHwgMF0gJiAxKSB8fCAoZiA9IGVbaSArIDEyID4+IDJdLCAhZikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID0gbTEoZiwgNDg2NzIpLCBpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBID0gZVtBICsgMTIgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSBtMShmLCA0ODc3MiksICFpKQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBPNihpLCBlW0EgKyAxMiA+PiAyXSk7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBmID0gcjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoaSA9IG0xKGssIDQ4NzcyKSwgaSkgewogICAgICAgICAgICAgICAgICAgIGlmICghKEZbQSArIDggfCAwXSAmIDEpKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICBmID0gTzYoaSwgZVtuICsgMTIgPj4gMl0pOwogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKGsgPSBtMShrLCA0ODU3NiksICFrIHx8IChBID0gZVtuICsgMTIgPj4gMl0sICFBKSB8fCAoQSA9IG0xKEEsIDQ4NTc2KSwgIUEpKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIGkgPSBlW3IgPj4gMl0sIGQyKHQgKyA4IHwgMCwgMCwgNTYpLCBGW3QgKyA1OSB8IDBdID0gKGkgfCAwKSAhPSAwLCBlW3QgKyAxNiA+PiAyXSA9IC0xLCBlW3QgKyAxMiA+PiAyXSA9IGssIGVbdCArIDQgPj4gMl0gPSBBLCBlW3QgKyA1MiA+PiAyXSA9IDEsIG8yW2VbZVtBID4+IDJdICsgMjggPj4gMl1dKEEsIHQgKyA0IHwgMCwgaSwgMSksIEEgPSBlW3QgKyAyOCA+PiAyXSwgKEEgfCAwKSA9PSAxICYmIChlW3IgPj4gMl0gPSBpID8gZVt0ICsgMjAgPj4gMl0gOiAwKSwgZiA9IChBIHwgMCkgPT0gMTsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGYgPSAwOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gWCA9IHQgLSAtNjQgfCAwLCBmIHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBjayhBLCBpLCByKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDAsIHIgPSByIHwgMDsKICAgICAgICAgICAgICB2YXIgZiA9IDAsIGsgPSAwLCB0ID0gMCwgbiA9IDAsIGwgPSAwLCBhID0gMCwgdSA9IDAsIG8gPSAwLCBnID0gMCwgaCA9IDAsIHMgPSAwLCB3ID0gMCwgQiA9IDAsIGMgPSAwOwogICAgICAgICAgICAgIG8gPSBYIC0gMTYgfCAwLCBYID0gbywgcyA9IGVbQSArIDcyID4+IDJdLCBnID0gZVtzICsgMTYgPj4gMl07CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKGcgPj4+IDAgPCAyKSB7CiAgICAgICAgICAgICAgICAgIGYgPSAxOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZm9yIChsID0gMTsgOyApIHsKICAgICAgICAgICAgICAgICAgdCA9IGVbKGVbQSArIDE1NiA+PiAyXSArIFooZVtBICsgMjA0ID4+IDJdLCA1NjQ0KSB8IDApICsgNTU4NCA+PiAyXSwgdSA9IGVbdCArIDI0ID4+IDJdOwogICAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgICAgaWYgKHcgPSBaKGwsIDEwODApLCBuID0gdyArIHQgfCAwLCBhID0gZVtuICsgMjQgPj4gMl0sICh1IHwgMCkgIT0gKGEgfCAwKSB8IGVbdCArIDgwNCA+PiAyXSAhPSBlW24gKyA4MDQgPj4gMl0pCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoayA9IDEsICh1IHwgMCkgIT0gMSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZiA9IGVbdCArIDQgPj4gMl0sIChmIHwgMCkgIT0gZVtuICsgNCA+PiAyXSkKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoayA9IFooZiwgMykgLSAyIHwgMCwgIWspCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGZvciAoQiA9IG4gKyAyOCB8IDAsIGggPSB0ICsgMjggfCAwLCBmID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPSBmIDw8IDMsIGVbaCArIGMgPj4gMl0gIT0gZVtCICsgYyA+PiAyXSkKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZiA9IGYgKyAxIHwgMCwgKGsgfCAwKSA9PSAoZiB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgaWYgKCF1KQogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgZm9yICh1ID0gbiArIDMyIHwgMCwgQiA9IHQgKyAzMiB8IDAsIGYgPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaCA9IGYgPDwgMywgZVtoICsgQiA+PiAyXSAhPSBlW3UgKyBoID4+IDJdKQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmID0gZiArIDEgfCAwLCAoayB8IDApID09IChmIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoayA9IDEsIGYgPSBlW0EgKyA1MiA+PiAyXSwgayA9IChhIHwgMCkgIT0gMSA/IFooZVtuICsgNCA+PiAyXSwgMykgLSAyIHwgMCA6IGssIG4gPSAoZyA+Pj4gMCA+IDI1NiA/IDYgOiA1KSArIChhID8gayA8PCAxIHwgMSA6IGsgKyAxIHwgMCkgfCAwLCBuID4+PiAwID4gZFtBICsgNTYgPj4gMl0pIHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChmID0gbzAoZiwgbiksICFmKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIFIoZVtBICsgNTIgPj4gMl0pLCBlW0EgKyA1MiA+PiAyXSA9IDAsIGVbQSArIDU2ID4+IDJdID0gMCwgZiA9IDAsIFEociwgMSwgNzg1OSwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBlW0EgKyA1NiA+PiAyXSA9IG4sIGVbQSArIDUyID4+IDJdID0gZiwgdCA9IGVbKGVbQSArIDE1NiA+PiAyXSArIFooZVtBICsgMjA0ID4+IDJdLCA1NjQ0KSB8IDApICsgNTU4NCA+PiAyXSwgYSA9IGVbKHcgKyB0IHwgMCkgKyAyNCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKGsgPSAxLCBrID0gKGEgfCAwKSAhPSAxID8gWihlWyh0ICsgdyB8IDApICsgNCA+PiAyXSwgMykgLSAyIHwgMCA6IGssIGsyKGYsIDY1MzczLCAyKSwgayA9IGEgPyBrIDw8IDEgfCAxIDogayArIDEgfCAwLCB0ID0gZFtlW0EgKyA3MiA+PiAyXSArIDE2ID4+IDJdIDwgMjU3LCBrMihmICsgMiB8IDAsIGsgKyAodCA/IDMgOiA0KSB8IDAsIDIpLCBrMihmICsgNCB8IDAsIGwsIHQgPyAxIDogMiksIGVbbyArIDEyID4+IDJdID0gaywgczYoZVtBICsgMTU2ID4+IDJdLCBlW0EgKyAyMDQgPj4gMl0sIGwsICh0ID8gNSA6IDYpICsgZiB8IDAsIG8gKyAxMiB8IDAsIHIpLCAoTDAoaSwgZVtBICsgNTIgPj4gMl0sIG4sIHIpIHwgMCkgIT0gKG4gfCAwKSkgewogICAgICAgICAgICAgICAgICAgICAgZiA9IDA7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBzID0gZVtBICsgNzIgPj4gMl07CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKGYgPSAxLCBsID0gbCArIDEgfCAwLCBnID0gZVtzICsgMTYgPj4gMl0sICEobCA+Pj4gMCA8IGcgPj4+IDApKQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gWCA9IG8gKyAxNiB8IDAsIGYgfCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIHdpKEEpIHsKICAgICAgICAgICAgICB2YXIgaSA9IDAsIHIgPSAwLCBmID0gMCwgayA9IDAsIHQgPSAwLCBuID0gMCwgbCA9IDAsIGEgPSAwLCB1ID0gMCwgbyA9IDAsIGcgPSAwOwogICAgICAgICAgICAgIGlmIChBKSB7CiAgICAgICAgICAgICAgICBpZiAoaSA9IGVbQSArIDIwID4+IDJdLCBpKSB7CiAgICAgICAgICAgICAgICAgIGlmIChuID0gZVtpID4+IDJdLCBuKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGYgPSBlW24gKyAyMCA+PiAyXSwgZVtuICsgMTYgPj4gMl0pIHsKICAgICAgICAgICAgICAgICAgICAgIGZvciAoYSA9IEZbQSArIDQwIHwgMF0gJiAxID8gMjUyIDogMjUzOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9IGVbZiArIDI4ID4+IDJdLCByKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSBlW2YgKyAzMiA+PiAyXSwgZyA9IChpID4+PiAwKSAvIDE1MiB8IDAsIHUgPSAwLCBpID4+PiAwID49IDE1MikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID0gZVtyICsgNDggPj4gMl0sIGkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IGVbciArIDUyID4+IDJdLCBsID0gKHQgPj4+IDApIC8gNDAgfCAwLCBrID0gMCwgdCA+Pj4gMCA+PSA0MCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IFFlKGVbaSArIDMyID4+IDJdKSwgZVtpICsgMzIgPj4gMl0gPSAwLCBRZShlW2kgKyAzNiA+PiAyXSksIGVbaSArIDM2ID4+IDJdID0gMCwgbzJbYSB8IDBdKGkpLCBpID0gaSArIDQwIHwgMCwgayA9IGsgKyAxIHwgMCwgKGwgfCAwKSAhPSAoayB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlW3IgKyA0OCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUihpKSwgZVtyICsgNDggPj4gMl0gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID0gZVtyICsgODQgPj4gMl0sIGkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IGVbciArIDg4ID4+IDJdLCBsID0gKHQgPj4+IDApIC8gNDAgfCAwLCBrID0gMCwgdCA+Pj4gMCA+PSA0MCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IFFlKGVbaSArIDMyID4+IDJdKSwgZVtpICsgMzIgPj4gMl0gPSAwLCBRZShlW2kgKyAzNiA+PiAyXSksIGVbaSArIDM2ID4+IDJdID0gMCwgbzJbYSB8IDBdKGkpLCBpID0gaSArIDQwIHwgMCwgayA9IGsgKyAxIHwgMCwgKGwgfCAwKSAhPSAoayB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlW3IgKyA4NCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUihpKSwgZVtyICsgODQgPj4gMl0gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID0gZVtyICsgMTIwID4+IDJdLCBpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSBlW3IgKyAxMjQgPj4gMl0sIGwgPSAodCA+Pj4gMCkgLyA0MCB8IDAsIGsgPSAwLCB0ID4+PiAwID49IDQwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgUWUoZVtpICsgMzIgPj4gMl0pLCBlW2kgKyAzMiA+PiAyXSA9IDAsIFFlKGVbaSArIDM2ID4+IDJdKSwgZVtpICsgMzYgPj4gMl0gPSAwLCBvMlthIHwgMF0oaSksIGkgPSBpICsgNDAgfCAwLCBrID0gayArIDEgfCAwLCAobCB8IDApICE9IChrIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVbciArIDEyMCA+PiAyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUihpKSwgZVtyICsgMTIwID4+IDJdID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9IHIgKyAxNTIgfCAwLCB1ID0gdSArIDEgfCAwLCAoZyB8IDApID09ICh1IHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gZVtmICsgMjggPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIFIociksIGVbZiArIDI4ID4+IDJdID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlW2YgKyA0MCA+PiAyXSB8fCAoaSA9IGVbZiArIDM2ID4+IDJdLCAhaSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICAgIFIoaSksIGVbZiArIDQ0ID4+IDJdID0gMCwgZVtmICsgNDggPj4gMl0gPSAwLCBlW2YgKyAzNiA+PiAyXSA9IDAsIGVbZiArIDQwID4+IDJdID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoUihlW2YgKyA1MiA+PiAyXSksIGYgPSBmICsgNzYgfCAwLCBvID0gbyArIDEgfCAwLCAhKG8gPj4+IDAgPCBkW24gKyAxNiA+PiAyXSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBmID0gZVtuICsgMjAgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIFIoZiksIGVbbiArIDIwID4+IDJdID0gMCwgUihlW2VbQSArIDIwID4+IDJdID4+IDJdKSwgaSA9IGVbQSArIDIwID4+IDJdLCBlW2kgPj4gMl0gPSAwOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIFIoaSksIGVbQSArIDIwID4+IDJdID0gMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIFIoZVtBICsgNjggPj4gMl0pLCBSKEEpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiB2ayhBLCBpLCByKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDAsIHIgPSByIHwgMDsKICAgICAgICAgICAgICB2YXIgZiA9IDAsIGsgPSAwLCB0ID0gMCwgbiA9IDAsIGwgPSAwLCBhID0gMCwgdSA9IDAsIG8gPSAwLCBnID0gMCwgaCA9IDAsIHMgPSAwLCB3ID0gMCwgQiA9IDAsIGMgPSAwLCB2ID0gMCwgQyA9IDAsIG0gPSAwOwogICAgICAgICAgICAgIG8gPSBYIC0gMTYgfCAwLCBYID0gbywgdCA9IGVbQSArIDcyID4+IDJdLCBsID0gZVt0ICsgMTYgPj4gMl07CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKGwgPj4+IDAgPCAyKSB7CiAgICAgICAgICAgICAgICAgIGYgPSAxOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZm9yICh1ID0gMTsgOyApIHsKICAgICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChnID0gZVtBICsgMTU2ID4+IDJdLCBoID0gZVtBICsgMjA0ID4+IDJdLCBrID0gZVsoZyArIFooaCwgNTY0NCkgfCAwKSArIDU1ODQgPj4gMl0sIHMgPSBaKHUsIDEwODApLCBmID0gayArIHMgfCAwLCBCID0gZVtmID4+IDJdLCAoQiB8IDApICE9IGVbayA+PiAyXSB8fCAodyA9IGVbayArIDQgPj4gMl0sICh3IHwgMCkgIT0gZVtmICsgNCA+PiAyXSB8IGVbayArIDggPj4gMl0gIT0gZVtmICsgOCA+PiAyXSB8IChlW2sgKyAxMiA+PiAyXSAhPSBlW2YgKyAxMiA+PiAyXSB8IGVbayArIDE2ID4+IDJdICE9IGVbZiArIDE2ID4+IDJdKSkgfHwgZVtrICsgMjAgPj4gMl0gIT0gZVtmICsgMjAgPj4gMl0pCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoIXcpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICBmb3IgKGMgPSBrICsgOTQ0IHwgMCwgdiA9IGsgKyA4MTIgfCAwLCBDID0gZiArIDk0NCB8IDAsIG0gPSBmICsgODEyIHwgMCwgbiA9IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhID0gbiA8PCAyLCBlW2EgKyB2ID4+IDJdICE9IGVbYSArIG0gPj4gMl0gfCBlW2EgKyBjID4+IDJdICE9IGVbYSArIEMgPj4gMl0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPSBuICsgMSB8IDAsICh3IHwgMCkgPT0gKG4gfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICh0ID0gNSwgbiA9IEIgJiAxLCB0ID0gbiA/IGVbZiArIDQgPj4gMl0gKyA1IHwgMCA6IHQsIGYgPSBlW0EgKyA1MiA+PiAyXSwgdCA9IChsID4+PiAwIDwgMjU3ID8gNiA6IDcpICsgdCB8IDAsIHQgPj4+IDAgPiBkW0EgKyA1NiA+PiAyXSkgewogICAgICAgICAgICAgICAgICAgICAgaWYgKGYgPSBvMChmLCB0KSwgIWYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgUihlW0EgKyA1MiA+PiAyXSksIGVbQSArIDUyID4+IDJdID0gMCwgZVtBICsgNTYgPj4gMl0gPSAwLCBmID0gMCwgUShyLCAxLCA3Nzk0LCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGVbQSArIDU2ID4+IDJdID0gdCwgZVtBICsgNTIgPj4gMl0gPSBmLCBsID0gZVtlW0EgKyA3MiA+PiAyXSArIDE2ID4+IDJdLCBnID0gZVtBICsgMTU2ID4+IDJdLCBoID0gZVtBICsgMjA0ID4+IDJdLCBrID0gZVsoZyArIFooaCwgNTY0NCkgfCAwKSArIDU1ODQgPj4gMl0sIG4gPSBlW3MgKyBrID4+IDJdICYgMTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKGEgPSAoWihoLCA1NjQ0KSArIGcgfCAwKSArIDU1ODQgfCAwLCBrID0gbiA/IGVbKGsgKyBzIHwgMCkgKyA0ID4+IDJdICsgNSB8IDAgOiA1LCBrMihmLCA2NTM2MywgMiksIG4gPSBsID4+PiAwIDwgMjU3ID8gMSA6IDIsIGsyKGYgKyAyIHwgMCwgKG4gKyBrIHwgMCkgKyAzIHwgMCwgMiksIGYgPSBmICsgNCB8IDAsIGsyKGYsIHUsIG4pLCBmID0gZiArIG4gfCAwLCBrMihmLCBlW2VbYSA+PiAyXSArIHMgPj4gMl0sIDEpLCBlW28gKyAxMiA+PiAyXSA9IGssIEk2KGVbQSArIDE1NiA+PiAyXSwgZVtBICsgMjA0ID4+IDJdLCBmICsgMSB8IDAsIG8gKyAxMiB8IDAsIHIpLCAoTDAoaSwgZVtBICsgNTIgPj4gMl0sIHQsIHIpIHwgMCkgIT0gKHQgfCAwKSkgewogICAgICAgICAgICAgICAgICAgICAgZiA9IDA7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB0ID0gZVtBICsgNzIgPj4gMl07CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKGYgPSAxLCBsID0gZVt0ICsgMTYgPj4gMl0sIHUgPSB1ICsgMSB8IDAsICEobCA+Pj4gMCA+IHUgPj4+IDApKQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gWCA9IG8gKyAxNiB8IDAsIGYgfCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIF80KEEsIGksIHIsIGYsIGssIHQsIG4pIHsKICAgICAgICAgICAgICB2YXIgbCA9IDAsIGEgPSAwLCB1ID0gMCwgbyA9IDAsIGcgPSAwLCBoID0gMDsKICAgICAgICAgICAgICBpZiAoZyA9IHQgPDwgNSwgZikKICAgICAgICAgICAgICAgIGZvciAobCA9IEEgKyBnIHwgMCwgaCA9IG4gLSAyIHwgMCwgbyA9IGYsIGEgPSBpOyA7ICkgewogICAgICAgICAgICAgICAgICB0ID0gMDsKICAgICAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgICAgIGk6CiAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGggfCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjoKICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gZVtsICsgNCA+PiAyXSwgZVthID4+IDJdID0gZVtsID4+IDJdLCBlW2EgKyA0ID4+IDJdID0gdCwgdCA9IGVbbCArIDI4ID4+IDJdLCBlW2EgKyAyNCA+PiAyXSA9IGVbbCArIDI0ID4+IDJdLCBlW2EgKyAyOCA+PiAyXSA9IHQsIHQgPSBlW2wgKyAyMCA+PiAyXSwgZVthICsgMTYgPj4gMl0gPSBlW2wgKyAxNiA+PiAyXSwgZVthICsgMjAgPj4gMl0gPSB0LCB0ID0gZVtsICsgMTIgPj4gMl0sIGVbYSArIDggPj4gMl0gPSBlW2wgKyA4ID4+IDJdLCBlW2EgKyAxMiA+PiAyXSA9IHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA1OgogICAgICAgICAgICAgICAgICAgICAgICAgIGVbYSA+PiAyXSA9IGVbbCA+PiAyXSwgdCA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDoKICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gdCA8PCAyLCBlW3UgKyBhID4+IDJdID0gZVtsICsgdSA+PiAyXSwgdCA9IHQgKyAxIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOgogICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSB0IDw8IDIsIGVbdSArIGEgPj4gMl0gPSBlW2wgKyB1ID4+IDJdLCB0ID0gdCArIDEgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IHQgPDwgMiwgZVt1ICsgYSA+PiAyXSA9IGVbbCArIHUgPj4gMl0sIHQgPSB0ICsgMSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gdCA8PCAyLCBlW3UgKyBhID4+IDJdID0gZVtsICsgdSA+PiAyXSwgdCA9IHQgKyAxIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSB0IDw8IDIsIGVbdSArIGEgPj4gMl0gPSBlW2wgKyB1ID4+IDJdLCB0ID0gdCArIDEgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgdCA9IHQgPDwgMiwgZVt0ICsgYSA+PiAyXSA9IGVbdCArIGwgPj4gMl07CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKGwgPSBsIC0gLTY0IHwgMCwgYSA9IChrIDw8IDIpICsgYSB8IDAsIG8gPSBvIC0gMSB8IDAsICFvKQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChyKQogICAgICAgICAgICAgICAgZm9yIChsID0gKGcgXiAzMikgKyBBIHwgMCwgYSA9IChaKGYsIGspIDw8IDIpICsgaSB8IDAsIEEgPSBuIC0gMiB8IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgIHQgPSAwOwogICAgICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICAgICAgaToKICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoQSB8IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA1OgogICAgICAgICAgICAgICAgICAgICAgICAgIGVbYSA+PiAyXSA9IGVbbCA+PiAyXSwgdCA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDoKICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gdCA8PCAyLCBlW2kgKyBhID4+IDJdID0gZVtpICsgbCA+PiAyXSwgdCA9IHQgKyAxIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOgogICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSB0IDw8IDIsIGVbaSArIGEgPj4gMl0gPSBlW2kgKyBsID4+IDJdLCB0ID0gdCArIDEgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IHQgPDwgMiwgZVtpICsgYSA+PiAyXSA9IGVbaSArIGwgPj4gMl0sIHQgPSB0ICsgMSB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gdCA8PCAyLCBlW2kgKyBhID4+IDJdID0gZVtpICsgbCA+PiAyXSwgdCA9IHQgKyAxIHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSB0IDw8IDIsIGVbaSArIGEgPj4gMl0gPSBlW2kgKyBsID4+IDJdLCB0ID0gdCArIDEgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSB0IDw8IDIsIGVbaSArIGEgPj4gMl0gPSBlW2kgKyBsID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjoKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGkgPSBlW2wgKyA0ID4+IDJdLCBlW2EgPj4gMl0gPSBlW2wgPj4gMl0sIGVbYSArIDQgPj4gMl0gPSBpLCBpID0gZVtsICsgMjggPj4gMl0sIGVbYSArIDI0ID4+IDJdID0gZVtsICsgMjQgPj4gMl0sIGVbYSArIDI4ID4+IDJdID0gaSwgaSA9IGVbbCArIDIwID4+IDJdLCBlW2EgKyAxNiA+PiAyXSA9IGVbbCArIDE2ID4+IDJdLCBlW2EgKyAyMCA+PiAyXSA9IGksIGkgPSBlW2wgKyAxMiA+PiAyXSwgZVthICsgOCA+PiAyXSA9IGVbbCArIDggPj4gMl0sIGVbYSArIDEyID4+IDJdID0gaTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAobCA9IGwgLSAtNjQgfCAwLCBhID0gKGsgPDwgMikgKyBhIHwgMCwgciA9IHIgLSAxIHwgMCwgIXIpCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gYjQoKSB7CiAgICAgICAgICAgICAgdmFyIEEgPSAwOwogICAgICAgICAgICAgIHM0KDI5ODQ4LCAyOTg3MiwgMjk5MDQsIDAsIDI5Nzc1LCAyMywgMjk5MzUsIDAsIDI5OTM1LCAwLCAxNTYwLCAyOTgwMSwgMjQpLCBoNCgyOTg0OCwgMSwgMjk5NDAsIDI5Nzc1LCAyNSwgMjYpLCBBID0gXzIoOCksIGVbQSArIDQgPj4gMl0gPSAwLCBlW0EgPj4gMl0gPSAyNywgWTAoMjk4NDgsIDE0MjMsIDMsIDI5OTQ0LCAyOTk4MywgMjgsIEEgfCAwLCAwLCAwLCAwKSwgQSA9IF8yKDgpLCBlW0EgKyA0ID4+IDJdID0gMCwgZVtBID4+IDJdID0gMjksIFkwKDI5ODQ4LCAxNDQwLCAyLCAzMDAyOCwgMzAwMzYsIDMwLCBBIHwgMCwgMCwgMCwgMCksIEEgPSBfMig4KSwgZVtBICsgNCA+PiAyXSA9IDAsIGVbQSA+PiAyXSA9IDMxLCBZMCgyOTg0OCwgMTYyMSwgMiwgMzAwNDgsIDMwMDU2LCAzMiwgQSB8IDAsIDAsIDAsIDApLCBBID0gXzIoOCksIGVbQSArIDQgPj4gMl0gPSAwLCBlW0EgPj4gMl0gPSAzMywgWTAoMjk4NDgsIDE3ODIsIDMsIDMwMDYwLCAzMDA3MiwgMzQsIEEgfCAwLCAwLCAwLCAwKSwgQSA9IF8yKDgpLCBlW0EgKyA0ID4+IDJdID0gMCwgZVtBID4+IDJdID0gMzUsIFkwKDI5ODQ4LCAyMTQyLCAyLCAzMDA0OCwgMzAwNTYsIDMyLCBBIHwgMCwgMCwgMCwgMCksIEEgPSBfMig4KSwgZVtBICsgNCA+PiAyXSA9IDAsIGVbQSA+PiAyXSA9IDM2LCBZMCgyOTg0OCwgMTcyNywgNCwgMzAwODAsIDMwMDk2LCAzNywgQSB8IDAsIDAsIDAsIDApLCBBID0gXzIoOCksIGVbQSArIDQgPj4gMl0gPSAwLCBlW0EgPj4gMl0gPSAzOCwgWTAoMjk4NDgsIDE3MTQsIDIsIDMwMTA0LCAzMDAzNiwgMzksIEEgfCAwLCAwLCAwLCAwKSwgQSA9IF8yKDgpLCBlW0EgKyA0ID4+IDJdID0gMCwgZVtBID4+IDJdID0gNDAsIFkwKDI5ODQ4LCAxMzE4LCAyLCAzMDExMiwgMzAxMjAsIDQxLCBBIHwgMCwgMCwgMCwgMCksIEEgPSBfMig4KSwgZVtBICsgNCA+PiAyXSA9IDAsIGVbQSA+PiAyXSA9IDQyLCBZMCgyOTg0OCwgMjA4OSwgMiwgMzAxMjQsIDI5ODA0LCA0MywgQSB8IDAsIDAsIDAsIDApLCBBID0gXzIoOCksIGVbQSArIDQgPj4gMl0gPSAwLCBlW0EgPj4gMl0gPSA0NCwgWTAoMjk4NDgsIDE0NzcsIDIsIDMwMTMyLCAyOTgwNCwgNDUsIEEgfCAwLCAwLCAwLCAwKSwgQSA9IF8yKDgpLCBlW0EgKyA0ID4+IDJdID0gMCwgZVtBID4+IDJdID0gNDYsIFkwKDI5ODQ4LCAxMjI5LCAyLCAzMDE0MCwgMzAwMzYsIDQ3LCBBIHwgMCwgMCwgMCwgMCksIEEgPSBfMig4KSwgZVtBICsgNCA+PiAyXSA9IDAsIGVbQSA+PiAyXSA9IDQ4LCBZMCgyOTg0OCwgMjA0MiwgMiwgMzAxNDgsIDMwMDM2LCA0OSwgQSB8IDAsIDAsIDAsIDApLCBBID0gXzIoOCksIGVbQSArIDQgPj4gMl0gPSAwLCBlW0EgPj4gMl0gPSA1MCwgWTAoMjk4NDgsIDEyMDAsIDIsIDMwMTQwLCAzMDAzNiwgNDcsIEEgfCAwLCAwLCAwLCAwKSwgQSA9IF8yKDgpLCBlW0EgKyA0ID4+IDJdID0gMCwgZVtBID4+IDJdID0gNTEsIFkwKDI5ODQ4LCAxMzU4LCAyLCAzMDE0OCwgMzAwMzYsIDQ5LCBBIHwgMCwgMCwgMCwgMCksIEEgPSBfMig4KSwgZVtBICsgNCA+PiAyXSA9IDAsIGVbQSA+PiAyXSA9IDUyLCBZMCgyOTg0OCwgMTI4NywgMiwgMzAxNTYsIDI5ODA0LCA1MywgQSB8IDAsIDAsIDAsIDApLCBBID0gXzIoOCksIGVbQSArIDQgPj4gMl0gPSAwLCBlW0EgPj4gMl0gPSA1NCwgWTAoMjk4NDgsIDIxNDksIDIsIDMwMTY0LCAzMDEyMCwgNTUsIEEgfCAwLCAwLCAwLCAwKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiAkNChBLCBpKSB7CiAgICAgICAgICAgICAgdmFyIHIgPSAwLCBmID0gMCwgayA9IDAsIHQgPSAwLCBuID0gMCwgbCA9IDAsIGEgPSAwLCB1ID0gMCwgbyA9IDAsIGcgPSAwLCBoID0gMCwgcyA9IDAsIHcgPSAwLCBCID0gMDsKICAgICAgICAgICAgICByID0gZVtBICsgOCA+PiAyXSwgdCA9IHIgKyBlW0EgKyA0ID4+IDJdIHwgMDsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAoIWVbQSArIDEyID4+IDJdKSB7CiAgICAgICAgICAgICAgICAgIGlmICgodCB8IDApIDwgMikKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICBuID0gKHIgPDwgMikgKyBpIHwgMCwgZiA9IGVbbiA+PiAyXSwgayA9IGVbaSA+PiAyXSAtIChmICsgMSA+PiAxKSB8IDAsIGwgPSBlW0EgPj4gMl07CiAgICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgICBpZiAodCA+Pj4gMCA8IDQpIHsKICAgICAgICAgICAgICAgICAgICAgIHIgPSBmOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZm9yIChvID0gKHQgLSA0ID4+PiAxIHwgMCkgKyAxIHwgMCwgQSA9IDE7IHIgPSBBIDw8IDIsIGggPSBlW3IgKyBpID4+IDJdLCByID0gZVtyICsgbiA+PiAyXSwgZyA9IGwgKyAoYSA8PCAyKSB8IDAsIGVbZyA+PiAyXSA9IGssIHUgPSBrLCBrID0gaCAtICgociArIGYgfCAwKSArIDIgPj4gMikgfCAwLCBlW2cgKyA0ID4+IDJdID0gKHUgKyBrID4+IDEpICsgZiwgYSA9IGEgKyAyIHwgMCwgdSA9IChBIHwgMCkgIT0gKG8gfCAwKSwgZiA9IHIsIEEgPSBBICsgMSB8IDAsICEhdTsgKQogICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVbbCArIChhIDw8IDIpID4+IDJdID0gaywgdCAmIDEgPyAoZiA9IHQgLSAxIHwgMCwgQSA9IGVbKGYgPDwgMSkgKyBpID4+IDJdIC0gKHIgKyAxID4+IDEpIHwgMCwgZVtsICsgKGYgPDwgMikgPj4gMl0gPSBBLCBrID0gQSArIGsgPj4gMSwgZiA9IC04KSA6IGYgPSAtNCwgQSA9IHQgPDwgMiwgZVtmICsgKEEgKyBsIHwgMCkgPj4gMl0gPSByICsgaywgRjIoaSwgbCwgQSk7CiAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGk6CiAgICAgICAgICAgICAgICAgIHN3aXRjaCAodCAtIDEgfCAwKSB7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAgICAgICAgZVtpID4+IDJdID0gZVtpID4+IDJdIC8gMjsKICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgICBBID0gZVtBID4+IDJdLCByID0gKHIgPDwgMikgKyBpIHwgMCwgZiA9IGVbaSA+PiAyXSAtIChlW3IgPj4gMl0gKyAxID4+IDEpIHwgMCwgZVtBICsgNCA+PiAyXSA9IGYsIGVbQSA+PiAyXSA9IGYgKyBlW3IgPj4gMl0sIHIgPSBlW0EgKyA0ID4+IDJdLCBlW2kgPj4gMl0gPSBlW0EgPj4gMl0sIGVbaSArIDQgPj4gMl0gPSByOwogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoKHQgfCAwKSA8IDMpCiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICBuID0gZVtBID4+IDJdLCBvID0gKHIgPDwgMikgKyBpIHwgMCwgZiA9IGVbbyArIDQgPj4gMl0sIEEgPSBlW28gPj4gMl0sIGsgPSBlW2kgPj4gMl0gLSAoKGYgKyBBIHwgMCkgKyAyID4+IDIpIHwgMCwgZVtuID4+IDJdID0gayArIEEsIGEgPSAxLCBoID0gdCAtIDIgfCAwLCBnID0gdCAmIDEsIEEgPSAhZzsKICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgaWYgKGggLSBBID4+PiAwIDwgMikgewogICAgICAgICAgICAgICAgICAgIHIgPSBmOwogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZm9yICh3ID0gKCh0IC0gQSB8IDApIC0gNCA+Pj4gMSB8IDApICsgMSB8IDAsIEEgPSAxOyBCID0gZVsoQSA8PCAyKSArIGkgPj4gMl0sIHUgPSBBICsgMSB8IDAsIHIgPSBlWyh1IDw8IDIpICsgbyA+PiAyXSwgcyA9IChhIDw8IDIpICsgbiB8IDAsIGVbcyA+PiAyXSA9IGssIGwgPSBrLCBrID0gQiAtICgociArIGYgfCAwKSArIDIgPj4gMikgfCAwLCBlW3MgKyA0ID4+IDJdID0gKGwgKyBrID4+IDEpICsgZiwgYSA9IGEgKyAyIHwgMCwgbCA9IChBIHwgMCkgIT0gKHcgfCAwKSwgZiA9IHIsIEEgPSB1LCAhIWw7ICkKICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlWyhhIDw8IDIpICsgbiA+PiAyXSA9IGs7CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIGlmICghZykgewogICAgICAgICAgICAgICAgICAgIEEgPSBlWygodCA8PCAxKSArIGkgfCAwKSAtIDQgPj4gMl0gLSAociArIDEgPj4gMSkgfCAwLCBlWyhoIDw8IDIpICsgbiA+PiAyXSA9IChrICsgQSA+PiAxKSArIHI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBBID0gciArIGsgfCAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgciA9IHQgPDwgMiwgZVsociArIG4gfCAwKSAtIDQgPj4gMl0gPSBBLCBGMihpLCBuLCByKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gb3IoQSwgaSwgcikgewogICAgICAgICAgICAgIHZhciBmID0gMCwgayA9IDAsIHQgPSAwLCBuID0gMDsKICAgICAgICAgICAgICBrID0gMzEyMzI7CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgazogewogICAgICAgICAgICAgICAgICAgICAgZjogewogICAgICAgICAgICAgICAgICAgICAgICBBOgogICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodCA9IGVbQSArIDc2ID4+IDJdICsgWihyLCA1NjQ0KSB8IDAsIGVbdCArIDQgPj4gMl0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBrID0gMzEyOTI7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBrID0gMzEyNDQ7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBrID0gMzEyNTY7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBrID0gMzEyNjg7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBrID0gMzEyODA7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHIgPSAxOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGlmICghKEZbQSArIDEwMCB8IDBdICYgMSkpCiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICBpID0gKHQgKyA0MjQgfCAwKSArIFooaSwgMTQ4KSB8IDAsIHQgPSBJW0EgKyA5MiB8IDBdLCBmID0gSVtrICsgNCB8IDBdLCBuID0gZiA8PCAyNCA+PiAyNDsKICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgcjoKICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGYgLSA2NyB8IDApIHsKICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICAgICAgICAgciA9IGVbaSArIDkyID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgY2FzZSAxNToKICAgICAgICAgICAgICAgICAgICAgICAgciA9IGVbaSArIDg4ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMzoKICAgICAgICAgICAgICAgICAgICAgICAgciA9IGVbaSArIDk2ID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgY2FzZSA5OgogICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIHIgPSBlW2kgKyA4NCA+PiAyXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGYgPSAwOwogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICBpZiAoKHQgfCAwKSA9PSAobiB8IDApKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIGYgPSBJW2sgKyA1IHwgMF0sIG4gPSBmIDw8IDI0ID4+IDI0OwogICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgazoKICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZiAtIDY3IHwgMCkgewogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IFooZVtpICsgODQgPj4gMl0sIHIpOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IFooZVtpICsgOTYgPj4gMl0sIHIpOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IFooZVtpICsgODggPj4gMl0sIHIpOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgciA9IFooZVtpICsgOTIgPj4gMl0sIHIpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChmID0gMSwgKHQgfCAwKSA9PSAobiB8IDApKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIGYgPSBJW2sgKyA2IHwgMF0sIG4gPSBmIDw8IDI0ID4+IDI0OwogICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgazoKICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZiAtIDY3IHwgMCkgewogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IFooZVtpICsgODQgPj4gMl0sIHIpOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IFooZVtpICsgOTYgPj4gMl0sIHIpOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IFooZVtpICsgODggPj4gMl0sIHIpOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgciA9IFooZVtpICsgOTIgPj4gMl0sIHIpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChmID0gMiwgKHQgfCAwKSA9PSAobiB8IDApKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIGsgPSBJW2sgKyA3IHwgMF0sIGYgPSBrIDw8IDI0ID4+IDI0OwogICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgazoKICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoayAtIDY3IHwgMCkgewogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IFooZVtpICsgODQgPj4gMl0sIHIpOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IFooZVtpICsgOTYgPj4gMl0sIHIpOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IFooZVtpICsgODggPj4gMl0sIHIpOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgciA9IFooZVtpICsgOTIgPj4gMl0sIHIpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmICgoZiB8IDApICE9ICh0IHwgMCkpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgZiA9IDM7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlW0EgKyA4NCA+PiAyXSA9IGY7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiByOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIHE0KEEsIGksIHIpIHsKICAgICAgICAgICAgICB2YXIgZiA9IDAsIGsgPSAwLCB0ID0gMCwgbiA9IDAsIGwgPSAwLCBhID0gMCwgdSA9IDAsIG8gPSAwOwogICAgICAgICAgICAgIGlmIChmID0gWCAtIDI1NiB8IDAsIFggPSBmLCBBKSB7CiAgICAgICAgICAgICAgICBpZiAoXzAoMzYyMCwgMTcsIDEsIHIpLCBlW2YgKyAyNDAgPj4gMl0gPSBlW0EgPj4gMl0sIEkwKHIsIDQyMjksIGYgKyAyNDAgfCAwKSwgZVtmICsgMjI0ID4+IDJdID0gZVtBICsgNCA+PiAyXSwgSTAociwgNDI0MiwgZiArIDIyNCB8IDApLCBlW2YgKyAyMDggPj4gMl0gPSBlW0EgKyA4ID4+IDJdLCBJMChyLCAxNjg4MSwgZiArIDIwOCB8IDApLCBlW2YgKyAxOTIgPj4gMl0gPSBlW0EgKyAxNiA+PiAyXSwgSTAociwgNDIwMCwgZiArIDE5MiB8IDApLCAoaSB8IDApID4gMCkKICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGsgPSBlW0EgKyA1NTg0ID4+IDJdLCBlW2YgKyAxNzYgPj4gMl0gPSBsLCBJMChyLCAzNjU4LCBmICsgMTc2IHwgMCksIGsgPSBrICsgWihsLCAxMDgwKSB8IDAsIGVbZiArIDE2MCA+PiAyXSA9IGVbayA+PiAyXSwgSTAociwgNDIyOCwgZiArIDE2MCB8IDApLCBlW2YgKyAxNDQgPj4gMl0gPSBlW2sgKyA0ID4+IDJdLCBJMChyLCAxNjk5NSwgZiArIDE0NCB8IDApLCBlW2YgKyAxMjggPj4gMl0gPSBlW2sgKyA4ID4+IDJdLCBJMChyLCAxNjc2NSwgZiArIDEyOCB8IDApLCBlW2YgKyAxMTIgPj4gMl0gPSBlW2sgKyAxMiA+PiAyXSwgSTAociwgMTY3ODEsIGYgKyAxMTIgfCAwKSwgZVtmICsgOTYgPj4gMl0gPSBlW2sgKyAxNiA+PiAyXSwgSTAociwgNDIxMSwgZiArIDk2IHwgMCksIGVbZiArIDgwID4+IDJdID0gZVtrICsgMjAgPj4gMl0sIEkwKHIsIDE3MDc3LCBmICsgODAgfCAwKSwgXzAoMzE4OCwgMjMsIDEsIHIpLCBlW2sgKyA0ID4+IDJdKQogICAgICAgICAgICAgICAgICAgICAgZm9yIChhID0gayArIDk0NCB8IDAsIHUgPSBrICsgODEyIHwgMCwgdCA9IDA7IG4gPSB0IDw8IDIsIG8gPSBlW3UgKyBuID4+IDJdLCBlW2YgKyA2OCA+PiAyXSA9IGVbYSArIG4gPj4gMl0sIGVbZiArIDY0ID4+IDJdID0gbywgSTAociwgMzUwNywgZiAtIC02NCB8IDApLCB0ID0gdCArIDEgfCAwLCB0ID4+PiAwIDwgZFtrICsgNCA+PiAyXTsgKQogICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgVjYociksIGVbZiArIDQ4ID4+IDJdID0gZVtrICsgMjQgPj4gMl0sIEkwKHIsIDE2Nzk3LCBmICsgNDggfCAwKSwgZVtmICsgMzIgPj4gMl0gPSBlW2sgKyA4MDQgPj4gMl0sIEkwKHIsIDE2ODY0LCBmICsgMzIgfCAwKSwgYSA9IDEsIF8wKDMyMTIsIDIwLCAxLCByKTsKICAgICAgICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtrICsgMjQgPj4gMl0gIT0gMSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IGVbayArIDQgPj4gMl0sICh0IHwgMCkgPD0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICBhID0gWih0LCAzKSAtIDIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgZm9yICh1ID0gayArIDI4IHwgMCwgdCA9IDA7IG4gPSB1ICsgKHQgPDwgMykgfCAwLCBxMiA9IGVbbiA+PiAyXSwgZVtmICsgMTYgPj4gMl0gPSBlW24gKyA0ID4+IDJdLCBlW2YgKyAyMCA+PiAyXSA9IHEyLCBJMChyLCAzNTA3LCBmICsgMTYgfCAwKSwgdCA9IHQgKyAxIHwgMCwgKGEgfCAwKSAhPSAodCB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKFY2KHIpLCBlW2YgPj4gMl0gPSBlW2sgKyA4MDggPj4gMl0sIEkwKHIsIDE2ODQ3LCBmKSwgXzAoMzUyMSwgNSwgMSwgciksIGwgPSBsICsgMSB8IDAsIChsIHwgMCkgPT0gKGkgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBfMCgzNTIyLCA0LCAxLCByKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgWCA9IGYgKyAyNTYgfCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIGU2KEEsIGksIHIsIGYpIHsKICAgICAgICAgICAgICB2YXIgayA9IDAsIHQgPSAwLCBuID0gMCwgbCA9IDAsIGEgPSAwLCB1ID0gMCwgbyA9IDAsIGcgPSAwLCBoID0gMCwgcyA9IDAsIHcgPSAwOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgIGs6IHsKICAgICAgICAgICAgICAgICAgICAgIGY6IHsKICAgICAgICAgICAgICAgICAgICAgICAgQTogewogICAgICAgICAgICAgICAgICAgICAgICAgIGw6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQ6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrID0gaSwgaykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrID0gTzAoZikgLSBPMChrKSB8IDAsIGsgPj4+IDAgPD0gMzEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZiB8IDApID09IDEgfCBmID4+PiAwID4gMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpID0gKEEgPj4+IDApIC8gKHIgPj4+IDApIHwgMCwgbmUgPSBBIC0gWihpLCByKSB8IDAsIHRlID0gMCwgcTIgPSAwLCBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZiB8fCAodCA9IGYgLSAxIHwgMCwgdCAmIGYpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmUgPSBBLCB0ZSA9IGsgJiB0LCBBID0gayA+Pj4gamUoZikgfCAwLCBxMiA9IDAsIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSByIC0gMSB8IDAsICEodCAmIHIpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gPSAoTzAocikgKyAzMyB8IDApIC0gTzAoaykgfCAwLCBuID0gMCAtIG8gfCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbyA9IGsgKyAxIHwgMCwgbiA9IDYzIC0gayB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmUgPSAwLCBBID0gKGsgPj4+IDApIC8gKGYgPj4+IDApIHwgMCwgdGUgPSBrIC0gWihBLCBmKSB8IDAsIHEyID0gMCwgQTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoayA9IE8wKGYpIC0gTzAoaykgfCAwLCBrID4+PiAwIDwgMzEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlmIChuZSA9IEEgJiB0LCB0ZSA9IDAsIChyIHwgMCkgPT0gMSkKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByID0gamUociksIGYgPSByICYgMzEsIChyICYgNjMpID4+PiAwID49IDMyID8gKGsgPSAwLCBBID0gaSA+Pj4gZiB8IDApIDogKGsgPSBpID4+PiBmIHwgMCwgQSA9ICgoMSA8PCBmKSAtIDEgJiBpKSA8PCAzMiAtIGYgfCBBID4+PiBmKSwgcTIgPSBrLCBBOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBvID0gayArIDEgfCAwLCBuID0gNjMgLSBrIHwgMDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAodCA9IEEsIGsgPSBvICYgNjMsIGwgPSBrICYgMzEsIChrICYgNjMpID4+PiAwID49IDMyID8gKGsgPSAwLCB0ID0gaSA+Pj4gbCB8IDApIDogKGsgPSBpID4+PiBsIHwgMCwgdCA9ICgoMSA8PCBsKSAtIDEgJiBpKSA8PCAzMiAtIGwgfCB0ID4+PiBsKSwgbCA9IG4gJiA2MywgbiA9IEEsIGEgPSBsICYgMzEsIChsICYgNjMpID4+PiAwID49IDMyID8gKHUgPSBBIDw8IGEsIEEgPSAwKSA6ICh1ID0gKDEgPDwgYSkgLSAxICYgbiA+Pj4gMzIgLSBhIHwgaSA8PCBhLCBBID0gbiA8PCBhKSwgaSA9IHUsIG8pCiAgICAgICAgICAgICAgICAgICAgZm9yIChuID0gZiAtIDEgfCAwLCBnID0gciAtIDEgfCAwLCBuID0gKGcgfCAwKSAhPSAtMSA/IG4gKyAxIHwgMCA6IG4sIGwgPSBnOyBrID0gayA8PCAxIHwgdCA+Pj4gMzEsIHQgPSB0IDw8IDEgfCBpID4+PiAzMSwgZyA9IGssIGEgPSBuIC0gKGsgKyAodCA+Pj4gMCA+IGwgPj4+IDApIHwgMCkgfCAwLCBoID0gYSA+PiAzMSwgdSA9IGgsIGsgPSB0LCBhID0gciAmIHUsIHQgPSBrIC0gYSB8IDAsIGsgPSBnIC0gKChmICYgdSkgKyAoayA+Pj4gMCA8IGEgPj4+IDApIHwgMCkgfCAwLCB1ID0gaSA8PCAxIHwgQSA+Pj4gMzEsIEEgPSBzIHwgQSA8PCAxLCBpID0gdSB8IHcsIGcgPSBoICYgMSwgcyA9IGcsIG8gPSBvIC0gMSB8IDAsICEhbzsgKQogICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICByZXR1cm4gbmUgPSB0LCB0ZSA9IGssIHUgPSBpIDw8IDEgfCBBID4+PiAzMSwgQSA9IGcgfCBBIDw8IDEsIHEyID0gdSB8IHcsIEE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBuZSA9IEEsIHRlID0gaSwgQSA9IDAsIGkgPSAwOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gcTIgPSBpLCBBOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIElrKEEsIGksIHIpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIGkgPSBpIHwgMCwgciA9IHIgfCAwOwogICAgICAgICAgICAgIHZhciBmID0gMCwgayA9IDAsIHQgPSAwLCBuID0gMDsKICAgICAgICAgICAgICBmID0gWCArIC02NCB8IDAsIFggPSBmLCBlW2YgKyAzMiA+PiAyXSA9IDAsIGVbZiArIDM2ID4+IDJdID0gMCwgayA9IGYgKyA0MCB8IDAsIGVbayA+PiAyXSA9IDAsIGVbayArIDQgPj4gMl0gPSAwLCBlW2YgKyA0OCA+PiAyXSA9IDAsIGVbZiArIDUyID4+IDJdID0gMCwgZVtmICsgNTYgPj4gMl0gPSAwLCBlW2YgKyA2MCA+PiAyXSA9IDAsIGVbZiArIDE2ID4+IDJdID0gMCwgZVtmICsgMjAgPj4gMl0gPSAwLCBlW2YgKyAyNCA+PiAyXSA9IDAsIGVbZiArIDI4ID4+IDJdID0gMDsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAoZVtBICsgMjQgPj4gMl0gIT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgIHQgPSAxOTIsIG4gPSAyOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZVtmICsgNDAgPj4gMl0gPSAxOTIsIGsgPSBmICsgNTIgfCAwLCB0ID0gMTkzLCBuID0gMzsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZVtmICsgMjggPj4gMl0gPSB0LCBlW2YgKyAxNiA+PiAyXSA9IDE5NCwgZVtBICsgMTE2ID4+IDJdICYmIChlW2sgPj4gMl0gPSAxOTUsIG4gPSBuICsgMSB8IDApLCBrMihmICsgMTIgfCAwLCAxNzg1NzM3ODMyLCA0KSwgayA9IG8yW2VbZiArIDE2ID4+IDJdXShBLCBmICsgMTYgfCA4KSB8IDAsIGVbZiArIDIwID4+IDJdID0gazsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIGlmICghayB8fCAoayA9IGVbZiArIDI0ID4+IDJdLCB0ID0gbzJbZVtmICsgMjggPj4gMl1dKEEsIGYgKyAzNiB8IDApIHwgMCwgZVtmICsgMzIgPj4gMl0gPSB0LCAhdCkpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgayA9IGVbZiArIDM2ID4+IDJdICsgKGsgKyA4IHwgMCkgfCAwOwogICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgaWYgKChuIHwgMCkgPT0gMikKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSBvMltlW2YgKyA0MCA+PiAyXV0oQSwgZiArIDQ4IHwgMCkgfCAwLCBlW2YgKyA0NCA+PiAyXSA9IHQsICF0KQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICBpZiAoayA9IGsgKyBlW2YgKyA0OCA+PiAyXSB8IDAsIChuIHwgMCkgPT0gMykKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgaWYgKEEgPSBvMltlW2YgKyA1MiA+PiAyXV0oQSwgZiArIDYwIHwgMCkgfCAwLCBlW2YgKyA1NiA+PiAyXSA9IEEsICFBKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICBrID0gayArIGVbZiArIDYwID4+IDJdIHwgMDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBBID0gZiArIDggfCAwLCBrMihBLCBrLCA0KTsKICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgIGs6IHsKICAgICAgICAgICAgICAgICAgICAgIGlmICgoTDAoaSwgQSwgOCwgcikgfCAwKSAhPSA4KQogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgZm9yIChBID0gZiArIDE2IHwgMCwgayA9IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoTDAoaSwgZVtBICsgNCA+PiAyXSwgZVtBICsgOCA+PiAyXSwgcikgfCAwKSAhPSBlW0EgKyA4ID4+IDJdKQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBID0gQSArIDEyIHwgMCwgdCA9IDEsIGsgPSBrICsgMSB8IDAsIChuIHwgMCkgPT0gKGsgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHQgPSAwLCBRKHIsIDEsIDM4MDYsIDApOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGZvciAoQSA9IGYgKyAxNiB8IDAsIGsgPSAwOyBpID0gZVtBICsgNCA+PiAyXSwgaSAmJiBSKGkpLCBBID0gQSArIDEyIHwgMCwgayA9IGsgKyAxIHwgMCwgKG4gfCAwKSAhPSAoayB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZm9yIChrID0gMCwgUShyLCAxLCAxNzk1NCwgMCksIEEgPSBmICsgMTYgfCAwOyBpID0gZVtBICsgNCA+PiAyXSwgaSAmJiBSKGkpLCBBID0gQSArIDEyIHwgMCwgayA9IGsgKyAxIHwgMCwgKG4gfCAwKSAhPSAoayB8IDApOyApCiAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgIHQgPSAwOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gWCA9IGYgLSAtNjQgfCAwLCB0IHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBaayhBLCBpLCByLCBmKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDAsIHIgPSByIHwgMCwgZiA9IGYgfCAwOwogICAgICAgICAgICAgIHZhciBrID0gMCwgdCA9IDAsIG4gPSAwLCBsID0gMCwgYSA9IDAsIHUgPSAwLCBvID0gMDsKICAgICAgICAgICAgICBsID0gWCAtIDE2IHwgMCwgWCA9IGw7CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKCEoSVtBICsgMTAwIHwgMF0gJiAyKSkgewogICAgICAgICAgICAgICAgICBRKGYsIDEsIDIxOTM1LCAwKSwgQSA9IDA7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlW0EgKyAxMDQgPj4gMl0gPSAwOwogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgazogewogICAgICAgICAgICAgICAgICAgICAgaWYgKHIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPj4+IDAgPD0gNykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgUShmLCAxLCA1ODA1LCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBsICsgMTIgfCAwLCBoMihpLCBuLCA0KSwgayA9IGVbbCArIDEyID4+IDJdLCBoMihpICsgNCB8IDAsIG4sIDQpLCB0ID0gOCwgbiA9IGVbbCArIDEyID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgIGY6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGsgfCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID4+PiAwIDwgMTYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gNTg0NTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoMihpICsgOCB8IDAsIGwgKyA4IHwgMCwgNCksIGVbbCArIDggPj4gMl0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gMTg3MzQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaDIoaSArIDEyIHwgMCwgbCArIDEyIHwgMCwgNCksIGsgPSBlW2wgKyAxMiA+PiAyXSwgaykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gNTY3MDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRKGYsIDEsIDU2NzAsIDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IDE2OwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoayA+Pj4gMCA8IHQgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFEoZiwgMSwgMTk0MzMsIDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPj4+IDAgPCBrID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBRKGYsIDEsIDE5MzYxLCAwKSwgQSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBpICsgdCB8IDAsIG8gPSBrIC0gdCB8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGw6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQ6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKG4gfCAwKSA8PSAxNjY4MjQ2NjQxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKG4gfCAwKSA9PSAxNjUxNTMyNjQzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChuIHwgMCkgPT0gMTY2NzUyMzk0MikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobiB8IDApICE9IDE2NjgxMTI3NTIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gMzE3NjA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKG4gfCAwKSA9PSAxODg1NTY0MDE4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IDMxNzI4LCAobiB8IDApID09IDE3Njg0NDkxMzgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobiB8IDApICE9IDE2NjgyNDY2NDIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSAzMTczNjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSAzMTc0NDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSAzMTc1MjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSAzMTc2ODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobzJbZVt0ICsgNCA+PiAyXV0oQSwgdSwgbywgZikgfCAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtBICsgMTA0ID4+IDJdID0gZVtBICsgMTA0ID4+IDJdIHwgMjE0NzQ4MzY0NzsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEgPSAobiB8IDApID09IDE3Njg0NDkxMzggPyAxIDogYSwgaSA9IGkgKyBrIHwgMCwgciA9IHIgLSBrIHwgMCwgIXIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSkKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgUShmLCAxLCAxOTI2MSwgMCksIEEgPSAwOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgRltBICsgMTMyIHwgMF0gPSAxLCBlW0EgKyAxMDAgPj4gMl0gPSBlW0EgKyAxMDAgPj4gMl0gfCA0LCBBID0gMTsKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIFEoZiwgMSwgaywgMCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBRKGYsIDEsIDM4NDksIDApLCBBID0gMDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIFggPSBsICsgMTYgfCAwLCBBIHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBpNihBLCBpLCByLCBmKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDAsIHIgPSByIHwgMCwgZiA9IGYgfCAwOwogICAgICAgICAgICAgIHZhciBrID0gMCwgdCA9IDAsIG4gPSAwLCBsID0gMCwgYSA9IDAsIHUgPSAwLCBvID0gMCwgZyA9IDA7CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKCFyKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICBpZiAoayA9IGVbQSArIDE2MCA+PiAyXSwgIWsgfHwgKG4gPSBlW0EgKyA3MiA+PiAyXSwgIW4gfCAhZVtuICsgMTYgPj4gMl0gfCAoayB8IDApICE9IGVbZVtuICsgMjQgPj4gMl0gKyA0MCA+PiAyXSkgfHwgKGwgPSBlW3IgKyAxNiA+PiAyXSwgIWwpIHx8ICh0ID0gZVtyICsgMjQgPj4gMl0sIGVbdCArIDQwID4+IDJdIHwgZVt0ICsgNDQgPj4gMl0pKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIGlmIChuID0gMCwgbCA+Pj4gMCA+PSA4KQogICAgICAgICAgICAgICAgICAgIGZvciAodSA9IGwgJiAtODsgZVsodCArIFoobiwgNTIpIHwgMCkgKyA0MCA+PiAyXSA9IGssIGVbKHQgKyBaKG4gfCAxLCA1MikgfCAwKSArIDQwID4+IDJdID0gaywgZVsodCArIFoobiB8IDIsIDUyKSB8IDApICsgNDAgPj4gMl0gPSBrLCBlWyh0ICsgWihuIHwgMywgNTIpIHwgMCkgKyA0MCA+PiAyXSA9IGssIGVbKHQgKyBaKG4gfCA0LCA1MikgfCAwKSArIDQwID4+IDJdID0gaywgZVsodCArIFoobiB8IDUsIDUyKSB8IDApICsgNDAgPj4gMl0gPSBrLCBlWyh0ICsgWihuIHwgNiwgNTIpIHwgMCkgKyA0MCA+PiAyXSA9IGssIGVbKHQgKyBaKG4gfCA3LCA1MikgfCAwKSArIDQwID4+IDJdID0gaywgbiA9IG4gKyA4IHwgMCwgbyA9IG8gKyA4IHwgMCwgKHUgfCAwKSAhPSAobyB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgIGlmIChsID0gbCAmIDcsIGwpCiAgICAgICAgICAgICAgICAgICAgZm9yICg7IGVbKHQgKyBaKG4sIDUyKSB8IDApICsgNDAgPj4gMl0gPSBrLCBuID0gbiArIDEgfCAwLCBnID0gZyArIDEgfCAwLCAobCB8IDApICE9IChnIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgaWYgKGFyKHIsIGYpKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHQgPSBlW0EgKyA3NiA+PiAyXSwgIXQgJiYgKHQgPSBFMigxLCAzNiksIGVbQSArIDc2ID4+IDJdID0gdCwgIXQpIHx8IChCaShyLCB0KSwgIWMwKGVbQSArIDE5MiA+PiAyXSwgMTI0LCBmKSkpCiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICBsID0gZVtBICsgMTkyID4+IDJdLCBrID0gZVtsID4+IDJdLCB0ID0gZVtsICsgOCA+PiAyXTsKICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgaWYgKGspIHsKICAgICAgICAgICAgICAgICAgICBpZiAoYSA9IDEsIHUgPSBrICYgMSwgKGsgfCAwKSA9PSAxKQogICAgICAgICAgICAgICAgICAgICAgayA9IDA7CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICBmb3IgKG8gPSBrICYgLTIsIG4gPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICBrID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYSB8fCAoayA9IDAsICEobzJbZVt0ID4+IDJdXShBLCBpLCBmKSB8IDApKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgayA9IChvMltlW3QgKyA0ID4+IDJdXShBLCBpLCBmKSB8IDApICE9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEgPSBrLCB0ID0gdCArIDggfCAwLCBuID0gbiArIDIgfCAwLCAobyB8IDApID09IChuIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBrID0gIWE7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChhID0gdSA/IDAgOiBhLCBrIHwgIXUgfHwgKGEgPSAobzJbZVt0ID4+IDJdXShBLCBpLCBmKSB8IDApICE9IDApLCBlW2wgPj4gMl0gPSAwLCBhKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4geTEoZVtBICsgNzIgPj4gMl0pLCBlW0EgKyA3MiA+PiAyXSA9IDAsIDA7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZVtsID4+IDJdID0gMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGEgPSBMNChBLCByKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIGEgfCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIHI2KEEsIGksIHIpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIGkgPSBpIHwgMCwgciA9IHIgfCAwOwogICAgICAgICAgICAgIHZhciBmID0gMCwgayA9IDAsIHQgPSAwLCBuID0gMCwgbCA9IDAsIGEgPSAwLCB1ID0gMCwgbyA9IDAsIGcgPSAwLCBoID0gMDsKICAgICAgICAgICAgICBuID0gWCAtIDE2IHwgMCwgWCA9IG4sIGsgPSAxOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGlmICghaSB8fCAoZiA9IGVbaSA+PiAyXSwgIWYpKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICBvID0gaTsKICAgICAgICAgICAgICAgICAgICAgIGs6IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFXaShmLCAzMTY2LCA0KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZ2UoZiwgMjM4MykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbQSArIDYwID4+IDJdID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnZShmLCAyNDE1KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZVtBICsgNjAgPj4gMl0gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFXaShmLCAzMTgzLCA0KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZ2UoZiwgMjM5MSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbQSArIDE2ID4+IDJdID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnZShmLCAyNDIyKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZVtBICsgMTYgPj4gMl0gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSAyMDM2MiwgV2koZiwgMzE3MSwgMTEpIHx8IChsID0gd3IoZiArIDExIHwgMCksIGkgPSAxODE4MywgbCA+Pj4gMCA+IDcpKQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID0gWihlW0EgKyAxMDggPj4gMl0sIGVbQSArIDEwNCA+PiAyXSksICFpIHwgIWVbQSArIDY4ID4+IDJdKQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhID0gZVtBICsgMTU2ID4+IDJdLCBrID0gMCwgdCA9IDAsIGcgPSAhKGkgJiAxKSwgKGkgfCAwKSAhPSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChoID0gaSAmIC0yLCBrID0gMSwgdSA9IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gaywgayA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSBlWyhaKHQsIDU2NDQpICsgYSB8IDApICsgNTU4NCA+PiAyXSwgZiA9IDA7IGVbKGkgKyBaKGYsIDEwODApIHwgMCkgKyA4MDQgPj4gMl0gPSBsLCBmID0gZiArIDEgfCAwLCBrID0gZVtBICsgNjggPj4gMl0sIGYgPj4+IDAgPCBrID4+PiAwOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IGVbKFoodCB8IDEsIDU2NDQpICsgYSB8IDApICsgNTU4NCA+PiAyXSwgZiA9IDA7IGVbKGkgKyBaKGYsIDEwODApIHwgMCkgKyA4MDQgPj4gMl0gPSBsLCBmID0gZiArIDEgfCAwLCBrID0gZVtBICsgNjggPj4gMl0sIGYgPj4+IDAgPCBrID4+PiAwOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSB0ICsgMiB8IDAsIHUgPSB1ICsgMiB8IDAsIChoIHwgMCkgPT0gKHUgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSAhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZyB8IGspCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gZVsoWih0LCA1NjQ0KSArIGEgfCAwKSArIDU1ODQgPj4gMl0sIGYgPSAwOyBlWyhpICsgWihmLCAxMDgwKSB8IDApICsgODA0ID4+IDJdID0gbCwgZiA9IGYgKyAxIHwgMCwgZiA+Pj4gMCA8IGRbQSArIDY4ID4+IDJdOyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSBvICsgNCB8IDAsIGYgPSBlW28gKyA0ID4+IDJdLCAhZikKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGsgPSAxOwogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaSA9IDIwMzMxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZVtuID4+IDJdID0gZiwgUShyLCAxLCBpLCBuKSwgayA9IDA7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBYID0gbiArIDE2IHwgMCwgayB8IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gZjYoQSwgaSwgciwgZiwgaykgewogICAgICAgICAgICAgIHZhciB0ID0gMCwgbiA9IDAsIGwgPSAwLCBhID0gMDsKICAgICAgICAgICAgICBsID0gWCAtIDE2IHwgMCwgWCA9IGwsIGVbQSArIDggPj4gMl0gPT0gMTYgPyBBID0gZVtBICsgMTU2ID4+IDJdICsgWihlW0EgKyAyMDQgPj4gMl0sIDU2NDQpIHwgMCA6IEEgPSBlW0EgKyAxMiA+PiAyXSwgdCA9IGVbZiA+PiAyXTsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAoIXQpIHsKICAgICAgICAgICAgICAgICAgZiA9IDAsIFEoaywgMSwgNDU1NywgMCk7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBBID0gZVtBICsgNTU4NCA+PiAyXSwgZVtmID4+IDJdID0gdCAtIDEsIGgyKHIsIGwgKyAxMiB8IDAsIDEpLCBuID0gWihpLCAxMDgwKSArIEEgfCAwLCBBID0gZVtsICsgMTIgPj4gMl0sIGVbbiArIDgwNCA+PiAyXSA9IEEgPj4+IDUsIGkgPSBBICYgMzEsIGVbbiArIDI0ID4+IDJdID0gaSwgQSA9IHIgKyAxIHwgMDsKICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgIGs6IHsKICAgICAgICAgICAgICAgICAgICAgIGY6CiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoaSB8IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gZVtmID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICB0ID0gZVtmID4+IDJdID4+PiAxIHwgMDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKHQgPj4+IDAgPj0gOTggJiYgKGVbbCArIDQgPj4gMl0gPSA5NywgZVtsICsgOCA+PiAyXSA9IDk3LCBlW2wgPj4gMl0gPSB0LCBRKGssIDIsIDI4NDA2LCBsKSwgaSA9IGVbbiArIDI0ID4+IDJdKSwgaSkgewogICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSB0LCBpKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgdCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoIXQpCiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IG4gKyAyOCB8IDAsIHIgPSAwOyBoMihBLCBsICsgMTIgfCAwLCAxKSwgciA+Pj4gMCA8PSA5NiAmJiAoayA9IGVbbCArIDEyID4+IDJdLCBhID0gaSArIChyIDw8IDMpIHwgMCwgZVthICsgNCA+PiAyXSA9IDAsIGVbYSA+PiAyXSA9IGsgPj4+IDMpLCBBID0gQSArIDEgfCAwLCByID0gciArIDEgfCAwLCAodCB8IDApICE9IChyIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGZvciAoayA9IG4gKyAyOCB8IDAsIHIgPSAwOyBoMihBLCBsICsgMTIgfCAwLCAyKSwgciA+Pj4gMCA8PSA5NiAmJiAodCA9IGsgKyAociA8PCAzKSB8IDAsIGEgPSBlW2wgKyAxMiA+PiAyXSwgZVt0ICsgNCA+PiAyXSA9IGEgJiAyMDQ3LCBlW3QgPj4gMl0gPSBhID4+PiAxMSksIEEgPSBBICsgMiB8IDAsIHIgPSByICsgMSB8IDAsIChyIHwgMCkgIT0gKGkgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgdCA9IGkgPDwgMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChlW2YgPj4gMl0gPSBlW2YgPj4gMl0gLSB0LCBmID0gMSwgZVtuICsgMjQgPj4gMl0gIT0gMSkKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIGZvciAodCA9IG4gKyAyOCB8IDAsIHIgPSBlW24gKyAzMiA+PiAyXSwgayA9IGVbbiArIDI4ID4+IDJdLCBBID0gMTsgaSA9IHQgKyAoQSA8PCAzKSB8IDAsIGVbaSArIDQgPj4gMl0gPSByLCBlW2kgKyAxMiA+PiAyXSA9IHIsIG4gPSBrIC0gKChBID4+PiAwKSAvIDMgfCAwKSB8IDAsIGVbaSArIDggPj4gMl0gPSAobiB8IDApID4gMCA/IG4gOiAwLCBuID0gaSwgaSA9IGsgLSAoKEEgLSAxID4+PiAwKSAvIDMgfCAwKSB8IDAsIGVbbiA+PiAyXSA9IChpIHwgMCkgPiAwID8gaSA6IDAsIEEgPSBBICsgMiB8IDAsIChBIHwgMCkgIT0gOTc7ICkKICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gWCA9IGwgKyAxNiB8IDAsIGY7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gQTYoKSB7CiAgICAgICAgICAgICAgdmFyIEEgPSAwOwogICAgICAgICAgICAgIHM0KDMwMTcyLCAzMDE5NiwgMzAyMjgsIDAsIDI5Nzc1LCA2MiwgMjk5MzUsIDAsIDI5OTM1LCAwLCAxNDk3LCAyOTgwMSwgNjMpLCBoNCgzMDE3MiwgMSwgMzAyNjAsIDI5Nzc1LCA2NCwgNjUpLCBBID0gXzIoOCksIGVbQSArIDQgPj4gMl0gPSAwLCBlW0EgPj4gMl0gPSA2NiwgWTAoMzAxNzIsIDE0NDAsIDMsIDMwMjY0LCAzMDI3NiwgNjcsIEEgfCAwLCAwLCAwLCAwKSwgQSA9IF8yKDgpLCBlW0EgKyA0ID4+IDJdID0gMCwgZVtBID4+IDJdID0gNjgsIFkwKDMwMTcyLCAxNDIzLCAyLCAzMDI4NCwgMzAwMzYsIDY5LCBBIHwgMCwgMCwgMCwgMCksIEEgPSBfMig4KSwgZVtBICsgNCA+PiAyXSA9IDAsIGVbQSA+PiAyXSA9IDcwLCBZMCgzMDE3MiwgMjEzNSwgMiwgMzAyOTIsIDMwMDU2LCA3MSwgQSB8IDAsIDAsIDAsIDApLCBBID0gXzIoOCksIGVbQSArIDQgPj4gMl0gPSAwLCBlW0EgPj4gMl0gPSA3MiwgWTAoMzAxNzIsIDEzMDAsIDMsIDMwMzAwLCAzMDMxMiwgNzMsIEEgfCAwLCAwLCAwLCAwKSwgQSA9IF8yKDgpLCBlW0EgKyA0ID4+IDJdID0gMCwgZVtBID4+IDJdID0gNzQsIFkwKDMwMTcyLCAxMDI0LCA0LCAzMDMyMCwgMzAzMzYsIDc1LCBBIHwgMCwgMCwgMCwgMCksIEEgPSBfMig4KSwgZVtBICsgNCA+PiAyXSA9IDAsIGVbQSA+PiAyXSA9IDc2LCBZMCgzMDE3MiwgMTQ1NywgMywgMzAzMDAsIDMwMzEyLCA3MywgQSB8IDAsIDAsIDAsIDApLCBBID0gXzIoOCksIGVbQSArIDQgPj4gMl0gPSAwLCBlW0EgPj4gMl0gPSA3NywgWTAoMzAxNzIsIDIwNjgsIDQsIDMwMzUyLCAzMDM2OCwgNzgsIEEgfCAwLCAwLCAwLCAwKSwgQSA9IF8yKDgpLCBlW0EgKyA0ID4+IDJdID0gMCwgZVtBID4+IDJdID0gNzksIFkwKDMwMTcyLCAxMjE0LCAzLCAzMDM3NiwgMzAzODgsIDgwLCBBIHwgMCwgMCwgMCwgMCksIEEgPSBfMig4KSwgZVtBICsgNCA+PiAyXSA9IDAsIGVbQSA+PiAyXSA9IDgxLCBZMCgzMDE3MiwgMjAzMCwgMywgMzAzOTYsIDMwMzg4LCA4MiwgQSB8IDAsIDAsIDAsIDApLCBBID0gXzIoOCksIGVbQSArIDQgPj4gMl0gPSAwLCBlW0EgPj4gMl0gPSA4MywgWTAoMzAxNzIsIDExODYsIDMsIDMwMzc2LCAzMDM4OCwgODAsIEEgfCAwLCAwLCAwLCAwKSwgQSA9IF8yKDgpLCBlW0EgKyA0ID4+IDJdID0gMCwgZVtBID4+IDJdID0gODQsIFkwKDMwMTcyLCAxMzM5LCAzLCAzMDM5NiwgMzAzODgsIDgyLCBBIHwgMCwgMCwgMCwgMCksIEEgPSBfMig4KSwgZVtBICsgNCA+PiAyXSA9IDAsIGVbQSA+PiAyXSA9IDg1LCBZMCgzMDE3MiwgMTI3MSwgMywgMzAzMDAsIDMwMzEyLCA3MywgQSB8IDAsIDAsIDAsIDApLCBBID0gXzIoOCksIGVbQSArIDQgPj4gMl0gPSAwLCBlW0EgPj4gMl0gPSA4NiwgWTAoMzAxNzIsIDEyNDQsIDQsIDMwNDE2LCAzMDM2OCwgODcsIEEgfCAwLCAwLCAwLCAwKSwgQSA9IF8yKDgpLCBlW0EgKyA0ID4+IDJdID0gMCwgZVtBID4+IDJdID0gODgsIFkwKDMwMTcyLCAxNjk0LCA0LCAzMDQzMiwgMzA0NDgsIDg5LCBBIHwgMCwgMCwgMCwgMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gRjIoQSwgaSwgcikgewogICAgICAgICAgICAgIHZhciBmID0gMCwgayA9IDAsIHQgPSAwOwogICAgICAgICAgICAgIGlmIChyID4+PiAwID49IDUxMikKICAgICAgICAgICAgICAgIHJldHVybiBKQShBIHwgMCwgaSB8IDAsIHIgfCAwKSwgQTsKICAgICAgICAgICAgICBmID0gQSArIHIgfCAwOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGlmICghKChBIF4gaSkgJiAzKSkgewogICAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCEoQSAmIDMpKSB7CiAgICAgICAgICAgICAgICAgICAgICByID0gQTsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICghcikgewogICAgICAgICAgICAgICAgICAgICAgciA9IEE7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBmb3IgKHIgPSBBOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgaWYgKEZbciB8IDBdID0gSVtpIHwgMF0sIGkgPSBpICsgMSB8IDAsIHIgPSByICsgMSB8IDAsICEociAmIDMpKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgaWYgKCEociA+Pj4gMCA8IGYgPj4+IDApKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgayA9IGYgJiAtNDsKICAgICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICAgIGlmIChmID4+PiAwIDwgNjQgfHwgKHQgPSBrICsgLTY0IHwgMCwgdCA+Pj4gMCA8IHIgPj4+IDApKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICBmb3IgKDsgZVtyID4+IDJdID0gZVtpID4+IDJdLCBlW3IgKyA0ID4+IDJdID0gZVtpICsgNCA+PiAyXSwgZVtyICsgOCA+PiAyXSA9IGVbaSArIDggPj4gMl0sIGVbciArIDEyID4+IDJdID0gZVtpICsgMTIgPj4gMl0sIGVbciArIDE2ID4+IDJdID0gZVtpICsgMTYgPj4gMl0sIGVbciArIDIwID4+IDJdID0gZVtpICsgMjAgPj4gMl0sIGVbciArIDI0ID4+IDJdID0gZVtpICsgMjQgPj4gMl0sIGVbciArIDI4ID4+IDJdID0gZVtpICsgMjggPj4gMl0sIGVbciArIDMyID4+IDJdID0gZVtpICsgMzIgPj4gMl0sIGVbciArIDM2ID4+IDJdID0gZVtpICsgMzYgPj4gMl0sIGVbciArIDQwID4+IDJdID0gZVtpICsgNDAgPj4gMl0sIGVbciArIDQ0ID4+IDJdID0gZVtpICsgNDQgPj4gMl0sIGVbciArIDQ4ID4+IDJdID0gZVtpICsgNDggPj4gMl0sIGVbciArIDUyID4+IDJdID0gZVtpICsgNTIgPj4gMl0sIGVbciArIDU2ID4+IDJdID0gZVtpICsgNTYgPj4gMl0sIGVbciArIDYwID4+IDJdID0gZVtpICsgNjAgPj4gMl0sIGkgPSBpIC0gLTY0IHwgMCwgciA9IHIgLSAtNjQgfCAwLCB0ID4+PiAwID49IHIgPj4+IDA7ICkKICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAociA+Pj4gMCA+PSBrID4+PiAwKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIGZvciAoOyBlW3IgPj4gMl0gPSBlW2kgPj4gMl0sIGkgPSBpICsgNCB8IDAsIHIgPSByICsgNCB8IDAsIGsgPj4+IDAgPiByID4+PiAwOyApCiAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGYgPj4+IDAgPCA0KSB7CiAgICAgICAgICAgICAgICAgIHIgPSBBOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGsgPSBmIC0gNCB8IDAsIGsgPj4+IDAgPCBBID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgIHIgPSBBOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZm9yIChyID0gQTsgRltyIHwgMF0gPSBJW2kgfCAwXSwgRltyICsgMSB8IDBdID0gSVtpICsgMSB8IDBdLCBGW3IgKyAyIHwgMF0gPSBJW2kgKyAyIHwgMF0sIEZbciArIDMgfCAwXSA9IElbaSArIDMgfCAwXSwgaSA9IGkgKyA0IHwgMCwgciA9IHIgKyA0IHwgMCwgayA+Pj4gMCA+PSByID4+PiAwOyApCiAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKHIgPj4+IDAgPCBmID4+PiAwKQogICAgICAgICAgICAgICAgZm9yICg7IEZbciB8IDBdID0gSVtpIHwgMF0sIGkgPSBpICsgMSB8IDAsIHIgPSByICsgMSB8IDAsIChmIHwgMCkgIT0gKHIgfCAwKTsgKQogICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgcmV0dXJuIEE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gQmkoQSwgaSkgewogICAgICAgICAgICAgIHZhciByID0gMCwgZiA9IDAsIGsgPSAwLCB0ID0gMCwgbiA9IDA7CiAgICAgICAgICAgICAgaWYgKGVbaSA+PiAyXSA9IGVbQSA+PiAyXSwgZVtpICsgNCA+PiAyXSA9IGVbQSArIDQgPj4gMl0sIGVbaSArIDggPj4gMl0gPSBlW0EgKyA4ID4+IDJdLCBlW2kgKyAxMiA+PiAyXSA9IGVbQSArIDEyID4+IDJdLCByID0gZVtpICsgMjQgPj4gMl0sIHIpIHsKICAgICAgICAgICAgICAgIGlmIChmID0gZVtpICsgMTYgPj4gMl0sIGYpIHsKICAgICAgICAgICAgICAgICAgZm9yIChyID0gMDsgdCA9IGVbKGVbaSArIDI0ID4+IDJdICsgWihyLCA1MikgfCAwKSArIDQ0ID4+IDJdLCB0ICYmIChSKHQpLCBmID0gZVtpICsgMTYgPj4gMl0pLCByID0gciArIDEgfCAwLCBmID4+PiAwID4gciA+Pj4gMDsgKQogICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgciA9IGVbaSArIDI0ID4+IDJdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgUihyKSwgZVtpICsgMjQgPj4gMl0gPSAwOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAociA9IGVbQSArIDE2ID4+IDJdLCBlW2kgKyAxNiA+PiAyXSA9IHIsIHIgPSBVMihaKHIsIDUyKSksIGVbaSArIDI0ID4+IDJdID0gciwgcikgewogICAgICAgICAgICAgICAgaWYgKGVbaSArIDE2ID4+IDJdKQogICAgICAgICAgICAgICAgICBmb3IgKHQgPSAwOyBuID0gWih0LCA1MiksIHIgPSBuICsgciB8IDAsIGYgPSBlW0EgKyAyNCA+PiAyXSArIG4gfCAwLCBrID0gZVtmICsgNCA+PiAyXSwgZVtyID4+IDJdID0gZVtmID4+IDJdLCBlW3IgKyA0ID4+IDJdID0gaywgZVtyICsgNDggPj4gMl0gPSBlW2YgKyA0OCA+PiAyXSwgayA9IGVbZiArIDQ0ID4+IDJdLCBlW3IgKyA0MCA+PiAyXSA9IGVbZiArIDQwID4+IDJdLCBlW3IgKyA0NCA+PiAyXSA9IGssIGsgPSBlW2YgKyAzNiA+PiAyXSwgZVtyICsgMzIgPj4gMl0gPSBlW2YgKyAzMiA+PiAyXSwgZVtyICsgMzYgPj4gMl0gPSBrLCBrID0gZVtmICsgMjggPj4gMl0sIGVbciArIDI0ID4+IDJdID0gZVtmICsgMjQgPj4gMl0sIGVbciArIDI4ID4+IDJdID0gaywgayA9IGVbZiArIDIwID4+IDJdLCBlW3IgKyAxNiA+PiAyXSA9IGVbZiArIDE2ID4+IDJdLCBlW3IgKyAyMCA+PiAyXSA9IGssIGsgPSBlW2YgKyAxMiA+PiAyXSwgZVtyICsgOCA+PiAyXSA9IGVbZiArIDggPj4gMl0sIGVbciArIDEyID4+IDJdID0gaywgciA9IGVbaSArIDI0ID4+IDJdLCBlWyhuICsgciB8IDApICsgNDQgPj4gMl0gPSAwLCB0ID0gdCArIDEgfCAwLCB0ID4+PiAwIDwgZFtpICsgMTYgPj4gMl07ICkKICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICBpZiAoZVtpICsgMjAgPj4gMl0gPSBlW0EgKyAyMCA+PiAyXSwgciA9IGVbQSArIDMyID4+IDJdLCBlW2kgKyAzMiA+PiAyXSA9IHIsIHIpIHsKICAgICAgICAgICAgICAgICAgaWYgKHIgPSBVMihyKSwgZVtpICsgMjggPj4gMl0gPSByLCAhcikgewogICAgICAgICAgICAgICAgICAgIGVbaSArIDI4ID4+IDJdID0gMCwgZVtpICsgMzIgPj4gMl0gPSAwOwogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBGMihyLCBlW0EgKyAyOCA+PiAyXSwgZVtBICsgMzIgPj4gMl0pOwogICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlW2kgKyAyOCA+PiAyXSA9IDA7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVbaSArIDE2ID4+IDJdID0gMCwgZVtpICsgMjQgPj4gMl0gPSAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIENrKEEsIGksIHIsIGYpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIGkgPSBpIHwgMCwgciA9IHIgfCAwLCBmID0gZiB8IDA7CiAgICAgICAgICAgICAgdmFyIGsgPSAwLCB0ID0gMCwgbiA9IDAsIGwgPSAwLCBhID0gMCwgdSA9IDAsIG8gPSAwLCBnID0gMDsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAoIWMwKGVbQSArIDQgPj4gMl0sIDE4NiwgZikpCiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICBhID0gZVtBICsgNCA+PiAyXSwgayA9IGVbYSA+PiAyXSwgbiA9IGVbYSArIDggPj4gMl07CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIGlmIChrKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSAxLCBvID0gayAmIDEsIChrIHwgMCkgPT0gMSkKICAgICAgICAgICAgICAgICAgICAgIGsgPSAwOwogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgZm9yIChrID0gayAmIC0yOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICBsID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdCB8fCAobCA9IDAsICEobzJbZVtuID4+IDJdXShBLCBpLCBmKSB8IDApKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IChvMltlW24gKyA0ID4+IDJdXShBLCBpLCBmKSB8IDApICE9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSBsLCBuID0gbiArIDggfCAwLCB1ID0gdSArIDIgfCAwLCAoayB8IDApID09ICh1IHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBrID0gIXQ7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICh0ID0gbyA/IDAgOiB0LCBrIHwgIW8gfHwgKHQgPSAobzJbZVtuID4+IDJdXShBLCBpLCBmKSB8IDApICE9IDApLCBlW2EgPj4gMl0gPSAwLCB0KQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlW2EgPj4gMl0gPSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCFjMChlW0EgKyA4ID4+IDJdLCAxODcsIGYpIHx8ICFjMChlW0EgKyA4ID4+IDJdLCAxODgsIGYpIHx8ICFjMChlW0EgKyA4ID4+IDJdLCAxODksIGYpIHx8IGVbQSArIDk2ID4+IDJdICYmICFjMChlW0EgKyA4ID4+IDJdLCAxOTAsIGYpIHx8ICFjMChlW0EgKyA4ID4+IDJdLCAxOTEsIGYpKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgYSA9IGVbQSArIDggPj4gMl0sIGsgPSBlW2EgPj4gMl0sIG4gPSBlW2EgKyA4ID4+IDJdOwogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICBpZiAoaykgewogICAgICAgICAgICAgICAgICAgIGlmICh0ID0gMSwgbyA9IGsgJiAxLCAoayB8IDApID09IDEpCiAgICAgICAgICAgICAgICAgICAgICBrID0gMDsKICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgIGZvciAoayA9IGsgJiAtMiwgdSA9IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGwgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0IHx8IChsID0gMCwgIShvMltlW24gPj4gMl1dKEEsIGksIGYpIHwgMCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gKG8yW2VbbiArIDQgPj4gMl1dKEEsIGksIGYpIHwgMCkgIT0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IGwsIG4gPSBuICsgOCB8IDAsIHUgPSB1ICsgMiB8IDAsIChrIHwgMCkgPT0gKHUgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGsgPSAhdDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSBvID8gMCA6IHQsIGsgfCAhbyB8fCAodCA9IChvMltlW24gPj4gMl1dKEEsIGksIGYpIHwgMCkgIT0gMCksIGVbYSA+PiAyXSA9IDAsIHQpCiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVbYSA+PiAyXSA9IDA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBnID0gRDQoZVtBID4+IDJdLCBpLCByLCBmKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIGcgfCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIGNpKEEsIGksIHIsIGYsIGssIHQpIHsKICAgICAgICAgICAgICB2YXIgbiA9IDAsIGwgPSBXKDApLCBhID0gMCwgdSA9IFcoMCk7CiAgICAgICAgICAgICAgbiA9IChyIDw8IDYpICsgaSB8IDAsIEEgPSByID8gbiArIC02NCB8IDAgOiBBLCBhID0gZiA+Pj4gMCA8IGsgPj4+IDAgPyBmIDogazsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAoYSA+Pj4gMCA8PSByID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgIGkgPSBBOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZm9yIChsID0gR1tBID4+IDJdOyBpID0gbiwgbiA9IGkgLSAzMiB8IDAsIHUgPSBsLCBsID0gR1tpID4+IDJdLCBHW24gPj4gMl0gPSBXKFcodSArIGwpICogdCkgKyBHW24gPj4gMl0sIG4gPSBpIC0gMjggfCAwLCBHW24gPj4gMl0gPSBXKFcoR1tBICsgNCA+PiAyXSArIEdbaSArIDQgPj4gMl0pICogdCkgKyBHW24gPj4gMl0sIG4gPSBpIC0gMjQgfCAwLCBHW24gPj4gMl0gPSBXKFcoR1tBICsgOCA+PiAyXSArIEdbaSArIDggPj4gMl0pICogdCkgKyBHW24gPj4gMl0sIG4gPSBpIC0gMjAgfCAwLCBHW24gPj4gMl0gPSBXKFcoR1tBICsgMTIgPj4gMl0gKyBHW2kgKyAxMiA+PiAyXSkgKiB0KSArIEdbbiA+PiAyXSwgbiA9IGkgLSAxNiB8IDAsIEdbbiA+PiAyXSA9IFcoVyhHW0EgKyAxNiA+PiAyXSArIEdbaSArIDE2ID4+IDJdKSAqIHQpICsgR1tuID4+IDJdLCBuID0gaSAtIDEyIHwgMCwgR1tuID4+IDJdID0gVyhXKEdbQSArIDIwID4+IDJdICsgR1tpICsgMjAgPj4gMl0pICogdCkgKyBHW24gPj4gMl0sIG4gPSBpIC0gOCB8IDAsIEdbbiA+PiAyXSA9IFcoVyhHW0EgKyAyNCA+PiAyXSArIEdbaSArIDI0ID4+IDJdKSAqIHQpICsgR1tuID4+IDJdLCBuID0gaSAtIDQgfCAwLCBHW24gPj4gMl0gPSBXKFcoR1tBICsgMjggPj4gMl0gKyBHW2kgKyAyOCA+PiAyXSkgKiB0KSArIEdbbiA+PiAyXSwgbiA9IGkgLSAtNjQgfCAwLCBBID0gaSwgciA9IHIgKyAxIHwgMCwgKGEgfCAwKSAhPSAociB8IDApOyApCiAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZiA+Pj4gMCA+IGsgPj4+IDAgJiYgKEEgPSBuIC0gMzIgfCAwLCB0ID0gVyh0ICsgdCksIEdbQSA+PiAyXSA9IFcoR1tpID4+IDJdICogdCkgKyBHW0EgPj4gMl0sIEEgPSBuIC0gMjggfCAwLCBHW0EgPj4gMl0gPSBXKEdbaSArIDQgPj4gMl0gKiB0KSArIEdbQSA+PiAyXSwgQSA9IG4gLSAyNCB8IDAsIEdbQSA+PiAyXSA9IFcoR1tpICsgOCA+PiAyXSAqIHQpICsgR1tBID4+IDJdLCBBID0gbiAtIDIwIHwgMCwgR1tBID4+IDJdID0gVyhHW2kgKyAxMiA+PiAyXSAqIHQpICsgR1tBID4+IDJdLCBBID0gbiAtIDE2IHwgMCwgR1tBID4+IDJdID0gVyhHW2kgKyAxNiA+PiAyXSAqIHQpICsgR1tBID4+IDJdLCBBID0gbiAtIDEyIHwgMCwgR1tBID4+IDJdID0gVyhHW2kgKyAyMCA+PiAyXSAqIHQpICsgR1tBID4+IDJdLCBBID0gbiAtIDggfCAwLCBHW0EgPj4gMl0gPSBXKEdbaSArIDI0ID4+IDJdICogdCkgKyBHW0EgPj4gMl0sIEEgPSBuIC0gNCB8IDAsIEdbQSA+PiAyXSA9IFcoR1tpICsgMjggPj4gMl0gKiB0KSArIEdbQSA+PiAyXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gR2soQSwgaSwgciwgZikgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDAsIGYgPSBmIHwgMDsKICAgICAgICAgICAgICB2YXIgayA9IDAsIHQgPSAwLCBuID0gMCwgbCA9IDAsIGEgPSAwLCB1ID0gMCwgbyA9IDAsIGcgPSAwLCBoID0gMDsKICAgICAgICAgICAgICB0ID0gWCAtIDE2IHwgMCwgWCA9IHQ7CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKGVbQSArIDEyMCA+PiAyXSB8IHIgPj4+IDAgPCAzKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgaWYgKGgyKGksIHQgKyAxMiB8IDAsIDIpLCB1ID0gRzJbdCArIDEyID4+IDFdLCB1IC0gMTAyNSA+Pj4gMCA8PSA0Mjk0OTY2MjcxKSB7CiAgICAgICAgICAgICAgICAgIGVbdCA+PiAyXSA9IHUsIFEoZiwgMSwgNjAzNywgdCk7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoaDIoaSArIDIgfCAwLCB0ICsgMTIgfCAwLCAxKSwgYSA9IEcyW3QgKyAxMiA+PiAxXSwgIWEpIHsKICAgICAgICAgICAgICAgICAgUShmLCAxLCA1NDM5LCAwKTsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChhICsgMyA+Pj4gMCA+IHIgPj4+IDAgfHwgKGwgPSBVMihaKGEsIHUpIDw8IDIpLCAhbCkpCiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICBpZiAobyA9IFUyKGEpLCAhbykgewogICAgICAgICAgICAgICAgICBSKGwpOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGcgPSBVMihhKSwgIWcpIHsKICAgICAgICAgICAgICAgICAgUihsKSwgUihvKTsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChuID0gVTIoMjApLCAhbikgewogICAgICAgICAgICAgICAgICBSKGwpLCBSKG8pLCBSKGcpOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZm9yIChmID0gaSArIDMgfCAwLCBlW24gKyA4ID4+IDJdID0gbywgZVtuICsgNCA+PiAyXSA9IGcsIHUyW24gKyAxNiA+PiAxXSA9IHUsIGVbbiA+PiAyXSA9IGwsIGggPSBlW3QgKyAxMiA+PiAyXSwgZVtuICsgMTIgPj4gMl0gPSAwLCBGW24gKyAxOCB8IDBdID0gaCwgZVtBICsgMTIwID4+IDJdID0gbjsgaDIoZiwgdCArIDEyIHwgMCwgMSksIEZbayArIG8gfCAwXSA9IChJW3QgKyAxMiB8IDBdICYgMTI3KSArIDEsIEZbayArIGcgfCAwXSA9IChlW3QgKyAxMiA+PiAyXSAmIDEyOCkgPj4+IDcsIGYgPSBmICsgMSB8IDAsIGsgPSBrICsgMSB8IDAsIChhIHwgMCkgIT0gKGsgfCAwKTsgKQogICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICBpZiAoIXUpIHsKICAgICAgICAgICAgICAgICAgayA9IDE7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmb3IgKG4gPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICBmb3IgKGsgPSAwLCBBID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgICBpZiAoayA9IElbayArIG8gfCAwXSArIDcgPj4+IDMgfCAwLCBrID0gayA+Pj4gMCA+PSA0ID8gNCA6IGssIChrICsgKGYgLSBpIHwgMCkgfCAwKSA+IChyIHwgMCkpIHsKICAgICAgICAgICAgICAgICAgICAgIGsgPSAwOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKGgyKGYsIHQgKyAxMiB8IDAsIGspLCBlW2wgPj4gMl0gPSBlW3QgKyAxMiA+PiAyXSwgbCA9IGwgKyA0IHwgMCwgZiA9IGYgKyBrIHwgMCwgQSA9IEEgKyAxIHwgMCwgayA9IEEgJiA2NTUzNSwgIShhID4+PiAwID4gayA+Pj4gMCkpCiAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoayA9IDEsIG4gPSBuICsgMSB8IDAsICEoKG4gJiA2NTUzNSkgPj4+IDAgPCB1ID4+PiAwKSkKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIFggPSB0ICsgMTYgfCAwLCBrIHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBXayhBLCBpLCByKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDAsIHIgPSByIHwgMDsKICAgICAgICAgICAgICB2YXIgZiA9IDAsIGsgPSAwLCB0ID0gMCwgbiA9IDAsIGwgPSAwLCBhID0gMCwgdSA9IDAsIG8gPSAwLCBnID0gMCwgaCA9IDAsIHMgPSAwLCB3ID0gMCwgQiA9IDA7CiAgICAgICAgICAgICAgbCA9IFggLSAxNiB8IDAsIFggPSBsLCBrID0gRzJbciArIDQgPj4gMV0gfCBHMltyICsgNiA+PiAxXSA8PCAxNiwgciA9IEcyW3IgPj4gMV0gfCBHMltyICsgMiA+PiAxXSA8PCAxNiwgZVtpICsgMjQgPj4gMl0gPSByLCBlW2kgKyAyOCA+PiAyXSA9IGssIHQgPSBpICsgNTYgfCAwLCBuID0gciwgZyA9IGssIHIgPSBrID4+PiA4IHwgMCwgayA9IHIgJiAyNTUsIGEgPSBlW2kgKyA1NiA+PiAyXSwgZiA9IGVbaSArIDYwID4+IDJdIC0gYSA+PiAzOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGlmIChrID4+PiAwID4gZiA+Pj4gMCkgewogICAgICAgICAgICAgICAgICB2Nih0LCBrIC0gZiB8IDApLCBmID0gSVtpICsgMjkgfCAwXSwgciA9IGY7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBrID4+PiAwIDwgZiA+Pj4gMCAmJiAoZVtpICsgNjAgPj4gMl0gPSBhICsgKGsgPDwgMykpLCBmID0gazsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaCA9IG4gPj4+IDE2IHwgMDsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAoIShyICYgMjU1KSkKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIGlmIChhID0gZVt0ID4+IDJdLCByID0gMCwgZiAtIDEgPj4+IDAgPj0gMykKICAgICAgICAgICAgICAgICAgZm9yIChzID0gZiAmIDI1MjsgdCA9IChyIDw8IDMpICsgYSB8IDAsIGVbdCA+PiAyXSA9IDEsIGVbdCArIDQgPj4gMl0gPSAxLCBlW3QgKyA4ID4+IDJdID0gMSwgZVt0ICsgMTIgPj4gMl0gPSAxLCBlW3QgKyAxNiA+PiAyXSA9IDEsIGVbdCArIDIwID4+IDJdID0gMSwgZVt0ICsgMjQgPj4gMl0gPSAxLCBlW3QgKyAyOCA+PiAyXSA9IDEsIHIgPSByICsgNCB8IDAsIHUgPSB1ICsgNCB8IDAsIChzIHwgMCkgIT0gKHUgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgIGlmIChmID0gZiAmIDMsICFmKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgZm9yICg7IHQgPSAociA8PCAzKSArIGEgfCAwLCBlW3QgPj4gMl0gPSAxLCBlW3QgKyA0ID4+IDJdID0gMSwgciA9IHIgKyAxIHwgMCwgbyA9IG8gKyAxIHwgMCwgKGYgfCAwKSAhPSAobyB8IDApOyApCiAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgayA9IFooaywgWihaKG4gJiA2NTUzNSwgaCksIChnICYgMjU1KSArIDcgPj4+IDMgfCAwKSksIGYgPSBlW2kgKyA0ID4+IDJdLCByID0gZVtpID4+IDJdLCBuID0gZiAtIHIgfCAwOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGlmIChrID4+PiAwID4gbiA+Pj4gMCkgewogICAgICAgICAgICAgICAgICBUZShpLCBrIC0gbiB8IDApLCByID0gZVtpID4+IDJdLCBmID0gZVtpICsgNCA+PiAyXTsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChrID4+PiAwID49IG4gPj4+IDApCiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICBmID0gciArIGsgfCAwLCBlW2kgKyA0ID4+IDJdID0gZjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZVtsICsgMTIgPj4gMl0gPSByLCBlW2wgKyA4ID4+IDJdID0gZiAtIHIsIHcgPSBBLCBCID0gcnIoMjk5ODgsIGwgKyA4IHwgMCkgfCAwLCBlW3cgKyA0ID4+IDJdID0gQiwgZVtBID4+IDJdID0gNTA2NTYsIFggPSBsICsgMTYgfCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIG0xKEEsIGkpIHsKICAgICAgICAgICAgICB2YXIgciA9IDAsIGYgPSAwLCBrID0gMCwgdCA9IDAsIG4gPSAwOwogICAgICAgICAgICAgIHQgPSBYIC0gMTYgfCAwLCBYID0gdCwgZiA9IGVbQSA+PiAyXSwgayA9IGVbZiAtIDggPj4gMl0sIGVbdCArIDEyID4+IDJdID0gaywgZVt0ICsgNCA+PiAyXSA9IEEgKyBrLCBlW3QgKyA4ID4+IDJdID0gZVtmIC0gNCA+PiAyXSwgayA9IGVbdCArIDggPj4gMl0sIGYgPSB0MShrLCBpLCAwKSwgbiA9IGVbdCArIDQgPj4gMl07CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKGYpIHsKICAgICAgICAgICAgICAgICAgQSA9IFggKyAtNjQgfCAwLCBYID0gQSwgWCA9IEEgLSAtNjQgfCAwLCByID0gZVt0ICsgMTIgPj4gMl0gPyAwIDogbjsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChmID0gWCArIC02NCB8IDAsIFggPSBmLCAoQSB8IDApID49IChuIHwgMCkgJiYgKGVbZiArIDI4ID4+IDJdID0gMCwgZVtmICsgMzIgPj4gMl0gPSAwLCBlW2YgKyAzNiA+PiAyXSA9IDAsIGVbZiArIDQwID4+IDJdID0gMCwgZVtmICsgNDQgPj4gMl0gPSAwLCBlW2YgKyA0OCA+PiAyXSA9IDAsIGVbZiArIDIwID4+IDJdID0gMCwgZVtmICsgMjQgPj4gMl0gPSAwLCBlW2YgKyAxNiA+PiAyXSA9IDAsIGVbZiArIDEyID4+IDJdID0gaSwgZVtmICsgNCA+PiAyXSA9IGssIGVbZiArIDYwID4+IDJdID0gMCwgZVtmICsgNTIgPj4gMl0gPSAxLCBlW2YgKyA1NiA+PiAyXSA9IDE2Nzc3MjE2LCBlW2YgKyA4ID4+IDJdID0gQSwgbzJbZVtlW2sgPj4gMl0gKyAyMCA+PiAyXV0oaywgZiArIDQgfCAwLCBuLCBuLCAxLCAwKSwgciA9IGVbZiArIDI4ID4+IDJdID8gQSA6IDApLCBYID0gZiAtIC02NCB8IDAsIHIpCiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICByID0gWCArIC02NCB8IDAsIFggPSByLCBlW3IgKyAxNiA+PiAyXSA9IDAsIGVbciArIDEyID4+IDJdID0gNDg1MjgsIGVbciArIDggPj4gMl0gPSBBLCBlW3IgKyA0ID4+IDJdID0gaSwgQSA9IDAsIGQyKHIgKyAyMCB8IDAsIDAsIDM5KSwgZVtyICsgNjAgPj4gMl0gPSAwLCBGW3IgKyA1OSB8IDBdID0gMSwgbzJbZVtlW2sgPj4gMl0gKyAyNCA+PiAyXV0oaywgciArIDQgfCAwLCBuLCAxLCAwKTsKICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgcjoKICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGVbciArIDQwID4+IDJdKSB7CiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgICAgICAgIEEgPSBlW3IgKyA0NCA+PiAyXSA9PSAxICYmIGVbciArIDMyID4+IDJdID09IDEgJiYgZVtyICsgMzYgPj4gMl0gPT0gMSA/IGVbciArIDI0ID4+IDJdIDogMDsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoZVtyICsgMjggPj4gMl0gIT0gMSAmJiBlW3IgKyA0NCA+PiAyXSB8IGVbciArIDMyID4+IDJdICE9IDEgfCBlW3IgKyAzNiA+PiAyXSAhPSAxKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIEEgPSBlW3IgKyAyMCA+PiAyXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIFggPSByIC0gLTY0IHwgMCwgciA9IEE7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBYID0gdCArIDE2IHwgMCwgcjsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBtayhBLCBpLCByLCBmKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDAsIHIgPSByIHwgMCwgZiA9IGYgfCAwOwogICAgICAgICAgICAgIHZhciBrID0gMCwgdCA9IDAsIG4gPSAwLCBsID0gMCwgYSA9IDA7CiAgICAgICAgICAgICAgaWYgKHQgPSAtMSwgayA9IC0xLCAhKElbQSArIDY4IHwgMF0gJiA4KSkgewogICAgICAgICAgICAgICAgdCA9IGVbQSArIDMyID4+IDJdLCBlW0EgKyAzNiA+PiAyXSA9IHQ7CiAgICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoayA9IGVbQSArIDQ4ID4+IDJdLCBrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrID0gbzJbZVtBICsgMjAgPj4gMl1dKHQsIGssIGVbQSA+PiAyXSkgfCAwLCAoayB8IDApID09IC0xKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IGsgKyBlW0EgKyAzNiA+PiAyXSB8IDAsIGVbQSArIDM2ID4+IDJdID0gdCwgayA9IGVbQSArIDQ4ID4+IDJdIC0gayB8IDAsIGVbQSArIDQ4ID4+IDJdID0gaywgIWspCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB0ID0gZVtBICsgMzIgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtBICsgMzYgPj4gMl0gPSB0LCAhIWkgJiAociB8IDApID49IDAgfCAociB8IDApID4gMCkKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgIHQgPSAwLCBrID0gMDsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHJldHVybiBlW0EgKyA2OCA+PiAyXSA9IGVbQSArIDY4ID4+IDJdIHwgOCwgUShmLCA0LCAyNzU5OSwgMCksIGVbQSArIDQ4ID4+IDJdID0gMCwgZVtBICsgNjggPj4gMl0gPSBlW0EgKyA2OCA+PiAyXSB8IDgsIHEyID0gLTEsIC0xOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGZvciAodCA9IDAsIGsgPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgIGlmIChuID0gbzJbZVtBICsgMjQgPj4gMl1dKGksIHIsIGVbQSA+PiAyXSkgfCAwLCBsID0gcTIsIGEgPSBsLCAobiAmIGwpID09IC0xKQogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFEoZiwgNCwgMjc1ODQsIDApLCBlW0EgKyA2OCA+PiAyXSA9IGVbQSArIDY4ID4+IDJdIHwgOCwgaSA9IGsgKyBlW0EgKyA2MCA+PiAyXSB8IDAsIHIgPSB0ICsgZVtBICsgNTYgPj4gMl0gfCAwLCBpID0gciA+Pj4gMCA8IHQgPj4+IDAgPyBpICsgMSB8IDAgOiBpLCBlW0EgKyA1NiA+PiAyXSA9IHIsIGVbQSArIDYwID4+IDJdID0gaSwgQSA9ICEoayB8IHQpLCBpID0gQSA/IC0xIDogdCwgcTIgPSBBID8gLTEgOiBrLCBpIHwgMDsKICAgICAgICAgICAgICAgICAgICBpZiAoayA9IGsgKyBhIHwgMCwgdCA9IHQgKyBuIHwgMCwgayA9IHQgPj4+IDAgPCBuID4+PiAwID8gayArIDEgfCAwIDogaywgbCA9IGksIGkgPSBpIC0gbiB8IDAsIHIgPSByIC0gKGEgKyAobiA+Pj4gMCA+IGwgPj4+IDApIHwgMCkgfCAwLCAhKCEhaSAmIChyIHwgMCkgPj0gMCB8IChyIHwgMCkgPiAwKSkKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpID0gayArIGVbQSArIDYwID4+IDJdIHwgMCwgciA9IHQgKyBlW0EgKyA1NiA+PiAyXSB8IDAsIGkgPSByID4+PiAwIDwgdCA+Pj4gMCA/IGkgKyAxIHwgMCA6IGksIGVbQSArIDU2ID4+IDJdID0gciwgZVtBICsgNjAgPj4gMl0gPSBpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gcTIgPSBrLCB0IHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBXZShBKSB7CiAgICAgICAgICAgICAgdmFyIGkgPSAwLCByID0gMCwgZiA9IDAsIGsgPSAwOwogICAgICAgICAgICAgIGsgPSBYIC0gNDggfCAwLCBYID0gaywgaSA9IEUyKDEsIDQ0KTsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAoaSkgewogICAgICAgICAgICAgICAgICBpZiAoZVtpICsgMTYgPj4gMl0gPSAwLCAoQSB8IDApIDw9IDApIHsKICAgICAgICAgICAgICAgICAgICBpZiAoQSA9IEUyKDEsIDgpLCBlW2kgKyAzNiA+PiAyXSA9IEEsIEEpCiAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgIFIoaSksIGkgPSAwOwogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKHIgPSBFMigxLCAyNCksICFyKSB7CiAgICAgICAgICAgICAgICAgICAgZVtpICsgMTIgPj4gMl0gPSAwLCBSKGkpLCBpID0gMDsKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVbaSArIDEyID4+IDJdID0gcjsKICAgICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICAgIGlmIChyID0gVTIoNDgpLCAhcikgewogICAgICAgICAgICAgICAgICAgICAgZVtpICsgOCA+PiAyXSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoZVtpICsgOCA+PiAyXSA9IHIsIHIgPSBFMihBLCAyMCksIGVbaSA+PiAyXSA9IHIsICFyKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICBlW2kgKyA0ID4+IDJdID0gQSwgZVtyID4+IDJdID0gaSwgQSA9IEUyKDEsIDI0KTsKICAgICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoIUEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZVtlW2kgPj4gMl0gKyAxMiA+PiAyXSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtlW2kgPj4gMl0gKyAxMiA+PiAyXSA9IEEsIEEgPSBVMig0OCksICFBKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBID0gZVtpID4+IDJdLCBlW0EgKyAxNiA+PiAyXSA9IDAsIEEgPSBlW0EgKyAxMiA+PiAyXSwgIUEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgUihBKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0gZVtpID4+IDJdLCBlW3IgKyA4ID4+IDJdID0gMCwgZVtyICsgMTYgPj4gMl0gPSBBLCBBID0gVTIoMTIpLCBBICYmIChlW0EgKyA0ID4+IDJdID0gciwgZVtBID4+IDJdID0gMTA4LCByID0gWCAtIDQ4IHwgMCwgWCA9IHIsIGYgPSByICsgNCB8IDAsIGQyKGYsIDAsIDQ0KSwgZiA9IEYyKGsgKyA0IHwgMCwgZiwgNDQpLCBlW2YgPj4gMl0gPSBlWzEyMzg2XSwgZVtmICsgNCA+PiAyXSA9IGVbMTIzODddLCBYID0gciArIDQ4IHwgMCwgZVtrICsgMTYgPj4gMl0gPSAwLCBSKEEpKSwgQSA9IGVbaSA+PiAyXSwgZVtBICsgNCA+PiAyXSA9IDAsIHIgPSBlW0EgKyAxMiA+PiAyXSwgciAmJiAoUihyKSwgQSA9IGVbaSA+PiAyXSksIEEgPSBlW0EgKyAxNiA+PiAyXSwgIUEpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICBSKEEpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoZVtpICsgNCA+PiAyXSA9IDAsIGVbaSArIDMyID4+IDJdIDwgZVtpICsgNCA+PiAyXSkKICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBlW2kgKyAzMiA+PiAyXSA8IGVbaSArIDQgPj4gMl07ICkKICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgIGlmICghKGVbaSArIDE2ID4+IDJdICE9IDIgJiAtMikpCiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZ3IoaSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpID0gMDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIFggPSBrICsgNDggfCAwLCBpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIGs2KEEsIGksIHIpIHsKICAgICAgICAgICAgICB2YXIgZiA9IDAsIGsgPSAwLCB0ID0gMCwgbiA9IDAsIGwgPSAwOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgaWYgKChpIHwgMCkgPT0gOCkgewogICAgICAgICAgICAgICAgICAgIGkgPSB2MShyKTsKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChmID0gMjgsIGkgJiAzIHwgaSA+Pj4gMCA8IDQgfHwgKHQgPSBpID4+PiAyIHwgMCwgdCAtIDEgJiB0KSkKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICBpZiAoLTY0IC0gaSA+Pj4gMCA8IHIgPj4+IDApCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDQ4OwogICAgICAgICAgICAgICAgICB0ID0gMTYsIGkgPSBpID4+PiAwIDw9IDE2ID8gMTYgOiBpLCBmID0gaSA+Pj4gMCA8PSAxNiA/IDE2IDogaTsKICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgIGlmICghKGYgLSAxICYgZikpIHsKICAgICAgICAgICAgICAgICAgICAgIGkgPSBmOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZm9yICg7IGkgPSB0LCB0ID0gaSA8PCAxLCBpID4+PiAwIDwgZiA+Pj4gMDsgKQogICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICBpZiAoLTY0IC0gaSA+Pj4gMCA8PSByID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICBlWzEyNDg1XSA9IDQ4LCByID0gMDsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICh0ID0gciA+Pj4gMCA8IDExID8gMTYgOiByICsgMTEgJiAtOCwgayA9IHYxKCh0ICsgaSB8IDApICsgMTIgfCAwKSwgciA9IDAsICFrKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICByID0gayAtIDggfCAwOwogICAgICAgICAgICAgICAgICAgIGs6IHsKICAgICAgICAgICAgICAgICAgICAgIGlmICghKGsgJiBpIC0gMSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaSA9IHI7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9IGsgLSA0IHwgMCwgbCA9IGVbbiA+PiAyXSwgZiA9IGksIGkgPSAoKGkgKyBrIHwgMCkgLSAxICYgMCAtIGkpIC0gOCB8IDAsIGkgPSAoaSAtIHIgPj4+IDAgPD0gMTUgPyBmIDogMCkgKyBpIHwgMCwgZiA9IGkgLSByIHwgMCwgayA9IChsICYgLTgpIC0gZiB8IDAsICEobCAmIDMpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBlW3IgPj4gMl0sIGVbaSArIDQgPj4gMl0gPSBrLCBlW2kgPj4gMl0gPSByICsgZjsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGVbaSArIDQgPj4gMl0gPSBrIHwgZVtpICsgNCA+PiAyXSAmIDEgfCAyLCBrID0gaSArIGsgfCAwLCBlW2sgKyA0ID4+IDJdID0gZVtrICsgNCA+PiAyXSB8IDEsIGVbbiA+PiAyXSA9IGYgfCBlW24gPj4gMl0gJiAxIHwgMiwgayA9IHIgKyBmIHwgMCwgZVtrICsgNCA+PiAyXSA9IGVbayArIDQgPj4gMl0gfCAxLCB1aShyLCBmKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgciA9IGVbaSArIDQgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgazogewogICAgICAgICAgICAgICAgICAgICAgaWYgKCEociAmIDMpIHx8IChmID0gciAmIC04LCBmID4+PiAwIDw9IHQgKyAxNiA+Pj4gMCkpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICBlW2kgKyA0ID4+IDJdID0gdCB8IHIgJiAxIHwgMiwgciA9IGkgKyB0IHwgMCwgdCA9IGYgLSB0IHwgMCwgZVtyICsgNCA+PiAyXSA9IHQgfCAzLCBmID0gaSArIGYgfCAwLCBlW2YgKyA0ID4+IDJdID0gZVtmICsgNCA+PiAyXSB8IDEsIHVpKHIsIHQpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByID0gaSArIDggfCAwOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGkgPSByOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCFpKQogICAgICAgICAgICAgICAgICByZXR1cm4gNDg7CiAgICAgICAgICAgICAgICBlW0EgPj4gMl0gPSBpLCBmID0gMDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIGY7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24geWsoQSwgaSwgciwgZikgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDAsIGYgPSBmIHwgMDsKICAgICAgICAgICAgICB2YXIgayA9IDAsIHQgPSAwLCBuID0gMCwgbCA9IDAsIGEgPSAwLCB1ID0gMCwgbyA9IDA7CiAgICAgICAgICAgICAgaWYgKCFjMChlW2kgKyA4ID4+IDJdLCAxODQsIGYpKQogICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgYSA9IGVbaSArIDQgPj4gMl0sIGsgPSBlW2EgPj4gMl0sIG4gPSBlW2EgKyA4ID4+IDJdOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGlmIChrKSB7CiAgICAgICAgICAgICAgICAgIGlmICh0ID0gMSwgbyA9IGsgJiAxLCAoayB8IDApID09IDEpCiAgICAgICAgICAgICAgICAgICAgayA9IDA7CiAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIGZvciAoayA9IGsgJiAtMjsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgIGwgPSAwOwogICAgICAgICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXQgfHwgKGwgPSAwLCAhKG8yW2VbbiA+PiAyXV0oaSwgQSwgZikgfCAwKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgbCA9IChvMltlW24gKyA0ID4+IDJdXShpLCBBLCBmKSB8IDApICE9IDA7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9IGwsIG4gPSBuICsgOCB8IDAsIHUgPSB1ICsgMiB8IDAsIChrIHwgMCkgPT0gKHUgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGsgPSAhdDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAodCA9IG8gPyAwIDogdCwgayB8ICFvIHx8ICh0ID0gKG8yW2VbbiA+PiAyXV0oaSwgQSwgZikgfCAwKSAhPSAwKSwgZVthID4+IDJdID0gMCwgdCkKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVbYSA+PiAyXSA9IDA7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGEgPSBlW2kgKyA4ID4+IDJdLCBrID0gZVthID4+IDJdLCBuID0gZVthICsgOCA+PiAyXTsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAoaykgewogICAgICAgICAgICAgICAgICBpZiAodCA9IDEsIG8gPSBrICYgMSwgKGsgfCAwKSA9PSAxKQogICAgICAgICAgICAgICAgICAgIGsgPSAwOwogICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBmb3IgKGsgPSBrICYgLTIsIHUgPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgbCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdCB8fCAobCA9IDAsICEobzJbZVtuID4+IDJdXShpLCBBLCBmKSB8IDApKSkKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICBsID0gKG8yW2VbbiArIDQgPj4gMl1dKGksIEEsIGYpIHwgMCkgIT0gMDsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gbCwgbiA9IG4gKyA4IHwgMCwgdSA9IHUgKyAyIHwgMCwgKGsgfCAwKSA9PSAodSB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgayA9ICF0OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmICh0ID0gbyA/IDAgOiB0LCBrIHwgIW8gfHwgKHQgPSAobzJbZVtuID4+IDJdXShpLCBBLCBmKSB8IDApICE9IDApLCBlW2EgPj4gMl0gPSAwLCB0KQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZVthID4+IDJdID0gMDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIElbaSArIDEzMiB8IDBdID8gSVtpICsgMTMzIHwgMF0gPyBqNChBLCBlW2kgPj4gMl0sIHIsIGYpIHwgMCA6IChRKGYsIDEsIDIyNzI2LCAwKSwgMCkgOiAoUShmLCAxLCAyMjc1NSwgMCksIDApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIHBrKEEsIGksIHIsIGYpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIGkgPSBpIHwgMCwgciA9IHIgfCAwLCBmID0gZiB8IDA7CiAgICAgICAgICAgICAgdmFyIGsgPSAwLCB0ID0gMCwgbiA9IDAsIGwgPSAwOwogICAgICAgICAgICAgIG4gPSBYIC0gMTYgfCAwLCBYID0gbjsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAociA+Pj4gMCA8PSAxKSB7CiAgICAgICAgICAgICAgICAgIFEoZiwgMSwgNjUzMiwgMCksIEEgPSAwOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKEZbQSArIDE4OCB8IDBdICYgMSkgewogICAgICAgICAgICAgICAgICBRKGYsIDEsIDI0MDIzLCAwKSwgQSA9IDA7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBBID0gZVtBICsgMTU2ID4+IDJdICsgWihlW0EgKyAyMDQgPj4gMl0sIDU2NDQpIHwgMCwgRltBICsgNTY0MCB8IDBdID0gSVtBICsgNTY0MCB8IDBdIHwgMiwgaDIoaSwgbiArIDEyIHwgMCwgMSksIGsgPSBlW0EgKyA1MTY0ID4+IDJdOwogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICBpZiAoIWspIHsKICAgICAgICAgICAgICAgICAgICBpZiAodCA9IGVbbiArIDEyID4+IDJdICsgMSB8IDAsIGsgPSBFMih0LCA4KSwgZVtBICsgNTE2NCA+PiAyXSA9IGssICFrKSB7CiAgICAgICAgICAgICAgICAgICAgICBRKGYsIDEsIDY1NTgsIDApLCBBID0gMDsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVbQSArIDUxNjAgPj4gMl0gPSB0OwogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKHQgPSBlW24gKyAxMiA+PiAyXSwgdCA+Pj4gMCA8IGRbQSArIDUxNjAgPj4gMl0pCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgaWYgKGwgPSBrLCBrID0gdCArIDEgfCAwLCB0ID0gbzAobCwgayA8PCAzKSwgIXQpIHsKICAgICAgICAgICAgICAgICAgICBRKGYsIDEsIDY1NTgsIDApLCBBID0gMDsKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVbQSArIDUxNjQgPj4gMl0gPSB0LCBsID0gZVtBICsgNTE2MCA+PiAyXSwgZDIodCArIChsIDw8IDMpIHwgMCwgMCwgayAtIGwgPDwgMyksIGVbQSArIDUxNjAgPj4gMl0gPSBrLCBrID0gZVtBICsgNTE2NCA+PiAyXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChsID0gaywgayA9IGVbbiArIDEyID4+IDJdLCBlW2wgKyAoayA8PCAzKSA+PiAyXSkgewogICAgICAgICAgICAgICAgICBlW24gPj4gMl0gPSBrLCBRKGYsIDEsIDE2NjY2LCBuKSwgQSA9IDA7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAociA9IHIgLSAxIHwgMCwgayA9IFUyKHIpLCBBID0gZVtBICsgNTE2NCA+PiAyXSwgdCA9IGVbbiArIDEyID4+IDJdLCBlW0EgKyAodCA8PCAzKSA+PiAyXSA9IGssICFrKSB7CiAgICAgICAgICAgICAgICAgIFEoZiwgMSwgNjU1OCwgMCksIEEgPSAwOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZVsoQSArICh0IDw8IDMpIHwgMCkgKyA0ID4+IDJdID0gciwgRjIoZVtBICsgKGVbbiArIDEyID4+IDJdIDw8IDMpID4+IDJdLCBpICsgMSB8IDAsIHIpLCBBID0gMTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIFggPSBuICsgMTYgfCAwLCBBIHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBRayhBLCBpLCByLCBmKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDAsIHIgPSByIHwgMCwgZiA9IGYgfCAwOwogICAgICAgICAgICAgIHZhciBrID0gMCwgdCA9IDAsIG4gPSAwLCBsID0gMCwgYSA9IDAsIHUgPSAwOwogICAgICAgICAgICAgIG4gPSBYIC0gMTYgfCAwLCBYID0gbiwgYSA9IGVbZVtBICsgNzIgPj4gMl0gKyAxNiA+PiAyXSwgbCA9IGEgPj4+IDAgPCAyNTcgPyAxIDogMiwgayA9IChsIDw8IDEpICsgNSB8IDAsIHQgPSAociA+Pj4gMCkgLyAoayA+Pj4gMCkgfCAwOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGlmICghKChaKGssIHQpIHwgMCkgPT0gKHIgfCAwKSAmIHIgPj4+IDAgPj0gayA+Pj4gMCkpIHsKICAgICAgICAgICAgICAgICAgUShmLCAxLCA3NzAzLCAwKSwgQSA9IDA7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoZVtBICsgOCA+PiAyXSA9PSAxNiA/IGsgPSBlW0EgKyAxNTYgPj4gMl0gKyBaKGVbQSArIDIwNCA+PiAyXSwgNTY0NCkgfCAwIDogayA9IGVbQSArIDEyID4+IDJdLCBBID0gMCwgciA9IElbayArIDU2NDAgfCAwXSwgQSA9IHIgJiA0ID8gZVtrICsgNDIwID4+IDJdICsgMSB8IDAgOiBBLCB0ID0gdCArIEEgfCAwLCB0ID4+PiAwID49IDMyKSB7CiAgICAgICAgICAgICAgICAgIGVbbiA+PiAyXSA9IHQsIFEoZiwgMSwgMTc0MzYsIG4pLCBBID0gMDsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChGW2sgKyA1NjQwIHwgMF0gPSByIHwgNCwgQSA+Pj4gMCA8IHQgPj4+IDApCiAgICAgICAgICAgICAgICAgIGZvciAociA9IChrICsgWihBLCAxNDgpIHwgMCkgKyA0MjQgfCAwOyBoMihpLCByLCAxKSwgaSA9IGkgKyAxIHwgMCwgaDIoaSwgciArIDQgfCAwLCBsKSwgaSA9IGkgKyBsIHwgMCwgaDIoaSwgciArIDggfCAwLCAyKSwgZiA9IGVbciArIDggPj4gMl0sIHUgPSBlW2sgKyA4ID4+IDJdLCBlW3IgKyA4ID4+IDJdID0gZiA+Pj4gMCA8IHUgPj4+IDAgPyBmIDogdSwgaDIoaSArIDIgfCAwLCByICsgMTIgfCAwLCAxKSwgaSA9IGkgKyAzIHwgMCwgaDIoaSwgciArIDE2IHwgMCwgbCksIGkgPSBpICsgbCB8IDAsIGgyKGksIG4gKyAxMiB8IDAsIDEpLCBlW3IgKyAzNiA+PiAyXSA9IGVbbiArIDEyID4+IDJdLCBmID0gZVtyICsgMTYgPj4gMl0sIGVbciArIDE2ID4+IDJdID0gZiA+Pj4gMCA8IGEgPj4+IDAgPyBmIDogYSwgciA9IHIgKyAxNDggfCAwLCBpID0gaSArIDEgfCAwLCBBID0gQSArIDEgfCAwLCAodCB8IDApICE9IChBIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICBlW2sgKyA0MjAgPj4gMl0gPSB0IC0gMSwgQSA9IDE7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBYID0gbiArIDE2IHwgMCwgQSB8IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gdmkoQSkgewogICAgICAgICAgICAgIHZhciBpID0gMCwgciA9IDAsIGYgPSAwLCBrID0gMDsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAoIUEpCiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICBpZiAoaSA9IGVbQSArIDUxNjQgPj4gMl0sIGkpIHsKICAgICAgICAgICAgICAgICAgaWYgKHIgPSBlW0EgKyA1MTYwID4+IDJdLCByKSB7CiAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgZiA9IGVbZVtBICsgNTE2NCA+PiAyXSArIChpIDw8IDMpID4+IDJdLCBmICYmIChSKGYpLCByID0gZVtBICsgNTE2MCA+PiAyXSksIGkgPSBpICsgMSB8IDAsIHIgPj4+IDAgPiBpID4+PiAwOyApCiAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgaSA9IGVbQSArIDUxNjQgPj4gMl07CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZVtBICsgNTE2MCA+PiAyXSA9IDAsIFIoaSksIGVbQSArIDUxNjQgPj4gMl0gPSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGkgPSBlW0EgKyA1MTcyID4+IDJdLCBpICYmIChSKGkpLCBlW0EgKyA1MTcyID4+IDJdID0gMCksIGkgPSBlW0EgKyA1NTg0ID4+IDJdLCBpICYmIChSKGkpLCBlW0EgKyA1NTg0ID4+IDJdID0gMCksIGkgPSBlW0EgKyA1NjEyID4+IDJdLCBpICYmIChSKGkpLCBlW0EgKyA1NjEyID4+IDJdID0gMCksIGkgPSBlW0EgKyA1NjA4ID4+IDJdLCBpICYmIChSKGkpLCBlW0EgKyA1NjA4ID4+IDJdID0gMCksIGkgPSBlW0EgKyA1NjI4ID4+IDJdLCBpICYmIChSKGkpLCBlW0EgKyA1NjM2ID4+IDJdID0gMCwgZVtBICsgNTYyOCA+PiAyXSA9IDAsIGVbQSArIDU2MzIgPj4gMl0gPSAwKSwgaSA9IGVbQSArIDU2MTYgPj4gMl0sIGkpIHsKICAgICAgICAgICAgICAgICAgaWYgKGsgPSBlW0EgKyA1NjIwID4+IDJdLCBrKSB7CiAgICAgICAgICAgICAgICAgICAgZm9yIChyID0gMDsgZiA9IGVbaSArIDEyID4+IDJdLCBmICYmIChSKGYpLCBlW2kgKyAxMiA+PiAyXSA9IDAsIGsgPSBlW0EgKyA1NjIwID4+IDJdKSwgaSA9IGkgKyAyMCB8IDAsIHIgPSByICsgMSB8IDAsIGsgPj4+IDAgPiByID4+PiAwOyApCiAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgaSA9IGVbQSArIDU2MTYgPj4gMl07CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgUihpKSwgZVtBICsgNTYxNiA+PiAyXSA9IDA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoaSA9IGVbQSArIDU2MDQgPj4gMl0sIGkgJiYgKFIoaSksIGVbQSArIDU2MDQgPj4gMl0gPSAwKSwgaSA9IGVbQSArIDU1OTYgPj4gMl0sICFpKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgUihpKSwgZVtBICsgNTU5NiA+PiAyXSA9IDAsIGVbQSArIDU2MDAgPj4gMl0gPSAwOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBWayhBLCBpKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDA7CiAgICAgICAgICAgICAgdmFyIHIgPSAwLCBmID0gMCwgayA9IDAsIHQgPSAwLCBuID0gMCwgbCA9IDA7CiAgICAgICAgICAgICAgaWYgKGYgPSBYIC0gMTYgfCAwLCBYID0gZiwgIUlbNDk5MzJdKSB7CiAgICAgICAgICAgICAgICBpZiAoRls0OTkzMl0gPSAxLCBuID0gNDk4NzIsIGwgPSB4QSgxMDgzKSB8IDAsIGVbbiA+PiAyXSA9IGwsIGVbMTI0NjddID0gNTA2NTYsICFJWzUyMzMyXSkgewogICAgICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoayA9IHIgKyA1MDAxNiB8IDAsICFJW2sgfCAwXSkgewogICAgICAgICAgICAgICAgICAgICAgICBGW2sgfCAwXSA9IDEsIGVbKHIgPDwgMikgKyA1MDE0NCA+PiAyXSA9IDAsIGVbMTMwODRdID0gciwgciA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBpZiAociA9IHIgKyAxIHwgMCwgKHIgfCAwKSA9PSAxMjgpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByID0gNjsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICByICYmIChaZigpLCBVMCgpKSwgRls1MjMzMl0gPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgICBpZiAoIUlbNTIzMzNdKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSAyOCwgayA9IGVbMTMwODRdLCBrID4+PiAwID4gMTI3IHwgSVtrICsgNTAwMTYgfCAwXSAhPSAxIHx8IChlWyhrIDw8IDIpICsgNTAxNDQgPj4gMl0gPSA1MjMzNiwgciA9IDApLCByKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICBGWzUyMzMzXSA9IDE7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKHIgPSB2MSgxMiksICFyKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIGVbciArIDQgPj4gMl0gPSAwLCBlW3IgPj4gMl0gPSAyLCBlW3IgKyA4ID4+IDJdID0gZVsxMzA4NV0sIGVbMTMwODVdID0gcjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgciA9IGVbaSArIDE2ID4+IDJdLCBpID0gZVtpICsgMTIgPj4gMl0sIGVbZiArIDEyID4+IDJdID0gaSwgZVtmICsgOCA+PiAyXSA9IHIgLSBpLCBlW2YgKyA0ID4+IDJdID0gMDsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAoRls0OTkyOF0gJiAxKSB7CiAgICAgICAgICAgICAgICAgIGkgPSBlWzEyNDgxXTsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGkgPSBOQSgyLCAzMDA0MCwgMSkgfCAwLCBGWzQ5OTI4XSA9IDEsIGVbMTI0ODFdID0gaTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgdCA9ICtTQShpIHwgMCwgZVsxMjQ2OF0sIGYgKyA0IHwgMCwgZiArIDggfCAwKTsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAodCA8IDQyOTQ5NjcyOTYgJiB0ID49IDApIHsKICAgICAgICAgICAgICAgICAgaSA9IH5+dCA+Pj4gMDsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGkgPSAwOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByID0gZVtmICsgNCA+PiAyXSwgZVtBICsgNCA+PiAyXSA9IGksIGVbQSA+PiAyXSA9IDUwNjU2LCByICYmIE1BKHIgfCAwKSwgWCA9IGYgKyAxNiB8IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gbjYoQSwgaSwgciwgZikgewogICAgICAgICAgICAgIHZhciBrID0gMCwgdCA9IDAsIG4gPSAwLCBsID0gMCwgYSA9IDAsIHUgPSAwLCBvID0gMDsKICAgICAgICAgICAgICBpZiAoYSA9IFoociwgNTY0NCkgKyBpIHwgMCwgbCA9IGVbYSArIDQyMCA+PiAyXSwgaSA9IGwgKyAxIHwgMCwgbiA9IEUyKGksIDI0MCksIG4pIHsKICAgICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgICAgaWYgKGkpCiAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gZVtBICsgMTYgPj4gMl0sIGsgPSBuOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgaWYgKGVbayArIDIzNiA+PiAyXSA9IGYsIGkgPSBFMihpLCAxNiksIGVbayArIDIwMCA+PiAyXSA9IGksICFpKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSBlW0EgKyAxNiA+PiAyXSwgZVtrICsgMTk2ID4+IDJdID0gdCwgciA9IDAsIGkgPSAwLCB0KQogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodSA9IGVbayArIDIwMCA+PiAyXSArIChyIDw8IDQpIHwgMCwgdCA9IGVbYSArIDU1ODQgPj4gMl0gKyBaKHIsIDEwODApIHwgMCwgaSA9IEUyKGVbdCArIDQgPj4gMl0sIDE2KSwgZVt1ICsgMTIgPj4gMl0gPSBpLCAhaSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbdSArIDggPj4gMl0gPSBlW3QgKyA0ID4+IDJdLCBpID0gZVtBICsgMTYgPj4gMl0sIHIgPSByICsgMSB8IDAsICEoaSA+Pj4gMCA+IHIgPj4+IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlmIChrID0gayArIDI0MCB8IDAsIHIgPSAobCB8IDApID09IChvIHwgMCksIG8gPSBvICsgMSB8IDAsICEhcikKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICByZXR1cm4gbjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZvciAoQSA9IGVbbiArIDQgPj4gMl0sIEEgJiYgKFIoQSksIGVbbiArIDQgPj4gMl0gPSAwKSwgayA9IG4sIEEgPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICBpZiAociA9IGVbayArIDIwMCA+PiAyXSwgcikgewogICAgICAgICAgICAgICAgICAgIGlmIChpID0gMCwgdCA9IGVbayArIDE5NiA+PiAyXSwgdCkgewogICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGYgPSBlW3IgKyAxMiA+PiAyXSwgZiAmJiAoUihmKSwgZVtyICsgMTIgPj4gMl0gPSAwLCB0ID0gZVtrICsgMTk2ID4+IDJdKSwgciA9IHIgKyAxNiB8IDAsIGkgPSBpICsgMSB8IDAsIHQgPj4+IDAgPiBpID4+PiAwOyApCiAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgIHIgPSBlW2sgKyAyMDAgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIFIociksIGVbayArIDIwMCA+PiAyXSA9IDA7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKGsgPSBrICsgMjQwIHwgMCwgaSA9IChBIHwgMCkgPT0gKGwgfCAwKSwgQSA9IEEgKyAxIHwgMCwgISFpKQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgUihuKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gWWsoQSwgaSwgciwgZikgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDAsIGYgPSBmIHwgMDsKICAgICAgICAgICAgICB2YXIgayA9IDAsIHQgPSAwLCBuID0gMDsKICAgICAgICAgICAgICBrID0gWCAtIDMyIHwgMCwgWCA9IGs7CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKGVbQSArIDcyID4+IDJdKSB7CiAgICAgICAgICAgICAgICAgIFEoZiwgMiwgMTY2MTgsIDApLCByID0gMTsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICgociB8IDApICE9IDE0KSB7CiAgICAgICAgICAgICAgICAgIHIgPSAwLCBRKGYsIDEsIDI1OTg2LCAwKTsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGgyKGksIEEgKyAxNiB8IDAsIDQpLCBoMihpICsgNCB8IDAsIEEgKyAxMiB8IDAsIDQpLCBoMihpICsgOCB8IDAsIEEgKyAyMCB8IDAsIDIpLCB0ID0gZVtBICsgMTIgPj4gMl07CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIG4gPSBlW0EgKyAxNiA+PiAyXSwgciA9IGVbQSArIDIwID4+IDJdOwogICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFuIHx8IChyID0gZVtBICsgMjAgPj4gMl0sICF0KSkKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgaWYgKHIpCiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgIHIgPSAwOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVbayArIDggPj4gMl0gPSByLCBlW2sgKyA0ID4+IDJdID0gbiwgZVtrID4+IDJdID0gdCwgUShmLCAxLCAyNTY0NCwgayksIHIgPSAwOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHIgLSAxNjM4NSA+Pj4gMCA8PSA0Mjk0OTUwOTExKSB7CiAgICAgICAgICAgICAgICAgIHIgPSAwLCBRKGYsIDEsIDI1NTU4LCAwKTsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChyID0gRTIociwgMTIpLCBlW0EgKyA3MiA+PiAyXSA9IHIsICFyKSB7CiAgICAgICAgICAgICAgICAgIHIgPSAwLCBRKGYsIDEsIDI1NTk1LCAwKTsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHIgPSAxLCBoMihpICsgMTAgfCAwLCBBICsgMjQgfCAwLCAxKSwgaDIoaSArIDExIHwgMCwgQSArIDI4IHwgMCwgMSksIHQgPSBlW0EgKyAyOCA+PiAyXSwgKHQgfCAwKSAhPSA3ICYmIChlW2sgKyAxNiA+PiAyXSA9IHQsIFEoZiwgNCwgMjg2MjIsIGsgKyAxNiB8IDApKSwgaDIoaSArIDEyIHwgMCwgQSArIDMyIHwgMCwgMSksIGgyKGkgKyAxMyB8IDAsIEEgKyAzNiB8IDAsIDEpLCBpID0gZVtBID4+IDJdLCBGW2kgKyAxODggfCAwXSA9IElbaSArIDE4OCB8IDBdICYgMjUxIHwgKGVbQSArIDI0ID4+IDJdID09IDI1NSkgPDwgMiwgaSA9IGVbQSA+PiAyXSwgZVtpICsgMjE2ID4+IDJdID0gZVtBICsgMTIgPj4gMl0sIGVbaSArIDIyMCA+PiAyXSA9IGVbQSArIDE2ID4+IDJdLCBGW0EgKyAxMzMgfCAwXSA9IDE7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBYID0gayArIDMyIHwgMCwgciB8IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gSGsoQSwgaSwgcikgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDA7CiAgICAgICAgICAgICAgdmFyIGYgPSAwLCBrID0gMCwgdCA9IDAsIG4gPSAwLCBsID0gMCwgYSA9IDAsIHUgPSAwOwogICAgICAgICAgICAgIHQgPSBYIC0gMzIgfCAwLCBYID0gdCwgZiA9IGVbQSArIDI4ID4+IDJdLCBlW3QgKyAxNiA+PiAyXSA9IGYsIG4gPSBlW0EgKyAyMCA+PiAyXSwgZVt0ICsgMjggPj4gMl0gPSByLCBlW3QgKyAyNCA+PiAyXSA9IGksIGkgPSBuIC0gZiB8IDAsIGVbdCArIDIwID4+IDJdID0gaSwgbiA9IGkgKyByIHwgMCwgYSA9IDI7CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICBpID0gdCArIDE2IHwgMCwgZiA9IEI0KGVbQSArIDYwID4+IDJdLCBpIHwgMCwgMiwgdCArIDEyIHwgMCkgfCAwLCBmID8gKGVbMTI0ODVdID0gZiwgZiA9IC0xKSA6IGYgPSAwOwogICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgazogewogICAgICAgICAgICAgICAgICAgICAgaWYgKGYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZiA9IGk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPSBlW3QgKyAxMiA+PiAyXSwgKGsgfCAwKSA9PSAobiB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoayB8IDApIDwgMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBpOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPSBlW2kgKyA0ID4+IDJdLCB1ID0gbCA+Pj4gMCA8IGsgPj4+IDAsIGYgPSAodSA8PCAzKSArIGkgfCAwLCBsID0gayAtICh1ID8gbCA6IDApIHwgMCwgZVtmID4+IDJdID0gbCArIGVbZiA+PiAyXSwgaSA9ICh1ID8gMTIgOiA0KSArIGkgfCAwLCBlW2kgPj4gMl0gPSBlW2kgPj4gMl0gLSBsLCBuID0gbiAtIGsgfCAwLCBpID0gZiwgYSA9IGEgLSB1IHwgMCwgayA9IEI0KGVbQSArIDYwID4+IDJdLCBpIHwgMCwgYSB8IDAsIHQgKyAxMiB8IDApIHwgMCwgayA/IChlWzEyNDg1XSA9IGssIGsgPSAtMSkgOiBrID0gMCwgISFrKQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoKG4gfCAwKSAhPSAtMSkKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaSA9IGVbQSArIDQ0ID4+IDJdLCBlW0EgKyAyOCA+PiAyXSA9IGksIGVbQSArIDIwID4+IDJdID0gaSwgZVtBICsgMTYgPj4gMl0gPSBpICsgZVtBICsgNDggPj4gMl0sIEEgPSByOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGVbQSArIDI4ID4+IDJdID0gMCwgZVtBICsgMTYgPj4gMl0gPSAwLCBlW0EgKyAyMCA+PiAyXSA9IDAsIGVbQSA+PiAyXSA9IGVbQSA+PiAyXSB8IDMyLCBBID0gMCwgKGEgfCAwKSA9PSAyKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgQSA9IHIgLSBlW2YgKyA0ID4+IDJdIHwgMDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIFggPSB0ICsgMzIgfCAwLCBBIHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBMMChBLCBpLCByLCBmKSB7CiAgICAgICAgICAgICAgdmFyIGsgPSAwLCB0ID0gMCwgbiA9IDAsIGwgPSAwLCBhID0gMDsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIGlmIChJW0EgKyA2OCB8IDBdICYgOCkKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICBpZiAobCA9IGVbQSArIDY0ID4+IDJdLCBuID0gZVtBICsgNDggPj4gMl0sIGsgPSBsIC0gbiB8IDAsIGsgPj4+IDAgPj0gciA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgIHQgPSBlW0EgKyAzNiA+PiAyXTsKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICAgIGlmICgobiB8IDApICE9IChsIHwgMCkgJiYgKEYyKGVbQSArIDM2ID4+IDJdLCBpLCBrKSwgbiA9IGVbQSArIDQ4ID4+IDJdICsgayB8IDAsIGVbQSArIDQ4ID4+IDJdID0gbiwgdCA9IGVbQSArIDYwID4+IDJdLCBsID0gZVtBICsgNTYgPj4gMl0gKyBrIHwgMCwgdCA9IGwgPj4+IDAgPCBrID4+PiAwID8gdCArIDEgfCAwIDogdCwgZVtBICsgNTYgPj4gMl0gPSBsLCBlW0EgKyA2MCA+PiAyXSA9IHQsIHIgPSByIC0gayB8IDAsIGEgPSBrICsgYSB8IDAsIGkgPSBpICsgayB8IDApLCB0ID0gZVtBICsgMzIgPj4gMl0sIGVbQSArIDM2ID4+IDJdID0gdCwgbikgewogICAgICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrID0gbzJbZVtBICsgMjAgPj4gMl1dKHQsIG4sIGVbQSA+PiAyXSkgfCAwLCAoayB8IDApID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZVtBICsgNjggPj4gMl0gPSBlW0EgKyA2OCA+PiAyXSB8IDgsIFEoZiwgNCwgMjc1OTksIDApOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSBrICsgZVtBICsgMzYgPj4gMl0gfCAwLCBlW0EgKyAzNiA+PiAyXSA9IHQsIG4gPSBlW0EgKyA0OCA+PiAyXSAtIGsgfCAwLCBlW0EgKyA0OCA+PiAyXSA9IG4sICFuKQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgdCA9IGVbQSArIDMyID4+IDJdOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoZVtBICsgMzYgPj4gMl0gPSB0LCBuID0gMCwgayA9IGVbQSArIDY0ID4+IDJdLCBsID0gaywgIShyID4+PiAwID4gayA+Pj4gMCkpCiAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gRjIodCwgaSwgciksIGVbQSArIDM2ID4+IDJdID0gZVtBICsgMzYgPj4gMl0gKyByLCBlW0EgKyA0OCA+PiAyXSA9IGVbQSArIDQ4ID4+IDJdICsgciwgaSA9IGVbQSArIDYwID4+IDJdLCBmID0gZVtBICsgNTYgPj4gMl0gKyByIHwgMCwgaSA9IGYgPj4+IDAgPCByID4+PiAwID8gaSArIDEgfCAwIDogaSwgZVtBICsgNTYgPj4gMl0gPSBmLCBlW0EgKyA2MCA+PiAyXSA9IGksIHIgKyBhIHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiB0NigpIHsKICAgICAgICAgICAgICBVQSg0ODkxMiwgMjE2MyksIERBKDQ4OTM2LCAxNzc3LCAxLCAwKSwgZDEoNDg5NDgsIDE2NDEsIDEsIC0xMjgsIDEyNyksIGQxKDQ4OTcyLCAxNjM0LCAxLCAtMTI4LCAxMjcpLCBkMSg0ODk2MCwgMTYzMiwgMSwgMCwgMjU1KSwgZDEoNDg5ODQsIDExMzksIDIsIC0zMjc2OCwgMzI3NjcpLCBkMSg0ODk5NiwgMTEzMCwgMiwgMCwgNjU1MzUpLCBkMSg0OTAwOCwgMTE3NSwgNCwgLTIxNDc0ODM2NDgsIDIxNDc0ODM2NDcpLCBkMSg0OTAyMCwgMTE2NiwgNCwgMCwgLTEpLCBkMSg0OTAzMiwgMTk1MywgNCwgLTIxNDc0ODM2NDgsIDIxNDc0ODM2NDcpLCBkMSg0OTA0NCwgMTk0NCwgNCwgMCwgLTEpLCBzZig0OTA1NiwgMTI2MywgLTIxNDc0ODM2NDgsIDIxNDc0ODM2NDcpLCBzZig0OTA2OCwgMTI2MiwgMCwgLTEpLCB2NCg0OTA4MCwgMTI1NiwgNCksIHY0KDQ5MDkyLCAyMDgyLCA4KSwgRUEoMjk3MDQsIDE5ODQpLCBpcigyODk5NiwgNCwgMTk1OCksIGlyKDI5MDY4LCAyLCAxOTk2KSwgaXIoMjkxNDQsIDQsIDIwMTEpLCBSQSgyOTk1NiksIGUxKDI5MjIwLCAwLCAyOTU5KSwgZTEoMjkyNjAsIDAsIDMwMjgpLCBlMSgyOTk4OCwgMSwgMjk4OSksIGUxKDI5MzAwLCAyLCAyNTI0KSwgZTEoMjkzNDAsIDMsIDI1NTUpLCBlMSgyOTM4MCwgNCwgMjU5NSksIGUxKDI5NDIwLCA1LCAyNjI0KSwgZTEoMjk0NjAsIDQsIDMwNjUpLCBlMSgyOTUwMCwgNSwgMzA5NSksIGUxKDI5MjYwLCAwLCAyNzI2KSwgZTEoMjk5ODgsIDEsIDI2OTMpLCBlMSgyOTMwMCwgMiwgMjc5MiksIGUxKDI5MzQwLCAzLCAyNzU4KSwgZTEoMjkzODAsIDQsIDI5MjYpLCBlMSgyOTQyMCwgNSwgMjg5MiksIGUxKDI5NTQwLCA4LCAyODU5KSwgZTEoMjk1ODAsIDksIDI4MjUpLCBlMSgyOTYyMCwgNiwgMjY2MiksIGUxKDI5NjYwLCA3LCAzMTM0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBYayhBLCBpLCByKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDAsIHIgPSByIHwgMDsKICAgICAgICAgICAgICB2YXIgZiA9IDAsIGsgPSAwLCB0ID0gMCwgbiA9IDAsIGwgPSAwOwogICAgICAgICAgICAgIGlmIChmID0gZVtBICsgNTIgPj4gMl0sIGsgPSBlW0EgKyA3MiA+PiAyXSwgdCA9IGVbayArIDI0ID4+IDJdLCBuID0gWihlW2sgKyAxNiA+PiAyXSwgMyksIGwgPSBuICsgNDAgfCAwLCBsID4+PiAwID4gZFtBICsgNTYgPj4gMl0pIHsKICAgICAgICAgICAgICAgIGlmIChmID0gbzAoZiwgbCksICFmKQogICAgICAgICAgICAgICAgICByZXR1cm4gUihlW0EgKyA1MiA+PiAyXSksIGVbQSArIDUyID4+IDJdID0gMCwgZVtBICsgNTYgPj4gMl0gPSAwLCBRKHIsIDEsIDY0NDYsIDApLCAwOwogICAgICAgICAgICAgICAgZVtBICsgNTYgPj4gMl0gPSBsLCBlW0EgKyA1MiA+PiAyXSA9IGY7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChrMihmLCA2NTM2MSwgMiksIGsyKGYgKyAyIHwgMCwgbiArIDM4IHwgMCwgMiksIGsyKGYgKyA0IHwgMCwgRzJbQSArIDgwID4+IDFdLCAyKSwgazIoZiArIDYgfCAwLCBlW2sgKyA4ID4+IDJdLCA0KSwgazIoZiArIDEwIHwgMCwgZVtrICsgMTIgPj4gMl0sIDQpLCBrMihmICsgMTQgfCAwLCBlW2sgPj4gMl0sIDQpLCBrMihmICsgMTggfCAwLCBlW2sgKyA0ID4+IDJdLCA0KSwgazIoZiArIDIyIHwgMCwgZVtBICsgOTIgPj4gMl0sIDQpLCBrMihmICsgMjYgfCAwLCBlW0EgKyA5NiA+PiAyXSwgNCksIGsyKGYgKyAzMCB8IDAsIGVbQSArIDg0ID4+IDJdLCA0KSwgazIoZiArIDM0IHwgMCwgZVtBICsgODggPj4gMl0sIDQpLCBrMihmICsgMzggfCAwLCBlW2sgKyAxNiA+PiAyXSwgMiksIGVbayArIDE2ID4+IDJdKQogICAgICAgICAgICAgICAgZm9yIChmID0gZiArIDQwIHwgMCwgbiA9IDA7IGsyKGYsIChlW3QgKyAyNCA+PiAyXSArIChlW3QgKyAzMiA+PiAyXSA8PCA3KSB8IDApIC0gMSB8IDAsIDEpLCBrMihmICsgMSB8IDAsIGVbdCA+PiAyXSwgMSksIGsyKGYgKyAyIHwgMCwgZVt0ICsgNCA+PiAyXSwgMSksIHQgPSB0ICsgNTIgfCAwLCBmID0gZiArIDMgfCAwLCBuID0gbiArIDEgfCAwLCBuID4+PiAwIDwgZFtrICsgMTYgPj4gMl07ICkKICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgIHJldHVybiAoTDAoaSwgZVtBICsgNTIgPj4gMl0sIGwsIHIpIHwgMCkgPT0gKGwgfCAwKSB8IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gbDYoQSwgaSwgciwgZikgewogICAgICAgICAgICAgIGU6CiAgICAgICAgICAgICAgICBzd2l0Y2ggKGkgLSA5IHwgMCkgewogICAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgICAgaSA9IGVbciA+PiAyXSwgZVtyID4+IDJdID0gaSArIDQsIGVbQSA+PiAyXSA9IGVbaSA+PiAyXTsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgIGNhc2UgNjoKICAgICAgICAgICAgICAgICAgICBpID0gZVtyID4+IDJdLCBlW3IgPj4gMl0gPSBpICsgNCwgaSA9IHUyW2kgPj4gMV0sIGVbQSA+PiAyXSA9IGksIGVbQSArIDQgPj4gMl0gPSBpID4+IDMxOwogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgY2FzZSA3OgogICAgICAgICAgICAgICAgICAgIGkgPSBlW3IgPj4gMl0sIGVbciA+PiAyXSA9IGkgKyA0LCBlW0EgPj4gMl0gPSBHMltpID4+IDFdLCBlW0EgKyA0ID4+IDJdID0gMDsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgIGNhc2UgODoKICAgICAgICAgICAgICAgICAgICBpID0gZVtyID4+IDJdLCBlW3IgPj4gMl0gPSBpICsgNCwgaSA9IEZbaSB8IDBdLCBlW0EgPj4gMl0gPSBpLCBlW0EgKyA0ID4+IDJdID0gaSA+PiAzMTsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgIGNhc2UgOToKICAgICAgICAgICAgICAgICAgICBpID0gZVtyID4+IDJdLCBlW3IgPj4gMl0gPSBpICsgNCwgZVtBID4+IDJdID0gSVtpIHwgMF0sIGVbQSArIDQgPj4gMl0gPSAwOwogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgY2FzZSAxNjoKICAgICAgICAgICAgICAgICAgICBpID0gZVtyID4+IDJdICsgNyAmIC04LCBlW3IgPj4gMl0gPSBpICsgOCwgUTJbQSA+PiAzXSA9IFEyW2kgPj4gM107CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICBjYXNlIDE3OgogICAgICAgICAgICAgICAgICAgIG8yW2YgfCAwXShBLCByKTsKICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgICAgY2FzZSA0OgogICAgICAgICAgICAgICAgICBjYXNlIDE0OgogICAgICAgICAgICAgICAgICAgIGkgPSBlW3IgPj4gMl0sIGVbciA+PiAyXSA9IGkgKyA0LCBpID0gZVtpID4+IDJdLCBlW0EgPj4gMl0gPSBpLCBlW0EgKyA0ID4+IDJdID0gaSA+PiAzMTsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICAgICAgY2FzZSA1OgogICAgICAgICAgICAgICAgICBjYXNlIDExOgogICAgICAgICAgICAgICAgICBjYXNlIDE1OgogICAgICAgICAgICAgICAgICAgIGkgPSBlW3IgPj4gMl0sIGVbciA+PiAyXSA9IGkgKyA0LCBlW0EgPj4gMl0gPSBlW2kgPj4gMl0sIGVbQSArIDQgPj4gMl0gPSAwOwogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgY2FzZSAzOgogICAgICAgICAgICAgICAgICBjYXNlIDEwOgogICAgICAgICAgICAgICAgICBjYXNlIDEyOgogICAgICAgICAgICAgICAgICBjYXNlIDEzOgogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaSA9IGVbciA+PiAyXSArIDcgJiAtOCwgZVtyID4+IDJdID0gaSArIDgsIHIgPSBlW2kgKyA0ID4+IDJdLCBlW0EgPj4gMl0gPSBlW2kgPj4gMl0sIGVbQSArIDQgPj4gMl0gPSByOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIGdyKEEpIHsKICAgICAgICAgICAgICB2YXIgaSA9IDAsIHIgPSAwLCBmID0gMCwgayA9IDAsIHQgPSAwLCBuID0gMDsKICAgICAgICAgICAgICBpZiAobiA9IFggLSAxNiB8IDAsIFggPSBuLCBBKSB7CiAgICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICAgIGlmICghZVtBICsgOCA+PiAyXSkKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICBpZiAoZVtBICsgMTIgPj4gMl0gJiYgKGVbQSArIDQwID4+IDJdID0gMCwgZVtBICsgMjQgPj4gMl0gPiAwKSkKICAgICAgICAgICAgICAgICAgICBmb3IgKDsgZVtBICsgMjQgPj4gMl0gPiAwOyApCiAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgIGlmIChlW0EgKyAxNiA+PiAyXSA9IDEsIGVbQSArIDQgPj4gMl0gPiAwKQogICAgICAgICAgICAgICAgICAgIGZvciAoOyBmID0gWihpLCAyMCksIFIoZVsoZiArIGVbQSA+PiAyXSB8IDApICsgNCA+PiAyXSksIHIgPSBlW0EgPj4gMl0sIGsgPSBlWyhyICsgZiB8IDApICsgMTYgPj4gMl0sIGsgJiYgKFIoayksIHIgPSBlW0EgPj4gMl0pLCByID0gZVsociArIGYgfCAwKSArIDEyID4+IDJdLCByICYmIFIociksIGkgPSBpICsgMSB8IDAsIChpIHwgMCkgPCBlW0EgKyA0ID4+IDJdOyApCiAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgIGlmIChSKGVbQSA+PiAyXSksIGkgPSBlW0EgKyAyOCA+PiAyXSwgaSkKICAgICAgICAgICAgICAgICAgICBmb3IgKDsgciA9IGVbaSArIDQgPj4gMl0sIFIoaSksIGVbQSArIDI4ID4+IDJdID0gciwgaSA9IHIsICEhaTsgKQogICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICBpZiAoaSA9IGVbQSArIDggPj4gMl0sICFpKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIFIoaSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoaSA9IGVbQSArIDEyID4+IDJdLCBpICYmIFIoaSksIGkgPSBlW0EgKyAzNiA+PiAyXSwgaSkgewogICAgICAgICAgICAgICAgICBpZiAociA9IGVbaSArIDQgPj4gMl0sIChyIHwgMCkgPiAwKQogICAgICAgICAgICAgICAgICAgIGZvciAoOyBmID0gZVtpID4+IDJdICsgWih0LCAxMikgfCAwLCBrID0gZVtmICsgOCA+PiAyXSwgayAmJiAobzJbayB8IDBdKGVbZiArIDQgPj4gMl0pLCByID0gZVtpICsgNCA+PiAyXSksIHQgPSB0ICsgMSB8IDAsICh0IHwgMCkgPCAociB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgIFIoZVtpID4+IDJdKSwgUihpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIFIoQSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIFggPSBuICsgMTYgfCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIGE2KEEsIGksIHIsIGYsIGssIHQpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIGkgPSBpIHwgMCwgciA9IHIgfCAwLCBmID0gZiB8IDAsIGsgPSBrIHwgMCwgdCA9IHQgfCAwOwogICAgICAgICAgICAgIHZhciBuID0gMCwgbCA9IDAsIGEgPSAwOwogICAgICAgICAgICAgIGwgPSBYIC0gNDggfCAwLCBYID0gbDsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICBpZiAoZVtBICsgMjA0ID4+IDJdICE9IChpIHwgMCkpIHsKICAgICAgICAgICAgICAgICAgICAgIFEodCwgMSwgMzI3MiwgMCk7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoYSA9IGVbQSArIDEwOCA+PiAyXSwgbiA9IGVbQSArIDEwNCA+PiAyXSwgZVtsICsgMzIgPj4gMl0gPSBpICsgMSwgZVtsICsgMzYgPj4gMl0gPSBaKG4sIGEpLCBRKHQsIDQsIDE3ODY3LCBsICsgMzIgfCAwKSwgYSA9IDAsIGVbQSArIDEyID4+IDJdID0gMCwgbiA9IGVbQSArIDIwOCA+PiAyXSwgZVtuICsgMTIgPj4gMl0gPSBlWyhlW0EgKyAxNTYgPj4gMl0gKyBaKGksIDU2NDQpIHwgMCkgKyA1NTkyID4+IDJdLCBlW0EgKyA4ID4+IDJdID0gMCwgIUFyKG4sIGVbQSArIDIwNCA+PiAyXSwgMSwgNTIsIHQpKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICBrOiB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9IGVbQSArIDIwOCA+PiAyXSwgIWVbZVtuICsgMjQgPj4gMl0gKyAxNiA+PiAyXSkKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoSDYoZVtlW2VbbiArIDIwID4+IDJdID4+IDJdICsgMjAgPj4gMl0gKyBaKGEsIDc2KSB8IDApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEgPSBhICsgMSB8IDAsIG4gPSBlW0EgKyAyMDggPj4gMl0sIGEgPj4+IDAgPCBkW2VbbiArIDI0ID4+IDJdICsgMTYgPj4gMl0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgUSh0LCAxLCAzMzU2LCAwKSwgciA9IDA7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoIVE0KG4sIHIsIGYpKSB7CiAgICAgICAgICAgICAgICAgICAgICBRKHQsIDEsIDMzMDksIDApLCByID0gMDsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChyID0gMSwgTTQoQSwgaywgdCkpCiAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgIGVbbCArIDE2ID4+IDJdID0gaSwgUSh0LCAxLCAxNzc1MiwgbCArIDE2IHwgMCk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlW2wgPj4gMl0gPSBpLCBRKHQsIDEsIDE3ODEwLCBsKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHIgPSAwOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gWCA9IGwgKyA0OCB8IDAsIHIgfCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIHU2KEEsIGksIHIpIHsKICAgICAgICAgICAgICB2YXIgZiA9IDAsIGsgPSAwOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGlmICgoQSB8IDApID09IChpIHwgMCkpCiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICBpZiAoayA9IEEgKyByIHwgMCwgaSAtIGsgPj4+IDAgPD0gMCAtIChyIDw8IDEpID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgIEYyKEEsIGksIHIpOwogICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmID0gKEEgXiBpKSAmIDM7CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICBpZiAoQSA+Pj4gMCA8IGkgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChmKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgaWYgKCEoQSAmIDMpKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcikKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoRltBIHwgMF0gPSBJW2kgfCAwXSwgaSA9IGkgKyAxIHwgMCwgciA9IHIgLSAxIHwgMCwgQSA9IEEgKyAxIHwgMCwgIShBICYgMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBrOiB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoZikKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgIGlmIChrICYgMykKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9IHIgLSAxIHwgMCwgZiA9IHIgKyBBIHwgMCwgRltmIHwgMF0gPSBJW2kgKyByIHwgMF0sICEoZiAmIDMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlmIChyID4+PiAwIDw9IDMpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgciA9IHIgLSA0IHwgMCwgZVtyICsgQSA+PiAyXSA9IGVbaSArIHIgPj4gMl0sIHIgPj4+IDAgPiAzOyApCiAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKCFyKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICBmb3IgKDsgciA9IHIgLSAxIHwgMCwgRltyICsgQSB8IDBdID0gSVtpICsgciB8IDBdLCAhIXI7ICkKICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChyID4+PiAwIDw9IDMpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgZm9yICg7IGVbQSA+PiAyXSA9IGVbaSA+PiAyXSwgaSA9IGkgKyA0IHwgMCwgQSA9IEEgKyA0IHwgMCwgciA9IHIgLSA0IHwgMCwgciA+Pj4gMCA+IDM7ICkKICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoIXIpCiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICBmb3IgKDsgRltBIHwgMF0gPSBJW2kgfCAwXSwgQSA9IEEgKyAxIHwgMCwgaSA9IGkgKyAxIHwgMCwgciA9IHIgLSAxIHwgMCwgISFyOyApCiAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gRmsoKSB7CiAgICAgICAgICAgICAgdmFyIEEgPSAwLCBpID0gMCwgciA9IDA7CiAgICAgICAgICAgICAgQSA9IFggLSAxNiB8IDAsIFggPSBBOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGlmIChYQShBICsgMTIgfCAwLCBBICsgOCB8IDApIHwgMCB8fCAoaSA9IHYxKChlW0EgKyAxMiA+PiAyXSA8PCAyKSArIDQgfCAwKSwgZVsxMjQ4Nl0gPSBpLCAhaSkgfHwgKGkgPSB2MShlW0EgKyA4ID4+IDJdKSwgaSAmJiAociA9IGVbMTI0ODZdLCBlW3IgKyAoZVtBICsgMTIgPj4gMl0gPDwgMikgPj4gMl0gPSAwLCAhKEhBKHIgfCAwLCBpIHwgMCkgfCAwKSkpKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgZVsxMjQ4Nl0gPSAwOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBYID0gQSArIDE2IHwgMCwgZVsxMjQ2NV0gPSAxLCBlWzEyNDY2XSA9IDAsIHQ2KCksIGVbMTI0NjZdID0gZVsxMjQ2NF0sIGVbMTI0NjRdID0gNDk4NjAsIGVbMTI0NjldID0gOTMsIGVbMTI0NzBdID0gMCwgYzQoMTc2MiwgMSwgMjk3MDAsIDI5Nzc1LCAzLCA0LCAwLCAwKSwgZVsxMjQ3MF0gPSBlWzEyNDY0XSwgZVsxMjQ2NF0gPSA0OTg3NiwgZVsxMjQ3MV0gPSA5NCwgZVsxMjQ3Ml0gPSAwLCBaNigpLCBlWzEyNDcyXSA9IGVbMTI0NjRdLCBlWzEyNDY0XSA9IDQ5ODg0LCBlWzEyNDczXSA9IDk1LCBlWzEyNDc0XSA9IDAsIFU2KCksIGVbMTI0NzRdID0gZVsxMjQ2NF0sIGVbMTI0NjRdID0gNDk4OTIsIGVbMTI0NzVdID0gOTYsIGVbMTI0NzZdID0gMCwgTTYoKSwgZVsxMjQ3Nl0gPSBlWzEyNDY0XSwgZVsxMjQ2NF0gPSA0OTkwMCwgZVsxMjQ3N10gPSA5NywgZVsxMjQ3OF0gPSAwLCBiNCgpLCBlWzEyNDc4XSA9IGVbMTI0NjRdLCBlWzEyNDY0XSA9IDQ5OTA4LCBlWzEyNDc5XSA9IDk4LCBlWzEyNDgwXSA9IDAsIEE2KCksIGVbMTI0ODBdID0gZVsxMjQ2NF0sIGVbMTI0NjRdID0gNDk5MTYsIGVbMTI2ODhdID0gNDk5ODAsIGVbMTI2NzBdID0gNDI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gSmsoQSwgaSwgciwgZikgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDAsIGYgPSBmIHwgMDsKICAgICAgICAgICAgICB2YXIgayA9IDAsIHQgPSAwLCBuID0gMCwgbCA9IDA7CiAgICAgICAgICAgICAgbiA9IFggLSAxNiB8IDAsIFggPSBuOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGlmIChyID4+PiAwIDw9IDEpIHsKICAgICAgICAgICAgICAgICAgUShmLCAxLCA2OTYwLCAwKSwgQSA9IDA7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBGW0EgKyAxODggfCAwXSA9IElbQSArIDE4OCB8IDBdIHwgMSwgaDIoaSwgbiArIDEyIHwgMCwgMSksIGsgPSBlW0EgKyAxMTYgPj4gMl07CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIGlmICghaykgewogICAgICAgICAgICAgICAgICAgIGlmICh0ID0gZVtuICsgMTIgPj4gMl0gKyAxIHwgMCwgayA9IEUyKHQsIDgpLCBlW0EgKyAxMTYgPj4gMl0gPSBrLCAhaykgewogICAgICAgICAgICAgICAgICAgICAgUShmLCAxLCA2OTg2LCAwKSwgQSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlW0EgKyAxMTIgPj4gMl0gPSB0OwogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKHQgPSBlW24gKyAxMiA+PiAyXSwgdCA+Pj4gMCA8IGRbQSArIDExMiA+PiAyXSkKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICBpZiAobCA9IGssIGsgPSB0ICsgMSB8IDAsIHQgPSBvMChsLCBrIDw8IDMpLCAhdCkgewogICAgICAgICAgICAgICAgICAgIFEoZiwgMSwgNjk4NiwgMCksIEEgPSAwOwogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZVtBICsgMTE2ID4+IDJdID0gdCwgbCA9IGVbQSArIDExMiA+PiAyXSwgZDIodCArIChsIDw8IDMpIHwgMCwgMCwgayAtIGwgPDwgMyksIGVbQSArIDExMiA+PiAyXSA9IGssIGsgPSBlW0EgKyAxMTYgPj4gMl07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAobCA9IGssIGsgPSBlW24gKyAxMiA+PiAyXSwgZVtsICsgKGsgPDwgMykgPj4gMl0pIHsKICAgICAgICAgICAgICAgICAgZVtuID4+IDJdID0gaywgUShmLCAxLCAxNjY4OCwgbiksIEEgPSAwOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHIgPSByIC0gMSB8IDAsIGsgPSBVMihyKSwgQSA9IGVbQSArIDExNiA+PiAyXSwgdCA9IGVbbiArIDEyID4+IDJdLCBlW0EgKyAodCA8PCAzKSA+PiAyXSA9IGssICFrKSB7CiAgICAgICAgICAgICAgICAgIFEoZiwgMSwgNjk4NiwgMCksIEEgPSAwOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZVsoQSArICh0IDw8IDMpIHwgMCkgKyA0ID4+IDJdID0gciwgRjIoZVtBICsgKGVbbiArIDEyID4+IDJdIDw8IDMpID4+IDJdLCBpICsgMSB8IDAsIHIpLCBBID0gMTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIFggPSBuICsgMTYgfCAwLCBBIHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBkMihBLCBpLCByKSB7CiAgICAgICAgICAgICAgdmFyIGYgPSAwLCBrID0gMCwgdCA9IDAsIG4gPSAwOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGlmICghciB8fCAoRltBIHwgMF0gPSBpLCBmID0gQSArIHIgfCAwLCBGW2YgLSAxIHwgMF0gPSBpLCByID4+PiAwIDwgMykgfHwgKEZbQSArIDIgfCAwXSA9IGksIEZbQSArIDEgfCAwXSA9IGksIEZbZiAtIDMgfCAwXSA9IGksIEZbZiAtIDIgfCAwXSA9IGksIHIgPj4+IDAgPCA3KSB8fCAoRltBICsgMyB8IDBdID0gaSwgRltmIC0gNCB8IDBdID0gaSwgciA+Pj4gMCA8IDkpIHx8IChmID0gMCAtIEEgJiAzLCBrID0gZiArIEEgfCAwLCBpID0gWihpICYgMjU1LCAxNjg0MzAwOSksIGVbayA+PiAyXSA9IGksIGYgPSByIC0gZiAmIC00LCByID0gZiArIGsgfCAwLCBlW3IgLSA0ID4+IDJdID0gaSwgZiA+Pj4gMCA8IDkpIHx8IChlW2sgKyA4ID4+IDJdID0gaSwgZVtrICsgNCA+PiAyXSA9IGksIGVbciAtIDggPj4gMl0gPSBpLCBlW3IgLSAxMiA+PiAyXSA9IGksIGYgPj4+IDAgPCAyNSkgfHwgKGVbayArIDI0ID4+IDJdID0gaSwgZVtrICsgMjAgPj4gMl0gPSBpLCBlW2sgKyAxNiA+PiAyXSA9IGksIGVbayArIDEyID4+IDJdID0gaSwgZVtyIC0gMTYgPj4gMl0gPSBpLCBlW3IgLSAyMCA+PiAyXSA9IGksIGVbciAtIDI0ID4+IDJdID0gaSwgZVtyIC0gMjggPj4gMl0gPSBpLCBuID0gayAmIDQgfCAyNCwgciA9IGYgLSBuIHwgMCwgciA+Pj4gMCA8IDMyKSkKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIGZvciAoZiA9IGQwKGksIDAsIDEsIDEpLCB0ID0gcTIsIGkgPSBrICsgbiB8IDA7IGVbaSArIDI0ID4+IDJdID0gZiwgZVtpICsgMjggPj4gMl0gPSB0LCBlW2kgKyAxNiA+PiAyXSA9IGYsIGVbaSArIDIwID4+IDJdID0gdCwgZVtpICsgOCA+PiAyXSA9IGYsIGVbaSArIDEyID4+IDJdID0gdCwgZVtpID4+IDJdID0gZiwgZVtpICsgNCA+PiAyXSA9IHQsIGkgPSBpICsgMzIgfCAwLCByID0gciAtIDMyIHwgMCwgciA+Pj4gMCA+IDMxOyApCiAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIEE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gUmsoQSwgaSwgciwgZiwgaykgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDAsIGYgPSBmIHwgMCwgayA9IGsgfCAwOwogICAgICAgICAgICAgIHZhciB0ID0gMDsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAoIXIpCiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICBpZiAoUShmLCAyLCAyMDczMywgMCksICFWNChlW0EgPj4gMl0sIGksIHIsIGYsIGspKQogICAgICAgICAgICAgICAgICByZXR1cm4gUShmLCAxLCAxMDE3MSwgMCksIDA7CiAgICAgICAgICAgICAgICBpZiAoZVtlW0EgPj4gMl0gKyA2MCA+PiAyXSkKICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgICAgICBpZiAoayA9IEEgKyAxMDggfCAwLCAhRjQociwgaywgZikpCiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICBpID0gMTsKICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgcjoKICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGVbQSArIDQ4ID4+IDJdIC0gMTIgfCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6CiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAyOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgY2FzZSA2OgogICAgICAgICAgICAgICAgICAgICAgICBpID0gMzsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTI6CiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSA0OwogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAgICAgICAgICBpID0gNTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDoKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpID0gLTE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlW3IgKyAyMCA+PiAyXSA9IGksIGkgPSBlW0EgKyAxMjAgPj4gMl07CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIGlmICghaSkKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICBpZiAoIWVbaSArIDEyID4+IDJdKSB7CiAgICAgICAgICAgICAgICAgICAgUihlW2kgKyA0ID4+IDJdKSwgUihlW2VbQSArIDEyMCA+PiAyXSArIDggPj4gMl0pLCBSKGVbZVtBICsgMTIwID4+IDJdID4+IDJdKSwgaSA9IGVbQSArIDEyMCA+PiAyXSwgdCA9IGVbaSArIDEyID4+IDJdLCB0ICYmIChSKHQpLCBpID0gZVtBICsgMTIwID4+IDJdKSwgUihpKSwgZVtBICsgMTIwID4+IDJdID0gMDsKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmICghSjQociwgaywgZikpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChlW0EgKyAxMTYgPj4gMl0gJiYgRTQociwgaywgZiksIHQgPSAxLCBpID0gZVtrID4+IDJdLCAhaSkKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIGVbciArIDI4ID4+IDJdID0gaSwgZVtyICsgMzIgPj4gMl0gPSBlW0EgKyAxMTIgPj4gMl0sIGVbQSArIDEwOCA+PiAyXSA9IDA7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiB0IHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBFayhBLCBpLCByLCBmKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDAsIHIgPSByIHwgMCwgZiA9IGYgfCAwOwogICAgICAgICAgICAgIHZhciBrID0gMCwgdCA9IDA7CiAgICAgICAgICAgICAgaWYgKCFyKQogICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgaWYgKCFpNihlW0EgPj4gMl0sIGksIHIsIGYpKQogICAgICAgICAgICAgICAgcmV0dXJuIFEoZiwgMSwgMTAxNzEsIDApLCAwOwogICAgICAgICAgICAgIGkgPSAxOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGlmIChlW2VbQSA+PiAyXSArIDYwID4+IDJdIHwgZVtBICsgMTI4ID4+IDJdKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgaWYgKGsgPSBBICsgMTA4IHwgMCwgIUY0KHIsIGssIGYpKQogICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgcjoKICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGVbQSArIDQ4ID4+IDJdIC0gMTIgfCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6CiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAyOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgY2FzZSA2OgogICAgICAgICAgICAgICAgICAgICAgICBpID0gMzsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTI6CiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSA0OwogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAgICAgICAgICBpID0gNTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDoKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpID0gLTE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlW3IgKyAyMCA+PiAyXSA9IGksIGkgPSBlW0EgKyAxMjAgPj4gMl07CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIGlmICghaSkKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICBpZiAoIWVbaSArIDEyID4+IDJdKSB7CiAgICAgICAgICAgICAgICAgICAgUihlW2VbayArIDEyID4+IDJdICsgNCA+PiAyXSksIFIoZVtlW2sgKyAxMiA+PiAyXSArIDggPj4gMl0pLCBSKGVbZVtrICsgMTIgPj4gMl0gPj4gMl0pLCBpID0gZVtrICsgMTIgPj4gMl0sIHQgPSBlW2kgKyAxMiA+PiAyXSwgdCAmJiAoUih0KSwgaSA9IGVbayArIDEyID4+IDJdKSwgUihpKSwgZVtrICsgMTIgPj4gMl0gPSAwOwogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKGkgPSAwLCAhSjQociwgaywgZikpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChlW0EgKyAxMTYgPj4gMl0gJiYgRTQociwgaywgZiksIGkgPSAxLCBmID0gZVtrID4+IDJdLCAhZikKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIGVbciArIDI4ID4+IDJdID0gZiwgZVtyICsgMzIgPj4gMl0gPSBlW0EgKyAxMTIgPj4gMl0sIGVbQSArIDEwOCA+PiAyXSA9IDA7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBpIHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBvNigpIHsKICAgICAgICAgICAgICB2YXIgQSA9IDAsIGkgPSAwLCByID0gMCwgZiA9IDA7CiAgICAgICAgICAgICAgQSA9IDIzOTk7CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgIGlmIChpID0gSVtBIHwgMF0sICFpIHwgKGkgfCAwKSA9PSA2MSkKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICBpZiAoQSA9IEEgKyAxIHwgMCwgIShBICYgMykpCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICBpZiAociA9IGVbQSA+PiAyXSwgKChyIHwgMTY4NDMwMDggLSByKSAmIC0yMTM5MDYyMTQ0KSAhPSAtMjEzOTA2MjE0NCkKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IHIgXiAxMDI3NDIzNTQ5LCAoKDE2ODQzMDA4IC0gaSB8IGkpICYgLTIxMzkwNjIxNDQpICE9IC0yMTM5MDYyMTQ0KQogICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSBlW0EgKyA0ID4+IDJdLCBpID0gQSArIDQgfCAwLCBBID0gaSwgKCgxNjg0MzAwOCAtIHIgfCByKSAmIC0yMTM5MDYyMTQ0KSAhPSAtMjEzOTA2MjE0NCkKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaSA9IEE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgaWYgKEEgPSBpLCByID0gSVtBIHwgMF0sICFyKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIGlmIChpID0gQSArIDEgfCAwLCAociB8IDApID09IDYxKQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoKEEgfCAwKSA9PSAyMzk5KQogICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgQSA9IEEgLSAyMzk5IHwgMDsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAoSVtBICsgMjM5OSB8IDBdIHx8IChyID0gZVsxMjQ4Nl0sICFyKSB8fCAoaSA9IGVbciA+PiAyXSwgIWkpKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgICBpZiAoIVdpKDIzOTksIGksIEEpICYmIChpID0gQSArIGVbciA+PiAyXSB8IDAsIElbaSB8IDBdID09IDYxKSkKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSBlW3IgKyA0ID4+IDJdLCByID0gciArIDQgfCAwLCBpKQogICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGYgPSBpICsgMSB8IDA7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBmOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIGc2KCkgewogICAgICAgICAgICAgIHZhciBBID0gMCwgaSA9IDAsIHIgPSAwLCBmID0gMDsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAoaSA9IEUyKDEsIDIzMiksIGkpIHsKICAgICAgICAgICAgICAgICAgaWYgKGVbaSA+PiAyXSA9IDEsIGVbaSArIDE4NCA+PiAyXSA9IDEsIEZbaSArIDE4OCB8IDBdID0gSVtpICsgMTg4IHwgMF0gfCA2LCBBID0gRTIoMSwgNTY0NCksIGVbaSArIDEyID4+IDJdID0gQSwgIUEgfHwgKEEgPSBFMigxLCAxZTMpLCBlW2kgKyAxNiA+PiAyXSA9IEEsICFBKSkKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICBlW2kgKyA0OCA+PiAyXSA9IDAsIGVbaSArIDUyID4+IDJdID0gMCwgZVtpICsgNDQgPj4gMl0gPSAtMSwgZVtpICsgMjAgPj4gMl0gPSAxZTM7CiAgICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgICBpZiAoQSA9IEUyKDEsIDQ4KSwgQSkgewogICAgICAgICAgICAgICAgICAgICAgaWYgKGVbQSArIDI0ID4+IDJdID0gMCwgZVtBICsgMzIgPj4gMl0gPSAxMDAsIGYgPSBFMigxMDAsIDI0KSwgZVtBICsgMjggPj4gMl0gPSBmLCBmKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgUihBKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZVtpICsgMjAwID4+IDJdID0gMDsKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChlW0EgKyA0MCA+PiAyXSA9IDAsIGVbaSArIDIwMCA+PiAyXSA9IEEsIEEgPSBwZSgpLCBlW2kgKyAxOTYgPj4gMl0gPSBBLCAhQSB8fCAoQSA9IHBlKCksIGVbaSArIDE5MiA+PiAyXSA9IEEsICFBKSkKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICBBID0gMCwgciA9IG82KCk7CiAgICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgICBpZiAoIXIpCiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgIGlmIChmID0gUTYoKSwgIWdlKHIsIDIzNzQpKSB7CiAgICAgICAgICAgICAgICAgICAgICBBID0gZjsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChyID0gd3IociksIChyIHwgMCkgPCAwKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICBBID0gZiA/IGYgPDwgMSA6IDY0LCBBID0gKEEgfCAwKSA+IChyIHwgMCkgPyByIDogQTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoQSA9IFdlKEEpLCBlW2kgKyAyMTIgPj4gMl0gPSBBLCAhQSAmJiAoQSA9IFdlKDApLCBlW2kgKyAyMTIgPj4gMl0gPSBBLCAhQSkpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICBpID0gMDsKICAgICAgICAgICAgICAgIHJldHVybiBpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gc2koaSksIDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gRGsoQSwgaSkgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwOwogICAgICAgICAgICAgIHZhciByID0gMCwgZiA9IDAsIGsgPSAwLCB0ID0gMCwgbiA9IDAsIGwgPSAwLCBhID0gMCwgdSA9IDAsIG8gPSAwLCBnID0gMCwgaCA9IDAsIHMgPSAwLCB3ID0gMCwgQiA9IDA7CiAgICAgICAgICAgICAgaWYgKGRbQSArIDQ0ID4+IDJdID49IDgpCiAgICAgICAgICAgICAgICBmb3IgKGsgPSBlW0EgKyAzNiA+PiAyXSwgdSA9IGsgPDwgNSwgbyA9IFooaywgMjgpLCBnID0gWihrLCAyNCksIGggPSBaKGssIDIwKSwgcyA9IGsgPDwgNCwgdyA9IFooaywgMTIpLCBCID0gayA8PCAzLCB0ID0gZVtBICsgNDAgPj4gMl0sIG4gPSA4OyA7ICkgewogICAgICAgICAgICAgICAgICBpZiAobnIoQSwgdCwgZVtBICsgMzYgPj4gMl0sIDgpLCBLMShBKSwgbCA9IGVbQSArIDMyID4+IDJdLCBsKSB7CiAgICAgICAgICAgICAgICAgICAgZm9yIChhID0gZVtBID4+IDJdLCBpID0gMDsgciA9IChpIDw8IDIpICsgdCB8IDAsIGYgPSBhICsgKGkgPDwgNSkgfCAwLCBHW3IgPj4gMl0gPSBHW2YgPj4gMl0sIEdbciArIChrIDw8IDIpID4+IDJdID0gR1tmICsgNCA+PiAyXSwgR1tyICsgQiA+PiAyXSA9IEdbZiArIDggPj4gMl0sIEdbciArIHcgPj4gMl0gPSBHW2YgKyAxMiA+PiAyXSwgaSA9IGkgKyAxIHwgMCwgKGwgfCAwKSAhPSAoaSB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgZm9yIChhID0gZVtBID4+IDJdLCBpID0gMDsgciA9IChpIDw8IDIpICsgdCB8IDAsIGYgPSBhICsgKGkgPDwgNSkgfCAwLCBHW3IgKyBzID4+IDJdID0gR1tmICsgMTYgPj4gMl0sIEdbciArIGggPj4gMl0gPSBHW2YgKyAyMCA+PiAyXSwgR1tyICsgZyA+PiAyXSA9IEdbZiArIDI0ID4+IDJdLCBHW3IgKyBvID4+IDJdID0gR1tmICsgMjggPj4gMl0sIGkgPSBpICsgMSB8IDAsIChsIHwgMCkgIT0gKGkgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmICh0ID0gdCArIHUgfCAwLCBuID0gbiArIDggfCAwLCAhKG4gPj4+IDAgPD0gZFtBICsgNDQgPj4gMl0pKQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIFIoZVtBID4+IDJdKSwgUihBKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBUZShBLCBpKSB7CiAgICAgICAgICAgICAgdmFyIHIgPSAwLCBmID0gMCwgayA9IDAsIHQgPSAwLCBuID0gMCwgbCA9IDAsIGEgPSAwLCB1ID0gMDsKICAgICAgICAgICAgICBpZiAodCA9IGVbQSArIDggPj4gMl0sIGYgPSBlW0EgKyA0ID4+IDJdLCB0IC0gZiA+Pj4gMCA+PSBpID4+PiAwKSB7CiAgICAgICAgICAgICAgICBpICYmIChmID0gZDIoZiwgMCwgaSkgKyBpIHwgMCksIGVbQSArIDQgPj4gMl0gPSBmOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoayA9IGVbQSA+PiAyXSwgbiA9IGYgLSBrIHwgMCwgciA9IG4gKyBpIHwgMCwgKHIgfCAwKSA+PSAwKSB7CiAgICAgICAgICAgICAgICB0ID0gdCAtIGsgfCAwLCBsID0gdCA8PCAxLCByID0gdCA+Pj4gMCA+PSAxMDczNzQxODIzID8gMjE0NzQ4MzY0NyA6IHIgPj4+IDAgPCBsID4+PiAwID8gbCA6IHIsIHIgJiYgKGEgPSBfMihyKSksIHQgPSByICsgYSB8IDAsIGwgPSBpLCByID0gbiArIGEgfCAwLCBpID0gZDIociwgMCwgaSksIGwgPSBsICsgaSB8IDA7CiAgICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICAgIGlmICgoZiB8IDApID09IChrIHwgMCkpIHsKICAgICAgICAgICAgICAgICAgICBhID0gaTsKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIHUgPSBuICYgMzsKICAgICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICAgIGlmICghdSkgewogICAgICAgICAgICAgICAgICAgICAgaSA9IGY7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBmb3IgKG4gPSAwLCBpID0gZjsgciA9IHIgLSAxIHwgMCwgaSA9IGkgLSAxIHwgMCwgRltyIHwgMF0gPSBJW2kgfCAwXSwgbiA9IG4gKyAxIHwgMCwgKHUgfCAwKSAhPSAobiB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKGsgLSBmID4+PiAwIDw9IDQyOTQ5NjcyOTIpCiAgICAgICAgICAgICAgICAgICAgZm9yICg7IEZbciAtIDEgfCAwXSA9IElbaSAtIDEgfCAwXSwgRltyIC0gMiB8IDBdID0gSVtpIC0gMiB8IDBdLCBGW3IgLSAzIHwgMF0gPSBJW2kgLSAzIHwgMF0sIHIgPSByIC0gNCB8IDAsIGkgPSBpIC0gNCB8IDAsIEZbciB8IDBdID0gSVtpIHwgMF0sIChpIHwgMCkgIT0gKGsgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICBrID0gZVtBID4+IDJdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZVtBICsgOCA+PiAyXSA9IHQsIGVbQSArIDQgPj4gMl0gPSBsLCBlW0EgPj4gMl0gPSBhLCBrICYmIFIoayk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHBpKCksIFUwKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gVWsoQSwgaSwgcikgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDA7CiAgICAgICAgICAgICAgdmFyIGYgPSAwLCBrID0gMCwgdCA9IDAsIG4gPSAwLCBsID0gMCwgYSA9IDA7CiAgICAgICAgICAgICAgaWYgKEZbQSArIDM2IHwgMF0gPSBpLCBpID0gZVtBICsgNDQgPj4gMl0sIGsgPSBlW0EgKyA0MCA+PiAyXSwgZiA9IGkgLSBrID4+IDIsIGYgPj4+IDAgPCByID4+PiAwKSB7CiAgICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICAgIGlmIChmID0gciAtIGYgfCAwLCB0ID0gZVtBICsgNDggPj4gMl0sIGYgPj4+IDAgPD0gdCAtIGkgPj4gMiA+Pj4gMCkgewogICAgICAgICAgICAgICAgICAgIGYgJiYgKHIgPSBpLCBpID0gZiA8PCAyLCBpID0gZDIociwgMCwgaSkgKyBpIHwgMCksIGVbQSArIDQ0ID4+IDJdID0gaTsKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgICBpZiAociA9IGVbQSArIDQwID4+IDJdLCBuID0gaSAtIHIgfCAwLCBrID0gZiArIChuID4+IDIpIHwgMCwgayA+Pj4gMCA8IDEwNzM3NDE4MjQpIHsKICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gdCAtIHIgfCAwLCBsID0gdCA+PiAxLCBrID0gdCA+Pj4gMCA+PSAyMTQ3NDgzNjQ0ID8gMTA3Mzc0MTgyMyA6IGsgPj4+IDAgPCBsID4+PiAwID8gbCA6IGssIGspIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPj4+IDAgPj0gMTA3Mzc0MTgyNCkKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICBhID0gXzIoayA8PCAyKTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gYSArIG4gfCAwLCBmID0gZiA8PCAyLCBmID0gZDIodCwgMCwgZikgKyBmIHwgMCwgKGkgfCAwKSAhPSAociB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgdCA9IHQgLSA0IHwgMCwgaSA9IGkgLSA0IHwgMCwgR1t0ID4+IDJdID0gR1tpID4+IDJdLCAoaSB8IDApICE9IChyIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICBlW0EgKyA0OCA+PiAyXSA9IChrIDw8IDIpICsgYSwgZVtBICsgNDQgPj4gMl0gPSBmLCBlW0EgKyA0MCA+PiAyXSA9IHQsIHIgJiYgUihyKTsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHBpKCksIFUwKCk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgWnIoKSwgVTAoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgciA+Pj4gMCA8IGYgPj4+IDAgJiYgKGVbQSArIDQ0ID4+IDJdID0gayArIChyIDw8IDIpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBNayhBLCBpLCByKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDAsIHIgPSByIHwgMDsKICAgICAgICAgICAgICB2YXIgZiA9IDAsIGsgPSAwLCB0ID0gMCwgbiA9IDAsIGwgPSAwOwogICAgICAgICAgICAgIHIgPSAwLCB0ID0gIShlW0EgKyAxMDQgPj4gMl0gfCBlW0EgKyAxMDAgPj4gMl0pICYgKGVbQSA+PiAyXSAhPSAwICYgZVtBICsgOCA+PiAyXSAhPSAwKSAmIGVbQSArIDQgPj4gMl0gIT0gMCAmIGVbQSArIDY0ID4+IDJdICE9IDAgJiBlW0EgKyAxNiA+PiAyXSAhPSAwICYgZVtBICsgMTIgPj4gMl0gIT0gMCwgZiA9IGVbQSArIDIwID4+IDJdOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGlmICghZikKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIGlmIChuID0gZVtBICsgNzIgPj4gMl0sIGYgPj4+IDAgPj0gNCkKICAgICAgICAgICAgICAgICAgZm9yIChsID0gZiAmIC00OyB0ID0gKGVbKFoociB8IDMsIDEyKSArIG4gfCAwKSArIDggPj4gMl0gJiAxMjYpID4+PiAwIDwgMzggJiYgKGVbKFoociB8IDIsIDEyKSArIG4gfCAwKSArIDggPj4gMl0gJiAxMjYpID4+PiAwIDwgMzggJiYgKGVbKFoociB8IDEsIDEyKSArIG4gfCAwKSArIDggPj4gMl0gJiAxMjYpID4+PiAwIDwgMzggJiYgKGVbKFoociwgMTIpICsgbiB8IDApICsgOCA+PiAyXSAmIDEyNikgPj4+IDAgPCAzOCA/IHQgOiAwLCByID0gciArIDQgfCAwLCBrID0gayArIDQgfCAwLCAobCB8IDApICE9IChrIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICBpZiAoZiA9IGYgJiAzLCAhZikKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIGZvciAoayA9IDA7IHQgPSAoZVsoWihyLCAxMikgKyBuIHwgMCkgKyA4ID4+IDJdICYgMTI2KSA+Pj4gMCA8IDM4ID8gdCA6IDAsIHIgPSByICsgMSB8IDAsIGsgPSBrICsgMSB8IDAsIChmIHwgMCkgIT0gKGsgfCAwKTsgKQogICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBlW2kgKyAyOCA+PiAyXSAhPSA5OSAmIGVbQSArIDQwID4+IDJdIC0gMSA+Pj4gMCA8IDIgJiB0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIFNrKEEsIGksIHIpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIGkgPSBpIHwgMCwgciA9IHIgfCAwOwogICAgICAgICAgICAgIHZhciBmID0gMCwgayA9IDAsIHQgPSAwLCBuID0gMCwgbCA9IDA7CiAgICAgICAgICAgICAgayA9IFggLSAxNiB8IDAsIFggPSBrLCBsID0gNSwgdCA9IGVbQSArIDE1NiA+PiAyXSArIFooZVtBICsgMjA0ID4+IDJdLCA1NjQ0KSB8IDAsIGYgPSBlW3QgKyA1NTg0ID4+IDJdLCBGW2YgfCAwXSAmIDEgJiYgKGwgPSBlW2YgKyA0ID4+IDJdICsgNSB8IDApLCBmID0gZVtBICsgNTIgPj4gMl0sIG4gPSBsICsgOSB8IDA7CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKG4gPj4+IDAgPiBkW0EgKyA1NiA+PiAyXSkgewogICAgICAgICAgICAgICAgICBpZiAoZiA9IG8wKGYsIG4pLCAhZikgewogICAgICAgICAgICAgICAgICAgIFIoZVtBICsgNTIgPj4gMl0pLCBlW0EgKyA1MiA+PiAyXSA9IDAsIGVbQSArIDU2ID4+IDJdID0gMCwgUShyLCAxLCA3NTA4LCAwKSwgQSA9IDA7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlW0EgKyA1NiA+PiAyXSA9IG4sIGVbQSArIDUyID4+IDJdID0gZjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChrMihmLCA2NTM2MiwgMiksIGsyKGYgKyAyIHwgMCwgbCArIDcgfCAwLCAyKSwgazIoZiArIDQgfCAwLCBlW3QgPj4gMl0sIDEpLCBrMihmICsgNSB8IDAsIGVbdCArIDQgPj4gMl0sIDEpLCBrMihmICsgNiB8IDAsIGVbdCArIDggPj4gMl0sIDIpLCBrMihmICsgOCB8IDAsIGVbdCArIDE2ID4+IDJdLCAxKSwgZVtrICsgMTIgPj4gMl0gPSBsLCAhSTYoZVtBICsgMTU2ID4+IDJdLCBlW0EgKyAyMDQgPj4gMl0sIGYgKyA5IHwgMCwgayArIDEyIHwgMCwgcikpIHsKICAgICAgICAgICAgICAgICAgUShyLCAxLCA3NDU2LCAwKSwgQSA9IDA7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoZVtrICsgMTIgPj4gMl0pIHsKICAgICAgICAgICAgICAgICAgUShyLCAxLCA3NDU2LCAwKSwgQSA9IDA7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBBID0gKEwwKGksIGVbQSArIDUyID4+IDJdLCBuLCByKSB8IDApID09IChuIHwgMCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBYID0gayArIDE2IHwgMCwgQSB8IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gaDYoQSwgaSwgcikgewogICAgICAgICAgICAgIHZhciBmID0gMCwgayA9IDAsIHQgPSAwLCBuID0gMCwgbCA9IDAsIGEgPSAwLCB1ID0gMCwgbyA9IDAsIGcgPSAwOwogICAgICAgICAgICAgIGlmICh0ID0gZVtBICsgMTU2ID4+IDJdICsgWihlW0EgKyAyMDQgPj4gMl0sIDU2NDQpIHwgMCwgZyA9IGVbdCArIDU1ODQgPj4gMl0sIGEgPSBlW3QgKyA0MjAgPj4gMl0sIGwgPSBlW2VbQSArIDcyID4+IDJdICsgMTYgPj4gMl0sIGsyKGksIDY1Mzc1LCAyKSwgQSA9IGEgKyAxIHwgMCwgayA9IGwgPj4+IDAgPCAyNTcgPyAxIDogMiwgdSA9IFooQSwgKGsgPDwgMSkgKyA1IHwgMCksIGsyKGkgKyAyIHwgMCwgdSArIDIgfCAwLCAyKSwgQSkKICAgICAgICAgICAgICAgIGZvciAoaSA9IGkgKyA0IHwgMCwgQSA9IHQgKyA0MjQgfCAwOyBrMihpLCBlW0EgPj4gMl0sIDEpLCBpID0gaSArIDEgfCAwLCBrMihpLCBlW0EgKyA0ID4+IDJdLCBrKSwgaSA9IGkgKyBrIHwgMCwgazIoaSwgZVtBICsgOCA+PiAyXSwgMiksIGsyKGkgKyAyIHwgMCwgZVtBICsgMTIgPj4gMl0sIDEpLCBpID0gaSArIDMgfCAwLCBrMihpLCBlW0EgKyAxNiA+PiAyXSwgayksIG4gPSBpICsgayB8IDAsIGsyKG4sIGVbQSArIDM2ID4+IDJdLCAxKSwgaSA9IGVbQSArIDggPj4gMl0sIGYgPSBlW3QgKyA4ID4+IDJdLCBlW0EgKyA4ID4+IDJdID0gKGkgfCAwKSA8IChmIHwgMCkgPyBpIDogZiwgaSA9IGVbZyArIDQgPj4gMl0sIGYgPSBlW0EgKyAxNiA+PiAyXSwgZVtBICsgMTYgPj4gMl0gPSAoZiB8IDApIDwgKGwgfCAwKSA/IGYgOiBsLCBmID0gZVtBICsgMTIgPj4gMl0sIGVbQSArIDEyID4+IDJdID0gKGkgfCAwKSA+IChmIHwgMCkgPyBmIDogaSwgQSA9IEEgKyAxNDggfCAwLCBpID0gbiArIDEgfCAwLCBuID0gKGEgfCAwKSAhPSAobyB8IDApLCBvID0gbyArIDEgfCAwLCAhIW47ICkKICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgIGVbciA+PiAyXSA9IHUgKyA0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIE5rKEEsIGksIHIsIGYpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIGkgPSBpIHwgMCwgciA9IHIgfCAwLCBmID0gZiB8IDA7CiAgICAgICAgICAgICAgdmFyIGsgPSAwLCB0ID0gMCwgbiA9IDAsIGwgPSAwOwogICAgICAgICAgICAgIGsgPSBYIC0gMTYgfCAwLCBYID0gazsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAoZVtBICsgMTE2ID4+IDJdKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgaWYgKHIgPj4+IDAgPD0gMSkgewogICAgICAgICAgICAgICAgICBRKGYsIDEsIDE5MTY3LCAwKTsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChoMihpLCBrICsgMTIgfCAwLCAyKSwgdCA9IGVbayArIDEyID4+IDJdLCBsID0gdCAmIDY1NTM1LCAhbCkgewogICAgICAgICAgICAgICAgICBRKGYsIDEsIDE5MjAwLCAwKTsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChaKGwsIDYpICsgMiA+Pj4gMCA+IHIgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgUShmLCAxLCAxOTE2NywgMCk7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoZiA9IFUyKFoodCwgNikpLCAhZikKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIGlmIChyID0gVTIoOCksIGVbQSArIDExNiA+PiAyXSA9IHIsICFyKSB7CiAgICAgICAgICAgICAgICAgIFIoZik7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoZVtyID4+IDJdID0gZiwgdCA9IHIsIHIgPSBHMltrICsgMTIgPj4gMV0sIHUyW3QgKyA0ID4+IDFdID0gciwgIXIpIHsKICAgICAgICAgICAgICAgICAgbiA9IDE7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmb3IgKHIgPSAwOyBuID0gayArIDEyIHwgMCwgaDIoaSArIDIgfCAwLCBuLCAyKSwgdCA9IGYgKyBaKHIsIDYpIHwgMCwgdTJbdCA+PiAxXSA9IGVbayArIDEyID4+IDJdLCBoMihpICsgNCB8IDAsIG4sIDIpLCB1Mlt0ICsgMiA+PiAxXSA9IGVbayArIDEyID4+IDJdLCBpID0gaSArIDYgfCAwLCBoMihpLCBuLCAyKSwgdTJbdCArIDQgPj4gMV0gPSBlW2sgKyAxMiA+PiAyXSwgbiA9IDEsIHIgPSByICsgMSB8IDAsIHIgPj4+IDAgPCBHMltlW0EgKyAxMTYgPj4gMl0gKyA0ID4+IDFdOyApCiAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIFggPSBrICsgMTYgfCAwLCBuIHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBQayhBKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwOwogICAgICAgICAgICAgIHZhciBpID0gMCwgciA9IDAsIGYgPSAwLCBrID0gMDsKICAgICAgICAgICAgICBpID0gZVtBID4+IDJdLCBrID0gRTIoMSwgOCk7CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKGVbaSArIDE2ID4+IDJdID09IDEpCiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgaWYgKGYgPSBlW2kgKyAyMCA+PiAyXSwgIWYpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIWVbQSArIDggPj4gMl0pIHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChlW0EgKyA4ID4+IDJdID0gMSwgZVtpICsgMzIgPj4gMl0gPSBlW2kgKyAzMiA+PiAyXSArIDEsIHIgPSBVMig4KSwgIXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZVtpICsgMTYgPj4gMl0gPSAyOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgZVtyID4+IDJdID0gQSwgZVtyICsgNCA+PiAyXSA9IGVbaSArIDI4ID4+IDJdLCBlW2kgKyAyOCA+PiAyXSA9IHI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChlW2kgKyAxNiA+PiAyXSAhPSAxKQogICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoZVtpICsgMjAgPj4gMl0gPSBlW2YgKyA0ID4+IDJdLCByID0gZVtmID4+IDJdLCBSKGYpLCAhcikKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICBpZiAoZiA9IGVbciA+PiAyXSwgZiAmJiBvMltmIHwgMF0oZVtyICsgNCA+PiAyXSwgayksIFIociksIGVbaSArIDI0ID4+IDJdID0gZVtpICsgMjQgPj4gMl0gLSAxLCBlW2kgKyAxNiA+PiAyXSA9PSAxKQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoaykgewogICAgICAgICAgICAgICAgaWYgKGkgPSBlW2sgKyA0ID4+IDJdLCAoaSB8IDApID4gMCkKICAgICAgICAgICAgICAgICAgZm9yIChBID0gMDsgciA9IGVbayA+PiAyXSArIFooQSwgMTIpIHwgMCwgZiA9IGVbciArIDggPj4gMl0sIGYgJiYgKG8yW2YgfCAwXShlW3IgKyA0ID4+IDJdKSwgaSA9IGVbayArIDQgPj4gMl0pLCBBID0gQSArIDEgfCAwLCAoaSB8IDApID4gKEEgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgIFIoZVtrID4+IDJdKSwgUihrKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24geGsoQSwgaSwgcikgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDA7CiAgICAgICAgICAgICAgdmFyIGYgPSAwLCBrID0gMCwgdCA9IDAsIG4gPSAwLCBsID0gMCwgYSA9IDA7CiAgICAgICAgICAgICAgciA9IDE7CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKChHMltBICsgODAgPj4gMV0gJiAzMzI4MCkgIT0gMzMyODAgfHwgKG4gPSBaKGVbQSArIDEwNCA+PiAyXSwgZVtBICsgMTA4ID4+IDJdKSwgIW4pKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgZm9yICh0ID0gZVtBICsgMTU2ID4+IDJdOyA7ICkgewogICAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGVbdCArIDE2ID4+IDJdICE9IDIgfHwgKHIgPSBlW3QgKyA1NjEyID4+IDJdID8gciAmIDEgOiAwLCBmID0gZVtlW0EgKyA3MiA+PiAyXSArIDE2ID4+IDJdLCAhZikpCiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgIGlmIChpID0gZVt0ICsgNTU4NCA+PiAyXSwgZiA+Pj4gMCA+PSA0KQogICAgICAgICAgICAgICAgICAgICAgZm9yIChhID0gZiAmIC00LCBrID0gMDsgciA9IChlW2kgKyAyMCA+PiAyXSBeIC0xKSAmIHIgJiAoKGVbaSArIDMyNjAgPj4gMl0gfCAoZVtpICsgMTEwMCA+PiAyXSB8IGVbaSArIDIxODAgPj4gMl0pKSBeIC0xKSAmIDEsIGkgPSBpICsgNDMyMCB8IDAsIGsgPSBrICsgNCB8IDAsIChhIHwgMCkgIT0gKGsgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgaWYgKGsgPSAwLCBmID0gZiAmIDMsICFmKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICBmb3IgKDsgciA9IChlW2kgKyAyMCA+PiAyXSBeIC0xKSAmIHIgJiAxLCBpID0gaSArIDEwODAgfCAwLCBrID0gayArIDEgfCAwLCAoZiB8IDApICE9IChrIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAodCA9IHQgKyA1NjQ0IHwgMCwgbCA9IGwgKyAxIHwgMCwgKG4gfCAwKSA9PSAobCB8IDApKQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gciB8IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gczYoQSwgaSwgciwgZiwgaywgdCkgewogICAgICAgICAgICAgIHZhciBuID0gMDsKICAgICAgICAgICAgICBuID0gMTsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IGVbKFooaSwgNTY0NCkgKyBBIHwgMCkgKyA1NTg0ID4+IDJdICsgWihyLCAxMDgwKSB8IDAsIEEgPSBlW2kgKyAyNCA+PiAyXSwgKEEgfCAwKSA9PSAxIHx8IChyID0gWihlW2kgKyA0ID4+IDJdLCAzKSwgbiA9IHIgLSAyIHwgMCwgQSkpCiAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgIGlmIChBID0gciAtIDEgfCAwLCBBID4+PiAwID4gZFtrID4+IDJdKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICBpZiAodCA9IDEsIGsyKGYsIGVbaSArIDgwNCA+PiAyXSA8PCA1LCAxKSwgIW4pCiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IGkgKyAyOCB8IDAsIHIgPSAwOyBmID0gZiArIDEgfCAwLCBrMihmLCBlW2kgKyAociA8PCAzKSA+PiAyXSA8PCAzLCAxKSwgciA9IHIgKyAxIHwgMCwgKG4gfCAwKSAhPSAociB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgdCA9IEE7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAociA9IG4gPDwgMSwgciA+Pj4gMCA+PSBkW2sgPj4gMl0pCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgaWYgKHQgPSByIHwgMSwgazIoZiwgQSArIChlW2kgKyA4MDQgPj4gMl0gPDwgNSkgfCAwLCAxKSwgIW4pCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgZm9yIChBID0gaSArIDI4IHwgMCwgciA9IGYgKyAxIHwgMCwgZiA9IDA7IGkgPSBBICsgKGYgPDwgMykgfCAwLCBrMihyLCAoZVtpID4+IDJdIDw8IDExKSArIGVbaSArIDQgPj4gMl0gfCAwLCAyKSwgciA9IHIgKyAyIHwgMCwgZiA9IGYgKyAxIHwgMCwgKG4gfCAwKSAhPSAoZiB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIGVbayA+PiAyXSA9IGVbayA+PiAyXSAtIHQsIDE7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBRKHQsIDEsIDQ1OTMsIDApLCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIHc2KEEsIGksIHIpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIGkgPSBpIHwgMCwgciA9IHIgfCAwOwogICAgICAgICAgICAgIHZhciBmID0gMCwgayA9IDAsIHQgPSAwLCBuID0gMCwgbCA9IDAsIGEgPSAwLCB1ID0gMDsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAoIWMwKGVbQSArIDE5MiA+PiAyXSwgMTI2LCByKSB8fCBlW0EgKyAxNiA+PiAyXSAmJiAhYzAoZVtBICsgMTkyID4+IDJdLCAxMjcsIHIpIHx8ICFjMChlW0EgKyAxOTIgPj4gMl0sIDEyOCwgcikgfHwgIWMwKGVbQSArIDE5MiA+PiAyXSwgMTI5LCByKSB8fCAhYzAoZVtBICsgMTkyID4+IDJdLCAxMzAsIHIpKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgbCA9IGVbQSArIDE5MiA+PiAyXSwgZiA9IGVbbCA+PiAyXSwgdCA9IGVbbCArIDggPj4gMl07CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIGlmICghZikgewogICAgICAgICAgICAgICAgICAgIGsgPSAxOwogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKGsgPSAxLCBhID0gZiAmIDEsIChmIHwgMCkgPT0gMSkKICAgICAgICAgICAgICAgICAgICBmID0gMDsKICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgZm9yIChmID0gZiAmIC0yOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgbiA9IDA7CiAgICAgICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghayB8fCAobiA9IDAsICEobzJbZVt0ID4+IDJdXShBLCBpLCByKSB8IDApKSkKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgICBuID0gKG8yW2VbdCArIDQgPj4gMl1dKEEsIGksIHIpIHwgMCkgIT0gMDsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlmIChrID0gbiwgdCA9IHQgKyA4IHwgMCwgdSA9IHUgKyAyIHwgMCwgKGYgfCAwKSA9PSAodSB8IDApKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZiA9ICFrOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChrID0gYSA/IDAgOiBrLCBmIHwgIWEpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgayA9IChvMltlW3QgPj4gMl1dKEEsIGksIHIpIHwgMCkgIT0gMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVbbCA+PiAyXSA9IDA7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBrIHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBCNihBKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwOwogICAgICAgICAgICAgIHZhciBpID0gMCwgciA9IDA7CiAgICAgICAgICAgICAgQSAmJiAoc2koZVtBID4+IDJdKSwgZVtBID4+IDJdID0gMCwgaSA9IGVbQSArIDcyID4+IDJdLCBpICYmIChSKGkpLCBlW0EgKyA3MiA+PiAyXSA9IDApLCBpID0gZVtBICsgNjggPj4gMl0sIGkgJiYgKFIoaSksIGVbQSArIDY4ID4+IDJdID0gMCksIGkgPSBlW0EgKyAxMDggPj4gMl0sIGkgJiYgKFIoaSksIGVbQSArIDEwOCA+PiAyXSA9IDApLCBpID0gZVtBICsgMTE2ID4+IDJdLCBpICYmIChyID0gZVtpID4+IDJdLCByICYmIChSKHIpLCBpID0gZVtBICsgMTE2ID4+IDJdLCBlW2kgPj4gMl0gPSAwKSwgUihpKSwgZVtBICsgMTE2ID4+IDJdID0gMCksIGkgPSBlW0EgKyAxMjAgPj4gMl0sIGkgJiYgKHIgPSBlW2kgKyAxMiA+PiAyXSwgciAmJiAoUihyKSwgaSA9IGVbQSArIDEyMCA+PiAyXSwgZVtpICsgMTIgPj4gMl0gPSAwKSwgciA9IGVbaSArIDQgPj4gMl0sIHIgJiYgKFIociksIGkgPSBlW0EgKyAxMjAgPj4gMl0sIGVbaSArIDQgPj4gMl0gPSAwKSwgciA9IGVbaSArIDggPj4gMl0sIHIgJiYgKFIociksIGkgPSBlW0EgKyAxMjAgPj4gMl0sIGVbaSArIDggPj4gMl0gPSAwKSwgciA9IGVbaSA+PiAyXSwgciAmJiAoUihyKSwgaSA9IGVbQSArIDEyMCA+PiAyXSwgZVtpID4+IDJdID0gMCksIFIoaSksIGVbQSArIDEyMCA+PiAyXSA9IDApLCBpID0gZVtBICsgNCA+PiAyXSwgaSAmJiAoeWkoaSksIGVbQSArIDQgPj4gMl0gPSAwKSwgaSA9IGVbQSArIDggPj4gMl0sIGkgJiYgKHlpKGkpLCBlW0EgKyA4ID4+IDJdID0gMCksIFIoQSkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIGM2KEEsIGksIHIsIGYpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIGkgPSBpIHwgMCwgciA9IHIgfCAwLCBmID0gZiB8IDA7CiAgICAgICAgICAgICAgdmFyIGsgPSAwLCB0ID0gMCwgbiA9IDAsIGwgPSAwLCBhID0gMCwgdSA9IDA7CiAgICAgICAgICAgICAgbiA9IFggLSAzMiB8IDAsIFggPSBuLCB0ID0gZVtBICsgNzIgPj4gMl07CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKCF0KSB7CiAgICAgICAgICAgICAgICAgIFEoZiwgMSwgMjUxMDcsIDApLCBrID0gMDsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICh0ID0gRTIoNCwgZVt0ICsgMTYgPj4gMl0pLCBrID0gMCwgIXQpCiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICBpZiAoaSkKICAgICAgICAgICAgICAgICAgZm9yICh1ID0gZVtBICsgNzIgPj4gMl07IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICAgICAgayA9IGVbKGwgPDwgMikgKyByID4+IDJdOwogICAgICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoayA+Pj4gMCA+PSBkW3UgKyAxNiA+PiAyXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGVbbiArIDE2ID4+IDJdID0gaywgUShmLCAxLCA0MzIzLCBuICsgMTYgfCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhID0gdCArIChrIDw8IDIpIHwgMCwgIWVbYSA+PiAyXSkKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgICBlW24gPj4gMl0gPSBrLCBRKGYsIDEsIDU4ODksIG4pOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgUih0KSwgayA9IDA7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoZVthID4+IDJdID0gMSwgbCA9IGwgKyAxIHwgMCwgKGwgfCAwKSA9PSAoaSB8IDApKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIFIodCksIFIoZVtBICsgNjQgPj4gMl0pOwogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICBpZiAoaSkgewogICAgICAgICAgICAgICAgICAgIGlmIChrID0gaSA8PCAyLCBmID0gVTIoayksIGVbQSArIDY0ID4+IDJdID0gZiwgIWYpIHsKICAgICAgICAgICAgICAgICAgICAgIGVbQSArIDYwID4+IDJdID0gMCwgayA9IDA7CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBGMihmLCByLCBrKTsKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVbQSArIDY0ID4+IDJdID0gMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVbQSArIDYwID4+IDJdID0gaSwgayA9IDE7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBYID0gbiArIDMyIHwgMCwgayB8IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gVGsoQSwgaSwgcikgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDA7CiAgICAgICAgICAgICAgdmFyIGYgPSAwLCBrID0gMCwgdCA9IDAsIG4gPSAwOwogICAgICAgICAgICAgIG4gPSBYIC0gMTYgfCAwLCBYID0gbiwgZiA9IDEsIGsgPSBlWyhlW0EgKyAxNTYgPj4gMl0gKyBaKGVbQSArIDIwNCA+PiAyXSwgNTY0NCkgfCAwKSArIDU1ODQgPj4gMl0sIHQgPSBlW2sgKyAyNCA+PiAyXSwgKHQgfCAwKSAhPSAxICYmIChmID0gWihlW2sgKyA0ID4+IDJdLCAzKSAtIDIgfCAwKSwgayA9IGVbQSArIDUyID4+IDJdLCBmID0gdCA/IGYgPDwgMSB8IDEgOiBmICsgMSB8IDAsIHQgPSBmICsgNCB8IDA7CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKHQgPj4+IDAgPiBkW0EgKyA1NiA+PiAyXSkgewogICAgICAgICAgICAgICAgICBpZiAoayA9IG8wKGssIHQpLCAhaykgewogICAgICAgICAgICAgICAgICAgIFIoZVtBICsgNTIgPj4gMl0pLCBlW0EgKyA1MiA+PiAyXSA9IDAsIGVbQSArIDU2ID4+IDJdID0gMCwgZiA9IDAsIFEociwgMSwgNzU5OSwgMCk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlW0EgKyA1NiA+PiAyXSA9IHQsIGVbQSArIDUyID4+IDJdID0gazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChrMihrLCA2NTM3MiwgMiksIGsyKGsgKyAyIHwgMCwgZiArIDIgfCAwLCAyKSwgZVtuICsgMTIgPj4gMl0gPSBmLCBmID0gMCwgIXM2KGVbQSArIDE1NiA+PiAyXSwgZVtBICsgMjA0ID4+IDJdLCAwLCBrICsgNCB8IDAsIG4gKyAxMiB8IDAsIHIpKSB7CiAgICAgICAgICAgICAgICAgIFEociwgMSwgNzU0NywgMCk7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoZVtuICsgMTIgPj4gMl0pIHsKICAgICAgICAgICAgICAgICAgUShyLCAxLCA3NTQ3LCAwKTsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGYgPSAoTDAoaSwgZVtBICsgNTIgPj4gMl0sIHQsIHIpIHwgMCkgPT0gKHQgfCAwKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIFggPSBuICsgMTYgfCAwLCBmIHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiB6ayhBLCBpLCByLCBmLCBrKSB7CiAgICAgICAgICAgICAgaWYgKEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDAsIGYgPSBmIHwgMCwgayA9IGsgfCAwLCB0MShBLCBlW2kgKyA4ID4+IDJdLCBrKSkgewogICAgICAgICAgICAgICAgZVtpICsgMjggPj4gMl0gPT0gMSB8IGVbaSArIDQgPj4gMl0gIT0gKHIgfCAwKSB8fCAoZVtpICsgMjggPj4gMl0gPSBmKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKHQxKEEsIGVbaSA+PiAyXSwgaykpIHsKICAgICAgICAgICAgICAgICAgaWYgKCEoZVtpICsgMTYgPj4gMl0gIT0gKHIgfCAwKSAmIGVbaSArIDIwID4+IDJdICE9IChyIHwgMCkpKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKChmIHwgMCkgIT0gMSkKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgZVtpICsgMzIgPj4gMl0gPSAxOwogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlW2kgKyAzMiA+PiAyXSA9IGY7CiAgICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgICBpZiAoZVtpICsgNDQgPj4gMl0gPT0gNCkKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHUyW2kgKyA1MiA+PiAxXSA9IDAsIEEgPSBlW0EgKyA4ID4+IDJdLCBvMltlW2VbQSA+PiAyXSArIDIwID4+IDJdXShBLCBpLCByLCByLCAxLCBrKSwgSVtpICsgNTMgfCAwXSA9PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtpICsgNDQgPj4gMl0gPSAzLCAhSVtpICsgNTIgfCAwXSkKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVbaSArIDQ0ID4+IDJdID0gNDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoZVtpICsgMjAgPj4gMl0gPSByLCBlW2kgKyA0MCA+PiAyXSA9IGVbaSArIDQwID4+IDJdICsgMSwgZVtpICsgMzYgPj4gMl0gIT0gMSB8IGVbaSArIDI0ID4+IDJdICE9IDIpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgRltpICsgNTQgfCAwXSA9IDE7CiAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIEEgPSBlW0EgKyA4ID4+IDJdLCBvMltlW2VbQSA+PiAyXSArIDI0ID4+IDJdXShBLCBpLCByLCBmLCBrKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gdjYoQSwgaSkgewogICAgICAgICAgICAgIHZhciByID0gMCwgZiA9IDAsIGsgPSAwLCB0ID0gMCwgbiA9IDAsIGwgPSAwLCBhID0gMDsKICAgICAgICAgICAgICBpZiAoZiA9IGVbQSArIDggPj4gMl0sIHIgPSBlW0EgKyA0ID4+IDJdLCBmIC0gciA+PiAzID4+PiAwID49IGkgPj4+IDApIHsKICAgICAgICAgICAgICAgIGkgJiYgKGkgPSBpIDw8IDMsIHIgPSBkMihyLCAwLCBpKSArIGkgfCAwKSwgZVtBICsgNCA+PiAyXSA9IHI7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGlmICh0ID0gZVtBID4+IDJdLCBuID0gciAtIHQgfCAwLCBrID0gKG4gPj4gMykgKyBpIHwgMCwgayA+Pj4gMCA8IDUzNjg3MDkxMikgewogICAgICAgICAgICAgICAgICBpZiAoZiA9IGYgLSB0IHwgMCwgbCA9IGYgPj4gMiwgZiA9IGYgPj4+IDAgPj0gMjE0NzQ4MzY0MCA/IDUzNjg3MDkxMSA6IGsgPj4+IDAgPCBsID4+PiAwID8gbCA6IGssIGYpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoZiA+Pj4gMCA+PSA1MzY4NzA5MTIpCiAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgIGEgPSBfMihmIDw8IDMpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChrID0gbiArIGEgfCAwLCBpID0gaSA8PCAzLCBpID0gZDIoaywgMCwgaSkgKyBpIHwgMCwgKHIgfCAwKSAhPSAodCB8IDApKSB7CiAgICAgICAgICAgICAgICAgICAgZm9yICg7IHIgPSByIC0gOCB8IDAsIG4gPSBlW3IgKyA0ID4+IDJdLCBrID0gayAtIDggfCAwLCBlW2sgPj4gMl0gPSBlW3IgPj4gMl0sIGVbayArIDQgPj4gMl0gPSBuLCAociB8IDApICE9ICh0IHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICB0ID0gZVtBID4+IDJdOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVbQSArIDggPj4gMl0gPSAoZiA8PCAzKSArIGEsIGVbQSArIDQgPj4gMl0gPSBpLCBlW0EgPj4gMl0gPSBrLCB0ICYmIFIodCk7CiAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHBpKCksIFUwKCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIFpyKCksIFUwKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gSWkoQSwgaSwgciwgZiwgaykgewogICAgICAgICAgICAgIHZhciB0ID0gMCwgbiA9IDAsIGwgPSAwOwogICAgICAgICAgICAgIHQgPSBYIC0gMjA4IHwgMCwgWCA9IHQsIGVbdCArIDIwNCA+PiAyXSA9IHIsIHIgPSB0ICsgMTYwIHwgMCwgZDIociwgMCwgNDApLCBlW3QgKyAyMDAgPj4gMl0gPSBlW3QgKyAyMDQgPj4gMl07CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKChXNCgwLCBpLCB0ICsgMjAwIHwgMCwgdCArIDgwIHwgMCwgciwgZiwgaykgfCAwKSA8IDApCiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICByID0gZVtBICsgNzYgPj4gMl0gPCAwLCBuID0gZVtBID4+IDJdLCBlW0EgPj4gMl0gPSBuICYgLTMzOwogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgazogewogICAgICAgICAgICAgICAgICAgICAgaWYgKCFlW0EgKyA0OCA+PiAyXSkgewogICAgICAgICAgICAgICAgICAgICAgICBlW0EgKyA0OCA+PiAyXSA9IDgwLCBlW0EgKyAyOCA+PiAyXSA9IDAsIGVbQSArIDE2ID4+IDJdID0gMCwgZVtBICsgMjAgPj4gMl0gPSAwLCBsID0gZVtBICsgNDQgPj4gMl0sIGVbQSArIDQ0ID4+IDJdID0gdDsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgazsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlmIChlW0EgKyAxNiA+PiAyXSkKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKHZyKEEpKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBXNChBLCBpLCB0ICsgMjAwIHwgMCwgdCArIDgwIHwgMCwgdCArIDE2MCB8IDAsIGYsIGspOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGwgJiYgKG8yW2VbQSArIDM2ID4+IDJdXShBLCAwLCAwKSB8IDAsIGVbQSArIDQ4ID4+IDJdID0gMCwgZVtBICsgNDQgPj4gMl0gPSBsLCBlW0EgKyAyOCA+PiAyXSA9IDAsIGVbQSArIDE2ID4+IDJdID0gMCwgZVtBICsgMjAgPj4gMl0gPSAwKSwgZVtBID4+IDJdID0gZVtBID4+IDJdIHwgbiAmIDMyLCByKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBYID0gdCArIDIwOCB8IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gZGsoQSwgaSkgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwOwogICAgICAgICAgICAgIHZhciByID0gMCwgZiA9IDAsIGsgPSAwLCB0ID0gMDsKICAgICAgICAgICAgICBrID0gMTU7CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaToKICAgICAgICAgICAgICAgICAgc3dpdGNoIChlW0EgKyA0MCA+PiAyXSAtIDEgfCAwKSB7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgICAgICAgayA9IGVbQSArIDExMiA+PiAyXSArIDExIHwgMDsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChyID0gRTIoMSwgayksICFyKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgazIociwgaywgNCksIGsyKHIgKyA0IHwgMCwgMTY2ODI0NjY0MiwgNCksIGsyKHIgKyA4IHwgMCwgZVtBICsgNDAgPj4gMl0sIDEpLCBrMihyICsgOSB8IDAsIGVbQSArIDUyID4+IDJdLCAxKSwgazIociArIDEwIHwgMCwgZVtBICsgNDQgPj4gMl0sIDEpLCBmID0gciArIDExIHwgMDsKICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgcjoKICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGVbQSArIDQwID4+IDJdIC0gMSB8IDApIHsKICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlW0EgKyAxMTIgPj4gMl0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGsyKGYsIElbZVtBICsgMTA4ID4+IDJdICsgdCB8IDBdLCAxKSwgZiA9IGYgKyAxIHwgMCwgdCA9IHQgKyAxIHwgMCwgdCA+Pj4gMCA8IGRbQSArIDExMiA+PiAyXTsgKQogICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBrMihmLCBlW0EgKyA0OCA+PiAyXSwgNCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlW2kgPj4gMl0gPSBrLCBmID0gcjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIGYgfCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIEk2KEEsIGksIHIsIGYsIGspIHsKICAgICAgICAgICAgICB2YXIgdCA9IDAsIG4gPSAwOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGlmIChkW2YgPj4gMl0gPD0gNCkKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIGlmIChpID0gZVsoWihpLCA1NjQ0KSArIEEgfCAwKSArIDU1ODQgPj4gMl0sIGsyKHIsIGVbaSArIDQgPj4gMl0gLSAxIHwgMCwgMSksIGsyKHIgKyAxIHwgMCwgZVtpICsgOCA+PiAyXSAtIDIgfCAwLCAxKSwgazIociArIDIgfCAwLCBlW2kgKyAxMiA+PiAyXSAtIDIgfCAwLCAxKSwgazIociArIDMgfCAwLCBlW2kgKyAxNiA+PiAyXSwgMSksIGsyKHIgKyA0IHwgMCwgZVtpICsgMjAgPj4gMl0sIDEpLCB0ID0gZVtmID4+IDJdIC0gNSB8IDAsIGVbZiA+PiAyXSA9IHQsIEZbaSB8IDBdICYgMSkgewogICAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgICAgaWYgKEEgPSBlW2kgKyA0ID4+IDJdLCBBID4+PiAwIDw9IHQgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgQSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBmb3IgKHIgPSByICsgNSB8IDAsIHQgPSBpICsgOTQ0IHwgMCwgbiA9IGkgKyA4MTIgfCAwLCBrID0gMDsgQSA9IGsgPDwgMiwgazIociwgKGVbQSArIHQgPj4gMl0gPDwgNCkgKyBlW0EgKyBuID4+IDJdIHwgMCwgMSksIHIgPSByICsgMSB8IDAsIEEgPSBlW2kgKyA0ID4+IDJdLCBrID0gayArIDEgfCAwLCBBID4+PiAwID4gayA+Pj4gMDsgKQogICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgIHQgPSBlW2YgPj4gMl07CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZVtmID4+IDJdID0gdCAtIEE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIFEoaywgMSwgNDQ4NywgMCksIDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gS2soQSwgaSwgciwgZikgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDAsIGYgPSBmIHwgMDsKICAgICAgICAgICAgICB2YXIgayA9IDAsIHQgPSAwLCBuID0gMCwgbCA9IDAsIGEgPSAwOwogICAgICAgICAgICAgIGsgPSBYIC0gMTYgfCAwLCBYID0gaywgZVtBICsgOCA+PiAyXSA9PSAxNiA/IG4gPSBlW0EgKyAxNTYgPj4gMl0gKyBaKGVbQSArIDIwNCA+PiAyXSwgNTY0NCkgfCAwIDogbiA9IGVbQSArIDEyID4+IDJdLCBsID0gZVtBICsgNzIgPj4gMl0sIHQgPSBkW2wgKyAxNiA+PiAyXSA8IDI1NyA/IDEgOiAyOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGlmICh0ID4+PiAwID49IHIgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgciA9IDAsIFEoZiwgMSwgNzc2OCwgMCk7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoZVtrICsgMTIgPj4gMl0gPSAodCBeIC0xKSArIHIsIGgyKGksIGsgKyA4IHwgMCwgdCksIGEgPSBlW2sgKyA4ID4+IDJdLCBhID4+PiAwID49IGRbbCArIDE2ID4+IDJdKSB7CiAgICAgICAgICAgICAgICAgIHIgPSAwLCBRKGYsIDEsIDI1NDIyLCAwKTsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChyID0gMSwgaSA9IGkgKyB0IHwgMCwgaDIoaSwgZVtuICsgNTU4NCA+PiAyXSArIFooYSwgMTA4MCkgfCAwLCAxKSwgIU40KEEsIGVbayArIDggPj4gMl0sIGkgKyAxIHwgMCwgayArIDEyIHwgMCwgZikpIHsKICAgICAgICAgICAgICAgICAgciA9IDAsIFEoZiwgMSwgNzc2OCwgMCk7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoIWVbayArIDEyID4+IDJdKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgciA9IDAsIFEoZiwgMSwgNzc2OCwgMCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBYID0gayArIDE2IHwgMCwgciB8IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gWjYoKSB7CiAgICAgICAgICAgICAgdmFyIEEgPSAwLCBpID0gMDsKICAgICAgICAgICAgICBlcigyOTc4MCwgMTcxNywgMjk3OTksIDcsIDI5ODAxLCA4KSwgQSA9IF8yKDQpLCBlW0EgPj4gMl0gPSAwLCBpID0gXzIoNCksIGVbaSA+PiAyXSA9IDAsIHoxKDI5NzgwLCAxOTM4LCA0ODk5NiwgMjk4MDQsIDksIEEgfCAwLCA0ODk5NiwgMjk4MDgsIDEwLCBpIHwgMCksIEEgPSBfMig0KSwgZVtBID4+IDJdID0gMiwgaSA9IF8yKDQpLCBlW2kgPj4gMl0gPSAyLCB6MSgyOTc4MCwgMTE3OSwgNDg5OTYsIDI5ODA0LCA5LCBBIHwgMCwgNDg5OTYsIDI5ODA4LCAxMCwgaSB8IDApLCBBID0gXzIoNCksIGVbQSA+PiAyXSA9IDQsIGkgPSBfMig0KSwgZVtpID4+IDJdID0gNCwgejEoMjk3ODAsIDIwNTQsIDQ4OTYwLCAyOTgwNCwgMTEsIEEgfCAwLCA0ODk2MCwgMjk4MDgsIDEyLCBpIHwgMCksIEEgPSBfMig0KSwgZVtBID4+IDJdID0gNSwgaSA9IF8yKDQpLCBlW2kgPj4gMl0gPSA1LCB6MSgyOTc4MCwgMTE0NSwgNDg5NjAsIDI5ODA0LCAxMSwgQSB8IDAsIDQ4OTYwLCAyOTgwOCwgMTIsIGkgfCAwKSwgQSA9IF8yKDQpLCBlW0EgPj4gMl0gPSA2LCBpID0gXzIoNCksIGVbaSA+PiAyXSA9IDYsIHoxKDI5NzgwLCAyMzUwLCA0ODkzNiwgMjk4MDQsIDEzLCBBIHwgMCwgNDg5MzYsIDI5ODA4LCAxNCwgaSB8IDApLCBxaSgyOTc4MCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gamsoQSwgaSwgciwgZikgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDAsIGYgPSBmIHwgMDsKICAgICAgICAgICAgICB2YXIgayA9IDAsIHQgPSAwLCBuID0gMCwgbCA9IDA7CiAgICAgICAgICAgICAgdCA9IFggLSAxNiB8IDAsIFggPSB0LCBrID0gZVtBICsgMTIwID4+IDJdOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGlmICghaykgewogICAgICAgICAgICAgICAgICBRKGYsIDEsIDE5MTIxLCAwKSwgciA9IDA7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoZVtrICsgMTIgPj4gMl0pIHsKICAgICAgICAgICAgICAgICAgUShmLCAxLCAyMjEzNywgMCksIHIgPSAwOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGsgPSBJW2sgKyAxOCB8IDBdLCBuID0gayA8PCAyLCBuID4+PiAwID4gciA+Pj4gMCkgewogICAgICAgICAgICAgICAgICBRKGYsIDEsIDE5MDg4LCAwKSwgciA9IDA7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAobiA9IFUyKG4pLCByID0gMCwgIW4pCiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICBpZiAoaykKICAgICAgICAgICAgICAgICAgZm9yIChmID0gMDsgciA9IHQgKyAxMiB8IDAsIGgyKGksIHIsIDIpLCBsID0gbiArIChmIDw8IDIpIHwgMCwgdTJbbCA+PiAxXSA9IGVbdCArIDEyID4+IDJdLCBoMihpICsgMiB8IDAsIHIsIDEpLCBGW2wgKyAyIHwgMF0gPSBlW3QgKyAxMiA+PiAyXSwgaDIoaSArIDMgfCAwLCByLCAxKSwgRltsICsgMyB8IDBdID0gZVt0ICsgMTIgPj4gMl0sIGkgPSBpICsgNCB8IDAsIGYgPSBmICsgMSB8IDAsIChrIHwgMCkgIT0gKGYgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgIGVbZVtBICsgMTIwID4+IDJdICsgMTIgPj4gMl0gPSBuLCByID0gMTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIFggPSB0ICsgMTYgfCAwLCByIHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBDNihBLCBpKSB7CiAgICAgICAgICAgICAgdmFyIHIgPSAwLCBmID0gMCwgayA9IDAsIHQgPSAwLCBuID0gMDsKICAgICAgICAgICAgICB0ID0gWCAtIDMyIHwgMCwgWCA9IHQsIHIgPSBlW0EgKyA2MCA+PiAyXTsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIGlmIChyKSB7CiAgICAgICAgICAgICAgICAgICAgZm9yIChuID0gMTsgayA9IGVbZVtBICsgNjQgPj4gMl0gKyAoZiA8PCAyKSA+PiAyXSwgZVsoZVtlW0EgKyA3NiA+PiAyXSArIDI0ID4+IDJdICsgWihrLCA1MikgfCAwKSArIDQ0ID4+IDJdIHx8IChlW3QgKyAxNiA+PiAyXSA9IGssIFEoaSwgMiwgMTcyNTksIHQgKyAxNiB8IDApLCBuID0gMCwgciA9IGVbQSArIDYwID4+IDJdKSwgZiA9IGYgKyAxIHwgMCwgciA+Pj4gMCA+IGYgPj4+IDA7ICkKICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChuID0gMSwgciA9IGVbQSArIDc2ID4+IDJdLCBrID0gMSwgIWVbciArIDE2ID4+IDJdKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIGZvciAoOyBlWyhlW3IgKyAyNCA+PiAyXSArIFooZiwgNTIpIHwgMCkgKyA0NCA+PiAyXSB8fCAoZVt0ID4+IDJdID0gZiwgUShpLCAyLCAxNzI1OSwgdCksIG4gPSAwLCByID0gZVtBICsgNzYgPj4gMl0pLCBmID0gZiArIDEgfCAwLCBmID4+PiAwIDwgZFtyICsgMTYgPj4gMl07ICkKICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoayA9IDEsIG4pCiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICBRKGksIDEsIDQ4NjYsIDApLCBrID0gMDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIFggPSB0ICsgMzIgfCAwLCBrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIExrKEEsIGksIHIsIGYpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIGkgPSBpIHwgMCwgciA9IHIgfCAwLCBmID0gZiB8IDA7CiAgICAgICAgICAgICAgdmFyIGsgPSAwLCB0ID0gMCwgbiA9IDAsIGwgPSAwLCBhID0gMDsKICAgICAgICAgICAgICBrID0gWCAtIDE2IHwgMCwgWCA9IGssIG4gPSBlW2VbQSArIDcyID4+IDJdICsgMTYgPj4gMl07CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKChuICsgMiB8IDApICE9IChyIHwgMCkpIHsKICAgICAgICAgICAgICAgICAgUShmLCAxLCA3NjM4LCAwKTsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChoMihpLCBrICsgMTIgfCAwLCAyKSwgZVtrICsgMTIgPj4gMl0gIT0gKG4gfCAwKSkgewogICAgICAgICAgICAgICAgICBRKGYsIDEsIDc2MzgsIDApOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCFuKSB7CiAgICAgICAgICAgICAgICAgIHQgPSAxOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZm9yIChyID0gaSArIDIgfCAwLCBBID0gZVtlW0EgKyA3MiA+PiAyXSArIDI0ID4+IDJdLCBpID0gMDsgOyApIHsKICAgICAgICAgICAgICAgICAgaWYgKGgyKHIsIGsgKyA4IHwgMCwgMSksIHQgPSBlW2sgKyA4ID4+IDJdLCBsID0gdCAmIDEyNywgYSA9IGwgKyAxIHwgMCwgZVtBICsgMjQgPj4gMl0gPSBhLCBlW0EgKyAzMiA+PiAyXSA9IHQgPj4+IDcgJiAxLCBsID4+PiAwID49IDMxKSB7CiAgICAgICAgICAgICAgICAgICAgZVtrICsgNCA+PiAyXSA9IGEsIGVbayA+PiAyXSA9IGksIFEoZiwgMSwgMjczOTcsIGspLCB0ID0gMDsKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChBID0gQSArIDUyIHwgMCwgdCA9IDEsIHIgPSByICsgMSB8IDAsIGkgPSBpICsgMSB8IDAsIChuIHwgMCkgPT0gKGkgfCAwKSkKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIFggPSBrICsgMTYgfCAwLCB0IHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBPayhBLCBpLCByLCBmKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDAsIHIgPSByIHwgMCwgZiA9IGYgfCAwOwogICAgICAgICAgICAgIHZhciBrID0gMCwgdCA9IDAsIG4gPSAwLCBsID0gMDsKICAgICAgICAgICAgICBrID0gWCAtIDE2IHwgMCwgWCA9IGs7CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICBsID0gayArIDggfCAwOwogICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGRbZVtBICsgNzIgPj4gMl0gKyAxNiA+PiAyXSA8PSAyNTYpIHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHQgPSAtMSwgbiA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBRKGYsIDEsIDc4MzMsIDApLCBBID0gMDsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChyID4+PiAwIDw9IDEpCiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgIHQgPSAtMiwgbiA9IDI7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKGgyKGksIGwsIG4pLCBlW2sgKyAxMiA+PiAyXSA9IHIgKyB0LCByID0gZVtrICsgOCA+PiAyXSwgdCA9IGVbZVtBICsgNzIgPj4gMl0gKyAxNiA+PiAyXSwgciA+Pj4gMCA+PSB0ID4+PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgZVtrICsgNCA+PiAyXSA9IHQsIGVbayA+PiAyXSA9IHIsIFEoZiwgMSwgMTczNjcsIGspLCBBID0gMDsKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmICghZjYoQSwgciwgaSArIG4gfCAwLCBrICsgMTIgfCAwLCBmKSkgewogICAgICAgICAgICAgICAgICAgIFEoZiwgMSwgNzgzMywgMCksIEEgPSAwOwogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKEEgPSAxLCAhZVtrICsgMTIgPj4gMl0pCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgUShmLCAxLCA3ODMzLCAwKSwgQSA9IDA7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBRKGYsIDEsIDc4MzMsIDApLCBBID0gMDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIFggPSBrICsgMTYgfCAwLCBBIHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBfayhBLCBpLCByKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDAsIHIgPSByIHwgMDsKICAgICAgICAgICAgICB2YXIgZiA9IDAsIGsgPSAwLCB0ID0gMCwgbiA9IDAsIGwgPSAwOwogICAgICAgICAgICAgIGlmIChmID0gZVtBICsgNDAgPj4gMl0sIGYgPj4+IDAgPj0gMTA5MjIpCiAgICAgICAgICAgICAgICByZXR1cm4gUShyLCAxLCA3MDY3LCAwKSwgMDsKICAgICAgICAgICAgICBpZiAodCA9IGYgPj4+IDAgPCAyNTYsIGVbQSArIDIwID4+IDJdID0gdCwgayA9IGVbQSArIDUyID4+IDJdLCBuID0gWihmLCB0ID8gNSA6IDYpLCBmID0gbiArIDYgfCAwLCBmID4+PiAwID4gZFtBICsgNTYgPj4gMl0pIHsKICAgICAgICAgICAgICAgIGlmIChrID0gbzAoaywgZiksICFrKQogICAgICAgICAgICAgICAgICByZXR1cm4gUihlW0EgKyA1MiA+PiAyXSksIGVbQSArIDUyID4+IDJdID0gMCwgZVtBICsgNTYgPj4gMl0gPSAwLCBRKHIsIDEsIDcxNzIsIDApLCAwOwogICAgICAgICAgICAgICAgZVtBICsgNTYgPj4gMl0gPSBmLCBlW0EgKyA1MiA+PiAyXSA9IGs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBkMihrLCAwLCBmKSwgayA9IGVbQSArIDUyID4+IDJdLCBsID0gZVtpICsgNjAgPj4gMl0sIGVbQSArIDI0ID4+IDJdID0gZVtpICsgNTYgPj4gMl0sIGVbQSArIDI4ID4+IDJdID0gbCwgazIoaywgNjUzNjUsIDIpLCBrMihrICsgMiB8IDAsIG4gKyA0IHwgMCwgMiksIGsyKGsgKyA0IHwgMCwgMCwgMSksIGsyKGsgKyA1IHwgMCwgdCA/IDgwIDogOTYsIDEpLCAoTDAoaSwgZVtBICsgNTIgPj4gMl0sIGYsIHIpIHwgMCkgPT0gKGYgfCAwKSB8IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gRzYoQSwgaSwgciwgZikgewogICAgICAgICAgICAgIHZhciBrID0gMCwgdCA9IDAsIG4gPSAwOwogICAgICAgICAgICAgIG4gPSBYIC0gMTI4IHwgMCwgWCA9IG4sIHQgPSBuLCByID0gZVtpICsgMTIgPj4gMl0gKyAociA8PCA0KSB8IDAsIGsgPSBlW3IgPj4gMl07CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKCFrKSB7CiAgICAgICAgICAgICAgICAgIGkgPSByOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZm9yICg7IGVbdCA+PiAyXSA9IHIsIHQgPSB0ICsgNCB8IDAsIGkgPSBrLCByID0gaSwgayA9IGVbciA+PiAyXSwgISFrOyApCiAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZm9yIChrID0gMDsgOyApIHsKICAgICAgICAgICAgICAgIHIgPSBlW2kgKyA4ID4+IDJdLCAoayB8IDApID4gKHIgfCAwKSAmJiAoZVtpICsgOCA+PiAyXSA9IGssIHIgPSBrKTsKICAgICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgICAgaWYgKChyIHwgMCkgPj0gKGYgfCAwKSkKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgICBpZiAoZVtpICsgNCA+PiAyXSA8PSAociB8IDApKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoSDEoQSwgMSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZVtpICsgNCA+PiAyXSA9IHI7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICByID0gciArIDEgfCAwOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoISgociB8IDApIDwgKGYgfCAwKSkpCiAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGVbaSArIDggPj4gMl0gPSByLCAodCB8IDApICE9IChuIHwgMCkpIHsKICAgICAgICAgICAgICAgICAgdCA9IHQgLSA0IHwgMCwgaSA9IGVbdCA+PiAyXSwgayA9IHI7CiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBYID0gbiArIDEyOCB8IDAsIGVbaSArIDQgPj4gMl0gPCAoZiB8IDApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIFc2KEEsIGksIHIsIGYpIHsKICAgICAgICAgICAgICB2YXIgayA9IDAsIHQgPSAwLCBuID0gMDsKICAgICAgICAgICAgICBuID0gWCAtIDEyOCB8IDAsIFggPSBuLCB0ID0gbiwgciA9IGVbaSArIDEyID4+IDJdICsgKHIgPDwgNCkgfCAwLCBrID0gZVtyID4+IDJdOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGlmICghaykgewogICAgICAgICAgICAgICAgICBpID0gcjsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZvciAoOyBlW3QgPj4gMl0gPSByLCB0ID0gdCArIDQgfCAwLCBpID0gaywgciA9IGksIGsgPSBlW3IgPj4gMl0sICEhazsgKQogICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGZvciAoayA9IDA7IDsgKSB7CiAgICAgICAgICAgICAgICByID0gZVtpICsgOCA+PiAyXSwgKGsgfCAwKSA+IChyIHwgMCkgJiYgKGVbaSArIDggPj4gMl0gPSBrLCByID0gayk7CiAgICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICAgIGlmICgociB8IDApID49IChmIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGVbaSArIDQgPj4gMl0gPD0gKHIgfCAwKSkgewogICAgICAgICAgICAgICAgICAgICAgaWYgKGVbaSArIDEyID4+IDJdKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgb2UoQSwgMSksIGVbaSArIDEyID4+IDJdID0gMTsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChvZShBLCAwKSwgciA9IHIgKyAxIHwgMCwgKGYgfCAwKSA9PSAociB8IDApKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgciA9IGY7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoZVtpICsgOCA+PiAyXSA9IHIsICh0IHwgMCkgIT0gKG4gfCAwKSkgewogICAgICAgICAgICAgICAgICB0ID0gdCAtIDQgfCAwLCBpID0gZVt0ID4+IDJdLCBrID0gcjsKICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgWCA9IG4gKyAxMjggfCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIFEoQSwgaSwgciwgZikgewogICAgICAgICAgICAgIHZhciBrID0gMCwgdCA9IDAsIG4gPSAwOwogICAgICAgICAgICAgIGsgPSBYIC0gNTI4IHwgMCwgWCA9IGs7CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKCFBKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICByOgogICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoaSAtIDEgfCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBBICsgMTIgfCAwOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgICAgICAgICBpID0gQSArIDE2IHwgMCwgQSA9IEEgKyA0IHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpID0gQSArIDIwIHwgMCwgQSA9IEEgKyA4IHwgMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICh0ID0gZVtpID4+IDJdLCAhdCB8ICFyKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgbiA9IGVbQSA+PiAyXSwgaSA9IGQyKGssIDAsIDUxMiksIGVbaSArIDUyNCA+PiAyXSA9IGYsIEEgPSBYIC0gMTYwIHwgMCwgWCA9IEEsIGVbQSArIDE0OCA+PiAyXSA9IGksIGVbQSArIDE1MiA+PiAyXSA9IDUxMSwgQSA9IGQyKEEsIDAsIDE0NCksIGVbQSArIDc2ID4+IDJdID0gLTEsIGVbQSArIDM2ID4+IDJdID0gMjYxLCBlW0EgKyA4MCA+PiAyXSA9IC0xLCBlW0EgKyA0NCA+PiAyXSA9IEEgKyAxNTksIGVbQSArIDg0ID4+IDJdID0gQSArIDE0OCwgRltpIHwgMF0gPSAwLCBJaShBLCByLCBmLCAyNTksIDI2MCksIFggPSBBICsgMTYwIHwgMCwgRltpICsgNTExIHwgMF0gPSAwLCBvMlt0IHwgMF0oaSwgbik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIFggPSBrICsgNTI4IHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBtNihBLCBpKSB7CiAgICAgICAgICAgICAgaWYgKCFBKQogICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICBpZiAoQSkgewogICAgICAgICAgICAgICAgICAgIGlmIChpID4+PiAwIDw9IDEyNykKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgICAgaWYgKCFlW2VbMTI2ODhdID4+IDJdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoaSAmIC0xMjgpID09IDU3MjE2KQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA+Pj4gMCA8PSAyMDQ3KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEZbQSArIDEgfCAwXSA9IGkgJiA2MyB8IDEyOCwgRltBIHwgMF0gPSBpID4+PiA2IHwgMTkyLCBBID0gMjsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlmICghKChpICYgLTgxOTIpICE9IDU3MzQ0ICYgaSA+Pj4gMCA+PSA1NTI5NikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgRltBICsgMiB8IDBdID0gaSAmIDYzIHwgMTI4LCBGW0EgfCAwXSA9IGkgPj4+IDEyIHwgMjI0LCBGW0EgKyAxIHwgMF0gPSBpID4+PiA2ICYgNjMgfCAxMjgsIEEgPSAzOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgaWYgKGkgLSA2NTUzNiA+Pj4gMCA8PSAxMDQ4NTc1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEZbQSArIDMgfCAwXSA9IGkgJiA2MyB8IDEyOCwgRltBIHwgMF0gPSBpID4+PiAxOCB8IDI0MCwgRltBICsgMiB8IDBdID0gaSA+Pj4gNiAmIDYzIHwgMTI4LCBGW0EgKyAxIHwgMF0gPSBpID4+PiAxMiAmIDYzIHwgMTI4LCBBID0gNDsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZVsxMjQ4NV0gPSAyNSwgQSA9IC0xOwogICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICBBID0gMTsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIEZbQSB8IDBdID0gaSwgQSA9IDE7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBBOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIGJrKEEsIGksIHIpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIGkgPSBpIHwgMCwgciA9IHIgfCAwOwogICAgICAgICAgICAgIHZhciBmID0gMCwgayA9IDAsIHQgPSAwLCBuID0gMCwgbCA9IDAsIGEgPSAwOwogICAgICAgICAgICAgIGlmIChyKQogICAgICAgICAgICAgICAgZm9yICg7IGcxKCtHW0EgPj4gMl0pLCBmID0gVzAoMSkgfCAwLCBrID0gVzAoMCkgfCAwLCB0ID0gayAmIDE2NzExNjgwLCBuID0gdCA+Pj4gOCB8IDAsIGEgPSB0IDw8IDI0LCB0ID0gayAmIC0xNjc3NzIxNiwgZiA9IGEgfCB0IDw8IDggfCAoKChmICYgMjU1KSA8PCAyNCB8IGsgPj4+IDgpICYgLTE2Nzc3MjE2IHwgKChmICYgMTY3NzcyMTUpIDw8IDggfCBrID4+PiAyNCkgJiAxNjcxMTY4MCB8IChmID4+PiA4ICYgNjUyODAgfCBmID4+PiAyNCkpLCBGW2kgfCAwXSA9IGYsIEZbaSArIDEgfCAwXSA9IGYgPj4+IDgsIEZbaSArIDIgfCAwXSA9IGYgPj4+IDE2LCBGW2kgKyAzIHwgMF0gPSBmID4+PiAyNCwgZiA9IG4gfCB0ID4+PiAyNCB8IChrIDw8IDI0IHwgKGsgJiA2NTI4MCkgPDwgOCksIG4gPSAwLCBmID0gZiB8IChuIHwgbiksIEZbaSArIDQgfCAwXSA9IGYsIEZbaSArIDUgfCAwXSA9IGYgPj4+IDgsIEZbaSArIDYgfCAwXSA9IGYgPj4+IDE2LCBGW2kgKyA3IHwgMF0gPSBmID4+PiAyNCwgaSA9IGkgKyA4IHwgMCwgQSA9IEEgKyA0IHwgMCwgbCA9IGwgKyAxIHwgMCwgKGwgfCAwKSAhPSAociB8IDApOyApCiAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiAkayhBLCBpLCByLCBmKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDAsIHIgPSByIHwgMCwgZiA9IGYgfCAwOwogICAgICAgICAgICAgIHZhciBrID0gMCwgdCA9IDA7CiAgICAgICAgICAgICAgdCA9IGVbQSArIDMyID4+IDJdLCBlW0EgKyAzNiA+PiAyXSA9IHQ7CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKGsgPSBlW0EgKyA0OCA+PiAyXSwgaykgewogICAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgICBpZiAoayA9IG8yW2VbQSArIDIwID4+IDJdXSh0LCBrLCBlW0EgPj4gMl0pIHwgMCwgKGsgfCAwKSA9PSAtMSkKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSBrICsgZVtBICsgMzYgPj4gMl0gfCAwLCBlW0EgKyAzNiA+PiAyXSA9IHQsIGsgPSBlW0EgKyA0OCA+PiAyXSAtIGsgfCAwLCBlW0EgKyA0OCA+PiAyXSA9IGssICFrKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgdCA9IGVbQSArIDMyID4+IDJdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIGVbQSArIDQ4ID4+IDJdID0gMCwgZVtBICsgMzYgPj4gMl0gPSB0LCBvMltlW0EgKyAyOCA+PiAyXV0oaSwgciwgZVtBID4+IDJdKSB8IDAgPyAoZVtBICsgNTYgPj4gMl0gPSBpLCBlW0EgKyA2MCA+PiAyXSA9IHIsIDEpIDogKGVbQSArIDY4ID4+IDJdID0gZVtBICsgNjggPj4gMl0gfCA4LCAwKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIGVbQSArIDY4ID4+IDJdID0gZVtBICsgNjggPj4gMl0gfCA4LCBRKGYsIDQsIDI3NTk5LCAwKSwgZVtBICsgNjggPj4gMl0gPSBlW0EgKyA2OCA+PiAyXSB8IDgsIDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gcWsoQSwgaSwgcikgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDA7CiAgICAgICAgICAgICAgdmFyIGYgPSAwLCBrID0gMCwgdCA9IDAsIG4gPSAwLCBsID0gMCwgYSA9IDA7CiAgICAgICAgICAgICAgaWYgKGYgPSBlW0EgKyA3MiA+PiAyXSwgayA9IGVbZiArIDE2ID4+IDJdLCAhaykKICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICAgIGZvciAobCA9IGVbZVtBICsgMTU2ID4+IDJdICsgNTU4NCA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgICAgaWYgKGVbbCArIDgwOCA+PiAyXSkgewogICAgICAgICAgICAgICAgICAgIGlmIChhID0gZVtlW0EgKyAxNTYgPj4gMl0gKyA1NTg0ID4+IDJdLCB0ID0gZVtBICsgNTIgPj4gMl0sIGsyKHQsIDY1Mzc0LCAyKSwgZiA9IGsgPj4+IDAgPCAyNTcgPyAxIDogMiwgazIodCArIDIgfCAwLCBmIHwgNCwgMiksIGsgPSB0ICsgNCB8IDAsIGsyKGssIG4sIGYpLCB0ID0gMCwgayA9IGYgKyBrIHwgMCwgazIoaywgMCwgMSksIGsyKGsgKyAxIHwgMCwgZVsoWihuLCAxMDgwKSArIGEgfCAwKSArIDgwOCA+PiAyXSwgMSksIGYgPSBmICsgNiB8IDAsIChMMChpLCBlW0EgKyA1MiA+PiAyXSwgZiwgcikgfCAwKSAhPSAoZiB8IDApKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICBmID0gZVtBICsgNzIgPj4gMl07CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKGwgPSBsICsgMTA4MCB8IDAsIHQgPSAxLCBrID0gZVtmICsgMTYgPj4gMl0sIG4gPSBuICsgMSB8IDAsIGsgPj4+IDAgPiBuID4+PiAwKQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiB0IHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBlMyhBLCBpLCByKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDAsIHIgPSByIHwgMDsKICAgICAgICAgICAgICB2YXIgZiA9IDAsIGsgPSAwLCB0ID0gMCwgbiA9IDAsIGwgPSAwLCBhID0gMCwgdSA9IDA7CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKCFjMChlW0EgKyA4ID4+IDJdLCAxODUsIHIpIHx8ICF3NihlW0EgPj4gMl0sIGksIHIpKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgbCA9IGVbQSArIDggPj4gMl0sIGYgPSBlW2wgPj4gMl0sIHQgPSBlW2wgKyA4ID4+IDJdOwogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICBpZiAoIWYpIHsKICAgICAgICAgICAgICAgICAgICBrID0gMTsKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChrID0gMSwgYSA9IGYgJiAxLCAoZiB8IDApID09IDEpCiAgICAgICAgICAgICAgICAgICAgZiA9IDA7CiAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIGZvciAoZiA9IGYgJiAtMjsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgIG4gPSAwOwogICAgICAgICAgICAgICAgICAgICAgcjogewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWsgfHwgKG4gPSAwLCAhKG8yW2VbdCA+PiAyXV0oQSwgaSwgcikgfCAwKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgICAgbiA9IChvMltlW3QgKyA0ID4+IDJdXShBLCBpLCByKSB8IDApICE9IDA7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBpZiAoayA9IG4sIHQgPSB0ICsgOCB8IDAsIHUgPSB1ICsgMiB8IDAsIChmIHwgMCkgPT0gKHUgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGYgPSAhazsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoayA9IGEgPyAwIDogaywgZiB8ICFhKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIGsgPSAobzJbZVt0ID4+IDJdXShBLCBpLCByKSB8IDApICE9IDA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlW2wgPj4gMl0gPSAwOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gayB8IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gaTMoQSwgaSwgciwgZikgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDAsIGYgPSBmIHwgMDsKICAgICAgICAgICAgICB2YXIgayA9IDA7CiAgICAgICAgICAgICAgaWYgKGVbQSArIDEwMCA+PiAyXSAhPSAxKQogICAgICAgICAgICAgICAgcmV0dXJuIFEoZiwgMSwgMjE5ODAsIDApLCAwOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGlmIChyID4+PiAwIDw9IDcgfHwgKGgyKGksIEEgKyA1NiB8IDAsIDQpLCBoMihpICsgNCB8IDAsIEEgKyA2MCB8IDAsIDQpLCByICYgMykpCiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICByID0gciAtIDggfCAwLCBrID0gciA+Pj4gMiB8IDAsIGVbQSArIDY0ID4+IDJdID0gazsKICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgaWYgKCFyKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIGlmIChyID0gRTIoaywgNCksIGVbQSArIDY4ID4+IDJdID0gciwgIXIpCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFEoZiwgMSwgNDExNiwgMCksIDA7CiAgICAgICAgICAgICAgICAgIGlmICghZVtBICsgNjQgPj4gMl0pCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgZm9yIChmID0gaSArIDggfCAwLCByID0gMDsgaDIoZiwgZVtBICsgNjggPj4gMl0gKyAociA8PCAyKSB8IDAsIDQpLCBmID0gZiArIDQgfCAwLCByID0gciArIDEgfCAwLCByID4+PiAwIDwgZFtBICsgNjQgPj4gMl07ICkKICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gZVtBICsgMTAwID4+IDJdID0gZVtBICsgMTAwID4+IDJdIHwgMiwgMTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIFEoZiwgMSwgOTg5NiwgMCksIDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gcjMoQSwgaSwgciwgZikgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDAsIGYgPSBmIHwgMDsKICAgICAgICAgICAgICB2YXIgayA9IDAsIHQgPSAwLCBuID0gMDsKICAgICAgICAgICAgICBrID0gWCAtIDE2IHwgMCwgWCA9IGssIGVbayArIDEyID4+IDJdID0gcjsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAoISghZjYoQSwgMCwgaSwgayArIDEyIHwgMCwgZikgfCBlW2sgKyAxMiA+PiAyXSkpIHsKICAgICAgICAgICAgICAgICAgaWYgKGVbQSArIDggPj4gMl0gPT0gMTYgPyBpID0gZVtBICsgMTU2ID4+IDJdICsgWihlW0EgKyAyMDQgPj4gMl0sIDU2NDQpIHwgMCA6IGkgPSBlW0EgKyAxMiA+PiAyXSwgdCA9IDEsIGRbZVtBICsgNzIgPj4gMl0gKyAxNiA+PiAyXSA8IDIpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgZm9yIChyID0gZVtpICsgNTU4NCA+PiAyXSwgbiA9IHIgKyAyOCB8IDAsIGkgPSAxLCBmID0gcjsgZVtmICsgMTEwNCA+PiAyXSA9IGVbciArIDI0ID4+IDJdLCBlW2YgKyAxODg0ID4+IDJdID0gZVtyICsgODA0ID4+IDJdLCBGMihmICsgMTEwOCB8IDAsIG4sIDc3NiksIGYgPSBmICsgMTA4MCB8IDAsIGkgPSBpICsgMSB8IDAsIGkgPj4+IDAgPCBkW2VbQSArIDcyID4+IDJdICsgMTYgPj4gMl07ICkKICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBRKGYsIDEsIDc1NzMsIDApOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gWCA9IGsgKyAxNiB8IDAsIHQgfCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIFppKEEpIHsKICAgICAgICAgICAgICB2YXIgaSA9IDAsIHIgPSAwLCBmID0gMDsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAoIUEgfHwgKGkgPSBlW0EgKyA4ID4+IDJdLCAhaSkpCiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICBpZiAoQSA9IGVbQSArIDEyID4+IDJdLCBpID4+PiAwID49IDQpCiAgICAgICAgICAgICAgICAgIGZvciAoZiA9IGkgJiAtNDsgZVtBICsgNjAgPj4gMl0gPSAwLCBlW0EgKyA1MiA+PiAyXSA9IDk5OSwgZVtBICsgNTYgPj4gMl0gPSAwLCBlW0EgKyA0NCA+PiAyXSA9IDAsIGVbQSArIDM2ID4+IDJdID0gOTk5LCBlW0EgKyA0MCA+PiAyXSA9IDAsIGVbQSArIDI4ID4+IDJdID0gMCwgZVtBICsgMjAgPj4gMl0gPSA5OTksIGVbQSArIDI0ID4+IDJdID0gMCwgZVtBICsgMTIgPj4gMl0gPSAwLCBlW0EgKyA0ID4+IDJdID0gOTk5LCBlW0EgKyA4ID4+IDJdID0gMCwgQSA9IEEgLSAtNjQgfCAwLCByID0gciArIDQgfCAwLCAoZiB8IDApICE9IChyIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICBpZiAoaSA9IGkgJiAzLCAhaSkKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIGZvciAociA9IDA7IGVbQSArIDEyID4+IDJdID0gMCwgZVtBICsgNCA+PiAyXSA9IDk5OSwgZVtBICsgOCA+PiAyXSA9IDAsIEEgPSBBICsgMTYgfCAwLCByID0gciArIDEgfCAwLCAoaSB8IDApICE9IChyIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBmMyhBLCBpLCByKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDAsIHIgPSByIHwgMDsKICAgICAgICAgICAgICB2YXIgZiA9IDAsIGsgPSAwLCB0ID0gMCwgbiA9IDAsIGwgPSAwLCBhID0gMCwgdSA9IDA7CiAgICAgICAgICAgICAgaWYgKCFjMChlW0EgKyA4ID4+IDJdLCAxODQsIHIpKQogICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgbCA9IGVbQSArIDggPj4gMl0sIGYgPSBlW2wgPj4gMl0sIHQgPSBlW2wgKyA4ID4+IDJdOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGlmIChmKSB7CiAgICAgICAgICAgICAgICAgIGlmIChrID0gMSwgYSA9IGYgJiAxLCAoZiB8IDApID09IDEpCiAgICAgICAgICAgICAgICAgICAgZiA9IDA7CiAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIGZvciAoZiA9IGYgJiAtMjsgOyApIHsKICAgICAgICAgICAgICAgICAgICAgIG4gPSAwOwogICAgICAgICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWsgfHwgKG4gPSAwLCAhKG8yW2VbdCA+PiAyXV0oQSwgaSwgcikgfCAwKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgbiA9IChvMltlW3QgKyA0ID4+IDJdXShBLCBpLCByKSB8IDApICE9IDA7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBpZiAoayA9IG4sIHQgPSB0ICsgOCB8IDAsIHUgPSB1ICsgMiB8IDAsIChmIHwgMCkgPT0gKHUgfCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGYgPSAhazsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoayA9IGEgPyAwIDogaywgZiB8ICFhIHx8IChrID0gKG8yW2VbdCA+PiAyXV0oQSwgaSwgcikgfCAwKSAhPSAwKSwgZVtsID4+IDJdID0gMCwgaykKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVbbCA+PiAyXSA9IDA7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIEEzKEEsIGksIHIsIGYpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIGkgPSBpIHwgMCwgciA9IHIgfCAwLCBmID0gZiB8IDA7CiAgICAgICAgICAgICAgdmFyIGsgPSAwLCB0ID0gMCwgbiA9IDA7CiAgICAgICAgICAgICAgayA9IFggLSAxNiB8IDAsIFggPSBrLCBuID0gZVtlW0EgKyA3MiA+PiAyXSArIDE2ID4+IDJdLCB0ID0gbiA+Pj4gMCA8IDI1NyA/IDEgOiAyOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGlmICgodCArIDIgfCAwKSAhPSAociB8IDApKSB7CiAgICAgICAgICAgICAgICAgIEEgPSAwLCBRKGYsIDEsIDY5MzQsIDApOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGVbQSArIDggPj4gMl0gPT0gMTYgPyByID0gZVtBICsgMTU2ID4+IDJdICsgWihlW0EgKyAyMDQgPj4gMl0sIDU2NDQpIHwgMCA6IHIgPSBlW0EgKyAxMiA+PiAyXSwgaDIoaSwgayArIDEyIHwgMCwgdCksIEEgPSAxLCBpID0gaSArIHQgfCAwLCBoMihpLCBrICsgOCB8IDAsIDEpLCB0ID0gZVtrICsgMTIgPj4gMl0sIHQgPj4+IDAgPj0gbiA+Pj4gMCkgewogICAgICAgICAgICAgICAgICBlW2sgKyA0ID4+IDJdID0gbiwgZVtrID4+IDJdID0gdCwgUShmLCAxLCAyNjQ2NCwgayksIEEgPSAwOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaDIoaSArIDEgfCAwLCAoZVtyICsgNTU4NCA+PiAyXSArIFoodCwgMTA4MCkgfCAwKSArIDgwOCB8IDAsIDEpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gWCA9IGsgKyAxNiB8IDAsIEEgfCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIGszKEEsIGkpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIGkgPSBpIHwgMDsKICAgICAgICAgICAgICB2YXIgciA9IDAsIGYgPSAwLCBrID0gMCwgdCA9IDAsIG4gPSAwLCBsID0gMDsKICAgICAgICAgICAgICBpZiAodCA9IFooRzJbZVtBICsgMTE2ID4+IDJdICsgNCA+PiAxXSwgNikgKyAxMCB8IDAsIHIgPSBVMih0KSwgcikgewogICAgICAgICAgICAgICAgaWYgKGsyKHIsIHQsIDQpLCBrMihyICsgNCB8IDAsIDE2Njc1MjM5NDIsIDQpLCBrMihyICsgOCB8IDAsIEcyW2VbQSArIDExNiA+PiAyXSArIDQgPj4gMV0sIDIpLCBrID0gZVtBICsgMTE2ID4+IDJdLCBHMltrICsgNCA+PiAxXSkKICAgICAgICAgICAgICAgICAgZm9yIChmID0gciArIDEwIHwgMDsgbCA9IFoobiwgNiksIGsyKGYsIEcyW2wgKyBlW2sgPj4gMl0gPj4gMV0sIDIpLCBrMihmICsgMiB8IDAsIEcyWyhlW2VbQSArIDExNiA+PiAyXSA+PiAyXSArIGwgfCAwKSArIDIgPj4gMV0sIDIpLCBrMihmICsgNCB8IDAsIEcyWyhlW2VbQSArIDExNiA+PiAyXSA+PiAyXSArIGwgfCAwKSArIDQgPj4gMV0sIDIpLCBmID0gZiArIDYgfCAwLCBuID0gbiArIDEgfCAwLCBrID0gZVtBICsgMTE2ID4+IDJdLCBuID4+PiAwIDwgRzJbayArIDQgPj4gMV07ICkKICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICBlW2kgPj4gMl0gPSB0OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gciB8IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24geTYoQSwgaSkgewogICAgICAgICAgICAgIHZhciByID0gMCwgZiA9IDAsIGsgPSAwLCB0ID0gMDsKICAgICAgICAgICAgICBpZiAoZiA9IGVbQSArIDQgPj4gMl0sIChmIHwgMCkgPT0gMjE0NzQ4MzY0NykKICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgIGlmIChyID0gZVtBID4+IDJdLCAoZiB8IDApID4gMCkKICAgICAgICAgICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICBpZiAodCA9IHIgKyBaKGssIDEyKSB8IDAsICFlW3QgPj4gMl0pCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGYgPSBlW3QgKyA4ID4+IDJdLCBmICYmIChvMltmIHwgMF0oZVt0ICsgNCA+PiAyXSksIHIgPSBlW0EgPj4gMl0pLCBBID0gWihrLCAxMikgKyByIHwgMCwgZVtBICsgOCA+PiAyXSA9IDI1MCwgZVtBICsgNCA+PiAyXSA9IGksIDE7CiAgICAgICAgICAgICAgICAgIGlmIChrID0gayArIDEgfCAwLCAoZiB8IDApID09IChrIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIHIgPSBvMChyLCBaKGYsIDEyKSArIDEyIHwgMCksIHIgPyAoZVtBID4+IDJdID0gciwgZiA9IGVbQSArIDQgPj4gMl0sIHIgPSByICsgWihmLCAxMikgfCAwLCBlW3IgKyA4ID4+IDJdID0gMjUwLCBlW3IgKyA0ID4+IDJdID0gaSwgZVtyID4+IDJdID0gMCwgZVtBICsgNCA+PiAyXSA9IGYgKyAxLCAxKSA6IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gZzAoQSkgewogICAgICAgICAgICAgIHZhciBpID0gMCwgciA9IDAsIGYgPSAwOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgaWYgKGkgPSBlW0EgKyAxNiA+PiAyXSwgciA9IElbaSB8IDBdLCAociB8IDApID09IDI1NSkgewogICAgICAgICAgICAgICAgICAgIGVbQSArIDE2ID4+IDJdID0gaSArIDEsIEZbaSArIDEgfCAwXSA9IGVbQSA+PiAyXSA+Pj4gMjA7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBmID0gZVtBID4+IDJdOwogICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCEoZiAmIDEzNDIxNzcyOCkpIHsKICAgICAgICAgICAgICAgICAgICAgIGVbQSArIDE2ID4+IDJdID0gaSArIDEsIEZbaSArIDEgfCAwXSA9IGYgPj4+IDE5OwogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKEZbaSB8IDBdID0gciArIDEsIGkgPSBlW0EgKyAxNiA+PiAyXSwgSVtpIHwgMF0gPT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICBlW0EgKyAxNiA+PiAyXSA9IGkgKyAxLCByID0gZVtBID4+IDJdICYgMTM0MjE3NzI3LCBlW0EgPj4gMl0gPSByLCBGW2kgKyAxIHwgMF0gPSByID4+PiAyMDsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVbQSArIDE2ID4+IDJdID0gaSArIDEsIEZbaSArIDEgfCAwXSA9IGVbQSA+PiAyXSA+Pj4gMTk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgciA9IDgsIGkgPSA1MjQyODc7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByID0gNywgaSA9IDEwNDg1NzU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVbQSArIDggPj4gMl0gPSByLCBlW0EgPj4gMl0gPSBlW0EgPj4gMl0gJiBpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIGIxKEEsIGksIHIpIHsKICAgICAgICAgICAgICB2YXIgZiA9IDA7CiAgICAgICAgICAgICAgaWYgKCFlW0EgKyAxMiA+PiAyXSkgewogICAgICAgICAgICAgICAgbzJbaSB8IDBdKHIsIGVbQSArIDM2ID4+IDJdKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKGYgPSBVMig4KSwgZikgewogICAgICAgICAgICAgICAgaWYgKGVbZiArIDQgPj4gMl0gPSByLCBlW2YgPj4gMl0gPSBpLCBpID0gVTIoOCksICFpKSB7CiAgICAgICAgICAgICAgICAgIFIoZik7CiAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChlW2kgPj4gMl0gPSBmLCByID0gWihlW0EgKyA0ID4+IDJdLCAxMDApLCBlW0EgKyA0MCA+PiAyXSA9IHIsIChyIHwgMCkgPCBlW0EgKyAyNCA+PiAyXSkKICAgICAgICAgICAgICAgICAgZm9yICg7IGVbQSArIDQwID4+IDJdIDwgZVtBICsgMjQgPj4gMl07ICkKICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICBlW2kgKyA0ID4+IDJdID0gZVtBICsgMjAgPj4gMl0sIGVbQSArIDIwID4+IDJdID0gaSwgZVtBICsgMjQgPj4gMl0gPSBlW0EgKyAyNCA+PiAyXSArIDEsIGkgPSBlW0EgKyAyOCA+PiAyXSwgaSAmJiAoZVtlW2kgPj4gMl0gKyA4ID4+IDJdID0gMCwgZVtBICsgMjggPj4gMl0gPSBlW2kgKyA0ID4+IDJdLCBlW0EgKyAzMiA+PiAyXSA9IGVbQSArIDMyID4+IDJdIC0gMSwgUihpKSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIGhyKEEsIGksIHIpIHsKICAgICAgICAgICAgICB2YXIgZiA9IDAsIGsgPSAwLCB0ID0gMDsKICAgICAgICAgICAgICBmID0gZVtyICsgMTYgPj4gMl07CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKCFmKSB7CiAgICAgICAgICAgICAgICAgIGlmICh2cihyKSkKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICBmID0gZVtyICsgMTYgPj4gMl07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoayA9IGVbciArIDIwID4+IDJdLCBmIC0gayA+Pj4gMCA8IGkgPj4+IDApCiAgICAgICAgICAgICAgICAgIHJldHVybiBvMltlW3IgKyAzNiA+PiAyXV0ociwgQSwgaSkgfCAwOwogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICByOiB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFpIHwgZVtyICsgODAgPj4gMl0gPCAwKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICBmb3IgKGYgPSBpOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSBBICsgZiB8IDAsIElbdCAtIDEgfCAwXSAhPSAxMCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZiA9IGYgLSAxIHwgMCwgZikKICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoayA9IG8yW2VbciArIDM2ID4+IDJdXShyLCBBLCBmKSB8IDAsIGsgPj4+IDAgPCBmID4+PiAwKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICBpID0gaSAtIGYgfCAwLCBrID0gZVtyICsgMjAgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB0ID0gQSwgZiA9IDA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBGMihrLCB0LCBpKSwgZVtyICsgMjAgPj4gMl0gPSBlW3IgKyAyMCA+PiAyXSArIGksIGsgPSBpICsgZiB8IDA7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIG4zKCkgewogICAgICAgICAgICAgIHZhciBBID0gMCwgaSA9IDA7CiAgICAgICAgICAgICAgcmV0dXJuIEEgPSBfMigxMTIpLCBlW0EgPj4gMl0gPSAwLCBlW0EgKyA0ID4+IDJdID0gMCwgZVtBICsgNTYgPj4gMl0gPSAwLCBlW0EgKyA2MCA+PiAyXSA9IDAsIGVbQSArIDQ4ID4+IDJdID0gMCwgZVtBICsgNTIgPj4gMl0gPSAyLCBlW0EgKyA0MCA+PiAyXSA9IDAsIGVbQSArIDQ0ID4+IDJdID0gMCwgRltBICsgMzYgfCAwXSA9IDEsIGVbQSArIDMyID4+IDJdID0gNSwgZVtBICsgMTA4ID4+IDJdID0gMCwgZVtBICsgMTAwID4+IDJdID0gMCwgZVtBICsgMTA0ID4+IDJdID0gMCwgZVtBICsgOTIgPj4gMl0gPSA2NCwgZVtBICsgOTYgPj4gMl0gPSA2NCwgZVtBICsgMTYgPj4gMl0gPSAwLCBlW0EgKyAyMCA+PiAyXSA9IDAsIGVbQSArIDggPj4gMl0gPSAwLCBlW0EgKyAxMiA+PiAyXSA9IDAsIGkgPSBBIC0gLTY0IHwgMCwgZVtpID4+IDJdID0gMCwgZVtpICsgNCA+PiAyXSA9IDAsIGVbQSArIDcyID4+IDJdID0gMCwgZVtBICsgNzYgPj4gMl0gPSAwLCBlW0EgKyA4MCA+PiAyXSA9IDAsIGVbQSArIDg0ID4+IDJdID0gMCwgZVtBICsgODggPj4gMl0gPSAwLCBBIHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiB0MyhBLCBpLCByKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDAsIHIgPSByIHwgMDsKICAgICAgICAgICAgICB2YXIgZiA9IDA7CiAgICAgICAgICAgICAgaWYgKGsyKGVbQSArIDUyID4+IDJdLCA2NTQ5NywgMiksIChMMChpLCBlW0EgKyA1MiA+PiAyXSwgMiwgcikgfCAwKSA9PSAyKSB7CiAgICAgICAgICAgICAgICBBID0gZVtpICsgMzIgPj4gMl0sIGVbaSArIDM2ID4+IDJdID0gQSwgZiA9IGVbaSArIDQ4ID4+IDJdOwogICAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgICBpZiAoZikgewogICAgICAgICAgICAgICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgaWYgKGYgPSBvMltlW2kgKyAyMCA+PiAyXV0oQSwgZiwgZVtpID4+IDJdKSB8IDAsIChmIHwgMCkgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZVtpICsgNjggPj4gMl0gPSBlW2kgKyA2OCA+PiAyXSB8IDgsIFEociwgNCwgMjc1OTksIDApLCBBID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlmIChBID0gZiArIGVbaSArIDM2ID4+IDJdIHwgMCwgZVtpICsgMzYgPj4gMl0gPSBBLCBmID0gZVtpICsgNDggPj4gMl0gLSBmIHwgMCwgZVtpICsgNDggPj4gMl0gPSBmLCAhZikKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIEEgPSBlW2kgKyAzMiA+PiAyXTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlW2kgKyAzNiA+PiAyXSA9IEEsIEEgPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgQSA9IDA7CiAgICAgICAgICAgICAgcmV0dXJuIEEgfCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIGwzKEEsIGksIHIpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIGkgPSBpIHwgMCwgciA9IHIgfCAwOwogICAgICAgICAgICAgIHZhciBmID0gMCwgayA9IDAsIHQgPSAwLCBuID0gMDsKICAgICAgICAgICAgICBrID0gRzJbaSArIDI2ID4+IDFdLCBpID0gRzJbaSArIDI0ID4+IDFdOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGlmICghcikKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIHQgPSByICYgMzsKICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgaWYgKCF0KSB7CiAgICAgICAgICAgICAgICAgICAgZiA9IHI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBmb3IgKGYgPSByOyBmID0gZiAtIDEgfCAwLCBrID0gayArIDEgPj4+IDEgfCAwLCBpID0gaSArIDEgPj4+IDEgfCAwLCBuID0gbiArIDEgfCAwLCAodCB8IDApICE9IChuIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAociA+Pj4gMCA8IDQpCiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICBmb3IgKDsgayA9ICgoKGsgKyAxID4+PiAxIHwgMCkgKyAxID4+PiAxIHwgMCkgKyAxID4+PiAxIHwgMCkgKyAxID4+PiAxIHwgMCwgaSA9ICgoKGkgKyAxID4+PiAxIHwgMCkgKyAxID4+PiAxIHwgMCkgKyAxID4+PiAxIHwgMCkgKyAxID4+PiAxIHwgMCwgZiA9IGYgLSA0IHwgMCwgISFmOyApCiAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZVtBID4+IDJdID0gaSwgZVtBICsgNCA+PiAyXSA9IGs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gYTMoQSwgaSwgcikgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDA7CiAgICAgICAgICAgICAgdmFyIGYgPSAwLCBrID0gMCwgdCA9IDAsIG4gPSAwOwogICAgICAgICAgICAgIGlmIChrID0gKGVbQSArIDY0ID4+IDJdIDw8IDIpICsgMTYgfCAwLCBmID0gRTIoMSwgayksICFmKQogICAgICAgICAgICAgICAgcmV0dXJuIFEociwgMSwgMTc5OTcsIDApLCAwOwogICAgICAgICAgICAgIGlmIChrMihmLCBrLCA0KSwgazIoZiArIDQgfCAwLCAxNzE4OTA5Mjk2LCA0KSwgazIoZiArIDggfCAwLCBlW0EgKyA1NiA+PiAyXSwgNCksIGsyKGYgKyAxMiB8IDAsIGVbQSArIDYwID4+IDJdLCA0KSwgZVtBICsgNjQgPj4gMl0pCiAgICAgICAgICAgICAgICBmb3IgKG4gPSBmICsgMTYgfCAwOyBrMihuLCBlW2VbQSArIDY4ID4+IDJdICsgKHQgPDwgMikgPj4gMl0sIDQpLCB0ID0gdCArIDEgfCAwLCB0ID4+PiAwIDwgZFtBICsgNjQgPj4gMl07ICkKICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgIHJldHVybiBBID0gKEwwKGksIGYsIGssIHIpIHwgMCkgPT0gKGsgfCAwKSwgQSB8fCBRKHIsIDEsIDkyMDUsIDApLCBSKGYpLCBBIHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBwNihBLCBpLCByKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDAsIHIgPSByIHwgMDsKICAgICAgICAgICAgICB2YXIgZiA9IDAsIGsgPSAwLCB0ID0gMCwgbiA9IDA7CiAgICAgICAgICAgICAgZVtBICsgMTYwID4+IDJdID0gaSwgZiA9IGVbQSArIDcyID4+IDJdOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGlmICghZiB8fCAodCA9IGVbZiArIDI0ID4+IDJdLCAhdCkgfHwgKGsgPSBlW0EgKyAxMiA+PiAyXSwgIWsgfCAhZVtrICsgNTU4NCA+PiAyXSkpCiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICBpZiAoayA9IGVbZiArIDE2ID4+IDJdLCAhaykKICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgICAgICBmb3IgKGYgPSAwOyA7ICkgewogICAgICAgICAgICAgICAgICBpZiAoZFsoZVtlW0EgKyAxMiA+PiAyXSArIDU1ODQgPj4gMl0gKyBaKGYsIDEwODApIHwgMCkgKyA0ID4+IDJdIDw9IGkgPj4+IDApCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFEociwgMSwgMTk0NjIsIDApLCAwOwogICAgICAgICAgICAgICAgICBpZiAoZVsoWihmLCA1MikgKyB0IHwgMCkgKyA0MCA+PiAyXSA9IGksIG4gPSAxLCBmID0gZiArIDEgfCAwLCAoayB8IDApID09IChmIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBuIHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiB1MyhBLCBpLCByKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDAsIHIgPSByIHwgMDsKICAgICAgICAgICAgICB2YXIgZiA9IDAsIGsgPSAwLCB0ID0gMDsKICAgICAgICAgICAgICB0ID0gWCAtIDE2IHwgMCwgWCA9IHQsIGYgPSBlW0EgKyA1MiA+PiAyXSwgayA9IFooZVsoZVtBICsgMTU2ID4+IDJdICsgWihlW0EgKyAyMDQgPj4gMl0sIDU2NDQpIHwgMCkgKyA0MjAgPj4gMl0gKyAxIHwgMCwgZFtlW0EgKyA3MiA+PiAyXSArIDE2ID4+IDJdIDwgMjU3ID8gNyA6IDkpICsgNCB8IDA7CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKGsgPj4+IDAgPiBkW0EgKyA1NiA+PiAyXSkgewogICAgICAgICAgICAgICAgICBpZiAoZiA9IG8wKGYsIGspLCAhZikgewogICAgICAgICAgICAgICAgICAgIFIoZVtBICsgNTIgPj4gMl0pLCBlW0EgKyA1MiA+PiAyXSA9IDAsIGVbQSArIDU2ID4+IDJdID0gMCwgUShyLCAxLCA3NzI5LCAwKSwgQSA9IDA7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlW0EgKyA1NiA+PiAyXSA9IGssIGVbQSArIDUyID4+IDJdID0gZjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGg2KEEsIGYsIHQgKyAxMiB8IDApLCBBID0gKEwwKGksIGVbQSArIDUyID4+IDJdLCBrLCByKSB8IDApID09IChrIHwgMCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBYID0gdCArIDE2IHwgMCwgQSB8IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gUTYoKSB7CiAgICAgICAgICAgICAgdmFyIEEgPSAwLCBpID0gMDsKICAgICAgICAgICAgICBpID0gdTJbMjM3ODBdOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGlmICghaSkgewogICAgICAgICAgICAgICAgICBlWzEyNDg1XSA9IDI4LCBBID0gLTE7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIHI6IHsKICAgICAgICAgICAgICAgICAgICBpZiAoKGkgfCAwKSA+IC0yKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICBBID0gMjAwODA5OwogICAgICAgICAgICAgICAgICAgIGs6CiAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKChpICYgMjU1KSAtIDEgfCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgICAgICAgICAgICBBID0gMTMxMDcyOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICAgICAgICAgICAgICBBID0gMzI3Njg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOgogICAgICAgICAgICAgICAgICAgICAgICAgIEEgPSA2NTUzNjsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgQSA9IDIxNDc0ODM2NDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA1OgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDY6CiAgICAgICAgICAgICAgICAgICAgICAgICAgQSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA3OgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDg6CiAgICAgICAgICAgICAgICAgICAgICAgICAgQSA9IFlBKCkgPj4+IDE2IHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA5OgogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGs7CiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBBID0gMDsKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIEEgPSBpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gQTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBWNihBKSB7CiAgICAgICAgICAgICAgdmFyIGkgPSAwLCByID0gMDsKICAgICAgICAgICAgICBpZiAoaSA9IGVbQSArIDc2ID4+IDJdLCAhKChpIHwgMCkgPj0gMCAmICghaSB8IGVbMTI2NzBdICE9IChpICYgMTA3Mzc0MTgyMykpKSkgewogICAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgICBpZiAoZVtBICsgODAgPj4gMl0gPT0gMTAgfHwgKGkgPSBlW0EgKyAyMCA+PiAyXSwgKGkgfCAwKSA9PSBlW0EgKyAxNiA+PiAyXSkpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgZVtBICsgMjAgPj4gMl0gPSBpICsgMSwgRltpIHwgMF0gPSAxMDsKICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgQnIoQSk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGkgPSBBICsgNzYgfCAwLCByID0gZVtpID4+IDJdLCBlW2kgPj4gMl0gPSByIHx8IDEwNzM3NDE4MjM7CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICBpZiAoZVtBICsgODAgPj4gMl0gPT0gMTAgfHwgKHIgPSBlW0EgKyAyMCA+PiAyXSwgKHIgfCAwKSA9PSBlW0EgKyAxNiA+PiAyXSkpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgZVtBICsgMjAgPj4gMl0gPSByICsgMSwgRltyIHwgMF0gPSAxMDsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIEJyKEEpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlW2kgPj4gMl0gPSAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIG8zKEEsIGksIHIsIGYsIGspIHsKICAgICAgICAgICAgICBpZiAoQSA9IEEgfCAwLCBpID0gaSB8IDAsIHIgPSByIHwgMCwgZiA9IGYgfCAwLCBrID0gayB8IDAsIHQxKEEsIGVbaSArIDggPj4gMl0sIGspKSB7CiAgICAgICAgICAgICAgICBlW2kgKyAyOCA+PiAyXSA9PSAxIHwgZVtpICsgNCA+PiAyXSAhPSAociB8IDApIHx8IChlW2kgKyAyOCA+PiAyXSA9IGYpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAoIXQxKEEsIGVbaSA+PiAyXSwgaykpCiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICBpZiAoIShlW2kgKyAxNiA+PiAyXSAhPSAociB8IDApICYgZVtpICsgMjAgPj4gMl0gIT0gKHIgfCAwKSkpIHsKICAgICAgICAgICAgICAgICAgaWYgKChmIHwgMCkgIT0gMSkKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICBlW2kgKyAzMiA+PiAyXSA9IDE7CiAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVbaSArIDIwID4+IDJdID0gciwgZVtpICsgMzIgPj4gMl0gPSBmLCBlW2kgKyA0MCA+PiAyXSA9IGVbaSArIDQwID4+IDJdICsgMSwgZVtpICsgMzYgPj4gMl0gIT0gMSB8IGVbaSArIDI0ID4+IDJdICE9IDIgfHwgKEZbaSArIDU0IHwgMF0gPSAxKSwgZVtpICsgNDQgPj4gMl0gPSA0OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiB6ZShBLCBpLCByKSB7CiAgICAgICAgICAgICAgdmFyIGYgPSAwLCBrID0gMCwgdCA9IDAsIG4gPSAwLCBsID0gMCwgYSA9IDA7CiAgICAgICAgICAgICAgaWYgKChyIHwgMCkgPiAwKQogICAgICAgICAgICAgICAgZm9yIChrID0gZVtBICsgMTIgPj4gMl0sIGYgPSBlW0EgKyAxNiA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgICAgbCA9IHIsIHIgPSByIC0gMSB8IDAsIGEgPSBpID4+PiByICYgMTsKICAgICAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgICAgIGlmIChmKSB7CiAgICAgICAgICAgICAgICAgICAgICB0ID0gazsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICh0ID0gayA8PCA4ICYgNjUyODAsIGVbQSArIDEyID4+IDJdID0gdCwgZiA9ICh0IHwgMCkgPT0gNjUyODAgPyA3IDogOCwgZVtBICsgMTYgPj4gMl0gPSBmLCBuID0gZVtBICsgOCA+PiAyXSwgbiA+Pj4gMCA+PSBkW0EgKyA0ID4+IDJdKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICBlW0EgKyA4ID4+IDJdID0gbiArIDEsIEZbbiB8IDBdID0gaywgdCA9IGVbQSArIDEyID4+IDJdLCBmID0gZVtBICsgMTYgPj4gMl07CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKGYgPSBmIC0gMSB8IDAsIGVbQSArIDE2ID4+IDJdID0gZiwgayA9IGEgPDwgZiB8IHQsIGVbQSArIDEyID4+IDJdID0gaywgIShsID4+PiAwID4gMSkpCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gZzMoQSwgaSkgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwOwogICAgICAgICAgICAgIHZhciByID0gMCwgZiA9IDA7CiAgICAgICAgICAgICAgaWYgKHIgPSBlW0EgKyAzMiA+PiAyXSwgaSA9IGVbQSArIDI4ID4+IDJdLCByID4+PiAwID4gaSArIDcgPj4+IDApCiAgICAgICAgICAgICAgICBmb3IgKDsgbzJbZVtBICsgMzYgPj4gMl1dKGVbQSArIDI0ID4+IDJdICsgKGkgPDwgMikgfCAwLCBlW0EgPj4gMl0sIGVbQSArIDE2ID4+IDJdLCAhZVtBICsgMTIgPj4gMl0sIGVbQSArIDIwID4+IDJdLCA4KSwgZiA9IGkgKyAxNSB8IDAsIGkgPSBpICsgOCB8IDAsIHIgPSBlW0EgKyAzMiA+PiAyXSwgZiA+Pj4gMCA8IHIgPj4+IDA7ICkKICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgIGkgPj4+IDAgPCByID4+PiAwICYmIG8yW2VbQSArIDM2ID4+IDJdXShlW0EgKyAyNCA+PiAyXSArIChpIDw8IDIpIHwgMCwgZVtBID4+IDJdLCBlW0EgKyAxNiA+PiAyXSwgIWVbQSArIDEyID4+IDJdLCBlW0EgKyAyMCA+PiAyXSwgciAtIGkgfCAwKSwgUihlW0EgPj4gMl0pLCBSKEEpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIENpKEEsIGkpIHsKICAgICAgICAgICAgICB2YXIgciA9IDAsIGYgPSAwLCBrID0gMCwgdCA9IDAsIG4gPSAwLCBsID0gMDsKICAgICAgICAgICAgICBpZiAoQSkgewogICAgICAgICAgICAgICAgaWYgKHIgPSBlW0EgKyA0ID4+IDJdLCByICYmIChSKHIpLCBlW0EgKyA0ID4+IDJdID0gMCksIGkpCiAgICAgICAgICAgICAgICAgIGZvciAociA9IEE7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGYgPSBlW3IgKyAyMDAgPj4gMl0sIGYpIHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChrID0gMCwgdCA9IGVbciArIDE5NiA+PiAyXSwgdCkgewogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgbiA9IGVbZiArIDEyID4+IDJdLCBuICYmIChSKG4pLCBlW2YgKyAxMiA+PiAyXSA9IDAsIHQgPSBlW3IgKyAxOTYgPj4gMl0pLCBmID0gZiArIDE2IHwgMCwgayA9IGsgKyAxIHwgMCwgayA+Pj4gMCA8IHQgPj4+IDA7ICkKICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBlW3IgKyAyMDAgPj4gMl07CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBSKGYpLCBlW3IgKyAyMDAgPj4gMl0gPSAwOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAociA9IHIgKyAyNDAgfCAwLCBsID0gbCArIDEgfCAwLCAobCB8IDApID09IChpIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgUihBKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gazIoQSwgaSwgcikgewogICAgICAgICAgICAgIHZhciBmID0gMCwgayA9IDA7CiAgICAgICAgICAgICAgZiA9IFggLSAxNiB8IDAsIGVbZiArIDEyID4+IDJdID0gaTsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAoIXIpCiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICBpZiAoayA9IHIgJiAzLCBpID0gKGYgKyAxMiB8IDApICsgciB8IDAsIHIgPj4+IDAgPj0gNCkKICAgICAgICAgICAgICAgICAgZm9yIChmID0gciAmIC00LCByID0gMDsgRltBIHwgMF0gPSBJW2kgLSAxIHwgMF0sIEZbQSArIDEgfCAwXSA9IElbaSAtIDIgfCAwXSwgRltBICsgMiB8IDBdID0gSVtpIC0gMyB8IDBdLCBpID0gaSAtIDQgfCAwLCBGW0EgKyAzIHwgMF0gPSBJW2kgfCAwXSwgQSA9IEEgKyA0IHwgMCwgciA9IHIgKyA0IHwgMCwgKGYgfCAwKSAhPSAociB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgaWYgKCFrKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgZm9yIChyID0gMDsgaSA9IGkgLSAxIHwgMCwgRltBIHwgMF0gPSBJW2kgfCAwXSwgQSA9IEEgKyAxIHwgMCwgciA9IHIgKyAxIHwgMCwgKGsgfCAwKSAhPSAociB8IDApOyApCiAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gaDMoQSwgaSwgcikgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDA7CiAgICAgICAgICAgICAgdmFyIGYgPSAwLCBrID0gMCwgdCA9IDAsIG4gPSAwLCBsID0gMDsKICAgICAgICAgICAgICByZXR1cm4gayA9IGVbQSArIDg0ID4+IDJdLCB0ID0gZVtrID4+IDJdLCBmID0gZVtrICsgNCA+PiAyXSwgbCA9IGVbQSArIDI4ID4+IDJdLCBuID0gZVtBICsgMjAgPj4gMl0gLSBsIHwgMCwgbiA9IGYgPj4+IDAgPCBuID4+PiAwID8gZiA6IG4sIG4gJiYgKEYyKHQsIGwsIG4pLCB0ID0gbiArIGVbayA+PiAyXSB8IDAsIGVbayA+PiAyXSA9IHQsIGYgPSBlW2sgKyA0ID4+IDJdIC0gbiB8IDAsIGVbayArIDQgPj4gMl0gPSBmKSwgZiA9IHIgPj4+IDAgPiBmID4+PiAwID8gZiA6IHIsIGYgJiYgKEYyKHQsIGksIGYpLCB0ID0gZiArIGVbayA+PiAyXSB8IDAsIGVbayA+PiAyXSA9IHQsIGVbayArIDQgPj4gMl0gPSBlW2sgKyA0ID4+IDJdIC0gZiksIEZbdCB8IDBdID0gMCwgaSA9IGVbQSArIDQ0ID4+IDJdLCBlW0EgKyAyOCA+PiAyXSA9IGksIGVbQSArIDIwID4+IDJdID0gaSwgciB8IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gczMoQSwgaSwgcikgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDA7CiAgICAgICAgICAgICAgdmFyIGYgPSAwLCBrID0gMDsKICAgICAgICAgICAgICBmID0gWCArIC02NCB8IDAsIFggPSBmLCBrID0gMTsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAodDEoQSwgaSwgMCkgfHwgKGsgPSAwLCAhaSkgfHwgKGkgPSBtMShpLCA0ODU3NiksIGsgPSAwLCAhaSkpCiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICBkMihmICsgOCB8IDAsIDAsIDU2KSwgRltmICsgNTkgfCAwXSA9IDEsIGVbZiArIDE2ID4+IDJdID0gLTEsIGVbZiArIDEyID4+IDJdID0gQSwgZVtmICsgNCA+PiAyXSA9IGksIGVbZiArIDUyID4+IDJdID0gMSwgbzJbZVtlW2kgPj4gMl0gKyAyOCA+PiAyXV0oaSwgZiArIDQgfCAwLCBlW3IgPj4gMl0sIDEpLCBBID0gZVtmICsgMjggPj4gMl0sIChBIHwgMCkgPT0gMSAmJiAoZVtyID4+IDJdID0gZVtmICsgMjAgPj4gMl0pLCBrID0gKEEgfCAwKSA9PSAxOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gQSA9IGssIFggPSBmIC0gLTY0IHwgMCwgQSB8IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gWTYoQSwgaSwgciwgZikgewogICAgICAgICAgICAgIEZbQSArIDUzIHwgMF0gPSAxOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGlmIChlW0EgKyA0ID4+IDJdICE9IChyIHwgMCkpCiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICBGW0EgKyA1MiB8IDBdID0gMSwgciA9IGVbQSArIDE2ID4+IDJdOwogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICBpZiAoIXIpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoZVtBICsgMzYgPj4gMl0gPSAxLCBlW0EgKyAyNCA+PiAyXSA9IGYsIGVbQSArIDE2ID4+IDJdID0gaSwgKGYgfCAwKSAhPSAxKQogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICBpZiAoZVtBICsgNDggPj4gMl0gPT0gMSkKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoKGkgfCAwKSA9PSAociB8IDApKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSBlW0EgKyAyNCA+PiAyXSwgKHIgfCAwKSA9PSAyICYmIChlW0EgKyAyNCA+PiAyXSA9IGYsIHIgPSBmKSwgZVtBICsgNDggPj4gMl0gIT0gMSkKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgaWYgKChyIHwgMCkgPT0gMSkKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlW0EgKyAzNiA+PiAyXSA9IGVbQSArIDM2ID4+IDJdICsgMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIEZbQSArIDU0IHwgMF0gPSAxOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBINihBKSB7CiAgICAgICAgICAgICAgdmFyIGkgPSAwLCByID0gMDsKICAgICAgICAgICAgICBpID0gZVtBICsgNDQgPj4gMl07CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKHIgPSBlW0EgKyAzNiA+PiAyXSwgcikgewogICAgICAgICAgICAgICAgICBpZiAoaSA+Pj4gMCA8PSBkW0EgKyA0OCA+PiAyXSkKICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgICAgICAgaWYgKGVbQSArIDQwID4+IDJdKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gciA9IFAwKGkpLCBlW0EgKyAzNiA+PiAyXSA9IHIsIGkgPSBlW0EgKyA0NCA+PiAyXSwgIWkgfCByID8gKGVbQSArIDQwID4+IDJdID0gMSwgZVtBICsgNDggPj4gMl0gPSBpLCAxKSA6IDA7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBSKHIpLCBpID0gUDAoZVtBICsgNDQgPj4gMl0pLCBlW0EgKyAzNiA+PiAyXSA9IGksIGkgPyAoZVtBICsgNDAgPj4gMl0gPSAxLCBlW0EgKyA0OCA+PiAyXSA9IGVbQSArIDQ0ID4+IDJdLCAxKSA6IChlW0EgKyA0OCA+PiAyXSA9IDAsIGVbQSArIDQwID4+IDJdID0gMCwgZVtBICsgNDQgPj4gMl0gPSAwLCAwKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBzcihBKSB7CiAgICAgICAgICAgICAgZVtBICsgMTAwID4+IDJdID0gMzU5NjgsIGVbQSArIDk2ID4+IDJdID0gMzU5NjgsIGVbQSArIDkyID4+IDJdID0gMzU5NjgsIGVbQSArIDg4ID4+IDJdID0gMzU5NjgsIGVbQSArIDg0ID4+IDJdID0gMzU5NjgsIGVbQSArIDgwID4+IDJdID0gMzU5NjgsIGVbQSArIDc2ID4+IDJdID0gMzU5NjgsIGVbQSArIDcyID4+IDJdID0gMzU5NjgsIGVbQSArIDY4ID4+IDJdID0gMzU5NjgsIGVbQSArIDY0ID4+IDJdID0gMzU5NjgsIGVbQSArIDYwID4+IDJdID0gMzU5NjgsIGVbQSArIDU2ID4+IDJdID0gMzU5NjgsIGVbQSArIDUyID4+IDJdID0gMzU5NjgsIGVbQSArIDQ4ID4+IDJdID0gMzU5NjgsIGVbQSArIDQ0ID4+IDJdID0gMzU5NjgsIGVbQSArIDQwID4+IDJdID0gMzU5NjgsIGVbQSArIDM2ID4+IDJdID0gMzU5NjgsIGVbQSArIDMyID4+IDJdID0gMzU5NjgsIGVbQSArIDI4ID4+IDJdID0gMzU5Njg7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gSDEoQSwgaSkgewogICAgICAgICAgICAgIHZhciByID0gMCwgZiA9IDAsIGsgPSAwLCB0ID0gMDsKICAgICAgICAgICAgICBpZiAoKGkgfCAwKSA8PSAwKQogICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgZm9yIChyID0gZVtBICsgMTIgPj4gMl0sIGYgPSBlW0EgKyAxNiA+PiAyXTsgOyApIHsKICAgICAgICAgICAgICAgIGsgPSBpOwogICAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgICBpZiAoZiB8fCAociA9IHIgPDwgOCAmIDY1MjgwLCBlW0EgKyAxMiA+PiAyXSA9IHIsIGYgPSAociB8IDApID09IDY1MjgwID8gNyA6IDgsIGVbQSArIDE2ID4+IDJdID0gZiwgaSA9IGVbQSArIDggPj4gMl0sIGkgPj4+IDAgPj0gZFtBICsgNCA+PiAyXSkpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgZVtBICsgOCA+PiAyXSA9IGkgKyAxLCByID0gSVtpIHwgMF0gfCByLCBlW0EgKyAxMiA+PiAyXSA9IHI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoZiA9IGYgLSAxIHwgMCwgZVtBICsgMTYgPj4gMl0gPSBmLCBpID0gayAtIDEgfCAwLCB0ID0gKHIgPj4+IGYgJiAxKSA8PCBpIHwgdCwgIShrID4+PiAwID4gMSkpCiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gdDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiB3MyhBLCBpLCByLCBmKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDAsIHIgPSByIHwgMCwgZiA9IGYgfCAwOwogICAgICAgICAgICAgIHZhciBrID0gMCwgdCA9IDA7CiAgICAgICAgICAgICAgdCA9IFggLSAxNiB8IDAsIFggPSB0LCBrID0gZVtBICsgMjQgPj4gMl0sIChrIHwgMCkgIT0gMjU1ICYmIChlW3QgPj4gMl0gPSBrLCBRKGYsIDIsIDQ2MjYsIHQpKTsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIGlmIChlW0EgKyAyMCA+PiAyXSA9PSAociB8IDApKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHIpCiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgIGsgPSAxOwogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgayA9IDAsIFEoZiwgMSwgMjYwNTEsIDApOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZm9yIChyID0gMDsgayA9IDEsIGgyKGksIChlW0EgKyA3MiA+PiAyXSArIFoociwgMTIpIHwgMCkgKyA4IHwgMCwgMSksIGkgPSBpICsgMSB8IDAsIHIgPSByICsgMSB8IDAsIHIgPj4+IDAgPCBkW0EgKyAyMCA+PiAyXTsgKQogICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBYID0gdCArIDE2IHwgMCwgayB8IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gQjMoQSwgaSwgcikgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDA7CiAgICAgICAgICAgICAgdmFyIGYgPSAwLCBrID0gMCwgdCA9IDAsIG4gPSAwOwogICAgICAgICAgICAgIGYgPSBYIC0gMTYgfCAwLCBYID0gZiwgbiA9IGVbaSArIDYwID4+IDJdLCBrID0gZiArIDggfCAwLCB0ID0gZVtpICsgNTYgPj4gMl0sIGsyKGssIHQgLSBlW0EgKyA4MCA+PiAyXSB8IDAsIDQpLCBrMihmICsgMTIgfCAwLCAxNzg1NzM3ODI3LCA0KTsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgIGlmICghKG8yW2VbaSArIDQ0ID4+IDJdXShpLCBlW0EgKyA4MCA+PiAyXSwgZVtBICsgODQgPj4gMl0sIHIpIHwgMCkgfHwgKEwwKGksIGssIDgsIHIpIHwgMCkgIT0gOCkKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICBpZiAoQSA9IDEsIG8yW2VbaSArIDQ0ID4+IDJdXShpLCB0LCBuLCByKSB8IDApCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIFEociwgMSwgMjE0MDgsIDApLCBBID0gMDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIFggPSBmICsgMTYgfCAwLCBBIHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBoMihBLCBpLCByKSB7CiAgICAgICAgICAgICAgdmFyIGYgPSAwLCBrID0gMDsKICAgICAgICAgICAgICBlW2kgPj4gMl0gPSAwOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGlmICghcikKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIGlmIChmID0gciAmIDMsIGkgPSBpICsgciB8IDAsIHIgPj4+IDAgPj0gNCkKICAgICAgICAgICAgICAgICAgZm9yIChrID0gciAmIC00LCByID0gMDsgRltpIC0gMSB8IDBdID0gSVtBIHwgMF0sIEZbaSAtIDIgfCAwXSA9IElbQSArIDEgfCAwXSwgRltpIC0gMyB8IDBdID0gSVtBICsgMiB8IDBdLCBpID0gaSAtIDQgfCAwLCBGW2kgfCAwXSA9IElbQSArIDMgfCAwXSwgQSA9IEEgKyA0IHwgMCwgciA9IHIgKyA0IHwgMCwgKGsgfCAwKSAhPSAociB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgaWYgKCFmKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgZm9yIChyID0gMDsgaSA9IGkgLSAxIHwgMCwgRltpIHwgMF0gPSBJW0EgfCAwXSwgQSA9IEEgKyAxIHwgMCwgciA9IHIgKyAxIHwgMCwgKGYgfCAwKSAhPSAociB8IDApOyApCiAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gYzMoQSwgaSwgciwgZikgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDAsIGYgPSBmIHwgMDsKICAgICAgICAgICAgICB2YXIgayA9IDAsIHQgPSAwLCBuID0gMDsKICAgICAgICAgICAgICBrID0gWCAtIDE2IHwgMCwgWCA9IGs7CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKCFyKSB7CiAgICAgICAgICAgICAgICAgIFEoZiwgMSwgNjY3NywgMCksIEEgPSAwOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGgyKGksIGsgKyAxMiB8IDAsIDEpLCB0ID0gciAtIDEgfCAwLCBBID0gMSwgIXQpCiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICBmb3IgKEEgPSAwLCByID0gMDsgaSA9IGkgKyAxIHwgMCwgaDIoaSwgayArIDggfCAwLCAxKSwgbiA9IGVbayArIDggPj4gMl0sIHIgPSBuIDw8IDI0ID4+IDMxICYgKG4gJiAxMjcgfCByKSA8PCA3LCBBID0gQSArIDEgfCAwLCAodCB8IDApICE9IChBIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgaWYgKEEgPSAxLCAhcikKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIFEoZiwgMSwgNjY3NywgMCksIEEgPSAwOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gWCA9IGsgKyAxNiB8IDAsIEEgfCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIHYzKEEsIGksIHIpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIGkgPSBpIHwgMCwgciA9IHIgfCAwOwogICAgICAgICAgICAgIHZhciBmID0gMCwgayA9IDAsIHQgPSAwLCBuID0gMDsKICAgICAgICAgICAgICBpZiAoZiA9IGVbQSArIDUyID4+IDJdLCBuID0gZVtBICsgMTAwID4+IDJdLCB0ID0gdWUobiksIGsgPSB0ICsgNiB8IDAsIGsgPj4+IDAgPiBkW0EgKyA1NiA+PiAyXSkgewogICAgICAgICAgICAgICAgaWYgKGYgPSBvMChmLCBrKSwgIWYpCiAgICAgICAgICAgICAgICAgIHJldHVybiBSKGVbQSArIDUyID4+IDJdKSwgZVtBICsgNTIgPj4gMl0gPSAwLCBlW0EgKyA1NiA+PiAyXSA9IDAsIFEociwgMSwgNzAyNCwgMCksIDA7CiAgICAgICAgICAgICAgICBlW0EgKyA1NiA+PiAyXSA9IGssIGVbQSArIDUyID4+IDJdID0gZjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIGsyKGYsIDY1MzgwLCAyKSwgazIoZiArIDIgfCAwLCB0ICsgNCB8IDAsIDIpLCBrMihmICsgNCB8IDAsIDEsIDIpLCBGMihmICsgNiB8IDAsIG4sIHQpLCAoTDAoaSwgZVtBICsgNTIgPj4gMl0sIGssIHIpIHwgMCkgPT0gKGsgfCAwKSB8IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gWDYoQSwgaSwgciwgZikgewogICAgICAgICAgICAgIHZhciBrID0gMCwgdCA9IDAsIG4gPSBXKDApLCBsID0gMCwgYSA9IFcoMCksIHUgPSAwLCBvID0gVygwKTsKICAgICAgICAgICAgICBpZiAoZikKICAgICAgICAgICAgICAgIGZvciAoOyBrID0gdCA8PCAyLCBsID0gayArIGkgfCAwLCBhID0gR1tsID4+IDJdLCB1ID0gQSArIGsgfCAwLCBuID0gR1t1ID4+IDJdLCBrID0gciArIGsgfCAwLCBvID0gR1trID4+IDJdLCBHW3UgPj4gMl0gPSBXKG8gKiBXKDEuNDAxOTk5OTUwNDA4OTM1NSkpICsgbiwgR1tsID4+IDJdID0gVyhuICsgVyhhICogVygtMC4zNDQxMzAwMDk0MTI3NjU1KSkpICsgVyhvICogVygtMC43MTQxMzk5OTc5NTkxMzcpKSwgR1trID4+IDJdID0gbiArIFcoYSAqIFcoMS43NzE5OTk5NTUxNzczMDcxKSksIHQgPSB0ICsgMSB8IDAsICh0IHwgMCkgIT0gKGYgfCAwKTsgKQogICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gSTMoQSwgaSwgcikgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDA7CiAgICAgICAgICAgICAgdmFyIGYgPSAwLCBrID0gMCwgdCA9IDAsIG4gPSAwLCBsID0gMCwgYSA9IDAsIHUgPSAwOwogICAgICAgICAgICAgIHQgPSBlW0EgKyA0MCA+PiAyXSwgbiA9IGVbQSArIDIwID4+IDJdLCBsID0gZVtpICsgNTYgPj4gMl0sIGEgPSBlW2kgKyA2MCA+PiAyXSwgZiA9IGVbQSArIDI4ID4+IDJdLCBrID0gZVtBICsgMjQgPj4gMl0gKyA2IHwgMCwgZiA9IGsgPj4+IDAgPCA2ID8gZiArIDEgfCAwIDogZjsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAoIShvMltlW2kgKyA0NCA+PiAyXV0oaSwgaywgZiwgcikgfCAwKSB8fCAoZiA9IGVbQSArIDMyID4+IDJdLCBBID0gWihuID8gNSA6IDYsIHQpLCAoTDAoaSwgZiwgQSwgcikgfCAwKSAhPSAoQSB8IDApKSkKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIHUgPSAobzJbZVtpICsgNDQgPj4gMl1dKGksIGwsIGEsIHIpIHwgMCkgIT0gMDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIHUgfCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIFozKEEsIGksIHIpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIGkgPSBpIHwgMCwgciA9IHIgfCAwOwogICAgICAgICAgICAgIHZhciBmID0gMCwgayA9IFcoMCksIHQgPSAwLCBuID0gMDsKICAgICAgICAgICAgICBpZiAoZiA9IFggLSAxNiB8IDAsIFggPSBmLCByKQogICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgIEZbZiArIDE1IHwgMF0gPSBJW0EgfCAwXSwgRltmICsgMTQgfCAwXSA9IElbQSArIDEgfCAwXSwgRltmICsgMTMgfCAwXSA9IElbQSArIDIgfCAwXSwgRltmICsgMTIgfCAwXSA9IElbQSArIDMgfCAwXSwgayA9IEdbZiArIDEyID4+IDJdOwogICAgICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICAgICAgaWYgKFcoUjIoaykpIDwgVygyMTQ3NDgzNjQ4KSkgewogICAgICAgICAgICAgICAgICAgICAgdCA9IH5+azsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHQgPSAtMjE0NzQ4MzY0ODsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoZVtpID4+IDJdID0gdCwgaSA9IGkgKyA0IHwgMCwgQSA9IEEgKyA0IHwgMCwgbiA9IG4gKyAxIHwgMCwgKG4gfCAwKSA9PSAociB8IDApKQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIFggPSBmICsgMTYgfCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIHdyKEEpIHsKICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgciA9IDAsIGYgPSAwOyByID0gQSwgQSA9IEEgKyAxIHwgMCwgaSA9IEZbciB8IDBdLCAhISgoaSB8IDApID09IDMyIHwgaSAtIDkgPj4+IDAgPCA1KTsgKQogICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgIGYgPSAxOwogICAgICAgICAgICAgIGU6CiAgICAgICAgICAgICAgICBzd2l0Y2ggKChpICYgMjU1KSAtIDQzIHwgMCkgewogICAgICAgICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgICAgICAgZiA9IDA7CiAgICAgICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICAgICBpID0gRltBIHwgMF0sIHIgPSBBOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKEEgPSAwLCBpID0gaSAtIDQ4IHwgMCwgaSA+Pj4gMCA8PSA5KQogICAgICAgICAgICAgICAgZm9yICg7IEEgPSBaKEEsIDEwKSAtIGkgfCAwLCBpID0gRltyICsgMSB8IDBdLCByID0gciArIDEgfCAwLCBpID0gaSAtIDQ4IHwgMCwgaSA+Pj4gMCA8IDEwOyApCiAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICByZXR1cm4gZiA/IDAgLSBBIHwgMCA6IEE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gdWUoQSkgewogICAgICAgICAgICAgIHZhciBpID0gMCwgciA9IDAsIGYgPSAwOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgaWYgKGkgPSBBLCAhKGkgJiAzKSkKICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICBpZiAoIUlbaSB8IDBdKQogICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IGkgKyAxIHwgMCwgIShpICYgMykpCiAgICAgICAgICAgICAgICAgICAgICBicmVhayBpOwogICAgICAgICAgICAgICAgICAgIGlmICghSVtpIHwgMF0pCiAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZm9yICg7IHIgPSBpLCBpID0gaSArIDQgfCAwLCBmID0gZVtyID4+IDJdLCAoKGYgfCAxNjg0MzAwOCAtIGYpICYgLTIxMzkwNjIxNDQpID09IC0yMTM5MDYyMTQ0OyApCiAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgIGZvciAoOyBpID0gciwgciA9IGkgKyAxIHwgMCwgISFJW2kgfCAwXTsgKQogICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBpIC0gQSB8IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gQzMoQSwgaSwgcikgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDA7CiAgICAgICAgICAgICAgdmFyIGYgPSAwLCBrID0gMCwgdCA9IDAsIG4gPSAwLCBsID0gMCwgYSA9IDA7CiAgICAgICAgICAgICAgZiA9IFggLSAxNiB8IDAsIFggPSBmLCBrID0gZVtpICsgNCA+PiAyXSwgdCA9IGVbaSA+PiAyXSwgbiA9IGsgLSB0IHwgMDsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAobiA+Pj4gMCA8IHIgPj4+IDApIHsKICAgICAgICAgICAgICAgICAgVGUoaSwgciAtIG4gfCAwKSwgdCA9IGVbaSA+PiAyXSwgayA9IGVbaSArIDQgPj4gMl07CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAociA+Pj4gMCA+PSBuID4+PiAwKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgayA9IHIgKyB0IHwgMCwgZVtpICsgNCA+PiAyXSA9IGs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVbZiArIDEyID4+IDJdID0gdCwgZVtmICsgOCA+PiAyXSA9IGsgLSB0LCBsID0gQSwgYSA9IHJyKDI5OTg4LCBmICsgOCB8IDApIHwgMCwgZVtsICsgNCA+PiAyXSA9IGEsIGVbQSA+PiAyXSA9IDUwNjU2LCBYID0gZiArIDE2IHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBHMyhBKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwOwogICAgICAgICAgICAgIHZhciBpID0gMCwgciA9IDAsIGYgPSAwLCBrID0gMDsKICAgICAgICAgICAgICBpZiAoaSA9IGVbQSArIDI0ID4+IDJdLCBpKSB7CiAgICAgICAgICAgICAgICBpZiAociA9IGVbQSArIDI4ID4+IDJdLCBrID0gKHIgPj4+IDApIC8gNTIgfCAwLCByID4+PiAwID49IDUyKSB7CiAgICAgICAgICAgICAgICAgIGZvciAoOyByID0gZVtpID4+IDJdLCByICYmIChSKHIgLSAxIHwgMCksIGVbaSA+PiAyXSA9IDApLCByID0gZVtpICsgNCA+PiAyXSwgciAmJiAoUihyKSwgZVtpICsgNCA+PiAyXSA9IDApLCByID0gZVtpICsgOCA+PiAyXSwgciAmJiAoUihyKSwgZVtpICsgOCA+PiAyXSA9IDApLCBpID0gaSArIDUyIHwgMCwgZiA9IGYgKyAxIHwgMCwgKGsgfCAwKSAhPSAoZiB8IDApOyApCiAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICBpID0gZVtBICsgMjQgPj4gMl07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBSKGkpLCBlW0EgKyAyNCA+PiAyXSA9IDA7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIFczKEEpIHsKICAgICAgICAgICAgICBBID0gQSB8IDA7CiAgICAgICAgICAgICAgdmFyIGkgPSAwLCByID0gMCwgZiA9IDAsIGsgPSAwOwogICAgICAgICAgICAgIGlmIChpID0gZVtBICsgMjQgPj4gMl0sIGkpIHsKICAgICAgICAgICAgICAgIGlmIChyID0gZVtBICsgMjggPj4gMl0sIHIgPj4+IDAgPj0gNjQpIHsKICAgICAgICAgICAgICAgICAgZm9yIChrID0gciA+Pj4gNiB8IDA7IHIgPSBlW2kgPj4gMl0sIHIgJiYgKFIociksIGVbaSA+PiAyXSA9IDApLCByID0gZVtpICsgNCA+PiAyXSwgciAmJiAoUihyKSwgZVtpICsgNCA+PiAyXSA9IDApLCBSKGVbaSArIDYwID4+IDJdKSwgZVtpICsgNjAgPj4gMl0gPSAwLCBpID0gaSAtIC02NCB8IDAsIGYgPSBmICsgMSB8IDAsIChrIHwgMCkgIT0gKGYgfCAwKTsgKQogICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgaSA9IGVbQSArIDI0ID4+IDJdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgUihpKSwgZVtBICsgMjQgPj4gMl0gPSAwOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBtMyhBLCBpKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDA7CiAgICAgICAgICAgICAgdmFyIHIgPSAwOwogICAgICAgICAgICAgIHJldHVybiByID0gRTIoMSwgMjIpLCByICYmIChrMihyLCAyMiwgNCksIGsyKHIgKyA0IHwgMCwgMTc2ODQ0OTEzOCwgNCksIGsyKHIgKyA4IHwgMCwgZVtBICsgMTYgPj4gMl0sIDQpLCBrMihyICsgMTIgfCAwLCBlW0EgKyAxMiA+PiAyXSwgNCksIGsyKHIgKyAxNiB8IDAsIGVbQSArIDIwID4+IDJdLCAyKSwgazIociArIDE4IHwgMCwgZVtBICsgMjQgPj4gMl0sIDEpLCBrMihyICsgMTkgfCAwLCBlW0EgKyAyOCA+PiAyXSwgMSksIGsyKHIgKyAyMCB8IDAsIGVbQSArIDMyID4+IDJdLCAxKSwgazIociArIDIxIHwgMCwgZVtBICsgMzYgPj4gMl0sIDEpLCBlW2kgPj4gMl0gPSAyMiksIHIgfCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIG1lKEEsIGksIHIpIHsKICAgICAgICAgICAgICB2YXIgZiA9IDAsIGsgPSAwLCB0ID0gMCwgbiA9IDA7CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKCFpKSB7CiAgICAgICAgICAgICAgICAgIGYgPSBpOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZm9yICg7IHIgPSByIC0gMSB8IDAsIGsgPSBBLCBBID0gbjAoQSwgaSwgMTAsIDApLCBmID0gcTIsIHQgPSByLCBuID0gayAtIGQwKEEsIGYsIDEwLCAwKSB8IDQ4LCBGW3QgfCAwXSA9IG4sIGsgPSBpID4+PiAwID4gOSwgaSA9IGYsICEhazsgKQogICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChBIHwgZikKICAgICAgICAgICAgICAgIGZvciAoOyByID0gciAtIDEgfCAwLCBpID0gKEEgPj4+IDApIC8gMTAgfCAwLCBGW3IgfCAwXSA9IEEgLSBaKGksIDEwKSB8IDQ4LCBmID0gQSA+Pj4gMCA+IDksIEEgPSBpLCAhIWY7ICkKICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgIHJldHVybiByOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIHkzKEEsIGkpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIGkgPSBpIHwgMDsKICAgICAgICAgICAgICB2YXIgciA9IDAsIGYgPSAwOwogICAgICAgICAgICAgIGlmIChyID0gZVtBICsgMzIgPj4gMl0sIGkgPSBlW0EgKyAyOCA+PiAyXSwgZiA9IGkgKyA4IHwgMCwgciA+Pj4gMCA+PSBmID4+PiAwKQogICAgICAgICAgICAgICAgZm9yICg7IG9pKEEsIGVbQSArIDI0ID4+IDJdICsgKGkgPDwgMikgfCAwLCBlW0EgKyAyMCA+PiAyXSwgOCksIHIgPSBlW0EgKyAzMiA+PiAyXSwgaSA9IGYsIGYgPSBpICsgOCB8IDAsIHIgPj4+IDAgPj0gZiA+Pj4gMDsgKQogICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgaSA+Pj4gMCA8IHIgPj4+IDAgJiYgb2koQSwgZVtBICsgMjQgPj4gMl0gKyAoaSA8PCAyKSB8IDAsIGVbQSArIDIwID4+IDJdLCByIC0gaSB8IDApLCBSKGVbQSA+PiAyXSksIFIoQSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gRjYoQSkgewogICAgICAgICAgICAgIHZhciBpID0gMCwgciA9IDA7CiAgICAgICAgICAgICAgaWYgKGkgPSBFMigxLCA3MiksIGkpIHsKICAgICAgICAgICAgICAgIGlmIChlW2kgKyA2NCA+PiAyXSA9IDEwNDg1NzYsIHIgPSBVMigxMDQ4NTc2KSwgZVtpICsgMzIgPj4gMl0gPSByLCAhcikKICAgICAgICAgICAgICAgICAgcmV0dXJuIFIoaSksIDA7CiAgICAgICAgICAgICAgICBlW2kgKyAzNiA+PiAyXSA9IHIsIGVbaSArIDI4ID4+IDJdID0gOTksIGVbaSArIDI0ID4+IDJdID0gMTAwLCBlW2kgKyAyMCA+PiAyXSA9IDEwMSwgZVtpICsgMTYgPj4gMl0gPSAxMDIsIGVbaSArIDQ0ID4+IDJdID0gQSA/IDEwMyA6IDEwNCwgZVtpICsgNDAgPj4gMl0gPSBBID8gMTA1IDogMTA2LCBlW2kgKyA2OCA+PiAyXSA9IGVbaSArIDY4ID4+IDJdIHwgKEEgPyAyIDogMSk7CiAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICBpID0gMDsKICAgICAgICAgICAgICByZXR1cm4gaTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBwMyhBLCBpLCByLCBmKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDAsIHIgPSByIHwgMCwgZiA9IGYgfCAwOwogICAgICAgICAgICAgIHZhciBrID0gMDsKICAgICAgICAgICAgICBrID0gWCAtIDE2IHwgMCwgWCA9IGs7CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKGVbQSArIDEwMCA+PiAyXSkgewogICAgICAgICAgICAgICAgICBRKGYsIDEsIDIxODgxLCAwKSwgQSA9IDA7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoKHIgfCAwKSAhPSA0KSB7CiAgICAgICAgICAgICAgICAgIFEoZiwgMSwgOTkzMiwgMCksIEEgPSAwOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGgyKGksIGsgKyAxMiB8IDAsIDQpLCBlW2sgKyAxMiA+PiAyXSAhPSAyMTg3OTM3MzgpIHsKICAgICAgICAgICAgICAgICAgUShmLCAxLCA4NTA4LCAwKSwgQSA9IDA7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlW0EgKyAxMDAgPj4gMl0gPSBlW0EgKyAxMDAgPj4gMl0gfCAxLCBBID0gMTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIFggPSBrICsgMTYgfCAwLCBBIHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBjMChBLCBpLCByKSB7CiAgICAgICAgICAgICAgdmFyIGYgPSAwLCBrID0gMDsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBmID0gZVtBID4+IDJdLCBrID0gZVtBICsgNCA+PiAyXTsKICAgICAgICAgICAgICAgIGk6IHsKICAgICAgICAgICAgICAgICAgaWYgKChmIHwgMCkgIT0gKGsgfCAwKSkgewogICAgICAgICAgICAgICAgICAgIGsgPSBlW0EgKyA4ID4+IDJdOwogICAgICAgICAgICAgICAgICAgIGJyZWFrIGk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKGYgPSBrICsgMTAgfCAwLCBlW0EgKyA0ID4+IDJdID0gZiwgayA9IG8wKGVbQSArIDggPj4gMl0sIGYgPDwgMiksICFrKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIGVbQSArIDggPj4gMl0gPSBrLCBmID0gZVtBID4+IDJdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIGVbKGYgPDwgMikgKyBrID4+IDJdID0gaSwgZVtBID4+IDJdID0gZiArIDEsIDE7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBSKGVbQSArIDggPj4gMl0pLCBlW0EgPj4gMl0gPSAwLCBlW0EgKyA0ID4+IDJdID0gMCwgUShyLCAxLCAxMDA2NCwgMCksIDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gUTMoQSwgaSkgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwOwogICAgICAgICAgICAgIHZhciByID0gMCwgZiA9IDAsIGsgPSAwLCB0ID0gMDsKICAgICAgICAgICAgICBpZiAoZiA9IGVbQSArIDIwID4+IDJdICsgOCB8IDAsIHIgPSBFMigxLCBmKSwgcikgewogICAgICAgICAgICAgICAgaWYgKGsyKHIsIGYsIDQpLCBrMihyICsgNCB8IDAsIDE2NTE1MzI2NDMsIDQpLCBlW0EgKyAyMCA+PiAyXSkKICAgICAgICAgICAgICAgICAgZm9yIChrID0gciArIDggfCAwOyBrMihrLCBlWyhlW0EgKyA3MiA+PiAyXSArIFoodCwgMTIpIHwgMCkgKyA4ID4+IDJdLCAxKSwgayA9IGsgKyAxIHwgMCwgdCA9IHQgKyAxIHwgMCwgdCA+Pj4gMCA8IGRbQSArIDIwID4+IDJdOyApCiAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgZVtpID4+IDJdID0gZjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIHIgfCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIG9lKEEsIGkpIHsKICAgICAgICAgICAgICB2YXIgciA9IDAsIGYgPSAwLCBrID0gMDsKICAgICAgICAgICAgICByID0gZVtBICsgMTYgPj4gMl07CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKHIgfHwgKGsgPSBlW0EgKyAxMiA+PiAyXSwgciA9IGsgPDwgOCAmIDY1MjgwLCBlW0EgKyAxMiA+PiAyXSA9IHIsIHIgPSAociB8IDApID09IDY1MjgwID8gNyA6IDgsIGVbQSArIDE2ID4+IDJdID0gciwgZiA9IGVbQSArIDggPj4gMl0sIGYgPj4+IDAgPj0gZFtBICsgNCA+PiAyXSkpCiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICBlW0EgKyA4ID4+IDJdID0gZiArIDEsIEZbZiB8IDBdID0gaywgciA9IGVbQSArIDE2ID4+IDJdOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByID0gciAtIDEgfCAwLCBlW0EgKyAxNiA+PiAyXSA9IHIsIGVbQSArIDEyID4+IDJdID0gZVtBICsgMTIgPj4gMl0gfCBpIDw8IHI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gVjMoQSwgaSwgciwgZikgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDAsIGYgPSBmIHwgMDsKICAgICAgICAgICAgICB2YXIgayA9IDA7CiAgICAgICAgICAgICAgQSA9IFggLSAxNiB8IDAsIFggPSBBLCBrID0gMTsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAociA+Pj4gMCA8PSAxKSB7CiAgICAgICAgICAgICAgICAgIGsgPSAwLCBRKGYsIDEsIDcxNDYsIDApOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGgyKGksIEEgKyAxMiB8IDAsIDEpLCBoMihpICsgMSB8IDAsIEEgKyA4IHwgMCwgMSksIGkgPSBlW0EgKyA4ID4+IDJdLCAhKChyIC0gMiA+Pj4gMCkgJSAoKChpID4+PiA1ICYgMikgKyAoaSA+Pj4gNCAmIDMpIHwgMCkgKyAyID4+PiAwKSB8IDApKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgayA9IDAsIFEoZiwgMSwgNzE0NiwgMCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBYID0gQSArIDE2IHwgMCwgayB8IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gQnIoQSkgewogICAgICAgICAgICAgIHZhciBpID0gMCwgciA9IDAsIGYgPSAwOwogICAgICAgICAgICAgIHIgPSBYIC0gMTYgfCAwLCBYID0gciwgRltyICsgMTUgfCAwXSA9IDEwLCBpID0gZVtBICsgMTYgPj4gMl07CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKCFpKSB7CiAgICAgICAgICAgICAgICAgIGlmICh2cihBKSkKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICBpID0gZVtBICsgMTYgPj4gMl07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoZiA9IGksIGkgPSBlW0EgKyAyMCA+PiAyXSwgISgoZiB8IDApID09IChpIHwgMCkgfCBlW0EgKyA4MCA+PiAyXSA9PSAxMCkpIHsKICAgICAgICAgICAgICAgICAgZVtBICsgMjAgPj4gMl0gPSBpICsgMSwgRltpIHwgMF0gPSAxMDsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICgobzJbZVtBICsgMzYgPj4gMl1dKEEsIHIgKyAxNSB8IDAsIDEpIHwgMCkgIT0gMSkKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgWCA9IHIgKyAxNiB8IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gSjYoQSwgaSwgcikgewogICAgICAgICAgICAgIHZhciBmID0gMDsKICAgICAgICAgICAgICBpZiAoZiA9IGVbQSArIDM2ID4+IDJdLCAhZikgewogICAgICAgICAgICAgICAgZVtBICsgMjQgPj4gMl0gPSByLCBlW0EgKyAxNiA+PiAyXSA9IGksIGVbQSArIDM2ID4+IDJdID0gMSwgZVtBICsgMjAgPj4gMl0gPSBlW0EgKyA1NiA+PiAyXTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKCEoZVtBICsgMjAgPj4gMl0gIT0gZVtBICsgNTYgPj4gMl0gfCBlW0EgKyAxNiA+PiAyXSAhPSAoaSB8IDApKSkgewogICAgICAgICAgICAgICAgICBpZiAoZVtBICsgMjQgPj4gMl0gIT0gMikKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICBlW0EgKyAyNCA+PiAyXSA9IHI7CiAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIEZbQSArIDU0IHwgMF0gPSAxLCBlW0EgKyAyNCA+PiAyXSA9IDIsIGVbQSArIDM2ID4+IDJdID0gZiArIDE7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIFI2KEEsIGksIHIsIGYpIHsKICAgICAgICAgICAgICB2YXIgayA9IDAsIHQgPSAwLCBuID0gMDsKICAgICAgICAgICAgICBlW0EgKyAyOCA+PiAyXSA9IHIsIGVbQSArIDI0ID4+IDJdID0gaSwgayA9IEUyKDEsIDg0OCksIGVbZVtBICsgMjAgPj4gMl0gPj4gMl0gPSBrOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGlmICghayB8fCAoayA9IEUyKGVbaSArIDE2ID4+IDJdLCA3NiksIHQgPSBlW2VbQSArIDIwID4+IDJdID4+IDJdLCBlW3QgKyAyMCA+PiAyXSA9IGssICFrKSkKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIGVbdCArIDE2ID4+IDJdID0gZVtpICsgMTYgPj4gMl0sIGkgPSBlW3IgKyA4NCA+PiAyXSwgZVtBICsgNDQgPj4gMl0gPSBmLCBlW0EgPj4gMl0gPSBpLCBuID0gMTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIG47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gRTYoQSkgewogICAgICAgICAgICAgIHZhciBpID0gMCwgciA9IDAsIGYgPSAwLCBrID0gMCwgdCA9IDA7CiAgICAgICAgICAgICAgaWYgKGYgPSBlW0EgPj4gMl0sIGkgPSBGW2YgfCAwXSAtIDQ4IHwgMCwgaSA+Pj4gMCA+IDkpCiAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICBmb3IgKDsgayA9IC0xLCByID4+PiAwIDw9IDIxNDc0ODM2NCAmJiAociA9IFoociwgMTApLCBrID0gKHIgXiAyMTQ3NDgzNjQ3KSA+Pj4gMCA8IGkgPj4+IDAgPyAtMSA6IHIgKyBpIHwgMCksIGkgPSBmICsgMSB8IDAsIGVbQSA+PiAyXSA9IGksIHQgPSBGW2YgKyAxIHwgMF0sIHIgPSBrLCBmID0gaSwgaSA9IHQgLSA0OCB8IDAsIGkgPj4+IDAgPCAxMDsgKQogICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgIHJldHVybiByOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIEQ2KEEsIGkpIHsKICAgICAgICAgICAgICB2YXIgciA9IDAsIGYgPSAwLCBrID0gMDsKICAgICAgICAgICAgICBpZiAoZzEoK0EpLCBmID0gVzAoMSkgfCAwLCBrID0gVzAoMCkgfCAwLCByID0gZiA+Pj4gMjAgJiAyMDQ3LCAociB8IDApICE9IDIwNDcpIHsKICAgICAgICAgICAgICAgIGlmICghcikKICAgICAgICAgICAgICAgICAgcmV0dXJuIEEgPT0gMCA/IHIgPSAwIDogKEEgPSBENihBICogMTg0NDY3NDQwNzM3MDk1NTJlMywgaSksIHIgPSBlW2kgPj4gMl0gKyAtNjQgfCAwKSwgZVtpID4+IDJdID0gciwgQTsKICAgICAgICAgICAgICAgIGVbaSA+PiAyXSA9IHIgLSAxMDIyLCBBMCgwLCBrIHwgMCksIEEwKDEsIGYgJiAtMjE0NjQzNTA3MyB8IDEwNzE2NDQ2NzIpLCBBID0gK04wKCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBBOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIFU2KCkgewogICAgICAgICAgICAgIHZhciBBID0gMCwgaSA9IDA7CiAgICAgICAgICAgICAgZXIoMjk4MTYsIDExNjAsIDI5Nzk5LCAxNSwgMjk4MDEsIDE2KSwgQSA9IF8yKDQpLCBlW0EgPj4gMl0gPSAwLCBpID0gXzIoNCksIGVbaSA+PiAyXSA9IDAsIHoxKDI5ODE2LCAxMTI4LCA0OTAyMCwgMjk4MDQsIDE3LCBBIHwgMCwgNDkwMjAsIDI5ODA4LCAxOCwgaSB8IDApLCBBID0gXzIoNCksIGVbQSA+PiAyXSA9IDQsIGkgPSBfMig0KSwgZVtpID4+IDJdID0gNCwgejEoMjk4MTYsIDEwOTksIDQ5MDIwLCAyOTgwNCwgMTcsIEEgfCAwLCA0OTAyMCwgMjk4MDgsIDE4LCBpIHwgMCksIHFpKDI5ODE2KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBNNigpIHsKICAgICAgICAgICAgICB2YXIgQSA9IDAsIGkgPSAwOwogICAgICAgICAgICAgIGVyKDI5ODMyLCAyMDQ5LCAyOTc5OSwgMTksIDI5ODAxLCAyMCksIEEgPSBfMig0KSwgZVtBID4+IDJdID0gMCwgaSA9IF8yKDQpLCBlW2kgPj4gMl0gPSAwLCB6MSgyOTgzMiwgMTkzOCwgNDkwMjAsIDI5ODA0LCAyMSwgQSB8IDAsIDQ5MDIwLCAyOTgwOCwgMjIsIGkgfCAwKSwgQSA9IF8yKDQpLCBlW0EgPj4gMl0gPSA0LCBpID0gXzIoNCksIGVbaSA+PiAyXSA9IDQsIHoxKDI5ODMyLCAxMTc5LCA0OTAyMCwgMjk4MDQsIDIxLCBBIHwgMCwgNDkwMjAsIDI5ODA4LCAyMiwgaSB8IDApLCBxaSgyOTgzMik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gWTMoQSkgewogICAgICAgICAgICAgIEEgPSBBIHwgMDsKICAgICAgICAgICAgICB2YXIgaSA9IDAsIHIgPSAwLCBmID0gMDsKICAgICAgICAgICAgICBpZiAoaSA9IHVlKDMyMzMpLCBpID4+PiAwIDwgMjE0NzQ4MzY0MCkgewogICAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgICBpOiB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPj4+IDAgPj0gMTEpIHsKICAgICAgICAgICAgICAgICAgICAgIHIgPSAoaSB8IDcpICsgMSB8IDAsIGYgPSBfMihyKSwgZVtBICsgOCA+PiAyXSA9IHIgfCAtMjE0NzQ4MzY0OCwgZVtBID4+IDJdID0gZiwgZVtBICsgNCA+PiAyXSA9IGksIEEgPSBmOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKEZbQSArIDExIHwgMF0gPSBpLCAhaSkKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgdTYoQSwgMzIzMywgaSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBGW0EgKyBpIHwgMF0gPSAwOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBUNigxOTcxKSwgVTAoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBIMyhBLCBpLCByKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDAsIHIgPSByIHwgMDsKICAgICAgICAgICAgICB2YXIgZiA9IDAsIGsgPSAwLCB0ID0gMCwgbiA9IDA7CiAgICAgICAgICAgICAgaWYgKGYgPSBYIC0gMTYgfCAwLCBYID0gZiwgcikKICAgICAgICAgICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICBiNihBLCBmICsgOCB8IDApLCBrID0gUTJbZiArIDggPj4gM107CiAgICAgICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgICAgICBpZiAoUjIoaykgPCAyMTQ3NDgzNjQ4KSB7CiAgICAgICAgICAgICAgICAgICAgICB0ID0gfn5rOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgdCA9IC0yMTQ3NDgzNjQ4OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChlW2kgPj4gMl0gPSB0LCBpID0gaSArIDQgfCAwLCBBID0gQSArIDggfCAwLCBuID0gbiArIDEgfCAwLCAobiB8IDApID09IChyIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgWCA9IGYgKyAxNiB8IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gWDMoQSwgaSwgcikgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDA7CiAgICAgICAgICAgICAgdmFyIGYgPSAwLCBrID0gMDsKICAgICAgICAgICAgICBpZiAoZiA9IFggLSAxNiB8IDAsIFggPSBmLCByKQogICAgICAgICAgICAgICAgZm9yICg7IEZbZiArIDE1IHwgMF0gPSBJW0EgfCAwXSwgRltmICsgMTQgfCAwXSA9IElbQSArIDEgfCAwXSwgRltmICsgMTMgfCAwXSA9IElbQSArIDIgfCAwXSwgRltmICsgMTIgfCAwXSA9IElbQSArIDMgfCAwXSwgR1tpID4+IDJdID0gR1tmICsgMTIgPj4gMl0sIGkgPSBpICsgNCB8IDAsIEEgPSBBICsgNCB8IDAsIGsgPSBrICsgMSB8IDAsIChrIHwgMCkgIT0gKHIgfCAwKTsgKQogICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgWCA9IGYgKyAxNiB8IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24geTEoQSkgewogICAgICAgICAgICAgIHZhciBpID0gMCwgciA9IDAsIGYgPSAwOwogICAgICAgICAgICAgIGlmIChBKSB7CiAgICAgICAgICAgICAgICBpZiAoaSA9IGVbQSArIDI0ID4+IDJdLCBpKSB7CiAgICAgICAgICAgICAgICAgIGlmIChyID0gZVtBICsgMTYgPj4gMl0sIHIpIHsKICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBmID0gZVsoZVtBICsgMjQgPj4gMl0gKyBaKGksIDUyKSB8IDApICsgNDQgPj4gMl0sIGYgJiYgKFIoZiksIHIgPSBlW0EgKyAxNiA+PiAyXSksIGkgPSBpICsgMSB8IDAsIHIgPj4+IDAgPiBpID4+PiAwOyApCiAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgaSA9IGVbQSArIDI0ID4+IDJdOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIFIoaSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpID0gZVtBICsgMjggPj4gMl0sIGkgJiYgUihpKSwgUihBKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gRjMoQSwgaSwgcikgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDA7CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKGkgPSBlW2VbZVtBICsgMTU2ID4+IDJdICsgNTU4NCA+PiAyXSArIDQgPj4gMl0sIGkgLSAzMyA+Pj4gMCA8IDQyOTQ5NjcyNjQgfHwgKGkgPSAxIDw8IGkgLSAxLCBpID4+PiAwID4gZFtBICsgOTIgPj4gMl0gfCBpID4+PiAwID4gZFtBICsgOTYgPj4gMl0pKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgcmV0dXJuICFlW0EgKyA4ID4+IDJdICYgKGVbQSArIDE5MiA+PiAyXSAhPSAwICYgZVtBICsgMTk2ID4+IDJdICE9IDApOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gUShyLCAxLCA1OTY3LCAwKSwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBTNihBLCBpLCByLCBmKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDAsIHIgPSByIHwgMCwgZiA9IGYgfCAwOwogICAgICAgICAgICAgIHZhciBrID0gMCwgdCA9IDAsIG4gPSAwOwogICAgICAgICAgICAgIGsgPSBYIC0gMTYgfCAwLCBYID0gaywgdCA9IGksIGkgPSBlW0EgKyA0ID4+IDJdLCB0ID0gdCArIChpID4+IDEpIHwgMCwgQSA9IGVbQSA+PiAyXSwgQSA9IGkgJiAxID8gZVtlW3QgPj4gMl0gKyBBID4+IDJdIDogQSwgbiA9IGVbZiArIDQgPj4gMl0sIGkgPSBlW2YgPj4gMl0sIGVbayA+PiAyXSA9IGksIGVbayArIDQgPj4gMl0gPSBuLCBlW2sgKyA4ID4+IDJdID0gaSwgZVtrICsgMTIgPj4gMl0gPSBuLCBvMltBIHwgMF0odCwgciwgayksIFggPSBrICsgMTYgfCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIEozKCkgewogICAgICAgICAgICAgIHZhciBBID0gMDsKICAgICAgICAgICAgICByZXR1cm4gQSA9IF8yKDg4KSwgZVtBID4+IDJdID0gMCwgZVtBICsgNCA+PiAyXSA9IDAsIGVbQSArIDQ0ID4+IDJdID0gMCwgZVtBICsgNDggPj4gMl0gPSAwLCBlW0EgKyA4NCA+PiAyXSA9IDEsIGVbQSArIDE2ID4+IDJdID0gMCwgZVtBICsgMjAgPj4gMl0gPSAwLCBlW0EgKyA4ID4+IDJdID0gMCwgZVtBICsgMTIgPj4gMl0gPSAwLCBlW0EgKyA1MiA+PiAyXSA9IDAsIGVbQSArIDU2ID4+IDJdID0gMCwgZVtBICsgNjAgPj4gMl0gPSAwLCBlW0EgKyA2NCA+PiAyXSA9IDAsIGVbQSArIDY4ID4+IDJdID0gMCwgZVtBICsgNzIgPj4gMl0gPSAwLCBBIHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBSMyhBLCBpLCByKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDAsIHIgPSByIHwgMDsKICAgICAgICAgICAgICB2YXIgZiA9IDAsIGsgPSAwOwogICAgICAgICAgICAgIGlmIChyKQogICAgICAgICAgICAgICAgZm9yICg7IGYgPSBlW0EgPj4gMl0sIGYgPSBmIDw8IDI0IHwgKGYgJiA2NTI4MCkgPDwgOCB8IChmID4+PiA4ICYgNjUyODAgfCBmID4+PiAyNCksIEZbaSB8IDBdID0gZiwgRltpICsgMSB8IDBdID0gZiA+Pj4gOCwgRltpICsgMiB8IDBdID0gZiA+Pj4gMTYsIEZbaSArIDMgfCAwXSA9IGYgPj4+IDI0LCBpID0gaSArIDQgfCAwLCBBID0gQSArIDQgfCAwLCBrID0gayArIDEgfCAwLCAoayB8IDApICE9IChyIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIEUzKEEpIHsKICAgICAgICAgICAgICBBID0gQSB8IDA7CiAgICAgICAgICAgICAgdmFyIGkgPSAwOwogICAgICAgICAgICAgIEEgJiYgKGkgPSBlW0EgKyAxMDAgPj4gMl0sIGkgJiYgKGVbQSArIDEwNCA+PiAyXSA9IGksIFIoaSkpLCBpID0gZVtBICsgNTYgPj4gMl0sIGkgJiYgKGVbQSArIDYwID4+IDJdID0gaSwgUihpKSksIGkgPSBlW0EgKyA0MCA+PiAyXSwgaSAmJiAoZVtBICsgNDQgPj4gMl0gPSBpLCBSKGkpKSwgaSA9IGVbQSArIDEyID4+IDJdLCBpICYmIChlW0EgKyAxNiA+PiAyXSA9IGksIFIoaSkpLCBpID0gZVtBID4+IDJdLCBpICYmIChlW0EgKyA0ID4+IDJdID0gaSwgUihpKSksIFIoQSkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIHowKEEsIGksIHIsIGYpIHsKICAgICAgICAgICAgICB2YXIgayA9IDAsIHQgPSAwLCBuID0gMCwgbCA9IDA7CiAgICAgICAgICAgICAgcmV0dXJuIHQgPSBpIF4gZiwgbiA9IHQgPj4gMzEsIGsgPSBpID4+IDMxLCBBID0gQSBeIGssIGwgPSBBIC0gayB8IDAsIGsgPSAoaSBeIGspIC0gKChBID4+PiAwIDwgayA+Pj4gMCkgKyBrIHwgMCkgfCAwLCBBID0gZiA+PiAzMSwgaSA9IHIgXiBBLCB0ID0gdCA+PiAzMSwgQSA9IG4wKGwsIGssIGkgLSBBIHwgMCwgKEEgXiBmKSAtICgoQSA+Pj4gMCA+IGkgPj4+IDApICsgQSB8IDApIHwgMCkgXiB0LCBpID0gQSAtIHQgfCAwLCBxMiA9IChuIF4gcTIpIC0gKChBID4+PiAwIDwgdCA+Pj4gMCkgKyBuIHwgMCkgfCAwLCBpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIEQzKEEsIGksIHIpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIGkgPSBpIHwgMCwgciA9IHIgfCAwOwogICAgICAgICAgICAgIHZhciBmID0gMCwgayA9IDAsIHQgPSAwOwogICAgICAgICAgICAgIHJldHVybiBmID0gWCAtIDE2IHwgMCwgWCA9IGYsIGsgPSBlW0EgPj4gMl0sIHQgPSBmICsgOCB8IDAsIEEgPSBlW0EgKyA0ID4+IDJdLCBpID0gKEEgPj4gMSkgKyBpIHwgMCwgQSAmIDEgJiYgKGsgPSBlW2sgKyBlW2kgPj4gMl0gPj4gMl0pLCBvMltrIHwgMF0odCwgaSwgciksIEEgPSBfMig4KSwgaSA9IGVbZiArIDEyID4+IDJdLCBlW0EgPj4gMl0gPSBlW2YgKyA4ID4+IDJdLCBlW0EgKyA0ID4+IDJdID0gaSwgWCA9IGYgKyAxNiB8IDAsIEEgfCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIE42KEEsIGksIHIpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIGkgPSBpIHwgMCwgciA9IHIgfCAwOwogICAgICAgICAgICAgIHZhciBmID0gMCwgayA9IDAsIHQgPSAwOwogICAgICAgICAgICAgIGYgPSBYIC0gMTYgfCAwLCBYID0gZiwgayA9IGksIGkgPSBlW0EgKyA0ID4+IDJdLCBrID0gayArIChpID4+IDEpIHwgMCwgQSA9IGVbQSA+PiAyXSwgQSA9IGkgJiAxID8gZVtlW2sgPj4gMl0gKyBBID4+IDJdIDogQSwgdCA9IGVbciArIDQgPj4gMl0sIGkgPSBlW3IgPj4gMl0sIGVbZiA+PiAyXSA9IGksIGVbZiArIDQgPj4gMl0gPSB0LCBlW2YgKyA4ID4+IDJdID0gaSwgZVtmICsgMTIgPj4gMl0gPSB0LCBvMltBIHwgMF0oaywgZiksIFggPSBmICsgMTYgfCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIGNyKEEsIGksIHIsIGYsIGspIHsKICAgICAgICAgICAgICByZXR1cm4gciA+Pj4gMCA8PSAxMSA/IChRKGssIDEsIDY2MjIsIDApLCAwKSA6IChrMihpLCA2NTQyNCwgMiksIGsyKGkgKyAyIHwgMCwgMTAsIDIpLCBrMihpICsgNCB8IDAsIGVbQSArIDIwNCA+PiAyXSwgMiksIGsyKGkgKyAxMCB8IDAsIGVbQSArIDEyID4+IDJdLCAxKSwgazIoaSArIDExIHwgMCwgZVsoZVtBICsgMTU2ID4+IDJdICsgWihlW0EgKyAyMDQgPj4gMl0sIDU2NDQpIHwgMCkgKyA1NTkyID4+IDJdLCAxKSwgZVtmID4+IDJdID0gMTIsIDEpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uICQxKEEpIHsKICAgICAgICAgICAgICB2YXIgaSA9IDAsIHIgPSAwLCBmID0gMCwgayA9IDA7CiAgICAgICAgICAgICAgaWYgKEEpIHsKICAgICAgICAgICAgICAgIGlmIChpID0gZVtBICsgMjAgPj4gMl0sIHIgPSBlW0EgKyAxNiA+PiAyXSwgWihpLCByKSkKICAgICAgICAgICAgICAgICAgZm9yICg7IGsgPSBlW2VbQSArIDI0ID4+IDJdICsgKGYgPDwgMikgPj4gMl0sIGsgJiYgKFIoayksIHIgPSBlW0EgKyAxNiA+PiAyXSwgaSA9IGVbQSArIDIwID4+IDJdKSwgZiA9IGYgKyAxIHwgMCwgZiA+Pj4gMCA8IFooaSwgcikgPj4+IDA7ICkKICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICBSKGVbQSArIDI0ID4+IDJdKSwgUihBKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gZDAoQSwgaSwgciwgZikgewogICAgICAgICAgICAgIHZhciBrID0gMCwgdCA9IDAsIG4gPSAwLCBsID0gMCwgYSA9IDAsIHUgPSAwOwogICAgICAgICAgICAgIHJldHVybiBrID0gciA+Pj4gMTYgfCAwLCB0ID0gQSA+Pj4gMTYgfCAwLCB1ID0gWihrLCB0KSwgbiA9IHIgJiA2NTUzNSwgbCA9IEEgJiA2NTUzNSwgYSA9IFoobiwgbCksIHQgPSAoYSA+Pj4gMTYgfCAwKSArIFoodCwgbikgfCAwLCBrID0gKHQgJiA2NTUzNSkgKyBaKGssIGwpIHwgMCwgcTIgPSAoWihpLCByKSArIHUgfCAwKSArIFooQSwgZikgKyAodCA+Pj4gMTYpICsgKGsgPj4+IDE2KSB8IDAsIGEgJiA2NTUzNSB8IGsgPDwgMTY7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gUDYoQSwgaSwgciwgZikgewogICAgICAgICAgICAgIHZhciBrID0gMCwgdCA9IDAsIG4gPSAwLCBsID0gMCwgYSA9IDAsIHUgPSAwLCBvID0gMDsKICAgICAgICAgICAgICBpZiAoZikKICAgICAgICAgICAgICAgIGZvciAoOyBrID0gdCA8PCAyLCBuID0gayArIEEgfCAwLCBsID0gciArIGsgfCAwLCBhID0gZVtsID4+IDJdLCB1ID0gaSArIGsgfCAwLCBvID0gZVt1ID4+IDJdLCBrID0gZVtuID4+IDJdIC0gKGEgKyBvID4+IDIpIHwgMCwgZVtuID4+IDJdID0gayArIGEsIGVbdSA+PiAyXSA9IGssIGVbbCA+PiAyXSA9IGsgKyBvLCB0ID0gdCArIDEgfCAwLCAodCB8IDApICE9IChmIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIFUzKEEsIGkpIHsKICAgICAgICAgICAgICBpZiAoQSA9IEEgfCAwLCBpID0gaSB8IDAsIGkgPSBlW0EgKyAyOCA+PiAyXSwgaSA+Pj4gMCA8IGRbQSArIDMyID4+IDJdKQogICAgICAgICAgICAgICAgZm9yICg7IG8yW2VbQSArIDM2ID4+IDJdXShlW0EgKyAyNCA+PiAyXSArIChaKGVbQSArIDIwID4+IDJdLCBpKSA8PCAyKSB8IDAsIGVbQSA+PiAyXSwgZVtBICsgMTYgPj4gMl0sICFlW0EgKyAxMiA+PiAyXSksIGkgPSBpICsgMSB8IDAsIGkgPj4+IDAgPCBkW0EgKyAzMiA+PiAyXTsgKQogICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgUihlW0EgPj4gMl0pLCBSKEEpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIEdpKEEsIGksIHIsIGYpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIGkgPSBpIHwgMCwgciA9IHIgfCAwLCBmID0gZiB8IDA7CiAgICAgICAgICAgICAgdmFyIGsgPSAwOwogICAgICAgICAgICAgIHJldHVybiBlW0EgKyA0OCA+PiAyXSA9IDAsIGVbQSArIDM2ID4+IDJdID0gZVtBICsgMzIgPj4gMl0sIGsgPSBvMltlW0EgKyAyOCA+PiAyXV0oaSwgciwgZVtBID4+IDJdKSB8IDAsIGYgPSBlW0EgKyA2OCA+PiAyXSwgayA/IChlW0EgKyA1NiA+PiAyXSA9IGksIGVbQSArIDYwID4+IDJdID0gciwgZVtBICsgNjggPj4gMl0gPSBmICYgLTUsIDEpIDogKGVbQSArIDY4ID4+IDJdID0gZiB8IDQsIDApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIFdpKEEsIGksIHIpIHsKICAgICAgICAgICAgICB2YXIgZiA9IDAsIGsgPSAwOwogICAgICAgICAgICAgIGlmICghcikKICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgIGlmIChmID0gSVtBIHwgMF0sIGYpCiAgICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICAgIGlmIChrID0gSVtpIHwgMF0sIChrIHwgMCkgIT0gKGYgfCAwKSB8ICFrIHx8IChyID0gciAtIDEgfCAwLCAhcikpCiAgICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICAgIGlmIChpID0gaSArIDEgfCAwLCBmID0gSVtBICsgMSB8IDBdLCBBID0gQSArIDEgfCAwLCAhZikKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGYgPSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGYgPSAwOwogICAgICAgICAgICAgIHJldHVybiBmIC0gSVtpIHwgMF0gfCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIHg2KEEsIGkpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIGkgPSBpIHwgMDsKICAgICAgICAgICAgICB2YXIgciA9IDAsIGYgPSAwLCBrID0gMDsKICAgICAgICAgICAgICByZXR1cm4gciA9IFggLSAxNiB8IDAsIFggPSByLCBmID0gZVtBID4+IDJdLCBrID0gciArIDggfCAwLCBBID0gZVtBICsgNCA+PiAyXSwgaSA9IChBID4+IDEpICsgaSB8IDAsIEEgJiAxICYmIChmID0gZVtmICsgZVtpID4+IDJdID4+IDJdKSwgbzJbZiB8IDBdKGssIGkpLCBBID0gXzIoOCksIGkgPSBlW3IgKyAxMiA+PiAyXSwgZVtBID4+IDJdID0gZVtyICsgOCA+PiAyXSwgZVtBICsgNCA+PiAyXSA9IGksIFggPSByICsgMTYgfCAwLCBBIHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBNMyhBLCBpLCByKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDAsIHIgPSByIHwgMDsKICAgICAgICAgICAgICB2YXIgZiA9IFcoMCksIGsgPSAwLCB0ID0gMDsKICAgICAgICAgICAgICBpZiAocikKICAgICAgICAgICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICBmID0gR1tBID4+IDJdOwogICAgICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGYgPCBXKDQyOTQ5NjcyOTYpICYgZiA+PSBXKDApKSB7CiAgICAgICAgICAgICAgICAgICAgICBrID0gfn5mID4+PiAwOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgayA9IDA7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKGsyKGksIGssIDIpLCBpID0gaSArIDIgfCAwLCBBID0gQSArIDQgfCAwLCB0ID0gdCArIDEgfCAwLCAodCB8IDApID09IChyIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gUzMoQSwgaSwgcikgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDA7CiAgICAgICAgICAgICAgdmFyIGYgPSBXKDApLCBrID0gMCwgdCA9IDA7CiAgICAgICAgICAgICAgaWYgKHIpCiAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgZiA9IEdbQSA+PiAyXTsKICAgICAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgICAgIGlmIChmIDwgVyg0Mjk0OTY3Mjk2KSAmIGYgPj0gVygwKSkgewogICAgICAgICAgICAgICAgICAgICAgayA9IH5+ZiA+Pj4gMDsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGsgPSAwOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChrMihpLCBrLCA0KSwgaSA9IGkgKyA0IHwgMCwgQSA9IEEgKyA0IHwgMCwgdCA9IHQgKyAxIHwgMCwgKHQgfCAwKSA9PSAociB8IDApKQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIE4zKEEpIHsKICAgICAgICAgICAgICBBID0gQSB8IDA7CiAgICAgICAgICAgICAgdmFyIGkgPSAwLCByID0gMCwgZiA9IDAsIGsgPSAwLCB0ID0gMDsKICAgICAgICAgICAgICByZXR1cm4gaSA9IFggLSAxNiB8IDAsIFggPSBpLCBrID0gaSArIDQgfCAwLCBvMltBIHwgMF0oayksIHIgPSBGW2kgKyAxNSB8IDBdLCBBID0gKHIgfCAwKSA8IDAsIHIgPSBBID8gZVtpICsgOCA+PiAyXSA6IHIsIGYgPSB2MShyICsgNCB8IDApLCBlW2YgPj4gMl0gPSByLCB0ID0gZVtpICsgNCA+PiAyXSwgRjIoZiArIDQgfCAwLCBBID8gdCA6IGssIHIpLCBBICYmIFIodCksIFggPSBpICsgMTYgfCAwLCBmIHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBUNihBKSB7CiAgICAgICAgICAgICAgdmFyIGkgPSAwLCByID0gMCwgZiA9IDAsIGsgPSAwLCB0ID0gMDsKICAgICAgICAgICAgICBpID0gY2YoOCksIGVbaSA+PiAyXSA9IDQ5MzEyLCBlW2kgPj4gMl0gPSA0OTQyNCwgciA9IHVlKEEpLCBmID0gXzIociArIDEzIHwgMCksIGVbZiArIDggPj4gMl0gPSAwLCBlW2YgKyA0ID4+IDJdID0gciwgZVtmID4+IDJdID0gciwgayA9IGksIHQgPSBGMihmICsgMTIgfCAwLCBBLCByICsgMSB8IDApLCBlW2sgKyA0ID4+IDJdID0gdCwgZVtpID4+IDJdID0gNDk0NzIsIHc0KGkgfCAwLCA0OTQ4NCwgNSksIFUwKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gUDMoQSwgaSkgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwOwogICAgICAgICAgICAgIHZhciByID0gMDsKICAgICAgICAgICAgICByZXR1cm4gciA9IGVbQSA+PiAyXSwgQSA9IGVbQSArIDQgPj4gMl0sIGkgPSAoQSA+PiAxKSArIGkgfCAwLCBBICYgMSAmJiAociA9IGVbciArIGVbaSA+PiAyXSA+PiAyXSksIEEgPSBvMltyIHwgMF0oaSkgfCAwLCBpID0gXzIoOCksIHIgPSBHMltBICsgNCA+PiAxXSB8IEcyW0EgKyA2ID4+IDFdIDw8IDE2LCBlW2kgPj4gMl0gPSBHMltBID4+IDFdIHwgRzJbQSArIDIgPj4gMV0gPDwgMTYsIGVbaSArIDQgPj4gMl0gPSByLCBpIHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBuMShBLCBpLCByLCBmLCBrKSB7CiAgICAgICAgICAgICAgdmFyIHQgPSAwOwogICAgICAgICAgICAgIGlmICh0ID0gWCAtIDI1NiB8IDAsIFggPSB0LCAhKGsgJiA3MzcyOCB8IChyIHwgMCkgPD0gKGYgfCAwKSkpIHsKICAgICAgICAgICAgICAgIGlmIChmID0gciAtIGYgfCAwLCByID0gZiA+Pj4gMCA8IDI1NiwgZDIodCwgaSwgciA/IGYgOiAyNTYpLCAhcikKICAgICAgICAgICAgICAgICAgZm9yICg7IHIxKEEsIHQsIDI1NiksIGYgPSBmIC0gMjU2IHwgMCwgZiA+Pj4gMCA+IDI1NTsgKQogICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgIHIxKEEsIHQsIGYpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBYID0gdCArIDI1NiB8IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gejYoQSwgaSkgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwOwogICAgICAgICAgICAgIHZhciByID0gMCwgZiA9IDAsIGsgPSAwOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGlmIChlW0EgKyAyMDggPj4gMl0gfHwgKGdyKGVbQSArIDIxMiA+PiAyXSksIGVbQSArIDIxMiA+PiAyXSA9IDAsIChpIHwgMCkgPj0gMCAmJiAoaSA9IFdlKGkpLCBlW0EgKyAyMTIgPj4gMl0gPSBpLCByID0gMSwgaSkpKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgZiA9IEEsIGsgPSBXZSgwKSwgZVtmICsgMjEyID4+IDJdID0gaywgciA9IDA7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiByIHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBkNihBLCBpLCByKSB7CiAgICAgICAgICAgICAgdmFyIGYgPSAwOwogICAgICAgICAgICAgIHJldHVybiBmID0gWCAtIDMyIHwgMCwgWCA9IGYsIHRyKEEsIGksIHIsIGYgKyAyMCB8IDAsIGYgKyAxNiB8IDAsIGYgKyAxMiB8IDAsIGYgKyA4IHwgMCwgZiArIDQgfCAwLCBmLCBmICsgMjQgfCAwLCBmICsgMjggfCAwLCAwKSwgWCA9IGYgKyAzMiB8IDAsIFooZVtmICsgMjggPj4gMl0sIFooZVtBICsgMTYgPj4gMl0sIFooZVsoZVtpICsgNzYgPj4gMl0gKyBaKHIsIDU2NDQpIHwgMCkgKyA4ID4+IDJdLCBlW2YgKyAyNCA+PiAyXSkpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBLNihBKSB7CiAgICAgICAgICAgICAgdmFyIGkgPSAwLCByID0gMCwgZiA9IDA7CiAgICAgICAgICAgICAgaWYgKGkgPSBlW0EgKyA0ID4+IDJdLCAoaSB8IDApIDw9IDApCiAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICBmID0gZVtBID4+IDJdLCBBID0gMDsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICAgICAgaWYgKHIgPSBaKEEsIDEyKSArIGYgfCAwLCAhZVtyID4+IDJdKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIGlmIChBID0gQSArIDEgfCAwLCAoaSB8IDApID09IChBIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIGVbciArIDQgPj4gMl07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24geDMoQSwgaSwgciwgZikgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDAsIGYgPSBmIHwgMDsKICAgICAgICAgICAgICB2YXIgayA9IDA7CiAgICAgICAgICAgICAgcmV0dXJuIGsgPSBYIC0gMTYgfCAwLCBYID0gaywgQSA9IHlBKGVbQSArIDYwID4+IDJdLCBpIHwgMCwgciB8IDAsIGYgJiAyNTUsIGsgKyA4IHwgMCkgfCAwLCBBID8gKGVbMTI0ODVdID0gQSwgQSA9IC0xKSA6IEEgPSAwLCBYID0gayArIDE2IHwgMCwgcTIgPSBBID8gLTEgOiBlW2sgKyAxMiA+PiAyXSwgKEEgPyAtMSA6IGVbayArIDggPj4gMl0pIHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiB2cihBKSB7CiAgICAgICAgICAgICAgdmFyIGkgPSAwOwogICAgICAgICAgICAgIHJldHVybiBpID0gZVtBICsgNzIgPj4gMl0sIGVbQSArIDcyID4+IDJdID0gaSAtIDEgfCBpLCBpID0gZVtBID4+IDJdLCBpICYgOCA/IChlW0EgPj4gMl0gPSBpIHwgMzIsIC0xKSA6IChlW0EgKyA0ID4+IDJdID0gMCwgZVtBICsgOCA+PiAyXSA9IDAsIGkgPSBlW0EgKyA0NCA+PiAyXSwgZVtBICsgMjggPj4gMl0gPSBpLCBlW0EgKyAyMCA+PiAyXSA9IGksIGVbQSArIDE2ID4+IDJdID0gaSArIGVbQSArIDQ4ID4+IDJdLCAwKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBqNihBKSB7CiAgICAgICAgICAgICAgdmFyIGkgPSAwLCByID0gMDsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAoSVtBICsgMTIgfCAwXSA9PSAyNTUpIHsKICAgICAgICAgICAgICAgICAgaWYgKGVbQSArIDEyID4+IDJdID0gNjUyODAsIGVbQSArIDE2ID4+IDJdID0gNywgaSA9IGVbQSArIDggPj4gMl0sIHIgPSAwLCBpID4+PiAwID49IGRbQSArIDQgPj4gMl0pCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgZVtBICsgOCA+PiAyXSA9IGkgKyAxLCBlW0EgKyAxMiA+PiAyXSA9IElbaSB8IDBdIHwgNjUyODA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlW0EgKyAxNiA+PiAyXSA9IDAsIHIgPSAxOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gcjsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBUMyhBLCBpLCByKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDAsIHIgPSByIHwgMDsKICAgICAgICAgICAgICB2YXIgZiA9IDAsIGsgPSAwLCB0ID0gMDsKICAgICAgICAgICAgICByZXR1cm4gZiA9IGVbciArIDQgPj4gMl0sIGsgPSBlW3IgPj4gMl0gKyBlW3IgKyA4ID4+IDJdIHwgMCwgKGYgfCAwKSA9PSAoayB8IDApID8gLTEgOiAodCA9IEEsIEEgPSBrIC0gZiB8IDAsIEEgPSBBID4+PiAwIDwgaSA+Pj4gMCA/IEEgOiBpLCBGMih0LCBmLCBBKSwgZVtyICsgNCA+PiAyXSA9IEEgKyBlW3IgKyA0ID4+IDJdLCBBIHwgMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gZ2UoQSwgaSkgewogICAgICAgICAgICAgIHZhciByID0gMCwgZiA9IDA7CiAgICAgICAgICAgICAgciA9IElbQSB8IDBdLCBmID0gSVtpIHwgMF07CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKCFyIHwgKHIgfCAwKSAhPSAoZiB8IDApKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgIGlmIChmID0gSVtpICsgMSB8IDBdLCByID0gSVtBICsgMSB8IDBdLCAhcikKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICBpZiAoaSA9IGkgKyAxIHwgMCwgQSA9IEEgKyAxIHwgMCwgKHIgfCAwKSAhPSAoZiB8IDApKQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gciAtIGYgfCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIElyKEEpIHsKICAgICAgICAgICAgICB2YXIgaSA9IDA7CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKGkgPSBBLCBBID0gdWUoQSksIChfMChpLCAxLCBBLCA0OTY5NikgfCAwKSAhPSAoQSB8IDApKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgaTogewogICAgICAgICAgICAgICAgICBpZiAoZVsxMjQ0NF0gPT0gMTAgfHwgKEEgPSBlWzEyNDI5XSwgKEEgfCAwKSA9PSBlWzEyNDI4XSkpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaTsKICAgICAgICAgICAgICAgICAgZVsxMjQyOV0gPSBBICsgMSwgRltBIHwgMF0gPSAxMDsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIEJyKDQ5Njk2KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gejMoQSwgaSwgcikgewogICAgICAgICAgICAgIHJldHVybiBBID0gQSB8IDAsIGkgPSBpIHwgMCwgciA9IHIgfCAwLCBpID0gcTYoMCksIGVbQSArIDIwOCA+PiAyXSA9IGksIGkgPyAoUjYoaSwgZVtBICsgNzIgPj4gMl0sIEEgKyA4MCB8IDAsIGVbQSArIDIxMiA+PiAyXSkgPyBBID0gMSA6ICh3aShlW0EgKyAyMDggPj4gMl0pLCBlW0EgKyAyMDggPj4gMl0gPSAwLCBBID0gMCksIEEgfCAwKSA6IChRKHIsIDEsIDgyNDYsIDApLCAwKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBMNihBLCBpLCByKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDAsIHIgPSByIHwgMDsKICAgICAgICAgICAgICB2YXIgZiA9IDAsIGsgPSAwLCB0ID0gMDsKICAgICAgICAgICAgICByZXR1cm4gZiA9IFggLSAxNiB8IDAsIFggPSBmLCBrID0gZVtBID4+IDJdLCB0ID0gZiArIDggfCAwLCBBID0gZVtBICsgNCA+PiAyXSwgaSA9IChBID4+IDEpICsgaSB8IDAsIEEgJiAxICYmIChrID0gZVtrICsgZVtpID4+IDJdID4+IDJdKSwgbzJbayB8IDBdKHQsIGksIHIpLCBYID0gZiArIDE2IHwgMCwgZVtmICsgMTIgPj4gMl07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gZDMoQSwgaSwgcikgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDA7CiAgICAgICAgICAgICAgdmFyIGYgPSAwLCBrID0gMDsKICAgICAgICAgICAgICBpZiAoZiA9IFggLSAxNiB8IDAsIFggPSBmLCByKQogICAgICAgICAgICAgICAgZm9yICg7IGgyKEEsIGYgKyAxMiB8IDAsIDIpLCBHW2kgPj4gMl0gPSBkW2YgKyAxMiA+PiAyXSwgaSA9IGkgKyA0IHwgMCwgQSA9IEEgKyAyIHwgMCwgayA9IGsgKyAxIHwgMCwgKGsgfCAwKSAhPSAociB8IDApOyApCiAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICBYID0gZiArIDE2IHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBLMyhBLCBpLCByKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDAsIHIgPSByIHwgMDsKICAgICAgICAgICAgICB2YXIgZiA9IDAsIGsgPSAwOwogICAgICAgICAgICAgIGlmIChmID0gWCAtIDE2IHwgMCwgWCA9IGYsIHIpCiAgICAgICAgICAgICAgICBmb3IgKDsgaDIoQSwgZiArIDEyIHwgMCwgNCksIEdbaSA+PiAyXSA9IGRbZiArIDEyID4+IDJdLCBpID0gaSArIDQgfCAwLCBBID0gQSArIDQgfCAwLCBrID0gayArIDEgfCAwLCAoayB8IDApICE9IChyIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgIFggPSBmICsgMTYgfCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIGozKEEsIGksIHIpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIGkgPSBpIHwgMCwgciA9IHIgfCAwOwogICAgICAgICAgICAgIHZhciBmID0gMCwgayA9IDA7CiAgICAgICAgICAgICAgaWYgKGYgPSBYIC0gMTYgfCAwLCBYID0gZiwgcikKICAgICAgICAgICAgICAgIGZvciAoOyBoMihBLCBmICsgMTIgfCAwLCAyKSwgZVtpID4+IDJdID0gZVtmICsgMTIgPj4gMl0sIGkgPSBpICsgNCB8IDAsIEEgPSBBICsgMiB8IDAsIGsgPSBrICsgMSB8IDAsIChrIHwgMCkgIT0gKHIgfCAwKTsgKQogICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgWCA9IGYgKyAxNiB8IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gTDMoQSwgaSwgcikgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDA7CiAgICAgICAgICAgICAgdmFyIGYgPSAwLCBrID0gMDsKICAgICAgICAgICAgICBpZiAoZiA9IFggLSAxNiB8IDAsIFggPSBmLCByKQogICAgICAgICAgICAgICAgZm9yICg7IGgyKEEsIGYgKyAxMiB8IDAsIDQpLCBlW2kgPj4gMl0gPSBlW2YgKyAxMiA+PiAyXSwgaSA9IGkgKyA0IHwgMCwgQSA9IEEgKyA0IHwgMCwgayA9IGsgKyAxIHwgMCwgKGsgfCAwKSAhPSAociB8IDApOyApCiAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICBYID0gZiArIDE2IHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiB5ZShBKSB7CiAgICAgICAgICAgICAgdmFyIGkgPSAwLCByID0gMDsKICAgICAgICAgICAgICBpID0gZVsxMjQ2MF0sIHIgPSBBICsgNyAmIC04LCBBID0gaSArIHIgfCAwOwogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGlmICghKEEgPj4+IDAgPD0gaSA+Pj4gMCAmJiByKSAmJiAoQSA+Pj4gMCA8PSBDZigpIDw8IDE2ID4+PiAwIHx8IFZBKEEgfCAwKSB8IDApKQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgcmV0dXJuIGVbMTI0ODVdID0gNDgsIC0xOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gZVsxMjQ2MF0gPSBBLCBpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIE8zKEEsIGksIHIpIHsKICAgICAgICAgICAgICByZXR1cm4gQSA9IEEgfCAwLCBpID0gaSB8IDAsIHdpKGVbQSArIDIwOCA+PiAyXSksIGVbQSArIDIwOCA+PiAyXSA9IDAsIGkgPSBlW0EgKyAzMiA+PiAyXSwgaSAmJiAoUihpKSwgZVtBICsgMzIgPj4gMl0gPSAwLCBlW0EgKyAzNiA+PiAyXSA9IDApLCBpID0gZVtBICsgNDQgPj4gMl0sIGkgJiYgKFIoaSksIGVbQSArIDQ0ID4+IDJdID0gMCksIGVbQSArIDQ4ID4+IDJdID0gMCwgMTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBfMyhBLCBpKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDA7CiAgICAgICAgICAgICAgdmFyIHIgPSAwLCBmID0gMCwgayA9IDAsIHQgPSAwOwogICAgICAgICAgICAgIHIgPSBYIC0gMTYgfCAwLCBYID0gciwgZiA9IGVbaSArIDE2ID4+IDJdLCBpID0gZVtpICsgMTIgPj4gMl0sIGVbciArIDEyID4+IDJdID0gaSwgZVtyICsgOCA+PiAyXSA9IGYgLSBpLCBrID0gQSwgdCA9IHJyKDI5OTg4LCByICsgOCB8IDApIHwgMCwgZVtrICsgNCA+PiAyXSA9IHQsIGVbQSA+PiAyXSA9IDUwNjU2LCBYID0gciArIDE2IHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBFMihBLCBpKSB7CiAgICAgICAgICAgICAgdmFyIHIgPSAwLCBmID0gMDsKICAgICAgICAgICAgICBpZiAoZiA9ICFBLCBmIHwgIWkpCiAgICAgICAgICAgICAgICBBID0gcjsKICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgICAgaWYgKGYgfHwgKHIgPSBkMChBLCAwLCBpLCAwKSwgZiA9IHEyLCAoQSB8IGkpID4+PiAwIDwgNjU1MzYpKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIHIgPSBmID8gLTEgOiByOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgQSA9IHYxKHIpLCAhQSB8ICEoSVtBIC0gNCB8IDBdICYgMykgfHwgZDIoQSwgMCwgcik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBBOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIE82KEEsIGkpIHsKICAgICAgICAgICAgICB2YXIgciA9IDA7CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgaWYgKCFpIHx8IChpID0gbTEoaSwgNDg3NzIpLCAhaSB8IGVbaSArIDggPj4gMl0gJiAoZVtBICsgOCA+PiAyXSBeIC0xKSkgfHwgIXQxKGVbQSArIDEyID4+IDJdLCBlW2kgKyAxMiA+PiAyXSwgMCkpCiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICByID0gdDEoZVtBICsgMTYgPj4gMl0sIGVbaSArIDE2ID4+IDJdLCAwKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIHI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gYjMoQSwgaSwgcikgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDA7CiAgICAgICAgICAgICAgdmFyIGYgPSAwLCBrID0gMDsKICAgICAgICAgICAgICBpZiAoZiA9IFggLSAxNiB8IDAsIFggPSBmLCByKQogICAgICAgICAgICAgICAgZm9yICg7IGI2KEEsIGYgKyA4IHwgMCksIEdbaSA+PiAyXSA9IFEyW2YgKyA4ID4+IDNdLCBpID0gaSArIDQgfCAwLCBBID0gQSArIDggfCAwLCBrID0gayArIDEgfCAwLCAoayB8IDApICE9IChyIHwgMCk7ICkKICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgIFggPSBmICsgMTYgfCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uICQzKEEsIGkpIHsKICAgICAgICAgICAgICBpZiAoQSA9IEEgfCAwLCBpID0gaSB8IDAsIGkgPSBlW0EgKyAyOCA+PiAyXSwgaSA+Pj4gMCA8IGRbQSArIDMyID4+IDJdKQogICAgICAgICAgICAgICAgZm9yICg7ICQ0KEEsIGVbQSArIDI0ID4+IDJdICsgKFooZVtBICsgMjAgPj4gMl0sIGkpIDw8IDIpIHwgMCksIGkgPSBpICsgMSB8IDAsIGkgPj4+IDAgPCBkW0EgKyAzMiA+PiAyXTsgKQogICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgUihlW0EgPj4gMl0pLCBSKEEpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIF82KEEsIGkpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIGkgPSBpIHwgMDsKICAgICAgICAgICAgICB2YXIgciA9IDAsIGYgPSAwLCBrID0gMDsKICAgICAgICAgICAgICByZXR1cm4gciA9IFggLSAxNiB8IDAsIFggPSByLCBmID0gZVtBID4+IDJdLCBrID0gciArIDggfCAwLCBBID0gZVtBICsgNCA+PiAyXSwgaSA9IChBID4+IDEpICsgaSB8IDAsIEEgJiAxICYmIChmID0gZVtmICsgZVtpID4+IDJdID4+IDJdKSwgbzJbZiB8IDBdKGssIGkpLCBYID0gciArIDE2IHwgMCwgZVtyICsgMTIgPj4gMl07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gcTMoQSwgaSwgcikgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDA7CiAgICAgICAgICAgICAgdmFyIGYgPSAwOwogICAgICAgICAgICAgIHJldHVybiBBID0gZVtBICsgMjAwID4+IDJdLCBBICYmIChyID0gZVtpICsgNTYgPj4gMl0sIGYgPSBlW0EgPj4gMl0sIGkgPSBlW2kgKyA2MCA+PiAyXSAtIChlW0EgKyA0ID4+IDJdICsgKHIgPj4+IDAgPCBmID4+PiAwKSB8IDApIHwgMCwgZVtBICsgMTYgPj4gMl0gPSByIC0gZiwgZVtBICsgMjAgPj4gMl0gPSBpKSwgMTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBlbihBLCBpLCByKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDAsIHIgPSByIHwgMDsKICAgICAgICAgICAgICB2YXIgZiA9IDA7CiAgICAgICAgICAgICAgcmV0dXJuIEEgPSBYIC0gMTYgfCAwLCBYID0gQSwgZiA9IEEgKyA0IHwgMCwgazIoZiwgMTIsIDQpLCBrMihBICsgOCB8IDAsIDE3ODM2MzZlMywgNCksIGsyKEEgKyAxMiB8IDAsIDIxODc5MzczOCwgNCksIGkgPSBMMChpLCBmLCAxMiwgciksIFggPSBBICsgMTYgfCAwLCAoaSB8IDApID09IDEyIHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBiNihBLCBpKSB7CiAgICAgICAgICAgICAgRltpICsgNyB8IDBdID0gSVtBIHwgMF0sIEZbaSArIDYgfCAwXSA9IElbQSArIDEgfCAwXSwgRltpICsgNSB8IDBdID0gSVtBICsgMiB8IDBdLCBGW2kgKyA0IHwgMF0gPSBJW0EgKyAzIHwgMF0sIEZbaSArIDMgfCAwXSA9IElbQSArIDQgfCAwXSwgRltpICsgMiB8IDBdID0gSVtBICsgNSB8IDBdLCBGW2kgKyAxIHwgMF0gPSBJW0EgKyA2IHwgMF0sIEZbaSB8IDBdID0gSVtBICsgNyB8IDBdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIHJuKEEsIGkpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIGkgPSBpIHwgMDsKICAgICAgICAgICAgICB2YXIgciA9IDAsIGYgPSAwOwogICAgICAgICAgICAgIGlmIChmID0gZVtBICsgMTAwID4+IDJdLCByID0gZVtBICsgMTA0ID4+IDJdIC0gZiA+PiAzLCByID4+PiAwIDwgaSA+Pj4gMCkgewogICAgICAgICAgICAgICAgdjYoQSArIDEwMCB8IDAsIGkgLSByIHwgMCk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGkgPj4+IDAgPCByID4+PiAwICYmIChlW0EgKyAxMDQgPj4gMl0gPSAoaSA8PCAzKSArIGYpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIF8yKEEpIHsKICAgICAgICAgICAgICB2YXIgaSA9IDAsIHIgPSAwOwogICAgICAgICAgICAgIGZvciAociA9IEEgPj4+IDAgPD0gMSA/IDEgOiBBOyA7ICkgewogICAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgICBpZiAoQSA9IHYxKHIpLCBBIHx8IChpID0gZVsxMzA4Ml0sICFpKSkKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICBvMltpIHwgMF0oKTsKICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIEEgfHwgKFpmKCksIFUwKCkpLCBBOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIHExKEEpIHsKICAgICAgICAgICAgICB2YXIgaSA9IFcoMCksIHIgPSBXKDApOwogICAgICAgICAgICAgIGlmIChpID0gVyhOZShBKSksIHIgPSBXKEEgLSBpKSwgIShyIDwgVygwLjUpKSkgewogICAgICAgICAgICAgICAgaWYgKEEgPSBXKCRpKEEpKSwgciA+IFcoMC41KSkKICAgICAgICAgICAgICAgICAgcmV0dXJuIEE7CiAgICAgICAgICAgICAgICByID0gQSwgQSA9IFcoaSAqIFcoMC41KSksIGkgPSBXKEEgLSBXKE5lKEEpKSkgPT0gVygwKSA/IGkgOiByOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gaTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBmbihBLCBpKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDA7CiAgICAgICAgICAgICAgdmFyIHIgPSAwLCBmID0gMDsKICAgICAgICAgICAgICByZXR1cm4gciA9IGVbaSArIDQgPj4gMl0sIGYgPSBlW2kgPj4gMl0gKyBlW2kgKyA4ID4+IDJdIHwgMCwgKHIgfCAwKSA9PSAoZiB8IDApID8gLTEgOiAoZVtpICsgNCA+PiAyXSA9IEEgKyByLCBpID0gZiAtIHIgfCAwLCAoQSA+Pj4gMCA+IGkgPj4+IDAgPyBpIDogQSkgfCAwKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBBbihBLCBpLCByLCBmLCBrLCB0KSB7CiAgICAgICAgICAgICAgaWYgKEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDAsIGYgPSBmIHwgMCwgayA9IGsgfCAwLCB0ID0gdCB8IDAsIHQxKEEsIGVbaSArIDggPj4gMl0sIHQpKSB7CiAgICAgICAgICAgICAgICBZNihpLCByLCBmLCBrKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgQSA9IGVbQSArIDggPj4gMl0sIG8yW2VbZVtBID4+IDJdICsgMjAgPj4gMl1dKEEsIGksIHIsIGYsIGssIHQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uICQ2KEEsIGksIHIpIHsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAoQSA9IGVbQSArIDEyID4+IDJdLCAhQSkKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIGZvciAoQSA9IEEgKyAoaSA8PCA0KSB8IDA7IDsgKSB7CiAgICAgICAgICAgICAgICAgIGlmIChlW0EgKyA0ID4+IDJdIDw9IChyIHwgMCkpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgaWYgKGVbQSArIDQgPj4gMl0gPSByLCBBID0gZVtBID4+IDJdLCAhQSkKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gXzAoQSwgaSwgciwgZikgewogICAgICAgICAgICAgIHZhciBrID0gMDsKICAgICAgICAgICAgICBrID0gWihpLCByKTsKICAgICAgICAgICAgICBlOiB7CiAgICAgICAgICAgICAgICBpZiAoZVtmICsgNzYgPj4gMl0gPCAwKSB7CiAgICAgICAgICAgICAgICAgIEEgPSBocihBLCBrLCBmKTsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIEEgPSBocihBLCBrLCBmKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIChrIHwgMCkgPT0gKEEgfCAwKSA/IGkgPyByIDogMCA6IChBID4+PiAwKSAvIChpID4+PiAwKSB8IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24ga24oQSwgaSwgcikgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDA7CiAgICAgICAgICAgICAgdmFyIGYgPSAwOwogICAgICAgICAgICAgIHJldHVybiBmID0gZVtpICsgNjAgPj4gMl0sIGVbQSArIDg4ID4+IDJdID0gZVtpICsgNTYgPj4gMl0sIGVbQSArIDkyID4+IDJdID0gZiwgQSA9IG8yW2VbaSArIDQwID4+IDJdXShpLCAyNCwgMCwgcikgfCAwLCAhcTIgJiAoQSB8IDApID09IDI0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIG5uKEEsIGksIHIsIGYsIGssIHQsIG4sIGwsIGEsIHUsIG8pIHsKICAgICAgICAgICAgICByZXR1cm4gQSA9IEEgfCAwLCBpID0gaSB8IDAsIHIgPSByIHwgMCwgZiA9IGYgfCAwLCBrID0gayB8IDAsIHQgPSB0IHwgMCwgbiA9IG4gfCAwLCBsID0gbCB8IDAsIGEgPSBhIHwgMCwgdSA9IHUgfCAwLCBvID0gbyB8IDAsIENlKGVbQSA+PiAyXSwgaSwgciwgZiwgaywgdCwgbiwgbCwgYSwgdSwgbykgfCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIHRuKEEsIGksIHIpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIGkgPSBpIHwgMCwgciA9IHIgfCAwOwogICAgICAgICAgICAgIHZhciBmID0gMDsKICAgICAgICAgICAgICByZXR1cm4gZiA9IGVbaSArIDYwID4+IDJdLCBlW0EgKyA4MCA+PiAyXSA9IGVbaSArIDU2ID4+IDJdLCBlW0EgKyA4NCA+PiAyXSA9IGYsIEEgPSBvMltlW2kgKyA0MCA+PiAyXV0oaSwgOCwgMCwgcikgfCAwLCAhcTIgJiAoQSB8IDApID09IDg7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gbG4oQSkgewogICAgICAgICAgICAgIEEgPSBBIHwgMDsKICAgICAgICAgICAgICB2YXIgaSA9IDA7CiAgICAgICAgICAgICAgQSAmJiAoaSA9IGVbQSArIDExNiA+PiAyXSwgaSAmJiAoUihpKSwgZVtBICsgMTE2ID4+IDJdID0gMCksIGkgPSBlW0EgKyAxMjAgPj4gMl0sIGkgJiYgKFIoaSksIGVbQSArIDEyMCA+PiAyXSA9IDApLCBSKGVbQSArIDE0OCA+PiAyXSksIFIoQSkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIHE2KEEpIHsKICAgICAgICAgICAgICB2YXIgaSA9IDA7CiAgICAgICAgICAgICAgcmV0dXJuIGkgPSBFMigxLCA3MiksIGkgPyAoRltpICsgNDAgfCAwXSA9IElbaSArIDQwIHwgMF0gJiAyNTQgfCAoQSB8IDApICE9IDAsIEEgPSBFMigxLCA0KSwgZVtpICsgMjAgPj4gMl0gPSBBLCBBID8gaSA6IChSKGkpLCAwKSkgOiAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIGFuKEEsIGksIHIpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIGkgPSBpIHwgMCwgciA9IHIgfCAwOwogICAgICAgICAgICAgIHZhciBmID0gMCwgayA9IDA7CiAgICAgICAgICAgICAgcmV0dXJuIGYgPSByLCBrID0gZVtyID4+IDJdLCByID0gZVtyICsgOCA+PiAyXSwgZVtmICsgNCA+PiAyXSA9IGsgKyAoQSA+Pj4gMCA8IHIgPj4+IDAgJiAoaSB8IDApIDw9IDAgfCAoaSB8IDApIDwgMCA/IEEgOiByKSwgMTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiB1bihBLCBpLCByLCBmKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDAsIHIgPSByIHwgMCwgZiA9IFcoZik7CiAgICAgICAgICAgICAgdmFyIGsgPSAwOwogICAgICAgICAgICAgIGsgPSBlW0EgPj4gMl0sIEEgPSBlW0EgKyA0ID4+IDJdLCBpID0gKEEgPj4gMSkgKyBpIHwgMCwgQSAmIDEgJiYgKGsgPSBlW2sgKyBlW2kgPj4gMl0gPj4gMl0pLCBvMltrIHwgMF0oaSwgciwgZik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gZWYoQSwgaSwgciwgZikgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDAsIGYgPSBmIHwgMDsKICAgICAgICAgICAgICB2YXIgayA9IDA7CiAgICAgICAgICAgICAgayA9IGVbQSA+PiAyXSwgQSA9IGVbQSArIDQgPj4gMl0sIGkgPSAoQSA+PiAxKSArIGkgfCAwLCBBICYgMSAmJiAoayA9IGVbayArIGVbaSA+PiAyXSA+PiAyXSksIG8yW2sgfCAwXShpLCByLCBmKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBvbihBLCBpLCByLCBmKSB7CiAgICAgICAgICAgICAgaWYgKEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDAsIGYgPSBmIHwgMCwgdDEoQSwgZVtpICsgOCA+PiAyXSwgMCkpIHsKICAgICAgICAgICAgICAgIEo2KGksIHIsIGYpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBBID0gZVtBICsgOCA+PiAyXSwgbzJbZVtlW0EgPj4gMl0gKyAyOCA+PiAyXV0oQSwgaSwgciwgZik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gcmYoQSkgewogICAgICAgICAgICAgIGZvciAoQSA9IEEgfCAwOyA7ICkgewogICAgICAgICAgICAgICAgaWYgKEEgPSBlWzEzMDg1XSwgQSkgewogICAgICAgICAgICAgICAgICBlWzEzMDg1XSA9IGVbQSArIDggPj4gMl0sIG8yW2VbQSA+PiAyXV0oZVtBICsgNCA+PiAyXSksIFIoQSk7CiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIEZbNTIzMzNdID0gMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBmZihBKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwOwogICAgICAgICAgICAgIHZhciBpID0gMCwgciA9IDA7CiAgICAgICAgICAgICAgcmV0dXJuIGVbQSA+PiAyXSA9IDQ5NDI0LCBpID0gZVtBICsgNCA+PiAyXSAtIDEyIHwgMCwgciA9IGVbaSArIDggPj4gMl0gLSAxIHwgMCwgZVtpICsgOCA+PiAyXSA9IHIsIChyIHwgMCkgPCAwICYmIFIoaSksIEEgfCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIGduKEEsIGksIHIpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIGkgPSBpIHwgMCwgciA9IHIgfCAwOwogICAgICAgICAgICAgIHZhciBmID0gMDsKICAgICAgICAgICAgICBmID0gZVtBID4+IDJdLCBBID0gZVtBICsgNCA+PiAyXSwgaSA9IChBID4+IDEpICsgaSB8IDAsIEEgJiAxICYmIChmID0gZVtmICsgZVtpID4+IDJdID4+IDJdKSwgbzJbZiB8IDBdKGksIHIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIGhuKEEsIGksIHIsIGYpIHsKICAgICAgICAgICAgICByZXR1cm4gQSA9IEEgfCAwLCByID0gciB8IDAsIGYgPSBmIHwgMCwgZVtlW0EgKyA3MiA+PiAyXSArIDE2ID4+IDJdIDw8IDIgIT0gKHIgfCAwKSA/IChRKGYsIDEsIDczMDAsIDApLCBBID0gMCkgOiBBID0gMSwgQSB8IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gZGUoQSwgaSkgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwOwogICAgICAgICAgICAgIHZhciByID0gMDsKICAgICAgICAgICAgICByZXR1cm4gciA9IGVbQSA+PiAyXSwgQSA9IGVbQSArIDQgPj4gMl0sIGkgPSAoQSA+PiAxKSArIGkgfCAwLCBBICYgMSAmJiAociA9IGVbciArIGVbaSA+PiAyXSA+PiAyXSksIG8yW3IgfCAwXShpKSB8IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gc24oQSkgewogICAgICAgICAgICAgIEEgPSBBIHwgMDsKICAgICAgICAgICAgICB2YXIgaSA9IDA7CiAgICAgICAgICAgICAgQSAmJiAoaSA9IGVbQSArIDEyID4+IDJdLCBpICYmIChlW0EgKyAxNiA+PiAyXSA9IGksIFIoaSkpLCBpID0gZVtBID4+IDJdLCBpICYmIChlW0EgKyA0ID4+IDJdID0gaSwgUihpKSksIFIoQSkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIEFmKEEsIGkpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIGkgPSBpIHwgMCwgIUEgfCAhaSB8fCAoZVtBICsgMTY0ID4+IDJdID0gZVtpICsgNCA+PiAyXSwgZVtBICsgMTYwID4+IDJdID0gZVtpID4+IDJdLCBlW0EgKyAyMjQgPj4gMl0gPSBlW2kgKyA4MjQ4ID4+IDJdICYgMik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gdDEoQSwgaSwgcikgewogICAgICAgICAgICAgIHJldHVybiByID8gKEEgfCAwKSA9PSAoaSB8IDApID8gMSA6ICFnZShlW0EgKyA0ID4+IDJdLCBlW2kgKyA0ID4+IDJdKSA6IGVbQSArIDQgPj4gMl0gPT0gZVtpICsgNCA+PiAyXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBrZihBLCBpKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDA7CiAgICAgICAgICAgICAgdmFyIHIgPSAwOwogICAgICAgICAgICAgIHIgPSBlW0EgPj4gMl0sIEEgPSBlW0EgKyA0ID4+IDJdLCBpID0gKEEgPj4gMSkgKyBpIHwgMCwgQSAmIDEgJiYgKHIgPSBlW3IgKyBlW2kgPj4gMl0gPj4gMl0pLCBvMltyIHwgMF0oaSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gcGUoKSB7CiAgICAgICAgICAgICAgdmFyIEEgPSAwLCBpID0gMDsKICAgICAgICAgICAgICBpZiAoQSA9IEUyKDEsIDEyKSwgQSkgewogICAgICAgICAgICAgICAgaWYgKGVbQSArIDQgPj4gMl0gPSAxMCwgaSA9IEUyKDEwLCA0KSwgZVtBICsgOCA+PiAyXSA9IGksIGkpCiAgICAgICAgICAgICAgICAgIHJldHVybiBBOwogICAgICAgICAgICAgICAgUihBKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gaGUoQSkgewogICAgICAgICAgICAgIHZhciBpID0gMDsKICAgICAgICAgICAgICByZXR1cm4gaSA9IFggLSAxNiB8IDAsIFggPSBpLCBBID8gKEEgPSBrNihpICsgMTIgfCAwLCAzMiwgQSksIEEgPSBBID8gMCA6IGVbaSArIDEyID4+IDJdKSA6IEEgPSAwLCBYID0gaSArIDE2IHwgMCwgQTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiB3bihBLCBpLCByKSB7CiAgICAgICAgICAgICAgcmV0dXJuIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDAsIHIgPSBlW2kgKyA2MCA+PiAyXSwgQSA9IGVbQSArIDIwMCA+PiAyXSwgZVtBICsgOCA+PiAyXSA9IGVbaSArIDU2ID4+IDJdLCBlW0EgKyAxMiA+PiAyXSA9IHIsIDE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gUDAoQSkgewogICAgICAgICAgICAgIHZhciBpID0gMDsKICAgICAgICAgICAgICByZXR1cm4gaSA9IFggLSAxNiB8IDAsIFggPSBpLCBBID8gKEEgPSBrNihpICsgMTIgfCAwLCAxNiwgQSksIEEgPSBBID8gMCA6IGVbaSArIDEyID4+IDJdKSA6IEEgPSAwLCBYID0gaSArIDE2IHwgMCwgQTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBsMShBKSB7CiAgICAgICAgICAgICAgaWYgKGVbQSArIDEyID4+IDJdICYmIChlW0EgKyA0MCA+PiAyXSA9IDAsIGVbQSArIDI0ID4+IDJdID4gMCkpCiAgICAgICAgICAgICAgICBmb3IgKDsgZVtBICsgMjQgPj4gMl0gPiAwOyApCiAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBCbihBKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwOwogICAgICAgICAgICAgIHZhciBpID0gMCwgciA9IDA7CiAgICAgICAgICAgICAgcmV0dXJuIEEgPSBlW0EgKyA0ID4+IDJdLCBpID0gdWUoQSkgKyAxIHwgMCwgciA9IHYxKGkpLCByID8gQSA9IEYyKHIsIEEsIGkpIDogQSA9IDAsIEEgfCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIGNuKEEsIGksIHIsIGYsIGssIHQsIG4pIHsKICAgICAgICAgICAgICByZXR1cm4gQSA9IEEgfCAwLCBpID0gaSB8IDAsIHIgPSByIHwgMCwgZiA9IGYgfCAwLCBrID0gayB8IDAsIHQgPSB0IHwgMCwgbiA9IG4gfCAwLCBZNChlW0EgPj4gMl0sIGksIHIsIGYsIGssIHQsIG4pIHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiB2bihBLCBpLCByKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDAsIHIgPSByIHwgMCwgQSA9IGVbQSArIDEwMCA+PiAyXSArIChpIDw8IDMpIHwgMCwgaSA9IGVbciArIDQgPj4gMl0sIGVbQSA+PiAyXSA9IGVbciA+PiAyXSwgZVtBICsgNCA+PiAyXSA9IGk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gSW4oQSwgaSwgcikgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDAsIEEgPSBlW0EgKyA1NiA+PiAyXSArIChpIDw8IDMpIHwgMCwgaSA9IGVbciArIDQgPj4gMl0sIGVbQSA+PiAyXSA9IGVbciA+PiAyXSwgZVtBICsgNCA+PiAyXSA9IGk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gbWkoQSkgewogICAgICAgICAgICAgIHZhciBpID0gMDsKICAgICAgICAgICAgICBBICYmIChpID0gZVtBICsgNCA+PiAyXSwgaSAmJiBvMltpIHwgMF0oZVtBID4+IDJdKSwgUihlW0EgKyAzMiA+PiAyXSksIGVbQSArIDMyID4+IDJdID0gMCwgUihBKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gWm4oQSwgaSwgcikgewogICAgICAgICAgICAgIHJldHVybiBBID0gQSB8IDAsIGkgPSBpIHwgMCwgaSA9IGVbQSArIDUyID4+IDJdLCBpICYmIChSKGkpLCBlW0EgKyA1MiA+PiAyXSA9IDApLCBlW0EgKyA1NiA+PiAyXSA9IDAsIDE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gQ24oQSwgaSwgciwgZiwgaywgdCkgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDAsIGYgPSBmIHwgMCwgayA9IGsgfCAwLCB0ID0gdCB8IDAsIHQxKEEsIGVbaSArIDggPj4gMl0sIHQpICYmIFk2KGksIHIsIGYsIGspOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIEduKEEsIGkpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIGkgPSBpIHwgMCwgZVtBICsgMzIgPj4gMl0gPSBpLCBpID0gZVtBICsgMTAwID4+IDJdLCAoaSB8IDApICE9IGVbQSArIDEwNCA+PiAyXSAmJiAoZVtBICsgMTA0ID4+IDJdID0gaSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gV24oQSwgaSwgciwgZiwgaywgdCkgewogICAgICAgICAgICAgIHJldHVybiBBID0gQSB8IDAsIGkgPSBpIHwgMCwgciA9IHIgfCAwLCBmID0gZiB8IDAsIGsgPSBrIHwgMCwgdCA9IHQgfCAwLCBQZShlW0EgPj4gMl0sIGksIHIsIGYsIGssIHQpIHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBacigpIHsKICAgICAgICAgICAgICB2YXIgQSA9IDA7CiAgICAgICAgICAgICAgQSA9IGNmKDQpLCBlW0EgPj4gMl0gPSA0OTMxMiwgZVtBID4+IDJdID0gNDkyNzIsIGVbQSA+PiAyXSA9IDQ5MjkyLCB3NChBIHwgMCwgNDkzNzYsIDYpLCBVMCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIG1uKEEsIGksIHIsIGYsIGssIHQpIHsKICAgICAgICAgICAgICByZXR1cm4gQSA9IEEgfCAwLCBpID0gaSB8IDAsIHIgPSByIHwgMCwgZiA9IGYgfCAwLCBrID0gayB8IDAsIHQgPSB0IHwgMCwgYTYoZVtBID4+IDJdLCBpLCByLCBmLCBrLCB0KSB8IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24geW4oQSwgaSwgcikgewogICAgICAgICAgICAgIHJldHVybiBBID0gQSB8IDAsIGkgPSBpIHwgMCwgciA9IHIgfCAwLCBBID0gZVtBICsgNTIgPj4gMl0sIGsyKEEsIDY1MzU5LCAyKSwgKEwwKGksIEEsIDIsIHIpIHwgMCkgPT0gMiB8IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gcG4oQSwgaSwgciwgZikgewogICAgICAgICAgICAgIHJldHVybiBBID0gQSB8IDAsIHIgPSByIHwgMCwgZiA9IGYgfCAwLCByID8gQSA9IDEgOiAoUShmLCAxLCA3MjExLCAwKSwgQSA9IDApLCBBIHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBRbihBLCBpLCByKSB7CiAgICAgICAgICAgICAgcmV0dXJuIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDAsIEYyKGVbciArIDQgPj4gMl0sIEEsIGkpLCBlW3IgKyA0ID4+IDJdID0gZVtyICsgNCA+PiAyXSArIGksIGkgfCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIFZuKEEsIGksIHIpIHsKICAgICAgICAgICAgICByZXR1cm4gQSA9IEEgfCAwLCAhZVtBICsgOCA+PiAyXSAmIChlW0EgKyAxOTIgPj4gMl0gIT0gMCAmIGVbQSArIDE5NiA+PiAyXSAhPSAwKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBLZShBKSB7CiAgICAgICAgICAgICAgQSAmJiAobzJbZVsoZVtBICsgNzYgPj4gMl0gPyAyMCA6IDE2KSArIEEgPj4gMl1dKGVbQSArIDQ4ID4+IDJdKSwgZVtBICsgNDggPj4gMl0gPSAwLCBSKEEpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBZbihBLCBpKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDAsIGkgPSBYIC0gMTYgfCAwLCBYID0gaSwgZVtpID4+IDJdID0gQSwgSTAoZVsxMTg0N10sIDE0MDMsIGkpLCBYID0gaSArIDE2IHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBIbihBLCBpKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDAsIGkgPSBYIC0gMTYgfCAwLCBYID0gaSwgZVtpID4+IDJdID0gQSwgSTAoZVsxMTg0N10sIDEzODIsIGkpLCBYID0gaSArIDE2IHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBYbihBLCBpKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDAsIEFmKGVbQSA+PiAyXSwgaSksIEZbQSArIDEyNCB8IDBdID0gMCwgZVtBICsgMTI4ID4+IDJdID0gZVtpICsgODI0OCA+PiAyXSAmIDE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gRm4oQSkgewogICAgICAgICAgICAgIHJldHVybiBBID0gQSB8IDAsIEEgPSBGQShlW0EgKyA2MCA+PiAyXSkgfCAwLCBBID8gKGVbMTI0ODVdID0gQSwgQSA9IC0xKSA6IEEgPSAwLCBBIHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBKbihBLCBpKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDA7CiAgICAgICAgICAgICAgdmFyIHIgPSAwOwogICAgICAgICAgICAgIHIgPSBlW2kgKyA0OCA+PiAyXSwgZVtBID4+IDJdID0gZVtpICsgNDQgPj4gMl0sIGVbQSArIDQgPj4gMl0gPSByOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIFJuKEEsIGkpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIGkgPSBpIHwgMDsKICAgICAgICAgICAgICB2YXIgciA9IDA7CiAgICAgICAgICAgICAgciA9IGVbaSArIDU2ID4+IDJdLCBlW0EgPj4gMl0gPSBlW2kgKyA1MiA+PiAyXSwgZVtBICsgNCA+PiAyXSA9IHI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gRW4oQSwgaSkgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwOwogICAgICAgICAgICAgIHZhciByID0gMDsKICAgICAgICAgICAgICByID0gZVtpICsgNjQgPj4gMl0sIGVbQSA+PiAyXSA9IGVbaSArIDYwID4+IDJdLCBlW0EgKyA0ID4+IDJdID0gcjsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBEbihBLCBpKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDA7CiAgICAgICAgICAgICAgdmFyIHIgPSAwOwogICAgICAgICAgICAgIHIgPSBlW2kgKyA3MiA+PiAyXSwgZVtBID4+IDJdID0gZVtpICsgNjggPj4gMl0sIGVbQSArIDQgPj4gMl0gPSByOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIENyKEEsIGkpIHsKICAgICAgICAgICAgICB2YXIgciA9IDA7CiAgICAgICAgICAgICAgciA9IFggLSAxNiB8IDAsIFggPSByLCBlW3IgKyAxMiA+PiAyXSA9IGksIElpKDQ5Njk2LCBBLCBpLCAwLCAwKSwgWCA9IHIgKyAxNiB8IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gVW4oQSwgaSkgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwOwogICAgICAgICAgICAgIHZhciByID0gMDsKICAgICAgICAgICAgICByID0gZVtpICsgNCA+PiAyXSwgZVtBICsgNjggPj4gMl0gPSBlW2kgPj4gMl0sIGVbQSArIDcyID4+IDJdID0gcjsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBNbihBLCBpKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDA7CiAgICAgICAgICAgICAgdmFyIHIgPSAwOwogICAgICAgICAgICAgIHIgPSBlW2kgKyA0ID4+IDJdLCBlW0EgKyA3NiA+PiAyXSA9IGVbaSA+PiAyXSwgZVtBICsgODAgPj4gMl0gPSByOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIFNuKEEsIGkpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIGkgPSBpIHwgMDsKICAgICAgICAgICAgICB2YXIgciA9IDA7CiAgICAgICAgICAgICAgciA9IGVbaSArIDQgPj4gMl0sIGVbQSArIDg0ID4+IDJdID0gZVtpID4+IDJdLCBlW0EgKyA4OCA+PiAyXSA9IHI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gTm4oQSwgaSkgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwOwogICAgICAgICAgICAgIHZhciByID0gMDsKICAgICAgICAgICAgICByID0gZVtpICsgNCA+PiAyXSwgZVtBICsgOTIgPj4gMl0gPSBlW2kgPj4gMl0sIGVbQSArIDk2ID4+IDJdID0gcjsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBuZihBLCBpLCByLCBmLCBrKSB7CiAgICAgICAgICAgICAgcmV0dXJuIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDAsIGYgPSBmIHwgMCwgayA9IGsgfCAwLCBvMltBIHwgMF0oaSwgciwgZiwgaykgfCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIEkwKEEsIGksIHIpIHsKICAgICAgICAgICAgICB2YXIgZiA9IDA7CiAgICAgICAgICAgICAgZiA9IFggLSAxNiB8IDAsIFggPSBmLCBlW2YgKyAxMiA+PiAyXSA9IHIsIElpKEEsIGksIHIsIDAsIDApLCBYID0gZiArIDE2IHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiB0ZihBKSB7CiAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IDsgKSB7CiAgICAgICAgICAgICAgICBpZiAoQSkgewogICAgICAgICAgICAgICAgICBBID0gQSAtIDEgJiBBLCBpID0gaSArIDEgfCAwOwogICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gaTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBQbihBLCBpLCByLCBmKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDAsIHIgPSByIHwgMCwgZiA9IGYgfCAwLCB0MShBLCBlW2kgKyA4ID4+IDJdLCAwKSAmJiBKNihpLCByLCBmKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBoMShBKSB7CiAgICAgICAgICAgICAgdmFyIGkgPSAwOwogICAgICAgICAgICAgIHJldHVybiBpID0gQSAmIDMxLCBBID0gMCAtIEEgJiAzMSwgKC0xID4+PiBpICYgLTIpIDw8IGkgfCAoLTEgPDwgQSAmIC0yKSA+Pj4gQTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiB4bihBLCBpKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDAsIGkgPSBYIC0gMTYgfCAwLCBYID0gaSwgZVtpID4+IDJdID0gQSwgQ3IoMTM5MywgaSksIFggPSBpICsgMTYgfCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIFRuKEEsIGkpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIGkgPSBpIHwgMCwgaSA9IFggLSAxNiB8IDAsIFggPSBpLCBlW2kgPj4gMl0gPSBBLCBDcigxNDAzLCBpKSwgWCA9IGkgKyAxNiB8IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gem4oQSwgaSkgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCBpID0gWCAtIDE2IHwgMCwgWCA9IGksIGVbaSA+PiAyXSA9IEEsIENyKDEzODIsIGkpLCBYID0gaSArIDE2IHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBRZShBKSB7CiAgICAgICAgICAgICAgdmFyIGkgPSAwOwogICAgICAgICAgICAgIEEgJiYgKGkgPSBlW0EgKyAxMiA+PiAyXSwgaSAmJiAoUihpKSwgZVtBICsgMTIgPj4gMl0gPSAwKSwgUihBKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gZG4oQSwgaSwgciwgZikgewogICAgICAgICAgICAgIHJldHVybiBBID0gQSB8IDAsIGkgPSBpIHwgMCwgciA9IHIgfCAwLCBmID0gZiB8IDAsIGM2KGVbQSA+PiAyXSwgaSwgciwgZikgfCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIEdyKEEsIGkpIHsKICAgICAgICAgICAgICB2YXIgciA9IDA7CiAgICAgICAgICAgICAgcmV0dXJuIHIgPSBFMigxLCA4KSwgciAmJiAoZVtyICsgNCA+PiAyXSA9IGksIGVbciA+PiAyXSA9IEEpLCByOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIGxmKEEsIGksIHIsIGYpIHsKICAgICAgICAgICAgICByZXR1cm4gQSA9IEEgfCAwLCBpID0gaSB8IDAsIHIgPSByIHwgMCwgZiA9IGYgfCAwLCBvMltBIHwgMF0oaSwgciwgZikgfCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIEtuKEEpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIEEgPSBlWzEyNDY4XSwgQSA+Pj4gMCA+PSA5ICYmIChQQShBIHwgMCksIGVbMTI0NjhdID0gMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gam4oQSwgaSwgcikgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gVyhyKSwgR1tlW0EgKyA0MCA+PiAyXSArIChpIDw8IDIpID4+IDJdID0gcjsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBXcigpIHsKICAgICAgICAgICAgICB2YXIgQSA9IDA7CiAgICAgICAgICAgICAgcmV0dXJuIEEgPSBfMig4KSwgZVtBID4+IDJdID0gMCwgZVtBICsgNCA+PiAyXSA9IDAsIEEgfCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIExuKEEsIGksIHIpIHsKICAgICAgICAgICAgICByZXR1cm4gQSA9IEEgfCAwLCBpID0gaSB8IDAsIHIgPSByIHwgMCwgcDYoZVtBID4+IDJdLCBpLCByKSB8IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gT24oQSwgaSwgcikgewogICAgICAgICAgICAgIHJldHVybiBBID0gQSB8IDAsIGkgPSBpIHwgMCwgciA9IHIgfCAwLCByNihlW0EgPj4gMl0sIGksIHIpIHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBfbihBLCBpLCByKSB7CiAgICAgICAgICAgICAgcmV0dXJuIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDAsIG00KGVbQSA+PiAyXSwgaSwgcikgfCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIGJuKEEpIHsKICAgICAgICAgICAgICByZXR1cm4gQSA9IEEgfCAwLCBXKFcoWihlW0EgKyA1NTkyID4+IDJdLCAxNCkgLSAxNCA+Pj4gMCkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIHlpKEEpIHsKICAgICAgICAgICAgICB2YXIgaSA9IDA7CiAgICAgICAgICAgICAgQSAmJiAoaSA9IGVbQSArIDggPj4gMl0sIGkgJiYgUihpKSwgUihBKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gJG4oQSwgaSkgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCBBID0gZVtBID4+IDJdLCBBICYmIChlW0EgKyAxODQgPj4gMl0gPSBpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBxbihBLCBpLCByLCBmKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHEyID0gMCwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBhZigpIHsKICAgICAgICAgICAgICB2YXIgQSA9IDA7CiAgICAgICAgICAgICAgcmV0dXJuIEEgPSBFMigxLCAyNCksIEEgfHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBldChBLCBpLCByKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDAsIHIgPSByIHwgMCwgZVtBICsgODQgPj4gMl0gPSByLCBDNChBLCBpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBpdChBLCBpLCByKSB7CiAgICAgICAgICAgICAgcmV0dXJuIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCB0MShBLCBpLCAwKSB8IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gcnQoQSwgaSwgcikgewogICAgICAgICAgICAgIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCByID0gciB8IDAsIHUyW2VbQSA+PiAyXSArIGkgPj4gMV0gPSByOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIHVmKEEsIGksIHIpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIGkgPSBpIHwgMCwgciA9IHIgfCAwLCBlW2VbQSA+PiAyXSArIGkgPj4gMl0gPSByOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIG1yKEEsIGksIHIsIGYpIHsKICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBvZihBLCBpLCByKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDAsIHIgPSByIHwgMCwgRltlW0EgPj4gMl0gKyBpIHwgMF0gPSByOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIGZ0KEEsIGksIHIpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIGkgPSBpIHwgMCwgciA9IHIgfCAwLCBwNChlW0EgPj4gMl0sIGksIHIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIEF0KEEpIHsKICAgICAgICAgICAgICByZXR1cm4gQSA9IEEgfCAwLCBvMltlW0EgPj4gMl1dKGVbQSArIDQgPj4gMl0pLCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIGplKEEpIHsKICAgICAgICAgICAgICByZXR1cm4gQSA/IDMxIC0gTzAoQSAtIDEgXiBBKSB8IDAgOiAzMjsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBrdChBLCBpKSB7CiAgICAgICAgICAgICAgcmV0dXJuIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCBHMltlW0EgPj4gMl0gKyBpID4+IDFdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIG50KEEsIGkpIHsKICAgICAgICAgICAgICByZXR1cm4gQSA9IEEgfCAwLCBpID0gaSB8IDAsIHo2KGVbQSA+PiAyXSwgaSkgfCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIGdmKEEsIGkpIHsKICAgICAgICAgICAgICByZXR1cm4gQSA9IEEgfCAwLCBpID0gaSB8IDAsIGVbZVtBID4+IDJdICsgaSA+PiAyXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiB0dChBLCBpLCByKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHEyID0gLTEsIC0xOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIEcxKEEsIGksIHIsIGYsIGssIHQsIG4sIGwpIHsKICAgICAgICAgICAgICBhZShBLCBpLCByLCBmLCBrLCB0LCBuLCBsLCAxKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBoZihBLCBpKSB7CiAgICAgICAgICAgICAgcmV0dXJuIEEgPSBBIHwgMCwgaSA9IGkgfCAwLCBJW2VbQSA+PiAyXSArIGkgfCAwXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBsdChBLCBpKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDAsIEEgJiYgKGVbQSArIDE4NCA+PiAyXSA9IGkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIGF0KEEpIHsKICAgICAgICAgICAgICByZXR1cm4gQSA9IEEgfCAwLCBBID0gWCAtIEEgJiAtMTYsIFggPSBBLCBBIHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBzZihBLCBpLCByLCBmKSB7CiAgICAgICAgICAgICAgcEEoQSB8IDAsIGkgfCAwLCA4LCAwLCByIHwgMCwgLTEsIGYgfCAwKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBWZShBLCBpLCByKSB7CiAgICAgICAgICAgICAgcmV0dXJuIGU2KEEsIDAsIGksIHIpLCBxMiA9IHRlLCBuZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiByMShBLCBpLCByKSB7CiAgICAgICAgICAgICAgSVtBIHwgMF0gJiAzMiB8fCBocihpLCByLCBBKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiB5cihBLCBpLCByKSB7CiAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gdXQoQSwgaSwgcikgewogICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIHdmKEEsIGksIHIpIHsKICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gb3QoKSB7CiAgICAgICAgICAgICAgYzQoMTc2MiwgMSwgMjk3MDAsIDI5Nzc1LCAzLCA0LCAwLCAwKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBuMChBLCBpLCByLCBmKSB7CiAgICAgICAgICAgICAgcmV0dXJuIEEgPSBlNihBLCBpLCByLCBmKSwgQTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBVMihBKSB7CiAgICAgICAgICAgICAgcmV0dXJuIEEgPyB2MShBKSA6IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gZ3QoQSkgewogICAgICAgICAgICAgIHJldHVybiBBID0gQSB8IDAsIHo0KGVbQSA+PiAyXSkgfCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIGh0KEEpIHsKICAgICAgICAgICAgICByZXR1cm4gQSA9IEEgfCAwLCBPNChlW0EgPj4gMl0pIHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBzdChBLCBpKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBpID0gaSB8IDAsIGVbQSArIDUyID4+IDJdID0gaTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiB3dChBKSB7CiAgICAgICAgICAgICAgQSA9IEEgfCAwLCBlW0EgKyA4NCA+PiAyXSA9IDAsIEM0KEEsIDApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIExlKEEpIHsKICAgICAgICAgICAgICBBICYmIChSKGVbQSArIDggPj4gMl0pLCBSKEEpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBCZihBKSB7CiAgICAgICAgICAgICAgcmV0dXJuIEEgPSBBIHwgMCwgbzJbQSB8IDBdKCkgfCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIEJ0KEEpIHsKICAgICAgICAgICAgICByZXR1cm4gQSA9IEEgfCAwLCBlW0EgKyAzMiA+PiAyXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBjdChBKSB7CiAgICAgICAgICAgICAgcmV0dXJuIEEgPSBBIHwgMCwgZVtBICsgNDAgPj4gMl07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gdnQoQSkgewogICAgICAgICAgICAgIHJldHVybiBBID0gQSB8IDAsIGVbQSArIDc2ID4+IDJdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIEl0KEEpIHsKICAgICAgICAgICAgICByZXR1cm4gQSA9IEEgfCAwLCBlW0EgKyA4MCA+PiAyXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBadChBKSB7CiAgICAgICAgICAgICAgcmV0dXJuIEEgPSBBIHwgMCwgZVtBICsgNCA+PiAyXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBDdChBKSB7CiAgICAgICAgICAgICAgcmV0dXJuIEEgPSBBIHwgMCwgSVtBICsgMzYgfCAwXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBjZihBKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHYxKEEgKyA4MCB8IDApICsgODAgfCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIEd0KEEpIHsKICAgICAgICAgICAgICByZXR1cm4gVyhXKDApKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBXdChBKSB7CiAgICAgICAgICAgICAgcmV0dXJuIEEgPSBBIHwgMCwgQSArIDI0IHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBtdChBKSB7CiAgICAgICAgICAgICAgcmV0dXJuIDI5ODQ4OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIEkxKEEpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIEEgJiYgUihBKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiB5dChBKSB7CiAgICAgICAgICAgICAgcmV0dXJuIDMwMTcyOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIHB0KEEpIHsKICAgICAgICAgICAgICByZXR1cm4gMTc0NzsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBRdChBKSB7CiAgICAgICAgICAgICAgcmV0dXJuIDIzNTk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gVnQoQSkgewogICAgICAgICAgICAgIHJldHVybiAxODE2OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIHZmKEEpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIGZmKEEpLCBSKEEpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIElmKEEpIHsKICAgICAgICAgICAgICByZXR1cm4gQSA9IEEgfCAwLCBBIHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBZdChBKSB7CiAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gSHQoQSwgaSkgewogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIHNlKEEpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIFIoQSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gcGkoKSB7CiAgICAgICAgICAgICAgVDYoMTQxNiksIFUwKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gWHQoQSkgewogICAgICAgICAgICAgIHJmKDApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIEZ0KEEpIHsKICAgICAgICAgICAgICBBID0gQSB8IDAsIFggPSBBOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIEp0KCkgewogICAgICAgICAgICAgIHJldHVybiBYIHwgMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBaZigpIHsKICAgICAgICAgICAgICBRQSgpLCBVMCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIHByKEEpIHsKICAgICAgICAgICAgfQogICAgICAgICAgICBNID0gSSwgTjIoKTsKICAgICAgICAgICAgdmFyIG8yID0gcjIoW251bGwsIHQ2LCBLbiwgTjMsIFkzLCBmZiwgSWYsIFdyLCBJMSwga3QsIHJ0LCBoZiwgb2YsIGhmLCBvZiwgV3IsIEkxLCBnZiwgdWYsIFdyLCBJMSwgZ2YsIHVmLCBtdCwgc24sIEJmLCBKMywgQzMsIEw2LCBWaywgXzYsIHByLCBrZiwgbDMsIEQzLCB3dCwgZXQsIGVmLCBXdCwgUDMsIEJ0LCBkZSwgQ3QsIGRlLCBjdCwgZGUsIEpuLCB4NiwgUm4sIHg2LCBFbiwgRG4sIHZ0LCBkZSwgSXQsIGRlLCB4biwgVG4sIHpuLCBUMywgZm4sIGFuLCB5dCwgRTMsIEJmLCBuMywgV2ssIEw2LCBfMywgXzYsIGpBLCBrZiwgR24sIGduLCBVaywgZWYsIHN0LCBJbiwgUzYsIFVuLCBONiwgTW4sIE42LCBTbiwgTm4sIHJuLCB2biwgUzYsIGpuLCB1biwgWW4sIEhuLCBRbiwgb3QsIFo2LCBVNiwgTTYsIGI0LCBBNiwgdXQsIHR0LCB3Ziwgd2YsIEdpLCAkaywgZ2ssIG1rLCBIdCwgUGssIEF0LCBkQSwgdWssIGczLCBVMywgJDMsIHkzLCBfQSwgS0EsIERrLCBraywgeXIsIFZuLCAkQSwgc2ssIGFrLCB0aywgdDMsIEkzLCBxMywgTzMsIFpuLCB5ciwgRjMsIHhrLCBxQSwgeW4sIFhrLCBTaywgVGssIHZrLCBjaywgX2ssIHUzLCBxaywgdjMsIEFrLCB3biwgejMsIGJBLCBibiwgR3QsIE0zLCBTMywgUjMsIGJrLCByaywgb2ssIEtrLCBBMywgcjMsIE9rLCBRaywgT0EsIFYzLCBwbiwgYzMsIEprLCBwaywgaG4sIG1yLCB3aywgTGssIG1yLCBtciwgZmssIGxrLCBkMywgSzMsIFgzLCBiMywgajMsIEwzLCBaMywgSDMsIGlrLCBCMywgTWssIGVuLCBhMywgSWssIGtuLCB0biwgZGssIFEzLCBtMywgazMsIHAzLCBpMywgWmssIFlrLCBoaywgdzMsIEdrLCBqaywgTmssIHo0LCBPNCwgcDQsIHlyLCBpNiwgbHQsIEFmLCBzaSwgajQsIHo2LCBjNiwgcDYsIFY0LCBZNCwgUGUsIENlLCBndCwgaHQsIGZ0LCBmMywgRWssIG50LCBkbiwgTG4sIFJrLCBjbiwgJG4sIFhuLCBCNiwgV24sIG5uLCB5aywgdzYsIG00LCByNiwgSTQsIGE2LCBENCwgZTMsIF9uLCBPbiwgZWssIG1uLCBDaywgVEEsIGxuLCB6QSwgVzMsIEczLCBGbiwgSGssIHgzLCBZdCwgcW4sIExBLCBuaywgaDMsIFh0LCByZiwgSWYsIHNlLCBwciwgcHIsIGl0LCBzZSwgczMsIENuLCBvMywgUG4sIHNlLCBBbiwgemssIG9uLCBzZSwgQmssIHNlLCBRdCwgc2UsIFZ0LCBzZSwgcHQsIHZmLCBadCwgdmZdKTsKICAgICAgICAgICAgZnVuY3Rpb24gQ2YoKSB7CiAgICAgICAgICAgICAgcmV0dXJuIGowLmJ5dGVMZW5ndGggLyA2NTUzNiB8IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gUnQoQSkgewogICAgICAgICAgICAgIEEgPSBBIHwgMDsKICAgICAgICAgICAgICB2YXIgaSA9IENmKCkgfCAwLCByID0gaSArIEEgfCAwOwogICAgICAgICAgICAgIGlmIChpIDwgciAmJiByIDwgNjU1MzYpIHsKICAgICAgICAgICAgICAgIHZhciBmID0gbmV3IEFycmF5QnVmZmVyKFoociwgNjU1MzYpKSwgayA9IG5ldyBJbnQ4QXJyYXkoZik7CiAgICAgICAgICAgICAgICBrLnNldChGKSwgRiA9IG5ldyBJbnQ4QXJyYXkoZiksIHUyID0gbmV3IEludDE2QXJyYXkoZiksIGUgPSBuZXcgSW50MzJBcnJheShmKSwgSSA9IG5ldyBVaW50OEFycmF5KGYpLCBHMiA9IG5ldyBVaW50MTZBcnJheShmKSwgZCA9IG5ldyBVaW50MzJBcnJheShmKSwgRyA9IG5ldyBGbG9hdDMyQXJyYXkoZiksIFEyID0gbmV3IEZsb2F0NjRBcnJheShmKSwgajAgPSBmLCBNID0gSTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIGk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHsgRzogT2JqZWN0LmNyZWF0ZShPYmplY3QucHJvdG90eXBlLCB7IGdyb3c6IHsgdmFsdWU6IFJ0IH0sIGJ1ZmZlcjogeyBnZXQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIHJldHVybiBqMDsKICAgICAgICAgICAgfSB9IH0pLCBIOiBGaywgSTogQm4sIEo6IG8yLCBLOiB2MSwgTDogUiwgTTogRnQsIE46IGF0LCBPOiBKdCwgUDogbGYsIFE6IGxmLCBSOiBuZiwgUzogbmYgfTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBrZShLKTsKICAgICAgICB9KFkpOwogICAgICB9LCBpbnN0YW50aWF0ZTogZnVuY3Rpb24oViwgWSkgewogICAgICAgIHJldHVybiB7IHRoZW46IGZ1bmN0aW9uKFMpIHsKICAgICAgICAgIHZhciBLID0gbmV3IEQxLk1vZHVsZShWKTsKICAgICAgICAgIFMoeyBpbnN0YW5jZTogbmV3IEQxLkluc3RhbmNlKEssIFkpIH0pOwogICAgICAgIH0gfTsKICAgICAgfSwgUnVudGltZUVycm9yOiBFcnJvciwgaXNXYXNtMmpzOiAhMCB9OwogICAgICBEMS5pc1dhc20yanMgJiYgKHJlID0gW10pOwogICAgICB2YXIgVTEsIGlpID0gITEsIFcxLCB2MiwgYiwgSTIsIFQsIEwsIFoyLCBpMjsKICAgICAgZnVuY3Rpb24gJCgpIHsKICAgICAgICB2YXIgViA9IFUxLmJ1ZmZlcjsKICAgICAgICBDMi5IRUFQOCA9IFcxID0gbmV3IEludDhBcnJheShWKSwgQzIuSEVBUDE2ID0gYiA9IG5ldyBJbnQxNkFycmF5KFYpLCBDMi5IRUFQVTggPSB2MiA9IG5ldyBVaW50OEFycmF5KFYpLCBDMi5IRUFQVTE2ID0gSTIgPSBuZXcgVWludDE2QXJyYXkoViksIEMyLkhFQVAzMiA9IFQgPSBuZXcgSW50MzJBcnJheShWKSwgQzIuSEVBUFUzMiA9IEwgPSBuZXcgVWludDMyQXJyYXkoViksIEMyLkhFQVBGMzIgPSBaMiA9IG5ldyBGbG9hdDMyQXJyYXkoViksIEMyLkhFQVBGNjQgPSBpMiA9IG5ldyBGbG9hdDY0QXJyYXkoVik7CiAgICAgIH0KICAgICAgdmFyIGUyID0gW10sIF8gPSBbXSwgdDIgPSBbXTsKICAgICAgZnVuY3Rpb24gQjIoKSB7CiAgICAgICAgaWYgKEMyLnByZVJ1bikKICAgICAgICAgIGZvciAodHlwZW9mIEMyLnByZVJ1biA9PSAiZnVuY3Rpb24iICYmIChDMi5wcmVSdW4gPSBbQzIucHJlUnVuXSk7IEMyLnByZVJ1bi5sZW5ndGg7ICkKICAgICAgICAgICAgQTIoQzIucHJlUnVuLnNoaWZ0KCkpOwogICAgICAgIEMxKGUyKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBWMigpIHsKICAgICAgICBDMShfKTsKICAgICAgfQogICAgICBmdW5jdGlvbiB5MigpIHsKICAgICAgICBpZiAoQzIucG9zdFJ1bikKICAgICAgICAgIGZvciAodHlwZW9mIEMyLnBvc3RSdW4gPT0gImZ1bmN0aW9uIiAmJiAoQzIucG9zdFJ1biA9IFtDMi5wb3N0UnVuXSk7IEMyLnBvc3RSdW4ubGVuZ3RoOyApCiAgICAgICAgICAgIGEyKEMyLnBvc3RSdW4uc2hpZnQoKSk7CiAgICAgICAgQzEodDIpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIEEyKFYpIHsKICAgICAgICBlMi51bnNoaWZ0KFYpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGwyKFYpIHsKICAgICAgICBfLnVuc2hpZnQoVik7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gYTIoVikgewogICAgICAgIHQyLnVuc2hpZnQoVik7CiAgICAgIH0KICAgICAgdmFyIEoyID0gMCwgajIgPSBudWxsOwogICAgICBmdW5jdGlvbiBLMihWKSB7CiAgICAgICAgdmFyIFk7CiAgICAgICAgSjIrKywgKFkgPSBDMi5tb25pdG9yUnVuRGVwZW5kZW5jaWVzKSA9PSBudWxsIHx8IFkuY2FsbChDMiwgSjIpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGIyKFYpIHsKICAgICAgICB2YXIgUzsKICAgICAgICBpZiAoSjItLSwgKFMgPSBDMi5tb25pdG9yUnVuRGVwZW5kZW5jaWVzKSA9PSBudWxsIHx8IFMuY2FsbChDMiwgSjIpLCBKMiA9PSAwICYmIGoyKSB7CiAgICAgICAgICB2YXIgWSA9IGoyOwogICAgICAgICAgajIgPSBudWxsLCBZKCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIFQyKFYpIHsKICAgICAgICB2YXIgUzsKICAgICAgICAoUyA9IEMyLm9uQWJvcnQpID09IG51bGwgfHwgUy5jYWxsKEMyLCBWKSwgViA9ICJBYm9ydGVkKCIgKyBWICsgIikiLCBMMShWKSwgaWkgPSAhMCwgViArPSAiLiBCdWlsZCB3aXRoIC1zQVNTRVJUSU9OUyBmb3IgbW9yZSBpbmZvLiI7CiAgICAgICAgdmFyIFkgPSBuZXcgRDEuUnVudGltZUVycm9yKFYpOwogICAgICAgIHRocm93IFYxKFkpLCBZOwogICAgICB9CiAgICAgIHZhciB3MCA9ICJkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtiYXNlNjQsIiwgJDIgPSAoVikgPT4gVi5zdGFydHNXaXRoKHcwKSwgSDIgPSAoVikgPT4gVi5zdGFydHNXaXRoKCJmaWxlOi8vIik7CiAgICAgIGZ1bmN0aW9uIEYwKCkgewogICAgICAgIHZhciBWID0gIm9wZW5qcGVnanMud2FzbSI7CiAgICAgICAgcmV0dXJuICQyKFYpID8gViA6IFNpKFYpOwogICAgICB9CiAgICAgIHZhciBtMDsKICAgICAgZnVuY3Rpb24gUzAoVikgewogICAgICAgIGlmIChWID09IG0wICYmIHJlKQogICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHJlKTsKICAgICAgICBpZiAodmUpCiAgICAgICAgICByZXR1cm4gdmUoVik7CiAgICAgICAgdGhyb3cgImJvdGggYXN5bmMgYW5kIHN5bmMgZmV0Y2hpbmcgb2YgdGhlIHdhc20gZmFpbGVkIjsKICAgICAgfQogICAgICBhc3luYyBmdW5jdGlvbiB2MChWKSB7CiAgICAgICAgaWYgKCFyZSkKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIHZhciBZID0gYXdhaXQgRWUoVik7CiAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShZKTsKICAgICAgICAgIH0gY2F0Y2ggewogICAgICAgICAgfQogICAgICAgIHJldHVybiBTMChWKTsKICAgICAgfQogICAgICBhc3luYyBmdW5jdGlvbiBEMChWLCBZKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHZhciBTID0gYXdhaXQgdjAoViksIEsgPSBhd2FpdCBEMS5pbnN0YW50aWF0ZShTLCBZKTsKICAgICAgICAgIHJldHVybiBLOwogICAgICAgIH0gY2F0Y2ggKHIyKSB7CiAgICAgICAgICBMMShgZmFpbGVkIHRvIGFzeW5jaHJvbm91c2x5IHByZXBhcmUgd2FzbTogJHtyMn1gKSwgVDIocjIpOwogICAgICAgIH0KICAgICAgfQogICAgICBhc3luYyBmdW5jdGlvbiAkMChWLCBZLCBTKSB7CiAgICAgICAgaWYgKCFWICYmIHR5cGVvZiBEMS5pbnN0YW50aWF0ZVN0cmVhbWluZyA9PSAiZnVuY3Rpb24iICYmICEkMihZKSAmJiAhSDIoWSkgJiYgIUswICYmIHR5cGVvZiBmZXRjaCA9PSAiZnVuY3Rpb24iKQogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgdmFyIEsgPSBmZXRjaChZLCB7IGNyZWRlbnRpYWxzOiAic2FtZS1vcmlnaW4iIH0pLCByMiA9IGF3YWl0IEQxLmluc3RhbnRpYXRlU3RyZWFtaW5nKEssIFMpOwogICAgICAgICAgICByZXR1cm4gcjI7CiAgICAgICAgICB9IGNhdGNoIChNKSB7CiAgICAgICAgICAgIEwxKGB3YXNtIHN0cmVhbWluZyBjb21waWxlIGZhaWxlZDogJHtNfWApLCBMMSgiZmFsbGluZyBiYWNrIHRvIEFycmF5QnVmZmVyIGluc3RhbnRpYXRpb24iKTsKICAgICAgICAgIH0KICAgICAgICByZXR1cm4gRDAoWSwgUyk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gRzAoKSB7CiAgICAgICAgcmV0dXJuIHsgYTogR0EgfTsKICAgICAgfQogICAgICBhc3luYyBmdW5jdGlvbiBvMSgpIHsKICAgICAgICBmdW5jdGlvbiBWKHIyLCBNKSB7CiAgICAgICAgICByZXR1cm4gQjEgPSByMi5leHBvcnRzLCBVMSA9IEIxLkcsICQoKSwgZHIgPSBCMS5KLCBsMihCMS5IKSwgYjIoKSwgQjE7CiAgICAgICAgfQogICAgICAgIEsyKCk7CiAgICAgICAgZnVuY3Rpb24gWShyMikgewogICAgICAgICAgVihyMi5pbnN0YW5jZSk7CiAgICAgICAgfQogICAgICAgIHZhciBTID0gRzAoKTsKICAgICAgICBpZiAoQzIuaW5zdGFudGlhdGVXYXNtKQogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgcmV0dXJuIEMyLmluc3RhbnRpYXRlV2FzbShTLCBWKTsKICAgICAgICAgIH0gY2F0Y2ggKHIyKSB7CiAgICAgICAgICAgIEwxKGBNb2R1bGUuaW5zdGFudGlhdGVXYXNtIGNhbGxiYWNrIGZhaWxlZCB3aXRoIGVycm9yOiAke3IyfWApLCBWMShyMik7CiAgICAgICAgICB9CiAgICAgICAgbTAgPz8gKG0wID0gRjAoKSk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHZhciBLID0gYXdhaXQgJDAocmUsIG0wLCBTKTsKICAgICAgICAgIHJldHVybiBZKEspLCBLOwogICAgICAgIH0gY2F0Y2ggKHIyKSB7CiAgICAgICAgICBWMShyMik7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhciBDMSA9IChWKSA9PiB7CiAgICAgICAgZm9yICg7IFYubGVuZ3RoID4gMDsgKQogICAgICAgICAgVi5zaGlmdCgpKEMyKTsKICAgICAgfTsKICAgICAgQzIubm9FeGl0UnVudGltZTsKICAgICAgdmFyIE0xID0gKFYpID0+IGE0KFYpLCBGMSA9ICgpID0+IG80KCk7CiAgICAgIGNsYXNzIFMxIHsKICAgICAgICBjb25zdHJ1Y3RvcihZKSB7CiAgICAgICAgICB0aGlzLmV4Y1B0ciA9IFksIHRoaXMucHRyID0gWSAtIDI0OwogICAgICAgIH0KICAgICAgICBzZXRfdHlwZShZKSB7CiAgICAgICAgICBMW3RoaXMucHRyICsgNCA+PiAyXSA9IFk7CiAgICAgICAgfQogICAgICAgIGdldF90eXBlKCkgewogICAgICAgICAgcmV0dXJuIExbdGhpcy5wdHIgKyA0ID4+IDJdOwogICAgICAgIH0KICAgICAgICBzZXRfZGVzdHJ1Y3RvcihZKSB7CiAgICAgICAgICBMW3RoaXMucHRyICsgOCA+PiAyXSA9IFk7CiAgICAgICAgfQogICAgICAgIGdldF9kZXN0cnVjdG9yKCkgewogICAgICAgICAgcmV0dXJuIExbdGhpcy5wdHIgKyA4ID4+IDJdOwogICAgICAgIH0KICAgICAgICBzZXRfY2F1Z2h0KFkpIHsKICAgICAgICAgIFkgPSBZID8gMSA6IDAsIFcxW3RoaXMucHRyICsgMTJdID0gWTsKICAgICAgICB9CiAgICAgICAgZ2V0X2NhdWdodCgpIHsKICAgICAgICAgIHJldHVybiBXMVt0aGlzLnB0ciArIDEyXSAhPSAwOwogICAgICAgIH0KICAgICAgICBzZXRfcmV0aHJvd24oWSkgewogICAgICAgICAgWSA9IFkgPyAxIDogMCwgVzFbdGhpcy5wdHIgKyAxM10gPSBZOwogICAgICAgIH0KICAgICAgICBnZXRfcmV0aHJvd24oKSB7CiAgICAgICAgICByZXR1cm4gVzFbdGhpcy5wdHIgKyAxM10gIT0gMDsKICAgICAgICB9CiAgICAgICAgaW5pdChZLCBTKSB7CiAgICAgICAgICB0aGlzLnNldF9hZGp1c3RlZF9wdHIoMCksIHRoaXMuc2V0X3R5cGUoWSksIHRoaXMuc2V0X2Rlc3RydWN0b3IoUyk7CiAgICAgICAgfQogICAgICAgIHNldF9hZGp1c3RlZF9wdHIoWSkgewogICAgICAgICAgTFt0aGlzLnB0ciArIDE2ID4+IDJdID0gWTsKICAgICAgICB9CiAgICAgICAgZ2V0X2FkanVzdGVkX3B0cigpIHsKICAgICAgICAgIHJldHVybiBMW3RoaXMucHRyICsgMTYgPj4gMl07CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhciBzMSA9IDAsIEoxID0gKFYsIFksIFMpID0+IHsKICAgICAgICB2YXIgSyA9IG5ldyBTMShWKTsKICAgICAgICB0aHJvdyBLLmluaXQoWSwgUyksIHMxID0gViwgczE7CiAgICAgIH0sIHEwID0gKCkgPT4gVDIoIiIpLCBSMSA9IHt9LCBEZSA9IChWKSA9PiB7CiAgICAgICAgZm9yICg7IFYubGVuZ3RoOyApIHsKICAgICAgICAgIHZhciBZID0gVi5wb3AoKSwgUyA9IFYucG9wKCk7CiAgICAgICAgICBTKFkpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgZnVuY3Rpb24gTzEoVikgewogICAgICAgIHJldHVybiB0aGlzLmZyb21XaXJlVHlwZShMW1YgPj4gMl0pOwogICAgICB9CiAgICAgIHZhciBJZSA9IHt9LCBmZSA9IHt9LCByaSA9IHt9LCBEciwgZmkgPSAoVikgPT4gewogICAgICAgIHRocm93IG5ldyBEcihWKTsKICAgICAgfSwgQWUgPSAoViwgWSwgUykgPT4gewogICAgICAgIFYuZm9yRWFjaCgoczIpID0+IHJpW3MyXSA9IFkpOwogICAgICAgIGZ1bmN0aW9uIEsoczIpIHsKICAgICAgICAgIHZhciBOID0gUyhzMik7CiAgICAgICAgICBOLmxlbmd0aCAhPT0gVi5sZW5ndGggJiYgZmkoIk1pc21hdGNoZWQgdHlwZSBjb252ZXJ0ZXIgY291bnQiKTsKICAgICAgICAgIGZvciAodmFyIE4yID0gMDsgTjIgPCBWLmxlbmd0aDsgKytOMikKICAgICAgICAgICAgTjEoVltOMl0sIE5bTjJdKTsKICAgICAgICB9CiAgICAgICAgdmFyIHIyID0gbmV3IEFycmF5KFkubGVuZ3RoKSwgTSA9IFtdLCBXMiA9IDA7CiAgICAgICAgWS5mb3JFYWNoKChzMiwgTikgPT4gewogICAgICAgICAgZmUuaGFzT3duUHJvcGVydHkoczIpID8gcjJbTl0gPSBmZVtzMl0gOiAoTS5wdXNoKHMyKSwgSWUuaGFzT3duUHJvcGVydHkoczIpIHx8IChJZVtzMl0gPSBbXSksIEllW3MyXS5wdXNoKCgpID0+IHsKICAgICAgICAgICAgcjJbTl0gPSBmZVtzMl0sICsrVzIsIFcyID09PSBNLmxlbmd0aCAmJiBLKHIyKTsKICAgICAgICAgIH0pKTsKICAgICAgICB9KSwgTS5sZW5ndGggPT09IDAgJiYgSyhyMik7CiAgICAgIH0sICRmID0gKFYpID0+IHsKICAgICAgICB2YXIgWSA9IFIxW1ZdOwogICAgICAgIGRlbGV0ZSBSMVtWXTsKICAgICAgICB2YXIgUyA9IFkucmF3Q29uc3RydWN0b3IsIEsgPSBZLnJhd0Rlc3RydWN0b3IsIHIyID0gWS5maWVsZHMsIE0gPSByMi5tYXAoKFcyKSA9PiBXMi5nZXR0ZXJSZXR1cm5UeXBlKS5jb25jYXQocjIubWFwKChXMikgPT4gVzIuc2V0dGVyQXJndW1lbnRUeXBlKSk7CiAgICAgICAgQWUoW1ZdLCBNLCAoVzIpID0+IHsKICAgICAgICAgIHZhciBzMiA9IHt9OwogICAgICAgICAgcmV0dXJuIHIyLmZvckVhY2goKE4sIE4yKSA9PiB7CiAgICAgICAgICAgIHZhciBNMiA9IE4uZmllbGROYW1lLCBhMCA9IFcyW04yXSwgSjAgPSBOLmdldHRlciwgVzAgPSBOLmdldHRlckNvbnRleHQsIEEwID0gVzJbTjIgKyByMi5sZW5ndGhdLCBOMCA9IE4uc2V0dGVyLCBnMSA9IE4uc2V0dGVyQ29udGV4dDsKICAgICAgICAgICAgczJbTTJdID0geyByZWFkOiAoVTApID0+IGEwLmZyb21XaXJlVHlwZShKMChXMCwgVTApKSwgd3JpdGU6IChVMCwga2UpID0+IHsKICAgICAgICAgICAgICB2YXIgVjAgPSBbXTsKICAgICAgICAgICAgICBOMChnMSwgVTAsIEEwLnRvV2lyZVR5cGUoVjAsIGtlKSksIERlKFYwKTsKICAgICAgICAgICAgfSB9OwogICAgICAgICAgfSksIFt7IG5hbWU6IFkubmFtZSwgZnJvbVdpcmVUeXBlOiAoTikgPT4gewogICAgICAgICAgICB2YXIgTjIgPSB7fTsKICAgICAgICAgICAgZm9yICh2YXIgTTIgaW4gczIpCiAgICAgICAgICAgICAgTjJbTTJdID0gczJbTTJdLnJlYWQoTik7CiAgICAgICAgICAgIHJldHVybiBLKE4pLCBOMjsKICAgICAgICAgIH0sIHRvV2lyZVR5cGU6IChOLCBOMikgPT4gewogICAgICAgICAgICBmb3IgKHZhciBNMiBpbiBzMikKICAgICAgICAgICAgICBpZiAoIShNMiBpbiBOMikpCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBNaXNzaW5nIGZpZWxkOiAiJHtNMn0iYCk7CiAgICAgICAgICAgIHZhciBhMCA9IFMoKTsKICAgICAgICAgICAgZm9yIChNMiBpbiBzMikKICAgICAgICAgICAgICBzMltNMl0ud3JpdGUoYTAsIE4yW00yXSk7CiAgICAgICAgICAgIHJldHVybiBOICE9PSBudWxsICYmIE4ucHVzaChLLCBhMCksIGEwOwogICAgICAgICAgfSwgYXJnUGFja0FkdmFuY2U6IFAxLCByZWFkVmFsdWVGcm9tUG9pbnRlcjogTzEsIGRlc3RydWN0b3JGdW5jdGlvbjogSyB9XTsKICAgICAgICB9KTsKICAgICAgfSwgcWYgPSAoViwgWSwgUywgSywgcjIpID0+IHsKICAgICAgfSwgZTggPSAoKSA9PiB7CiAgICAgICAgZm9yICh2YXIgViA9IG5ldyBBcnJheSgyNTYpLCBZID0gMDsgWSA8IDI1NjsgKytZKQogICAgICAgICAgVltZXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoWSk7CiAgICAgICAgVXIgPSBWOwogICAgICB9LCBVciwgdzEgPSAoVikgPT4gewogICAgICAgIGZvciAodmFyIFkgPSAiIiwgUyA9IFY7IHYyW1NdOyApCiAgICAgICAgICBZICs9IFVyW3YyW1MrK11dOwogICAgICAgIHJldHVybiBZOwogICAgICB9LCBaZSwgeTAgPSAoVikgPT4gewogICAgICAgIHRocm93IG5ldyBaZShWKTsKICAgICAgfTsKICAgICAgZnVuY3Rpb24gaTgoViwgWSwgUyA9IHt9KSB7CiAgICAgICAgdmFyIEsgPSBZLm5hbWU7CiAgICAgICAgaWYgKFYgfHwgeTAoYHR5cGUgIiR7S30iIG11c3QgaGF2ZSBhIHBvc2l0aXZlIGludGVnZXIgdHlwZWlkIHBvaW50ZXJgKSwgZmUuaGFzT3duUHJvcGVydHkoVikpIHsKICAgICAgICAgIGlmIChTLmlnbm9yZUR1cGxpY2F0ZVJlZ2lzdHJhdGlvbnMpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIHkwKGBDYW5ub3QgcmVnaXN0ZXIgdHlwZSAnJHtLfScgdHdpY2VgKTsKICAgICAgICB9CiAgICAgICAgaWYgKGZlW1ZdID0gWSwgZGVsZXRlIHJpW1ZdLCBJZS5oYXNPd25Qcm9wZXJ0eShWKSkgewogICAgICAgICAgdmFyIHIyID0gSWVbVl07CiAgICAgICAgICBkZWxldGUgSWVbVl0sIHIyLmZvckVhY2goKE0pID0+IE0oKSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIE4xKFYsIFksIFMgPSB7fSkgewogICAgICAgIHJldHVybiBpOChWLCBZLCBTKTsKICAgICAgfQogICAgICB2YXIgUDEgPSA4LCByOCA9IChWLCBZLCBTLCBLKSA9PiB7CiAgICAgICAgWSA9IHcxKFkpLCBOMShWLCB7IG5hbWU6IFksIGZyb21XaXJlVHlwZTogZnVuY3Rpb24ocjIpIHsKICAgICAgICAgIHJldHVybiAhIXIyOwogICAgICAgIH0sIHRvV2lyZVR5cGU6IGZ1bmN0aW9uKHIyLCBNKSB7CiAgICAgICAgICByZXR1cm4gTSA/IFMgOiBLOwogICAgICAgIH0sIGFyZ1BhY2tBZHZhbmNlOiBQMSwgcmVhZFZhbHVlRnJvbVBvaW50ZXI6IGZ1bmN0aW9uKHIyKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5mcm9tV2lyZVR5cGUodjJbcjJdKTsKICAgICAgICB9LCBkZXN0cnVjdG9yRnVuY3Rpb246IG51bGwgfSk7CiAgICAgIH0sIGY4ID0gKFYpID0+ICh7IGNvdW50OiBWLmNvdW50LCBkZWxldGVTY2hlZHVsZWQ6IFYuZGVsZXRlU2NoZWR1bGVkLCBwcmVzZXJ2ZVBvaW50ZXJPbkRlbGV0ZTogVi5wcmVzZXJ2ZVBvaW50ZXJPbkRlbGV0ZSwgcHRyOiBWLnB0ciwgcHRyVHlwZTogVi5wdHJUeXBlLCBzbWFydFB0cjogVi5zbWFydFB0ciwgc21hcnRQdHJUeXBlOiBWLnNtYXJ0UHRyVHlwZSB9KSwgUGkgPSAoVikgPT4gewogICAgICAgIGZ1bmN0aW9uIFkoUykgewogICAgICAgICAgcmV0dXJuIFMuJCQucHRyVHlwZS5yZWdpc3RlcmVkQ2xhc3MubmFtZTsKICAgICAgICB9CiAgICAgICAgeTAoWShWKSArICIgaW5zdGFuY2UgYWxyZWFkeSBkZWxldGVkIik7CiAgICAgIH0sIHhpID0gITEsIE1yID0gKFYpID0+IHsKICAgICAgfSwgQTggPSAoVikgPT4gewogICAgICAgIFYuc21hcnRQdHIgPyBWLnNtYXJ0UHRyVHlwZS5yYXdEZXN0cnVjdG9yKFYuc21hcnRQdHIpIDogVi5wdHJUeXBlLnJlZ2lzdGVyZWRDbGFzcy5yYXdEZXN0cnVjdG9yKFYucHRyKTsKICAgICAgfSwgU3IgPSAoVikgPT4gewogICAgICAgIFYuY291bnQudmFsdWUgLT0gMTsKICAgICAgICB2YXIgWSA9IFYuY291bnQudmFsdWUgPT09IDA7CiAgICAgICAgWSAmJiBBOChWKTsKICAgICAgfSwgTnIgPSAoViwgWSwgUykgPT4gewogICAgICAgIGlmIChZID09PSBTKQogICAgICAgICAgcmV0dXJuIFY7CiAgICAgICAgaWYgKFMuYmFzZUNsYXNzID09PSB2b2lkIDApCiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB2YXIgSyA9IE5yKFYsIFksIFMuYmFzZUNsYXNzKTsKICAgICAgICByZXR1cm4gSyA9PT0gbnVsbCA/IG51bGwgOiBTLmRvd25jYXN0KEspOwogICAgICB9LCBQciA9IHt9LCBrOCA9IHt9LCBuOCA9IChWLCBZKSA9PiB7CiAgICAgICAgZm9yIChZID09PSB2b2lkIDAgJiYgeTAoInB0ciBzaG91bGQgbm90IGJlIHVuZGVmaW5lZCIpOyBWLmJhc2VDbGFzczsgKQogICAgICAgICAgWSA9IFYudXBjYXN0KFkpLCBWID0gVi5iYXNlQ2xhc3M7CiAgICAgICAgcmV0dXJuIFk7CiAgICAgIH0sIHQ4ID0gKFYsIFkpID0+IChZID0gbjgoViwgWSksIGs4W1ldKSwgQWkgPSAoViwgWSkgPT4gewogICAgICAgICghWS5wdHJUeXBlIHx8ICFZLnB0cikgJiYgZmkoIm1ha2VDbGFzc0hhbmRsZSByZXF1aXJlcyBwdHIgYW5kIHB0clR5cGUiKTsKICAgICAgICB2YXIgUyA9ICEhWS5zbWFydFB0clR5cGUsIEsgPSAhIVkuc21hcnRQdHI7CiAgICAgICAgcmV0dXJuIFMgIT09IEsgJiYgZmkoIkJvdGggc21hcnRQdHJUeXBlIGFuZCBzbWFydFB0ciBtdXN0IGJlIHNwZWNpZmllZCIpLCBZLmNvdW50ID0geyB2YWx1ZTogMSB9LCBVZShPYmplY3QuY3JlYXRlKFYsIHsgJCQ6IHsgdmFsdWU6IFksIHdyaXRhYmxlOiAhMCB9IH0pKTsKICAgICAgfTsKICAgICAgZnVuY3Rpb24gbDgoVikgewogICAgICAgIHZhciBZID0gdGhpcy5nZXRQb2ludGVlKFYpOwogICAgICAgIGlmICghWSkKICAgICAgICAgIHJldHVybiB0aGlzLmRlc3RydWN0b3IoViksIG51bGw7CiAgICAgICAgdmFyIFMgPSB0OCh0aGlzLnJlZ2lzdGVyZWRDbGFzcywgWSk7CiAgICAgICAgaWYgKFMgIT09IHZvaWQgMCkgewogICAgICAgICAgaWYgKFMuJCQuY291bnQudmFsdWUgPT09IDApCiAgICAgICAgICAgIHJldHVybiBTLiQkLnB0ciA9IFksIFMuJCQuc21hcnRQdHIgPSBWLCBTLmNsb25lKCk7CiAgICAgICAgICB2YXIgSyA9IFMuY2xvbmUoKTsKICAgICAgICAgIHJldHVybiB0aGlzLmRlc3RydWN0b3IoViksIEs7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIHIyKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuaXNTbWFydFBvaW50ZXIgPyBBaSh0aGlzLnJlZ2lzdGVyZWRDbGFzcy5pbnN0YW5jZVByb3RvdHlwZSwgeyBwdHJUeXBlOiB0aGlzLnBvaW50ZWVUeXBlLCBwdHI6IFksIHNtYXJ0UHRyVHlwZTogdGhpcywgc21hcnRQdHI6IFYgfSkgOiBBaSh0aGlzLnJlZ2lzdGVyZWRDbGFzcy5pbnN0YW5jZVByb3RvdHlwZSwgeyBwdHJUeXBlOiB0aGlzLCBwdHI6IFYgfSk7CiAgICAgICAgfQogICAgICAgIHZhciBNID0gdGhpcy5yZWdpc3RlcmVkQ2xhc3MuZ2V0QWN0dWFsVHlwZShZKSwgVzIgPSBQcltNXTsKICAgICAgICBpZiAoIVcyKQogICAgICAgICAgcmV0dXJuIHIyLmNhbGwodGhpcyk7CiAgICAgICAgdmFyIHMyOwogICAgICAgIHRoaXMuaXNDb25zdCA/IHMyID0gVzIuY29uc3RQb2ludGVyVHlwZSA6IHMyID0gVzIucG9pbnRlclR5cGU7CiAgICAgICAgdmFyIE4gPSBOcihZLCB0aGlzLnJlZ2lzdGVyZWRDbGFzcywgczIucmVnaXN0ZXJlZENsYXNzKTsKICAgICAgICByZXR1cm4gTiA9PT0gbnVsbCA/IHIyLmNhbGwodGhpcykgOiB0aGlzLmlzU21hcnRQb2ludGVyID8gQWkoczIucmVnaXN0ZXJlZENsYXNzLmluc3RhbmNlUHJvdG90eXBlLCB7IHB0clR5cGU6IHMyLCBwdHI6IE4sIHNtYXJ0UHRyVHlwZTogdGhpcywgc21hcnRQdHI6IFYgfSkgOiBBaShzMi5yZWdpc3RlcmVkQ2xhc3MuaW5zdGFuY2VQcm90b3R5cGUsIHsgcHRyVHlwZTogczIsIHB0cjogTiB9KTsKICAgICAgfQogICAgICB2YXIgVWUgPSAoVikgPT4gdHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5ID4gInUiID8gKFVlID0gKFkpID0+IFksIFYpIDogKHhpID0gbmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KChZKSA9PiB7CiAgICAgICAgU3IoWS4kJCk7CiAgICAgIH0pLCBVZSA9IChZKSA9PiB7CiAgICAgICAgdmFyIFMgPSBZLiQkLCBLID0gISFTLnNtYXJ0UHRyOwogICAgICAgIGlmIChLKSB7CiAgICAgICAgICB2YXIgcjIgPSB7ICQkOiBTIH07CiAgICAgICAgICB4aS5yZWdpc3RlcihZLCByMiwgWSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBZOwogICAgICB9LCBNciA9IChZKSA9PiB4aS51bnJlZ2lzdGVyKFkpLCBVZShWKSksIGE4ID0gKCkgPT4gewogICAgICAgIE9iamVjdC5hc3NpZ24oa2kucHJvdG90eXBlLCB7IGlzQWxpYXNPZihWKSB7CiAgICAgICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2Yga2kpIHx8ICEoViBpbnN0YW5jZW9mIGtpKSkKICAgICAgICAgICAgcmV0dXJuICExOwogICAgICAgICAgdmFyIFkgPSB0aGlzLiQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzLCBTID0gdGhpcy4kJC5wdHI7CiAgICAgICAgICBWLiQkID0gVi4kJDsKICAgICAgICAgIGZvciAodmFyIEsgPSBWLiQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzLCByMiA9IFYuJCQucHRyOyBZLmJhc2VDbGFzczsgKQogICAgICAgICAgICBTID0gWS51cGNhc3QoUyksIFkgPSBZLmJhc2VDbGFzczsKICAgICAgICAgIGZvciAoOyBLLmJhc2VDbGFzczsgKQogICAgICAgICAgICByMiA9IEsudXBjYXN0KHIyKSwgSyA9IEsuYmFzZUNsYXNzOwogICAgICAgICAgcmV0dXJuIFkgPT09IEsgJiYgUyA9PT0gcjI7CiAgICAgICAgfSwgY2xvbmUoKSB7CiAgICAgICAgICBpZiAodGhpcy4kJC5wdHIgfHwgUGkodGhpcyksIHRoaXMuJCQucHJlc2VydmVQb2ludGVyT25EZWxldGUpCiAgICAgICAgICAgIHJldHVybiB0aGlzLiQkLmNvdW50LnZhbHVlICs9IDEsIHRoaXM7CiAgICAgICAgICB2YXIgViA9IFVlKE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLCB7ICQkOiB7IHZhbHVlOiBmOCh0aGlzLiQkKSB9IH0pKTsKICAgICAgICAgIHJldHVybiBWLiQkLmNvdW50LnZhbHVlICs9IDEsIFYuJCQuZGVsZXRlU2NoZWR1bGVkID0gITEsIFY7CiAgICAgICAgfSwgZGVsZXRlKCkgewogICAgICAgICAgdGhpcy4kJC5wdHIgfHwgUGkodGhpcyksIHRoaXMuJCQuZGVsZXRlU2NoZWR1bGVkICYmICF0aGlzLiQkLnByZXNlcnZlUG9pbnRlck9uRGVsZXRlICYmIHkwKCJPYmplY3QgYWxyZWFkeSBzY2hlZHVsZWQgZm9yIGRlbGV0aW9uIiksIE1yKHRoaXMpLCBTcih0aGlzLiQkKSwgdGhpcy4kJC5wcmVzZXJ2ZVBvaW50ZXJPbkRlbGV0ZSB8fCAodGhpcy4kJC5zbWFydFB0ciA9IHZvaWQgMCwgdGhpcy4kJC5wdHIgPSB2b2lkIDApOwogICAgICAgIH0sIGlzRGVsZXRlZCgpIHsKICAgICAgICAgIHJldHVybiAhdGhpcy4kJC5wdHI7CiAgICAgICAgfSwgZGVsZXRlTGF0ZXIoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4kJC5wdHIgfHwgUGkodGhpcyksIHRoaXMuJCQuZGVsZXRlU2NoZWR1bGVkICYmICF0aGlzLiQkLnByZXNlcnZlUG9pbnRlck9uRGVsZXRlICYmIHkwKCJPYmplY3QgYWxyZWFkeSBzY2hlZHVsZWQgZm9yIGRlbGV0aW9uIiksIHRoaXMuJCQuZGVsZXRlU2NoZWR1bGVkID0gITAsIHRoaXM7CiAgICAgICAgfSB9KTsKICAgICAgfTsKICAgICAgZnVuY3Rpb24ga2koKSB7CiAgICAgIH0KICAgICAgdmFyIE1lID0gKFYsIFkpID0+IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShZLCAibmFtZSIsIHsgdmFsdWU6IFYgfSksIHhyID0gKFYsIFksIFMpID0+IHsKICAgICAgICBpZiAoVltZXS5vdmVybG9hZFRhYmxlID09PSB2b2lkIDApIHsKICAgICAgICAgIHZhciBLID0gVltZXTsKICAgICAgICAgIFZbWV0gPSBmdW5jdGlvbiguLi5yMikgewogICAgICAgICAgICByZXR1cm4gVltZXS5vdmVybG9hZFRhYmxlLmhhc093blByb3BlcnR5KHIyLmxlbmd0aCkgfHwgeTAoYEZ1bmN0aW9uICcke1N9JyBjYWxsZWQgd2l0aCBhbiBpbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMgKCR7cjIubGVuZ3RofSkgLSBleHBlY3RzIG9uZSBvZiAoJHtWW1ldLm92ZXJsb2FkVGFibGV9KSFgKSwgVltZXS5vdmVybG9hZFRhYmxlW3IyLmxlbmd0aF0uYXBwbHkodGhpcywgcjIpOwogICAgICAgICAgfSwgVltZXS5vdmVybG9hZFRhYmxlID0gW10sIFZbWV0ub3ZlcmxvYWRUYWJsZVtLLmFyZ0NvdW50XSA9IEs7CiAgICAgICAgfQogICAgICB9LCBUciA9IChWLCBZLCBTKSA9PiB7CiAgICAgICAgQzIuaGFzT3duUHJvcGVydHkoVikgPyAoKFMgPT09IHZvaWQgMCB8fCBDMltWXS5vdmVybG9hZFRhYmxlICE9PSB2b2lkIDAgJiYgQzJbVl0ub3ZlcmxvYWRUYWJsZVtTXSAhPT0gdm9pZCAwKSAmJiB5MChgQ2Fubm90IHJlZ2lzdGVyIHB1YmxpYyBuYW1lICcke1Z9JyB0d2ljZWApLCB4cihDMiwgViwgViksIEMyW1ZdLm92ZXJsb2FkVGFibGUuaGFzT3duUHJvcGVydHkoUykgJiYgeTAoYENhbm5vdCByZWdpc3RlciBtdWx0aXBsZSBvdmVybG9hZHMgb2YgYSBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIG51bWJlciBvZiBhcmd1bWVudHMgKCR7U30pIWApLCBDMltWXS5vdmVybG9hZFRhYmxlW1NdID0gWSkgOiAoQzJbVl0gPSBZLCBDMltWXS5hcmdDb3VudCA9IFMpOwogICAgICB9LCB1OCA9IDQ4LCBvOCA9IDU3LCBnOCA9IChWKSA9PiB7CiAgICAgICAgViA9IFYucmVwbGFjZSgvW15hLXpBLVowLTlfXS9nLCAiJCIpOwogICAgICAgIHZhciBZID0gVi5jaGFyQ29kZUF0KDApOwogICAgICAgIHJldHVybiBZID49IHU4ICYmIFkgPD0gbzggPyBgXyR7Vn1gIDogVjsKICAgICAgfTsKICAgICAgZnVuY3Rpb24gaDgoViwgWSwgUywgSywgcjIsIE0sIFcyLCBzMikgewogICAgICAgIHRoaXMubmFtZSA9IFYsIHRoaXMuY29uc3RydWN0b3IgPSBZLCB0aGlzLmluc3RhbmNlUHJvdG90eXBlID0gUywgdGhpcy5yYXdEZXN0cnVjdG9yID0gSywgdGhpcy5iYXNlQ2xhc3MgPSByMiwgdGhpcy5nZXRBY3R1YWxUeXBlID0gTSwgdGhpcy51cGNhc3QgPSBXMiwgdGhpcy5kb3duY2FzdCA9IHMyLCB0aGlzLnB1cmVWaXJ0dWFsRnVuY3Rpb25zID0gW107CiAgICAgIH0KICAgICAgdmFyIFRpID0gKFYsIFksIFMpID0+IHsKICAgICAgICBmb3IgKDsgWSAhPT0gUzsgKQogICAgICAgICAgWS51cGNhc3QgfHwgeTAoYEV4cGVjdGVkIG51bGwgb3IgaW5zdGFuY2Ugb2YgJHtTLm5hbWV9LCBnb3QgYW4gaW5zdGFuY2Ugb2YgJHtZLm5hbWV9YCksIFYgPSBZLnVwY2FzdChWKSwgWSA9IFkuYmFzZUNsYXNzOwogICAgICAgIHJldHVybiBWOwogICAgICB9OwogICAgICBmdW5jdGlvbiBzOChWLCBZKSB7CiAgICAgICAgaWYgKFkgPT09IG51bGwpCiAgICAgICAgICByZXR1cm4gdGhpcy5pc1JlZmVyZW5jZSAmJiB5MChgbnVsbCBpcyBub3QgYSB2YWxpZCAke3RoaXMubmFtZX1gKSwgMDsKICAgICAgICBZLiQkIHx8IHkwKGBDYW5ub3QgcGFzcyAiJHtMaShZKX0iIGFzIGEgJHt0aGlzLm5hbWV9YCksIFkuJCQucHRyIHx8IHkwKGBDYW5ub3QgcGFzcyBkZWxldGVkIG9iamVjdCBhcyBhIHBvaW50ZXIgb2YgdHlwZSAke3RoaXMubmFtZX1gKTsKICAgICAgICB2YXIgUyA9IFkuJCQucHRyVHlwZS5yZWdpc3RlcmVkQ2xhc3MsIEsgPSBUaShZLiQkLnB0ciwgUywgdGhpcy5yZWdpc3RlcmVkQ2xhc3MpOwogICAgICAgIHJldHVybiBLOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHc4KFYsIFkpIHsKICAgICAgICB2YXIgUzsKICAgICAgICBpZiAoWSA9PT0gbnVsbCkKICAgICAgICAgIHJldHVybiB0aGlzLmlzUmVmZXJlbmNlICYmIHkwKGBudWxsIGlzIG5vdCBhIHZhbGlkICR7dGhpcy5uYW1lfWApLCB0aGlzLmlzU21hcnRQb2ludGVyID8gKFMgPSB0aGlzLnJhd0NvbnN0cnVjdG9yKCksIFYgIT09IG51bGwgJiYgVi5wdXNoKHRoaXMucmF3RGVzdHJ1Y3RvciwgUyksIFMpIDogMDsKICAgICAgICAoIVkgfHwgIVkuJCQpICYmIHkwKGBDYW5ub3QgcGFzcyAiJHtMaShZKX0iIGFzIGEgJHt0aGlzLm5hbWV9YCksIFkuJCQucHRyIHx8IHkwKGBDYW5ub3QgcGFzcyBkZWxldGVkIG9iamVjdCBhcyBhIHBvaW50ZXIgb2YgdHlwZSAke3RoaXMubmFtZX1gKSwgIXRoaXMuaXNDb25zdCAmJiBZLiQkLnB0clR5cGUuaXNDb25zdCAmJiB5MChgQ2Fubm90IGNvbnZlcnQgYXJndW1lbnQgb2YgdHlwZSAke1kuJCQuc21hcnRQdHJUeXBlID8gWS4kJC5zbWFydFB0clR5cGUubmFtZSA6IFkuJCQucHRyVHlwZS5uYW1lfSB0byBwYXJhbWV0ZXIgdHlwZSAke3RoaXMubmFtZX1gKTsKICAgICAgICB2YXIgSyA9IFkuJCQucHRyVHlwZS5yZWdpc3RlcmVkQ2xhc3M7CiAgICAgICAgaWYgKFMgPSBUaShZLiQkLnB0ciwgSywgdGhpcy5yZWdpc3RlcmVkQ2xhc3MpLCB0aGlzLmlzU21hcnRQb2ludGVyKQogICAgICAgICAgc3dpdGNoIChZLiQkLnNtYXJ0UHRyID09PSB2b2lkIDAgJiYgeTAoIlBhc3NpbmcgcmF3IHBvaW50ZXIgdG8gc21hcnQgcG9pbnRlciBpcyBpbGxlZ2FsIiksIHRoaXMuc2hhcmluZ1BvbGljeSkgewogICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgWS4kJC5zbWFydFB0clR5cGUgPT09IHRoaXMgPyBTID0gWS4kJC5zbWFydFB0ciA6IHkwKGBDYW5ub3QgY29udmVydCBhcmd1bWVudCBvZiB0eXBlICR7WS4kJC5zbWFydFB0clR5cGUgPyBZLiQkLnNtYXJ0UHRyVHlwZS5uYW1lIDogWS4kJC5wdHJUeXBlLm5hbWV9IHRvIHBhcmFtZXRlciB0eXBlICR7dGhpcy5uYW1lfWApOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgUyA9IFkuJCQuc21hcnRQdHI7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICBpZiAoWS4kJC5zbWFydFB0clR5cGUgPT09IHRoaXMpCiAgICAgICAgICAgICAgICBTID0gWS4kJC5zbWFydFB0cjsKICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciByMiA9IFkuY2xvbmUoKTsKICAgICAgICAgICAgICAgIFMgPSB0aGlzLnJhd1NoYXJlKFMsIHgxLnRvSGFuZGxlKCgpID0+IHIyLmRlbGV0ZSgpKSksIFYgIT09IG51bGwgJiYgVi5wdXNoKHRoaXMucmF3RGVzdHJ1Y3RvciwgUyk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgIHkwKCJVbnN1cHBvcnRpbmcgc2hhcmluZyBwb2xpY3kiKTsKICAgICAgICAgIH0KICAgICAgICByZXR1cm4gUzsKICAgICAgfQogICAgICBmdW5jdGlvbiBCOChWLCBZKSB7CiAgICAgICAgaWYgKFkgPT09IG51bGwpCiAgICAgICAgICByZXR1cm4gdGhpcy5pc1JlZmVyZW5jZSAmJiB5MChgbnVsbCBpcyBub3QgYSB2YWxpZCAke3RoaXMubmFtZX1gKSwgMDsKICAgICAgICBZLiQkIHx8IHkwKGBDYW5ub3QgcGFzcyAiJHtMaShZKX0iIGFzIGEgJHt0aGlzLm5hbWV9YCksIFkuJCQucHRyIHx8IHkwKGBDYW5ub3QgcGFzcyBkZWxldGVkIG9iamVjdCBhcyBhIHBvaW50ZXIgb2YgdHlwZSAke3RoaXMubmFtZX1gKSwgWS4kJC5wdHJUeXBlLmlzQ29uc3QgJiYgeTAoYENhbm5vdCBjb252ZXJ0IGFyZ3VtZW50IG9mIHR5cGUgJHtZLiQkLnB0clR5cGUubmFtZX0gdG8gcGFyYW1ldGVyIHR5cGUgJHt0aGlzLm5hbWV9YCk7CiAgICAgICAgdmFyIFMgPSBZLiQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzLCBLID0gVGkoWS4kJC5wdHIsIFMsIHRoaXMucmVnaXN0ZXJlZENsYXNzKTsKICAgICAgICByZXR1cm4gSzsKICAgICAgfQogICAgICB2YXIgYzggPSAoKSA9PiB7CiAgICAgICAgT2JqZWN0LmFzc2lnbihuaS5wcm90b3R5cGUsIHsgZ2V0UG9pbnRlZShWKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5yYXdHZXRQb2ludGVlICYmIChWID0gdGhpcy5yYXdHZXRQb2ludGVlKFYpKSwgVjsKICAgICAgICB9LCBkZXN0cnVjdG9yKFYpIHsKICAgICAgICAgIHZhciBZOwogICAgICAgICAgKFkgPSB0aGlzLnJhd0Rlc3RydWN0b3IpID09IG51bGwgfHwgWS5jYWxsKHRoaXMsIFYpOwogICAgICAgIH0sIGFyZ1BhY2tBZHZhbmNlOiBQMSwgcmVhZFZhbHVlRnJvbVBvaW50ZXI6IE8xLCBmcm9tV2lyZVR5cGU6IGw4IH0pOwogICAgICB9OwogICAgICBmdW5jdGlvbiBuaShWLCBZLCBTLCBLLCByMiwgTSwgVzIsIHMyLCBOLCBOMiwgTTIpIHsKICAgICAgICB0aGlzLm5hbWUgPSBWLCB0aGlzLnJlZ2lzdGVyZWRDbGFzcyA9IFksIHRoaXMuaXNSZWZlcmVuY2UgPSBTLCB0aGlzLmlzQ29uc3QgPSBLLCB0aGlzLmlzU21hcnRQb2ludGVyID0gcjIsIHRoaXMucG9pbnRlZVR5cGUgPSBNLCB0aGlzLnNoYXJpbmdQb2xpY3kgPSBXMiwgdGhpcy5yYXdHZXRQb2ludGVlID0gczIsIHRoaXMucmF3Q29uc3RydWN0b3IgPSBOLCB0aGlzLnJhd1NoYXJlID0gTjIsIHRoaXMucmF3RGVzdHJ1Y3RvciA9IE0yLCAhcjIgJiYgWS5iYXNlQ2xhc3MgPT09IHZvaWQgMCA/IEsgPyAodGhpcy50b1dpcmVUeXBlID0gczgsIHRoaXMuZGVzdHJ1Y3RvckZ1bmN0aW9uID0gbnVsbCkgOiAodGhpcy50b1dpcmVUeXBlID0gQjgsIHRoaXMuZGVzdHJ1Y3RvckZ1bmN0aW9uID0gbnVsbCkgOiB0aGlzLnRvV2lyZVR5cGUgPSB3ODsKICAgICAgfQogICAgICB2YXIgenIgPSAoViwgWSwgUykgPT4gewogICAgICAgIEMyLmhhc093blByb3BlcnR5KFYpIHx8IGZpKCJSZXBsYWNpbmcgbm9uZXhpc3RlbnQgcHVibGljIHN5bWJvbCIpLCBDMltWXS5vdmVybG9hZFRhYmxlICE9PSB2b2lkIDAgJiYgUyAhPT0gdm9pZCAwID8gQzJbVl0ub3ZlcmxvYWRUYWJsZVtTXSA9IFkgOiAoQzJbVl0gPSBZLCBDMltWXS5hcmdDb3VudCA9IFMpOwogICAgICB9LCB2OCA9IChWLCBZLCBTKSA9PiB7CiAgICAgICAgViA9IFYucmVwbGFjZSgvcC9nLCAiaSIpOwogICAgICAgIHZhciBLID0gQzJbImR5bkNhbGxfIiArIFZdOwogICAgICAgIHJldHVybiBLKFksIC4uLlMpOwogICAgICB9LCB0aSA9IFtdLCBkciwgS3IgPSAoVikgPT4gewogICAgICAgIHZhciBZID0gdGlbVl07CiAgICAgICAgcmV0dXJuIFkgfHwgKFYgPj0gdGkubGVuZ3RoICYmICh0aS5sZW5ndGggPSBWICsgMSksIHRpW1ZdID0gWSA9IGRyLmdldChWKSksIFk7CiAgICAgIH0sIEk4ID0gKFYsIFksIFMgPSBbXSkgPT4gewogICAgICAgIGlmIChWLmluY2x1ZGVzKCJqIikpCiAgICAgICAgICByZXR1cm4gdjgoViwgWSwgUyk7CiAgICAgICAgdmFyIEsgPSBLcihZKSguLi5TKTsKICAgICAgICByZXR1cm4gSzsKICAgICAgfSwgWjggPSAoViwgWSkgPT4gKC4uLlMpID0+IEk4KFYsIFksIFMpLCBZMSA9IChWLCBZKSA9PiB7CiAgICAgICAgViA9IHcxKFYpOwogICAgICAgIGZ1bmN0aW9uIFMoKSB7CiAgICAgICAgICByZXR1cm4gVi5pbmNsdWRlcygiaiIpID8gWjgoViwgWSkgOiBLcihZKTsKICAgICAgICB9CiAgICAgICAgdmFyIEsgPSBTKCk7CiAgICAgICAgcmV0dXJuIHR5cGVvZiBLICE9ICJmdW5jdGlvbiIgJiYgeTAoYHVua25vd24gZnVuY3Rpb24gcG9pbnRlciB3aXRoIHNpZ25hdHVyZSAke1Z9OiAke1l9YCksIEs7CiAgICAgIH0sIEM4ID0gKFYsIFkpID0+IHsKICAgICAgICB2YXIgUyA9IE1lKFksIGZ1bmN0aW9uKEspIHsKICAgICAgICAgIHRoaXMubmFtZSA9IFksIHRoaXMubWVzc2FnZSA9IEs7CiAgICAgICAgICB2YXIgcjIgPSBuZXcgRXJyb3IoSykuc3RhY2s7CiAgICAgICAgICByMiAhPT0gdm9pZCAwICYmICh0aGlzLnN0YWNrID0gdGhpcy50b1N0cmluZygpICsgYApgICsgcjIucmVwbGFjZSgvXkVycm9yKDpbXlxuXSopP1xuLywgIiIpKTsKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gUy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFYucHJvdG90eXBlKSwgUy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTLCBTLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZSA9PT0gdm9pZCAwID8gdGhpcy5uYW1lIDogYCR7dGhpcy5uYW1lfTogJHt0aGlzLm1lc3NhZ2V9YDsKICAgICAgICB9LCBTOwogICAgICB9LCBqciwgTHIgPSAoVikgPT4gewogICAgICAgIHZhciBZID0gbDQoViksIFMgPSB3MShZKTsKICAgICAgICByZXR1cm4gVDEoWSksIFM7CiAgICAgIH0sIGxpID0gKFYsIFkpID0+IHsKICAgICAgICB2YXIgUyA9IFtdLCBLID0ge307CiAgICAgICAgZnVuY3Rpb24gcjIoTSkgewogICAgICAgICAgaWYgKCFLW01dICYmICFmZVtNXSkgewogICAgICAgICAgICBpZiAocmlbTV0pIHsKICAgICAgICAgICAgICByaVtNXS5mb3JFYWNoKHIyKTsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgUy5wdXNoKE0pLCBLW01dID0gITA7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRocm93IFkuZm9yRWFjaChyMiksIG5ldyBqcihgJHtWfTogYCArIFMubWFwKExyKS5qb2luKFsiLCAiXSkpOwogICAgICB9LCBHOCA9IChWLCBZLCBTLCBLLCByMiwgTSwgVzIsIHMyLCBOLCBOMiwgTTIsIGEwLCBKMCkgPT4gewogICAgICAgIE0yID0gdzEoTTIpLCBNID0gWTEocjIsIE0pLCBzMiAmJiAoczIgPSBZMShXMiwgczIpKSwgTjIgJiYgKE4yID0gWTEoTiwgTjIpKSwgSjAgPSBZMShhMCwgSjApOwogICAgICAgIHZhciBXMCA9IGc4KE0yKTsKICAgICAgICBUcihXMCwgZnVuY3Rpb24oKSB7CiAgICAgICAgICBsaShgQ2Fubm90IGNvbnN0cnVjdCAke00yfSBkdWUgdG8gdW5ib3VuZCB0eXBlc2AsIFtLXSk7CiAgICAgICAgfSksIEFlKFtWLCBZLCBTXSwgSyA/IFtLXSA6IFtdLCAoQTApID0+IHsKICAgICAgICAgIHZhciBlOwogICAgICAgICAgQTAgPSBBMFswXTsKICAgICAgICAgIHZhciBOMCwgZzE7CiAgICAgICAgICBLID8gKE4wID0gQTAucmVnaXN0ZXJlZENsYXNzLCBnMSA9IE4wLmluc3RhbmNlUHJvdG90eXBlKSA6IGcxID0ga2kucHJvdG90eXBlOwogICAgICAgICAgdmFyIFUwID0gTWUoTTIsIGZ1bmN0aW9uKC4uLkkpIHsKICAgICAgICAgICAgaWYgKE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKSAhPT0ga2UpCiAgICAgICAgICAgICAgdGhyb3cgbmV3IFplKCJVc2UgJ25ldycgdG8gY29uc3RydWN0ICIgKyBNMik7CiAgICAgICAgICAgIGlmIChWMC5jb25zdHJ1Y3Rvcl9ib2R5ID09PSB2b2lkIDApCiAgICAgICAgICAgICAgdGhyb3cgbmV3IFplKE0yICsgIiBoYXMgbm8gYWNjZXNzaWJsZSBjb25zdHJ1Y3RvciIpOwogICAgICAgICAgICB2YXIgRzIgPSBWMC5jb25zdHJ1Y3Rvcl9ib2R5W0kubGVuZ3RoXTsKICAgICAgICAgICAgaWYgKEcyID09PSB2b2lkIDApCiAgICAgICAgICAgICAgdGhyb3cgbmV3IFplKGBUcmllZCB0byBpbnZva2UgY3RvciBvZiAke00yfSB3aXRoIGludmFsaWQgbnVtYmVyIG9mIHBhcmFtZXRlcnMgKCR7SS5sZW5ndGh9KSAtIGV4cGVjdGVkICgke09iamVjdC5rZXlzKFYwLmNvbnN0cnVjdG9yX2JvZHkpLnRvU3RyaW5nKCl9KSBwYXJhbWV0ZXJzIGluc3RlYWQhYCk7CiAgICAgICAgICAgIHJldHVybiBHMi5hcHBseSh0aGlzLCBJKTsKICAgICAgICAgIH0pLCBrZSA9IE9iamVjdC5jcmVhdGUoZzEsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IFUwIH0gfSk7CiAgICAgICAgICBVMC5wcm90b3R5cGUgPSBrZTsKICAgICAgICAgIHZhciBWMCA9IG5ldyBoOChNMiwgVTAsIGtlLCBKMCwgTjAsIE0sIHMyLCBOMik7CiAgICAgICAgICBWMC5iYXNlQ2xhc3MgJiYgKChlID0gVjAuYmFzZUNsYXNzKS5fX2Rlcml2ZWRDbGFzc2VzID8/IChlLl9fZGVyaXZlZENsYXNzZXMgPSBbXSksIFYwLmJhc2VDbGFzcy5fX2Rlcml2ZWRDbGFzc2VzLnB1c2goVjApKTsKICAgICAgICAgIHZhciBqMCA9IG5ldyBuaShNMiwgVjAsICEwLCAhMSwgITEpLCBGID0gbmV3IG5pKE0yICsgIioiLCBWMCwgITEsICExLCAhMSksIHUyID0gbmV3IG5pKE0yICsgIiBjb25zdCoiLCBWMCwgITEsICEwLCAhMSk7CiAgICAgICAgICByZXR1cm4gUHJbVl0gPSB7IHBvaW50ZXJUeXBlOiBGLCBjb25zdFBvaW50ZXJUeXBlOiB1MiB9LCB6cihXMCwgVTApLCBbajAsIEYsIHUyXTsKICAgICAgICB9KTsKICAgICAgfSwgemkgPSAoViwgWSkgPT4gewogICAgICAgIGZvciAodmFyIFMgPSBbXSwgSyA9IDA7IEsgPCBWOyBLKyspCiAgICAgICAgICBTLnB1c2goTFtZICsgSyAqIDQgPj4gMl0pOwogICAgICAgIHJldHVybiBTOwogICAgICB9OwogICAgICBmdW5jdGlvbiBPcihWKSB7CiAgICAgICAgZm9yICh2YXIgWSA9IDE7IFkgPCBWLmxlbmd0aDsgKytZKQogICAgICAgICAgaWYgKFZbWV0gIT09IG51bGwgJiYgVltZXS5kZXN0cnVjdG9yRnVuY3Rpb24gPT09IHZvaWQgMCkKICAgICAgICAgICAgcmV0dXJuICEwOwogICAgICAgIHJldHVybiAhMTsKICAgICAgfQogICAgICBmdW5jdGlvbiBfcihWLCBZKSB7CiAgICAgICAgaWYgKCEoViBpbnN0YW5jZW9mIEZ1bmN0aW9uKSkKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYG5ld18gY2FsbGVkIHdpdGggY29uc3RydWN0b3IgdHlwZSAke3R5cGVvZiBWfSB3aGljaCBpcyBub3QgYSBmdW5jdGlvbmApOwogICAgICAgIHZhciBTID0gTWUoVi5uYW1lIHx8ICJ1bmtub3duRnVuY3Rpb25OYW1lIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgfSk7CiAgICAgICAgUy5wcm90b3R5cGUgPSBWLnByb3RvdHlwZTsKICAgICAgICB2YXIgSyA9IG5ldyBTKCksIHIyID0gVi5hcHBseShLLCBZKTsKICAgICAgICByZXR1cm4gcjIgaW5zdGFuY2VvZiBPYmplY3QgPyByMiA6IEs7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gVzgoViwgWSwgUywgSykgewogICAgICAgIHZhciByMiA9IE9yKFYpLCBNID0gVi5sZW5ndGggLSAyLCBXMiA9IFtdLCBzMiA9IFsiZm4iXTsKICAgICAgICBZICYmIHMyLnB1c2goInRoaXNXaXJlZCIpOwogICAgICAgIGZvciAodmFyIE4gPSAwOyBOIDwgTTsgKytOKQogICAgICAgICAgVzIucHVzaChgYXJnJHtOfWApLCBzMi5wdXNoKGBhcmcke059V2lyZWRgKTsKICAgICAgICBXMiA9IFcyLmpvaW4oIiwiKSwgczIgPSBzMi5qb2luKCIsIik7CiAgICAgICAgdmFyIE4yID0gYHJldHVybiBmdW5jdGlvbiAoJHtXMn0pIHsKYDsKICAgICAgICByMiAmJiAoTjIgKz0gYHZhciBkZXN0cnVjdG9ycyA9IFtdOwpgKTsKICAgICAgICB2YXIgTTIgPSByMiA/ICJkZXN0cnVjdG9ycyIgOiAibnVsbCIsIGEwID0gWyJodW1hbk5hbWUiLCAidGhyb3dCaW5kaW5nRXJyb3IiLCAiaW52b2tlciIsICJmbiIsICJydW5EZXN0cnVjdG9ycyIsICJyZXRUeXBlIiwgImNsYXNzUGFyYW0iXTsKICAgICAgICBZICYmIChOMiArPSBgdmFyIHRoaXNXaXJlZCA9IGNsYXNzUGFyYW1bJ3RvV2lyZVR5cGUnXSgke00yfSwgdGhpcyk7CmApOwogICAgICAgIGZvciAodmFyIE4gPSAwOyBOIDwgTTsgKytOKQogICAgICAgICAgTjIgKz0gYHZhciBhcmcke059V2lyZWQgPSBhcmdUeXBlJHtOfVsndG9XaXJlVHlwZSddKCR7TTJ9LCBhcmcke059KTsKYCwgYTAucHVzaChgYXJnVHlwZSR7Tn1gKTsKICAgICAgICBpZiAoTjIgKz0gKFMgfHwgSyA/ICJ2YXIgcnYgPSAiIDogIiIpICsgYGludm9rZXIoJHtzMn0pOwpgLCByMikKICAgICAgICAgIE4yICs9IGBydW5EZXN0cnVjdG9ycyhkZXN0cnVjdG9ycyk7CmA7CiAgICAgICAgZWxzZQogICAgICAgICAgZm9yICh2YXIgTiA9IFkgPyAxIDogMjsgTiA8IFYubGVuZ3RoOyArK04pIHsKICAgICAgICAgICAgdmFyIEowID0gTiA9PT0gMSA/ICJ0aGlzV2lyZWQiIDogImFyZyIgKyAoTiAtIDIpICsgIldpcmVkIjsKICAgICAgICAgICAgVltOXS5kZXN0cnVjdG9yRnVuY3Rpb24gIT09IG51bGwgJiYgKE4yICs9IGAke0owfV9kdG9yKCR7SjB9KTsKYCwgYTAucHVzaChgJHtKMH1fZHRvcmApKTsKICAgICAgICAgIH0KICAgICAgICByZXR1cm4gUyAmJiAoTjIgKz0gYHZhciByZXQgPSByZXRUeXBlWydmcm9tV2lyZVR5cGUnXShydik7CnJldHVybiByZXQ7CmApLCBOMiArPSBgfQpgLCBbYTAsIE4yXTsKICAgICAgfQogICAgICBmdW5jdGlvbiBkaShWLCBZLCBTLCBLLCByMiwgTSkgewogICAgICAgIHZhciBXMiA9IFkubGVuZ3RoOwogICAgICAgIFcyIDwgMiAmJiB5MCgiYXJnVHlwZXMgYXJyYXkgc2l6ZSBtaXNtYXRjaCEgTXVzdCBhdCBsZWFzdCBnZXQgcmV0dXJuIHZhbHVlIGFuZCAndGhpcycgdHlwZXMhIik7CiAgICAgICAgZm9yICh2YXIgczIgPSBZWzFdICE9PSBudWxsICYmIFMgIT09IG51bGwsIE4gPSBPcihZKSwgTjIgPSBZWzBdLm5hbWUgIT09ICJ2b2lkIiwgTTIgPSBbViwgeTAsIEssIHIyLCBEZSwgWVswXSwgWVsxXV0sIGEwID0gMDsgYTAgPCBXMiAtIDI7ICsrYTApCiAgICAgICAgICBNMi5wdXNoKFlbYTAgKyAyXSk7CiAgICAgICAgaWYgKCFOKQogICAgICAgICAgZm9yICh2YXIgYTAgPSBzMiA/IDEgOiAyOyBhMCA8IFkubGVuZ3RoOyArK2EwKQogICAgICAgICAgICBZW2EwXS5kZXN0cnVjdG9yRnVuY3Rpb24gIT09IG51bGwgJiYgTTIucHVzaChZW2EwXS5kZXN0cnVjdG9yRnVuY3Rpb24pOwogICAgICAgIGxldCBbSjAsIFcwXSA9IFc4KFksIHMyLCBOMiwgTSk7CiAgICAgICAgSjAucHVzaChXMCk7CiAgICAgICAgdmFyIEEwID0gX3IoRnVuY3Rpb24sIEowKSguLi5NMik7CiAgICAgICAgcmV0dXJuIE1lKFYsIEEwKTsKICAgICAgfQogICAgICB2YXIgbTggPSAoViwgWSwgUywgSywgcjIsIE0pID0+IHsKICAgICAgICB2YXIgVzIgPSB6aShZLCBTKTsKICAgICAgICByMiA9IFkxKEssIHIyKSwgQWUoW10sIFtWXSwgKHMyKSA9PiB7CiAgICAgICAgICBzMiA9IHMyWzBdOwogICAgICAgICAgdmFyIE4gPSBgY29uc3RydWN0b3IgJHtzMi5uYW1lfWA7CiAgICAgICAgICBpZiAoczIucmVnaXN0ZXJlZENsYXNzLmNvbnN0cnVjdG9yX2JvZHkgPT09IHZvaWQgMCAmJiAoczIucmVnaXN0ZXJlZENsYXNzLmNvbnN0cnVjdG9yX2JvZHkgPSBbXSksIHMyLnJlZ2lzdGVyZWRDbGFzcy5jb25zdHJ1Y3Rvcl9ib2R5W1kgLSAxXSAhPT0gdm9pZCAwKQogICAgICAgICAgICB0aHJvdyBuZXcgWmUoYENhbm5vdCByZWdpc3RlciBtdWx0aXBsZSBjb25zdHJ1Y3RvcnMgd2l0aCBpZGVudGljYWwgbnVtYmVyIG9mIHBhcmFtZXRlcnMgKCR7WSAtIDF9KSBmb3IgY2xhc3MgJyR7czIubmFtZX0nISBPdmVybG9hZCByZXNvbHV0aW9uIGlzIGN1cnJlbnRseSBvbmx5IHBlcmZvcm1lZCB1c2luZyB0aGUgcGFyYW1ldGVyIGNvdW50LCBub3QgYWN0dWFsIHR5cGUgaW5mbyFgKTsKICAgICAgICAgIHJldHVybiBzMi5yZWdpc3RlcmVkQ2xhc3MuY29uc3RydWN0b3JfYm9keVtZIC0gMV0gPSAoKSA9PiB7CiAgICAgICAgICAgIGxpKGBDYW5ub3QgY29uc3RydWN0ICR7czIubmFtZX0gZHVlIHRvIHVuYm91bmQgdHlwZXNgLCBXMik7CiAgICAgICAgICB9LCBBZShbXSwgVzIsIChOMikgPT4gKE4yLnNwbGljZSgxLCAwLCBudWxsKSwgczIucmVnaXN0ZXJlZENsYXNzLmNvbnN0cnVjdG9yX2JvZHlbWSAtIDFdID0gZGkoTiwgTjIsIG51bGwsIHIyLCBNKSwgW10pKSwgW107CiAgICAgICAgfSk7CiAgICAgIH0sIGJyID0gKFYpID0+IHsKICAgICAgICBWID0gVi50cmltKCk7CiAgICAgICAgY29uc3QgWSA9IFYuaW5kZXhPZigiKCIpOwogICAgICAgIHJldHVybiBZICE9PSAtMSA/IFYuc3Vic3RyKDAsIFkpIDogVjsKICAgICAgfSwgeTggPSAoViwgWSwgUywgSywgcjIsIE0sIFcyLCBzMiwgTiwgTjIpID0+IHsKICAgICAgICB2YXIgTTIgPSB6aShTLCBLKTsKICAgICAgICBZID0gdzEoWSksIFkgPSBicihZKSwgTSA9IFkxKHIyLCBNKSwgQWUoW10sIFtWXSwgKGEwKSA9PiB7CiAgICAgICAgICBhMCA9IGEwWzBdOwogICAgICAgICAgdmFyIEowID0gYCR7YTAubmFtZX0uJHtZfWA7CiAgICAgICAgICBZLnN0YXJ0c1dpdGgoIkBAIikgJiYgKFkgPSBTeW1ib2xbWS5zdWJzdHJpbmcoMildKSwgczIgJiYgYTAucmVnaXN0ZXJlZENsYXNzLnB1cmVWaXJ0dWFsRnVuY3Rpb25zLnB1c2goWSk7CiAgICAgICAgICBmdW5jdGlvbiBXMCgpIHsKICAgICAgICAgICAgbGkoYENhbm5vdCBjYWxsICR7SjB9IGR1ZSB0byB1bmJvdW5kIHR5cGVzYCwgTTIpOwogICAgICAgICAgfQogICAgICAgICAgdmFyIEEwID0gYTAucmVnaXN0ZXJlZENsYXNzLmluc3RhbmNlUHJvdG90eXBlLCBOMCA9IEEwW1ldOwogICAgICAgICAgcmV0dXJuIE4wID09PSB2b2lkIDAgfHwgTjAub3ZlcmxvYWRUYWJsZSA9PT0gdm9pZCAwICYmIE4wLmNsYXNzTmFtZSAhPT0gYTAubmFtZSAmJiBOMC5hcmdDb3VudCA9PT0gUyAtIDIgPyAoVzAuYXJnQ291bnQgPSBTIC0gMiwgVzAuY2xhc3NOYW1lID0gYTAubmFtZSwgQTBbWV0gPSBXMCkgOiAoeHIoQTAsIFksIEowKSwgQTBbWV0ub3ZlcmxvYWRUYWJsZVtTIC0gMl0gPSBXMCksIEFlKFtdLCBNMiwgKGcxKSA9PiB7CiAgICAgICAgICAgIHZhciBVMCA9IGRpKEowLCBnMSwgYTAsIE0sIFcyLCBOKTsKICAgICAgICAgICAgcmV0dXJuIEEwW1ldLm92ZXJsb2FkVGFibGUgPT09IHZvaWQgMCA/IChVMC5hcmdDb3VudCA9IFMgLSAyLCBBMFtZXSA9IFUwKSA6IEEwW1ldLm92ZXJsb2FkVGFibGVbUyAtIDJdID0gVTAsIFtdOwogICAgICAgICAgfSksIFtdOwogICAgICAgIH0pOwogICAgICB9LCBLaSA9IFtdLCBfMSA9IFtdLCBqaSA9IChWKSA9PiB7CiAgICAgICAgViA+IDkgJiYgLS1fMVtWICsgMV0gPT09IDAgJiYgKF8xW1ZdID0gdm9pZCAwLCBLaS5wdXNoKFYpKTsKICAgICAgfSwgcDggPSAoKSA9PiBfMS5sZW5ndGggLyAyIC0gNSAtIEtpLmxlbmd0aCwgUTggPSAoKSA9PiB7CiAgICAgICAgXzEucHVzaCgwLCAxLCB2b2lkIDAsIDEsIG51bGwsIDEsICEwLCAxLCAhMSwgMSksIEMyLmNvdW50X2VtdmFsX2hhbmRsZXMgPSBwODsKICAgICAgfSwgeDEgPSB7IHRvVmFsdWU6IChWKSA9PiAoViB8fCB5MCgiQ2Fubm90IHVzZSBkZWxldGVkIHZhbC4gaGFuZGxlID0gIiArIFYpLCBfMVtWXSksIHRvSGFuZGxlOiAoVikgPT4gewogICAgICAgIHN3aXRjaCAoVikgewogICAgICAgICAgY2FzZSB2b2lkIDA6CiAgICAgICAgICAgIHJldHVybiAyOwogICAgICAgICAgY2FzZSBudWxsOgogICAgICAgICAgICByZXR1cm4gNDsKICAgICAgICAgIGNhc2UgITA6CiAgICAgICAgICAgIHJldHVybiA2OwogICAgICAgICAgY2FzZSAhMToKICAgICAgICAgICAgcmV0dXJuIDg7CiAgICAgICAgICBkZWZhdWx0OiB7CiAgICAgICAgICAgIGNvbnN0IFkgPSBLaS5wb3AoKSB8fCBfMS5sZW5ndGg7CiAgICAgICAgICAgIHJldHVybiBfMVtZXSA9IFYsIF8xW1kgKyAxXSA9IDEsIFk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IH0sIFY4ID0geyBuYW1lOiAiZW1zY3JpcHRlbjo6dmFsIiwgZnJvbVdpcmVUeXBlOiAoVikgPT4gewogICAgICAgIHZhciBZID0geDEudG9WYWx1ZShWKTsKICAgICAgICByZXR1cm4gamkoViksIFk7CiAgICAgIH0sIHRvV2lyZVR5cGU6IChWLCBZKSA9PiB4MS50b0hhbmRsZShZKSwgYXJnUGFja0FkdmFuY2U6IFAxLCByZWFkVmFsdWVGcm9tUG9pbnRlcjogTzEsIGRlc3RydWN0b3JGdW5jdGlvbjogbnVsbCB9LCBZOCA9IChWKSA9PiBOMShWLCBWOCksIExpID0gKFYpID0+IHsKICAgICAgICBpZiAoViA9PT0gbnVsbCkKICAgICAgICAgIHJldHVybiAibnVsbCI7CiAgICAgICAgdmFyIFkgPSB0eXBlb2YgVjsKICAgICAgICByZXR1cm4gWSA9PT0gIm9iamVjdCIgfHwgWSA9PT0gImFycmF5IiB8fCBZID09PSAiZnVuY3Rpb24iID8gVi50b1N0cmluZygpIDogIiIgKyBWOwogICAgICB9LCBIOCA9IChWLCBZKSA9PiB7CiAgICAgICAgc3dpdGNoIChZKSB7CiAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihTKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKFoyW1MgPj4gMl0pOwogICAgICAgICAgICB9OwogICAgICAgICAgY2FzZSA4OgogICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oUykgewogICAgICAgICAgICAgIHJldHVybiB0aGlzLmZyb21XaXJlVHlwZShpMltTID4+IDNdKTsKICAgICAgICAgICAgfTsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGludmFsaWQgZmxvYXQgd2lkdGggKCR7WX0pOiAke1Z9YCk7CiAgICAgICAgfQogICAgICB9LCBYOCA9IChWLCBZLCBTKSA9PiB7CiAgICAgICAgWSA9IHcxKFkpLCBOMShWLCB7IG5hbWU6IFksIGZyb21XaXJlVHlwZTogKEspID0+IEssIHRvV2lyZVR5cGU6IChLLCByMikgPT4gcjIsIGFyZ1BhY2tBZHZhbmNlOiBQMSwgcmVhZFZhbHVlRnJvbVBvaW50ZXI6IEg4KFksIFMpLCBkZXN0cnVjdG9yRnVuY3Rpb246IG51bGwgfSk7CiAgICAgIH0sIEY4ID0gKFYsIFksIFMsIEssIHIyLCBNLCBXMiwgczIpID0+IHsKICAgICAgICB2YXIgTiA9IHppKFksIFMpOwogICAgICAgIFYgPSB3MShWKSwgViA9IGJyKFYpLCByMiA9IFkxKEssIHIyKSwgVHIoViwgZnVuY3Rpb24oKSB7CiAgICAgICAgICBsaShgQ2Fubm90IGNhbGwgJHtWfSBkdWUgdG8gdW5ib3VuZCB0eXBlc2AsIE4pOwogICAgICAgIH0sIFkgLSAxKSwgQWUoW10sIE4sIChOMikgPT4gewogICAgICAgICAgdmFyIE0yID0gW04yWzBdLCBudWxsXS5jb25jYXQoTjIuc2xpY2UoMSkpOwogICAgICAgICAgcmV0dXJuIHpyKFYsIGRpKFYsIE0yLCBudWxsLCByMiwgTSwgVzIpLCBZIC0gMSksIFtdOwogICAgICAgIH0pOwogICAgICB9LCBKOCA9IChWLCBZLCBTKSA9PiB7CiAgICAgICAgc3dpdGNoIChZKSB7CiAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgIHJldHVybiBTID8gKEspID0+IFcxW0tdIDogKEspID0+IHYyW0tdOwogICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICByZXR1cm4gUyA/IChLKSA9PiBiW0sgPj4gMV0gOiAoSykgPT4gSTJbSyA+PiAxXTsKICAgICAgICAgIGNhc2UgNDoKICAgICAgICAgICAgcmV0dXJuIFMgPyAoSykgPT4gVFtLID4+IDJdIDogKEspID0+IExbSyA+PiAyXTsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGludmFsaWQgaW50ZWdlciB3aWR0aCAoJHtZfSk6ICR7Vn1gKTsKICAgICAgICB9CiAgICAgIH0sIFI4ID0gKFYsIFksIFMsIEssIHIyKSA9PiB7CiAgICAgICAgWSA9IHcxKFkpOwogICAgICAgIHZhciBNID0gKE0yKSA9PiBNMjsKICAgICAgICBpZiAoSyA9PT0gMCkgewogICAgICAgICAgdmFyIFcyID0gMzIgLSA4ICogUzsKICAgICAgICAgIE0gPSAoTTIpID0+IE0yIDw8IFcyID4+PiBXMjsKICAgICAgICB9CiAgICAgICAgdmFyIHMyID0gWS5pbmNsdWRlcygidW5zaWduZWQiKSwgTiA9IChNMiwgYTApID0+IHsKICAgICAgICB9LCBOMjsKICAgICAgICBzMiA/IE4yID0gZnVuY3Rpb24oTTIsIGEwKSB7CiAgICAgICAgICByZXR1cm4gTihhMCwgdGhpcy5uYW1lKSwgYTAgPj4+IDA7CiAgICAgICAgfSA6IE4yID0gZnVuY3Rpb24oTTIsIGEwKSB7CiAgICAgICAgICByZXR1cm4gTihhMCwgdGhpcy5uYW1lKSwgYTA7CiAgICAgICAgfSwgTjEoViwgeyBuYW1lOiBZLCBmcm9tV2lyZVR5cGU6IE0sIHRvV2lyZVR5cGU6IE4yLCBhcmdQYWNrQWR2YW5jZTogUDEsIHJlYWRWYWx1ZUZyb21Qb2ludGVyOiBKOChZLCBTLCBLICE9PSAwKSwgZGVzdHJ1Y3RvckZ1bmN0aW9uOiBudWxsIH0pOwogICAgICB9LCBFOCA9IChWLCBZLCBTKSA9PiB7CiAgICAgICAgdmFyIEsgPSBbSW50OEFycmF5LCBVaW50OEFycmF5LCBJbnQxNkFycmF5LCBVaW50MTZBcnJheSwgSW50MzJBcnJheSwgVWludDMyQXJyYXksIEZsb2F0MzJBcnJheSwgRmxvYXQ2NEFycmF5XSwgcjIgPSBLW1ldOwogICAgICAgIGZ1bmN0aW9uIE0oVzIpIHsKICAgICAgICAgIHZhciBzMiA9IExbVzIgPj4gMl0sIE4gPSBMW1cyICsgNCA+PiAyXTsKICAgICAgICAgIHJldHVybiBuZXcgcjIoVzEuYnVmZmVyLCBOLCBzMik7CiAgICAgICAgfQogICAgICAgIFMgPSB3MShTKSwgTjEoViwgeyBuYW1lOiBTLCBmcm9tV2lyZVR5cGU6IE0sIGFyZ1BhY2tBZHZhbmNlOiBQMSwgcmVhZFZhbHVlRnJvbVBvaW50ZXI6IE0gfSwgeyBpZ25vcmVEdXBsaWNhdGVSZWdpc3RyYXRpb25zOiAhMCB9KTsKICAgICAgfSwgRDggPSAoViwgWSwgUywgSykgPT4gewogICAgICAgIGlmICghKEsgPiAwKSkgcmV0dXJuIDA7CiAgICAgICAgZm9yICh2YXIgcjIgPSBTLCBNID0gUyArIEsgLSAxLCBXMiA9IDA7IFcyIDwgVi5sZW5ndGg7ICsrVzIpIHsKICAgICAgICAgIHZhciBzMiA9IFYuY2hhckNvZGVBdChXMik7CiAgICAgICAgICBpZiAoczIgPj0gNTUyOTYgJiYgczIgPD0gNTczNDMpIHsKICAgICAgICAgICAgdmFyIE4gPSBWLmNoYXJDb2RlQXQoKytXMik7CiAgICAgICAgICAgIHMyID0gNjU1MzYgKyAoKHMyICYgMTAyMykgPDwgMTApIHwgTiAmIDEwMjM7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoczIgPD0gMTI3KSB7CiAgICAgICAgICAgIGlmIChTID49IE0pIGJyZWFrOwogICAgICAgICAgICBZW1MrK10gPSBzMjsKICAgICAgICAgIH0gZWxzZSBpZiAoczIgPD0gMjA0NykgewogICAgICAgICAgICBpZiAoUyArIDEgPj0gTSkgYnJlYWs7CiAgICAgICAgICAgIFlbUysrXSA9IDE5MiB8IHMyID4+IDYsIFlbUysrXSA9IDEyOCB8IHMyICYgNjM7CiAgICAgICAgICB9IGVsc2UgaWYgKHMyIDw9IDY1NTM1KSB7CiAgICAgICAgICAgIGlmIChTICsgMiA+PSBNKSBicmVhazsKICAgICAgICAgICAgWVtTKytdID0gMjI0IHwgczIgPj4gMTIsIFlbUysrXSA9IDEyOCB8IHMyID4+IDYgJiA2MywgWVtTKytdID0gMTI4IHwgczIgJiA2MzsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmIChTICsgMyA+PSBNKSBicmVhazsKICAgICAgICAgICAgWVtTKytdID0gMjQwIHwgczIgPj4gMTgsIFlbUysrXSA9IDEyOCB8IHMyID4+IDEyICYgNjMsIFlbUysrXSA9IDEyOCB8IHMyID4+IDYgJiA2MywgWVtTKytdID0gMTI4IHwgczIgJiA2MzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIFlbU10gPSAwLCBTIC0gcjI7CiAgICAgIH0sICRyID0gKFYsIFksIFMpID0+IEQ4KFYsIHYyLCBZLCBTKSwgcXIgPSAoVikgPT4gewogICAgICAgIGZvciAodmFyIFkgPSAwLCBTID0gMDsgUyA8IFYubGVuZ3RoOyArK1MpIHsKICAgICAgICAgIHZhciBLID0gVi5jaGFyQ29kZUF0KFMpOwogICAgICAgICAgSyA8PSAxMjcgPyBZKysgOiBLIDw9IDIwNDcgPyBZICs9IDIgOiBLID49IDU1Mjk2ICYmIEsgPD0gNTczNDMgPyAoWSArPSA0LCArK1MpIDogWSArPSAzOwogICAgICAgIH0KICAgICAgICByZXR1cm4gWTsKICAgICAgfSwgZTQgPSB0eXBlb2YgVGV4dERlY29kZXIgPCAidSIgPyBuZXcgVGV4dERlY29kZXIoKSA6IHZvaWQgMCwgaTQgPSAoViwgWSA9IDAsIFMgPSBOYU4pID0+IHsKICAgICAgICBmb3IgKHZhciBLID0gWSArIFMsIHIyID0gWTsgVltyMl0gJiYgIShyMiA+PSBLKTsgKSArK3IyOwogICAgICAgIGlmIChyMiAtIFkgPiAxNiAmJiBWLmJ1ZmZlciAmJiBlNCkKICAgICAgICAgIHJldHVybiBlNC5kZWNvZGUoVi5zdWJhcnJheShZLCByMikpOwogICAgICAgIGZvciAodmFyIE0gPSAiIjsgWSA8IHIyOyApIHsKICAgICAgICAgIHZhciBXMiA9IFZbWSsrXTsKICAgICAgICAgIGlmICghKFcyICYgMTI4KSkgewogICAgICAgICAgICBNICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoVzIpOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICAgIHZhciBzMiA9IFZbWSsrXSAmIDYzOwogICAgICAgICAgaWYgKChXMiAmIDIyNCkgPT0gMTkyKSB7CiAgICAgICAgICAgIE0gKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoVzIgJiAzMSkgPDwgNiB8IHMyKTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgTiA9IFZbWSsrXSAmIDYzOwogICAgICAgICAgaWYgKChXMiAmIDI0MCkgPT0gMjI0ID8gVzIgPSAoVzIgJiAxNSkgPDwgMTIgfCBzMiA8PCA2IHwgTiA6IFcyID0gKFcyICYgNykgPDwgMTggfCBzMiA8PCAxMiB8IE4gPDwgNiB8IFZbWSsrXSAmIDYzLCBXMiA8IDY1NTM2KQogICAgICAgICAgICBNICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoVzIpOwogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHZhciBOMiA9IFcyIC0gNjU1MzY7CiAgICAgICAgICAgIE0gKz0gU3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NiB8IE4yID4+IDEwLCA1NjMyMCB8IE4yICYgMTAyMyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBNOwogICAgICB9LCByNCA9IChWLCBZKSA9PiBWID8gaTQodjIsIFYsIFkpIDogIiIsIFU4ID0gKFYsIFkpID0+IHsKICAgICAgICBZID0gdzEoWSksIE4xKFYsIHsgbmFtZTogWSwgZnJvbVdpcmVUeXBlKFMpIHsKICAgICAgICAgIGZvciAodmFyIEsgPSBMW1MgPj4gMl0sIHIyID0gUyArIDQsIE0sIFcyLCBzMiA9IHIyLCBXMiA9IDA7IFcyIDw9IEs7ICsrVzIpIHsKICAgICAgICAgICAgdmFyIE4gPSByMiArIFcyOwogICAgICAgICAgICBpZiAoVzIgPT0gSyB8fCB2MltOXSA9PSAwKSB7CiAgICAgICAgICAgICAgdmFyIE4yID0gTiAtIHMyLCBNMiA9IHI0KHMyLCBOMik7CiAgICAgICAgICAgICAgTSA9PT0gdm9pZCAwID8gTSA9IE0yIDogKE0gKz0gIlwwIiwgTSArPSBNMiksIHMyID0gTiArIDE7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBUMShTKSwgTTsKICAgICAgICB9LCB0b1dpcmVUeXBlKFMsIEspIHsKICAgICAgICAgIEsgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciAmJiAoSyA9IG5ldyBVaW50OEFycmF5KEspKTsKICAgICAgICAgIHZhciByMiwgTSA9IHR5cGVvZiBLID09ICJzdHJpbmciOwogICAgICAgICAgTSB8fCBLIGluc3RhbmNlb2YgVWludDhBcnJheSB8fCBLIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkgfHwgSyBpbnN0YW5jZW9mIEludDhBcnJheSB8fCB5MCgiQ2Fubm90IHBhc3Mgbm9uLXN0cmluZyB0byBzdGQ6OnN0cmluZyIpLCBNID8gcjIgPSBxcihLKSA6IHIyID0gSy5sZW5ndGg7CiAgICAgICAgICB2YXIgVzIgPSBiaSg0ICsgcjIgKyAxKSwgczIgPSBXMiArIDQ7CiAgICAgICAgICBpZiAoTFtXMiA+PiAyXSA9IHIyLCBNKQogICAgICAgICAgICAkcihLLCBzMiwgcjIgKyAxKTsKICAgICAgICAgIGVsc2UgaWYgKE0pCiAgICAgICAgICAgIGZvciAodmFyIE4gPSAwOyBOIDwgcjI7ICsrTikgewogICAgICAgICAgICAgIHZhciBOMiA9IEsuY2hhckNvZGVBdChOKTsKICAgICAgICAgICAgICBOMiA+IDI1NSAmJiAoVDEoczIpLCB5MCgiU3RyaW5nIGhhcyBVVEYtMTYgY29kZSB1bml0cyB0aGF0IGRvIG5vdCBmaXQgaW4gOCBiaXRzIikpLCB2MltzMiArIE5dID0gTjI7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgZm9yICh2YXIgTiA9IDA7IE4gPCByMjsgKytOKQogICAgICAgICAgICAgIHYyW3MyICsgTl0gPSBLW05dOwogICAgICAgICAgcmV0dXJuIFMgIT09IG51bGwgJiYgUy5wdXNoKFQxLCBXMiksIFcyOwogICAgICAgIH0sIGFyZ1BhY2tBZHZhbmNlOiBQMSwgcmVhZFZhbHVlRnJvbVBvaW50ZXI6IE8xLCBkZXN0cnVjdG9yRnVuY3Rpb24oUykgewogICAgICAgICAgVDEoUyk7CiAgICAgICAgfSB9KTsKICAgICAgfSwgZjQgPSB0eXBlb2YgVGV4dERlY29kZXIgPCAidSIgPyBuZXcgVGV4dERlY29kZXIoInV0Zi0xNmxlIikgOiB2b2lkIDAsIE04ID0gKFYsIFkpID0+IHsKICAgICAgICBmb3IgKHZhciBTID0gViwgSyA9IFMgPj4gMSwgcjIgPSBLICsgWSAvIDI7ICEoSyA+PSByMikgJiYgSTJbS107ICkgKytLOwogICAgICAgIGlmIChTID0gSyA8PCAxLCBTIC0gViA+IDMyICYmIGY0KSByZXR1cm4gZjQuZGVjb2RlKHYyLnN1YmFycmF5KFYsIFMpKTsKICAgICAgICBmb3IgKHZhciBNID0gIiIsIFcyID0gMDsgIShXMiA+PSBZIC8gMik7ICsrVzIpIHsKICAgICAgICAgIHZhciBzMiA9IGJbViArIFcyICogMiA+PiAxXTsKICAgICAgICAgIGlmIChzMiA9PSAwKSBicmVhazsKICAgICAgICAgIE0gKz0gU3RyaW5nLmZyb21DaGFyQ29kZShzMik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBNOwogICAgICB9LCBTOCA9IChWLCBZLCBTKSA9PiB7CiAgICAgICAgaWYgKFMgPz8gKFMgPSAyMTQ3NDgzNjQ3KSwgUyA8IDIpIHJldHVybiAwOwogICAgICAgIFMgLT0gMjsKICAgICAgICBmb3IgKHZhciBLID0gWSwgcjIgPSBTIDwgVi5sZW5ndGggKiAyID8gUyAvIDIgOiBWLmxlbmd0aCwgTSA9IDA7IE0gPCByMjsgKytNKSB7CiAgICAgICAgICB2YXIgVzIgPSBWLmNoYXJDb2RlQXQoTSk7CiAgICAgICAgICBiW1kgPj4gMV0gPSBXMiwgWSArPSAyOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYltZID4+IDFdID0gMCwgWSAtIEs7CiAgICAgIH0sIE44ID0gKFYpID0+IFYubGVuZ3RoICogMiwgUDggPSAoViwgWSkgPT4gewogICAgICAgIGZvciAodmFyIFMgPSAwLCBLID0gIiI7ICEoUyA+PSBZIC8gNCk7ICkgewogICAgICAgICAgdmFyIHIyID0gVFtWICsgUyAqIDQgPj4gMl07CiAgICAgICAgICBpZiAocjIgPT0gMCkgYnJlYWs7CiAgICAgICAgICBpZiAoKytTLCByMiA+PSA2NTUzNikgewogICAgICAgICAgICB2YXIgTSA9IHIyIC0gNjU1MzY7CiAgICAgICAgICAgIEsgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NiB8IE0gPj4gMTAsIDU2MzIwIHwgTSAmIDEwMjMpOwogICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgIEsgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShyMik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBLOwogICAgICB9LCB4OCA9IChWLCBZLCBTKSA9PiB7CiAgICAgICAgaWYgKFMgPz8gKFMgPSAyMTQ3NDgzNjQ3KSwgUyA8IDQpIHJldHVybiAwOwogICAgICAgIGZvciAodmFyIEsgPSBZLCByMiA9IEsgKyBTIC0gNCwgTSA9IDA7IE0gPCBWLmxlbmd0aDsgKytNKSB7CiAgICAgICAgICB2YXIgVzIgPSBWLmNoYXJDb2RlQXQoTSk7CiAgICAgICAgICBpZiAoVzIgPj0gNTUyOTYgJiYgVzIgPD0gNTczNDMpIHsKICAgICAgICAgICAgdmFyIHMyID0gVi5jaGFyQ29kZUF0KCsrTSk7CiAgICAgICAgICAgIFcyID0gNjU1MzYgKyAoKFcyICYgMTAyMykgPDwgMTApIHwgczIgJiAxMDIzOwogICAgICAgICAgfQogICAgICAgICAgaWYgKFRbWSA+PiAyXSA9IFcyLCBZICs9IDQsIFkgKyA0ID4gcjIpIGJyZWFrOwogICAgICAgIH0KICAgICAgICByZXR1cm4gVFtZID4+IDJdID0gMCwgWSAtIEs7CiAgICAgIH0sIFQ4ID0gKFYpID0+IHsKICAgICAgICBmb3IgKHZhciBZID0gMCwgUyA9IDA7IFMgPCBWLmxlbmd0aDsgKytTKSB7CiAgICAgICAgICB2YXIgSyA9IFYuY2hhckNvZGVBdChTKTsKICAgICAgICAgIEsgPj0gNTUyOTYgJiYgSyA8PSA1NzM0MyAmJiArK1MsIFkgKz0gNDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIFk7CiAgICAgIH0sIHo4ID0gKFYsIFksIFMpID0+IHsKICAgICAgICBTID0gdzEoUyk7CiAgICAgICAgdmFyIEssIHIyLCBNLCBXMjsKICAgICAgICBZID09PSAyID8gKEsgPSBNOCwgcjIgPSBTOCwgVzIgPSBOOCwgTSA9IChzMikgPT4gSTJbczIgPj4gMV0pIDogWSA9PT0gNCAmJiAoSyA9IFA4LCByMiA9IHg4LCBXMiA9IFQ4LCBNID0gKHMyKSA9PiBMW3MyID4+IDJdKSwgTjEoViwgeyBuYW1lOiBTLCBmcm9tV2lyZVR5cGU6IChzMikgPT4gewogICAgICAgICAgZm9yICh2YXIgTiA9IExbczIgPj4gMl0sIE4yLCBNMiA9IHMyICsgNCwgYTAgPSAwOyBhMCA8PSBOOyArK2EwKSB7CiAgICAgICAgICAgIHZhciBKMCA9IHMyICsgNCArIGEwICogWTsKICAgICAgICAgICAgaWYgKGEwID09IE4gfHwgTShKMCkgPT0gMCkgewogICAgICAgICAgICAgIHZhciBXMCA9IEowIC0gTTIsIEEwID0gSyhNMiwgVzApOwogICAgICAgICAgICAgIE4yID09PSB2b2lkIDAgPyBOMiA9IEEwIDogKE4yICs9ICJcMCIsIE4yICs9IEEwKSwgTTIgPSBKMCArIFk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBUMShzMiksIE4yOwogICAgICAgIH0sIHRvV2lyZVR5cGU6IChzMiwgTikgPT4gewogICAgICAgICAgdHlwZW9mIE4gIT0gInN0cmluZyIgJiYgeTAoYENhbm5vdCBwYXNzIG5vbi1zdHJpbmcgdG8gQysrIHN0cmluZyB0eXBlICR7U31gKTsKICAgICAgICAgIHZhciBOMiA9IFcyKE4pLCBNMiA9IGJpKDQgKyBOMiArIFkpOwogICAgICAgICAgcmV0dXJuIExbTTIgPj4gMl0gPSBOMiAvIFksIHIyKE4sIE0yICsgNCwgTjIgKyBZKSwgczIgIT09IG51bGwgJiYgczIucHVzaChUMSwgTTIpLCBNMjsKICAgICAgICB9LCBhcmdQYWNrQWR2YW5jZTogUDEsIHJlYWRWYWx1ZUZyb21Qb2ludGVyOiBPMSwgZGVzdHJ1Y3RvckZ1bmN0aW9uKHMyKSB7CiAgICAgICAgICBUMShzMik7CiAgICAgICAgfSB9KTsKICAgICAgfSwgZDggPSAoViwgWSwgUywgSywgcjIsIE0pID0+IHsKICAgICAgICBSMVtWXSA9IHsgbmFtZTogdzEoWSksIHJhd0NvbnN0cnVjdG9yOiBZMShTLCBLKSwgcmF3RGVzdHJ1Y3RvcjogWTEocjIsIE0pLCBmaWVsZHM6IFtdIH07CiAgICAgIH0sIEs4ID0gKFYsIFksIFMsIEssIHIyLCBNLCBXMiwgczIsIE4sIE4yKSA9PiB7CiAgICAgICAgUjFbVl0uZmllbGRzLnB1c2goeyBmaWVsZE5hbWU6IHcxKFkpLCBnZXR0ZXJSZXR1cm5UeXBlOiBTLCBnZXR0ZXI6IFkxKEssIHIyKSwgZ2V0dGVyQ29udGV4dDogTSwgc2V0dGVyQXJndW1lbnRUeXBlOiBXMiwgc2V0dGVyOiBZMShzMiwgTiksIHNldHRlckNvbnRleHQ6IE4yIH0pOwogICAgICB9LCBqOCA9IChWLCBZKSA9PiB7CiAgICAgICAgWSA9IHcxKFkpLCBOMShWLCB7IGlzVm9pZDogITAsIG5hbWU6IFksIGFyZ1BhY2tBZHZhbmNlOiAwLCBmcm9tV2lyZVR5cGU6ICgpID0+IHsKICAgICAgICB9LCB0b1dpcmVUeXBlOiAoUywgSykgPT4gewogICAgICAgIH0gfSk7CiAgICAgIH0sIEw4ID0gKFYsIFksIFMpID0+IHYyLmNvcHlXaXRoaW4oViwgWSwgWSArIFMpLCBPaSA9IFtdLCBPOCA9IChWLCBZLCBTLCBLKSA9PiAoViA9IE9pW1ZdLCBZID0geDEudG9WYWx1ZShZKSwgVihudWxsLCBZLCBTLCBLKSksIF84ID0ge30sIGI4ID0gKFYpID0+IHsKICAgICAgICB2YXIgWSA9IF84W1ZdOwogICAgICAgIHJldHVybiBZID09PSB2b2lkIDAgPyB3MShWKSA6IFk7CiAgICAgIH0sIEE0ID0gKCkgPT4gdHlwZW9mIGdsb2JhbFRoaXMgPT0gIm9iamVjdCIgPyBnbG9iYWxUaGlzIDogKC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gRnVuY3Rpb247CiAgICAgIH0oKSkoInJldHVybiB0aGlzIikoKSwgJDggPSAoVikgPT4gViA9PT0gMCA/IHgxLnRvSGFuZGxlKEE0KCkpIDogKFYgPSBiOChWKSwgeDEudG9IYW5kbGUoQTQoKVtWXSkpLCBxOCA9IChWKSA9PiB7CiAgICAgICAgdmFyIFkgPSBPaS5sZW5ndGg7CiAgICAgICAgcmV0dXJuIE9pLnB1c2goViksIFk7CiAgICAgIH0sIGs0ID0gKFYsIFkpID0+IHsKICAgICAgICB2YXIgUyA9IGZlW1ZdOwogICAgICAgIHJldHVybiBTID09PSB2b2lkIDAgJiYgeTAoYCR7WX0gaGFzIHVua25vd24gdHlwZSAke0xyKFYpfWApLCBTOwogICAgICB9LCBlQSA9IChWLCBZKSA9PiB7CiAgICAgICAgZm9yICh2YXIgUyA9IG5ldyBBcnJheShWKSwgSyA9IDA7IEsgPCBWOyArK0spCiAgICAgICAgICBTW0tdID0gazQoTFtZICsgSyAqIDQgPj4gMl0sICJwYXJhbWV0ZXIgIiArIEspOwogICAgICAgIHJldHVybiBTOwogICAgICB9LCBpQSA9IChWLCBZLCBTKSA9PiB7CiAgICAgICAgdmFyIEsgPSBbXSwgcjIgPSBWLnRvV2lyZVR5cGUoSywgUyk7CiAgICAgICAgcmV0dXJuIEsubGVuZ3RoICYmIChMW1kgPj4gMl0gPSB4MS50b0hhbmRsZShLKSksIHIyOwogICAgICB9LCByQSA9IChWLCBZLCBTKSA9PiB7CiAgICAgICAgdmFyIEsgPSBlQShWLCBZKSwgcjIgPSBLLnNoaWZ0KCk7CiAgICAgICAgVi0tOwogICAgICAgIHZhciBNID0gYHJldHVybiBmdW5jdGlvbiAob2JqLCBmdW5jLCBkZXN0cnVjdG9yc1JlZiwgYXJncykgewpgLCBXMiA9IDAsIHMyID0gW107CiAgICAgICAgUyA9PT0gMCAmJiBzMi5wdXNoKCJvYmoiKTsKICAgICAgICBmb3IgKHZhciBOID0gWyJyZXRUeXBlIl0sIE4yID0gW3IyXSwgTTIgPSAwOyBNMiA8IFY7ICsrTTIpCiAgICAgICAgICBzMi5wdXNoKCJhcmciICsgTTIpLCBOLnB1c2goImFyZ1R5cGUiICsgTTIpLCBOMi5wdXNoKEtbTTJdKSwgTSArPSBgICB2YXIgYXJnJHtNMn0gPSBhcmdUeXBlJHtNMn0ucmVhZFZhbHVlRnJvbVBvaW50ZXIoYXJncyR7VzIgPyAiKyIgKyBXMiA6ICIifSk7CmAsIFcyICs9IEtbTTJdLmFyZ1BhY2tBZHZhbmNlOwogICAgICAgIHZhciBhMCA9IFMgPT09IDEgPyAibmV3IGZ1bmMiIDogImZ1bmMuY2FsbCI7CiAgICAgICAgTSArPSBgICB2YXIgcnYgPSAke2EwfSgke3MyLmpvaW4oIiwgIil9KTsKYCwgcjIuaXNWb2lkIHx8IChOLnB1c2goImVtdmFsX3JldHVyblZhbHVlIiksIE4yLnB1c2goaUEpLCBNICs9IGAgIHJldHVybiBlbXZhbF9yZXR1cm5WYWx1ZShyZXRUeXBlLCBkZXN0cnVjdG9yc1JlZiwgcnYpOwpgKSwgTSArPSBgfTsKYCwgTi5wdXNoKE0pOwogICAgICAgIHZhciBKMCA9IF9yKEZ1bmN0aW9uLCBOKSguLi5OMiksIFcwID0gYG1ldGhvZENhbGxlcjwoJHtLLm1hcCgoQTApID0+IEEwLm5hbWUpLmpvaW4oIiwgIil9KSA9PiAke3IyLm5hbWV9PmA7CiAgICAgICAgcmV0dXJuIHE4KE1lKFcwLCBKMCkpOwogICAgICB9LCBmQSA9IChWKSA9PiB7CiAgICAgICAgdmFyIFkgPSB4MS50b1ZhbHVlKFYpOwogICAgICAgIERlKFkpLCBqaShWKTsKICAgICAgfSwgQUEgPSAoViwgWSkgPT4gewogICAgICAgIFYgPSBrNChWLCAiX2VtdmFsX3Rha2VfdmFsdWUiKTsKICAgICAgICB2YXIgUyA9IFYucmVhZFZhbHVlRnJvbVBvaW50ZXIoWSk7CiAgICAgICAgcmV0dXJuIHgxLnRvSGFuZGxlKFMpOwogICAgICB9LCBuNCA9ICgpID0+IDIxNDc0ODM2NDgsIGtBID0gKCkgPT4gbjQoKSwgbkEgPSAoViwgWSkgPT4gTWF0aC5jZWlsKFYgLyBZKSAqIFksIHRBID0gKFYpID0+IHsKICAgICAgICB2YXIgWSA9IFUxLmJ1ZmZlciwgUyA9IChWIC0gWS5ieXRlTGVuZ3RoICsgNjU1MzUpIC8gNjU1MzYgfCAwOwogICAgICAgIHRyeSB7CiAgICAgICAgICByZXR1cm4gVTEuZ3JvdyhTKSwgJCgpLCAxOwogICAgICAgIH0gY2F0Y2ggewogICAgICAgIH0KICAgICAgfSwgbEEgPSAoVikgPT4gewogICAgICAgIHZhciBZID0gdjIubGVuZ3RoOwogICAgICAgIFYgPj4+PSAwOwogICAgICAgIHZhciBTID0gbjQoKTsKICAgICAgICBpZiAoViA+IFMpCiAgICAgICAgICByZXR1cm4gITE7CiAgICAgICAgZm9yICh2YXIgSyA9IDE7IEsgPD0gNDsgSyAqPSAyKSB7CiAgICAgICAgICB2YXIgcjIgPSBZICogKDEgKyAwLjIgLyBLKTsKICAgICAgICAgIHIyID0gTWF0aC5taW4ocjIsIFYgKyAxMDA2NjMyOTYpOwogICAgICAgICAgdmFyIE0gPSBNYXRoLm1pbihTLCBuQShNYXRoLm1heChWLCByMiksIDY1NTM2KSksIFcyID0gdEEoTSk7CiAgICAgICAgICBpZiAoVzIpCiAgICAgICAgICAgIHJldHVybiAhMDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICExOwogICAgICB9LCBfaSA9IHt9LCBhQSA9ICgpID0+IFIwIHx8ICIuL3RoaXMucHJvZ3JhbSIsIFNlID0gKCkgPT4gewogICAgICAgIGlmICghU2Uuc3RyaW5ncykgewogICAgICAgICAgdmFyIFYgPSAodHlwZW9mIG5hdmlnYXRvciA9PSAib2JqZWN0IiAmJiBuYXZpZ2F0b3IubGFuZ3VhZ2VzICYmIG5hdmlnYXRvci5sYW5ndWFnZXNbMF0gfHwgIkMiKS5yZXBsYWNlKCItIiwgIl8iKSArICIuVVRGLTgiLCBZID0geyBVU0VSOiAid2ViX3VzZXIiLCBMT0dOQU1FOiAid2ViX3VzZXIiLCBQQVRIOiAiLyIsIFBXRDogIi8iLCBIT01FOiAiL2hvbWUvd2ViX3VzZXIiLCBMQU5HOiBWLCBfOiBhQSgpIH07CiAgICAgICAgICBmb3IgKHZhciBTIGluIF9pKQogICAgICAgICAgICBfaVtTXSA9PT0gdm9pZCAwID8gZGVsZXRlIFlbU10gOiBZW1NdID0gX2lbU107CiAgICAgICAgICB2YXIgSyA9IFtdOwogICAgICAgICAgZm9yICh2YXIgUyBpbiBZKQogICAgICAgICAgICBLLnB1c2goYCR7U309JHtZW1NdfWApOwogICAgICAgICAgU2Uuc3RyaW5ncyA9IEs7CiAgICAgICAgfQogICAgICAgIHJldHVybiBTZS5zdHJpbmdzOwogICAgICB9LCB1QSA9IChWLCBZKSA9PiB7CiAgICAgICAgZm9yICh2YXIgUyA9IDA7IFMgPCBWLmxlbmd0aDsgKytTKQogICAgICAgICAgVzFbWSsrXSA9IFYuY2hhckNvZGVBdChTKTsKICAgICAgICBXMVtZXSA9IDA7CiAgICAgIH0sIG9BID0gKFYsIFkpID0+IHsKICAgICAgICB2YXIgUyA9IDA7CiAgICAgICAgcmV0dXJuIFNlKCkuZm9yRWFjaCgoSywgcjIpID0+IHsKICAgICAgICAgIHZhciBNID0gWSArIFM7CiAgICAgICAgICBMW1YgKyByMiAqIDQgPj4gMl0gPSBNLCB1QShLLCBNKSwgUyArPSBLLmxlbmd0aCArIDE7CiAgICAgICAgfSksIDA7CiAgICAgIH0sIGdBID0gKFYsIFkpID0+IHsKICAgICAgICB2YXIgUyA9IFNlKCk7CiAgICAgICAgTFtWID4+IDJdID0gUy5sZW5ndGg7CiAgICAgICAgdmFyIEsgPSAwOwogICAgICAgIHJldHVybiBTLmZvckVhY2goKHIyKSA9PiBLICs9IHIyLmxlbmd0aCArIDEpLCBMW1kgPj4gMl0gPSBLLCAwOwogICAgICB9LCBoQSA9IChWKSA9PiA1MjsKICAgICAgZnVuY3Rpb24gc0EoViwgWSwgUywgSywgcjIpIHsKICAgICAgICByZXR1cm4gNzA7CiAgICAgIH0KICAgICAgdmFyIHdBID0gW251bGwsIFtdLCBbXV0sIEJBID0gKFYsIFkpID0+IHsKICAgICAgICB2YXIgUyA9IHdBW1ZdOwogICAgICAgIFkgPT09IDAgfHwgWSA9PT0gMTAgPyAoKFYgPT09IDEgPyBOaSA6IEwxKShpNChTKSksIFMubGVuZ3RoID0gMCkgOiBTLnB1c2goWSk7CiAgICAgIH0sIGNBID0gKFYsIFksIFMsIEspID0+IHsKICAgICAgICBmb3IgKHZhciByMiA9IDAsIE0gPSAwOyBNIDwgUzsgTSsrKSB7CiAgICAgICAgICB2YXIgVzIgPSBMW1kgPj4gMl0sIHMyID0gTFtZICsgNCA+PiAyXTsKICAgICAgICAgIFkgKz0gODsKICAgICAgICAgIGZvciAodmFyIE4gPSAwOyBOIDwgczI7IE4rKykKICAgICAgICAgICAgQkEoViwgdjJbVzIgKyBOXSk7CiAgICAgICAgICByMiArPSBzMjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIExbSyA+PiAyXSA9IHIyLCAwOwogICAgICB9LCB2QSA9IChWKSA9PiB7CiAgICAgICAgdmFyIFkgPSBDMlsiXyIgKyBWXTsKICAgICAgICByZXR1cm4gWTsKICAgICAgfSwgSUEgPSAoViwgWSkgPT4gewogICAgICAgIFcxLnNldChWLCBZKTsKICAgICAgfSwgdDQgPSAoVikgPT4gdTQoViksIFpBID0gKFYpID0+IHsKICAgICAgICB2YXIgWSA9IHFyKFYpICsgMSwgUyA9IHQ0KFkpOwogICAgICAgIHJldHVybiAkcihWLCBTLCBZKSwgUzsKICAgICAgfSwgQ0EgPSAoViwgWSwgUywgSywgcjIpID0+IHsKICAgICAgICB2YXIgTSA9IHsgc3RyaW5nOiAoQTApID0+IHsKICAgICAgICAgIHZhciBOMCA9IDA7CiAgICAgICAgICByZXR1cm4gQTAgIT0gbnVsbCAmJiBBMCAhPT0gMCAmJiAoTjAgPSBaQShBMCkpLCBOMDsKICAgICAgICB9LCBhcnJheTogKEEwKSA9PiB7CiAgICAgICAgICB2YXIgTjAgPSB0NChBMC5sZW5ndGgpOwogICAgICAgICAgcmV0dXJuIElBKEEwLCBOMCksIE4wOwogICAgICAgIH0gfTsKICAgICAgICBmdW5jdGlvbiBXMihBMCkgewogICAgICAgICAgcmV0dXJuIFkgPT09ICJzdHJpbmciID8gcjQoQTApIDogWSA9PT0gImJvb2xlYW4iID8gISFBMCA6IEEwOwogICAgICAgIH0KICAgICAgICB2YXIgczIgPSB2QShWKSwgTiA9IFtdLCBOMiA9IDA7CiAgICAgICAgaWYgKEspCiAgICAgICAgICBmb3IgKHZhciBNMiA9IDA7IE0yIDwgSy5sZW5ndGg7IE0yKyspIHsKICAgICAgICAgICAgdmFyIGEwID0gTVtTW00yXV07CiAgICAgICAgICAgIGEwID8gKE4yID09PSAwICYmIChOMiA9IEYxKCkpLCBOW00yXSA9IGEwKEtbTTJdKSkgOiBOW00yXSA9IEtbTTJdOwogICAgICAgICAgfQogICAgICAgIHZhciBKMCA9IHMyKC4uLk4pOwogICAgICAgIGZ1bmN0aW9uIFcwKEEwKSB7CiAgICAgICAgICByZXR1cm4gTjIgIT09IDAgJiYgTTEoTjIpLCBXMihBMCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBKMCA9IFcwKEowKSwgSjA7CiAgICAgIH07CiAgICAgIERyID0gQzIuSW50ZXJuYWxFcnJvciA9IGNsYXNzIGV4dGVuZHMgRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKFkpIHsKICAgICAgICAgIHN1cGVyKFkpLCB0aGlzLm5hbWUgPSAiSW50ZXJuYWxFcnJvciI7CiAgICAgICAgfQogICAgICB9LCBlOCgpLCBaZSA9IEMyLkJpbmRpbmdFcnJvciA9IGNsYXNzIGV4dGVuZHMgRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKFkpIHsKICAgICAgICAgIHN1cGVyKFkpLCB0aGlzLm5hbWUgPSAiQmluZGluZ0Vycm9yIjsKICAgICAgICB9CiAgICAgIH0sIGE4KCksIGM4KCksIGpyID0gQzIuVW5ib3VuZFR5cGVFcnJvciA9IEM4KEVycm9yLCAiVW5ib3VuZFR5cGVFcnJvciIpLCBROCgpOwogICAgICB2YXIgR0EgPSB7IGs6IEoxLCBxOiBxMCwgZTogJGYsIHA6IHFmLCB6OiByOCwgajogRzgsIGk6IG04LCBhOiB5OCwgeDogWTgsIG46IFg4LCBtOiBGOCwgZDogUjgsIGI6IEU4LCB5OiBVOCwgZzogejgsIGY6IGQ4LCBjOiBLOCwgQTogajgsIHc6IEw4LCBDOiBPOCwgRTogamksIEY6ICQ4LCBEOiByQSwgQjogZkEsIGg6IEFBLCBzOiBrQSwgcjogbEEsIHQ6IG9BLCB1OiBnQSwgdjogaEEsIG86IHNBLCBsOiBjQSB9LCBCMTsKICAgICAgbzEoKTsKICAgICAgdmFyIGw0ID0gKFYpID0+IChsNCA9IEIxLkkpKFYpLCBiaSA9IChWKSA9PiAoYmkgPSBCMS5LKShWKSwgVDEgPSAoVikgPT4gKFQxID0gQjEuTCkoViksIGE0ID0gKFYpID0+IChhNCA9IEIxLk0pKFYpLCB1NCA9IChWKSA9PiAodTQgPSBCMS5OKShWKSwgbzQgPSAoKSA9PiAobzQgPSBCMS5PKSgpOwogICAgICBDMi5keW5DYWxsX2lqaSA9IChWLCBZLCBTLCBLKSA9PiAoQzIuZHluQ2FsbF9pamkgPSBCMS5QKShWLCBZLCBTLCBLKSwgQzIuZHluQ2FsbF9qamkgPSAoViwgWSwgUywgSykgPT4gKEMyLmR5bkNhbGxfamppID0gQjEuUSkoViwgWSwgUywgSyksIEMyLmR5bkNhbGxfaWlqaSA9IChWLCBZLCBTLCBLLCByMikgPT4gKEMyLmR5bkNhbGxfaWlqaSA9IEIxLlIpKFYsIFksIFMsIEssIHIyKSwgQzIuZHluQ2FsbF9qaWppID0gKFYsIFksIFMsIEssIHIyKSA9PiAoQzIuZHluQ2FsbF9qaWppID0gQjEuUykoViwgWSwgUywgSywgcjIpLCBDMi5jY2FsbCA9IENBOwogICAgICB2YXIgYWk7CiAgICAgIGoyID0gZnVuY3Rpb24gVigpIHsKICAgICAgICBhaSB8fCBnNCgpLCBhaSB8fCAoajIgPSBWKTsKICAgICAgfTsKICAgICAgZnVuY3Rpb24gZzQoKSB7CiAgICAgICAgaWYgKEoyID4gMCB8fCAoQjIoKSwgSjIgPiAwKSkKICAgICAgICAgIHJldHVybjsKICAgICAgICBmdW5jdGlvbiBWKCkgewogICAgICAgICAgdmFyIFk7CiAgICAgICAgICBhaSB8fCAoYWkgPSAhMCwgQzIuY2FsbGVkUnVuID0gITAsICFpaSAmJiAoVjIoKSwgUTAoQzIpLCAoWSA9IEMyLm9uUnVudGltZUluaXRpYWxpemVkKSA9PSBudWxsIHx8IFkuY2FsbChDMiksIHkyKCkpKTsKICAgICAgICB9CiAgICAgICAgQzIuc2V0U3RhdHVzID8gKEMyLnNldFN0YXR1cygiUnVubmluZy4uLiIpLCBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gQzIuc2V0U3RhdHVzKCIiKSwgMSksIFYoKTsKICAgICAgICB9LCAxKSkgOiBWKCk7CiAgICAgIH0KICAgICAgaWYgKEMyLnByZUluaXQpCiAgICAgICAgZm9yICh0eXBlb2YgQzIucHJlSW5pdCA9PSAiZnVuY3Rpb24iICYmIChDMi5wcmVJbml0ID0gW0MyLnByZUluaXRdKTsgQzIucHJlSW5pdC5sZW5ndGggPiAwOyApCiAgICAgICAgICBDMi5wcmVJbml0LnBvcCgpKCk7CiAgICAgIHJldHVybiBnNCgpLCBzMCA9IGllLCBzMDsKICAgIH07CiAgfSkoKTsKICBPMi5leHBvcnRzID0gZjAsIE8yLmV4cG9ydHMuZGVmYXVsdCA9IGYwOwp9KShiZik7CnZhciBPdCA9IGJmLmV4cG9ydHMsIFJlID0gLyogQF9fUFVSRV9fICovIExmKE90KTsKZnVuY3Rpb24gX3QoTzIsIHUwLCBmMCwgbDApIHsKICBjb25zdCBCMCA9IG5ldyBVaW50OENsYW1wZWRBcnJheSh1MCAqIGYwICogNCk7CiAgZm9yIChjb25zdCBaMCBvZiBPMikgewogICAgY29uc3QgeyBpdGVtczogczAsIHdpZHRoOiBDMiwgaGVpZ2h0OiBRMCwgbGVmdDogVjEsIHRvcDogaWUgfSA9IFowOwogICAgZm9yIChsZXQgWDEgPSAwOyBYMSA8IFEwOyBYMSsrKQogICAgICBmb3IgKGxldCB1MSA9IDA7IHUxIDwgQzI7IHUxKyspIHsKICAgICAgICBjb25zdCBLMCA9IChYMSAqIEMyICsgdTEpICogbDAsIFgwID0gKChpZSArIFgxKSAqIHUwICsgKFYxICsgdTEpKSAqIDQ7CiAgICAgICAgaWYgKGwwID09PSAxKSB7CiAgICAgICAgICBjb25zdCBSMCA9IHMwW0swXTsKICAgICAgICAgIEIwW1gwXSA9IFIwLCBCMFtYMCArIDFdID0gUjAsIEIwW1gwICsgMl0gPSBSMCwgQjBbWDAgKyAzXSA9IDI1NTsKICAgICAgICB9IGVsc2UgbDAgPj0gMyAmJiAoQjBbWDBdID0gczBbSzBdLCBCMFtYMCArIDFdID0gczBbSzAgKyAxXSwgQjBbWDAgKyAyXSA9IHMwW0swICsgMl0sIEIwW1gwICsgM10gPSBsMCA+PSA0ID8gczBbSzAgKyAzXSA6IDI1NSk7CiAgICAgIH0KICB9CiAgcmV0dXJuIEIwOwp9CmZ1bmN0aW9uIGJ0KE8yKSB7CiAgdmFyIFowOwogIGNvbnN0IHUwID0gZHQsIGYwID0gdTAuSnB4SW1hZ2UgfHwgKChaMCA9IHUwLmRlZmF1bHQpID09IG51bGwgPyB2b2lkIDAgOiBaMC5KcHhJbWFnZSk7CiAgaWYgKHR5cGVvZiBmMCAhPSAiZnVuY3Rpb24iKQogICAgdGhyb3cgbmV3IEVycm9yKCJqcGVnMjAwMCDlupMgQVBJIOS4jeespuWQiOmihOacn++8muacquaJvuWIsCBKcHhJbWFnZSIpOwogIGNvbnN0IGwwID0gbmV3IGYwKCksIEIwID0gT2JqZWN0LmFzc2lnbihPMiwgewogICAgcmVhZFVJbnQ4KHMwKSB7CiAgICAgIHJldHVybiBPMltzMF07CiAgICB9LAogICAgcmVhZEludDgoczApIHsKICAgICAgcmV0dXJuIE8yW3MwXSA8PCAyNCA+PiAyNDsKICAgIH0sCiAgICByZWFkVUludDE2QkUoczApIHsKICAgICAgcmV0dXJuIE8yW3MwXSA8PCA4IHwgTzJbczAgKyAxXTsKICAgIH0sCiAgICByZWFkSW50MTZCRShzMCkgewogICAgICByZXR1cm4gKE8yW3MwXSA8PCA4IHwgTzJbczAgKyAxXSkgPDwgMTYgPj4gMTY7CiAgICB9LAogICAgcmVhZFVJbnQzMkJFKHMwKSB7CiAgICAgIHJldHVybiBPMltzMF0gKiAxNjc3NzIxNiArIChPMltzMCArIDFdIDw8IDE2IHwgTzJbczAgKyAyXSA8PCA4IHwgTzJbczAgKyAzXSk7CiAgICB9CiAgfSk7CiAgcmV0dXJuIGwwLnBhcnNlKEIwKSwgewogICAgcmdiYTogX3QobDAudGlsZXMsIGwwLndpZHRoLCBsMC5oZWlnaHQsIGwwLmNvbXBvbmVudHNDb3VudCksCiAgICB3aWR0aDogbDAud2lkdGgsCiAgICBoZWlnaHQ6IGwwLmhlaWdodAogIH07Cn0KbGV0IFJyID0gbnVsbDsKYXN5bmMgZnVuY3Rpb24gJHQoKSB7CiAgcmV0dXJuIFJyIHx8IChSciA9IChhc3luYyAoKSA9PiB7CiAgICBjb25zdCBPMiA9IHR5cGVvZiBSZSA9PSAiZnVuY3Rpb24iID8gUmUgOiAoUmUgPT0gbnVsbCA/IHZvaWQgMCA6IFJlLmRlZmF1bHQpIHx8IFJlOwogICAgaWYgKHR5cGVvZiBPMiAhPSAiZnVuY3Rpb24iKQogICAgICB0aHJvdyBuZXcgRXJyb3IoIkBjb3JuZXJzdG9uZWpzL2NvZGVjLW9wZW5qcGVnIOW6kyBBUEkg5LiN56ym5ZCI6aKE5pyf77ya5pyq5om+5Yiw5bel5Y6C5Ye95pWwIik7CiAgICByZXR1cm4gYXdhaXQgTzIoKTsKICB9KSgpKSwgUnI7Cn0KZnVuY3Rpb24gcXQoTzIsIHUwKSB7CiAgY29uc3QgeyB3aWR0aDogZjAsIGhlaWdodDogbDAsIGJpdHNQZXJTYW1wbGU6IEIwLCBjb21wb25lbnRDb3VudDogWjAsIGlzU2lnbmVkOiBzMCB9ID0gdTAsIEMyID0gQjAgPiA4ID8gMiA6IDEsIFEwID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGYwICogbDAgKiA0KSwgVjEgPSBmMCAqIGwwLCBpZSA9IE1hdGgubWF4KDAsIEIwIC0gOCksIFgxID0gczAgPyAxIDw8IEIwIC0gMSA6IDAsIHUxID0gKEswKSA9PiB7CiAgICBsZXQgWDA7CiAgICBDMiA9PT0gMiA/IChYMCA9IE8yW0swXSB8IE8yW0swICsgMV0gPDwgOCwgczAgJiYgKFgwID0gWDAgPDwgMTYgPj4gMTYpKSA6IFgwID0gczAgPyBPMltLMF0gPDwgMjQgPj4gMjQgOiBPMltLMF07CiAgICBsZXQgUjAgPSBYMCArIFgxOwogICAgcmV0dXJuIFIwID0gUjAgPj4gaWUsIFIwIDwgMCA/IFIwID0gMCA6IFIwID4gMjU1ICYmIChSMCA9IDI1NSksIFIwOwogIH07CiAgaWYgKFowID09PSAxKQogICAgZm9yIChsZXQgSzAgPSAwOyBLMCA8IFYxOyBLMCsrKSB7CiAgICAgIGNvbnN0IFgwID0gdTEoSzAgKiBDMiksIFIwID0gSzAgKiA0OwogICAgICBRMFtSMF0gPSBYMCwgUTBbUjAgKyAxXSA9IFgwLCBRMFtSMCArIDJdID0gWDAsIFEwW1IwICsgM10gPSAyNTU7CiAgICB9CiAgZWxzZSB7CiAgICBjb25zdCBLMCA9IFowICogQzI7CiAgICBmb3IgKGxldCBYMCA9IDA7IFgwIDwgVjE7IFgwKyspIHsKICAgICAgY29uc3QgUjAgPSBYMCAqIEswLCBBMSA9IFgwICogNDsKICAgICAgUTBbQTFdID0gdTEoUjApLCBRMFtBMSArIDFdID0gdTEoUjAgKyBDMiksIFEwW0ExICsgMl0gPSB1MShSMCArIDIgKiBDMiksIFEwW0ExICsgM10gPSBaMCA+PSA0ID8gdTEoUjAgKyAzICogQzIpIDogMjU1OwogICAgfQogIH0KICByZXR1cm4geyByZ2JhOiBRMCwgd2lkdGg6IGYwLCBoZWlnaHQ6IGwwIH07Cn0KYXN5bmMgZnVuY3Rpb24gZTUoTzIpIHsKICBjb25zdCB1MCA9IGF3YWl0ICR0KCk7CiAgaWYgKCF1MCB8fCB0eXBlb2YgdTAuSjJLRGVjb2RlciAhPSAiZnVuY3Rpb24iKQogICAgdGhyb3cgbmV3IEVycm9yKCJAY29ybmVyc3RvbmVqcy9jb2RlYy1vcGVuanBlZyDmnKrmmrTpnLIgSjJLRGVjb2RlciIpOwogIGNvbnN0IGYwID0gbmV3IHUwLkoyS0RlY29kZXIoKTsKICB0cnkgewogICAgZjAuZ2V0RW5jb2RlZEJ1ZmZlcihPMi5sZW5ndGgpLnNldChPMiksIGYwLmRlY29kZSgpOwogICAgY29uc3QgQjAgPSBmMC5nZXREZWNvZGVkQnVmZmVyKCksIFowID0gZjAuZ2V0RnJhbWVJbmZvKCk7CiAgICByZXR1cm4gcXQoQjAsIFowKTsKICB9IGZpbmFsbHkgewogICAgaWYgKHR5cGVvZiBmMC5kZWxldGUgPT0gImZ1bmN0aW9uIikKICAgICAgdHJ5IHsKICAgICAgICBmMC5kZWxldGUoKTsKICAgICAgfSBjYXRjaCB7CiAgICAgIH0KICB9Cn0Kc2VsZi5vbm1lc3NhZ2UgPSBhc3luYyAoTzIpID0+IHsKICBjb25zdCB7IGlkOiB1MCwgY29kZXN0cmVhbTogZjAgfSA9IE8yLmRhdGEsIGwwID0gW107CiAgdHJ5IHsKICAgIGNvbnN0IFowID0gYnQoZjApLCBzMCA9IHsgaWQ6IHUwLCBvazogITAsIC4uLlowIH07CiAgICBzZWxmLnBvc3RNZXNzYWdlKHMwLCBbWjAucmdiYS5idWZmZXJdKTsKICAgIHJldHVybjsKICB9IGNhdGNoIChaMCkgewogICAgbDAucHVzaChganBlZzIwMDA6ICR7KFowID09IG51bGwgPyB2b2lkIDAgOiBaMC5tZXNzYWdlKSB8fCAi5pyq55+l6ZSZ6K+vIn1gKTsKICB9CiAgdHJ5IHsKICAgIGNvbnN0IFowID0gYXdhaXQgZTUoZjApLCBzMCA9IHsgaWQ6IHUwLCBvazogITAsIC4uLlowIH07CiAgICBzZWxmLnBvc3RNZXNzYWdlKHMwLCBbWjAucmdiYS5idWZmZXJdKTsKICAgIHJldHVybjsKICB9IGNhdGNoIChaMCkgewogICAgbDAucHVzaChgb3BlbmpwZWc6ICR7KFowID09IG51bGwgPyB2b2lkIDAgOiBaMC5tZXNzYWdlKSB8fCAi5pyq55+l6ZSZ6K+vIn1gKTsKICB9CiAgY29uc3QgQjAgPSB7IGlkOiB1MCwgb2s6ICExLCBlcnJvcjogbDAuam9pbigi77ybIikgfTsKICBzZWxmLnBvc3RNZXNzYWdlKEIwKTsKfTsKLy8jIHNvdXJjZU1hcHBpbmdVUkw9anAyV29ya2VyLUQ0WmJ1Ukd5LmpzLm1hcAo=\", l = (g) => Uint8Array.from(atob(g), (I) => I.charCodeAt(0)), K = typeof self < \"u\" && self.Blob && new Blob([\"URL.revokeObjectURL(import.meta.url);\", l(o)], { type: \"text/javascript;charset=utf-8\" });\nfunction Z(g) {\n  let I;\n  try {\n    if (I = K && (self.URL || self.webkitURL).createObjectURL(K), !I) throw \"\";\n    const A = new Worker(I, {\n      type: \"module\",\n      name: g == null ? void 0 : g.name\n    });\n    return A.addEventListener(\"error\", () => {\n      (self.URL || self.webkitURL).revokeObjectURL(I);\n    }), A;\n  } catch {\n    return new Worker(\n      \"data:text/javascript;base64,\" + o,\n      {\n        type: \"module\",\n        name: g == null ? void 0 : g.name\n      }\n    );\n  }\n}\nlet i = null;\nasync function G() {\n  return i !== null ? i : new Promise((g) => {\n    const I = new Image();\n    I.onload = () => {\n      i = I.width === 1 && I.height === 1, g(i);\n    }, I.onerror = () => {\n      i = !1, g(!1);\n    }, I.src = \"data:image/jp2;base64,AAAADGpQICANCocKAAAAFGZ0eXBqcDIgAAAAAGpwMiAAAAAtanAyaAAAABZpaGRyAAAAAQAAAAEAAQcHAAAAAAAPY29scgEAAAAAABEAAACVanAyY/9P/1EALwAAAAAAAQAAAAEAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQcBAQcBAQcB/1IADAAAAAAEBP8AAQH/XAAEQEDoP2QAGgABAAAAAAQEBAEAAEhBRkY=\";\n  });\n}\nfunction H(g) {\n  if (g[0] === 255 && g[1] === 79 && g[2] === 255 && g[3] === 81)\n    return g;\n  let I = 0;\n  for (; I + 8 <= g.length; ) {\n    const A = (g[I] << 24 | g[I + 1] << 16 | g[I + 2] << 8 | g[I + 3]) >>> 0, C = String.fromCharCode(\n      g[I + 4],\n      g[I + 5],\n      g[I + 6],\n      g[I + 7]\n    );\n    let D = 8, B = A;\n    if (A === 1) {\n      if (I + 16 > g.length) break;\n      const S = (g[I + 8] << 24 | g[I + 9] << 16 | g[I + 10] << 8 | g[I + 11]) >>> 0, w = (g[I + 12] << 24 | g[I + 13] << 16 | g[I + 14] << 8 | g[I + 15]) >>> 0;\n      B = S === 0 ? w : S * 4294967296 + w, D = 16;\n    }\n    if (C === \"jp2c\") {\n      const S = A === 0 ? void 0 : I + B;\n      return g.slice(I + D, S);\n    }\n    if (A === 0 || B < D) break;\n    I += B;\n  }\n  return g;\n}\nlet P = null, V = 1;\nconst y = /* @__PURE__ */ new Map();\nfunction Y() {\n  if (!P) {\n    const g = new Z();\n    return g.addEventListener(\"message\", (I) => {\n      const A = I.data, C = y.get(A.id);\n      C && (y.delete(A.id), A.ok ? C.resolve({ rgba: A.rgba, width: A.width, height: A.height }) : C.reject(new Error(`JPEG 2000 解码失败：${A.error}`)));\n    }), g.addEventListener(\"error\", (I) => {\n      const A = new Error(`JPEG 2000 Worker 异常：${I.message || \"未知错误\"}`);\n      y.forEach(({ reject: C }) => C(A)), y.clear();\n    }), P = g, g;\n  }\n  return P;\n}\nfunction W(g) {\n  const I = Y(), A = V++;\n  return new Promise((C, D) => {\n    y.set(A, { resolve: C, reject: D });\n    const B = g.slice();\n    I.postMessage({ id: A, codestream: B }, [B.buffer]);\n  });\n}\nfunction j(g, I, A, C) {\n  const D = document.createElement(\"canvas\");\n  D.width = I, D.height = A;\n  const B = D.getContext(\"2d\");\n  if (!B) throw new Error(\"无法创建 Canvas 2D 上下文\");\n  const S = new ImageData(\n    g,\n    I,\n    A\n  );\n  return B.putImageData(S, 0, 0), new Promise((w, M) => {\n    D.toBlob(\n      (s) => {\n        s ? w(s) : M(new Error(\"JPEG 2000 Canvas 转 Blob 失败\"));\n      },\n      C\n    );\n  });\n}\nclass Q {\n  async needsDecode(I) {\n    return I !== \"image/jp2\" && I !== \"image/jpx\" ? !1 : !await G();\n  }\n  async decode(I, A) {\n    if (await G())\n      return I instanceof Blob ? I : new Blob([I], { type: \"image/jp2\" });\n    const C = I instanceof Blob ? await I.arrayBuffer() : I, D = H(new Uint8Array(C)), B = (A == null ? void 0 : A.outputFormat) || \"image/png\", { rgba: S, width: w, height: M } = await W(D);\n    return j(S, w, M, B);\n  }\n  async getMetadata(I) {\n    return {\n      format: \"jp2\"\n    };\n  }\n}\nconst d = new Q();\nexport {\n  d as default\n};\n//# sourceMappingURL=jp2Loader-Bn-qPMbD.js.map\n","import { AlertCircle } from 'lucide-react';\n\ninterface RendererErrorProps {\n  message: string;\n  detail?: string;\n  showIcon?: boolean;\n}\n\nexport const RendererError: React.FC<RendererErrorProps> = ({\n  message,\n  detail,\n  showIcon = true,\n}) => {\n  return (\n    <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full\">\n      <div className=\"rfp-text-center\">\n        {showIcon && (\n          <div className=\"rfp-w-12 rfp-h-12 rfp-mx-auto rfp-mb-3 rfp-rounded-full rfp-bg-red-500/10 rfp-flex rfp-items-center rfp-justify-center\">\n            <AlertCircle className=\"rfp-w-6 rfp-h-6 rfp-text-red-400\" />\n          </div>\n        )}\n        <p className=\"rfp-text-base rfp-font-medium rfp-text-fg-primary rfp-mb-1\">\n          {message}\n        </p>\n        {detail && (\n          <p className=\"rfp-text-xs rfp-text-fg-tertiary\">{detail}</p>\n        )}\n      </div>\n    </div>\n  );\n};\n","import { useState, useEffect, useRef, useCallback, useImperativeHandle, forwardRef } from 'react';\nimport { motion } from 'framer-motion';\nimport { Loader2, ZoomIn, ZoomOut, RotateCw, RotateCcw, Scan, RefreshCw } from 'lucide-react';\nimport { useTranslator } from '../../i18n/LocaleContext';\nimport {\n  decodeInWorker,\n  detectImageFormat,\n  getLoaderForMimeType,\n  shouldUseWorker,\n} from '@eternalheart/file-preview-core';\nimport type { PreviewFile } from '@eternalheart/file-preview-core';\nimport { RendererError } from '../RendererError';\nimport type { RendererHandle } from '../base.types';\nimport type { ToolbarGroup } from '../toolbar.types';\n\nconst OriginalSizeIcon: React.FC<{ className?: string }> = ({ className }) => (\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    viewBox=\"0 0 24 24\"\n    fill=\"none\"\n    stroke=\"currentColor\"\n    strokeWidth=\"2\"\n    strokeLinecap=\"round\"\n    strokeLinejoin=\"round\"\n    className={className}\n  >\n    <text x=\"12\" y=\"17.5\" textAnchor=\"middle\" fontSize=\"20\" fontWeight=\"bold\" fill=\"currentColor\" stroke=\"none\">\n      1:1\n    </text>\n  </svg>\n);\n\nexport interface ImageRendererHandle extends RendererHandle {\n  fitToWidth: () => void;\n  resetView: () => void;\n}\n\ninterface ImageRendererProps {\n  url: string;\n  fileSize?: number;\n  file?: PreviewFile | File;\n}\n\nexport const ImageRenderer = forwardRef<ImageRendererHandle, ImageRendererProps>(({\n  url,\n  fileSize,\n  file,\n}, ref) => {\n  const t = useTranslator();\n\n  // 内部状态管理\n  const [loaded, setLoaded] = useState(false);\n  const [error, setError] = useState<string | null>(null);\n  const [decoding, setDecoding] = useState(false);\n  const [decodeProgress, setDecodeProgress] = useState(0);\n  const [decodeError, setDecodeError] = useState<string | null>(null);\n  const [imageSrc, setImageSrc] = useState<string>('');\n  const [currentPage, setCurrentPage] = useState(1);\n  const [totalPages, setTotalPages] = useState(1);\n  const [position, setPosition] = useState({ x: 0, y: 0 });\n  const [isDragging, setIsDragging] = useState(false);\n  const [dragStart, setDragStart] = useState({ x: 0, y: 0 });\n  const [zoom, setZoom] = useState(1);\n  const [rotation, setRotation] = useState(0);\n  const [naturalSize, setNaturalSize] = useState({ width: 0, height: 0 });\n\n  const imgRef = useRef<HTMLImageElement>(null);\n  const containerRef = useRef<HTMLDivElement>(null);\n  const blobUrlRef = useRef<string | null>(null);\n  const fileBlobRef = useRef<Blob | null>(null);\n  const loaderRef = useRef<any>(null);\n  const pageCacheRef = useRef<Map<number, string>>(new Map());\n  const isTouchDevice = useRef(false);\n  const touchStartDistance = useRef(0);\n  const touchStartZoom = useRef(1);\n  const touchStartPos = useRef({ x: 0, y: 0 });\n  const lastTapTime = useRef(0);\n\n  // 事件发射器：用于通知主组件工具栏状态变化\n  const listenersRef = useRef<Set<() => void>>(new Set());\n  const notifyToolbarChange = useCallback(() => {\n    listenersRef.current.forEach(listener => listener());\n  }, []);\n\n  // 监听影响工具栏的状态变化\n  useEffect(() => {\n    notifyToolbarChange();\n  }, [zoom, notifyToolbarChange]);\n\n  useEffect(() => {\n    notifyToolbarChange();\n  }, [rotation, notifyToolbarChange]);\n\n  // 解码逻辑：检测格式并按需解码\n  useEffect(() => {\n    let cancelled = false;\n\n    const decodeIfNeeded = async () => {\n      // 重置状态：清空 src 以避免上一张图片的 onLoad/onError 误触发到新文件\n      setImageSrc('');\n      setLoaded(false);\n      setError(null);\n      setDecoding(false);\n      setDecodeError(null);\n      setDecodeProgress(0);\n      setPosition({ x: 0, y: 0 });\n      setZoom(1);\n      setRotation(0);\n      setCurrentPage(1);\n      setTotalPages(1);\n\n      // 清理旧的 blob URL 与缓存\n      if (blobUrlRef.current) {\n        URL.revokeObjectURL(blobUrlRef.current);\n        blobUrlRef.current = null;\n      }\n      pageCacheRef.current.forEach((url) => URL.revokeObjectURL(url));\n      pageCacheRef.current.clear();\n      fileBlobRef.current = null;\n      loaderRef.current = null;\n\n      // 如果没有 file 对象，直接使用 url\n      if (!file) {\n        if (!cancelled) setImageSrc(url);\n        return;\n      }\n\n      try {\n        // 检测图片格式\n        const mimeType = await detectImageFormat(file);\n        const loader = await getLoaderForMimeType(mimeType);\n\n        // 如果不需要解码，直接使用原 URL\n        if (!loader || !(await loader.needsDecode(mimeType))) {\n          if (!cancelled) setImageSrc(url);\n          return;\n        }\n\n        // 需要解码\n        setDecoding(true);\n\n        // 获取文件 Blob\n        let fileBlob: Blob;\n        if (file instanceof Blob) {\n          fileBlob = file;\n        } else {\n          const response = await fetch(url);\n          if (!response.ok) throw new Error('Failed to fetch file');\n          fileBlob = await response.blob();\n        }\n\n        if (cancelled) return;\n\n        // 缓存 Blob 与 loader 以便后续翻页\n        fileBlobRef.current = fileBlob;\n        loaderRef.current = loader;\n\n        // 获取元数据（用于检测多页 TIFF）\n        if (loader.getMetadata) {\n          try {\n            const metadata = await loader.getMetadata(fileBlob);\n            if (!cancelled && metadata.pageCount && metadata.pageCount > 1) {\n              setTotalPages(metadata.pageCount);\n            }\n          } catch {\n            // 忽略元数据获取失败\n          }\n        }\n\n        const decodeOptions = {\n          page: 1,\n          fullQuality: false,\n          onProgress: (percent: number) => {\n            if (!cancelled) {\n              setDecodeProgress(percent);\n            }\n          },\n        };\n\n        // HEIC/RAW/PSD 等耗时格式优先在 Worker 中解码。\n        // Worker 消息不能传递回调函数，因此只传递可结构化克隆的选项；\n        // CSP、旧浏览器或第三方库不兼容 Worker 时回退主线程。\n        let decodedBlob;\n        if (shouldUseWorker(mimeType)) {\n          try {\n            decodedBlob = await decodeInWorker(\n              mimeType,\n              await fileBlob.arrayBuffer(),\n              { page: 1, fullQuality: false },\n            );\n          } catch {\n            decodedBlob = await loader.decode(fileBlob, decodeOptions);\n          }\n        } else {\n          decodedBlob = await loader.decode(fileBlob, decodeOptions);\n        }\n\n        if (cancelled) return;\n\n        // 生成 blob URL\n        const blobUrl = typeof decodedBlob === 'string'\n          ? decodedBlob\n          : URL.createObjectURL(decodedBlob);\n\n        blobUrlRef.current = blobUrl;\n        pageCacheRef.current.set(1, blobUrl);\n        setImageSrc(blobUrl);\n        setDecoding(false);\n      } catch (err: any) {\n        if (!cancelled) {\n          setDecodeError(err?.message || '解码失败');\n          setDecoding(false);\n        }\n      }\n    };\n\n    decodeIfNeeded();\n\n    return () => {\n      cancelled = true;\n    };\n  }, [url, file]);\n\n  // 多页 TIFF 翻页：切换页码时重新解码\n  const handlePageChange = useCallback(async (page: number) => {\n    if (!fileBlobRef.current || !loaderRef.current) return;\n    if (page < 1 || page > totalPages) return;\n\n    // 命中缓存：直接切换\n    const cached = pageCacheRef.current.get(page);\n    if (cached) {\n      setCurrentPage(page);\n      setImageSrc(cached);\n      return;\n    }\n\n    // 解码新页面\n    setDecoding(true);\n    try {\n      const decodedBlob = await loaderRef.current.decode(fileBlobRef.current, { page });\n      const blobUrl = typeof decodedBlob === 'string'\n        ? decodedBlob\n        : URL.createObjectURL(decodedBlob);\n\n      // LRU：缓存超过 10 页时删除最早的\n      if (pageCacheRef.current.size >= 10) {\n        const firstKey = pageCacheRef.current.keys().next().value;\n        if (firstKey !== undefined) {\n          const oldUrl = pageCacheRef.current.get(firstKey);\n          if (oldUrl) URL.revokeObjectURL(oldUrl);\n          pageCacheRef.current.delete(firstKey);\n        }\n      }\n\n      pageCacheRef.current.set(page, blobUrl);\n      setCurrentPage(page);\n      setImageSrc(blobUrl);\n      setDecoding(false);\n    } catch (err: any) {\n      setDecodeError(err?.message || '翻页解码失败');\n      setDecoding(false);\n    }\n  }, [totalPages]);\n\n  // Cleanup blob URL on unmount\n  useEffect(() => {\n    return () => {\n      if (blobUrlRef.current) {\n        URL.revokeObjectURL(blobUrlRef.current);\n      }\n      pageCacheRef.current.forEach((url) => URL.revokeObjectURL(url));\n      pageCacheRef.current.clear();\n    };\n  }, []);\n\n  const handleLoad = (e: React.SyntheticEvent<HTMLImageElement>) => {\n    setLoaded(true);\n    const img = e.currentTarget;\n    const newNaturalSize = { width: img.naturalWidth, height: img.naturalHeight };\n    setNaturalSize(newNaturalSize);\n\n    // 图片加载完成后，自动适应窗口大小\n    if (containerRef.current && newNaturalSize.width > 0 && newNaturalSize.height > 0) {\n      const containerWidth = containerRef.current.clientWidth;\n      const containerHeight = containerRef.current.clientHeight;\n      const scaleX = containerWidth / newNaturalSize.width;\n      const scaleY = containerHeight / newNaturalSize.height;\n      const newZoom = Math.min(scaleX, scaleY);\n      setZoom(Math.max(0.01, Math.min(10, newZoom)));\n      setPosition({ x: 0, y: 0 });\n    }\n  };\n\n  // 边界限制：确保图片至少有一部分可见\n  const clampPosition = useCallback((pos: { x: number; y: number }, currentZoom: number) => {\n    const container = containerRef.current;\n    if (!container || naturalSize.width === 0) return pos;\n\n    const containerW = container.clientWidth;\n    const containerH = container.clientHeight;\n    const imgW = naturalSize.width * currentZoom;\n    const imgH = naturalSize.height * currentZoom;\n\n    // 至少保留 margin px 的图片在视口内\n    const margin = Math.min(80, containerW * 0.15, containerH * 0.15);\n    const rangeX = (containerW + imgW) / 2 - margin;\n    const rangeY = (containerH + imgH) / 2 - margin;\n\n    return {\n      x: rangeX > 0 ? Math.max(-rangeX, Math.min(rangeX, pos.x)) : 0,\n      y: rangeY > 0 ? Math.max(-rangeY, Math.min(rangeY, pos.y)) : 0,\n    };\n  }, [naturalSize]);\n\n  const handleError = () => {\n    setError(t('image.load_failed'));\n    setLoaded(true);\n  };\n\n  // 双击复原：居中 + 缩放100%\n  const handleDoubleClick = () => {\n    setPosition({ x: 0, y: 0 });\n    setZoom(1);\n  };\n\n  // 触屏事件处理\n  const handleTouchStart = useCallback((e: TouchEvent) => {\n    isTouchDevice.current = true;\n    e.preventDefault();\n\n    const touches = e.touches;\n    if (touches.length === 1) {\n      // 单指拖拽\n      setIsDragging(true);\n      setDragStart({\n        x: touches[0].clientX - position.x,\n        y: touches[0].clientY - position.y,\n      });\n\n      // 双击检测\n      const now = Date.now();\n      if (now - lastTapTime.current < 300) {\n        // 双击复原：居中 + 缩放100%\n        setPosition({ x: 0, y: 0 });\n        setZoom(1);\n      }\n      lastTapTime.current = now;\n    } else if (touches.length === 2) {\n      // 双指缩放初始化\n      setIsDragging(false);\n      const distance = Math.hypot(\n        touches[1].clientX - touches[0].clientX,\n        touches[1].clientY - touches[0].clientY\n      );\n      touchStartDistance.current = distance;\n      touchStartZoom.current = zoom;\n      touchStartPos.current = { ...position };\n    }\n  }, [position, zoom]);\n\n  const handleTouchMove = useCallback((e: TouchEvent) => {\n    e.preventDefault();\n\n    const touches = e.touches;\n    if (touches.length === 1 && isDragging) {\n      // 单指拖拽\n      setPosition(clampPosition({\n        x: touches[0].clientX - dragStart.x,\n        y: touches[0].clientY - dragStart.y,\n      }, zoom));\n    } else if (touches.length === 2) {\n      // 双指缩放\n      const container = containerRef.current;\n      if (!container) return;\n\n      const distance = Math.hypot(\n        touches[1].clientX - touches[0].clientX,\n        touches[1].clientY - touches[0].clientY\n      );\n\n      // 最小距离变化阈值，防止抖动\n      if (Math.abs(distance - touchStartDistance.current) < 5) return;\n\n      const scale = distance / touchStartDistance.current;\n      const newZoom = Math.max(0.01, Math.min(10, touchStartZoom.current * scale));\n\n      // 双指中心点作为缩放原点\n      const rect = container.getBoundingClientRect();\n      const centerX = (touches[0].clientX + touches[1].clientX) / 2 - rect.left - rect.width / 2;\n      const centerY = (touches[0].clientY + touches[1].clientY) / 2 - rect.top - rect.height / 2;\n\n      const zoomScale = newZoom / zoom;\n      setPosition(clampPosition({\n        x: centerX - zoomScale * (centerX - touchStartPos.current.x),\n        y: centerY - zoomScale * (centerY - touchStartPos.current.y),\n      }, newZoom));\n\n      setZoom(newZoom);\n    }\n  }, [isDragging, dragStart, zoom, clampPosition]);\n\n  const handleTouchEnd = useCallback(() => {\n    setIsDragging(false);\n    touchStartDistance.current = 0;\n  }, []);\n\n  // 鼠标滚轮缩放 —— 以鼠标位置为缩放原点\n  // 使用原生事件 + passive: false,确保 preventDefault 生效,\n  // 避免滚轮事件冒泡触发外层(如嵌入模式下的页面滚动)\n  useEffect(() => {\n    const container = containerRef.current;\n    if (!container) return;\n\n    const handleWheelNative = (e: WheelEvent) => {\n      e.preventDefault();\n      e.stopPropagation();\n\n      const rect = container.getBoundingClientRect();\n      const mouseX = e.clientX - rect.left - rect.width / 2;\n      const mouseY = e.clientY - rect.top - rect.height / 2;\n\n      const delta = e.deltaY > 0 ? -0.05 : 0.05;\n\n      setZoom(prev => {\n        const newZoom = Math.max(0.01, Math.min(10, prev + delta));\n        const scale = newZoom / prev;\n\n        setPosition(pos => clampPosition({\n          x: mouseX - scale * (mouseX - pos.x),\n          y: mouseY - scale * (mouseY - pos.y),\n        }, newZoom));\n\n        return newZoom;\n      });\n    };\n\n    container.addEventListener('wheel', handleWheelNative, { passive: false });\n    return () => container.removeEventListener('wheel', handleWheelNative);\n  }, [clampPosition]);\n\n  // 触屏事件监听器\n  useEffect(() => {\n    const container = containerRef.current;\n    if (!container) return;\n\n    container.addEventListener('touchstart', handleTouchStart, { passive: false });\n    container.addEventListener('touchmove', handleTouchMove, { passive: false });\n    container.addEventListener('touchend', handleTouchEnd);\n    container.addEventListener('touchcancel', handleTouchEnd);\n\n    return () => {\n      container.removeEventListener('touchstart', handleTouchStart);\n      container.removeEventListener('touchmove', handleTouchMove);\n      container.removeEventListener('touchend', handleTouchEnd);\n      container.removeEventListener('touchcancel', handleTouchEnd);\n    };\n  }, [handleTouchStart, handleTouchMove, handleTouchEnd]);\n\n  const handleMouseDown = useCallback((e: React.MouseEvent) => {\n    if (isTouchDevice.current) return;\n    if (e.button !== 0) return;\n    setIsDragging(true);\n    setDragStart({\n      x: e.clientX - position.x,\n      y: e.clientY - position.y,\n    });\n  }, [position]);\n\n  const handleMouseMove = useCallback((e: React.MouseEvent) => {\n    if (isTouchDevice.current) return;\n    if (!isDragging) return;\n    setPosition(clampPosition({\n      x: e.clientX - dragStart.x,\n      y: e.clientY - dragStart.y,\n    }, zoom));\n  }, [isDragging, dragStart, zoom, clampPosition]);\n\n  const handleMouseUp = useCallback(() => {\n    if (isTouchDevice.current) return;\n    setIsDragging(false);\n  }, []);\n\n  // 工具栏事件处理\n  const handleZoomIn = useCallback(() => {\n    setZoom(z => Math.min(z + 0.1, 10));\n  }, []);\n\n  const handleZoomOut = useCallback(() => {\n    setZoom(z => Math.max(z - 0.1, 0.01));\n  }, []);\n\n  const handleRotateLeft = useCallback(() => {\n    setRotation(r => r - 90);\n  }, []);\n\n  const handleRotateRight = useCallback(() => {\n    setRotation(r => r + 90);\n  }, []);\n\n  const handleFitToWidth = useCallback(() => {\n    if (containerRef.current && naturalSize.width > 0 && naturalSize.height > 0) {\n      const containerWidth = containerRef.current.clientWidth;\n      const containerHeight = containerRef.current.clientHeight;\n      const scaleX = containerWidth / naturalSize.width;\n      const scaleY = containerHeight / naturalSize.height;\n      const newZoom = Math.min(scaleX, scaleY);\n      setZoom(Math.max(0.01, Math.min(10, newZoom)));\n      setRotation(0);\n      setPosition({ x: 0, y: 0 });\n    }\n  }, [naturalSize]);\n\n  const handleOriginalSize = useCallback(() => {\n    setZoom(1);\n    setRotation(0);\n    setPosition({ x: 0, y: 0 });\n  }, []);\n\n  const handleReset = useCallback(() => {\n    // 重置为自适应窗口，而不是原始尺寸\n    handleFitToWidth();\n  }, [handleFitToWidth]);\n\n  // 工具栏配置\n  const getToolbarGroups = useCallback((): ToolbarGroup[] => [\n    {\n      items: [\n        { type: 'button', icon: <ZoomOut className=\"rfp-w-4 rfp-h-4\" />, tooltip: t('toolbar.zoom_out'), action: handleZoomOut, disabled: zoom <= 0.01 },\n        { type: 'text', content: `${Math.round(zoom * 100)}%`, minWidth: '3rem' },\n        { type: 'button', icon: <ZoomIn className=\"rfp-w-4 rfp-h-4\" />, tooltip: t('toolbar.zoom_in'), action: handleZoomIn, disabled: zoom >= 10 },\n      ],\n    },\n    {\n      items: [\n        { type: 'button', icon: <Scan className=\"rfp-w-4 rfp-h-4\" />, tooltip: t('toolbar.fit_to_window'), action: handleFitToWidth },\n        { type: 'button', icon: <OriginalSizeIcon className=\"rfp-w-4 rfp-h-4\" />, tooltip: t('toolbar.original_size'), action: handleOriginalSize },\n      ],\n    },\n    {\n      items: [\n        { type: 'button', icon: <RotateCcw className=\"rfp-w-4 rfp-h-4\" />, tooltip: t('toolbar.rotate_left'), action: handleRotateLeft },\n        { type: 'button', icon: <RotateCw className=\"rfp-w-4 rfp-h-4\" />, tooltip: t('toolbar.rotate_right'), action: handleRotateRight },\n      ],\n    },\n    {\n      items: [\n        { type: 'button', icon: <RefreshCw className=\"rfp-w-4 rfp-h-4\" />, tooltip: t('toolbar.reset'), action: handleReset },\n      ],\n    },\n  ], [zoom, t, handleZoomIn, handleZoomOut, handleFitToWidth, handleOriginalSize, handleRotateLeft, handleRotateRight, handleReset]);\n\n  // 暴露接口给父组件\n  useImperativeHandle(ref, () => ({\n    getToolbarGroups,\n    onToolbarChange: (listener: () => void) => {\n      listenersRef.current.add(listener);\n      return () => listenersRef.current.delete(listener);\n    },\n    fitToWidth: handleFitToWidth,\n    resetView: handleReset,\n  }), [getToolbarGroups, handleFitToWidth, handleReset]);\n\n  return (\n    <div\n      ref={containerRef}\n      className=\"rfp-relative rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full rfp-overflow-hidden\"\n      onMouseDown={handleMouseDown}\n      onMouseMove={handleMouseMove}\n      onMouseUp={handleMouseUp}\n      onMouseLeave={handleMouseUp}\n      style={{ cursor: isDragging ? 'grabbing' : 'grab', touchAction: 'none' }}\n    >\n      {/* 解码中 */}\n      {decoding && (\n        <div className=\"rfp-absolute rfp-inset-0 rfp-flex rfp-flex-col rfp-items-center rfp-justify-center rfp-bg-surface-1/80 rfp-z-10\">\n          <Loader2 className=\"rfp-w-12 rfp-h-12 rfp-text-fg-primary rfp-animate-spin\" />\n          <p className=\"rfp-mt-4 rfp-text-fg-secondary\">\n            正在解码... {decodeProgress > 0 && `${Math.round(decodeProgress)}%`}\n          </p>\n        </div>\n      )}\n\n      {/* 解码错误 */}\n      {decodeError && (\n        <div className=\"rfp-absolute rfp-inset-0 rfp-flex rfp-items-center rfp-justify-center rfp-bg-surface-1/80 rfp-z-10\">\n          <RendererError message={t('image.decode_failed')} detail={decodeError} />\n        </div>\n      )}\n\n      {!loaded && !error && !decoding && !decodeError && (\n        <div className=\"rfp-flex rfp-items-center rfp-justify-center\">\n          <div className=\"rfp-w-12 rfp-h-12 rfp-border-4 rfp-border-line-strong rfp-border-t-spinner-head rfp-rounded-full rfp-animate-spin\" />\n        </div>\n      )}\n\n      {error && (\n        <RendererError message={error} />\n      )}\n\n      {imageSrc && (\n        <motion.img\n          ref={imgRef}\n          src={imageSrc}\n          alt=\"Preview\"\n          className={`rfp-max-w-none rfp-select-none ${!loaded || error || decodeError ? 'rfp-hidden' : ''}`}\n          style={{\n            transform: `translate(${position.x}px, ${position.y}px) scale(${zoom}) rotate(${rotation}deg)`,\n            transformOrigin: 'center',\n            transition: isDragging ? 'none' : 'transform 0.3s ease-out',\n          }}\n          onLoad={handleLoad}\n          onError={handleError}\n          onDoubleClick={handleDoubleClick}\n          initial={{ opacity: 0 }}\n          animate={{ opacity: loaded && !error && !decodeError ? 1 : 0 }}\n          transition={{ duration: 0.3 }}\n          draggable={false}\n        />\n      )}\n\n      {/* 右下角分辨率 */}\n      {loaded && !error && naturalSize.width > 0 && (\n        <div className=\"rfp-absolute rfp-bottom-2 rfp-right-3 rfp-text-[10px] rfp-text-fg-disabled hover:rfp-text-fg-secondary rfp-transition-colors rfp-pointer-events-auto rfp-select-none rfp-cursor-default\">\n          {naturalSize.width} × {naturalSize.height}{fileSize != null && ` · ${fileSize < 1024 ? `${fileSize} B` : fileSize < 1024 * 1024 ? `${(fileSize / 1024).toFixed(1)} KB` : `${(fileSize / (1024 * 1024)).toFixed(1)} MB`}`}\n        </div>\n      )}\n\n      {/* 多页 TIFF 翻页器 */}\n      {totalPages > 1 && (\n        <div className=\"rfp-absolute rfp-bottom-2 rfp-left-1/2 -rfp-translate-x-1/2 rfp-flex rfp-items-center rfp-gap-2 rfp-px-3 rfp-py-1.5 rfp-bg-surface-toolbar rfp-border rfp-border-line rfp-rounded-lg rfp-text-sm rfp-text-fg-primary rfp-shadow-md\">\n          <button\n            type=\"button\"\n            onClick={() => handlePageChange(currentPage - 1)}\n            disabled={currentPage <= 1 || decoding}\n            className=\"rfp-px-2 rfp-py-0.5 rfp-rounded hover:rfp-bg-surface-nav-hover disabled:rfp-opacity-40 disabled:rfp-cursor-not-allowed\"\n          >\n            上一页\n          </button>\n          <span className=\"rfp-text-fg-secondary rfp-tabular-nums\">\n            {currentPage} / {totalPages}\n          </span>\n          <button\n            type=\"button\"\n            onClick={() => handlePageChange(currentPage + 1)}\n            disabled={currentPage >= totalPages || decoding}\n            className=\"rfp-px-2 rfp-py-0.5 rfp-rounded hover:rfp-bg-surface-nav-hover disabled:rfp-opacity-40 disabled:rfp-cursor-not-allowed\"\n          >\n            下一页\n          </button>\n        </div>\n      )}\n    </div>\n  );\n});\n","import { useState, useEffect, useRef, useCallback, useImperativeHandle, forwardRef } from 'react';\nimport { useTranslator } from '../../i18n/LocaleContext';\nimport { RendererError } from '../RendererError';\nimport { X, ZoomIn, ZoomOut, ChevronLeft, ChevronRight, Menu, RefreshCw } from 'lucide-react';\nimport type { RendererHandle } from '../base.types';\nimport type { ToolbarGroup } from '../toolbar.types';\n// @ts-ignore - pdfjs-dist 类型路径\n// Electron 环境使用 legacy 构建版本以避免 Web Streams API 兼容性问题\n// 参考: https://github.com/mozilla/pdf.js/issues/16214\nimport * as pdfjsLib from 'pdfjs-dist/legacy/build/pdf.mjs';\nimport {\n  configurePdfWorker,\n  getPdfDocumentOptions,\n  installUint8ArrayHexBase64Polyfill,\n} from '@eternalheart/file-preview-core';\n\n// 立即安装 Uint8Array hex/base64 polyfill。\n// pdfjs 6.x 依赖 ES2025 的 Uint8Array.prototype.toHex/toBase64/fromBase64 等方法，\n// 其 legacy 构建自带的 core-js polyfill 在 webpack/umi 二次打包时可能被 tree-shake，\n// 导致 `TypeError: a.toHex is not a function`。此处主动安装（运行时调用，无法被消除）。\ninstallUint8ArrayHexBase64Polyfill();\n\n/**\n * 准备 PDF worker。\n *\n * - 浏览器环境：使用 CDN 上的 legacy worker（独立 worker 线程，自带 polyfill，性能好）。\n * - Electron 环境：worker 运行在缺少 Uint8Array hex/base64 polyfill 的独立作用域，\n *   会抛 `toHex is not a function`。此处将 worker 模块挂到 `globalThis.pdfjsWorker`，\n *   强制 pdfjs 在主线程执行 worker 逻辑（见 pdf.mjs PDFWorker#initialize），\n *   从而复用主线程已安装的 polyfill，并彻底绕开 CDN / worker 作用域问题。\n */\nlet pdfWorkerPrepared: Promise<void> | null = null;\nfunction preparePdfWorker(): Promise<void> {\n  if (pdfWorkerPrepared) return pdfWorkerPrepared;\n  pdfWorkerPrepared = (async () => {\n    const isElectron = typeof navigator !== 'undefined' && /electron/i.test(navigator.userAgent);\n    if (isElectron) {\n      const g = globalThis as any;\n      if (typeof globalThis !== 'undefined' && !g.pdfjsWorker) {\n        // @ts-ignore - pdfjs worker 无类型声明\n        const workerModule = await import(/* webpackChunkName: \"pdf.worker\" */ /* @vite-ignore */ 'pdfjs-dist/legacy/build/pdf.worker.mjs');\n        g.pdfjsWorker = workerModule;\n      }\n    }\n\n    const configuredOptions = getPdfDocumentOptions();\n    configurePdfWorker(pdfjsLib, {\n      ...configuredOptions,\n      workerSrc: pdfjsLib.GlobalWorkerOptions.workerSrc || undefined,\n    });\n  })();\n  return pdfWorkerPrepared;\n}\n\ninterface PdfOutlineItem {\n  title: string;\n  dest: any;\n  items?: PdfOutlineItem[];\n}\n\ninterface PdfPageProxy {\n  getViewport(opts: { scale: number }): { width: number; height: number };\n  render(opts: { canvasContext: CanvasRenderingContext2D; viewport: { width: number; height: number } }): {\n    promise: Promise<void>;\n    cancel(): void;\n  };\n}\n\ninterface PdfDocumentProxy {\n  numPages: number;\n  getPage(pageNumber: number): Promise<PdfPageProxy>;\n  getOutline(): Promise<PdfOutlineItem[] | null>;\n  destroy(): void;\n}\n\ninterface PageState {\n  element: HTMLDivElement;\n  rendered: boolean;\n  rendering: boolean;\n  renderTask: { cancel(): void } | null;\n}\n\nexport interface PdfRendererHandle extends RendererHandle {\n  // 可选的公开方法\n}\n\ninterface PdfRendererProps {\n  url: string;\n}\n\nexport const PdfRenderer = forwardRef<PdfRendererHandle, PdfRendererProps>(({\n  url,\n}, ref) => {\n  const t = useTranslator();\n\n  // 内部状态管理\n  const [zoom, setZoom] = useState(1);\n  const [currentPage, setCurrentPage] = useState(1);\n  const [numPages, setNumPages] = useState<number>(0);\n  const [showOutline, setShowOutline] = useState(false);\n  const [error, setError] = useState<string | null>(null);\n  const [isLoading, setIsLoading] = useState<boolean>(true);\n  const [outline, setOutline] = useState<PdfOutlineItem[]>([]);\n  const [activeOutlineItem, setActiveOutlineItem] = useState<string | null>(null);\n  const outlinePageMapRef = useRef<Map<string, number>>(new Map());\n  const containerRef = useRef<HTMLDivElement>(null);\n  const scrollContainerRef = useRef<HTMLDivElement>(null);\n  const pdfDocRef = useRef<PdfDocumentProxy | null>(null);\n  const pageStatesRef = useRef<Map<number, PageState>>(new Map());\n  const observerRef = useRef<IntersectionObserver | null>(null);\n\n  // 事件发射器：用于通知主组件工具栏状态变化\n  const listenersRef = useRef<Set<() => void>>(new Set());\n  const notifyToolbarChange = useCallback(() => {\n    listenersRef.current.forEach(listener => listener());\n  }, []);\n\n  // 监听影响工具栏的状态变化\n  useEffect(() => {\n    notifyToolbarChange();\n  }, [zoom, notifyToolbarChange]);\n\n  useEffect(() => {\n    notifyToolbarChange();\n  }, [currentPage, notifyToolbarChange]);\n\n  useEffect(() => {\n    notifyToolbarChange();\n  }, [numPages, notifyToolbarChange]);\n\n  useEffect(() => {\n    notifyToolbarChange();\n  }, [outline.length, notifyToolbarChange]);\n\n  // 渲染单个页面\n  const renderPage = useCallback(async (pageNumber: number, scale: number) => {\n    if (!pdfDocRef.current) return;\n    const state = pageStatesRef.current.get(pageNumber);\n    if (!state || state.rendering) return;\n\n    state.rendering = true;\n\n    try {\n      const page = await pdfDocRef.current.getPage(pageNumber);\n      const viewport = page.getViewport({ scale });\n\n      const canvas = document.createElement('canvas');\n      canvas.width = viewport.width;\n      canvas.height = viewport.height;\n      canvas.style.maxWidth = '100%';\n      canvas.style.height = 'auto';\n      canvas.style.borderRadius = '0';\n      canvas.style.display = 'block';\n\n      const ctx = canvas.getContext('2d');\n      if (!ctx) return;\n\n      const renderTask = page.render({ canvasContext: ctx, viewport });\n      state.renderTask = renderTask;\n      await renderTask.promise;\n\n      state.element.innerHTML = '';\n      state.element.appendChild(canvas);\n\n      state.rendered = true;\n    } catch (err: any) {\n      if (err?.name !== 'RenderingCancelledException') {\n        console.error(`渲染页面 ${pageNumber} 失败:`, err);\n      }\n    } finally {\n      state.rendering = false;\n      state.renderTask = null;\n    }\n  }, []);\n\n  // 清理页面 canvas\n  const clearPageCanvas = useCallback((pageNumber: number) => {\n    const state = pageStatesRef.current.get(pageNumber);\n    if (!state) return;\n\n    // 取消正在进行的渲染\n    if (state.renderTask) {\n      state.renderTask.cancel();\n      state.renderTask = null;\n    }\n\n    // 清理 canvas\n    const canvas = state.element.querySelector('canvas');\n    if (canvas) {\n      const ctx = canvas.getContext('2d');\n      if (ctx) {\n        ctx.clearRect(0, 0, canvas.width, canvas.height);\n      }\n      canvas.remove();\n    }\n\n    state.element.innerHTML = '';\n    state.rendered = false;\n    state.rendering = false;\n  }, []);\n\n  // 初始化页面占位符\n  // 构建大纲-页码映射\n  const buildOutlinePageMap = async (items: PdfOutlineItem[], pdfDoc: PdfDocumentProxy, depth = 0) => {\n    for (let i = 0; i < items.length; i++) {\n      const item = items[i];\n      const itemKey = `${item.title}-${i}-${depth}`;\n\n      try {\n        let pageNumber: number | null = null;\n        const dest = item.dest;\n\n        if (typeof dest === 'string') {\n          const namedDest = await (pdfDoc as any).getDestination?.(dest);\n          if (namedDest && namedDest[0] && typeof namedDest[0] === 'object') {\n            pageNumber = await (pdfDoc as any).getPageIndex?.(namedDest[0]) + 1;\n          }\n        } else if (Array.isArray(dest) && dest[0] && typeof dest[0] === 'object') {\n          pageNumber = await (pdfDoc as any).getPageIndex?.(dest[0]) + 1;\n        }\n\n        if (pageNumber !== null && pageNumber > 0) {\n          outlinePageMapRef.current.set(itemKey, pageNumber);\n        }\n\n        if (item.items && item.items.length > 0) {\n          await buildOutlinePageMap(item.items, pdfDoc, depth + 1);\n        }\n      } catch {\n        // 静默失败，某些大纲项可能无法映射到页码\n      }\n    }\n  };\n\n  // 根据当前页码更新激活的大纲项\n  const updateActiveOutlineByPage = useCallback((page: number) => {\n    let closestItem: string | null = null;\n    let closestDistance = Infinity;\n\n    outlinePageMapRef.current.forEach((itemPage, itemKey) => {\n      if (itemPage <= page) {\n        const distance = page - itemPage;\n        if (distance < closestDistance) {\n          closestDistance = distance;\n          closestItem = itemKey;\n        }\n      }\n    });\n\n    if (closestItem !== activeOutlineItem) {\n      setActiveOutlineItem(closestItem);\n    }\n  }, [activeOutlineItem]);\n\n  // 监听页码变化，更新大纲高亮\n  useEffect(() => {\n    if (currentPage > 0 && outlinePageMapRef.current.size > 0) {\n      updateActiveOutlineByPage(currentPage);\n    }\n  }, [currentPage, updateActiveOutlineByPage]);\n\n  const initPagePlaceholders = useCallback(() => {\n    if (!pdfDocRef.current || !scrollContainerRef.current) return;\n\n    const wrapper = scrollContainerRef.current.querySelector('.pdf-pages') as HTMLDivElement | null;\n    if (!wrapper) return;\n\n    wrapper.innerHTML = '';\n    pageStatesRef.current.clear();\n\n    for (let i = 1; i <= numPages; i++) {\n      const pageDiv = document.createElement('div');\n      pageDiv.className = 'rfp-pdf-page-placeholder rfp-relative rfp-flex rfp-justify-center';\n      pageDiv.setAttribute('data-page-number', String(i));\n      wrapper.appendChild(pageDiv);\n\n      pageStatesRef.current.set(i, {\n        element: pageDiv,\n        rendered: false,\n        rendering: false,\n        renderTask: null,\n      });\n\n      // 观察页面元素\n      if (observerRef.current) {\n        observerRef.current.observe(pageDiv);\n      }\n    }\n  }, [numPages]);\n\n  // 加载 PDF 文档\n  const loadPdf = useCallback(async () => {\n    setError(null);\n    setIsLoading(true);\n    setNumPages(0);\n\n    if (pdfDocRef.current) {\n      try {\n        pdfDocRef.current.destroy();\n      } catch {\n        // ignore\n      }\n      pdfDocRef.current = null;\n    }\n\n    try {\n      // 准备 worker（浏览器用 CDN worker 线程；Electron 走主线程 worker 以复用 polyfill）\n      // 若用户已通过 configurePdfjs 显式配置 workerSrc，则尊重其配置\n      await preparePdfWorker();\n\n      const loadingTask = pdfjsLib.getDocument({\n        url,\n        ...getPdfDocumentOptions(),\n      });\n      pdfDocRef.current = await loadingTask.promise as unknown as PdfDocumentProxy;\n      const total = pdfDocRef.current.numPages;\n\n      setNumPages(total);\n      setCurrentPage(1);\n\n      // 提取大纲\n      try {\n        const outlineData = await pdfDocRef.current.getOutline();\n        if (outlineData) {\n          setOutline(outlineData);\n          // 构建大纲-页码映射\n          outlinePageMapRef.current.clear();\n          await buildOutlinePageMap(outlineData, pdfDocRef.current);\n        }\n      } catch (err) {\n        console.warn('PDF 大纲提取失败:', err);\n      }\n\n      setIsLoading(false);\n    } catch (err) {\n      console.error('PDF 加载错误:', err);\n      setError(t('pdf.load_failed'));\n      setIsLoading(false);\n    }\n  }, [url, t]);\n\n  // 滚动处理\n  const handleScroll = useCallback(() => {\n    if (!scrollContainerRef.current || pageStatesRef.current.size === 0) return;\n\n    const container = scrollContainerRef.current;\n    const scrollTop = container.scrollTop;\n    const containerHeight = container.clientHeight;\n    const scrollCenter = scrollTop + containerHeight / 2;\n\n    let currentVisiblePage = 1;\n    let minDistance = Infinity;\n\n    pageStatesRef.current.forEach((state, pageNumber) => {\n      const rect = state.element.getBoundingClientRect();\n      const containerRect = container.getBoundingClientRect();\n      const pageCenter = rect.top - containerRect.top + rect.height / 2 + scrollTop;\n      const distance = Math.abs(pageCenter - scrollCenter);\n\n      if (distance < minDistance) {\n        minDistance = distance;\n        currentVisiblePage = pageNumber;\n      }\n    });\n\n    if (currentVisiblePage !== currentPage) {\n      setCurrentPage(currentVisiblePage);\n    }\n  }, [currentPage]);\n\n  // 初始化 IntersectionObserver\n  useEffect(() => {\n    observerRef.current = new IntersectionObserver(\n      (entries) => {\n        entries.forEach((entry) => {\n          const pageNumber = Number(entry.target.getAttribute('data-page-number'));\n          if (!pageNumber) return;\n\n          if (entry.isIntersecting) {\n            // 页面进入视口，渲染\n            renderPage(pageNumber, zoom);\n          } else {\n            // 页面离开视口，清理\n            const state = pageStatesRef.current.get(pageNumber);\n            if (state && state.rendered) {\n              clearPageCanvas(pageNumber);\n            }\n          }\n        });\n      },\n      {\n        root: scrollContainerRef.current,\n        rootMargin: '500px 0px',\n        threshold: 0,\n      }\n    );\n\n    return () => {\n      if (observerRef.current) {\n        observerRef.current.disconnect();\n        observerRef.current = null;\n      }\n    };\n  }, [zoom, renderPage, clearPageCanvas]);\n\n  // 监听 URL 变化\n  useEffect(() => {\n    // 只有 URL 有效时才加载（避免空字符串或已 revoke 的 blob URL）\n    if (url) {\n      loadPdf();\n    }\n  }, [url, loadPdf]);\n\n  // 监听 numPages 变化，初始化占位符\n  useEffect(() => {\n    if (numPages > 0) {\n      // 等待 DOM 更新后初始化占位符\n      setTimeout(() => {\n        initPagePlaceholders();\n      }, 0);\n    }\n  }, [numPages, initPagePlaceholders]);\n\n  // 监听 zoom 变化（防抖）\n  useEffect(() => {\n    const timer = setTimeout(() => {\n      // 清理所有已渲染页面\n      pageStatesRef.current.forEach((state, pageNumber) => {\n        if (state.rendered) {\n          clearPageCanvas(pageNumber);\n        }\n      });\n\n      // 触发重新渲染\n      if (observerRef.current && scrollContainerRef.current) {\n        pageStatesRef.current.forEach((state) => {\n          observerRef.current?.unobserve(state.element);\n          observerRef.current?.observe(state.element);\n        });\n      }\n    }, 150);\n\n    return () => clearTimeout(timer);\n  }, [zoom, clearPageCanvas]);\n\n  // 监听滚动事件\n  useEffect(() => {\n    const container = scrollContainerRef.current;\n    if (!container) return;\n\n    container.addEventListener('scroll', handleScroll);\n    return () => container.removeEventListener('scroll', handleScroll);\n  }, [handleScroll]);\n\n  // 清理\n  useEffect(() => {\n    return () => {\n      // 清理所有渲染任务\n      pageStatesRef.current.forEach((state) => {\n        if (state.renderTask) {\n          state.renderTask.cancel();\n        }\n      });\n      pageStatesRef.current.clear();\n\n      if (pdfDocRef.current) {\n        try {\n          pdfDocRef.current.destroy();\n        } catch {\n          // ignore\n        }\n        pdfDocRef.current = null;\n      }\n    };\n  }, []);\n\n  // 处理大纲点击跳转\n  const handleOutlineClick = useCallback(async (dest: any, itemKey: string, onClose?: () => void) => {\n    if (!pdfDocRef.current || !scrollContainerRef.current) return;\n\n    try {\n      let pageNumber: number;\n\n      if (typeof dest === 'string') {\n        // 命名目标\n        const namedDest = await (pdfDocRef.current as any).getDestination(dest);\n        if (namedDest && namedDest[0]) {\n          const pageRef = namedDest[0];\n          pageNumber = await (pdfDocRef.current as any).getPageIndex(pageRef) + 1;\n        } else {\n          return;\n        }\n      } else if (Array.isArray(dest) && dest[0]) {\n        // 直接页面引用\n        const pageRef = dest[0];\n        pageNumber = await (pdfDocRef.current as any).getPageIndex(pageRef) + 1;\n      } else {\n        return;\n      }\n\n      // 设置激活项\n      setActiveOutlineItem(itemKey);\n\n      // 滚动到目标页面\n      const pages = scrollContainerRef.current.querySelectorAll('[data-page-number]');\n      const targetPage = pages[pageNumber - 1];\n      if (targetPage) {\n        targetPage.scrollIntoView({ behavior: 'smooth', block: 'start' });\n      }\n\n      // 跳转后自动关闭侧边栏\n      if (onClose) {\n        setTimeout(() => onClose(), 300);\n      }\n    } catch (err) {\n      console.error('大纲跳转失败:', err);\n    }\n  }, []);\n\n  // 渲染大纲项\n  const renderOutlineItems = (items: PdfOutlineItem[], depth = 0, onClose?: () => void): React.ReactNode => {\n    return (\n      <ul style={{ marginLeft: depth > 0 ? 16 : 0 }}>\n        {items.map((item, i) => {\n          const itemKey = `${item.title}-${i}-${depth}`;\n          const isActive = activeOutlineItem === itemKey;\n          return (\n            <li key={itemKey}>\n              <button\n                onClick={() => handleOutlineClick(item.dest, itemKey, onClose)}\n                className={`rfp-w-full rfp-text-left rfp-py-2 rfp-px-3 rfp-text-sm rfp-rounded rfp-transition-all rfp-truncate ${\n                  isActive\n                    ? 'rfp-bg-surface-2 rfp-text-fg-primary rfp-font-medium'\n                    : 'rfp-text-fg-secondary hover:rfp-text-fg-primary hover:rfp-bg-surface-2'\n                }`}\n                title={item.title}\n              >\n                {item.title}\n              </button>\n              {item.items && item.items.length > 0 && renderOutlineItems(item.items, depth + 1, onClose)}\n            </li>\n          );\n        })}\n      </ul>\n    );\n  };\n\n  // 工具栏事件处理\n  const handleZoomIn = useCallback(() => {\n    setZoom(z => Math.min(z + 0.1, 3));\n  }, []);\n\n  const handleZoomOut = useCallback(() => {\n    setZoom(z => Math.max(z - 0.1, 0.5));\n  }, []);\n\n  const handleReset = useCallback(() => {\n    setZoom(1);\n  }, []);\n\n  const handlePrevPage = useCallback(() => {\n    if (!scrollContainerRef.current) return;\n    const container = scrollContainerRef.current;\n    const pages = container.querySelectorAll('[data-page-number]');\n    const targetPage = pages[Math.max(0, currentPage - 2)];\n    if (targetPage) {\n      targetPage.scrollIntoView({ behavior: 'smooth', block: 'start' });\n    }\n  }, [currentPage]);\n\n  const handleNextPage = useCallback(() => {\n    if (!scrollContainerRef.current) return;\n    const container = scrollContainerRef.current;\n    const pages = container.querySelectorAll('[data-page-number]');\n    const targetPage = pages[Math.min(pages.length - 1, currentPage)];\n    if (targetPage) {\n      targetPage.scrollIntoView({ behavior: 'smooth', block: 'start' });\n    }\n  }, [currentPage, numPages]);\n\n  const handleToggleOutline = useCallback(() => {\n    setShowOutline(prev => !prev);\n  }, []);\n\n  // 工具栏配置\n  const getToolbarGroups = useCallback((): ToolbarGroup[] => {\n    const groups: ToolbarGroup[] = [];\n\n    // 大纲按钮（如果有大纲）\n    if (outline.length > 0) {\n      groups.push({\n        items: [\n          { type: 'button', icon: <Menu className=\"rfp-w-4 rfp-h-4\" />, tooltip: t('toolbar.outline'), action: handleToggleOutline, active: showOutline },\n        ],\n      });\n    }\n\n    // 翻页\n    groups.push({\n      items: [\n        { type: 'button', icon: <ChevronLeft className=\"rfp-w-4 rfp-h-4\" />, tooltip: t('toolbar.prev_page'), action: handlePrevPage, disabled: currentPage <= 1 },\n        { type: 'text', content: `${currentPage} / ${numPages}`, minWidth: '4rem' },\n        { type: 'button', icon: <ChevronRight className=\"rfp-w-4 rfp-h-4\" />, tooltip: t('toolbar.next_page'), action: handleNextPage, disabled: currentPage >= numPages },\n      ],\n    });\n\n    // 缩放\n    groups.push({\n      items: [\n        { type: 'button', icon: <ZoomOut className=\"rfp-w-4 rfp-h-4\" />, tooltip: t('toolbar.zoom_out'), action: handleZoomOut, disabled: zoom <= 0.5 },\n        { type: 'text', content: `${Math.round(zoom * 100)}%`, minWidth: '3rem' },\n        { type: 'button', icon: <ZoomIn className=\"rfp-w-4 rfp-h-4\" />, tooltip: t('toolbar.zoom_in'), action: handleZoomIn, disabled: zoom >= 3 },\n      ],\n    });\n\n    // 重置\n    groups.push({\n      items: [\n        { type: 'button', icon: <RefreshCw className=\"rfp-w-4 rfp-h-4\" />, tooltip: t('toolbar.reset'), action: handleReset },\n      ],\n    });\n\n    return groups;\n  }, [zoom, currentPage, numPages, showOutline, outline.length, t, handleZoomIn, handleZoomOut, handlePrevPage, handleNextPage, handleToggleOutline, handleReset]);\n\n  // 暴露接口给父组件\n  useImperativeHandle(ref, () => ({\n    getToolbarGroups,\n    onToolbarChange: (listener: () => void) => {\n      listenersRef.current.add(listener);\n      return () => listenersRef.current.delete(listener);\n    },\n  }), [getToolbarGroups]);\n\n  return (\n    <div ref={containerRef} className=\"rfp-relative rfp-w-full rfp-h-full\">\n      {/* 大纲侧边栏 */}\n      {outline.length > 0 && (\n        <div\n          className=\"rfp-absolute rfp-inset-0 rfp-z-20 rfp-flex rfp-transition-opacity rfp-duration-300\"\n          style={{\n            opacity: showOutline ? 1 : 0,\n            pointerEvents: showOutline ? 'auto' : 'none',\n          }}\n        >\n          <div\n            className=\"rfp-w-72 rfp-max-w-[80%] rfp-h-full rfp-bg-surface-overlay rfp-backdrop-blur-xl rfp-border-r rfp-border-line-weak rfp-flex rfp-flex-col rfp-shadow-2xl rfp-transition-transform rfp-duration-300\"\n            style={{ transform: showOutline ? 'translateX(0)' : 'translateX(-100%)' }}\n          >\n            <div className=\"rfp-flex rfp-items-center rfp-justify-between rfp-px-4 rfp-py-3 rfp-border-b rfp-border-line-weak rfp-flex-shrink-0\">\n              <span className=\"rfp-text-fg-primary rfp-font-medium rfp-text-sm\">{t('toolbar.outline')}</span>\n              <button\n                onClick={() => setShowOutline(false)}\n                className=\"rfp-text-fg-tertiary hover:rfp-text-fg-primary rfp-transition-colors\"\n              >\n                <X className=\"rfp-w-4 rfp-h-4\" />\n              </button>\n            </div>\n            <div className=\"rfp-flex-1 rfp-overflow-y-auto rfp-py-4 rfp-px-1\">\n              {renderOutlineItems(outline, 0, () => setShowOutline(false))}\n            </div>\n          </div>\n          <div\n            className=\"rfp-flex-1 rfp-transition-opacity rfp-duration-300\"\n            style={{ background: showOutline ? 'rgba(0,0,0,0.3)' : 'transparent' }}\n            onClick={() => setShowOutline(false)}\n          />\n        </div>\n      )}\n\n      <div\n        ref={scrollContainerRef}\n        className=\"rfp-pdf-container rfp-w-full rfp-h-full rfp-overflow-auto rfp-py-6 rfp-px-4\"\n      >\n        {error && (\n          <RendererError message={error} />\n        )}\n\n        {!error && isLoading && (\n          <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-min-h-screen\">\n            <div className=\"rfp-w-12 rfp-h-12 rfp-border-4 rfp-border-line-strong rfp-border-t-spinner-head rfp-rounded-full rfp-animate-spin\" />\n          </div>\n        )}\n\n        {!error && (\n          <div className=\"rfp-flex rfp-flex-col rfp-items-center\">\n            <div className=\"pdf-pages rfp-flex rfp-flex-col rfp-gap-4\" />\n          </div>\n        )}\n      </div>\n    </div>\n  );\n});\n","import { useState, useEffect, useRef, useCallback, forwardRef, useImperativeHandle } from 'react';\nimport mammoth from 'mammoth';\nimport { useTranslator } from '../../i18n/LocaleContext';\nimport { useFetcher } from '../../RequestContext';\nimport { RendererError } from '../RendererError';\nimport type { RendererHandle } from '../base.types';\n\ninterface DocxRendererProps {\n  url: string;\n}\n\n// A4 page dimensions (96dpi)\nconst PAGE_HEIGHT = 1123;\nconst PAGE_PADDING_Y = 60;\nconst PAGE_PADDING_X = 50;\nconst PAGE_CONTENT_HEIGHT = PAGE_HEIGHT - PAGE_PADDING_Y * 2;\nconst PAGE_GAP = 24;\n\nconst contentStyle: React.CSSProperties = {\n  fontFamily: 'system-ui, -apple-system, sans-serif',\n  lineHeight: '1.8',\n  color: '#333',\n};\n\nexport const DocxRenderer = forwardRef<RendererHandle, DocxRendererProps>(({ url }, ref) => {\n  const t = useTranslator();\n  const fetcher = useFetcher();\n  const [html, setHtml] = useState<string>('');\n  const [loading, setLoading] = useState(true);\n  const [error, setError] = useState<string | null>(null);\n  const [pages, setPages] = useState<string[]>([]);\n  const measureRef = useRef<HTMLDivElement>(null);\n\n  useEffect(() => {\n    // 只有 URL 有效时才加载（避免空字符串或已 revoke 的 blob URL）\n    if (!url) return;\n\n    const loadDocx = async () => {\n      setLoading(true);\n      setError(null);\n      setHtml('');\n\n      try {\n        const response = await fetcher(url);\n        if (!response.ok) {\n          throw new Error('文件加载失败');\n        }\n\n        const arrayBuffer = await response.arrayBuffer();\n        const result = await mammoth.convertToHtml({ arrayBuffer });\n        setHtml(result.value);\n      } catch (err) {\n        console.error('Docx 解析错误:', err);\n        setError(t('docx.parse_failed'));\n      } finally {\n        setLoading(false);\n      }\n    };\n\n    loadDocx();\n  }, [url, fetcher, t]);\n\n  const paginate = useCallback(() => {\n    const container = measureRef.current;\n    if (!container || !html) return;\n\n    const children = Array.from(container.children) as HTMLElement[];\n    if (children.length === 0) {\n      setPages([html]);\n      return;\n    }\n\n    const result: string[][] = [[]];\n    let currentPageUsed = 0;\n\n    for (const child of children) {\n      const h = child.offsetHeight;\n\n      // If adding this block would exceed page content area and page isn't empty,\n      // start a new page\n      if (currentPageUsed > 0 && currentPageUsed + h > PAGE_CONTENT_HEIGHT) {\n        result.push([]);\n        currentPageUsed = 0;\n      }\n\n      result[result.length - 1].push(child.outerHTML);\n      currentPageUsed += h;\n    }\n\n    // At least one page\n    if (result.length === 0) result.push([]);\n\n    setPages(result.map(blocks => blocks.join('')));\n  }, [html]);\n\n  useEffect(() => {\n    if (!html || !measureRef.current) return;\n    requestAnimationFrame(() => {\n      paginate();\n    });\n  }, [html, paginate]);\n\n  // 暴露接口给父组件\n  useImperativeHandle(ref, () => ({\n    getToolbarGroups: () => [],\n  }), []);\n\n  if (loading) {\n    return (\n      <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full\">\n        <div className=\"rfp-w-12 rfp-h-12 rfp-border-4 rfp-border-line-strong rfp-border-t-spinner-head rfp-rounded-full rfp-animate-spin\" />\n      </div>\n    );\n  }\n\n  if (error) {\n    return <RendererError message={error} />;\n  }\n\n  return (\n    <div\n      className=\"rfp-docx-container rfp-w-full rfp-h-full rfp-overflow-auto rfp-py-6 rfp-px-4\"\n      style={{ background: 'rgba(0, 0, 0, 0.15)' }}\n    >\n      {/* Hidden measurement div — same width as page content area */}\n      <div\n        ref={measureRef}\n        dangerouslySetInnerHTML={{ __html: html }}\n        style={{\n          ...contentStyle,\n          position: 'absolute',\n          visibility: 'hidden',\n          width: `${794 - PAGE_PADDING_X * 2}px`,\n          pointerEvents: 'none',\n        }}\n      />\n\n      {/* Visible pages */}\n      <div\n        className=\"rfp-flex rfp-flex-col rfp-items-center\"\n        style={{ gap: `${PAGE_GAP}px` }}\n      >\n        {(pages.length > 0 ? pages : ['']).map((pageHtml, i) => (\n          <div\n            key={i}\n            style={{\n              width: '100%',\n              maxWidth: '794px',\n              minHeight: `${PAGE_HEIGHT}px`,\n              background: 'white',\n              boxShadow: '0 4px 6px rgba(0, 0, 0, 0.07), 0 10px 20px rgba(0, 0, 0, 0.10)',\n              flexShrink: 0,\n              padding: `${PAGE_PADDING_Y}px ${PAGE_PADDING_X}px`,\n            }}\n          >\n            <div\n              dangerouslySetInnerHTML={{ __html: pageHtml }}\n              style={contentStyle}\n            />\n          </div>\n        ))}\n      </div>\n    </div>\n  );\n});\n","/* global document */\n/* global window */\nclass Element {\n  constructor(tag, className = '') {\n    if (typeof tag === 'string') {\n      this.el = document.createElement(tag);\n      this.el.className = className;\n    } else {\n      this.el = tag;\n    }\n    this.data = {};\n  }\n\n  data(key, value) {\n    if (value !== undefined) {\n      this.data[key] = value;\n      return this;\n    }\n    return this.data[key];\n  }\n\n  on(eventNames, handler) {\n    const [fen, ...oen] = eventNames.split('.');\n    let eventName = fen;\n    if (eventName === 'mousewheel' && /Firefox/i.test(window.navigator.userAgent)) {\n      eventName = 'DOMMouseScroll';\n    }\n    this.el.addEventListener(eventName, (evt) => {\n      handler(evt);\n      for (let i = 0; i < oen.length; i += 1) {\n        const k = oen[i];\n        if (k === 'left' && evt.button !== 0) {\n          return;\n        }\n        if (k === 'right' && evt.button !== 2) {\n          return;\n        }\n        if (k === 'stop') {\n          evt.stopPropagation();\n        }\n      }\n    });\n    return this;\n  }\n\n  offset(value) {\n    if (value !== undefined) {\n      Object.keys(value).forEach((k) => {\n        this.css(k, `${value[k]}px`);\n      });\n      return this;\n    }\n    const {\n      offsetTop, offsetLeft, offsetHeight, offsetWidth,\n    } = this.el;\n    return {\n      top: offsetTop,\n      left: offsetLeft,\n      height: offsetHeight,\n      width: offsetWidth,\n    };\n  }\n\n  scroll(v) {\n    const { el } = this;\n    if (v !== undefined) {\n      if (v.left !== undefined) {\n        el.scrollLeft = v.left;\n      }\n      if (v.top !== undefined) {\n        el.scrollTop = v.top;\n      }\n    }\n    return { left: el.scrollLeft, top: el.scrollTop };\n  }\n\n  box() {\n    return this.el.getBoundingClientRect();\n  }\n\n  parent() {\n    return new Element(this.el.parentNode);\n  }\n\n  children(...eles) {\n    if (arguments.length === 0) {\n      return this.el.childNodes;\n    }\n    eles.forEach(ele => this.child(ele));\n    return this;\n  }\n\n  removeChild(el) {\n    this.el.removeChild(el);\n  }\n\n  /*\n  first() {\n    return this.el.firstChild;\n  }\n\n  last() {\n    return this.el.lastChild;\n  }\n\n  remove(ele) {\n    return this.el.removeChild(ele);\n  }\n\n  prepend(ele) {\n    const { el } = this;\n    if (el.children.length > 0) {\n      el.insertBefore(ele, el.firstChild);\n    } else {\n      el.appendChild(ele);\n    }\n    return this;\n  }\n\n  prev() {\n    return this.el.previousSibling;\n  }\n\n  next() {\n    return this.el.nextSibling;\n  }\n  */\n\n  child(arg) {\n    let ele = arg;\n    if (typeof arg === 'string') {\n      ele = document.createTextNode(arg);\n    } else if (arg instanceof Element) {\n      ele = arg.el;\n    }\n    this.el.appendChild(ele);\n    return this;\n  }\n\n  contains(ele) {\n    return this.el.contains(ele);\n  }\n\n  className(v) {\n    if (v !== undefined) {\n      this.el.className = v;\n      return this;\n    }\n    return this.el.className;\n  }\n\n  addClass(name) {\n    this.el.classList.add(name);\n    return this;\n  }\n\n  hasClass(name) {\n    return this.el.classList.contains(name);\n  }\n\n  removeClass(name) {\n    this.el.classList.remove(name);\n    return this;\n  }\n\n  toggle(cls = 'active') {\n    return this.toggleClass(cls);\n  }\n\n  toggleClass(name) {\n    return this.el.classList.toggle(name);\n  }\n\n  active(flag = true, cls = 'active') {\n    if (flag) this.addClass(cls);\n    else this.removeClass(cls);\n    return this;\n  }\n\n  checked(flag = true) {\n    this.active(flag, 'checked');\n    return this;\n  }\n\n  disabled(flag = true) {\n    if (flag) this.addClass('disabled');\n    else this.removeClass('disabled');\n    return this;\n  }\n\n  // key, value\n  // key\n  // {k, v}...\n  attr(key, value) {\n    if (value !== undefined) {\n      this.el.setAttribute(key, value);\n    } else {\n      if (typeof key === 'string') {\n        return this.el.getAttribute(key);\n      }\n      Object.keys(key).forEach((k) => {\n        this.el.setAttribute(k, key[k]);\n      });\n    }\n    return this;\n  }\n\n  removeAttr(key) {\n    this.el.removeAttribute(key);\n    return this;\n  }\n\n  html(content) {\n    if (content !== undefined) {\n      this.el.innerHTML = content;\n      return this;\n    }\n    return this.el.innerHTML;\n  }\n\n  val(v) {\n    if (v !== undefined) {\n      this.el.value = v;\n      return this;\n    }\n    return this.el.value;\n  }\n\n  focus() {\n    this.el.focus();\n  }\n\n  cssRemoveKeys(...keys) {\n    keys.forEach(k => this.el.style.removeProperty(k));\n    return this;\n  }\n\n  // css( propertyName )\n  // css( propertyName, value )\n  // css( properties )\n  css(name, value) {\n    if (value === undefined && typeof name !== 'string') {\n      Object.keys(name).forEach((k) => {\n        this.el.style[k] = name[k];\n      });\n      return this;\n    }\n    if (value !== undefined) {\n      this.el.style[name] = value;\n      return this;\n    }\n    return this.el.style[name];\n  }\n\n  computedStyle() {\n    return window.getComputedStyle(this.el, null);\n  }\n\n  show() {\n    this.css('display', 'block');\n    return this;\n  }\n\n  hide() {\n    this.css('display', 'none');\n    return this;\n  }\n}\n\nconst h = (tag, className = '') => new Element(tag, className);\n\nexport {\n  Element,\n  h,\n};\n","import './_.prototypes';\n\nconst alphabets = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];\n\n/** index number 2 letters\n * @example stringAt(26) ==> 'AA'\n * @date 2019-10-10\n * @export\n * @param {number} index\n * @returns {string}\n */\nexport function stringAt(index) {\n  let str = '';\n  let cindex = index;\n  while (cindex >= alphabets.length) {\n    cindex /= alphabets.length;\n    cindex -= 1;\n    str += alphabets[parseInt(cindex, 10) % alphabets.length];\n  }\n  const last = index % alphabets.length;\n  str += alphabets[last];\n  return str;\n}\n\n/** translate letter in A1-tag to number\n * @date 2019-10-10\n * @export\n * @param {string} str \"AA\" in A1-tag \"AA1\"\n * @returns {number}\n */\nexport function indexAt(str) {\n  let ret = 0;\n  for (let i = 0; i < str.length - 1; i += 1) {\n    const cindex = str.charCodeAt(i) - 65;\n    const exponet = str.length - 1 - i;\n    ret += (alphabets.length ** exponet) + (alphabets.length * cindex);\n  }\n  ret += str.charCodeAt(str.length - 1) - 65;\n  return ret;\n}\n\n// B10 => x,y\n/** translate A1-tag to XY-tag\n * @date 2019-10-10\n * @export\n * @param {tagA1} src\n * @returns {tagXY}\n */\nexport function expr2xy(src) {\n  let x = '';\n  let y = '';\n  for (let i = 0; i < src.length; i += 1) {\n    if (src.charAt(i) >= '0' && src.charAt(i) <= '9') {\n      y += src.charAt(i);\n    } else {\n      x += src.charAt(i);\n    }\n  }\n  return [indexAt(x), parseInt(y, 10) - 1];\n}\n\n/** translate XY-tag to A1-tag\n * @example x,y => B10\n * @date 2019-10-10\n * @export\n * @param {number} x\n * @param {number} y\n * @returns {tagA1}\n */\nexport function xy2expr(x, y) {\n  return `${stringAt(x)}${y + 1}`;\n}\n\n/** translate A1-tag src by (xn, yn)\n * @date 2019-10-10\n * @export\n * @param {tagA1} src\n * @param {number} xn\n * @param {number} yn\n * @returns {tagA1}\n */\nexport function expr2expr(src, xn, yn, condition = () => true) {\n  if (xn === 0 && yn === 0) return src;\n  const [x, y] = expr2xy(src);\n  if (!condition(x, y)) return src;\n  return xy2expr(x + xn, y + yn);\n}\n\nexport default {\n  stringAt,\n  indexAt,\n  expr2xy,\n  xy2expr,\n  expr2expr,\n};\n","import { xy2expr, expr2xy } from './alphabet';\n\nclass CellRange {\n  constructor(sri, sci, eri, eci, w = 0, h = 0) {\n    this.sri = sri;\n    this.sci = sci;\n    this.eri = eri;\n    this.eci = eci;\n    this.w = w;\n    this.h = h;\n  }\n\n  set(sri, sci, eri, eci) {\n    this.sri = sri;\n    this.sci = sci;\n    this.eri = eri;\n    this.eci = eci;\n  }\n\n  multiple() {\n    return this.eri - this.sri > 0 || this.eci - this.sci > 0;\n  }\n\n  // cell-index: ri, ci\n  // cell-ref: A10\n  includes(...args) {\n    let [ri, ci] = [0, 0];\n    if (args.length === 1) {\n      [ci, ri] = expr2xy(args[0]);\n    } else if (args.length === 2) {\n      [ri, ci] = args;\n    }\n    const {\n      sri, sci, eri, eci,\n    } = this;\n    return sri <= ri && ri <= eri && sci <= ci && ci <= eci;\n  }\n\n  each(cb, rowFilter = () => true) {\n    const {\n      sri, sci, eri, eci,\n    } = this;\n    for (let i = sri; i <= eri; i += 1) {\n      if (rowFilter(i)) {\n        for (let j = sci; j <= eci; j += 1) {\n          cb(i, j);\n        }\n      }\n    }\n  }\n\n  contains(other) {\n    return this.sri <= other.sri\n      && this.sci <= other.sci\n      && this.eri >= other.eri\n      && this.eci >= other.eci;\n  }\n\n  // within\n  within(other) {\n    return this.sri >= other.sri\n      && this.sci >= other.sci\n      && this.eri <= other.eri\n      && this.eci <= other.eci;\n  }\n\n  // disjoint\n  disjoint(other) {\n    return this.sri > other.eri\n      || this.sci > other.eci\n      || other.sri > this.eri\n      || other.sci > this.eci;\n  }\n\n  // intersects\n  intersects(other) {\n    return this.sri <= other.eri\n      && this.sci <= other.eci\n      && other.sri <= this.eri\n      && other.sci <= this.eci;\n  }\n\n  // union\n  union(other) {\n    const {\n      sri, sci, eri, eci,\n    } = this;\n    return new CellRange(\n      other.sri < sri ? other.sri : sri,\n      other.sci < sci ? other.sci : sci,\n      other.eri > eri ? other.eri : eri,\n      other.eci > eci ? other.eci : eci,\n    );\n  }\n\n  // intersection\n  // intersection(other) {}\n\n  // Returns Array<CellRange> that represents that part of this that does not intersect with other\n  // difference\n  difference(other) {\n    const ret = [];\n    const addRet = (sri, sci, eri, eci) => {\n      ret.push(new CellRange(sri, sci, eri, eci));\n    };\n    const {\n      sri, sci, eri, eci,\n    } = this;\n    const dsr = other.sri - sri;\n    const dsc = other.sci - sci;\n    const der = eri - other.eri;\n    const dec = eci - other.eci;\n    if (dsr > 0) {\n      addRet(sri, sci, other.sri - 1, eci);\n      if (der > 0) {\n        addRet(other.eri + 1, sci, eri, eci);\n        if (dsc > 0) {\n          addRet(other.sri, sci, other.eri, other.sci - 1);\n        }\n        if (dec > 0) {\n          addRet(other.sri, other.eci + 1, other.eri, eci);\n        }\n      } else {\n        if (dsc > 0) {\n          addRet(other.sri, sci, eri, other.sci - 1);\n        }\n        if (dec > 0) {\n          addRet(other.sri, other.eci + 1, eri, eci);\n        }\n      }\n    } else if (der > 0) {\n      addRet(other.eri + 1, sci, eri, eci);\n      if (dsc > 0) {\n        addRet(sri, sci, other.eri, other.sci - 1);\n      }\n      if (dec > 0) {\n        addRet(sri, other.eci + 1, other.eri, eci);\n      }\n    }\n    if (dsc > 0) {\n      addRet(sri, sci, eri, other.sci - 1);\n      if (dec > 0) {\n        addRet(sri, other.eri + 1, eri, eci);\n        if (dsr > 0) {\n          addRet(sri, other.sci, other.sri - 1, other.eci);\n        }\n        if (der > 0) {\n          addRet(other.sri + 1, other.sci, eri, other.eci);\n        }\n      } else {\n        if (dsr > 0) {\n          addRet(sri, other.sci, other.sri - 1, eci);\n        }\n        if (der > 0) {\n          addRet(other.sri + 1, other.sci, eri, eci);\n        }\n      }\n    } else if (dec > 0) {\n      addRet(eri, other.eci + 1, eri, eci);\n      if (dsr > 0) {\n        addRet(sri, sci, other.sri - 1, other.eci);\n      }\n      if (der > 0) {\n        addRet(other.eri + 1, sci, eri, other.eci);\n      }\n    }\n    return ret;\n  }\n\n  size() {\n    return [\n      this.eri - this.sri + 1,\n      this.eci - this.sci + 1,\n    ];\n  }\n\n  toString() {\n    const {\n      sri, sci, eri, eci,\n    } = this;\n    let ref = xy2expr(sci, sri);\n    if (this.multiple()) {\n      ref = `${ref}:${xy2expr(eci, eri)}`;\n    }\n    return ref;\n  }\n\n  clone() {\n    const {\n      sri, sci, eri, eci, w, h,\n    } = this;\n    return new CellRange(sri, sci, eri, eci, w, h);\n  }\n\n  /*\n  toJSON() {\n    return this.toString();\n  }\n  */\n\n  equals(other) {\n    return this.eri === other.eri\n      && this.eci === other.eci\n      && this.sri === other.sri\n      && this.sci === other.sci;\n  }\n\n  static valueOf(ref) {\n    // B1:B8, B1 => 1 x 1 cell range\n    const refs = ref.split(':');\n    const [sci, sri] = expr2xy(refs[0]);\n    let [eri, eci] = [sri, sci];\n    if (refs.length > 1) {\n      [eci, eri] = expr2xy(refs[1]);\n    }\n    return new CellRange(sri, sci, eri, eci);\n  }\n}\n\nexport default CellRange;\n\nexport {\n  CellRange,\n};\n","import { CellRange } from './cell_range';\n\nexport default class Selector {\n  constructor() {\n    this.range = new CellRange(0, 0, 0, 0);\n    this.ri = 0;\n    this.ci = 0;\n  }\n\n  multiple() {\n    return this.range.multiple();\n  }\n\n  setIndexes(ri, ci) {\n    this.ri = ri;\n    this.ci = ci;\n  }\n\n  size() {\n    return this.range.size();\n  }\n}\n","export default class Scroll {\n  constructor() {\n    this.x = 0; // left\n    this.y = 0; // top\n    this.ri = 0; // cell row-index\n    this.ci = 0; // cell col-index\n  }\n}\n","// import helper from '../helper';\n\nexport default class History {\n  constructor() {\n    this.undoItems = [];\n    this.redoItems = [];\n  }\n\n  add(data) {\n    this.undoItems.push(JSON.stringify(data));\n    this.redoItems = [];\n  }\n\n  canUndo() {\n    return this.undoItems.length > 0;\n  }\n\n  canRedo() {\n    return this.redoItems.length > 0;\n  }\n\n  undo(currentd, cb) {\n    const { undoItems, redoItems } = this;\n    if (this.canUndo()) {\n      redoItems.push(JSON.stringify(currentd));\n      cb(JSON.parse(undoItems.pop()));\n    }\n  }\n\n  redo(currentd, cb) {\n    const { undoItems, redoItems } = this;\n    if (this.canRedo()) {\n      undoItems.push(JSON.stringify(currentd));\n      cb(JSON.parse(redoItems.pop()));\n    }\n  }\n}\n","export default class Clipboard {\n  constructor() {\n    this.range = null; // CellRange\n    this.state = 'clear';\n  }\n\n  copy(cellRange) {\n    this.range = cellRange;\n    this.state = 'copy';\n    return this;\n  }\n\n  cut(cellRange) {\n    this.range = cellRange;\n    this.state = 'cut';\n    return this;\n  }\n\n  isCopy() {\n    return this.state === 'copy';\n  }\n\n  isCut() {\n    return this.state === 'cut';\n  }\n\n  isClear() {\n    return this.state === 'clear';\n  }\n\n  clear() {\n    this.range = null;\n    this.state = 'clear';\n  }\n}\n","import { CellRange } from './cell_range';\n// operator: all|eq|neq|gt|gte|lt|lte|in|be\n// value:\n//   in => []\n//   be => [min, max]\nclass Filter {\n  constructor(ci, operator, value) {\n    this.ci = ci;\n    this.operator = operator;\n    this.value = value;\n  }\n\n  set(operator, value) {\n    this.operator = operator;\n    this.value = value;\n  }\n\n  includes(v) {\n    const { operator, value } = this;\n    if (operator === 'all') {\n      return true;\n    }\n    if (operator === 'in') {\n      return value.includes(v);\n    }\n    return false;\n  }\n\n  vlength() {\n    const { operator, value } = this;\n    if (operator === 'in') {\n      return value.length;\n    }\n    return 0;\n  }\n\n  getData() {\n    const { ci, operator, value } = this;\n    return { ci, operator, value };\n  }\n}\n\nclass Sort {\n  constructor(ci, order) {\n    this.ci = ci;\n    this.order = order;\n  }\n\n  asc() {\n    return this.order === 'asc';\n  }\n\n  desc() {\n    return this.order === 'desc';\n  }\n}\n\nexport default class AutoFilter {\n  constructor() {\n    this.ref = null;\n    this.filters = [];\n    this.sort = null;\n  }\n\n  setData({ ref, filters, sort }) {\n    if (ref != null) {\n      this.ref = ref;\n      this.filters = filters.map(it => new Filter(it.ci, it.operator, it.value));\n      if (sort) {\n        this.sort = new Sort(sort.ci, sort.order);\n      }\n    }\n  }\n\n  getData() {\n    if (this.active()) {\n      const { ref, filters, sort } = this;\n      return { ref, filters: filters.map(it => it.getData()), sort };\n    }\n    return {};\n  }\n\n  addFilter(ci, operator, value) {\n    const filter = this.getFilter(ci);\n    if (filter == null) {\n      this.filters.push(new Filter(ci, operator, value));\n    } else {\n      filter.set(operator, value);\n    }\n  }\n\n  setSort(ci, order) {\n    this.sort = order ? new Sort(ci, order) : null;\n  }\n\n  includes(ri, ci) {\n    if (this.active()) {\n      return this.hrange().includes(ri, ci);\n    }\n    return false;\n  }\n\n  getSort(ci) {\n    const { sort } = this;\n    if (sort && sort.ci === ci) {\n      return sort;\n    }\n    return null;\n  }\n\n  getFilter(ci) {\n    const { filters } = this;\n    for (let i = 0; i < filters.length; i += 1) {\n      if (filters[i].ci === ci) {\n        return filters[i];\n      }\n    }\n    return null;\n  }\n\n  filteredRows(getCell) {\n    // const ary = [];\n    // let lastri = 0;\n    const rset = new Set();\n    const fset = new Set();\n    if (this.active()) {\n      const { sri, eri } = this.range();\n      const { filters } = this;\n      for (let ri = sri + 1; ri <= eri; ri += 1) {\n        for (let i = 0; i < filters.length; i += 1) {\n          const filter = filters[i];\n          const cell = getCell(ri, filter.ci);\n          const ctext = cell ? cell.text : '';\n          if (!filter.includes(ctext)) {\n            rset.add(ri);\n            break;\n          } else {\n            fset.add(ri);\n          }\n        }\n      }\n    }\n    return { rset, fset };\n  }\n\n  items(ci, getCell) {\n    const m = {};\n    if (this.active()) {\n      const { sri, eri } = this.range();\n      for (let ri = sri + 1; ri <= eri; ri += 1) {\n        const cell = getCell(ri, ci);\n        if (cell !== null && !/^\\s*$/.test(cell.text)) {\n          const key = cell.text;\n          const cnt = (m[key] || 0) + 1;\n          m[key] = cnt;\n        } else {\n          m[''] = (m[''] || 0) + 1;\n        }\n      }\n    }\n    return m;\n  }\n\n  range() {\n    return CellRange.valueOf(this.ref);\n  }\n\n  hrange() {\n    const r = this.range();\n    r.eri = r.sri;\n    return r;\n  }\n\n  clear() {\n    this.ref = null;\n    this.filters = [];\n    this.sort = null;\n  }\n\n  active() {\n    return this.ref !== null;\n  }\n}\n","import { CellRange } from './cell_range';\n\nclass Merges {\n  constructor(d = []) {\n    this._ = d;\n  }\n\n  forEach(cb) {\n    this._.forEach(cb);\n  }\n\n  deleteWithin(cr) {\n    this._ = this._.filter(it => !it.within(cr));\n  }\n\n  getFirstIncludes(ri, ci) {\n    for (let i = 0; i < this._.length; i += 1) {\n      const it = this._[i];\n      if (it.includes(ri, ci)) {\n        return it;\n      }\n    }\n    return null;\n  }\n\n  filterIntersects(cellRange) {\n    return new Merges(this._.filter(it => it.intersects(cellRange)));\n  }\n\n  intersects(cellRange) {\n    for (let i = 0; i < this._.length; i += 1) {\n      const it = this._[i];\n      if (it.intersects(cellRange)) {\n        // console.log('intersects');\n        return true;\n      }\n    }\n    return false;\n  }\n\n  union(cellRange) {\n    let cr = cellRange;\n    this._.forEach((it) => {\n      if (it.intersects(cr)) {\n        cr = it.union(cr);\n      }\n    });\n    return cr;\n  }\n\n  add(cr) {\n    this.deleteWithin(cr);\n    this._.push(cr);\n  }\n\n  // type: row | column\n  shift(type, index, n, cbWithin) {\n    this._.forEach((cellRange) => {\n      const {\n        sri, sci, eri, eci,\n      } = cellRange;\n      const range = cellRange;\n      if (type === 'row') {\n        if (sri >= index) {\n          range.sri += n;\n          range.eri += n;\n        } else if (sri < index && index <= eri) {\n          range.eri += n;\n          cbWithin(sri, sci, n, 0);\n        }\n      } else if (type === 'column') {\n        if (sci >= index) {\n          range.sci += n;\n          range.eci += n;\n        } else if (sci < index && index <= eci) {\n          range.eci += n;\n          cbWithin(sri, sci, 0, n);\n        }\n      }\n    });\n  }\n\n  move(cellRange, rn, cn) {\n    this._.forEach((it1) => {\n      const it = it1;\n      if (it.within(cellRange)) {\n        it.eri += rn;\n        it.sri += rn;\n        it.sci += cn;\n        it.eci += cn;\n      }\n    });\n  }\n\n  setData(merges) {\n    this._ = merges.map(merge => CellRange.valueOf(merge));\n    return this;\n  }\n\n  getData() {\n    return this._.map(merge => merge.toString());\n  }\n}\n\nexport default {};\nexport {\n  Merges,\n};\n","/* eslint-disable no-param-reassign */\nfunction cloneDeep(obj) {\n  return JSON.parse(JSON.stringify(obj));\n}\n\nconst mergeDeep = (object = {}, ...sources) => {\n  sources.forEach((source) => {\n    Object.keys(source).forEach((key) => {\n      const v = source[key];\n      // console.log('k:', key, ', v:', source[key], typeof v, v instanceof Object);\n      if (typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean') {\n        object[key] = v;\n      } else if (typeof v !== 'function' && !Array.isArray(v) && v instanceof Object) {\n        object[key] = object[key] || {};\n        mergeDeep(object[key], v);\n      } else {\n        object[key] = v;\n      }\n    });\n  });\n  // console.log('::', object);\n  return object;\n};\n\nfunction equals(obj1, obj2) {\n  const keys = Object.keys(obj1);\n  if (keys.length !== Object.keys(obj2).length) return false;\n  for (let i = 0; i < keys.length; i += 1) {\n    const k = keys[i];\n    const v1 = obj1[k];\n    const v2 = obj2[k];\n    if (v2 === undefined) return false;\n    if (typeof v1 === 'string' || typeof v1 === 'number' || typeof v1 === 'boolean') {\n      if (v1 !== v2) return false;\n    } else if (Array.isArray(v1)) {\n      if (v1.length !== v2.length) return false;\n      for (let ai = 0; ai < v1.length; ai += 1) {\n        if (!equals(v1[ai], v2[ai])) return false;\n      }\n    } else if (typeof v1 !== 'function' && !Array.isArray(v1) && v1 instanceof Object) {\n      if (!equals(v1, v2)) return false;\n    }\n  }\n  return true;\n}\n\n/*\n  objOrAry: obejct or Array\n  cb: (value, index | key) => { return value }\n*/\nconst sum = (objOrAry, cb = value => value) => {\n  let total = 0;\n  let size = 0;\n  Object.keys(objOrAry).forEach((key) => {\n    total += cb(objOrAry[key], key);\n    size += 1;\n  });\n  return [total, size];\n};\n\nfunction deleteProperty(obj, property) {\n  const oldv = obj[`${property}`];\n  delete obj[`${property}`];\n  return oldv;\n}\n\nfunction rangeReduceIf(min, max, inits, initv, ifv, getv) {\n  let s = inits;\n  let v = initv;\n  let i = min;\n  for (; i < max; i += 1) {\n    if (s > ifv) break;\n    v = getv(i);\n    s += v;\n  }\n  return [i, s - v, v];\n}\n\nfunction rangeSum(min, max, getv) {\n  let s = 0;\n  for (let i = min; i < max; i += 1) {\n    s += getv(i);\n  }\n  return s;\n}\n\nfunction rangeEach(min, max, cb) {\n  for (let i = min; i < max; i += 1) {\n    cb(i);\n  }\n}\n\nfunction arrayEquals(a1, a2) {\n  if (a1.length === a2.length) {\n    for (let i = 0; i < a1.length; i += 1) {\n      if (a1[i] !== a2[i]) return false;\n    }\n  } else return false;\n  return true;\n}\n\nfunction digits(a) {\n  const v = `${a}`;\n  let ret = 0;\n  let flag = false;\n  for (let i = 0; i < v.length; i += 1) {\n    if (flag === true) ret += 1;\n    if (v.charAt(i) === '.') flag = true;\n  }\n  return ret;\n}\n\nexport function numberCalc(type, a1, a2) {\n  if (Number.isNaN(a1) || Number.isNaN(a2)) {\n    return a1 + type + a2;\n  }\n  const al1 = digits(a1);\n  const al2 = digits(a2);\n  const num1 = Number(a1);\n  const num2 = Number(a2);\n  let ret = 0;\n  if (type === '-') {\n    ret = num1 - num2;\n  } else if (type === '+') {\n    ret = num1 + num2;\n  } else if (type === '*') {\n    ret = num1 * num2;\n  } else if (type === '/') {\n    ret = num1 / num2;\n    if (digits(ret) > 5) return ret.toFixed(2);\n    return ret;\n  }\n  return ret.toFixed(Math.max(al1, al2));\n}\n\nexport default {\n  cloneDeep,\n  merge: (...sources) => mergeDeep({}, ...sources),\n  equals,\n  arrayEquals,\n  sum,\n  rangeEach,\n  rangeSum,\n  rangeReduceIf,\n  deleteProperty,\n  numberCalc,\n};\n","import helper from './helper';\nimport { expr2expr } from './alphabet';\n\nclass Rows {\n  constructor({ len, height }) {\n    this._ = {};\n    this.len = len;\n    // default row height\n    this.height = height;\n  }\n\n  getHeight(ri) {\n    if (this.isHide(ri)) return 0;\n    const row = this.get(ri);\n    if (row && row.height) {\n      return row.height;\n    }\n    return this.height;\n  }\n\n  setHeight(ri, v) {\n    const row = this.getOrNew(ri);\n    row.height = v;\n  }\n\n  unhide(idx) {\n    let index = idx;\n    while (index > 0) {\n      index -= 1;\n      if (this.isHide(index)) {\n        this.setHide(index, false);\n      } else break;\n    }\n  }\n\n  isHide(ri) {\n    const row = this.get(ri);\n    return row && row.hide;\n  }\n\n  setHide(ri, v) {\n    const row = this.getOrNew(ri);\n    if (v === true) row.hide = true;\n    else delete row.hide;\n  }\n\n  setStyle(ri, style) {\n    const row = this.getOrNew(ri);\n    row.style = style;\n  }\n\n  sumHeight(min, max, exceptSet) {\n    return helper.rangeSum(min, max, (i) => {\n      if (exceptSet && exceptSet.has(i)) return 0;\n      return this.getHeight(i);\n    });\n  }\n\n  totalHeight() {\n    return this.sumHeight(0, this.len);\n  }\n\n  get(ri) {\n    return this._[ri];\n  }\n\n  getOrNew(ri) {\n    this._[ri] = this._[ri] || { cells: {} };\n    return this._[ri];\n  }\n\n  getCell(ri, ci) {\n    const row = this.get(ri);\n    if (row !== undefined && row.cells !== undefined && row.cells[ci] !== undefined) {\n      return row.cells[ci];\n    }\n    return null;\n  }\n\n  getCellMerge(ri, ci) {\n    const cell = this.getCell(ri, ci);\n    if (cell && cell.merge) return cell.merge;\n    return [0, 0];\n  }\n\n  getCellOrNew(ri, ci) {\n    const row = this.getOrNew(ri);\n    row.cells[ci] = row.cells[ci] || {};\n    return row.cells[ci];\n  }\n\n  // what: all | text | format\n  setCell(ri, ci, cell, what = 'all') {\n    const row = this.getOrNew(ri);\n    if (what === 'all') {\n      row.cells[ci] = cell;\n    } else if (what === 'text') {\n      row.cells[ci] = row.cells[ci] || {};\n      row.cells[ci].text = cell.text;\n    } else if (what === 'format') {\n      row.cells[ci] = row.cells[ci] || {};\n      row.cells[ci].style = cell.style;\n      if (cell.merge) row.cells[ci].merge = cell.merge;\n    }\n  }\n\n  setCellText(ri, ci, text) {\n    const cell = this.getCellOrNew(ri, ci);\n    if (cell.editable !== false) cell.text = text;\n  }\n\n  // what: all | format | text\n  copyPaste(srcCellRange, dstCellRange, what, autofill = false, cb = () => {}) {\n    const {\n      sri, sci, eri, eci,\n    } = srcCellRange;\n    const dsri = dstCellRange.sri;\n    const dsci = dstCellRange.sci;\n    const deri = dstCellRange.eri;\n    const deci = dstCellRange.eci;\n    const [rn, cn] = srcCellRange.size();\n    const [drn, dcn] = dstCellRange.size();\n    // console.log(srcIndexes, dstIndexes);\n    let isAdd = true;\n    let dn = 0;\n    if (deri < sri || deci < sci) {\n      isAdd = false;\n      if (deri < sri) dn = drn;\n      else dn = dcn;\n    }\n    for (let i = sri; i <= eri; i += 1) {\n      if (this._[i]) {\n        for (let j = sci; j <= eci; j += 1) {\n          if (this._[i].cells && this._[i].cells[j]) {\n            for (let ii = dsri; ii <= deri; ii += rn) {\n              for (let jj = dsci; jj <= deci; jj += cn) {\n                const nri = ii + (i - sri);\n                const nci = jj + (j - sci);\n                const ncell = helper.cloneDeep(this._[i].cells[j]);\n                // ncell.text\n                if (autofill && ncell && ncell.text && ncell.text.length > 0) {\n                  const { text } = ncell;\n                  let n = (jj - dsci) + (ii - dsri) + 2;\n                  if (!isAdd) {\n                    n -= dn + 1;\n                  }\n                  if (text[0] === '=') {\n                    ncell.text = text.replace(/[a-zA-Z]{1,3}\\d+/g, (word) => {\n                      let [xn, yn] = [0, 0];\n                      if (sri === dsri) {\n                        xn = n - 1;\n                        // if (isAdd) xn -= 1;\n                      } else {\n                        yn = n - 1;\n                      }\n                      if (/^\\d+$/.test(word)) return word;\n                      return expr2expr(word, xn, yn);\n                    });\n                  } else if ((rn <= 1 && cn > 1 && (dsri > eri || deri < sri))\n                    || (cn <= 1 && rn > 1 && (dsci > eci || deci < sci))\n                    || (rn <= 1 && cn <= 1)) {\n                    const result = /[\\\\.\\d]+$/.exec(text);\n                    // console.log('result:', result);\n                    if (result !== null) {\n                      const index = Number(result[0]) + n - 1;\n                      ncell.text = text.substring(0, result.index) + index;\n                    }\n                  }\n                }\n                this.setCell(nri, nci, ncell, what);\n                cb(nri, nci, ncell);\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n\n  cutPaste(srcCellRange, dstCellRange) {\n    const ncellmm = {};\n    this.each((ri) => {\n      this.eachCells(ri, (ci) => {\n        let nri = parseInt(ri, 10);\n        let nci = parseInt(ci, 10);\n        if (srcCellRange.includes(ri, ci)) {\n          nri = dstCellRange.sri + (nri - srcCellRange.sri);\n          nci = dstCellRange.sci + (nci - srcCellRange.sci);\n        }\n        ncellmm[nri] = ncellmm[nri] || { cells: {} };\n        ncellmm[nri].cells[nci] = this._[ri].cells[ci];\n      });\n    });\n    this._ = ncellmm;\n  }\n\n  // src: Array<Array<String>>\n  paste(src, dstCellRange) {\n    if (src.length <= 0) return;\n    const { sri, sci } = dstCellRange;\n    src.forEach((row, i) => {\n      const ri = sri + i;\n      row.forEach((cell, j) => {\n        const ci = sci + j;\n        this.setCellText(ri, ci, cell);\n      });\n    });\n  }\n\n  insert(sri, n = 1) {\n    const ndata = {};\n    this.each((ri, row) => {\n      let nri = parseInt(ri, 10);\n      if (nri >= sri) {\n        nri += n;\n        this.eachCells(ri, (ci, cell) => {\n          if (cell.text && cell.text[0] === '=') {\n            cell.text = cell.text.replace(/[a-zA-Z]{1,3}\\d+/g, word => expr2expr(word, 0, n, (x, y) => y >= sri));\n          }\n        });\n      }\n      ndata[nri] = row;\n    });\n    this._ = ndata;\n    this.len += n;\n  }\n\n  delete(sri, eri) {\n    const n = eri - sri + 1;\n    const ndata = {};\n    this.each((ri, row) => {\n      const nri = parseInt(ri, 10);\n      if (nri < sri) {\n        ndata[nri] = row;\n      } else if (ri > eri) {\n        ndata[nri - n] = row;\n        this.eachCells(ri, (ci, cell) => {\n          if (cell.text && cell.text[0] === '=') {\n            cell.text = cell.text.replace(/[a-zA-Z]{1,3}\\d+/g, word => expr2expr(word, 0, -n, (x, y) => y > eri));\n          }\n        });\n      }\n    });\n    this._ = ndata;\n    this.len -= n;\n  }\n\n  insertColumn(sci, n = 1) {\n    this.each((ri, row) => {\n      const rndata = {};\n      this.eachCells(ri, (ci, cell) => {\n        let nci = parseInt(ci, 10);\n        if (nci >= sci) {\n          nci += n;\n          if (cell.text && cell.text[0] === '=') {\n            cell.text = cell.text.replace(/[a-zA-Z]{1,3}\\d+/g, word => expr2expr(word, n, 0, x => x >= sci));\n          }\n        }\n        rndata[nci] = cell;\n      });\n      row.cells = rndata;\n    });\n  }\n\n  deleteColumn(sci, eci) {\n    const n = eci - sci + 1;\n    this.each((ri, row) => {\n      const rndata = {};\n      this.eachCells(ri, (ci, cell) => {\n        const nci = parseInt(ci, 10);\n        if (nci < sci) {\n          rndata[nci] = cell;\n        } else if (nci > eci) {\n          rndata[nci - n] = cell;\n          if (cell.text && cell.text[0] === '=') {\n            cell.text = cell.text.replace(/[a-zA-Z]{1,3}\\d+/g, word => expr2expr(word, -n, 0, x => x > eci));\n          }\n        }\n      });\n      row.cells = rndata;\n    });\n  }\n\n  // what: all | text | format | merge\n  deleteCells(cellRange, what = 'all') {\n    cellRange.each((i, j) => {\n      this.deleteCell(i, j, what);\n    });\n  }\n\n  // what: all | text | format | merge\n  deleteCell(ri, ci, what = 'all') {\n    const row = this.get(ri);\n    if (row !== null) {\n      const cell = this.getCell(ri, ci);\n      if (cell !== null && cell.editable !== false) {\n        if (what === 'all') {\n          delete row.cells[ci];\n        } else if (what === 'text') {\n          if (cell.text) delete cell.text;\n          if (cell.value) delete cell.value;\n        } else if (what === 'format') {\n          if (cell.style !== undefined) delete cell.style;\n          if (cell.merge) delete cell.merge;\n        } else if (what === 'merge') {\n          if (cell.merge) delete cell.merge;\n        }\n      }\n    }\n  }\n\n  maxCell() {\n    const keys = Object.keys(this._);\n    const ri = keys[keys.length - 1];\n    const col = this._[ri];\n    if (col) {\n      const { cells } = col;\n      const ks = Object.keys(cells);\n      const ci = ks[ks.length - 1];\n      return [parseInt(ri, 10), parseInt(ci, 10)];\n    }\n    return [0, 0];\n  }\n\n  each(cb) {\n    Object.entries(this._).forEach(([ri, row]) => {\n      cb(ri, row);\n    });\n  }\n\n  eachCells(ri, cb) {\n    if (this._[ri] && this._[ri].cells) {\n      Object.entries(this._[ri].cells).forEach(([ci, cell]) => {\n        cb(ci, cell);\n      });\n    }\n  }\n\n  setData(d) {\n    if (d.len) {\n      this.len = d.len;\n      delete d.len;\n    }\n    this._ = d;\n  }\n\n  getData() {\n    const { len } = this;\n    return Object.assign({ len }, this._);\n  }\n}\n\nexport default {};\nexport {\n  Rows,\n};\n","import helper from './helper';\n\nclass Cols {\n  constructor({\n    len, width, indexWidth, minWidth,\n  }) {\n    this._ = {};\n    this.len = len;\n    this.width = width;\n    this.indexWidth = indexWidth;\n    this.minWidth = minWidth;\n  }\n\n  setData(d) {\n    if (d.len) {\n      this.len = d.len;\n      delete d.len;\n    }\n    this._ = d;\n  }\n\n  getData() {\n    const { len } = this;\n    return Object.assign({ len }, this._);\n  }\n\n  getWidth(i) {\n    if (this.isHide(i)) return 0;\n    const col = this._[i];\n    if (col && col.width) {\n      return col.width;\n    }\n    return this.width;\n  }\n\n  getOrNew(ci) {\n    this._[ci] = this._[ci] || {};\n    return this._[ci];\n  }\n\n  setWidth(ci, width) {\n    const col = this.getOrNew(ci);\n    col.width = width;\n  }\n\n  unhide(idx) {\n    let index = idx;\n    while (index > 0) {\n      index -= 1;\n      if (this.isHide(index)) {\n        this.setHide(index, false);\n      } else break;\n    }\n  }\n\n  isHide(ci) {\n    const col = this._[ci];\n    return col && col.hide;\n  }\n\n  setHide(ci, v) {\n    const col = this.getOrNew(ci);\n    if (v === true) col.hide = true;\n    else delete col.hide;\n  }\n\n  setStyle(ci, style) {\n    const col = this.getOrNew(ci);\n    col.style = style;\n  }\n\n  sumWidth(min, max) {\n    return helper.rangeSum(min, max, i => this.getWidth(i));\n  }\n\n  totalWidth() {\n    return this.sumWidth(0, this.len);\n  }\n}\n\nexport default {};\nexport {\n  Cols,\n};\n","export default {\n  toolbar: {\n    undo: 'Undo',\n    redo: 'Redo',\n    print: 'Print',\n    paintformat: 'Paint format',\n    clearformat: 'Clear format',\n    format: 'Format',\n    fontName: 'Font',\n    fontSize: 'Font size',\n    fontBold: 'Font bold',\n    fontItalic: 'Font italic',\n    underline: 'Underline',\n    strike: 'Strike',\n    color: 'Text color',\n    bgcolor: 'Fill color',\n    border: 'Borders',\n    merge: 'Merge cells',\n    align: 'Horizontal align',\n    valign: 'Vertical align',\n    textwrap: 'Text wrapping',\n    freeze: 'Freeze cell',\n    autofilter: 'Filter',\n    formula: 'Functions',\n    more: 'More',\n  },\n  contextmenu: {\n    copy: 'Copy',\n    cut: 'Cut',\n    paste: 'Paste',\n    pasteValue: 'Paste values only',\n    pasteFormat: 'Paste format only',\n    hide: 'Hide',\n    insertRow: 'Insert row',\n    insertColumn: 'Insert column',\n    deleteSheet: 'Delete',\n    deleteRow: 'Delete row',\n    deleteColumn: 'Delete column',\n    deleteCell: 'Delete cell',\n    deleteCellText: 'Delete cell text',\n    validation: 'Data validations',\n    cellprintable: 'Enable export',\n    cellnonprintable: 'Disable export',\n    celleditable: 'Enable editing',\n    cellnoneditable: 'Disable editing',\n  },\n  print: {\n    size: 'Paper size',\n    orientation: 'Page orientation',\n    orientations: ['Landscape', 'Portrait'],\n  },\n  format: {\n    normal: 'Normal',\n    text: 'Plain Text',\n    number: 'Number',\n    percent: 'Percent',\n    rmb: 'RMB',\n    usd: 'USD',\n    eur: 'EUR',\n    date: 'Date',\n    time: 'Time',\n    datetime: 'Date time',\n    duration: 'Duration',\n  },\n  formula: {\n    sum: 'Sum',\n    average: 'Average',\n    max: 'Max',\n    min: 'Min',\n    _if: 'IF',\n    and: 'AND',\n    or: 'OR',\n    concat: 'Concat',\n  },\n  validation: {\n    required: 'it must be required',\n    notMatch: 'it not match its validation rule',\n    between: 'it is between {} and {}',\n    notBetween: 'it is not between {} and {}',\n    notIn: 'it is not in list',\n    equal: 'it equal to {}',\n    notEqual: 'it not equal to {}',\n    lessThan: 'it less than {}',\n    lessThanEqual: 'it less than or equal to {}',\n    greaterThan: 'it greater than {}',\n    greaterThanEqual: 'it greater than or equal to {}',\n  },\n  error: {\n    pasteForMergedCell: 'Unable to do this for merged cells',\n  },\n  calendar: {\n    weeks: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n    months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n  },\n  button: {\n    next: 'Next',\n    cancel: 'Cancel',\n    remove: 'Remove',\n    save: 'Save',\n    ok: 'OK',\n  },\n  sort: {\n    desc: 'Sort Z -> A',\n    asc: 'Sort A -> Z',\n  },\n  filter: {\n    empty: 'empty',\n  },\n  dataValidation: {\n    mode: 'Mode',\n    range: 'Cell Range',\n    criteria: 'Criteria',\n    modeType: {\n      cell: 'Cell',\n      column: 'Colun',\n      row: 'Row',\n    },\n    type: {\n      list: 'List',\n      number: 'Number',\n      date: 'Date',\n      phone: 'Phone',\n      email: 'Email',\n    },\n    operator: {\n      be: 'between',\n      nbe: 'not betwwen',\n      lt: 'less than',\n      lte: 'less than or equal to',\n      gt: 'greater than',\n      gte: 'greater than or equal to',\n      eq: 'equal to',\n      neq: 'not equal to',\n    },\n  },\n};\n","/* global window */\nimport en from './en';\n\n// Defines the fallback language as English\nlet $languages = ['en'];\nconst $messages = {\n  en,\n};\n\nfunction translate(key, messages) {\n  if (messages) {\n    // Return the translation from the first language in the languages array\n    // that has a value for the provided key.\n    for (const lang of $languages) {\n      if (!messages[lang]) break;\n\n      let message = messages[lang];\n\n      // Splits the key at '.' except where escaped as '\\.'\n      const keys = key.match(/(?:\\\\.|[^.])+/g);\n\n      for (let i = 0; i < keys.length; i += 1) {\n        const property = keys[i];\n        const value = message[property];\n\n        // If value doesn't exist, try next language\n        if (!value) break;\n\n        if (i === keys.length - 1) return value;\n\n        // Move down to the next level of the messages object\n        message = value;\n      }\n    }\n  }\n\n  return undefined;\n}\n\nfunction t(key) {\n  let v = translate(key, $messages);\n  if (!v && window && window.x_spreadsheet && window.x_spreadsheet.$messages) {\n    v = translate(key, window.x_spreadsheet.$messages);\n  }\n  return v || '';\n}\n\nfunction tf(key) {\n  return () => t(key);\n}\n\n// If clearLangList is set to false, lang will be added to the front of the\n// languages array. The languages in the language array are searched in order\n// to find a translation. This allows the use of other languages as a fallback\n// if lang is missing some keys. The language array is preloaded with English.\n// To set the languages array to only include lang, set clearLangList to true.\nfunction locale(lang, message, clearLangList = false) {\n  if (clearLangList) {\n    $languages = [lang];\n  } else {\n    // Append to front of array.\n    // Translation method will use the first language in the list that has a\n    // matching key.\n    $languages.unshift(lang);\n  }\n\n  if (message) {\n    $messages[lang] = message;\n  }\n}\n\nexport default {\n  t,\n};\n\nexport {\n  locale,\n  t,\n  tf,\n};\n","import { t } from '../locale/locale';\nimport helper from './helper';\n\nconst rules = {\n  phone: /^[1-9]\\d{10}$/,\n  email: /w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*/,\n};\n\nfunction returnMessage(flag, key, ...arg) {\n  let message = '';\n  if (!flag) {\n    message = t(`validation.${key}`, ...arg);\n  }\n  return [flag, message];\n}\n\nexport default class Validator {\n  // operator: b|nb|eq|neq|lt|lte|gt|gte\n  // type: date|number|list|phone|email\n  constructor(type, required, value, operator) {\n    this.required = required;\n    this.value = value;\n    this.type = type;\n    this.operator = operator;\n    this.message = '';\n  }\n\n  parseValue(v) {\n    const { type } = this;\n    if (type === 'date') {\n      return new Date(v);\n    }\n    if (type === 'number') {\n      return Number(v);\n    }\n    return v;\n  }\n\n  equals(other) {\n    let flag = this.type === other.type\n      && this.required === other.required\n      && this.operator === other.operator;\n    if (flag) {\n      if (Array.isArray(this.value)) {\n        flag = helper.arrayEquals(this.value, other.value);\n      } else {\n        flag = this.value === other.value;\n      }\n    }\n    return flag;\n  }\n\n  values() {\n    return this.value.split(',');\n  }\n\n  validate(v) {\n    const {\n      required, operator, value, type,\n    } = this;\n    if (required && /^\\s*$/.test(v)) {\n      return returnMessage(false, 'required');\n    }\n    if (/^\\s*$/.test(v)) return [true];\n    if (rules[type] && !rules[type].test(v)) {\n      return returnMessage(false, 'notMatch');\n    }\n    if (type === 'list') {\n      return returnMessage(this.values().includes(v), 'notIn');\n    }\n    if (operator) {\n      const v1 = this.parseValue(v);\n      if (operator === 'be') {\n        const [min, max] = value;\n        return returnMessage(\n          v1 >= this.parseValue(min) && v1 <= this.parseValue(max),\n          'between',\n          min,\n          max,\n        );\n      }\n      if (operator === 'nbe') {\n        const [min, max] = value;\n        return returnMessage(\n          v1 < this.parseValue(min) || v1 > this.parseValue(max),\n          'notBetween',\n          min,\n          max,\n        );\n      }\n      if (operator === 'eq') {\n        return returnMessage(\n          v1 === this.parseValue(value),\n          'equal',\n          value,\n        );\n      }\n      if (operator === 'neq') {\n        return returnMessage(\n          v1 !== this.parseValue(value),\n          'notEqual',\n          value,\n        );\n      }\n      if (operator === 'lt') {\n        return returnMessage(\n          v1 < this.parseValue(value),\n          'lessThan',\n          value,\n        );\n      }\n      if (operator === 'lte') {\n        return returnMessage(\n          v1 <= this.parseValue(value),\n          'lessThanEqual',\n          value,\n        );\n      }\n      if (operator === 'gt') {\n        return returnMessage(\n          v1 > this.parseValue(value),\n          'greaterThan',\n          value,\n        );\n      }\n      if (operator === 'gte') {\n        return returnMessage(\n          v1 >= this.parseValue(value),\n          'greaterThanEqual',\n          value,\n        );\n      }\n    }\n    return [true];\n  }\n}\n","import Validator from './validator';\nimport { CellRange } from './cell_range';\n\nclass Validation {\n  constructor(mode, refs, validator) {\n    this.refs = refs;\n    this.mode = mode; // cell\n    this.validator = validator;\n  }\n\n  includes(ri, ci) {\n    const { refs } = this;\n    for (let i = 0; i < refs.length; i += 1) {\n      const cr = CellRange.valueOf(refs[i]);\n      if (cr.includes(ri, ci)) return true;\n    }\n    return false;\n  }\n\n  addRef(ref) {\n    this.remove(CellRange.valueOf(ref));\n    this.refs.push(ref);\n  }\n\n  remove(cellRange) {\n    const nrefs = [];\n    this.refs.forEach((it) => {\n      const cr = CellRange.valueOf(it);\n      if (cr.intersects(cellRange)) {\n        const crs = cr.difference(cellRange);\n        crs.forEach(it1 => nrefs.push(it1.toString()));\n      } else {\n        nrefs.push(it);\n      }\n    });\n    this.refs = nrefs;\n  }\n\n  getData() {\n    const { refs, mode, validator } = this;\n    const {\n      type, required, operator, value,\n    } = validator;\n    return {\n      refs, mode, type, required, operator, value,\n    };\n  }\n\n  static valueOf({\n    refs, mode, type, required, operator, value,\n  }) {\n    return new Validation(mode, refs, new Validator(type, required, value, operator));\n  }\n}\nclass Validations {\n  constructor() {\n    this._ = [];\n    // ri_ci: errMessage\n    this.errors = new Map();\n  }\n\n  getError(ri, ci) {\n    return this.errors.get(`${ri}_${ci}`);\n  }\n\n  validate(ri, ci, text) {\n    const v = this.get(ri, ci);\n    const key = `${ri}_${ci}`;\n    const { errors } = this;\n    if (v !== null) {\n      const [flag, message] = v.validator.validate(text);\n      if (!flag) {\n        errors.set(key, message);\n      } else {\n        errors.delete(key);\n      }\n    } else {\n      errors.delete(key);\n    }\n    return true;\n  }\n\n  // type: date|number|phone|email|list\n  // validator: { required, value, operator }\n  add(mode, ref, {\n    type, required, value, operator,\n  }) {\n    const validator = new Validator(\n      type, required, value, operator,\n    );\n    const v = this.getByValidator(validator);\n    if (v !== null) {\n      v.addRef(ref);\n    } else {\n      this._.push(new Validation(mode, [ref], validator));\n    }\n  }\n\n  getByValidator(validator) {\n    for (let i = 0; i < this._.length; i += 1) {\n      const v = this._[i];\n      if (v.validator.equals(validator)) {\n        return v;\n      }\n    }\n    return null;\n  }\n\n  get(ri, ci) {\n    for (let i = 0; i < this._.length; i += 1) {\n      const v = this._[i];\n      if (v.includes(ri, ci)) return v;\n    }\n    return null;\n  }\n\n  remove(cellRange) {\n    this.each((it) => {\n      it.remove(cellRange);\n    });\n  }\n\n  each(cb) {\n    this._.forEach(it => cb(it));\n  }\n\n  getData() {\n    return this._.filter(it => it.refs.length > 0).map(it => it.getData());\n  }\n\n  setData(d) {\n    this._ = d.map(it => Validation.valueOf(it));\n  }\n}\n\nexport default {};\nexport {\n  Validations,\n};\n","/* global document */\n\nimport Selector from './selector';\nimport Scroll from './scroll';\nimport History from './history';\nimport Clipboard from './clipboard';\nimport AutoFilter from './auto_filter';\nimport { Merges } from './merge';\nimport helper from './helper';\nimport { Rows } from './row';\nimport { Cols } from './col';\nimport { Validations } from './validation';\nimport { CellRange } from './cell_range';\nimport { expr2xy, xy2expr } from './alphabet';\nimport { t } from '../locale/locale';\n\n// private methods\n/*\n * {\n *  name: ''\n *  freeze: [0, 0],\n *  formats: [],\n *  styles: [\n *    {\n *      bgcolor: '',\n *      align: '',\n *      valign: '',\n *      textwrap: false,\n *      strike: false,\n *      underline: false,\n *      color: '',\n *      format: 1,\n *      border: {\n *        left: [style, color],\n *        right: [style, color],\n *        top: [style, color],\n *        bottom: [style, color],\n *      },\n *      font: {\n *        name: 'Helvetica',\n *        size: 10,\n *        bold: false,\n *        italic: false,\n *      }\n *    }\n *  ],\n *  merges: [\n *    'A1:F11',\n *    ...\n *  ],\n *  rows: {\n *    1: {\n *      height: 50,\n *      style: 1,\n *      cells: {\n *        1: {\n *          style: 2,\n *          type: 'string',\n *          text: '',\n *          value: '', // cal result\n *        }\n *      }\n *    },\n *    ...\n *  },\n *  cols: {\n *    2: { width: 100, style: 1 }\n *  }\n * }\n */\nconst defaultSettings = {\n  mode: 'edit', // edit | read\n  view: {\n    height: () => document.documentElement.clientHeight,\n    width: () => document.documentElement.clientWidth,\n  },\n  showGrid: true,\n  showToolbar: true,\n  showContextmenu: true,\n  showBottomBar: true,\n  row: {\n    len: 100,\n    height: 25,\n  },\n  col: {\n    len: 26,\n    width: 100,\n    indexWidth: 60,\n    minWidth: 60,\n  },\n  style: {\n    bgcolor: '#ffffff',\n    align: 'left',\n    valign: 'middle',\n    textwrap: false,\n    strike: false,\n    underline: false,\n    color: '#0a0a0a',\n    font: {\n      name: 'Arial',\n      size: 10,\n      bold: false,\n      italic: false,\n    },\n    format: 'normal',\n  },\n};\n\nconst toolbarHeight = 41;\nconst bottombarHeight = 41;\n\n\n// Utility functions\nconst hasOwnProperty = (obj, name) => Object.prototype.hasOwnProperty.call(obj, name);\n\n\n// src: cellRange\n// dst: cellRange\nfunction canPaste(src, dst, error = () => {}) {\n  const { merges } = this;\n  const cellRange = dst.clone();\n  const [srn, scn] = src.size();\n  const [drn, dcn] = dst.size();\n  if (srn > drn) {\n    cellRange.eri = dst.sri + srn - 1;\n  }\n  if (scn > dcn) {\n    cellRange.eci = dst.sci + scn - 1;\n  }\n  if (merges.intersects(cellRange)) {\n    error(t('error.pasteForMergedCell'));\n    return false;\n  }\n  return true;\n}\nfunction copyPaste(srcCellRange, dstCellRange, what, autofill = false) {\n  const { rows, merges } = this;\n  // delete dest merge\n  if (what === 'all' || what === 'format') {\n    rows.deleteCells(dstCellRange, what);\n    merges.deleteWithin(dstCellRange);\n  }\n  rows.copyPaste(srcCellRange, dstCellRange, what, autofill, (ri, ci, cell) => {\n    if (cell && cell.merge) {\n      // console.log('cell:', ri, ci, cell);\n      const [rn, cn] = cell.merge;\n      if (rn <= 0 && cn <= 0) return;\n      merges.add(new CellRange(ri, ci, ri + rn, ci + cn));\n    }\n  });\n}\n\nfunction cutPaste(srcCellRange, dstCellRange) {\n  const { clipboard, rows, merges } = this;\n  rows.cutPaste(srcCellRange, dstCellRange);\n  merges.move(srcCellRange,\n    dstCellRange.sri - srcCellRange.sri,\n    dstCellRange.sci - srcCellRange.sci);\n  clipboard.clear();\n}\n\n// bss: { top, bottom, left, right }\nfunction setStyleBorder(ri, ci, bss) {\n  const { styles, rows } = this;\n  const cell = rows.getCellOrNew(ri, ci);\n  let cstyle = {};\n  if (cell.style !== undefined) {\n    cstyle = helper.cloneDeep(styles[cell.style]);\n  }\n  cstyle = helper.merge(cstyle, { border: bss });\n  cell.style = this.addStyle(cstyle);\n}\n\nfunction setStyleBorders({ mode, style, color }) {\n  const { styles, selector, rows } = this;\n  const {\n    sri, sci, eri, eci,\n  } = selector.range;\n  const multiple = !this.isSignleSelected();\n  if (!multiple) {\n    if (mode === 'inside' || mode === 'horizontal' || mode === 'vertical') {\n      return;\n    }\n  }\n  if (mode === 'outside' && !multiple) {\n    setStyleBorder.call(this, sri, sci, {\n      top: [style, color], bottom: [style, color], left: [style, color], right: [style, color],\n    });\n  } else if (mode === 'none') {\n    selector.range.each((ri, ci) => {\n      const cell = rows.getCell(ri, ci);\n      if (cell && cell.style !== undefined) {\n        const ns = helper.cloneDeep(styles[cell.style]);\n        delete ns.border;\n        // ['bottom', 'top', 'left', 'right'].forEach((prop) => {\n        //   if (ns[prop]) delete ns[prop];\n        // });\n        cell.style = this.addStyle(ns);\n      }\n    });\n  } else if (mode === 'all' || mode === 'inside' || mode === 'outside'\n    || mode === 'horizontal' || mode === 'vertical') {\n    const merges = [];\n    for (let ri = sri; ri <= eri; ri += 1) {\n      for (let ci = sci; ci <= eci; ci += 1) {\n        // jump merges -- start\n        const mergeIndexes = [];\n        for (let ii = 0; ii < merges.length; ii += 1) {\n          const [mri, mci, rn, cn] = merges[ii];\n          if (ri === mri + rn + 1) mergeIndexes.push(ii);\n          if (mri <= ri && ri <= mri + rn) {\n            if (ci === mci) {\n              ci += cn + 1;\n              break;\n            }\n          }\n        }\n        mergeIndexes.forEach(it => merges.splice(it, 1));\n        if (ci > eci) break;\n        // jump merges -- end\n        const cell = rows.getCell(ri, ci);\n        let [rn, cn] = [0, 0];\n        if (cell && cell.merge) {\n          [rn, cn] = cell.merge;\n          merges.push([ri, ci, rn, cn]);\n        }\n        const mrl = rn > 0 && ri + rn === eri;\n        const mcl = cn > 0 && ci + cn === eci;\n        let bss = {};\n        if (mode === 'all') {\n          bss = {\n            bottom: [style, color],\n            top: [style, color],\n            left: [style, color],\n            right: [style, color],\n          };\n        } else if (mode === 'inside') {\n          if (!mcl && ci < eci) bss.right = [style, color];\n          if (!mrl && ri < eri) bss.bottom = [style, color];\n        } else if (mode === 'horizontal') {\n          if (!mrl && ri < eri) bss.bottom = [style, color];\n        } else if (mode === 'vertical') {\n          if (!mcl && ci < eci) bss.right = [style, color];\n        } else if (mode === 'outside' && multiple) {\n          if (sri === ri) bss.top = [style, color];\n          if (mrl || eri === ri) bss.bottom = [style, color];\n          if (sci === ci) bss.left = [style, color];\n          if (mcl || eci === ci) bss.right = [style, color];\n        }\n        if (Object.keys(bss).length > 0) {\n          setStyleBorder.call(this, ri, ci, bss);\n        }\n        ci += cn;\n      }\n    }\n  } else if (mode === 'top' || mode === 'bottom') {\n    for (let ci = sci; ci <= eci; ci += 1) {\n      if (mode === 'top') {\n        setStyleBorder.call(this, sri, ci, { top: [style, color] });\n        ci += rows.getCellMerge(sri, ci)[1];\n      }\n      if (mode === 'bottom') {\n        setStyleBorder.call(this, eri, ci, { bottom: [style, color] });\n        ci += rows.getCellMerge(eri, ci)[1];\n      }\n    }\n  } else if (mode === 'left' || mode === 'right') {\n    for (let ri = sri; ri <= eri; ri += 1) {\n      if (mode === 'left') {\n        setStyleBorder.call(this, ri, sci, { left: [style, color] });\n        ri += rows.getCellMerge(ri, sci)[0];\n      }\n      if (mode === 'right') {\n        setStyleBorder.call(this, ri, eci, { right: [style, color] });\n        ri += rows.getCellMerge(ri, eci)[0];\n      }\n    }\n  }\n}\n\nfunction getCellRowByY(y, scrollOffsety) {\n  const { rows } = this;\n  const fsh = this.freezeTotalHeight();\n  // console.log('y:', y, ', fsh:', fsh);\n  let inits = rows.height;\n  if (fsh + rows.height < y) inits -= scrollOffsety;\n\n  // handle ri in autofilter\n  const frset = this.exceptRowSet;\n\n  let ri = 0;\n  let top = inits;\n  let { height } = rows;\n  for (; ri < rows.len; ri += 1) {\n    if (top > y) break;\n    if (!frset.has(ri)) {\n      height = rows.getHeight(ri);\n      top += height;\n    }\n  }\n  top -= height;\n  // console.log('ri:', ri, ', top:', top, ', height:', height);\n\n  if (top <= 0) {\n    return { ri: -1, top: 0, height };\n  }\n\n  return { ri: ri - 1, top, height };\n}\n\nfunction getCellColByX(x, scrollOffsetx) {\n  const { cols } = this;\n  const fsw = this.freezeTotalWidth();\n  let inits = cols.indexWidth;\n  if (fsw + cols.indexWidth < x) inits -= scrollOffsetx;\n  const [ci, left, width] = helper.rangeReduceIf(\n    0,\n    cols.len,\n    inits,\n    cols.indexWidth,\n    x,\n    i => cols.getWidth(i),\n  );\n  if (left <= 0) {\n    return { ci: -1, left: 0, width: cols.indexWidth };\n  }\n  return { ci: ci - 1, left, width };\n}\n\nexport default class DataProxy {\n  constructor(name, settings) {\n    this.settings = helper.merge(defaultSettings, settings || {});\n    // save data begin\n    this.name = name || 'sheet';\n    this.freeze = [0, 0];\n    this.styles = []; // Array<Style>\n    this.merges = new Merges(); // [CellRange, ...]\n    this.rows = new Rows(this.settings.row);\n    this.cols = new Cols(this.settings.col);\n    this.validations = new Validations();\n    this.hyperlinks = {};\n    this.comments = {};\n    // save data end\n\n    // don't save object\n    this.selector = new Selector();\n    this.scroll = new Scroll();\n    this.history = new History();\n    this.clipboard = new Clipboard();\n    this.autoFilter = new AutoFilter();\n    this.change = () => {};\n    this.exceptRowSet = new Set();\n    this.sortedRowMap = new Map();\n    this.unsortedRowMap = new Map();\n  }\n\n  addValidation(mode, ref, validator) {\n    // console.log('mode:', mode, ', ref:', ref, ', validator:', validator);\n    this.changeData(() => {\n      this.validations.add(mode, ref, validator);\n    });\n  }\n\n  removeValidation() {\n    const { range } = this.selector;\n    this.changeData(() => {\n      this.validations.remove(range);\n    });\n  }\n\n  getSelectedValidator() {\n    const { ri, ci } = this.selector;\n    const v = this.validations.get(ri, ci);\n    return v ? v.validator : null;\n  }\n\n  getSelectedValidation() {\n    const { ri, ci, range } = this.selector;\n    const v = this.validations.get(ri, ci);\n    const ret = { ref: range.toString() };\n    if (v !== null) {\n      ret.mode = v.mode;\n      ret.validator = v.validator;\n    }\n    return ret;\n  }\n\n  canUndo() {\n    return this.history.canUndo();\n  }\n\n  canRedo() {\n    return this.history.canRedo();\n  }\n\n  undo() {\n    this.history.undo(this.getData(), (d) => {\n      this.setData(d);\n    });\n  }\n\n  redo() {\n    this.history.redo(this.getData(), (d) => {\n      this.setData(d);\n    });\n  }\n\n  copy() {\n    this.clipboard.copy(this.selector.range);\n  }\n\n  copyToSystemClipboard() {\n    /* global navigator */\n    if (navigator.clipboard === undefined) {\n      return;\n    }\n    let copyText = '';\n    const rowData = this.rows.getData();\n    for (let ri = this.selector.range.sri; ri <= this.selector.range.eri; ri += 1) {\n      if (hasOwnProperty(rowData, ri)) {\n        for (let ci = this.selector.range.sci; ci <= this.selector.range.eci; ci += 1) {\n          if (ci > this.selector.range.sci) {\n            copyText += '\\t';\n          }\n          if (hasOwnProperty(rowData[ri].cells, ci)) {\n            const cellText = String(rowData[ri].cells[ci].text);\n            if ((cellText.indexOf(`\\n`) === -1) && (cellText.indexOf(`\\t`) === -1) && (cellText.indexOf(`\"`) === -1)) {\n              copyText += cellText;\n            } else {\n              copyText += `\"${cellText}\"`;\n            }\n          }\n        }\n      } else {\n        for (let ci = this.selector.range.sci; ci <= this.selector.range.eci; ci += 1) {\n          copyText += '\\t';\n        }\n      }\n      copyText += '\\n';\n    }\n    navigator.clipboard.writeText(copyText).then(() => {}, (err) => {\n      console.log('text copy to the system clipboard error  ', copyText, err);\n    });\n  }\n\n  cut() {\n    this.clipboard.cut(this.selector.range);\n  }\n\n  // what: all | text | format\n  paste(what = 'all', error = () => {}) {\n    // console.log('sIndexes:', sIndexes);\n    const { clipboard, selector } = this;\n    if (clipboard.isClear()) return false;\n    if (!canPaste.call(this, clipboard.range, selector.range, error)) return false;\n\n    this.changeData(() => {\n      if (clipboard.isCopy()) {\n        copyPaste.call(this, clipboard.range, selector.range, what);\n      } else if (clipboard.isCut()) {\n        cutPaste.call(this, clipboard.range, selector.range);\n      }\n    });\n    return true;\n  }\n\n  pasteFromText(txt) {\n    const lines = txt.split('\\r\\n').map(it => it.replace(/\"/g, '').split('\\t'));\n    if (lines.length > 0) lines.length -= 1;\n    const { rows, selector } = this;\n    this.changeData(() => {\n      rows.paste(lines, selector.range);\n    });\n  }\n\n  autofill(cellRange, what, error = () => {}) {\n    const srcRange = this.selector.range;\n    if (!canPaste.call(this, srcRange, cellRange, error)) return false;\n    this.changeData(() => {\n      copyPaste.call(this, srcRange, cellRange, what, true);\n    });\n    return true;\n  }\n\n  clearClipboard() {\n    this.clipboard.clear();\n  }\n\n  calSelectedRangeByEnd(ri, ci) {\n    const {\n      selector, rows, cols, merges,\n    } = this;\n    let {\n      sri, sci, eri, eci,\n    } = selector.range;\n    const cri = selector.ri;\n    const cci = selector.ci;\n    let [nri, nci] = [ri, ci];\n    if (ri < 0) nri = rows.len - 1;\n    if (ci < 0) nci = cols.len - 1;\n    if (nri > cri) [sri, eri] = [cri, nri];\n    else [sri, eri] = [nri, cri];\n    if (nci > cci) [sci, eci] = [cci, nci];\n    else [sci, eci] = [nci, cci];\n    selector.range = merges.union(new CellRange(\n      sri, sci, eri, eci,\n    ));\n    selector.range = merges.union(selector.range);\n    // console.log('selector.range:', selector.range);\n    return selector.range;\n  }\n\n  calSelectedRangeByStart(ri, ci) {\n    const {\n      selector, rows, cols, merges,\n    } = this;\n    let cellRange = merges.getFirstIncludes(ri, ci);\n    // console.log('cellRange:', cellRange, ri, ci, merges);\n    if (cellRange === null) {\n      cellRange = new CellRange(ri, ci, ri, ci);\n      if (ri === -1) {\n        cellRange.sri = 0;\n        cellRange.eri = rows.len - 1;\n      }\n      if (ci === -1) {\n        cellRange.sci = 0;\n        cellRange.eci = cols.len - 1;\n      }\n    }\n    selector.range = cellRange;\n    return cellRange;\n  }\n\n  setSelectedCellAttr(property, value) {\n    this.changeData(() => {\n      const { selector, styles, rows } = this;\n      if (property === 'merge') {\n        if (value) this.merge();\n        else this.unmerge();\n      } else if (property === 'border') {\n        setStyleBorders.call(this, value);\n      } else if (property === 'formula') {\n        // console.log('>>>', selector.multiple());\n        const { ri, ci, range } = selector;\n        if (selector.multiple()) {\n          const [rn, cn] = selector.size();\n          const {\n            sri, sci, eri, eci,\n          } = range;\n          if (rn > 1) {\n            for (let i = sci; i <= eci; i += 1) {\n              const cell = rows.getCellOrNew(eri + 1, i);\n              cell.text = `=${value}(${xy2expr(i, sri)}:${xy2expr(i, eri)})`;\n            }\n          } else if (cn > 1) {\n            const cell = rows.getCellOrNew(ri, eci + 1);\n            cell.text = `=${value}(${xy2expr(sci, ri)}:${xy2expr(eci, ri)})`;\n          }\n        } else {\n          const cell = rows.getCellOrNew(ri, ci);\n          cell.text = `=${value}()`;\n        }\n      } else {\n        selector.range.each((ri, ci) => {\n          const cell = rows.getCellOrNew(ri, ci);\n          let cstyle = {};\n          if (cell.style !== undefined) {\n            cstyle = helper.cloneDeep(styles[cell.style]);\n          }\n          if (property === 'format') {\n            cstyle.format = value;\n            cell.style = this.addStyle(cstyle);\n          } else if (property === 'font-bold' || property === 'font-italic'\n            || property === 'font-name' || property === 'font-size') {\n            const nfont = {};\n            nfont[property.split('-')[1]] = value;\n            cstyle.font = Object.assign(cstyle.font || {}, nfont);\n            cell.style = this.addStyle(cstyle);\n          } else if (property === 'strike' || property === 'textwrap'\n            || property === 'underline'\n            || property === 'align' || property === 'valign'\n            || property === 'color' || property === 'bgcolor') {\n            cstyle[property] = value;\n            cell.style = this.addStyle(cstyle);\n          } else {\n            cell[property] = value;\n          }\n        });\n      }\n    });\n  }\n\n  // state: input | finished\n  setSelectedCellText(text, state = 'input') {\n    const { autoFilter, selector, rows } = this;\n    const { ri, ci } = selector;\n    let nri = ri;\n    if (this.unsortedRowMap.has(ri)) {\n      nri = this.unsortedRowMap.get(ri);\n    }\n    const oldCell = rows.getCell(nri, ci);\n    const oldText = oldCell ? oldCell.text : '';\n    this.setCellText(nri, ci, text, state);\n    // replace filter.value\n    if (autoFilter.active()) {\n      const filter = autoFilter.getFilter(ci);\n      if (filter) {\n        const vIndex = filter.value.findIndex(v => v === oldText);\n        if (vIndex >= 0) {\n          filter.value.splice(vIndex, 1, text);\n        }\n        // console.log('filter:', filter, oldCell);\n      }\n    }\n    // this.resetAutoFilter();\n  }\n\n  getSelectedCell() {\n    const { ri, ci } = this.selector;\n    let nri = ri;\n    if (this.unsortedRowMap.has(ri)) {\n      nri = this.unsortedRowMap.get(ri);\n    }\n    return this.rows.getCell(nri, ci);\n  }\n\n  xyInSelectedRect(x, y) {\n    const {\n      left, top, width, height,\n    } = this.getSelectedRect();\n    const x1 = x - this.cols.indexWidth;\n    const y1 = y - this.rows.height;\n    // console.log('x:', x, ',y:', y, 'left:', left, 'top:', top);\n    return x1 > left && x1 < (left + width)\n      && y1 > top && y1 < (top + height);\n  }\n\n  getSelectedRect() {\n    return this.getRect(this.selector.range);\n  }\n\n  getClipboardRect() {\n    const { clipboard } = this;\n    if (!clipboard.isClear()) {\n      return this.getRect(clipboard.range);\n    }\n    return { left: -100, top: -100 };\n  }\n\n  getRect(cellRange) {\n    const {\n      scroll, rows, cols, exceptRowSet,\n    } = this;\n    const {\n      sri, sci, eri, eci,\n    } = cellRange;\n    // console.log('sri:', sri, ',sci:', sci, ', eri:', eri, ', eci:', eci);\n    // no selector\n    if (sri < 0 && sci < 0) {\n      return {\n        left: 0, l: 0, top: 0, t: 0, scroll,\n      };\n    }\n    const left = cols.sumWidth(0, sci);\n    const top = rows.sumHeight(0, sri, exceptRowSet);\n    const height = rows.sumHeight(sri, eri + 1, exceptRowSet);\n    const width = cols.sumWidth(sci, eci + 1);\n    // console.log('sri:', sri, ', sci:', sci, ', eri:', eri, ', eci:', eci);\n    let left0 = left - scroll.x;\n    let top0 = top - scroll.y;\n    const fsh = this.freezeTotalHeight();\n    const fsw = this.freezeTotalWidth();\n    if (fsw > 0 && fsw > left) {\n      left0 = left;\n    }\n    if (fsh > 0 && fsh > top) {\n      top0 = top;\n    }\n    return {\n      l: left,\n      t: top,\n      left: left0,\n      top: top0,\n      height,\n      width,\n      scroll,\n    };\n  }\n\n  getCellRectByXY(x, y) {\n    const {\n      scroll, merges, rows, cols,\n    } = this;\n    let { ri, top, height } = getCellRowByY.call(this, y, scroll.y);\n    let { ci, left, width } = getCellColByX.call(this, x, scroll.x);\n    if (ci === -1) {\n      width = cols.totalWidth();\n    }\n    if (ri === -1) {\n      height = rows.totalHeight();\n    }\n    if (ri >= 0 || ci >= 0) {\n      const merge = merges.getFirstIncludes(ri, ci);\n      if (merge) {\n        ri = merge.sri;\n        ci = merge.sci;\n        ({\n          left, top, width, height,\n        } = this.cellRect(ri, ci));\n      }\n    }\n    return {\n      ri, ci, left, top, width, height,\n    };\n  }\n\n  isSignleSelected() {\n    const {\n      sri, sci, eri, eci,\n    } = this.selector.range;\n    const cell = this.getCell(sri, sci);\n    if (cell && cell.merge) {\n      const [rn, cn] = cell.merge;\n      if (sri + rn === eri && sci + cn === eci) return true;\n    }\n    return !this.selector.multiple();\n  }\n\n  canUnmerge() {\n    const {\n      sri, sci, eri, eci,\n    } = this.selector.range;\n    const cell = this.getCell(sri, sci);\n    if (cell && cell.merge) {\n      const [rn, cn] = cell.merge;\n      if (sri + rn === eri && sci + cn === eci) return true;\n    }\n    return false;\n  }\n\n  merge() {\n    const { selector, rows } = this;\n    if (this.isSignleSelected()) return;\n    const [rn, cn] = selector.size();\n    // console.log('merge:', rn, cn);\n    if (rn > 1 || cn > 1) {\n      const { sri, sci } = selector.range;\n      this.changeData(() => {\n        const cell = rows.getCellOrNew(sri, sci);\n        cell.merge = [rn - 1, cn - 1];\n        this.merges.add(selector.range);\n        // delete merge cells\n        this.rows.deleteCells(selector.range);\n        // console.log('cell:', cell, this.d);\n        this.rows.setCell(sri, sci, cell);\n      });\n    }\n  }\n\n  unmerge() {\n    const { selector } = this;\n    if (!this.isSignleSelected()) return;\n    const { sri, sci } = selector.range;\n    this.changeData(() => {\n      this.rows.deleteCell(sri, sci, 'merge');\n      this.merges.deleteWithin(selector.range);\n    });\n  }\n\n  canAutofilter() {\n    return !this.autoFilter.active();\n  }\n\n  autofilter() {\n    const { autoFilter, selector } = this;\n    this.changeData(() => {\n      if (autoFilter.active()) {\n        autoFilter.clear();\n        this.exceptRowSet = new Set();\n        this.sortedRowMap = new Map();\n        this.unsortedRowMap = new Map();\n      } else {\n        autoFilter.ref = selector.range.toString();\n      }\n    });\n  }\n\n  setAutoFilter(ci, order, operator, value) {\n    const { autoFilter } = this;\n    autoFilter.addFilter(ci, operator, value);\n    autoFilter.setSort(ci, order);\n    this.resetAutoFilter();\n  }\n\n  resetAutoFilter() {\n    const { autoFilter, rows } = this;\n    if (!autoFilter.active()) return;\n    const { sort } = autoFilter;\n    const { rset, fset } = autoFilter.filteredRows((r, c) => rows.getCell(r, c));\n    const fary = Array.from(fset);\n    const oldAry = Array.from(fset);\n    if (sort) {\n      fary.sort((a, b) => {\n        if (sort.order === 'asc') return a - b;\n        if (sort.order === 'desc') return b - a;\n        return 0;\n      });\n    }\n    this.exceptRowSet = rset;\n    this.sortedRowMap = new Map();\n    this.unsortedRowMap = new Map();\n    fary.forEach((it, index) => {\n      this.sortedRowMap.set(oldAry[index], it);\n      this.unsortedRowMap.set(it, oldAry[index]);\n    });\n  }\n\n  deleteCell(what = 'all') {\n    const { selector } = this;\n    this.changeData(() => {\n      this.rows.deleteCells(selector.range, what);\n      if (what === 'all' || what === 'format') {\n        this.merges.deleteWithin(selector.range);\n      }\n    });\n  }\n\n  // type: row | column\n  insert(type, n = 1) {\n    this.changeData(() => {\n      const { sri, sci } = this.selector.range;\n      const { rows, merges, cols } = this;\n      let si = sri;\n      if (type === 'row') {\n        rows.insert(sri, n);\n      } else if (type === 'column') {\n        rows.insertColumn(sci, n);\n        si = sci;\n        cols.len += 1;\n      }\n      merges.shift(type, si, n, (ri, ci, rn, cn) => {\n        const cell = rows.getCell(ri, ci);\n        cell.merge[0] += rn;\n        cell.merge[1] += cn;\n      });\n    });\n  }\n\n  // type: row | column\n  delete(type) {\n    this.changeData(() => {\n      const {\n        rows, merges, selector, cols,\n      } = this;\n      const { range } = selector;\n      const {\n        sri, sci, eri, eci,\n      } = selector.range;\n      const [rsize, csize] = selector.range.size();\n      let si = sri;\n      let size = rsize;\n      if (type === 'row') {\n        rows.delete(sri, eri);\n      } else if (type === 'column') {\n        rows.deleteColumn(sci, eci);\n        si = range.sci;\n        size = csize;\n        cols.len -= 1;\n      }\n      // console.log('type:', type, ', si:', si, ', size:', size);\n      merges.shift(type, si, -size, (ri, ci, rn, cn) => {\n        // console.log('ri:', ri, ', ci:', ci, ', rn:', rn, ', cn:', cn);\n        const cell = rows.getCell(ri, ci);\n        cell.merge[0] += rn;\n        cell.merge[1] += cn;\n        if (cell.merge[0] === 0 && cell.merge[1] === 0) {\n          delete cell.merge;\n        }\n      });\n    });\n  }\n\n  scrollx(x, cb) {\n    const { scroll, freeze, cols } = this;\n    const [, fci] = freeze;\n    const [\n      ci, left, width,\n    ] = helper.rangeReduceIf(fci, cols.len, 0, 0, x, i => cols.getWidth(i));\n    // console.log('fci:', fci, ', ci:', ci);\n    let x1 = left;\n    if (x > 0) x1 += width;\n    if (scroll.x !== x1) {\n      scroll.ci = x > 0 ? ci : 0;\n      scroll.x = x1;\n      cb();\n    }\n  }\n\n  scrolly(y, cb) {\n    const { scroll, freeze, rows } = this;\n    const [fri] = freeze;\n    const [\n      ri, top, height,\n    ] = helper.rangeReduceIf(fri, rows.len, 0, 0, y, i => rows.getHeight(i));\n    let y1 = top;\n    if (y > 0) y1 += height;\n    // console.log('ri:', ri, ' ,y:', y1);\n    if (scroll.y !== y1) {\n      scroll.ri = y > 0 ? ri : 0;\n      scroll.y = y1;\n      cb();\n    }\n  }\n\n  cellRect(ri, ci) {\n    const { rows, cols } = this;\n    const left = cols.sumWidth(0, ci);\n    const top = rows.sumHeight(0, ri);\n    const cell = rows.getCell(ri, ci);\n    let width = cols.getWidth(ci);\n    let height = rows.getHeight(ri);\n    if (cell !== null) {\n      if (cell.merge) {\n        const [rn, cn] = cell.merge;\n        // console.log('cell.merge:', cell.merge);\n        if (rn > 0) {\n          for (let i = 1; i <= rn; i += 1) {\n            height += rows.getHeight(ri + i);\n          }\n        }\n        if (cn > 0) {\n          for (let i = 1; i <= cn; i += 1) {\n            width += cols.getWidth(ci + i);\n          }\n        }\n      }\n    }\n    // console.log('data:', this.d);\n    return {\n      left, top, width, height, cell,\n    };\n  }\n\n  getCell(ri, ci) {\n    return this.rows.getCell(ri, ci);\n  }\n\n  getCellTextOrDefault(ri, ci) {\n    const cell = this.getCell(ri, ci);\n    return (cell && cell.text) ? cell.text : '';\n  }\n\n  getCellStyle(ri, ci) {\n    const cell = this.getCell(ri, ci);\n    if (cell && cell.style !== undefined) {\n      return this.styles[cell.style];\n    }\n    return null;\n  }\n\n  getCellStyleOrDefault(ri, ci) {\n    const { styles, rows } = this;\n    const cell = rows.getCell(ri, ci);\n    const cellStyle = (cell && cell.style !== undefined) ? styles[cell.style] : {};\n    return helper.merge(this.defaultStyle(), cellStyle);\n  }\n\n  getSelectedCellStyle() {\n    const { ri, ci } = this.selector;\n    return this.getCellStyleOrDefault(ri, ci);\n  }\n\n  // state: input | finished\n  setCellText(ri, ci, text, state) {\n    const { rows, history, validations } = this;\n    if (state === 'finished') {\n      rows.setCellText(ri, ci, '');\n      history.add(this.getData());\n      rows.setCellText(ri, ci, text);\n    } else {\n      rows.setCellText(ri, ci, text);\n      this.change(this.getData());\n    }\n    // validator\n    validations.validate(ri, ci, text);\n  }\n\n  freezeIsActive() {\n    const [ri, ci] = this.freeze;\n    return ri > 0 || ci > 0;\n  }\n\n  setFreeze(ri, ci) {\n    this.changeData(() => {\n      this.freeze = [ri, ci];\n    });\n  }\n\n  freezeTotalWidth() {\n    return this.cols.sumWidth(0, this.freeze[1]);\n  }\n\n  freezeTotalHeight() {\n    return this.rows.sumHeight(0, this.freeze[0]);\n  }\n\n  setRowHeight(ri, height) {\n    this.changeData(() => {\n      this.rows.setHeight(ri, height);\n    });\n  }\n\n  setColWidth(ci, width) {\n    this.changeData(() => {\n      this.cols.setWidth(ci, width);\n    });\n  }\n\n  viewHeight() {\n    const { view, showToolbar, showBottomBar } = this.settings;\n    let h = view.height();\n    if (showBottomBar) {\n      h -= bottombarHeight;\n    }\n    if (showToolbar) {\n      h -= toolbarHeight;\n    }\n    return h;\n  }\n\n  viewWidth() {\n    return this.settings.view.width();\n  }\n\n  freezeViewRange() {\n    const [ri, ci] = this.freeze;\n    return new CellRange(0, 0, ri - 1, ci - 1, this.freezeTotalWidth(), this.freezeTotalHeight());\n  }\n\n  contentRange() {\n    const { rows, cols } = this;\n    const [ri, ci] = rows.maxCell();\n    const h = rows.sumHeight(0, ri + 1);\n    const w = cols.sumWidth(0, ci + 1);\n    return new CellRange(0, 0, ri, ci, w, h);\n  }\n\n  exceptRowTotalHeight(sri, eri) {\n    const { exceptRowSet, rows } = this;\n    const exceptRows = Array.from(exceptRowSet);\n    let exceptRowTH = 0;\n    exceptRows.forEach((ri) => {\n      if (ri < sri || ri > eri) {\n        const height = rows.getHeight(ri);\n        exceptRowTH += height;\n      }\n    });\n    return exceptRowTH;\n  }\n\n  viewRange() {\n    const {\n      scroll, rows, cols, freeze, exceptRowSet,\n    } = this;\n    // console.log('scroll:', scroll, ', freeze:', freeze)\n    let { ri, ci } = scroll;\n    if (ri <= 0) [ri] = freeze;\n    if (ci <= 0) [, ci] = freeze;\n\n    let [x, y] = [0, 0];\n    let [eri, eci] = [rows.len, cols.len];\n    for (let i = ri; i < rows.len; i += 1) {\n      if (!exceptRowSet.has(i)) {\n        y += rows.getHeight(i);\n        eri = i;\n      }\n      if (y > this.viewHeight()) break;\n    }\n    for (let j = ci; j < cols.len; j += 1) {\n      x += cols.getWidth(j);\n      eci = j;\n      if (x > this.viewWidth()) break;\n    }\n    // console.log(ri, ci, eri, eci, x, y);\n    return new CellRange(ri, ci, eri, eci, x, y);\n  }\n\n  eachMergesInView(viewRange, cb) {\n    this.merges.filterIntersects(viewRange)\n      .forEach(it => cb(it));\n  }\n\n  hideRowsOrCols() {\n    const { rows, cols, selector } = this;\n    const [rlen, clen] = selector.size();\n    const {\n      sri, sci, eri, eci,\n    } = selector.range;\n    if (rlen === rows.len) {\n      for (let ci = sci; ci <= eci; ci += 1) {\n        cols.setHide(ci, true);\n      }\n    } else if (clen === cols.len) {\n      for (let ri = sri; ri <= eri; ri += 1) {\n        rows.setHide(ri, true);\n      }\n    }\n  }\n\n  // type: row | col\n  // index row-index | col-index\n  unhideRowsOrCols(type, index) {\n    this[`${type}s`].unhide(index);\n  }\n\n  rowEach(min, max, cb) {\n    let y = 0;\n    const { rows } = this;\n    const frset = this.exceptRowSet;\n    const frary = [...frset];\n    let offset = 0;\n    for (let i = 0; i < frary.length; i += 1) {\n      if (frary[i] < min) {\n        offset += 1;\n      }\n    }\n    // console.log('min:', min, ', max:', max, ', scroll:', scroll);\n    for (let i = min + offset; i <= max + offset; i += 1) {\n      if (frset.has(i)) {\n        offset += 1;\n      } else {\n        const rowHeight = rows.getHeight(i);\n        if (rowHeight > 0) {\n          cb(i, y, rowHeight);\n          y += rowHeight;\n          if (y > this.viewHeight()) break;\n        }\n      }\n    }\n  }\n\n  colEach(min, max, cb) {\n    let x = 0;\n    const { cols } = this;\n    for (let i = min; i <= max; i += 1) {\n      const colWidth = cols.getWidth(i);\n      if (colWidth > 0) {\n        cb(i, x, colWidth);\n        x += colWidth;\n        if (x > this.viewWidth()) break;\n      }\n    }\n  }\n\n  defaultStyle() {\n    return this.settings.style;\n  }\n\n  addStyle(nstyle) {\n    const { styles } = this;\n    // console.log('old.styles:', styles, nstyle);\n    for (let i = 0; i < styles.length; i += 1) {\n      const style = styles[i];\n      if (helper.equals(style, nstyle)) return i;\n    }\n    styles.push(nstyle);\n    return styles.length - 1;\n  }\n\n  changeData(cb) {\n    this.history.add(this.getData());\n    cb();\n    this.change(this.getData());\n  }\n\n  setData(d) {\n    Object.keys(d).forEach((property) => {\n      if (property === 'merges' || property === 'rows'\n        || property === 'cols' || property === 'validations') {\n        this[property].setData(d[property]);\n      } else if (property === 'freeze') {\n        const [x, y] = expr2xy(d[property]);\n        this.freeze = [y, x];\n      } else if (property === 'autofilter') {\n        this.autoFilter.setData(d[property]);\n      } else if (d[property] !== undefined) {\n        this[property] = d[property];\n      }\n    });\n    return this;\n  }\n\n  getData() {\n    const {\n      name, freeze, styles, merges, rows, cols, validations, autoFilter,\n    } = this;\n    return {\n      name,\n      freeze: xy2expr(freeze[1], freeze[0]),\n      styles,\n      merges: merges.getData(),\n      rows: rows.getData(),\n      cols: cols.getData(),\n      validations: validations.getData(),\n      autofilter: autoFilter.getData(),\n    };\n  }\n}\n","/* global window */\nexport function bind(target, name, fn) {\n  target.addEventListener(name, fn);\n}\nexport function unbind(target, name, fn) {\n  target.removeEventListener(name, fn);\n}\nexport function unbindClickoutside(el) {\n  if (el.xclickoutside) {\n    unbind(window.document.body, 'click', el.xclickoutside);\n    delete el.xclickoutside;\n  }\n}\n\n// the left mouse button: mousedown → mouseup → click\n// the right mouse button: mousedown → contenxtmenu → mouseup\n// the right mouse button in firefox(>65.0): mousedown → contenxtmenu → mouseup → click on window\nexport function bindClickoutside(el, cb) {\n  el.xclickoutside = (evt) => {\n    // ignore double click\n    // console.log('evt:', evt);\n    if (evt.detail === 2 || el.contains(evt.target)) return;\n    if (cb) cb(el);\n    else {\n      el.hide();\n      unbindClickoutside(el);\n    }\n  };\n  bind(window.document.body, 'click', el.xclickoutside);\n}\nexport function mouseMoveUp(target, movefunc, upfunc) {\n  bind(target, 'mousemove', movefunc);\n  const t = target;\n  t.xEvtUp = (evt) => {\n    // console.log('mouseup>>>');\n    unbind(target, 'mousemove', movefunc);\n    unbind(target, 'mouseup', target.xEvtUp);\n    upfunc(evt);\n  };\n  bind(target, 'mouseup', target.xEvtUp);\n}\n\nfunction calTouchDirection(spanx, spany, evt, cb) {\n  let direction = '';\n  // console.log('spanx:', spanx, ', spany:', spany);\n  if (Math.abs(spanx) > Math.abs(spany)) {\n    // horizontal\n    direction = spanx > 0 ? 'right' : 'left';\n    cb(direction, spanx, evt);\n  } else {\n    // vertical\n    direction = spany > 0 ? 'down' : 'up';\n    cb(direction, spany, evt);\n  }\n}\n// cb = (direction, distance) => {}\nexport function bindTouch(target, { move, end }) {\n  let startx = 0;\n  let starty = 0;\n  bind(target, 'touchstart', (evt) => {\n    const { pageX, pageY } = evt.touches[0];\n    startx = pageX;\n    starty = pageY;\n  });\n  bind(target, 'touchmove', (evt) => {\n    if (!move) return;\n    const { pageX, pageY } = evt.changedTouches[0];\n    const spanx = pageX - startx;\n    const spany = pageY - starty;\n    if (Math.abs(spanx) > 10 || Math.abs(spany) > 10) {\n      // console.log('spanx:', spanx, ', spany:', spany);\n      calTouchDirection(spanx, spany, evt, move);\n      startx = pageX;\n      starty = pageY;\n    }\n    evt.preventDefault();\n  });\n  bind(target, 'touchend', (evt) => {\n    if (!end) return;\n    const { pageX, pageY } = evt.changedTouches[0];\n    const spanx = pageX - startx;\n    const spany = pageY - starty;\n    calTouchDirection(spanx, spany, evt, end);\n  });\n}\n\n// eventemiter\nexport function createEventEmitter() {\n  const listeners = new Map();\n\n  function on(eventName, callback) {\n    const push = () => {\n      const currentListener = listeners.get(eventName);\n      return (Array.isArray(currentListener)\n          && currentListener.push(callback))\n          || false;\n    };\n\n    const create = () => listeners.set(eventName, [].concat(callback));\n\n    return (listeners.has(eventName)\n        && push())\n        || create();\n  }\n\n  function fire(eventName, args) {\n    const exec = () => {\n      const currentListener = listeners.get(eventName);\n      for (const callback of currentListener) callback.call(null, ...args);\n    };\n\n    return listeners.has(eventName)\n        && exec();\n  }\n\n  function removeListener(eventName, callback) {\n    const remove = () => {\n      const currentListener = listeners.get(eventName);\n      const idx = currentListener.indexOf(callback);\n      return (idx >= 0)\n          && currentListener.splice(idx, 1)\n          && listeners.get(eventName).length === 0\n          && listeners.delete(eventName);\n    };\n\n    return listeners.has(eventName)\n        && remove();\n  }\n\n  function once(eventName, callback) {\n    const execCalllback = (...args) => {\n      callback.call(null, ...args);\n      removeListener(eventName, execCalllback);\n    };\n\n    return on(eventName, execCalllback);\n  }\n\n  function removeAllListeners() {\n    listeners.clear();\n  }\n\n  return {\n    get current() {\n      return listeners;\n    },\n    on,\n    once,\n    fire,\n    removeListener,\n    removeAllListeners,\n  };\n}\n","/* global window */\nexport const cssPrefix = 'x-spreadsheet';\nexport const dpr = window.devicePixelRatio || 1;\nexport default {\n  cssPrefix,\n  dpr,\n};\n","/* global window */\nimport { h } from './element';\nimport { mouseMoveUp } from './event';\nimport { cssPrefix } from '../config';\n\nexport default class Resizer {\n  constructor(vertical = false, minDistance) {\n    this.moving = false;\n    this.vertical = vertical;\n    this.el = h('div', `${cssPrefix}-resizer ${vertical ? 'vertical' : 'horizontal'}`).children(\n      this.unhideHoverEl = h('div', `${cssPrefix}-resizer-hover`)\n        .on('dblclick.stop', evt => this.mousedblclickHandler(evt))\n        .css('position', 'absolute').hide(),\n      this.hoverEl = h('div', `${cssPrefix}-resizer-hover`)\n        .on('mousedown.stop', evt => this.mousedownHandler(evt)),\n      this.lineEl = h('div', `${cssPrefix}-resizer-line`).hide(),\n    ).hide();\n    // cell rect\n    this.cRect = null;\n    this.finishedFn = null;\n    this.minDistance = minDistance;\n    this.unhideFn = () => {};\n  }\n\n  showUnhide(index) {\n    this.unhideIndex = index;\n    this.unhideHoverEl.show();\n  }\n\n  hideUnhide() {\n    this.unhideHoverEl.hide();\n  }\n\n  // rect : {top, left, width, height}\n  // line : {width, height}\n  show(rect, line) {\n    const {\n      moving, vertical, hoverEl, lineEl, el,\n      unhideHoverEl,\n    } = this;\n    if (moving) return;\n    this.cRect = rect;\n    const {\n      left, top, width, height,\n    } = rect;\n    el.offset({\n      left: vertical ? left + width - 5 : left,\n      top: vertical ? top : top + height - 5,\n    }).show();\n    hoverEl.offset({\n      width: vertical ? 5 : width,\n      height: vertical ? height : 5,\n    });\n    lineEl.offset({\n      width: vertical ? 0 : line.width,\n      height: vertical ? line.height : 0,\n    });\n    unhideHoverEl.offset({\n      left: vertical ? 5 - width : left,\n      top: vertical ? top : 5 - height,\n      width: vertical ? 5 : width,\n      height: vertical ? height : 5,\n    });\n  }\n\n  hide() {\n    this.el.offset({\n      left: 0,\n      top: 0,\n    }).hide();\n    this.hideUnhide();\n  }\n\n  mousedblclickHandler() {\n    if (this.unhideIndex) this.unhideFn(this.unhideIndex);\n  }\n\n  mousedownHandler(evt) {\n    let startEvt = evt;\n    const {\n      el, lineEl, cRect, vertical, minDistance,\n    } = this;\n    let distance = vertical ? cRect.width : cRect.height;\n    // console.log('distance:', distance);\n    lineEl.show();\n    mouseMoveUp(window, (e) => {\n      this.moving = true;\n      if (startEvt !== null && e.buttons === 1) {\n        // console.log('top:', top, ', left:', top, ', cRect:', cRect);\n        if (vertical) {\n          distance += e.movementX;\n          if (distance > minDistance) {\n            el.css('left', `${cRect.left + distance}px`);\n          }\n        } else {\n          distance += e.movementY;\n          if (distance > minDistance) {\n            el.css('top', `${cRect.top + distance}px`);\n          }\n        }\n        startEvt = e;\n      }\n    }, () => {\n      startEvt = null;\n      lineEl.hide();\n      this.moving = false;\n      this.hide();\n      if (this.finishedFn) {\n        if (distance < minDistance) distance = minDistance;\n        this.finishedFn(cRect, distance);\n      }\n    });\n  }\n}\n","import { h } from './element';\nimport { cssPrefix } from '../config';\n\nexport default class Scrollbar {\n  constructor(vertical) {\n    this.vertical = vertical;\n    this.moveFn = null;\n    this.el = h('div', `${cssPrefix}-scrollbar ${vertical ? 'vertical' : 'horizontal'}`)\n      .child(this.contentEl = h('div', ''))\n      .on('mousemove.stop', () => {})\n      .on('scroll.stop', (evt) => {\n        const { scrollTop, scrollLeft } = evt.target;\n        // console.log('scrollTop:', scrollTop);\n        if (this.moveFn) {\n          this.moveFn(this.vertical ? scrollTop : scrollLeft, evt);\n        }\n        // console.log('evt:::', evt);\n      });\n  }\n\n  move(v) {\n    this.el.scroll(v);\n    return this;\n  }\n\n  scroll() {\n    return this.el.scroll();\n  }\n\n  set(distance, contentDistance) {\n    const d = distance - 1;\n    // console.log('distance:', distance, ', contentDistance:', contentDistance);\n    if (contentDistance > d) {\n      const cssKey = this.vertical ? 'height' : 'width';\n      // console.log('d:', d);\n      this.el.css(cssKey, `${d - 15}px`).show();\n      this.contentEl\n        .css(this.vertical ? 'width' : 'height', '1px')\n        .css(cssKey, `${contentDistance}px`);\n    } else {\n      this.el.hide();\n    }\n    return this;\n  }\n}\n","import { h } from './element';\nimport { cssPrefix } from '../config';\nimport { CellRange } from '../core/cell_range';\n\nconst selectorHeightBorderWidth = 2 * 2 - 1;\nlet startZIndex = 10;\n\nclass SelectorElement {\n  constructor(useHideInput = false) {\n    this.useHideInput = useHideInput;\n    this.inputChange = () => {};\n    this.cornerEl = h('div', `${cssPrefix}-selector-corner`);\n    this.areaEl = h('div', `${cssPrefix}-selector-area`)\n      .child(this.cornerEl).hide();\n    this.clipboardEl = h('div', `${cssPrefix}-selector-clipboard`).hide();\n    this.autofillEl = h('div', `${cssPrefix}-selector-autofill`).hide();\n    this.el = h('div', `${cssPrefix}-selector`)\n      .css('z-index', `${startZIndex}`)\n      .children(this.areaEl, this.clipboardEl, this.autofillEl)\n      .hide();\n    if (useHideInput) {\n      this.hideInput = h('input', '')\n        .on('compositionend', (evt) => {\n          this.inputChange(evt.target.value);\n        });\n      this.el.child(this.hideInputDiv = h('div', 'hide-input').child(this.hideInput));\n      this.el.child(this.hideInputDiv = h('div', 'hide-input').child(this.hideInput));\n    }\n    startZIndex += 1;\n  }\n\n  setOffset(v) {\n    this.el.offset(v).show();\n    return this;\n  }\n\n  hide() {\n    this.el.hide();\n    return this;\n  }\n\n  setAreaOffset(v) {\n    const {\n      left, top, width, height,\n    } = v;\n    const of = {\n      width: width - selectorHeightBorderWidth + 0.8,\n      height: height - selectorHeightBorderWidth + 0.8,\n      left: left - 0.8,\n      top: top - 0.8,\n    };\n    this.areaEl.offset(of).show();\n    if (this.useHideInput) {\n      this.hideInputDiv.offset(of);\n      this.hideInput.val('').focus();\n    }\n  }\n\n  setClipboardOffset(v) {\n    const {\n      left, top, width, height,\n    } = v;\n    this.clipboardEl.offset({\n      left,\n      top,\n      width: width - 5,\n      height: height - 5,\n    });\n  }\n\n  showAutofill(v) {\n    const {\n      left, top, width, height,\n    } = v;\n    this.autofillEl.offset({\n      width: width - selectorHeightBorderWidth,\n      height: height - selectorHeightBorderWidth,\n      left,\n      top,\n    }).show();\n  }\n\n  hideAutofill() {\n    this.autofillEl.hide();\n  }\n\n  showClipboard() {\n    this.clipboardEl.show();\n  }\n\n  hideClipboard() {\n    this.clipboardEl.hide();\n  }\n}\n\nfunction calBRAreaOffset(offset) {\n  const { data } = this;\n  const {\n    left, top, width, height, scroll, l, t,\n  } = offset;\n  const ftwidth = data.freezeTotalWidth();\n  const ftheight = data.freezeTotalHeight();\n  let left0 = left - ftwidth;\n  if (ftwidth > l) left0 -= scroll.x;\n  let top0 = top - ftheight;\n  if (ftheight > t) top0 -= scroll.y;\n  return {\n    left: left0,\n    top: top0,\n    width,\n    height,\n  };\n}\n\nfunction calTAreaOffset(offset) {\n  const { data } = this;\n  const {\n    left, width, height, l, t, scroll,\n  } = offset;\n  const ftwidth = data.freezeTotalWidth();\n  let left0 = left - ftwidth;\n  if (ftwidth > l) left0 -= scroll.x;\n  return {\n    left: left0, top: t, width, height,\n  };\n}\n\nfunction calLAreaOffset(offset) {\n  const { data } = this;\n  const {\n    top, width, height, l, t, scroll,\n  } = offset;\n  const ftheight = data.freezeTotalHeight();\n  let top0 = top - ftheight;\n  // console.log('ftheight:', ftheight, ', t:', t);\n  if (ftheight > t) top0 -= scroll.y;\n  return {\n    left: l, top: top0, width, height,\n  };\n}\n\nfunction setBRAreaOffset(offset) {\n  const { br } = this;\n  br.setAreaOffset(calBRAreaOffset.call(this, offset));\n}\n\nfunction setTLAreaOffset(offset) {\n  const { tl } = this;\n  tl.setAreaOffset(offset);\n}\n\nfunction setTAreaOffset(offset) {\n  const { t } = this;\n  t.setAreaOffset(calTAreaOffset.call(this, offset));\n}\n\nfunction setLAreaOffset(offset) {\n  const { l } = this;\n  l.setAreaOffset(calLAreaOffset.call(this, offset));\n}\n\nfunction setLClipboardOffset(offset) {\n  const { l } = this;\n  l.setClipboardOffset(calLAreaOffset.call(this, offset));\n}\n\nfunction setBRClipboardOffset(offset) {\n  const { br } = this;\n  br.setClipboardOffset(calBRAreaOffset.call(this, offset));\n}\n\nfunction setTLClipboardOffset(offset) {\n  const { tl } = this;\n  tl.setClipboardOffset(offset);\n}\n\nfunction setTClipboardOffset(offset) {\n  const { t } = this;\n  t.setClipboardOffset(calTAreaOffset.call(this, offset));\n}\n\nfunction setAllAreaOffset(offset) {\n  setBRAreaOffset.call(this, offset);\n  setTLAreaOffset.call(this, offset);\n  setTAreaOffset.call(this, offset);\n  setLAreaOffset.call(this, offset);\n}\n\nfunction setAllClipboardOffset(offset) {\n  setBRClipboardOffset.call(this, offset);\n  setTLClipboardOffset.call(this, offset);\n  setTClipboardOffset.call(this, offset);\n  setLClipboardOffset.call(this, offset);\n}\n\nexport default class Selector {\n  constructor(data) {\n    this.inputChange = () => {};\n    this.data = data;\n    this.br = new SelectorElement(true);\n    this.t = new SelectorElement();\n    this.l = new SelectorElement();\n    this.tl = new SelectorElement();\n    this.br.inputChange = (v) => {\n      this.inputChange(v);\n    };\n    this.br.el.show();\n    this.offset = null;\n    this.areaOffset = null;\n    this.indexes = null;\n    this.range = null;\n    this.arange = null;\n    this.el = h('div', `${cssPrefix}-selectors`)\n      .children(\n        this.tl.el,\n        this.t.el,\n        this.l.el,\n        this.br.el,\n      ).hide();\n\n    // for performance\n    this.lastri = -1;\n    this.lastci = -1;\n\n    startZIndex += 1;\n  }\n\n  resetData(data) {\n    this.data = data;\n    this.range = data.selector.range;\n    this.resetAreaOffset();\n  }\n\n  hide() {\n    this.el.hide();\n  }\n\n  resetOffset() {\n    const {\n      data, tl, t, l, br,\n    } = this;\n    const freezeHeight = data.freezeTotalHeight();\n    const freezeWidth = data.freezeTotalWidth();\n    if (freezeHeight > 0 || freezeWidth > 0) {\n      tl.setOffset({ width: freezeWidth, height: freezeHeight });\n      t.setOffset({ left: freezeWidth, height: freezeHeight });\n      l.setOffset({ top: freezeHeight, width: freezeWidth });\n      br.setOffset({ left: freezeWidth, top: freezeHeight });\n    } else {\n      tl.hide();\n      t.hide();\n      l.hide();\n      br.setOffset({ left: 0, top: 0 });\n    }\n  }\n\n  resetAreaOffset() {\n    // console.log('offset:', offset);\n    const offset = this.data.getSelectedRect();\n    const coffset = this.data.getClipboardRect();\n    setAllAreaOffset.call(this, offset);\n    setAllClipboardOffset.call(this, coffset);\n    this.resetOffset();\n  }\n\n  resetBRTAreaOffset() {\n    const offset = this.data.getSelectedRect();\n    const coffset = this.data.getClipboardRect();\n    setBRAreaOffset.call(this, offset);\n    setTAreaOffset.call(this, offset);\n    setBRClipboardOffset.call(this, coffset);\n    setTClipboardOffset.call(this, coffset);\n    this.resetOffset();\n  }\n\n  resetBRLAreaOffset() {\n    const offset = this.data.getSelectedRect();\n    const coffset = this.data.getClipboardRect();\n    setBRAreaOffset.call(this, offset);\n    setLAreaOffset.call(this, offset);\n    setBRClipboardOffset.call(this, coffset);\n    setLClipboardOffset.call(this, coffset);\n    this.resetOffset();\n  }\n\n  set(ri, ci, indexesUpdated = true) {\n    const { data } = this;\n    const cellRange = data.calSelectedRangeByStart(ri, ci);\n    const { sri, sci } = cellRange;\n    if (indexesUpdated) {\n      let [cri, cci] = [ri, ci];\n      if (ri < 0) cri = 0;\n      if (ci < 0) cci = 0;\n      data.selector.setIndexes(cri, cci);\n      this.indexes = [cri, cci];\n    }\n\n    this.moveIndexes = [sri, sci];\n    // this.sIndexes = sIndexes;\n    // this.eIndexes = eIndexes;\n    this.range = cellRange;\n    this.resetAreaOffset();\n    this.el.show();\n  }\n\n  setEnd(ri, ci, moving = true) {\n    const { data, lastri, lastci } = this;\n    if (moving) {\n      if (ri === lastri && ci === lastci) return;\n      this.lastri = ri;\n      this.lastci = ci;\n    }\n    this.range = data.calSelectedRangeByEnd(ri, ci);\n    setAllAreaOffset.call(this, this.data.getSelectedRect());\n  }\n\n  reset() {\n    // console.log('::::', this.data);\n    const { eri, eci } = this.data.selector.range;\n    this.setEnd(eri, eci);\n  }\n\n  showAutofill(ri, ci) {\n    if (ri === -1 && ci === -1) return;\n    // console.log('ri:', ri, ', ci:', ci);\n    // const [sri, sci] = this.sIndexes;\n    // const [eri, eci] = this.eIndexes;\n    const {\n      sri, sci, eri, eci,\n    } = this.range;\n    const [nri, nci] = [ri, ci];\n    // const rn = eri - sri;\n    // const cn = eci - sci;\n    const srn = sri - ri;\n    const scn = sci - ci;\n    const ern = eri - ri;\n    const ecn = eci - ci;\n    if (scn > 0) {\n      // left\n      // console.log('left');\n      this.arange = new CellRange(sri, nci, eri, sci - 1);\n      // this.saIndexes = [sri, nci];\n      // this.eaIndexes = [eri, sci - 1];\n      // data.calRangeIndexes2(\n    } else if (srn > 0) {\n      // top\n      // console.log('top');\n      // nri = sri;\n      this.arange = new CellRange(nri, sci, sri - 1, eci);\n      // this.saIndexes = [nri, sci];\n      // this.eaIndexes = [sri - 1, eci];\n    } else if (ecn < 0) {\n      // right\n      // console.log('right');\n      // nci = eci;\n      this.arange = new CellRange(sri, eci + 1, eri, nci);\n      // this.saIndexes = [sri, eci + 1];\n      // this.eaIndexes = [eri, nci];\n    } else if (ern < 0) {\n      // bottom\n      // console.log('bottom');\n      // nri = eri;\n      this.arange = new CellRange(eri + 1, sci, nri, eci);\n      // this.saIndexes = [eri + 1, sci];\n      // this.eaIndexes = [nri, eci];\n    } else {\n      // console.log('else:');\n      this.arange = null;\n      // this.saIndexes = null;\n      // this.eaIndexes = null;\n      return;\n    }\n    if (this.arange !== null) {\n      // console.log(this.saIndexes, ':', this.eaIndexes);\n      const offset = this.data.getRect(this.arange);\n      offset.width += 2;\n      offset.height += 2;\n      const {\n        br, l, t, tl,\n      } = this;\n      br.showAutofill(calBRAreaOffset.call(this, offset));\n      l.showAutofill(calLAreaOffset.call(this, offset));\n      t.showAutofill(calTAreaOffset.call(this, offset));\n      tl.showAutofill(offset);\n    }\n  }\n\n  hideAutofill() {\n    ['br', 'l', 't', 'tl'].forEach((property) => {\n      this[property].hideAutofill();\n    });\n  }\n\n  showClipboard() {\n    const coffset = this.data.getClipboardRect();\n    setAllClipboardOffset.call(this, coffset);\n    ['br', 'l', 't', 'tl'].forEach((property) => {\n      this[property].showClipboard();\n    });\n  }\n\n  hideClipboard() {\n    ['br', 'l', 't', 'tl'].forEach((property) => {\n      this[property].hideClipboard();\n    });\n  }\n}\n","import { h } from './element';\nimport { bindClickoutside, unbindClickoutside } from './event';\nimport { cssPrefix } from '../config';\n\nfunction inputMovePrev(evt) {\n  evt.preventDefault();\n  evt.stopPropagation();\n  const { filterItems } = this;\n  if (filterItems.length <= 0) return;\n  if (this.itemIndex >= 0) filterItems[this.itemIndex].toggle();\n  this.itemIndex -= 1;\n  if (this.itemIndex < 0) {\n    this.itemIndex = filterItems.length - 1;\n  }\n  filterItems[this.itemIndex].toggle();\n}\n\nfunction inputMoveNext(evt) {\n  evt.stopPropagation();\n  const { filterItems } = this;\n  if (filterItems.length <= 0) return;\n  if (this.itemIndex >= 0) filterItems[this.itemIndex].toggle();\n  this.itemIndex += 1;\n  if (this.itemIndex > filterItems.length - 1) {\n    this.itemIndex = 0;\n  }\n  filterItems[this.itemIndex].toggle();\n}\n\nfunction inputEnter(evt) {\n  evt.preventDefault();\n  const { filterItems } = this;\n  if (filterItems.length <= 0) return;\n  evt.stopPropagation();\n  if (this.itemIndex < 0) this.itemIndex = 0;\n  filterItems[this.itemIndex].el.click();\n  this.hide();\n}\n\nfunction inputKeydownHandler(evt) {\n  const { keyCode } = evt;\n  if (evt.ctrlKey) {\n    evt.stopPropagation();\n  }\n  switch (keyCode) {\n    case 37: // left\n      evt.stopPropagation();\n      break;\n    case 38: // up\n      inputMovePrev.call(this, evt);\n      break;\n    case 39: // right\n      evt.stopPropagation();\n      break;\n    case 40: // down\n      inputMoveNext.call(this, evt);\n      break;\n    case 13: // enter\n      inputEnter.call(this, evt);\n      break;\n    case 9:\n      inputEnter.call(this, evt);\n      break;\n    default:\n      evt.stopPropagation();\n      break;\n  }\n}\n\nexport default class Suggest {\n  constructor(items, itemClick, width = '200px') {\n    this.filterItems = [];\n    this.items = items;\n    this.el = h('div', `${cssPrefix}-suggest`).css('width', width).hide();\n    this.itemClick = itemClick;\n    this.itemIndex = -1;\n  }\n\n  setOffset(v) {\n    this.el.cssRemoveKeys('top', 'bottom')\n      .offset(v);\n  }\n\n  hide() {\n    const { el } = this;\n    this.filterItems = [];\n    this.itemIndex = -1;\n    el.hide();\n    unbindClickoutside(this.el.parent());\n  }\n\n  setItems(items) {\n    this.items = items;\n    // this.search('');\n  }\n\n  search(word) {\n    let { items } = this;\n    if (!/^\\s*$/.test(word)) {\n      items = items.filter(it => (it.key || it).startsWith(word.toUpperCase()));\n    }\n    items = items.map((it) => {\n      let { title } = it;\n      if (title) {\n        if (typeof title === 'function') {\n          title = title();\n        }\n      } else {\n        title = it;\n      }\n      const item = h('div', `${cssPrefix}-item`)\n        .child(title)\n        .on('click.stop', () => {\n          this.itemClick(it);\n          this.hide();\n        });\n      if (it.label) {\n        item.child(h('div', 'label').html(it.label));\n      }\n      return item;\n    });\n    this.filterItems = items;\n    if (items.length <= 0) {\n      return;\n    }\n    const { el } = this;\n    // items[0].toggle();\n    el.html('').children(...items).show();\n    bindClickoutside(el.parent(), () => { this.hide(); });\n  }\n\n  bindInputEvents(input) {\n    input.on('keydown', evt => inputKeydownHandler.call(this, evt));\n  }\n}\n","import { Element, h } from './element';\nimport { cssPrefix } from '../config';\n\nexport default class Icon extends Element {\n  constructor(name) {\n    super('div', `${cssPrefix}-icon`);\n    this.iconNameEl = h('div', `${cssPrefix}-icon-img ${name}`);\n    this.child(this.iconNameEl);\n  }\n\n  setName(name) {\n    this.iconNameEl.className(`${cssPrefix}-icon-img ${name}`);\n  }\n}\n","import { h } from './element';\nimport Icon from './icon';\nimport { t } from '../locale/locale';\n\nfunction addMonth(date, step) {\n  date.setMonth(date.getMonth() + step);\n}\n\nfunction weekday(date, index) {\n  const d = new Date(date);\n  d.setDate(index - date.getDay() + 1);\n  return d;\n}\n\nfunction monthDays(year, month, cdate) {\n  // the first day of month\n  const startDate = new Date(year, month, 1, 23, 59, 59);\n  const datess = [[], [], [], [], [], []];\n  for (let i = 0; i < 6; i += 1) {\n    for (let j = 0; j < 7; j += 1) {\n      const index = i * 7 + j;\n      const d = weekday(startDate, index);\n      const disabled = d.getMonth() !== month;\n      // console.log('d:', d, ', cdate:', cdate);\n      const active = d.getMonth() === cdate.getMonth() && d.getDate() === cdate.getDate();\n      datess[i][j] = { d, disabled, active };\n    }\n  }\n  return datess;\n}\n\nexport default class Calendar {\n  constructor(value) {\n    this.value = value;\n    this.cvalue = new Date(value);\n\n    this.headerLeftEl = h('div', 'calendar-header-left');\n    this.bodyEl = h('tbody', '');\n    this.buildAll();\n    this.el = h('div', 'x-spreadsheet-calendar')\n      .children(\n        h('div', 'calendar-header').children(\n          this.headerLeftEl,\n          h('div', 'calendar-header-right').children(\n            h('a', 'calendar-prev')\n              .on('click.stop', () => this.prev())\n              .child(new Icon('chevron-left')),\n            h('a', 'calendar-next')\n              .on('click.stop', () => this.next())\n              .child(new Icon('chevron-right')),\n          ),\n        ),\n        h('table', 'calendar-body').children(\n          h('thead', '').child(\n            h('tr', '').children(\n              ...t('calendar.weeks').map(week => h('th', 'cell').child(week)),\n            ),\n          ),\n          this.bodyEl,\n        ),\n      );\n    this.selectChange = () => {};\n  }\n\n  setValue(value) {\n    this.value = value;\n    this.cvalue = new Date(value);\n    this.buildAll();\n  }\n\n  prev() {\n    const { value } = this;\n    addMonth(value, -1);\n    this.buildAll();\n  }\n\n  next() {\n    const { value } = this;\n    addMonth(value, 1);\n    this.buildAll();\n  }\n\n  buildAll() {\n    this.buildHeaderLeft();\n    this.buildBody();\n  }\n\n  buildHeaderLeft() {\n    const { value } = this;\n    this.headerLeftEl.html(`${t('calendar.months')[value.getMonth()]} ${value.getFullYear()}`);\n  }\n\n  buildBody() {\n    const { value, cvalue, bodyEl } = this;\n    const mDays = monthDays(value.getFullYear(), value.getMonth(), cvalue);\n    const trs = mDays.map((it) => {\n      const tds = it.map((it1) => {\n        let cls = 'cell';\n        if (it1.disabled) cls += ' disabled';\n        if (it1.active) cls += ' active';\n        return h('td', '').child(\n          h('div', cls)\n            .on('click.stop', () => {\n              this.selectChange(it1.d);\n            })\n            .child(it1.d.getDate().toString()),\n        );\n      });\n      return h('tr', '').children(...tds);\n    });\n    bodyEl.html('').children(...trs);\n  }\n}\n","import Calendar from './calendar';\nimport { h } from './element';\nimport { cssPrefix } from '../config';\n\nexport default class Datepicker {\n  constructor() {\n    this.calendar = new Calendar(new Date());\n    this.el = h('div', `${cssPrefix}-datepicker`).child(\n      this.calendar.el,\n    ).hide();\n  }\n\n  setValue(date) {\n    // console.log(':::::::', date, typeof date, date instanceof string);\n    const { calendar } = this;\n    if (typeof date === 'string') {\n      // console.log(/^\\d{4}-\\d{1,2}-\\d{1,2}$/.test(date));\n      if (/^\\d{4}-\\d{1,2}-\\d{1,2}$/.test(date)) {\n        calendar.setValue(new Date(date.replace(new RegExp('-', 'g'), '/')));\n      }\n    } else if (date instanceof Date) {\n      calendar.setValue(date);\n    }\n    return this;\n  }\n\n  change(cb) {\n    this.calendar.selectChange = (d) => {\n      cb(d);\n      this.hide();\n    };\n  }\n\n  show() {\n    this.el.show();\n  }\n\n  hide() {\n    this.el.hide();\n  }\n}\n","//* global window */\nimport { h } from './element';\nimport Suggest from './suggest';\nimport Datepicker from './datepicker';\nimport { cssPrefix } from '../config';\n// import { mouseMoveUp } from '../event';\n\nfunction resetTextareaSize() {\n  const { inputText } = this;\n  if (!/^\\s*$/.test(inputText)) {\n    const {\n      textlineEl, textEl, areaOffset,\n    } = this;\n    const txts = inputText.split('\\n');\n    const maxTxtSize = Math.max(...txts.map(it => it.length));\n    const tlOffset = textlineEl.offset();\n    const fontWidth = tlOffset.width / inputText.length;\n    const tlineWidth = (maxTxtSize + 1) * fontWidth + 5;\n    const maxWidth = this.viewFn().width - areaOffset.left - fontWidth;\n    let h1 = txts.length;\n    if (tlineWidth > areaOffset.width) {\n      let twidth = tlineWidth;\n      if (tlineWidth > maxWidth) {\n        twidth = maxWidth;\n        h1 += parseInt(tlineWidth / maxWidth, 10);\n        h1 += (tlineWidth % maxWidth) > 0 ? 1 : 0;\n      }\n      textEl.css('width', `${twidth}px`);\n    }\n    h1 *= this.rowHeight;\n    if (h1 > areaOffset.height) {\n      textEl.css('height', `${h1}px`);\n    }\n  }\n}\n\nfunction insertText({ target }, itxt) {\n  const { value, selectionEnd } = target;\n  const ntxt = `${value.slice(0, selectionEnd)}${itxt}${value.slice(selectionEnd)}`;\n  target.value = ntxt;\n  target.setSelectionRange(selectionEnd + 1, selectionEnd + 1);\n\n  this.inputText = ntxt;\n  this.textlineEl.html(ntxt);\n  resetTextareaSize.call(this);\n}\n\nfunction keydownEventHandler(evt) {\n  const { keyCode, altKey } = evt;\n  if (keyCode !== 13 && keyCode !== 9) evt.stopPropagation();\n  if (keyCode === 13 && altKey) {\n    insertText.call(this, evt, '\\n');\n    evt.stopPropagation();\n  }\n  if (keyCode === 13 && !altKey) evt.preventDefault();\n}\n\nfunction inputEventHandler(evt) {\n  const v = evt.target.value;\n  // console.log(evt, 'v:', v);\n  const { suggest, textlineEl, validator } = this;\n  const { cell } = this;\n  if (cell !== null) {\n    if (('editable' in cell && cell.editable === true) || (cell.editable === undefined)) {\n      this.inputText = v;\n      if (validator) {\n        if (validator.type === 'list') {\n          suggest.search(v);\n        } else {\n          suggest.hide();\n        }\n      } else {\n        const start = v.lastIndexOf('=');\n        if (start !== -1) {\n          suggest.search(v.substring(start + 1));\n        } else {\n          suggest.hide();\n        }\n      }\n      textlineEl.html(v);\n      resetTextareaSize.call(this);\n      this.change('input', v);\n    } else {\n      evt.target.value = cell.text;\n    }\n  } else {\n    this.inputText = v;\n    if (validator) {\n      if (validator.type === 'list') {\n        suggest.search(v);\n      } else {\n        suggest.hide();\n      }\n    } else {\n      const start = v.lastIndexOf('=');\n      if (start !== -1) {\n        suggest.search(v.substring(start + 1));\n      } else {\n        suggest.hide();\n      }\n    }\n    textlineEl.html(v);\n    resetTextareaSize.call(this);\n    this.change('input', v);\n  }\n}\n\nfunction setTextareaRange(position) {\n  const { el } = this.textEl;\n  setTimeout(() => {\n    el.focus();\n    el.setSelectionRange(position, position);\n  }, 0);\n}\n\nfunction setText(text, position) {\n  const { textEl, textlineEl } = this;\n  // firefox bug\n  textEl.el.blur();\n\n  textEl.val(text);\n  textlineEl.html(text);\n  setTextareaRange.call(this, position);\n}\n\nfunction suggestItemClick(it) {\n  const { inputText, validator } = this;\n  let position = 0;\n  if (validator && validator.type === 'list') {\n    this.inputText = it;\n    position = this.inputText.length;\n  } else {\n    const start = inputText.lastIndexOf('=');\n    const sit = inputText.substring(0, start + 1);\n    let eit = inputText.substring(start + 1);\n    if (eit.indexOf(')') !== -1) {\n      eit = eit.substring(eit.indexOf(')'));\n    } else {\n      eit = '';\n    }\n    this.inputText = `${sit + it.key}(`;\n    // console.log('inputText:', this.inputText);\n    position = this.inputText.length;\n    this.inputText += `)${eit}`;\n  }\n  setText.call(this, this.inputText, position);\n}\n\nfunction resetSuggestItems() {\n  this.suggest.setItems(this.formulas);\n}\n\nfunction dateFormat(d) {\n  let month = d.getMonth() + 1;\n  let date = d.getDate();\n  if (month < 10) month = `0${month}`;\n  if (date < 10) date = `0${date}`;\n  return `${d.getFullYear()}-${month}-${date}`;\n}\n\nexport default class Editor {\n  constructor(formulas, viewFn, rowHeight) {\n    this.viewFn = viewFn;\n    this.rowHeight = rowHeight;\n    this.formulas = formulas;\n    this.suggest = new Suggest(formulas, (it) => {\n      suggestItemClick.call(this, it);\n    });\n    this.datepicker = new Datepicker();\n    this.datepicker.change((d) => {\n      // console.log('d:', d);\n      this.setText(dateFormat(d));\n      this.clear();\n    });\n    this.areaEl = h('div', `${cssPrefix}-editor-area`)\n      .children(\n        this.textEl = h('textarea', '')\n          .on('input', evt => inputEventHandler.call(this, evt))\n          .on('paste.stop', () => {})\n          .on('keydown', evt => keydownEventHandler.call(this, evt)),\n        this.textlineEl = h('div', 'textline'),\n        this.suggest.el,\n        this.datepicker.el,\n      )\n      .on('mousemove.stop', () => {})\n      .on('mousedown.stop', () => {});\n    this.el = h('div', `${cssPrefix}-editor`)\n      .child(this.areaEl).hide();\n    this.suggest.bindInputEvents(this.textEl);\n\n    this.areaOffset = null;\n    this.freeze = { w: 0, h: 0 };\n    this.cell = null;\n    this.inputText = '';\n    this.change = () => {};\n  }\n\n  setFreezeLengths(width, height) {\n    this.freeze.w = width;\n    this.freeze.h = height;\n  }\n\n  clear() {\n    // const { cell } = this;\n    // const cellText = (cell && cell.text) || '';\n    if (this.inputText !== '') {\n      this.change('finished', this.inputText);\n    }\n    this.cell = null;\n    this.areaOffset = null;\n    this.inputText = '';\n    this.el.hide();\n    this.textEl.val('');\n    this.textlineEl.html('');\n    resetSuggestItems.call(this);\n    this.datepicker.hide();\n  }\n\n  setOffset(offset, suggestPosition = 'top') {\n    const {\n      textEl, areaEl, suggest, freeze, el,\n    } = this;\n    if (offset) {\n      this.areaOffset = offset;\n      const {\n        left, top, width, height, l, t,\n      } = offset;\n      // console.log('left:', left, ',top:', top, ', freeze:', freeze);\n      const elOffset = { left: 0, top: 0 };\n      // top left\n      if (freeze.w > l && freeze.h > t) {\n        //\n      } else if (freeze.w < l && freeze.h < t) {\n        elOffset.left = freeze.w;\n        elOffset.top = freeze.h;\n      } else if (freeze.w > l) {\n        elOffset.top = freeze.h;\n      } else if (freeze.h > t) {\n        elOffset.left = freeze.w;\n      }\n      el.offset(elOffset);\n      areaEl.offset({ left: left - elOffset.left - 0.8, top: top - elOffset.top - 0.8 });\n      textEl.offset({ width: width - 9 + 0.8, height: height - 3 + 0.8 });\n      const sOffset = { left: 0 };\n      sOffset[suggestPosition] = height;\n      suggest.setOffset(sOffset);\n      suggest.hide();\n    }\n  }\n\n  setCell(cell, validator) {\n    // console.log('::', validator);\n    const { el, datepicker, suggest } = this;\n    el.show();\n    this.cell = cell;\n    const text = (cell && cell.text) || '';\n    this.setText(text);\n\n    this.validator = validator;\n    if (validator) {\n      const { type } = validator;\n      if (type === 'date') {\n        datepicker.show();\n        if (!/^\\s*$/.test(text)) {\n          datepicker.setValue(text);\n        }\n      }\n      if (type === 'list') {\n        suggest.setItems(validator.values());\n        suggest.search('');\n      }\n    }\n  }\n\n  setText(text) {\n    this.inputText = text;\n    // console.log('text>>:', text);\n    setText.call(this, text, text.length);\n    resetTextareaSize.call(this);\n  }\n}\n","import { Element } from './element';\nimport { cssPrefix } from '../config';\nimport { t } from '../locale/locale';\n\nexport default class Button extends Element {\n  // type: primary\n  constructor(title, type = '') {\n    super('div', `${cssPrefix}-button ${type}`);\n    this.child(t(`button.${title}`));\n  }\n}\n","/* global window */\nfunction dpr() {\n  return window.devicePixelRatio || 1;\n}\n\nfunction thinLineWidth() {\n  return dpr() - 0.5;\n}\n\nfunction npx(px) {\n  return parseInt(px * dpr(), 10);\n}\n\nfunction npxLine(px) {\n  const n = npx(px);\n  return n > 0 ? n - 0.5 : 0.5;\n}\n\nclass DrawBox {\n  constructor(x, y, w, h, padding = 0) {\n    this.x = x;\n    this.y = y;\n    this.width = w;\n    this.height = h;\n    this.padding = padding;\n    this.bgcolor = '#ffffff';\n    // border: [width, style, color]\n    this.borderTop = null;\n    this.borderRight = null;\n    this.borderBottom = null;\n    this.borderLeft = null;\n  }\n\n  setBorders({\n    top, bottom, left, right,\n  }) {\n    if (top) this.borderTop = top;\n    if (right) this.borderRight = right;\n    if (bottom) this.borderBottom = bottom;\n    if (left) this.borderLeft = left;\n  }\n\n  innerWidth() {\n    return this.width - (this.padding * 2) - 2;\n  }\n\n  innerHeight() {\n    return this.height - (this.padding * 2) - 2;\n  }\n\n  textx(align) {\n    const { width, padding } = this;\n    let { x } = this;\n    if (align === 'left') {\n      x += padding;\n    } else if (align === 'center') {\n      x += width / 2;\n    } else if (align === 'right') {\n      x += width - padding;\n    }\n    return x;\n  }\n\n  texty(align, h) {\n    const { height, padding } = this;\n    let { y } = this;\n    if (align === 'top') {\n      y += padding;\n    } else if (align === 'middle') {\n      y += height / 2 - h / 2;\n    } else if (align === 'bottom') {\n      y += height - padding - h;\n    }\n    return y;\n  }\n\n  topxys() {\n    const { x, y, width } = this;\n    return [[x, y], [x + width, y]];\n  }\n\n  rightxys() {\n    const {\n      x, y, width, height,\n    } = this;\n    return [[x + width, y], [x + width, y + height]];\n  }\n\n  bottomxys() {\n    const {\n      x, y, width, height,\n    } = this;\n    return [[x, y + height], [x + width, y + height]];\n  }\n\n  leftxys() {\n    const {\n      x, y, height,\n    } = this;\n    return [[x, y], [x, y + height]];\n  }\n}\n\nfunction drawFontLine(type, tx, ty, align, valign, blheight, blwidth) {\n  const floffset = { x: 0, y: 0 };\n  if (type === 'underline') {\n    if (valign === 'bottom') {\n      floffset.y = 0;\n    } else if (valign === 'top') {\n      floffset.y = -(blheight + 2);\n    } else {\n      floffset.y = -blheight / 2;\n    }\n  } else if (type === 'strike') {\n    if (valign === 'bottom') {\n      floffset.y = blheight / 2;\n    } else if (valign === 'top') {\n      floffset.y = -((blheight / 2) + 2);\n    }\n  }\n\n  if (align === 'center') {\n    floffset.x = blwidth / 2;\n  } else if (align === 'right') {\n    floffset.x = blwidth;\n  }\n  this.line(\n    [tx - floffset.x, ty - floffset.y],\n    [tx - floffset.x + blwidth, ty - floffset.y],\n  );\n}\n\nclass Draw {\n  constructor(el, width, height) {\n    this.el = el;\n    this.ctx = el.getContext('2d');\n    this.resize(width, height);\n    this.ctx.scale(dpr(), dpr());\n  }\n\n  resize(width, height) {\n    // console.log('dpr:', dpr);\n    this.el.style.width = `${width}px`;\n    this.el.style.height = `${height}px`;\n    this.el.width = npx(width);\n    this.el.height = npx(height);\n  }\n\n  clear() {\n    const { width, height } = this.el;\n    this.ctx.clearRect(0, 0, width, height);\n    return this;\n  }\n\n  attr(options) {\n    Object.assign(this.ctx, options);\n    return this;\n  }\n\n  save() {\n    this.ctx.save();\n    this.ctx.beginPath();\n    return this;\n  }\n\n  restore() {\n    this.ctx.restore();\n    return this;\n  }\n\n  beginPath() {\n    this.ctx.beginPath();\n    return this;\n  }\n\n  translate(x, y) {\n    this.ctx.translate(npx(x), npx(y));\n    return this;\n  }\n\n  scale(x, y) {\n    this.ctx.scale(x, y);\n    return this;\n  }\n\n  clearRect(x, y, w, h) {\n    this.ctx.clearRect(x, y, w, h);\n    return this;\n  }\n\n  fillRect(x, y, w, h) {\n    this.ctx.fillRect(npx(x) - 0.5, npx(y) - 0.5, npx(w), npx(h));\n    return this;\n  }\n\n  fillText(text, x, y) {\n    this.ctx.fillText(text, npx(x), npx(y));\n    return this;\n  }\n\n  /*\n    txt: render text\n    box: DrawBox\n    attr: {\n      align: left | center | right\n      valign: top | middle | bottom\n      color: '#333333',\n      strike: false,\n      font: {\n        name: 'Arial',\n        size: 14,\n        bold: false,\n        italic: false,\n      }\n    }\n    textWrap: text wrapping\n  */\n  text(mtxt, box, attr = {}, textWrap = true) {\n    const { ctx } = this;\n    const {\n      align, valign, font, color, strike, underline,\n    } = attr;\n    const tx = box.textx(align);\n    ctx.save();\n    ctx.beginPath();\n    this.attr({\n      textAlign: align,\n      textBaseline: valign,\n      font: `${font.italic ? 'italic' : ''} ${font.bold ? 'bold' : ''} ${npx(font.size)}px ${font.name}`,\n      fillStyle: color,\n      strokeStyle: color,\n    });\n    const txts = `${mtxt}`.split('\\n');\n    const biw = box.innerWidth();\n    const ntxts = [];\n    txts.forEach((it) => {\n      const txtWidth = ctx.measureText(it).width;\n      if (textWrap && txtWidth > npx(biw)) {\n        let textLine = { w: 0, len: 0, start: 0 };\n        for (let i = 0; i < it.length; i += 1) {\n          if (textLine.w >= npx(biw)) {\n            ntxts.push(it.substr(textLine.start, textLine.len));\n            textLine = { w: 0, len: 0, start: i };\n          }\n          textLine.len += 1;\n          textLine.w += ctx.measureText(it[i]).width + 1;\n        }\n        if (textLine.len > 0) {\n          ntxts.push(it.substr(textLine.start, textLine.len));\n        }\n      } else {\n        ntxts.push(it);\n      }\n    });\n    const txtHeight = (ntxts.length - 1) * (font.size + 2);\n    let ty = box.texty(valign, txtHeight);\n    ntxts.forEach((txt) => {\n      const txtWidth = ctx.measureText(txt).width;\n      this.fillText(txt, tx, ty);\n      if (strike) {\n        drawFontLine.call(this, 'strike', tx, ty, align, valign, font.size, txtWidth);\n      }\n      if (underline) {\n        drawFontLine.call(this, 'underline', tx, ty, align, valign, font.size, txtWidth);\n      }\n      ty += font.size + 2;\n    });\n    ctx.restore();\n    return this;\n  }\n\n  border(style, color) {\n    const { ctx } = this;\n    ctx.lineWidth = thinLineWidth;\n    ctx.strokeStyle = color;\n    // console.log('style:', style);\n    if (style === 'medium') {\n      ctx.lineWidth = npx(2) - 0.5;\n    } else if (style === 'thick') {\n      ctx.lineWidth = npx(3);\n    } else if (style === 'dashed') {\n      ctx.setLineDash([npx(3), npx(2)]);\n    } else if (style === 'dotted') {\n      ctx.setLineDash([npx(1), npx(1)]);\n    } else if (style === 'double') {\n      ctx.setLineDash([npx(2), 0]);\n    }\n    return this;\n  }\n\n  line(...xys) {\n    const { ctx } = this;\n    if (xys.length > 1) {\n      ctx.beginPath();\n      const [x, y] = xys[0];\n      ctx.moveTo(npxLine(x), npxLine(y));\n      for (let i = 1; i < xys.length; i += 1) {\n        const [x1, y1] = xys[i];\n        ctx.lineTo(npxLine(x1), npxLine(y1));\n      }\n      ctx.stroke();\n    }\n    return this;\n  }\n\n  strokeBorders(box) {\n    const { ctx } = this;\n    ctx.save();\n    // border\n    const {\n      borderTop, borderRight, borderBottom, borderLeft,\n    } = box;\n    if (borderTop) {\n      this.border(...borderTop);\n      // console.log('box.topxys:', box.topxys());\n      this.line(...box.topxys());\n    }\n    if (borderRight) {\n      this.border(...borderRight);\n      this.line(...box.rightxys());\n    }\n    if (borderBottom) {\n      this.border(...borderBottom);\n      this.line(...box.bottomxys());\n    }\n    if (borderLeft) {\n      this.border(...borderLeft);\n      this.line(...box.leftxys());\n    }\n    ctx.restore();\n  }\n\n  dropdown(box) {\n    const { ctx } = this;\n    const {\n      x, y, width, height,\n    } = box;\n    const sx = x + width - 15;\n    const sy = y + height - 15;\n    ctx.save();\n    ctx.beginPath();\n    ctx.moveTo(npx(sx), npx(sy));\n    ctx.lineTo(npx(sx + 8), npx(sy));\n    ctx.lineTo(npx(sx + 4), npx(sy + 6));\n    ctx.closePath();\n    ctx.fillStyle = 'rgba(0, 0, 0, .45)';\n    ctx.fill();\n    ctx.restore();\n  }\n\n  error(box) {\n    const { ctx } = this;\n    const { x, y, width } = box;\n    const sx = x + width - 1;\n    ctx.save();\n    ctx.beginPath();\n    ctx.moveTo(npx(sx - 8), npx(y - 1));\n    ctx.lineTo(npx(sx), npx(y - 1));\n    ctx.lineTo(npx(sx), npx(y + 8));\n    ctx.closePath();\n    ctx.fillStyle = 'rgba(255, 0, 0, .65)';\n    ctx.fill();\n    ctx.restore();\n  }\n\n  frozen(box) {\n    const { ctx } = this;\n    const { x, y, width } = box;\n    const sx = x + width - 1;\n    ctx.save();\n    ctx.beginPath();\n    ctx.moveTo(npx(sx - 8), npx(y - 1));\n    ctx.lineTo(npx(sx), npx(y - 1));\n    ctx.lineTo(npx(sx), npx(y + 8));\n    ctx.closePath();\n    ctx.fillStyle = 'rgba(0, 255, 0, .85)';\n    ctx.fill();\n    ctx.restore();\n  }\n\n  rect(box, dtextcb) {\n    const { ctx } = this;\n    const {\n      x, y, width, height, bgcolor,\n    } = box;\n    ctx.save();\n    ctx.beginPath();\n    ctx.fillStyle = bgcolor || '#fff';\n    ctx.rect(npxLine(x + 1), npxLine(y + 1), npx(width - 2), npx(height - 2));\n    ctx.clip();\n    ctx.fill();\n    dtextcb();\n    ctx.restore();\n  }\n}\n\nexport default {};\nexport {\n  Draw,\n  DrawBox,\n  thinLineWidth,\n  npx,\n};\n","// docs\nimport './_.prototypes';\n\n/** default font list\n * @type {BaseFont[]}\n */\nconst baseFonts = [\n  { key: 'Arial', title: 'Arial' },\n  { key: 'Helvetica', title: 'Helvetica' },\n  { key: 'Source Sans Pro', title: 'Source Sans Pro' },\n  { key: 'Comic Sans MS', title: 'Comic Sans MS' },\n  { key: 'Courier New', title: 'Courier New' },\n  { key: 'Verdana', title: 'Verdana' },\n  { key: 'Lato', title: 'Lato' },\n];\n\n/** default fontSize list\n * @type {FontSize[]}\n */\nconst fontSizes = [\n  { pt: 7.5, px: 10 },\n  { pt: 8, px: 11 },\n  { pt: 9, px: 12 },\n  { pt: 10, px: 13 },\n  { pt: 10.5, px: 14 },\n  { pt: 11, px: 15 },\n  { pt: 12, px: 16 },\n  { pt: 14, px: 18.7 },\n  { pt: 15, px: 20 },\n  { pt: 16, px: 21.3 },\n  { pt: 18, px: 24 },\n  { pt: 22, px: 29.3 },\n  { pt: 24, px: 32 },\n  { pt: 26, px: 34.7 },\n  { pt: 36, px: 48 },\n  { pt: 42, px: 56 },\n  // { pt: 54, px: 71.7 },\n  // { pt: 63, px: 83.7 },\n  // { pt: 72, px: 95.6 },\n];\n\n/** map pt to px\n * @date 2019-10-10\n * @param {fontsizePT} pt\n * @returns {fontsizePX}\n */\nfunction getFontSizePxByPt(pt) {\n  for (let i = 0; i < fontSizes.length; i += 1) {\n    const fontSize = fontSizes[i];\n    if (fontSize.pt === pt) {\n      return fontSize.px;\n    }\n  }\n  return pt;\n}\n\n/** transform baseFonts to map\n * @date 2019-10-10\n * @param {BaseFont[]} [ary=[]]\n * @returns {object}\n */\nfunction fonts(ary = []) {\n  const map = {};\n  baseFonts.concat(ary).forEach((f) => {\n    map[f.key] = f;\n  });\n  return map;\n}\n\nexport default {};\nexport {\n  fontSizes,\n  fonts,\n  baseFonts,\n  getFontSizePxByPt,\n};\n","import { expr2xy, xy2expr } from './alphabet';\nimport { numberCalc } from './helper';\n\n// Converting infix expression to a suffix expression\n// src: AVERAGE(SUM(A1,A2), B1) + 50 + B20\n// return: [A1, A2], SUM[, B1],AVERAGE,50,+,B20,+\nconst infixExprToSuffixExpr = (src) => {\n  const operatorStack = [];\n  const stack = [];\n  let subStrs = []; // SUM, A1, B2, 50 ...\n  let fnArgType = 0; // 1 => , 2 => :\n  let fnArgOperator = '';\n  let fnArgsLen = 1; // A1,A2,A3...\n  let oldc = '';\n  for (let i = 0; i < src.length; i += 1) {\n    const c = src.charAt(i);\n    if (c !== ' ') {\n      if (c >= 'a' && c <= 'z') {\n        subStrs.push(c.toUpperCase());\n      } else if ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || c === '.') {\n        subStrs.push(c);\n      } else if (c === '\"') {\n        i += 1;\n        while (src.charAt(i) !== '\"') {\n          subStrs.push(src.charAt(i));\n          i += 1;\n        }\n        stack.push(`\"${subStrs.join('')}`);\n        subStrs = [];\n      } else if (c === '-' && /[+\\-*/,(]/.test(oldc)) {\n        subStrs.push(c);\n      } else {\n        // console.log('subStrs:', subStrs.join(''), stack);\n        if (c !== '(' && subStrs.length > 0) {\n          stack.push(subStrs.join(''));\n        }\n        if (c === ')') {\n          let c1 = operatorStack.pop();\n          if (fnArgType === 2) {\n            // fn argument range => A1:B5\n            try {\n              const [ex, ey] = expr2xy(stack.pop());\n              const [sx, sy] = expr2xy(stack.pop());\n              // console.log('::', sx, sy, ex, ey);\n              let rangelen = 0;\n              for (let x = sx; x <= ex; x += 1) {\n                for (let y = sy; y <= ey; y += 1) {\n                  stack.push(xy2expr(x, y));\n                  rangelen += 1;\n                }\n              }\n              stack.push([c1, rangelen]);\n            } catch (e) {\n              // console.log(e);\n            }\n          } else if (fnArgType === 1 || fnArgType === 3) {\n            if (fnArgType === 3) stack.push(fnArgOperator);\n            // fn argument => A1,A2,B5\n            stack.push([c1, fnArgsLen]);\n            fnArgsLen = 1;\n          } else {\n            // console.log('c1:', c1, fnArgType, stack, operatorStack);\n            while (c1 !== '(') {\n              stack.push(c1);\n              if (operatorStack.length <= 0) break;\n              c1 = operatorStack.pop();\n            }\n          }\n          fnArgType = 0;\n        } else if (c === '=' || c === '>' || c === '<') {\n          const nc = src.charAt(i + 1);\n          fnArgOperator = c;\n          if (nc === '=' || nc === '-') {\n            fnArgOperator += nc;\n            i += 1;\n          }\n          fnArgType = 3;\n        } else if (c === ':') {\n          fnArgType = 2;\n        } else if (c === ',') {\n          if (fnArgType === 3) {\n            stack.push(fnArgOperator);\n          }\n          fnArgType = 1;\n          fnArgsLen += 1;\n        } else if (c === '(' && subStrs.length > 0) {\n          // function\n          operatorStack.push(subStrs.join(''));\n        } else {\n          // priority: */ > +-\n          // console.log('xxxx:', operatorStack, c, stack);\n          if (operatorStack.length > 0 && (c === '+' || c === '-')) {\n            let top = operatorStack[operatorStack.length - 1];\n            if (top !== '(') stack.push(operatorStack.pop());\n            if (top === '*' || top === '/') {\n              while (operatorStack.length > 0) {\n                top = operatorStack[operatorStack.length - 1];\n                if (top !== '(') stack.push(operatorStack.pop());\n                else break;\n              }\n            }\n          } else if (operatorStack.length > 0) {\n            const top = operatorStack[operatorStack.length - 1];\n            if (top === '*' || top === '/') stack.push(operatorStack.pop());\n          }\n          operatorStack.push(c);\n        }\n        subStrs = [];\n      }\n      oldc = c;\n    }\n  }\n  if (subStrs.length > 0) {\n    stack.push(subStrs.join(''));\n  }\n  while (operatorStack.length > 0) {\n    stack.push(operatorStack.pop());\n  }\n  return stack;\n};\n\nconst evalSubExpr = (subExpr, cellRender) => {\n  const [fl] = subExpr;\n  let expr = subExpr;\n  if (fl === '\"') {\n    return subExpr.substring(1);\n  }\n  let ret = 1;\n  if (fl === '-') {\n    expr = subExpr.substring(1);\n    ret = -1;\n  }\n  if (expr[0] >= '0' && expr[0] <= '9') {\n    return ret * Number(expr);\n  }\n  const [x, y] = expr2xy(expr);\n  return ret * cellRender(x, y);\n};\n\n// evaluate the suffix expression\n// srcStack: <= infixExprToSufixExpr\n// formulaMap: {'SUM': {}, ...}\n// cellRender: (x, y) => {}\nconst evalSuffixExpr = (srcStack, formulaMap, cellRender, cellList) => {\n  const stack = [];\n  // console.log(':::::formulaMap:', formulaMap);\n  for (let i = 0; i < srcStack.length; i += 1) {\n    // console.log(':::>>>', srcStack[i]);\n    const expr = srcStack[i];\n    const fc = expr[0];\n    if (expr === '+') {\n      const top = stack.pop();\n      stack.push(numberCalc('+', stack.pop(), top));\n    } else if (expr === '-') {\n      if (stack.length === 1) {\n        const top = stack.pop();\n        stack.push(numberCalc('*', top, -1));\n      } else {\n        const top = stack.pop();\n        stack.push(numberCalc('-', stack.pop(), top));\n      }\n    } else if (expr === '*') {\n      stack.push(numberCalc('*', stack.pop(), stack.pop()));\n    } else if (expr === '/') {\n      const top = stack.pop();\n      stack.push(numberCalc('/', stack.pop(), top));\n    } else if (fc === '=' || fc === '>' || fc === '<') {\n      let top = stack.pop();\n      if (!Number.isNaN(top)) top = Number(top);\n      let left = stack.pop();\n      if (!Number.isNaN(left)) left = Number(left);\n      let ret = false;\n      if (fc === '=') {\n        ret = (left === top);\n      } else if (expr === '>') {\n        ret = (left > top);\n      } else if (expr === '>=') {\n        ret = (left >= top);\n      } else if (expr === '<') {\n        ret = (left < top);\n      } else if (expr === '<=') {\n        ret = (left <= top);\n      }\n      stack.push(ret);\n    } else if (Array.isArray(expr)) {\n      const [formula, len] = expr;\n      const params = [];\n      for (let j = 0; j < len; j += 1) {\n        params.push(stack.pop());\n      }\n      stack.push(formulaMap[formula].render(params.reverse()));\n    } else {\n      if (cellList.includes(expr)) {\n        return 0;\n      }\n      if ((fc >= 'a' && fc <= 'z') || (fc >= 'A' && fc <= 'Z')) {\n        cellList.push(expr);\n      }\n      stack.push(evalSubExpr(expr, cellRender));\n      cellList.pop();\n    }\n    // console.log('stack:', stack);\n  }\n  return stack[0];\n};\n\nconst cellRender = (src, formulaMap, getCellText, cellList = []) => {\n  if (src[0] === '=') {\n    const stack = infixExprToSuffixExpr(src.substring(1));\n    if (stack.length <= 0) return src;\n    return evalSuffixExpr(\n      stack,\n      formulaMap,\n      (x, y) => cellRender(getCellText(x, y), formulaMap, getCellText, cellList),\n      cellList,\n    );\n  }\n  return src;\n};\n\nexport default {\n  render: cellRender,\n};\nexport {\n  infixExprToSuffixExpr,\n};\n","/**\n  formula:\n    key\n    title\n    render\n*/\n/**\n * @typedef {object} Formula\n * @property {string} key\n * @property {function} title\n * @property {function} render\n */\nimport { tf } from '../locale/locale';\nimport { numberCalc } from './helper';\n\n/** @type {Formula[]} */\nconst baseFormulas = [\n  {\n    key: 'SUM',\n    title: tf('formula.sum'),\n    render: ary => ary.reduce((a, b) => numberCalc('+', a, b), 0),\n  },\n  {\n    key: 'AVERAGE',\n    title: tf('formula.average'),\n    render: ary => ary.reduce((a, b) => Number(a) + Number(b), 0) / ary.length,\n  },\n  {\n    key: 'MAX',\n    title: tf('formula.max'),\n    render: ary => Math.max(...ary.map(v => Number(v))),\n  },\n  {\n    key: 'MIN',\n    title: tf('formula.min'),\n    render: ary => Math.min(...ary.map(v => Number(v))),\n  },\n  {\n    key: 'IF',\n    title: tf('formula._if'),\n    render: ([b, t, f]) => (b ? t : f),\n  },\n  {\n    key: 'AND',\n    title: tf('formula.and'),\n    render: ary => ary.every(it => it),\n  },\n  {\n    key: 'OR',\n    title: tf('formula.or'),\n    render: ary => ary.some(it => it),\n  },\n  {\n    key: 'CONCAT',\n    title: tf('formula.concat'),\n    render: ary => ary.join(''),\n  },\n  /* support:  1 + A1 + B2 * 3\n  {\n    key: 'DIVIDE',\n    title: tf('formula.divide'),\n    render: ary => ary.reduce((a, b) => Number(a) / Number(b)),\n  },\n  {\n    key: 'PRODUCT',\n    title: tf('formula.product'),\n    render: ary => ary.reduce((a, b) => Number(a) * Number(b),1),\n  },\n  {\n    key: 'SUBTRACT',\n    title: tf('formula.subtract'),\n    render: ary => ary.reduce((a, b) => Number(a) - Number(b)),\n  },\n  */\n];\n\nconst formulas = baseFormulas;\n\n// const formulas = (formulaAry = []) => {\n//   const formulaMap = {};\n//   baseFormulas.concat(formulaAry).forEach((f) => {\n//     formulaMap[f.key] = f;\n//   });\n//   return formulaMap;\n// };\nconst formulam = {};\nbaseFormulas.forEach((f) => {\n  formulam[f.key] = f;\n});\n\nexport default {\n};\n\nexport {\n  formulam,\n  formulas,\n  baseFormulas,\n};\n","import { tf } from '../locale/locale';\n\nconst formatStringRender = v => v;\n\nconst formatNumberRender = (v) => {\n  // match \"-12.1\" or \"12\" or \"12.1\"\n  if (/^(-?\\d*.?\\d*)$/.test(v)) {\n    const v1 = Number(v).toFixed(2).toString();\n    const [first, ...parts] = v1.split('\\\\.');\n    return [first.replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, '$1,'), ...parts];\n  }\n  return v;\n};\n\nconst baseFormats = [\n  {\n    key: 'normal',\n    title: tf('format.normal'),\n    type: 'string',\n    render: formatStringRender,\n  },\n  {\n    key: 'text',\n    title: tf('format.text'),\n    type: 'string',\n    render: formatStringRender,\n  },\n  {\n    key: 'number',\n    title: tf('format.number'),\n    type: 'number',\n    label: '1,000.12',\n    render: formatNumberRender,\n  },\n  {\n    key: 'percent',\n    title: tf('format.percent'),\n    type: 'number',\n    label: '10.12%',\n    render: v => `${v}%`,\n  },\n  {\n    key: 'rmb',\n    title: tf('format.rmb'),\n    type: 'number',\n    label: '￥10.00',\n    render: v => `￥${formatNumberRender(v)}`,\n  },\n  {\n    key: 'usd',\n    title: tf('format.usd'),\n    type: 'number',\n    label: '$10.00',\n    render: v => `$${formatNumberRender(v)}`,\n  },\n  {\n    key: 'eur',\n    title: tf('format.eur'),\n    type: 'number',\n    label: '€10.00',\n    render: v => `€${formatNumberRender(v)}`,\n  },\n  {\n    key: 'date',\n    title: tf('format.date'),\n    type: 'date',\n    label: '26/09/2008',\n    render: formatStringRender,\n  },\n  {\n    key: 'time',\n    title: tf('format.time'),\n    type: 'date',\n    label: '15:59:00',\n    render: formatStringRender,\n  },\n  {\n    key: 'datetime',\n    title: tf('format.datetime'),\n    type: 'date',\n    label: '26/09/2008 15:59:00',\n    render: formatStringRender,\n  },\n  {\n    key: 'duration',\n    title: tf('format.duration'),\n    type: 'date',\n    label: '24:01:00',\n    render: formatStringRender,\n  },\n];\n\n// const formats = (ary = []) => {\n//   const map = {};\n//   baseFormats.concat(ary).forEach((f) => {\n//     map[f.key] = f;\n//   });\n//   return map;\n// };\nconst formatm = {};\nbaseFormats.forEach((f) => {\n  formatm[f.key] = f;\n});\n\nexport default {\n};\nexport {\n  formatm,\n  baseFormats,\n};\n","import { stringAt } from '../core/alphabet';\nimport { getFontSizePxByPt } from '../core/font';\nimport _cell from '../core/cell';\nimport { formulam } from '../core/formula';\nimport { formatm } from '../core/format';\n\nimport {\n  Draw, DrawBox, thinLineWidth, npx,\n} from '../canvas/draw';\n// gobal var\nconst cellPaddingWidth = 5;\nconst tableFixedHeaderCleanStyle = { fillStyle: '#f4f5f8' };\nconst tableGridStyle = {\n  fillStyle: '#fff',\n  lineWidth: thinLineWidth,\n  strokeStyle: '#e6e6e6',\n};\nfunction tableFixedHeaderStyle() {\n  return {\n    textAlign: 'center',\n    textBaseline: 'middle',\n    font: `500 ${npx(12)}px Source Sans Pro`,\n    fillStyle: '#585757',\n    lineWidth: thinLineWidth(),\n    strokeStyle: '#e6e6e6',\n  };\n}\n\nfunction getDrawBox(data, rindex, cindex, yoffset = 0) {\n  const {\n    left, top, width, height,\n  } = data.cellRect(rindex, cindex);\n  return new DrawBox(left, top + yoffset, width, height, cellPaddingWidth);\n}\n/*\nfunction renderCellBorders(bboxes, translateFunc) {\n  const { draw } = this;\n  if (bboxes) {\n    const rset = new Set();\n    // console.log('bboxes:', bboxes);\n    bboxes.forEach(({ ri, ci, box }) => {\n      if (!rset.has(ri)) {\n        rset.add(ri);\n        translateFunc(ri);\n      }\n      draw.strokeBorders(box);\n    });\n  }\n}\n*/\n\nexport function renderCell(draw, data, rindex, cindex, yoffset = 0) {\n  const { sortedRowMap, rows, cols } = data;\n  if (rows.isHide(rindex) || cols.isHide(cindex)) return;\n  let nrindex = rindex;\n  if (sortedRowMap.has(rindex)) {\n    nrindex = sortedRowMap.get(rindex);\n  }\n\n  const cell = data.getCell(nrindex, cindex);\n  if (cell === null) return;\n  let frozen = false;\n  if ('editable' in cell && cell.editable === false) {\n    frozen = true;\n  }\n\n  const style = data.getCellStyleOrDefault(nrindex, cindex);\n  const dbox = getDrawBox(data, rindex, cindex, yoffset);\n  dbox.bgcolor = style.bgcolor;\n  if (style.border !== undefined) {\n    dbox.setBorders(style.border);\n    // bboxes.push({ ri: rindex, ci: cindex, box: dbox });\n    draw.strokeBorders(dbox);\n  }\n  draw.rect(dbox, () => {\n    // render text\n    let cellText = '';\n    if (!data.settings.evalPaused) {\n      cellText = _cell.render(cell.text || '', formulam, (y, x) => (data.getCellTextOrDefault(x, y)));\n    } else {\n      cellText = cell.text || '';\n    }\n    if (style.format) {\n      // console.log(data.formatm, '>>', cell.format);\n      cellText = formatm[style.format].render(cellText);\n    }\n    const font = Object.assign({}, style.font);\n    font.size = getFontSizePxByPt(font.size);\n    // console.log('style:', style);\n    draw.text(cellText, dbox, {\n      align: style.align,\n      valign: style.valign,\n      font,\n      color: style.color,\n      strike: style.strike,\n      underline: style.underline,\n    }, style.textwrap);\n    // error\n    const error = data.validations.getError(rindex, cindex);\n    if (error) {\n      // console.log('error:', rindex, cindex, error);\n      draw.error(dbox);\n    }\n    if (frozen) {\n      draw.frozen(dbox);\n    }\n  });\n}\n\nfunction renderAutofilter(viewRange) {\n  const { data, draw } = this;\n  if (viewRange) {\n    const { autoFilter } = data;\n    if (!autoFilter.active()) return;\n    const afRange = autoFilter.hrange();\n    if (viewRange.intersects(afRange)) {\n      afRange.each((ri, ci) => {\n        const dbox = getDrawBox(data, ri, ci);\n        draw.dropdown(dbox);\n      });\n    }\n  }\n}\n\nfunction renderContent(viewRange, fw, fh, tx, ty) {\n  const { draw, data } = this;\n  draw.save();\n  draw.translate(fw, fh)\n    .translate(tx, ty);\n\n  const { exceptRowSet } = data;\n  // const exceptRows = Array.from(exceptRowSet);\n  const filteredTranslateFunc = (ri) => {\n    const ret = exceptRowSet.has(ri);\n    if (ret) {\n      const height = data.rows.getHeight(ri);\n      draw.translate(0, -height);\n    }\n    return !ret;\n  };\n\n  const exceptRowTotalHeight = data.exceptRowTotalHeight(viewRange.sri, viewRange.eri);\n  // 1 render cell\n  draw.save();\n  draw.translate(0, -exceptRowTotalHeight);\n  viewRange.each((ri, ci) => {\n    renderCell(draw, data, ri, ci);\n  }, ri => filteredTranslateFunc(ri));\n  draw.restore();\n\n\n  // 2 render mergeCell\n  const rset = new Set();\n  draw.save();\n  draw.translate(0, -exceptRowTotalHeight);\n  data.eachMergesInView(viewRange, ({ sri, sci, eri }) => {\n    if (!exceptRowSet.has(sri)) {\n      renderCell(draw, data, sri, sci);\n    } else if (!rset.has(sri)) {\n      rset.add(sri);\n      const height = data.rows.sumHeight(sri, eri + 1);\n      draw.translate(0, -height);\n    }\n  });\n  draw.restore();\n\n  // 3 render autofilter\n  renderAutofilter.call(this, viewRange);\n\n  draw.restore();\n}\n\nfunction renderSelectedHeaderCell(x, y, w, h) {\n  const { draw } = this;\n  draw.save();\n  draw.attr({ fillStyle: 'rgba(75, 137, 255, 0.08)' })\n    .fillRect(x, y, w, h);\n  draw.restore();\n}\n\n// viewRange\n// type: all | left | top\n// w: the fixed width of header\n// h: the fixed height of header\n// tx: moving distance on x-axis\n// ty: moving distance on y-axis\nfunction renderFixedHeaders(type, viewRange, w, h, tx, ty) {\n  const { draw, data } = this;\n  const sumHeight = viewRange.h; // rows.sumHeight(viewRange.sri, viewRange.eri + 1);\n  const sumWidth = viewRange.w; // cols.sumWidth(viewRange.sci, viewRange.eci + 1);\n  const nty = ty + h;\n  const ntx = tx + w;\n\n  draw.save();\n  // draw rect background\n  draw.attr(tableFixedHeaderCleanStyle);\n  if (type === 'all' || type === 'left') draw.fillRect(0, nty, w, sumHeight);\n  if (type === 'all' || type === 'top') draw.fillRect(ntx, 0, sumWidth, h);\n\n  const {\n    sri, sci, eri, eci,\n  } = data.selector.range;\n  // console.log(data.selectIndexes);\n  // draw text\n  // text font, align...\n  draw.attr(tableFixedHeaderStyle());\n  // y-header-text\n  if (type === 'all' || type === 'left') {\n    data.rowEach(viewRange.sri, viewRange.eri, (i, y1, rowHeight) => {\n      const y = nty + y1;\n      const ii = i;\n      draw.line([0, y], [w, y]);\n      if (sri <= ii && ii < eri + 1) {\n        renderSelectedHeaderCell.call(this, 0, y, w, rowHeight);\n      }\n      draw.fillText(ii + 1, w / 2, y + (rowHeight / 2));\n      if (i > 0 && data.rows.isHide(i - 1)) {\n        draw.save();\n        draw.attr({ strokeStyle: '#c6c6c6' });\n        draw.line([5, y + 5], [w - 5, y + 5]);\n        draw.restore();\n      }\n    });\n    draw.line([0, sumHeight + nty], [w, sumHeight + nty]);\n    draw.line([w, nty], [w, sumHeight + nty]);\n  }\n  // x-header-text\n  if (type === 'all' || type === 'top') {\n    data.colEach(viewRange.sci, viewRange.eci, (i, x1, colWidth) => {\n      const x = ntx + x1;\n      const ii = i;\n      draw.line([x, 0], [x, h]);\n      if (sci <= ii && ii < eci + 1) {\n        renderSelectedHeaderCell.call(this, x, 0, colWidth, h);\n      }\n      draw.fillText(stringAt(ii), x + (colWidth / 2), h / 2);\n      if (i > 0 && data.cols.isHide(i - 1)) {\n        draw.save();\n        draw.attr({ strokeStyle: '#c6c6c6' });\n        draw.line([x + 5, 5], [x + 5, h - 5]);\n        draw.restore();\n      }\n    });\n    draw.line([sumWidth + ntx, 0], [sumWidth + ntx, h]);\n    draw.line([0, h], [sumWidth + ntx, h]);\n  }\n  draw.restore();\n}\n\nfunction renderFixedLeftTopCell(fw, fh) {\n  const { draw } = this;\n  draw.save();\n  // left-top-cell\n  draw.attr({ fillStyle: '#f4f5f8' })\n    .fillRect(0, 0, fw, fh);\n  draw.restore();\n}\n\nfunction renderContentGrid({\n  sri, sci, eri, eci, w, h,\n}, fw, fh, tx, ty) {\n  const { draw, data } = this;\n  const { settings } = data;\n\n  draw.save();\n  draw.attr(tableGridStyle)\n    .translate(fw + tx, fh + ty);\n  // const sumWidth = cols.sumWidth(sci, eci + 1);\n  // const sumHeight = rows.sumHeight(sri, eri + 1);\n  // console.log('sumWidth:', sumWidth);\n  // draw.clearRect(0, 0, w, h);\n  if (!settings.showGrid) {\n    draw.restore();\n    return;\n  }\n  // console.log('rowStart:', rowStart, ', rowLen:', rowLen);\n  data.rowEach(sri, eri, (i, y, ch) => {\n    // console.log('y:', y);\n    if (i !== sri) draw.line([0, y], [w, y]);\n    if (i === eri) draw.line([0, y + ch], [w, y + ch]);\n  });\n  data.colEach(sci, eci, (i, x, cw) => {\n    if (i !== sci) draw.line([x, 0], [x, h]);\n    if (i === eci) draw.line([x + cw, 0], [x + cw, h]);\n  });\n  draw.restore();\n}\n\nfunction renderFreezeHighlightLine(fw, fh, ftw, fth) {\n  const { draw, data } = this;\n  const twidth = data.viewWidth() - fw;\n  const theight = data.viewHeight() - fh;\n  draw.save()\n    .translate(fw, fh)\n    .attr({ strokeStyle: 'rgba(75, 137, 255, .6)' });\n  draw.line([0, fth], [twidth, fth]);\n  draw.line([ftw, 0], [ftw, theight]);\n  draw.restore();\n}\n\n/** end */\nclass Table {\n  constructor(el, data) {\n    this.el = el;\n    this.draw = new Draw(el, data.viewWidth(), data.viewHeight());\n    this.data = data;\n  }\n\n  resetData(data) {\n    this.data = data;\n    this.render();\n  }\n\n  render() {\n    // resize canvas\n    const { data } = this;\n    const { rows, cols } = data;\n    // fixed width of header\n    const fw = cols.indexWidth;\n    // fixed height of header\n    const fh = rows.height;\n\n    this.draw.resize(data.viewWidth(), data.viewHeight());\n    this.clear();\n\n    const viewRange = data.viewRange();\n    // renderAll.call(this, viewRange, data.scroll);\n    const tx = data.freezeTotalWidth();\n    const ty = data.freezeTotalHeight();\n    const { x, y } = data.scroll;\n    // 1\n    renderContentGrid.call(this, viewRange, fw, fh, tx, ty);\n    renderContent.call(this, viewRange, fw, fh, -x, -y);\n    renderFixedHeaders.call(this, 'all', viewRange, fw, fh, tx, ty);\n    renderFixedLeftTopCell.call(this, fw, fh);\n    const [fri, fci] = data.freeze;\n    if (fri > 0 || fci > 0) {\n      // 2\n      if (fri > 0) {\n        const vr = viewRange.clone();\n        vr.sri = 0;\n        vr.eri = fri - 1;\n        vr.h = ty;\n        renderContentGrid.call(this, vr, fw, fh, tx, 0);\n        renderContent.call(this, vr, fw, fh, -x, 0);\n        renderFixedHeaders.call(this, 'top', vr, fw, fh, tx, 0);\n      }\n      // 3\n      if (fci > 0) {\n        const vr = viewRange.clone();\n        vr.sci = 0;\n        vr.eci = fci - 1;\n        vr.w = tx;\n        renderContentGrid.call(this, vr, fw, fh, 0, ty);\n        renderFixedHeaders.call(this, 'left', vr, fw, fh, 0, ty);\n        renderContent.call(this, vr, fw, fh, 0, -y);\n      }\n      // 4\n      const freezeViewRange = data.freezeViewRange();\n      renderContentGrid.call(this, freezeViewRange, fw, fh, 0, 0);\n      renderFixedHeaders.call(this, 'all', freezeViewRange, fw, fh, 0, 0);\n      renderContent.call(this, freezeViewRange, fw, fh, 0, 0);\n      // 5\n      renderFreezeHighlightLine.call(this, fw, fh, tx, ty);\n    }\n  }\n\n  clear() {\n    this.draw.clear();\n  }\n}\n\nexport default Table;\n","/* global window document */\nimport { h } from './element';\nimport { cssPrefix } from '../config';\nimport Button from './button';\nimport { Draw } from '../canvas/draw';\nimport { renderCell } from './table';\nimport { t } from '../locale/locale';\n\n// resolution: 72 => 595 x 842\n// 150 => 1240 x 1754\n// 200 => 1654 x 2339\n// 300 => 2479 x 3508\n// 96 * cm / 2.54 , 96 * cm / 2.54\n\nconst PAGER_SIZES = [\n  ['A3', 11.69, 16.54],\n  ['A4', 8.27, 11.69],\n  ['A5', 5.83, 8.27],\n  ['B4', 9.84, 13.90],\n  ['B5', 6.93, 9.84],\n];\n\nconst PAGER_ORIENTATIONS = ['landscape', 'portrait'];\n\nfunction inches2px(inc) {\n  return parseInt(96 * inc, 10);\n}\n\nfunction btnClick(type) {\n  if (type === 'cancel') {\n    this.el.hide();\n  } else {\n    this.toPrint();\n  }\n}\n\nfunction pagerSizeChange(evt) {\n  const { paper } = this;\n  const { value } = evt.target;\n  const ps = PAGER_SIZES[value];\n  paper.w = inches2px(ps[1]);\n  paper.h = inches2px(ps[2]);\n  // console.log('paper:', ps, paper);\n  this.preview();\n}\nfunction pagerOrientationChange(evt) {\n  const { paper } = this;\n  const { value } = evt.target;\n  const v = PAGER_ORIENTATIONS[value];\n  paper.orientation = v;\n  this.preview();\n}\n\nexport default class Print {\n  constructor(data) {\n    this.paper = {\n      w: inches2px(PAGER_SIZES[0][1]),\n      h: inches2px(PAGER_SIZES[0][2]),\n      padding: 50,\n      orientation: PAGER_ORIENTATIONS[0],\n      get width() {\n        return this.orientation === 'landscape' ? this.h : this.w;\n      },\n      get height() {\n        return this.orientation === 'landscape' ? this.w : this.h;\n      },\n    };\n    this.data = data;\n    this.el = h('div', `${cssPrefix}-print`)\n      .children(\n        h('div', `${cssPrefix}-print-bar`)\n          .children(\n            h('div', '-title').child('Print settings'),\n            h('div', '-right').children(\n              h('div', `${cssPrefix}-buttons`).children(\n                new Button('cancel').on('click', btnClick.bind(this, 'cancel')),\n                new Button('next', 'primary').on('click', btnClick.bind(this, 'next')),\n              ),\n            ),\n          ),\n        h('div', `${cssPrefix}-print-content`)\n          .children(\n            this.contentEl = h('div', '-content'),\n            h('div', '-sider').child(\n              h('form', '').children(\n                h('fieldset', '').children(\n                  h('label', '').child(`${t('print.size')}`),\n                  h('select', '').children(\n                    ...PAGER_SIZES.map((it, index) => h('option', '').attr('value', index).child(`${it[0]} ( ${it[1]}''x${it[2]}'' )`)),\n                  ).on('change', pagerSizeChange.bind(this)),\n                ),\n                h('fieldset', '').children(\n                  h('label', '').child(`${t('print.orientation')}`),\n                  h('select', '').children(\n                    ...PAGER_ORIENTATIONS.map((it, index) => h('option', '').attr('value', index).child(`${t('print.orientations')[index]}`)),\n                  ).on('change', pagerOrientationChange.bind(this)),\n                ),\n              ),\n            ),\n          ),\n      ).hide();\n  }\n\n  resetData(data) {\n    this.data = data;\n  }\n\n  preview() {\n    const { data, paper } = this;\n    const { width, height, padding } = paper;\n    const iwidth = width - padding * 2;\n    const iheight = height - padding * 2;\n    const cr = data.contentRange();\n    const pages = parseInt(cr.h / iheight, 10) + 1;\n    const scale = iwidth / cr.w;\n    let left = padding;\n    const top = padding;\n    if (scale > 1) {\n      left += (iwidth - cr.w) / 2;\n    }\n    let ri = 0;\n    let yoffset = 0;\n    this.contentEl.html('');\n    this.canvases = [];\n    const mViewRange = {\n      sri: 0,\n      sci: 0,\n      eri: 0,\n      eci: 0,\n    };\n    for (let i = 0; i < pages; i += 1) {\n      let th = 0;\n      let yo = 0;\n      const wrap = h('div', `${cssPrefix}-canvas-card`);\n      const canvas = h('canvas', `${cssPrefix}-canvas`);\n      this.canvases.push(canvas.el);\n      const draw = new Draw(canvas.el, width, height);\n      // cell-content\n      draw.save();\n      draw.translate(left, top);\n      if (scale < 1) draw.scale(scale, scale);\n      // console.log('ri:', ri, cr.eri, yoffset);\n      for (; ri <= cr.eri; ri += 1) {\n        const rh = data.rows.getHeight(ri);\n        th += rh;\n        if (th < iheight) {\n          for (let ci = 0; ci <= cr.eci; ci += 1) {\n            renderCell(draw, data, ri, ci, yoffset);\n            mViewRange.eci = ci;\n          }\n        } else {\n          yo = -(th - rh);\n          break;\n        }\n      }\n      mViewRange.eri = ri;\n      draw.restore();\n      // merge-cell\n      draw.save();\n      draw.translate(left, top);\n      if (scale < 1) draw.scale(scale, scale);\n      const yof = yoffset;\n      data.eachMergesInView(mViewRange, ({ sri, sci }) => {\n        renderCell(draw, data, sri, sci, yof);\n      });\n      draw.restore();\n\n      mViewRange.sri = mViewRange.eri;\n      mViewRange.sci = mViewRange.eci;\n      yoffset += yo;\n      this.contentEl.child(h('div', `${cssPrefix}-canvas-card-wraper`).child(wrap.child(canvas)));\n    }\n    this.el.show();\n  }\n\n  toPrint() {\n    this.el.hide();\n    const { paper } = this;\n    const iframe = h('iframe', '').hide();\n    const { el } = iframe;\n    window.document.body.appendChild(el);\n    const { contentWindow } = el;\n    const idoc = contentWindow.document;\n    const style = document.createElement('style');\n    style.innerHTML = `\n      @page { size: ${paper.width}px ${paper.height}px; };\n      canvas {\n        page-break-before: auto;        \n        page-break-after: always;\n        image-rendering: pixelated;\n      };\n    `;\n    idoc.head.appendChild(style);\n    this.canvases.forEach((it) => {\n      const cn = it.cloneNode(false);\n      const ctx = cn.getContext('2d');\n      // ctx.imageSmoothingEnabled = true;\n      ctx.drawImage(it, 0, 0);\n      idoc.body.appendChild(cn);\n    });\n    contentWindow.print();\n  }\n}\n","import { h } from './element';\nimport { bindClickoutside, unbindClickoutside } from './event';\nimport { cssPrefix } from '../config';\nimport { tf } from '../locale/locale';\n\nconst menuItems = [\n  { key: 'copy', title: tf('contextmenu.copy'), label: 'Ctrl+C' },\n  { key: 'cut', title: tf('contextmenu.cut'), label: 'Ctrl+X' },\n  { key: 'paste', title: tf('contextmenu.paste'), label: 'Ctrl+V' },\n  { key: 'paste-value', title: tf('contextmenu.pasteValue'), label: 'Ctrl+Shift+V' },\n  { key: 'paste-format', title: tf('contextmenu.pasteFormat'), label: 'Ctrl+Alt+V' },\n  { key: 'divider' },\n  { key: 'insert-row', title: tf('contextmenu.insertRow') },\n  { key: 'insert-column', title: tf('contextmenu.insertColumn') },\n  { key: 'divider' },\n  { key: 'delete-row', title: tf('contextmenu.deleteRow') },\n  { key: 'delete-column', title: tf('contextmenu.deleteColumn') },\n  { key: 'delete-cell-text', title: tf('contextmenu.deleteCellText') },\n  { key: 'hide', title: tf('contextmenu.hide') },\n  { key: 'divider' },\n  { key: 'validation', title: tf('contextmenu.validation') },\n  { key: 'divider' },\n  { key: 'cell-printable', title: tf('contextmenu.cellprintable') },\n  { key: 'cell-non-printable', title: tf('contextmenu.cellnonprintable') },\n  { key: 'divider' },\n  { key: 'cell-editable', title: tf('contextmenu.celleditable') },\n  { key: 'cell-non-editable', title: tf('contextmenu.cellnoneditable') },\n];\n\nfunction buildMenuItem(item) {\n  if (item.key === 'divider') {\n    return h('div', `${cssPrefix}-item divider`);\n  }\n  return h('div', `${cssPrefix}-item`)\n    .on('click', () => {\n      this.itemClick(item.key);\n      this.hide();\n    })\n    .children(\n      item.title(),\n      h('div', 'label').child(item.label || ''),\n    );\n}\n\nfunction buildMenu() {\n  return menuItems.map(it => buildMenuItem.call(this, it));\n}\n\nexport default class ContextMenu {\n  constructor(viewFn, isHide = false) {\n    this.menuItems = buildMenu.call(this);\n    this.el = h('div', `${cssPrefix}-contextmenu`)\n      .children(...this.menuItems)\n      .hide();\n    this.viewFn = viewFn;\n    this.itemClick = () => {};\n    this.isHide = isHide;\n    this.setMode('range');\n  }\n\n  // row-col: the whole rows or the whole cols\n  // range: select range\n  setMode(mode) {\n    const hideEl = this.menuItems[12];\n    if (mode === 'row-col') {\n      hideEl.show();\n    } else {\n      hideEl.hide();\n    }\n  }\n\n  hide() {\n    const { el } = this;\n    el.hide();\n    unbindClickoutside(el);\n  }\n\n  setPosition(x, y) {\n    if (this.isHide) return;\n    const { el } = this;\n    const { width } = el.show().offset();\n    const view = this.viewFn();\n    const vhf = view.height / 2;\n    let left = x;\n    if (view.width - x <= width) {\n      left -= width;\n    }\n    el.css('left', `${left}px`);\n    if (y > vhf) {\n      el.css('bottom', `${view.height - y}px`)\n        .css('max-height', `${y}px`)\n        .css('top', 'auto');\n    } else {\n      el.css('top', `${y}px`)\n        .css('max-height', `${view.height - y}px`)\n        .css('bottom', 'auto');\n    }\n    bindClickoutside(el);\n  }\n}\n","/* global document */\nimport { h } from './element';\nimport { bind } from './event';\nimport { cssPrefix } from '../config';\n\nexport default function tooltip(html, target) {\n  if (target.classList.contains('active')) {\n    return;\n  }\n  const {\n    left, top, width, height,\n  } = target.getBoundingClientRect();\n  const el = h('div', `${cssPrefix}-tooltip`).html(html).show();\n  document.body.appendChild(el.el);\n  const elBox = el.box();\n  // console.log('elBox:', elBox);\n  el.css('left', `${left + (width / 2) - (elBox.width / 2)}px`)\n    .css('top', `${top + height + 2}px`);\n\n  bind(target, 'mouseleave', () => {\n    if (document.body.contains(el.el)) {\n      document.body.removeChild(el.el);\n    }\n  });\n\n  bind(target, 'click', () => {\n    if (document.body.contains(el.el)) {\n      document.body.removeChild(el.el);\n    }\n  });\n}\n","import { cssPrefix } from '../../config';\nimport tooltip from '../tooltip';\nimport { h } from '../element';\nimport { t } from '../../locale/locale';\n\nexport default class Item {\n  // tooltip\n  // tag: the subclass type\n  // shortcut: shortcut key\n  constructor(tag, shortcut, value) {\n    this.tip = t(`toolbar.${tag.replace(/-[a-z]/g, c => c[1].toUpperCase())}`);\n    if (shortcut) this.tip += ` (${shortcut})`;\n    this.tag = tag;\n    this.shortcut = shortcut;\n    this.value = value;\n    this.el = this.element();\n    this.change = () => {};\n  }\n\n  element() {\n    const { tip } = this;\n    return h('div', `${cssPrefix}-toolbar-btn`)\n      .on('mouseenter', (evt) => {\n        tooltip(tip, evt.target);\n      })\n      .attr('data-tooltip', tip);\n  }\n\n  setState() {}\n}\n","import Item from './item';\n\nexport default class DropdownItem extends Item {\n  dropdown() {}\n\n  getValue(v) {\n    return v;\n  }\n\n  element() {\n    const { tag } = this;\n    this.dd = this.dropdown();\n    this.dd.change = it => this.change(tag, this.getValue(it));\n    return super.element().child(\n      this.dd,\n    );\n  }\n\n  setState(v) {\n    if (v) {\n      this.value = v;\n      this.dd.setTitle(v);\n    }\n  }\n}\n","import { Element, h } from './element';\nimport { bindClickoutside, unbindClickoutside } from './event';\nimport { cssPrefix } from '../config';\n\nexport default class Dropdown extends Element {\n  constructor(title, width, showArrow, placement, ...children) {\n    super('div', `${cssPrefix}-dropdown ${placement}`);\n    this.title = title;\n    this.change = () => {};\n    this.headerClick = () => {};\n    if (typeof title === 'string') {\n      this.title = h('div', `${cssPrefix}-dropdown-title`).child(title);\n    } else if (showArrow) {\n      this.title.addClass('arrow-left');\n    }\n    this.contentEl = h('div', `${cssPrefix}-dropdown-content`)\n      .css('width', width)\n      .hide();\n\n    this.setContentChildren(...children);\n\n    this.headerEl = h('div', `${cssPrefix}-dropdown-header`);\n    this.headerEl.on('click', () => {\n      if (this.contentEl.css('display') !== 'block') {\n        this.show();\n      } else {\n        this.hide();\n      }\n    }).children(\n      this.title,\n      showArrow ? h('div', `${cssPrefix}-icon arrow-right`).child(\n        h('div', `${cssPrefix}-icon-img arrow-down`),\n      ) : '',\n    );\n    this.children(this.headerEl, this.contentEl);\n  }\n\n  setContentChildren(...children) {\n    this.contentEl.html('');\n    if (children.length > 0) {\n      this.contentEl.children(...children);\n    }\n  }\n\n  setTitle(title) {\n    this.title.html(title);\n    this.hide();\n  }\n\n  show() {\n    const { contentEl } = this;\n    contentEl.show();\n    this.parent().active();\n    bindClickoutside(this.parent(), () => {\n      this.hide();\n    });\n  }\n\n  hide() {\n    this.parent().active(false);\n    this.contentEl.hide();\n    unbindClickoutside(this.parent());\n  }\n}\n","import Dropdown from './dropdown';\nimport { h } from './element';\nimport Icon from './icon';\nimport { cssPrefix } from '../config';\n\nfunction buildItemWithIcon(iconName) {\n  return h('div', `${cssPrefix}-item`).child(new Icon(iconName));\n}\n\nexport default class DropdownAlign extends Dropdown {\n  constructor(aligns, align) {\n    const icon = new Icon(`align-${align}`);\n    const naligns = aligns.map(it => buildItemWithIcon(`align-${it}`)\n      .on('click', () => {\n        this.setTitle(it);\n        this.change(it);\n      }));\n    super(icon, 'auto', true, 'bottom-left', ...naligns);\n  }\n\n  setTitle(align) {\n    this.title.setName(`align-${align}`);\n    this.hide();\n  }\n}\n","import DropdownItem from './dropdown_item';\nimport DropdownAlign from '../dropdown_align';\n\nexport default class Align extends DropdownItem {\n  constructor(value) {\n    super('align', '', value);\n  }\n\n  dropdown() {\n    const { value } = this;\n    return new DropdownAlign(['left', 'center', 'right'], value);\n  }\n}\n","import DropdownItem from './dropdown_item';\nimport DropdownAlign from '../dropdown_align';\n\nexport default class Valign extends DropdownItem {\n  constructor(value) {\n    super('valign', '', value);\n  }\n\n  dropdown() {\n    const { value } = this;\n    return new DropdownAlign(['top', 'middle', 'bottom'], value);\n  }\n}\n","import Item from './item';\nimport Icon from '../icon';\n\nexport default class ToggleItem extends Item {\n  element() {\n    const { tag } = this;\n    return super.element()\n      .child(new Icon(tag))\n      .on('click', () => this.click());\n  }\n\n  click() {\n    this.change(this.tag, this.toggle());\n  }\n\n  setState(active) {\n    this.el.active(active);\n  }\n\n  toggle() {\n    return this.el.toggle();\n  }\n\n  active() {\n    return this.el.hasClass('active');\n  }\n}\n","import ToggleItem from './toggle_item';\n\nexport default class Autofilter extends ToggleItem {\n  constructor() {\n    super('autofilter');\n  }\n\n  setState() {}\n}\n","import ToggleItem from './toggle_item';\n\nexport default class Bold extends ToggleItem {\n  constructor() {\n    super('font-bold', 'Ctrl+B');\n  }\n}\n","import ToggleItem from './toggle_item';\n\nexport default class Italic extends ToggleItem {\n  constructor() {\n    super('font-italic', 'Ctrl+I');\n  }\n}\n","import ToggleItem from './toggle_item';\n\nexport default class Strike extends ToggleItem {\n  constructor() {\n    super('strike', 'Ctrl+U');\n  }\n}\n","import ToggleItem from './toggle_item';\n\nexport default class Underline extends ToggleItem {\n  constructor() {\n    super('underline', 'Ctrl+U');\n  }\n}\n","import { h } from './element';\nimport { cssPrefix } from '../config';\n\nconst themeColorPlaceHolders = ['#ffffff', '#000100', '#e7e5e6', '#445569', '#5b9cd6', '#ed7d31', '#a5a5a5', '#ffc001', '#4371c6', '#71ae47'];\n\nconst themeColors = [\n  ['#f2f2f2', '#7f7f7f', '#d0cecf', '#d5dce4', '#deeaf6', '#fce5d5', '#ededed', '#fff2cd', '#d9e2f3', '#e3efd9'],\n  ['#d8d8d8', '#595959', '#afabac', '#adb8ca', '#bdd7ee', '#f7ccac', '#dbdbdb', '#ffe59a', '#b3c6e7', '#c5e0b3'],\n  ['#bfbfbf', '#3f3f3f', '#756f6f', '#8596b0', '#9cc2e6', '#f4b184', '#c9c9c9', '#fed964', '#8eaada', '#a7d08c'],\n  ['#a5a5a5', '#262626', '#3a3839', '#333f4f', '#2e75b5', '#c45a10', '#7b7b7b', '#bf8e01', '#2f5596', '#538136'],\n  ['#7f7f7f', '#0c0c0c', '#171516', '#222a35', '#1f4e7a', '#843c0a', '#525252', '#7e6000', '#203864', '#365624'],\n];\n\nconst standardColors = ['#c00000', '#fe0000', '#fdc101', '#ffff01', '#93d051', '#00b04e', '#01b0f1', '#0170c1', '#012060', '#7030a0'];\n\nfunction buildTd(bgcolor) {\n  return h('td', '').child(\n    h('div', `${cssPrefix}-color-palette-cell`)\n      .on('click.stop', () => this.change(bgcolor))\n      .css('background-color', bgcolor),\n  );\n}\n\nexport default class ColorPalette {\n  constructor() {\n    this.el = h('div', `${cssPrefix}-color-palette`);\n    this.change = () => {};\n    const table = h('table', '').children(\n      h('tbody', '').children(\n        h('tr', `${cssPrefix}-theme-color-placeholders`).children(\n          ...themeColorPlaceHolders.map(color => buildTd.call(this, color)),\n        ),\n        ...themeColors.map(it => h('tr', `${cssPrefix}-theme-colors`).children(\n          ...it.map(color => buildTd.call(this, color)),\n        )),\n        h('tr', `${cssPrefix}-standard-colors`).children(\n          ...standardColors.map(color => buildTd.call(this, color)),\n        ),\n      ),\n    );\n    this.el.child(table);\n  }\n}\n","import Dropdown from './dropdown';\nimport Icon from './icon';\nimport ColorPalette from './color_palette';\n\nexport default class DropdownColor extends Dropdown {\n  constructor(iconName, color) {\n    const icon = new Icon(iconName)\n      .css('height', '16px')\n      .css('border-bottom', `3px solid ${color}`);\n    const colorPalette = new ColorPalette();\n    colorPalette.change = (v) => {\n      this.setTitle(v);\n      this.change(v);\n    };\n    super(icon, 'auto', false, 'bottom-left', colorPalette.el);\n  }\n\n  setTitle(color) {\n    this.title.css('border-color', color);\n    this.hide();\n  }\n}\n","import Dropdown from './dropdown';\nimport { h } from './element';\nimport Icon from './icon';\nimport { cssPrefix } from '../config';\n\nconst lineTypes = [\n  ['thin', '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"50\" height=\"1\" style=\"user-select: none;\"><line x1=\"0\" y1=\"0.5\" x2=\"50\" y2=\"0.5\" stroke-width=\"1\" stroke=\"black\" style=\"user-select: none;\"></line></svg>'],\n  ['medium', '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"50\" height=\"2\" style=\"user-select: none;\"><line x1=\"0\" y1=\"1.0\" x2=\"50\" y2=\"1.0\" stroke-width=\"2\" stroke=\"black\" style=\"user-select: none;\"></line></svg>'],\n  ['thick', '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"50\" height=\"3\" style=\"user-select: none;\"><line x1=\"0\" y1=\"1.5\" x2=\"50\" y2=\"1.5\" stroke-width=\"3\" stroke=\"black\" style=\"user-select: none;\"></line></svg>'],\n  ['dashed', '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"50\" height=\"1\" style=\"user-select: none;\"><line x1=\"0\" y1=\"0.5\" x2=\"50\" y2=\"0.5\" stroke-width=\"1\" stroke=\"black\" stroke-dasharray=\"2\" style=\"user-select: none;\"></line></svg>'],\n  ['dotted', '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"50\" height=\"1\" style=\"user-select: none;\"><line x1=\"0\" y1=\"0.5\" x2=\"50\" y2=\"0.5\" stroke-width=\"1\" stroke=\"black\" stroke-dasharray=\"1\" style=\"user-select: none;\"></line></svg>'],\n  // ['double', '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"50\" height=\"3\" style=\"user-select: none;\"><line x1=\"0\" y1=\"0.5\" x2=\"50\" y2=\"0.5\" stroke-width=\"1\" stroke=\"black\" style=\"user-select: none;\"></line><line x1=\"0\" y1=\"2.5\" x2=\"50\" y2=\"2.5\" stroke-width=\"1\" stroke=\"black\" style=\"user-select: none;\"></line></svg>'],\n];\n\nexport default class DropdownLineType extends Dropdown {\n  constructor(type) {\n    const icon = new Icon('line-type');\n    let beforei = 0;\n    const lineTypeEls = lineTypes.map((it, iti) => h('div', `${cssPrefix}-item state ${type === it[0] ? 'checked' : ''}`)\n      .on('click', () => {\n        lineTypeEls[beforei].toggle('checked');\n        lineTypeEls[iti].toggle('checked');\n        beforei = iti;\n        this.hide();\n        this.change(it);\n      })\n      .child(\n        h('div', `${cssPrefix}-line-type`).html(it[1]),\n      ));\n\n    super(icon, 'auto', false, 'bottom-left', ...lineTypeEls);\n  }\n}\n","import { h } from './element';\nimport Icon from './icon';\nimport DropdownColor from './dropdown_color';\nimport DropdownLineType from './dropdown_linetype';\nimport { cssPrefix } from '../config';\n\nfunction buildTable(...trs) {\n  return h('table', '').child(\n    h('tbody', '').children(...trs),\n  );\n}\n\nfunction buildTd(iconName) {\n  return h('td', '').child(\n    h('div', `${cssPrefix}-border-palette-cell`).child(\n      new Icon(`border-${iconName}`),\n    ).on('click', () => {\n      this.mode = iconName;\n      const { mode, style, color } = this;\n      this.change({ mode, style, color });\n    }),\n  );\n}\n\nexport default class BorderPalette {\n  constructor() {\n    this.color = '#000';\n    this.style = 'thin';\n    this.mode = 'all';\n    this.change = () => {};\n    this.ddColor = new DropdownColor('line-color', this.color);\n    this.ddColor.change = (color) => {\n      this.color = color;\n    };\n    this.ddType = new DropdownLineType(this.style);\n    this.ddType.change = ([s]) => {\n      this.style = s;\n    };\n    this.el = h('div', `${cssPrefix}-border-palette`);\n    const table = buildTable(\n      h('tr', '').children(\n        h('td', `${cssPrefix}-border-palette-left`).child(\n          buildTable(\n            h('tr', '').children(\n              ...['all', 'inside', 'horizontal', 'vertical', 'outside'].map(it => buildTd.call(this, it)),\n            ),\n            h('tr', '').children(\n              ...['left', 'top', 'right', 'bottom', 'none'].map(it => buildTd.call(this, it)),\n            ),\n          ),\n        ),\n        h('td', `${cssPrefix}-border-palette-right`).children(\n          h('div', `${cssPrefix}-toolbar-btn`).child(this.ddColor.el),\n          h('div', `${cssPrefix}-toolbar-btn`).child(this.ddType.el),\n        ),\n      ),\n    );\n    this.el.child(table);\n  }\n}\n","import Dropdown from './dropdown';\nimport Icon from './icon';\nimport BorderPalette from './border_palette';\n\nexport default class DropdownBorder extends Dropdown {\n  constructor() {\n    const icon = new Icon('border-all');\n    const borderPalette = new BorderPalette();\n    borderPalette.change = (v) => {\n      this.change(v);\n      this.hide();\n    };\n    super(icon, 'auto', false, 'bottom-left', borderPalette.el);\n  }\n}\n","import DropdownItem from './dropdown_item';\nimport DropdownBorder from '../dropdown_border';\n\nexport default class Border extends DropdownItem {\n  constructor() {\n    super('border');\n  }\n\n  dropdown() {\n    return new DropdownBorder();\n  }\n}\n","import Item from './item';\nimport Icon from '../icon';\n\nexport default class IconItem extends Item {\n  element() {\n    return super.element()\n      .child(new Icon(this.tag))\n      .on('click', () => this.change(this.tag));\n  }\n\n  setState(disabled) {\n    this.el.disabled(disabled);\n  }\n}\n","import IconItem from './icon_item';\n\nexport default class Clearformat extends IconItem {\n  constructor() {\n    super('clearformat');\n  }\n}\n","import ToggleItem from './toggle_item';\n\nexport default class Paintformat extends ToggleItem {\n  constructor() {\n    super('paintformat');\n  }\n\n  setState() {}\n}\n","import DropdownItem from './dropdown_item';\nimport DropdownColor from '../dropdown_color';\n\nexport default class TextColor extends DropdownItem {\n  constructor(color) {\n    super('color', undefined, color);\n  }\n\n  dropdown() {\n    const { tag, value } = this;\n    return new DropdownColor(tag, value);\n  }\n}\n","import DropdownItem from './dropdown_item';\nimport DropdownColor from '../dropdown_color';\n\nexport default class FillColor extends DropdownItem {\n  constructor(color) {\n    super('bgcolor', undefined, color);\n  }\n\n  dropdown() {\n    const { tag, value } = this;\n    return new DropdownColor(tag, value);\n  }\n}\n","import Dropdown from './dropdown';\nimport { h } from './element';\nimport { fontSizes } from '../core/font';\nimport { cssPrefix } from '../config';\n\nexport default class DropdownFontSize extends Dropdown {\n  constructor() {\n    const nfontSizes = fontSizes.map(it => h('div', `${cssPrefix}-item`)\n      .on('click', () => {\n        this.setTitle(`${it.pt}`);\n        this.change(it);\n      })\n      .child(`${it.pt}`));\n    super('10', '60px', true, 'bottom-left', ...nfontSizes);\n  }\n}\n","import DropdownItem from './dropdown_item';\nimport DropdownFontsize from '../dropdown_fontsize';\n\nexport default class Format extends DropdownItem {\n  constructor() {\n    super('font-size');\n  }\n\n  getValue(it) {\n    return it.pt;\n  }\n\n  dropdown() {\n    return new DropdownFontsize();\n  }\n}\n","import Dropdown from './dropdown';\nimport { h } from './element';\nimport { baseFonts } from '../core/font';\nimport { cssPrefix } from '../config';\n\nexport default class DropdownFont extends Dropdown {\n  constructor() {\n    const nfonts = baseFonts.map(it => h('div', `${cssPrefix}-item`)\n      .on('click', () => {\n        this.setTitle(it.title);\n        this.change(it);\n      })\n      .child(it.title));\n    super(baseFonts[0].title, '160px', true, 'bottom-left', ...nfonts);\n  }\n}\n","import DropdownItem from './dropdown_item';\nimport DropdownFont from '../dropdown_font';\n\nexport default class Font extends DropdownItem {\n  constructor() {\n    super('font-name');\n  }\n\n  getValue(it) {\n    return it.key;\n  }\n\n  dropdown() {\n    return new DropdownFont();\n  }\n}\n","import Dropdown from './dropdown';\nimport { h } from './element';\nimport { baseFormats } from '../core/format';\nimport { cssPrefix } from '../config';\n\nexport default class DropdownFormat extends Dropdown {\n  constructor() {\n    let nformats = baseFormats.slice(0);\n    nformats.splice(2, 0, { key: 'divider' });\n    nformats.splice(8, 0, { key: 'divider' });\n    nformats = nformats.map((it) => {\n      const item = h('div', `${cssPrefix}-item`);\n      if (it.key === 'divider') {\n        item.addClass('divider');\n      } else {\n        item.child(it.title())\n          .on('click', () => {\n            this.setTitle(it.title());\n            this.change(it);\n          });\n        if (it.label) item.child(h('div', 'label').html(it.label));\n      }\n      return item;\n    });\n    super('Normal', '220px', true, 'bottom-left', ...nformats);\n  }\n\n  setTitle(key) {\n    for (let i = 0; i < baseFormats.length; i += 1) {\n      if (baseFormats[i].key === key) {\n        this.title.html(baseFormats[i].title());\n      }\n    }\n    this.hide();\n  }\n}\n","import DropdownItem from './dropdown_item';\nimport DropdownFormat from '../dropdown_format';\n\nexport default class Format extends DropdownItem {\n  constructor() {\n    super('format');\n  }\n\n  getValue(it) {\n    return it.key;\n  }\n\n  dropdown() {\n    return new DropdownFormat();\n  }\n}\n","import Dropdown from './dropdown';\nimport Icon from './icon';\nimport { h } from './element';\nimport { baseFormulas } from '../core/formula';\nimport { cssPrefix } from '../config';\n\nexport default class DropdownFormula extends Dropdown {\n  constructor() {\n    const nformulas = baseFormulas.map(it => h('div', `${cssPrefix}-item`)\n      .on('click', () => {\n        this.hide();\n        this.change(it);\n      })\n      .child(it.key));\n    super(new Icon('formula'), '180px', true, 'bottom-left', ...nformulas);\n  }\n}\n","import DropdownItem from './dropdown_item';\nimport DropdownFormula from '../dropdown_formula';\n\nexport default class Format extends DropdownItem {\n  constructor() {\n    super('formula');\n  }\n\n  getValue(it) {\n    return it.key;\n  }\n\n  dropdown() {\n    return new DropdownFormula();\n  }\n}\n","import ToggleItem from './toggle_item';\n\nexport default class Freeze extends ToggleItem {\n  constructor() {\n    super('freeze');\n  }\n}\n","import ToggleItem from './toggle_item';\n\nexport default class Merge extends ToggleItem {\n  constructor() {\n    super('merge');\n  }\n\n  setState(active, disabled) {\n    this.el.active(active).disabled(disabled);\n  }\n}\n","import IconItem from './icon_item';\n\nexport default class Redo extends IconItem {\n  constructor() {\n    super('redo', 'Ctrl+Y');\n  }\n}\n","import IconItem from './icon_item';\n\nexport default class Undo extends IconItem {\n  constructor() {\n    super('undo', 'Ctrl+Z');\n  }\n}\n","import IconItem from './icon_item';\n\nexport default class Print extends IconItem {\n  constructor() {\n    super('print', 'Ctrl+P');\n  }\n}\n","import ToggleItem from './toggle_item';\n\nexport default class Textwrap extends ToggleItem {\n  constructor() {\n    super('textwrap');\n  }\n}\n","import Dropdown from '../dropdown';\nimport DropdownItem from './dropdown_item';\n\nimport { cssPrefix } from '../../config';\nimport { h } from '../element';\nimport Icon from '../icon';\n\nclass DropdownMore extends Dropdown {\n  constructor() {\n    const icon = new Icon('ellipsis');\n    const moreBtns = h('div', `${cssPrefix}-toolbar-more`);\n    super(icon, 'auto', false, 'bottom-right', moreBtns);\n    this.moreBtns = moreBtns;\n    this.contentEl.css('max-width', '420px');\n  }\n}\n\nexport default class More extends DropdownItem {\n  constructor() {\n    super('more');\n    this.el.hide();\n  }\n\n  dropdown() {\n    return new DropdownMore();\n  }\n\n  show() {\n    this.el.show();\n  }\n\n  hide() {\n    this.el.hide();\n  }\n}\n","/* global window */\n\nimport Align from './align';\nimport Valign from './valign';\nimport Autofilter from './autofilter';\nimport Bold from './bold';\nimport Italic from './italic';\nimport Strike from './strike';\nimport Underline from './underline';\nimport Border from './border';\nimport Clearformat from './clearformat';\nimport Paintformat from './paintformat';\nimport TextColor from './text_color';\nimport FillColor from './fill_color';\nimport FontSize from './font_size';\nimport Font from './font';\nimport Format from './format';\nimport Formula from './formula';\nimport Freeze from './freeze';\nimport Merge from './merge';\nimport Redo from './redo';\nimport Undo from './undo';\nimport Print from './print';\nimport Textwrap from './textwrap';\nimport More from './more';\n\nimport { h } from '../element';\nimport { cssPrefix } from '../../config';\nimport { bind } from '../event';\n\nfunction buildDivider() {\n  return h('div', `${cssPrefix}-toolbar-divider`);\n}\n\nfunction initBtns2() {\n  this.btns2 = [];\n  this.items.forEach((it) => {\n    if (Array.isArray(it)) {\n      it.forEach(({ el }) => {\n        const rect = el.box();\n        const { marginLeft, marginRight } = el.computedStyle();\n        this.btns2.push([el, rect.width + parseInt(marginLeft, 10) + parseInt(marginRight, 10)]);\n      });\n    } else {\n      const rect = it.box();\n      const { marginLeft, marginRight } = it.computedStyle();\n      this.btns2.push([it, rect.width + parseInt(marginLeft, 10) + parseInt(marginRight, 10)]);\n    }\n  });\n}\n\nfunction moreResize() {\n  const {\n    el, btns, moreEl, btns2,\n  } = this;\n  const { moreBtns, contentEl } = moreEl.dd;\n  el.css('width', `${this.widthFn() - 60}px`);\n  const elBox = el.box();\n\n  let sumWidth = 160;\n  let sumWidth2 = 12;\n  const list1 = [];\n  const list2 = [];\n  btns2.forEach(([it, w], index) => {\n    sumWidth += w;\n    if (index === btns2.length - 1 || sumWidth < elBox.width) {\n      list1.push(it);\n    } else {\n      sumWidth2 += w;\n      list2.push(it);\n    }\n  });\n  btns.html('').children(...list1);\n  moreBtns.html('').children(...list2);\n  contentEl.css('width', `${sumWidth2}px`);\n  if (list2.length > 0) {\n    moreEl.show();\n  } else {\n    moreEl.hide();\n  }\n}\n\nexport default class Toolbar {\n  constructor(data, widthFn, isHide = false) {\n    this.data = data;\n    this.change = () => {};\n    this.widthFn = widthFn;\n    this.isHide = isHide;\n    const style = data.defaultStyle();\n    this.items = [\n      [\n        this.undoEl = new Undo(),\n        this.redoEl = new Redo(),\n        new Print(),\n        this.paintformatEl = new Paintformat(),\n        this.clearformatEl = new Clearformat(),\n      ],\n      buildDivider(),\n      [\n        this.formatEl = new Format(),\n      ],\n      buildDivider(),\n      [\n        this.fontEl = new Font(),\n        this.fontSizeEl = new FontSize(),\n      ],\n      buildDivider(),\n      [\n        this.boldEl = new Bold(),\n        this.italicEl = new Italic(),\n        this.underlineEl = new Underline(),\n        this.strikeEl = new Strike(),\n        this.textColorEl = new TextColor(style.color),\n      ],\n      buildDivider(),\n      [\n        this.fillColorEl = new FillColor(style.bgcolor),\n        this.borderEl = new Border(),\n        this.mergeEl = new Merge(),\n      ],\n      buildDivider(),\n      [\n        this.alignEl = new Align(style.align),\n        this.valignEl = new Valign(style.valign),\n        this.textwrapEl = new Textwrap(),\n      ],\n      buildDivider(),\n      [\n        this.freezeEl = new Freeze(),\n        this.autofilterEl = new Autofilter(),\n        this.formulaEl = new Formula(),\n        this.moreEl = new More(),\n      ],\n    ];\n\n    this.el = h('div', `${cssPrefix}-toolbar`);\n    this.btns = h('div', `${cssPrefix}-toolbar-btns`);\n\n    this.items.forEach((it) => {\n      if (Array.isArray(it)) {\n        it.forEach((i) => {\n          this.btns.child(i.el);\n          i.change = (...args) => {\n            this.change(...args);\n          };\n        });\n      } else {\n        this.btns.child(it.el);\n      }\n    });\n\n    this.el.child(this.btns);\n    if (isHide) {\n      this.el.hide();\n    } else {\n      this.reset();\n      setTimeout(() => {\n        initBtns2.call(this);\n        moreResize.call(this);\n      }, 0);\n      bind(window, 'resize', () => {\n        moreResize.call(this);\n      });\n    }\n  }\n\n  paintformatActive() {\n    return this.paintformatEl.active();\n  }\n\n  paintformatToggle() {\n    this.paintformatEl.toggle();\n  }\n\n  trigger(type) {\n    this[`${type}El`].click();\n  }\n\n  resetData(data) {\n    this.data = data;\n    this.reset();\n  }\n\n  reset() {\n    if (this.isHide) return;\n    const { data } = this;\n    const style = data.getSelectedCellStyle();\n    // console.log('canUndo:', data.canUndo());\n    this.undoEl.setState(!data.canUndo());\n    this.redoEl.setState(!data.canRedo());\n    this.mergeEl.setState(data.canUnmerge(), !data.selector.multiple());\n    this.autofilterEl.setState(!data.canAutofilter());\n    // this.mergeEl.disabled();\n    // console.log('selectedCell:', style, cell);\n    const { font, format } = style;\n    this.formatEl.setState(format);\n    this.fontEl.setState(font.name);\n    this.fontSizeEl.setState(font.size);\n    this.boldEl.setState(font.bold);\n    this.italicEl.setState(font.italic);\n    this.underlineEl.setState(style.underline);\n    this.strikeEl.setState(style.strike);\n    this.textColorEl.setState(style.color);\n    this.fillColorEl.setState(style.bgcolor);\n    this.alignEl.setState(style.align);\n    this.valignEl.setState(style.valign);\n    this.textwrapEl.setState(style.textwrap);\n    // console.log('freeze is Active:', data.freezeIsActive());\n    this.freezeEl.setState(data.freezeIsActive());\n  }\n}\n","/* global document */\n/* global window */\nimport { h } from './element';\nimport Icon from './icon';\nimport { cssPrefix } from '../config';\nimport { bind, unbind } from './event';\n\nexport default class Modal {\n  constructor(title, content, width = '600px') {\n    this.title = title;\n    this.el = h('div', `${cssPrefix}-modal`).css('width', width).children(\n      h('div', `${cssPrefix}-modal-header`).children(\n        new Icon('close').on('click.stop', () => this.hide()),\n        this.title,\n      ),\n      h('div', `${cssPrefix}-modal-content`).children(...content),\n    ).hide();\n  }\n\n  show() {\n    // dimmer\n    this.dimmer = h('div', `${cssPrefix}-dimmer active`);\n    document.body.appendChild(this.dimmer.el);\n    const { width, height } = this.el.show().box();\n    const { clientHeight, clientWidth } = document.documentElement;\n    this.el.offset({\n      left: (clientWidth - width) / 2,\n      top: (clientHeight - height) / 3,\n    });\n    window.xkeydownEsc = (evt) => {\n      if (evt.keyCode === 27) {\n        this.hide();\n      }\n    };\n    bind(window, 'keydown', window.xkeydownEsc);\n  }\n\n  hide() {\n    this.el.hide();\n    document.body.removeChild(this.dimmer.el);\n    unbind(window, 'keydown', window.xkeydownEsc);\n    delete window.xkeydownEsc;\n  }\n}\n","import { h } from './element';\nimport { cssPrefix } from '../config';\n\nexport default class FormInput {\n  constructor(width, hint) {\n    this.vchange = () => {};\n    this.el = h('div', `${cssPrefix}-form-input`);\n    this.input = h('input', '').css('width', width)\n      .on('input', evt => this.vchange(evt))\n      .attr('placeholder', hint);\n    this.el.child(this.input);\n  }\n\n  focus() {\n    setTimeout(() => {\n      this.input.el.focus();\n    }, 10);\n  }\n\n  hint(v) {\n    this.input.attr('placeholder', v);\n  }\n\n  val(v) {\n    return this.input.val(v);\n  }\n}\n","import { h } from './element';\nimport Suggest from './suggest';\nimport { cssPrefix } from '../config';\n\nexport default class FormSelect {\n  constructor(key, items, width, getTitle = it => it, change = () => {}) {\n    this.key = key;\n    this.getTitle = getTitle;\n    this.vchange = () => {};\n    this.el = h('div', `${cssPrefix}-form-select`);\n    this.suggest = new Suggest(items.map(it => ({ key: it, title: this.getTitle(it) })), (it) => {\n      this.itemClick(it.key);\n      change(it.key);\n      this.vchange(it.key);\n    }, width, this.el);\n    this.el.children(\n      this.itemEl = h('div', 'input-text').html(this.getTitle(key)),\n      this.suggest.el,\n    ).on('click', () => this.show());\n  }\n\n  show() {\n    this.suggest.search('');\n  }\n\n  itemClick(it) {\n    this.key = it;\n    this.itemEl.html(this.getTitle(it));\n  }\n\n  val(v) {\n    if (v !== undefined) {\n      this.key = v;\n      this.itemEl.html(this.getTitle(v));\n      return this;\n    }\n    return this.key;\n  }\n}\n","import { h } from './element';\nimport { cssPrefix } from '../config';\nimport { t } from '../locale/locale';\n\nconst patterns = {\n  number: /(^\\d+$)|(^\\d+(\\.\\d{0,4})?$)/,\n  date: /^\\d{4}-\\d{1,2}-\\d{1,2}$/,\n};\n\n// rule: { required: false, type, pattern: // }\nexport default class FormField {\n  constructor(input, rule, label, labelWidth) {\n    this.label = '';\n    this.rule = rule;\n    if (label) {\n      this.label = h('label', 'label').css('width', `${labelWidth}px`).html(label);\n    }\n    this.tip = h('div', 'tip').child('tip').hide();\n    this.input = input;\n    this.input.vchange = () => this.validate();\n    this.el = h('div', `${cssPrefix}-form-field`)\n      .children(this.label, input.el, this.tip);\n  }\n\n  isShow() {\n    return this.el.css('display') !== 'none';\n  }\n\n  show() {\n    this.el.show();\n  }\n\n  hide() {\n    this.el.hide();\n    return this;\n  }\n\n  val(v) {\n    return this.input.val(v);\n  }\n\n  hint(hint) {\n    this.input.hint(hint);\n  }\n\n  validate() {\n    const {\n      input, rule, tip, el,\n    } = this;\n    const v = input.val();\n    if (rule.required) {\n      if (/^\\s*$/.test(v)) {\n        tip.html(t('validation.required'));\n        el.addClass('error');\n        return false;\n      }\n    }\n    if (rule.type || rule.pattern) {\n      const pattern = rule.pattern || patterns[rule.type];\n      if (!pattern.test(v)) {\n        tip.html(t('validation.notMatch'));\n        el.addClass('error');\n        return false;\n      }\n    }\n    el.removeClass('error');\n    return true;\n  }\n}\n","import Modal from './modal';\nimport FormInput from './form_input';\nimport FormSelect from './form_select';\nimport FormField from './form_field';\nimport Button from './button';\nimport { t } from '../locale/locale';\nimport { h } from './element';\nimport { cssPrefix } from '../config';\n\nconst fieldLabelWidth = 100;\n\nexport default class ModalValidation extends Modal {\n  constructor() {\n    const mf = new FormField(\n      new FormSelect('cell',\n        ['cell'], // cell|row|column\n        '100%',\n        it => t(`dataValidation.modeType.${it}`)),\n      { required: true },\n      `${t('dataValidation.range')}:`,\n      fieldLabelWidth,\n    );\n    const rf = new FormField(\n      new FormInput('120px', 'E3 or E3:F12'),\n      { required: true, pattern: /^([A-Z]{1,2}[1-9]\\d*)(:[A-Z]{1,2}[1-9]\\d*)?$/ },\n    );\n    const cf = new FormField(\n      new FormSelect('list',\n        ['list', 'number', 'date', 'phone', 'email'],\n        '100%',\n        it => t(`dataValidation.type.${it}`),\n        it => this.criteriaSelected(it)),\n      { required: true },\n      `${t('dataValidation.criteria')}:`,\n      fieldLabelWidth,\n    );\n\n    // operator\n    const of = new FormField(\n      new FormSelect('be',\n        ['be', 'nbe', 'eq', 'neq', 'lt', 'lte', 'gt', 'gte'],\n        '160px',\n        it => t(`dataValidation.operator.${it}`),\n        it => this.criteriaOperatorSelected(it)),\n      { required: true },\n    ).hide();\n    // min, max\n    const minvf = new FormField(\n      new FormInput('70px', '10'),\n      { required: true },\n    ).hide();\n    const maxvf = new FormField(\n      new FormInput('70px', '100'),\n      { required: true, type: 'number' },\n    ).hide();\n    // value\n    const svf = new FormField(\n      new FormInput('120px', 'a,b,c'),\n      { required: true },\n    );\n    const vf = new FormField(\n      new FormInput('70px', '10'),\n      { required: true, type: 'number' },\n    ).hide();\n\n    super(t('contextmenu.validation'), [\n      h('div', `${cssPrefix}-form-fields`).children(\n        mf.el,\n        rf.el,\n      ),\n      h('div', `${cssPrefix}-form-fields`).children(\n        cf.el,\n        of.el,\n        minvf.el,\n        maxvf.el,\n        vf.el,\n        svf.el,\n      ),\n      h('div', `${cssPrefix}-buttons`).children(\n        new Button('cancel').on('click', () => this.btnClick('cancel')),\n        new Button('remove').on('click', () => this.btnClick('remove')),\n        new Button('save', 'primary').on('click', () => this.btnClick('save')),\n      ),\n    ]);\n    this.mf = mf;\n    this.rf = rf;\n    this.cf = cf;\n    this.of = of;\n    this.minvf = minvf;\n    this.maxvf = maxvf;\n    this.vf = vf;\n    this.svf = svf;\n    this.change = () => {};\n  }\n\n  showVf(it) {\n    const hint = it === 'date' ? '2018-11-12' : '10';\n    const { vf } = this;\n    vf.input.hint(hint);\n    vf.show();\n  }\n\n  criteriaSelected(it) {\n    const {\n      of, minvf, maxvf, vf, svf,\n    } = this;\n    if (it === 'date' || it === 'number') {\n      of.show();\n      minvf.rule.type = it;\n      maxvf.rule.type = it;\n      if (it === 'date') {\n        minvf.hint('2018-11-12');\n        maxvf.hint('2019-11-12');\n      } else {\n        minvf.hint('10');\n        maxvf.hint('100');\n      }\n      minvf.show();\n      maxvf.show();\n      vf.hide();\n      svf.hide();\n    } else {\n      if (it === 'list') {\n        svf.show();\n      } else {\n        svf.hide();\n      }\n      vf.hide();\n      of.hide();\n      minvf.hide();\n      maxvf.hide();\n    }\n  }\n\n  criteriaOperatorSelected(it) {\n    if (!it) return;\n    const {\n      minvf, maxvf, vf,\n    } = this;\n    if (it === 'be' || it === 'nbe') {\n      minvf.show();\n      maxvf.show();\n      vf.hide();\n    } else {\n      const type = this.cf.val();\n      vf.rule.type = type;\n      if (type === 'date') {\n        vf.hint('2018-11-12');\n      } else {\n        vf.hint('10');\n      }\n      vf.show();\n      minvf.hide();\n      maxvf.hide();\n    }\n  }\n\n  btnClick(action) {\n    if (action === 'cancel') {\n      this.hide();\n    } else if (action === 'remove') {\n      this.change('remove');\n      this.hide();\n    } else if (action === 'save') {\n      // validate\n      const attrs = ['mf', 'rf', 'cf', 'of', 'svf', 'vf', 'minvf', 'maxvf'];\n      for (let i = 0; i < attrs.length; i += 1) {\n        const field = this[attrs[i]];\n        // console.log('field:', field);\n        if (field.isShow()) {\n          // console.log('it:', it);\n          if (!field.validate()) return;\n        }\n      }\n\n      const mode = this.mf.val();\n      const ref = this.rf.val();\n      const type = this.cf.val();\n      const operator = this.of.val();\n      let value = this.svf.val();\n      if (type === 'number' || type === 'date') {\n        if (operator === 'be' || operator === 'nbe') {\n          value = [this.minvf.val(), this.maxvf.val()];\n        } else {\n          value = this.vf.val();\n        }\n      }\n      // console.log(mode, ref, type, operator, value);\n      this.change('save',\n        mode,\n        ref,\n        {\n          type, operator, required: false, value,\n        });\n      this.hide();\n    }\n  }\n\n  // validation: { mode, ref, validator }\n  setValue(v) {\n    if (v) {\n      const {\n        mf, rf, cf, of, svf, vf, minvf, maxvf,\n      } = this;\n      const {\n        mode, ref, validator,\n      } = v;\n      const {\n        type, operator, value,\n      } = validator || { type: 'list' };\n      mf.val(mode || 'cell');\n      rf.val(ref);\n      cf.val(type);\n      of.val(operator);\n      if (Array.isArray(value)) {\n        minvf.val(value[0]);\n        maxvf.val(value[1]);\n      } else {\n        svf.val(value || '');\n        vf.val(value || '');\n      }\n      this.criteriaSelected(type);\n      this.criteriaOperatorSelected(operator);\n    }\n    this.show();\n  }\n}\n","import { h } from './element';\nimport Button from './button';\nimport { bindClickoutside, unbindClickoutside } from './event';\nimport { cssPrefix } from '../config';\nimport { t } from '../locale/locale';\n\nfunction buildMenu(clsName) {\n  return h('div', `${cssPrefix}-item ${clsName}`);\n}\n\nfunction buildSortItem(it) {\n  return buildMenu('state').child(t(`sort.${it}`))\n    .on('click.stop', () => this.itemClick(it));\n}\n\nfunction buildFilterBody(items) {\n  const { filterbEl, filterValues } = this;\n  filterbEl.html('');\n  const itemKeys = Object.keys(items);\n  itemKeys.forEach((it, index) => {\n    const cnt = items[it];\n    const active = filterValues.includes(it) ? 'checked' : '';\n    filterbEl.child(h('div', `${cssPrefix}-item state ${active}`)\n      .on('click.stop', () => this.filterClick(index, it))\n      .children(it === '' ? t('filter.empty') : it, h('div', 'label').html(`(${cnt})`)));\n  });\n}\n\nfunction resetFilterHeader() {\n  const { filterhEl, filterValues, values } = this;\n  filterhEl.html(`${filterValues.length} / ${values.length}`);\n  filterhEl.checked(filterValues.length === values.length);\n}\n\nexport default class SortFilter {\n  constructor() {\n    this.filterbEl = h('div', `${cssPrefix}-body`);\n    this.filterhEl = h('div', `${cssPrefix}-header state`).on('click.stop', () => this.filterClick(0, 'all'));\n    this.el = h('div', `${cssPrefix}-sort-filter`).children(\n      this.sortAscEl = buildSortItem.call(this, 'asc'),\n      this.sortDescEl = buildSortItem.call(this, 'desc'),\n      buildMenu('divider'),\n      h('div', `${cssPrefix}-filter`).children(\n        this.filterhEl,\n        this.filterbEl,\n      ),\n      h('div', `${cssPrefix}-buttons`).children(\n        new Button('cancel').on('click', () => this.btnClick('cancel')),\n        new Button('ok', 'primary').on('click', () => this.btnClick('ok')),\n      ),\n    ).hide();\n    // this.setFilters(['test1', 'test2', 'text3']);\n    this.ci = null;\n    this.sortDesc = null;\n    this.values = null;\n    this.filterValues = [];\n  }\n\n  btnClick(it) {\n    if (it === 'ok') {\n      const { ci, sort, filterValues } = this;\n      if (this.ok) {\n        this.ok(ci, sort, 'in', filterValues);\n      }\n    }\n    this.hide();\n  }\n\n  itemClick(it) {\n    // console.log('it:', it);\n    this.sort = it;\n    const { sortAscEl, sortDescEl } = this;\n    sortAscEl.checked(it === 'asc');\n    sortDescEl.checked(it === 'desc');\n  }\n\n  filterClick(index, it) {\n    // console.log('index:', index, it);\n    const { filterbEl, filterValues, values } = this;\n    const children = filterbEl.children();\n    if (it === 'all') {\n      if (children.length === filterValues.length) {\n        this.filterValues = [];\n        children.forEach(i => h(i).checked(false));\n      } else {\n        this.filterValues = Array.from(values);\n        children.forEach(i => h(i).checked(true));\n      }\n    } else {\n      const checked = h(children[index]).toggle('checked');\n      if (checked) {\n        filterValues.push(it);\n      } else {\n        filterValues.splice(filterValues.findIndex(i => i === it), 1);\n      }\n    }\n    resetFilterHeader.call(this);\n  }\n\n  // v: autoFilter\n  // items: {value: cnt}\n  // sort { ci, order }\n  set(ci, items, filter, sort) {\n    this.ci = ci;\n    const { sortAscEl, sortDescEl } = this;\n    if (sort !== null) {\n      this.sort = sort.order;\n      sortAscEl.checked(sort.asc());\n      sortDescEl.checked(sort.desc());\n    } else {\n      this.sortDesc = null;\n      sortAscEl.checked(false);\n      sortDescEl.checked(false);\n    }\n    // this.setFilters(items, filter);\n    this.values = Object.keys(items);\n    this.filterValues = filter ? Array.from(filter.value) : Object.keys(items);\n    buildFilterBody.call(this, items, filter);\n    resetFilterHeader.call(this);\n  }\n\n  setOffset(v) {\n    this.el.offset(v).show();\n    let tindex = 1;\n    bindClickoutside(this.el, () => {\n      if (tindex <= 0) {\n        this.hide();\n      }\n      tindex -= 1;\n    });\n  }\n\n  show() {\n    this.el.show();\n  }\n\n  hide() {\n    this.el.hide();\n    unbindClickoutside(this.el);\n  }\n}\n","/* global document */\nimport { h } from './element';\nimport Icon from './icon';\nimport { cssPrefix } from '../config';\n\nexport function xtoast(title, content) {\n  const el = h('div', `${cssPrefix}-toast`);\n  const dimmer = h('div', `${cssPrefix}-dimmer active`);\n  const remove = () => {\n    document.body.removeChild(el.el);\n    document.body.removeChild(dimmer.el);\n  };\n\n  el.children(\n    h('div', `${cssPrefix}-toast-header`).children(\n      new Icon('close').on('click.stop', () => remove()),\n      title,\n    ),\n    h('div', `${cssPrefix}-toast-content`).html(content),\n  );\n  document.body.appendChild(el.el);\n  document.body.appendChild(dimmer.el);\n  // set offset\n  const { width, height } = el.box();\n  const { clientHeight, clientWidth } = document.documentElement;\n  el.offset({\n    left: (clientWidth - width) / 2,\n    top: (clientHeight - height) / 3,\n  });\n}\n\nexport default {};\n","/* global window */\nimport { h } from './element';\nimport {\n  bind,\n  mouseMoveUp,\n  bindTouch,\n  createEventEmitter,\n} from './event';\nimport Resizer from './resizer';\nimport Scrollbar from './scrollbar';\nimport Selector from './selector';\nimport Editor from './editor';\nimport Print from './print';\nimport ContextMenu from './contextmenu';\nimport Table from './table';\nimport Toolbar from './toolbar/index';\nimport ModalValidation from './modal_validation';\nimport SortFilter from './sort_filter';\nimport { xtoast } from './message';\nimport { cssPrefix } from '../config';\nimport { formulas } from '../core/formula';\n\n/**\n * @desc throttle fn\n * @param func function\n * @param wait Delay in milliseconds\n */\nfunction throttle(func, wait) {\n  let timeout;\n  return (...arg) => {\n    const that = this;\n    const args = arg;\n    if (!timeout) {\n      timeout = setTimeout(() => {\n        timeout = null;\n        func.apply(that, args);\n      }, wait);\n    }\n  };\n}\n\nfunction scrollbarMove() {\n  const {\n    data, verticalScrollbar, horizontalScrollbar,\n  } = this;\n  const {\n    l, t, left, top, width, height,\n  } = data.getSelectedRect();\n  const tableOffset = this.getTableOffset();\n  // console.log(',l:', l, ', left:', left, ', tOffset.left:', tableOffset.width);\n  if (Math.abs(left) + width > tableOffset.width) {\n    horizontalScrollbar.move({ left: l + width - tableOffset.width });\n  } else {\n    const fsw = data.freezeTotalWidth();\n    if (left < fsw) {\n      horizontalScrollbar.move({ left: l - 1 - fsw });\n    }\n  }\n  // console.log('top:', top, ', height:', height, ', tof.height:', tableOffset.height);\n  if (Math.abs(top) + height > tableOffset.height) {\n    verticalScrollbar.move({ top: t + height - tableOffset.height - 1 });\n  } else {\n    const fsh = data.freezeTotalHeight();\n    if (top < fsh) {\n      verticalScrollbar.move({ top: t - 1 - fsh });\n    }\n  }\n}\n\nfunction selectorSet(multiple, ri, ci, indexesUpdated = true, moving = false) {\n  if (ri === -1 && ci === -1) return;\n  const {\n    table, selector, toolbar, data,\n    contextMenu,\n  } = this;\n  contextMenu.setMode((ri === -1 || ci === -1) ? 'row-col' : 'range');\n  const cell = data.getCell(ri, ci);\n  if (multiple) {\n    selector.setEnd(ri, ci, moving);\n    this.trigger('cells-selected', cell, selector.range);\n  } else {\n    // trigger click event\n    selector.set(ri, ci, indexesUpdated);\n    this.trigger('cell-selected', cell, ri, ci);\n  }\n  toolbar.reset();\n  table.render();\n}\n\n// multiple: boolean\n// direction: left | right | up | down | row-first | row-last | col-first | col-last\nfunction selectorMove(multiple, direction) {\n  const {\n    selector, data,\n  } = this;\n  const { rows, cols } = data;\n  let [ri, ci] = selector.indexes;\n  const { eri, eci } = selector.range;\n  if (multiple) {\n    [ri, ci] = selector.moveIndexes;\n  }\n  // console.log('selector.move:', ri, ci);\n  if (direction === 'left') {\n    if (ci > 0) ci -= 1;\n  } else if (direction === 'right') {\n    if (eci !== ci) ci = eci;\n    if (ci < cols.len - 1) ci += 1;\n  } else if (direction === 'up') {\n    if (ri > 0) ri -= 1;\n  } else if (direction === 'down') {\n    if (eri !== ri) ri = eri;\n    if (ri < rows.len - 1) ri += 1;\n  } else if (direction === 'row-first') {\n    ci = 0;\n  } else if (direction === 'row-last') {\n    ci = cols.len - 1;\n  } else if (direction === 'col-first') {\n    ri = 0;\n  } else if (direction === 'col-last') {\n    ri = rows.len - 1;\n  }\n  if (multiple) {\n    selector.moveIndexes = [ri, ci];\n  }\n  selectorSet.call(this, multiple, ri, ci);\n  scrollbarMove.call(this);\n}\n\n// private methods\nfunction overlayerMousemove(evt) {\n  // console.log('x:', evt.offsetX, ', y:', evt.offsetY);\n  if (evt.buttons !== 0) return;\n  if (evt.target.className === `${cssPrefix}-resizer-hover`) return;\n  const { offsetX, offsetY } = evt;\n  const {\n    rowResizer, colResizer, tableEl, data,\n  } = this;\n  const { rows, cols } = data;\n  if (offsetX > cols.indexWidth && offsetY > rows.height) {\n    rowResizer.hide();\n    colResizer.hide();\n    return;\n  }\n  const tRect = tableEl.box();\n  const cRect = data.getCellRectByXY(evt.offsetX, evt.offsetY);\n  if (cRect.ri >= 0 && cRect.ci === -1) {\n    cRect.width = cols.indexWidth;\n    rowResizer.show(cRect, {\n      width: tRect.width,\n    });\n    if (rows.isHide(cRect.ri - 1)) {\n      rowResizer.showUnhide(cRect.ri);\n    } else {\n      rowResizer.hideUnhide();\n    }\n  } else {\n    rowResizer.hide();\n  }\n  if (cRect.ri === -1 && cRect.ci >= 0) {\n    cRect.height = rows.height;\n    colResizer.show(cRect, {\n      height: tRect.height,\n    });\n    if (cols.isHide(cRect.ci - 1)) {\n      colResizer.showUnhide(cRect.ci);\n    } else {\n      colResizer.hideUnhide();\n    }\n  } else {\n    colResizer.hide();\n  }\n}\n\n// let scrollThreshold = 15;\nfunction overlayerMousescroll(evt) {\n  // scrollThreshold -= 1;\n  // if (scrollThreshold > 0) return;\n  // scrollThreshold = 15;\n\n  const { verticalScrollbar, horizontalScrollbar, data } = this;\n  const { top } = verticalScrollbar.scroll();\n  const { left } = horizontalScrollbar.scroll();\n  // console.log('evt:::', evt.wheelDelta, evt.detail * 40);\n\n  const { rows, cols } = data;\n\n  // deltaY for vertical delta\n  const { deltaY, deltaX } = evt;\n  const loopValue = (ii, vFunc) => {\n    let i = ii;\n    let v = 0;\n    do {\n      v = vFunc(i);\n      i += 1;\n    } while (v <= 0);\n    return v;\n  };\n  // console.log('deltaX', deltaX, 'evt.detail', evt.detail);\n  // if (evt.detail) deltaY = evt.detail * 40;\n  const moveY = (vertical) => {\n    if (vertical > 0) {\n      // up\n      const ri = data.scroll.ri + 1;\n      if (ri < rows.len) {\n        const rh = loopValue(ri, i => rows.getHeight(i));\n        verticalScrollbar.move({ top: top + rh - 1 });\n      }\n    } else {\n      // down\n      const ri = data.scroll.ri - 1;\n      if (ri >= 0) {\n        const rh = loopValue(ri, i => rows.getHeight(i));\n        verticalScrollbar.move({ top: ri === 0 ? 0 : top - rh });\n      }\n    }\n  };\n\n  // deltaX for Mac horizontal scroll\n  const moveX = (horizontal) => {\n    if (horizontal > 0) {\n      // left\n      const ci = data.scroll.ci + 1;\n      if (ci < cols.len) {\n        const cw = loopValue(ci, i => cols.getWidth(i));\n        horizontalScrollbar.move({ left: left + cw - 1 });\n      }\n    } else {\n      // right\n      const ci = data.scroll.ci - 1;\n      if (ci >= 0) {\n        const cw = loopValue(ci, i => cols.getWidth(i));\n        horizontalScrollbar.move({ left: ci === 0 ? 0 : left - cw });\n      }\n    }\n  };\n  const tempY = Math.abs(deltaY);\n  const tempX = Math.abs(deltaX);\n  const temp = Math.max(tempY, tempX);\n  // console.log('event:', evt);\n  // detail for windows/mac firefox vertical scroll\n  if (/Firefox/i.test(window.navigator.userAgent)) throttle(moveY(evt.detail), 50);\n  if (temp === tempX) throttle(moveX(deltaX), 50);\n  if (temp === tempY) throttle(moveY(deltaY), 50);\n}\n\nfunction overlayerTouch(direction, distance) {\n  const { verticalScrollbar, horizontalScrollbar } = this;\n  const { top } = verticalScrollbar.scroll();\n  const { left } = horizontalScrollbar.scroll();\n\n  if (direction === 'left' || direction === 'right') {\n    horizontalScrollbar.move({ left: left - distance });\n  } else if (direction === 'up' || direction === 'down') {\n    verticalScrollbar.move({ top: top - distance });\n  }\n}\n\nfunction verticalScrollbarSet() {\n  const { data, verticalScrollbar } = this;\n  const { height } = this.getTableOffset();\n  const erth = data.exceptRowTotalHeight(0, -1);\n  // console.log('erth:', erth);\n  verticalScrollbar.set(height, data.rows.totalHeight() - erth);\n}\n\nfunction horizontalScrollbarSet() {\n  const { data, horizontalScrollbar } = this;\n  const { width } = this.getTableOffset();\n  if (data) {\n    horizontalScrollbar.set(width, data.cols.totalWidth());\n  }\n}\n\nfunction sheetFreeze() {\n  const {\n    selector, data, editor,\n  } = this;\n  const [ri, ci] = data.freeze;\n  if (ri > 0 || ci > 0) {\n    const fwidth = data.freezeTotalWidth();\n    const fheight = data.freezeTotalHeight();\n    editor.setFreezeLengths(fwidth, fheight);\n  }\n  selector.resetAreaOffset();\n}\n\nfunction sheetReset() {\n  const {\n    tableEl,\n    overlayerEl,\n    overlayerCEl,\n    table,\n    toolbar,\n    selector,\n    el,\n  } = this;\n  const tOffset = this.getTableOffset();\n  const vRect = this.getRect();\n  tableEl.attr(vRect);\n  overlayerEl.offset(vRect);\n  overlayerCEl.offset(tOffset);\n  el.css('width', `${vRect.width}px`);\n  verticalScrollbarSet.call(this);\n  horizontalScrollbarSet.call(this);\n  sheetFreeze.call(this);\n  table.render();\n  toolbar.reset();\n  selector.reset();\n}\n\nfunction clearClipboard() {\n  const { data, selector } = this;\n  data.clearClipboard();\n  selector.hideClipboard();\n}\n\nfunction copy() {\n  const { data, selector } = this;\n  data.copy();\n  data.copyToSystemClipboard();\n  selector.showClipboard();\n}\n\nfunction cut() {\n  const { data, selector } = this;\n  data.cut();\n  selector.showClipboard();\n}\n\nfunction paste(what, evt) {\n  const { data } = this;\n  if (data.settings.mode === 'read') return;\n  if (data.paste(what, msg => xtoast('Tip', msg))) {\n    sheetReset.call(this);\n  } else if (evt) {\n    const cdata = evt.clipboardData.getData('text/plain');\n    this.data.pasteFromText(cdata);\n    sheetReset.call(this);\n  }\n}\n\nfunction hideRowsOrCols() {\n  this.data.hideRowsOrCols();\n  sheetReset.call(this);\n}\n\nfunction unhideRowsOrCols(type, index) {\n  this.data.unhideRowsOrCols(type, index);\n  sheetReset.call(this);\n}\n\nfunction autofilter() {\n  const { data } = this;\n  data.autofilter();\n  sheetReset.call(this);\n}\n\nfunction toolbarChangePaintformatPaste() {\n  const { toolbar } = this;\n  if (toolbar.paintformatActive()) {\n    paste.call(this, 'format');\n    clearClipboard.call(this);\n    toolbar.paintformatToggle();\n  }\n}\n\nfunction overlayerMousedown(evt) {\n  // console.log(':::::overlayer.mousedown:', evt.detail, evt.button, evt.buttons, evt.shiftKey);\n  // console.log('evt.target.className:', evt.target.className);\n  const {\n    selector, data, table, sortFilter,\n  } = this;\n  const { offsetX, offsetY } = evt;\n  const isAutofillEl = evt.target.className === `${cssPrefix}-selector-corner`;\n  const cellRect = data.getCellRectByXY(offsetX, offsetY);\n  const {\n    left, top, width, height,\n  } = cellRect;\n  let { ri, ci } = cellRect;\n  // sort or filter\n  const { autoFilter } = data;\n  if (autoFilter.includes(ri, ci)) {\n    if (left + width - 20 < offsetX && top + height - 20 < offsetY) {\n      const items = autoFilter.items(ci, (r, c) => data.rows.getCell(r, c));\n      sortFilter.hide();\n      sortFilter.set(ci, items, autoFilter.getFilter(ci), autoFilter.getSort(ci));\n      sortFilter.setOffset({ left, top: top + height + 2 });\n      return;\n    }\n  }\n\n  // console.log('ri:', ri, ', ci:', ci);\n  if (!evt.shiftKey) {\n    // console.log('selectorSetStart:::');\n    if (isAutofillEl) {\n      selector.showAutofill(ri, ci);\n    } else {\n      selectorSet.call(this, false, ri, ci);\n    }\n\n    // mouse move up\n    mouseMoveUp(window, (e) => {\n      // console.log('mouseMoveUp::::');\n      ({ ri, ci } = data.getCellRectByXY(e.offsetX, e.offsetY));\n      if (isAutofillEl) {\n        selector.showAutofill(ri, ci);\n      } else if (e.buttons === 1 && !e.shiftKey) {\n        selectorSet.call(this, true, ri, ci, true, true);\n      }\n    }, () => {\n      if (isAutofillEl && selector.arange && data.settings.mode !== 'read') {\n        if (data.autofill(selector.arange, 'all', msg => xtoast('Tip', msg))) {\n          table.render();\n        }\n      }\n      selector.hideAutofill();\n      toolbarChangePaintformatPaste.call(this);\n    });\n  }\n\n  if (!isAutofillEl && evt.buttons === 1) {\n    if (evt.shiftKey) {\n      // console.log('shiftKey::::');\n      selectorSet.call(this, true, ri, ci);\n    }\n  }\n}\n\nfunction editorSetOffset() {\n  const { editor, data } = this;\n  const sOffset = data.getSelectedRect();\n  const tOffset = this.getTableOffset();\n  let sPosition = 'top';\n  // console.log('sOffset:', sOffset, ':', tOffset);\n  if (sOffset.top > tOffset.height / 2) {\n    sPosition = 'bottom';\n  }\n  editor.setOffset(sOffset, sPosition);\n}\n\nfunction editorSet() {\n  const { editor, data } = this;\n  if (data.settings.mode === 'read') return;\n  editorSetOffset.call(this);\n  editor.setCell(data.getSelectedCell(), data.getSelectedValidator());\n  clearClipboard.call(this);\n}\n\nfunction verticalScrollbarMove(distance) {\n  const { data, table, selector } = this;\n  data.scrolly(distance, () => {\n    selector.resetBRLAreaOffset();\n    editorSetOffset.call(this);\n    table.render();\n  });\n}\n\nfunction horizontalScrollbarMove(distance) {\n  const { data, table, selector } = this;\n  data.scrollx(distance, () => {\n    selector.resetBRTAreaOffset();\n    editorSetOffset.call(this);\n    table.render();\n  });\n}\n\nfunction rowResizerFinished(cRect, distance) {\n  const { ri } = cRect;\n  const { table, selector, data } = this;\n  data.rows.setHeight(ri, distance);\n  table.render();\n  selector.resetAreaOffset();\n  verticalScrollbarSet.call(this);\n  editorSetOffset.call(this);\n}\n\nfunction colResizerFinished(cRect, distance) {\n  const { ci } = cRect;\n  const { table, selector, data } = this;\n  data.cols.setWidth(ci, distance);\n  // console.log('data:', data);\n  table.render();\n  selector.resetAreaOffset();\n  horizontalScrollbarSet.call(this);\n  editorSetOffset.call(this);\n}\n\nfunction dataSetCellText(text, state = 'finished') {\n  const { data, table } = this;\n  // const [ri, ci] = selector.indexes;\n  if (data.settings.mode === 'read') return;\n  data.setSelectedCellText(text, state);\n  const { ri, ci } = data.selector;\n  if (state === 'finished') {\n    table.render();\n  } else {\n    this.trigger('cell-edited', text, ri, ci);\n  }\n}\n\nfunction insertDeleteRowColumn(type) {\n  const { data } = this;\n  if (data.settings.mode === 'read') return;\n  if (type === 'insert-row') {\n    data.insert('row');\n  } else if (type === 'delete-row') {\n    data.delete('row');\n  } else if (type === 'insert-column') {\n    data.insert('column');\n  } else if (type === 'delete-column') {\n    data.delete('column');\n  } else if (type === 'delete-cell') {\n    data.deleteCell();\n  } else if (type === 'delete-cell-format') {\n    data.deleteCell('format');\n  } else if (type === 'delete-cell-text') {\n    data.deleteCell('text');\n  } else if (type === 'cell-printable') {\n    data.setSelectedCellAttr('printable', true);\n  } else if (type === 'cell-non-printable') {\n    data.setSelectedCellAttr('printable', false);\n  } else if (type === 'cell-editable') {\n    data.setSelectedCellAttr('editable', true);\n  } else if (type === 'cell-non-editable') {\n    data.setSelectedCellAttr('editable', false);\n  }\n  clearClipboard.call(this);\n  sheetReset.call(this);\n}\n\nfunction toolbarChange(type, value) {\n  const { data } = this;\n  if (type === 'undo') {\n    this.undo();\n  } else if (type === 'redo') {\n    this.redo();\n  } else if (type === 'print') {\n    this.print.preview();\n  } else if (type === 'paintformat') {\n    if (value === true) copy.call(this);\n    else clearClipboard.call(this);\n  } else if (type === 'clearformat') {\n    insertDeleteRowColumn.call(this, 'delete-cell-format');\n  } else if (type === 'link') {\n    // link\n  } else if (type === 'chart') {\n    // chart\n  } else if (type === 'autofilter') {\n    // filter\n    autofilter.call(this);\n  } else if (type === 'freeze') {\n    if (value) {\n      const { ri, ci } = data.selector;\n      this.freeze(ri, ci);\n    } else {\n      this.freeze(0, 0);\n    }\n  } else {\n    data.setSelectedCellAttr(type, value);\n    if (type === 'formula' && !data.selector.multiple()) {\n      editorSet.call(this);\n    }\n    sheetReset.call(this);\n  }\n}\n\nfunction sortFilterChange(ci, order, operator, value) {\n  // console.log('sort:', sortDesc, operator, value);\n  this.data.setAutoFilter(ci, order, operator, value);\n  sheetReset.call(this);\n}\n\nfunction sheetInitEvents() {\n  const {\n    selector,\n    overlayerEl,\n    rowResizer,\n    colResizer,\n    verticalScrollbar,\n    horizontalScrollbar,\n    editor,\n    contextMenu,\n    toolbar,\n    modalValidation,\n    sortFilter,\n  } = this;\n  // overlayer\n  overlayerEl\n    .on('mousemove', (evt) => {\n      overlayerMousemove.call(this, evt);\n    })\n    .on('mousedown', (evt) => {\n      editor.clear();\n      contextMenu.hide();\n      // the left mouse button: mousedown → mouseup → click\n      // the right mouse button: mousedown → contenxtmenu → mouseup\n      if (evt.buttons === 2) {\n        if (this.data.xyInSelectedRect(evt.offsetX, evt.offsetY)) {\n          contextMenu.setPosition(evt.offsetX, evt.offsetY);\n        } else {\n          overlayerMousedown.call(this, evt);\n          contextMenu.setPosition(evt.offsetX, evt.offsetY);\n        }\n        evt.stopPropagation();\n      } else if (evt.detail === 2) {\n        editorSet.call(this);\n      } else {\n        overlayerMousedown.call(this, evt);\n      }\n    })\n    .on('mousewheel.stop', (evt) => {\n      overlayerMousescroll.call(this, evt);\n    })\n    .on('mouseout', (evt) => {\n      const { offsetX, offsetY } = evt;\n      if (offsetY <= 0) colResizer.hide();\n      if (offsetX <= 0) rowResizer.hide();\n    });\n\n  selector.inputChange = (v) => {\n    dataSetCellText.call(this, v, 'input');\n    editorSet.call(this);\n  };\n\n  // slide on mobile\n  bindTouch(overlayerEl.el, {\n    move: (direction, d) => {\n      overlayerTouch.call(this, direction, d);\n    },\n  });\n\n  // toolbar change\n  toolbar.change = (type, value) => toolbarChange.call(this, type, value);\n\n  // sort filter ok\n  sortFilter.ok = (ci, order, o, v) => sortFilterChange.call(this, ci, order, o, v);\n\n  // resizer finished callback\n  rowResizer.finishedFn = (cRect, distance) => {\n    rowResizerFinished.call(this, cRect, distance);\n  };\n  colResizer.finishedFn = (cRect, distance) => {\n    colResizerFinished.call(this, cRect, distance);\n  };\n  // resizer unhide callback\n  rowResizer.unhideFn = (index) => {\n    unhideRowsOrCols.call(this, 'row', index);\n  };\n  colResizer.unhideFn = (index) => {\n    unhideRowsOrCols.call(this, 'col', index);\n  };\n  // scrollbar move callback\n  verticalScrollbar.moveFn = (distance, evt) => {\n    verticalScrollbarMove.call(this, distance, evt);\n  };\n  horizontalScrollbar.moveFn = (distance, evt) => {\n    horizontalScrollbarMove.call(this, distance, evt);\n  };\n  // editor\n  editor.change = (state, itext) => {\n    dataSetCellText.call(this, itext, state);\n  };\n  // modal validation\n  modalValidation.change = (action, ...args) => {\n    if (action === 'save') {\n      this.data.addValidation(...args);\n    } else {\n      this.data.removeValidation();\n    }\n  };\n  // contextmenu\n  contextMenu.itemClick = (type) => {\n    // console.log('type:', type);\n    if (type === 'validation') {\n      modalValidation.setValue(this.data.getSelectedValidation());\n    } else if (type === 'copy') {\n      copy.call(this);\n    } else if (type === 'cut') {\n      cut.call(this);\n    } else if (type === 'paste') {\n      paste.call(this, 'all');\n    } else if (type === 'paste-value') {\n      paste.call(this, 'text');\n    } else if (type === 'paste-format') {\n      paste.call(this, 'format');\n    } else if (type === 'hide') {\n      hideRowsOrCols.call(this);\n    } else {\n      insertDeleteRowColumn.call(this, type);\n    }\n  };\n\n  bind(window, 'resize', () => {\n    this.reload();\n  });\n\n  bind(window, 'click', (evt) => {\n    this.focusing = overlayerEl.contains(evt.target);\n  });\n\n  bind(window, 'paste', (evt) => {\n    if (!this.focusing) return;\n    paste.call(this, 'all', evt);\n    evt.preventDefault();\n  });\n\n  // for selector\n  bind(window, 'keydown', (evt) => {\n    if (!this.focusing) return;\n    const keyCode = evt.keyCode || evt.which;\n    const {\n      key, ctrlKey, shiftKey, metaKey,\n    } = evt;\n    // console.log('keydown.evt: ', keyCode);\n    if (ctrlKey || metaKey) {\n      // const { sIndexes, eIndexes } = selector;\n      // let what = 'all';\n      // if (shiftKey) what = 'text';\n      // if (altKey) what = 'format';\n      switch (keyCode) {\n        case 90:\n          // undo: ctrl + z\n          this.undo();\n          evt.preventDefault();\n          break;\n        case 89:\n          // redo: ctrl + y\n          this.redo();\n          evt.preventDefault();\n          break;\n        case 67:\n          // ctrl + c\n          copy.call(this);\n          evt.preventDefault();\n          break;\n        case 88:\n          // ctrl + x\n          cut.call(this);\n          evt.preventDefault();\n          break;\n        case 85:\n          // ctrl + u\n          toolbar.trigger('underline');\n          evt.preventDefault();\n          break;\n        case 86:\n          // ctrl + v\n          // => paste\n          // evt.preventDefault();\n          break;\n        case 37:\n          // ctrl + left\n          selectorMove.call(this, shiftKey, 'row-first');\n          evt.preventDefault();\n          break;\n        case 38:\n          // ctrl + up\n          selectorMove.call(this, shiftKey, 'col-first');\n          evt.preventDefault();\n          break;\n        case 39:\n          // ctrl + right\n          selectorMove.call(this, shiftKey, 'row-last');\n          evt.preventDefault();\n          break;\n        case 40:\n          // ctrl + down\n          selectorMove.call(this, shiftKey, 'col-last');\n          evt.preventDefault();\n          break;\n        case 32:\n          // ctrl + space, all cells in col\n          selectorSet.call(this, false, -1, this.data.selector.ci, false);\n          evt.preventDefault();\n          break;\n        case 66:\n          // ctrl + B\n          toolbar.trigger('bold');\n          break;\n        case 73:\n          // ctrl + I\n          toolbar.trigger('italic');\n          break;\n        default:\n          break;\n      }\n    } else {\n      // console.log('evt.keyCode:', evt.keyCode);\n      switch (keyCode) {\n        case 32:\n          if (shiftKey) {\n            // shift + space, all cells in row\n            selectorSet.call(this, false, this.data.selector.ri, -1, false);\n          }\n          break;\n        case 27: // esc\n          contextMenu.hide();\n          clearClipboard.call(this);\n          break;\n        case 37: // left\n          selectorMove.call(this, shiftKey, 'left');\n          evt.preventDefault();\n          break;\n        case 38: // up\n          selectorMove.call(this, shiftKey, 'up');\n          evt.preventDefault();\n          break;\n        case 39: // right\n          selectorMove.call(this, shiftKey, 'right');\n          evt.preventDefault();\n          break;\n        case 40: // down\n          selectorMove.call(this, shiftKey, 'down');\n          evt.preventDefault();\n          break;\n        case 9: // tab\n          editor.clear();\n          // shift + tab => move left\n          // tab => move right\n          selectorMove.call(this, false, shiftKey ? 'left' : 'right');\n          evt.preventDefault();\n          break;\n        case 13: // enter\n          editor.clear();\n          // shift + enter => move up\n          // enter => move down\n          selectorMove.call(this, false, shiftKey ? 'up' : 'down');\n          evt.preventDefault();\n          break;\n        case 8: // backspace\n          insertDeleteRowColumn.call(this, 'delete-cell-text');\n          evt.preventDefault();\n          break;\n        default:\n          break;\n      }\n\n      if (key === 'Delete') {\n        insertDeleteRowColumn.call(this, 'delete-cell-text');\n        evt.preventDefault();\n      } else if ((keyCode >= 65 && keyCode <= 90)\n        || (keyCode >= 48 && keyCode <= 57)\n        || (keyCode >= 96 && keyCode <= 105)\n        || evt.key === '='\n      ) {\n        dataSetCellText.call(this, evt.key, 'input');\n        editorSet.call(this);\n      } else if (keyCode === 113) {\n        // F2\n        editorSet.call(this);\n      }\n    }\n  });\n}\n\nexport default class Sheet {\n  constructor(targetEl, data) {\n    this.eventMap = createEventEmitter();\n    const { view, showToolbar, showContextmenu } = data.settings;\n    this.el = h('div', `${cssPrefix}-sheet`);\n    this.toolbar = new Toolbar(data, view.width, !showToolbar);\n    this.print = new Print(data);\n    targetEl.children(this.toolbar.el, this.el, this.print.el);\n    this.data = data;\n    // table\n    this.tableEl = h('canvas', `${cssPrefix}-table`);\n    // resizer\n    this.rowResizer = new Resizer(false, data.rows.height);\n    this.colResizer = new Resizer(true, data.cols.minWidth);\n    // scrollbar\n    this.verticalScrollbar = new Scrollbar(true);\n    this.horizontalScrollbar = new Scrollbar(false);\n    // editor\n    this.editor = new Editor(\n      formulas,\n      () => this.getTableOffset(),\n      data.rows.height,\n    );\n    // data validation\n    this.modalValidation = new ModalValidation();\n    // contextMenu\n    this.contextMenu = new ContextMenu(() => this.getRect(), !showContextmenu);\n    // selector\n    this.selector = new Selector(data);\n    this.overlayerCEl = h('div', `${cssPrefix}-overlayer-content`)\n      .children(\n        this.editor.el,\n        this.selector.el,\n      );\n    this.overlayerEl = h('div', `${cssPrefix}-overlayer`)\n      .child(this.overlayerCEl);\n    // sortFilter\n    this.sortFilter = new SortFilter();\n    // root element\n    this.el.children(\n      this.tableEl,\n      this.overlayerEl.el,\n      this.rowResizer.el,\n      this.colResizer.el,\n      this.verticalScrollbar.el,\n      this.horizontalScrollbar.el,\n      this.contextMenu.el,\n      this.modalValidation.el,\n      this.sortFilter.el,\n    );\n    // table\n    this.table = new Table(this.tableEl.el, data);\n    sheetInitEvents.call(this);\n    sheetReset.call(this);\n    // init selector [0, 0]\n    selectorSet.call(this, false, 0, 0);\n  }\n\n  on(eventName, func) {\n    this.eventMap.on(eventName, func);\n    return this;\n  }\n\n  trigger(eventName, ...args) {\n    const { eventMap } = this;\n    eventMap.fire(eventName, args);\n  }\n\n  resetData(data) {\n    // before\n    this.editor.clear();\n    // after\n    this.data = data;\n    verticalScrollbarSet.call(this);\n    horizontalScrollbarSet.call(this);\n    this.toolbar.resetData(data);\n    this.print.resetData(data);\n    this.selector.resetData(data);\n    this.table.resetData(data);\n  }\n\n  loadData(data) {\n    this.data.setData(data);\n    sheetReset.call(this);\n    return this;\n  }\n\n  // freeze rows or cols\n  freeze(ri, ci) {\n    const { data } = this;\n    data.setFreeze(ri, ci);\n    sheetReset.call(this);\n    return this;\n  }\n\n  undo() {\n    this.data.undo();\n    sheetReset.call(this);\n  }\n\n  redo() {\n    this.data.redo();\n    sheetReset.call(this);\n  }\n\n  reload() {\n    sheetReset.call(this);\n    return this;\n  }\n\n  getRect() {\n    const { data } = this;\n    return { width: data.viewWidth(), height: data.viewHeight() };\n  }\n\n  getTableOffset() {\n    const { rows, cols } = this.data;\n    const { width, height } = this.getRect();\n    return {\n      width: width - cols.indexWidth,\n      height: height - rows.height,\n      left: cols.indexWidth,\n      top: rows.height,\n    };\n  }\n}\n","import { h } from './element';\nimport { bindClickoutside, unbindClickoutside } from './event';\nimport { cssPrefix } from '../config';\nimport Icon from './icon';\nimport FormInput from './form_input';\nimport Dropdown from './dropdown';\n// Record: temp not used\n// import { xtoast } from './message';\nimport { tf } from '../locale/locale';\n\nclass DropdownMore extends Dropdown {\n  constructor(click) {\n    const icon = new Icon('ellipsis');\n    super(icon, 'auto', false, 'top-left');\n    this.contentClick = click;\n  }\n\n  reset(items) {\n    const eles = items.map((it, i) => h('div', `${cssPrefix}-item`)\n      .css('width', '150px')\n      .css('font-weight', 'normal')\n      .on('click', () => {\n        this.contentClick(i);\n        this.hide();\n      })\n      .child(it));\n    this.setContentChildren(...eles);\n  }\n\n  setTitle() {}\n}\n\nconst menuItems = [\n  { key: 'delete', title: tf('contextmenu.deleteSheet') },\n];\n\nfunction buildMenuItem(item) {\n  return h('div', `${cssPrefix}-item`)\n    .child(item.title())\n    .on('click', () => {\n      this.itemClick(item.key);\n      this.hide();\n    });\n}\n\nfunction buildMenu() {\n  return menuItems.map(it => buildMenuItem.call(this, it));\n}\n\nclass ContextMenu {\n  constructor() {\n    this.el = h('div', `${cssPrefix}-contextmenu`)\n      .css('width', '160px')\n      .children(...buildMenu.call(this))\n      .hide();\n    this.itemClick = () => {};\n  }\n\n  hide() {\n    const { el } = this;\n    el.hide();\n    unbindClickoutside(el);\n  }\n\n  setOffset(offset) {\n    const { el } = this;\n    el.offset(offset);\n    el.show();\n    bindClickoutside(el);\n  }\n}\n\nexport default class Bottombar {\n  constructor(addFunc = () => {},\n    swapFunc = () => {},\n    deleteFunc = () => {},\n    updateFunc = () => {}) {\n    this.swapFunc = swapFunc;\n    this.updateFunc = updateFunc;\n    this.dataNames = [];\n    this.activeEl = null;\n    this.deleteEl = null;\n    this.items = [];\n    this.moreEl = new DropdownMore((i) => {\n      this.clickSwap2(this.items[i]);\n    });\n    this.contextMenu = new ContextMenu();\n    this.contextMenu.itemClick = deleteFunc;\n    this.el = h('div', `${cssPrefix}-bottombar`).children(\n      this.contextMenu.el,\n      this.menuEl = h('ul', `${cssPrefix}-menu`).child(\n        h('li', '').children(\n          new Icon('add').on('click', () => {\n            addFunc();\n          }),\n          h('span', '').child(this.moreEl),\n        ),\n      ),\n    );\n  }\n\n  addItem(name, active) {\n    this.dataNames.push(name);\n    const item = h('li', active ? 'active' : '').child(name);\n    item.on('click', () => {\n      this.clickSwap2(item);\n    }).on('contextmenu', (evt) => {\n      const { offsetLeft, offsetHeight } = evt.target;\n      this.contextMenu.setOffset({ left: offsetLeft, bottom: offsetHeight + 1 });\n      this.deleteEl = item;\n    }).on('dblclick', () => {\n      const v = item.html();\n      const input = new FormInput('auto', '');\n      input.val(v);\n      input.input.on('blur', ({ target }) => {\n        const { value } = target;\n        const nindex = this.dataNames.findIndex(it => it === v);\n        this.renameItem(nindex, value);\n        /*\n        this.dataNames.splice(nindex, 1, value);\n        this.moreEl.reset(this.dataNames);\n        item.html('').child(value);\n        this.updateFunc(nindex, value);\n        */\n      });\n      item.html('').child(input.el);\n      input.focus();\n    });\n    if (active) {\n      this.clickSwap(item);\n    }\n    this.items.push(item);\n    this.menuEl.child(item);\n    this.moreEl.reset(this.dataNames);\n  }\n\n  renameItem(index, value) {\n    this.dataNames.splice(index, 1, value);\n    this.moreEl.reset(this.dataNames);\n    this.items[index].html('').child(value);\n    this.updateFunc(index, value);\n  }\n\n  clear() {\n    this.items.forEach((it) => {\n      this.menuEl.removeChild(it.el);\n    });\n    this.items = [];\n    this.dataNames = [];\n    this.moreEl.reset(this.dataNames);\n  }\n\n  deleteItem() {\n    const { activeEl, deleteEl } = this;\n    if (this.items.length > 1) {\n      const index = this.items.findIndex(it => it === deleteEl);\n      this.items.splice(index, 1);\n      this.dataNames.splice(index, 1);\n      this.menuEl.removeChild(deleteEl.el);\n      this.moreEl.reset(this.dataNames);\n      if (activeEl === deleteEl) {\n        const [f] = this.items;\n        this.activeEl = f;\n        this.activeEl.toggle();\n        return [index, 0];\n      }\n      return [index, -1];\n    }\n    return [-1];\n  }\n\n  clickSwap2(item) {\n    const index = this.items.findIndex(it => it === item);\n    this.clickSwap(item);\n    this.activeEl.toggle();\n    this.swapFunc(index);\n  }\n\n  clickSwap(item) {\n    if (this.activeEl !== null) {\n      this.activeEl.toggle();\n    }\n    this.activeEl = item;\n  }\n}\n","/* global window, document */\nimport { h } from './component/element';\nimport DataProxy from './core/data_proxy';\nimport Sheet from './component/sheet';\nimport Bottombar from './component/bottombar';\nimport { cssPrefix } from './config';\nimport { locale } from './locale/locale';\nimport './index.less';\n\n\nclass Spreadsheet {\n  constructor(selectors, options = {}) {\n    let targetEl = selectors;\n    this.options = { showBottomBar: true, ...options };\n    this.sheetIndex = 1;\n    this.datas = [];\n    if (typeof selectors === 'string') {\n      targetEl = document.querySelector(selectors);\n    }\n    this.bottombar = this.options.showBottomBar ? new Bottombar(() => {\n      const d = this.addSheet();\n      this.sheet.resetData(d);\n    }, (index) => {\n      const d = this.datas[index];\n      this.sheet.resetData(d);\n    }, () => {\n      this.deleteSheet();\n    }, (index, value) => {\n      this.datas[index].name = value;\n    }) : null;\n    this.data = this.addSheet();\n    const rootEl = h('div', `${cssPrefix}`)\n      .on('contextmenu', evt => evt.preventDefault());\n    // create canvas element\n    targetEl.appendChild(rootEl.el);\n    this.sheet = new Sheet(rootEl, this.data);\n    if (this.bottombar !== null) {\n      rootEl.child(this.bottombar.el);\n    }\n  }\n\n  addSheet(name, active = true) {\n    const n = name || `sheet${this.sheetIndex}`;\n    const d = new DataProxy(n, this.options);\n    d.change = (...args) => {\n      this.sheet.trigger('change', ...args);\n    };\n    this.datas.push(d);\n    // console.log('d:', n, d, this.datas);\n    if (this.bottombar !== null) {\n      this.bottombar.addItem(n, active);\n    }\n    this.sheetIndex += 1;\n    return d;\n  }\n\n  deleteSheet() {\n    if (this.bottombar === null) return;\n\n    const [oldIndex, nindex] = this.bottombar.deleteItem();\n    if (oldIndex >= 0) {\n      this.datas.splice(oldIndex, 1);\n      if (nindex >= 0) this.sheet.resetData(this.datas[nindex]);\n    }\n  }\n\n  loadData(data) {\n    const ds = Array.isArray(data) ? data : [data];\n    if (this.bottombar !== null) {\n      this.bottombar.clear();\n    }\n    this.datas = [];\n    if (ds.length > 0) {\n      for (let i = 0; i < ds.length; i += 1) {\n        const it = ds[i];\n        const nd = this.addSheet(it.name, i === 0);\n        nd.setData(it);\n        if (i === 0) {\n          this.sheet.resetData(nd);\n        }\n      }\n    }\n    return this;\n  }\n\n  getData() {\n    return this.datas.map(it => it.getData());\n  }\n\n  cellText(ri, ci, text, sheetIndex = 0) {\n    this.datas[sheetIndex].setCellText(ri, ci, text, 'finished');\n    return this;\n  }\n\n  cell(ri, ci, sheetIndex = 0) {\n    return this.datas[sheetIndex].getCell(ri, ci);\n  }\n\n  cellStyle(ri, ci, sheetIndex = 0) {\n    return this.datas[sheetIndex].getCellStyle(ri, ci);\n  }\n\n  reRender() {\n    this.sheet.table.render();\n    return this;\n  }\n\n  on(eventName, func) {\n    this.sheet.on(eventName, func);\n    return this;\n  }\n\n  validate() {\n    const { validations } = this.data;\n    return validations.errors.size <= 0;\n  }\n\n  change(cb) {\n    this.sheet.on('change', cb);\n    return this;\n  }\n\n  static locale(lang, message) {\n    locale(lang, message);\n  }\n}\n\nconst spreadsheet = (el, options = {}) => new Spreadsheet(el, options);\n\nif (window) {\n  window.x_spreadsheet = spreadsheet;\n  window.x_spreadsheet.locale = (lang, message) => locale(lang, message);\n}\n\nexport default Spreadsheet;\nexport {\n  spreadsheet,\n};\n","import { useState, useEffect, useRef, useCallback, forwardRef, useImperativeHandle } from 'react';\nimport ExcelJS from 'exceljs';\nimport Spreadsheet from 'x-data-spreadsheet';\nimport { convertWorkbookToSpreadsheetData } from '../../utils/excelDataConverter';\nimport { useTranslator } from '../../i18n/LocaleContext';\nimport { useFetcher } from '../../RequestContext';\nimport { RendererError } from '../RendererError';\nimport type { RendererHandle } from '../base.types';\n\ninterface XlsxRendererProps {\n  url: string;\n}\n\nexport const XlsxRenderer = forwardRef<RendererHandle, XlsxRendererProps>(({ url }, ref) => {\n  const t = useTranslator();\n  const fetcher = useFetcher();\n  const [loading, setLoading] = useState(true);\n  const [error, setError] = useState<string | null>(null);\n  const containerRef = useRef<HTMLDivElement>(null);\n  const spreadsheetRef = useRef<Spreadsheet | null>(null);\n  const sheetDataRef = useRef<Record<string, unknown>[] | null>(null);\n  const resizeObserverRef = useRef<ResizeObserver | null>(null);\n  const resizeTimeoutRef = useRef<number | null>(null);\n  const lastDimensionsRef = useRef({ width: 0, height: 0 });\n\n  const calculateDimensions = useCallback(() => {\n    if (!containerRef.current) return { width: 800, height: 600 };\n    const rawWidth = containerRef.current.clientWidth;\n    const rawHeight = containerRef.current.clientHeight;\n    const width = rawWidth > 100 ? rawWidth : 800;\n    const height = rawHeight > 100 ? rawHeight : 600;\n    return { width, height };\n  }, []);\n\n  const mountSpreadsheet = useCallback(() => {\n    if (!containerRef.current || !sheetDataRef.current) return;\n\n    // 清空容器\n    containerRef.current.innerHTML = '';\n    spreadsheetRef.current = null;\n\n    const { width, height } = calculateDimensions();\n    const isMobile = width < 640;\n\n    const s = new Spreadsheet(containerRef.current, {\n      mode: 'read',\n      showToolbar: false,\n      showContextmenu: false,\n      showGrid: true,\n      row: {\n        len: 100,\n        height: 25,\n      },\n      col: {\n        len: 26,\n        width: isMobile ? 80 : 100,\n        indexWidth: isMobile ? 40 : 60,\n        minWidth: isMobile ? 40 : 60,\n      },\n      view: {\n        height: () => height,\n        width: () => width,\n      },\n    });\n\n    s.loadData(sheetDataRef.current as unknown as Record<string, unknown>);\n    spreadsheetRef.current = s;\n  }, [calculateDimensions]);\n\n  // 监听容器尺寸变化\n  useEffect(() => {\n    if (!containerRef.current) return;\n\n    let isInitialRender = true;\n\n    const updateDimensions = () => {\n      if (isInitialRender) {\n        isInitialRender = false;\n        lastDimensionsRef.current = calculateDimensions();\n        return;\n      }\n\n      const newDimensions = calculateDimensions();\n      const lastDimensions = lastDimensionsRef.current;\n      const widthDiff = Math.abs(lastDimensions.width - newDimensions.width);\n      const heightDiff = Math.abs(lastDimensions.height - newDimensions.height);\n\n      if (widthDiff < 10 && heightDiff < 10) return;\n\n      lastDimensionsRef.current = newDimensions;\n\n      if (resizeTimeoutRef.current) {\n        clearTimeout(resizeTimeoutRef.current);\n      }\n\n      resizeTimeoutRef.current = window.setTimeout(() => {\n        if (sheetDataRef.current) {\n          mountSpreadsheet();\n        }\n      }, 500);\n    };\n\n    resizeObserverRef.current = new ResizeObserver(() => {\n      updateDimensions();\n    });\n\n    resizeObserverRef.current.observe(containerRef.current);\n\n    return () => {\n      if (resizeObserverRef.current) {\n        resizeObserverRef.current.disconnect();\n      }\n      if (resizeTimeoutRef.current) {\n        clearTimeout(resizeTimeoutRef.current);\n      }\n    };\n  }, [calculateDimensions, mountSpreadsheet]);\n\n  useEffect(() => {\n    // 只有 URL 有效时才加载（避免空字符串或已 revoke 的 blob URL）\n    if (!url) return;\n\n    let isMounted = true;\n\n    const loadExcel = async () => {\n      if (!containerRef.current) return;\n\n      setLoading(true);\n      setError(null);\n\n      try {\n        const response = await fetcher(url, {\n          mode: 'cors',\n          credentials: 'omit',\n          redirect: 'follow',\n        });\n\n        if (!response.ok) {\n          if (response.status === 404) {\n            throw new Error(t('xlsx.not_found'));\n          } else if (response.status === 403) {\n            throw new Error('无权限访问此文件');\n          } else {\n            throw new Error(`文件加载失败 (${response.status})`);\n          }\n        }\n\n        const arrayBuffer = await response.arrayBuffer();\n\n        if (arrayBuffer.byteLength === 0) {\n          throw new Error('文件为空');\n        }\n\n        // 使用 exceljs 解析\n        const workbook = new ExcelJS.Workbook();\n        await workbook.xlsx.load(arrayBuffer);\n\n        // 转换为 x-data-spreadsheet 数据格式\n        const sheetData = convertWorkbookToSpreadsheetData(workbook);\n\n        if (!isMounted) return;\n\n        sheetDataRef.current = sheetData as unknown as Record<string, unknown>[];\n\n        // 挂载 x-data-spreadsheet\n        mountSpreadsheet();\n\n        setLoading(false);\n      } catch (err) {\n        if (isMounted) {\n          console.error('Excel 解析错误:', err);\n          let errorMsg = t('xlsx.parse_failed');\n          if (err instanceof Error) {\n            errorMsg = err.message;\n          }\n          setError(errorMsg);\n          setLoading(false);\n        }\n      }\n    };\n\n    const timer = setTimeout(() => {\n      requestAnimationFrame(() => {\n        loadExcel();\n      });\n    }, 100);\n\n    return () => {\n      isMounted = false;\n      clearTimeout(timer);\n      sheetDataRef.current = null;\n      if (containerRef.current) {\n        containerRef.current.innerHTML = '';\n      }\n      spreadsheetRef.current = null;\n    };\n  }, [url, mountSpreadsheet]);\n\n  // 暴露接口给父组件\n  useImperativeHandle(ref, () => ({\n    getToolbarGroups: () => [],\n  }), []);\n\n  return (\n    <div className=\"rfp-relative rfp-flex rfp-flex-col rfp-items-center rfp-w-full rfp-h-full\">\n      {/* 加载状态 */}\n      {loading && (\n        <div className=\"rfp-absolute rfp-inset-0 rfp-flex rfp-items-center rfp-justify-center rfp-bg-surface-toolbar rfp-backdrop-blur-sm rfp-z-10\">\n          <div className=\"rfp-text-center\">\n            <div className=\"rfp-w-10 rfp-h-10 md:rfp-w-12 md:rfp-h-12 rfp-mx-auto rfp-mb-3 rfp-border-4 rfp-border-line-strong rfp-border-t-spinner-head rfp-rounded-full rfp-animate-spin\" />\n            <p className=\"rfp-text-xs md:rfp-text-sm rfp-text-fg-secondary rfp-font-medium\">{t('xlsx.loading')}</p>\n          </div>\n        </div>\n      )}\n\n      {/* 错误状态 */}\n      {error && !loading && (\n        <div className=\"rfp-absolute rfp-inset-0 rfp-flex rfp-items-center rfp-justify-center rfp-bg-surface-toolbar rfp-backdrop-blur-sm rfp-z-10\">\n          <RendererError message={t('xlsx.load_failed')} detail={error} />\n        </div>\n      )}\n\n      {/* Spreadsheet 容器 */}\n      {!error && (\n        <div\n          ref={containerRef}\n          className=\"xlsx-spreadsheet-container rfp-w-full rfp-h-full\"\n          style={{ opacity: loading ? 0 : 1 }}\n        />\n      )}\n    </div>\n  );\n});\n","import { useState, useEffect, useRef, useCallback, forwardRef, useImperativeHandle } from 'react';\nimport { init } from 'pptx-preview';\nimport { useTranslator } from '../../i18n/LocaleContext';\nimport { useFetcher } from '../../RequestContext';\nimport { RendererError } from '../RendererError';\nimport type { RendererHandle } from '../base.types';\n\ninterface PptxRendererProps {\n  url: string;\n  /** 是否平铺展示所有页面，默认 true */\n  tiled?: boolean;\n}\n\nexport const PptxRenderer = forwardRef<RendererHandle, PptxRendererProps>(({ url, tiled = true }, ref) => {\n  const t = useTranslator();\n  const fetcher = useFetcher();\n  const [loading, setLoading] = useState(true);\n  const [error, setError] = useState<string | null>(null);\n  const [slideCount, setSlideCount] = useState(0);\n  const containerRef = useRef<HTMLDivElement>(null);\n  const previewerRef = useRef<ReturnType<typeof init> | null>(null);\n  const resizeObserverRef = useRef<ResizeObserver | null>(null);\n  const arrayBufferRef = useRef<ArrayBuffer | null>(null);\n  const resizeTimeoutRef = useRef<number | null>(null);\n  const lastDimensionsRef = useRef({ width: 0, height: 0 });\n\n  // 计算容器尺寸，带回退逻辑\n  const calculateDimensions = useCallback(() => {\n    if (!containerRef.current) return { width: 960, height: 540 };\n    const rawWidth = containerRef.current.clientWidth;\n    const parentWidth = containerRef.current.parentElement?.clientWidth || 0;\n    // 如果容器宽度太小，回退到父容器宽度或默认最小值\n    const containerWidth = rawWidth > 100 ? rawWidth : (parentWidth > 100 ? parentWidth : 300);\n    // 16:9 比例\n    const height = Math.floor(containerWidth * 9 / 16);\n    return { width: containerWidth, height };\n  }, []);\n\n  // 重新初始化预览器\n  const reinitializePreviewer = useCallback(async () => {\n    if (!containerRef.current || !arrayBufferRef.current || slideCount === 0) return;\n\n    try {\n      // 销毁旧的预览器\n      if (previewerRef.current) {\n        try {\n          previewerRef.current.destroy();\n        } catch {\n          // 忽略销毁错误\n        }\n      }\n\n      // 清空容器\n      containerRef.current.innerHTML = '';\n\n      // 获取当前容器尺寸\n      const currentDimensions = calculateDimensions();\n\n      // 初始化新的预览器，平铺模式下高度按页数计算\n      const previewer = init(containerRef.current, {\n        width: currentDimensions.width,\n        height: tiled ? currentDimensions.height * slideCount : currentDimensions.height,\n        mode: tiled ? 'list' : 'slide',\n      });\n      previewerRef.current = previewer;\n\n      // 重新预览\n      await previewer.preview(arrayBufferRef.current);\n    } catch {\n      // 重新初始化失败，静默处理\n    }\n  }, [calculateDimensions, tiled, slideCount]);\n\n  // 监听容器尺寸变化\n  useEffect(() => {\n    if (!containerRef.current) return;\n\n    let isInitialRender = true;\n\n    const updateDimensions = () => {\n      // 跳过初始渲染时的尺寸检查\n      if (isInitialRender) {\n        isInitialRender = false;\n        lastDimensionsRef.current = calculateDimensions();\n        return;\n      }\n\n      const newDimensions = calculateDimensions();\n\n      // 检查尺寸是否真正变化（至少变化10px才触发）\n      const lastDimensions = lastDimensionsRef.current;\n      const widthDiff = Math.abs(lastDimensions.width - newDimensions.width);\n      const heightDiff = Math.abs(lastDimensions.height - newDimensions.height);\n\n      if (widthDiff < 10 && heightDiff < 10) {\n        return;\n      }\n\n      // 更新最后的尺寸\n      lastDimensionsRef.current = newDimensions;\n\n      // 清除之前的定时器\n      if (resizeTimeoutRef.current) {\n        clearTimeout(resizeTimeoutRef.current);\n      }\n\n      // 防抖：800ms 后重新初始化预览器\n      resizeTimeoutRef.current = window.setTimeout(() => {\n        if (previewerRef.current && arrayBufferRef.current) {\n          reinitializePreviewer();\n        }\n      }, 800);\n    };\n\n    // 创建 ResizeObserver\n    resizeObserverRef.current = new ResizeObserver(() => {\n      updateDimensions();\n    });\n\n    // 开始观察容器\n    resizeObserverRef.current.observe(containerRef.current);\n\n    return () => {\n      if (resizeObserverRef.current) {\n        resizeObserverRef.current.disconnect();\n      }\n      if (resizeTimeoutRef.current) {\n        clearTimeout(resizeTimeoutRef.current);\n      }\n    };\n  }, [calculateDimensions, reinitializePreviewer]);\n\n  useEffect(() => {\n    // 只有 URL 有效时才加载（避免空字符串或已 revoke 的 blob URL）\n    if (!url) return;\n\n    let isMounted = true;\n    let timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n    const loadPptx = async () => {\n      if (!containerRef.current) return;\n\n      setLoading(true);\n      setError(null);\n\n      // 设置30秒超时\n      timeoutId = setTimeout(() => {\n        if (isMounted) {\n          setError(t('pptx.timeout'));\n          setLoading(false);\n        }\n      }, 30000);\n\n      try {\n        // 获取文件，处理 CORS 和重定向\n        const response = await fetcher(url, {\n          mode: 'cors',\n          credentials: 'omit',\n          redirect: 'follow',\n        });\n\n        if (!response.ok) {\n          if (response.status === 404) {\n            throw new Error(t('pptx.not_found'));\n          } else if (response.status === 403) {\n            throw new Error('无权限访问此文件');\n          } else if (response.status >= 500) {\n            throw new Error('服务器错误，请稍后重试');\n          } else {\n            throw new Error(`文件加载失败 (${response.status})`);\n          }\n        }\n\n        const arrayBuffer = await response.arrayBuffer();\n\n        // 验证文件大小\n        if (arrayBuffer.byteLength === 0) {\n          throw new Error('文件为空');\n        }\n\n        arrayBufferRef.current = arrayBuffer;\n\n        if (!isMounted) return;\n\n        // 步骤 1: 创建隐藏容器，预处理获取 slideCount\n        const hiddenContainer = document.createElement('div');\n        hiddenContainer.style.cssText = 'position:absolute;left:-9999px;top:-9999px;visibility:hidden';\n        document.body.appendChild(hiddenContainer);\n\n        try {\n          // 在隐藏容器中初始化临时预览器获取页数\n          const tempPreviewer = init(hiddenContainer, {\n            width: 100,\n            height: 100,\n            mode: 'slide',\n          });\n\n          try {\n            await tempPreviewer.preview(arrayBuffer);\n          } catch {\n            throw new Error(t('pptx.invalid_format'));\n          }\n\n          const count = tempPreviewer.slideCount;\n\n          if (!count || count === 0) {\n            throw new Error(t('pptx.no_pages'));\n          }\n\n          // 销毁临时预览器\n          tempPreviewer.destroy();\n\n          if (!isMounted) return;\n\n          // 保存 slideCount\n          setSlideCount(count);\n\n          // 步骤 2: 清空真实容器并初始化\n          if (containerRef.current) {\n            containerRef.current.innerHTML = '';\n          }\n\n          const currentDimensions = calculateDimensions();\n\n          // 步骤 3: 初始化真实预览器，平铺模式下使用正确的总高度\n          const previewer = init(containerRef.current, {\n            width: currentDimensions.width,\n            height: tiled ? currentDimensions.height * count : currentDimensions.height,\n            mode: tiled ? 'list' : 'slide',\n          });\n          previewerRef.current = previewer;\n\n          // 步骤 4: 预览 PPTX\n          await previewer.preview(arrayBuffer);\n\n          // 清除超时定时器\n          if (timeoutId) {\n            clearTimeout(timeoutId);\n            timeoutId = null;\n          }\n\n          if (isMounted) {\n            setLoading(false);\n          }\n        } finally {\n          // 移除隐藏容器\n          if (document.body.contains(hiddenContainer)) {\n            document.body.removeChild(hiddenContainer);\n          }\n        }\n      } catch (err) {\n        // 清除超时定时器\n        if (timeoutId) {\n          clearTimeout(timeoutId);\n          timeoutId = null;\n        }\n\n        if (isMounted) {\n          let errorMsg = t('pptx.parse_failed');\n          if (err instanceof Error) {\n            errorMsg = err.message;\n          } else if (typeof err === 'string') {\n            errorMsg = err;\n          }\n          setError(errorMsg);\n          setLoading(false);\n        }\n      }\n    };\n\n    // 延迟执行，使用 requestAnimationFrame 确保 DOM 已准备好\n    const timer = setTimeout(() => {\n      requestAnimationFrame(() => {\n        requestAnimationFrame(() => {\n          loadPptx();\n        });\n      });\n    }, 150);\n\n    // 清理函数\n    return () => {\n      isMounted = false;\n      clearTimeout(timer);\n      if (timeoutId) {\n        clearTimeout(timeoutId);\n      }\n      arrayBufferRef.current = null;\n      setSlideCount(0);\n      if (previewerRef.current) {\n        try {\n          previewerRef.current.destroy();\n        } catch {\n          // 忽略销毁错误\n        }\n      }\n      previewerRef.current = null;\n    };\n  }, [url, calculateDimensions, tiled]);\n\n  // 暴露接口给父组件\n  useImperativeHandle(ref, () => ({\n    getToolbarGroups: () => [],\n  }), []);\n\n  return (\n    <div className=\"rfp-relative rfp-flex rfp-flex-col rfp-items-center rfp-w-full rfp-h-full\">\n      {/* 加载状态 - 绝对定位覆盖 */}\n      {loading && (\n        <div className=\"rfp-absolute rfp-inset-0 rfp-flex rfp-items-center rfp-justify-center rfp-bg-surface-toolbar rfp-backdrop-blur-sm rfp-z-10\">\n          <div className=\"rfp-text-center\">\n            <div className=\"rfp-w-10 rfp-h-10 md:rfp-w-12 md:rfp-h-12 rfp-mx-auto rfp-mb-3 rfp-border-4 rfp-border-line-strong rfp-border-t-spinner-head rfp-rounded-full rfp-animate-spin\" />\n            <p className=\"rfp-text-xs md:rfp-text-sm rfp-text-fg-secondary rfp-font-medium\">{t('pptx.loading')}</p>\n          </div>\n        </div>\n      )}\n\n      {/* 错误状态 - 绝对定位覆盖 */}\n      {error && !loading && (\n        <RendererError message={t('pptx.load_failed')} detail={error} />\n      )}\n\n      {/* PPT 容器 - 仅在非错误状态下渲染 */}\n      {!error && (\n        <div\n          ref={containerRef}\n          className=\"pptx-wrapper rfp-w-full rfp-max-w-full md:rfp-max-w-6xl\"\n          style={{ opacity: loading ? 0 : 1 }}\n        />\n      )}\n    </div>\n  );\n});\n","import { useState, useEffect, forwardRef, useImperativeHandle } from 'react';\nimport MsgReader from '@kenjiuno/msgreader';\nimport type { FieldsData } from '@kenjiuno/msgreader';\nimport { User, Users, Paperclip, Calendar, Mail, Tag, Clock, Hash } from 'lucide-react';\nimport { useTranslator } from '../../i18n/LocaleContext';\nimport { useFetcher } from '../../RequestContext';\nimport { RendererError } from '../RendererError';\nimport type { RendererHandle } from '../base.types';\n\ninterface MsgRendererProps {\n  url: string;\n}\n\nfunction formatRecipients(recipients: FieldsData[] | undefined, type: 'to' | 'cc' | 'bcc'): string {\n  if (!recipients) return '';\n  return recipients\n    .filter((r) => r.recipType === type)\n    .map((r) => {\n      const name = r.name || '';\n      const email = r.smtpAddress || r.email || '';\n      if (name && email && name !== email) {\n        return `${name} <${email}>`;\n      }\n      return name || email;\n    })\n    .filter(Boolean)\n    .join('; ');\n}\n\nfunction formatDate(dateStr: string | undefined): string {\n  if (!dateStr) return '';\n  try {\n    const date = new Date(dateStr);\n    if (isNaN(date.getTime())) return dateStr;\n    return date.toLocaleString();\n  } catch {\n    return dateStr;\n  }\n}\n\nfunction decodeHtmlBody(fields: FieldsData, emptyBodyText: string): string {\n  // 优先使用 bodyHtml (string 类型)\n  if (fields.bodyHtml) {\n    return fields.bodyHtml;\n  }\n  // 其次尝试 html (Uint8Array 类型)\n  if (fields.html) {\n    try {\n      const decoder = new TextDecoder('utf-8');\n      return decoder.decode(fields.html);\n    } catch {\n      // fallback\n    }\n  }\n  // 最后使用纯文本，转换为简单 HTML\n  if (fields.body) {\n    return `<pre style=\"white-space: pre-wrap; word-wrap: break-word; font-family: system-ui, sans-serif;\">${fields.body.replace(/&/g, '&amp;').replace(/\\x3c/g, '&lt;').replace(/>/g, '&gt;')\n      }</pre>`;\n  }\n  return `<p style=\"color: #999;\">${emptyBodyText}</p>`;\n}\n\nfunction formatMessageClass(messageClass: string | undefined): string {\n  if (!messageClass) return '';\n  const classMap: Record<string, string> = {\n    'IPM.Note': 'Email',\n    'IPM.Note.SMIME': 'Encrypted Email',\n    'IPM.Note.SMIME.MultipartSigned': 'Signed Email',\n    'IPM.Appointment': 'Appointment',\n    'IPM.Schedule.Meeting.Request': 'Meeting Request',\n    'IPM.Schedule.Meeting.Canceled': 'Meeting Cancellation',\n    'IPM.Contact': 'Contact',\n    'IPM.Task': 'Task',\n    'IPM.StickyNote': 'Sticky Note',\n  };\n  return classMap[messageClass] || messageClass;\n}\n\nconst labelStyle: React.CSSProperties = {\n  flexShrink: 0,\n  color: '#6b7280',\n  fontWeight: 500,\n  marginRight: '8px',\n  whiteSpace: 'nowrap',\n};\n\nconst rowStyle: React.CSSProperties = {\n  display: 'flex',\n  alignItems: 'flex-start',\n  gap: '8px',\n  padding: '6px 0',\n};\n\nconst iconWrapStyle: React.CSSProperties = {\n  flexShrink: 0,\n  display: 'flex',\n  alignItems: 'center',\n  height: '1.4em',\n};\n\nconst iconStyle: React.CSSProperties = {\n  flexShrink: 0,\n  color: '#9ca3af',\n};\n\nconst valueStyle: React.CSSProperties = {\n  color: '#111827',\n  wordBreak: 'break-word' as const,\n  flex: 1,\n};\n\nexport const MsgRenderer = forwardRef<RendererHandle, MsgRendererProps>(({ url }, ref) => {\n  const t = useTranslator();\n  const fetcher = useFetcher();\n  const [loading, setLoading] = useState(true);\n  const [error, setError] = useState<string | null>(null);\n  const [fields, setFields] = useState<FieldsData | null>(null);\n\n  useEffect(() => {\n    // 只有 URL 有效时才加载（避免空字符串或已 revoke 的 blob URL）\n    if (!url) return;\n\n    const loadMsg = async () => {\n      setLoading(true);\n      setError(null);\n      setFields(null);\n\n      try {\n        const response = await fetcher(url);\n        if (!response.ok) {\n          throw new Error('文件加载失败');\n        }\n\n        const arrayBuffer = await response.arrayBuffer();\n        const msgReader = new MsgReader(arrayBuffer);\n        const fileData = msgReader.getFileData();\n        setFields(fileData);\n      } catch (err) {\n        console.error('MSG 解析错误:', err);\n        setError(t('msg.parse_failed'));\n      } finally {\n        setLoading(false);\n      }\n    };\n\n    loadMsg();\n  }, [url]);\n\n  // 暴露接口给父组件（必须在 early return 之前调用）\n  useImperativeHandle(ref, () => ({\n    getToolbarGroups: () => [],\n  }), []);\n\n  if (loading) {\n    return (\n      <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full\">\n        <div className=\"rfp-w-12 rfp-h-12 rfp-border-4 rfp-border-line-strong rfp-border-t-spinner-head rfp-rounded-full rfp-animate-spin\" />\n      </div>\n    );\n  }\n\n  if (error || !fields) {\n    return <RendererError message={error || t('msg.parse_failed_short')} />;\n  }\n\n  const toStr = formatRecipients(fields.recipients, 'to');\n  const ccStr = formatRecipients(fields.recipients, 'cc');\n  const bccStr = formatRecipients(fields.recipients, 'bcc');\n  const senderName = fields.senderName || '';\n  const senderEmail = fields.senderSmtpAddress || fields.senderEmail || '';\n  const sender = senderName && senderEmail && senderName !== senderEmail\n    ? `${senderName} <${senderEmail}>`\n    : senderName || senderEmail;\n  const sentDate = formatDate(fields.clientSubmitTime);\n  const receivedDate = formatDate(fields.messageDeliveryTime);\n  const createdDate = formatDate(fields.creationTime);\n  const lastModified = formatDate(fields.lastModificationTime);\n  const subject = fields.subject || '（无主题）';\n  const attachments = (fields.attachments || []).filter((a) => !a.attachmentHidden);\n  const bodyHtml = decodeHtmlBody(fields, t('msg.empty_body'));\n  const messageClass = formatMessageClass(fields.messageClass);\n  const messageId = fields.messageId || '';\n  const fieldsAny = fields as FieldsData & Record<string, unknown>;\n  const importance = typeof fieldsAny.importance === 'number' ? fieldsAny.importance : undefined;\n  const importanceLabel = importance === 2 ? 'High' : importance === 0 ? 'Low' : '';\n  const sensitivity = typeof fieldsAny.sensitivity === 'number' ? fieldsAny.sensitivity : undefined;\n  const sensitivityLabels: Record<number, string> = {\n    0: 'Normal',\n    1: 'Personal',\n    2: 'Private',\n    3: 'Confidential',\n  };\n  const sensitivityLabel = sensitivity !== undefined && sensitivity !== 0 ? sensitivityLabels[sensitivity] || '' : '';\n\n  return (\n    <div\n      className=\"rfp-w-full rfp-h-full rfp-overflow-auto\"\n      style={{ background: 'white' }}\n    >\n      <div\n        style={{\n          width: '100%',\n          background: 'white',\n          minHeight: '100%',\n        }}\n      >\n        {/* 邮件头部 */}\n        <div style={{ borderBottom: '1px solid #e5e7eb', padding: 'clamp(12px, 3vw, 24px) clamp(16px, 3vw, 28px)', background: '#f9fafb' }}>\n          {/* 主题 */}\n          <h2 style={{ margin: '0 0 16px 0', fontSize: 'clamp(16px, 2.5vw, 20px)', fontWeight: 600, color: '#111827', lineHeight: 1.4 }}>\n            {subject}\n          </h2>\n\n          {/* 元信息 */}\n          <div style={{ display: 'flex', flexDirection: 'column', fontSize: 'clamp(12px, 1.8vw, 14px)', color: '#4b5563' }}>\n            {sender && (\n              <div style={rowStyle}>\n                <span style={iconWrapStyle}><User size={16} style={iconStyle} /></span>\n                <div style={{ display: 'flex', flex: 1 }}>\n                  <span style={labelStyle}>From</span>\n                  <span style={valueStyle}>{sender}</span>\n                </div>\n              </div>\n            )}\n\n            {toStr && (\n              <div style={rowStyle}>\n                <span style={iconWrapStyle}><Users size={16} style={iconStyle} /></span>\n                <div style={{ display: 'flex', flex: 1 }}>\n                  <span style={labelStyle}>To</span>\n                  <span style={valueStyle}>{toStr}</span>\n                </div>\n              </div>\n            )}\n\n            {ccStr && (\n              <div style={rowStyle}>\n                <span style={iconWrapStyle}><Users size={16} style={iconStyle} /></span>\n                <div style={{ display: 'flex', flex: 1 }}>\n                  <span style={labelStyle}>Cc</span>\n                  <span style={valueStyle}>{ccStr}</span>\n                </div>\n              </div>\n            )}\n\n            {bccStr && (\n              <div style={rowStyle}>\n                <span style={iconWrapStyle}><Users size={16} style={iconStyle} /></span>\n                <div style={{ display: 'flex', flex: 1 }}>\n                  <span style={labelStyle}>Bcc</span>\n                  <span style={valueStyle}>{bccStr}</span>\n                </div>\n              </div>\n            )}\n\n            {sentDate && (\n              <div style={rowStyle}>\n                <span style={iconWrapStyle}><Calendar size={16} style={iconStyle} /></span>\n                <div style={{ display: 'flex', flex: 1 }}>\n                  <span style={labelStyle}>Sent</span>\n                  <span style={valueStyle}>{sentDate}</span>\n                </div>\n              </div>\n            )}\n\n            {receivedDate && receivedDate !== sentDate && (\n              <div style={rowStyle}>\n                <span style={iconWrapStyle}><Clock size={16} style={iconStyle} /></span>\n                <div style={{ display: 'flex', flex: 1 }}>\n                  <span style={labelStyle}>Received</span>\n                  <span style={valueStyle}>{receivedDate}</span>\n                </div>\n              </div>\n            )}\n\n            {!sentDate && !receivedDate && createdDate && (\n              <div style={rowStyle}>\n                <span style={iconWrapStyle}><Calendar size={16} style={iconStyle} /></span>\n                <div style={{ display: 'flex', flex: 1 }}>\n                  <span style={labelStyle}>Date</span>\n                  <span style={valueStyle}>{createdDate}</span>\n                </div>\n              </div>\n            )}\n\n            {importanceLabel && (\n              <div style={rowStyle}>\n                <span style={iconWrapStyle}><Tag size={16} style={iconStyle} /></span>\n                <div style={{ display: 'flex', flex: 1 }}>\n                  <span style={labelStyle}>Importance</span>\n                  <span style={{\n                    ...valueStyle,\n                    color: importance === 2 ? '#dc2626' : '#2563eb',\n                    fontWeight: 500,\n                  }}>\n                    {importanceLabel}\n                  </span>\n                </div>\n              </div>\n            )}\n\n            {sensitivityLabel && (\n              <div style={rowStyle}>\n                <span style={iconWrapStyle}><Tag size={16} style={iconStyle} /></span>\n                <div style={{ display: 'flex', flex: 1 }}>\n                  <span style={labelStyle}>Sensitivity</span>\n                  <span style={valueStyle}>{sensitivityLabel}</span>\n                </div>\n              </div>\n            )}\n\n            {messageClass && messageClass !== 'Email' && (\n              <div style={rowStyle}>\n                <span style={iconWrapStyle}><Mail size={16} style={iconStyle} /></span>\n                <div style={{ display: 'flex', flex: 1 }}>\n                  <span style={labelStyle}>Type</span>\n                  <span style={valueStyle}>{messageClass}</span>\n                </div>\n              </div>\n            )}\n\n            {attachments.length > 0 && (\n              <div style={{ ...rowStyle, borderTop: '1px solid #e5e7eb', marginTop: '4px', paddingTop: '10px' }}>\n                <span style={iconWrapStyle}><Paperclip size={16} style={iconStyle} /></span>\n                <div style={{ display: 'flex', flex: 1 }}>\n                  <span style={labelStyle}>Attachments</span>\n                  <div style={{ ...valueStyle, display: 'flex', flexWrap: 'wrap', gap: '6px' }}>\n                    {attachments.map((a, i) => {\n                      const name = a.fileName || a.name || '未知文件';\n                      const size = a.contentLength;\n                      const sizeStr = size\n                        ? size > 1048576\n                          ? `${(size / 1048576).toFixed(1)} MB`\n                          : size > 1024\n                            ? `${(size / 1024).toFixed(0)} KB`\n                            : `${size} B`\n                        : '';\n                      return (\n                        <span\n                          key={i}\n                          style={{\n                            display: 'inline-flex',\n                            alignItems: 'center',\n                            gap: '4px',\n                            padding: '2px 8px',\n                            background: '#f3f4f6',\n                            borderRadius: '4px',\n                            fontSize: '13px',\n                            color: '#374151',\n                            border: '1px solid #e5e7eb',\n                          }}\n                        >\n                          {name}\n                          {sizeStr && (\n                            <span style={{ color: '#9ca3af', fontSize: '12px' }}>({sizeStr})</span>\n                          )}\n                        </span>\n                      );\n                    })}\n                  </div>\n                </div>\n              </div>\n            )}\n\n            {messageId && (\n              <div style={{ ...rowStyle, borderTop: attachments.length > 0 ? 'none' : '1px solid #e5e7eb', marginTop: '4px', paddingTop: '10px' }}>\n                <span style={iconWrapStyle}><Hash size={16} style={iconStyle} /></span>\n                <div style={{ display: 'flex', flex: 1 }}>\n                  <span style={labelStyle}>Message-ID</span>\n                  <span style={{ ...valueStyle, fontSize: '12px', color: '#9ca3af', fontFamily: 'monospace' }}>{messageId}</span>\n                </div>\n              </div>\n            )}\n\n            {lastModified && lastModified !== sentDate && lastModified !== receivedDate && (\n              <div style={rowStyle}>\n                <span style={iconWrapStyle}><Clock size={16} style={iconStyle} /></span>\n                <div style={{ display: 'flex', flex: 1 }}>\n                  <span style={labelStyle}>Modified</span>\n                  <span style={{ ...valueStyle, fontSize: '12px', color: '#9ca3af' }}>{lastModified}</span>\n                </div>\n              </div>\n            )}\n          </div>\n        </div>\n\n        {/* 邮件正文 */}\n        <div\n          style={{\n            padding: 'clamp(12px, 3vw, 24px) clamp(16px, 3vw, 28px)',\n            fontFamily: 'system-ui, -apple-system, sans-serif',\n            lineHeight: '1.6',\n            color: '#333',\n            overflowX: 'auto',\n          }}\n          dangerouslySetInnerHTML={{ __html: bodyHtml }}\n        />\n      </div>\n    </div>\n  );\n});\n","import { useEffect, useRef, useState, useCallback, useImperativeHandle, forwardRef } from 'react';\nimport ePub from '@likecoin/epub-ts';\nimport { X, ChevronLeft, ChevronRight, Maximize2, Minimize2, List } from 'lucide-react';\nimport { useTranslator } from '../../i18n/LocaleContext';\nimport { useFetcher } from '../../RequestContext';\nimport { RendererError } from '../RendererError';\nimport type { RendererHandle } from '../base.types';\nimport type { ToolbarGroup } from '../toolbar.types';\n\n// 全局注入 epubjs 容器样式（只注入一次）\nif (typeof document !== 'undefined' && !document.getElementById('rfp-epub-styles')) {\n  const styleEl = document.createElement('style');\n  styleEl.id = 'rfp-epub-styles';\n  styleEl.textContent = `\n    .epub-container { overflow-y: auto !important; scrollbar-width: thin; }\n    .epub-container::-webkit-scrollbar { width: 8px; }\n    .epub-container::-webkit-scrollbar-track { background: transparent; }\n    .epub-container::-webkit-scrollbar-thumb { background: rgba(0,0,0,0.15); border-radius: 4px; }\n    .epub-container::-webkit-scrollbar-thumb:hover { background: rgba(0,0,0,0.3); }\n    .epub-view > iframe { background: white; }\n  `;\n  document.head.appendChild(styleEl);\n}\n\nexport interface TocItem {\n  label: string;\n  href: string;\n  subitems?: TocItem[];\n}\n\nexport interface EpubRendererHandle extends RendererHandle {\n  prevPage: () => void;\n  nextPage: () => void;\n  toggleFullWidth: () => void;\n  toggleToc: () => void;\n}\n\ninterface EpubRendererProps {\n  url: string;\n}\n\ninterface RenditionLike {\n  display: (target?: string) => Promise<unknown>;\n  next: () => Promise<unknown>;\n  prev: () => Promise<unknown>;\n  on: (event: string, cb: (...args: unknown[]) => void) => void;\n  resize: (width: number, height: number) => void;\n  currentLocation: () => unknown;\n  destroy?: () => void;\n  themes: {\n    register: (name: string, styles: Record<string, unknown>) => void;\n    select: (name: string) => void;\n  };\n}\n\ninterface BookLike {\n  ready: Promise<unknown>;\n  loaded: { navigation: Promise<unknown> };\n  locations: {\n    generate: (chars: number) => Promise<string[]>;\n    length: () => number;\n    locationFromCfi: (cfi: string) => number;\n  };\n  renderTo: (el: HTMLElement, opts: Record<string, unknown>) => RenditionLike;\n  destroy: () => void;\n}\n\nconst A4_WIDTH = 794;\n\nexport const EpubRenderer = forwardRef<EpubRendererHandle, EpubRendererProps>(\n  ({ url }, ref) => {\n    const t = useTranslator();\n    const fetcher = useFetcher();\n    const viewerRef = useRef<HTMLDivElement>(null);\n    const bookRef = useRef<BookLike | null>(null);\n    const renditionRef = useRef<RenditionLike | null>(null);\n\n    const totalLocationsRef = useRef(0);\n    const lastCfiRef = useRef<string | null>(null);\n    const isFullWidthRef = useRef(false);\n\n    // 内部状态管理\n    const [loading, setLoading] = useState(true);\n    const [error, setError] = useState<string | null>(null);\n    const [isFullWidth, setIsFullWidth] = useState(false);\n    const [toc, setToc] = useState<TocItem[]>([]);\n    const [showToc, setShowToc] = useState(false);\n    const [activeTocHref, setActiveTocHref] = useState<string>('');\n    const [currentChapter, setCurrentChapter] = useState(0);\n    const [totalChapters, setTotalChapters] = useState(0);\n    const tocRef = useRef<TocItem[]>([]);\n    tocRef.current = toc;\n\n    isFullWidthRef.current = isFullWidth;\n\n    // 事件发射器：用于通知主组件工具栏状态变化\n    const listenersRef = useRef<Set<() => void>>(new Set());\n    const notifyToolbarChange = useCallback(() => {\n      listenersRef.current.forEach(listener => listener());\n    }, []);\n\n    // 监听影响工具栏的状态变化\n    useEffect(() => {\n      notifyToolbarChange();\n    }, [currentChapter, notifyToolbarChange]);\n\n    useEffect(() => {\n      notifyToolbarChange();\n    }, [totalChapters, notifyToolbarChange]);\n\n    useEffect(() => {\n      notifyToolbarChange();\n    }, [isFullWidth, notifyToolbarChange]);\n\n    useEffect(() => {\n      notifyToolbarChange();\n    }, [toc.length, notifyToolbarChange]);\n\n    const handlePrev = useCallback(() => {\n      renditionRef.current?.prev();\n    }, []);\n\n    const handleNext = useCallback(() => {\n      renditionRef.current?.next();\n    }, []);\n\n    // 滚动监听：接近底部时强制触发 check 加载后续 section\n    const scrollContainerRef = useRef<Element | null>(null);\n    const scrollRafRef = useRef(0);\n\n    const onScrollRef = useRef((_e?: Event) => {\n      const container = scrollContainerRef.current;\n      if (!container) return;\n      const el = container as HTMLElement;\n      const nearBottom = el.scrollTop + el.clientHeight >= el.scrollHeight - 200;\n      if (nearBottom) {\n        try {\n          const mgr = (renditionRef.current as unknown as { manager?: { check?: (t?: number, e?: number) => Promise<unknown> } })?.manager;\n          mgr?.check?.(500, 500);\n        } catch { /* ignore */ }\n      }\n    });\n\n    const reattachScrollListener = useCallback(() => {\n      // 清理旧监听\n      if (scrollContainerRef.current) {\n        scrollContainerRef.current.removeEventListener('scroll', onScrollRef.current);\n        scrollContainerRef.current = null;\n      }\n      cancelAnimationFrame(scrollRafRef.current);\n\n      const tryAttach = () => {\n        const container = viewerRef.current?.querySelector('.epub-container') ?? null;\n        if (!container) {\n          scrollRafRef.current = requestAnimationFrame(tryAttach);\n          return;\n        }\n        scrollContainerRef.current = container;\n        container.addEventListener('scroll', onScrollRef.current, { passive: true });\n      };\n      scrollRafRef.current = requestAnimationFrame(tryAttach);\n    }, []);\n\n    const toggleFullWidth = useCallback(() => {\n      const newVal = !isFullWidthRef.current;\n      setIsFullWidth(newVal);\n      // 等 CSS transition 完成后再 resize 并恢复位置\n      setTimeout(() => {\n        const viewer = viewerRef.current;\n        const rendition = renditionRef.current;\n        if (!viewer || !rendition) return;\n        rendition.resize(viewer.offsetWidth, viewer.offsetHeight);\n        // 重排后恢复阅读位置\n        if (lastCfiRef.current) {\n          rendition.display(lastCfiRef.current);\n        }\n        // resize/display 可能重建 .epub-container，需要重新绑定滚动监听\n        reattachScrollListener();\n      }, 350);\n    }, [reattachScrollListener]);\n\n    const toggleToc = useCallback(() => {\n      setShowToc(prev => !prev);\n    }, []);\n\n    const handleTocClick = useCallback((href: string) => {\n      setActiveTocHref(href);\n      renditionRef.current?.display(href);\n      setShowToc(false);\n    }, []);\n\n    // 工具栏配置\n    const getToolbarGroups = useCallback((): ToolbarGroup[] => [\n      {\n        items: [\n          { type: 'button', icon: <List className=\"rfp-w-4 rfp-h-4\" />, tooltip: t('toolbar.toc'), action: toggleToc, disabled: toc.length === 0, active: showToc },\n        ],\n      },\n      {\n        items: [\n          { type: 'button', icon: <ChevronLeft className=\"rfp-w-4 rfp-h-4\" />, tooltip: t('toolbar.prev_page'), action: handlePrev, disabled: currentChapter <= 1 },\n          { type: 'text', content: `${currentChapter} / ${totalChapters}`, minWidth: '4rem' },\n          { type: 'button', icon: <ChevronRight className=\"rfp-w-4 rfp-h-4\" />, tooltip: t('toolbar.next_page'), action: handleNext, disabled: currentChapter >= totalChapters },\n        ],\n      },\n      {\n        items: [\n          { type: 'button', icon: isFullWidth ? <Minimize2 className=\"rfp-w-4 rfp-h-4\" /> : <Maximize2 className=\"rfp-w-4 rfp-h-4\" />, tooltip: isFullWidth ? t('toolbar.normal_width') : t('toolbar.full_width'), action: toggleFullWidth, active: isFullWidth },\n        ],\n      },\n    ], [currentChapter, totalChapters, isFullWidth, showToc, toc.length, t, handlePrev, handleNext, toggleToc, toggleFullWidth]);\n\n    useImperativeHandle(ref, () => ({\n      getToolbarGroups,\n      onToolbarChange: (listener: () => void) => {\n        listenersRef.current.add(listener);\n        return () => listenersRef.current.delete(listener);\n      },\n      prevPage: handlePrev,\n      nextPage: handleNext,\n      toggleFullWidth,\n      toggleToc,\n    }), [getToolbarGroups, handlePrev, handleNext, toggleFullWidth, toggleToc]);\n\n    useEffect(() => {\n      const viewer = viewerRef.current;\n      // 只有 URL 有效时才加载（避免空字符串或已 revoke 的 blob URL）\n      if (!viewer || !url) return;\n\n      setLoading(true);\n      setError(null);\n      setToc([]);\n      setShowToc(false);\n      viewer.innerHTML = '';\n      lastCfiRef.current = null;\n      totalLocationsRef.current = 0;\n\n      let cancelled = false;\n      // StrictMode 下 effect 会立即 mount→unmount→mount\n      // 用 microtask 延迟初始化，让第一次的 cleanup 先执行，避免 epubjs 内部状态被污染\n      const loadTimer = window.setTimeout(() => {\n        if (cancelled) return;\n        load();\n      }, 0);\n\n      const load = async () => {\n        try {\n          let bookInput: string | ArrayBuffer = url;\n          if (url.startsWith('blob:')) {\n            const resp = await fetcher(url);\n            bookInput = await resp.arrayBuffer();\n          }\n\n          const book = ePub(bookInput) as unknown as BookLike;\n          bookRef.current = book;\n\n          const rendition = book.renderTo(viewer, {\n            manager: 'continuous',\n            flow: 'scrolled',\n            width: '100%',\n            height: '100%',\n          });\n          renditionRef.current = rendition;\n\n          rendition.themes.register('default', {\n            body: {\n              background: '#ffffff !important',\n              color: '#1a1a1a !important',\n              'font-family': '\"Noto Serif SC\", \"Source Han Serif SC\", Georgia, \"Times New Roman\", serif !important',\n              'font-size': '16px !important',\n              'line-height': '2 !important',\n              padding: '40px 60px !important',\n              'max-width': '100% !important',\n              'box-sizing': 'border-box !important',\n              'word-break': 'break-word !important',\n              'overflow-wrap': 'break-word !important',\n            },\n            p: { 'text-indent': '2em !important', margin: '0.8em 0 !important' },\n            h1: { 'text-align': 'center !important', margin: '1.5em 0 1em !important' },\n            h2: { margin: '1.2em 0 0.8em !important' },\n            h3: { margin: '1em 0 0.6em !important' },\n            img: { 'max-width': '100% !important', height: 'auto !important' },\n            a: { color: '#2563eb !important', 'text-decoration': 'none !important' },\n          });\n          rendition.themes.select('default');\n\n          await book.ready;\n\n          // 异步生成 locations 索引（用于实时页数）\n          book.locations.generate(1024).then(() => {\n            if (cancelled) return;\n            totalLocationsRef.current = book.locations.length();\n            // 更新内部状态\n            const loc = renditionRef.current?.currentLocation() as { start?: { location?: number; cfi?: string } } | undefined;\n            const cur = loc?.start?.location ?? 0;\n            setCurrentChapter(cur + 1);\n            setTotalChapters(totalLocationsRef.current);\n          }).catch(() => { /* ignore */ });\n\n          // 获取目录\n          const nav = await book.loaded.navigation as { toc?: TocItem[] };\n          if (!cancelled && Array.isArray(nav?.toc)) {\n            setToc(nav.toc);\n          }\n\n          await rendition.display();\n\n          if (cancelled) return;\n          setCurrentChapter(1);\n          setTotalChapters(totalLocationsRef.current || 1);\n\n          setLoading(false);\n\n          rendition.on('relocated', (location: unknown) => {\n            const loc = location as { start?: { cfi?: string; location?: number; href?: string } };\n            if (loc?.start?.cfi) {\n              lastCfiRef.current = loc.start.cfi;\n            }\n            if (loc?.start?.href) {\n              // 根据 spine href 查找匹配的 TOC 项\n              const spineHref = loc.start.href;\n              const matches: string[] = [];\n              const collect = (items: TocItem[]) => {\n                for (const item of items) {\n                  const base = item.href.split('#')[0];\n                  if (base && (spineHref === base || spineHref.endsWith('/' + base) || spineHref.endsWith(base))) {\n                    matches.push(item.href);\n                  }\n                  if (item.subitems) collect(item.subitems);\n                }\n              };\n              collect(tocRef.current);\n              if (matches.length === 1) {\n                // 唯一匹配，直接设置\n                setActiveTocHref(matches[0]);\n              }\n              // 多个匹配（同一文件不同 anchor）时保持当前选中（由点击设置）\n            }\n            const cur = loc?.start?.location;\n            const total = totalLocationsRef.current;\n            if (typeof cur === 'number' && total > 0) {\n              setCurrentChapter(cur + 1);\n              setTotalChapters(total);\n            }\n          });\n\n        } catch (err) {\n          console.error('EPUB 加载错误:', err);\n          if (!cancelled) {\n            setError(t('epub.load_failed'));\n            setLoading(false);\n          }\n        }\n      };\n\n      return () => {\n        cancelled = true;\n        window.clearTimeout(loadTimer);\n        try { renditionRef.current?.destroy?.(); } catch { /* ignore */ }\n        try { bookRef.current?.destroy(); } catch { /* ignore */ }\n        renditionRef.current = null;\n        bookRef.current = null;\n      };\n    }, [url]);\n\n    // 监听容器尺寸变化：等待 transition 完成后才 resize，避免 transition 期间频繁触发导致频闪\n    useEffect(() => {\n      const viewer = viewerRef.current;\n      if (!viewer) return;\n\n      let isInitialRender = true;\n      let lastDimensions = { width: 0, height: 0 };\n      let resizeTimeout: number | null = null;\n\n      const doResize = () => {\n        const v = viewerRef.current;\n        const rendition = renditionRef.current;\n        if (!v || !rendition) return;\n        rendition.resize(v.offsetWidth, v.offsetHeight);\n        // resize 后恢复阅读位置\n        if (lastCfiRef.current) {\n          try { rendition.display(lastCfiRef.current); } catch { /* ignore */ }\n        }\n        // resize/display 可能重建 .epub-container，需要重新绑定滚动监听\n        reattachScrollListener();\n      };\n\n      const observer = new ResizeObserver(() => {\n        const v = viewerRef.current;\n        if (!v) return;\n\n        if (isInitialRender) {\n          isInitialRender = false;\n          lastDimensions = { width: v.offsetWidth, height: v.offsetHeight };\n          return;\n        }\n\n        const newDimensions = { width: v.offsetWidth, height: v.offsetHeight };\n        const widthDiff = Math.abs(lastDimensions.width - newDimensions.width);\n        const heightDiff = Math.abs(lastDimensions.height - newDimensions.height);\n\n        // 微小变化不触发，避免抖动\n        if (widthDiff < 10 && heightDiff < 10) return;\n\n        lastDimensions = newDimensions;\n\n        // 防抖：等待 transition 完成（350ms）后才重新渲染\n        if (resizeTimeout !== null) clearTimeout(resizeTimeout);\n        resizeTimeout = window.setTimeout(() => {\n          doResize();\n        }, 350);\n      });\n\n      observer.observe(viewer);\n\n      return () => {\n        observer.disconnect();\n        if (resizeTimeout !== null) clearTimeout(resizeTimeout);\n      };\n    }, [reattachScrollListener]);\n\n    useEffect(() => {\n      reattachScrollListener();\n      return () => {\n        cancelAnimationFrame(scrollRafRef.current);\n        scrollContainerRef.current?.removeEventListener('scroll', onScrollRef.current);\n      };\n    }, [url, reattachScrollListener]);\n\n    const isActive = useCallback((href: string) => {\n      return href === activeTocHref;\n    }, [activeTocHref]);\n\n    const renderTocItems = (items: TocItem[], depth = 0) => (\n      <ul style={{ marginLeft: depth > 0 ? 16 : 0 }}>\n        {items.map((item, i) => {\n          const active = isActive(item.href);\n          return (\n            <li key={`${item.href}-${i}`}>\n              <button\n                onClick={() => handleTocClick(item.href)}\n                className={`rfp-w-full rfp-text-left rfp-py-2 rfp-px-3 rfp-text-sm rfp-rounded rfp-transition-all rfp-truncate ${active\n                    ? 'rfp-text-fg-primary rfp-bg-surface-3 rfp-font-medium'\n                    : 'rfp-text-fg-secondary hover:rfp-text-fg-primary hover:rfp-bg-surface-2'\n                  }`}\n                title={item.label}\n              >\n                {item.label.trim()}\n              </button>\n              {item.subitems && item.subitems.length > 0 && renderTocItems(item.subitems, depth + 1)}\n            </li>\n          );\n        })}\n      </ul>\n    );\n\n    return (\n      <div className=\"rfp-relative rfp-w-full rfp-h-full rfp-flex rfp-justify-center rfp-bg-surface-1 rfp-overflow-hidden\">\n        {error && <RendererError message={error} />}\n\n        {loading && !error && (\n          <div className=\"rfp-absolute rfp-inset-0 rfp-flex rfp-items-center rfp-justify-center rfp-z-10\">\n            <div className=\"rfp-w-12 rfp-h-12 rfp-border-4 rfp-border-line-strong rfp-border-t-spinner-head rfp-rounded-full rfp-animate-spin\" />\n          </div>\n        )}\n\n        {/* 目录侧栏 - 滑入动画 */}\n        {toc.length > 0 && (\n          <div\n            className=\"rfp-absolute rfp-inset-0 rfp-z-20 rfp-flex rfp-transition-opacity rfp-duration-300\"\n            style={{\n              opacity: showToc ? 1 : 0,\n              pointerEvents: showToc ? 'auto' : 'none',\n            }}\n          >\n            <div\n              className=\"rfp-w-72 rfp-max-w-[80%] rfp-h-full rfp-bg-surface-overlay rfp-backdrop-blur-xl rfp-border-r rfp-border-line-weak rfp-flex rfp-flex-col rfp-shadow-2xl rfp-transition-transform rfp-duration-300\"\n              style={{ transform: showToc ? 'translateX(0)' : 'translateX(-100%)' }}\n            >\n              <div className=\"rfp-flex rfp-items-center rfp-justify-between rfp-px-4 rfp-py-3 rfp-border-b rfp-border-line-weak rfp-flex-shrink-0\">\n                <span className=\"rfp-text-fg-primary rfp-font-medium rfp-text-sm\">{t('toolbar.toc')}</span>\n                <button\n                  onClick={() => setShowToc(false)}\n                  className=\"rfp-text-fg-tertiary hover:rfp-text-fg-primary rfp-transition-colors\"\n                >\n                  <X className=\"rfp-w-4 rfp-h-4\" />\n                </button>\n              </div>\n              <div className=\"rfp-flex-1 rfp-overflow-y-auto rfp-py-4 rfp-px-1\">\n                {renderTocItems(toc)}\n              </div>\n            </div>\n            <div\n              className=\"rfp-flex-1 rfp-transition-opacity rfp-duration-300\"\n              style={{ background: showToc ? 'rgba(0,0,0,0.3)' : 'transparent' }}\n              onClick={() => setShowToc(false)}\n            />\n          </div>\n        )}\n\n        {!error && (\n          <div\n            ref={viewerRef}\n            className=\"rfp-h-full rfp-bg-surface-toolbar rfp-shadow-lg\"\n            style={{\n              width: isFullWidth ? '100%' : `${A4_WIDTH}px`,\n              maxWidth: '100%',\n              transition: 'width 0.3s ease',\n              overflow: 'hidden',\n            }}\n          />\n        )}\n      </div>\n    );\n  }\n);\n","import {\n  useEffect,\n  useRef,\n  useState,\n  useCallback,\n  useImperativeHandle,\n  forwardRef,\n} from 'react';\nimport { X, ChevronLeft, ChevronRight, Maximize2, Minimize2, List } from 'lucide-react';\nimport 'foliate-js/view.js';\nimport type { FoliateView, TocItem } from 'foliate-js/view.js';\nimport { useTranslator } from '../../i18n/LocaleContext';\nimport { useFetcher } from '../../RequestContext';\nimport { RendererError } from '../RendererError';\nimport type { RendererHandle } from '../base.types';\nimport type { ToolbarGroup } from '../toolbar.types';\n\nconst READER_CSS = `\n  @namespace epub \"http://www.idpf.org/2007/ops\";\n  html { color-scheme: light; }\n  body {\n    background: #ffffff !important;\n    color: #1a1a1a !important;\n    font-family: \"Noto Serif SC\", \"Source Han Serif SC\", Georgia, \"Times New Roman\", serif !important;\n    font-size: 16px !important;\n    line-height: 2 !important;\n    max-width: 100% !important;\n    box-sizing: border-box !important;\n    word-break: break-word !important;\n    overflow-wrap: break-word !important;\n  }\n  p, li, blockquote, dd { line-height: 2; text-align: justify; }\n  p { text-indent: 2em; margin: 0.8em 0; }\n  h1 { text-align: center; margin: 1.5em 0 1em; }\n  h2 { margin: 1.2em 0 0.8em; }\n  h3 { margin: 1em 0 0.6em; }\n  img { max-width: 100% !important; height: auto !important; }\n  a { color: #2563eb; text-decoration: none; }\n  pre { white-space: pre-wrap !important; }\n`;\n\nconst A4_WIDTH = 794;\n\nexport interface MobiRendererHandle extends RendererHandle {\n  prevPage: () => void;\n  nextPage: () => void;\n  toggleFullWidth: () => void;\n  toggleToc: () => void;\n}\n\ninterface MobiRendererProps {\n  url: string;\n}\n\nexport const MobiRenderer = forwardRef<MobiRendererHandle, MobiRendererProps>(\n  ({ url }, ref) => {\n    const t = useTranslator();\n    const fetcher = useFetcher();\n    const hostRef = useRef<HTMLDivElement>(null);\n    const viewRef = useRef<FoliateView | null>(null);\n\n    // 模拟 epub.js 的 locations 显示\n    const totalLocationsRef = useRef(1);\n\n    // 内部状态管理\n    const [loading, setLoading] = useState(true);\n    const [error, setError] = useState<string | null>(null);\n    const [toc, setToc] = useState<TocItem[]>([]);\n    const [showToc, setShowToc] = useState(false);\n    const [activeTocHref, setActiveTocHref] = useState<string>('');\n    const [isFullWidth, setIsFullWidth] = useState(false);\n    const [currentChapter, setCurrentChapter] = useState(0);\n    const [totalChapters, setTotalChapters] = useState(0);\n    const isFullWidthRef = useRef(false);\n    isFullWidthRef.current = isFullWidth;\n\n    const reportProgress = useCallback((current: number, total: number) => {\n      if (total > 0) totalLocationsRef.current = total;\n      setCurrentChapter(Math.max(1, current + 1));\n      setTotalChapters(totalLocationsRef.current);\n    }, []);\n\n    const handlePrev = useCallback(() => {\n      const view = viewRef.current;\n      if (!view) return;\n      view.prev().catch(() => {});\n    }, []);\n\n    const handleNext = useCallback(() => {\n      const view = viewRef.current;\n      if (!view) return;\n      view.next().catch(() => {});\n    }, []);\n\n    const toggleToc = useCallback(() => setShowToc((prev) => !prev), []);\n\n    const toggleFullWidth = useCallback(() => {\n      const newVal = !isFullWidthRef.current;\n      setIsFullWidth(newVal);\n      // 宽度改变后 paginator 需要重新分页\n      const view = viewRef.current;\n      if (!view) return;\n      const renderer = (view as unknown as { renderer?: HTMLElement }).renderer;\n      if (renderer) {\n        renderer.setAttribute('max-inline-size', newVal ? '9999' : '720');\n      }\n    }, []);\n\n    // 事件发射器：用于通知主组件工具栏状态变化\n    const listenersRef = useRef<Set<() => void>>(new Set());\n    const notifyToolbarChange = useCallback(() => {\n      listenersRef.current.forEach(listener => listener());\n    }, []);\n\n    // 监听影响工具栏的状态变化\n    useEffect(() => {\n      notifyToolbarChange();\n    }, [currentChapter, notifyToolbarChange]);\n\n    useEffect(() => {\n      notifyToolbarChange();\n    }, [totalChapters, notifyToolbarChange]);\n\n    useEffect(() => {\n      notifyToolbarChange();\n    }, [isFullWidth, notifyToolbarChange]);\n\n    useEffect(() => {\n      notifyToolbarChange();\n    }, [toc.length, notifyToolbarChange]);\n\n    // 工具栏配置\n    const getToolbarGroups = useCallback((): ToolbarGroup[] => [\n      {\n        items: [\n          { type: 'button', icon: <List className=\"rfp-w-4 rfp-h-4\" />, tooltip: t('toolbar.toc'), action: toggleToc, disabled: toc.length === 0, active: showToc },\n        ],\n      },\n      {\n        items: [\n          { type: 'button', icon: <ChevronLeft className=\"rfp-w-4 rfp-h-4\" />, tooltip: t('toolbar.prev_page'), action: handlePrev, disabled: currentChapter <= 1 },\n          { type: 'text', content: `${currentChapter} / ${totalChapters}`, minWidth: '4rem' },\n          { type: 'button', icon: <ChevronRight className=\"rfp-w-4 rfp-h-4\" />, tooltip: t('toolbar.next_page'), action: handleNext, disabled: currentChapter >= totalChapters },\n        ],\n      },\n      {\n        items: [\n          { type: 'button', icon: isFullWidth ? <Minimize2 className=\"rfp-w-4 rfp-h-4\" /> : <Maximize2 className=\"rfp-w-4 rfp-h-4\" />, tooltip: isFullWidth ? t('toolbar.normal_width') : t('toolbar.full_width'), action: toggleFullWidth, active: isFullWidth },\n        ],\n      },\n    ], [currentChapter, totalChapters, isFullWidth, showToc, toc.length, t, handlePrev, handleNext, toggleToc, toggleFullWidth]);\n\n    const handleTocClick = useCallback((href: string) => {\n      setActiveTocHref(href);\n      setShowToc(false);\n      viewRef.current?.goTo(href).catch(() => {});\n    }, []);\n\n    useImperativeHandle(ref, () => ({\n      getToolbarGroups,\n      onToolbarChange: (listener: () => void) => {\n        listenersRef.current.add(listener);\n        return () => listenersRef.current.delete(listener);\n      },\n      prevPage: handlePrev,\n      nextPage: handleNext,\n      toggleFullWidth,\n      toggleToc,\n    }), [getToolbarGroups, handlePrev, handleNext, toggleFullWidth, toggleToc]);\n\n    // 吞掉 foliate-js paginator 卸载/切换窗口期由 ResizeObserver 触发的 uncaught error。\n    // 上游 bug：Paginator.destroy 里 unobserve 目标错了（unobserve(this) 而非 unobserve(container)），\n    // observer 从未真正解除，view 已经半 destroy 时仍会触发一次 render，此时 #view / iframe body 已 null。\n    // 已知触发：\n    //   - \"Cannot destructure property 'style' of 'el' as it is null\" (setStylesImportant)\n    //   - \"Failed to execute 'getComputedStyle' on 'Window': parameter 1 is not of type 'Element'\" (#replaceBackground)\n    useEffect(() => {\n      const handler = (e: ErrorEvent) => {\n        if (e.filename?.includes('paginator')) {\n          e.preventDefault();\n        }\n      };\n      window.addEventListener('error', handler);\n      return () => window.removeEventListener('error', handler);\n    }, []);\n\n    useEffect(() => {\n      const host = hostRef.current;\n      // 只有 URL 有效时才加载（避免空字符串或已 revoke 的 blob URL）\n      if (!host || !url) return;\n\n      let cancelled = false;\n      let view: FoliateView | null = null;\n      let progressReported = false;\n      // 多 section 文件的页码累加器：记录各 section 的实际页数\n      const sectionPagesMap = new Map<number, number>();\n\n      const load = async () => {\n        if (cancelled) return;\n\n        setLoading(true);\n        setError(null);\n        setToc([]);\n        setShowToc(false);\n        setActiveTocHref('');\n        host.replaceChildren();\n\n        try {\n          view = document.createElement('foliate-view') as FoliateView;\n          host.appendChild(view);\n          viewRef.current = view;\n\n          // 先注册事件\n          view.addEventListener('relocate', (e: Event) => {\n            const detail = (e as CustomEvent).detail;\n            if (!detail) return;\n\n            const currentView = viewRef.current;\n            const sectionCount = currentView?.book?.sections.length ?? 0;\n            const renderer = (currentView as unknown as {\n              renderer?: {\n                page?: number;\n                pages?: number;\n                getContents?: () => Array<{ index: number }>;\n              };\n            } | null)?.renderer;\n\n            // 用 Paginator 的 page/pages 得到精确翻页数：\n            // - 单 section：pages - 2 就是全书总页数\n            // - 多 section：记录已翻过的 section 的 pages，累加得到全书页码\n            const sectionIdx = renderer?.getContents?.()[0]?.index ?? -1;\n            if (\n              renderer\n              && typeof renderer.page === 'number'\n              && typeof renderer.pages === 'number'\n              && renderer.pages > 2\n              && sectionIdx >= 0\n            ) {\n              progressReported = true;\n              const curSectionPages = renderer.pages - 2;\n              // 更新当前 section 的实际页数（每次进入该 section 都刷新，防止首次未 render 完整）\n              sectionPagesMap.set(sectionIdx, curSectionPages);\n\n              // 累加已确知的前置 section pages\n              let pagesBefore = 0;\n              for (let i = 0; i < sectionIdx; i++) {\n                pagesBefore += sectionPagesMap.get(i) ?? 0;\n              }\n              const currentPage = pagesBefore + Math.min(curSectionPages, Math.max(1, renderer.page));\n\n              // total 策略：\n              // - 单 section：pages - 2 就是全书精确页数\n              // - 多 section：用\"当前 section 字符/页数比\"外推未访问 section 的 pages。\n              //   同一本书字体、行距、页宽恒定，比率稳定，比 SectionProgress 字符估算准得多。\n              //   翻到末页（fraction ≈ 1）时用 currentPage 覆盖，得到真实总数。\n              const atEnd = (detail.fraction ?? 0) >= 0.999;\n              let total: number;\n              if (sectionCount === 1) {\n                total = curSectionPages;\n              } else if (atEnd) {\n                total = currentPage;\n              } else {\n                const sections = currentView?.book?.sections ?? [];\n                const curSize = (sections[sectionIdx] as { size?: number } | undefined)?.size ?? 0;\n                const ratio = curSize > 0 ? curSectionPages / curSize : 0;\n                let est = 0;\n                for (let i = 0; i < sectionCount; i++) {\n                  if (sectionPagesMap.has(i)) {\n                    est += sectionPagesMap.get(i)!;\n                  } else {\n                    const s = (sections[i] as { size?: number } | undefined)?.size ?? 0;\n                    est += Math.max(1, Math.round(s * ratio));\n                  }\n                }\n                total = Math.max(currentPage, est);\n              }\n\n              reportProgress(currentPage - 1, total);\n              const tocItem = detail.tocItem as { href?: string } | undefined;\n              if (tocItem?.href) setActiveTocHref(tocItem.href);\n              return;\n            }\n\n            // 兜底：SectionProgress.location（基于字符数估算）\n            const loc = detail.location as { current?: number; total?: number } | undefined;\n            if (loc && typeof loc.current === 'number' && typeof loc.total === 'number') {\n              progressReported = true;\n              // 当翻到末尾时（fraction 达到 1 表示全书 100%），用 current + 1 作为实际可达的 total，\n              // 覆盖 SectionProgress 基于字符数向上取整的估算值（会高估）\n              const atEnd = (detail.fraction ?? 0) >= 0.999;\n              const actualTotal = atEnd ? loc.current + 1 : loc.total;\n              reportProgress(loc.current, actualTotal);\n            } else {\n              // fallback：用 section 级别估算\n              const sections = viewRef.current?.book?.sections ?? [];\n              const idx = detail.index ?? 0;\n              const frac = detail.fraction ?? 0;\n              const total = Math.max(sections.length, 1);\n              const current = Math.round((idx + frac) / total * total);\n              reportProgress(current, total);\n            }\n            const tocItem = detail.tocItem as { href?: string } | undefined;\n            if (tocItem?.href) {\n              setActiveTocHref(tocItem.href);\n            }\n          });\n\n          const res = await fetcher(url);\n          if (cancelled) return;\n          if (!res.ok) throw new Error(`请求失败: ${res.status}`);\n          const blob = await res.blob();\n          if (cancelled) return;\n          let name = 'book.mobi';\n          try {\n            const u = new URL(url, window.location.href);\n            const base = u.pathname.split('/').pop();\n            if (base) name = decodeURIComponent(base);\n          } catch { /* blob: URL */ }\n          const file = new File([blob], name);\n\n          await view.open(file);\n          if (cancelled) { view.book?.destroy?.(); return; }\n\n          // 配置 paginator：paginated 模式（默认），带动画\n          const renderer = (view as unknown as { renderer: HTMLElement & {\n            setStyles?: (css: string) => void;\n            next?: () => Promise<void>;\n          } }).renderer;\n\n          if (renderer) {\n            // flow=\"paginated\" 是默认值，不需要显式设置\n            renderer.setAttribute('animated', '');\n            renderer.setAttribute('max-inline-size', '720');\n            renderer.setAttribute('margin', '48');\n            renderer.setAttribute('gap', '5%');\n            // 必须调 next() 渲染首页\n            await renderer.next?.();\n            // setStyles 依赖 view.document 存在，必须在 next() 触发首次渲染后调用\n            renderer.setStyles?.(READER_CSS);\n          }\n          if (cancelled) return;\n\n          setToc(view.book?.toc ?? []);\n          setLoading(false);\n          // 只在 relocate 事件从未报告 progress 时使用 sections.length 作为 fallback，\n          // 避免覆盖 SectionProgress 报告的更准确的 total（通常在首页 render 时通过 relocate 已报告）\n          if (!progressReported) {\n            reportProgress(0, view.book?.sections.length ?? 1);\n          }\n        } catch (err) {\n          // MOBI/EPUB 加载错误通常是文件损坏或 DRM 保护，用 warn 级别记录\n          console.warn('[MobiRenderer] Failed to load ebook:', err instanceof Error ? err.message : String(err));\n          if (!cancelled) {\n            setError(t('mobi.load_failed'));\n            setLoading(false);\n          }\n        }\n      };\n\n      // 延迟到 microtask 队列执行，让 StrictMode 的第一次 cleanup 有机会取消，\n      // 避免两个并发的 view.open() 污染 foliate-js MOBI 解析器内部状态\n      Promise.resolve().then(load);\n\n      return () => {\n        cancelled = true;\n        try { (view as unknown as { close?: () => void })?.close?.(); } catch { /* ignore */ }\n        try { view?.book?.destroy?.(); } catch { /* ignore */ }\n        if (view && view.parentNode === host) {\n          try { host.removeChild(view); } catch { /* ignore */ }\n        }\n        if (viewRef.current === view) viewRef.current = null;\n      };\n    }, [url, reportProgress, t]);\n\n    const isActive = useCallback(\n      (href: string | undefined) => !!href && href === activeTocHref,\n      [activeTocHref]\n    );\n\n    const renderTocItems = (items: TocItem[], depth = 0) => (\n      <ul style={{ listStyle: 'none', padding: 0, margin: depth > 0 ? '0 0 0 16px' : 0 }}>\n        {items.map((item, i) => (\n          <li key={`${item.href ?? item.label}-${i}`}>\n            {item.href ? (\n              <button\n                onClick={() => handleTocClick(item.href!)}\n                className={`rfp-w-full rfp-text-left rfp-py-2 rfp-px-3 rfp-text-sm rfp-rounded rfp-transition-all rfp-truncate ${\n                  isActive(item.href)\n                    ? 'rfp-text-fg-primary rfp-bg-surface-3 rfp-font-medium'\n                    : 'rfp-text-fg-secondary hover:rfp-text-fg-primary hover:rfp-bg-surface-2'\n                }`}\n                title={item.label}\n              >\n                {item.label?.trim()}\n              </button>\n            ) : (\n              <div className=\"rfp-w-full rfp-py-2 rfp-px-3 rfp-text-sm rfp-text-fg-tertiary rfp-truncate\">\n                {item.label?.trim()}\n              </div>\n            )}\n            {item.subitems && item.subitems.length > 0 && renderTocItems(item.subitems, depth + 1)}\n          </li>\n        ))}\n      </ul>\n    );\n\n    return (\n      <div className=\"rfp-relative rfp-w-full rfp-h-full rfp-flex rfp-justify-center rfp-bg-surface-1 rfp-overflow-hidden\">\n        {error && <RendererError message={error} />}\n\n        {loading && !error && (\n          <div className=\"rfp-absolute rfp-inset-0 rfp-flex rfp-items-center rfp-justify-center rfp-z-10\">\n            <div className=\"rfp-w-12 rfp-h-12 rfp-border-4 rfp-border-line-strong rfp-border-t-spinner-head rfp-rounded-full rfp-animate-spin\" />\n          </div>\n        )}\n\n        {/* 目录侧栏 */}\n        {toc.length > 0 && (\n          <div\n            className=\"rfp-absolute rfp-inset-0 rfp-z-20 rfp-flex rfp-transition-opacity rfp-duration-300\"\n            style={{ opacity: showToc ? 1 : 0, pointerEvents: showToc ? 'auto' : 'none' }}\n          >\n            <div\n              className=\"rfp-w-72 rfp-max-w-[80%] rfp-h-full rfp-bg-surface-overlay rfp-backdrop-blur-xl rfp-border-r rfp-border-line-weak rfp-flex rfp-flex-col rfp-shadow-2xl rfp-transition-transform rfp-duration-300\"\n              style={{ transform: showToc ? 'translateX(0)' : 'translateX(-100%)' }}\n            >\n              <div className=\"rfp-flex rfp-items-center rfp-justify-between rfp-px-4 rfp-py-3 rfp-border-b rfp-border-line-weak rfp-flex-shrink-0\">\n                <span className=\"rfp-text-fg-primary rfp-font-medium rfp-text-sm\">{t('toolbar.toc')}</span>\n                <button\n                  onClick={() => setShowToc(false)}\n                  className=\"rfp-text-fg-tertiary hover:rfp-text-fg-primary rfp-transition-colors\"\n                >\n                  <X className=\"rfp-w-4 rfp-h-4\" />\n                </button>\n              </div>\n              <div className=\"rfp-flex-1 rfp-overflow-y-auto rfp-py-4 rfp-px-1\">\n                {renderTocItems(toc)}\n              </div>\n            </div>\n            <div\n              className=\"rfp-flex-1 rfp-transition-opacity rfp-duration-300\"\n              style={{ background: showToc ? 'rgba(0,0,0,0.3)' : 'transparent' }}\n              onClick={() => setShowToc(false)}\n            />\n          </div>\n        )}\n\n        {!error && (\n          <div\n            ref={hostRef}\n            className=\"rfp-h-full rfp-bg-surface-toolbar rfp-shadow-lg\"\n            style={{\n              width: isFullWidth ? '100%' : `${A4_WIDTH}px`,\n              maxWidth: '100%',\n              transition: 'width 0.3s ease',\n            }}\n          />\n        )}\n      </div>\n    );\n  }\n);\n\nMobiRenderer.displayName = 'MobiRenderer';\n","import { useRef, useEffect, useState, forwardRef, useImperativeHandle } from 'react';\nimport videojs from 'video.js';\nimport 'video.js/dist/video-js.css';\nimport { useTranslator } from '../../i18n/LocaleContext';\nimport { RendererError } from '../RendererError';\nimport type { RendererHandle } from '../base.types';\n\ntype VideoJsPlayer = ReturnType<typeof videojs>;\n\ninterface VideoRendererProps {\n  url: string;\n  fileName?: string;\n}\n\n// 浏览器原生不支持的视频容器（无论编码，<video> 都无法播放）\n// — 这些扩展名直接短路 videojs 初始化，给出明确提示\nconst BROWSER_UNSUPPORTED_EXTS = new Set(['avi', 'wmv', 'flv']);\n\n// 根据 URL 获取视频 MIME 类型\nconst getVideoType = (url: string): string => {\n  const ext = url.split('.').pop()?.toLowerCase().split('?')[0] || '';\n  const typeMap: Record<string, string> = {\n    mp4: 'video/mp4',\n    webm: 'video/webm',\n    ogg: 'video/ogg',\n    ogv: 'video/ogg',\n    mov: 'video/quicktime', // MOV 使用 QuickTime MIME 类型\n    avi: 'video/x-msvideo',\n    mkv: 'video/x-matroska',\n    m4v: 'video/mp4',\n    '3gp': 'video/3gpp',\n    flv: 'video/x-flv',\n  };\n  return typeMap[ext] || 'video/mp4';\n};\n\n// 获取视频文件扩展名（优先用文件名，blob/HTTP URL 都拿不到真扩展名）\nconst getVideoExt = (url: string, fileName?: string): string => {\n  const source = fileName || url;\n  return source.split('.').pop()?.toLowerCase().split('?')[0] || '';\n};\n\ninterface ErrorState {\n  title: string;\n  detail: string;\n}\n\nexport const VideoRenderer = forwardRef<RendererHandle, VideoRendererProps>(({ url, fileName }, ref) => {\n  const t = useTranslator();\n  const [error, setError] = useState<ErrorState | null>(null);\n  const [isLoading, setIsLoading] = useState(true);\n  const videoRef = useRef<HTMLDivElement>(null);\n  const playerRef = useRef<VideoJsPlayer | null>(null);\n\n  useEffect(() => {\n    const videoExt = getVideoExt(url, fileName);\n\n    // 已知浏览器不支持的容器：跳过 videojs 初始化，直接展示友好提示\n    if (BROWSER_UNSUPPORTED_EXTS.has(videoExt)) {\n      setError({\n        title: t('video.unsupported_title'),\n        detail: t('video.unsupported_detail', { format: videoExt.toUpperCase() }),\n      });\n      setIsLoading(false);\n      return;\n    }\n\n    // 确保 Video.js 播放器只初始化一次\n    if (!playerRef.current && videoRef.current) {\n      const videoElement = document.createElement('video-js');\n      videoElement.classList.add('vjs-big-play-centered', 'vjs-theme-apple');\n      videoRef.current.appendChild(videoElement);\n\n      const videoType = getVideoType(url);\n\n      // 为特定格式提供多个 MIME 类型作为备用\n      let sources: Array<{ src: string; type: string }>;\n\n      if (videoType === 'video/quicktime') {\n        // MOV 格式 fallback\n        sources = [\n          { src: url, type: 'video/quicktime' },\n          { src: url, type: 'video/mp4' }\n        ];\n      } else {\n        sources = [{ src: url, type: videoType }];\n      }\n\n      const player = videojs(videoElement, {\n        controls: true,\n        fill: true,\n        preload: 'auto',\n        controlBar: {\n          children: [\n            'playToggle',\n            'volumePanel',\n            'currentTimeDisplay',\n            'timeDivider',\n            'durationDisplay',\n            'progressControl',\n            'remainingTimeDisplay',\n            'fullscreenToggle'\n          ],\n          volumePanel: {\n            inline: false\n          }\n        },\n        html5: {\n          vhs: {\n            overrideNative: true\n          },\n          nativeVideoTracks: false,\n          nativeAudioTracks: false,\n          nativeTextTracks: false\n        },\n        sources\n      });\n\n      // 确保视频保持比例\n      const videoEl = player.el().querySelector('video');\n      if (videoEl) {\n        (videoEl as HTMLVideoElement).style.objectFit = 'contain';\n      }\n\n      // 监听加载完成\n      player.on('loadeddata', () => {\n        setIsLoading(false);\n      });\n\n      player.on('error', () => {\n        const err = player.error();\n        // 视频加载错误是正常情况（格式不支持、编解码器缺失等），用 warn 级别记录\n        console.warn('[VideoRenderer] Video playback error:', err?.message || 'Unknown error');\n\n        // MEDIA_ERR_SRC_NOT_SUPPORTED（code=4）：编码或容器层面浏览器解不了\n        if (err?.code === 4) {\n          setError({\n            title: t('video.unsupported_title'),\n            detail: t('video.unsupported_detail', {\n              format: videoExt ? videoExt.toUpperCase() : t('common.unknown_error'),\n            }),\n          });\n        } else {\n          setError({\n            title: t('video.load_failed'),\n            detail: err?.message || t('common.unknown_error'),\n          });\n        }\n        setIsLoading(false);\n      });\n\n      playerRef.current = player;\n    }\n  }, [url, fileName, t]);\n\n  // 清理函数\n  useEffect(() => {\n    const player = playerRef.current;\n\n    return () => {\n      if (player && !player.isDisposed()) {\n        player.dispose();\n        playerRef.current = null;\n      }\n    };\n  }, []);\n\n  // 暴露接口给父组件（必须在所有提前 return 之前）\n  useImperativeHandle(ref, () => ({\n    getToolbarGroups: () => [],\n  }), []);\n\n  if (error) {\n    return <RendererError message={error.title} detail={error.detail} />;\n  }\n\n  return (\n    <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full\">\n      <div className=\"rfp-w-full rfp-h-full rfp-relative\">\n        {/* 加载状态 */}\n        {isLoading && (\n          <div className=\"rfp-absolute rfp-inset-0 rfp-flex rfp-items-center rfp-justify-center rfp-bg-surface-3 rfp-backdrop-blur-sm rfp-z-10\">\n            <div className=\"rfp-text-center\">\n              <div className=\"rfp-w-12 rfp-h-12 rfp-mx-auto rfp-mb-3 rfp-border-3 rfp-border-line-strong rfp-border-t-spinner-head rfp-rounded-full rfp-animate-spin\" />\n              <p className=\"rfp-text-sm rfp-text-fg-secondary rfp-font-medium\">{t('video.loading')}</p>\n            </div>\n          </div>\n        )}\n\n        {/* 视频播放器容器 */}\n        <div\n          ref={videoRef}\n          className=\"rfp-overflow-hidden rfp-w-full rfp-h-full [&_video]:rfp-object-contain\"\n          style={{\n            boxShadow: '0 20px 60px rgba(0, 0, 0, 0.4), 0 0 0 1px rgba(255, 255, 255, 0.05)'\n          }}\n        />\n      </div>\n    </div>\n  );\n});\n","import { useState, useRef, useEffect, useCallback } from 'react';\n\ninterface UseAudioPlayerOptions {\n  url: string;\n  skipSeconds?: number;\n}\n\ninterface UseAudioPlayerReturn {\n  audioRef: React.RefObject<HTMLAudioElement>;\n  isPlaying: boolean;\n  isLoading: boolean;\n  isLoop: boolean;\n  currentTime: number;\n  duration: number;\n  volume: number;\n  isMuted: boolean;\n  error: string | null;\n  togglePlay: () => void;\n  seek: (time: number) => void;\n  skip: (seconds: number) => void;\n  setVolume: (vol: number) => void;\n  toggleMute: () => void;\n  toggleLoop: () => void;\n  formatTime: (time: number) => string;\n}\n\nexport function useAudioPlayer({\n  url,\n}: UseAudioPlayerOptions): UseAudioPlayerReturn {\n  const audioRef = useRef<HTMLAudioElement>(null);\n  const [isPlaying, setIsPlaying] = useState(false);\n  const [isLoading, setIsLoading] = useState(true);\n  const [currentTime, setCurrentTime] = useState(0);\n  const [duration, setDuration] = useState(0);\n  const [volume, setVolumeState] = useState(1);\n  const [isMuted, setIsMuted] = useState(false);\n  const [isLoop, setIsLoop] = useState(false);\n  const [error, setError] = useState<string | null>(null);\n\n  useEffect(() => {\n    const audio = audioRef.current;\n    if (!audio) return;\n\n    // 重置加载状态\n    setIsLoading(true);\n    setError(null);\n\n    const onTimeUpdate = () => {\n      if (!isNaN(audio.currentTime)) {\n        setCurrentTime(audio.currentTime);\n      }\n    };\n\n    const onDurationChange = () => {\n      if (!isNaN(audio.duration) && isFinite(audio.duration)) {\n        setDuration(audio.duration);\n      }\n    };\n\n    const onCanPlay = () => {\n      setIsLoading(false);\n      onDurationChange();\n    };\n\n    const onWaiting = () => setIsLoading(true);\n    const onPlaying = () => {\n      setIsLoading(false);\n      setIsPlaying(true);\n    };\n\n    // 由 audio 事件驱动播放状态，而非手动设置\n    const onPlay = () => setIsPlaying(true);\n    const onPause = () => setIsPlaying(false);\n    const onEnded = () => setIsPlaying(false);\n\n    const onError = () => {\n      setError('音频加载失败');\n      setIsLoading(false);\n    };\n\n    audio.addEventListener('timeupdate', onTimeUpdate);\n    audio.addEventListener('loadedmetadata', onDurationChange);\n    audio.addEventListener('durationchange', onDurationChange);\n    audio.addEventListener('canplay', onCanPlay);\n    audio.addEventListener('waiting', onWaiting);\n    audio.addEventListener('playing', onPlaying);\n    audio.addEventListener('play', onPlay);\n    audio.addEventListener('pause', onPause);\n    audio.addEventListener('ended', onEnded);\n    audio.addEventListener('error', onError);\n\n    // 如果 audio 已经就绪\n    if (audio.readyState >= 3) {\n      setIsLoading(false);\n      onDurationChange();\n    } else if (audio.readyState >= 1) {\n      onDurationChange();\n    }\n\n    return () => {\n      audio.removeEventListener('timeupdate', onTimeUpdate);\n      audio.removeEventListener('loadedmetadata', onDurationChange);\n      audio.removeEventListener('durationchange', onDurationChange);\n      audio.removeEventListener('canplay', onCanPlay);\n      audio.removeEventListener('waiting', onWaiting);\n      audio.removeEventListener('playing', onPlaying);\n      audio.removeEventListener('play', onPlay);\n      audio.removeEventListener('pause', onPause);\n      audio.removeEventListener('ended', onEnded);\n      audio.removeEventListener('error', onError);\n    };\n  }, [url]);\n\n  const togglePlay = useCallback(() => {\n    const audio = audioRef.current;\n    if (!audio) return;\n\n    if (audio.paused) {\n      audio.play().catch(() => {\n        // 浏览器自动播放策略拒绝\n      });\n    } else {\n      audio.pause();\n    }\n  }, []);\n\n  const seek = useCallback((time: number) => {\n    const audio = audioRef.current;\n    if (!audio) return;\n    audio.currentTime = time;\n    setCurrentTime(time);\n  }, []);\n\n  const skip = useCallback(\n    (seconds: number) => {\n      const audio = audioRef.current;\n      if (!audio) return;\n      audio.currentTime = Math.max(\n        0,\n        Math.min(audio.currentTime + seconds, audio.duration || Infinity)\n      );\n    },\n    []\n  );\n\n  const setVolume = useCallback((vol: number) => {\n    const audio = audioRef.current;\n    if (!audio) return;\n    const clamped = Math.max(0, Math.min(1, vol));\n    audio.volume = clamped;\n    setVolumeState(clamped);\n    if (clamped > 0) {\n      audio.muted = false;\n      setIsMuted(false);\n    }\n  }, []);\n\n  const toggleMute = useCallback(() => {\n    const audio = audioRef.current;\n    if (!audio) return;\n    audio.muted = !audio.muted;\n    setIsMuted(audio.muted);\n  }, []);\n\n  const toggleLoop = useCallback(() => {\n    const audio = audioRef.current;\n    if (!audio) return;\n    const next = !audio.loop;\n    audio.loop = next;\n    setIsLoop(next);\n  }, []);\n\n  const formatTime = useCallback((time: number) => {\n    if (!isFinite(time) || isNaN(time) || time < 0) return '0:00';\n    const minutes = Math.floor(time / 60);\n    const seconds = Math.floor(time % 60);\n    return `${minutes}:${seconds.toString().padStart(2, '0')}`;\n  }, []);\n\n  return {\n    audioRef,\n    isPlaying,\n    isLoading,\n    isLoop,\n    currentTime,\n    duration,\n    volume,\n    isMuted,\n    error,\n    togglePlay,\n    seek,\n    skip,\n    setVolume,\n    toggleMute,\n    toggleLoop,\n    formatTime,\n  };\n}\n","import { useState, useRef, useEffect, forwardRef, useImperativeHandle } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { Play, Pause, Volume2, VolumeX, Volume1, SkipBack, SkipForward, Repeat } from 'lucide-react';\nimport { useAudioPlayer } from '../../hooks/useAudioPlayer';\nimport { useTranslator } from '../../i18n/LocaleContext';\nimport { RendererError } from '../RendererError';\nimport type { RendererHandle } from '../base.types';\n\n/** 文本溢出时自动横向滚动 */\nconst MarqueeText: React.FC<{\n  text: string;\n  className?: string;\n  style?: React.CSSProperties;\n}> = ({ text, className = '', style }) => {\n  const containerRef = useRef<HTMLDivElement>(null);\n  const innerRef = useRef<HTMLDivElement>(null);\n  const [overflow, setOverflow] = useState(false);\n  const [scrollDist, setScrollDist] = useState(0);\n\n  useEffect(() => {\n    const check = () => {\n      const container = containerRef.current;\n      const inner = innerRef.current;\n      if (!container || !inner) return;\n      const cw = container.clientWidth;\n      const tw = inner.scrollWidth;\n      setOverflow(tw > cw);\n      setScrollDist(tw);\n    };\n    check();\n    const observer = new ResizeObserver(check);\n    if (containerRef.current) observer.observe(containerRef.current);\n    return () => observer.disconnect();\n  }, [text]);\n\n  const gap = 60;\n  const totalScroll = scrollDist + gap;\n  const dur = totalScroll / 40;\n\n  return (\n    <div\n      ref={containerRef}\n      className={`rfp-overflow-hidden rfp-whitespace-nowrap ${className}`}\n      style={style}\n    >\n      {overflow ? (\n        <motion.div\n          className=\"rfp-inline-flex rfp-whitespace-nowrap\"\n          animate={{ x: [0, -totalScroll] }}\n          transition={{ duration: dur, repeat: Infinity, ease: 'linear', repeatDelay: 1.5 }}\n        >\n          <span>{text}</span>\n          <span style={{ width: gap }} className=\"rfp-inline-block\" />\n          <span>{text}</span>\n        </motion.div>\n      ) : null}\n      {/* 始终渲染用于测量的隐藏层 */}\n      <div\n        ref={innerRef}\n        className=\"rfp-whitespace-nowrap\"\n        style={overflow ? { position: 'absolute', visibility: 'hidden', pointerEvents: 'none' } : undefined}\n      >\n        {text}\n      </div>\n    </div>\n  );\n};\n\n/** SVG 唱臂组件 */\nconst Tonearm: React.FC<{ isPlaying: boolean }> = ({ isPlaying }) => (\n  <motion.div\n    className=\"rfp-absolute\"\n    style={{\n      top: '-6px',\n      right: '2px',\n      width: '100px',\n      height: '120px',\n      transformOrigin: '76px 16px',\n      zIndex: 5,\n    }}\n    animate={{ rotate: isPlaying ? 16 : 0 }}\n    transition={{ duration: 0.8, ease: [0.4, 0, 0.2, 1] }}\n  >\n    <svg\n      width=\"100\"\n      height=\"120\"\n      viewBox=\"0 0 100 120\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      {/* 底座阴影 */}\n      <circle cx=\"76\" cy=\"16\" r=\"13\" fill=\"rgba(0,0,0,0.3)\" />\n      {/* 底座外圈 */}\n      <circle cx=\"76\" cy=\"16\" r=\"11\" fill=\"url(#baseGrad)\" />\n      {/* 底座内圈 */}\n      <circle cx=\"76\" cy=\"16\" r=\"6\" fill=\"url(#baseInnerGrad)\" />\n      {/* 底座中心轴 */}\n      <circle cx=\"76\" cy=\"16\" r=\"2.5\" fill=\"#222\" stroke=\"#555\" strokeWidth=\"0.5\" />\n\n      {/* 臂杆 */}\n      <path\n        d=\"M74 22 L56 88\"\n        stroke=\"url(#armGrad)\"\n        strokeWidth=\"3.5\"\n        strokeLinecap=\"round\"\n      />\n      {/* 臂杆高光 */}\n      <path\n        d=\"M74.8 22 L56.8 88\"\n        stroke=\"rgba(255,255,255,0.06)\"\n        strokeWidth=\"1\"\n        strokeLinecap=\"round\"\n      />\n\n      {/* 唱头座 (Headshell) */}\n      <rect x=\"50\" y=\"86\" width=\"12\" height=\"7\" rx=\"1.5\" fill=\"url(#headGrad)\" />\n      {/* 唱头 (Cartridge) */}\n      <rect x=\"52.5\" y=\"92\" width=\"7\" height=\"9\" rx=\"1\" fill=\"url(#cartridgeGrad)\" />\n      {/* 唱针 (Stylus) */}\n      <line x1=\"56\" y1=\"101\" x2=\"56\" y2=\"105\" stroke=\"#bbb\" strokeWidth=\"1.2\" strokeLinecap=\"round\" />\n      <circle cx=\"56\" cy=\"105.5\" r=\"0.8\" fill=\"#ddd\" />\n\n      {/* 渐变定义 */}\n      <defs>\n        <radialGradient id=\"baseGrad\" cx=\"40%\" cy=\"35%\">\n          <stop offset=\"0%\" stopColor=\"#555\" />\n          <stop offset=\"100%\" stopColor=\"#1a1a1a\" />\n        </radialGradient>\n        <radialGradient id=\"baseInnerGrad\" cx=\"40%\" cy=\"35%\">\n          <stop offset=\"0%\" stopColor=\"#666\" />\n          <stop offset=\"100%\" stopColor=\"#333\" />\n        </radialGradient>\n        <linearGradient id=\"armGrad\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n          <stop offset=\"0%\" stopColor=\"#555\" />\n          <stop offset=\"50%\" stopColor=\"#444\" />\n          <stop offset=\"100%\" stopColor=\"#333\" />\n        </linearGradient>\n        <linearGradient id=\"headGrad\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n          <stop offset=\"0%\" stopColor=\"#555\" />\n          <stop offset=\"100%\" stopColor=\"#333\" />\n        </linearGradient>\n        <linearGradient id=\"cartridgeGrad\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n          <stop offset=\"0%\" stopColor=\"#444\" />\n          <stop offset=\"100%\" stopColor=\"#222\" />\n        </linearGradient>\n      </defs>\n    </svg>\n  </motion.div>\n);\n\ninterface AudioRendererProps {\n  url: string;\n  fileName: string;\n}\n\nexport const AudioRenderer = forwardRef<RendererHandle, AudioRendererProps>(({ url, fileName }, ref) => {\n  const t = useTranslator();\n  const {\n    audioRef,\n    isPlaying,\n    isLoading,\n    isLoop,\n    currentTime,\n    duration,\n    volume,\n    isMuted,\n    error,\n    togglePlay,\n    seek,\n    skip,\n    setVolume,\n    toggleMute,\n    toggleLoop,\n    formatTime,\n  } = useAudioPlayer({ url });\n\n  const [showVolume, setShowVolume] = useState(false);\n  const [isCompact, setIsCompact] = useState(false);\n  const [controlScale, setControlScale] = useState(1);\n  const [isDragging, setIsDragging] = useState(false);\n  const [dragTime, setDragTime] = useState(0);\n  const containerRef = useRef<HTMLDivElement>(null);\n  const volumeRef = useRef<HTMLDivElement>(null);\n  const volumeTimerRef = useRef<ReturnType<typeof setTimeout>>();\n\n  const displayTime = isDragging ? dragTime : currentTime;\n  const progress = duration > 0 ? displayTime / duration : 0;\n\n  // 监听容器尺寸，自适应调整布局\n  useEffect(() => {\n    const checkSize = () => {\n      if (containerRef.current) {\n        const height = containerRef.current.clientHeight;\n        const width = containerRef.current.clientWidth;\n        // 高度小于 580px 时启用紧凑模式\n        setIsCompact(height < 580);\n        // 控制面板宽度自适应缩放\n        // 基础宽度 448px (max-w-md)，最小视觉宽度 320px，即最小 scale ≈ 0.714\n        const baseWidth = 464; // 448 + 左右各 8px 呼吸空间\n        const minVisualWidth = 320;\n        const minScale = minVisualWidth / baseWidth;\n        const scale = width >= baseWidth\n          ? 1\n          : Math.max(minScale, width / baseWidth);\n        setControlScale(scale);\n      }\n    };\n    checkSize();\n    const observer = new ResizeObserver(checkSize);\n    if (containerRef.current) {\n      observer.observe(containerRef.current);\n    }\n    return () => observer.disconnect();\n  }, []);\n\n  useEffect(() => {\n    const handleClickOutside = (e: MouseEvent) => {\n      if (volumeRef.current && !volumeRef.current.contains(e.target as Node)) {\n        setShowVolume(false);\n      }\n    };\n    if (showVolume) {\n      document.addEventListener('mousedown', handleClickOutside);\n    }\n    return () => document.removeEventListener('mousedown', handleClickOutside);\n  }, [showVolume]);\n\n  const handleVolumeEnter = () => {\n    clearTimeout(volumeTimerRef.current);\n    setShowVolume(true);\n  };\n\n  const handleVolumeLeave = () => {\n    volumeTimerRef.current = setTimeout(() => setShowVolume(false), 300);\n  };\n\n  const VolumeIcon = isMuted || volume === 0 ? VolumeX : volume < 0.5 ? Volume1 : Volume2;\n\n  // 暴露接口给父组件\n  useImperativeHandle(ref, () => ({\n    getToolbarGroups: () => [],\n  }), []);\n\n  if (error) {\n    return <RendererError message={error} />;\n  }\n\n  // 根据紧凑模式动态计算尺寸\n  const vinylScale = isCompact ? 0.72 : 1;\n  const vinylBase = 260;\n  const vinylHeightBase = 240;\n\n  // 唱片跟随控制面板同步缩放，避免头重脚轻\n  const finalVinylScale = vinylScale * controlScale;\n\n  return (\n    <div\n      ref={containerRef}\n      className={`rfp-flex rfp-flex-col rfp-items-center rfp-justify-center rfp-w-full rfp-h-full rfp-select-none rfp-overflow-auto ${\n        isCompact ? 'rfp-p-3 rfp-gap-3' : 'rfp-p-6 rfp-gap-6'\n      }`}\n    >\n      {/* 唱片机整体 */}\n      <div\n        className=\"rfp-relative rfp-flex-shrink-0\"\n        style={{\n          width: `${vinylBase}px`,\n          height: `${vinylHeightBase}px`,\n          transform: `scale(${finalVinylScale})`,\n          transformOrigin: 'center center',\n          marginTop: isCompact ? `${-(vinylHeightBase * (1 - finalVinylScale)) / 2}px` : 0,\n          marginBottom: isCompact ? `${-(vinylHeightBase * (1 - finalVinylScale)) / 2}px` : 0,\n        }}\n      >\n        {/* 外圈光晕 */}\n        <motion.div\n          className=\"rfp-absolute rfp-rounded-full\"\n          style={{\n            width: '220px',\n            height: '220px',\n            top: '18px',\n            left: '8px',\n            background: 'radial-gradient(circle, rgba(129,140,248,0.12) 0%, transparent 70%)',\n          }}\n          animate={isPlaying ? { scale: [1, 1.08, 1], opacity: [0.5, 1, 0.5] } : { scale: 1, opacity: 0.2 }}\n          transition={isPlaying ? { duration: 3, repeat: Infinity, ease: 'easeInOut' } : { duration: 0.5 }}\n        />\n\n        {/* 唱片主体 */}\n        <div\n          className=\"rfp-absolute rfp-rounded-full rfp-overflow-hidden\"\n          style={{\n            width: '200px',\n            height: '200px',\n            top: '28px',\n            left: '18px',\n            background: `\n              radial-gradient(circle at center, transparent 95%, rgba(30,30,30,0.8) 95.5%, #111 97%),\n              radial-gradient(circle at center, transparent 38%, rgba(50,50,50,0.5) 38.15%, transparent 38.4%),\n              radial-gradient(circle at center, transparent 45%, rgba(50,50,50,0.3) 45.15%, transparent 45.4%),\n              radial-gradient(circle at center, transparent 52%, rgba(50,50,50,0.5) 52.15%, transparent 52.4%),\n              radial-gradient(circle at center, transparent 59%, rgba(50,50,50,0.3) 59.15%, transparent 59.4%),\n              radial-gradient(circle at center, transparent 66%, rgba(50,50,50,0.5) 66.15%, transparent 66.4%),\n              radial-gradient(circle at center, transparent 73%, rgba(50,50,50,0.3) 73.15%, transparent 73.4%),\n              radial-gradient(circle at center, transparent 80%, rgba(50,50,50,0.4) 80.15%, transparent 80.4%),\n              radial-gradient(circle at center, transparent 87%, rgba(50,50,50,0.3) 87.15%, transparent 87.4%),\n              conic-gradient(from 0deg, #1c1c1c, #232323, #1a1a1a, #262626, #1c1c1c, #212121, #1a1a1a, #252525, #1c1c1c, #232323, #1a1a1a, #262626, #1c1c1c)\n            `,\n            boxShadow: isPlaying\n              ? '0 0 36px rgba(129,140,248,0.1), 0 8px 32px rgba(0,0,0,0.4), inset 0 0 20px rgba(0,0,0,0.4)'\n              : '0 8px 32px rgba(0,0,0,0.4), inset 0 0 20px rgba(0,0,0,0.4)',\n            animation: 'rfp-vinyl-spin 8s linear infinite',\n            animationPlayState: isPlaying ? 'running' : 'paused',\n          }}\n        >\n          {/* 中心标签 */}\n          <div\n            className=\"rfp-absolute rfp-rounded-full\"\n            style={{\n              width: '34%',\n              height: '34%',\n              top: '33%',\n              left: '33%',\n              background: 'radial-gradient(circle at 40% 38%, #818cf8, #6366f1, #4f46e5, #4338ca)',\n              boxShadow: 'inset 0 1px 3px rgba(255,255,255,0.25), inset 0 -1px 3px rgba(0,0,0,0.3), 0 0 8px rgba(0,0,0,0.3)',\n            }}\n          >\n            <div\n              className=\"rfp-absolute rfp-inset-0 rfp-rounded-full rfp-opacity-20\"\n              style={{\n                background: `\n                  radial-gradient(circle at center, transparent 30%, rgba(0,0,0,0.3) 31%, transparent 32%),\n                  radial-gradient(circle at center, transparent 50%, rgba(0,0,0,0.2) 51%, transparent 52%),\n                  radial-gradient(circle at center, transparent 70%, rgba(0,0,0,0.3) 71%, transparent 72%),\n                  radial-gradient(circle at center, transparent 88%, rgba(0,0,0,0.2) 89%, transparent 90%)\n                `,\n              }}\n            />\n            <div\n              className=\"rfp-absolute rfp-rounded-full\"\n              style={{\n                width: '14%',\n                height: '14%',\n                top: '43%',\n                left: '43%',\n                background: 'radial-gradient(circle at 40% 40%, #333, #0d0d0d)',\n                boxShadow: 'inset 0 1px 3px rgba(0,0,0,0.9), 0 0 2px rgba(0,0,0,0.5)',\n              }}\n            />\n          </div>\n\n          {isLoading && (\n            <motion.div\n              className=\"rfp-absolute rfp-inset-0 rfp-rounded-full\"\n              style={{ border: '2px solid rgba(129,140,248,0.3)' }}\n              animate={{ scale: [1, 1.02, 1], opacity: [0.3, 0.6, 0.3] }}\n              transition={{ duration: 1.5, repeat: Infinity }}\n            />\n          )}\n        </div>\n\n        {/* 唱臂 */}\n        <Tonearm isPlaying={isPlaying} />\n      </div>\n\n      {/* 文件名 */}\n      <div className={`rfp-text-center rfp-max-w-md rfp-flex-shrink-0 ${isCompact ? 'rfp-px-2' : 'rfp-px-4'}`}>\n        <MarqueeText\n          text={fileName}\n          className={`rfp-font-medium rfp-text-fg-primary ${isCompact ? 'rfp-text-sm' : 'rfp-text-lg'}`}\n        />\n      </div>\n\n      {/* 控制面板 wrapper：按容器宽度整体缩放，保底视觉宽度 320px */}\n      <div\n        className=\"rfp-w-full rfp-flex rfp-justify-center rfp-flex-shrink-0\"\n      >\n        <div\n          className={`rfp-rounded-2xl rfp-border rfp-bg-surface-1 rfp-border-line-weak ${\n            isCompact ? 'rfp-p-3' : 'rfp-p-5'\n          }`}\n          style={{\n            width: '448px',\n            backdropFilter: 'blur(16px)',\n            transform: controlScale < 1 ? `scale(${controlScale})` : undefined,\n            transformOrigin: 'top center',\n            marginBottom: controlScale < 1 ? `${-(1 - controlScale) * 100}px` : undefined,\n          }}\n        >\n        {/* 进度条 */}\n        <div className={isCompact ? 'rfp-mb-3' : 'rfp-mb-5'}>\n          <div className=\"rfp-relative rfp-h-4 rfp-flex rfp-items-center\">\n            <div className=\"rfp-absolute rfp-w-full rfp-h-[5px] rfp-rounded-full rfp-bg-surface-2\" />\n            <div\n              className=\"rfp-absolute rfp-h-[5px] rfp-rounded-full rfp-pointer-events-none\"\n              style={{\n                width: `${progress * 100}%`,\n                background: 'linear-gradient(90deg, var(--fp-accent), var(--fp-accent-hover))',\n                boxShadow: isPlaying ? '0 0 8px rgba(129,140,248,0.4)' : 'none',\n                transition: isDragging ? 'none' : 'width 0.1s linear',\n              }}\n            />\n            <input\n              type=\"range\"\n              min=\"0\"\n              max={duration > 0 ? duration : currentTime || 100}\n              step=\"any\"\n              value={displayTime}\n              onPointerDown={() => {\n                setDragTime(currentTime);\n                setIsDragging(true);\n              }}\n              onChange={(e) => {\n                const value = parseFloat(e.target.value);\n                if (isDragging) {\n                  setDragTime(value);\n                } else {\n                  seek(value);\n                }\n              }}\n              onPointerUp={(e) => {\n                const value = parseFloat((e.target as HTMLInputElement).value);\n                seek(value);\n                setIsDragging(false);\n              }}\n              onPointerCancel={() => setIsDragging(false)}\n              disabled={duration <= 0}\n              aria-label={t('audio.aria.progress')}\n              className=\"audio-slider rfp-absolute rfp-w-full\"\n            />\n          </div>\n          <div className={`rfp-flex rfp-justify-between rfp-text-fg-tertiary ${isCompact ? 'rfp-text-[10px] rfp-mt-1.5' : 'rfp-text-xs rfp-mt-2.5'}`}>\n            <span style={{ fontVariantNumeric: 'tabular-nums' }}>{formatTime(displayTime)}</span>\n            <span style={{ fontVariantNumeric: 'tabular-nums' }}>{duration > 0 ? formatTime(duration) : '--:--'}</span>\n          </div>\n        </div>\n\n        {/* 控制按钮 */}\n        <div className={`rfp-flex rfp-items-center rfp-justify-center ${isCompact ? 'rfp-gap-2' : 'rfp-gap-3'}`}>\n          {/* 循环 */}\n          <motion.button\n            onClick={toggleLoop}\n            whileHover={{ scale: 1.1 }}\n            whileTap={{ scale: 0.92 }}\n            aria-label={isLoop ? t('audio.aria.loop_off') : t('audio.aria.loop_on')}\n            className={`rfp-rounded-full rfp-flex rfp-items-center rfp-justify-center rfp-transition-colors rfp-flex-shrink-0 ${\n              isCompact ? 'rfp-w-8 rfp-h-8' : 'rfp-w-9 rfp-h-9'\n            } ${\n              isLoop\n                ? 'rfp-bg-accent-soft rfp-text-accent'\n                : 'rfp-bg-surface-2 rfp-text-fg-tertiary'\n            }`}\n          >\n            <Repeat className={isCompact ? 'rfp-w-3.5 rfp-h-3.5' : 'rfp-w-4 rfp-h-4'} />\n          </motion.button>\n\n          {/* 后退 */}\n          <motion.button\n            onClick={() => skip(-10)}\n            whileHover={{ scale: 1.1 }}\n            whileTap={{ scale: 0.92 }}\n            aria-label={t('audio.aria.backward_10')}\n            className={`rfp-rounded-full rfp-flex rfp-items-center rfp-justify-center rfp-transition-colors rfp-bg-surface-2 rfp-text-fg-secondary rfp-flex-shrink-0 ${\n              isCompact ? 'rfp-w-9 rfp-h-9' : 'rfp-w-10 rfp-h-10'\n            }`}\n          >\n            <SkipBack className={isCompact ? 'rfp-w-4 rfp-h-4' : 'rfp-w-[18px] rfp-h-[18px]'} />\n          </motion.button>\n\n          {/* 播放/暂停 */}\n          <motion.button\n            onClick={togglePlay}\n            whileHover={{ scale: 1.06 }}\n            whileTap={{ scale: 0.94 }}\n            aria-label={isPlaying ? t('audio.aria.pause') : t('audio.aria.play')}\n            className={`rfp-rounded-full rfp-flex rfp-items-center rfp-justify-center rfp-flex-shrink-0 ${\n              isCompact ? 'rfp-w-12 rfp-h-12' : 'rfp-w-14 rfp-h-14'\n            }`}\n            style={{\n              background: 'linear-gradient(135deg, var(--fp-accent-hover), var(--fp-accent))',\n              color: '#fff',\n              boxShadow: '0 4px 20px rgba(99,102,241,0.35)',\n            }}\n          >\n            {isPlaying ? (\n              <Pause className={isCompact ? 'rfp-w-5 rfp-h-5' : 'rfp-w-6 rfp-h-6'} />\n            ) : (\n              <Play className={isCompact ? 'rfp-w-5 rfp-h-5 rfp-ml-0.5' : 'rfp-w-6 rfp-h-6 rfp-ml-0.5'} />\n            )}\n          </motion.button>\n\n          {/* 前进 */}\n          <motion.button\n            onClick={() => skip(10)}\n            whileHover={{ scale: 1.1 }}\n            whileTap={{ scale: 0.92 }}\n            aria-label={t('audio.aria.forward_10')}\n            className={`rfp-rounded-full rfp-flex rfp-items-center rfp-justify-center rfp-transition-colors rfp-bg-surface-2 rfp-text-fg-secondary rfp-flex-shrink-0 ${\n              isCompact ? 'rfp-w-9 rfp-h-9' : 'rfp-w-10 rfp-h-10'\n            }`}\n          >\n            <SkipForward className={isCompact ? 'rfp-w-4 rfp-h-4' : 'rfp-w-[18px] rfp-h-[18px]'} />\n          </motion.button>\n\n          {/* 音量 */}\n          <div\n            ref={volumeRef}\n            className=\"rfp-relative\"\n            onMouseEnter={handleVolumeEnter}\n            onMouseLeave={handleVolumeLeave}\n          >\n            <motion.button\n              onClick={toggleMute}\n              whileHover={{ scale: 1.1 }}\n              whileTap={{ scale: 0.92 }}\n              aria-label={isMuted ? t('audio.aria.unmute') : t('audio.aria.mute')}\n              className={`rfp-rounded-full rfp-flex rfp-items-center rfp-justify-center rfp-transition-colors rfp-flex-shrink-0 ${\n                isCompact ? 'rfp-w-8 rfp-h-8' : 'rfp-w-9 rfp-h-9'\n              } ${\n                showVolume\n                  ? 'rfp-bg-accent-soft rfp-text-accent'\n                  : 'rfp-bg-surface-2 rfp-text-fg-secondary'\n              }`}\n            >\n              <VolumeIcon className={isCompact ? 'rfp-w-3.5 rfp-h-3.5' : 'rfp-w-4 rfp-h-4'} />\n            </motion.button>\n\n            <AnimatePresence>\n              {showVolume && (\n                <motion.div\n                  initial={{ opacity: 0, scale: 0.95 }}\n                  animate={{ opacity: 1, scale: 1 }}\n                  exit={{ opacity: 0, scale: 0.95 }}\n                  transition={{ duration: 0.12 }}\n                  className=\"rfp-absolute rfp-bottom-full rfp-mb-2 rfp-rounded-xl rfp-p-3 rfp-border rfp-bg-surface-3 rfp-border-line\"\n                  style={{\n                    left: '50%',\n                    marginLeft: '-27px',\n                    backdropFilter: 'blur(16px)',\n                  }}\n                  onMouseEnter={handleVolumeEnter}\n                  onMouseLeave={handleVolumeLeave}\n                >\n                  <div className=\"rfp-flex rfp-flex-col rfp-items-center rfp-gap-2\" style={{ height: '100px' }}>\n                    <div className=\"rfp-relative rfp-flex rfp-items-center rfp-justify-center\" style={{ width: '24px', height: '80px' }}>\n                      <div\n                        className=\"rfp-absolute rfp-rounded-full rfp-bg-surface-2\"\n                        style={{ width: '3px', height: '100%' }}\n                      />\n                      <div\n                        className=\"rfp-absolute rfp-bottom-0 rfp-rounded-full rfp-pointer-events-none\"\n                        style={{\n                          width: '3px',\n                          height: `${(isMuted ? 0 : volume) * 100}%`,\n                          background: 'var(--fp-accent-hover)',\n                          transition: 'height 0.1s linear',\n                        }}\n                      />\n                      <input\n                        type=\"range\"\n                        min=\"0\"\n                        max=\"1\"\n                        step=\"0.01\"\n                        value={isMuted ? 0 : volume}\n                        onChange={(e) => setVolume(parseFloat(e.target.value))}\n                        aria-label={t('audio.aria.volume')}\n                        className=\"volume-slider-vertical rfp-absolute\"\n                        style={{\n                          width: '80px',\n                          height: '24px',\n                          transform: 'rotate(-90deg)',\n                          transformOrigin: 'center center',\n                        }}\n                      />\n                    </div>\n                    <span className=\"rfp-text-[10px] rfp-tabular-nums rfp-text-fg-tertiary\">\n                      {Math.round((isMuted ? 0 : volume) * 100)}\n                    </span>\n                  </div>\n                </motion.div>\n              )}\n            </AnimatePresence>\n          </div>\n        </div>\n      </div>\n      {/* wrapper 闭合 */}\n      </div>\n\n      <audio ref={audioRef} src={url} className=\"rfp-hidden\" />\n    </div>\n  );\n});\n","import { useState, useEffect } from 'react';\nimport { codeToHtml, type ShikiTransformer } from 'shiki';\nimport { useResolvedTheme } from '../ThemeContext';\n\n/**\n * 用 shiki 把代码高亮成 HTML（与 vue-file-preview 同引擎、同主题，保证两端视觉一致）。\n *\n * - dark 主题用 `dark-plus`（VSCode Dark Plus）\n * - light 主题用 `github-light`（GitHub Light）\n *\n * shiki 输出的 <pre> 自带 inline 背景/前景色，主题切换时必须重新高亮，\n * 因此 resolvedTheme 进入依赖数组。\n *\n * @returns\n *  - `html`: 完整的 shiki 输出 HTML（含 pre/code 包裹），markdown 等场景使用\n *  - `lineHtmls`: 拆分后的每一行 HTML（用于双列行号布局）\n *  - `loading`: 是否正在高亮\n */\nexport function useShikiHighlight(\n  code: string,\n  lang: string,\n): { html: string; lineHtmls: string[]; loading: boolean } {\n  const resolvedTheme = useResolvedTheme();\n  const [html, setHtml] = useState('');\n  const [lineHtmls, setLineHtmls] = useState<string[]>([]);\n  const [loading, setLoading] = useState(true);\n\n  useEffect(() => {\n    let cancelled = false;\n    setLoading(true);\n\n    const lineNumbersTransformer: ShikiTransformer = {\n      name: 'line-numbers',\n      line(node, line) {\n        node.properties['data-line'] = line;\n        this.addClassToHast(node, 'line');\n      },\n    };\n\n    codeToHtml(code, {\n      lang,\n      theme: resolvedTheme === 'light' ? 'github-light' : 'dark-plus',\n      transformers: [lineNumbersTransformer],\n    })\n      .then((out) => {\n        if (!cancelled) {\n          setHtml(out);\n          setLineHtmls(extractLines(out));\n          setLoading(false);\n        }\n      })\n      .catch(() => {\n        if (!cancelled) {\n          setHtml('');\n          setLineHtmls([]);\n          setLoading(false);\n        }\n      });\n    return () => {\n      cancelled = true;\n    };\n  }, [code, lang, resolvedTheme]);\n\n  return { html, lineHtmls, loading };\n}\n\n/**\n * 从 shiki 输出的 HTML 中提取每一行的内容（保留高亮标签）\n */\nfunction extractLines(html: string): string[] {\n  if (typeof window === 'undefined' || !html) return [];\n  const parser = new DOMParser();\n  const doc = parser.parseFromString(html, 'text/html');\n  const codeElement = doc.querySelector('code');\n  if (!codeElement) return [];\n  const lineElements = codeElement.querySelectorAll('.line');\n  return Array.from(lineElements).map((line) => line.innerHTML);\n}\n","import { useState, useEffect, useCallback, forwardRef, useImperativeHandle, useRef } from 'react';\nimport ReactMarkdown from 'react-markdown';\nimport remarkGfm from 'remark-gfm';\nimport remarkMath from 'remark-math';\nimport rehypeKatex from 'rehype-katex';\nimport rehypeRaw from 'rehype-raw';\nimport { Copy, Check, Eye, Code } from 'lucide-react';\nimport { fetchTextUtf8 } from '@eternalheart/file-preview-core';\nimport { useTranslator } from '../../i18n/LocaleContext';\nimport { useFetcher } from '../../RequestContext';\nimport { useShikiHighlight } from '../../hooks/useShikiHighlight';\nimport { RendererError } from '../RendererError';\nimport type { RendererHandle } from '../base.types';\nimport type { ToolbarGroup } from '../toolbar.types';\nimport 'katex/dist/katex.min.css';\n\ninterface MarkdownRendererProps {\n  url: string;\n}\n\nconst useCopy = (text: string) => {\n  const [copied, setCopied] = useState(false);\n  const handleCopy = useCallback(async () => {\n    try {\n      await navigator.clipboard.writeText(text);\n    } catch {\n      const textarea = document.createElement('textarea');\n      textarea.value = text;\n      document.body.appendChild(textarea);\n      textarea.select();\n      document.execCommand('copy');\n      document.body.removeChild(textarea);\n    }\n    setCopied(true);\n    setTimeout(() => setCopied(false), 2000);\n  }, [text]);\n  return { copied, handleCopy };\n};\n\n/** 内联版复制按钮：放在代码块 header 行内，始终可见 */\nconst InlineCopyButton = ({ text }: { text: string }) => {\n  const t = useTranslator();\n  const { copied, handleCopy } = useCopy(text);\n  return (\n    <button\n      onClick={handleCopy}\n      className=\"rfp-p-1 rfp-rounded rfp-text-fg-muted hover:rfp-text-fg-secondary rfp-transition-colors rfp-flex rfp-items-center rfp-gap-1\"\n      title={copied ? t('markdown.copied') : t('markdown.copy_code')}\n    >\n      {copied ? <Check size={13} /> : <Copy size={13} />}\n    </button>\n  );\n};\n\n/** 浮动版复制按钮：无 header 时绝对定位于代码块右上角（hover 显示） */\nconst FloatingCopyButton = ({ text }: { text: string }) => {\n  const t = useTranslator();\n  const { copied, handleCopy } = useCopy(text);\n  return (\n    <button\n      onClick={handleCopy}\n      className=\"rfp-absolute rfp-top-2 rfp-right-2 rfp-p-1.5 rfp-rounded-md rfp-bg-surface-2 hover:rfp-bg-surface-3 rfp-text-fg-tertiary hover:rfp-text-fg-secondary rfp-transition-colors rfp-opacity-0 group-hover:rfp-opacity-100 rfp-border rfp-border-line\"\n      title={copied ? t('markdown.copied') : t('markdown.copy_code')}\n    >\n      {copied ? <Check size={14} /> : <Copy size={14} />}\n    </button>\n  );\n};\n\n/** 带语言标注的代码块：shiki 高亮 + header + 复制按钮 */\nconst ShikiCodeBlock = ({ code, lang }: { code: string; lang: string }) => {\n  const { html } = useShikiHighlight(code, lang);\n  return (\n    <div className=\"rfp-relative rfp-group rfp-my-4\">\n      <div className=\"rfp-flex rfp-items-center rfp-justify-between rfp-px-4 rfp-py-1.5 rfp-bg-surface-1 rfp-border rfp-border-line-weak rfp-rounded-t-md rfp-border-b-0\">\n        <span className=\"rfp-text-xs rfp-text-fg-secondary rfp-font-mono rfp-select-none\">{lang}</span>\n        <InlineCopyButton text={code} />\n      </div>\n      {html ? (\n        <div\n          className=\"rfp-shiki-wrapper rfp-rounded-b-md rfp-border rfp-border-line-weak rfp-border-t-0 rfp-overflow-x-auto\"\n          dangerouslySetInnerHTML={{ __html: html }}\n        />\n      ) : (\n        <pre\n          className=\"rfp-m-0 rfp-rounded-b-md rfp-border rfp-border-line-weak rfp-border-t-0 rfp-overflow-x-auto rfp-p-4 rfp-bg-code-bg\"\n          style={{ fontSize: '13px', lineHeight: '1.5' }}\n        >\n          <code className=\"rfp-font-mono rfp-text-code-fg rfp-text-sm\">{code}</code>\n        </pre>\n      )}\n    </div>\n  );\n};\n\nexport const MarkdownRenderer = forwardRef<RendererHandle, MarkdownRendererProps>(({ url }, ref) => {\n  const t = useTranslator();\n  const fetcher = useFetcher();\n\n  // 内部状态管理\n  const [content, setContent] = useState<string>('');\n  const [loading, setLoading] = useState(true);\n  const [error, setError] = useState<string | null>(null);\n  const [viewMode, setViewMode] = useState<'preview' | 'source'>('preview');\n\n  const { html: sourceHtml } = useShikiHighlight(\n    viewMode === 'source' ? content : '',\n    'markdown',\n  );\n\n  useEffect(() => {\n    const controller = new AbortController();\n    const loadMarkdown = async () => {\n      try {\n        setLoading(true);\n        setError(null);\n        const text = await fetchTextUtf8(url, { fetcher, signal: controller.signal });\n        setContent(text);\n      } catch (err: any) {\n        if (err.name === 'AbortError') return;\n        setError(t('markdown.load_failed'));\n        console.error(err);\n      } finally {\n        setLoading(false);\n      }\n    };\n\n    loadMarkdown();\n    return () => controller.abort();\n  }, [url, fetcher, t]);\n\n  // 事件发射器：用于通知主组件工具栏状态变化\n  const listenersRef = useRef<Set<() => void>>(new Set());\n  const notifyToolbarChange = useCallback(() => {\n    listenersRef.current.forEach(listener => listener());\n  }, []);\n\n  // 监听影响工具栏的状态变化\n  useEffect(() => {\n    notifyToolbarChange();\n  }, [viewMode, notifyToolbarChange]);\n\n  // 切换视图模式\n  const toggleViewMode = useCallback(() => {\n    setViewMode(prev => prev === 'preview' ? 'source' : 'preview');\n  }, []);\n\n  // 工具栏配置\n  const getToolbarGroups = useCallback((): ToolbarGroup[] => [\n    {\n      items: [\n        {\n          type: 'button',\n          icon: viewMode === 'preview' ? <Code className=\"rfp-w-4 rfp-h-4\" /> : <Eye className=\"rfp-w-4 rfp-h-4\" />,\n          tooltip: viewMode === 'preview' ? t('toolbar.source') : t('toolbar.preview'),\n          action: toggleViewMode,\n          active: viewMode === 'source',\n        },\n      ],\n    },\n  ], [viewMode, t, toggleViewMode]);\n\n  // 暴露接口给父组件\n  useImperativeHandle(ref, () => ({\n    getToolbarGroups,\n    onToolbarChange: (listener: () => void) => {\n      listenersRef.current.add(listener);\n      return () => listenersRef.current.delete(listener);\n    },\n  }), [getToolbarGroups]);\n\n  if (loading) {\n    return (\n      <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full\">\n        <div className=\"rfp-w-12 rfp-h-12 rfp-border-4 rfp-border-line-strong rfp-border-t-spinner-head rfp-rounded-full rfp-animate-spin\" />\n      </div>\n    );\n  }\n\n  if (error) {\n    return <RendererError message={error} />;\n  }\n\n  // 源码视图\n  if (viewMode === 'source') {\n    return (\n      <div className=\"rfp-w-full rfp-h-full rfp-overflow-auto rfp-bg-code-bg\">\n        {sourceHtml ? (\n          <div\n            className=\"rfp-shiki-wrapper with-line-numbers\"\n            dangerouslySetInnerHTML={{ __html: sourceHtml }}\n          />\n        ) : (\n          <pre className=\"rfp-p-6 rfp-text-fg-primary rfp-font-mono rfp-text-sm rfp-whitespace-pre-wrap rfp-break-words\">\n            {content}\n          </pre>\n        )}\n      </div>\n    );\n  }\n\n  // 预览视图\n  return (\n    <div className=\"rfp-w-full rfp-h-full rfp-overflow-auto rfp-py-6 rfp-px-4\">\n      <ReactMarkdown\n            remarkPlugins={[remarkGfm, remarkMath]}\n            rehypePlugins={[rehypeRaw, rehypeKatex]}\n            components={{\n              code({ node: _node, inline, className, children, ...props }: any) {\n                const match = /language-(\\w+)/.exec(className || '');\n                const codeString = String(children).replace(/\\n$/, '');\n                // react-markdown v9 不再传 inline，需要兜底判断：\n                // 无语言 className 且不含换行视为内联代码\n                const isInline = inline ?? (!match && !codeString.includes('\\n'));\n\n                // 行内代码 - 返回纯 <code>\n                if (isInline) {\n                  return (\n                    <code\n                      className=\"rfp-bg-surface-2 rfp-px-1.5 rfp-py-0.5 rfp-rounded rfp-text-sm rfp-font-mono rfp-text-fg-primary rfp-border rfp-border-line-weak\"\n                      {...props}\n                    >\n                      {children}\n                    </code>\n                  );\n                }\n\n                // 代码块 - 有语言标注\n                if (match) {\n                  return <ShikiCodeBlock code={codeString} lang={match[1]} />;\n                }\n\n                // 代码块 - 无语言标注\n                return (\n                  <div className=\"rfp-relative rfp-group rfp-my-4\">\n                    <FloatingCopyButton text={codeString} />\n                    <pre\n                      className=\"rfp-m-0 rfp-rounded-md rfp-border rfp-border-line-weak rfp-overflow-x-auto rfp-p-4 rfp-bg-code-bg\"\n                      style={{ fontSize: '13px', lineHeight: '1.5' }}\n                    >\n                      <code className=\"rfp-font-mono rfp-text-code-fg rfp-text-sm\">{children}</code>\n                    </pre>\n                  </div>\n                );\n              },\n              h1: ({ children }) => (\n                <h1 className=\"rfp-text-3xl rfp-font-semibold rfp-mb-4 rfp-mt-6 rfp-text-fg-primary first:rfp-mt-0\">\n                  {children}\n                </h1>\n              ),\n              h2: ({ children }) => (\n                <h2 className=\"rfp-text-2xl rfp-font-semibold rfp-mb-3 rfp-mt-8 rfp-text-fg-primary\">\n                  {children}\n                </h2>\n              ),\n              h3: ({ children }) => (\n                <h3 className=\"rfp-text-xl rfp-font-semibold rfp-mb-2 rfp-mt-6 rfp-text-fg-primary\">{children}</h3>\n              ),\n              h4: ({ children }) => (\n                <h4 className=\"rfp-text-lg rfp-font-semibold rfp-mb-2 rfp-mt-4 rfp-text-fg-primary\">{children}</h4>\n              ),\n              p: ({ children }) => (\n                <p className=\"rfp-text-fg-secondary rfp-mb-4 rfp-leading-7 rfp-text-base\">{children}</p>\n              ),\n              a: ({ href, children }) => (\n                <a\n                  href={href}\n                  className=\"rfp-text-indigo-400 hover:rfp-text-indigo-300 rfp-underline rfp-decoration-indigo-600 hover:rfp-decoration-indigo-400\"\n                  target=\"_blank\"\n                  rel=\"noopener noreferrer\"\n                >\n                  {children}\n                </a>\n              ),\n              ul: ({ children }) => (\n                <ul className=\"rfp-list-disc rfp-pl-6 rfp-mb-4 rfp-text-fg-secondary rfp-space-y-1\">{children}</ul>\n              ),\n              ol: ({ children }) => (\n                <ol className=\"rfp-list-decimal rfp-pl-6 rfp-mb-4 rfp-text-fg-secondary rfp-space-y-1\">{children}</ol>\n              ),\n              li: ({ children }) => <li className=\"rfp-leading-7\">{children}</li>,\n              blockquote: ({ children }) => (\n                <blockquote className=\"rfp-border-l-4 rfp-border-line-strong rfp-pl-4 rfp-text-fg-tertiary rfp-my-4 rfp-italic\">\n                  {children}\n                </blockquote>\n              ),\n              table: ({ children }) => (\n                <div className=\"rfp-overflow-x-auto rfp-my-4 rfp-rounded-md rfp-border rfp-border-line\">\n                  <table className=\"rfp-min-w-full rfp-divide-y rfp-divide-divide\">{children}</table>\n                </div>\n              ),\n              thead: ({ children }) => <thead className=\"rfp-bg-surface-1\">{children}</thead>,\n              tbody: ({ children }) => (\n                <tbody className=\"rfp-divide-y rfp-divide-divide rfp-bg-transparent\">{children}</tbody>\n              ),\n              tr: ({ children }) => (\n                <tr className=\"hover:rfp-bg-surface-1 rfp-transition-colors\">{children}</tr>\n              ),\n              th: ({ children }) => (\n                <th className=\"rfp-px-4 rfp-py-3 rfp-text-left rfp-text-xs rfp-font-semibold rfp-text-fg-tertiary rfp-uppercase rfp-tracking-wider\">\n                  {children}\n                </th>\n              ),\n              td: ({ children }) => (\n                <td className=\"rfp-px-4 rfp-py-3 rfp-text-sm rfp-text-fg-secondary\">{children}</td>\n              ),\n              hr: () => <hr className=\"rfp-border-line rfp-my-6\" />,\n              img: ({ src, alt }) => (\n                <img\n                  src={src}\n                  alt={alt}\n                  className=\"rfp-rounded-md rfp-max-w-full rfp-h-auto rfp-my-4 rfp-mx-auto rfp-block rfp-shadow-sm\"\n                />\n              ),\n              input: ({ type, checked, ...props }) => {\n                if (type === 'checkbox') {\n                  return (\n                    <input\n                      type=\"checkbox\"\n                      checked={checked}\n                      readOnly\n                      className=\"rfp-mr-2 rfp-rounded rfp-border-line\"\n                      {...props}\n                    />\n                  );\n                }\n                return <input type={type} {...props} />;\n              },\n              strong: ({ children }) => (\n                <strong className=\"rfp-font-semibold rfp-text-fg-primary\">{children}</strong>\n              ),\n              em: ({ children }) => <em className=\"rfp-italic\">{children}</em>,\n              del: ({ children }) => (\n                <del className=\"rfp-text-fg-muted rfp-line-through\">{children}</del>\n              ),\n            }}\n          >\n            {content}\n          </ReactMarkdown>\n    </div>\n  );\n});\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n'use strict';\n/**\n * Creates a JSON scanner on the given text.\n * If ignoreTrivia is set, whitespaces or comments are ignored.\n */\nexport function createScanner(text, ignoreTrivia = false) {\n    const len = text.length;\n    let pos = 0, value = '', tokenOffset = 0, token = 16 /* SyntaxKind.Unknown */, lineNumber = 0, lineStartOffset = 0, tokenLineStartOffset = 0, prevTokenLineStartOffset = 0, scanError = 0 /* ScanError.None */;\n    function scanHexDigits(count, exact) {\n        let digits = 0;\n        let value = 0;\n        while (digits < count || !exact) {\n            let ch = text.charCodeAt(pos);\n            if (ch >= 48 /* CharacterCodes._0 */ && ch <= 57 /* CharacterCodes._9 */) {\n                value = value * 16 + ch - 48 /* CharacterCodes._0 */;\n            }\n            else if (ch >= 65 /* CharacterCodes.A */ && ch <= 70 /* CharacterCodes.F */) {\n                value = value * 16 + ch - 65 /* CharacterCodes.A */ + 10;\n            }\n            else if (ch >= 97 /* CharacterCodes.a */ && ch <= 102 /* CharacterCodes.f */) {\n                value = value * 16 + ch - 97 /* CharacterCodes.a */ + 10;\n            }\n            else {\n                break;\n            }\n            pos++;\n            digits++;\n        }\n        if (digits < count) {\n            value = -1;\n        }\n        return value;\n    }\n    function setPosition(newPosition) {\n        pos = newPosition;\n        value = '';\n        tokenOffset = 0;\n        token = 16 /* SyntaxKind.Unknown */;\n        scanError = 0 /* ScanError.None */;\n    }\n    function scanNumber() {\n        let start = pos;\n        if (text.charCodeAt(pos) === 48 /* CharacterCodes._0 */) {\n            pos++;\n        }\n        else {\n            pos++;\n            while (pos < text.length && isDigit(text.charCodeAt(pos))) {\n                pos++;\n            }\n        }\n        if (pos < text.length && text.charCodeAt(pos) === 46 /* CharacterCodes.dot */) {\n            pos++;\n            if (pos < text.length && isDigit(text.charCodeAt(pos))) {\n                pos++;\n                while (pos < text.length && isDigit(text.charCodeAt(pos))) {\n                    pos++;\n                }\n            }\n            else {\n                scanError = 3 /* ScanError.UnexpectedEndOfNumber */;\n                return text.substring(start, pos);\n            }\n        }\n        let end = pos;\n        if (pos < text.length && (text.charCodeAt(pos) === 69 /* CharacterCodes.E */ || text.charCodeAt(pos) === 101 /* CharacterCodes.e */)) {\n            pos++;\n            if (pos < text.length && text.charCodeAt(pos) === 43 /* CharacterCodes.plus */ || text.charCodeAt(pos) === 45 /* CharacterCodes.minus */) {\n                pos++;\n            }\n            if (pos < text.length && isDigit(text.charCodeAt(pos))) {\n                pos++;\n                while (pos < text.length && isDigit(text.charCodeAt(pos))) {\n                    pos++;\n                }\n                end = pos;\n            }\n            else {\n                scanError = 3 /* ScanError.UnexpectedEndOfNumber */;\n            }\n        }\n        return text.substring(start, end);\n    }\n    function scanString() {\n        let result = '', start = pos;\n        while (true) {\n            if (pos >= len) {\n                result += text.substring(start, pos);\n                scanError = 2 /* ScanError.UnexpectedEndOfString */;\n                break;\n            }\n            const ch = text.charCodeAt(pos);\n            if (ch === 34 /* CharacterCodes.doubleQuote */) {\n                result += text.substring(start, pos);\n                pos++;\n                break;\n            }\n            if (ch === 92 /* CharacterCodes.backslash */) {\n                result += text.substring(start, pos);\n                pos++;\n                if (pos >= len) {\n                    scanError = 2 /* ScanError.UnexpectedEndOfString */;\n                    break;\n                }\n                const ch2 = text.charCodeAt(pos++);\n                switch (ch2) {\n                    case 34 /* CharacterCodes.doubleQuote */:\n                        result += '\\\"';\n                        break;\n                    case 92 /* CharacterCodes.backslash */:\n                        result += '\\\\';\n                        break;\n                    case 47 /* CharacterCodes.slash */:\n                        result += '/';\n                        break;\n                    case 98 /* CharacterCodes.b */:\n                        result += '\\b';\n                        break;\n                    case 102 /* CharacterCodes.f */:\n                        result += '\\f';\n                        break;\n                    case 110 /* CharacterCodes.n */:\n                        result += '\\n';\n                        break;\n                    case 114 /* CharacterCodes.r */:\n                        result += '\\r';\n                        break;\n                    case 116 /* CharacterCodes.t */:\n                        result += '\\t';\n                        break;\n                    case 117 /* CharacterCodes.u */:\n                        const ch3 = scanHexDigits(4, true);\n                        if (ch3 >= 0) {\n                            result += String.fromCharCode(ch3);\n                        }\n                        else {\n                            scanError = 4 /* ScanError.InvalidUnicode */;\n                        }\n                        break;\n                    default:\n                        scanError = 5 /* ScanError.InvalidEscapeCharacter */;\n                }\n                start = pos;\n                continue;\n            }\n            if (ch >= 0 && ch <= 0x1f) {\n                if (isLineBreak(ch)) {\n                    result += text.substring(start, pos);\n                    scanError = 2 /* ScanError.UnexpectedEndOfString */;\n                    break;\n                }\n                else {\n                    scanError = 6 /* ScanError.InvalidCharacter */;\n                    // mark as error but continue with string\n                }\n            }\n            pos++;\n        }\n        return result;\n    }\n    function scanNext() {\n        value = '';\n        scanError = 0 /* ScanError.None */;\n        tokenOffset = pos;\n        lineStartOffset = lineNumber;\n        prevTokenLineStartOffset = tokenLineStartOffset;\n        if (pos >= len) {\n            // at the end\n            tokenOffset = len;\n            return token = 17 /* SyntaxKind.EOF */;\n        }\n        let code = text.charCodeAt(pos);\n        // trivia: whitespace\n        if (isWhiteSpace(code)) {\n            do {\n                pos++;\n                value += String.fromCharCode(code);\n                code = text.charCodeAt(pos);\n            } while (isWhiteSpace(code));\n            return token = 15 /* SyntaxKind.Trivia */;\n        }\n        // trivia: newlines\n        if (isLineBreak(code)) {\n            pos++;\n            value += String.fromCharCode(code);\n            if (code === 13 /* CharacterCodes.carriageReturn */ && text.charCodeAt(pos) === 10 /* CharacterCodes.lineFeed */) {\n                pos++;\n                value += '\\n';\n            }\n            lineNumber++;\n            tokenLineStartOffset = pos;\n            return token = 14 /* SyntaxKind.LineBreakTrivia */;\n        }\n        switch (code) {\n            // tokens: []{}:,\n            case 123 /* CharacterCodes.openBrace */:\n                pos++;\n                return token = 1 /* SyntaxKind.OpenBraceToken */;\n            case 125 /* CharacterCodes.closeBrace */:\n                pos++;\n                return token = 2 /* SyntaxKind.CloseBraceToken */;\n            case 91 /* CharacterCodes.openBracket */:\n                pos++;\n                return token = 3 /* SyntaxKind.OpenBracketToken */;\n            case 93 /* CharacterCodes.closeBracket */:\n                pos++;\n                return token = 4 /* SyntaxKind.CloseBracketToken */;\n            case 58 /* CharacterCodes.colon */:\n                pos++;\n                return token = 6 /* SyntaxKind.ColonToken */;\n            case 44 /* CharacterCodes.comma */:\n                pos++;\n                return token = 5 /* SyntaxKind.CommaToken */;\n            // strings\n            case 34 /* CharacterCodes.doubleQuote */:\n                pos++;\n                value = scanString();\n                return token = 10 /* SyntaxKind.StringLiteral */;\n            // comments\n            case 47 /* CharacterCodes.slash */:\n                const start = pos - 1;\n                // Single-line comment\n                if (text.charCodeAt(pos + 1) === 47 /* CharacterCodes.slash */) {\n                    pos += 2;\n                    while (pos < len) {\n                        if (isLineBreak(text.charCodeAt(pos))) {\n                            break;\n                        }\n                        pos++;\n                    }\n                    value = text.substring(start, pos);\n                    return token = 12 /* SyntaxKind.LineCommentTrivia */;\n                }\n                // Multi-line comment\n                if (text.charCodeAt(pos + 1) === 42 /* CharacterCodes.asterisk */) {\n                    pos += 2;\n                    const safeLength = len - 1; // For lookahead.\n                    let commentClosed = false;\n                    while (pos < safeLength) {\n                        const ch = text.charCodeAt(pos);\n                        if (ch === 42 /* CharacterCodes.asterisk */ && text.charCodeAt(pos + 1) === 47 /* CharacterCodes.slash */) {\n                            pos += 2;\n                            commentClosed = true;\n                            break;\n                        }\n                        pos++;\n                        if (isLineBreak(ch)) {\n                            if (ch === 13 /* CharacterCodes.carriageReturn */ && text.charCodeAt(pos) === 10 /* CharacterCodes.lineFeed */) {\n                                pos++;\n                            }\n                            lineNumber++;\n                            tokenLineStartOffset = pos;\n                        }\n                    }\n                    if (!commentClosed) {\n                        pos++;\n                        scanError = 1 /* ScanError.UnexpectedEndOfComment */;\n                    }\n                    value = text.substring(start, pos);\n                    return token = 13 /* SyntaxKind.BlockCommentTrivia */;\n                }\n                // just a single slash\n                value += String.fromCharCode(code);\n                pos++;\n                return token = 16 /* SyntaxKind.Unknown */;\n            // numbers\n            case 45 /* CharacterCodes.minus */:\n                value += String.fromCharCode(code);\n                pos++;\n                if (pos === len || !isDigit(text.charCodeAt(pos))) {\n                    return token = 16 /* SyntaxKind.Unknown */;\n                }\n            // found a minus, followed by a number so\n            // we fall through to proceed with scanning\n            // numbers\n            case 48 /* CharacterCodes._0 */:\n            case 49 /* CharacterCodes._1 */:\n            case 50 /* CharacterCodes._2 */:\n            case 51 /* CharacterCodes._3 */:\n            case 52 /* CharacterCodes._4 */:\n            case 53 /* CharacterCodes._5 */:\n            case 54 /* CharacterCodes._6 */:\n            case 55 /* CharacterCodes._7 */:\n            case 56 /* CharacterCodes._8 */:\n            case 57 /* CharacterCodes._9 */:\n                value += scanNumber();\n                return token = 11 /* SyntaxKind.NumericLiteral */;\n            // literals and unknown symbols\n            default:\n                // is a literal? Read the full word.\n                while (pos < len && isUnknownContentCharacter(code)) {\n                    pos++;\n                    code = text.charCodeAt(pos);\n                }\n                if (tokenOffset !== pos) {\n                    value = text.substring(tokenOffset, pos);\n                    // keywords: true, false, null\n                    switch (value) {\n                        case 'true': return token = 8 /* SyntaxKind.TrueKeyword */;\n                        case 'false': return token = 9 /* SyntaxKind.FalseKeyword */;\n                        case 'null': return token = 7 /* SyntaxKind.NullKeyword */;\n                    }\n                    return token = 16 /* SyntaxKind.Unknown */;\n                }\n                // some\n                value += String.fromCharCode(code);\n                pos++;\n                return token = 16 /* SyntaxKind.Unknown */;\n        }\n    }\n    function isUnknownContentCharacter(code) {\n        if (isWhiteSpace(code) || isLineBreak(code)) {\n            return false;\n        }\n        switch (code) {\n            case 125 /* CharacterCodes.closeBrace */:\n            case 93 /* CharacterCodes.closeBracket */:\n            case 123 /* CharacterCodes.openBrace */:\n            case 91 /* CharacterCodes.openBracket */:\n            case 34 /* CharacterCodes.doubleQuote */:\n            case 58 /* CharacterCodes.colon */:\n            case 44 /* CharacterCodes.comma */:\n            case 47 /* CharacterCodes.slash */:\n                return false;\n        }\n        return true;\n    }\n    function scanNextNonTrivia() {\n        let result;\n        do {\n            result = scanNext();\n        } while (result >= 12 /* SyntaxKind.LineCommentTrivia */ && result <= 15 /* SyntaxKind.Trivia */);\n        return result;\n    }\n    return {\n        setPosition: setPosition,\n        getPosition: () => pos,\n        scan: ignoreTrivia ? scanNextNonTrivia : scanNext,\n        getToken: () => token,\n        getTokenValue: () => value,\n        getTokenOffset: () => tokenOffset,\n        getTokenLength: () => pos - tokenOffset,\n        getTokenStartLine: () => lineStartOffset,\n        getTokenStartCharacter: () => tokenOffset - prevTokenLineStartOffset,\n        getTokenError: () => scanError,\n    };\n}\nfunction isWhiteSpace(ch) {\n    return ch === 32 /* CharacterCodes.space */ || ch === 9 /* CharacterCodes.tab */;\n}\nfunction isLineBreak(ch) {\n    return ch === 10 /* CharacterCodes.lineFeed */ || ch === 13 /* CharacterCodes.carriageReturn */;\n}\nfunction isDigit(ch) {\n    return ch >= 48 /* CharacterCodes._0 */ && ch <= 57 /* CharacterCodes._9 */;\n}\nvar CharacterCodes;\n(function (CharacterCodes) {\n    CharacterCodes[CharacterCodes[\"lineFeed\"] = 10] = \"lineFeed\";\n    CharacterCodes[CharacterCodes[\"carriageReturn\"] = 13] = \"carriageReturn\";\n    CharacterCodes[CharacterCodes[\"space\"] = 32] = \"space\";\n    CharacterCodes[CharacterCodes[\"_0\"] = 48] = \"_0\";\n    CharacterCodes[CharacterCodes[\"_1\"] = 49] = \"_1\";\n    CharacterCodes[CharacterCodes[\"_2\"] = 50] = \"_2\";\n    CharacterCodes[CharacterCodes[\"_3\"] = 51] = \"_3\";\n    CharacterCodes[CharacterCodes[\"_4\"] = 52] = \"_4\";\n    CharacterCodes[CharacterCodes[\"_5\"] = 53] = \"_5\";\n    CharacterCodes[CharacterCodes[\"_6\"] = 54] = \"_6\";\n    CharacterCodes[CharacterCodes[\"_7\"] = 55] = \"_7\";\n    CharacterCodes[CharacterCodes[\"_8\"] = 56] = \"_8\";\n    CharacterCodes[CharacterCodes[\"_9\"] = 57] = \"_9\";\n    CharacterCodes[CharacterCodes[\"a\"] = 97] = \"a\";\n    CharacterCodes[CharacterCodes[\"b\"] = 98] = \"b\";\n    CharacterCodes[CharacterCodes[\"c\"] = 99] = \"c\";\n    CharacterCodes[CharacterCodes[\"d\"] = 100] = \"d\";\n    CharacterCodes[CharacterCodes[\"e\"] = 101] = \"e\";\n    CharacterCodes[CharacterCodes[\"f\"] = 102] = \"f\";\n    CharacterCodes[CharacterCodes[\"g\"] = 103] = \"g\";\n    CharacterCodes[CharacterCodes[\"h\"] = 104] = \"h\";\n    CharacterCodes[CharacterCodes[\"i\"] = 105] = \"i\";\n    CharacterCodes[CharacterCodes[\"j\"] = 106] = \"j\";\n    CharacterCodes[CharacterCodes[\"k\"] = 107] = \"k\";\n    CharacterCodes[CharacterCodes[\"l\"] = 108] = \"l\";\n    CharacterCodes[CharacterCodes[\"m\"] = 109] = \"m\";\n    CharacterCodes[CharacterCodes[\"n\"] = 110] = \"n\";\n    CharacterCodes[CharacterCodes[\"o\"] = 111] = \"o\";\n    CharacterCodes[CharacterCodes[\"p\"] = 112] = \"p\";\n    CharacterCodes[CharacterCodes[\"q\"] = 113] = \"q\";\n    CharacterCodes[CharacterCodes[\"r\"] = 114] = \"r\";\n    CharacterCodes[CharacterCodes[\"s\"] = 115] = \"s\";\n    CharacterCodes[CharacterCodes[\"t\"] = 116] = \"t\";\n    CharacterCodes[CharacterCodes[\"u\"] = 117] = \"u\";\n    CharacterCodes[CharacterCodes[\"v\"] = 118] = \"v\";\n    CharacterCodes[CharacterCodes[\"w\"] = 119] = \"w\";\n    CharacterCodes[CharacterCodes[\"x\"] = 120] = \"x\";\n    CharacterCodes[CharacterCodes[\"y\"] = 121] = \"y\";\n    CharacterCodes[CharacterCodes[\"z\"] = 122] = \"z\";\n    CharacterCodes[CharacterCodes[\"A\"] = 65] = \"A\";\n    CharacterCodes[CharacterCodes[\"B\"] = 66] = \"B\";\n    CharacterCodes[CharacterCodes[\"C\"] = 67] = \"C\";\n    CharacterCodes[CharacterCodes[\"D\"] = 68] = \"D\";\n    CharacterCodes[CharacterCodes[\"E\"] = 69] = \"E\";\n    CharacterCodes[CharacterCodes[\"F\"] = 70] = \"F\";\n    CharacterCodes[CharacterCodes[\"G\"] = 71] = \"G\";\n    CharacterCodes[CharacterCodes[\"H\"] = 72] = \"H\";\n    CharacterCodes[CharacterCodes[\"I\"] = 73] = \"I\";\n    CharacterCodes[CharacterCodes[\"J\"] = 74] = \"J\";\n    CharacterCodes[CharacterCodes[\"K\"] = 75] = \"K\";\n    CharacterCodes[CharacterCodes[\"L\"] = 76] = \"L\";\n    CharacterCodes[CharacterCodes[\"M\"] = 77] = \"M\";\n    CharacterCodes[CharacterCodes[\"N\"] = 78] = \"N\";\n    CharacterCodes[CharacterCodes[\"O\"] = 79] = \"O\";\n    CharacterCodes[CharacterCodes[\"P\"] = 80] = \"P\";\n    CharacterCodes[CharacterCodes[\"Q\"] = 81] = \"Q\";\n    CharacterCodes[CharacterCodes[\"R\"] = 82] = \"R\";\n    CharacterCodes[CharacterCodes[\"S\"] = 83] = \"S\";\n    CharacterCodes[CharacterCodes[\"T\"] = 84] = \"T\";\n    CharacterCodes[CharacterCodes[\"U\"] = 85] = \"U\";\n    CharacterCodes[CharacterCodes[\"V\"] = 86] = \"V\";\n    CharacterCodes[CharacterCodes[\"W\"] = 87] = \"W\";\n    CharacterCodes[CharacterCodes[\"X\"] = 88] = \"X\";\n    CharacterCodes[CharacterCodes[\"Y\"] = 89] = \"Y\";\n    CharacterCodes[CharacterCodes[\"Z\"] = 90] = \"Z\";\n    CharacterCodes[CharacterCodes[\"asterisk\"] = 42] = \"asterisk\";\n    CharacterCodes[CharacterCodes[\"backslash\"] = 92] = \"backslash\";\n    CharacterCodes[CharacterCodes[\"closeBrace\"] = 125] = \"closeBrace\";\n    CharacterCodes[CharacterCodes[\"closeBracket\"] = 93] = \"closeBracket\";\n    CharacterCodes[CharacterCodes[\"colon\"] = 58] = \"colon\";\n    CharacterCodes[CharacterCodes[\"comma\"] = 44] = \"comma\";\n    CharacterCodes[CharacterCodes[\"dot\"] = 46] = \"dot\";\n    CharacterCodes[CharacterCodes[\"doubleQuote\"] = 34] = \"doubleQuote\";\n    CharacterCodes[CharacterCodes[\"minus\"] = 45] = \"minus\";\n    CharacterCodes[CharacterCodes[\"openBrace\"] = 123] = \"openBrace\";\n    CharacterCodes[CharacterCodes[\"openBracket\"] = 91] = \"openBracket\";\n    CharacterCodes[CharacterCodes[\"plus\"] = 43] = \"plus\";\n    CharacterCodes[CharacterCodes[\"slash\"] = 47] = \"slash\";\n    CharacterCodes[CharacterCodes[\"formFeed\"] = 12] = \"formFeed\";\n    CharacterCodes[CharacterCodes[\"tab\"] = 9] = \"tab\";\n})(CharacterCodes || (CharacterCodes = {}));\n","export const cachedSpaces = new Array(20).fill(0).map((_, index) => {\n    return ' '.repeat(index);\n});\nconst maxCachedValues = 200;\nexport const cachedBreakLinesWithSpaces = {\n    ' ': {\n        '\\n': new Array(maxCachedValues).fill(0).map((_, index) => {\n            return '\\n' + ' '.repeat(index);\n        }),\n        '\\r': new Array(maxCachedValues).fill(0).map((_, index) => {\n            return '\\r' + ' '.repeat(index);\n        }),\n        '\\r\\n': new Array(maxCachedValues).fill(0).map((_, index) => {\n            return '\\r\\n' + ' '.repeat(index);\n        }),\n    },\n    '\\t': {\n        '\\n': new Array(maxCachedValues).fill(0).map((_, index) => {\n            return '\\n' + '\\t'.repeat(index);\n        }),\n        '\\r': new Array(maxCachedValues).fill(0).map((_, index) => {\n            return '\\r' + '\\t'.repeat(index);\n        }),\n        '\\r\\n': new Array(maxCachedValues).fill(0).map((_, index) => {\n            return '\\r\\n' + '\\t'.repeat(index);\n        }),\n    }\n};\nexport const supportedEols = ['\\n', '\\r', '\\r\\n'];\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n'use strict';\nimport { createScanner } from './scanner';\nvar ParseOptions;\n(function (ParseOptions) {\n    ParseOptions.DEFAULT = {\n        allowTrailingComma: false\n    };\n})(ParseOptions || (ParseOptions = {}));\n/**\n * For a given offset, evaluate the location in the JSON document. Each segment in the location path is either a property name or an array index.\n */\nexport function getLocation(text, position) {\n    const segments = []; // strings or numbers\n    const earlyReturnException = new Object();\n    let previousNode = undefined;\n    const previousNodeInst = {\n        value: {},\n        offset: 0,\n        length: 0,\n        type: 'object',\n        parent: undefined\n    };\n    let isAtPropertyKey = false;\n    function setPreviousNode(value, offset, length, type) {\n        previousNodeInst.value = value;\n        previousNodeInst.offset = offset;\n        previousNodeInst.length = length;\n        previousNodeInst.type = type;\n        previousNodeInst.colonOffset = undefined;\n        previousNode = previousNodeInst;\n    }\n    try {\n        visit(text, {\n            onObjectBegin: (offset, length) => {\n                if (position <= offset) {\n                    throw earlyReturnException;\n                }\n                previousNode = undefined;\n                isAtPropertyKey = position > offset;\n                segments.push(''); // push a placeholder (will be replaced)\n            },\n            onObjectProperty: (name, offset, length) => {\n                if (position < offset) {\n                    throw earlyReturnException;\n                }\n                setPreviousNode(name, offset, length, 'property');\n                segments[segments.length - 1] = name;\n                if (position <= offset + length) {\n                    throw earlyReturnException;\n                }\n            },\n            onObjectEnd: (offset, length) => {\n                if (position <= offset) {\n                    throw earlyReturnException;\n                }\n                previousNode = undefined;\n                segments.pop();\n            },\n            onArrayBegin: (offset, length) => {\n                if (position <= offset) {\n                    throw earlyReturnException;\n                }\n                previousNode = undefined;\n                segments.push(0);\n            },\n            onArrayEnd: (offset, length) => {\n                if (position <= offset) {\n                    throw earlyReturnException;\n                }\n                previousNode = undefined;\n                segments.pop();\n            },\n            onLiteralValue: (value, offset, length) => {\n                if (position < offset) {\n                    throw earlyReturnException;\n                }\n                setPreviousNode(value, offset, length, getNodeType(value));\n                if (position <= offset + length) {\n                    throw earlyReturnException;\n                }\n            },\n            onSeparator: (sep, offset, length) => {\n                if (position <= offset) {\n                    throw earlyReturnException;\n                }\n                if (sep === ':' && previousNode && previousNode.type === 'property') {\n                    previousNode.colonOffset = offset;\n                    isAtPropertyKey = false;\n                    previousNode = undefined;\n                }\n                else if (sep === ',') {\n                    const last = segments[segments.length - 1];\n                    if (typeof last === 'number') {\n                        segments[segments.length - 1] = last + 1;\n                    }\n                    else {\n                        isAtPropertyKey = true;\n                        segments[segments.length - 1] = '';\n                    }\n                    previousNode = undefined;\n                }\n            }\n        });\n    }\n    catch (e) {\n        if (e !== earlyReturnException) {\n            throw e;\n        }\n    }\n    return {\n        path: segments,\n        previousNode,\n        isAtPropertyKey,\n        matches: (pattern) => {\n            let k = 0;\n            for (let i = 0; k < pattern.length && i < segments.length; i++) {\n                if (pattern[k] === segments[i] || pattern[k] === '*') {\n                    k++;\n                }\n                else if (pattern[k] !== '**') {\n                    return false;\n                }\n            }\n            return k === pattern.length;\n        }\n    };\n}\n/**\n * Parses the given text and returns the object the JSON content represents. On invalid input, the parser tries to be as fault tolerant as possible, but still return a result.\n * Therefore always check the errors list to find out if the input was valid.\n */\nexport function parse(text, errors = [], options = ParseOptions.DEFAULT) {\n    let currentProperty = null;\n    let currentParent = [];\n    const previousParents = [];\n    function onValue(value) {\n        if (Array.isArray(currentParent)) {\n            currentParent.push(value);\n        }\n        else if (currentProperty !== null) {\n            currentParent[currentProperty] = value;\n        }\n    }\n    const visitor = {\n        onObjectBegin: () => {\n            const object = {};\n            onValue(object);\n            previousParents.push(currentParent);\n            currentParent = object;\n            currentProperty = null;\n        },\n        onObjectProperty: (name) => {\n            currentProperty = name;\n        },\n        onObjectEnd: () => {\n            currentParent = previousParents.pop();\n        },\n        onArrayBegin: () => {\n            const array = [];\n            onValue(array);\n            previousParents.push(currentParent);\n            currentParent = array;\n            currentProperty = null;\n        },\n        onArrayEnd: () => {\n            currentParent = previousParents.pop();\n        },\n        onLiteralValue: onValue,\n        onError: (error, offset, length) => {\n            errors.push({ error, offset, length });\n        }\n    };\n    visit(text, visitor, options);\n    return currentParent[0];\n}\n/**\n * Parses the given text and returns a tree representation the JSON content. On invalid input, the parser tries to be as fault tolerant as possible, but still return a result.\n */\nexport function parseTree(text, errors = [], options = ParseOptions.DEFAULT) {\n    let currentParent = { type: 'array', offset: -1, length: -1, children: [], parent: undefined }; // artificial root\n    function ensurePropertyComplete(endOffset) {\n        if (currentParent.type === 'property') {\n            currentParent.length = endOffset - currentParent.offset;\n            currentParent = currentParent.parent;\n        }\n    }\n    function onValue(valueNode) {\n        currentParent.children.push(valueNode);\n        return valueNode;\n    }\n    const visitor = {\n        onObjectBegin: (offset) => {\n            currentParent = onValue({ type: 'object', offset, length: -1, parent: currentParent, children: [] });\n        },\n        onObjectProperty: (name, offset, length) => {\n            currentParent = onValue({ type: 'property', offset, length: -1, parent: currentParent, children: [] });\n            currentParent.children.push({ type: 'string', value: name, offset, length, parent: currentParent });\n        },\n        onObjectEnd: (offset, length) => {\n            ensurePropertyComplete(offset + length); // in case of a missing value for a property: make sure property is complete\n            currentParent.length = offset + length - currentParent.offset;\n            currentParent = currentParent.parent;\n            ensurePropertyComplete(offset + length);\n        },\n        onArrayBegin: (offset, length) => {\n            currentParent = onValue({ type: 'array', offset, length: -1, parent: currentParent, children: [] });\n        },\n        onArrayEnd: (offset, length) => {\n            currentParent.length = offset + length - currentParent.offset;\n            currentParent = currentParent.parent;\n            ensurePropertyComplete(offset + length);\n        },\n        onLiteralValue: (value, offset, length) => {\n            onValue({ type: getNodeType(value), offset, length, parent: currentParent, value });\n            ensurePropertyComplete(offset + length);\n        },\n        onSeparator: (sep, offset, length) => {\n            if (currentParent.type === 'property') {\n                if (sep === ':') {\n                    currentParent.colonOffset = offset;\n                }\n                else if (sep === ',') {\n                    ensurePropertyComplete(offset);\n                }\n            }\n        },\n        onError: (error, offset, length) => {\n            errors.push({ error, offset, length });\n        }\n    };\n    visit(text, visitor, options);\n    const result = currentParent.children[0];\n    if (result) {\n        delete result.parent;\n    }\n    return result;\n}\n/**\n * Finds the node at the given path in a JSON DOM.\n */\nexport function findNodeAtLocation(root, path) {\n    if (!root) {\n        return undefined;\n    }\n    let node = root;\n    for (let segment of path) {\n        if (typeof segment === 'string') {\n            if (node.type !== 'object' || !Array.isArray(node.children)) {\n                return undefined;\n            }\n            let found = false;\n            for (const propertyNode of node.children) {\n                if (Array.isArray(propertyNode.children) && propertyNode.children[0].value === segment && propertyNode.children.length === 2) {\n                    node = propertyNode.children[1];\n                    found = true;\n                    break;\n                }\n            }\n            if (!found) {\n                return undefined;\n            }\n        }\n        else {\n            const index = segment;\n            if (node.type !== 'array' || index < 0 || !Array.isArray(node.children) || index >= node.children.length) {\n                return undefined;\n            }\n            node = node.children[index];\n        }\n    }\n    return node;\n}\n/**\n * Gets the JSON path of the given JSON DOM node\n */\nexport function getNodePath(node) {\n    if (!node.parent || !node.parent.children) {\n        return [];\n    }\n    const path = getNodePath(node.parent);\n    if (node.parent.type === 'property') {\n        const key = node.parent.children[0].value;\n        path.push(key);\n    }\n    else if (node.parent.type === 'array') {\n        const index = node.parent.children.indexOf(node);\n        if (index !== -1) {\n            path.push(index);\n        }\n    }\n    return path;\n}\n/**\n * Evaluates the JavaScript object of the given JSON DOM node\n */\nexport function getNodeValue(node) {\n    switch (node.type) {\n        case 'array':\n            return node.children.map(getNodeValue);\n        case 'object':\n            const obj = Object.create(null);\n            for (let prop of node.children) {\n                const valueNode = prop.children[1];\n                if (valueNode) {\n                    obj[prop.children[0].value] = getNodeValue(valueNode);\n                }\n            }\n            return obj;\n        case 'null':\n        case 'string':\n        case 'number':\n        case 'boolean':\n            return node.value;\n        default:\n            return undefined;\n    }\n}\nexport function contains(node, offset, includeRightBound = false) {\n    return (offset >= node.offset && offset < (node.offset + node.length)) || includeRightBound && (offset === (node.offset + node.length));\n}\n/**\n * Finds the most inner node at the given offset. If includeRightBound is set, also finds nodes that end at the given offset.\n */\nexport function findNodeAtOffset(node, offset, includeRightBound = false) {\n    if (contains(node, offset, includeRightBound)) {\n        const children = node.children;\n        if (Array.isArray(children)) {\n            for (let i = 0; i < children.length && children[i].offset <= offset; i++) {\n                const item = findNodeAtOffset(children[i], offset, includeRightBound);\n                if (item) {\n                    return item;\n                }\n            }\n        }\n        return node;\n    }\n    return undefined;\n}\n/**\n * Parses the given text and invokes the visitor functions for each object, array and literal reached.\n */\nexport function visit(text, visitor, options = ParseOptions.DEFAULT) {\n    const _scanner = createScanner(text, false);\n    // Important: Only pass copies of this to visitor functions to prevent accidental modification, and\n    // to not affect visitor functions which stored a reference to a previous JSONPath\n    const _jsonPath = [];\n    // Depth of onXXXBegin() callbacks suppressed. onXXXEnd() decrements this if it isn't 0 already.\n    // Callbacks are only called when this value is 0.\n    let suppressedCallbacks = 0;\n    function toNoArgVisit(visitFunction) {\n        return visitFunction ? () => suppressedCallbacks === 0 && visitFunction(_scanner.getTokenOffset(), _scanner.getTokenLength(), _scanner.getTokenStartLine(), _scanner.getTokenStartCharacter()) : () => true;\n    }\n    function toOneArgVisit(visitFunction) {\n        return visitFunction ? (arg) => suppressedCallbacks === 0 && visitFunction(arg, _scanner.getTokenOffset(), _scanner.getTokenLength(), _scanner.getTokenStartLine(), _scanner.getTokenStartCharacter()) : () => true;\n    }\n    function toOneArgVisitWithPath(visitFunction) {\n        return visitFunction ? (arg) => suppressedCallbacks === 0 && visitFunction(arg, _scanner.getTokenOffset(), _scanner.getTokenLength(), _scanner.getTokenStartLine(), _scanner.getTokenStartCharacter(), () => _jsonPath.slice()) : () => true;\n    }\n    function toBeginVisit(visitFunction) {\n        return visitFunction ?\n            () => {\n                if (suppressedCallbacks > 0) {\n                    suppressedCallbacks++;\n                }\n                else {\n                    let cbReturn = visitFunction(_scanner.getTokenOffset(), _scanner.getTokenLength(), _scanner.getTokenStartLine(), _scanner.getTokenStartCharacter(), () => _jsonPath.slice());\n                    if (cbReturn === false) {\n                        suppressedCallbacks = 1;\n                    }\n                }\n            }\n            : () => true;\n    }\n    function toEndVisit(visitFunction) {\n        return visitFunction ?\n            () => {\n                if (suppressedCallbacks > 0) {\n                    suppressedCallbacks--;\n                }\n                if (suppressedCallbacks === 0) {\n                    visitFunction(_scanner.getTokenOffset(), _scanner.getTokenLength(), _scanner.getTokenStartLine(), _scanner.getTokenStartCharacter());\n                }\n            }\n            : () => true;\n    }\n    const onObjectBegin = toBeginVisit(visitor.onObjectBegin), onObjectProperty = toOneArgVisitWithPath(visitor.onObjectProperty), onObjectEnd = toEndVisit(visitor.onObjectEnd), onArrayBegin = toBeginVisit(visitor.onArrayBegin), onArrayEnd = toEndVisit(visitor.onArrayEnd), onLiteralValue = toOneArgVisitWithPath(visitor.onLiteralValue), onSeparator = toOneArgVisit(visitor.onSeparator), onComment = toNoArgVisit(visitor.onComment), onError = toOneArgVisit(visitor.onError);\n    const disallowComments = options && options.disallowComments;\n    const allowTrailingComma = options && options.allowTrailingComma;\n    function scanNext() {\n        while (true) {\n            const token = _scanner.scan();\n            switch (_scanner.getTokenError()) {\n                case 4 /* ScanError.InvalidUnicode */:\n                    handleError(14 /* ParseErrorCode.InvalidUnicode */);\n                    break;\n                case 5 /* ScanError.InvalidEscapeCharacter */:\n                    handleError(15 /* ParseErrorCode.InvalidEscapeCharacter */);\n                    break;\n                case 3 /* ScanError.UnexpectedEndOfNumber */:\n                    handleError(13 /* ParseErrorCode.UnexpectedEndOfNumber */);\n                    break;\n                case 1 /* ScanError.UnexpectedEndOfComment */:\n                    if (!disallowComments) {\n                        handleError(11 /* ParseErrorCode.UnexpectedEndOfComment */);\n                    }\n                    break;\n                case 2 /* ScanError.UnexpectedEndOfString */:\n                    handleError(12 /* ParseErrorCode.UnexpectedEndOfString */);\n                    break;\n                case 6 /* ScanError.InvalidCharacter */:\n                    handleError(16 /* ParseErrorCode.InvalidCharacter */);\n                    break;\n            }\n            switch (token) {\n                case 12 /* SyntaxKind.LineCommentTrivia */:\n                case 13 /* SyntaxKind.BlockCommentTrivia */:\n                    if (disallowComments) {\n                        handleError(10 /* ParseErrorCode.InvalidCommentToken */);\n                    }\n                    else {\n                        onComment();\n                    }\n                    break;\n                case 16 /* SyntaxKind.Unknown */:\n                    handleError(1 /* ParseErrorCode.InvalidSymbol */);\n                    break;\n                case 15 /* SyntaxKind.Trivia */:\n                case 14 /* SyntaxKind.LineBreakTrivia */:\n                    break;\n                default:\n                    return token;\n            }\n        }\n    }\n    function handleError(error, skipUntilAfter = [], skipUntil = []) {\n        onError(error);\n        if (skipUntilAfter.length + skipUntil.length > 0) {\n            let token = _scanner.getToken();\n            while (token !== 17 /* SyntaxKind.EOF */) {\n                if (skipUntilAfter.indexOf(token) !== -1) {\n                    scanNext();\n                    break;\n                }\n                else if (skipUntil.indexOf(token) !== -1) {\n                    break;\n                }\n                token = scanNext();\n            }\n        }\n    }\n    function parseString(isValue) {\n        const value = _scanner.getTokenValue();\n        if (isValue) {\n            onLiteralValue(value);\n        }\n        else {\n            onObjectProperty(value);\n            // add property name afterwards\n            _jsonPath.push(value);\n        }\n        scanNext();\n        return true;\n    }\n    function parseLiteral() {\n        switch (_scanner.getToken()) {\n            case 11 /* SyntaxKind.NumericLiteral */:\n                const tokenValue = _scanner.getTokenValue();\n                let value = Number(tokenValue);\n                if (isNaN(value)) {\n                    handleError(2 /* ParseErrorCode.InvalidNumberFormat */);\n                    value = 0;\n                }\n                onLiteralValue(value);\n                break;\n            case 7 /* SyntaxKind.NullKeyword */:\n                onLiteralValue(null);\n                break;\n            case 8 /* SyntaxKind.TrueKeyword */:\n                onLiteralValue(true);\n                break;\n            case 9 /* SyntaxKind.FalseKeyword */:\n                onLiteralValue(false);\n                break;\n            default:\n                return false;\n        }\n        scanNext();\n        return true;\n    }\n    function parseProperty() {\n        if (_scanner.getToken() !== 10 /* SyntaxKind.StringLiteral */) {\n            handleError(3 /* ParseErrorCode.PropertyNameExpected */, [], [2 /* SyntaxKind.CloseBraceToken */, 5 /* SyntaxKind.CommaToken */]);\n            return false;\n        }\n        parseString(false);\n        if (_scanner.getToken() === 6 /* SyntaxKind.ColonToken */) {\n            onSeparator(':');\n            scanNext(); // consume colon\n            if (!parseValue()) {\n                handleError(4 /* ParseErrorCode.ValueExpected */, [], [2 /* SyntaxKind.CloseBraceToken */, 5 /* SyntaxKind.CommaToken */]);\n            }\n        }\n        else {\n            handleError(5 /* ParseErrorCode.ColonExpected */, [], [2 /* SyntaxKind.CloseBraceToken */, 5 /* SyntaxKind.CommaToken */]);\n        }\n        _jsonPath.pop(); // remove processed property name\n        return true;\n    }\n    function parseObject() {\n        onObjectBegin();\n        scanNext(); // consume open brace\n        let needsComma = false;\n        while (_scanner.getToken() !== 2 /* SyntaxKind.CloseBraceToken */ && _scanner.getToken() !== 17 /* SyntaxKind.EOF */) {\n            if (_scanner.getToken() === 5 /* SyntaxKind.CommaToken */) {\n                if (!needsComma) {\n                    handleError(4 /* ParseErrorCode.ValueExpected */, [], []);\n                }\n                onSeparator(',');\n                scanNext(); // consume comma\n                if (_scanner.getToken() === 2 /* SyntaxKind.CloseBraceToken */ && allowTrailingComma) {\n                    break;\n                }\n            }\n            else if (needsComma) {\n                handleError(6 /* ParseErrorCode.CommaExpected */, [], []);\n            }\n            if (!parseProperty()) {\n                handleError(4 /* ParseErrorCode.ValueExpected */, [], [2 /* SyntaxKind.CloseBraceToken */, 5 /* SyntaxKind.CommaToken */]);\n            }\n            needsComma = true;\n        }\n        onObjectEnd();\n        if (_scanner.getToken() !== 2 /* SyntaxKind.CloseBraceToken */) {\n            handleError(7 /* ParseErrorCode.CloseBraceExpected */, [2 /* SyntaxKind.CloseBraceToken */], []);\n        }\n        else {\n            scanNext(); // consume close brace\n        }\n        return true;\n    }\n    function parseArray() {\n        onArrayBegin();\n        scanNext(); // consume open bracket\n        let isFirstElement = true;\n        let needsComma = false;\n        while (_scanner.getToken() !== 4 /* SyntaxKind.CloseBracketToken */ && _scanner.getToken() !== 17 /* SyntaxKind.EOF */) {\n            if (_scanner.getToken() === 5 /* SyntaxKind.CommaToken */) {\n                if (!needsComma) {\n                    handleError(4 /* ParseErrorCode.ValueExpected */, [], []);\n                }\n                onSeparator(',');\n                scanNext(); // consume comma\n                if (_scanner.getToken() === 4 /* SyntaxKind.CloseBracketToken */ && allowTrailingComma) {\n                    break;\n                }\n            }\n            else if (needsComma) {\n                handleError(6 /* ParseErrorCode.CommaExpected */, [], []);\n            }\n            if (isFirstElement) {\n                _jsonPath.push(0);\n                isFirstElement = false;\n            }\n            else {\n                _jsonPath[_jsonPath.length - 1]++;\n            }\n            if (!parseValue()) {\n                handleError(4 /* ParseErrorCode.ValueExpected */, [], [4 /* SyntaxKind.CloseBracketToken */, 5 /* SyntaxKind.CommaToken */]);\n            }\n            needsComma = true;\n        }\n        onArrayEnd();\n        if (!isFirstElement) {\n            _jsonPath.pop(); // remove array index\n        }\n        if (_scanner.getToken() !== 4 /* SyntaxKind.CloseBracketToken */) {\n            handleError(8 /* ParseErrorCode.CloseBracketExpected */, [4 /* SyntaxKind.CloseBracketToken */], []);\n        }\n        else {\n            scanNext(); // consume close bracket\n        }\n        return true;\n    }\n    function parseValue() {\n        switch (_scanner.getToken()) {\n            case 3 /* SyntaxKind.OpenBracketToken */:\n                return parseArray();\n            case 1 /* SyntaxKind.OpenBraceToken */:\n                return parseObject();\n            case 10 /* SyntaxKind.StringLiteral */:\n                return parseString(true);\n            default:\n                return parseLiteral();\n        }\n    }\n    scanNext();\n    if (_scanner.getToken() === 17 /* SyntaxKind.EOF */) {\n        if (options.allowEmptyContent) {\n            return true;\n        }\n        handleError(4 /* ParseErrorCode.ValueExpected */, [], []);\n        return false;\n    }\n    if (!parseValue()) {\n        handleError(4 /* ParseErrorCode.ValueExpected */, [], []);\n        return false;\n    }\n    if (_scanner.getToken() !== 17 /* SyntaxKind.EOF */) {\n        handleError(9 /* ParseErrorCode.EndOfFileExpected */, [], []);\n    }\n    return true;\n}\n/**\n * Takes JSON with JavaScript-style comments and remove\n * them. Optionally replaces every none-newline character\n * of comments with a replaceCharacter\n */\nexport function stripComments(text, replaceCh) {\n    let _scanner = createScanner(text), parts = [], kind, offset = 0, pos;\n    do {\n        pos = _scanner.getPosition();\n        kind = _scanner.scan();\n        switch (kind) {\n            case 12 /* SyntaxKind.LineCommentTrivia */:\n            case 13 /* SyntaxKind.BlockCommentTrivia */:\n            case 17 /* SyntaxKind.EOF */:\n                if (offset !== pos) {\n                    parts.push(text.substring(offset, pos));\n                }\n                if (replaceCh !== undefined) {\n                    parts.push(_scanner.getTokenValue().replace(/[^\\r\\n]/g, replaceCh));\n                }\n                offset = _scanner.getPosition();\n                break;\n        }\n    } while (kind !== 17 /* SyntaxKind.EOF */);\n    return parts.join('');\n}\nexport function getNodeType(value) {\n    switch (typeof value) {\n        case 'boolean': return 'boolean';\n        case 'number': return 'number';\n        case 'string': return 'string';\n        case 'object': {\n            if (!value) {\n                return 'null';\n            }\n            else if (Array.isArray(value)) {\n                return 'array';\n            }\n            return 'object';\n        }\n        default: return 'null';\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n'use strict';\nimport * as formatter from './impl/format';\nimport * as edit from './impl/edit';\nimport * as scanner from './impl/scanner';\nimport * as parser from './impl/parser';\n/**\n * Creates a JSON scanner on the given text.\n * If ignoreTrivia is set, whitespaces or comments are ignored.\n */\nexport const createScanner = scanner.createScanner;\nexport var ScanError;\n(function (ScanError) {\n    ScanError[ScanError[\"None\"] = 0] = \"None\";\n    ScanError[ScanError[\"UnexpectedEndOfComment\"] = 1] = \"UnexpectedEndOfComment\";\n    ScanError[ScanError[\"UnexpectedEndOfString\"] = 2] = \"UnexpectedEndOfString\";\n    ScanError[ScanError[\"UnexpectedEndOfNumber\"] = 3] = \"UnexpectedEndOfNumber\";\n    ScanError[ScanError[\"InvalidUnicode\"] = 4] = \"InvalidUnicode\";\n    ScanError[ScanError[\"InvalidEscapeCharacter\"] = 5] = \"InvalidEscapeCharacter\";\n    ScanError[ScanError[\"InvalidCharacter\"] = 6] = \"InvalidCharacter\";\n})(ScanError || (ScanError = {}));\nexport var SyntaxKind;\n(function (SyntaxKind) {\n    SyntaxKind[SyntaxKind[\"OpenBraceToken\"] = 1] = \"OpenBraceToken\";\n    SyntaxKind[SyntaxKind[\"CloseBraceToken\"] = 2] = \"CloseBraceToken\";\n    SyntaxKind[SyntaxKind[\"OpenBracketToken\"] = 3] = \"OpenBracketToken\";\n    SyntaxKind[SyntaxKind[\"CloseBracketToken\"] = 4] = \"CloseBracketToken\";\n    SyntaxKind[SyntaxKind[\"CommaToken\"] = 5] = \"CommaToken\";\n    SyntaxKind[SyntaxKind[\"ColonToken\"] = 6] = \"ColonToken\";\n    SyntaxKind[SyntaxKind[\"NullKeyword\"] = 7] = \"NullKeyword\";\n    SyntaxKind[SyntaxKind[\"TrueKeyword\"] = 8] = \"TrueKeyword\";\n    SyntaxKind[SyntaxKind[\"FalseKeyword\"] = 9] = \"FalseKeyword\";\n    SyntaxKind[SyntaxKind[\"StringLiteral\"] = 10] = \"StringLiteral\";\n    SyntaxKind[SyntaxKind[\"NumericLiteral\"] = 11] = \"NumericLiteral\";\n    SyntaxKind[SyntaxKind[\"LineCommentTrivia\"] = 12] = \"LineCommentTrivia\";\n    SyntaxKind[SyntaxKind[\"BlockCommentTrivia\"] = 13] = \"BlockCommentTrivia\";\n    SyntaxKind[SyntaxKind[\"LineBreakTrivia\"] = 14] = \"LineBreakTrivia\";\n    SyntaxKind[SyntaxKind[\"Trivia\"] = 15] = \"Trivia\";\n    SyntaxKind[SyntaxKind[\"Unknown\"] = 16] = \"Unknown\";\n    SyntaxKind[SyntaxKind[\"EOF\"] = 17] = \"EOF\";\n})(SyntaxKind || (SyntaxKind = {}));\n/**\n * For a given offset, evaluate the location in the JSON document. Each segment in the location path is either a property name or an array index.\n */\nexport const getLocation = parser.getLocation;\n/**\n * Parses the given text and returns the object the JSON content represents. On invalid input, the parser tries to be as fault tolerant as possible, but still return a result.\n * Therefore, always check the errors list to find out if the input was valid.\n */\nexport const parse = parser.parse;\n/**\n * Parses the given text and returns a tree representation the JSON content. On invalid input, the parser tries to be as fault tolerant as possible, but still return a result.\n */\nexport const parseTree = parser.parseTree;\n/**\n * Finds the node at the given path in a JSON DOM.\n */\nexport const findNodeAtLocation = parser.findNodeAtLocation;\n/**\n * Finds the innermost node at the given offset. If includeRightBound is set, also finds nodes that end at the given offset.\n */\nexport const findNodeAtOffset = parser.findNodeAtOffset;\n/**\n * Gets the JSON path of the given JSON DOM node\n */\nexport const getNodePath = parser.getNodePath;\n/**\n * Evaluates the JavaScript object of the given JSON DOM node\n */\nexport const getNodeValue = parser.getNodeValue;\n/**\n * Parses the given text and invokes the visitor functions for each object, array and literal reached.\n */\nexport const visit = parser.visit;\n/**\n * Takes JSON with JavaScript-style comments and remove\n * them. Optionally replaces every none-newline character\n * of comments with a replaceCharacter\n */\nexport const stripComments = parser.stripComments;\nexport var ParseErrorCode;\n(function (ParseErrorCode) {\n    ParseErrorCode[ParseErrorCode[\"InvalidSymbol\"] = 1] = \"InvalidSymbol\";\n    ParseErrorCode[ParseErrorCode[\"InvalidNumberFormat\"] = 2] = \"InvalidNumberFormat\";\n    ParseErrorCode[ParseErrorCode[\"PropertyNameExpected\"] = 3] = \"PropertyNameExpected\";\n    ParseErrorCode[ParseErrorCode[\"ValueExpected\"] = 4] = \"ValueExpected\";\n    ParseErrorCode[ParseErrorCode[\"ColonExpected\"] = 5] = \"ColonExpected\";\n    ParseErrorCode[ParseErrorCode[\"CommaExpected\"] = 6] = \"CommaExpected\";\n    ParseErrorCode[ParseErrorCode[\"CloseBraceExpected\"] = 7] = \"CloseBraceExpected\";\n    ParseErrorCode[ParseErrorCode[\"CloseBracketExpected\"] = 8] = \"CloseBracketExpected\";\n    ParseErrorCode[ParseErrorCode[\"EndOfFileExpected\"] = 9] = \"EndOfFileExpected\";\n    ParseErrorCode[ParseErrorCode[\"InvalidCommentToken\"] = 10] = \"InvalidCommentToken\";\n    ParseErrorCode[ParseErrorCode[\"UnexpectedEndOfComment\"] = 11] = \"UnexpectedEndOfComment\";\n    ParseErrorCode[ParseErrorCode[\"UnexpectedEndOfString\"] = 12] = \"UnexpectedEndOfString\";\n    ParseErrorCode[ParseErrorCode[\"UnexpectedEndOfNumber\"] = 13] = \"UnexpectedEndOfNumber\";\n    ParseErrorCode[ParseErrorCode[\"InvalidUnicode\"] = 14] = \"InvalidUnicode\";\n    ParseErrorCode[ParseErrorCode[\"InvalidEscapeCharacter\"] = 15] = \"InvalidEscapeCharacter\";\n    ParseErrorCode[ParseErrorCode[\"InvalidCharacter\"] = 16] = \"InvalidCharacter\";\n})(ParseErrorCode || (ParseErrorCode = {}));\nexport function printParseErrorCode(code) {\n    switch (code) {\n        case 1 /* ParseErrorCode.InvalidSymbol */: return 'InvalidSymbol';\n        case 2 /* ParseErrorCode.InvalidNumberFormat */: return 'InvalidNumberFormat';\n        case 3 /* ParseErrorCode.PropertyNameExpected */: return 'PropertyNameExpected';\n        case 4 /* ParseErrorCode.ValueExpected */: return 'ValueExpected';\n        case 5 /* ParseErrorCode.ColonExpected */: return 'ColonExpected';\n        case 6 /* ParseErrorCode.CommaExpected */: return 'CommaExpected';\n        case 7 /* ParseErrorCode.CloseBraceExpected */: return 'CloseBraceExpected';\n        case 8 /* ParseErrorCode.CloseBracketExpected */: return 'CloseBracketExpected';\n        case 9 /* ParseErrorCode.EndOfFileExpected */: return 'EndOfFileExpected';\n        case 10 /* ParseErrorCode.InvalidCommentToken */: return 'InvalidCommentToken';\n        case 11 /* ParseErrorCode.UnexpectedEndOfComment */: return 'UnexpectedEndOfComment';\n        case 12 /* ParseErrorCode.UnexpectedEndOfString */: return 'UnexpectedEndOfString';\n        case 13 /* ParseErrorCode.UnexpectedEndOfNumber */: return 'UnexpectedEndOfNumber';\n        case 14 /* ParseErrorCode.InvalidUnicode */: return 'InvalidUnicode';\n        case 15 /* ParseErrorCode.InvalidEscapeCharacter */: return 'InvalidEscapeCharacter';\n        case 16 /* ParseErrorCode.InvalidCharacter */: return 'InvalidCharacter';\n    }\n    return '<unknown ParseErrorCode>';\n}\n/**\n * Computes the edit operations needed to format a JSON document.\n *\n * @param documentText The input text\n * @param range The range to format or `undefined` to format the full content\n * @param options The formatting options\n * @returns The edit operations describing the formatting changes to the original document following the format described in {@linkcode EditResult}.\n * To apply the edit operations to the input, use {@linkcode applyEdits}.\n */\nexport function format(documentText, range, options) {\n    return formatter.format(documentText, range, options);\n}\n/**\n * Computes the edit operations needed to modify a value in the JSON document.\n *\n * @param documentText The input text\n * @param path The path of the value to change. The path represents either to the document root, a property or an array item.\n * If the path points to an non-existing property or item, it will be created.\n * @param value The new value for the specified property or item. If the value is undefined,\n * the property or item will be removed.\n * @param options Options\n * @returns The edit operations describing the changes to the original document, following the format described in {@linkcode EditResult}.\n * To apply the edit operations to the input, use {@linkcode applyEdits}.\n */\nexport function modify(text, path, value, options) {\n    return edit.setProperty(text, path, value, options);\n}\n/**\n * Applies edits to an input string.\n * @param text The input text\n * @param edits Edit operations following the format described in {@linkcode EditResult}.\n * @returns The text with the applied edits.\n * @throws An error if the edit operations are not well-formed as described in {@linkcode EditResult}.\n */\nexport function applyEdits(text, edits) {\n    let sortedEdits = edits.slice(0).sort((a, b) => {\n        const diff = a.offset - b.offset;\n        if (diff === 0) {\n            return a.length - b.length;\n        }\n        return diff;\n    });\n    let lastModifiedOffset = text.length;\n    for (let i = sortedEdits.length - 1; i >= 0; i--) {\n        let e = sortedEdits[i];\n        if (e.offset + e.length <= lastModifiedOffset) {\n            text = edit.applyEdit(text, e);\n        }\n        else {\n            throw new Error('Overlapping edit');\n        }\n        lastModifiedOffset = e.offset;\n    }\n    return text;\n}\n","import { useState, useEffect, useCallback, useMemo, forwardRef, useImperativeHandle } from 'react';\nimport { ChevronRight, ChevronDown } from 'lucide-react';\nimport { parse as parseJsonc } from 'jsonc-parser';\nimport { fetchTextUtf8 } from '@eternalheart/file-preview-core';\nimport { useTranslator } from '../../i18n/LocaleContext';\nimport { useFetcher } from '../../RequestContext';\nimport { useResolvedTheme, type ResolvedTheme } from '../../ThemeContext';\nimport { RendererError } from '../RendererError';\nimport type { RendererHandle } from '../base.types';\n\ninterface JsonRendererProps {\n  url: string;\n  fileName: string;\n}\n\ninterface JsonColors {\n  key: string;\n  string: string;\n  number: string;\n  keyword: string;\n  bracket: string;   // { } [ ]\n  colon: string;     // :\n  collapsed: string; // \"N items / N keys\" 折叠提示\n  arrow: string;     // 折叠箭头\n}\n\n// VSCode Dark Plus / GitHub Light 两套配色，与 react-syntax-highlighter 的 vscDarkPlus / vs 主题保持一致\nconst DARK_COLORS: JsonColors = {\n  key: '#9cdcfe',\n  string: '#ce9178',\n  number: '#b5cea8',\n  keyword: '#569cd6',\n  bracket: '#d4d4d4',\n  colon: 'rgb(255 255 255 / 0.6)',\n  collapsed: 'rgb(255 255 255 / 0.4)',\n  arrow: 'rgb(255 255 255 / 0.5)',\n};\n\nconst LIGHT_COLORS: JsonColors = {\n  key: '#005cc5',\n  string: '#032f62',\n  number: '#005cc5',\n  keyword: '#d73a49',\n  bracket: '#24292e',\n  colon: 'rgb(23 23 23 / 0.6)',\n  collapsed: 'rgb(23 23 23 / 0.45)',\n  arrow: 'rgb(23 23 23 / 0.55)',\n};\n\n// ---------- JSON 树节点 ----------\n\ninterface JsonNodeProps {\n  keyName?: string;\n  value: unknown;\n  depth: number;\n  defaultExpanded: boolean;\n  colors: JsonColors;\n}\n\nconst JsonNode: React.FC<JsonNodeProps> = ({ keyName, value, depth, defaultExpanded, colors }) => {\n  const t = useTranslator();\n  const [expanded, setExpanded] = useState(defaultExpanded);\n  const indent = depth * 20;\n\n  const toggle = useCallback(() => setExpanded(prev => !prev), []);\n\n  // 基本类型\n  if (value === null || value === undefined || typeof value !== 'object') {\n    return (\n      <div className=\"rfp-flex rfp-items-start rfp-py-px rfp-font-mono rfp-text-sm\" style={{ paddingLeft: `${indent}px` }}>\n        <span className=\"rfp-w-4 rfp-h-5 rfp-flex-shrink-0\" />\n        {keyName !== undefined && (\n          <span className=\"rfp-flex-shrink-0\" style={{ color: colors.key }}>\n            \"{keyName}\"<span style={{ color: colors.colon }}>: </span>\n          </span>\n        )}\n        {renderPrimitive(value, colors)}\n      </div>\n    );\n  }\n\n  const isArray = Array.isArray(value);\n  const entries = isArray ? (value as unknown[]) : Object.entries(value as Record<string, unknown>);\n  const count = entries.length;\n  const openBracket = isArray ? '[' : '{';\n  const closeBracket = isArray ? ']' : '}';\n\n  // 空对象/数组\n  if (count === 0) {\n    return (\n      <div className=\"rfp-flex rfp-items-start rfp-py-px rfp-font-mono rfp-text-sm\" style={{ paddingLeft: `${indent}px` }}>\n        <span className=\"rfp-w-4 rfp-h-5 rfp-flex-shrink-0\" />\n        {keyName !== undefined && (\n          <span className=\"rfp-flex-shrink-0\" style={{ color: colors.key }}>\n            \"{keyName}\"<span style={{ color: colors.colon }}>: </span>\n          </span>\n        )}\n        <span style={{ color: colors.bracket }}>{openBracket}{closeBracket}</span>\n      </div>\n    );\n  }\n\n  return (\n    <div>\n      {/* 折叠行 */}\n      <div\n        className=\"rfp-flex rfp-items-start rfp-py-px rfp-font-mono rfp-text-sm rfp-cursor-pointer hover:rfp-bg-surface-1 rfp-select-none\"\n        style={{ paddingLeft: `${indent}px` }}\n        onClick={toggle}\n      >\n        <span className=\"rfp-w-4 rfp-h-5 rfp-flex-shrink-0 rfp-flex rfp-items-center rfp-justify-center\" style={{ color: colors.arrow }}>\n          {expanded\n            ? <ChevronDown className=\"rfp-w-3.5 rfp-h-3.5\" />\n            : <ChevronRight className=\"rfp-w-3.5 rfp-h-3.5\" />\n          }\n        </span>\n        {keyName !== undefined && (\n          <span className=\"rfp-flex-shrink-0\" style={{ color: colors.key }}>\n            \"{keyName}\"<span style={{ color: colors.colon }}>: </span>\n          </span>\n        )}\n        <span style={{ color: colors.bracket }}>{openBracket}</span>\n        {!expanded && (\n          <span className=\"rfp-ml-1\" style={{ color: colors.collapsed }}>\n            {isArray ? `${count} ${t('json.items')}` : `${count} ${t('json.keys')}`}\n            <span style={{ color: colors.bracket }}> {closeBracket}</span>\n          </span>\n        )}\n      </div>\n\n      {/* 子节点 */}\n      {expanded && (\n        <>\n          {isArray\n            ? (value as unknown[]).map((item, i) => (\n                <JsonNode key={i} value={item} depth={depth + 1} defaultExpanded={depth < 1} colors={colors} />\n              ))\n            : Object.entries(value as Record<string, unknown>).map(([k, v]) => (\n                <JsonNode key={k} keyName={k} value={v} depth={depth + 1} defaultExpanded={depth < 1} colors={colors} />\n              ))\n          }\n          <div className=\"rfp-font-mono rfp-text-sm rfp-py-px\" style={{ paddingLeft: `${indent + 20}px`, color: colors.bracket }}>\n            {closeBracket}\n          </div>\n        </>\n      )}\n    </div>\n  );\n};\n\nfunction renderPrimitive(value: unknown, colors: JsonColors) {\n  if (value === null) return <span style={{ color: colors.keyword, fontStyle: 'italic' }}>null</span>;\n  if (value === undefined) return <span style={{ color: colors.keyword, fontStyle: 'italic' }}>undefined</span>;\n  if (typeof value === 'boolean') return <span style={{ color: colors.keyword }}>{String(value)}</span>;\n  if (typeof value === 'number') return <span style={{ color: colors.number }}>{String(value)}</span>;\n  if (typeof value === 'string') return <span style={{ color: colors.string }}>\"{value}\"</span>;\n  return <span style={{ color: colors.bracket }}>{String(value)}</span>;\n}\n\nfunction pickColors(theme: ResolvedTheme): JsonColors {\n  return theme === 'light' ? LIGHT_COLORS : DARK_COLORS;\n}\n\n// ---------- Main ----------\n\nexport const JsonRenderer = forwardRef<RendererHandle, JsonRendererProps>(({ url }, ref) => {\n  const t = useTranslator();\n  const fetcher = useFetcher();\n  const resolvedTheme = useResolvedTheme();\n  const colors = useMemo(() => pickColors(resolvedTheme), [resolvedTheme]);\n  const [data, setData] = useState<unknown>(null);\n  const [loading, setLoading] = useState(true);\n  const [error, setError] = useState<string | null>(null);\n\n  useEffect(() => {\n    const controller = new AbortController();\n    const loadJson = async () => {\n      try {\n        setLoading(true);\n        setError(null);\n        const text = await fetchTextUtf8(url, { fetcher, signal: controller.signal });\n        const parsed = parseJsonc(text);\n        setData(parsed);\n      } catch (err: any) {\n        if (err.name === 'AbortError') return;\n        setError(t('json.load_failed'));\n        console.error(err);\n      } finally {\n        setLoading(false);\n      }\n    };\n    loadJson();\n    return () => controller.abort();\n  }, [url]);\n\n  // 暴露接口给父组件（必须在 early return 之前调用）\n  useImperativeHandle(ref, () => ({\n    getToolbarGroups: () => [],\n  }), []);\n\n  if (loading) {\n    return (\n      <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full\">\n        <div className=\"rfp-w-12 rfp-h-12 rfp-border-4 rfp-border-line-strong rfp-border-t-spinner-head rfp-rounded-full rfp-animate-spin\" />\n      </div>\n    );\n  }\n\n  if (error) {\n    return <RendererError message={error} />;\n  }\n\n  return (\n    <div className=\"rfp-w-full rfp-h-full rfp-overflow-auto rfp-bg-code-bg rfp-py-6 rfp-px-4\">\n      <JsonNode value={data} depth={0} defaultExpanded colors={colors} />\n    </div>\n  );\n});\n","import { useState, useEffect, useRef, useCallback, forwardRef, useImperativeHandle } from 'react';\nimport Spreadsheet from 'x-data-spreadsheet';\nimport {\n  parseCsv,\n  guessCsvDelimiter,\n  fetchTextUtf8,\n  convertCsvToSpreadsheetData,\n} from '@eternalheart/file-preview-core';\nimport { useTranslator } from '../../i18n/LocaleContext';\nimport { useFetcher } from '../../RequestContext';\nimport { RendererError } from '../RendererError';\nimport type { RendererHandle } from '../base.types';\n\ninterface CsvRendererProps {\n  url: string;\n  fileName: string;\n}\n\nexport const CsvRenderer = forwardRef<RendererHandle, CsvRendererProps>(({ url, fileName }, ref) => {\n  const t = useTranslator();\n  const fetcher = useFetcher();\n  const [loading, setLoading] = useState(true);\n  const [error, setError] = useState<string | null>(null);\n  const containerRef = useRef<HTMLDivElement>(null);\n  const spreadsheetRef = useRef<Spreadsheet | null>(null);\n  const sheetDataRef = useRef<Record<string, unknown>[] | null>(null);\n  const resizeObserverRef = useRef<ResizeObserver | null>(null);\n  const resizeTimeoutRef = useRef<number | null>(null);\n  const lastDimensionsRef = useRef({ width: 0, height: 0 });\n\n  const calculateDimensions = useCallback(() => {\n    if (!containerRef.current) return { width: 800, height: 600 };\n    const rawWidth = containerRef.current.clientWidth;\n    const rawHeight = containerRef.current.clientHeight;\n    const width = rawWidth > 100 ? rawWidth : 800;\n    const height = rawHeight > 100 ? rawHeight : 600;\n    return { width, height };\n  }, []);\n\n  const mountSpreadsheet = useCallback(() => {\n    if (!containerRef.current || !sheetDataRef.current) return;\n\n    containerRef.current.innerHTML = '';\n    spreadsheetRef.current = null;\n\n    const { width, height } = calculateDimensions();\n    const isMobile = width < 640;\n\n    const s = new Spreadsheet(containerRef.current, {\n      mode: 'read',\n      showToolbar: false,\n      showContextmenu: false,\n      showGrid: true,\n      row: {\n        len: 100,\n        height: 25,\n      },\n      col: {\n        len: 26,\n        width: isMobile ? 80 : 100,\n        indexWidth: isMobile ? 40 : 60,\n        minWidth: isMobile ? 40 : 60,\n      },\n      view: {\n        height: () => height,\n        width: () => width,\n      },\n    });\n\n    s.loadData(sheetDataRef.current as unknown as Record<string, unknown>);\n    spreadsheetRef.current = s;\n  }, [calculateDimensions]);\n\n  useEffect(() => {\n    if (!containerRef.current) return;\n\n    let isInitialRender = true;\n\n    const updateDimensions = () => {\n      if (isInitialRender) {\n        isInitialRender = false;\n        lastDimensionsRef.current = calculateDimensions();\n        return;\n      }\n\n      const newDimensions = calculateDimensions();\n      const lastDimensions = lastDimensionsRef.current;\n      const widthDiff = Math.abs(lastDimensions.width - newDimensions.width);\n      const heightDiff = Math.abs(lastDimensions.height - newDimensions.height);\n\n      if (widthDiff < 10 && heightDiff < 10) return;\n\n      lastDimensionsRef.current = newDimensions;\n\n      if (resizeTimeoutRef.current) {\n        clearTimeout(resizeTimeoutRef.current);\n      }\n\n      resizeTimeoutRef.current = window.setTimeout(() => {\n        if (sheetDataRef.current) {\n          mountSpreadsheet();\n        }\n      }, 500);\n    };\n\n    resizeObserverRef.current = new ResizeObserver(() => {\n      updateDimensions();\n    });\n\n    resizeObserverRef.current.observe(containerRef.current);\n\n    return () => {\n      if (resizeObserverRef.current) {\n        resizeObserverRef.current.disconnect();\n      }\n      if (resizeTimeoutRef.current) {\n        clearTimeout(resizeTimeoutRef.current);\n      }\n    };\n  }, [calculateDimensions, mountSpreadsheet]);\n\n  useEffect(() => {\n    let isMounted = true;\n    const controller = new AbortController();\n\n    const loadCsv = async () => {\n      if (!containerRef.current) return;\n\n      setLoading(true);\n      setError(null);\n\n      try {\n        const text = await fetchTextUtf8(url, { fetcher, signal: controller.signal });\n        const parsed = parseCsv(text, { delimiter: guessCsvDelimiter(fileName) });\n        const sheetData = convertCsvToSpreadsheetData(parsed.header, parsed.rows, fileName);\n\n        if (!isMounted) return;\n\n        sheetDataRef.current = sheetData as unknown as Record<string, unknown>[];\n        mountSpreadsheet();\n        setLoading(false);\n      } catch (err: any) {\n        if (err.name === 'AbortError') return;\n        if (isMounted) {\n          console.error('CSV 解析错误:', err);\n          setError(t('csv.load_failed'));\n          setLoading(false);\n        }\n      }\n    };\n\n    const timer = setTimeout(() => {\n      requestAnimationFrame(() => {\n        loadCsv();\n      });\n    }, 100);\n\n    return () => {\n      isMounted = false;\n      controller.abort();\n      clearTimeout(timer);\n      sheetDataRef.current = null;\n      if (containerRef.current) {\n        containerRef.current.innerHTML = '';\n      }\n      spreadsheetRef.current = null;\n    };\n  }, [url, fileName, mountSpreadsheet]);\n\n  // 暴露接口给父组件\n  useImperativeHandle(ref, () => ({\n    getToolbarGroups: () => [],\n  }), []);\n\n  return (\n    <div className=\"rfp-relative rfp-flex rfp-flex-col rfp-items-center rfp-w-full rfp-h-full\">\n      {loading && (\n        <div className=\"rfp-absolute rfp-inset-0 rfp-flex rfp-items-center rfp-justify-center rfp-bg-surface-toolbar rfp-backdrop-blur-sm rfp-z-10\">\n          <div className=\"rfp-text-center\">\n            <div className=\"rfp-w-10 rfp-h-10 md:rfp-w-12 md:rfp-h-12 rfp-mx-auto rfp-mb-3 rfp-border-4 rfp-border-line-strong rfp-border-t-spinner-head rfp-rounded-full rfp-animate-spin\" />\n            <p className=\"rfp-text-xs md:rfp-text-sm rfp-text-fg-secondary rfp-font-medium\">{t('csv.loading')}</p>\n          </div>\n        </div>\n      )}\n\n      {error && !loading && (\n        <div className=\"rfp-absolute rfp-inset-0 rfp-flex rfp-items-center rfp-justify-center rfp-bg-surface-toolbar rfp-backdrop-blur-sm rfp-z-10\">\n          <RendererError message={error} />\n        </div>\n      )}\n\n      {!error && (\n        <div\n          ref={containerRef}\n          className=\"xlsx-spreadsheet-container rfp-w-full rfp-h-full\"\n          style={{ opacity: loading ? 0 : 1 }}\n        />\n      )}\n    </div>\n  );\n});\n","import { useState, useEffect, Fragment, forwardRef, useImperativeHandle } from 'react';\nimport { fetchTextUtf8 } from '@eternalheart/file-preview-core';\nimport { useTranslator } from '../../i18n/LocaleContext';\nimport { useFetcher } from '../../RequestContext';\nimport { useShikiHighlight } from '../../hooks/useShikiHighlight';\nimport { RendererError } from '../RendererError';\nimport type { RendererHandle } from '../base.types';\n\ninterface XmlRendererProps {\n  url: string;\n  fileName: string;\n}\n\n/**\n * 用 DOMParser 美化 XML：失败则原样返回\n */\nconst prettyPrintXml = (xml: string): string => {\n  try {\n    const parser = new DOMParser();\n    const doc = parser.parseFromString(xml, 'application/xml');\n    // 检测解析错误\n    const errNode = doc.querySelector('parsererror');\n    if (errNode) return xml;\n    // 使用 XSLT 或手动缩进：这里手动缩进更稳\n    const serializer = new XMLSerializer();\n    const serialized = serializer.serializeToString(doc);\n    return indentXml(serialized);\n  } catch {\n    return xml;\n  }\n};\n\nconst indentXml = (xml: string): string => {\n  const PADDING = '  ';\n  const reg = /(>)(<)(\\/*)/g;\n  let formatted = xml.replace(reg, '$1\\n$2$3');\n  // 自闭合和 CDATA 等不处理\n  let pad = 0;\n  return formatted\n    .split('\\n')\n    .map((line) => {\n      let indent = 0;\n      if (/^<\\/\\w/.test(line)) {\n        pad = Math.max(pad - 1, 0);\n      } else if (/^<\\w[^>]*[^/]>.*$/.test(line) && !/<.+<\\/.+>$/.test(line)) {\n        indent = 1;\n      }\n      const padded = PADDING.repeat(pad) + line;\n      pad += indent;\n      return padded;\n    })\n    .join('\\n');\n};\n\nexport const XmlRenderer = forwardRef<RendererHandle, XmlRendererProps>(({ url }, ref) => {\n  const t = useTranslator();\n  const fetcher = useFetcher();\n  const [content, setContent] = useState<string>('');\n  const [loading, setLoading] = useState(true);\n  const [error, setError] = useState<string | null>(null);\n  const { lineHtmls } = useShikiHighlight(content, 'xml');\n\n  useEffect(() => {\n    const controller = new AbortController();\n    const load = async () => {\n      try {\n        setLoading(true);\n        setError(null);\n        const raw = await fetchTextUtf8(url, { fetcher, signal: controller.signal });\n        setContent(prettyPrintXml(raw));\n      } catch (err: any) {\n        if (err.name === 'AbortError') return;\n        console.error(err);\n        setError(t('xml.load_failed'));\n      } finally {\n        setLoading(false);\n      }\n    };\n    load();\n    return () => controller.abort();\n  }, [url]);\n\n  // 暴露接口给父组件（必须在 early return 之前调用）\n  useImperativeHandle(ref, () => ({\n    getToolbarGroups: () => [],\n  }), []);\n\n  if (loading) {\n    return (\n      <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full\">\n        <div className=\"rfp-w-12 rfp-h-12 rfp-border-4 rfp-border-line-strong rfp-border-t-spinner-head rfp-rounded-full rfp-animate-spin\" />\n      </div>\n    );\n  }\n\n  if (error) {\n    return <RendererError message={error} />;\n  }\n\n  if (lineHtmls.length === 0) {\n    return (\n      <div className=\"rfp-w-full rfp-h-full rfp-overflow-auto rfp-bg-code-bg\">\n        <pre className=\"rfp-py-6 rfp-px-4 rfp-text-fg-primary rfp-font-mono rfp-text-sm rfp-whitespace-pre-wrap rfp-break-words\">\n          {content}\n        </pre>\n      </div>\n    );\n  }\n\n  const lines = content.split('\\n');\n  return (\n    <div className=\"rfp-w-full rfp-h-full rfp-overflow-auto rfp-bg-code-bg\">\n      <div\n        className=\"rfp-code-block with-line-numbers rfp-w-full\"\n        style={{ gridTemplateRows: `repeat(${lines.length}, auto) minmax(1.5rem, 1fr)` }}\n      >\n        {lines.map((_, i) => (\n          <Fragment key={i}>\n            <span className=\"rfp-code-gutter\">{i + 1}</span>\n            <span\n              className=\"rfp-code-line\"\n              dangerouslySetInnerHTML={{ __html: lineHtmls[i] ?? '' }}\n            />\n          </Fragment>\n        ))}\n        {/* 占位行：撑满剩余高度，让 gutter border 延伸到底部 */}\n        <span className=\"rfp-code-gutter-filler\" />\n        <span className=\"rfp-code-line-filler\" />\n      </div>\n    </div>\n  );\n});\n","import { useState, useEffect, useMemo, forwardRef, useImperativeHandle } from 'react';\nimport {\n  parseSubtitle,\n  formatSubtitleTime,\n  fetchTextUtf8,\n  type SubtitleParseResult,\n  type SubtitleFormat,\n} from '@eternalheart/file-preview-core';\nimport { useTranslator } from '../../i18n/LocaleContext';\nimport { useFetcher } from '../../RequestContext';\nimport { RendererError } from '../RendererError';\nimport type { RendererHandle } from '../base.types';\n\ninterface SubtitleRendererProps {\n  url: string;\n  fileName: string;\n}\n\nconst FORMAT_BY_EXT: Record<string, SubtitleFormat> = {\n  srt: 'srt',\n  vtt: 'vtt',\n  lrc: 'lrc',\n  elrc: 'elrc',\n  ass: 'ass',\n  ssa: 'ssa',\n  ttml: 'ttml',\n  dfxp: 'ttml',\n};\n\nconst getFormat = (fileName: string): SubtitleFormat | undefined => {\n  const ext = fileName.split('.').pop()?.toLowerCase() || '';\n  return FORMAT_BY_EXT[ext];\n};\n\nexport const SubtitleRenderer = forwardRef<RendererHandle, SubtitleRendererProps>(({ url, fileName }, ref) => {\n  const t = useTranslator();\n  const fetcher = useFetcher();\n  const [text, setText] = useState<string>('');\n  const [loading, setLoading] = useState(true);\n  const [error, setError] = useState<string | null>(null);\n\n  useEffect(() => {\n    const controller = new AbortController();\n    const load = async () => {\n      try {\n        setLoading(true);\n        setError(null);\n        setText(await fetchTextUtf8(url, { fetcher, signal: controller.signal }));\n      } catch (err: any) {\n        if (err.name === 'AbortError') return;\n        console.warn('[SubtitleRenderer] Failed to load subtitle:', err instanceof Error ? err.message : String(err));\n        setError(t('subtitle.load_failed'));\n      } finally {\n        setLoading(false);\n      }\n    };\n    load();\n    return () => controller.abort();\n  }, [url]);\n\n  const parsed: SubtitleParseResult | null = useMemo(() => {\n    if (!text) return null;\n    try {\n      return parseSubtitle(text, getFormat(fileName));\n    } catch (err) {\n      // 字幕解析失败通常是格式不支持或文件损坏，用 warn 级别记录\n      console.warn('[SubtitleRenderer] Failed to parse subtitle:', err instanceof Error ? err.message : String(err));\n      return null;\n    }\n  }, [text, fileName]);\n\n  // 暴露接口给父组件\n  useImperativeHandle(ref, () => ({\n    getToolbarGroups: () => [],\n  }), []);\n\n  if (loading) {\n    return (\n      <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full rfp-bg-[#0f0f12]\">\n        <div className=\"rfp-w-12 rfp-h-12 rfp-border-4 rfp-border-line-strong rfp-border-t-spinner-head rfp-rounded-full rfp-animate-spin\" />\n      </div>\n    );\n  }\n\n  if (error || !parsed) {\n    return <RendererError message={error || t('subtitle.parse_failed')} />;\n  }\n\n  const isLyric = parsed.format === 'lrc' || parsed.format === 'elrc';\n  const meta = parsed.metadata ?? {};\n  const dotHover = isLyric ? 'group-hover:rfp-bg-violet-400' : 'group-hover:rfp-bg-sky-400';\n\n  return (\n    <div className=\"rfp-relative rfp-w-full rfp-h-full rfp-bg-[#0f0f12]\">\n      {/* 内容滚动区 */}\n      <div className=\"rfp-w-full rfp-h-full rfp-overflow-auto rfp-px-4 rfp-pt-6 rfp-pb-16\">\n        <div className=\"rfp-relative\">\n          {/* vertical line */}\n          <div className=\"rfp-absolute rfp-left-[5px] rfp-top-2 rfp-bottom-2 rfp-w-px rfp-bg-surface-1\" />\n\n          <ol className=\"rfp-space-y-5\">\n            {parsed.cues.map((cue, i) => (\n              <li key={`cue-${i}`} className=\"rfp-relative rfp-pl-6 rfp-group\">\n                {/* dot */}\n                <div\n                  className={`rfp-absolute rfp-left-0 rfp-top-[0.4rem] rfp-w-3 rfp-h-3 rfp-rounded-full rfp-bg-surface-3 rfp-border-2 rfp-border-[#0f0f12] rfp-transition-colors ${dotHover}`}\n                />\n\n                <div className=\"rfp-flex rfp-flex-wrap rfp-items-baseline rfp-gap-x-3 rfp-gap-y-1 rfp-mb-1.5\">\n                  <span className=\"rfp-text-[11px] rfp-font-mono rfp-text-fg-muted rfp-tabular-nums\">\n                    {formatSubtitleTime(cue.start)}\n                  </span>\n                  <span className=\"rfp-text-[11px] rfp-text-fg-disabled\">→</span>\n                  <span className=\"rfp-text-[11px] rfp-font-mono rfp-text-fg-muted rfp-tabular-nums\">\n                    {formatSubtitleTime(cue.end)}\n                  </span>\n                  <span className=\"rfp-text-[10px] rfp-font-mono rfp-text-fg-disabled rfp-tabular-nums\">\n                    #{cue.id ?? i + 1}\n                  </span>\n                  {cue.style && (\n                    <span className=\"rfp-text-[9px] rfp-uppercase rfp-tracking-widest rfp-text-fg-tertiary rfp-px-1.5 rfp-py-0.5 rfp-rounded rfp-bg-surface-1 rfp-border rfp-border-line-weak\">\n                      {cue.style}\n                    </span>\n                  )}\n                </div>\n\n                {cue.words && cue.words.length > 0 ? (\n                  <div className=\"rfp-flex rfp-flex-wrap rfp-gap-x-1.5 rfp-gap-y-1 rfp-text-base rfp-text-fg-primary rfp-leading-relaxed group-hover:rfp-text-fg-primary rfp-transition-colors\">\n                    {cue.words.map((word, wi) => (\n                      <span\n                        key={`w-${wi}`}\n                        className=\"rfp-inline-flex rfp-flex-col rfp-items-start\"\n                        title={formatSubtitleTime(word.start)}\n                      >\n                        <span className=\"rfp-text-[9px] rfp-text-fg-disabled rfp-font-mono rfp-leading-none rfp-tabular-nums\">\n                          {formatSubtitleTime(word.start).slice(3, 8)}\n                        </span>\n                        <span className=\"rfp-leading-snug\">{word.text}</span>\n                      </span>\n                    ))}\n                  </div>\n                ) : (\n                  <p\n                    className={`rfp-whitespace-pre-wrap rfp-break-words rfp-leading-relaxed group-hover:rfp-text-fg-primary rfp-transition-colors rfp-text-fg-primary rfp-min-h-[1.25rem] ${\n                      isLyric ? 'rfp-text-base rfp-font-medium' : 'rfp-text-sm'\n                    }`}\n                  >\n                    {cue.text}\n                  </p>\n                )}\n              </li>\n            ))}\n          </ol>\n        </div>\n      </div>\n\n      {/* 底部状态栏 */}\n      <div className=\"rfp-pointer-events-none rfp-absolute rfp-bottom-3 rfp-right-3 rfp-flex rfp-items-center rfp-gap-2 rfp-px-2.5 rfp-py-1 rfp-rounded-full rfp-bg-surface-nav rfp-backdrop-blur rfp-border rfp-border-line-weak rfp-text-[10px] rfp-text-fg-tertiary rfp-font-mono rfp-tabular-nums\">\n        <span>{parsed.cues.length} {isLyric ? t('subtitle.lines') : t('subtitle.cues')}</span>\n        {meta.length && (\n          <>\n            <span className=\"rfp-text-fg-disabled\">·</span>\n            <span>{meta.length}</span>\n          </>\n        )}\n      </div>\n    </div>\n  );\n});\n","import React, { useEffect, useImperativeHandle, useRef, useState, useCallback, forwardRef } from 'react';\n\nexport interface ResizableSplitProps {\n  /** 左侧内容 */\n  left: React.ReactNode;\n  /** 右侧内容 */\n  right: React.ReactNode;\n  /** 左侧初始宽度（px）；传入 storageKey 时会从 localStorage 读取 */\n  initialLeftWidth?: number;\n  /** 左侧最小宽度（px） */\n  minLeftWidth?: number;\n  /** 左侧最大宽度（px），同时不超过 `容器宽 - minRightWidth - 分隔线宽` */\n  maxLeftWidth?: number;\n  /** 右侧至少保留的宽度（px） */\n  minRightWidth?: number;\n  /** localStorage 持久化 key；不传则不持久化 */\n  storageKey?: string;\n  /** 启用横向拖动的媒体查询，默认 `(min-width: 768px)` */\n  desktopMedia?: string;\n  /** 容器额外类名 */\n  className?: string;\n  /** 移动端使用 Tab 切换而非上下堆叠 */\n  mobileTabMode?: boolean;\n  /** Tab 模式下左侧标题 */\n  leftTabLabel?: string;\n  /** Tab 模式下右侧标题 */\n  rightTabLabel?: string;\n}\n\nexport interface ResizableSplitHandle {\n  switchTab: (tab: 'left' | 'right') => void;\n}\n\n/**\n * 通用可拖动分隔布局：\n * - 桌面端（由 `desktopMedia` 判定）横向分两栏，中间分隔线可左右拖动调整左栏宽度\n * - 移动端默认退化为上下堆叠（不显示分隔线）\n * - 设置 `mobileTabMode` 时移动端使用 Tab 切换显示\n * - 可选 `storageKey` 将宽度持久化到 localStorage\n */\nexport const ResizableSplit = forwardRef<ResizableSplitHandle, ResizableSplitProps>(({\n  left,\n  right,\n  initialLeftWidth = 280,\n  minLeftWidth = 160,\n  maxLeftWidth = 640,\n  minRightWidth = 200,\n  storageKey,\n  desktopMedia = '(min-width: 768px)',\n  className = '',\n  mobileTabMode = false,\n  leftTabLabel = '文件树',\n  rightTabLabel = '预览',\n}, ref) => {\n  const containerRef = useRef<HTMLDivElement>(null);\n  const [leftWidth, setLeftWidth] = useState<number>(() => {\n    if (storageKey && typeof window !== 'undefined') {\n      const saved = Number(window.localStorage.getItem(storageKey));\n      if (!isNaN(saved) && saved > 0) return saved;\n    }\n    return initialLeftWidth;\n  });\n  const [dragging, setDragging] = useState(false);\n  const [isDesktop, setIsDesktop] = useState(false);\n  const [activeTab, setActiveTab] = useState<'left' | 'right'>('left');\n\n  useImperativeHandle(ref, () => ({\n    switchTab: (tab) => setActiveTab(tab),\n  }), []);\n\n  // 响应式：监听媒体查询\n  useEffect(() => {\n    if (typeof window === 'undefined') return;\n    const mq = window.matchMedia(desktopMedia);\n    const handler = () => setIsDesktop(mq.matches);\n    handler();\n    mq.addEventListener('change', handler);\n    return () => mq.removeEventListener('change', handler);\n  }, [desktopMedia]);\n\n  // 拖动\n  useEffect(() => {\n    if (!dragging) return;\n    const handleMove = (e: MouseEvent) => {\n      if (!containerRef.current) return;\n      const rect = containerRef.current.getBoundingClientRect();\n      const x = e.clientX - rect.left;\n      const cap = rect.width - minRightWidth - 6;\n      const effectiveMax = Math.min(maxLeftWidth, cap);\n      const newW = Math.max(minLeftWidth, Math.min(effectiveMax, x));\n      setLeftWidth(newW);\n    };\n    const handleUp = () => setDragging(false);\n    window.addEventListener('mousemove', handleMove);\n    window.addEventListener('mouseup', handleUp);\n    const prevCursor = document.body.style.cursor;\n    const prevSelect = document.body.style.userSelect;\n    document.body.style.cursor = 'col-resize';\n    document.body.style.userSelect = 'none';\n    return () => {\n      window.removeEventListener('mousemove', handleMove);\n      window.removeEventListener('mouseup', handleUp);\n      document.body.style.cursor = prevCursor;\n      document.body.style.userSelect = prevSelect;\n    };\n  }, [dragging, minLeftWidth, maxLeftWidth, minRightWidth]);\n\n  // 持久化\n  useEffect(() => {\n    if (!storageKey || dragging) return;\n    try {\n      window.localStorage.setItem(storageKey, String(leftWidth));\n    } catch {\n      // ignore\n    }\n  }, [leftWidth, storageKey, dragging]);\n\n  const handleDividerDown = useCallback((e: React.MouseEvent) => {\n    e.preventDefault();\n    setDragging(true);\n  }, []);\n\n  // 移动端 Tab 模式\n  if (mobileTabMode && !isDesktop) {\n    return (\n      <div\n        ref={containerRef}\n        className={`rfp-w-full rfp-h-full rfp-flex rfp-flex-col rfp-min-h-0 rfp-min-w-0 ${className}`}\n      >\n        <div className=\"rfp-flex rfp-flex-shrink-0 rfp-border-b rfp-border-line-weak rfp-bg-surface-toolbar\">\n          <button\n            type=\"button\"\n            onClick={() => setActiveTab('left')}\n            className={`rfp-flex-1 rfp-py-2.5 rfp-text-sm rfp-transition-colors ${\n              activeTab === 'left'\n                ? 'rfp-text-fg-primary rfp-border-b-2 rfp-border-fg-primary -rfp-mb-px'\n                : 'rfp-text-fg-secondary'\n            }`}\n          >\n            {leftTabLabel}\n          </button>\n          <button\n            type=\"button\"\n            onClick={() => setActiveTab('right')}\n            className={`rfp-flex-1 rfp-py-2.5 rfp-text-sm rfp-transition-colors ${\n              activeTab === 'right'\n                ? 'rfp-text-fg-primary rfp-border-b-2 rfp-border-fg-primary -rfp-mb-px'\n                : 'rfp-text-fg-secondary'\n            }`}\n          >\n            {rightTabLabel}\n          </button>\n        </div>\n        <div\n          className=\"rfp-flex-1 rfp-min-h-0 rfp-min-w-0 rfp-w-full rfp-overflow-hidden\"\n          style={{ display: activeTab === 'left' ? undefined : 'none' }}\n        >\n          {left}\n        </div>\n        <div\n          className=\"rfp-flex-1 rfp-min-h-0 rfp-min-w-0 rfp-w-full rfp-overflow-hidden\"\n          style={{ display: activeTab === 'right' ? undefined : 'none' }}\n        >\n          {right}\n        </div>\n      </div>\n    );\n  }\n\n  return (\n    <div\n      ref={containerRef}\n      className={`rfp-w-full rfp-h-full rfp-flex rfp-flex-col md:rfp-flex-row rfp-min-h-0 rfp-min-w-0 ${className}`}\n    >\n      <div\n        className=\"rfp-min-h-0 rfp-min-w-0 rfp-flex-shrink-0 rfp-w-full rfp-max-h-60 md:rfp-h-full md:rfp-max-h-none\"\n        style={isDesktop ? { width: `${leftWidth}px` } : undefined}\n      >\n        {left}\n      </div>\n      {/* 分隔线：仅桌面显示 */}\n      <div\n        role=\"separator\"\n        aria-orientation=\"vertical\"\n        onMouseDown={handleDividerDown}\n        className={`rfp-hidden md:rfp-block rfp-relative rfp-w-1.5 rfp-flex-shrink-0 rfp-cursor-col-resize rfp-transition-colors ${\n          dragging ? 'rfp-bg-surface-toolbar' : 'rfp-bg-surface-2 hover:rfp-bg-surface-3'\n        }`}\n      >\n        {/* 加宽命中区，改善拖动体验 */}\n        <span className=\"rfp-absolute rfp-inset-y-0 -rfp-left-1 -rfp-right-1\" />\n      </div>\n      <div className=\"rfp-flex-1 rfp-min-w-0 rfp-min-h-0 rfp-overflow-hidden\">{right}</div>\n    </div>\n  );\n});\n\nResizableSplit.displayName = 'ResizableSplit';\n","import { useState, useEffect, useMemo, useCallback, useRef, lazy, Suspense, forwardRef, useImperativeHandle } from 'react';\nimport React from 'react';\nimport { createPortal } from 'react-dom';\nimport {\n  Folder,\n  FolderOpen,\n  FileText,\n  FileImage,\n  FileCode,\n  File as FileIcon,\n  ChevronRight,\n} from 'lucide-react';\nimport { RendererError } from '../RendererError';\nimport type { RendererHandle } from '../base.types';\nimport type JSZip from 'jszip';\nimport {\n  loadZip,\n  listZipEntries,\n  buildZipTree,\n  readZipEntryBlob,\n  formatFileSize,\n  getFileType,\n  inferMimeType,\n  type ZipTreeNode,\n} from '@eternalheart/file-preview-core';\nimport { ResizableSplit, type ResizableSplitHandle } from '../../components/ResizableSplit';\nimport { useTranslator } from '../../i18n/LocaleContext';\nimport { useFetcher } from '../../RequestContext';\n\nexport interface ZipToolbarStats {\n  files: number;\n  dirs: number;\n  size: number;\n}\n\n// 懒加载 FilePreviewContent 以打破循环依赖\nconst LazyFilePreviewContent = lazy(() =>\n  import('../../FilePreviewContent').then(m => ({ default: m.FilePreviewContent }))\n);\n\ninterface ZipRendererProps {\n  url: string;\n  /** ZIP 嵌套深度（由 FilePreviewContent 传入） */\n  nestingDepth?: number;\n  /** 解析完成后向外回报统计信息（files / dirs / size），供工具栏展示 */\n  onStatsChange?: (stats: ZipToolbarStats | null) => void;\n}\n\ninterface SelectedPreview {\n  path: string;\n  name: string;\n  size: number;\n  blobUrl: string;\n}\n\n/** 根据文件类型返回树节点图标 */\nconst resolveIcon = (name: string) => {\n  const ft = getFileType({ id: '', name, url: '', type: '' });\n  if (ft === 'image') return FileImage;\n  if (ft === 'text' || ft === 'markdown' || ft === 'json' || ft === 'csv' || ft === 'xml' || ft === 'subtitle') {\n    return name.endsWith('.md') || name.endsWith('.markdown') ? FileText : FileCode;\n  }\n  return FileIcon;\n};\n\n// ---------- Tooltip via portal ----------\n\ninterface HoverTipState {\n  text: string;\n  x: number;\n  y: number;\n}\n\n// ---------- Tree item ----------\n\ninterface TreeItemProps {\n  node: ZipTreeNode;\n  depth: number;\n  selectedPath: string | null;\n  expanded: Set<string>;\n  onToggle: (path: string) => void;\n  onSelect: (node: ZipTreeNode) => void;\n  onHover: (text: string, rect: DOMRect) => void;\n  onLeave: () => void;\n}\n\nconst TreeItem: React.FC<TreeItemProps> = ({\n  node,\n  depth,\n  selectedPath,\n  expanded,\n  onToggle,\n  onSelect,\n  onHover,\n  onLeave,\n}) => {\n  const isOpen = expanded.has(node.path);\n  const isSelected = selectedPath === node.path;\n  const pad = { paddingLeft: `${depth * 14 + 10}px` };\n  const handleEnter = (e: React.MouseEvent<HTMLElement>) => {\n    const rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n    onHover(node.name || '/', rect);\n  };\n\n  if (node.isDir) {\n    return (\n      <>\n        <button\n          type=\"button\"\n          onClick={() => onToggle(node.path)}\n          onMouseEnter={handleEnter}\n          onMouseLeave={onLeave}\n          className=\"rfp-w-full rfp-flex rfp-items-center rfp-gap-1.5 rfp-py-1.5 rfp-pr-2 rfp-text-left rfp-text-fg-secondary hover:rfp-bg-surface-1 rfp-text-sm\"\n          style={pad}\n        >\n          <ChevronRight\n            className={`rfp-w-3.5 rfp-h-3.5 rfp-flex-shrink-0 rfp-transition-transform ${\n              isOpen ? 'rfp-rotate-90' : ''\n            }`}\n          />\n          {isOpen ? (\n            <FolderOpen className=\"rfp-w-4 rfp-h-4 rfp-flex-shrink-0 rfp-text-amber-300/80\" />\n          ) : (\n            <Folder className=\"rfp-w-4 rfp-h-4 rfp-flex-shrink-0 rfp-text-amber-300/80\" />\n          )}\n          <span className=\"rfp-truncate rfp-flex-1 rfp-min-w-0\">{node.name || '/'}</span>\n        </button>\n        {isOpen &&\n          node.children?.map((child) => (\n            <TreeItem\n              key={child.path}\n              node={child}\n              depth={depth + 1}\n              selectedPath={selectedPath}\n              expanded={expanded}\n              onToggle={onToggle}\n              onSelect={onSelect}\n              onHover={onHover}\n              onLeave={onLeave}\n            />\n          ))}\n      </>\n    );\n  }\n\n  const Icon = resolveIcon(node.name);\n\n  return (\n    <button\n      type=\"button\"\n      onClick={() => onSelect(node)}\n      onMouseEnter={handleEnter}\n      onMouseLeave={onLeave}\n      className={`rfp-w-full rfp-flex rfp-items-center rfp-gap-1.5 rfp-py-1.5 rfp-pr-2 rfp-text-left rfp-text-sm ${\n        isSelected ? 'rfp-bg-surface-2 rfp-text-fg-primary' : 'rfp-text-fg-secondary hover:rfp-bg-surface-1'\n      }`}\n      style={pad}\n    >\n      <span className=\"rfp-w-3.5 rfp-h-3.5 rfp-flex-shrink-0\" />\n      <Icon className=\"rfp-w-4 rfp-h-4 rfp-flex-shrink-0 rfp-text-fg-tertiary\" />\n      <span className=\"rfp-flex-1 rfp-truncate rfp-min-w-0\">{node.name}</span>\n      <span className=\"rfp-text-xs rfp-text-fg-disabled rfp-flex-shrink-0 rfp-ml-2\">\n        {formatFileSize(node.size)}\n      </span>\n    </button>\n  );\n};\n\n// ---------- Main Zip Renderer ----------\n\nexport const ZipRenderer = forwardRef<RendererHandle, ZipRendererProps>(({ url, nestingDepth = 0, onStatsChange }, ref) => {\n  const t = useTranslator();\n  const fetcher = useFetcher();\n  const [zip, setZip] = useState<JSZip | null>(null);\n  const [tree, setTree] = useState<ZipTreeNode | null>(null);\n  const [loading, setLoading] = useState(true);\n  const [error, setError] = useState<string | null>(null);\n  const [expanded, setExpanded] = useState<Set<string>>(new Set(['']));\n  const [selected, setSelected] = useState<SelectedPreview | null>(null);\n  const [previewLoading, setPreviewLoading] = useState(false);\n  const [previewError, setPreviewError] = useState<string | null>(null);\n  const [hoverTip, setHoverTip] = useState<HoverTipState | null>(null);\n  const onStatsChangeRef = useRef(onStatsChange);\n  const splitRef = useRef<ResizableSplitHandle>(null);\n\n  useEffect(() => {\n    onStatsChangeRef.current = onStatsChange;\n  }, [onStatsChange]);\n\n  useEffect(() => {\n    // 只有 URL 有效时才加载（避免空字符串或已 revoke 的 blob URL）\n    if (!url) return;\n\n    let cancelled = false;\n    const load = async () => {\n      try {\n        setLoading(true);\n        setError(null);\n        const res = await fetcher(url);\n        if (!res.ok) throw new Error('加载失败');\n        const buf = await res.arrayBuffer();\n        const z = await loadZip(buf);\n        if (cancelled) return;\n        const entries = listZipEntries(z);\n        const root = buildZipTree(entries);\n        setZip(z);\n        setTree(root);\n        const init = new Set<string>(['']);\n        if (root.children) {\n          for (const c of root.children) if (c.isDir) init.add(c.path);\n        }\n        setExpanded(init);\n      } catch (err) {\n        console.error(err);\n        if (!cancelled) setError(t('zip.load_failed'));\n      } finally {\n        if (!cancelled) setLoading(false);\n      }\n    };\n    load();\n    return () => {\n      cancelled = true;\n    };\n  }, [url]);\n\n  // 切换文件时回收 blob URL\n  useEffect(() => {\n    return () => {\n      if (selected?.blobUrl) URL.revokeObjectURL(selected.blobUrl);\n    };\n  }, [selected]);\n\n  const totalStats = useMemo<ZipToolbarStats | null>(() => {\n    if (!tree) return null;\n    let files = 0;\n    let dirs = 0;\n    let size = 0;\n    const walk = (n: ZipTreeNode) => {\n      if (n.isDir) {\n        if (n.path) dirs++;\n        n.children?.forEach(walk);\n      } else {\n        files++;\n        size += n.size;\n      }\n    };\n    walk(tree);\n    return { files, dirs, size };\n  }, [tree]);\n\n  // 向外回报 stats\n  useEffect(() => {\n    onStatsChangeRef.current?.(totalStats);\n    return () => {\n      onStatsChangeRef.current?.(null);\n    };\n  }, [totalStats]);\n\n  const handleToggle = useCallback((path: string) => {\n    setExpanded((prev) => {\n      const next = new Set(prev);\n      if (next.has(path)) next.delete(path);\n      else next.add(path);\n      return next;\n    });\n  }, []);\n\n  const handleHover = useCallback((text: string, rect: DOMRect) => {\n    setHoverTip({\n      text,\n      x: rect.right + 8,\n      y: rect.top + rect.height / 2,\n    });\n  }, []);\n\n  const handleLeave = useCallback(() => {\n    setHoverTip(null);\n  }, []);\n\n  const handleSelect = useCallback(\n    async (node: ZipTreeNode) => {\n      if (!zip || node.isDir) return;\n      if (selected?.blobUrl) URL.revokeObjectURL(selected.blobUrl);\n      setPreviewLoading(true);\n      setPreviewError(null);\n\n      try {\n        const mime = inferMimeType(node.name);\n        const blob = await readZipEntryBlob(zip, node.path, mime !== 'application/octet-stream' ? mime : undefined);\n        const blobUrl = URL.createObjectURL(blob);\n        setSelected({ path: node.path, name: node.name, size: node.size, blobUrl });\n        // 移动端切换到预览 tab\n        splitRef.current?.switchTab('right');\n      } catch (err) {\n        console.error(err);\n        setPreviewError('条目读取失败');\n      } finally {\n        setPreviewLoading(false);\n      }\n    },\n    [zip, selected]\n  );\n\n  // Memoize files 数组以避免无限重新渲染\n  const previewFiles = useMemo(() => {\n    if (!selected) return [];\n    return [{ name: selected.name, url: selected.blobUrl, type: inferMimeType(selected.name) }];\n  }, [selected]);\n\n  // 暴露接口给父组件（必须在 early return 之前调用）\n  useImperativeHandle(ref, () => ({\n    getToolbarGroups: () => [],\n  }), []);\n\n  if (loading) {\n    return (\n      <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full\">\n        <div className=\"rfp-w-12 rfp-h-12 rfp-border-4 rfp-border-line-strong rfp-border-t-spinner-head rfp-rounded-full rfp-animate-spin\" />\n      </div>\n    );\n  }\n\n  if (error || !tree) {\n    return <RendererError message={error || t('zip.parse_failed')} />;\n  }\n\n  // 左侧：文件树\n  const leftPane = (\n    <div className=\"rfp-w-full rfp-h-full rfp-overflow-auto\">\n      {tree.children?.map((child) => (\n        <TreeItem\n          key={child.path}\n          node={child}\n          depth={0}\n          selectedPath={selected?.path ?? null}\n          expanded={expanded}\n          onToggle={handleToggle}\n          onSelect={handleSelect}\n          onHover={handleHover}\n          onLeave={handleLeave}\n        />\n      ))}\n    </div>\n  );\n\n  // 右侧：预览区\n  const rightPane = (\n    <div className=\"rfp-w-full rfp-h-full rfp-flex rfp-flex-col\">\n      {!selected && (\n        <div className=\"rfp-flex-1 rfp-flex rfp-items-center rfp-justify-center rfp-text-fg-muted rfp-text-sm rfp-p-6\">\n          从左侧选择一个文件以预览\n        </div>\n      )}\n      {selected && previewLoading && (\n        <div className=\"rfp-flex-1 rfp-flex rfp-items-center rfp-justify-center\">\n          <div className=\"rfp-w-8 rfp-h-8 rfp-border-4 rfp-border-line-strong rfp-border-t-spinner-head rfp-rounded-full rfp-animate-spin\" />\n        </div>\n      )}\n      {selected && !previewLoading && previewError && (\n        <div className=\"rfp-flex-1 rfp-flex rfp-items-center rfp-justify-center rfp-text-fg-secondary\">\n          {previewError}\n        </div>\n      )}\n      {selected && !previewLoading && !previewError && (\n        <>\n          <div className=\"rfp-flex-1 rfp-min-h-0 rfp-overflow-hidden rfp-flex rfp-relative rfp-z-0\">\n            <Suspense\n              fallback={\n                <div className=\"rfp-flex-1 rfp-flex rfp-items-center rfp-justify-center\">\n                  <div className=\"rfp-w-8 rfp-h-8 rfp-border-4 rfp-border-line-strong rfp-border-t-spinner-head rfp-rounded-full rfp-animate-spin\" />\n                </div>\n              }\n            >\n              <LazyFilePreviewContent\n                mode=\"embed\"\n                files={previewFiles}\n                currentIndex={0}\n                zipNestingDepth={nestingDepth + 1}\n              />\n            </Suspense>\n          </div>\n        </>\n      )}\n    </div>\n  );\n\n  return (\n    <>\n      <ResizableSplit\n        ref={splitRef}\n        left={leftPane}\n        right={rightPane}\n        initialLeftWidth={280}\n        minLeftWidth={180}\n        maxLeftWidth={560}\n        storageKey=\"rfp-zip-split-left\"\n        mobileTabMode\n        leftTabLabel=\"文件树\"\n        rightTabLabel=\"预览\"\n      />\n      {/* 文件名 hover tooltip（portal 到 body，避免被滚动区裁剪） */}\n      {hoverTip &&\n        typeof document !== 'undefined' &&\n        createPortal(\n          <div\n            className=\"rfp-fixed rfp-z-[9999] rfp-pointer-events-none rfp-px-2 rfp-py-1 rfp-bg-[rgba(0,0,0,0.85)] rfp-text-fg-primary rfp-text-xs rfp-rounded rfp-whitespace-nowrap rfp-shadow-lg\"\n            style={{\n              left: `${hoverTip.x}px`,\n              top: `${hoverTip.y}px`,\n              transform: 'translateY(-50%)',\n            }}\n          >\n            {hoverTip.text}\n          </div>,\n          document.body\n        )}\n    </>\n  );\n});\n","import { useState, useEffect, Fragment, forwardRef, useCallback, useImperativeHandle, useRef } from 'react';\nimport { fetchTextUtf8, getLanguageFromFileName } from '@eternalheart/file-preview-core';\nimport { useTranslator } from '../../i18n/LocaleContext';\nimport { useFetcher } from '../../RequestContext';\nimport { useShikiHighlight } from '../../hooks/useShikiHighlight';\nimport { RendererError } from '../RendererError';\nimport { WrapText, Code, Eye } from 'lucide-react';\nimport type { RendererHandle } from '../base.types';\nimport type { ToolbarGroup } from '../toolbar.types';\n\ninterface TextRendererProps {\n  url: string;\n  fileName: string;\n}\n\nexport const TextRenderer = forwardRef<RendererHandle, TextRendererProps>(({\n  url,\n  fileName,\n}, ref) => {\n  const t = useTranslator();\n  const fetcher = useFetcher();\n\n  // 内部状态管理\n  const [content, setContent] = useState<string>('');\n  const [loading, setLoading] = useState(true);\n  const [error, setError] = useState<string | null>(null);\n  const [wordWrap, setWordWrap] = useState(true);\n  const [htmlPreview, setHtmlPreview] = useState(false);\n\n  const language = getLanguageFromFileName(fileName);\n  const { lineHtmls } = useShikiHighlight(\n    language !== 'text' ? content : '',\n    language,\n  );\n\n  useEffect(() => {\n    const controller = new AbortController();\n    const loadText = async () => {\n      try {\n        setLoading(true);\n        setError(null);\n        const text = await fetchTextUtf8(url, { fetcher, signal: controller.signal });\n        setContent(text);\n      } catch (err: any) {\n        if (err.name === 'AbortError') return;\n        setError(t('text.load_failed'));\n        console.error(err);\n      } finally {\n        setLoading(false);\n      }\n    };\n\n    loadText();\n    return () => controller.abort();\n  }, [url]);\n\n  // 事件发射器：用于通知主组件工具栏状态变化\n  const listenersRef = useRef<Set<() => void>>(new Set());\n  const notifyToolbarChange = useCallback(() => {\n    listenersRef.current.forEach(listener => listener());\n  }, []);\n\n  // 监听影响工具栏的状态变化\n  useEffect(() => {\n    notifyToolbarChange();\n  }, [wordWrap, notifyToolbarChange]);\n\n  useEffect(() => {\n    notifyToolbarChange();\n  }, [htmlPreview, notifyToolbarChange]);\n\n  // 切换操作\n  const toggleWordWrap = useCallback(() => {\n    setWordWrap(prev => !prev);\n  }, []);\n\n  const toggleHtmlPreview = useCallback(() => {\n    setHtmlPreview(prev => !prev);\n  }, []);\n\n  // 工具栏配置\n  const getToolbarGroups = useCallback((): ToolbarGroup[] => {\n    const groups: ToolbarGroup[] = [\n      {\n        items: [\n          {\n            type: 'button',\n            icon: <WrapText className=\"rfp-w-4 rfp-h-4\" />,\n            tooltip: wordWrap ? t('toolbar.wrap_off') : t('toolbar.wrap_on'),\n            action: toggleWordWrap,\n            active: wordWrap,\n          },\n        ],\n      },\n    ];\n\n    // HTML 文件显示预览按钮\n    if (language === 'html') {\n      groups.push({\n        items: [\n          {\n            type: 'button',\n            icon: htmlPreview\n              ? <Code className=\"rfp-w-4 rfp-h-4\" />\n              : <Eye className=\"rfp-w-4 rfp-h-4\" />,\n            tooltip: htmlPreview ? t('toolbar.source') : t('toolbar.preview'),\n            action: toggleHtmlPreview,\n            active: htmlPreview,\n          },\n        ],\n      });\n    }\n\n    return groups;\n  }, [wordWrap, htmlPreview, language, t, toggleWordWrap, toggleHtmlPreview]);\n\n  // 暴露接口给父组件\n  useImperativeHandle(ref, () => ({\n    getToolbarGroups,\n    onToolbarChange: (listener: () => void) => {\n      listenersRef.current.add(listener);\n      return () => listenersRef.current.delete(listener);\n    },\n  }), [getToolbarGroups]);\n\n  if (loading) {\n    return (\n      <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full\">\n        <div className=\"rfp-w-12 rfp-h-12 rfp-border-4 rfp-border-line-strong rfp-border-t-spinner-head rfp-rounded-full rfp-animate-spin\" />\n      </div>\n    );\n  }\n\n  if (error) {\n    return <RendererError message={error} />;\n  }\n\n  // HTML 预览模式\n  if (htmlPreview && (language === 'html')) {\n    return (\n      <div className=\"rfp-w-full rfp-h-full rfp-bg-surface-toolbar\">\n        <iframe\n          srcDoc={content}\n          sandbox=\"allow-same-origin\"\n          className=\"rfp-w-full rfp-h-full rfp-border-0\"\n          title={fileName}\n        />\n      </div>\n    );\n  }\n\n  // 纯文本或高亮未就绪：fallback 到普通 pre\n  if (language === 'text' || lineHtmls.length === 0) {\n    return (\n      <div className=\"rfp-w-full rfp-h-full rfp-overflow-auto rfp-bg-code-bg\">\n        <pre\n          className={`rfp-py-6 rfp-px-4 rfp-text-fg-primary rfp-font-mono rfp-text-sm ${\n            wordWrap ? 'rfp-whitespace-pre-wrap rfp-break-words' : 'rfp-whitespace-pre'\n          }`}\n        >\n          {content}\n        </pre>\n      </div>\n    );\n  }\n\n  // 双列布局：左 gutter（行号），右 code（shiki 高亮）\n  const lines = content.split('\\n');\n  return (\n    <div className=\"rfp-w-full rfp-h-full rfp-overflow-auto rfp-bg-code-bg\">\n      <div\n        className={`rfp-code-block with-line-numbers ${wordWrap ? '' : 'no-wrap'} rfp-w-full`}\n        style={{ gridTemplateRows: `repeat(${lines.length}, auto) minmax(1.5rem, 1fr)` }}\n      >\n        {lines.map((_, i) => (\n          <Fragment key={i}>\n            <span className=\"rfp-code-gutter\">{i + 1}</span>\n            <span\n              className=\"rfp-code-line\"\n              dangerouslySetInnerHTML={{ __html: lineHtmls[i] ?? '' }}\n            />\n          </Fragment>\n        ))}\n        {/* 占位行：撑满剩余高度，让 gutter border 延伸到底部 */}\n        <span className=\"rfp-code-gutter-filler\" />\n        <span className=\"rfp-code-line-filler\" />\n      </div>\n    </div>\n  );\n});\n","import React, { useState, useEffect, useRef, useCallback, forwardRef, useImperativeHandle } from 'react';\nimport { parse } from 'opentype.js';\nimport type { Font as OpentypeFont } from 'opentype.js';\nimport { useTranslator } from '../../i18n/LocaleContext';\nimport { useFetcher } from '../../RequestContext';\nimport { useResolvedTheme } from '../../ThemeContext';\nimport { RendererError } from '../RendererError';\nimport type { RendererHandle } from '../base.types';\n\n// 字体文件魔数：用首 4 字节判断格式，比扩展名更可靠\nconst MAGIC_WOFF2 = 0x774f4632; // 'wOF2'\nconst MAGIC_WOFF = 0x774f4646;  // 'wOFF'\nconst MAGIC_OTTO = 0x4f54544f;  // 'OTTO' (OTF/CFF)\nconst MAGIC_TTF1 = 0x00010000;  // TTF\nconst MAGIC_TRUE = 0x74727565;  // 'true' (TTF on macOS)\n\ntype DetectedFormat = 'woff2' | 'woff' | 'otf' | 'ttf' | 'unknown';\n\nconst detectMagic = (buf: ArrayBuffer): DetectedFormat => {\n  if (buf.byteLength < 4) return 'unknown';\n  const m = new DataView(buf).getUint32(0);\n  if (m === MAGIC_WOFF2) return 'woff2';\n  if (m === MAGIC_WOFF) return 'woff';\n  if (m === MAGIC_OTTO) return 'otf';\n  if (m === MAGIC_TTF1 || m === MAGIC_TRUE) return 'ttf';\n  return 'unknown';\n};\n\nexport interface FontRendererProps {\n  url: string;\n}\n\ninterface FontMetadata {\n  family: string;\n  subfamily: string;\n  version: string;\n  designer: string;\n  glyphCount: number;\n  format: string;\n}\n\nconst DEFAULT_SAMPLES = {\n  latin: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ\\nabcdefghijklmnopqrstuvwxyz\\n0123456789 .,;:!?@#$%&*()[]{}',\n  chinese: '春夏秋冬东南西北天地人和风雨雷电山水日月',\n  mixed: 'The Quick Brown Fox Jumps Over The Lazy Dog\\n敏捷的棕色狐狸跳过了懒狗',\n};\n\nconst SIZES = [72, 48, 36, 24, 18];\n\n// 渲染模式：FontFace 用原生字体渲染，Canvas 用 opentype.js 软渲染（兼容浏览器拒绝的字体）\ntype RenderMode = 'fontface' | 'canvas';\n\n// 元数据状态：loading（解析中）/ ready（成功）/ unavailable（不支持解析或解析失败）\ntype MetadataStatus = 'loading' | 'ready' | 'unavailable';\n\nexport const FontRenderer = forwardRef<RendererHandle, FontRendererProps>(({ url }, ref) => {\n  const t = useTranslator();\n  const fetcher = useFetcher();\n  const resolvedTheme = useResolvedTheme();\n  const [font, setFont] = useState<OpentypeFont | null>(null);\n  const [metadata, setMetadata] = useState<FontMetadata | null>(null);\n  const [metadataStatus, setMetadataStatus] = useState<MetadataStatus>('loading');\n  const [loading, setLoading] = useState(true);\n  const [error, setError] = useState<string | null>(null);\n  const [customText, setCustomText] = useState('');\n  const [renderMode, setRenderMode] = useState<RenderMode>('fontface');\n  const fontFaceRef = useRef<FontFace | null>(null);\n\n  useEffect(() => {\n    if (!url) return;\n\n    let mounted = true;\n\n    const detectFormat = (url: string): string => {\n      const ext = url.split('.').pop()?.toLowerCase().split('?')[0] || '';\n      const formatMap: Record<string, string> = {\n        ttf: 'TrueType (TTF)',\n        otf: 'OpenType (OTF)',\n        woff: 'Web Open Font Format (WOFF)',\n        woff2: 'Web Open Font Format 2 (WOFF2)',\n      };\n      return formatMap[ext] || 'TTF';\n    };\n\n    const formatLabel = (magic: DetectedFormat, url: string): string => {\n      const labels: Record<DetectedFormat, string | null> = {\n        woff2: 'Web Open Font Format 2 (WOFF2)',\n        woff: 'Web Open Font Format (WOFF)',\n        otf: 'OpenType (OTF)',\n        ttf: 'TrueType (TTF)',\n        unknown: null,\n      };\n      return labels[magic] ?? detectFormat(url);\n    };\n\n    // 任务 A：FontFace 原生加载（浏览器对 WOFF2 原生支持，无需 wawoff2 解压）\n    const loadFontFace = async (faceBuffer: ArrayBuffer): Promise<void> => {\n      try {\n        const face = new FontFace('PreviewFont', faceBuffer);\n        await face.load();\n        if (!mounted) return;\n        document.fonts.add(face);\n        fontFaceRef.current = face;\n        setRenderMode('fontface');\n      } catch (faceErr) {\n        console.warn('[FontRenderer] FontFace API rejected, fallback to Canvas:', faceErr);\n        if (!mounted) return;\n        setRenderMode('canvas');\n        throw faceErr;\n      }\n    };\n\n    // 任务 B：opentype 元数据解析。WOFF2 由浏览器原生渲染即可,不解析元数据\n    // （opentype.js 不支持 Brotli;独立解压链路引入 emscripten wasm 与挂死风险,代价过大)\n    const loadMetadata = async (\n      arrayBuffer: ArrayBuffer,\n      magic: DetectedFormat,\n    ): Promise<void> => {\n      if (magic === 'woff2') {\n        // 直接标记为不可用,但保留 format 信息\n        throw new Error('WOFF2 metadata parsing intentionally skipped');\n      }\n\n      const fontData = parse(arrayBuffer) as unknown as OpentypeFont;\n      if (!fontData) {\n        throw new Error('Font data is invalid');\n      }\n\n      // opentype.js 2.x 的 names 嵌在 platform 表下,优先 windows / macintosh / unicode,再回退 1.x 平铺\n      const rawNames = (fontData.names || {}) as unknown as Record<string, unknown>;\n      const platformTables = ['windows', 'macintosh', 'unicode']\n        .map((k) => rawNames[k])\n        .filter((t): t is Record<string, { en?: string; 'zh-Hans'?: string }> => !!t && typeof t === 'object');\n      const pickName = (key: string): string => {\n        for (const table of platformTables) {\n          const entry = table[key];\n          const val = entry?.en || entry?.['zh-Hans'];\n          if (val) return val;\n        }\n        const flat = rawNames[key] as { en?: string; 'zh-Hans'?: string } | undefined;\n        return flat?.en || flat?.['zh-Hans'] || '';\n      };\n\n      const meta: FontMetadata = {\n        family: pickName('fontFamily') || pickName('postScriptName') || 'Unknown',\n        subfamily: pickName('fontSubfamily'),\n        version: pickName('version'),\n        designer: pickName('designer'),\n        glyphCount: fontData.numGlyphs || 0,\n        format: formatLabel(magic, url),\n      };\n\n      if (!mounted) return;\n      setFont(fontData);\n      setMetadata(meta);\n      setMetadataStatus('ready');\n    };\n\n    const run = async () => {\n      try {\n        setLoading(true);\n        setError(null);\n        setMetadataStatus('loading');\n\n        const response = await fetcher(url);\n        if (!response.ok) {\n          throw new Error('Failed to load font file');\n        }\n        const arrayBuffer = await response.arrayBuffer();\n        if (!mounted) return;\n\n        const faceBuffer = arrayBuffer.slice(0);\n        const magic = detectMagic(arrayBuffer);\n\n        // 并行启动 FontFace 与 opentype 解析\n        const facePromise = loadFontFace(faceBuffer);\n        const metadataPromise = loadMetadata(arrayBuffer, magic);\n\n        await facePromise.catch(() => {\n          // FontFace 失败由 metadata 兜底\n        });\n        if (!mounted) return;\n        setLoading(false);\n\n        try {\n          await metadataPromise;\n        } catch (metaErr) {\n          if (!mounted) return;\n          // WOFF2 是“按设计跳过”，其他格式失败才需要 warn\n          if (magic !== 'woff2') {\n            console.warn(\n              '[FontRenderer] Metadata parse failed, font is still rendered via FontFace:',\n              metaErr instanceof Error ? metaErr.message : String(metaErr),\n            );\n          }\n          setMetadataStatus('unavailable');\n          setMetadata({\n            family: 'Unknown',\n            subfamily: '',\n            version: '',\n            designer: '',\n            glyphCount: 0,\n            format: formatLabel(magic, url),\n          });\n        }\n      } catch (err) {\n        if (!mounted) return;\n        console.warn(\n          '[FontRenderer] Failed to load font:',\n          err instanceof Error ? err.message : String(err),\n        );\n        setError(t('font.load_failed'));\n        setLoading(false);\n        setMetadataStatus('unavailable');\n      }\n    };\n\n    run();\n\n    return () => {\n      mounted = false;\n      if (fontFaceRef.current) {\n        document.fonts.delete(fontFaceRef.current);\n        fontFaceRef.current = null;\n      }\n    };\n  }, [url, fetcher, t]);\n\n  // 暴露接口给父组件\n  useImperativeHandle(ref, () => ({\n    getToolbarGroups: () => [],\n  }), []);\n\n  if (loading) {\n    return (\n      <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full\">\n        <div className=\"rfp-text-fg-secondary\">{t('font.loading')}</div>\n      </div>\n    );\n  }\n\n  if (error || !metadata) {\n    return <RendererError message={error || t('font.parse_failed')} />;\n  }\n\n  const displayText = customText || DEFAULT_SAMPLES.mixed;\n  const metadataLoadingLabel = t('font.metadata_loading');\n  const metadataUnavailableLabel = t('font.metadata_unavailable');\n  const showMetaPlaceholder = metadataStatus !== 'ready';\n  const metaPlaceholder = metadataStatus === 'loading' ? metadataLoadingLabel : metadataUnavailableLabel;\n  // Canvas 模式必须有 font 才能绘制；没有 font（如 WOFF2 跳过解析）只能保留 FontFace 路径\n  const canRenderCanvas = renderMode === 'canvas' && !!font;\n\n  return (\n    <div className=\"rfp-flex rfp-flex-col rfp-w-full rfp-h-full rfp-overflow-hidden rfp-min-w-0\">\n      {/* 元数据区 */}\n      <div className=\"rfp-flex-shrink-0 rfp-px-6 rfp-py-4 rfp-bg-surface-1 rfp-border-b rfp-border-line-weak rfp-min-w-0\">\n        <div className=\"rfp-grid rfp-grid-cols-2 rfp-gap-x-6 rfp-gap-y-2 rfp-text-sm rfp-min-w-0\">\n          <div className=\"rfp-flex rfp-items-center rfp-gap-2 rfp-min-w-0\">\n            <span className=\"rfp-text-fg-tertiary rfp-flex-shrink-0\">{t('font.meta.family')}:</span>\n            <span className=\"rfp-text-fg-primary rfp-font-semibold rfp-truncate\">\n              {showMetaPlaceholder ? metaPlaceholder : metadata.family}\n            </span>\n          </div>\n          {metadata.subfamily && (\n            <div className=\"rfp-flex rfp-items-center rfp-gap-2 rfp-min-w-0\">\n              <span className=\"rfp-text-fg-tertiary rfp-flex-shrink-0\">{t('font.meta.subfamily')}:</span>\n              <span className=\"rfp-text-fg-primary rfp-truncate\">{metadata.subfamily}</span>\n            </div>\n          )}\n          <div className=\"rfp-flex rfp-items-center rfp-gap-2 rfp-min-w-0\">\n            <span className=\"rfp-text-fg-tertiary rfp-flex-shrink-0\">{t('font.meta.format')}:</span>\n            <span className=\"rfp-text-fg-primary rfp-truncate\">{metadata.format}</span>\n          </div>\n          <div className=\"rfp-flex rfp-items-center rfp-gap-2 rfp-min-w-0\">\n            <span className=\"rfp-text-fg-tertiary rfp-flex-shrink-0\">{t('font.meta.glyphs')}:</span>\n            <span className=\"rfp-text-fg-primary rfp-truncate\">\n              {showMetaPlaceholder ? metaPlaceholder : metadata.glyphCount}\n            </span>\n          </div>\n          {metadata.designer && (\n            <div className=\"rfp-flex rfp-items-center rfp-gap-2 rfp-min-w-0\">\n              <span className=\"rfp-text-fg-tertiary rfp-flex-shrink-0\">{t('font.meta.designer')}:</span>\n              <span className=\"rfp-text-fg-primary rfp-truncate\">{metadata.designer}</span>\n            </div>\n          )}\n          {metadata.version && (\n            <div className=\"rfp-flex rfp-items-center rfp-gap-2 rfp-min-w-0\">\n              <span className=\"rfp-text-fg-tertiary rfp-flex-shrink-0\">{t('font.meta.version')}:</span>\n              <span className=\"rfp-text-fg-primary rfp-truncate\">{metadata.version}</span>\n            </div>\n          )}\n        </div>\n      </div>\n\n      {/* 预览区 */}\n      <div className=\"rfp-flex-1 rfp-overflow-auto rfp-min-w-0\">\n        <div className=\"rfp-px-6 rfp-py-6 rfp-space-y-8 rfp-min-w-0\">\n          {/* 自定义输入框 */}\n          <div className=\"rfp-min-w-0\">\n            <label className=\"rfp-block rfp-text-xs rfp-text-fg-tertiary rfp-mb-2\">\n              {t('font.sample_text_placeholder')}\n            </label>\n            <textarea\n              className=\"rfp-block rfp-w-full rfp-box-border rfp-px-3 rfp-py-2.5 rfp-bg-surface-2 rfp-text-fg-primary rfp-text-sm rfp-leading-relaxed rfp-border rfp-border-line rfp-rounded-md rfp-resize-y focus:rfp-outline-none focus:rfp-border-line-strong\"\n              rows={2}\n              placeholder={t('font.sample_text_placeholder')}\n              value={customText}\n              onChange={(e) => setCustomText(e.target.value)}\n              style={{ minHeight: '64px', maxHeight: '160px' }}\n            />\n          </div>\n\n          {/* 多字号展示 */}\n          <div className=\"rfp-space-y-6 rfp-min-w-0\">\n            {SIZES.map((size) => (\n              <div key={size} className=\"rfp-space-y-2 rfp-min-w-0\">\n                <div className=\"rfp-text-xs rfp-text-fg-tertiary\">{size}px</div>\n                <FontPreviewLine\n                  font={font}\n                  text={displayText}\n                  fontSize={size}\n                  renderMode={canRenderCanvas ? 'canvas' : 'fontface'}\n                  theme={resolvedTheme}\n                />\n              </div>\n            ))}\n          </div>\n\n          {/* 字符集样例 */}\n          <div className=\"rfp-space-y-6 rfp-pt-6 rfp-border-t rfp-border-line-weak rfp-min-w-0\">\n            <div className=\"rfp-min-w-0\">\n              <div className=\"rfp-text-sm rfp-text-fg-tertiary rfp-mb-3\">Latin Alphabet</div>\n              <FontPreviewLine\n                font={font}\n                text={DEFAULT_SAMPLES.latin}\n                fontSize={24}\n                renderMode={canRenderCanvas ? 'canvas' : 'fontface'}\n                theme={resolvedTheme}\n              />\n            </div>\n\n            <div className=\"rfp-min-w-0\">\n              <div className=\"rfp-text-sm rfp-text-fg-tertiary rfp-mb-3\">Chinese Characters</div>\n              <FontPreviewLine\n                font={font}\n                text={DEFAULT_SAMPLES.chinese}\n                fontSize={24}\n                renderMode={canRenderCanvas ? 'canvas' : 'fontface'}\n                theme={resolvedTheme}\n              />\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n});\n\ninterface FontPreviewLineProps {\n  font: OpentypeFont | null;\n  text: string;\n  fontSize: number;\n  renderMode: RenderMode;\n  theme: 'dark' | 'light';\n}\n\nconst FontPreviewLine: React.FC<FontPreviewLineProps> = ({ font, text, fontSize, renderMode, theme }) => {\n  const wrapperRef = useRef<HTMLDivElement>(null);\n  const canvasRef = useRef<HTMLCanvasElement>(null);\n\n  const drawCanvas = useCallback(() => {\n    const wrapper = wrapperRef.current;\n    const canvas = canvasRef.current;\n    if (!wrapper || !canvas || renderMode !== 'canvas' || !font) return;\n\n    const containerWidth = wrapper.clientWidth || 600;\n    const dpr = window.devicePixelRatio || 1;\n    const lineHeight = fontSize * 1.4;\n    const fillColor = theme === 'light' ? '#1f2937' : '#f3f4f6';\n\n    const wrapLine = (line: string): string[] => {\n      if (!line) return [''];\n      const result: string[] = [];\n      let buf = '';\n      for (const ch of Array.from(line)) {\n        const next = buf + ch;\n        const w = font.getAdvanceWidth(next, fontSize);\n        if (w > containerWidth && buf) {\n          result.push(buf);\n          buf = ch;\n        } else {\n          buf = next;\n        }\n      }\n      if (buf) result.push(buf);\n      return result;\n    };\n\n    const wrappedLines: string[] = [];\n    text.split('\\n').forEach((seg) => {\n      wrapLine(seg).forEach((l) => wrappedLines.push(l));\n    });\n\n    const width = containerWidth;\n    const height = lineHeight * wrappedLines.length + 4;\n\n    canvas.width = Math.max(1, Math.floor(width * dpr));\n    canvas.height = Math.max(1, Math.floor(height * dpr));\n    canvas.style.width = `${width}px`;\n    canvas.style.height = `${height}px`;\n\n    const ctx = canvas.getContext('2d');\n    if (!ctx) return;\n    ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n    ctx.clearRect(0, 0, width, height);\n\n    wrappedLines.forEach((line, idx) => {\n      const path = font.getPath(line, 0, fontSize + idx * lineHeight, fontSize);\n      path.fill = fillColor;\n      path.draw(ctx);\n    });\n  }, [font, text, fontSize, renderMode, theme]);\n\n  useEffect(() => {\n    if (renderMode !== 'canvas') return;\n    drawCanvas();\n    const wrapper = wrapperRef.current;\n    if (!wrapper || typeof ResizeObserver === 'undefined') return;\n    const observer = new ResizeObserver(() => drawCanvas());\n    observer.observe(wrapper);\n    return () => observer.disconnect();\n  }, [drawCanvas, renderMode]);\n\n  if (renderMode === 'canvas') {\n    return (\n      <div ref={wrapperRef} className=\"rfp-w-full\">\n        <canvas ref={canvasRef} className=\"rfp-block\" />\n      </div>\n    );\n  }\n\n  return (\n    <div\n      ref={wrapperRef}\n      className=\"rfp-w-full rfp-text-fg-primary rfp-whitespace-pre-wrap rfp-break-words\"\n      style={{\n        fontFamily: 'PreviewFont, sans-serif',\n        fontSize: `${fontSize}px`,\n        lineHeight: 1.4,\n      }}\n    >\n      {text}\n    </div>\n  );\n};\n","import React from 'react';\nimport { RotateCcw, Grid3x3, Axis3d, Box } from 'lucide-react';\nimport type { ToolbarGroup } from '../toolbar.types';\nimport type { Translator } from '@eternalheart/file-preview-core';\n\nexport interface CadRendererHandle {\n  resetView: () => void;\n  toggleWireframe: () => void;\n  toggleGrid: () => void;\n  toggleAxes: () => void;\n}\n\nexport interface CadToolbarContext {\n  cadRef: React.RefObject<CadRendererHandle | null>;\n  wireframe: boolean;\n  showGrid: boolean;\n  showAxes: boolean;\n  t: Translator;\n}\n\nexport function getCadToolbarGroups(ctx: CadToolbarContext): ToolbarGroup[] {\n  return [\n    {\n      items: [\n        {\n          type: 'button',\n          icon: <RotateCcw className=\"rfp-w-4 rfp-h-4\" />,\n          tooltip: ctx.t('toolbar.reset'),\n          action: () => ctx.cadRef.current?.resetView(),\n        },\n      ],\n    },\n    {\n      items: [\n        {\n          type: 'button',\n          icon: <Box className=\"rfp-w-4 rfp-h-4\" />,\n          tooltip: ctx.wireframe ? ctx.t('cad.solid') : ctx.t('cad.wireframe'),\n          active: ctx.wireframe,\n          action: () => ctx.cadRef.current?.toggleWireframe(),\n        },\n        {\n          type: 'button',\n          icon: <Grid3x3 className=\"rfp-w-4 rfp-h-4\" />,\n          tooltip: ctx.t('cad.grid'),\n          active: ctx.showGrid,\n          action: () => ctx.cadRef.current?.toggleGrid(),\n        },\n        {\n          type: 'button',\n          icon: <Axis3d className=\"rfp-w-4 rfp-h-4\" />,\n          tooltip: ctx.t('cad.axes'),\n          active: ctx.showAxes,\n          action: () => ctx.cadRef.current?.toggleAxes(),\n        },\n      ],\n    },\n  ];\n}\n","import { useEffect, useRef, useState, forwardRef, useImperativeHandle, useCallback } from 'react';\nimport * as THREE from 'three';\nimport { OrbitControls } from 'three/examples/jsm/controls/OrbitControls';\nimport { DXFLoader } from 'three-dxf-loader';\nimport { STLLoader } from 'three/examples/jsm/loaders/STLLoader';\nimport { OBJLoader } from 'three/examples/jsm/loaders/OBJLoader';\nimport { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader';\nimport { useTranslator } from '../../i18n/LocaleContext';\nimport { useFetcher } from '../../RequestContext';\nimport type { RendererHandle } from '../base.types';\nimport { getCadToolbarGroups } from './toolbar';\n\nexport interface CadRendererProps {\n  url: string;\n  file?: File;\n  fileName?: string;\n}\n\nexport const CadRenderer = forwardRef<RendererHandle, CadRendererProps>(({ url, file, fileName }, ref) => {\n  const t = useTranslator();\n  const fetcher = useFetcher();\n  const containerRef = useRef<HTMLDivElement>(null);\n  const sceneRef = useRef<THREE.Scene | null>(null);\n  const cameraRef = useRef<THREE.PerspectiveCamera | null>(null);\n  const rendererRef = useRef<THREE.WebGLRenderer | null>(null);\n  const controlsRef = useRef<OrbitControls | null>(null);\n  const modelRef = useRef<THREE.Object3D | null>(null);\n  const gridRef = useRef<THREE.GridHelper | null>(null);\n  const axesRef = useRef<THREE.AxesHelper | null>(null);\n  const cadRef = useRef<any>(null);\n\n  const [loading, setLoading] = useState(true);\n  const [error, setError] = useState<string | null>(null);\n  const [wireframe, setWireframe] = useState(false);\n  const [showGrid, setShowGrid] = useState(true);\n  const [showAxes, setShowAxes] = useState(true);\n\n  const listenersRef = useRef<Set<() => void>>(new Set());\n\n  const notifyToolbarChange = useCallback(() => {\n    listenersRef.current.forEach((listener) => listener());\n  }, []);\n\n  // 获取文件扩展名\n  const getExtension = (url: string, fileName?: string, file?: File): string => {\n    // 优先从 file.name 获取\n    if (file?.name) {\n      return file.name.split('.').pop()?.toLowerCase() || '';\n    }\n    // 其次从 fileName 获取\n    if (fileName) {\n      return fileName.split('.').pop()?.toLowerCase() || '';\n    }\n    // 最后从 URL 获取（但 blob URL 没有扩展名）\n    return url.split('.').pop()?.toLowerCase().split('?')[0] || '';\n  };\n\n  // 释放 THREE.js 资源\n  const disposeThreeResources = useCallback((obj: THREE.Object3D) => {\n    obj.traverse((child: any) => {\n      if (child.geometry) {\n        child.geometry.dispose();\n      }\n      if (child.material) {\n        if (Array.isArray(child.material)) {\n          child.material.forEach((mat: any) => {\n            disposeMaterial(mat);\n          });\n        } else {\n          disposeMaterial(child.material);\n        }\n      }\n    });\n  }, []);\n\n  const disposeMaterial = (material: any) => {\n    if (material.map) material.map.dispose();\n    if (material.lightMap) material.lightMap.dispose();\n    if (material.bumpMap) material.bumpMap.dispose();\n    if (material.normalMap) material.normalMap.dispose();\n    if (material.specularMap) material.specularMap.dispose();\n    if (material.envMap) material.envMap.dispose();\n    material.dispose();\n  };\n\n  // 重置视图\n  const resetView = useCallback(() => {\n    if (!controlsRef.current || !cameraRef.current || !modelRef.current) return;\n\n    const box = new THREE.Box3().setFromObject(modelRef.current);\n    const center = box.getCenter(new THREE.Vector3());\n    const size = box.getSize(new THREE.Vector3());\n    const maxDim = Math.max(size.x, size.y, size.z);\n    const fov = cameraRef.current.fov * (Math.PI / 180);\n    let cameraZ = Math.abs(maxDim / 2 / Math.tan(fov / 2));\n    cameraZ *= 1.5;\n\n    cameraRef.current.position.set(center.x + cameraZ, center.y + cameraZ, center.z + cameraZ);\n    cameraRef.current.lookAt(center);\n    controlsRef.current.target.copy(center);\n    controlsRef.current.update();\n  }, []);\n\n  // 切换线框模式\n  const toggleWireframe = useCallback(() => {\n    setWireframe((prev) => {\n      const newWireframe = !prev;\n      if (modelRef.current) {\n        modelRef.current.traverse((child: THREE.Object3D) => {\n          if (child instanceof THREE.Mesh) {\n            const material = child.material;\n            if (material) {\n              if (Array.isArray(material)) {\n                material.forEach((mat: any) => {\n                  mat.wireframe = newWireframe;\n                });\n              } else {\n                (material as any).wireframe = newWireframe;\n              }\n            }\n          }\n        });\n      }\n      notifyToolbarChange();\n      return newWireframe;\n    });\n  }, [notifyToolbarChange]);\n\n  // 切换网格\n  const toggleGrid = useCallback(() => {\n    setShowGrid((prev) => {\n      const newShow = !prev;\n      if (gridRef.current) {\n        gridRef.current.visible = newShow;\n      }\n      notifyToolbarChange();\n      return newShow;\n    });\n  }, [notifyToolbarChange]);\n\n  // 切换坐标轴\n  const toggleAxes = useCallback(() => {\n    setShowAxes((prev) => {\n      const newShow = !prev;\n      if (axesRef.current) {\n        axesRef.current.visible = newShow;\n      }\n      notifyToolbarChange();\n      return newShow;\n    });\n  }, [notifyToolbarChange]);\n\n  // 构建 cadRef handle\n  cadRef.current = {\n    resetView,\n    toggleWireframe,\n    toggleGrid,\n    toggleAxes,\n  };\n\n  useImperativeHandle(\n    ref,\n    () => ({\n      getToolbarGroups: () => {\n        return getCadToolbarGroups({\n          cadRef: { current: cadRef.current },\n          wireframe,\n          showGrid,\n          showAxes,\n          t,\n        });\n      },\n      onToolbarChange: (listener: () => void) => {\n        listenersRef.current.add(listener);\n        return () => {\n          listenersRef.current.delete(listener);\n        };\n      },\n    }),\n    [wireframe, showGrid, showAxes, t]\n  );\n\n  useEffect(() => {\n    if (!containerRef.current) return;\n\n    const container = containerRef.current;\n    const width = container.clientWidth;\n    const height = container.clientHeight;\n\n    // 创建 AbortController 来支持取消请求\n    const abortController = new AbortController();\n    let animationId: number;\n    let isCleanedUp = false;\n\n    // 初始化场景\n    const scene = new THREE.Scene();\n    scene.background = new THREE.Color(0x1a1a1a);\n    sceneRef.current = scene;\n\n    // 初始化相机\n    const camera = new THREE.PerspectiveCamera(45, width / height, 0.1, 10000);\n    camera.position.set(100, 100, 100);\n    cameraRef.current = camera;\n\n    // 初始化渲染器\n    const renderer = new THREE.WebGLRenderer({ antialias: true });\n    renderer.setSize(width, height);\n    renderer.setPixelRatio(window.devicePixelRatio);\n    container.appendChild(renderer.domElement);\n    rendererRef.current = renderer;\n\n    // 初始化控制器\n    const controls = new OrbitControls(camera, renderer.domElement);\n    controls.enableDamping = true;\n    controls.dampingFactor = 0.05;\n    controlsRef.current = controls;\n\n    // 添加灯光\n    const ambientLight = new THREE.AmbientLight(0xffffff, 0.6);\n    scene.add(ambientLight);\n\n    const directionalLight1 = new THREE.DirectionalLight(0xffffff, 0.8);\n    directionalLight1.position.set(1, 1, 1);\n    scene.add(directionalLight1);\n\n    const directionalLight2 = new THREE.DirectionalLight(0xffffff, 0.4);\n    directionalLight2.position.set(-1, -1, -1);\n    scene.add(directionalLight2);\n\n    // 添加网格\n    const grid = new THREE.GridHelper(200, 20, 0x444444, 0x222222);\n    grid.visible = showGrid;\n    scene.add(grid);\n    gridRef.current = grid;\n\n    // 添加坐标轴\n    const axes = new THREE.AxesHelper(100);\n    axes.visible = showAxes;\n    scene.add(axes);\n    axesRef.current = axes;\n\n    // 加载模型 - 优先使用 File 对象，回退到 fetcher\n    const ext = getExtension(url, fileName, file);\n    let loader: any;\n\n    // 创建 LoadingManager\n    const manager = new THREE.LoadingManager();\n\n    if (ext === 'dxf') {\n      loader = new DXFLoader();\n    } else if (ext === 'stl') {\n      loader = new STLLoader(manager);\n    } else if (ext === 'obj') {\n      loader = new OBJLoader(manager);\n    } else if (ext === 'gltf' || ext === 'glb') {\n      loader = new GLTFLoader(manager);\n    } else {\n      setError(t('cad.parse_failed'));\n      setLoading(false);\n      return;\n    }\n\n    // 如果有 File 对象，直接读取；否则使用 fetcher\n    const loadPromise = file\n      ? file.arrayBuffer()\n      : fetcher(url, { signal: abortController.signal }).then((response) => {\n          if (isCleanedUp) return undefined;\n          if (!response.ok) throw new Error('Failed to fetch file');\n          return response.arrayBuffer();\n        });\n\n    loadPromise\n      .then((data: ArrayBuffer | undefined) => {\n        if (isCleanedUp || !data) return;\n\n        if (ext === 'stl') {\n          const object = loader.parse(data);\n          handleLoadSuccess(object, ext, scene, camera, controls);\n        } else if (ext === 'obj') {\n          // OBJLoader 需要字符串，转换 ArrayBuffer\n          const decoder = new TextDecoder('utf-8');\n          const text = decoder.decode(data);\n          const object = loader.parse(text);\n          handleLoadSuccess(object, ext, scene, camera, controls);\n        } else if (ext === 'gltf' || ext === 'glb') {\n          loader.parse(\n            data,\n            '',\n            (gltf: any) => {\n              if (!isCleanedUp) {\n                handleLoadSuccess(gltf, ext, scene, camera, controls);\n              }\n            },\n            (err: Error) => handleLoadError(err)\n          );\n        } else if (ext === 'dxf') {\n          // DXFLoader 需要字符串\n          const decoder = new TextDecoder('utf-8');\n          const text = decoder.decode(data);\n\n          // three-dxf-loader 对某些实体（如 3D polyface mesh）会生成 undefined 顶点，\n          // 导致 THREE.BufferGeometry.setFromPoints 抛 \"reading 'x'\"。\n          // 临时 patch 过滤坏点，加载完成后立即恢复。\n          const origSetFromPoints = (THREE.BufferGeometry.prototype as any).setFromPoints;\n          (THREE.BufferGeometry.prototype as any).setFromPoints = function (points: any[]) {\n            const filtered = (points || []).filter(\n              (p: any) => p && p.x !== undefined && p.y !== undefined\n            );\n            return origSetFromPoints.call(this, filtered);\n          };\n\n          try {\n            (loader as any).loadString(\n              text,\n              (dxfData: any) => {\n                if (!isCleanedUp) {\n                  // three-dxf-loader 返回的是 { entity: Object3D }\n                  const obj = dxfData?.entity || dxfData;\n                  handleLoadSuccess(obj, ext, scene, camera, controls);\n                }\n              },\n              (err: Error) => {\n                handleLoadError(err);\n              }\n            );\n          } catch (err: any) {\n            // loadString 可能同步抛出解析错误\n            handleLoadError(err);\n          } finally {\n            (THREE.BufferGeometry.prototype as any).setFromPoints = origSetFromPoints;\n          }\n        }\n      })\n      .catch((err) => {\n        if (!isCleanedUp) {\n          handleLoadError(err);\n        }\n      });\n\n    // 处理加载成功\n    const handleLoadSuccess = (\n      object: any,\n      ext: string,\n      scene: THREE.Scene,\n      camera: THREE.PerspectiveCamera,\n      controls: OrbitControls\n    ) => {\n      if (isCleanedUp) return;\n\n      // 验证对象有效性\n      if (!object) {\n        setError(t('cad.parse_failed'));\n        setLoading(false);\n        return;\n      }\n\n      let model: THREE.Object3D;\n\n      if (ext === 'stl') {\n        // STL 返回 geometry\n        const geometry = object as THREE.BufferGeometry;\n        const material = new THREE.MeshPhongMaterial({\n          color: 0x888888,\n          flatShading: true,\n          side: THREE.DoubleSide,\n        });\n        model = new THREE.Mesh(geometry, material);\n      } else if (ext === 'gltf' || ext === 'glb') {\n        // GLTF/GLB 返回 { scene, ... }\n        model = object.scene as THREE.Object3D;\n      } else {\n        // DXF 和 OBJ 返回 Object3D\n        model = object as THREE.Object3D;\n\n        // 为没有材质的对象添加默认材质\n        model.traverse((child: THREE.Object3D) => {\n          if (child instanceof THREE.Mesh && !child.material) {\n            child.material = new THREE.MeshPhongMaterial({\n              color: 0x888888,\n              side: THREE.DoubleSide,\n            });\n          }\n        });\n      }\n\n      scene.add(model);\n      modelRef.current = model;\n\n      // 自动调整视角\n      const box = new THREE.Box3().setFromObject(model);\n      const center = box.getCenter(new THREE.Vector3());\n      const size = box.getSize(new THREE.Vector3());\n      const maxDim = Math.max(size.x, size.y, size.z);\n      const fov = camera.fov * (Math.PI / 180);\n      let cameraZ = Math.abs(maxDim / 2 / Math.tan(fov / 2));\n      cameraZ *= 1.5;\n\n      camera.position.set(center.x + cameraZ, center.y + cameraZ, center.z + cameraZ);\n      camera.lookAt(center);\n      controls.target.copy(center);\n      controls.update();\n\n      setLoading(false);\n      notifyToolbarChange();\n    };\n\n    // 处理加载错误\n    const handleLoadError = (err: Error) => {\n      if (isCleanedUp) return;\n      if (err.name === 'AbortError') {\n        return;\n      }\n      setError(t('cad.load_failed'));\n      setLoading(false);\n    };\n\n    // 动画循环\n    const animate = () => {\n      if (isCleanedUp) return;\n      animationId = requestAnimationFrame(animate);\n      controls.update();\n      renderer.render(scene, camera);\n    };\n    animate();\n\n    // 处理窗口大小变化\n    const handleResize = () => {\n      if (!container || isCleanedUp) return;\n      const newWidth = container.clientWidth;\n      const newHeight = container.clientHeight;\n      camera.aspect = newWidth / newHeight;\n      camera.updateProjectionMatrix();\n      renderer.setSize(newWidth, newHeight);\n    };\n    window.addEventListener('resize', handleResize);\n\n    // 清理\n    return () => {\n      isCleanedUp = true;\n      abortController.abort();\n      if (animationId) {\n        cancelAnimationFrame(animationId);\n      }\n      window.removeEventListener('resize', handleResize);\n\n      // 释放 THREE.js 资源\n      if (modelRef.current) {\n        disposeThreeResources(modelRef.current);\n        scene.remove(modelRef.current);\n        modelRef.current = null;\n      }\n      if (gridRef.current) {\n        gridRef.current.geometry.dispose();\n        (gridRef.current.material as any).dispose();\n        scene.remove(gridRef.current);\n        gridRef.current = null;\n      }\n      if (axesRef.current) {\n        axesRef.current.geometry.dispose();\n        (axesRef.current.material as any).dispose();\n        scene.remove(axesRef.current);\n        axesRef.current = null;\n      }\n\n      controls.dispose();\n      renderer.dispose();\n      if (container && renderer.domElement && container.contains(renderer.domElement)) {\n        container.removeChild(renderer.domElement);\n      }\n    };\n  }, [url, t, notifyToolbarChange, disposeThreeResources, file, fetcher]);\n\n  return (\n    <div ref={containerRef} className=\"rfp-relative rfp-w-full rfp-h-full rfp-bg-media-bg\">\n      {/* 错误覆盖层 */}\n      {error && (\n        <div className=\"rfp-absolute rfp-inset-0 rfp-flex rfp-items-center rfp-justify-center rfp-bg-surface-3 rfp-z-10\">\n          <div className=\"rfp-text-center\">\n            <p className=\"rfp-text-fg-primary\">{error}</p>\n          </div>\n        </div>\n      )}\n\n      {/* 加载覆盖层 */}\n      {loading && (\n        <div className=\"rfp-absolute rfp-inset-0 rfp-flex rfp-items-center rfp-justify-center rfp-bg-surface-3 rfp-z-10\">\n          <div className=\"rfp-text-center\">\n            <div className=\"rfp-inline-block rfp-w-8 rfp-h-8 rfp-border-4 rfp-border-spinner-track rfp-border-t-spinner-head rfp-rounded-full rfp-animate-spin\" />\n            <p className=\"rfp-mt-4 rfp-text-fg-secondary\">{t('cad.loading')}</p>\n          </div>\n        </div>\n      )}\n    </div>\n  );\n});\n\nCadRenderer.displayName = 'CadRenderer';\n"],"names":["LM","u","I","P","M","J","r","K","QM","EM","UM","w","zM","g","tM","VM","aM","C","y","l","s","j","T","X","S","a","RM","e","q","OM","nM","uM","F","rM","L","_","$","Q","o","R","MM","B","IM","D","x","Y","A","G","Z","E","U","d","W","c","b","KM","PM","wM","vM","eM","n","qM","_M","MI","CM","gM","yM","lM","sM","m","TM","SM","jM","XM","BM","DM","z","II","KI","N","YM","AM","GM","t","xM","f","i","dM","H","PI","wI","ZM","bM","p","WM","cM","CI","pM","JM","iM","hM","h","TI","heicLoaderCH_raQNn","avifLoaderBP3fgcMm","tiffLoaderCmUAD1vO","rawLoader0mLvxCNp","psdLoaderD5CkupyY","jp2LoaderBnQPMbD","SI","oM","O","HM","V","mM","kM","jI","XI","LocaleContext","createContext","LocaleProvider","locale","messages","children","value","useMemo","createTranslator","jsx","fallbackTranslator","getFallbackTranslator","useTranslator","ctx","useContext","useLocale","ThemeContext","ThemeProvider","theme","useResolvedTheme","defaultValue","url","init","RequestContext","RequestProvider","requestInit","requestHandler","shouldFetchAsBlob","createFetcher","useFetcher","useResolvedUrl","file","fetcher","needBlob","blobUrl","setBlobUrl","useState","createdRef","useRef","useEffect","cancelled","fetchAsBlobUrl","next","err","UnsupportedRenderer","fileName","fileType","onDownload","jsxs","FileQuestion","Download","useKeyboardNavigation","mode","currentIndex","totalFiles","onNavigate","onClose","rootRef","handlersRef","handleKeyDown","el","useThemeMode","systemDark","setSystemDark","mql","handler","ToolbarButton","icon","label","onClick","disabled","active","ariaKeyshortcuts","stateClass","renderToolbarItems","groups","dividerClass","group","gi","arr","React","item","ii","FilePreviewToolbar","toolGroups","showClose","showDownload","showCloseButton","actionGroups","motion","RendererError","error","onRetry","AlertCircle","RotateCw","RendererErrorBoundary","props","__publicField","errorInfo","_b","_a","RendererLoading","FilePreviewRenderer","currentFile","customRenderer","customRendererContext","onError","reset","Suspense","NAV_HIDE_DELAY","NavArrows","containerRef","hasPrev","hasNext","onPrev","onNext","resetKey","visible","setVisible","timerRef","scheduleHide","useCallback","show","prev","Fragment","ChevronLeft","ChevronRight","ImageRenderer","lazy","index$i","PdfRenderer","index$h","DocxRenderer","index$g","XlsxRenderer","index$f","PptxRenderer","index$e","MsgRenderer","index$d","EpubRenderer","index$c","MobiRenderer","index$b","VideoRenderer","index$a","AudioRenderer","index$9","MarkdownRenderer","index$8","JsonRenderer","index$7","CsvRenderer","index$6","XmlRenderer","index$5","SubtitleRenderer","index$4","ZipRenderer","index$3","TextRenderer","index$2","FontRenderer","index$1","CadRenderer","index","BUILTIN_RENDERERS","MAX_ZIP_NESTING_DEPTH","FilePreviewContent","FilePreviewContentInner","files","customRenderers","zipNestingDepth","userMessages","headless","onCustomEvent","_requestInit","_requestHandler","_shouldFetchAsBlob","normalizedFiles","normalizeFiles","resolvedUrl","renderer","getFileType","resolvedTheme","contentRef","rendererInstanceRef","rendererToolbarGroups","setRendererToolbarGroups","cleanupRef","setupRenderer","initialGroups","unsubscribe","interval","rendererRef","emitCustom","name","payload","customCtx","handleDownload","downloadFileWithFetcher","resolveShowClose","rendererConfig","RendererComponent","rendererProps","FilePreviewModal","isOpen","originalOverflow","originalPaddingRight","scrollbarWidth","modalContent","AnimatePresence","createPortal","FilePreviewEmbed","width","height","className","style","configurePdfjs","options","configurePdfWorker","pdfjsLib","VERSION","packageJson","f$1","y$2","y$1","i$1","message","detail","showIcon","OriginalSizeIcon","forwardRef","fileSize","ref","loaded","setLoaded","setError","decoding","setDecoding","decodeProgress","setDecodeProgress","decodeError","setDecodeError","imageSrc","setImageSrc","currentPage","setCurrentPage","totalPages","setTotalPages","position","setPosition","isDragging","setIsDragging","dragStart","setDragStart","zoom","setZoom","rotation","setRotation","naturalSize","setNaturalSize","imgRef","blobUrlRef","fileBlobRef","loaderRef","pageCacheRef","isTouchDevice","touchStartDistance","touchStartZoom","touchStartPos","lastTapTime","listenersRef","notifyToolbarChange","listener","mimeType","detectImageFormat","loader","getLoaderForMimeType","fileBlob","response","metadata","decodeOptions","percent","decodedBlob","shouldUseWorker","decodeInWorker","handlePageChange","page","cached","firstKey","oldUrl","handleLoad","img","newNaturalSize","containerWidth","containerHeight","scaleX","scaleY","newZoom","clampPosition","pos","currentZoom","container","containerW","containerH","imgW","imgH","margin","rangeX","rangeY","handleError","handleDoubleClick","handleTouchStart","touches","now","distance","handleTouchMove","scale","rect","centerX","centerY","zoomScale","handleTouchEnd","handleWheelNative","mouseX","mouseY","delta","handleMouseDown","handleMouseMove","handleMouseUp","handleZoomIn","handleZoomOut","handleRotateLeft","handleRotateRight","handleFitToWidth","handleOriginalSize","handleReset","getToolbarGroups","ZoomOut","ZoomIn","Scan","RotateCcw","RefreshCw","useImperativeHandle","Loader2","installUint8ArrayHexBase64Polyfill","pdfWorkerPrepared","preparePdfWorker","workerModule","configuredOptions","getPdfDocumentOptions","numPages","setNumPages","showOutline","setShowOutline","isLoading","setIsLoading","outline","setOutline","activeOutlineItem","setActiveOutlineItem","outlinePageMapRef","scrollContainerRef","pdfDocRef","pageStatesRef","observerRef","renderPage","pageNumber","state","viewport","canvas","renderTask","clearPageCanvas","buildOutlinePageMap","items","pdfDoc","depth","itemKey","dest","namedDest","_c","updateActiveOutlineByPage","closestItem","closestDistance","itemPage","initPagePlaceholders","wrapper","pageDiv","loadPdf","loadingTask","total","outlineData","handleScroll","scrollTop","scrollCenter","currentVisiblePage","minDistance","containerRect","pageCenter","entries","entry","timer","handleOutlineClick","pageRef","targetPage","renderOutlineItems","isActive","handlePrevPage","handleNextPage","pages","handleToggleOutline","Menu","PAGE_HEIGHT","PAGE_PADDING_Y","PAGE_PADDING_X","PAGE_CONTENT_HEIGHT","PAGE_GAP","contentStyle","html","setHtml","loading","setLoading","setPages","measureRef","arrayBuffer","result","mammoth","paginate","currentPageUsed","child","blocks","pageHtml","Element","tag","key","eventNames","fen","oen","eventName","evt","k","offsetTop","offsetLeft","offsetHeight","offsetWidth","v","eles","ele","arg","cls","flag","content","keys","alphabets","stringAt","str","cindex","last","indexAt","ret","exponet","expr2xy","src","xy2expr","expr2expr","xn","yn","condition","CellRange","sri","sci","eri","eci","args","ri","ci","cb","rowFilter","other","addRet","dsr","dsc","der","dec","refs","Selector$1","Scroll","History","data","currentd","undoItems","redoItems","Clipboard","cellRange","Filter","operator","Sort","order","AutoFilter","filters","sort","it","filter","getCell","rset","fset","cell","ctext","cnt","Merges","cr","type","cbWithin","range","rn","cn","it1","merges","merge","cloneDeep","obj","mergeDeep","object","sources","source","equals","obj1","obj2","v1","v2","ai","sum","objOrAry","size","deleteProperty","property","oldv","rangeReduceIf","min","max","inits","initv","ifv","getv","rangeSum","rangeEach","arrayEquals","a1","a2","digits","numberCalc","al1","al2","num1","num2","helper","Rows","len","row","idx","exceptSet","what","text","srcCellRange","dstCellRange","autofill","dsri","dsci","deri","deci","drn","dcn","isAdd","dn","jj","nri","nci","ncell","word","ncellmm","ndata","rndata","col","cells","ks","Cols","indexWidth","minWidth","en","$languages","$messages","translate","lang","tf","clearLangList","rules","returnMessage","Validator","required","Validation","validator","nrefs","Validations","errors","defaultSettings","toolbarHeight","bottombarHeight","hasOwnProperty","canPaste","dst","srn","scn","copyPaste","rows","cutPaste","clipboard","setStyleBorder","bss","styles","cstyle","setStyleBorders","color","selector","multiple","ns","mergeIndexes","mri","mci","mrl","mcl","getCellRowByY","scrollOffsety","fsh","frset","top","getCellColByX","scrollOffsetx","cols","fsw","left","DataProxy","settings","Selector","copyText","rowData","cellText","txt","lines","srcRange","cri","cci","nfont","autoFilter","oldCell","oldText","vIndex","x1","y1","scroll","exceptRowSet","left0","top0","fary","oldAry","si","rsize","csize","freeze","fci","fri","cellStyle","history","validations","view","showToolbar","showBottomBar","exceptRows","exceptRowTH","viewRange","rlen","clen","frary","offset","rowHeight","colWidth","nstyle","bind","target","fn","unbind","unbindClickoutside","bindClickoutside","mouseMoveUp","movefunc","upfunc","calTouchDirection","spanx","spany","direction","bindTouch","move","end","startx","starty","pageX","pageY","createEventEmitter","listeners","on","callback","push","currentListener","create","fire","exec","removeListener","remove","once","execCalllback","removeAllListeners","cssPrefix","Resizer","vertical","line","moving","hoverEl","lineEl","unhideHoverEl","startEvt","cRect","Scrollbar","scrollLeft","contentDistance","cssKey","selectorHeightBorderWidth","startZIndex","SelectorElement","useHideInput","of","calBRAreaOffset","ftwidth","ftheight","calTAreaOffset","calLAreaOffset","setBRAreaOffset","br","setTLAreaOffset","tl","setTAreaOffset","setLAreaOffset","setLClipboardOffset","setBRClipboardOffset","setTLClipboardOffset","setTClipboardOffset","setAllAreaOffset","setAllClipboardOffset","freezeHeight","freezeWidth","coffset","indexesUpdated","lastri","lastci","ern","ecn","inputMovePrev","filterItems","inputMoveNext","inputEnter","inputKeydownHandler","keyCode","Suggest","itemClick","title","input","Icon","addMonth","date","step","weekday","monthDays","year","month","cdate","startDate","datess","Calendar","week","cvalue","bodyEl","trs","tds","Datepicker","calendar","resetTextareaSize","inputText","textlineEl","textEl","areaOffset","txts","maxTxtSize","fontWidth","tlineWidth","maxWidth","h1","twidth","insertText","itxt","selectionEnd","ntxt","keydownEventHandler","altKey","inputEventHandler","suggest","start","setTextareaRange","setText","suggestItemClick","sit","eit","resetSuggestItems","dateFormat","Editor","formulas","viewFn","suggestPosition","areaEl","elOffset","sOffset","datepicker","Button","dpr","thinLineWidth","npx","px","npxLine","DrawBox","padding","bottom","right","align","drawFontLine","tx","ty","valign","blheight","blwidth","floffset","Draw","mtxt","box","attr","textWrap","font","strike","underline","biw","ntxts","txtWidth","textLine","txtHeight","xys","borderTop","borderRight","borderBottom","borderLeft","sx","sy","dtextcb","bgcolor","baseFonts","fontSizes","getFontSizePxByPt","pt","fontSize","infixExprToSuffixExpr","operatorStack","stack","subStrs","fnArgType","fnArgOperator","fnArgsLen","oldc","c1","ex","ey","rangelen","nc","evalSubExpr","subExpr","cellRender","fl","expr","evalSuffixExpr","srcStack","formulaMap","cellList","fc","formula","params","getCellText","_cell","baseFormulas","ary","formulam","formatStringRender","formatNumberRender","first","parts","baseFormats","formatm","cellPaddingWidth","tableFixedHeaderCleanStyle","tableGridStyle","tableFixedHeaderStyle","getDrawBox","rindex","yoffset","renderCell","draw","sortedRowMap","nrindex","frozen","dbox","renderAutofilter","afRange","renderContent","fw","fh","filteredTranslateFunc","exceptRowTotalHeight","renderSelectedHeaderCell","renderFixedHeaders","sumHeight","sumWidth","nty","ntx","renderFixedLeftTopCell","renderContentGrid","ch","cw","renderFreezeHighlightLine","ftw","fth","theight","Table","vr","freezeViewRange","PAGER_SIZES","PAGER_ORIENTATIONS","inches2px","inc","btnClick","pagerSizeChange","paper","ps","pagerOrientationChange","Print$1","iwidth","iheight","mViewRange","th","yo","wrap","rh","yof","iframe","contentWindow","idoc","menuItems","buildMenuItem","buildMenu","ContextMenu$1","isHide","hideEl","vhf","tooltip","elBox","Item","shortcut","tip","DropdownItem","Dropdown","showArrow","placement","contentEl","buildItemWithIcon","iconName","DropdownAlign","aligns","naligns","Align","Valign","ToggleItem","Autofilter","Bold","Italic","Strike","Underline","themeColorPlaceHolders","themeColors","standardColors","buildTd","ColorPalette","table","DropdownColor","colorPalette","lineTypes","DropdownLineType","beforei","lineTypeEls","iti","buildTable","BorderPalette","DropdownBorder","borderPalette","Border","IconItem","Clearformat","Paintformat","TextColor","FillColor","DropdownFontSize","nfontSizes","DropdownFontsize","DropdownFont","nfonts","Font","DropdownFormat","nformats","DropdownFormula","nformulas","Format","Freeze","Merge","Redo","Undo","Print","Textwrap","moreBtns","More","DropdownMore","buildDivider","initBtns2","marginLeft","marginRight","moreResize","btns","moreEl","btns2","sumWidth2","list1","list2","Toolbar","widthFn","FontSize","Formula","format","Modal","clientHeight","clientWidth","FormInput","hint","FormSelect","getTitle","change","patterns","FormField","rule","labelWidth","fieldLabelWidth","ModalValidation","mf","rf","cf","minvf","maxvf","svf","vf","action","attrs","field","clsName","buildSortItem","buildFilterBody","filterbEl","filterValues","resetFilterHeader","filterhEl","values","SortFilter","sortAscEl","sortDescEl","tindex","xtoast","dimmer","throttle","func","wait","timeout","that","scrollbarMove","verticalScrollbar","horizontalScrollbar","tableOffset","selectorSet","toolbar","contextMenu","selectorMove","overlayerMousemove","offsetX","offsetY","rowResizer","colResizer","tableEl","tRect","overlayerMousescroll","deltaY","deltaX","loopValue","vFunc","moveY","moveX","horizontal","tempY","tempX","temp","overlayerTouch","verticalScrollbarSet","erth","horizontalScrollbarSet","sheetFreeze","editor","fwidth","fheight","sheetReset","overlayerEl","overlayerCEl","tOffset","vRect","clearClipboard","copy","cut","paste","msg","cdata","hideRowsOrCols","unhideRowsOrCols","autofilter","toolbarChangePaintformatPaste","overlayerMousedown","sortFilter","isAutofillEl","cellRect","editorSetOffset","sPosition","editorSet","verticalScrollbarMove","horizontalScrollbarMove","rowResizerFinished","colResizerFinished","dataSetCellText","insertDeleteRowColumn","toolbarChange","sortFilterChange","sheetInitEvents","modalValidation","itext","ctrlKey","shiftKey","metaKey","Sheet","targetEl","showContextmenu","ContextMenu","eventMap","click","Bottombar","addFunc","swapFunc","deleteFunc","updateFunc","nindex","activeEl","deleteEl","Spreadsheet","selectors","rootEl","oldIndex","ds","nd","sheetIndex","spreadsheet","spreadsheetRef","sheetDataRef","resizeObserverRef","resizeTimeoutRef","lastDimensionsRef","calculateDimensions","rawWidth","rawHeight","mountSpreadsheet","isMobile","isInitialRender","updateDimensions","newDimensions","lastDimensions","widthDiff","heightDiff","isMounted","loadExcel","workbook","ExcelJS","sheetData","convertWorkbookToSpreadsheetData","errorMsg","tiled","slideCount","setSlideCount","previewerRef","arrayBufferRef","parentWidth","reinitializePreviewer","currentDimensions","previewer","timeoutId","loadPptx","hiddenContainer","tempPreviewer","count","formatRecipients","recipients","email","formatDate","dateStr","decodeHtmlBody","fields","emptyBodyText","formatMessageClass","messageClass","labelStyle","rowStyle","iconWrapStyle","iconStyle","valueStyle","setFields","fileData","MsgReader","toStr","ccStr","bccStr","senderName","senderEmail","sender","sentDate","receivedDate","createdDate","lastModified","subject","attachments","bodyHtml","messageId","fieldsAny","importance","importanceLabel","sensitivity","sensitivityLabel","User","Users","Clock","Tag","Mail","Paperclip","sizeStr","Hash","styleEl","A4_WIDTH","viewerRef","bookRef","renditionRef","totalLocationsRef","lastCfiRef","isFullWidthRef","isFullWidth","setIsFullWidth","toc","setToc","showToc","setShowToc","activeTocHref","setActiveTocHref","currentChapter","setCurrentChapter","totalChapters","setTotalChapters","tocRef","handlePrev","handleNext","scrollRafRef","onScrollRef","_e","mgr","reattachScrollListener","tryAttach","toggleFullWidth","newVal","viewer","rendition","toggleToc","handleTocClick","href","List","Minimize2","Maximize2","loadTimer","load","bookInput","book","ePub","loc","cur","nav","location","spineHref","matches","collect","base","resizeTimeout","doResize","observer","renderTocItems","READER_CSS","hostRef","viewRef","reportProgress","current","host","progressReported","sectionPagesMap","currentView","sectionCount","sectionIdx","curSectionPages","pagesBefore","atEnd","sections","_d","curSize","ratio","est","_f","tocItem","actualTotal","_h","_g","frac","res","blob","BROWSER_UNSUPPORTED_EXTS","getVideoType","ext","getVideoExt","videoRef","playerRef","videoExt","videoElement","videoType","player","videojs","videoEl","useAudioPlayer","audioRef","isPlaying","setIsPlaying","currentTime","setCurrentTime","duration","setDuration","volume","setVolumeState","isMuted","setIsMuted","isLoop","setIsLoop","audio","onTimeUpdate","onDurationChange","onCanPlay","onWaiting","onPlaying","onPlay","onPause","onEnded","togglePlay","seek","time","skip","seconds","setVolume","vol","clamped","toggleMute","toggleLoop","formatTime","minutes","MarqueeText","innerRef","overflow","setOverflow","scrollDist","setScrollDist","check","inner","tw","gap","totalScroll","dur","Tonearm","showVolume","setShowVolume","isCompact","setIsCompact","controlScale","setControlScale","dragTime","setDragTime","volumeRef","volumeTimerRef","displayTime","progress","checkSize","baseWidth","minScale","handleClickOutside","handleVolumeEnter","handleVolumeLeave","VolumeIcon","VolumeX","Volume1","Volume2","vinylScale","vinylBase","vinylHeightBase","finalVinylScale","Repeat","SkipBack","Pause","Play","SkipForward","useShikiHighlight","code","lineHtmls","setLineHtmls","lineNumbersTransformer","node","codeToHtml","out","extractLines","codeElement","lineElements","useCopy","copied","setCopied","handleCopy","textarea","InlineCopyButton","Check","Copy","FloatingCopyButton","ShikiCodeBlock","setContent","viewMode","setViewMode","sourceHtml","controller","fetchTextUtf8","toggleViewMode","Code","Eye","ReactMarkdown","remarkGfm","remarkMath","rehypeRaw","rehypeKatex","_node","inline","match","codeString","alt","checked","createScanner","ignoreTrivia","tokenOffset","token","lineNumber","lineStartOffset","tokenLineStartOffset","prevTokenLineStartOffset","scanError","scanHexDigits","exact","newPosition","scanNumber","isDigit","scanString","ch3","isLineBreak","scanNext","isWhiteSpace","safeLength","commentClosed","isUnknownContentCharacter","scanNextNonTrivia","CharacterCodes","maxCachedValues","ParseOptions","parse","currentProperty","currentParent","previousParents","onValue","visit","array","length","visitor","_scanner","_jsonPath","suppressedCallbacks","toNoArgVisit","visitFunction","toOneArgVisit","toOneArgVisitWithPath","toBeginVisit","toEndVisit","onObjectBegin","onObjectProperty","onObjectEnd","onArrayBegin","onArrayEnd","onLiteralValue","onSeparator","onComment","disallowComments","allowTrailingComma","skipUntilAfter","skipUntil","parseString","isValue","parseLiteral","tokenValue","parseProperty","parseValue","parseObject","needsComma","parseArray","isFirstElement","ScanError","SyntaxKind","parser.parse","ParseErrorCode","DARK_COLORS","LIGHT_COLORS","JsonNode","keyName","defaultExpanded","colors","expanded","setExpanded","indent","toggle","renderPrimitive","isArray","openBracket","closeBracket","ChevronDown","pickColors","setData","parsed","parseJsonc","loadCsv","parseCsv","guessCsvDelimiter","convertCsvToSpreadsheetData","prettyPrintXml","xml","doc","serialized","indentXml","PADDING","reg","formatted","pad","padded","raw","FORMAT_BY_EXT","getFormat","parseSubtitle","isLyric","meta","dotHover","cue","formatSubtitleTime","wi","ResizableSplit","initialLeftWidth","minLeftWidth","maxLeftWidth","minRightWidth","storageKey","desktopMedia","mobileTabMode","leftTabLabel","rightTabLabel","leftWidth","setLeftWidth","saved","dragging","setDragging","isDesktop","setIsDesktop","activeTab","setActiveTab","tab","mq","handleMove","cap","effectiveMax","newW","handleUp","prevCursor","prevSelect","handleDividerDown","LazyFilePreviewContent","FilePreviewContent$1","resolveIcon","ft","FileImage","FileText","FileCode","FileIcon","TreeItem","selectedPath","onToggle","onSelect","onHover","onLeave","isSelected","handleEnter","FolderOpen","Folder","formatFileSize","nestingDepth","onStatsChange","zip","setZip","tree","setTree","selected","setSelected","previewLoading","setPreviewLoading","previewError","setPreviewError","hoverTip","setHoverTip","onStatsChangeRef","splitRef","buf","loadZip","listZipEntries","root","buildZipTree","totalStats","dirs","walk","handleToggle","path","handleHover","handleLeave","handleSelect","mime","inferMimeType","readZipEntryBlob","previewFiles","leftPane","rightPane","wordWrap","setWordWrap","htmlPreview","setHtmlPreview","language","getLanguageFromFileName","toggleWordWrap","toggleHtmlPreview","WrapText","MAGIC_WOFF2","MAGIC_WOFF","MAGIC_OTTO","MAGIC_TTF1","MAGIC_TRUE","detectMagic","DEFAULT_SAMPLES","SIZES","setFont","setMetadata","metadataStatus","setMetadataStatus","customText","setCustomText","renderMode","setRenderMode","fontFaceRef","mounted","detectFormat","formatLabel","magic","loadFontFace","faceBuffer","face","faceErr","loadMetadata","fontData","rawNames","platformTables","pickName","val","flat","facePromise","metadataPromise","metaErr","displayText","metadataLoadingLabel","metadataUnavailableLabel","showMetaPlaceholder","metaPlaceholder","canRenderCanvas","FontPreviewLine","wrapperRef","canvasRef","drawCanvas","lineHeight","fillColor","wrapLine","wrappedLines","seg","getCadToolbarGroups","Box","Grid3x3","Axis3d","sceneRef","cameraRef","controlsRef","modelRef","gridRef","axesRef","cadRef","wireframe","setWireframe","showGrid","setShowGrid","showAxes","setShowAxes","getExtension","disposeThreeResources","mat","disposeMaterial","material","resetView","THREE","center","maxDim","fov","cameraZ","toggleWireframe","newWireframe","toggleGrid","newShow","toggleAxes","abortController","animationId","isCleanedUp","scene","camera","controls","OrbitControls","ambientLight","directionalLight1","directionalLight2","grid","axes","manager","DXFLoader","STLLoader","OBJLoader","GLTFLoader","handleLoadSuccess","gltf","handleLoadError","origSetFromPoints","points","filtered","dxfData","model","geometry","animate","handleResize","newWidth","newHeight"],"mappings":"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","x_google_ignoreList":[32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,128,129,130,131]}